rakutentech / r10 / R10.Language

Internationalization stuff

"Language" is sometime also called "Locale". We call it "Language" as it seems more common to refer to it this way.

Also in Html these are called "lang".

So we consider British English and American English as two different languages rather than two different locales of the same language.


type Language
    = Key
    | Lollipop
    | EN_US
    | JA_JP
    | ZH_TW
    | ZH_CN
    | ES_ES
    | FR_FR
    | DE_DE
    | IT_IT
    | UK_UA
    | PT_PT
    | NL_NL


type LanguageType
    = International
    | Localization


type alias Translations =
{ key : String
, en_us : String
, ja_jp : String
, zh_tw : String
, es_es : String
, fr_fr : String
, de_de : String
, zh_cn : String
, it_it : String
, uk_ua : String
, pt_pt : String
, nl_nl : String 
}

decodeJsonString : List Language -> Json.Decode.Value -> Result String Language

decoder : List Language -> String -> Result String Language

default : Language

defaultSupportedLanguageList : List Language

list : List Language

listStringTolistLanguagesRemovingUnsupported : List Language -> List String -> List Language

preferredLanguage : { supportedLanguages : List Language, navigatorLanguages : List String } -> Maybe Language

select : Language -> Translations -> String

toStringLong : LanguageType -> Language -> String

Convert Language to full language description

Example to convert ZH_TW to translation in English and Traditional Chinese

toStringLong International ZH_TW ===> "Taiwanese"

toStringLong Localization ZH_TW ===> "繁體中文"

toString : Language -> String

toStringShort : Language -> String

urlParser : Url.Parser.Parser (Language -> b) b

fromStringWithSupportedLanguages : List Language -> String -> Maybe Language

Parse Language from string (IETF format). It's case insensitive.

Parsing language from flags

Utils.I18n.Language.fromString "zh-TW" ===> Just ZH_TW

Utils.I18n.Language.fromString "ZH-TW" ===> Just ZH_TW

Utils.I18n.Language.fromString "foo" ===> Nothing