CLI Lingo.dev использует типы bucket для разбора и перевода файлов разных форматов. Каждый тип bucket — это отдельный парсер, созданный под конкретный формат. Настройте один или несколько bucket в i18n.json, чтобы указать, какие файлы должен переводить CLI.
Типы bucket#
| Тип bucket | Формат | Режим вывода | [locale] обязателен |
|---|---|---|---|
json | Файлы JSON | Отдельные файлы для каждой локали | Да |
json5 | Файлы JSON5 | Отдельные файлы для каждой локали | Да |
jsonc | Файлы JSONC (с комментариями) | Отдельные файлы для каждой локали | Да |
json-dictionary | JSON-словари (плоские пары ключ-значение) | Отдельные файлы для каждой локали | Да |
yaml | Файлы YAML | Отдельные файлы для каждой локали | Да |
yaml-root-key | YAML с корневыми ключами локалей | Изменяет исходный файл | Нет |
markdown | Файлы Markdown | Отдельные файлы для каждой локали | Да |
mdx | Файлы MDX | Отдельные файлы для каждой локали | Да |
markdoc | Файлы Markdoc | Отдельные файлы для каждой локали | Да |
html | Файлы HTML | Отдельные файлы для каждой локали | Да |
mjml | Email-шаблоны в MJML | Отдельные файлы для каждой локали | Да |
android | Ресурсы Android XML | Отдельные файлы для каждой локали | Да |
xcode-strings | Файлы Xcode .strings | Отдельные файлы для каждой локали | Да |
xcode-stringsdict | Файлы Xcode .stringsdict | Отдельные файлы для каждой локали | Да |
xcode-xcstrings | Каталоги Xcode .xcstrings | Изменяет исходный файл | Нет |
flutter | Файлы Flutter ARB | Отдельные файлы для каждой локали | Да |
po | Файлы GNU gettext PO | Отдельные файлы для каждой локали | Да |
properties | Файлы Java .properties | Отдельные файлы для каждой локали | Да |
csv | Файлы CSV | Изменяет исходный файл | Нет |
csv-per-locale | Файлы CSV (по одному на локаль) | Отдельные файлы для каждой локали | Да |
xml | Универсальные XML-файлы | Отдельные файлы для каждой локали | Да |
xliff | Файлы XLIFF | Отдельные файлы для каждой локали | Да |
srt | Файлы субтитров SRT | Отдельные файлы для каждой локали | Да |
vtt | Файлы субтитров VTT | Отдельные файлы для каждой локали | Да |
php | Массивы локализации PHP | Отдельные файлы для каждой локали | Да |
typescript | Файлы TypeScript | Отдельные файлы для каждой локали | Да |
vue-json | JSON-блоки Vue i18n | Отдельные файлы для каждой локали | Да |
txt | Текстовые файлы | Отдельные файлы для каждой локали | Да |
Режимы вывода#
Bucket работают в одном из двух режимов вывода:
Отдельные файлы для каждой локали — CLI создаёт отдельный файл для каждого целевого языка. В шаблонах include должен быть плейсхолдер [locale]:
{
"buckets": {
"json": {
"include": ["locales/[locale].json"]
}
}
}В результате появятся locales/en.json, locales/es.json, locales/fr.json и т. д.
Изменяет исходный файл — CLI записывает переводы в тот же файл, где находится исходный контент. Плейсхолдер [locale] в этом случае не используется:
{
"buckets": {
"csv": {
"include": ["translations.csv"]
}
}
}В CSV-файлах все локали обычно хранятся в столбцах одного файла. Каталоги Xcode .xcstrings и YAML с корневыми ключами работают по тому же принципу.
Примеры конфигурации#
Веб-приложение с JSON#
{
"buckets": {
"json": {
"include": ["src/locales/[locale].json"],
"lockedKeys": ["brand/name"]
}
}
}Документационный сайт на Markdown#
{
"buckets": {
"markdown": {
"include": ["docs/[locale]/*.md"],
"exclude": ["docs/[locale]/drafts/*.md"]
}
}
}Мобильное приложение (iOS + Android)#
{
"buckets": {
"xcode-xcstrings": {
"include": ["ios/Localizable.xcstrings"]
},
"android": {
"include": ["android/app/src/main/res/values-[locale]/strings.xml"]
}
}
}Монорепозиторий с несколькими форматами#
{
"buckets": {
"json": {
"include": ["apps/web/locales/[locale].json"]
},
"mdx": {
"include": ["packages/docs/content/[locale]/*.mdx"]
},
"flutter": {
"include": ["apps/mobile/lib/l10n/app_[locale].arb"]
}
}
}Возможности отдельных bucket#
Некоторые bucket поддерживают дополнительные возможности помимо шаблонов include/exclude:
| Возможность | Поддерживаемые bucket | Описание |
|---|---|---|
| Блокировка ключей | Форматы «ключ-значение» (JSON, YAML и т. д.) | Копирует исходные значения без перевода |
| Игнорирование ключей | Форматы «ключ-значение» | Полностью исключает ключи из целевых файлов |
| Сохранение ключей | Форматы «ключ-значение» | Инициализирует один раз, а затем защищает от обновлений |
| Примечания для переводчика | JSONC, XCStrings | Добавляет контекст через комментарии, чтобы улучшить качество перевода |
Правила шаблонов include#
- Шаблоны задаются относительно расположения файла
i18n.json - Используйте
[locale]как плейсхолдер для кодов локалей (обязательно для bucket с режимом «отдельные файлы для каждой локали») - Звёздочка (
*) соответствует любому имени файла:locales/[locale]/*.json - Рекурсивные шаблоны (
**) соответствуют файлам на любой глубине:src/**/[locale].json,config/locales/**/[locale].yml. Если шаблон использует**, тоnode_modules,.git,dist,build,.nextи.turboисключаются по умолчанию — при необходимости добавьте свои записиexclude(требуется CLI 0.135.0+) - Расширения файлов не влияют на разбор — парсер определяется типом bucket
