Description
Localization library for reflex.
Description
Library provides helpers for dynamic strings that depends on current selected language. See also `reflex-localize-dom` for examples and DOM related helpers.
README.md
reflex-localize
Library provides helpers for dynamic strings that depends on current selected language.
How to use
First, you should define which languages your app supports:
module App.Language(
Language(..)
, module Reflex.Localize
) where
import Reflex.Localize
import Reflex.Localize.Language
data instance Language
= English
| Russian
Second, define enumeration for strings ids.
module App.Localization(
module App.Localization
, module App.Language
) where
import App.Language
data AboutPageStrings =
AboutTitle
| AboutVersion
| AboutLicence
| AboutHomepage
| AboutDevelopers
instance LocalizedPrint AboutPageStrings where
localizedShow l v = case l of
English -> case v of
AboutTitle -> "About"
AboutVersion -> "Version"
AboutLicence -> "Licence"
AboutHomepage -> "Homepage"
AboutDevelopers -> "Developers"
Russian -> case v of
AboutTitle -> "О продукте"
AboutVersion -> "Версия"
AboutLicence -> "Лицензия"
AboutHomepage -> "Сайт"
AboutDevelopers -> "Разработчики"
You can either collect all strings to one data sum or split strings for each widget.
Finally, you should implement MonadLocalized
type class in you application monad. We suggest using monad transformer LocalizeT
via runLocalize
function:
runLocalize :: (Reflex t, TriggerEvent t m, MonadIO m) => Language -> LocalizeT t m a -> m a