CLI

Modificación del archivo de configuración CLI (Strings)

El contenido se traduce automáticamente del inglés por Phrase Language AI.

Push y Pull

Push

$ phrase push 

El comando push carga archivos encontrados en directorios locales del proyecto. Usa el archivo .phrase.yml para especificar los archivos que cargar y establecer parámetros adicionales. El marcador de posición <tag> también puede usarse para descargar claves en archivos separados a partir de sus etiquetas.

Pull

$ phrase pull 

Similar al comando push, con la excepción de que no se puede utilizar globbing. Cuando uses marcadores de posición, usa <locale_name> siempre que sea posible. Para obtener un archivo con claves que tengan una etiqueta específica, usa el parámetro tags:

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

Para usar el marcador de posición <tag>, las etiquetas deseadas deben enumerarse en la sección params.

Parámetros

Los comandos push y pull se pueden configurar dentro del archivo .phrase.yml.

Nota

Todas las opciones del punto final de la API uploads son compatibles con el comando push.

Todas las opciones del punto final de la API locales download son compatibles con el comando pull.

Ejemplo de push:

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

Ejemplo de pull:

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

Opciones de formato

Dependiendo del formato del archivo, se pueden aplicar opciones de formato a la sección de parámetros. Las opciones de formato se pueden aplicar a las cargas, las descargas o ambas.

Ejemplos de formato:

params:
  format_options:
    convert_placeholder: true

Algunos formatos de archivo permiten un mayor control sobre la sintaxis del archivo:

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

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

Marcadores de posición y globbing

Los siguientes marcadores de posición y operadores de globbing se pueden colocar en las rutas de las entradas del archivo:

  • <locale_name>

    El nombre único de localización.

  • <locale_code>

    El identificador de localización compatible con RFC 5646. El código de localización no tiene que ser único, por lo que pueden existir varias localizaciones con nombres diferentes con el mismo código.

  • <tag>

    Usa etiquetas para agrupar claves. Se pueden usar etiquetas para mantener la estructura original del archivo.

Globbing

* y ** son operadores de globbing. Un solo asterisco * omite cualquier carpeta en una ruta. El asterisco doble ** es el operador de globbing estándar y coincide con cualquier carácter para una coincidencia recursiva y no exhaustiva.

Ejemplos:

# un patrón de archivo

./abc/**/*.yml
# con algunos archivos en tu sistema

./abc/defg/en.yml

./abc/es.yml

./fr.yml
# selects

./abc/defg/en.yml

./abc/es.yml

Cuando utilices el comando pull para descargar archivos, proporciona un patrón de archivo explícito como ./abc/defg/<locale_name>.yml en lugar de ./**/*.yml.

Esperando descargas

Todas las descargas se procesan de forma asíncrona. Para esperar las descargas, aplica la marca --wait. Push esperará a que cada archivo se cargue y devolverá si falló o tuvo éxito.

Casos prácticos

Carga de un archivo a la localización especificada

Carga el archivo en.json en el directorio ./locales/ con el locale_id especificado (la localización ya debe existir).

Update_translations se ha marcado como false para que solo se importen nuevas claves y traducciones. Si se cambia a true, el cliente también importaría cambios locales de las traducciones existentes, sobrescribiendo cualquier contenido ya 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 # la localización debe existir de forma remota

Nota

No es posible eliminar entradas de traducción importadas. Si es necesario, actualiza las traducciones a valores empty mediante el punto final API correspondiente.

Ruby on Rails: carga de un tipo de archivo especificado

Carga todos los archivos que terminen con .yml ubicados en ./config/locales/. Los archivos YAML de Ruby on Rails contienen información de localización, por lo que no es necesario especificar la localización explícitamente. Update_translations está configurado como true, por lo que todos los cambios en las traducciones se importarán sobrescribiendo cualquier dato existente.

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

Coincidencia de cadenas iOS

Para que coincidan todos los archivos de cadenas iOS con archivos llamados Localizable.strings en carpetas .lproj.

<localización_code> es todo lo que coincide después / y antes de .lproj para crear e identificar localizaciones.

Se omite el parámetro update_translations y tiene el mismo efecto que cambiarlo a false.

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

Mantenimiento de varios proyectos de Strings para un proyecto de localización

Edita el archivo de configuración para limitar el alcance de los proyectos dividiendo las traducciones en categorías más pequeñas.

Ejemplos de configuración para marcos

Modifica el archivo de configuración para que se adapte a los requisitos y luego compruébalo en el sistema de control fuente o de control de versiones.

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"

Cadenas de 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

Android no utiliza los códigos de idioma ISO estándar como patrón de archivo. Especifica el patrón requerido en .phrase.yml.

En lugar de definir un objetivo de extracción separado para cada localización, utiliza la configuración global locale_mapping combinada con el marcador de posición <locale_name>. La CLI utilizará el nombre personalizado del mapeo para la localización correspondiente y volverá al código de localización predeterminado de Phrase para todos los demás idiomas.

Ejemplo:

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

  # Mapea las localizaciones de Phrase a nombres de directorios específicos de Android
  locale_mapping:
    en-US: values
    de-DE: values-de-rDE
    fr-FR: values-fr

  push:
    sources:
      # El archivo fuente es el idioma predeterminado, mapeado a 'values'
      - file: ./app/src/main/res/values/strings.xml
        params:
          locale_id: en-US # Debe coincidir con la localización fuente en Phrase

  pull:
    targets:
      # Usa el marcador de posición <locale_name> que será reemplazado por el mapeo
      - file: ./app/src/main/res/<locale_name>/strings.xml

Ejemplo de configuración de locales explícitos

Ejemplo con inglés como idioma predeterminado, una localización alemana y una localización regional alemana para el alemán austriaco:

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
        # Identificador único de localización para inglés
        locale_id: LOCALE_ID
    - file: ./app/src/main/res/values-de/strings.xml
      params:
        file_format: xml
        # Identificador único de localización para alemán
        locale_id: LOCALE_ID
    - file: ./app/src/main/res/values-de-rAU/strings.xml
      params:
        file_format: xml
        # Identificador único de localización para austriaco
        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

Ejemplo multiplataforma

Empuje y extraiga automáticamente traducciones para múltiples objetivos en una sola configuración. 

phrase:
  access_token: ACCESS_TOKEN
  project_id: PROJECT_ID
  file_format: nested_json

  push:
    sources:
      # Web JSON
      - file: "apps/web/src/assets/i18n/.json"
        params:
          file_format: nested_json
          locale_id: LOCALE_ID
      # Android XML
      - file: "apps/android/app/src/main/res/values-/strings.xml"
        params:
          file_format: android
          locale_id: LOCALE_ID
      # Cadenas de iOS
      - file: "apps/ios/.lproj/Localizable.strings"
        params:
          file_format: strings
          locale_id: LOCALE_ID

  pull:
    targets:
      - file: "apps/web/src/assets/i18n/.json"
        params:
          file_format: nested_json
          locale_id: LOCALE_ID
      - file: "apps/android/app/src/main/res/values-/strings.xml"
        params:
          file_format: android
          locale_id: LOCALE_ID
      - file: "apps/ios/.lproj/Localizable.strings"
        params:
          file_format: strings
          locale_id: LOCALE_ID
¿Fue útil este artículo?

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.