This commit adds "Polish" and "Korean" to the list of languages recognized by the web-UI, and updates the XLIFF files to include a few new strings from the RAC project.
67 lines
3.5 KiB
TypeScript
67 lines
3.5 KiB
TypeScript
import * as _enLocale from "@goauthentik/locales/en";
|
|
|
|
import type { LocaleModule } from "@lit/localize";
|
|
import { msg } from "@lit/localize";
|
|
|
|
import { AkLocale, LocaleRow } from "./types";
|
|
|
|
export const DEFAULT_FALLBACK = "en";
|
|
|
|
const enLocale: LocaleModule = _enLocale;
|
|
|
|
export { enLocale };
|
|
|
|
// NOTE: This table cannot be made any shorter, despite all the repetition of syntax. Bundlers look
|
|
// for the `await import` string as a *string target* for doing alias substitution, so putting
|
|
// the import in some sort of abstracting function doesn't work. The same is true for the `msg()`
|
|
// function, which `localize` uses to find strings for extraction and translation. Likewise,
|
|
// because this is a file-level table, the `msg()` must be thunked so that they're re-run when
|
|
// the user changes the locale.
|
|
|
|
// NOTE: The matchers try to conform loosely to [RFC
|
|
// 5646](https://www.rfc-editor.org/rfc/rfc5646.txt), "Tags for the Identification of Languages." In
|
|
// practice, language tags have been seen using both hyphens and underscores, and the Chinese
|
|
// language uses both "regional" and "script" suffixes. The regexes use the language and any region
|
|
// or script.
|
|
//
|
|
// Chinese locales usually (but not always) use the script rather than region suffix. The default
|
|
// (optional) fallback for Chinese (zh) is "Chinese (simplified)", which is why it has that odd
|
|
// regex syntax at the end which means "match zh as long as it's not followed by a [:word:] token";
|
|
// Traditional script and the Taiwanese are attempted first, and if neither matches, anything
|
|
// beginning with that generic "zh" is mapped to "Chinese (simplified)."
|
|
|
|
// - Code for Lit/Locale
|
|
// - Regex for matching user-supplied locale.
|
|
// - Text Label
|
|
// - Locale loader.
|
|
|
|
// prettier-ignore
|
|
const debug: LocaleRow = [
|
|
"pseudo-LOCALE", /^pseudo/i, () => msg("Pseudolocale (for testing)"), async () => await import("@goauthentik/locales/pseudo-LOCALE"),
|
|
];
|
|
|
|
// prettier-ignore
|
|
const LOCALE_TABLE: LocaleRow[] = [
|
|
["en", /^en([_-]|$)/i, () => msg("English"), async () => await import("@goauthentik/locales/en")],
|
|
["es", /^es([_-]|$)/i, () => msg("Spanish"), async () => await import("@goauthentik/locales/es")],
|
|
["de", /^de([_-]|$)/i, () => msg("German"), async () => await import("@goauthentik/locales/de")],
|
|
["fr", /^fr([_-]|$)/i, () => msg("French"), async () => await import("@goauthentik/locales/fr")],
|
|
["ko", /^ko([_-]|$)/i, () => msg("Korean"), async () => await import("@goauthentik/locales/ko")],
|
|
["nl", /^nl([_-]|$)/i, () => msg("Dutch"), async () => await import("@goauthentik/locales/nl")],
|
|
["pl", /^pl([_-]|$)/i, () => msg("Polish"), async () => await import("@goauthentik/locales/pl")],
|
|
["tr", /^tr([_-]|$)/i, () => msg("Turkish"), async () => await import("@goauthentik/locales/tr")],
|
|
["zh-Hant", /^zh[_-](HK|Hant)/i, () => msg("Chinese (traditional)"), async () => await import("@goauthentik/locales/zh-Hant")],
|
|
["zh_TW", /^zh[_-]TW$/i, () => msg("Taiwanese Mandarin"), async () => await import("@goauthentik/locales/zh_TW")],
|
|
["zh-Hans", /^zh(\b|_)/i, () => msg("Chinese (simplified)"), async () => await import("@goauthentik/locales/zh-Hans")],
|
|
debug
|
|
];
|
|
|
|
export const LOCALES: AkLocale[] = LOCALE_TABLE.map(([code, match, label, locale]) => ({
|
|
code,
|
|
match,
|
|
label,
|
|
locale,
|
|
}));
|
|
|
|
export default LOCALES;
|