import { MultilingualScopes, LanguageTags } from "./Enums";
import { Language } from "./Language";
/**
 * The current language settings in relation to availableLanguages and fallback rules
 * */
export interface ScopedLanguageSetting {
    availableLanguages: Array<Language>;
    defaultLanguageTag: LanguageTags;
    userPreferredLanguageTag: LanguageTags;
    excludeCountry: boolean;
}
/**
 * Language tag (languageTags-RegionTag)("ISO 639-1"-"ISO 3166-1") as property and the value beloning to what language tag
 * Resolve using MultilingualStore.getters.stringValue (or propertyName["en-us"] etc)
 * */
export interface MultilingualString {
    /**
     * Only used for type identification, always set to true in new instances.
     * @example if(someProp.isMultilingualString){return someProp["ar-sa"];}
     * */
    isMultilingualString: true;
    "ar-sa"?: string;
    "bg-bg"?: string;
    "ca-es"?: string;
    "zh-tw"?: string;
    "cs-cz"?: string;
    "da-dk"?: string;
    "de-de"?: string;
    "el-gr"?: string;
    "en-us"?: string;
    "fi-fi"?: string;
    "fr-fr"?: string;
    "he-il"?: string;
    "hu-hu"?: string;
    "is-is"?: string;
    "it-it"?: string;
    "ja-jp"?: string;
    "ko-kr"?: string;
    "nl-nl"?: string;
    "nb-no"?: string;
    "pl-pl"?: string;
    "pt-br"?: string;
    "ro-ro"?: string;
    "ru-ru"?: string;
    "hr-hr"?: string;
    "sk-sk"?: string;
    "sq-al"?: string;
    "sv-se"?: string;
    "th-th"?: string;
    "tr-tr"?: string;
    "ur-pk"?: string;
    "id-id"?: string;
    "uk-ua"?: string;
    "be-by"?: string;
    "sl-si"?: string;
    "et-ee"?: string;
    "lv-lv"?: string;
    "lt-lt"?: string;
    "fa-ir"?: string;
    "vi-vn"?: string;
    "hy-am"?: string;
    "eu-es"?: string;
    "mk-mk"?: string;
    "af-za"?: string;
    "ka-ge"?: string;
    "fo-fo"?: string;
    "hi-in"?: string;
    "ms-my"?: string;
    "kk-kz"?: string;
    "ky-kg"?: string;
    "sw-ke"?: string;
    "tt-ru"?: string;
    "pa-in"?: string;
    "gu-in"?: string;
    "ta-in"?: string;
    "te-in"?: string;
    "kn-in"?: string;
    "mr-in"?: string;
    "sa-in"?: string;
    "mn-mn"?: string;
    "gl-es"?: string;
    "dv-mv"?: string;
    "ar-iq"?: string;
    "zh-cn"?: string;
    "de-ch"?: string;
    "en-gb"?: string;
    "es-mx"?: string;
    "fr-be"?: string;
    "it-ch"?: string;
    "nl-be"?: string;
    "nn-no"?: string;
    "pt-pt"?: string;
    "sv-fi"?: string;
    "ms-bn"?: string;
    "ar-eg"?: string;
    "zh-hk"?: string;
    "de-at"?: string;
    "en-au"?: string;
    "en-es"?: string;
    "fr-ca"?: string;
    "ar-ly"?: string;
    "zh-sg"?: string;
    "de-lu"?: string;
    "en-ca"?: string;
    "es-gt"?: string;
    "fr-ch"?: string;
    "ar-dz"?: string;
    "zh-mo"?: string;
    "de-li"?: string;
    "en-nz"?: string;
    "es-cr"?: string;
    "fr-lu"?: string;
    "ar-ma"?: string;
    "en-ie"?: string;
    "es-pa"?: string;
    "fr-mc"?: string;
    "ar-tn"?: string;
    "en-za"?: string;
    "es-do"?: string;
    "ar-om"?: string;
    "en-jm"?: string;
    "es-ve"?: string;
    "ar-ye"?: string;
    "es-co"?: string;
    "ar-sy"?: string;
    "en-bz"?: string;
    "es-pe"?: string;
    "ar-jo"?: string;
    "en-tt"?: string;
    "es-ar"?: string;
    "ar-lb"?: string;
    "en-zw"?: string;
    "es-ec"?: string;
    "ar-kw"?: string;
    "en-ph"?: string;
    "es-cl"?: string;
    "ar-ae"?: string;
    "es-uy"?: string;
    "ar-bh"?: string;
    "es-py"?: string;
    "ar-qa"?: string;
    "es-bo"?: string;
    "es-sv"?: string;
    "es-hn"?: string;
    "es-pr"?: string;
    "zu-za"?: string;
    "xh-za"?: string;
    "fy-nl"?: string;
    "tn-za"?: string;
    "se-se"?: string;
    "se-fi"?: string;
    "cy-gb"?: string;
    "hr-ba"?: string;
    "mi-nz"?: string;
    "ga-ie"?: string;
    "rm-ch"?: string;
    "lb-lu"?: string;
    "ns-za"?: string;
    "se-no"?: string;
    "mt-mt"?: string;
}
export interface IMultilingualStore {
    getters: {
        languageSetting: (scope: MultilingualScopes) => ScopedLanguageSetting;
        ensureMultilingualString: (value: string | MultilingualString) => MultilingualString;
        stringValue: (multilingualString: MultilingualString, scope?: MultilingualScopes) => string;
    };
}
