React and React Native
このコンテンツはまだ日本語訳がありません。
npm add @falcondev-oss/lang-core @falcondev-oss/lang-reactWorks the same in React DOM and React Native. The adapter only imports react.
import { createLang } from '@falcondev-oss/lang-core'import { createLangContext } from '@falcondev-oss/lang-react'
export const lang = createLang({ base: 'en', languages: ['en', 'de'] })export const { t, group } = langexport type Language = (typeof lang.languages)[number]
export const translations = { common: group(t('Save', { de: 'Speichern' })),}
export const { LangProvider, useLang } = createLangContext(lang, translations)import { useState } from 'react'import type { Language } from './lang'import { LangProvider, useLang } from './lang'
export function App() { const [locale, setLocale] = useState<Language>('en') return ( <LangProvider lang={locale}> <SaveButton /> <button onClick={() => setLocale(locale === 'en' ? 'de' : 'en')}>Switch language</button> </LangProvider> )}
function SaveButton() { const text = useLang((all) => all.common) return <button>{text.Save}</button>}In React Native, render <Text>{text.Save}</Text> the same way.
createLangContext(lang, translations)
Section titled “createLangContext(lang, translations)”lang: the result ofcreateLang().translations: the translation tree.
Returns:
LangProvider: a component with the propslang(one of the configured languages) andchildren. EveryuseLang()below it re-renders whenlangchanges.useLang: the hook.
useLang() // whole tree in the current languageuseLang((all) => all.common) // one subtreeuseLang() throws useLang() must be used inside <LangProvider> outside of a provider. The returned object is cached per subtree and language, so it keeps its identity between renders and is safe in dependency arrays.
Where the language comes from (device locale, user setting, storage) is up to you. Pass the value to LangProvider.