mirror of
https://github.com/FoggedLens/iD.git
synced 2026-05-25 01:24:05 +02:00
Add script translations to labels
This commit is contained in:
+85
-85
File diff suppressed because one or more lines are too long
+30
-4
@@ -29,6 +29,8 @@ const sourceCommunity = YAML.load(fs.readFileSync('./node_modules/osm-community-
|
|||||||
|
|
||||||
const cldrMainDir = './node_modules/cldr-localenames-full/main/';
|
const cldrMainDir = './node_modules/cldr-localenames-full/main/';
|
||||||
|
|
||||||
|
var referencedScripts = [];
|
||||||
|
|
||||||
const languageInfo = {
|
const languageInfo = {
|
||||||
dataLanguages: getLangNamesInNativeLang()
|
dataLanguages: getLangNamesInNativeLang()
|
||||||
};
|
};
|
||||||
@@ -50,7 +52,7 @@ asyncMap(resources, getResource, function(err, results) {
|
|||||||
|
|
||||||
// write files and fetch language info for each locale
|
// write files and fetch language info for each locale
|
||||||
var dataLocales = {
|
var dataLocales = {
|
||||||
en: { rtl: false, languageNames: foreignLanguageNamesInLanguageOf('en') }
|
en: { rtl: false, languageNames: languageNamesInLanguageOf('en'), scriptNames: scriptNamesInLanguageOf('en') }
|
||||||
};
|
};
|
||||||
asyncMap(Object.keys(allStrings),
|
asyncMap(Object.keys(allStrings),
|
||||||
function(code, done) {
|
function(code, done) {
|
||||||
@@ -69,8 +71,11 @@ asyncMap(resources, getResource, function(err, results) {
|
|||||||
} else if (code === 'ku') {
|
} else if (code === 'ku') {
|
||||||
rtl = false;
|
rtl = false;
|
||||||
}
|
}
|
||||||
var langTranslations = foreignLanguageNamesInLanguageOf(code);
|
dataLocales[code] = {
|
||||||
dataLocales[code] = { rtl: rtl, languageNames: langTranslations || {} };
|
rtl: rtl,
|
||||||
|
languageNames: languageNamesInLanguageOf(code) || {},
|
||||||
|
scriptNames: scriptNamesInLanguageOf(code) || {}
|
||||||
|
};
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -230,6 +235,8 @@ function getLangNamesInNativeLang() {
|
|||||||
|
|
||||||
var script = identity.script;
|
var script = identity.script;
|
||||||
if (script) {
|
if (script) {
|
||||||
|
referencedScripts.push(script);
|
||||||
|
|
||||||
info.base = identity.language;
|
info.base = identity.language;
|
||||||
info.script = script;
|
info.script = script;
|
||||||
}
|
}
|
||||||
@@ -250,7 +257,7 @@ function getLangNamesInNativeLang() {
|
|||||||
|
|
||||||
var rematchCodes = { 'ar-AA': 'ar', 'zh-CN': 'zh', 'zh-HK': 'zh-Hant-HK', 'zh-TW': 'zh', 'pt-BR': 'pt', 'pt': 'pt-PT' };
|
var rematchCodes = { 'ar-AA': 'ar', 'zh-CN': 'zh', 'zh-HK': 'zh-Hant-HK', 'zh-TW': 'zh', 'pt-BR': 'pt', 'pt': 'pt-PT' };
|
||||||
|
|
||||||
function foreignLanguageNamesInLanguageOf(code) {
|
function languageNamesInLanguageOf(code) {
|
||||||
|
|
||||||
if (rematchCodes[code]) code = rematchCodes[code];
|
if (rematchCodes[code]) code = rematchCodes[code];
|
||||||
|
|
||||||
@@ -284,3 +291,22 @@ function foreignLanguageNamesInLanguageOf(code) {
|
|||||||
|
|
||||||
return translatedLangsByCode;
|
return translatedLangsByCode;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function scriptNamesInLanguageOf(code) {
|
||||||
|
if (rematchCodes[code]) code = rematchCodes[code];
|
||||||
|
|
||||||
|
var languageFilePath = cldrMainDir + code + '/scripts.json';
|
||||||
|
if (!fs.existsSync(languageFilePath)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
var allTranslatedScriptsByCode = JSON.parse(fs.readFileSync(languageFilePath, 'utf8')).main[code].localeDisplayNames.scripts;
|
||||||
|
|
||||||
|
var translatedScripts = {};
|
||||||
|
referencedScripts.forEach(function(script) {
|
||||||
|
if (!allTranslatedScriptsByCode[script] || script === allTranslatedScriptsByCode[script]) return;
|
||||||
|
|
||||||
|
translatedScripts[script] = allTranslatedScriptsByCode[script];
|
||||||
|
});
|
||||||
|
|
||||||
|
return translatedScripts;
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { currentLocale, setTextDirection, setLanguageNames } from './locale';
|
import { currentLocale, setTextDirection, setLanguageNames, setScriptNames } from './locale';
|
||||||
import { dataLocales } from '../../data/index';
|
import { dataLocales } from '../../data/index';
|
||||||
import { utilStringQs } from './util';
|
import { utilStringQs } from './util';
|
||||||
|
|
||||||
@@ -105,6 +105,7 @@ export function utilDetect(force) {
|
|||||||
}
|
}
|
||||||
setTextDirection(detected.textDirection);
|
setTextDirection(detected.textDirection);
|
||||||
setLanguageNames((lang && lang.languageNames) || {});
|
setLanguageNames((lang && lang.languageNames) || {});
|
||||||
|
setScriptNames((lang && lang.scriptNames) || {});
|
||||||
|
|
||||||
// detect host
|
// detect host
|
||||||
var loc = window.top.location;
|
var loc = window.top.location;
|
||||||
|
|||||||
+29
-8
@@ -5,6 +5,7 @@ var translations = Object.create(null);
|
|||||||
export var currentLocale = 'en';
|
export var currentLocale = 'en';
|
||||||
export var textDirection = 'ltr';
|
export var textDirection = 'ltr';
|
||||||
export var languageNames = {};
|
export var languageNames = {};
|
||||||
|
export var scriptNames = {};
|
||||||
|
|
||||||
export function setLocale(val) {
|
export function setLocale(val) {
|
||||||
if (translations[val] !== undefined) {
|
if (translations[val] !== undefined) {
|
||||||
@@ -81,21 +82,41 @@ export function setLanguageNames(obj) {
|
|||||||
languageNames = obj;
|
languageNames = obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function setScriptNames(obj) {
|
||||||
|
scriptNames = obj;
|
||||||
|
}
|
||||||
|
|
||||||
export function languageName(code, options) {
|
export function languageName(code, options) {
|
||||||
if (languageNames[code]) { // name in locale langauge
|
if (languageNames[code]) { // name in locale langauge
|
||||||
|
|
||||||
|
// e.g. German
|
||||||
return languageNames[code];
|
return languageNames[code];
|
||||||
}
|
}
|
||||||
// sometimes we only want the local name
|
// sometimes we only want the local name
|
||||||
if (options && options.localOnly) return null;
|
if (options && options.localOnly) return null;
|
||||||
|
|
||||||
if (dataLanguages[code]) { // language info
|
var langInfo = dataLanguages[code];
|
||||||
if (dataLanguages[code].nativeName) { // name in native language
|
|
||||||
return t('translate.language_and_code', { language: dataLanguages[code].nativeName, code: code });
|
if (langInfo) {
|
||||||
} else if (dataLanguages[code].base && dataLanguages[code].script) {
|
if (langInfo.nativeName) { // name in native language
|
||||||
var base = dataLanguages[code].base;
|
|
||||||
if (languageNames[base]) { // base name in locale langauge
|
// e.g. Deutsch (de)
|
||||||
return t('translate.language_and_code', { language: languageNames[base], code: code });
|
return t('translate.language_and_code', { language: langInfo.nativeName, code: code });
|
||||||
} else if (dataLanguages[code] && dataLanguages[code].nativeName) {
|
|
||||||
|
} else if (langInfo.base && langInfo.script) {
|
||||||
|
|
||||||
|
var base = langInfo.base; // the code of the langauge this is based on
|
||||||
|
|
||||||
|
if (languageNames[base]) { // base language name in locale langauge
|
||||||
|
var scriptCode = langInfo.script;
|
||||||
|
var script = scriptNames[scriptCode] || scriptCode;
|
||||||
|
|
||||||
|
// e.g. Serbian (Cyrillic)
|
||||||
|
return t('translate.language_and_code', { language: languageNames[base], code: script });
|
||||||
|
|
||||||
|
} else if (dataLanguages[base] && dataLanguages[base].nativeName) {
|
||||||
|
|
||||||
|
// e.g. српски (sr-Cyrl)
|
||||||
return t('translate.language_and_code', { language: dataLanguages[base].nativeName, code: code });
|
return t('translate.language_and_code', { language: dataLanguages[base].nativeName, code: code });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user