在RN我的双语应用程序(英语-阿拉伯语)中,我使用了I18nManager
(视图)和I18n
(用于翻译)
当我将应用程序语言更改为阿拉伯语时,会使用以下代码从初始屏幕重新加载整个应用程序:
I18nManager.forceRTL(true)
理想情况下,它不应从启动时重启应用程序,而应继续使用阿拉伯数据显示当前屏幕。
目前还没有发生,仅使用I18n.t('keyword')
转换翻译元素,但对于阿拉伯对齐视图,这是不正确的。
仍在寻找更好的解决方案,让我知道是否有人实现了。
谢谢
索波!!
答案 0 :(得分:0)
您应将此代码放在项目的顶部组件中
import RNRestart from "react-native-restart";
I18nManager.forceRTL(true);
if (!I18nManager.isRTL) RNRestart.Restart();
答案 1 :(得分:0)
我正在一个项目中使用两种语言,阿拉伯语和英语。我使用redux来处理应用程序语言。我将所有样式都放在redux上,并使用redux处理应用程序样式。当用户更改语言时,我应用程序上的所有样式都会更改为该语言。也所有文本也使用redux处理。这样,我的应用程序不会重新加载,并且应用程序语言不会立即更改。
答案 2 :(得分:0)
在世博会中使用
import {Updates} from "expo"
Updates.reload()
答案 3 :(得分:0)
如果你们想在重新加载后存储堆栈状态(因为没有其他选项不重新加载)并且想要返回堆栈状态,您可以点击此链接,也可以检查我的代码。 链接:React navigation state persist
任何组件
AsyncStorage.setItem('navigation_state', JSON.stringify(navigation.dangerouslyGetState()));
我的App.js
const App = () => {
const [initialState, setInitialState] = useState();
const [isReady, setIsReady] = useState(false);
useEffect(() => {
restoreState();
}, []);
const restoreState = async () => {
try {
const savedStateString = await AsyncStorage.getItem('navigation_state');
const state = savedStateString ? JSON.parse(savedStateString) : undefined;
if (state !== undefined) {
AsyncStorage.removeItem('navigation_state');
setInitialState(state);
}
} finally {
setIsReady(true);
}
};
if (!isReady) {
return null;
}
return (
<Provider store={store}>
<NavigationContainer
initialState={initialState}
ref={rootNavigationRef}>
<Root>
<AppNavigator />
</Root>
</NavigationContainer>
</Provider>
);
};
答案 4 :(得分:0)
如果你的应用是安卓混合应用,你可以试试这个:
import com.facebook.react.modules.i18nmanager.I18nUtil;
I18nUtil i18nUtil = I18nUtil.getInstance();
i18nUtil.forceRTL(context, forceRtl);
i18nUtil.allowRTL(context, true);
值 'forceRtl' 是一个布尔值。
对于 iOS,我想你可以找到相同的方法。