Helpers for working with DNN Localization for Engage Software team.
Dict String String
Dict
for storing localized text
decoder : Json.Decode.Decoder Localization
Decode from JSON values to a Localization
.
Supports three formats:
an array of object with key
and value
string properties
an array of object with Key
and Value
string properties
an object with string properties
import Dict
import Engage.Localization exposing (Localization)
import Json.Decode as Decode
import Result
type alias Model =
{ localization : Localization
}
""" [ { "key": "FirstName.Text", "value": "First Name:" } ] """
|> Decode.decodeString decoder
|> Result.withDefault Dict.empty
|> Model
|> localizeString "FirstName"
--> "First Name:"
""" [ { "Key": "LastName.Text", "Value": "Last Name:" } ] """
|> Decode.decodeString decoder
|> Result.withDefault Dict.empty
|> Model
|> localizeString "lastname"
--> "Last Name:"
""" { "FirstName.Text": "Given Name", "FirstName.Help": "Your given name" } """
|> Decode.decodeString decoder
|> Result.withDefault Dict.empty
|> Model
|> localizeString "FirstName.Help"
--> "Your given name"
fromDict : Dict String String -> Localization
Convert a dictionary to a Localization
.
This normalizes the data in the dictionary (i.e. it is not the same as just using a Dict String String
directly).
import Dict
import Engage.Localization as Localization
type alias Model =
{ localization : Localization
}
Dict.fromList [ ("FirstName.Text", "First Name:") ]
|> Localization.fromDict
|> Model
|> Localization.localizeString "FirstName"
--> "First Name:"
empty : Localization
Creates an empty Localization
.
import Engage.Localization as Localization
type alias Model =
{ localization : Localization
}
initialModel : Model
initialModel =
Model Localization.empty
initialModel
|> Localization.localizeString "FirstName"
--> "[FirstName]"
localizeString : String -> { a | localization : Localization } -> String
Localize a key using the given Localization
dict.
If the key is not found, this function will return the key value wrapped in [ ]
.
The key is searched in a case-insensitive manner.
Keys which end in .Text
may omit that suffix.
import Dict
import Engage.Localization as Localization exposing (Localization)
myLocalization : Localization
myLocalization = Dict.fromList [ ("FirstName.Text", "First Name: ") ] |> Localization.fromDict
localizeString "FirstName" { localization = myLocalization }
--> "First Name: "
localizeString "LastName" { localization = myLocalization }
--> "[LastName]"
localizeStringWithDefault : String -> String -> { a | localization : Localization } -> String
Try to localize a key using the given Localization
dict, and if the key is not found, return the given default value.
The key is searched in a case-insensitive manner.
Keys which end in .Text
may omit that suffix.
import Dict
import Engage.Localization as Localization exposing (Localization)
myLocalization : Localization
myLocalization = Dict.fromList [ ("FirstName.Text", "First Name: ") ] |> Localization.fromDict
localizeStringWithDefault "First Name" "FirstName.Text" { localization = myLocalization }
--> "First Name: "
localizeStringWithDefault "Last Name" "LastName.Text" { localization = myLocalization }
--> "Last Name"
localizeText : String -> { a | localization : Localization } -> Html msg
Similar to localizeText
, but with the text wrapped in Html.text
import Dict
import Engage.Localization as Localization exposing (Localization)
import Html
myLocalization : Localization
myLocalization = Dict.fromList [ ("FirstName.Text", "First Name: ") ] |> Localization.fromDict
localizeText "FirstName.Text" { localization = myLocalization }
--> Html.text "First Name: "
localizeText "LastName.Text" { localization = myLocalization }
--> Html.text "[LastName.Text]"
localizeTextWithDefault : String -> String -> { a | localization : Localization } -> Html msg
Similar to localizeTextWithDefault
, but with the text wrapped in Html.text
import Dict
import Engage.Localization as Localization exposing (Localization)
import Html
myLocalization : Localization
myLocalization = Dict.fromList [ ("FirstName.Text", "First Name: ") ] |> Localization.fromDict
localizeTextWithDefault "First Name" "FirstName.Text" { localization = myLocalization }
--> Html.text "First Name: "
localizeTextWithDefault "Last Name" "LastName.Text" { localization = myLocalization }
--> Html.text "Last Name"