test(app): allow locale-specific plural keys

This commit is contained in:
Michael Wu
2026-10-03 05:07:05 +09:00
parent c211d7af97
commit e25049fb20
+24 -9
View File
@@ -20,6 +20,21 @@ function flattenKeys(value: unknown, prefix = ""): string[] {
return entries.flatMap(([key, child]) => flattenKeys(child, prefix ? `${prefix}.${key}` : key));
}
const pluralSuffixPattern = /_(zero|one|two|few|many|other)$/;
function canonicalKeys(value: unknown): string[] {
const keys = flattenKeys(value);
const keySet = new Set(keys);
return [
...new Set(
keys.map((key) => {
const baseKey = key.replace(pluralSuffixPattern, "");
return baseKey !== key && keySet.has(baseKey) ? baseKey : key;
}),
),
].sort();
}
function flattenStrings(value: unknown, prefix = ""): Record<string, string> {
if (typeof value === "string") {
return { [prefix]: value };
@@ -105,15 +120,15 @@ function findUntranslatedConnectionErrors(): string[] {
describe("translation resources", () => {
it("keeps all supported language keys in sync with English", () => {
const englishKeys = flattenKeys(en).sort();
expect(flattenKeys(ar).sort()).toEqual(englishKeys);
expect(flattenKeys(es).sort()).toEqual(englishKeys);
expect(flattenKeys(fr).sort()).toEqual(englishKeys);
expect(flattenKeys(ja).sort()).toEqual(englishKeys);
expect(flattenKeys(ko).sort()).toEqual(englishKeys);
expect(flattenKeys(ptBR).sort()).toEqual(englishKeys);
expect(flattenKeys(ru).sort()).toEqual(englishKeys);
expect(flattenKeys(zhCN).sort()).toEqual(englishKeys);
const englishKeys = canonicalKeys(en);
expect(canonicalKeys(ar)).toEqual(englishKeys);
expect(canonicalKeys(es)).toEqual(englishKeys);
expect(canonicalKeys(fr)).toEqual(englishKeys);
expect(canonicalKeys(ja)).toEqual(englishKeys);
expect(canonicalKeys(ko)).toEqual(englishKeys);
expect(canonicalKeys(ptBR)).toEqual(englishKeys);
expect(canonicalKeys(ru)).toEqual(englishKeys);
expect(canonicalKeys(zhCN)).toEqual(englishKeys);
});
it("keeps non-English supported languages translated beyond fallback labels", () => {