我正在开发两种语言的React Native应用程序:英语和波斯语(波斯语)。
我使用I18nManager
设置应用程序布局方向,但是我自己管理翻译,不使用I18nManager
进行翻译。 请注意,我的应用程序翻译与系统语言环境无关。,并且应用程序语言环境完全独立于系统语言环境。
我将应用程序语言作为道具传递给层次结构中的所有子组件,并在App.js
组件(作为系统的根组件)中管理其更改。 (在App.js中,状态为applicationLanguage
)
我有下面的函数,我在setState之后调用它来更改applicationLanguage
:
setApplicationDirection = (language: Language) => {
I18nManager.allowRTL(language === Language.Farsi);
I18nManager.forceRTL(language === Language.Farsi);
};
setApplicationDirection
的用法:
onChangeLanguage = (language: Language) => {
this.setState({
applicationLanguage: language
});
this.setApplicationDirection(language);
};
onChangeLanguage
之后,我的翻译已更改,而无需重新启动应用程序。但是应用程序的方向没有改变。
我知道我可以使用react-native-restart
并手动重新启动应用程序才能生效,但是我真的更喜欢在不重新启动应用程序的情况下进行更改,因为这会增加应用程序UX。在我的应用程序中,用户可以在每个屏幕上更改语言,如果我重新启动应用程序,则必须再次转到该屏幕。