Skip to content

spurreiter/preact-i18next-icu

Repository files navigation

preact-i18next-icu

i18next provider with icu syntax for preact

A slim wrapper around i18next for preact Components.

Implements:

ToC

installation

npm i preact-i18next-icu

usage

IntlProvider

Provides the context for i18next.

import { IntlProvider } from 'preact-i18next-icu'

function App (props) {
  <IntlProvider lngs={['en', 'de']}>
    {props.children}
  </IntlProvider>
}

props

property type description
fallback? preact.AnyComponent fallback component which is rendered while new language settings are loading, e.g. spinner
backends? i18next.Module[] Array of i18next backends
options? object i18next init options
lngs? string[] Array of languages which are loaded on initialization

useTranslation

Grants access to the IntlProvider context.

import { useTranslation } from 'preact-i18next-icu'

function Test () {
  const { t, changeLanguage, lng, i18n } = useTranslation()

  return (
    <>
      <button onClick={() => changeLanguage('fr')}>{t('Change to french')}</button>
      <p>t('{language} selected', { language: lng })</p>
      <p>t('Available languages: {languages}', { languages: i18n.languages.join(', ') })</p>
    </>
  )
}

Message

Message which supports ICU message syntax.

import { Message } from 'preact-i18next-icu'

const Hello = () => <Message label="Hello {name}!" name="Elsa" />

props

property type description
label string the translation label
lng? string overrides the default language
... string the placeholder value(s)

Number

Uses Intl.NumberFormat to format a number.

import { Message } from 'preact-i18next-icu'

const MyNumber = () => <Number value={123456.012} />
// 1,234,567.089 for lng=en
// 1.234.567,089 for lng=de
const MyCurrency = () => <Number value={123456.012} currency="EUR" style="currency" />
// €123,456.01  for lng=en
// 123.456,01 € for lng=de

props

property type description
value number the number to translate
lng? string overrides the default language
... any see NumberFormat for all options.

DateTime

Uses Intl.DateTimeFormat to format a date or time.

import { DateTime } from 'preact-i18next-icu'

const DateTimeShort = () => <DateTime value={new Date('2020-03-12')} />
// 3/12/2022 for lng='en-US'
// 12/03/2022 for lng='en-GB'
const DateTimeLong = () => <DateTime value={new Date() weekday='long' year='numeric' month='long' day='numeric'} />
// Thursday, March 12, 20202 for lng='en-US'
// Thursday, 12 March, 20202 for lng='en-GB'

props

property type description
value number the Date or Time to translate
lng? string overrides the default language
date? boolean if true show only date
time? boolean if true show only time
hour12? boolean if true show time in in 12 hour format with am, pm
... any see DateTimeFormat for all options.

RelativeTime

Uses Intl.RelativeTimeFormat to format a relative date or time.

import { DateTime } from 'preact-i18next-icu'

const MyRelativeTime = () => <RelativeTime value="2022-01-01" />
// 7 months ago for lng=en
const MyRelativeTime2 = () => <RelativeTime value="1" unit="day" />
// tomorrow for lng=en

props

property type description
value Date|number the number to translate
lng? string overrides the default language
... any see DateTimeFormat for all options.

example and storybook

npm run dev

Then access http://localhost:5173

license

MIT licensed

About

i18next provider with icu syntax for preact

Resources

License

Stars

Watchers

Forks

Packages

No packages published