You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

122 lines
2.7 KiB

/* 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()
}
}
})