Localization
Multinaire Design includes built-in internationalization (i18n) support using i18next and react-i18next.
Creating Translation Files
Create JSON files for each language:
// assets/translations/en.json
{
"welcome": "Welcome",
"settings": "Settings",
"theme": "Theme",
"language": "Language",
"buttons": {
"submit": "Submit",
"cancel": "Cancel"
}
}
// assets/translations/es.json
{
"welcome": "Bienvenido",
"settings": "Configuración",
"theme": "Tema",
"language": "Idioma",
"buttons": {
"submit": "Enviar",
"cancel": "Cancelar"
}
}
Configure the Provider
import { MultinaireDesignProvider } from '@multinaire/multinaire-design';
import en from './assets/translations/en.json';
import es from './assets/translations/es.json';
const translations = {
en: { translation: en },
es: { translation: es },
};
export default function App() {
return (
<MultinaireDesignProvider translations={translations}>
{/* Your app */}
</MultinaireDesignProvider>
);
}
Using Translations
Use the useMultinaireLocalization hook for translations:
import { useMultinaireLocalization } from '@multinaire/multinaire-design';
function MyComponent() {
const { translate, language, changeLanguage } = useMultinaireLocalization();
return (
<View>
<Text>{translate('welcome')}</Text>
<Text>{translate('buttons.submit')}</Text>
<Text>Current language: {language}</Text>
<Button
title="Switch to Spanish"
onPress={() => changeLanguage('es')}
/>
</View>
);
}
Language Persistence
The selected language is automatically persisted to AsyncStorage. When the app restarts, the user's language preference is restored.
Best Practices
- Use nested keys for organization:
screens.home.title,buttons.submit - Keep translation files in sync across languages
- Use interpolation for dynamic values:
translate('greeting', { name: 'John' }) - Provide fallback text for missing translations
Advanced Usage
For advanced i18next features (pluralization, interpolation, namespaces), refer to the i18next documentation.