mirror of
https://github.com/jokob-sk/NetAlertX.git
synced 2026-04-02 08:12:21 -07:00
Merge branch 'main' of github.com:netalertx/NetAlertX
This commit is contained in:
@@ -5,43 +5,20 @@
|
||||
// ###################################
|
||||
|
||||
$defaultLang = "en_us";
|
||||
$allLanguages = [ "ar_ar", "ca_ca", "cs_cz", "de_de",
|
||||
"en_us", "es_es", "fa_fa", "fr_fr",
|
||||
"it_it", "ja_jp", "nb_no", "pl_pl",
|
||||
"pt_br", "pt_pt", "ru_ru", "sv_sv",
|
||||
"tr_tr", "uk_ua", "vi_vn", "zh_cn"];
|
||||
|
||||
// Load the canonical language list from languages.json — do not hardcode here.
|
||||
$_langJsonPath = dirname(__FILE__) . '/languages.json';
|
||||
$_langJson = json_decode(file_get_contents($_langJsonPath), true);
|
||||
$allLanguages = array_column($_langJson['languages'], 'code');
|
||||
|
||||
global $db;
|
||||
|
||||
$result = $db->querySingle("SELECT setValue FROM Settings WHERE setKey = 'UI_LANG'");
|
||||
|
||||
// below has to match exactly the values in /front/php/templates/language/lang.php & /front/js/common.js
|
||||
switch($result){
|
||||
case 'Arabic (ar_ar)': $pia_lang_selected = 'ar_ar'; break;
|
||||
case 'Catalan (ca_ca)': $pia_lang_selected = 'ca_ca'; break;
|
||||
case 'Czech (cs_cz)': $pia_lang_selected = 'cs_cz'; break;
|
||||
case 'German (de_de)': $pia_lang_selected = 'de_de'; break;
|
||||
case 'English (en_us)': $pia_lang_selected = 'en_us'; break;
|
||||
case 'Spanish (es_es)': $pia_lang_selected = 'es_es'; break;
|
||||
case 'Farsi (fa_fa)': $pia_lang_selected = 'fa_fa'; break;
|
||||
case 'French (fr_fr)': $pia_lang_selected = 'fr_fr'; break;
|
||||
case 'Italian (it_it)': $pia_lang_selected = 'it_it'; break;
|
||||
case 'Japanese (ja_jp)': $pia_lang_selected = 'ja_jp'; break;
|
||||
case 'Norwegian (nb_no)': $pia_lang_selected = 'nb_no'; break;
|
||||
case 'Polish (pl_pl)': $pia_lang_selected = 'pl_pl'; break;
|
||||
case 'Portuguese (pt_br)': $pia_lang_selected = 'pt_br'; break;
|
||||
case 'Portuguese (pt_pt)': $pia_lang_selected = 'pt_pt'; break;
|
||||
case 'Russian (ru_ru)': $pia_lang_selected = 'ru_ru'; break;
|
||||
case 'Swedish (sv_sv)': $pia_lang_selected = 'sv_sv'; break;
|
||||
case 'Turkish (tr_tr)': $pia_lang_selected = 'tr_tr'; break;
|
||||
case 'Ukrainian (uk_ua)': $pia_lang_selected = 'uk_ua'; break;
|
||||
case 'Vietnamese (vi_vn)': $pia_lang_selected = 'vi_vn'; break;
|
||||
case 'Chinese (zh_cn)': $pia_lang_selected = 'zh_cn'; break;
|
||||
default: $pia_lang_selected = 'en_us'; break;
|
||||
}
|
||||
|
||||
if (isset($pia_lang_selected) == FALSE or (strlen($pia_lang_selected) == 0)) {$pia_lang_selected = $defaultLang;}
|
||||
// Extract the language code from the display value, e.g. "English (en_us)" => "en_us".
|
||||
// This regex means lang.php never needs updating when a new language is added.
|
||||
preg_match('/\(([a-z]{2}_[a-z]{2})\)\s*$/i', (string) $result, $_langMatch);
|
||||
$pia_lang_selected = isset($_langMatch[1]) ? strtolower($_langMatch[1]) : $defaultLang;
|
||||
|
||||
$result = $db->query("SELECT * FROM Plugins_Language_Strings");
|
||||
$strings = array();
|
||||
|
||||
25
front/php/templates/language/languages.json
Normal file
25
front/php/templates/language/languages.json
Normal file
@@ -0,0 +1,25 @@
|
||||
{
|
||||
"default": "en_us",
|
||||
"languages": [
|
||||
{ "code": "ar_ar", "display": "Arabic (ar_ar)" },
|
||||
{ "code": "ca_ca", "display": "Catalan (ca_ca)" },
|
||||
{ "code": "cs_cz", "display": "Czech (cs_cz)" },
|
||||
{ "code": "de_de", "display": "German (de_de)" },
|
||||
{ "code": "en_us", "display": "English (en_us)" },
|
||||
{ "code": "es_es", "display": "Spanish (es_es)" },
|
||||
{ "code": "fa_fa", "display": "Farsi (fa_fa)" },
|
||||
{ "code": "fr_fr", "display": "French (fr_fr)" },
|
||||
{ "code": "it_it", "display": "Italian (it_it)" },
|
||||
{ "code": "ja_jp", "display": "Japanese (ja_jp)" },
|
||||
{ "code": "nb_no", "display": "Norwegian (nb_no)" },
|
||||
{ "code": "pl_pl", "display": "Polish (pl_pl)" },
|
||||
{ "code": "pt_br", "display": "Portuguese (pt_br)" },
|
||||
{ "code": "pt_pt", "display": "Portuguese (pt_pt)" },
|
||||
{ "code": "ru_ru", "display": "Russian (ru_ru)" },
|
||||
{ "code": "sv_sv", "display": "Swedish (sv_sv)" },
|
||||
{ "code": "tr_tr", "display": "Turkish (tr_tr)" },
|
||||
{ "code": "uk_ua", "display": "Ukrainian (uk_ua)" },
|
||||
{ "code": "vi_vn", "display": "Vietnamese (vi_vn)" },
|
||||
{ "code": "zh_cn", "display": "Chinese (zh_cn)" }
|
||||
]
|
||||
}
|
||||
@@ -31,13 +31,22 @@ def merge_translations(main_file, other_files):
|
||||
f.truncate()
|
||||
|
||||
|
||||
def load_language_codes(languages_json_path):
|
||||
"""Read language codes from languages.json, guaranteeing en_us is first."""
|
||||
with open(languages_json_path, "r", encoding="utf-8") as f:
|
||||
data = json.load(f)
|
||||
codes = [entry["code"] for entry in data["languages"]]
|
||||
# Ensure en_us (the master) is always first
|
||||
if "en_us" in codes:
|
||||
codes.remove("en_us")
|
||||
codes.insert(0, "en_us")
|
||||
return codes
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
current_path = os.path.dirname(os.path.abspath(__file__))
|
||||
# language codes can be found here: http://www.lingoes.net/en/translator/langcode.htm
|
||||
# ⚠ "en_us.json" has to be first!
|
||||
json_files = ["en_us.json", "ar_ar.json", "ca_ca.json", "cs_cz.json", "de_de.json",
|
||||
"es_es.json", "fa_fa.json", "fr_fr.json", "it_it.json", "ja_jp.json",
|
||||
"nb_no.json", "pl_pl.json", "pt_br.json", "pt_pt.json", "ru_ru.json",
|
||||
"sv_sv.json", "tr_tr.json", "vi_vn.json", "uk_ua.json", "zh_cn.json"]
|
||||
file_paths = [os.path.join(current_path, file) for file in json_files]
|
||||
# language codes are loaded from languages.json — add a new language there
|
||||
languages_json = os.path.join(current_path, "languages.json")
|
||||
codes = load_language_codes(languages_json)
|
||||
file_paths = [os.path.join(current_path, f"{code}.json") for code in codes]
|
||||
merge_translations(file_paths[0], file_paths[1:])
|
||||
|
||||
Reference in New Issue
Block a user