CLI поддерживает шесть форматов файлов. Формат определяется по расширению файла, но это можно переопределить: задайте format в записи files[].
| Формат | Расширения | Значение format | Примечания |
|---|---|---|---|
| JSON | .json | json | Пары ключ-значение. Поддерживает управление ключами. |
| JSONC | .jsonc | jsonc | JSON с комментариями. Комментарии сохраняются и могут использоваться как заметки для переводчика. |
| Markdown | .md | md | Основной текст переводится, frontmatter — только при явном включении. |
| MDX | .mdx | mdx | Markdown + JSX. Свойства компонентов — только при явном включении. |
| Markdoc | .mdoc | markdoc | Markdown + теги. Frontmatter + атрибуты тегов. |
| OpenAPI YAML | .yaml | yaml-openapi | Спецификации OpenAPI. Всегда явно задавайте format. |
Посмотрите весь процесс целиком
В демо-проекте есть по одному файлу для каждого формата — с точной конфигурацией, которая для него нужна. Клонируйте проект через npx degit lingodotdev/lingo.dev/demo/new-cli my-lingo-demo и выполните push.
npx degit lingodotdev/lingo.dev/demo/new-cli my-lingo-demo
cd my-lingo-demoJSON и JSONC#
Базовый перевод пар ключ-значение. Переводится каждое строковое значение, если управление ключами не задаёт иное.
{ "pattern": "content/en/app.json", "lockedKeys": ["meta.version"] }В JSONC также сохраняются комментарии, которые движок использует как контекст — см. заметки для переводчика.
{ "pattern": "content/en/settings.jsonc", "preservedKeys": ["featureFlags"] }Markdown, MDX и Markdoc#
Основной текст переводится по умолчанию. Frontmatter и встроенные компоненты не переводятся, если вы явно не включите их перевод.
Frontmatter#
Чтобы указать, какие поля frontmatter нужно переводить, перечислите их в translateFrontmatterFields:
{
"pattern": "content/en/guide.md",
"translateFrontmatterFields": ["title", "description"]
}Свойства компонентов MDX#
В MDX можно переводить конкретные свойства у конкретных компонентов с помощью translateComponentProps:
{
"pattern": "content/en/landing.mdx",
"translateFrontmatterFields": ["title"],
"translateComponentProps": [{ "component": ["Hero", "Callout"], "props": ["title", "body"] }]
}Это переведёт свойства title и body у <Hero> и <Callout>, а все остальные свойства останутся без изменений.
Markdoc#
Markdoc работает так же, как Markdown, но при этом сохраняет frontmatter и атрибуты тегов:
{
"pattern": "content/en/changelog.mdoc",
"translateFrontmatterFields": ["title"]
}OpenAPI YAML#
Обычный YAML неоднозначен, поэтому для спецификаций OpenAPI нужно явно задать format:
{ "pattern": "content/en/api.yaml", "format": "yaml-openapi" }Движок переводит поля, предназначенные для чтения людьми, — summary, description и другие, — и не затрагивает ключи схем, пути и ID операций.
Пути вывода#
Целевые файлы записываются с подстановкой сегмента локали из шаблона исходного пути — content/en/app.json → content/de/app.json. Сохраняйте исходную локаль в пути, чтобы CLI понимал, куда записывать целевые файлы. См. Конфигурация.
Переходите с legacy CLI?#
legacy CLI поддерживал около 25 форматов (CSV, PO, XLIFF, строки Android/Xcode, Flutter ARB, HTML и другие). Поддержка этих форматов постепенно добавляется в текущий CLI по мере спроса; пока ваш формат ещё не появился, обратитесь к документации legacy CLI.
