Browse Source

Languages: improve language selector

- ui languages: preferred languages first; list only available languages
- data languages: preferred languages first; name unknown languages
master
parent
commit
fbd7569384
  1. 24
      conf.php-dist
  2. 82
      src/language.js

24
conf.php-dist

@ -7,3 +7,27 @@ $config['overpassUrl'] = '//overpass-api.de/api/interpreter';
// Location of the initial view if no IP-location can be resolved. 'zoom' is optional.
$config['defaultView'] = array('lat' => 51.505, 'lon' => -0.09, 'zoom' => 18);
// List of available user interface languages
$languages = array(
"ast", // Asturian
"ca", // Catalan
"cs", // Czech
"da", // Danish
"de", // German
"el", // Greek
"en", // English
"es", // Spanish
"et", // Estonian
"fr", // French
"hu", // Hungarian
"it", // Italian
"ja", // Japanese
"nl", // Dutch
"pl", // Polish
"pt-br", // Portugese (Brazil)
"ro", // Romanian
"ru", // Russian
"sr", // Serbian
"uk", // Ukrainian
);

82
src/language.js

@ -9,33 +9,87 @@ function getPreferredDataLanguage () {
}
}
register_hook('init_callback', function (callback) {
if ('data_lang' in options) {
tagTranslations.setTagLanguage(options.data_lang)
} else {
tagTranslations.setTagLanguage(getPreferredDataLanguage())
function getAcceptLanguages () {
return navigator.languages || [ navigator.language || navigator.userLanguage ]
}
function getUiLanguages () {
var ret = {}
var acceptLanguages = getAcceptLanguages()
for (var i = 0; i < acceptLanguages.length; i++) {
var code = acceptLanguages[i]
if (languages.indexOf(code) !== -1) {
ret[code] = langName(code)
}
}
callback(null)
})
for (var i = 0; i < languages.length; i++) {
var code = languages[i]
if (!(code in ret)) {
ret[code] = langName(code)
}
}
return ret
}
function getDataLanguages () {
var ret = {}
var acceptLanguages = getAcceptLanguages()
for (var i = 0; i < acceptLanguages.length; i++) {
var code = acceptLanguages[i]
ret[code] = langName(code)
}
register_hook('options_form', function (def) {
var languages = {}
for (var k in lang_str) {
var m
if (m = k.match(/^lang:(.*)$/)) {
if (m[1] === 'current') {
var code = m[1]
if (code === 'current') {
continue
}
languages[m[1]] = lang_str['lang_native:' + m[1]] + ' (' + lang_str[k] + ')'
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 (callback) {
if ('data_lang' in options) {
tagTranslations.setTagLanguage(options.data_lang)
} else {
tagTranslations.setTagLanguage(getPreferredDataLanguage())
}
callback(null)
})
register_hook('options_form', function (def) {
def.ui_lang = {
'name': lang('options:ui_lang'),
'type': 'select',
'values': languages,
'values': getUiLanguages(),
'req': true,
'default': ui_lang
}
@ -44,7 +98,7 @@ register_hook('options_form', function (def) {
'name': lang('options:data_lang'),
'desc': lang('options:data_lang:desc'),
'type': 'select',
'values': languages,
'values': getDataLanguages(),
'default': getPreferredDataLanguage(),
'placeholder': lang('options:data_lang:local')
}

Loading…
Cancel
Save