PureScript FFI bindings for i18next, a JavaScript internationalization library.
# PureScript dependencies
spago install
# JavaScript dependencies
bun installRequires i18next and optionally i18next-browser-languagedetector as npm dependencies:
bun add i18next i18next-browser-languagedetectorimport Prelude
import Effect.Aff (launchAff_)
import Effect.Class (liftEffect)
import Foreign (unsafeToForeign)
import Foreign.Object as Object
import I18Next as I18N
main = launchAff_ do
i18n <- liftEffect I18N.createInstance
let resources = Object.fromHomogeneous
{ en: Object.fromHomogeneous
{ translation: Object.fromHomogeneous
{ greeting: "Hello {{name}}"
, items_count_one: "{{count}} item"
, items_count_other: "{{count}} items"
}
}
, nl: Object.fromHomogeneous
{ translation: Object.fromHomogeneous
{ greeting: "Hallo {{name}}"
}
}
}
I18N.init i18n $ I18N.defaultOptions
{ lng = "en"
, resources = resources
}
-- Simple translation
result <- liftEffect $ I18N.t i18n "greeting"
-- With interpolation
result <- liftEffect $ I18N.tWithOpts i18n "greeting"
(unsafeToForeign { name: "World" })
-- => "Hello World"
-- Pluralization
result <- liftEffect $ I18N.tWithOpts i18n "items_count"
(unsafeToForeign { count: 3 })
-- => "3 items"
-- Switch language
I18N.changeLanguage i18n "nl"import I18Next as I18N
import I18Next.Plugin.LanguageDetector (languageDetector)
main = launchAff_ do
i18n <- liftEffect I18N.createInstance
_ <- liftEffect $ I18N.use i18n languageDetector
I18N.init i18n $ I18N.defaultOptions { resources = myResources }
-- language is auto-detected from browser settingsliftEffect $ I18N.onLanguageChanged i18n \lng ->
log $ "Language changed to: " <> lng| Function | Type | Description |
|---|---|---|
createInstance |
Effect I18n |
Create a new i18next instance |
use |
I18n -> Plugin -> Effect I18n |
Register a plugin (before init) |
init |
I18n -> InitOptions -> Aff Unit |
Initialize with options |
t |
I18n -> String -> Effect String |
Translate a key |
tWithOpts |
I18n -> String -> Foreign -> Effect String |
Translate with interpolation/pluralization |
changeLanguage |
I18n -> String -> Aff Unit |
Switch active language |
language |
I18n -> Effect String |
Get current language |
onLanguageChanged |
I18n -> (String -> Effect Unit) -> Effect Unit |
Listen for language changes |
Apache-2.0