diff --git a/build/libifm.php b/build/libifm.php index 19c1e01..771d0f9 100644 --- a/build/libifm.php +++ b/build/libifm.php @@ -554,7 +554,7 @@ f00bar; $this->templates = $templates; $i18n = array(); - $i18n['en'] = <<<'f00bar' + $i18n["en"] = <<<'f00bar' { "ajax_request": "AJAX Request", "cancel": "Cancel", @@ -610,67 +610,8 @@ f00bar; "word_wrap": "Word Wrap" } f00bar; - $i18n['en'] = json_decode($i18n['en'], true); - $i18n['de'] = <<<'f00bar' -{ - "ajax_request": "AJAX Request", - "archivename": "Name des Archivs", - "cancel": "Abbrechen", - "close": "Schließen", - "copy": "Kopieren", - "data": "Daten", - "delete": "Löschen", - "directoryname": "Ordner Name", - "editor_options": "Editor Optionen", - "extract": "Auspacken", - "extract_filename": "Folgende Datei auspacken -", - "file_delete_confirm": "Soll die folgende Datei wirklich gelöscht werden:", - "file_edit_success": "Datei erfolgreich geändert / angelegt.", - "file_multi_delete_confirm": "Sollen diese Dateien wirklich gelöscht werden:", - "file_new": "Neue Datei", - "file_save_confirm": "Soll diese Datei wirklich gelöscht werden:", - "filename": "Dateiname", - "filename_new": "Neuer Dateiname", - "folder_new": "Neue Ordner", - "footer": "IFM - verbesserter file manager | ifm.php versteckt |", - "github": "Besuche das Projekt auf GitHub", - "group": "Gruppe", - "last_modified": "Zuletzt geändert", - "login": "Anmeldung", - "logout": "Abmelden", - "method": "Methode", - "move": "Verschieben", - "options": "Optionen", - "owner": "Besitzer", - "password": "Passwort", - "path_content": "Inhalt von", - "permissions": "Berechtigungen", - "refresh": "Auffrischen", - "rename": "Umbenennen", - "rename_filename": "Folgende Datei umbenennen -", - "request": "Anfrage", - "response": "Antwort", - "save": "Speichen", - "save_wo_close": "Speichen ohne Schließen", - "search": "Suchen", - "search_pattern": "Muster", - "select_destination": "Zielort auswählen", - "size": "Größe", - "soft_tabs": "Leichte Tabulatoren", - "tab_size": "Tabulatoren Größe", - "tasks": "Aufgaben", - "toggle_nav": "Navigation umschalten", - "upload": "Hochladen", - "upload_drop": "Dateien zum hochladen hier hinziehen", - "upload_file": "Datei hochladen", - "upload_remote": "Hochladen von ausserhalb", - "upload_remote_url": "Entfernte URL zum hochladen", - "username": "Benutzername", - "word_wrap": "Zeilenumbruch" -} +$i18n["en"] = json_decode( $i18n["en"], true ); -f00bar; - $i18n['de'] = json_decode($i18n['de'], true); $this->i18n = $i18n; } @@ -2840,7 +2781,12 @@ function IFM( params ) { } elseif( $_REQUEST["api"] == "getTemplates" ) { $this->jsonResponse( $this->templates ); } elseif( $_REQUEST["api"] == "getI18N" ) { - $this->jsonResponse( $this->i18n[$this->config['language']] ); + if( isset( $this->i18n[$this->config['language']] ) ) + $this->jsonResponse( $this->i18n[$this->config['language']] ); + else { + foreach( $this->i18n as $lang ) break; + $this->jsonResponse( $lang ); + } } elseif( $_REQUEST["api"] == "logout" ) { unset( $_SESSION ); session_destroy(); diff --git a/compiler.php b/compiler.php index d483e19..2cade4c 100755 --- a/compiler.php +++ b/compiler.php @@ -18,6 +18,21 @@ $IFM_BUILD_STANDALONE = "ifm.php"; $IFM_BUILD_STANDALONE_COMPRESSED = "build/ifm.min.php"; $IFM_BUILD_LIB_PHP = "build/libifm.php"; +$options = getopt( null, array( "language::" ) ); +$vars['languages'] = isset( $options['language'] ) ? explode( ',', $options['language'] ) : array( "en" ); +$vars['defaultlanguage'] = $vars['languages'][0]; +$vars['languageincludes'] = ""; +foreach( $vars['languages'] as $l ) { + if( file_exists( "src/i18n/".$l.".json" ) ) + $vars['languageincludes'] .= + '$i18n["'.$l.'"] = <<<\'f00bar\'' . "\n" + . file_get_contents( "src/i18n/".$l.".json" ) . "\n" + . 'f00bar;' . "\n" + . '$i18n["'.$l.'"] = json_decode( $i18n["'.$l.'"], true );' . "\n" ; + else + print "WARNING: Language file src/i18n/".$l.".json not found.\n"; +} + /** * Concat PHP Files */ @@ -30,13 +45,20 @@ foreach( $IFM_SRC_PHP as $phpfile ) { $compiled = join( $compiled ); /** - * Process includes + * Process file includes */ $includes = NULL; preg_match_all( "/\@\@\@file:([^\@]+)\@\@\@/", $compiled, $includes, PREG_SET_ORDER ); -foreach( $includes as $file ) { +foreach( $includes as $file ) $compiled = str_replace( $file[0], file_get_contents( $file[1] ), $compiled ); -} + +/** + * Process variable includes + */ +$includes = NULL; +preg_match_all( "/\@\@\@vars:([^\@]+)\@\@\@/", $compiled, $includes, PREG_SET_ORDER ); +foreach( $includes as $var ) + $compiled = str_replace( $var[0], $vars[$var[1]], $compiled ); /** * Build standalone script diff --git a/ifm.php b/ifm.php index c9d0e98..5843bbd 100644 --- a/ifm.php +++ b/ifm.php @@ -554,7 +554,7 @@ f00bar; $this->templates = $templates; $i18n = array(); - $i18n['en'] = <<<'f00bar' + $i18n["en"] = <<<'f00bar' { "ajax_request": "AJAX Request", "cancel": "Cancel", @@ -610,67 +610,8 @@ f00bar; "word_wrap": "Word Wrap" } f00bar; - $i18n['en'] = json_decode($i18n['en'], true); - $i18n['de'] = <<<'f00bar' -{ - "ajax_request": "AJAX Request", - "archivename": "Name des Archivs", - "cancel": "Abbrechen", - "close": "Schließen", - "copy": "Kopieren", - "data": "Daten", - "delete": "Löschen", - "directoryname": "Ordner Name", - "editor_options": "Editor Optionen", - "extract": "Auspacken", - "extract_filename": "Folgende Datei auspacken -", - "file_delete_confirm": "Soll die folgende Datei wirklich gelöscht werden:", - "file_edit_success": "Datei erfolgreich geändert / angelegt.", - "file_multi_delete_confirm": "Sollen diese Dateien wirklich gelöscht werden:", - "file_new": "Neue Datei", - "file_save_confirm": "Soll diese Datei wirklich gelöscht werden:", - "filename": "Dateiname", - "filename_new": "Neuer Dateiname", - "folder_new": "Neue Ordner", - "footer": "IFM - verbesserter file manager | ifm.php versteckt |", - "github": "Besuche das Projekt auf GitHub", - "group": "Gruppe", - "last_modified": "Zuletzt geändert", - "login": "Anmeldung", - "logout": "Abmelden", - "method": "Methode", - "move": "Verschieben", - "options": "Optionen", - "owner": "Besitzer", - "password": "Passwort", - "path_content": "Inhalt von", - "permissions": "Berechtigungen", - "refresh": "Auffrischen", - "rename": "Umbenennen", - "rename_filename": "Folgende Datei umbenennen -", - "request": "Anfrage", - "response": "Antwort", - "save": "Speichen", - "save_wo_close": "Speichen ohne Schließen", - "search": "Suchen", - "search_pattern": "Muster", - "select_destination": "Zielort auswählen", - "size": "Größe", - "soft_tabs": "Leichte Tabulatoren", - "tab_size": "Tabulatoren Größe", - "tasks": "Aufgaben", - "toggle_nav": "Navigation umschalten", - "upload": "Hochladen", - "upload_drop": "Dateien zum hochladen hier hinziehen", - "upload_file": "Datei hochladen", - "upload_remote": "Hochladen von ausserhalb", - "upload_remote_url": "Entfernte URL zum hochladen", - "username": "Benutzername", - "word_wrap": "Zeilenumbruch" -} +$i18n["en"] = json_decode( $i18n["en"], true ); -f00bar; - $i18n['de'] = json_decode($i18n['de'], true); $this->i18n = $i18n; } @@ -2840,7 +2781,12 @@ function IFM( params ) { } elseif( $_REQUEST["api"] == "getTemplates" ) { $this->jsonResponse( $this->templates ); } elseif( $_REQUEST["api"] == "getI18N" ) { - $this->jsonResponse( $this->i18n[$this->config['language']] ); + if( isset( $this->i18n[$this->config['language']] ) ) + $this->jsonResponse( $this->i18n[$this->config['language']] ); + else { + foreach( $this->i18n as $lang ) break; + $this->jsonResponse( $lang ); + } } elseif( $_REQUEST["api"] == "logout" ) { unset( $_SESSION ); session_destroy(); diff --git a/src/main.php b/src/main.php index ab74310..8453ff8 100644 --- a/src/main.php +++ b/src/main.php @@ -24,7 +24,7 @@ class IFM { "tmp_dir" => "", "defaulttimezone" => "Europe/Berlin", "forbiddenChars" => array(), - "language" => "en", + "language" => "@@@vars:defaultlanguage@@@", // api controls "ajaxrequest" => 1, @@ -159,14 +159,7 @@ f00bar; $this->templates = $templates; $i18n = array(); - $i18n['en'] = <<<'f00bar' -@@@file:src/i18n/en.json@@@ -f00bar; - $i18n['en'] = json_decode($i18n['en'], true); - $i18n['de'] = <<<'f00bar' -@@@file:src/i18n/de.json@@@ -f00bar; - $i18n['de'] = json_decode($i18n['de'], true); + @@@vars:languageincludes@@@ $this->i18n = $i18n; } @@ -252,7 +245,12 @@ f00bar; } elseif( $_REQUEST["api"] == "getTemplates" ) { $this->jsonResponse( $this->templates ); } elseif( $_REQUEST["api"] == "getI18N" ) { - $this->jsonResponse( $this->i18n[$this->config['language']] ); + if( isset( $this->i18n[$this->config['language']] ) ) + $this->jsonResponse( $this->i18n[$this->config['language']] ); + else { + foreach( $this->i18n as $lang ) break; + $this->jsonResponse( $lang ); + } } elseif( $_REQUEST["api"] == "logout" ) { unset( $_SESSION ); session_destroy();