0.0.2 • Published 8 months ago

preact-i18next-icu v0.0.2

Weekly downloads
-
License
MIT
Repository
github
Last release
8 months ago

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

propertytypedescription
fallback?preact.AnyComponentfallback component which is rendered while new language settings are loading, e.g. spinner
backends?i18next.Module[]Array of i18next backends
options?objecti18next 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

propertytypedescription
labelstringthe translation label
lng?stringoverrides the default language
...stringthe 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

propertytypedescription
valuenumberthe number to translate
lng?stringoverrides the default language
...anysee 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

propertytypedescription
valuenumberthe Date or Time to translate
lng?stringoverrides the default language
date?booleanif true show only date
time?booleanif true show only time
hour12?booleanif true show time in in 12 hour format with am, pm
...anysee 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

propertytypedescription
valueDate|numberthe number to translate
lng?stringoverrides the default language
...anysee DateTimeFormat for all options.

example and storybook

npm run dev

Then access http://localhost:5173

license

MIT licensed