Expo环境下React Native的i18n无法在Alert弹窗生效如何解决?
错误原因
你遇到的问题本质是JSX语法和普通JavaScript语法的使用场景混淆:
- 花括号
{}是JSX专属语法,仅用于在JSX标签的属性、子节点中插入JavaScript表达式,在JSX代码块外使用会被识别为对象声明符号,不符合Alert.alert的参数要求 Alert.alert是React Native提供的原生调用API,接收的标题、内容、按钮配置参数均为普通JavaScript值,直接传入表达式即可,不需要额外包裹花括号
修正方案
直接去掉i18n.t()外的花括号,将i18n.t()的返回值作为参数直接传入Alert.alert即可,按钮文本、JSX属性的多语言写法也可以参考下方示例:
<Menu.Item onPress={() => { Alert.alert( i18n.t('gift_home.title_hide_a_gift'), // 弹窗标题 i18n.t('gift_home.confirm_hide_gift_tip'), // 弹窗提示内容 [ { text: i18n.t('common.confirm'), onPress: () => console.log("确认") }, { text: i18n.t('common.cancel'), onPress: () => console.log("取消") }, ] ) }} title={i18n.t('common.report_user')} // JSX属性需要保留花括号包裹表达式 />
异常排查
如果修改后仍无法正常显示翻译内容,可以优先排查两个常见问题:
- 对应语言的多语言文件中,你调用的key是否存在,有没有拼写错误
- 确认调用
t方法时,i18n实例已经完成初始化,不存在异步加载语言包未完成就调用方法的情况
内容的提问来源于stack exchange,提问作者Yellow Clock
相关产品推荐
相关产品推荐

