CLI

Modificar o arquivo de configuração de CLI (Strings)

O conteúdo de toda a Central de Ajuda é traduzido automaticamente de inglês pelo Phrase Language AI.

O arquivo .phrase.yml é usado para armazenar argumentos de linha de comando reutilizados.

Argumentos aceitos:

  • project_id

    O ID de um projeto.

  • file_format

    O formato de arquivo usado quando não está explicitamente especificado nas entradas de texto original e tradução.

  • per_page

    O número de itens retornados em respostas paginadas.

Amostra de arquivo de configuração.

Push e pull

Push

$ phrase push 

O comando push executa uploads de arquivos encontrados em diretórios de projeto locais. Use o arquivo .phrase.yml para especificar arquivos para upload e definir parâmetros adicionais. O marcador de posição <tag> também pode ser usado para baixar chaves em arquivos separados com base nos códigos.

Pull

$ phrase pull 

É semelhante ao comando push com a exceção que o recurso de curinga (globbing) não pode ser usado. Ao usar marcadores de posição, use <local_name> sempre que possível. Para executar pull num arquivo com chaves que tenham um código específico, use o parâmetro tags:

phrase:
  pull:
    targets:
    - file: path/to/file/<locale_name>.yml
      params:
        tags:tag_name

Para usar o marcador de posição <tag>, os códigos desejados devem estar listados na seção params.

Parâmetros

Os comandos push e pull podem ser configurados no arquivo .phrase.yml. As opções de push são as mesmas do endpoint da API para uploads e as opções de pull são as mesmas do endpoint da API de locales download.

Exemplo de push:

push:
  sources:
  - file: ./locales/en.json
    params:
      update_translations: true 

Exemplo de pull:

pull:
  targets:
  - file: "./locales/example.yml"
    params:
      include_unverified_translations: true

Opções de formato

Dependendo do formato de arquivo, as opções de formato podem ser aplicadas à seção de parâmetros. As opções de formato podem ser aplicadas a uploads, downloads ou ambos.

Exemplos de formato:

params:
  format_options:
    convert_placeholder: true

Alguns formatos de arquivo permitem um maior controle sobre a sintaxe do arquivo:

phrase:
  pull:
    targets:
    - file: file.xml
      params:
        format_options:
          convert_placeholder: true

  push:
    sources:
    - file: file.csv
      params:
        format_options:
          column_separator: ";"

Marcadores e globbing

Os seguintes marcadores e operadores de globbing podem ser colocados nos caminhos dentro das entradas de seu arquivo:

  • <locale_name>

    O nome único do local.

  • <locale_code>

    O identificador de local em conformidade com RFC 5646. O código de local não precisa ser único. Portanto, podem existir vários locais com diferentes nomes e o mesmo código.

  • <tag>

    Use códigos para agrupar chaves. Códigos podem ser usados para manter a estrutura do arquivo original.

Globbing

* e ** são operadores de globbing. Um asterisco * ignora qualquer pasta em um caminho. O asterisco duplo ** é como o operador padrão de globbing e corresponde a qualquer caractere para correspondência recursiva e não exaustiva.

Exemplos:

# a file pattern

./abc/**/*.yml
# with a few files on your system

./abc/defg/en.yml

./abc/es.yml

./fr.yml
# selects

./abc/defg/en.yml

./abc/es.yml

Ao usar o comando pull para baixar arquivos, forneça um padrão de arquivo explícito como ./abc/defg/<local_name>.yml em vez de ./**/*.yml.

Aguardando uploads

Todos os uploads são processados de forma assíncrona. Para aguardar uploads, aplique a marca --wait. O código push vai esperar por cada upload de arquivo e retornar em caso de falha ou não.

Casos de usar

Upload de um arquivo para um local especificado

Faça upload do arquivo en.json para o diretório ./locales/ com o locale_id fornecido (o local deve já existir).

Update_translations está definido como falso. Portanto, apenas novas chaves e traduções são importadas. Se definido como true, o cliente também importaria alterações locais às traduções existentes, substituindo qualquer conteúdo já presente.

phrase:
  access_token: ACCESS_TOKEN
  project_id: PROJECT_ID
  file_format: nested_json

  push:
    sources:
    - file: ./locales/en.json
      params:
        update_translations: false
        locale_id: YOUR_LOCALE_ID # the locale must exist remotely

Nota

Não é possível excluir entradas de tradução importadas. Se necessário, atualize as traduções para valores empty por meio do endpoint da API relevante.

Ruby on Rails: fazer upload de tipo de arquivo especificado

Faça upload de todos os arquivos que terminam com .yml localizado em ./config/locales/. Os arquivos Ruby on Rails YAML contêm informações locais, portanto, não há necessidade de especificar o local explicitamente. Update_translations está definido como true. Portanto, todas as alterações às traduções serão importadas, com quaisquer dados existentes sendo substituídos.

phrase:
  push:
    sources:
    - file: ./config/locales/*.yml
      params:
        update_translations: true
        file_format: yml

Correspondência de Strings iOS

Para corresponder todos os arquivos de Strings iOS com arquivos chamados Localizable.strings em pastas .lproj.

O < local_code> é tudo o que corresponde após / e antes de .lproj para criar e identificar locais.

O parâmetro update_translations é omitido e tem o mesmo efeito de defini-lo como false.

phrase:
  push:
    sources:
    - file: "./<locale_code>.lproj/Localizable.strings"
      params:
        file_format: strings

Manter vários projetos de Strings para um projeto de localização

Edite o arquivo de configuração para limitar o escopo dos projetos dividindo as traduções em categorias menores.

Exemplos de configuração para frameworks

Modifique o arquivo de configuração conforme os requisitos e depois verifique no controle do texto original ou sistema de controle de versão.

Rails

phrase:
  access_token: ACCESS_TOKEN
  project_id: PROJECT_ID
  file_format: "yml"

  push:
    sources:
    - file: "./config/locales/*.yml"

  pull:
    targets:
    - file: "./config/locales/<locale_name>.yml"

Strings iOS

phrase:

  access_token: ACCESS_TOKEN
  project_id: PROJECT_ID
  file_format: "strings"

  push:
    sources:
    - file: "./<locale_code>.lproj/Localizable.strings"

  pull:
    targets:
    - file: "./<locale_code>.lproj/Localizable.strings"
    - file: "./<locale_code>.lproj/Localizable.stringsdict"
      params:
        #file_format can be overwritten
        file_format: "stringsdict"

Android XML

O Android não usa os códigos de idioma ISO padrão como padrão de arquivo. Especifique o padrão necessário em .phrase.yml.

phrase:
  access_token: ACCESS_TOKEN
  project_id: PROJECT_ID
  file_format: "xml"

  push:
    sources:
    - file: "./res/values-<locale_code>/strings.xml"

  pull:
    targets:
    - file: "./res/values-<locale_code>/strings.xml"

A seguir, um exemplo usando o inglês como idioma padrão, um local alemão e um local de região alemã para o alemão austríaco:

phrase:
  access_token: ACCESS_TOKEN
  project_id: PROJECT_ID
  file_format: xml
  
  pull:
    targets:
    - file: ./app/src/main/res/values/strings.xml
      params:
        file_format: xml
        # Unique locale id for English
        locale_id: LOCALE_ID
    - file: ./app/src/main/res/values-de/strings.xml
      params:
        file_format: xml
        # Unique locale id for German
        locale_id: LOCALE_ID
    - file: ./app/src/main/res/values-de-rAU/strings.xml
      params:
        file_format: xml
        # Unique locale id for Austrian
        locale_id: LOCALE_ID
  push:
    sources:
    - file: ./app/src/main/res/values/strings.xml
      params:
        file_format: xml
        locale_id: LOCALE_ID
    - file: ./app/src/main/res/values-de/strings.xml
      params:
        file_format: xml
        locale_id: LOCALE_ID
    - file: ./app/src/main/res/values-de-rAU/strings.xml
      params:
        file_format: xml
        locale_id: LOCALE_ID
Esse artigo foi útil?

Sorry about that! In what way was it not helpful?

The article didn’t address my problem.
I couldn’t understand the article.
The feature doesn’t do what I need.
Other reason.

Note that feedback is provided anonymously so we aren't able to reply to questions.
If you'd like to ask a question, submit a request to our Support team.
Thank you for your feedback.