2021/8/27 : Flutter : Guide for building internationalized Flutter apps の訳パート2




Defining and Using Simple Messages

A simple message has no parameters. The message’s translation is exposed by a String-valued get method on the generated AppLocalizations class. So, as noted earlier, a message named helloWorld is defined like this:

単純なメッセージにはパラメータがありません。 メッセージの翻訳は、生成されたAppLocalizationsクラスの文字列値のgetメソッドによって公開されます。 したがって、前述のように、helloWorldという名前のメッセージは次のように定義されます。

  "@@locale": "en",

  "helloWorld": "Hello World",
  "@helloWorld": {
    "description": "The conventional newborn programmer greeting"

And used like this:




Translations can include special characters like newlines, if the usual JSON escapes are used:


  • \b for backspace
  • \f for form feed
  • \n for newline
  • \r for carriage return 
  • \t for tab
  • \” for double quote
  • \\ for backslash

For example:


  "@@locale": "en",

  "helloWorld": "Hello\nWorld",
  "@helloWorld": {
    "description": "The conventional newborn programmer greeting"


Messages With Parameters

It’s often useful to include application values in messages.



In the catalog, message parameters are defined with “placeholders”: parameter names bracketed with curly braces.



These placeholders become positional method parameters in the generated AppLocalizations class. Placeholder names must be valid Dart method parameter names.

これらのプレースホルダーは、生成されたAppLocalizationsクラスのメソッドのポジショナルパラメーターになります。 プレースホルダー名は、有効なDartメソッドのパラメーター名である必要があります。


Each placeholder must be defined in the “placeholders” object. For example, to define a hello message with a userName parameter:

各プレースホルダーは、「プレースホルダー」オブジェクトで定義する必要があります。 たとえば、userNameパラメーターを使用してhelloメッセージを定義するには、次のようにします。

"hello": "Hello {userName}",
"@hello": {
  "description": "A message with a single parameter",
  "placeholders": {
    "userName": {
      "type": “String”,
      “example”: “Bob”

The userName parameter has type String. The generated hello() method returns a String:

userNameパラメーターのタイプはStringです。 生成されたhello()メソッドは文字列を返します。

// Returns “Hello John”.

If a placeholder’s type is not defined, then the corresponding parameter has type Object, and its String value is computed with toString().



The placeholder’s example value is intended to help translators. In the future it might be used in generated tests.

プレースホルダーの値の例は、翻訳者を支援することを目的としています。 将来的には、生成されたテストで使用される可能性があります。工事中🏗


Messages can have as many parameters as you like, although too many parameters can make creating good translations difficult.



Below is an example with two parameters. The types of the parameters aren’t given, so they’ll be Object in the generated greeting() method. The greeting() method will convert the parameters to String with toString().

以下は、2つのパラメーターを使用した例です。 パラメータのタイプは指定されていないため、生成されたgreeting()メソッドではObject型になります。 Greeting()メソッドは、toString()を使用してパラメーターをStringに変換します。

"greeting": "{hello} {world}",
"@greeting": {
  "description": "A message with a two parameters",
  "placeholders": {
    "hello": {},
    "world": {}


Just passing String valued arguments to the greeting() method is fine, because String.toString() is essentially a no-op.


AppLocalizations.of(context).greeting(‘Hello’, ‘World’)


Messages With Numbers and Currencies

Numbers and numbers that represent currency values are displayed very differently in different locales.



The Dart intl package provides support for formatting the strings they’re converted to.










New and easy internationalization of Flutter apps

described in the official guide,


メールアドレスが公開されることはありません。 が付いている欄は必須項目です