1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-27 10:47:35 +00:00

LibJS: Handle the [[LanguageDisplay]] tag when localizing languages

This commit is contained in:
Timothy Flynn 2022-01-13 14:05:40 -05:00 committed by Linus Groh
parent c86f7a675d
commit c7dbe27781
2 changed files with 63 additions and 12 deletions

View file

@ -41,19 +41,60 @@ describe("correct behavior", () => {
expect(Intl.DisplayNames.prototype.of).toHaveLength(1);
});
test("option type language", () => {
const en = new Intl.DisplayNames("en", { type: "language" });
expect(en.of("en")).toBe("English");
test("option type language, display dialect", () => {
// prettier-ignore
const data = [
{ locale: "en", en: "English", es419: "inglés", zhHant: "英文" },
{ locale: "en-US", en: "American English", es419: "inglés estadounidense", zhHant: "英文(美國)" },
{ locale: "en-GB", en: "British English", es419: "inglés británico", zhHant: "英文(英國)" },
{ locale: "sr", en: "Serbian", es419: "serbio", zhHant: "塞爾維亞文" },
{ locale: "sr-Cyrl", en: "Serbian (Cyrillic)", es419: "serbio (cirílico)", zhHant: "塞爾維亞文(斯拉夫文)" },
{ locale: "sr-Cyrl-BA", en: "Serbian (Cyrillic, Bosnia & Herzegovina)", es419: "serbio (cirílico, Bosnia-Herzegovina)", zhHant: "塞爾維亞文(斯拉夫文,波士尼亞與赫塞哥維納)" },
];
const es419 = new Intl.DisplayNames("es-419", { type: "language" });
expect(es419.of("en")).toBe("inglés");
const en = new Intl.DisplayNames("en", { type: "language", languageDisplay: "dialect" });
const es419 = new Intl.DisplayNames("es-419", {
type: "language",
languageDisplay: "dialect",
});
const zhHant = new Intl.DisplayNames("zh-Hant", {
type: "language",
languageDisplay: "dialect",
});
const zhHant = new Intl.DisplayNames(["zh-Hant"], { type: "language" });
expect(zhHant.of("en")).toBe("英文");
data.forEach(d => {
expect(en.of(d.locale)).toBe(d.en);
expect(es419.of(d.locale)).toBe(d.es419);
expect(zhHant.of(d.locale)).toBe(d.zhHant);
});
});
expect(en.of("zz")).toBe("zz");
expect(es419.of("zz")).toBe("zz");
expect(zhHant.of("zz")).toBe("zz");
test("option type language, display standard", () => {
// prettier-ignore
const data = [
{ locale: "en", en: "English", es419: "inglés", zhHant: "英文" },
{ locale: "en-US", en: "English (United States)", es419: "inglés (Estados Unidos)", zhHant: "英文(美國)" },
{ locale: "en-GB", en: "English (United Kingdom)", es419: "inglés (Reino Unido)", zhHant: "英文(英國)" },
{ locale: "sr", en: "Serbian", es419: "serbio", zhHant: "塞爾維亞文" },
{ locale: "sr-Cyrl", en: "Serbian (Cyrillic)", es419: "serbio (cirílico)", zhHant: "塞爾維亞文(斯拉夫文)" },
{ locale: "sr-Cyrl-BA", en: "Serbian (Cyrillic, Bosnia & Herzegovina)", es419: "serbio (cirílico, Bosnia-Herzegovina)", zhHant: "塞爾維亞文(斯拉夫文,波士尼亞與赫塞哥維納)" },
];
const en = new Intl.DisplayNames("en", { type: "language", languageDisplay: "standard" });
const es419 = new Intl.DisplayNames("es-419", {
type: "language",
languageDisplay: "standard",
});
const zhHant = new Intl.DisplayNames("zh-Hant", {
type: "language",
languageDisplay: "standard",
});
data.forEach(d => {
expect(en.of(d.locale)).toBe(d.en);
expect(es419.of(d.locale)).toBe(d.es419);
expect(zhHant.of(d.locale)).toBe(d.zhHant);
});
});
test("option type region", () => {