Flutter中easy_localization如何让\n识别为换行符?
解决easy_localization中XML本地化字符串\n不解析为换行的问题
XML本地化文件中直接写入的\n会被当作普通文本字符,easy_localization默认不会自动解析这类转义序列,以下是几种可行的解决方法:
方法1:使用XML换行实体或直接换行
在XML文件中,用Unicode换行实体 替代\n,或者直接在字符串中换行,XML解析器会自动将其转换为实际的换行符:
<?xml version="1.0" encoding="UTF-8" ?> <root> <!-- 使用Unicode换行实体 --> <my_string_key>This is my Test String. It is ... by a new line!</my_string_key> <!-- 直接在XML中换行 --> <my_string_key_2>This is my Test String. It is ... by a new line!</my_string_key_2> </root>
调用tr("my_string_key")即可正常显示换行效果。
方法2:手动替换转义字符
在调用tr()获取字符串后,手动将转义的\n替换为实际换行符:
tr("my_string_key").replaceAll(r"\n", "\n")
如果多处需要使用,可以封装工具函数简化调用:
String trWithNewline(String key) { return tr(key).replaceAll(r"\n", "\n"); }
之后直接使用trWithNewline("my_string_key")即可。
方法3:全局配置字符串转换器
在初始化EasyLocalization时,添加全局字符串转换器,自动处理所有本地化字符串中的\n转义:
EasyLocalization( supportedLocales: [Locale('en'), Locale('zh')], path: 'assets/translations', // 你的本地化文件路径 assetLoader: XmlAssetLoader(), stringTransformer: (String value) { return value.replaceAll(r"\n", "\n"); }, )
配置后,所有通过tr()获取的字符串都会自动解析\n为换行,无需逐个处理。
内容的提问来源于stack exchange,提问作者F.M.
相关产品推荐
相关产品推荐

