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)
intl
软件包的自述文件说明了示例
https://github.com/dart-lang/intl
将消息包装在函数中的目的是使消息具有可以在结果中使用的参数。消息字符串允许使用Dart字符串插值的受限形式,其中只能使用函数的参数,并且只能使用简单表达式。不能使用局部变量,带有花括号的表达式也不能使用。只有消息字符串可以插值。名称,desc,args和示例必须是文字,并且不包含插值。只有args参数可以引用变量,并且应准确列出函数参数。如果要传递数字或日期并希望对其进行格式化,则必须在函数外部进行格式化,然后将格式化的字符串传递给消息。
Run Code Online (Sandbox Code Playgroud)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'));
在本节下面,有更复杂的示例被解释,这些示例也涉及复数和性别。
归档时间: |
|
查看次数: |
1189 次 |
最近记录: |