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

Каждое интернационализированное расширение или приложение имеет по крайней мере один файл 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"
 
}
}