Highly customizable small size library for providing support for language localization!
- Supports fetching translated content from the server and update the content later
$ yarn add react-locale-language*or via
$ npm i react-locale-languageimport { LocalizeContextProvider, LocalizeContext } from 'react-locale-language';
const RootApp = () => {
const languageContent = {
"en-US": {
hello: "Hello ${name}, How are you feeling today?",
welcome: "Welcome aboard",
}
};
return (
// value && languageCode is optional here, setContent can also be used to update the content later and changeLanguage can be used to update the language setting
<LocalizeContextProvider value={languageContent} languageCode="en-US" >
<ThemeContextProvider value={uiTheme}>
<Landing />
</ThemeContextProvider>
</LocalizeContextProvider>
)
}
const Landing = () => {
const { translate, changeLanguage, setContent } = useContext(LocalizeContext);
useEffect(() => {
// using setTimeout just to mimic the pattern of fetching data for different languages from the server
// its not necessary to load the translated texts in all the available languages at once
setTimeout(() => {
setContent({
'hi-IN': {
hello: "हैलो ${name}, आज आप कैसा महसूस कर रहे हैं?",
welcome: "स्वागत है",
}
})
// as soon as content is set, can change the default language
changeLanguage('hi-IN'); // this will reflect the change across the app
// incase there is no translation for this language, first added langauge content would become default
}, 2000);
})
return (
// ${name} will be replaced by the value of object having key 'name' which is passed as second argument in translate
<div>
<h1> {translate('hello', { name: 'Rishu' })} </h1>
<h3> {translate('welcome')} </h3>
</div>
)
}
// outputs:
<div>
<h1> हैलो Rishu, आज आप कैसा महसूस कर रहे हैं? </h1>
<h3> स्वागत है </h3>
</div>Since this library doesn't need to be linked in order to get the device's locale
below method can be used to fetch the langauge set on the device
Source - StackOverflow
import { Platform, NativeModules } from 'react-native';
function getLocale() {
const deviceLanguage =
Platform.OS === 'ios'
? NativeModules.SettingsManager.settings.AppleLocale ||
NativeModules.SettingsManager.settings.AppleLanguages[0] //iOS 13
: NativeModules.I18nManager.localeIdentifier;
return deviceLanguage.replace(/_/, '-');
}
changeLanguage(getLocale());// this works in any utils function which is outside of context tree or non component method
import { Tranlate } from 'react-native';
const translatedMessage= Translate('your_key');