kopia lustrzana https://github.com/cheeaun/phanpy
rodzic
61edf3de45
commit
75556b37cc
|
@ -3,6 +3,13 @@ import fs from 'node:fs';
|
|||
// Dependency from Lingui, not listed in package.json
|
||||
import PO from 'pofile';
|
||||
|
||||
let listedLocales = [];
|
||||
try {
|
||||
listedLocales = JSON.parse(
|
||||
fs.readFileSync('src/data/listed-locales.json', 'utf8'),
|
||||
);
|
||||
} catch (e) {}
|
||||
|
||||
const DEFAULT_LANG = 'en';
|
||||
const IGNORE_LANGS = [DEFAULT_LANG, 'pseudo-LOCALE'];
|
||||
|
||||
|
@ -82,12 +89,41 @@ const fullCatalogs = Object.entries(catalogs)
|
|||
return { code, nativeName, name, completion };
|
||||
});
|
||||
|
||||
// Set listed: true if completion > PERCENTAGE_THRESHOLD
|
||||
const PERCENTAGE_THRESHOLD = 50;
|
||||
const listedCatalogs = fullCatalogs.map((catalog) => ({
|
||||
...catalog,
|
||||
// Once listed, always listed
|
||||
// A locale may exceed percentage threshold today, but not tomorrow
|
||||
// So it should't suddenly become unlisted
|
||||
listed:
|
||||
listedLocales.includes(catalog.code) ||
|
||||
catalog.completion >= PERCENTAGE_THRESHOLD,
|
||||
}));
|
||||
|
||||
// Sort by completion
|
||||
const sortedCatalogs = [...fullCatalogs].sort(
|
||||
const sortedCatalogs = [...listedCatalogs].sort(
|
||||
(a, b) => b.completion - a.completion,
|
||||
);
|
||||
|
||||
console.table(sortedCatalogs);
|
||||
console.log(
|
||||
`Total listed/unlisted: ${listedCatalogs.filter((c) => c.listed).length}/${
|
||||
listedCatalogs.filter((c) => !c.listed).length
|
||||
}`,
|
||||
);
|
||||
|
||||
const path = 'src/data/catalogs.json';
|
||||
fs.writeFileSync(path, JSON.stringify(fullCatalogs, null, 2));
|
||||
fs.writeFileSync(path, JSON.stringify(listedCatalogs, null, 2));
|
||||
console.log('File written:', path);
|
||||
|
||||
const path2 = 'src/data/listed-locales.json';
|
||||
const codes = listedCatalogs.filter((c) => c.listed).map((c) => c.code);
|
||||
if (codes.length >= listedLocales.length) {
|
||||
fs.writeFileSync(path2, JSON.stringify(codes, null, 2));
|
||||
console.log('File written:', path2);
|
||||
} else {
|
||||
console.error(
|
||||
`Number of listed locales reduced from ${listedLocales.length} to ${codes.length}.`,
|
||||
);
|
||||
}
|
||||
|
|
|
@ -3,168 +3,196 @@
|
|||
"code": "ar-SA",
|
||||
"nativeName": "العربية",
|
||||
"name": "Arabic",
|
||||
"completion": 24
|
||||
"completion": 24,
|
||||
"listed": false
|
||||
},
|
||||
{
|
||||
"code": "ca-ES",
|
||||
"nativeName": "català",
|
||||
"name": "Catalan",
|
||||
"completion": 100
|
||||
"completion": 100,
|
||||
"listed": true
|
||||
},
|
||||
{
|
||||
"code": "cs-CZ",
|
||||
"nativeName": "čeština",
|
||||
"name": "Czech",
|
||||
"completion": 81
|
||||
"completion": 81,
|
||||
"listed": true
|
||||
},
|
||||
{
|
||||
"code": "de-DE",
|
||||
"nativeName": "Deutsch",
|
||||
"name": "German",
|
||||
"completion": 92
|
||||
"completion": 92,
|
||||
"listed": true
|
||||
},
|
||||
{
|
||||
"code": "eo-UY",
|
||||
"nativeName": "Esperanto",
|
||||
"name": "Esperanto",
|
||||
"completion": 99
|
||||
"completion": 99,
|
||||
"listed": true
|
||||
},
|
||||
{
|
||||
"code": "es-ES",
|
||||
"nativeName": "español",
|
||||
"name": "Spanish",
|
||||
"completion": 100
|
||||
"completion": 100,
|
||||
"listed": true
|
||||
},
|
||||
{
|
||||
"code": "eu-ES",
|
||||
"nativeName": "euskara",
|
||||
"name": "Basque",
|
||||
"completion": 98
|
||||
"completion": 98,
|
||||
"listed": true
|
||||
},
|
||||
{
|
||||
"code": "fa-IR",
|
||||
"nativeName": "فارسی",
|
||||
"name": "Persian",
|
||||
"completion": 71
|
||||
"completion": 71,
|
||||
"listed": true
|
||||
},
|
||||
{
|
||||
"code": "fi-FI",
|
||||
"nativeName": "suomi",
|
||||
"name": "Finnish",
|
||||
"completion": 100
|
||||
"completion": 100,
|
||||
"listed": true
|
||||
},
|
||||
{
|
||||
"code": "fr-FR",
|
||||
"nativeName": "français",
|
||||
"name": "French",
|
||||
"completion": 100
|
||||
"completion": 100,
|
||||
"listed": true
|
||||
},
|
||||
{
|
||||
"code": "gl-ES",
|
||||
"nativeName": "galego",
|
||||
"name": "Galician",
|
||||
"completion": 100
|
||||
"completion": 100,
|
||||
"listed": true
|
||||
},
|
||||
{
|
||||
"code": "he-IL",
|
||||
"nativeName": "עברית",
|
||||
"name": "Hebrew",
|
||||
"completion": 10
|
||||
"completion": 10,
|
||||
"listed": false
|
||||
},
|
||||
{
|
||||
"code": "it-IT",
|
||||
"nativeName": "italiano",
|
||||
"name": "Italian",
|
||||
"completion": 100
|
||||
"completion": 100,
|
||||
"listed": true
|
||||
},
|
||||
{
|
||||
"code": "ja-JP",
|
||||
"nativeName": "日本語",
|
||||
"name": "Japanese",
|
||||
"completion": 47
|
||||
"completion": 47,
|
||||
"listed": false
|
||||
},
|
||||
{
|
||||
"code": "kab",
|
||||
"nativeName": "Taqbaylit",
|
||||
"name": "Kabyle",
|
||||
"completion": 95
|
||||
"completion": 95,
|
||||
"listed": true
|
||||
},
|
||||
{
|
||||
"code": "ko-KR",
|
||||
"nativeName": "한국어",
|
||||
"name": "Korean",
|
||||
"completion": 88
|
||||
"completion": 88,
|
||||
"listed": true
|
||||
},
|
||||
{
|
||||
"code": "lt-LT",
|
||||
"nativeName": "lietuvių",
|
||||
"name": "Lithuanian",
|
||||
"completion": 98
|
||||
"completion": 98,
|
||||
"listed": true
|
||||
},
|
||||
{
|
||||
"code": "nb-NO",
|
||||
"nativeName": "norsk bokmål",
|
||||
"name": "Norwegian Bokmål",
|
||||
"completion": 49
|
||||
"completion": 49,
|
||||
"listed": false
|
||||
},
|
||||
{
|
||||
"code": "nl-NL",
|
||||
"nativeName": "Nederlands",
|
||||
"name": "Dutch",
|
||||
"completion": 75
|
||||
"completion": 75,
|
||||
"listed": true
|
||||
},
|
||||
{
|
||||
"code": "pl-PL",
|
||||
"nativeName": "polski",
|
||||
"name": "Polish",
|
||||
"completion": 67
|
||||
"completion": 67,
|
||||
"listed": true
|
||||
},
|
||||
{
|
||||
"code": "pt-BR",
|
||||
"nativeName": "português",
|
||||
"name": "Portuguese",
|
||||
"completion": 100
|
||||
"completion": 100,
|
||||
"listed": true
|
||||
},
|
||||
{
|
||||
"code": "pt-PT",
|
||||
"nativeName": "português",
|
||||
"name": "Portuguese",
|
||||
"completion": 100
|
||||
"completion": 100,
|
||||
"listed": true
|
||||
},
|
||||
{
|
||||
"code": "ru-RU",
|
||||
"nativeName": "русский",
|
||||
"name": "Russian",
|
||||
"completion": 100
|
||||
"completion": 100,
|
||||
"listed": true
|
||||
},
|
||||
{
|
||||
"code": "th-TH",
|
||||
"nativeName": "ไทย",
|
||||
"name": "Thai",
|
||||
"completion": 8
|
||||
"completion": 8,
|
||||
"listed": false
|
||||
},
|
||||
{
|
||||
"code": "tr-TR",
|
||||
"nativeName": "Türkçe",
|
||||
"name": "Turkish",
|
||||
"completion": 47
|
||||
"completion": 47,
|
||||
"listed": false
|
||||
},
|
||||
{
|
||||
"code": "uk-UA",
|
||||
"nativeName": "українська",
|
||||
"name": "Ukrainian",
|
||||
"completion": 92
|
||||
"completion": 92,
|
||||
"listed": true
|
||||
},
|
||||
{
|
||||
"code": "zh-CN",
|
||||
"nativeName": "简体中文",
|
||||
"name": "Simplified Chinese",
|
||||
"completion": 100
|
||||
"completion": 100,
|
||||
"listed": true
|
||||
},
|
||||
{
|
||||
"code": "zh-TW",
|
||||
"nativeName": "繁體中文",
|
||||
"name": "Traditional Chinese",
|
||||
"completion": 32
|
||||
"completion": 32,
|
||||
"listed": false
|
||||
}
|
||||
]
|
|
@ -0,0 +1,23 @@
|
|||
[
|
||||
"ca-ES",
|
||||
"es-ES",
|
||||
"fi-FI",
|
||||
"gl-ES",
|
||||
"it-IT",
|
||||
"pt-BR",
|
||||
"pt-PT",
|
||||
"zh-CN",
|
||||
"eo-UY",
|
||||
"ru-RU",
|
||||
"eu-ES",
|
||||
"lt-LT",
|
||||
"kab",
|
||||
"de-DE",
|
||||
"uk-UA",
|
||||
"fr-FR",
|
||||
"ko-KR",
|
||||
"cs-CZ",
|
||||
"nl-NL",
|
||||
"fa-IR",
|
||||
"pl-PL"
|
||||
]
|
|
@ -3,22 +3,15 @@ import catalogs from './data/catalogs.json';
|
|||
export const DEFAULT_LANG = 'en';
|
||||
export const CATALOGS = catalogs;
|
||||
|
||||
// Get locales that's >= X% translated
|
||||
const PERCENTAGE_THRESHOLD = 50;
|
||||
|
||||
const locales = [
|
||||
DEFAULT_LANG,
|
||||
...catalogs
|
||||
.filter(({ completion }) => completion >= PERCENTAGE_THRESHOLD)
|
||||
.map(({ code }) => code),
|
||||
...catalogs.filter(({ listed }) => listed).map(({ code }) => code),
|
||||
];
|
||||
export const LOCALES = locales;
|
||||
|
||||
let devLocales = [];
|
||||
if (import.meta.env?.DEV || import.meta.env?.PHANPY_SHOW_DEV_LOCALES) {
|
||||
devLocales = catalogs
|
||||
.filter(({ completion }) => completion < PERCENTAGE_THRESHOLD)
|
||||
.map(({ code }) => code);
|
||||
devLocales = catalogs.filter(({ listed }) => !listed).map(({ code }) => code);
|
||||
devLocales.push('pseudo-LOCALE');
|
||||
}
|
||||
export const DEV_LOCALES = devLocales;
|
||||
|
|
Ładowanie…
Reference in New Issue