Intlパッケージを使用して、アプリをスペイン語に翻訳しています。
locales.Dart
class AppLocale {
...
String get folder => Intl.message("Folder", name: 'folder');
...
}
messages_es.Dart
class MessageLookup extends MessageLookupByLibrary {
get localeName => 'es';
final messages = _notInlinedMessages(_notInlinedMessages);
static _notInlinedMessages(_) => <String, Function> {
"folder": MessageLookupByLibrary.simpleMessage("Carpeta"),
};
}
次のコードを使用して呼び出します。
AppLocale.of(context).folder
正常に動作しています。
ただし、「動的」文字列を作成する必要があります。例えば:
「こんにちは、{$ name}」
次に、この文字列を呼び出して、この「名前」をパラメーターとして渡すか、次のようにします。スペイン語では「Hola、{$ name}」と翻訳されます。
このintlパッケージを使用することは可能ですか?
intl
パッケージのREADMEは、その例を説明しています https://github.com/Dart-lang/intl
メッセージを関数でラップする目的は、結果で使用できるパラメーターをメッセージに持たせることです。メッセージ文字列は、関数のパラメータのみを使用でき、単純な式でのみ使用できる、制限された形式のDart文字列補間を使用できます。ローカル変数は使用できません。また、中括弧付きの式も使用できません。メッセージ文字列のみが補間できます。 name、desc、args、およびexamplesはリテラルである必要があり、補間を含めることはできません。変数を参照できるのは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'));
このセクションの下には、複数形や性別も扱う、より複雑な例が説明されています。