preact-i18next-icu
v0.0.2
Published
i18next provider with icu syntax for preact
Downloads
1
Maintainers
Readme
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