library-ts/browser/i18n/LanguageCode.ts

89 lines
1.7 KiB
TypeScript
Raw Normal View History

2025-03-08 12:22:18 +00:00
import { ElementType } from "../dom/ElementType";
export type de = "de";
export type en = "en";
export type es = "es";
export type fr = "fr";
export type it = "it";
export type ja = "ja";
export type pt = "pt";
export type ru = "ru";
export type zh = "zh";
export type LanguageCode =
de |
en |
es |
fr |
it |
ja |
pt |
ru |
zh
;
export class LanguageCodes
{
static #current:LanguageCode = "en";
static get current(){ return this.#current; }
static setCurrent( lc:LanguageCode )
{
this.#current = lc;
}
static fallback:LanguageCode = "en";
static readonly de:de = "de";
static readonly en:en = "en";
static readonly es:es = "es";
static readonly fr:fr = "fr";
static readonly it:it = "it";
static readonly ja:ja = "ja";
static readonly pt:pt = "pt";
static readonly ru:ru = "ru";
static readonly zh:zh = "zh";
static #htmlTypes = new Map<LanguageCode,ElementType<Element>>();
static htmlType( code:LanguageCode ):ElementType<Element>
{
if ( this.#htmlTypes.has( code ) )
{
return this.#htmlTypes.get( code );
}
this.#htmlTypes.set( code, new ElementType( "lang--" + code ) );
return this.#htmlTypes.get( code );
}
static get all()
{
let list =
[
LanguageCodes.de,
LanguageCodes.en,
LanguageCodes.es,
LanguageCodes.fr,
LanguageCodes.it,
LanguageCodes.ja,
LanguageCodes.pt,
LanguageCodes.ru,
LanguageCodes.zh
];
return list;
}
static stringToLanguageCode( value:string )
{
value = value.toLowerCase();
let index = LanguageCodes.all.indexOf( value as LanguageCode );
return index === -1 ? null : LanguageCodes.all[ index ];
}
}