# reflex-localize-dom Dom extensions for [reflex-localize](../reflex-localize/README.md). Library provides helpers for dynamic strings that depends on current selected language. # How to use Build example with `cabal new-build -f examples`. First, you should define which languages your app supports: ``` haskell 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. ``` haskell 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. And finally you should implement `MonadLocalized` type class in you application monad. We suggest using monad transformer `LocalizeT` via `runLocalize` function: ``` haskell runLocalize :: (Reflex t, TriggerEvent t m, MonadIO m) => Language -> LocalizeT t m a -> m a ``` Finally, you can define widgets with localization like following: ``` haskell buttonClass :: (DomBuilder t m, PostBuild t m, MonadLocalized t m, LocalizedPrint lbl) => Dynamic t Text -> lbl -> m (Event t ()) buttonClass classValD lbl = mkButton "button" [("onclick", "return false;")] classValD . dynText =<< localized lbl mkButton :: (DomBuilder t m, PostBuild t m) => Text -> Map Text Text -> Dynamic t Text -> m a -> m (Event t a) mkButton eltp attrs classValD ma = do let classesD = do classVal <- classValD pure $ attrs <> [("class", classVal)] (e, a) <- elDynAttr' eltp classesD ma return $ a <$ domEvent Click e ```