如何使用GetX实现含参数文本的本地化?
GetX 实现带参数文本本地化的正确方式
1. 规范定义本地化Key与占位符
不要把带动态参数的整句文本作为本地化Key,而是用语义化的固定Key,并在翻译文本中加入占位符。比如在你的翻译类中:
class AppTranslations extends Translations { @override Map<String, Map<String, String>> get keys => { 'en_US': { // 用@name作为占位符,语义清晰 'profile_suggest_like': 'Put something @name might like', }, 'zh_CN': { 'profile_suggest_like': '选一些@name可能喜欢的内容', } }; }
2. 在Text组件中传递参数
使用GetX提供的trParams(命名参数)或trArgs(索引参数)方法,把动态值传入占位符:
方式一:命名参数(推荐,可读性更高)
Text( 'profile_suggest_like'.trParams({'name': widget.profileA}), ),
方式二:索引参数
如果翻译文本用索引占位符(比如Put something {0} might like),则用trArgs:
// 翻译类中对应条目改为: // 'profile_suggest_like': 'Put something {0} might like', Text( 'profile_suggest_like'.trArgs([widget.profileA]), ),
为什么之前的方式不合理
把'Put something ${widget.profileA} might like'作为Key的话,每一个不同的widget.profileA值都会生成一个新的Key,导致本地化文件里充斥着重复结构的文本,不仅维护成本极高,也完全违背了本地化的初衷——同一语义的文本只需要维护一套翻译。
内容的提问来源于stack exchange,提问作者matti peter
相关产品推荐
相关产品推荐

