library-ts/browser/i18n/MultiString.ts

100 lines
2.4 KiB
TypeScript
Raw Normal View History

2025-03-08 12:22:18 +00:00
import { ElementType } from "../dom/ElementType";
import { LanguageCode, LanguageCodes } from "./LanguageCode";
export class MultiString
{
en:string;
de?:string;
fr?:string;
es?:string;
pt?:string;
it?:string;
ru?:string;
ja?:string;
zh?:string;
static _htmlType:ElementType<any>;
static create( value:string )
{
let ms = new MultiString();
ms.en = value;
return ms;
}
static resolve( value:string|MultiString )
{
if ( typeof value === "string" )
{
return value;
}
let ms = value as MultiString;
return MultiString.get( ms, LanguageCodes.current, LanguageCodes.fallback );
}
static get htmlType()
{
if ( MultiString._htmlType )
{
return MultiString._htmlType;
}
MultiString._htmlType = new ElementType( "multi--string" );
return MultiString._htmlType;
}
static asArray( ms:MultiString)
{
return [ ms.en, ms.de, ms.fr, ms.es, ms.pt, ms.it, ms.ru, ms.ja, ms.zh ];
}
static get( ms:MultiString, code:LanguageCode, fallback:LanguageCode = LanguageCodes.en )
{
//console.log( "get > ms", ms );
let value = MultiString.fromCode( ms, code );
if ( value )
{
return value;
}
return MultiString.fromCode( ms, fallback );
}
static set( ms:MultiString, code:LanguageCode, value:string )
{
switch ( code )
{
case LanguageCodes.en: { ms.en = value; } break;
case LanguageCodes.de: { ms.de = value; } break;
case LanguageCodes.fr: { ms.fr = value; } break;
case LanguageCodes.es: { ms.es = value; } break;
case LanguageCodes.pt: { ms.pt = value; } break;
case LanguageCodes.it: { ms.it = value; } break;
case LanguageCodes.ru: { ms.ru = value; } break;
case LanguageCodes.ja: { ms.ja = value; } break;
case LanguageCodes.zh: { ms.zh = value; } break;
}
}
static fromCode( ms:MultiString, code:LanguageCode )
{
switch ( code )
{
case LanguageCodes.en: return ms.en;
case LanguageCodes.de: return ms.de;
case LanguageCodes.fr: return ms.fr;
case LanguageCodes.es: return ms.es;
case LanguageCodes.pt: return ms.pt;
case LanguageCodes.it: return ms.it;
case LanguageCodes.ru: return ms.ru;
case LanguageCodes.ja: return ms.ja;
case LanguageCodes.zh: return ms.zh;
}
}
}