Internationalization 颤振国际化-动态弦

Internationalization 颤振国际化-动态弦,internationalization,flutter,intl,Internationalization,Flutter,Intl,我正在使用intl软件包将我的应用程序翻译成西班牙语 地区。省道 class AppLocale { ... String get folder => Intl.message("Folder", name: 'folder'); ... } 信息-飞镖 class MessageLookup extends MessageLookupByLibrary { get localeName => 'es'; final messages = _notI

我正在使用intl软件包将我的应用程序翻译成西班牙语

地区。省道

class AppLocale {
...
   String get folder => Intl.message("Folder", name: 'folder');
...
}
信息-飞镖

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

      final messages = _notInlinedMessages(_notInlinedMessages);
      static _notInlinedMessages(_) => <String, Function> {
            "folder": MessageLookupByLibrary.simpleMessage("Carpeta"),
      };
}
它工作得很好

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

你好,{$name}

然后我会调用这个字符串,将这个“名称”作为参数传递,或者类似的东西。它将在西班牙语中翻译为“Hola,{$name}”


可以使用这个intl包吗?

intl包的自述文件解释了这个例子

将消息包装到函数中的目的是允许它 具有可在结果中使用的参数。消息字符串为 允许使用限制形式的省道字符串插值,其中 只能使用函数的参数,并且只能使用简单的 表达。不能使用局部变量,也不能使用 带大括号的表达式。只有消息字符串可以具有 插值名称、描述、参数和示例必须是文字和 不包含插值。只有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'));

本节下面介绍了更复杂的示例,这些示例也涉及复数和性别。

要在翻译中使用占位符,您需要:

  • 添加该占位符作为getter参数
  • 在翻译中提及前缀为
    $
    的占位符(即
    $name
  • 调用
    Intl.message
因此,完整的示例如下所示:

greetingMessage(name) => Intl.message(
  "Hello $name!",
  name: 'greetingMessage',
  args: [name]
);
greetingMessage(name) => Intl.message(
  "Hello $name!",
  name: 'greetingMessage',
  args: [name]
);