Configuração do arquivo

Nota: Este arquivo de configuração pode funcionar apenas com a nova CLI (v3).

Introdução

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

Para usar o Crowdin CLI, deve primeiro gerar o seu arquivo de configuração e depois, executar a ferramenta. Por padrão, o Crowdin CLI procura por um arquivo de configuração nomeado por crowdin.yaml (para que não precise de especificar o nome do arquivo, a menos que seja diferente de crowdin.yaml).

Para criar o arquivo de configuração, execute o seguinte comando:

$ crowdin init

Estrutura do arquivo de configuração

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

  • O cabeçalho do arquivo com as credenciais do projeto, preferências, e informações de acesso
  • Um elemento de array de arquivos que descreve um conjunto de arquivos de origem e de tradução que você vai administrar
  • Campos obrigatórios no array de arquivos: Origem que define filtros para os arquivos de origem e Tradução com instruções sobre onde armazenar os arquivos traduzidos ou onde procurar as traduções que você já tem, se quiser enviá-las ao configurar o CLI

Escrevendo um arquivo de configuração simples

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

"project_id": "projectId"                     #abra as configurações do projeto e vá para a seção API
"api_token": "personal-access-token"          #abra as configurações de perfil e vá para API e SSO > Novo token 
"base_path": "/project-base-path"
"base_url": "https://crowdin.com"
"preserve_hierarchy": true

"files": [
  {
    "source": "/locale/en/folder1/[0-2].txt",                                       #source files filter
    "translation": "/locale/%two_letters_code%/folder1/%original_file_name%"        #where translations are stored
  },
  {
    "source": "/locale/en/folder2/[0-2].txt",
    "translation": "/locale/%two_letters_code%/folder2/%original_file_name%"
  }
]

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

$ crowdin upload sources

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

$ crowdin download

Credenciais da API de variáveis de ambiente

Você pode carregar as Credenciais da API de uma variável de ambiente, por exemplo:

"project_id_env": "CROWDIN_PROJECT_ID"
"api_token_env": "CROWDIN_PERSONAL_TOKEN"
"base_path_env": "CROWDIN_BASE_PATH"
"base_url_env": "CROWDIN_BASE_URL"

Se misturado, api_token e project_id são priorizados:

"project_id_env": "CROWDIN_PROJECT_ID"      # Baixa prioridade
"api_token_env": "CROWDIN_PERSONAL_TOKEN"   # Baixa prioridade
"base_path_env": "CROWDIN_BASE_PATH"        # Baixa prioridade
"base_url_env": "CROWDIN_BASE_PATH"         # Baixa prioridade
"project_id": "projectId"                   # Alta prioridade
"api_token": "personal-access-token"        # Alta prioridade
"base_path": "/project-base-path"           # Alta prioridade
"base_url": "https://crowdin.com"           # Alta prioridade

Dividir configuração de projeto e credenciais de API

O arquivo crowdin.yaml contém uma descrição dos recursos para gerenciar e credenciais API (project_id, api_token, base_path, base_url). Isto significa que, não é seguro enviar (commit) este arquivo no repositório do código, porque a chave API pode ser acessada por outros usuários. O Crowdin CLI suporta dois tipos de arquivos de configuração:

  • uma descrição dos recursos para gerenciar, residindo no diretório do projeto
  • Credenciais de API, provavelmente residindo em $HOME/.crowdin.yaml
Nota: As credenciais API do arquivo de configuração .crowdin.yaml, são de maior prioridade do que as credenciais do diretório do projeto (crowdin.yaml).

Se você precisa de executar um comando com as credenciais específicas do usuário (por exemplo, upload sources), então executa o seguinte comando:

$ crowdin upload sources --identity 'caminho-para-o-arquivo-das-credenciais-do-usuário'

Mas se o arquivode credenciais específicas do usuário, 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 arquivos.

Aqui estão os padrões que você pode usar:

* (asterisco)

Representa qualquer caractere no nome do arquivo ou diretório. Se você especificar um “*.json”, ele incluirá todos os arquivos, como “messages.json”, “about_us.json” e qualquer coisa que termine com “.json”.

** (duplo asterisco)

Corresponde a qualquer texto recursivo (incluindo subdiretórios). Nota que podes usa ** nos padrões de origem e tradução. Ao usar ** no padrão de tradução, ele sempre conterá um subdiretório da origem para um determinado arquivo. Por exemplo, pode usar a origem: ‘/en/**/*po’ para enviar todos os arquivos *.po para o Crowdin, recursivamente. O padrão de tradução será ‘/%two_letters_code%/**/%original_file_name%’.

? (ponto de interrogação)

Corresponde a qualquer caractere único.

[set]

Corresponde a qualquer caractere único em um conjunto. Comporta-se exatamente como conjuntos de caracteres no Regexp, incluindo negação de conjunto ([^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 arquivo 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 arquivo 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 arquivo no pacote resultante
%file_extension% Extensão do arquivo original
%file_name% Nome do arquivo sem extensão

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

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

Uso de caracteres especiais

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

- caminho_base | |-- pasta |     | |     |-- 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

Exemplo 1. Utilização de carateres de substituição no caminho fonte:

#........a sua 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%"
  }
]

Exemplo 2. Utilização de caráteres de substituição para ignorar os arquivos:

#........a sua 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. O Crowdin permite mapear seus próprios idiomas para serem reconhecidos em seus projetos.

Digamos que seus diretórios de localidade sejam chamado ‘en’, ‘uk’, ‘fr’, ‘de’. Todos eles podem ser representados pelo espaço reservado %two_letters_code%. Ainda assim, você tem um diretório chamado “zh_CH’. Para fazê-lo funcionar com o Crowdin sem alterações em seu projeto, você pode configurar o mapeamento de idioma. Também pode substituir os códigos de idioma de outros marcadores como %android_code%, %locale%, etc.

Você pode configurar o Mapeamento de idioma por meio da interface do usuário (IU) ou adicionando uma seção languages_mapping ao seu conjunto de arquivos. Recomendamos configurar um mapeamento de idioma via interface de usuário, pois elimina a necessidade de duplicar o parâmetro languages_mapping para cada filtro de arquivo, mas é claro, você pode escolher a opção que funciona melhor para você.

Para configurar o mapeamento de idioma via interface de usuário, siga estas etapas:

  1. Abra as configurações do projeto > aba de geral e role para baixo até a seção de exportação.
  2. Clique em Mapeamento de idiomas para adicionar códigos de idioma personalizados aos idiomas de destino do seu projeto.

Para configurar o mapeamento de idioma em seu arquivo de configuração, adicione a seção languages_mapping ao seu conjunto de arquivos, conforme mostrado abaixo.

Configuração de amostra:

"files": [
  {
    "source" : "/locale/en/**/*.po",
    "translation" : "/locale/%two_letters_code%/**/%original_file_name%",
    "languages_mapping" : {
      "two_letters_code" : {
        "uk" : "ukr",
        "pl" : "pol"
      }
    }
  }
]

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

Renomear arquivo de traduções

Se você precisar renomear um arquivo com traduções após a exportação, você pode facilmente fazer isso com a ajuda do parâmetro translation_replace.

Por exemplo, se o arquivo tiver o nome “en_strings.po”, ele poderá ser renomeado para “strings.po”. Para isto, adiciona um novo parâmetro (no mesmo nível do parâmetro de tradução) para o arquivo 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 arquivo.

Ignorar arquivos e diretórios

De tempos em tempos existem arquivos e diretórios que você não precisa traduzir no Crowdin. Nesses casos, regras locais por arquivo podem ser adicionadas ao arquivo de configuração em seu projeto.

"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 arquivo CSV contiver as traduções para todos os idiomas de destino, deverá especificar os códigos de idioma apropriados no esquema.

Exemplo de arquivo 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 arquivo de configuração:

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

Se o seu arquivo CSV contiver colunas que devem ser ignoradas na importação, use none para essas colunas no esquema, por exemplo:

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

Salvar a estrutura de diretórios no servidor

"preserve_hierarchy": true

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

"project_id": "projectId"                     #abra as configurações do projeto e vá para a seção API
"api_token": "personal-access-token"          #abra as configurações de perfil e vá para API e SSO > Novo token > criar token
"base_path": "/project-base-path"
"base_url": "https://crowdin.com"
"preserve_hierarchy": true

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

Por padrão, as pastas que não contêm arquivos para a tradução não será criada em Crowdin. Por exemplo:

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

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

- foo.po
- bar.po

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

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

Enviar arquivos para o caminho especificado com o tipo especificado

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

Nota! O parâmetro destfunciona apenas para arquivos únicos e, se você o usar, o arquivo de configuração também deverá incluir o parâmetro preserve_hierarchy com o valor true.

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

"project_id": "projectId"                     #abra as configurações do projeto e vá para a seção API
"api_token": "personal-access-token"          #abra as configurações do perfil e vá para API e SSO > Novo token > criar token
"base_path": "/project-base-path"
"base_url": "https://crowdin.com"
"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%",
    "type": "properties"
  }
]

Atualização de textos alterados

O parâmetro update_option é opcional. Se não estiver definido, as traduções para textps alteradas serão perdidas. Útil para correções de digitação e pequenas alterações nas strings de origem.

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

Os valores são:

  • update_as_unapproved - preservar as traduções das strings modificadas e remover as validações dessas traduções, caso elas existam
  • update_without_changes - preservar as traduções e validações das strings modificadas

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

"project_id": "projectId"                     #abra as configurações do projeto e vá para a seção API
"api_token": "personal-access-token"          #abra as configurações do perfil e vá para API e SSO > Novo token > criar token
"base_path": "/project-base-path"
"base_url": "https://crowdin.com"

"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"
  }
]

Carregamento de traduções

The command upload translations uploads existing translations to Crowdin. Se nenhuma opção for especificada, as traduções carregadas não serão importadas, mesmo que sejam iguais os textos de origem e não sejam aprovados.

Os valores são:

  • -l, --language=language_code - defines the language translations that should be uploaded to 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-eq-suggestions - defines whether to add translation if it is equal to source string in Crowdin project
  • --[no-]auto-approve-imported - automatically approves uploaded translations

Opções adicionais para arquivos XML

translate_content
opcional
bool Define se deve traduzir textos colocados dentro das etiquetas.
Os valores aceitáveis são: 0 ou 1. O padrão é 1.
translate_attributes
opcional
bool Define se os atributos das etiquetas devem ser traduzidos.
Os valores aceitáveis são: 0 ou 1. O padrão é 1.
content_segmentation
opcional
bool Define se é necessário dividir textos longos em segmentos de texto menores.
Os valores aceitáveis são: 0 ou 1. O padrão é 1.
Importante! Esta opção desativa a possibilidade de carregar traduções existentes para arquivos 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 ou /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 arquivo de configuração com parâmetros adicionais:

"project_id": "projectId"                   #abra as configurações do projeto e vá para a seção API
"api_token": "personal-access-token"        #abra as configurações do perfil e vá para API e SSO > Novo token > criar token
"base_path": "/project-base-path"
"base_url": "https://crowdin.com"

"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 arquivo .properties

Define se uma aspa simples deve ser ignorada por outra ou barra invertida em traduções exportadas. Podes adicionar escape_quotes por opção de arquivo. 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 textos 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 arquivo.

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 arquivo de configuração:

"project_id": "projectId"                   #abra as configurações do projeto e vá para a seção API
"api_token": "personal-access-token"        #abra as configurações de perfil e vá para API e SSO > Novo token > criar token
"base_path": "/project-base-path"
"base_url": "https://crowdin.com"

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

Exemplo de configurações

Carregar arquivos CSV através de API

"project_id": "projectId"                   #abra as configurações do projeto e vá para a seção API
"api_token": "personal-access-token"        #abra as configurações de perfil e vá para API e SSO > Novo token > criar token
"base_path": "/project-base-path"
"base_url": "https://crowdin.com"

"files": [
  {
    "source": "/*.csv",
    "translation": "/%two_letters_code%/%original_file_name%",
    # Especifica se a primeira linha deve ser importada ou contém cabeçalhos de colunas. "first_line_contains_header": true,
    # usado apenas ao fazer upload de arquivo CSV para definir o mapeamento de colunas de dados
    "scheme": "identifier,source_phrase,translation,context,max_length"
  }
]

Projeto GetText

"project_id": "projectId"                   #abra as configurações do projeto e vá para a seção API
"api_token": "personal-access-token"        #abra as configurações de perfil e vá para API e SSO > Novo token > criar token
"base_path": "/project-base-path"
"base_url": "https://crowdin.com"

"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_id": "projectId"                   #abra as configurações do projeto e vá para a seção API
"api_token": "personal-access-token"        #abra as configurações de perfil e vá para API e SSO > Novo token > criar token
"base_path": "/project-base-path"
"base_url": "https://crowdin.com"

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

Arquivo de configuração para integrações de VCS

As integrações VCS requerem o mesmo arquivo 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 arquivo 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

Cada vez que as traduções são confirmadas, a mensagem padrão é exibida “Novas traduções {fileName} ({languageName})”. Podes usar o parâmetro commit_message adicionar etiquetas Git (por exemplo, para ignorar compilações).

Exemplo:

"base_path": "/project-base-path"
"commit_message": "[ci skip]"

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

Para substituir a mensagem de confirmação padrão, use 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 arquivo 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",
    "translation" : "/resources/%two_letters_code%/%original_file_name%"
  }
]

Exportar parâmetro de idiomas para integrações VCS

Por padrão, todos os idiomas são exportados. Se você precisar exportar alguns idiomas específicos, use o parâmetro export_languages para especificá-los.

Exemplo:

"base_path": "/project-base-path"
"export_languages": [                                   
    "ru", 
    "uk", 
    "ja"
  ]
"files": [
  {
    "source" : "/resources/en/*.json",
    "translation" : "/resources/%two_letters_code%/%original_file_name%"
  }
]

Usando um arquivo de configuração para integrações VCS e CLI

Há casos em que é necessário usar a integração VCS e a CLI para um projeto. Principalmente, nesse tipo de situação, você precisa ter dois arquivos de configuração separados, um para integração com VCS e outro para CLI. No entanto, existe a possibilidade de usar um único arquivo de configuração para os dois casos.

Como o arquivo de configuração de integração VCS não contém credenciais project_id and api_token necessários para a CLI, você pode transmiti-los diretamente no comando usando os seguintes parâmetros: -i/--project-id, -T/--token. Como alternativa, você pode usar variáveis ambientais for para esse propósito.

Como resultado, seu comando para baixar traduções via CLI será semelhante ao seguinte:

$ crowdin download -i {your-project-id} -T {your-token}

Procurando ajuda

Precisa de ajuda para trabalhar com Crowdin CLI ou tem alguma dúvida? Entre em contato com a equipe de suporte.

Veja também

Este artigo foi útil?