Helpers for working with DNN Localization for Engage Software team.
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"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:"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]"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]"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"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]"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"
Dictfor storing localized text