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; 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; } } }