Flutter 丰富内容本地化

Web*_*ter 5 internationalization dart flutter

该包intl的存在是为了本地化 flutter 应用程序,但Intl.message唯一的返回String

如何才能拥有丰富的本地化内容?

  1. Hello $name!,并且只$name加粗,考虑到不同语言中 hello 和 $name 的顺序可能不同
  2. I read terms of services and accepted it,并且仅链接terms of services部分
  3. in [TEXT_INPUT] days,[TEXT_INPUT] 后面有一个文本,前面有一个文本,但在某些语言中没有 2 个文本,只有一个文本在后面或前面,或者days在前面和in后面[TEXT_INPUT]

Ber*_*Ber 7

看一下styled_text包。您可以将文本(内容)与格式分开指定,这允许您使用标准的 i18n 方法。

文本格式被指定为标签,您可以全局定义(例如在资源类中),然后在任何地方使用。对我来说听起来是一个很好的解决方案。

示例(来自自述文件):

StyledText(
  text: 'Test: <bold>bold</bold> text.',
  tags: {
    'bold': const StyledTextTag(style: const TextStyle(fontWeight: FontWeight.bold)),
  },
)
Run Code Online (Sandbox Code Playgroud)

将显示如下:

测试:粗体文本。

R如果您使用 i18n 包和标签的资源类实例,则可能如下所示:

StyledText(
  text: S.testBoldText,
  tags: R.styledTextTags,
);
Run Code Online (Sandbox Code Playgroud)

请记住,标签需要在翻译中保留。


Tie*_*Nam 2

slang包具有内置的富文本支持。

它看起来像这样:

{
  "myRichText(rich)": "Welcome {name}"
}
Run Code Online (Sandbox Code Playgroud)
Widget a = Text.rich(t.myRichText(
  // Show name in blue color
  name: TextSpan(text: 'Tom', style: TextStyle(color: Colors.blue)),
));
Run Code Online (Sandbox Code Playgroud)