File di configurazione

Note: This configuration file can work only with new CLI (v3).

Introduzione

La CLI Crowdin usa un file di configurazione YAML che contiene una descrizione delle risorse da gestire: file da caricare in Crowdin e le posizioni delle traduzioni corrispondenti.

Per usare la CLI di Crowdin, dovresti prima generare il tuo file di configurazione e poi eseguire lo strumento. Di default, Crowdin CLI cerca un file di configurazione chiamato crowdin.yaml (quindi non devi specificare il nome del file a meno che sia differente da crowdin.yaml).

Per creare il file di configurazione esegui il seguente comando:

$ crowdin init

Struttura File Configurazione

Un file di configurazione YAML della CLI di Crowdin ha la seguente struttura, quindi assicurati perfabote di compilare tutte le informazioni necessarie:

  • Testa del file con credenziali del progetto, preferenze ed informazioni di accesso
  • Un elemento dell’insieme di file che descrive una serie di file risorsa e traduzione che gestirai
  • I campi richiesti nell’insieme di file: Risorsa che definisce i filtri per i file d’origine e Traduzione con le istruzioni su dove archiviare i file tradotti o dove cercare le traduzioni che hai già se vuoi caricarle durante la configurazione della CLI

Scrivete un Semplice File Configurazione

Un file configurazione YAML tipico sembra simile al seguente:

"project_id": "projectId"                     #open project settings and go to API section 
"api_token": "personal-access-token"          #open profile settings and go to API & SSO > New Token > create 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%"
  }
]

Per eseguire il file di configurazione sopra e caricare file risorsa a Crowdin:

$ crowdin upload sources

Ottieni traduzioni da Crowdin e mettile nei posti giusto:

$ crowdin download

Credenziali API da Variabili Ambiente

Potresti caricare le Credenziali API da un ambiente variabile, per esempio:

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

If mixed, api_token and project_id are prioritized:

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

Dividi Configurazione Progetto e Credenziali API

The crowdin.yaml file contains a description of the resources to manage and API credentials (project_id, api_token, base_path, base_url). Ciò significa che è insicuro impegnate questo file nella Repository del codice perché la chiave API sarebbe accessibile ad altri utenti. Crowdin CLI supporta 2 tipi di file di configurazione:

  • una descrizione delle risorse da gestire, residenti nella directory del progetto
  • Credenziali API, probabilmente residenti in $HOME/.crowdin.yaml
Nota: Le credenziali API dal file di configurazione .crowdin.yaml sono di proprietà superiore delle credenziali dalla directory del progetto(crowdin.yaml).

Se devi eseguire un comando con credenziali utente specifiche (per esempio carica risorse) allora esegui il comando seguente:

$ crowdin upload sources --identity 'path-to-user-credentials-file'

Ma se il file delle credenziali specifiche dell’utente risiede in $HOME/.crowdin.yaml puoi semplicemente eseguire:

$ crowdin upload sources

Configurazione Generale

La configurazione campione fornita sopra ha attributi di risorsa e traduzione contenenti wildcard standard (anche note come globbing patterns) per rendere più facile lavorare con file multipli.

Ecco i pattern che puoi usare:

* (asterisco)

Rappresenta ogni carattere nel nome del file o della directory. Se specifici un “*.json” includerà tutti i file come “messages.json”, “about_us.json” e qualsiasi cosa finisca con “.json”.

** (asterisco doppio)

Corrispondi ricorsivamente ogni stringa (includendo le sub-directory). Nota che puoi usare ** sia nei modelli di traduzione che in quelli di origine. Quando usi ** nel modello di traduzione, conterrà sempre il sotto-percorso dall’origine per un certo file. Per esempio, puoi usare l’origine: ‘/en/**/*.po per caricare tutti i file *.po ricorsivamente in Crowdin. Il modello di traduzione sarà ‘/%two_letters_code%/**/%original_file_name%’.

? (punto interrogativo)

Corrisponde ad ogni carattere singolo.

[set]

Abbina ogni carattere singolo in una serie. Si comporta esattamente come i set di caratteri in Regexp, incluso il set di negazione ([^a-z]).

\ (backslash)

Esce dal prossimo metacarattere.

Segnaposto

La CLI di Crowdin consente di usare i seguenti segnaposto per mettere le variabili appropriate nel nome file risultante:

Nome Descrizione
%language% Nome lingua (es. Ucraino)
%two_letters_code% Codice Lingua ISO 639-1 (es. uk)
%three_letters_code% Codice Lingua ISO 639-2/T (ed. ukr)
%locale% Locale (come uk-UA)
%locale_with_underscore% Locale (es. uk_UA)
%original_file_name% Nome file originale
%android_code% Identificatore Locale Android usato per denominare le directory "values-"
%osx_code% Identificatore Locale OS X usato per denominare le directory ".lproj"
%original_path% Usa nomi di cartelle genitori nel progetto Crowdin per costruire un percorso file nel pacchetto risultato
%file_extension% Estensione file originale
%file_name% Nome file senza estensione

Puoi anche definire il percorso per file nell’archivio risultante mettendo uno slash (/) all’inizio del pattern.

La tua opzione di traduzione può sembrare come: “/locale/%two_letters_code%/LC_MESSAGES/%original_file_name%”.

Uso delle Wildcards

Struttura dei file e directory sulla macchina locale:

- 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

Esempio 1. Uso delle wildcard nel percorso d’origine:

#........your project configuration........
"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%"
  }
]

Esempio 2. Uso di wildcard per ignorare i file:

#........your project configuration........
"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
    ]
  }
]

Mappatura Lingua

Spesso i progetti di software hanno nomi personalizzati per le directory locali. Crowdin Enterprise allows you to map your own languages to be recognizable in your projects.

Diciamo che le tue directory locali sono denominate ‘en’, ‘uk’, ‘fr’, ‘de’. Tutti loro possono essere rappresentato dal segnaposto %two_letters_code%. Ancora, hai una directory denominata ‘zh_CH’. To make it work with Crowdin without changes in your project, you can set up Language Mapping. Puoi anche sovrascrivere i codici lingua per altri segnaposto come %android_code%, %locale%, etc.

You can set up Language Mapping via the user interface (UI):

  1. Apri le Impostazioni Progetto e scendi alla sezione Esportazione.
  2. Clicca Mappatura Lingua per aggiungere codici di lingua personalizzati alle lingue di destinazione del tuo progetto.

Rinominare File di Traduzioni

Se devi rinominare un file con traduzioni dopo l’esportazione, puoi facilmente farlo con l’aiuto del parametro translation_replsce.

For example, if the file is named “en_strings.po” it can be renamed to “strings.po”. Per questo, aggiungi un nuovo parametro (allo stesso livello del parametro traduzione) al file di configurazione (crowdin.yaml):

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

In questo caos, “_en” sarà semplicemente cancellato dal nome file.

Ignorare File e Directory

Di volta in volta ci sono file e directory che non necessiti tradurre in Crowdin. In tali casi, le regole dei file locali possono essere aggiunte al file di configurazione nel tuo profilo.

"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 Multicolonna

Se un file CSV contiene le traduzioni per tutte le lingue obiettivo, dovresti specificare codici di lingua appropriati nello schema.

Esempio file CSV:

identificatore,source_phrase,contesto,Ucraino,Russo,Francese ident1,Risorsa 1,Contesto 1,,, ident2,Risorsa 2,Contesto 2,,, ident3,Risorsa 3,Contesto 3,,,

Esempio file di configurazione:

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

Salvare Struttura Directory sul Server

"preserve_hierarchy": true

Esempio di file configurazione usando l’opzione preserve_hierarchy:

"project_id": "projectId"                     #open project settings and go to API section
"api_token": "personal-access-token"          #open profile settings and go to API & SSO > New Token > create 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%"
  }
]

Di default, le directory che non contengono alcun file per la traduzione non saranno create in Crowdin. Per esempio:

- locale | |--it | |-- foo.po |-- bar.po

Per impostazione predefinita, i file di progetto saranno rappresentati in Crowdin come segue:

- foo.po
- bar.po

Usando l’opzione preserve_hierarchy, la struttura del file in Crowdin sarà la seguente:

- it | |-- foo.po |-- bar.po

Caricare File nel Percorso Specificato con Tipo Specificato

Questa funzione aggiunge supporto per 2 parametri opzionali nella sezione file yaml: dest e type. Ciò è tipicamente usato per progetti, dove il nome caricato deve essere differente, quindi Crowdin può rilevare correttamente il tipo. Il parametro dest ti permette di specificare un nome file in Crowdin.

Nota! Il parametro dest funziona solo per file singoli, e se lo usi, il file di configurazione dovrebbe anche includere il parametro preserve_hierarchy con il valore true.

Esempio del file di configurazione con entrambi i parametri:

"project_id": "projectId"                     #open project settings and go to API section
"api_token": "personal-access-token"          #open profile settings and go to API & SSO > New Token > create 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"
  }
]

Aggiornamento Stringhe Modificate

Il parametro update_option è facoltativo. Se non è configurato, le traduzioni per le stringhe modificate saranno perse. Utile per le correzioni di errori di ortografia e per modifiche minori nelle stringhe d’origine.

In base al valore, update_option è usato per preservare traduzioni e preservare/rimuovere validazioni di stringhe modificate durante il caricamento del file.

I valori sono:

  • 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

Esempio di file di configurazione con parametro update_option:

"project_id": "projectId"                     #open project settings and go to API section
"api_token": "personal-access-token"          #open profile settings and go to API & SSO > New Token > create 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"
  }
]

Caricamento Traduzioni

Il comando upload translations carica traduzioni esistenti in Crowdin. Se nessuna opzione è specificata, le traduzioni caricate non saranno importate neanche se sono duplicate o se uguali alle stringhe risorsa, e non saranno approvate.

I valori sono:

  • -l, –language=language_code - definisce le traduzioni lingua che dovrebbero essere caricate in Crowdin. Per impostazione predefinita, le traduzioni sono caricate in tutti le lingue obiettivo del progetto. (Crowdin Language Codes)
  • –[no-]import-duplicates - definisce se aggiungere la traduzione se la stessa esiste già nel progetto Crowdin
  • –[no-]import-eq-suggestions - definisce se aggiungere la traduzione se è uguale alla stringa risorsa nel progetto Crowdin
  • –[no-]auto-approve-imported - approva automaticamente le traduzioni caricate

Opzioni Aggiuntive per File XML

translate_content
opzionale
booleano Definisci se i testi tradotti sono posti all'interno dei tag. Valori accettabili sono: 0 o 1. Predefinito è 1.
translate_attributes
opzionale
booleano Defines whether to translate tags' attributes. Valori accettabili sono: 0 o 1. Predefinito è 1.
content_segmentation
opzionale
booleano Definisce se dividere testi lunghi in segmenti più piccoli di testo. Valori accettabili sono: 0 o 1. Predefinito è 1.
ImportanteQuesta opzione disabilita la possibilità di caricare traduzioni esistenti per file XML quando abilitata.
translatable_elements
opzionale
insieme Questo è un insieme di stringhe, dove ogni elemento è l'elemento Xpath a Dom che dovrebbe essere importato.
Esempio percorso: /path/to/node o /path/to/attribute[@attr]
Nota! Se definiti, i parametri translate_content e translate_attributes non sono presi in conto durante l'importazione.

Esempio del file di configurazione con parametri aggiuntivi:

"project_id": "projectId"                   #open project settings and go to API section
"api_token": "personal-access-token"        #open profile settings and go to API & SSO > New Token > create 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
    ]
  }
]

Opzioni Quote di fuga per Formato di File .properties

Definisce se una singola quota dovrebbe essere scappata da un’altra quota singola o debba essere eseguito un backslash nelle traduzioni esportate. You can add escape_quotes per-file option. Valori accettabili sono: 0, 1, 2, 3. Predefinito è 3.

I valori sono:

  • 0 - non fuggire quota singola
  • 1 - fuga singola citazione da un’altra singola citazione
  • 2 - fuga singola citazione da una backslash
  • 3 - fuga singola citazione da un’altra singola citazione solo nelle stringhe contenenti variabili ( {0} )

Esci caratteri speciali
Definisce se alcuni caratteri speciali(=, :, ! e #) dovrebbero essere usciti da uno backslash nelle traduzioni esportate. Puoi aggiungere l’opzione per file escape_special_characters.

Valori accettabili sono: 0, 1. Predefinito è 1.

  • 0 - non uscire caratteri speciali
  • 1 - esci caratteri speciali da uno backslash

Esempio di file di configurazione:

"project_id": "projectId"                   #open project settings and go to API section
"api_token": "personal-access-token"        #open profile settings and go to API & SSO > New Token > create 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
  }
]

Esempio Configurazioni

Caricare file CSV tramite API

"project_id": "projectId"                   #open project settings and go to API section
"api_token": "personal-access-token"        #open profile settings and go to API & SSO > New Token > create Token
"base_path": "/project-base-path"
"base_url": "https://crowdin.com"

"files": [
  {
    "source": "/*.csv",
    "translation": "/%two_letters_code%/%original_file_name%",
    # Specifies 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"
  }
]

Progetto GetText

"project_id": "projectId"                   #open project settings and go to API section
"api_token": "personal-access-token"        #open profile settings and go to API & SSO > New Token > create 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"
      }
    }
  }
]

Progetto Android

"project_id": "projectId"                   #open project settings and go to API section
"api_token": "personal-access-token"        #open profile settings and go to API & SSO > New Token > create 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"
      }
    }
  }
]

File Configurazione per Integrazioni VCS

Le integrazioni VCS richiedono lo stesso file di configurazione dello strumento CLI, quindi la stessa struttura è supportata. L’unica differenza è che le credenziali di progetto non dovrebbero essere archiviate nell’intestazione file per ragioni di sicurezza. Inoltre, si possono usare due parametri aggiuntivi.

Messaggio di Impegni Parametro per Integrazioni VCS

Each time translations are committed the default message is shown “New translations {fileName} ({languageName})”. You can use commit_message parameter to add Git tags (e.g. to skip builds).

Esempio:

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

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

Per rimpiazzare il messaggio d’impegno predefinito, usa il parametro append_commit_message col valore false. Puoi anche aggiungere due segnaposto opzionali: %original_file_name% e %language% per usare il nome file appropriato e le variabili lingua di conseguenza.

Esempio:

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

Parametro Lingue Esportazione per Integrazioni VCS

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

Esempio:

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

Using One Configuration File for VCS Integrations and CLI

There are cases when it’s necessary to use VCS integration and CLI for one project. Mostly, in this kind of situation, you’d need to have two separate configuration files, one for VCS integration and another for CLI. However, there is a possibility to use a single configuration file for both cases.

Since the VCS integration configuration file doesn’t contain project_id and api_token credentials that are required for CLI, you can pass them directly in the command using the following parameters: -i/--project-id, -T/--token. Alternatively, you may use environment variables for this purpose.

As a result, your command for downloading translations via CLI will look like the following:

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

Assistenza Ricerca

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

Vedi Anche

Questo articolo è stato utile?