Bladeren bron

translations integrated, hero images, image classes

trendschau 5 jaren geleden
bovenliggende
commit
d273c5ea88

BIN
media/live/altdruck.png


BIN
media/live/ivan-bandura-cnsuw8uth-e-unsplash.jpeg


BIN
media/live/knowledge.jpeg


BIN
media/original/altdruck.png


BIN
media/original/ivan-bandura-cnsuw8uth-e-unsplash.jpeg


BIN
media/original/knowledge.jpeg


BIN
media/thumbs/altdruck.png


BIN
media/thumbs/ivan-bandura-cnsuw8uth-e-unsplash.jpeg


BIN
media/thumbs/knowledge.jpeg


+ 1 - 0
system/Controllers/PageController.php

@@ -86,6 +86,7 @@ class PageController extends Controller
 		{
 			$home = true;
 			$item = Folder::getItemForUrl($navigation, $uri->getBasePath(), $uri->getBasePath());
+			$urlRel = $uri->getBasePath();		
 		}
 		else
 		{

+ 2 - 1
system/Controllers/SettingsController.php

@@ -26,7 +26,7 @@ class SettingsController extends Controller
 		$locale				= isset($_SERVER['HTTP_ACCEPT_LANGUAGE']) ? substr($_SERVER["HTTP_ACCEPT_LANGUAGE"],0,2) : 'en';
 		$users				= $user->getUsers();
 		$route 				= $request->getAttribute('route');
-		
+
 		return $this->render($response, 'settings/system.twig', array('settings' => $settings, 'copyright' => $copyright, 'languages' => $languages, 'locale' => $locale, 'formats' => $defaultSettings['formats'] ,'users' => $users, 'route' => $route->getName() ));
 	}
 	
@@ -62,6 +62,7 @@ class SettingsController extends Controller
 					'copyright' 		=> $newSettings['copyright'],
 					'year'				=> $newSettings['year'],
 					'language'			=> $newSettings['language'],
+					'langattr'			=> $newSettings['langattr'],
 					'editor' 			=> $newSettings['editor'], 
 					'formats'			=> $newSettings['formats'],
 					'headlineanchors'	=> isset($newSettings['headlineanchors']) ? $newSettings['headlineanchors'] : null,

+ 22 - 0
system/Extensions/ParsedownExtension.php

@@ -321,6 +321,28 @@ class ParsedownExtension extends \ParsedownExtra
 
         return $Element;
     }
+
+    protected function paragraph($Line)
+    {
+        $paragraph = array(
+            'type' => 'Paragraph',
+            'element' => array(
+                'name' => 'p',
+                'handler' => array(
+                    'function' => 'lineElements',
+                    'argument' => $Line['text'],
+                    'destination' => 'elements',
+                ),
+            ),
+        );
+
+        if(isset($Line['text'][1]) && $Line['text'][0] == '!' && $Line['text'][1] == '[')
+        {
+            $paragraph['element']['attributes']['class'] = 'p-image';
+        }
+        return $paragraph;
+    }
+
     
     # Inline Math
     # check https://github.com/BenjaminHoegh/ParsedownMath

+ 1 - 0
system/Models/Validation.php

@@ -205,6 +205,7 @@ class Validation
 		$v->rule('regex', 'author', '/^[\pL_ \-]*$/u');
 		$v->rule('integer', 'year');
 		$v->rule('length', 'year', 4);
+		$v->rule('length', 'langattr', 2);		
 		$v->rule('in', 'editor', ['raw', 'visual']);
 		$v->rule('values_allowed', 'formats', $formats);
 		$v->rule('in', 'copyright', $copyright);

+ 70 - 54
system/Settings.php

@@ -38,15 +38,21 @@ class Settings
 			}
 		}
 
-	    # i18n
-	    # load the strings of the set language
-	    $language = $settings['language'];
-      $theme = $settings['theme'];
-      $plugins = [];
-      if(isset($settings['plugins'])){
-        $plugins = $settings['plugins'];
-      }
-	    $settings['labels'] = self::getLanguageLabels($language, $theme, $plugins);
+		# let us load translations only for admin area to improve performance for frontend
+		$uri = $_SERVER[REQUEST_URI];
+		if(isset($uri) && (strpos($uri,'/tm/') !== false OR strpos($uri,'/setup') !== false))
+		{
+		    # i18n
+		    # load the strings of the set language
+		    $language = $settings['language'];
+		    $theme = $settings['theme'];
+		    $plugins = [];
+		    if(isset($settings['plugins']))
+		    {
+	        	$plugins = $settings['plugins'];
+	      	}
+	      	$settings['labels'] = self::getLanguageLabels($language, $theme, $plugins);
+		}
 
 		# We know the used theme now so create the theme path 
 		$settings['themePath'] = $settings['rootPath'] . $settings['themeFolder'] . DIRECTORY_SEPARATOR . $settings['theme'];
@@ -72,6 +78,7 @@ class Settings
 			'author'								=> 'Unknown',
 			'copyright'								=> 'Copyright',
 			'language'								=> 'en',
+			'langattr'								=> 'en',
 			'startpage'								=> true,
 			'rootPath'								=> $rootPath,
 			'themeFolder'							=> 'themes',
@@ -85,7 +92,7 @@ class Settings
 			'contentFolder'							=> 'content',
 			'cache'									=> true,
 			'cachePath'								=> $rootPath . 'cache',
-			'version'								=> '1.3.5',
+			'version'								=> '1.3.6',
 			'setup'									=> true,
 			'welcome'								=> true,
 			'images'								=> ['live' => ['width' => 820], 'thumbs' => ['width' => 250, 'height' => 150]],
@@ -113,37 +120,61 @@ class Settings
 
     	# loads the system strings of the set language
 		$yaml = new Models\WriteYaml();
-    $system_labels = $yaml->getYaml('system/author/languages', $language.'.yaml');
-
-    # loads the theme strings of the set language
-    $theme_labels = [];
-    $theme_language_folder = 'themes/'.$theme.'/languages';
-    if (file_exists($theme_language_folder)) {
-      $theme_labels = $yaml->getYaml($theme_language_folder, $language.'.yaml');
-    }
-
-    # loads the plugins strings of the set language
-    $plugins_labels = [];
-    if(!empty($plugins)){
-      $plugin_labels = [];
-      foreach($plugins as $name => $value){
-        $plugin_language_folder = 'plugins/'.$name.'/languages';
-        if (file_exists($theme_language_folder)) {
-          $plugin_labels[$name] = $yaml->getYaml($plugin_language_folder, $language.'.yaml');
-        }
-      }
-      $plugins_labels = [];
-      foreach($plugin_labels as $key => $value){
-        $plugins_labels = array_merge($plugins_labels, $value);
-      }
-    }
-
-    # Combines arrays of system languages, themes and plugins
-    $labels = array_merge($system_labels, $theme_labels, $plugins_labels);
+    	$system_labels = $yaml->getYaml('system' . DIRECTORY_SEPARATOR . 'author' . DIRECTORY_SEPARATOR . 'languages', $language . '.yaml');
+
+    	# loads the theme strings of the set language
+    	$theme_labels = [];
+    	$theme_language_folder = 'themes' . DIRECTORY_SEPARATOR . $theme . DIRECTORY_SEPARATOR . 'languages' . DIRECTORY_SEPARATOR;
+    	$theme_language_file = $language . '.yaml';
+    	if (file_exists($theme_language_folder . $theme_language_file))
+    	{
+      		$theme_labels = $yaml->getYaml($theme_language_folder, $theme_language_file);
+    	}
+
+    	# loads the plugins strings of the set language
+    	$plugins_labels = [];
+    	if(!empty($plugins))
+    	{
+      		$plugin_labels = [];
+      		foreach($plugins as $name => $value)
+      		{
+        		$plugin_language_folder = 'plugins' . DIRECTORY_SEPARATOR . $name . DIRECTORY_SEPARATOR . 'languages' . DIRECTORY_SEPARATOR;
+        		$plugin_language_file = $language . '.yaml';
+
+        		if (file_exists($plugin_language_folder . $plugin_language_file))
+        		{
+          			$plugin_labels[$name] = $yaml->getYaml($plugin_language_folder, $plugin_language_file);
+        		}
+      		}
+      		foreach($plugin_labels as $key => $value)
+      		{
+        		$plugins_labels = array_merge($plugins_labels, $value);
+      		}
+    	}
+
+    	# Combines arrays of system languages, themes and plugins
+    	$labels = array_merge($system_labels, $theme_labels, $plugins_labels);
 
 		return $labels;
 	}
 
+  	public function whichLanguage()
+  	{
+    	# Check which languages are available
+    	$langs = [];
+    	$path = __DIR__ . '/author/languages/*.yaml';
+    	
+    	foreach (glob($path) as $filename) 
+    	{
+      		$langs[] = basename($filename,'.yaml');
+    	}
+    
+    	# Detect browser language
+    	$accept_lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
+    	$lang = in_array($accept_lang, $langs) ? $accept_lang : 'en';
+
+    	return $lang;
+  	}
 
 	public static function getObjectSettings($objectType, $objectName)
 	{
@@ -155,28 +186,12 @@ class Settings
 
 		return $objectSettings;
 	}
-
-  public function whichLanguage()
-  {
-    # Check which languages are available
-    $langs = [];
-    $path = __DIR__ . '/author/languages/*.yaml';
-    foreach (glob($path) as $filename) {
-      $langs[] = basename($filename,'.yaml');
-    }
-    
-    # Detect browser language
-    $accept_lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
-    $lang = in_array($accept_lang, $langs) ? $accept_lang : 'en';
-
-    return $lang;
-  }
   
 	public static function createSettings()
 	{
 		$yaml = new Models\WriteYaml();
 
-    $language = self::whichLanguage();
+    	$language = self::whichLanguage();
     
 		# create initial settings file with only setup false
 		if($yaml->updateYaml('settings', 'settings.yaml', array('setup' => false, 'language' => $language)))
@@ -198,6 +213,7 @@ class Settings
 									'title' => true,
 									'copyright' => true,
 									'language' => true,
+									'langattr' => true,
 									'startpage' => true,
 									'author' => true,
 									'year' => true,

+ 148 - 40
system/author/languages/de.yaml

@@ -1,101 +1,209 @@
-# Deutsch
+# English
 ACCOUNT: Account
 ACTIVE: Aktiv
-ACTUAL_PASSWORD: Actuelles Passwort
-ADD_FILE: + Datei
+ACTUAL_PASSWORD: Aktuelles Passwort
+ADD: hinzufügen
+ADD_CONTENT_BLOCK: + Inhalts-Block
+ADD_DEFINITION: + Definition
+ADD_FILE: + Seite
 ADD_FOLDER: + Ordner
-ADD_FOLDER_TO_BASE_LEVEL: add folder to base level
-ADD_ITEM: add item
+ADD_FOLDER_TO_BASE_LEVEL: + Ordner in Basis-Ebene
+ADD_ITEM: + Element
+ADD_LEFT_COLUMN: + Linke Spalte
+ADD_RIGHT_COLUMN: + Rechte Spalte
+ADD_ROW_ABOVE: + Reihe oberhalb
+ADD_ROW_BELOW: + Reihe unterhalb
 ALL_USERS: Alle Nutzer
+ALT_TEXT: Alt-Text
 AUTHOR: Autor
-BACK_TO_STARTPAGE: Zur Startseite
-BY: Von
-CODE: code
-CONTENT: Inhalte
+BACK_TO_STARTPAGE: Zurück zur Startseite
+BOLD: fett
+BOTTOM: Unten
+BROWSE: WÄHLEN
+BULLET_LIST: Auflistung
+BY: von
+CANCEL: abbrechen
+CAPTION: Bild-Unterschrift
+CELL: Zelle
+CENTER: Mitte
+CHECK: prüfen
+CHOOSE_FILE: Datei wählen
+CLASS: Class
+CLOSE_LIBRARY: Medialib schließen
+CODE: Code
+COG: Einstellungen
+CONTENT: Inhalt
 COPYRIGHT: Copyright
-CREATE_NEW_USER: Neuen Nutzer erstellen
-CREATE_USER: Nutzer erstellen
-DEFINITION: Definition
-DELETE: Löschen
+CREATED_AT__READ_ONLY_: Erstellt am (nur lesen)
+CREATED_AT__READONLY_: Erstellt am (nur lesen)
+CREATE_NEW_USER: + Neuen Nutzer
+CREATE_USER: + Nutzer
+CROSS: Kreuz
+CUSTOM_CSS: Eigenes CSS
+DEFINITION: Definitions-Liste
+DEFINITION_LIST: Definitions-Liste
+DELETE_CLOSE: löschen
+DELETE_COLUMN: Spalte löschen
+DELETE_CONTENT_BLOCK: Inhaltsblock löschen
+DELETE: löschen
 DELETE_PAGE: Seite löschen
+DELETE_ROW: Reihe löschen
 DELETE_USER: Nutzer löschen
+DESCRIPTION: Beschreibung
 DISCARD_CHANGES: Änderungen verwerfen
 DISCARD: Verwerfen
 DO_YOU_REALLY_WANT_TO_DELETE_THE_USER: Soll der Nutzer wirklich gelöscht werden?
 DO_YOU_REALLY_WANT_TO_DELETE_THIS_PAGE: Soll die Seite wirklich gelöscht werden?
-DO_YOU_WANT_TO_DISCARD_YOUR_CHANGES_AND_SET_THE_CONTENT_BACK_TO_THE_LIVE_VERSION: Sollen die Änderungen verworfen und der Inhalt zurück auf die Live-Version gesetzt werden?
+DO_YOU_WANT_TO_DISCARD_YOUR_CHANGES_AND_SET_THE_CONTENT_BACK_TO_THE_LIVE_VERSION: Sollen die Änderungen wirklich verworfen und der Inhalt auf den Live-Zustand zurückgesetzt werden?
 DRAFT: Entwurf
-EDIT: bearbeiten
+DRAG_A_PICTURE_OR_CLICK_TO_SELECT: Bild hochladen
+DUTCH__FLEMISH: Dänisch, Flämisch
+EDIT: editieren
 EDIT_USER: Nutzer bearbeiten
 E_G_: z.B.
 E_MAIL: E-Mail
+ENGLISH: Englisch
+EXTERNAL_LINK: externer Link
+FAVICON: Favicon
+FILE: Datei
+FILES: Dateien
 FIRST_NAME: Vorname
+FOLDER: Ordner
 FORGOT_PASSWORD: Passwort vergessen
+FORMAT: Format
+GENERAL_PRESENTATION: Generelle Darstellung
+GERMAN: Deutsch
+GOOGLE_SITEMAP: Google Sitemap
+HEAD: Kopf
+HEADLINE_ANCHORS: Überschriften-Anker
 HEADLINE: Überschrift
+HIDE: Verbergen
+HIDE_PAGE_FROM_NAVIGATION: Seite in Navigation verbergen
+HOME: Home
 HOMEPAGE: Homepage
-HR: hr
+HORIZONTAL_LINE: Horizontale Linie
+HR: Horizontale Linie
+IF_NOT_FILLED__THE_DESCRIPTION_IS_EXTRACTED_FROM_CONTENT_: Wenn leer wird die Beschreibung vom Inhalt extrahiert.
 IMAGE: Bild
-LANGUAGE: Sprache
-LAST_NAME: Nachname
+IMAGES: Bilder
+ITALIAN: Italienisch
+ITALIC: kursiv
+LANGUAGE: Language
+LANGUAGE_ADMIN: Sprache (Admin-UI)
+LANGUAGE_ATTR: Sprach-Attribut (website)
+LAST_MODIFIED_LIVE__READONLY_: Live zuletzt geändert (nur lesen)
+LAST_NAME: Zuname
+LEFT: Links
 LICENCE: Lizenz
+LINK: Link
+LINK_TO_VIDEO: Link zum Video
 LOGIN: Anmelden
+LOGO: Logo
 LOGOUT: Abmelden
+MANUAL_DATE: Manuelles Datum
 MARKDOWN: Markdown
-MENU: Übersicht
-META_TITLE: Meta Titel
+MENU: Menü
+META_DESCRIPTION: Meta description
+META: Meta
+META_TITLE: Meta title
 MISSING_REQUIREMENTS: Fehlende Anforderungen
+MOVE_VERTICAL: vertikal verschieben
+NAVIGATION_TITLE: Navigationstitel
 NEW_PASSWORD: Neues Passwort
 NO_DESCRIPTION: Keine Beschreibung
+NONE: Keine
 NO_PREVIEW: Keine Vorschau
 NO_SETTINGS: Keine Einstellungen
 NOT_EDITABLE: Nicht editierbar
-OLIST: Aufzählung
+NUMBERED_LIST: Aufzählung
+OLIST: olist
+ONLINE: online
 ONLY_THE_FOLLOWING_SPECIAL_CHARACTERS_ARE_ALLOWED: Nur die folgenden Sonderzeichen sind erlaubt:
+PARAGRAPH: Absatz
 PASSWORD: Passwort
 PLEASE_CONFIRM: Bitte bestätigen
+PLEASE_CORRECT_THE_ERRORS_ABOVE: Bitte korrigiere die Fehler oben
 PLUGINS: Plugins
-PLUGIN_STORE: Plugin Seite
-PUBLISH: Veröffentlichen
+PLUGIN_STORE: Plugin Store
+POWER_OFF: Energie aus
+PUBLISH: Publizieren
 QUOTE: Zitat
-RAW_CONTENT_EDITOR: Purer Inhalts-Editor
-RAW_MARKDOWN_EDITOR: Purer Markdown-Editor
-RAW_MODE: Pur-Modus
-RAW: pur
+QUOTES: Zitate
+RAW_CONTENT_EDITOR: Raw Content Editor
+RAW_MARKDOWN_EDITOR: Raw Markdown Editor
+RAW_MODE: Raw Modus
+RAW: raw
 READONLY: Nur lesend
-REMEMBER_TO_BOOKMARK_THIS_PAGE: Denk daran die Seite zu bookmarken
-REQUIRED: Erforderlich
+REMEMBER_TO_BOOKMARK_THIS_PAGE: Bookmark nicht vergessen
+REQUIRED: erforderlich
+RIGHT: Recht
 ROLE: Rolle
+RUSSIAN: Russisch
 SAVE_ALL_SETTINGS: Alle Einstellungen speichern
-SAVE: Speichern
+SAVED_SUCCESSFULLY: Erfolgreich gespeichert
+SAVE: speichern
 SAVE_THEME: Theme speichern
+SELECT_FROM_MEDIALIB: Aus Medialib wählen
+SETTINGS_ARE_STORED: Einstellungen sind gespeichert
 SETTINGS: Einstellungen
-SETUP: Einrichtung
-STANDARD_EDITOR_MODE: Standard-Editor Modus
+SETUP: Setup
+SHOW_ANCHORS_NEXT_TO_HEADLINES: Anker neben Überschrift anzeigen
+STANDARD_EDITOR_MODE: Standard Editor-Modus
 START: Start
 SYSTEM: System
+TABLE_OF_CONTENTS: Inhaltsverzeichnis
 TABLE: Tabelle
+TAKEN_FROM_YOUR_USER_ACCOUNT_IF_SET_: Vom Nutzer-Account genommen falls vorhanden.
+TERM: Bedingung
+TEXT_FILE: Text-Datei
 THE_FORMAT_BUTTONS: Die Formatierungs-Buttons
 THEMES: Themes
-THEME_STORE: Theme Seite
+THEME_STORE: Theme Store
 TITLE: Titel
-TOC: Inhaltsverzeichnis
-ULIST: Auflistung
+TOC: IHV
+TOP: Oben
+TYPEMILL_DESCRIPTION: The standard theme for Typemill. Responsive, minimal and without any dependencies. It uses the system fonts Calibri and Helvetica. No JavaScript is used.
+ULIST: ulist
 UNKNOWN: Unbekannt
 UPDATE_USER: Nutzer aktualisieren
-USE_2_TO_40_CHARACTERS: Verwende 2 bis 40 Anschläge.
-USE_A_VALID_YEAR: Verwende ein gültiges Jahr
+UPLOAD_FILE: Datei hochladen
+UPLOAD: hochladen
+USE_2_TO_20_CHARACTERS: 2 bis 20 Anschläge erlaubt.
+USE_2_TO_40_CHARACTERS: 2 to 40 Anschläge erlaubt.
+USE_A_VALID_LANGUAGE_ATTRIBUTE: Gültiges Language Attribut erforderlich.
+USE_A_VALID_YEAR: Gültiges Jahr erforderlich.
+USED_AS_FALLBACK_WHEN_NO_MANUAL_DATE_IS_SET_: Wird alternativ zum manuellen Datum genutzt.
 USERNAME: Nutzername
 USERS: Nutzer
 USER: Nutzer
 VIDEO: Video
-VIEW_SITE: Seite ansehen
+VIEW_SITE: Zur Webseite
 VISUAL_CONTENT_EDITOR: Visueller Inhalts-Editor
 VISUAL_EDITOR: Visueller Editor
 VISUAL_MARKDOWN_EDITOR: Visueller Markdown Editor
 VISUAL_MODE: visueller Modus
 VISUAL: visuell
 WAIT: warte
-WEBSITE_TITLE: Webseiten-Titel
+WEBSITE_TITLE: WebseitenTitel
 WEB: Web
 WRITING: Schreiben
-YEAR: Jahr
+YEAR: Jahr
+YOU_CAN_OVERWRITE_THE_THEME_CSS_WITH_YOUR_OWN_CSS_HERE_: Du kannst das CSS des Themes hier überschreiben.
+
+SW_SETUP_WELCOME: Setup Willkommen
+SW_HURRA: Hurra
+SW_YOUR_ACCOUNT: Dein Account wurde erstellt und du bist jetzt angemeldet.
+SW_NEXT_STOP: Nächster Schritt:
+SW_VISIT: Besuche die Autorenoberfläche und richte die Seite ein. Du kannst das System konfigurieren, Themes auswählen and Plugins hinzufügen.
+SW_GET_HELP: Hilfe erhalten:
+SW_IF_YOU_HAVE: Wenn du Fragen hast, lies bitte die
+SW_DOCS: Dokumentation
+SW_OR_OPEN: oder öffne ein neues Issue
+SW_CODED: Entwickelt mit
+SW_BY: von der
+SW_COMMUNITY: Community
+SW_TRENDSCHAU: Trendschau Digital
+SW_CONFIGURE: Richte deine Seite ein.
+SW_GIVE_YOUR_NEW: Gib deiner neuen Seite einen Namen, füge Autoren hinzu und wähle ein Copyright.
+SW_CHOOSE_A_THEME: Richte ein Theme für deine Webseite ein.
+SW_ADD_NEW_FEATURE: Füge mit Plugins neue Funktionen hinzu.

+ 3 - 0
system/author/languages/en.yaml

@@ -90,6 +90,8 @@ IMAGES: Images
 ITALIAN: Italian
 ITALIC: italic
 LANGUAGE: Language
+LANGUAGE_ADMIN: Language (admin-ui)
+LANGUAGE_ATTR: Language Attribute (website)
 LAST_MODIFIED_LIVE__READONLY_: Last modified live (readonly)
 LAST_NAME: Last Name
 LEFT: Left
@@ -169,6 +171,7 @@ UPLOAD_FILE: Upload a file
 UPLOAD: upload
 USE_2_TO_20_CHARACTERS: Use 2 to 20 characters.
 USE_2_TO_40_CHARACTERS: Use 2 to 40 characters.
+USE_A_VALID_LANGUAGE_ATTRIBUTE: Use a valid language attribute
 USE_A_VALID_YEAR: Use a valid year
 USED_AS_FALLBACK_WHEN_NO_MANUAL_DATE_IS_SET_: Used as fallback when no manual date is set.
 USERNAME: Username

+ 3 - 0
system/author/languages/it.yaml

@@ -90,6 +90,8 @@ IMAGES: Immagini
 ITALIAN: Italiano
 ITALIC: corsivo
 LANGUAGE: Lingua
+LANGUAGE_ADMIN: Lingua (admin-ui)
+LANGUAGE_ATTR: Language Attribute (website)
 LAST_MODIFIED_LIVE__READONLY_: Ultima modifica (sola lettura)
 LAST_NAME: Cognome
 LEFT: Sinistra
@@ -169,6 +171,7 @@ UPLOAD: carica
 UPLOAD_FILE: Carica un file
 USE_2_TO_20_CHARACTERS: Usa da 2 a 20 caratteri.
 USE_2_TO_40_CHARACTERS: Usa da 2 a 40 caratteri.
+USE_A_VALID_LANGUAGE_ATTRIBUTE: Use a valid language attribute
 USE_A_VALID_YEAR: Usa un anno valido
 USED_AS_FALLBACK_WHEN_NO_MANUAL_DATE_IS_SET_: Utilizzato come ripiego quando non è impostata alcuna data manuale.
 USERNAME: Nome utente

+ 3 - 0
system/author/languages/nl.yaml

@@ -73,6 +73,8 @@ IF_NOT_FILLED__THE_DESCRIPTION_IS_EXTRACTED_FROM_CONTENT_: Indien niet ingevuld,
 IMAGE: Afbeelding
 ITALIC: cursief
 LANGUAGE: Taal
+LANGUAGE_ADMIN: Taal (admin-ui)
+LANGUAGE_ATTR: Language Attribute (website)
 LAST_MODIFIED_LIVE__READONLY_: Laatst gewijzigd live (alleen-lezen)
 LAST_NAME: achternaam
 LEFT: Links
@@ -142,6 +144,7 @@ ULIST: ulist
 UNKNOWN: onbekend
 UPDATE_USER: Gebruiker bijwerken
 USE_2_TO_40_CHARACTERS: gebruik 2 tot 40 tekens.
+USE_A_VALID_LANGUAGE_ATTRIBUTE: Use a valid language attribute
 USE_A_VALID_YEAR: Gebruik een geldig jaar
 USED_AS_FALLBACK_WHEN_NO_MANUAL_DATE_IS_SET_: Gebruikt als fallback als er geen handmatige datum is ingesteld.
 USER: Gebruiker

+ 3 - 0
system/author/languages/ru.yaml

@@ -81,6 +81,8 @@ IF_NOT_FILLED__THE_DESCRIPTION_IS_EXTRACTED_FROM_CONTENT_: Если не зап
 IMAGE: Изображение
 ITALIC: Наклонный
 LANGUAGE: Язык
+LANGUAGE_ADMIN: Язык (admin-ui)
+LANGUAGE_ATTR: Language Attribute (website)
 LAST_MODIFIED_LIVE__READONLY_: Последнее изменение (только просмотр)
 LAST_NAME: Фамилия
 LEFT: Слева
@@ -153,6 +155,7 @@ UPDATE_USER: Обновить данные профиля
 UPLOAD: загрузить
 UPLOAD_FILE: Загрузить файл
 USE_2_TO_40_CHARACTERS: Используйте от 2 до 40 символов.
+USE_A_VALID_LANGUAGE_ATTRIBUTE: Use a valid language attribute
 USE_A_VALID_YEAR: Используйте правильный формат для указания года
 USED_AS_FALLBACK_WHEN_NO_MANUAL_DATE_IS_SET_: Используется как запасной вариант, когда дата не установлена в ручную.
 USERNAME: Имя пользователя

+ 0 - 5
system/author/partials/fields.twig

@@ -9,11 +9,6 @@
 
 		<textarea id="{{ itemName }}[{{ field.name }}]" name="{{ itemName }}[{{ field.name }}]"{{field.getAttributeValues() }}{{ field.getAttributes() }}>{{ field.getContent() }}</textarea>
 
-	{% elseif field.type == 'image' %}
-		<div class="imageupload dropbox">
-			<input id="{{itemName}}[{{ field.name }}]" class="input-file" name="{{itemName}}[{{ field.name }}]" type="file" accept="image/*"{{ field.getAttributeValues() }}{{ field.getAttributes() }}>
-			<p><svg class="icon icon-upload baseline"><use xlink:href="#icon-upload"></use></svg> upload an image</p>
-		</div>
 	{% elseif field.type == 'paragraph' %}
 		
 		{{ markdown(field.getContent()) }}	

+ 7 - 1
system/author/settings/system.twig

@@ -51,7 +51,7 @@
 							<span class="error">{{ errors.settings.year | first }}</span>
 						{% endif %}
 					</div><div class="medium{{ errors.settings.language ? ' error' : '' }}">
-						<label for="settings[language]">{{ __('Language') }}</label>
+						<label for="settings[language]">{{ __('Language_admin') }}</label>
 						<select name="settings[language]" id="language">
 							{% for key,lang in languages %}
 								<option value="{{ key }}"{% if (key == old.settings.language or key == mylang) %} selected{% endif %}>{{ __(lang) }}</option>
@@ -60,6 +60,12 @@
 						{% if errors.settings.language %}
 							<span class="error">{{ errors.settings.language | first }}</span>
 						{% endif %}
+					</div><div class="medium{{ errors.settings.langattr ? ' error' : '' }}">
+						<label for="langattr">{{ __('Language_attr') }}</label>
+						<input type="text" name="settings[langattr]" id="langattr" value="{{ old.settings.langattr ? old.settings.langattr : settings.langattr }}" pattern="[a-z]{2}" title="{{ __('Use a valid language attribute') }}, {{ __('e.g.') }} en" />
+						{% if errors.settings.langattr %}
+							<span class="error">{{ errors.settings.langattr | first }}</span>
+						{% endif %}
 					</div><div class="medium">
 						<label for="settings[sitemap]">{{ __('Google Sitemap') }} <small>({{ __('Readonly') }})</small></label>
 						<input type="text" name="settings[sitemap]" id="sitemap" readonly value="{{ base_url }}/cache/sitemap.xml" />

+ 15 - 0
themes/typemill/css/style.css

@@ -387,6 +387,21 @@ button.play-video::after {
 article .gitlink{
 	float: right;
 }
+.herocontainer{
+	position: relative;
+    margin: -30px -90px 0px;
+    height: 300px;
+	overflow: hidden;
+}
+.heroimage{
+	width: 100%;
+}
+.herocontainer .breadcrumb{
+	position: absolute;
+	top: 30px;
+	left: 10%;
+	width: 80%;	
+}
 
 /************************
 *  	PAGING / BREADCRUMB *

+ 15 - 1
themes/typemill/index.twig

@@ -4,7 +4,21 @@
 
 {% block content %}
 
-	{% include '/partials/breadcrumb.twig' %}
+	{% if metatabs.meta.heroimage %}
+	
+		<div class="herocontainer">
+			
+			<img class="heroimage" src="{{ metatabs.meta.heroimage }}" alt="{{ metatabs.meta.heroimagealt }}"/>
+		
+			{% include '/partials/breadcrumb.twig' %}
+
+		</div>
+		
+	{% else %}
+		
+		{% include '/partials/breadcrumb.twig' %}
+
+	{% endif %}
 
 	{% if item.elementType == 'file' %}
 

+ 33 - 0
themes/typemill/languages/de.yaml

@@ -0,0 +1,33 @@
+# English
+ACTIVATE_SPECIAL_STARTPAGE_DESIGN: Spezielles Start-Design aktivieren
+ADD_LABEL_FOR_START_BUTTON: Label für Start-Button
+ADD_NAME_FOR_CHAPTER: Name für Kapitel
+AUTHOR_INTRO: Präfix für Autorenname
+CHAPTER: Kapitel
+COUNT_CHAPTERS_IN_NAVIGATION?: Kapitel in Navigation nummerieren?
+DIFFERENT_DESIGN_FOR_STARTPAGE: Alternatives Design für Startseite
+FACEBOOK: Facebook
+GITHUB: GitHub
+LABEL_FOR_CHAPTER: Label für Kapitel
+LABEL_FOR_START_BUTTON: Label für Start-Button
+LAST_MODIFIED_FORMAT: Format für zuletzt geändert
+LAST_MODIFIED: Zuletzt geändert
+LAST_MODIFIED_TEXT: Text für zuletzt geändert
+LAST_UPDATED: Zuletzt geändert
+LINKEDIN: Linkedin
+LINK_TO_GIT_REPOSITORY: Link zum Git-Repository
+LOGO_ON_STARTPAGE: Logo auf Startseite anzeigen?
+MAIL: E-Mail
+PLEASE_ADD_THE_BASE_URL_TO_THE_TEXT_REPOSITORY_E_G__ON_GITHUB_: Bitte füge die Basis-URL zum Git-Repository ein, zum Beispiel von github.
+POSITION_OF_AUTHOR: Position des Autorennamens
+POSITION_OF_GIT_EDIT_LINK: Position des Git Editier-Links
+POSITION_OF_MODIFIED_TEXT: Position des Texts für zuletzt geändert
+POSITION_OF_SHARE_BUTTONS: Position der Share-Buttons
+SELECT_SHARE_BUTTONS: Wähle Share-Buttons aus
+SHARE: Teilen
+SHOW_CHAPTER_NUMBERS: Kapitel nummerieren
+SHOW_LOGO_INSTEAD_OF_TITLE_ON_STARTPAGE: Logo anstelle des Titels anzeigen.
+THE_STANDARD_THEME_FOR_TYPEMILL__RESPONSIVE__MINIMAL_AND_WITHOUT_ANY_DEPENDENCIES__IT_USES_THE_SYSTEM_FONTS_CALIBRI_AND_HELVETICA__NO_JAVASCRIPT_IS_USED_: 'Das Standard-Theme für Typemill. Minimal, responsiv und ohne Abhängigkeiten. kein JavaScript erforderlich. Gut für Dokumentationen und text-fokussierte Webseiten.'
+TWITTER: Twitter
+WHATSAPP: WhatsApp
+XING: Xing

+ 1 - 1
themes/typemill/partials/layout.twig

@@ -1,5 +1,5 @@
 <!DOCTYPE html>
-<html lang="{{ settings.language }}">
+<html lang="{{ settings.langattr|default('en') }}">
 	<head>
 		<meta charset="UTF-8">
 		<title>{% block title %}{% endblock %}</title>

+ 1 - 1
themes/typemill/partials/layoutCover.twig

@@ -1,5 +1,5 @@
 <!DOCTYPE html>
-<html lang="{{ settings.language }}">
+<html lang="{{ settings.langattr|default('en') }}">
 	<head>
 		<meta charset="UTF-8">
 		<title>{% block title %}{% endblock %}</title>

+ 1 - 5
themes/typemill/typemill.yaml

@@ -1,5 +1,5 @@
 name: Typemill Theme
-version: 1.2.4
+version: 1.2.5
 description: The standard theme for Typemill. Responsive, minimal and without any dependencies. It uses the system fonts Calibri and Helvetica. No JavaScript is used. 
 author: Sebastian Schürmanns
 homepage: https://typemill.net
@@ -27,10 +27,6 @@ forms:
       label: Different Design for Startpage
       checkboxlabel: Activate Special Startpage-Design
 
-    test:
-      type: image
-      label: Image test
-
     coverlogo:
       type: checkbox
       label: Logo on startpage