|
|
/* global languages:false, lang_str:false */ /* eslint camelcase:0 */ var tagTranslations = require('./tagTranslations')
function getPreferredDataLanguage () { var m = (navigator.language || navigator.userLanguage).match(/^([^-]+)(-.*|)$/) if (m) { return m[1].toLocaleLowerCase() } else { return ui_lang } }
function getAcceptLanguages () { return navigator.languages || [ navigator.language || navigator.userLanguage ] }
function getUiLanguages () { var i, code var ret = {} var acceptLanguages = getAcceptLanguages()
for (i = 0; i < acceptLanguages.length; i++) { code = acceptLanguages[i] if (languages.indexOf(code) !== -1) { ret[code] = langName(code) } }
for (i = 0; i < languages.length; i++) { code = languages[i] if (!(code in ret)) { ret[code] = langName(code) } }
return ret }
function getDataLanguages () { var code var ret = {} var acceptLanguages = getAcceptLanguages()
for (var i = 0; i < acceptLanguages.length; i++) { code = acceptLanguages[i] ret[code] = langName(code) }
for (var k in lang_str) { var m = k.match(/^lang:(.*)$/) if (m) { code = m[1] if (code === 'current') { continue } if (!(code in ret)) { ret[code] = langName(code) } } }
return ret }
function langName (code) { var ret = ''
if (('lang_native:' + code) in lang_str && lang_str['lang_native:' + code]) { ret += lang_str['lang_native:' + code] } else { ret += 'Language "' + code + '"' }
if (('lang:' + code) in lang_str && lang_str['lang:' + code]) { ret += ' (' + lang_str['lang:' + code] + ')' }
return ret }
register_hook('init_callback', function (initState, callback) { if (!('ui_lang' in options)) { options.ui_lang = ui_lang }
if (!('data_lang' in options)) { options.data_lang = getPreferredDataLanguage() } tagTranslations.setTagLanguage(options.data_lang)
callback(null) })
register_hook('options_form', function (def) { def.ui_lang = { 'name': lang('options:ui_lang'), 'type': 'select', 'values': getUiLanguages(), 'req': true, 'default': ui_lang, 'reloadOnChange': true }
def.data_lang = { 'name': lang('options:data_lang'), 'desc': lang('options:data_lang:desc'), 'type': 'select', 'values': getDataLanguages(), 'default': getPreferredDataLanguage(), 'placeholder': lang('options:data_lang:local') } })
register_hook('options_save', function (options, old_options) { if ('data_lang' in options) { if (old_options.data_lang !== options.data_lang) { tagTranslations.setTagLanguage(options.data_lang) baseCategory.recalc() } } })
|