Formatos das mensagens de localização

Cada extensão ou app internacionalizado tem pelo menos um arquivo chamado messages.json que fornece strings específicas da localidade. Esta página descreve o formato dos arquivos messages.json. Para saber como internacionalizar e localizar, consulte a página Internacionalização.

Resumo de campos

O código abaixo mostra os campos aceitos para messages.json. Apenas os campos "name" e "message" são obrigatórios.

{
  "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."
      },
      ...
    }
  },
  ...
}

Exemplo

Este é um arquivo messages.json que define três mensagens com os nomes "prompt_for_name", "hello" e "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"
      }
    }
  }
}

Detalhes do campo

Esta seção descreve cada campo que pode aparecer em um arquivo messages.json. Para saber como o arquivo de mensagens é usado, por exemplo, o que acontece quando uma localidade não define todas as mensagens, consulte Internacionalização.

nome

Na verdade, não há nenhum campo chamado "name". O nome desse campo é o nome da mensagem, o mesmo nome que aparece em __MSG__name___ ou getMessage("_name_").

O nome é uma chave que não diferencia maiúsculas de minúsculas e permite recuperar o texto da mensagem localizada. O nome pode incluir os seguintes caracteres:

  • De A a Z
  • a-z
  • 0-9
  • _ (sublinhado)
  • @
Observação:não defina nomes que começam com "@@". Esses nomes são reservados para mensagens predefinidas.

Aqui estão três exemplos de nomes, retirados da seção Exemplo:

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

Para ver mais exemplos de uso de nomes, consulte a página Internacionalização.

mensagem

A mensagem traduzida, na forma de uma string que pode conter marcadores de posição. Use $_placeholder_name_$ (sem distinção entre maiúsculas e minúsculas) para se referir a um marcador de posição específico. Por exemplo, você pode se referir a um marcador de posição chamado "our_site" como $our_site$, $OUR_SITE$ ou $oUR_sITe$.

Aqui estão três exemplos de mensagens da seção Exemplo:

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

Para colocar um cifrão ($) na string, use $$. For example, use the following code to specify the message Amount (in $):

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

Embora os marcadores de posição, como $USER$, sejam a maneira preferida de se referir a strings de substituição, strings especificadas usando o parâmetro substitutions de i18n.getMessage, também é possível se referir a strings de substituição diretamente na mensagem. Por exemplo, a mensagem a seguir se refere às três primeiras strings de substituição transmitidas para getMessage():

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

Apesar desse exemplo, recomendamos que você use marcadores de posição em vez de strings $_n_ nas suas mensagens. Pense nos marcadores de posição como bons nomes de variáveis. Uma semana depois de escrever o código, você provavelmente vai esquecer a que $1 se refere, mas vai saber a que os marcadores de posição se referem. Para mais informações sobre marcadores de posição e strings de substituição, consulte a seção marcadores de posição.

descrição

Opcional. Uma descrição da mensagem, destinada a fornecer contexto ou detalhes para ajudar o tradutor a fazer a melhor tradução possível.

Confira três exemplos de descrições, retirados da seção Exemplo:

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

marcadores de posição

Opcional. Define uma ou mais substrings a serem usadas na mensagem. Confira dois motivos para usar um marcador de posição:

  • Para definir o texto de uma parte da sua mensagem que não deve ser traduzida. Exemplos: código HTML, nomes de marcas registradas e especificadores de formatação.
  • Para se referir a uma string de substituição transmitida para getMessage(). Exemplo: $1.

Cada marcador de posição tem um nome, um item "conteúdo" e um item "exemplo" opcional. O nome de um marcador de posição não diferencia maiúsculas de minúsculas e pode conter os mesmos caracteres de um nome de mensagem.

O valor do item "content" é uma string que pode se referir a strings de substituição, que são especificadas usando o parâmetro substitutions do método i18n.getMessage. O valor de um item de "conteúdo" geralmente é algo como "Example.com" ou "US$ 1". Ao se referir a uma string de substituição que não existe, você receberá uma string vazia. A tabela a seguir mostra como as strings $_n_ correspondem a strings especificadas pelo parâmetro substitutions.

parâmetro overridesValor de US $1Valor de US $2Valor de US $3
userNamevalor de userName""""
["Cira", "Kathy"]"Cira""Kathy"""

O item "example" (opcional, mas altamente recomendado) ajuda os tradutores mostrando como o conteúdo é exibido para o usuário final. Por exemplo, um marcador de posição para um valor em dólares precisa ter um exemplo como "$23.45".

O snippet a seguir, retirado da seção Exemplo, mostra um item "placeholders" que contém dois marcadores de posição chamados "our_site" e "user". O marcador de posição "our_site" não tem o item "example" porque o valor dele é óbvio no campo "content".

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