From 52b13ba95ba255292f3cdbda975e7f74e238dbfb Mon Sep 17 00:00:00 2001 From: Pepijn Over Date: Fri, 10 Jan 2014 13:28:47 +0100 Subject: [PATCH] Refactoring language system: automatically detect language files in lang/ dir instead of hardcoded list, making it easier to add new languages. Also adding a refresh in the config mod after the language has been changed. --- README.md | 4 ++-- classes/mod/modConfig.class.php | 28 +++++++++++++++++++++++----- functions.inc.php | 17 +++++++++++++++++ lang/de.lang.php | 9 +++++---- lang/en.lang.php | 9 +++++---- lang/fr.lang.php | 9 +++++---- lang/nl.lang.php | 9 +++++---- tpl/config.tpl.html | 8 ++++---- 8 files changed, 66 insertions(+), 27 deletions(-) diff --git a/README.md b/README.md index db5db2a1..663ffc1a 100755 --- a/README.md +++ b/README.md @@ -145,11 +145,11 @@ The second part is the actual message. There are a few variables you can use in #### Adding a new language - It's not the easiest thing to add a new language to the monitor, but if you can spare a few minutes of your time - to send in a translation, it can be added to a future release. + To add a new language, follow these steps: * Create a new file in the directory "lang" named "mylanguage.lang.php". * Copy the contents of the file "en.lang.php" to your new file. + * Your new language should now be available on the config page. * Translate the English stuff to your own language. * Send a copy to pep[at]neanderthal-technology.com so I can add it to the next release :) * Or, send me a pull request on github. diff --git a/classes/mod/modConfig.class.php b/classes/mod/modConfig.class.php index 1ca0bc45..15e97824 100755 --- a/classes/mod/modConfig.class.php +++ b/classes/mod/modConfig.class.php @@ -59,10 +59,27 @@ class modConfig extends modCore { $config[$entry['key']] = $entry['value']; } + // generate language array + $lang_keys = sm_get_langs(); + $languages = array(); + foreach($lang_keys as $key) { + $label = sm_get_lang('config', 'language_' . $key); + // if we don't have a proper label, just show the key.. + // better something than nothing huh + if($label == null) { + $label = $key; + } + $languages[] = array( + 'value' => $key, + 'label' => $label, + 'selected' => ($key == $config['language']) ? 'selected="selected"' : '', + ); + } + $this->tpl->addTemplateDataRepeat($this->getTemplateId(), 'languages', $languages); + $this->tpl->addTemplateData( $this->getTemplateId(), array( - 'language_selected_' . $config['language'] => 'selected="selected"', 'email_status_checked' => ($config['email_status'] == '1') ? 'checked="checked"' : '', 'email_from_name' => $config['email_from_name'], 'email_from_email' => $config['email_from_email'], @@ -128,6 +145,11 @@ class modConfig extends modCore { } $this->message = sm_get_lang('config', 'updated'); + + if($clean['language'] != sm_get_conf('language')) { + header('Location: ' . $_SERVER['REQUEST_URI']); + die(); + } } // override parent::createHTMLLabels() @@ -141,10 +163,6 @@ class modConfig extends modCore { 'label_settings_log' => sm_get_lang('config', 'settings_log'), 'label_general' => sm_get_lang('config', 'general'), 'label_language' => sm_get_lang('config', 'language'), - 'label_language_english' => sm_get_lang('config', 'english'), - 'label_language_dutch' => sm_get_lang('config', 'dutch'), - 'label_language_french' => sm_get_lang('config', 'french'), - 'label_language_german' => sm_get_lang('config', 'german'), 'label_show_update' => sm_get_lang('config', 'show_update'), 'label_email_status' => sm_get_lang('config', 'email_status'), 'label_email_from_email' => sm_get_lang('config', 'email_from_email'), diff --git a/functions.inc.php b/functions.inc.php index 3cdec15e..7eb28ff6 100755 --- a/functions.inc.php +++ b/functions.inc.php @@ -103,6 +103,23 @@ function sm_load_lang($lang) { $GLOBALS['sm_lang'] = $sm_lang; } +/** + * Retrieve a list with keys of the available languages + * + * @return array + * @see sm_load_lang() + */ +function sm_get_langs() { + $fn_ext = '.lang.php'; + $lang_files = glob(dirname(__FILE__) . '/lang/*' . $fn_ext); + $langs = array(); + + foreach($lang_files as $file) { + $langs[] = str_replace($fn_ext, '', basename($file)); + } + return $langs; +} + /** * Get a setting from the config. * The config must have been loaded first using sm_load_conf() diff --git a/lang/de.lang.php b/lang/de.lang.php index 0e4d8db0..45f8ab95 100755 --- a/lang/de.lang.php +++ b/lang/de.lang.php @@ -82,11 +82,12 @@ $sm_lang = array( 'config' => array( 'general' => 'General', 'language' => 'Sprache', + 'language_en' => 'English', + 'language_nl' => 'Dutch', + 'language_fr' => 'French', + 'language_de' => 'German', + 'language_kr' => 'Korean', 'show_update' => 'Updats wöchentlich prüfen?', - 'english' => 'English', - 'dutch' => 'Dutch', - 'french' => 'French', - 'german' => 'German', 'email_status' => 'Email senden erlauben?', 'email_from_email' => 'Email from address', 'email_from_name' => 'Email from name', diff --git a/lang/en.lang.php b/lang/en.lang.php index 0b27ebc0..36680ed4 100755 --- a/lang/en.lang.php +++ b/lang/en.lang.php @@ -82,11 +82,12 @@ $sm_lang = array( 'config' => array( 'general' => 'General', 'language' => 'Language', + 'language_en' => 'English', + 'language_nl' => 'Dutch', + 'language_fr' => 'French', + 'language_de' => 'German', + 'language_kr' => 'Korean', 'show_update' => 'Check for new updates weekly?', - 'english' => 'English', - 'dutch' => 'Dutch', - 'french' => 'French', - 'german' => 'German', 'email_status' => 'Allow sending email?', 'email_from_email' => 'Email from address', 'email_from_name' => 'Email from name', diff --git a/lang/fr.lang.php b/lang/fr.lang.php index 04dba517..44585262 100755 --- a/lang/fr.lang.php +++ b/lang/fr.lang.php @@ -82,11 +82,12 @@ $sm_lang = array( 'config' => array( 'general' => 'General', 'language' => 'Langue', + 'language_en' => 'English', + 'language_nl' => 'Dutch', + 'language_fr' => 'Francais', + 'language_de' => 'German', + 'language_kr' => 'Korean', 'show_update' => 'Vérifier les nouvelles mis à jour hebdomadairement?', - 'english' => 'English', - 'dutch' => 'Dutch', - 'french' => 'Francais', - 'german' => 'German', 'email_status' => 'Autoriser l envoi de mail?', 'email_from_email' => 'Expéditeur', 'email_from_name' => 'Nom de l expéditeur', diff --git a/lang/nl.lang.php b/lang/nl.lang.php index 4d277498..4fb3d767 100755 --- a/lang/nl.lang.php +++ b/lang/nl.lang.php @@ -82,11 +82,12 @@ $sm_lang = array( 'config' => array( 'general' => 'Algemeen', 'language' => 'Taal', + 'language_en' => 'Engels', + 'language_nl' => 'Nederlands', + 'language_fr' => 'Frans', + 'language_de' => 'Duits', + 'language_kr' => 'Koreaans', 'show_update' => 'Check for new updates weekly?', - 'english' => 'Engels', - 'dutch' => 'Nederlands', - 'french' => 'Frans', - 'german' => 'Duits', 'email_status' => 'Sta email berichten toe?', 'email_from_email' => 'Email van adres', 'email_from_name' => 'Email van naam', diff --git a/tpl/config.tpl.html b/tpl/config.tpl.html index 1e00274f..92d6accb 100755 --- a/tpl/config.tpl.html +++ b/tpl/config.tpl.html @@ -8,10 +8,10 @@