使用flutter easy localizations时空参数能否替换{}为退格消除多余空格
退格符方案不可行
退格符\b在Flutter的文本渲染体系中不会被识别为「删除前序字符」的控制指令,最终只会渲染为不可见特殊字符或者乱码,完全无法实现消除多余空格的效果。
可行的解决方案
有三种常用处理方式,可根据项目情况选择:
方案1:调整占位符的空格位置,传参时补空格
把原字符串中占位符外侧的空格移到参数侧拼接,配置文件修改为:{ "someAppText":"This is{} app text{}." }调用时对参数做判空处理,非空才补前置空格:
String processParam(String param) => param.isEmpty ? '' : ' $param'; final text = tr('someAppText', args: [processParam(param1), processParam(param2)]);方案2:使用ICU条件语法直接在本地化配置中处理
flutter_easy_localization原生支持ICU语法,可在配置文件中内置空值判断逻辑,无需修改业务层代码:{ "someAppText": "This is{arg1, select, empty {} other { {arg1}}} app text{arg2, select, empty {} other { {arg2}}}." }当参数为空时会直接输出空内容,非空时自动带上前置空格。
方案3:对渲染前的字符串做统一空格清洗
如果不想修改原有本地化配置,可以对翻译输出的结果做正则后处理,批量消除多余空格:final rawText = tr('someAppText', args: [param1, param2]); // 连续多空格替换为单空格,消除标点前的多余空格 final finalText = rawText.replaceAll(RegExp(r'\s+'), ' ').replaceAll(RegExp(r'\s+(?=[,.!?])'), '');
内容的提问来源于stack exchange,提问作者anonymous-dev
相关产品推荐
相关产品推荐

