mirror of
https://github.com/getpaseo/paseo.git
synced 2026-10-22 17:22:47 +00:00
test(app): allow locale-specific plural keys
This commit is contained in:
@@ -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", () => {
|
||||
|
||||
Reference in New Issue
Block a user