Configuração do Ficheiro

Nota: Se estiveres a usar a versão antiga do Crowdin CLI (0.5.5 ou menos), vê a conta Crowdin Github para obter detalhes completos.

Introdução

O Crowdin CLI usas um ficheiro de configuração YAML, que contém uma descrição dos recursos para gerir: os ficheiros para serem enviados para o Crowdin e os locais das traduções correspondentes.

Para usar o Crowdin CLI, deves primeiro gerar o teu ficheiro de configuração e depois, executar a ferramenta. By default, Crowdin CLI looks for a configuration file named crowdin.yaml (so you don’t have to specify the file name unless it’s different from crowdin.yaml).

Para criar o ficheiro de configuração, executa o seguinte comando:

$ crowdin generate

Estrutura do Ficheiro de Configuração

Um ficheiro de configuração YAML do Crowdin CLI, tem a seguinte estrutura, por isso, certifica-te de preencher todas as informações necessárias:

  • O cabeçalho do ficheiro com as credenciais do projeto, preferências, e informações de acesso
  • Um elemento de array de ficheiros que descreve um conjunto de ficheiros de origem e de tradução que gerirás
  • Required fields in the files array: Source that defines filters for the source files and Translation with instructions on where to store the translated files or where to look for translations you already have if you want to upload them while setting up the CLI

Vê o artigo Configurar a Integração API para saber onde encontrar as credenciais do projeto.

Escrever um Simples Ficheiro de Configuração

Um típico ficheiro de configuração de YAML semelhante, ao seguinte:

"project_identifier": "your-project-identifier" "api_key": "54e01e81--your-api-key--f6a2724a"                 #can be found in your project settings > API tab "base_path": "/home/office/source-code"

"files": [
  {
    "source" : "/resources/en/*.json",                                          #source files filter
    "translation" : "/resources/%two_letters_code%/%original_file_name%"        #where translations are stored
  }
]

Nota: No Windows, se usares o separador de diretório no estilo do Windows, ele deverá ser duplicado de acordo com a sintaxe YAML:

{
"source" : "\\resources\\en\\*.json",
"translation" : "\\resources\\%two_letters_code%\\%original_file_name%"
}

Para executar o ficheiro de configuração acima, e enviar os ficheiros de origem para o Crowdin:

$ crowdin upload sources

Obter as traduções do Crowdin e colocá-las nos lugares certos:

$ crowdin download

Credenciais API das Variáveis de Ambiente

Podes carregar as Credenciais API duma variável ambiente, por exemplo:

"api_key_env": CHAVE_API_CROWDIN "project_identifier_env": ID_DO_PROJETO_DO_CROWDIN "base_path_env": CAMINHO_BASE_DO_CROWDIN

Se misturado, api_key e projeto_identifier são priorizados:

"api_key_env": CCHAVE_API_CROWDIN           # Baixa prioridade "project_identifier_env": PROJETO_CROWDIN # Baixa prioridade "base_path_env": CAMINHO_BASE_DO_CROWDIN        # Baixa prioridade "api_key": "xxx"                          # Alta prioridade "project_identifier": "yyy"               # Alta prioridade "base_path": "zzz"                        # Alta prioridade

Dividir Configuração de Projeto e Credenciais API

O ficheiro crowdin.yaml contém uma descrição dos recursos para gerir e credenciais API (api_key, project_identifier, base_path). Isto significa que, não é seguro enviar (commit) este ficheiro no repositório do código, porque a chave API pode ser acessada por outros utilizadores. Crowdin CLI supports 2 types of configuration files:

  • a description of the resources to manage, residing in the project directory
  • API credentials, probably residing in $HOME/.crowdin.yaml

Note: API credentials from .crowdin.yaml configuration file are of higher priority than credentials from project directory(crowdin.yaml).

Se precisas de executar um comando com as credenciais específicas do utilizador (por exemplo, upload sources), então executa o seguinte comando:

$ crowdin upload sources --identity 'caminho-para-o-ficheiro-das-credenciais-do-utilizador'

Mas se o ficheiro de credenciais específicas do utilizador, residir em $HOME/.crowdin.yaml, podes simplesmente executar:

$ crowdin upload sources

Configuração Geral

O exemplo de configuração fornecido acima, possui atributos de origem e tradução, ao conter caracteres especiais (wildcards) padrão(também conhecidos como globalizar padrões) para facilitar o trabalho com vários ficheiros.

Aqui estão os padrões que podes usar:

* (asterisk)

Represents any character in file or directory name. If you specify a “*.json” it will include all files like “messages.json”, “about_us.json” and anything that ends with “.json”.

** (doubled asterisk)

Corresponde a qualquer frase recursiva (incluindo subdiretórios). Note that you can use ** in both source and translation patterns. When using ** in the translation pattern, it will always contain sub-path from source for a certain file. For example, you can use source: ‘/en/**/*.po’ to upload all *.po files to Crowdin recursively. The translation pattern will be ‘/%two_letters_code%/**/%original_file_name%’.

? (ponto de interrogação)

Corresponde a qualquer caractere único.

[set]

Matches any single character in a set. Behaves exactly like character sets in Regexp, including set negation ([^a-z]).

\ (barra invertida)

Escapa o próximo metacaractere.

Espaços reservados

O Crowdin CLI permite usar os seguintes espaços reservados para colocar as variáveis apropriadas no nome do ficheiro resultante:

Nome Descrição
%language% Nome do idioma (exemplo, Ukrainian)
%two_letters_code% Código do idioma ISO 639-1 (exemplo uk)
%three_letters_code% Código do idioma ISO 639-2/T (exemplo ukr)
%locale% Localidade (como uk-UA)
%locale_with_underscore% Região (exemplo, uk_UA)
%original_file_name% Nome do ficheiro original
%android_code% Identificador de localidade do Android usado para nomear diretórios "values-"
%osx_code% Identificador de localidade do OS X usado para nomear diretórios ".lproj"
%original_path% Use nomes das pastas pai no projeto do Crowdin para criar um caminho de ficheiro no pacote resultante
%file_extension% Extensão do ficheiro original
%file_name% Nome do ficheiro sem extensão

Também podes definir o caminho para os ficheiros no arquivamento resultante, ao colocar uma barra (/) no início do padrão.

A tua opção translation pode se parecer como: “/locale/%two_letters_code%/LC_MESSAGES/%original_file_name%”.

Uso de Caracteres Especiais

Estrutura de ficheiros e diretórios na máquina local:

- base_path | |-- folder |     | |     |-- 1.xml |     |-- 1.txt |     |-- 123.txt |     |-- 123_test.txt |     |-- a.txt |     |-- a1.txt |     |-- crowdin?test.txt |     |-- crowdin_test.txt | |-- 1.xml |-- 1.txt |-- 123.txt |-- 123_test.txt |-- a.txt |-- a1.txt |-- crowdin?test.txt |-- crowdin_test.txt |-- 3.txt

Example 1. Usage of wildcards in the source path:

# ........a tua configuração de projeto........
"files" : [
  { "source" : "/**/?[0-9].txt", #upload a1.txt, folder/a1.txt "translation" : "/**/%two_letters_code%_%original_file_name%" },
  { "source" : "/**/*\\?*.txt", #upload crowdin?test.txt, folder/crowdin?test.txt "translation" : "/**/%two_letters_code%*%original_file_name%" },
  { "source" : "/**/[^0-2].txt", #upload 3.txt, folder/3.txt, a.txt, folder/a.txt (ignore 1.txt, folder/1.txt) "translation" : "/**/%two_letters_code%_%original_file_name%" } ]

Example 2. Usage of wildcards for ignoring files:

# ........a tua configuração de projeto........

"files": [
  { "source" : "/**/*.*", #upload all files that  the base_path contains "translation" : "/**/%two_letters_code%_%original_file_name%", "ignore" : [ "/**/%two_letters_code%_%original_file_name%", #ignore the translated files "/**/?.txt",                                   #ignore 1.txt, a.txt, folder/1.txt, folder/a.txt "/**/[0-9].txt",                               #ignore 1.txt, folder/1.txt "/**/*\\?*.txt",                               #ignore crowdin?test.txt, folder/crowdin?test.txt "/**/\[0-9\]\[0-9\][0-9].txt",                     #ignore 123.txt , folder/123.txt "/**/[0-9]***.txt"                             #ignore 123_test.txt, folder/123_test.txt ] } ]

Mapeamento do Idioma

Muitas vezes, os projetos de software têm nomes personalizados para diretórios de localidade. Crowdin allows you to map your own languages.

Digamos que os teus diretórios locais são denominados ‘en’, ‘uk’, ‘fr’, ‘de’. Todos eles podem ser representados pelo espaço reservado %two_letters_code%. Ainda assim, tens um diretório chamado ‘zh_CH’. Para fazer com que o Crowdin CLI funcione sem alterações no teu projeto, podes adicionar uma secção de languages_mapping ao teu conjunto de ficheiros.

O formato de Mapear é o seguinte: “crowdin_language_code” : “o_codigo_que_usas”. Verifica a lista completa dos códigos de idioma do Crowdin que podem ser usados para mapeamento.

You can also override language codes for other placeholders like %android_code%, %locale%, etc.

You can set up Language Mapping for any of your project’s target languages via the user interface (UI):

  1. Go to the Project Settings, Export section.
  2. Click Language Mapping.
  3. Choose the necessary language, placeholder, and add custom code.

Renomear Ficheiro de Traduções

Se precisas de renomear um ficheiro com traduções, após, a exportação, podes fazer isto com a ajuda do parâmetro translation_replace.

Por exemplo, se o nome for nomeado de “strings_en.xml” ele pode ser renomeado para “strings.xml”. Para isto, adiciona um novo parâmetro (no mesmo nível do parâmetro de tradução) para o ficheiro de configuração (crowdin.yaml):

"files" : [
  { "source" : "/locale/**/en_*.po", "translation" : "/locale/**/%two_letters_code%_%original_file_name%", "translation_replace": { "en_" : "" } } ]

Neste caso, “_en” será, simplesmente, apagado do nome do ficheiro.

Ignorar Ficheiros e Diretórios

From time to time there are files and directories you don’t need to translate in Crowdin. In such cases, local per-file rules can be added to the config file in your project.

"files": [
  { "source" : "/**/*.properties", "translation" : "/**/%file_name%_%two_letters_code%.%file_extension%", "ignore" : [ "/test/file.properties", "/example.properties" ] },
  { "source" : "/locale/en/**/*.po", "translation" : "/locale/%two_letters_code%/**/%original_file_name%", "ignore" : [ "/locale/en/templates", "/locale/en/workflow" ] } ]

CSV com Multicolunas

Se um ficheiro CSV contiver as traduções para todos os idiomas de destino, deverás especificar os códigos de idioma apropriados no esquema.

Exemplo de ficheiro CSV:

identifier,source_phrase,context,Ukrainian,Russian,French ident1,Source 1,Context 1,,, ident2,Source 2,Context 2,,, ident3,Source 3,Context 3,,,

Exemplo de ficheiro de configuração:

"files" : [
  {
    "source" : "multicolumn.csv",
    "translation" : "multicolumn.csv",
    "first_line_contains_header" : true,
    "scheme" : "identifier,source_phrase,context,uk,ru,fr"
  }
]

If your CSV file contains columns that should be skipped on import, use none for such columns in the scheme, for example:

"scheme" : "identifier,source_phrase,context,uk,none,ru,none,fr"

Guarda a Estrutura de Diretórios no Servidor

"preserve_hierarchy": true

Exemplo de ficheiro de configuração ao usar a opção preserve_hierarchy:

"project_identifier": "test" "api_key": "KeepTheAPIkeySecret" "base_url": "https://api.crowdin.com" "base_path": "/path/to/your/project" "preserve_hierarchy": true

"files" : [
  { "source" : "/locale/en/**/*.po", "translation" : "/locale/%two_letters_code%/**/%original_file_name%" } ]

By default, directories that do not contain any files for translation will not be created in Crowdin. For example:

- locale | |-- en | |-- foo.po |-- bar.po

Por padrão, os ficheiros do projeto serão representados no Crowdin da seguinte forma:

- foo.po
- bar.po

Ao usar a opção preserve_hierarchy, a estrutura do ficheiro no Crowdin será a seguinte:

- en | |-- foo.po |-- bar.po

Enviar Ficheiros para o Caminho Especificado com o Tipo Especificado

Este recurso adiciona suporte para 2 parâmetros opcionais na secção do ficheiro yaml: dest e type. Isto é, normalmente, usado para projetos, onde o nome enviado deve ser diferente, para que o Crowdin possa detetar, corretamente, o tipo. O parâmetro dest permite que especifiques um nome de ficheiro no Crowdin.

Note! The dest parameter only works for single files, and if you use it, the configuration file should also include the preserve_hierarchy parameter with true value.

Exemplo do ficheiro de configuração com os dois parâmetros:

"project_identifier": "your-project-identifier" "api_key": "54e01e81--your-api-key--f6a2724a"                 #can be found in your project settings > API tab "base_path": "/home/office/source-code" "preserve_hierarchy": true

"files" : [
  { "source" : "/conf/messages", "dest" : "/messages.properties", "translation" : "/conf/messages.%two_letters_code%", "type" : "properties" },
  {
  "source" : "/app/strings.xml",
  "dest" : "/strings.xml",
  "translation" : "/res/values-%android_code%/%original_file_name%"
  }
]

Atualização de Frases Alteradas

The parameter update_option is optional. If it is not set, translations for changed strings will be lost. Useful for typo fixes and minor changes in source strings.

Dependendo do valor, update_option é usado para preservar as traduções e preservar/remover as validações de frases alteradas durante a atualização do ficheiro.

Os valores são:

  • update_as_unapproved - preserve translations of changed strings and remove validations of those translations if they exist
  • update_without_changes - preserve translations and validations of changed strings

Exemplo do ficheiro de configuração com o parâmetro update_option:

"project_identifier": "your-project-identifier" "api_key": "54e01e81--your-api-key--f6a2724a"                 #can be found in your project settings > API tab "base_path": "/home/office/source-code"

"files" : [
  { "source" : "/*.csv", "translation" : "/%three_letters_code%/%file_name%.csv", "first_line_contains_header" : true, "scheme" : "identifier,source_phrase,translation,context", "update_option" : "update_as_unapproved" },
  {
    "source": "/**/*.xlsx",
    "translation" : "/%three_letters_code%/folder/%file_name%.xlsx",
    "update_option" : "update_without_changes"
  }
]

Envio de Traduções

O comando upload translations envia as traduções existentes para o Crowdin. Se nenhuma opção for especificada, as traduções enviadas não serão importadas mesmo se forem duplicadas ou se forem iguais às frases de origem, e não serão aprovadas.

Os valores são:

  • -l, –language=language_code - define as traduções do idioma que devem ser enviadas para o Crowdin. Por padrão, as traduções são enviadas para todos os idiomas de destino do projeto. (Códigos de Idioma do Crowdin)
  • –[no-]import-duplicates - define se deve adicionar tradução se houver a mesma já existente no projeto do Crowdin
  • –[no-]import-eq-suggestions - define se deve adicionar tradução se for igual à frase de origem no projeto do Crowdin
  • –[no-]auto-approve-imported - aprova automaticamente, as traduções enviadas

Opções Adicionais para Ficheiros XML

translate_content
opcional
bool Define se deves traduzir os textos colocados dentro das tags. Os valores aceitáveis são: 0 ou 1. O padrão é 1.
translate_attributes
opcional
bool Defines whether to translate tags' attributes. Os valores aceitáveis são: 0 ou 1. O padrão é 1.
content_segmentation
opcional
bool Define se os textos longos devem ser divididos em segmentos de textos menores. Os valores aceitáveis são: 0 ou 1. O padrão é 1.
Importante! Esta opção desativa a possibilidade de enviar traduções existentes para ficheiros XML quando ativada.
translatable_elements
opcional
array Este é um array de frases, onde cada item é o XPaths para elemento DOM que deve ser importado.
Exemplo de caminho: /path/to/node or /path/to/attribute[@attr]
Nota! se definido. os parâmetros translate_content e translate_attributes não são considerados durante a importação.

Exemplo do ficheiro de configuração com parâmetros adicionais:

"project_identifier": "your-project-identifier" "api_key": "54e01e81--your-api-key--f6a2724a"                 #can be found in your project settings > API tab "base_path": "/home/office/source-code"

"files" : [
  { "source" : "/app/sample1.xml", "translation" : "/app/%locale%/%original_file_name%", "translate_attributes" : 1, "translate_content" : 0 },
  {
    "source" : "/app/sample2.xml",
    "translation" : "/app/%locale%/%original_file_name%",
    "translatable_elements" : [
      "/content/text",             # translatable texts are stored in "text" nodes of parent node "content"
      "/content/text[@value]"      # translatable texts are stored in "value" attribute of "text" nodes
    ]
  }
]

Opções de Cotas de Escape para Formato de Ficheiro .properties

Define se uma aspa simples deve ser ignorada por outra ou barra invertida em traduções exportadas. You can add escape_quotes per-file option. Os valores aceitáveis são: 0, 1, 2, 3. O padrão é 3.

Os valores são:

  • 0 - não escapar da citação simples
  • 1 - escapar duma citação simples por uma outra
  • 2 - escapar de aspas simples por uma barra invertida
  • 3 - escapar de aspas simples por outra apenas em frases que contenham variáveis ( {0} )

Escapar de caracteres especiais
Define se algum caractere especial (=, :, ! e #) devem ser escapados por barras invertidas nas traduções exportadas. Podes adicionar escape_special_characters por opção de ficheiro.

Os valores aceitáveis são: 0, 1. O padrão é 1.

  • 0 - não escapar dde caracteres especiais
  • 1 - escapar de caracteres especiais por uma barra invertida

Exemplo de ficheiro de configuração:

"project_identifier": "your-project-identifier" "api_key": "54e01e81--your-api-key--f6a2724a"                 #can be found in your project settings > API tab "base_path": "/home/office/source-code"

"files" : [
  {
    "source" : "/en/strings.properties",
    "translation" : "/%two_letters_code%/%original_file_name%",
    "escape_quotes" : 1,
    "escape_special_characters" : 0
  }
]

Exemplo de Configurações

Enviar ficheiros CSV através de API

"project_identifier": "test" "api_key": "KeepTheAPIkeySecret" "base_url": "https://api.crowdin.com" "base_path": "/path/to/your/project"

"files" : [
  {
    "source" : "/*.csv",
    "translation" : "/%two_letters_code%/%original_file_name%",
    # Defines whether first line should be imported or it contains columns headers
    "first_line_contains_header" : true,
    # Used only when uploading CSV file to define data columns mapping.
    "scheme" : "identifier,source_phrase,translation,context,max_length"
  }
]

Projeto GetText

"project_identifier": "your-project-identifier" "api_key": "54e01e81--your-api-key--f6a2724a"                 #can be found in your project settings > API tab "base_path": "/home/website"

"files" : [
  {
    "source" : "/locale/en/**/*.po",
    "translation" : "/locale/%two_letters_code%/LC_MESSAGES/%original_file_name%",
    "languages_mapping" : {
      "two_letters_code" : {
        "zh-CN" : "zh_CH",
        "fr-QC": "fr"
      }
    } } ]

Projeto Android

"project_identifier": "your-project-identifier" "api_key": "54e01e81--your-api-key--f6a2724a"                 #can be found in your project settings > API tab "base_path": "/home/android-app"

"files" : [
  {
    "source" : "/res/values/*.xml",
    "translation" : "/res/values-%android_code%/%original_file_name%",
    "languages_mapping" : {
      "android_code" : {
        "de" : "de",
        "ru" : "ru"
      }
    } } ]

Ficheiro de Configuração para Integrações de VCS

As integrações VCS requerem o mesmo ficheiro de configuração como a ferramenta CLI, o que significa que, a mesma estrutura é suportada. A única diferença, é que as credenciais do projeto, não devem ser armazenadas no cabeçalho do ficheiro por razões de segurança. Além disso, podem ser utilizados dois parâmetros adicionais.

Enviar Parâmetro de mensagem para Integrações VCS

Each time translations are commited the default message is shown “New translations {fileName} ({languageName})”. You can use commit_message parameter to add Git tags, in order to skip builds, add tests, and more.

Exemplo:

"base_path": "/home/office/source-code" "commit_message": "[ci skip]" "files": [
  {
    "source" : "/resources/en/*.json",                                          #source files filter
    "translation" : "/resources/%two_letters_code%/%original_file_name%"        #where translations are stored
  }
]

Para substituir a mensagem de confirmação padrão, usa o parâmetro append_commit_message com o valor false. Também podes adicionar dois espaços reservados: %original_file_name% e %language% para usar o nome de ficheiro e variáveis de idioma apropriados.

Exemplo:

"commit_message": "Fix: New translations %original_file_name% from Crowdin" "append_commit_message": false "files": [
  {
    "source" : "/resources/en/*.json",                                          #source files filter
    "translation" : "/resources/%two_letters_code%/%original_file_name%"        #where translations are stored
  }
]

Exportar Parâmetro de Idiomas para Integrações VCS

By default, all the languages are exported. If you need to export some specific languages, use export_languages paramenter to specify them.

Exemplo:

"base_path": "/home/office/source-code" "export_languages": [ "ru", "uk", "ja" ] "files": [
  {
    "source" : "/resources/en/*.json",                                          #source files filter
    "translation" : "/resources/%two_letters_code%/%original_file_name%"        #where translations are stored
  }
]

Procurar por Ajuda

Need help working with Crowdin CLI or have any questions? Contact Support Team.

Ver Também

Este artigo foi útil?