Форматы сообщений локализации

Каждое интернационализированное расширение или приложение имеет по крайней мере один файл messages.json , содержащий строки, специфичные для локали. На этой странице описан формат файлов messages.json . Информацию о том, как интернационализировать и локализовать, см. на странице Интернационализация .

Сводка поля

Следующий код показывает поддерживаемые поля для messages.json . Обязательны только поля « имя » и «сообщение».

{
  "name": {
    "message": "Message text, with optional placeholders.",
    "description": "Translator-aimed description of the message.",
    "placeholders": {
      "placeholder_name": {
        "content": "A string to be placed within the message.",
        "example": "Translator-aimed example of the placeholder string."
      },
      ...
    }
  },
  ...
}

Пример

Вот файл messages.json , который определяет три сообщения с именами «prompt_for_name», «hello» и «bye»:

{
  "prompt_for_name": {
    "message": "What's your name?",
    "description": "Ask for the user's name"
  },
  "hello": {
    "message": "Hello, $USER$",
    "description": "Greet the user",
    "placeholders": {
      "user": {
        "content": "$1",
        "example": "Cira"
      }
    }
  },
  "bye": {
    "message": "Goodbye, $USER$. Come back to $OUR_SITE$ soon!",
    "description": "Say goodbye to the user",
    "placeholders": {
      "our_site": {
        "content": "Example.com",
      },
      "user": {
        "content": "$1",
        "example": "Cira"
      }
    }
  }
}

Детали поля

В этом разделе описывается каждое поле, которое может отображаться в файле messages.json . Подробную информацию о том, как используется файл сообщений (например, что происходит, если локаль не определяет все сообщения), см. в разделе Интернационализация .

имя

На самом деле поля под названием «имя» нет. Имя этого поля — это имя сообщения — то же имя , которое вы видите в __MSG__name___ или getMessage("_name_") .

Имя представляет собой ключ, нечувствительный к регистру, который позволяет получить локализованный текст сообщения. Имя может включать в себя следующие символы:

  • AZ
  • аз
  • 0-9
  • _ (подчеркивание)
  • @
Примечание. Не определяйте имена, начинающиеся с «@@». Эти имена зарезервированы для предопределенных сообщений .

Вот три примера имен, взятые из раздела «Примеры» :

"prompt_for_name": {
  ...
},
"hello": {
  ...
},
"bye": {
  ...
}

Дополнительные примеры использования имен см. на странице Интернационализация .

сообщение

Переведенное сообщение в виде строки, которая может содержать заполнители . Используйте $_placeholder_name_$ (без учета регистра) для ссылки на конкретный заполнитель. Например, вы можете ссылаться на заполнитель с именем «our_site» как $our_site$ , $OUR_SITE$ или $oUR_sITe$ .

Вот три примера сообщений, взятые из раздела Пример :

"message": "What's your name?"
...
"message": "Hello, $USER$"
...
"message": "Goodbye, $USER$. Come back to $OUR_SITE$ soon!"

Чтобы поместить в строку знак доллара ( $ ), используйте $$. For example, use the following code to specify the message Amount (in $):

"message": "Amount (in $$)"

Хотя заполнители, такие как $USER$ являются предпочтительным способом ссылки на строки замены (строки, указанные с помощью параметра замены i18n.getMessage ), вы также можете ссылаться на строки замены непосредственно внутри сообщения. Например, следующее сообщение относится к первым трем строкам замены, переданным в getMessage() :

"message": "Params: $1, $2, $3"

Несмотря на этот пример, мы рекомендуем вам использовать заполнители вместо строк $_n_ в ваших сообщениях. Думайте о заполнителях как о хороших именах переменных. Через неделю после написания кода вы, вероятно, забудете, что означает $1 , но вы будете знать, к чему относятся ваши заполнители. Дополнительную информацию о заполнителях и строках замены см. в разделе «Заполнители» .

описание

Необязательный. Описание сообщения, предназначенное для предоставления контекста или деталей, которые помогут переводчику сделать перевод как можно лучше.

Вот три примера описаний, взятые из раздела Пример :

"description": "Ask for the user's name"
...
"description": "Greet the user"
...
"description": "Say goodbye to the user"

заполнители

Необязательный. Определяет одну или несколько подстрок, которые будут использоваться в сообщении. Вот две причины, по которым вы можете использовать заполнитель:

  • Чтобы определить текст для части вашего сообщения, которую не следует переводить. Примеры: HTML-код, названия торговых марок, спецификаторы форматирования.
  • Для ссылки на строку подстановки, переданную в getMessage() . Пример: $1 .

У каждого заполнителя есть имя, элемент «содержимое» и необязательный элемент «пример». Имя заполнителя не учитывает регистр и может содержать те же символы, что и имя сообщения .

Значение элемента «content» представляет собой строку, которая может ссылаться на строки подстановки, указанные с помощью параметра подстановок метода i18n.getMessage . Значение элемента «контент» обычно равно примерно «Example.com» или «$1». Если вы ссылаетесь на несуществующую строку подстановки, вы получаете пустую строку. В следующей таблице показано, как строки $_n_ соответствуют строкам, заданным параметром замены .

параметр подстановок Стоимость 1 доллара США Стоимость 2 доллара США Стоимость 3 доллара США
userName значение userName "" ""
["Cira", "Kathy"] "Cira" "Kathy" ""

Элемент «пример» (необязательный, но настоятельно рекомендуемый) помогает переводчикам, показывая, как контент выглядит для конечного пользователя. Например, заполнитель для суммы в долларах должен иметь вид "$23.45" .

В следующем фрагменте, взятом из раздела «Пример », показан элемент «заполнители», который содержит два заполнителя с именами «our_site» и «user». Заполнитель «our_site» не имеет элемента «example», поскольку его значение очевидно из поля «content».

"placeholders": {
  "our_site": {
    "content": "Example.com",
  },
  "user": {
    "content": "$1",
    "example": "Cira"
  }
}