Refactor i18n language loading

This commit is contained in:
Lord-Grey 2021-05-10 22:52:06 +02:00
parent 1311fcdada
commit 3cf9d2d597
5 changed files with 1127 additions and 1134 deletions

File diff suppressed because it is too large Load Diff

View File

@ -51,6 +51,8 @@
<script src="js/lib/jquery.i18n/jquery.i18n.language.js"></script> <script src="js/lib/jquery.i18n/jquery.i18n.language.js"></script>
<script src="js/lib/jquery.i18n/CLDRPluralRuleParser.js"></script> <script src="js/lib/jquery.i18n/CLDRPluralRuleParser.js"></script>
<script src="js/languages.js"></script>
<!-- Bootstrap Core CSS --> <!-- Bootstrap Core CSS -->
<link href="css/bootstrap.min.css" rel="stylesheet"> <link href="css/bootstrap.min.css" rel="stylesheet">
@ -82,7 +84,6 @@
<script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script> <script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
<![endif]--> <![endif]-->
</head> </head>
<body> <body>
<noscript> <noscript>
<div style="color:red;margin: 40px 0;text-align:center"> <div style="color:red;margin: 40px 0;text-align:center">

View File

@ -0,0 +1,33 @@
var storedLang;
var availLang = ['cs', 'de', 'en', 'es', 'fr', 'it', 'nl', 'nb', 'pl', 'pt', 'ro', 'sv', 'vi', 'ru', 'tr', 'zh-CN'];
var availLangText = ['Čeština', 'Deutsch', 'English', 'Español', 'Français', 'Italiano', 'Nederlands', 'Norsk Bokmål', 'Polski', 'Português', 'Română', 'Svenska', 'Tiếng Việt', 'русский', 'Türkçe', '汉语'];
//$.i18n.debug = true;
//i18n
function initTrans(lc) {
$.i18n().load("i18n", lc).done(
function () {
$.i18n().locale = lc;
performTranslation();
});
}
storedLang = getStorage("langcode");
if (storedLang == null || storedLang === "undefined") {
var langLocale = $.i18n().locale.substring(0, 2);
//Test, if language is supported by hyperion
var langIdx = availLang.indexOf(langLocale);
if (langIdx === -1) {
// If language is not supported by hyperion, try fallback language
langLocale = $.i18n().options.fallbackLocale.substring(0, 2);
langIdx = availLang.indexOf(langLocale);
if (langIdx === -1) {
langLocale = 'en';
}
}
storedLang = langLocale;
setStorage("langcode", storedLang);
}
initTrans(storedLang);

View File

@ -1,149 +1,111 @@
var storedAccess;
var storedLang;
var availLang = ['cs', 'de', 'en', 'es', 'fr', 'it', 'nl', 'nb', 'pl', 'pt', 'ro', 'sv', 'vi', 'ru', 'tr', 'zh-CN'];
var availLangText = ['Čeština', 'Deutsch', 'English', 'Español', 'Français', 'Italiano', 'Nederlands', 'Norsk Bokmål', 'Polski', 'Português', 'Română', 'Svenska', 'Tiếng Việt', 'русский', 'Türkçe', '汉语'];
var availAccess = ['default', 'advanced', 'expert']; var availAccess = ['default', 'advanced', 'expert'];
var storedAccess;
//$.i18n.debug = true;
//Change Password //Change Password
function changePassword(){ function changePassword(){
showInfoDialog('changePassword', $.i18n('InfoDialog_changePassword_title')); showInfoDialog('changePassword', $.i18n('InfoDialog_changePassword_title'));
// fill default pw if default is set // fill default pw if default is set
if(window.defaultPasswordIsSet) if(window.defaultPasswordIsSet)
$('#oldPw').val('hyperion') $('#oldPw').val('hyperion')
$('#id_btn_ok').off().on('click',function() { $('#id_btn_ok').off().on('click',function() {
var oldPw = $('#oldPw').val(); var oldPw = $('#oldPw').val();
var newPw = $('#newPw').val(); var newPw = $('#newPw').val();
requestChangePassword(oldPw, newPw) requestChangePassword(oldPw, newPw)
}); });
$('#newPw, #oldPw').off().on('input',function(e) { $('#newPw, #oldPw').off().on('input',function(e) {
($('#oldPw').val().length >= 8 && $('#newPw').val().length >= 8) && !window.readOnlyMode ? $('#id_btn_ok').attr('disabled', false) : $('#id_btn_ok').attr('disabled', true); ($('#oldPw').val().length >= 8 && $('#newPw').val().length >= 8) && !window.readOnlyMode ? $('#id_btn_ok').attr('disabled', false) : $('#id_btn_ok').attr('disabled', true);
}); });
} }
$(document).ready( function() { $(document).ready(function () {
//i18n if (!storageComp()) {
function initTrans(lc){ showInfoDialog('warning', "Can't store settings", "Your browser doesn't support localStorage. You can't save a specific language setting (fallback to 'auto detection') and access level (fallback to 'default'). Some wizards may be hidden. You could still use the webinterface without further issues");
if (lc == 'auto') $('#language-select').attr("disabled", true);
{ $('#btn_setaccess').attr("disabled", true);
$.i18n().load().done( }
function() {
performTranslation();
});
}
else
{
$.i18n().locale = lc;
$.i18n().load( "i18n", lc ).done(
function() {
performTranslation();
});
}
}
if (storageComp()) initLanguageSelection();
{
storedLang = getStorage("langcode");
if (storedLang == null)
{
setStorage("langcode", 'auto');
storedLang = 'auto';
initTrans(storedLang);
}
else
{
initTrans(storedLang);
}
}
else
{
showInfoDialog('warning', "Can't store settings", "Your browser doesn't support localStorage. You can't save a specific language setting (fallback to 'auto detection') and access level (fallback to 'default'). Some wizards may be hidden. You could still use the webinterface without further issues");
initTrans('auto');
storedLang = 'auto';
storedAccess = "default";
$('#btn_setlang').attr("disabled", true);
$('#btn_setaccess').attr("disabled", true);
}
initLanguageSelection(); //access
storedAccess = getStorage("accesslevel");
if (storedAccess == null) {
storedAccess = "default";
setStorage("accesslevel", storedAccess);
}
//access if (!storageComp()) {
storedAccess = getStorage("accesslevel"); showInfoDialog('warning', $.i18n('InfoDialog_nostorage_title'), $.i18n('InfoDialog_nostorage_text'));
if (storedAccess == null) $('#btn_setlang').attr("disabled", true);
{ }
setStorage("accesslevel", "default");
storedAccess = "default";
}
$('#btn_setaccess').off().on('click',function() { $('#btn_setaccess').off().on('click',function() {
var newAccess; var newAccess;
showInfoDialog('select', $.i18n('InfoDialog_access_title'), $.i18n('InfoDialog_access_text')); showInfoDialog('select', $.i18n('InfoDialog_access_title'), $.i18n('InfoDialog_access_text'));
for (var lcx = 0; lcx<availAccess.length; lcx++) for (var lcx = 0; lcx<availAccess.length; lcx++)
{ {
$('#id_select').append(createSelOpt(availAccess[lcx], $.i18n('general_access_'+availAccess[lcx]))); $('#id_select').append(createSelOpt(availAccess[lcx], $.i18n('general_access_'+availAccess[lcx])));
} }
$('#id_select').val(storedAccess); $('#id_select').val(storedAccess);
$('#id_select').off().on('change',function() { $('#id_select').off().on('change',function() {
newAccess = $('#id_select').val(); newAccess = $('#id_select').val();
if (newAccess == storedAccess) if (newAccess == storedAccess)
$('#id_btn_saveset').attr('disabled', true); $('#id_btn_saveset').attr('disabled', true);
else else
$('#id_btn_saveset').attr('disabled', false); $('#id_btn_saveset').attr('disabled', false);
}); });
$('#id_btn_saveset').off().on('click',function() { $('#id_btn_saveset').off().on('click',function() {
setStorage("accesslevel", newAccess); setStorage("accesslevel", newAccess);
reload(); reload();
}); });
$('#id_select').trigger('change'); $('#id_select').trigger('change');
}); });
// change pw btn // change pw btn
$('#btn_changePassword').off().on('click',function() { $('#btn_changePassword').off().on('click',function() {
changePassword(); changePassword();
}); });
//Lock Ui //Lock Ui
$('#btn_lock_ui').off().on('click',function() { $('#btn_lock_ui').off().on('click',function() {
removeStorage('loginToken', true); removeStorage('loginToken', true);
location.replace('/'); location.replace('/');
}); });
//hide menu elements //hide menu elements
if (storedAccess != 'expert') if (storedAccess != 'expert')
$('#load_webconfig').toggle(false); $('#load_webconfig').toggle(false);
// instance switcher // instance switcher
$('#btn_instanceswitch').off().on('click',function() { $('#btn_instanceswitch').off().on('click',function() {
var lsys = window.sysInfo.system.hostName+':'+window.serverConfig.webConfig.port; var lsys = window.sysInfo.system.hostName+':'+window.serverConfig.webConfig.port;
showInfoDialog('iswitch', $.i18n('InfoDialog_iswitch_title'), $.i18n('InfoDialog_iswitch_text')); showInfoDialog('iswitch', $.i18n('InfoDialog_iswitch_title'), $.i18n('InfoDialog_iswitch_text'));
for (var i = 0; i<window.wSess.length; i++) for (var i = 0; i<window.wSess.length; i++)
{ {
if(lsys != window.wSess[i].host+':'+window.wSess[i].port) if(lsys != window.wSess[i].host+':'+window.wSess[i].port)
{ {
var hyperionAddress = window.wSess[i].address; var hyperionAddress = window.wSess[i].address;
if(hyperionAddress.indexOf(':') > -1 && hyperionAddress.length == 36) hyperionAddress = '['+hyperionAddress+']'; if(hyperionAddress.indexOf(':') > -1 && hyperionAddress.length == 36) hyperionAddress = '['+hyperionAddress+']';
hyperionAddress = 'http://'+hyperionAddress+':'+window.wSess[i].port; hyperionAddress = 'http://'+hyperionAddress+':'+window.wSess[i].port;
$('#id_select').append(createSelOpt(hyperionAddress, window.wSess[i].name)); $('#id_select').append(createSelOpt(hyperionAddress, window.wSess[i].name));
} }
} }
$('#id_btn_saveset').off().on('click',function() { $('#id_btn_saveset').off().on('click',function() {
$("#loading_overlay").addClass("overlay"); $("#loading_overlay").addClass("overlay");
window.location.href = $('#id_select').val(); window.location.href = $('#id_select').val();
}); });
}); });
}); });

View File

@ -162,25 +162,22 @@ function initLanguageSelection() {
var langLocale = storedLang; var langLocale = storedLang;
// If no language has been set, resolve browser locale
if (langLocale === 'auto') {
langLocale = $.i18n().locale.substring(0, 2);
}
// Resolve text for language code
var langText = 'Please Select';
//Test, if language is supported by hyperion //Test, if language is supported by hyperion
var langIdx = availLang.indexOf(langLocale); var langIdx = availLang.indexOf(langLocale);
if (langIdx > -1) { if (langIdx > -1) {
langText = availLangText[langIdx]; langText = availLangText[langIdx];
} } else {
else {
// If language is not supported by hyperion, try fallback language // If language is not supported by hyperion, try fallback language
langLocale = $.i18n().options.fallbackLocale.substring(0, 2); langLocale = $.i18n().options.fallbackLocale.substring(0, 2);
langIdx = availLang.indexOf(langLocale); langIdx = availLang.indexOf(langLocale);
if (langIdx > -1) { if (langIdx > -1) {
langText = availLangText[langIdx]; langText = availLangText[langIdx];
} else {
langLocale = 'en';
langIdx = availLang.indexOf(langLocale);
if (langIdx > -1) {
langText = availLangText[langIdx];
}
} }
} }