React Native中实现简易国际化后文本翻译存在明显延迟的原因排查求助
React Native中实现简易国际化后文本翻译存在明显延迟的原因排查求助
各位大佬好!我自己捣鼓了一个简易的国际化实现,用AsyncStorage存用户偏好语言,核心代码大概是下面这样的,但现在遇到个头疼的问题——每次打开APP或者切换语言后,翻译后的文本显示有明显延迟,经常先闪一下默认的印尼语,过会儿才跳转到目标语言,体验特别拉胯。想请大家帮忙看看可能是哪里出了问题,或者有没有优化的方向?
先贴下我的核心代码:
import AsyncStorage from '@react-native-async-storage/async-storage'; // 提前定义的多语言字典 const dictionary = { "id": { "greeting": "Halo!", "welcome": "Selamat datang!" // 其他印尼语翻译项 }, "en": { "greeting": "Hello!", "welcome": "Welcome!" // 其他英语翻译项 } }; // 翻译函数:传入语言和短语,返回对应翻译 export function translate(lang: string, phrase: string) { if (lang == null || lang === undefined || lang === ""){ return dictionary["id"][phrase]; } return dictionary[lang][phrase]; } // 从AsyncStorage获取用户偏好语言 export async function getPreferredLanguage() { try { const lang = await AsyncStorage.getItem('preferred_lang'); return lang; } catch (e) { console.error('获取偏好语言失败', e); return 'id'; // 失败时 fallback 到印尼语 } }
我目前在组件里是这么用的:用useEffect异步获取语言,更新状态后再传给翻译函数,代码大概是这样:
import { useState, useEffect } from 'react'; import { Text } from 'react-native'; import { translate, getPreferredLanguage } from './i18n'; function Greeting() { const [lang, setLang] = useState<string | null>(null); useEffect(() => { async function fetchUserLang() { const preferredLang = await getPreferredLanguage(); setLang(preferredLang); } fetchUserLang(); }, []); return <Text>{translate(lang, 'greeting')}</Text>; }
我自己初步怀疑是不是AsyncStorage的异步特性搞的鬼,但又摸不准具体哪里处理不到位。想请大家帮忙排查下可能的延迟原因,或者有没有什么简单的优化技巧能解决这个闪屏/延迟的问题?
内容来源于stack exchange
相关产品推荐
相关产品推荐

