mirror of
https://github.com/FoggedLens/iD.git
synced 2026-02-12 16:52:50 +00:00
support localised labels for CLDR overrides (#10703)
This commit is contained in:
@@ -15,10 +15,20 @@ const codesToSkip = ['ase', 'mis', 'mul', 'und', 'zxx'];
|
|||||||
|
|
||||||
let referencedScripts = [];
|
let referencedScripts = [];
|
||||||
|
|
||||||
function getLangNamesInNativeLang() {
|
/**
|
||||||
|
* @returns {{
|
||||||
|
* [code: string]: {
|
||||||
|
* base?: string;
|
||||||
|
* script?: string;
|
||||||
|
* nativeName?: string;
|
||||||
|
* names?: { [code: string]: string };
|
||||||
|
* }
|
||||||
|
* }}
|
||||||
|
*/
|
||||||
|
function getCLDROverrides() {
|
||||||
// manually add languages we want that aren't in CLDR
|
// manually add languages we want that aren't in CLDR
|
||||||
// see for example https://github.com/openstreetmap/iD/pull/9241/
|
// see for example https://github.com/openstreetmap/iD/pull/9241/
|
||||||
let unordered = {
|
return {
|
||||||
aer: { nativeName: 'Arrernte' },
|
aer: { nativeName: 'Arrernte' },
|
||||||
aoi: { nativeName: 'Anindilyakwa' },
|
aoi: { nativeName: 'Anindilyakwa' },
|
||||||
aus: { nativeName: 'Australian Aboriginal Languages' },
|
aus: { nativeName: 'Australian Aboriginal Languages' },
|
||||||
@@ -32,7 +42,7 @@ function getLangNamesInNativeLang() {
|
|||||||
'brh': {
|
'brh': {
|
||||||
nativeName: 'براہوئی'
|
nativeName: 'براہوئی'
|
||||||
},
|
},
|
||||||
coa: { nativeName: 'Basa Pulu Kokos' },
|
coa: { nativeName: 'Basa Pulu Kokos', names: { en: 'Cocos Malay' } },
|
||||||
'cdo': {
|
'cdo': {
|
||||||
nativeName: '閩東語'
|
nativeName: '閩東語'
|
||||||
},
|
},
|
||||||
@@ -157,7 +167,7 @@ function getLangNamesInNativeLang() {
|
|||||||
'oc': {
|
'oc': {
|
||||||
nativeName: 'Occitan'
|
nativeName: 'Occitan'
|
||||||
},
|
},
|
||||||
pih: { nativeName: 'Pitkern–Norfuk' },
|
pih: { nativeName: 'Pitkern–Norfuk', names: { en: 'Pitcairn-Norfolk', ty: 'Pitcairnais' } },
|
||||||
piu: { nativeName: 'Pintupi' },
|
piu: { nativeName: 'Pintupi' },
|
||||||
pjt: { nativeName: 'Pitjantjatjara' },
|
pjt: { nativeName: 'Pitjantjatjara' },
|
||||||
'pnb': {
|
'pnb': {
|
||||||
@@ -174,7 +184,7 @@ function getLangNamesInNativeLang() {
|
|||||||
'skr': {
|
'skr': {
|
||||||
nativeName: 'سرائیکی'
|
nativeName: 'سرائیکی'
|
||||||
},
|
},
|
||||||
tcs: { nativeName: 'Yumplatok' },
|
tcs: { nativeName: 'Yumplatok', names: { en: 'Torres Strait Creole' } },
|
||||||
tiw: { nativeName: 'Tiwi' },
|
tiw: { nativeName: 'Tiwi' },
|
||||||
'trw': {
|
'trw': {
|
||||||
nativeName: 'توروالی'
|
nativeName: 'توروالی'
|
||||||
@@ -202,7 +212,7 @@ function getLangNamesInNativeLang() {
|
|||||||
wyi: { nativeName: 'Woiwurrung' },
|
wyi: { nativeName: 'Woiwurrung' },
|
||||||
xdk: { nativeName: 'Dharug' },
|
xdk: { nativeName: 'Dharug' },
|
||||||
xni: { nativeName: 'Ngarigo' },
|
xni: { nativeName: 'Ngarigo' },
|
||||||
xph: { nativeName: 'Tyerrernotepanner' },
|
xph: { nativeName: 'Tyerrernotepanner', names: { en: 'North Midlands Tasmanian' } },
|
||||||
xrd: { nativeName: 'Gundungurra' },
|
xrd: { nativeName: 'Gundungurra' },
|
||||||
'yue-Hans': {
|
'yue-Hans': {
|
||||||
base: 'yue',
|
base: 'yue',
|
||||||
@@ -221,6 +231,13 @@ function getLangNamesInNativeLang() {
|
|||||||
},
|
},
|
||||||
zku: { nativeName: 'Kaurna' },
|
zku: { nativeName: 'Kaurna' },
|
||||||
};
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
function getLangNamesInNativeLang() {
|
||||||
|
const unordered = getCLDROverrides();
|
||||||
|
for (const key in unordered) {
|
||||||
|
delete unordered[key].names; // this is added later
|
||||||
|
}
|
||||||
|
|
||||||
let langDirectoryPaths = fs.readdirSync(cldrMainDir);
|
let langDirectoryPaths = fs.readdirSync(cldrMainDir);
|
||||||
langDirectoryPaths.forEach(code => {
|
langDirectoryPaths.forEach(code => {
|
||||||
@@ -274,11 +291,20 @@ exports.langNamesInNativeLang = langNamesInNativeLang;
|
|||||||
exports.languageNamesInLanguageOf = function(code) {
|
exports.languageNamesInLanguageOf = function(code) {
|
||||||
if (rematchCodes[code]) code = rematchCodes[code];
|
if (rematchCodes[code]) code = rematchCodes[code];
|
||||||
|
|
||||||
|
const { language } = new Intl.Locale(code);
|
||||||
|
|
||||||
let languageFilePath = `${cldrMainDir}${code}/languages.json`;
|
let languageFilePath = `${cldrMainDir}${code}/languages.json`;
|
||||||
if (!fs.existsSync(languageFilePath)) return null;
|
if (!fs.existsSync(languageFilePath)) return null;
|
||||||
|
|
||||||
let translatedLangsByCode = JSON.parse(fs.readFileSync(languageFilePath, 'utf8')).main[code].localeDisplayNames.languages;
|
let translatedLangsByCode = JSON.parse(fs.readFileSync(languageFilePath, 'utf8')).main[code].localeDisplayNames.languages;
|
||||||
|
|
||||||
|
// add any overrides that have translated names
|
||||||
|
for (const [key, value] of Object.entries(getCLDROverrides())) {
|
||||||
|
if (value.names?.[language]) {
|
||||||
|
translatedLangsByCode[key] ||= value.names?.[language];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// ignore codes for non-languages
|
// ignore codes for non-languages
|
||||||
codesToSkip.forEach(skipCode => {
|
codesToSkip.forEach(skipCode => {
|
||||||
delete translatedLangsByCode[skipCode];
|
delete translatedLangsByCode[skipCode];
|
||||||
|
|||||||
Reference in New Issue
Block a user