Package

purescript-i18next

Repository
philippedev101/purescript-i18next
License
Apache-2.0
Uploaded by
pacchettibotti
Published on
2026-03-13T21:15:18Z

PureScript FFI bindings for i18next, a JavaScript internationalization library.

Installation

# PureScript dependencies
spago install

# JavaScript dependencies
bun install

Requires i18next and optionally i18next-browser-languagedetector as npm dependencies:

bun add i18next i18next-browser-languagedetector

Usage

import 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"

Browser language detection

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 settings

Reacting to language changes

liftEffect $ I18N.onLanguageChanged i18n \lng ->
  log $ "Language changed to: " <> lng

API

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

License

Apache-2.0

Modules
I18Next
I18Next.Plugin.LanguageDetector
Dependencies