Move percentage threshold to build time

Once listed, always listed
pull/1126/head
Lim Chee Aun 2025-04-20 08:11:00 +08:00
rodzic 61edf3de45
commit 75556b37cc
4 zmienionych plików z 119 dodań i 39 usunięć

Wyświetl plik

@ -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}.`,
);
}

Wyświetl plik

@ -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
}
]

Wyświetl plik

@ -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"
]

Wyświetl plik

@ -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;