@@ -15,10 +15,20 @@ const codesToSkip = ['ase', 'mis', 'mul', 'und', 'zxx'];
15
15
16
16
let referencedScripts = [ ] ;
17
17
18
- function getLangNamesInNativeLang ( ) {
18
+ /**
19
+ * @returns {{
20
+ * [code: string]: {
21
+ * base?: string;
22
+ * script?: string;
23
+ * nativeName?: string;
24
+ * names?: { [code: string]: string };
25
+ * }
26
+ * }}
27
+ */
28
+ function getCLDROverrides ( ) {
19
29
// manually add languages we want that aren't in CLDR
20
30
// see for example https://github.com/openstreetmap/iD/pull/9241/
21
- let unordered = {
31
+ return {
22
32
aer : { nativeName : 'Arrernte' } ,
23
33
aoi : { nativeName : 'Anindilyakwa' } ,
24
34
aus : { nativeName : 'Australian Aboriginal Languages' } ,
@@ -32,7 +42,7 @@ function getLangNamesInNativeLang() {
32
42
'brh' : {
33
43
nativeName : 'براہوئی'
34
44
} ,
35
- coa : { nativeName : 'Basa Pulu Kokos' } ,
45
+ coa : { nativeName : 'Basa Pulu Kokos' , names : { en : 'Cocos Malay' } } ,
36
46
'cdo' : {
37
47
nativeName : '閩東語'
38
48
} ,
@@ -157,7 +167,7 @@ function getLangNamesInNativeLang() {
157
167
'oc' : {
158
168
nativeName : 'Occitan'
159
169
} ,
160
- pih : { nativeName : 'Pitkern–Norfuk' } ,
170
+ pih : { nativeName : 'Pitkern–Norfuk' , names : { en : 'Pitcairn-Norfolk' , ty : 'Pitcairnais' } } ,
161
171
piu : { nativeName : 'Pintupi' } ,
162
172
pjt : { nativeName : 'Pitjantjatjara' } ,
163
173
'pnb' : {
@@ -174,7 +184,7 @@ function getLangNamesInNativeLang() {
174
184
'skr' : {
175
185
nativeName : 'سرائیکی'
176
186
} ,
177
- tcs : { nativeName : 'Yumplatok' } ,
187
+ tcs : { nativeName : 'Yumplatok' , names : { en : 'Torres Strait Creole' } } ,
178
188
tiw : { nativeName : 'Tiwi' } ,
179
189
'trw' : {
180
190
nativeName : 'توروالی'
@@ -202,7 +212,7 @@ function getLangNamesInNativeLang() {
202
212
wyi : { nativeName : 'Woiwurrung' } ,
203
213
xdk : { nativeName : 'Dharug' } ,
204
214
xni : { nativeName : 'Ngarigo' } ,
205
- xph : { nativeName : 'Tyerrernotepanner' } ,
215
+ xph : { nativeName : 'Tyerrernotepanner' , names : { en : 'North Midlands Tasmanian' } } ,
206
216
xrd : { nativeName : 'Gundungurra' } ,
207
217
'yue-Hans' : {
208
218
base : 'yue' ,
@@ -221,6 +231,13 @@ function getLangNamesInNativeLang() {
221
231
} ,
222
232
zku : { nativeName : 'Kaurna' } ,
223
233
} ;
234
+ }
235
+
236
+ function getLangNamesInNativeLang ( ) {
237
+ const unordered = getCLDROverrides ( ) ;
238
+ for ( const key in unordered ) {
239
+ delete unordered [ key ] . names ; // this is added later
240
+ }
224
241
225
242
let langDirectoryPaths = fs . readdirSync ( cldrMainDir ) ;
226
243
langDirectoryPaths . forEach ( code => {
@@ -274,11 +291,20 @@ exports.langNamesInNativeLang = langNamesInNativeLang;
274
291
exports . languageNamesInLanguageOf = function ( code ) {
275
292
if ( rematchCodes [ code ] ) code = rematchCodes [ code ] ;
276
293
294
+ const { language } = new Intl . Locale ( code ) ;
295
+
277
296
let languageFilePath = `${ cldrMainDir } ${ code } /languages.json` ;
278
297
if ( ! fs . existsSync ( languageFilePath ) ) return null ;
279
298
280
299
let translatedLangsByCode = JSON . parse ( fs . readFileSync ( languageFilePath , 'utf8' ) ) . main [ code ] . localeDisplayNames . languages ;
281
300
301
+ // add any overrides that have translated names
302
+ for ( const [ key , value ] of Object . entries ( getCLDROverrides ( ) ) ) {
303
+ if ( value . names ?. [ language ] ) {
304
+ translatedLangsByCode [ key ] ||= value . names ?. [ language ] ;
305
+ }
306
+ }
307
+
282
308
// ignore codes for non-languages
283
309
codesToSkip . forEach ( skipCode => {
284
310
delete translatedLangsByCode [ skipCode ] ;
0 commit comments