Flutter国际化-动态字符串

Not*_*ros 7 internationalization intl flutter

我正在使用intl包将我的应用翻译成西班牙语。

locales.dart

class AppLocale {
...
   String get folder => Intl.message("Folder", name: 'folder');
...
}
Run Code Online (Sandbox Code Playgroud)

messages_es.dart

class MessageLookup extends MessageLookupByLibrary {
      get localeName => 'es';

      final messages = _notInlinedMessages(_notInlinedMessages);
      static _notInlinedMessages(_) => <String, Function> {
            "folder": MessageLookupByLibrary.simpleMessage("Carpeta"),
      };
}
Run Code Online (Sandbox Code Playgroud)

我用以下代码称呼它:

AppLocale.of(context).folder
Run Code Online (Sandbox Code Playgroud)

一切正常。

但是,我需要创建“动态”字符串。例如:

“嗨,{$ name}”

然后,我将调用此字符串,并将此“名称”作为参数传递,或类似的内容。西班牙语将其翻译为“ Hola,{$ name}”。

是否可以使用此intl包?

Jan*_*sen 62

如果您遵循官方国际化文档并指定文件中的所有短语.arb,则可以执行如下参数:

{
    "greeting": "Hi, {name}!",
    "@greeting": {
        "description": "Greet the user by their name.",
        "placeholders": {
            "name": {
                "type": "String",
                "example": "Jane"
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

当您编译代码时,将为您生成如下所示的函数,并附带一个漂亮的文档块来为您的 IDE 工具提示提供支持:

  /// Greet the user by their name.
  ///
  /// In en, this message translates to:
  /// **'Hi, {name}!'**
  String greeting(String name);
Run Code Online (Sandbox Code Playgroud)

所以你可以像这样使用它:

Text(AppLocalizations.of(context)!.greeting("Koos"))
Run Code Online (Sandbox Code Playgroud)


Gün*_*uer 7

intl软件包的自述文件说明了示例 https://github.com/dart-lang/intl

将消息包装在函数中的目的是使消息具有可以在结果中使用的参数。消息字符串允许使用Dart字符串插值的受限形式,其中只能使用函数的参数,并且只能使用简单表达式。不能使用局部变量,带有花括号的表达式也不能使用。只有消息字符串可以插值。名称,desc,args和示例必须是文字,并且不包含插值。只有args参数可以引用变量,并且应准确列出函数参数。如果要传递数字或日期并希望对其进行格式化,则必须在函数外部进行格式化,然后将格式化的字符串传递给消息。

greetingMessage(name) => Intl.message(
      "Hello $name!",
      name: "greetingMessage",
      args: [name],
      desc: "Greet the user as they first open the application",
      examples: const {'name': "Emily"});
  print(greetingMessage('Dan'));
Run Code Online (Sandbox Code Playgroud)

在本节下面,有更复杂的示例被解释,这些示例也涉及复数和性别。