Flutter丰富内容本地化

0ejtzxu1  于 2023-04-13  发布在  Flutter
关注(0)|答案(3)|浏览(171)

存在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]在[TEXT_INPUT]之前和之后各有一个文本,但在某些语言中没有两个文本,只有一个文本在[TEXT_INPUT]之前或之后,或者days[TEXT_INPUT]之前,in[TEXT_INPUT]之后
qjp7pelc

qjp7pelc1#

看看styled_text包,你可以从格式中单独指定文本(内容),这允许你使用标准的i18n方法。
文本格式被指定为 * 标签 *,你可以全局定义(例如在资源类中),然后在任何地方使用。对我来说听起来是一个很好的解决方案。
示例(来自自述文件):

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

将显示如下:
测试:粗体文本。
如果使用i18n软件包和资源类示例R作为标记,则可能如下所示:

StyledText(
  text: S.testBoldText,
  tags: R.styledTextTags,
);

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

bksxznpy

bksxznpy2#

slang包具有内置的富文本支持。
它看起来像这样:

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

aurhwmvo3#

这里有一个例子,说明如何将变量注入到翻译中。

"hello_name": "Hello {name}",
"@hello_name": {
        "placeholders": {
            "name": {
                "type": "String"
            }
        }
    },

这将生成一个函数hello_name,让您传递name
没有样式支持,但如果你需要它,那么就不要像上面的例子一样使用placeholders,让你的文本单独使用RichText,你指定文本的哪些部分需要什么样式。你不需要担心方向性,因为它会根据你的本地处理。

相关问题