flutter中如何翻译插值字符串

在Flutter开发中,我需要翻译包含插值字符串的文本,例如"Hello {name}"。使用标准的intl包或flutter_localizations时,发现插值变量无法直接传递给翻译文件。应该如何正确实现这种动态内容的国际化?比如如何让翻译文件接收变量并适配不同语言的语序?

2 回复

在Flutter中翻译插值字符串,使用AppLocalizationsof(context)方法,结合$符号插入变量。例如:

AppLocalizations.of(context)!.hello('John')

对应的ARB文件:

"hello": "Hello {name}!",
"@hello": {
  "description": "打招呼消息"
}

注意:插值参数需在ARB文件中用{}声明。

更多关于flutter中如何翻译插值字符串的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在 Flutter 中翻译插值字符串(包含变量的字符串)可以通过以下方法实现:

1. 使用 intl

这是官方推荐的国际化方案,支持插值占位符。

步骤:

  1. pubspec.yaml 中添加依赖:
dependencies:
  flutter:
    sdk: flutter
  intl: ^0.18.1
  1. 定义 ARB 文件(例如 app_en.arb):
{
  "welcomeMessage": "Hello {name}!",
  "@welcomeMessage": {
    "description": "欢迎消息",
    "placeholders": {
      "name": {}
    }
  }
}
  1. 生成本地化类(通过 flutter gen-l10nintl_translation 工具)。

  2. 在代码中使用:

Text(AppLocalizations.of(context)!.welcomeMessage('Alice'));

2. 手动替换(简单场景)

如果项目较小,可以手动处理:

String translateWithParams(String template, Map<String, String> params) {
  String result = template;
  params.forEach((key, value) {
    result = result.replaceAll('{$key}', value);
  });
  return result;
}

// 使用示例
String message = translateWithParams(
  'Hello {name}!',
  {'name': 'Alice'}
);

注意事项:

  • 对于复杂项目,强烈推荐使用 intl
  • 确保占位符名称在翻译文件中保持一致
  • 考虑不同语言的语序差异

选择哪种方案取决于项目的复杂度和国际化需求。

回到顶部