Файл конфигурации

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

Введение

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.

Чтобы использовать Crowdin CLI, вы должны сначала сгенерировать файл конфигурации, а затем запустить инструмент. По умолчанию Crowdin CLI ищет файл конфигурации с именем crowdin.yml (поэтому вам не нужно указывать имя файла, если оно не отличается от crowdin.yml).

To create the configuration file, run the following command:

$ crowdin init

Структура файла конфигурации

A valid Crowdin CLI configuration file has the following structure, so please make sure that you fill out all the needed information:

  • Заглавие файла с учетными данными проекта, настройками и информацией о доступе
  • Один элемент массива файлов, который описывает набор исходных файлов и файлов перевода, которыми вы будете управлять
  • Обязательные поля в массиве файлов: Source который определяет фильтры для исходных файлов и Translation с инструкциями о том, где хранить переведенные файлы или где искать уже имеющиеся переводы, если вы хотите загрузить их при настройке интерфейса командной строки

Создание простого файла конфигурации

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 > New Token > create Token
"base_path": "/project-base-path"
"base_url": "https://api.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%"
  }
]

Чтобы запустить этот файл конфигурации и загрузить исходные файлы на Crowdin, стоит всего лишь выполнить команду:

$ crowdin upload sources

Get translations from Crowdin and put them in the right locations:

$ crowdin download

Учетные данные API из переменных окружения

Вы можете загрузить учетные данные API из переменной окружения, например:

"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

Разделение конфигурации проекта и учетных данных API

The crowdin.yml file contains a description of the resources to manage and API credentials (project_id, api_token, base_path, base_url). It means that it’s unsafe to commit this file into the code repository because the API key would be accessible to other users. Crowdin CLI supports two types of configuration files:

  • a description of the resources to manage, residing in the project directory
  • API credentials, probably residing in $HOME/.crowdin.yml
Note: API credentials from the .crowdin.yml configuration file have higher priority than credentials from the project directory(crowdin.yml).

If you need to run a command with user-specific credentials (for example, upload sources), run the following command:

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

But if user-specific credentials file residing in $HOME/.crowdin.yml you can run:

$ crowdin upload sources

Общие настройки

Приведенный выше пример конфигурации имеет атрибуты ‘source’ и ‘translation’, которые содержат стандартные постановочные знаки (также известные как универсальные шаблоны) для упрощения работы с несколькими файлами.

Вот шаблоны, которые вы можете использовать:

* (asterisk)

Represents any character in the file or directory name. If you specify a “*.json” it will include all files like “messages.json”, “about_us.json”, and anything that ends with “.json”.

** (doubled asterisk)

Совпадает с любой строчкой рекурсивно (включая подпапки). Note that you can use ** in both source and translation patterns. When using ** in the translation pattern, it will always contain a sub-path from the source for a certain file. For example, you can use source: ‘/en/**/*.po’ to upload all *.po files to Crowdin recursively. The translation pattern will be ‘/%two_letters_code%/**/%original_file_name%’.

? (воспросительный знак)

Соответствует любому одному символу.

[set]

Matches any single character in a set. Behaves exactly like character sets in Regexp, including set negation ([^a-z]).

\ (Обратный слэш)

Экранирует следующий метасимвол.

Заполнители

В crowdin cli можно использовать следующие заполнители для внесения соответствующих переменных в результирующее имя файла:

Название Описание
%original_file_name% Исходное имя файла
%original_path% Take parent folders names in Crowdin project to build file path in the resulted bundle
%file_extension% Исходное расширение файла
%file_name% Имя файла без расширения
%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)
%android_code% Идентификатор языка в Android используемый в названиях «values-» директорий
%osx_code% Локаль OS X, используемая для названий *.lproj" директорий
%osx_locale% OS X locale used to name translation resources (e.g., uk, zh-Hans, zh_HK)

Вы также можете указать полный путь к файлам в архиве, поставив косую черту (/) в начале шаблона.

Шаблон translation может выглядеть следующим образом: “/locale/%two_letters_code%/LC_MESSAGES/%original_file_name%”.

Использование постановочных знаков (wildcards)

Структура файлов и папок на локальном компьютере:

- 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

Example 1. Usage of wildcards in the source path:

#........конфигурация вашего проекта........
"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%"
  }
]

Example 2. Usage of wildcards for ignoring files:

#........конфигурация вашего проекта........
"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
    ]
  }
]

Сопоставление языка

Часто программные проекты имеют собственные имена для каталогов локали. Crowdin allows you to map your own languages to be recognizable in your projects.

Предположим, папки с вашими локалями называются ‘en’, ‘uk’, ‘fr’, ‘de’. Все они могут быть представлены заполнителем %two_letters_code%. В то же время у вас имеется папка ‘zh_CH’. You can also override language codes for other placeholders like %android_code%, %locale%, etc.

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:

  1. Open the Project settings > General tab and scroll down to the Export section.
  2. Click Language Mapping to add custom language codes to the target languages of your project.

Переименование файла перевода

Если вам нужно переименовать файл с переводами после экспорта, это легко сделать с помощью параметра ` translation_replace`.

For example, if the file is named “en_strings.po”, it can be renamed to “strings.po”. Для этого добавьте новый параметр (на том же уровне, что и параметр перевода) в файл конфигурации (crowdin.yml):

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

In this case, “_en” will be erased from the file name.

Игнорирование файлов и каталогов

From time to time, there are files and directories you don’t need to translate in Crowdin. In such cases, local per-file rules can be added to the config file in your project.

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

Excluding Target Languages for Source Files

By default, the source files are available for translation into all target languages of the project. If some source files shouldn’t be translated into specific target languages, you can exclude them with the help of the parameter excluded_target_languages.

Пример файла конфигурации:

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

Multicolumn Spreadsheet

If a CSV or XLS/XLSX file contains the translations for all target languages, you should specify appropriate language codes in the scheme.

Пример файла CSV:

identifier,source_phrase,context,Ukrainian,Russian,French ident1,Source 1,Context 1,,, ident2,Source 2,Context 2,,, ident3,Source 3,Context 3,,,

Пример файла конфигурации:

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

Scheme Constants

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

By default, directories that do not contain any files for translation will not be created in Crowdin. For example:

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

По умолчанию файлы проекта будут представлены в Crowdin следующим образом:

- foo.po
- bar.po

Using the option preserve_hierarchy, the file structure in Crowdin will be the following:

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

Загрузить файлы указанного типа по указанному пути

This feature adds support for two optional parameters in the yml file section: dest and type. It’s typically used for projects where the uploaded name must be different so that Crowdin can detect the type correctly.

Параметр Dest позволяет задать имя файла в Crowdin. It works for multiple files at once and supports the following placeholders: %original_file_name%, %original_path%, %file_extension%, %file_name%.

Note! If you use the dest parameter, the configuration file should include the preserve_hierarchy parameter with the true value.

Пример конфигурационного файла с обоими параметрами:

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

"files": [
  {
    "source": "/conf/**/*.txt",
    "dest": "/conf/**/%file_name%.properties",
    "translation": "/conf/**/%two_letters_code%/%file_name%.properties",
    "type": "properties"
  },
  {
    "source": "/app/*.txt",
    "dest": "/app/%file_name%.xml",
    "translation": "/res/values-%android_code%/%original_file_name%",
    "type": "android"
  },
  {
    "source": "/conf/**/*.txt",
    "dest": "/%original_path%/%file_name%.properties",
    "translation": "/conf/**/%two_letters_code%/%original_file_name%",
    "type": "properties"
  }
]

Обновление изменённых строк

The parameter update_option is optional. If it is not set, translations for changed strings will be lost. Useful for typo fixes and minor changes in source strings.

В зависимости от значения update_option используется для сохранения переводов и сохранения/удаления утверждений переводов и изменённых строк во время обновления файла.

Используйте следующие значения:

  • 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

Пример конфигурационного файла с использованием параметра update_option:</p>

"project_id": "projectId"                     #open project settings and go to API section
"api_token": "personal-access-token"          #open profile settings and go to API > New Token > create Token
"base_path": "/project-base-path"
"base_url": "https://api.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"
  }
]

Загрузка переводов

The command upload translations uploads existing translations to Crowdin. If no options are specified, the uploaded translations will not be imported even if they are equal to the source strings and will not be approved.

Используйте следующие значения:

  • -l, --language=language_code - defines the language translations that should be uploaded to Crowdin. По умолчанию переводы загружаются на все целевые языки проекта. (языковые коды Crowdin)
  • --[no-]import-eq-suggestions - defines whether to add translation if it is equal to source string in the Crowdin project
  • --[no-]auto-approve-imported - automatically approves uploaded translations

Import Options

XML Files Import Options

translate_content
необязательный
булево Defines whether to translate texts placed inside the tags.
Acceptable values are 0 or 1. Значение по умолчанию 1.
translate_attributes
необязательный
булево Defines whether to translate tags' attributes.
Acceptable values are 0 or 1. Значение по умолчанию 1.
content_segmentation
необязательный
булево Defines whether to split long texts into smaller text segments.
Acceptable values are 0 or 1. Значение по умолчанию 1.
Примечание: Когда сегментация содержимого включена, загрузка перевода обрабатывается технологией машинного экспериментального обучения.
translatable_elements
необязательный
массив Это массив строк, где каждый элемент является элементом XPath для DOM, который должен быть импортирован.
Пример пути: /path/to/node or /path/to/attribute[@attr]
Внимание! Если задан, параметры translate_content и translate_attributes не учитываются при импорте.

Пример конфигурационного файла с дополнительными параметрами:

"project_id": "projectId"                   #open project settings and go to API section
"api_token": "personal-access-token"        #open profile settings and go to API > New Token > create Token
"base_path": "/project-base-path"
"base_url": "https://api.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
    ]
  }
]

Other Files Import Options

content_segmentation
необязательный
булево Определяет, следует ли разбивать длинные тексты на более мелкие текстовые сегменты. Only for TXT, DOCX, DITA, IDML, MIF, MEDIAWIKI, HTML, Front Matter HTML, Markdown, Front Matter Markdown, XML, XLIFF, XLIFF 2.0
Acceptable values are 0 or 1. Значение по умолчанию 1.
Примечание: Когда сегментация содержимого включена, загрузка перевода обрабатывается технологией машинного экспериментального обучения.

Пример конфигурационного файла с дополнительными параметрами:

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

"files": [
  {
    "source": "/emails/sample1.html",
    "translation": "/emails/%locale%/%original_file_name%",
    "content_segmentation": 1
  }
]

Export Options

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 > 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
  }
]
Note: The export options work only with CLI.

Экранирование кавычек в формате .properties

Определяет, будет ли одинарная кавычка экранирована другой одинарной кавычкой или обратным слешем в экспортированных переводах. You can add the escape_quotes per-file option. Acceptable values are 0, 1, 2, 3. Значение по умолчанию 3.

Используйте следующие значения:

  • 0 - не экранировать одинарную кавычку
  • 1 - escape single quote with another single quote
  • 2 - escape single quote with a backslash
  • 3 - escape single quote with another single quote only in strings containing variables ( {0} )

Escape special characters
Defines whether any special characters (=, :, ! and #) should be escaped by a backslash in exported translations. You can add the escape_special_characters per-file option.

Acceptable values are 0, 1. Значение по умолчанию 1.

  • 0 - не экранировать специальные символы
  • 1 - экранировать специальные символы обратной косой чертой

Пример конфигурационного файла:

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

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

Примеры конфигурации

Uploading CSV files

"project_id": "projectId"                   #open project settings and go to API section
"api_token": "personal-access-token"        #open profile settings and go to API > New Token > create Token
"base_path": "/project-base-path"
"base_url": "https://api.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"
  }
]

Проект GetText

"project_id": "projectId"                   #open project settings and go to API section
"api_token": "personal-access-token"        #open profile settings and go to API > New Token > create Token
"base_path": "/project-base-path"
"base_url": "https://api.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"
      }
    }
  }
]

Проект Android

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

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

Файл конфигурации для интеграции VCS

Интеграция VCS требует того же файла конфигурации, что и инструмент CLI, то есть поддерживается та же структура. The only difference is that you should not store the project credentials in the file header for security reasons. Also, you can use a few additional parameters.

Pull Request Title and Labels for VCS Integrations

The default pull request title is New Crowdin updates. To specify your custom pull request title and add labels to the pull request, you can use the following parameters in the configuration file: pull_request_title, pull_request_labels.

Note: Pull request labels are not supported by the Bitbucket integration.

Пример:

"base_path": "/project-base-path"
"pull_request_title": "Custom PR title"
"pull_request_labels": [
  "crowdin",
  "l10n"
]

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

Параметр сообщения слияния для интеграции VCS

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

Пример:

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

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

To replace the default commit message, use the append_commit_message parameter with the value false. Вы также можете добавить два необязательных заполнителя: %original_file_name% и %language% чтобы использовать переменные имя файла и язык соответственно.

Пример:

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

Параметр экспорта языков для интеграции VCS

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

Пример:

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

Adding Labels to Source Strings

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 “,”.

Пример:

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

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

Нужна помощь

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

Полезная информация

Была ли эта статья полезной?