Crowdin CLI uses a configuration file that contains a description of the resources to manage: files to be uploaded into Crowdin and the locations of the corresponding translations.
A Crowdin CLI használatához először hozza létre a saját YAML konfigurációját, majd futtassa az eszközt. By default, Crowdin CLI looks for a configuration file named crowdin.yml (so you don’t have to specify the file name unless it’s different from crowdin.yml).
A konfigurációs fájl létrehozásához futtassa a következő parancsot:
$ crowdin init
A valid Crowdin CLI configuration file has the following structure, so please make sure that you fill out all the needed information:
A typical configuration file looks similar to the following:
"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%"
}
]
A fenti konfigurációs fájl futtatása és a forrásfájlok feltöltése a Crowdinba:
$ crowdin upload sources
Get translations from Crowdin and put them in the right locations:
$ crowdin download
Az API hitelesítő adatokat egy környezeti változóból is betöltheti, pl.:
"project_id_env": "CROWDIN_PROJECT_ID"
"api_token_env": "CROWDIN_PERSONAL_TOKEN"
"base_path_env": "CROWDIN_BASE_PATH"
"base_url_env": "CROWDIN_BASE_URL"
Ha kevert, akkor az api_token és a project_id prioritásai a következők:
"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
The crowdin.yml file contains a description of the resources to manage and API credentials (project_id, api_token, base_path, base_url). Ez azt jelenti, hogy nem biztonságos a fájl tárolása az adattárban, mert az API kulcs így elérhető a többi felhasználó számára. A Crowdin CLI kétféle konfigurációs fájlt támogat:
Ha felhasználó-specifikus hitelesítő adatokkal kell parancsot futtatnia (például upload sources
), akkor futtassa a következő parancsot:
$ crowdin upload sources --identity 'path-to-user-credentials-file'
De ha a felhasználó-specifikus hitelesítő fájl a $HOME/.crowdin.yml alatt található, akkor egyszerűen így is futtathatja:
$ crowdin upload sources
A fent bemutatott minta-konfiguráció olyan forrás- és fordítási attribútumokat tartalmaz, amelyek szabványos helyettesítő karaktereket tartalmaznak (más néven globbing minták), hogy megkönnyítsék a több fájl kezelését.
Ezeket a mintákat használhatja:
* (csillag)
A fájl vagy a könyvtár nevében megjelenő karaktereket ábrázolja. Ha “*.json”-t ad meg, akkor minden olyan fájlt tartalmazni fog, mint a “messages.json”, az “about_us.json” és bármi, melynek kiterjesztése a “.json”.
** (dupla csillag)
Rekurzív módon megfelel bármely karakterláncnak (beleértve az alkönyvtárakat is). A **\ mind a forrás, mind a fordítási mintákban is használható. Ha a ** használatra kerül a fordítási mintában, akkor az mindig tartalmazni fog egy forrás alkönyvtárt egy bizonyos fájlhoz. Példaként a forráshoz használhatja ezt: ‘/en/**/*.po’ az összes *.po fájl Crowdinba való rekurzív feltöltéséhez. A fordítási minta: ‘/%two_letters_code%/**/%original_file_name%’ lesz.
? (kérdőjel)
Egyetlen karaktert helyettesít.
[set]
Egy adott karaktert helyettesít egy csomagból. Pontosan úgy viselkedik, mint a Regexp karakterkészletei, beleértve a beállított tagadást ([^a-z]).
\ (fordított perjel)
Védi a következő metakaraktert.
A Crowdin CLI lehetővé teszi a következő helyőrzők használatát, hogy a megfelelő változókat az eredményül kapott fájl nevére alkalmazza:
Név | Leírás |
---|---|
%language% | Language name (e.g., Ukrainian) |
%two_letters_code% | Language code ISO 639-1 (e.g., uk) |
%three_letters_code% | Language code ISO 639-2/T (e.g., ukr) |
%locale% | Locale (e.g., uk-UA) |
%locale_with_underscore% | Locale (e.g., uk_UA) |
%original_file_name% | Eredeti fájlnév |
%android_code% | Android területi azonosító, a "values-" könyvtárak elnevezésére használható |
%osx_code% | OS X területi azonosító az ".lproj" könyvtárak elnevezésére használható |
%original_path% | Használja a szülőmappa nevét a Crowdin projektben, hogy létrehozza a fájl elérési útját az eredményül kapott csomagban |
%file_extension% | Eredeti fájlkiterjesztés |
%file_name% | Fájl neve kiterjesztés nélkül |
A létrehozott archívumban lévő fájlok elérési útját is megadhatja úgy, hogy a minta elején egy perjelet (/) helyez el.
A translation
beállítása a következőképp kell kinézzen: “/locale/%two_letters_code%/LC_MESSAGES/%original_file_name%”.
A helyi gépen található fájlok és könyvtárak struktúrája:
- 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
#........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%"
}
]
#........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
]
}
]
Gyakran a szoftverprojektek a honosítási könyvtárakhoz egyéni neveket tartalmaznak. Crowdin allows you to map your own languages to be recognizable in your projects.
Tegyük fel, hogy a nyelvi könyvtárak elnevezése “en”, “uk”, “fr”, “de”. Közülük mindegyik megjeleníthető a %two_letters_code% helyőrzővel. Ezen felül van egy “zh_CH” nevű könyvtára. A nyelvkódokat felül is írhatja, például az %android_code%, %locale%, stb. helyőrzőkkel.
To make it work with Crowdin without changes in your project, you can set up Language Mapping via UI.
To set up Language Mapping, follow these steps:
Ha át kell neveznie a fordítás fájlokat az exportálás után, könnyen elvégezheti ezt a translation_replace
paraméter segítségével.
Például, ha a fájl neve “en_strings.po”, átnevezhető “strings.po”-re. Ehhez a konfigurációs fájlhoz (crowdin.yml) adjon hozzá egy új paramétert (azonos szinten a fordítási paraméterrel):
"files": [
{
"source": "/locale/**/en_*.po",
"translation": "/locale/**/%two_letters_code%_%original_file_name%",
"translation_replace": {
"en_": ""
}
}
]
Ebben az esetben az “_en” egyszerűen törlődik a fájlnévből.
Időről időre olyan fájlok és könyvtárak vannak, amelyeket nem kell a Crowdinban lefordítani. Ilyen esetekben a helyi fájlonkénti szabályok hozzáadhatók a projekt konfigurációs fájljához.
"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"
]
}
]
If a CSV or XLS/XLSX file contains the translations for all target languages, you should specify appropriate language codes in the scheme.
CSV fájl példa:
Konfigurációs fájl példa:
Konfigurációs fájl példa:
"files": [
{
"source": "multicolumn.csv",
"translation": "multicolumn.csv",
"first_line_contains_header": true,
"scheme": "identifier,source_phrase,context,uk,ru,fr"
}
]
If your CSV or XLS/XLSX 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"
To form the scheme for your CSV or XLS/XLSX file, use the following constants:
identifier
– Column contains string identifiers. source_phrase
– Column contains source strings. source_or_translation
– Column contains source strings, but the same column will be filled with translations when the file is exported. When uploading existing translations, the values from this column will be used as translations. translation
– Column contains translations. context
– Column contains comments or context information for the source strings. max_length
– Column contains max.length limit values for the translations of the strings. labels
– Column contains labels for the source strings. none
– Column that will be skipped on import.
"preserve_hierarchy": true
Example of the configuration file using the preserve_hierarchy
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"
"preserve_hierarchy": true
"files": [
{
"source": "/locale/en/**/*.po",
"translation": "/locale/%two_letters_code%/**/%original_file_name%"
}
]
Alapértelmezés szerint az olyan könyvtárak, amelyek nem tartalmaznak fordítási fájlokat, nem hozhatók létre a Crowdinban. Például:
- locale | |-- en | |-- foo.po |-- bar.po
A projektfájlok alapértelmezés szerint a Crowdinban a következők szerint jelennek meg:
- foo.po
- bar.po
A preserve_hierarchy
funkció használatával a Crowdinban lévő fájlstruktúra a következő lesz:
- en | |-- foo.po |-- bar.po
This feature adds support for 2 optional parameters in the yml file section: dest
and type
. Ez jellemzően néhány olyan projekt esetében használatos, ahol a feltöltött névnek másnak kell lennie, így a Crowdin képes felismerni a típust. A dest
paraméter lehetővé teszi, hogy megadja a fájl nevét a Crowdinban.
dest
paraméter csak szimpla fájlokon működik, és ha használja, akkor a konfigurációs fájlnak tartalmaznia kell a preserve_hierarchy
paramétert a true értékkel.Konfigurációs fájl példa mindkét paraméterrel:
"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"
}
]
Az update_option
paraméter opcionális. Ha nincs beállítva, a megváltoztatott karakterláncok fordításai a fájlfrissítés után elveszhetnek. Hasznos az elgépelések javításaihoz és a kisebb forrás-karakterlánc változásokhoz.
Az értéktől függően, az update_option
a fordítások megőrzésére és a módosított karakterláncok jóváhagyásainak megőrzésére/eltávolítására használható a fájlfrissítés során.
Az értékek:
Konfigurációs fájl példa update_option paraméterrel:
"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"
}
]
Az upload translations parancs feltölti a meglévő fordításokat a Crowdinba. Ha nincs megadva opció, akkor a feltöltött fordítások nem kerülnek importálásra, még akkor sem, ha megegyeznek a forrás-karakterláncokkal, valamint azok nem kerülnek jóváhagyásra.
Az értékek:
To configure the preferred export behavior for each file group, you may use the following export options:
skip_untranslated_strings
– Only translated strings will be included in the exported translation files. skip_untranslated_files
– Only translated files will be included in the exported translation archive. export_only_approved
– Only texts that are both translated and approved will be included in the exported translation files.
Example of the configuration file with the export options:
"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://api.crowdin.com"
"preserve_hierarchy": true
"files": [
{
"source": "/locale/en/**/*.po",
"translation": "/locale/%two_letters_code%/**/%original_file_name%",
"skip_untranslated_strings": true
},
{
"source": "/locale/en/**/*.json",
"translation": "/locale/%two_letters_code%/**/%original_file_name%",
"skip_untranslated_files": true
},
{
"source": "/locale/en/**/*.yml",
"translation": "/locale/%two_letters_code%/**/%original_file_name%",
"export_only_approved": true
}
]
translate_content opcionális | bool | Meghatározza, hogy le kell-e fordítani a jelölők közé helyezett szövegeket. Elfogadható értékek: 0 vagy 1. Alapértelmezett értéke 1. |
translate_attributes opcionális | bool | Meghatározza, hogy le kell-e fordítani a jelölők attribútumait. Elfogadható értékek: 0 vagy 1. Alapértelmezett értéke 1. |
content_segmentation opcionális | bool | Meghatározza, hogy a hosszú szövegeket rövidebb szegmensekre ossza-e fel. Elfogadható értékek: 0 vagy 1. Alapértelmezett értéke 1. Fontos! Ez az opció letiltja az XML fájlok meglévő fordítások feltöltésének lehetőségét, ha engedélyezve van. |
translatable_elements opcionális | array | Ez egy karakterláncok tömb, ahol minden elem az XPaths a DOM-hoz elem, amelyet importálni kell. Minta útvonal: /path/to/node vagy /path/to/attribute[@attr] Figyelem! Ha be van állítva, a translate_content és a translate_attributes paramétereket nem veszi figyelembe az importálás során. |
Konfigurációs fájl példa további paraméterekkel:
"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
]
}
]
Meghatározza, hogy egy adott aposztrófot egy másik aposztróffal, vagy fordított perjellel kell védeni (escape) az exportált fordításokban. Az escape_quotes
-t fájlonkénti opcióként adhatja hozzá. Elfogadható értékek: 0, 1, 2, 3. Alapértelmezett értéke 3.
Az értékek:
Speciális karakterek védése
Meghatározza, hogy a speciális karaktereket (=, :, ! és #) az exportált fordításokban védeni kell-e egy fordított perjellel. Az escape_special_characters
paramétert fájlonként adhatja hozzá.
Elfogadható értékek: 0, 1. Alapértelmezett értéke 1.
Példa a konfigurációs fájlra:
"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
}
]
"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"
}
]
"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"
}
}
}
]
"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"
}
}
}
]
A VCS integrációk ugyanazt a konfigurációs fájlt igénylik, mint a CLI eszköz, azaz ugyanazt a struktúrát támogatja. Az egyetlen különbség az, hogy a projekt hitelesítő adatokat biztonsági okokból nem szabad a fájl fejlécében tárolni. Emellett két további paraméter is használható.
Minden alkalommal, amikor fordítások kerülnek beküldésre a következő alapértelmezett üzenet jelenik meg: “Új fordítások {fileName} {languageName}”. Használhatja a commit_message
paramétert is a Git jelölők hozzáadásához (pl. építések átugrásához).
Minta:
"base_path": "/project-base-path"
"commit_message": "[ci skip]"
"files": [
{
"source" : "/resources/en/*.json",
"translation" : "/resources/%two_letters_code%/%original_file_name%"
}
]
Az alapértelmezett beküldési üzenet lecseréléséhez használja az append_commit_message
paramétert a false értékkel. Két opcionális helyőrzőt is hozzáadhat: %original_file_name% és %language% a megfelelő fájlnév és a megfelelő nyelvi változók használatához.
Minta:
"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%"
}
]
Alapértelmezés szerint az összes nyelv exportálásra kerül. Ha csak bizonyos nyelveket kell exportálnia, akkor az export_languages
paraméterrel adja meg azokat.
Minta:
"base_path": "/project-base-path"
"export_languages": [
"ru",
"uk",
"ja"
]
"files": [
{
"source" : "/resources/en/*.json",
"translation" : "/resources/%two_letters_code%/%original_file_name%"
}
]
To add existing or new labels to the source strings, use the labels
parameter. Labels will be added to the source strings only during the initial upload to the Crowdin project.
The strings uploaded to the Crowdin project before the use of the labels
parameter won’t be labeled. If you remove the label added during the initial upload directly in Crowdin, it won’t be re-added on the next syncs.
The label names can contain any characters except “,
”.
Minta:
"base_path": "/project-base-path"
"files": [
{
"source" : "/resources/en/*.json",
"translation" : "/resources/%two_letters_code%/%original_file_name%",
"labels" : [
"android",
"emails"
]
}
]
Read more about Labels.
Előfordulhatnak olyan esetek, amikor a VCS integrációt és a CLI-t kell használni egy projekthez. Az ilyen helyzetben legtöbbször két különálló konfigurációs fájlra van szüksége, az egyik a VCS integrációhoz, a másik pedig a CLI-hez. Ugyanakkor lehetséges egyetlen konfigurációs fájl használata a két esethez.
Mivel a VCS integrációhoz tartozó konfigurációs fájl nem tartalmazza a CLI-hez szükséges projekt_id
és api_token
hitelesítő adatokat, közvetlenül átadhatja azokat a parancsban a következő paraméterekkel: -i/--project-id
, -T/--token
. Alternatív megoldásként erre a célra használhatkörnyezeti változókat is.
Ennek eredményeként a fordítások CLI-n keresztüli letöltésére szolgáló parancs a következőképpen néz ki:
$ crowdin download -i {your-project-id} -T {your-token}
Segítségre van szüksége a Crowdin CLI használatával, vagy kérdése van? Lépjen kapcsolatba az ügyfélszolgálattal.