Каждое интернационализированное расширение или приложение имеет как минимум один файл с именем messages.json , содержащий строки, специфичные для локали. На этой странице описан формат файлов messages.json . Информацию о том, как интернационализировать и локализовать приложения, см. на странице «Интернационализация» .
Краткое описание области
Приведённый ниже код демонстрирует поддерживаемые поля для messages.json . Обязательными являются только поля " name " и "message".
{
"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 . Подробную информацию об использовании файла messages — например, что происходит, когда локаль не определяет все сообщения — см. в разделе «Интернационализация» .
имя
На самом деле, поля с названием "name" не существует. Имя этого поля — это имя сообщения, то же самое имя , которое вы видите в __MSG__name___ или getMessage("_name_") .
Имя представляет собой нечувствительный к регистру ключ, позволяющий получить локализованный текст сообщения. Имя может содержать следующие символы:
- АЗ
- аз
- 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$ является предпочтительным способом обращения к строкам подстановки (строкам, указанным с помощью параметра substitutions функции 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" представляет собой строку, которая может ссылаться на строки подстановки, задаваемые с помощью параметра substitutions метода i18n.getMessage . Значение элемента "content" обычно выглядит примерно так: "Example.com" или "$1". Если вы ссылаетесь на несуществующую строку подстановки, вы получаете пустую строку. В следующей таблице показано, как строки $_n_ соответствуют строкам, указанным параметром substitutions .
| параметр подстановок | Стоимость 1 доллара | Стоимость 2 долларов | Стоимость 3 долларов |
|---|---|---|---|
userName | значение userName | "" | "" |
["Cira", "Kathy"] | "Cira" | "Kathy" | "" |
Пункт «Пример» (необязательный, но настоятельно рекомендуемый) помогает переводчикам, показывая, как контент выглядит для конечного пользователя. Например, для заполнения поля с суммой в долларах следует указать пример, например "$23.45" .
Следующий фрагмент кода, взятый из раздела «Примеры» , показывает элемент «Заполнители», содержащий два заполнителя с именами «our_site» и «user». Заполнитель «our_site» не имеет элемента «Пример», поскольку его значение очевидно из поля «Содержание».
"placeholders": {
"our_site": {
"content": "Example.com",
},
"user": {
"content": "$1",
"example": "Cira"
}
}