Lingo.dev のCLIは、リポジトリ内の静的ファイル(Markdown、MDX、Markdoc、JSON、YAML、字幕など)を、設定済みのローカライゼーションエンジンを通じて翻訳します。コンテンツを指定して一度実行するだけで、翻訳済みファイルがソースと並んで生成されます。
対応コンテンツタイプ#
CLI は各ファイルの形式を拡張子から自動判別するため、bucket type の設定は不要です。ロケールはパスに含まれるため(content/en/x.md は content/de/x.md になります)、[locale] プレースホルダーも必要ありません。
| コンテンツタイプ | 形式 | パス例 |
|---|---|---|
| ドキュメント | Markdown | docs/en/getting-started.md |
| ドキュメント | MDX | docs/en/getting-started.mdx |
| ドキュメント | Markdoc | docs/en/getting-started.mdoc |
| 構造化データ | JSON | data/en.json |
| 構造化データ | YAML | data/en.yaml |
| ブログ記事 | Markdown / MDX | blog/en/post-slug.md |
| ローカライゼーション | Gettext PO | locale/en/messages.po |
| ローカライゼーション | XLIFF | locale/en.xliff |
| 字幕 | SRT | subs/en/intro.srt |
対応ファイル形式の一覧は、formats リファレンスをご覧ください。
新しい CLI ではまだサポートされていません
CSV(csv-per-locale)、VTT 字幕、プレーンテキストの.txt、および Java の.propertiesは、まだ新しいCLIではサポートされていません。現時点では、これらのファイルはlegacy CLIで引き続き扱い、アップデートは変更履歴でご確認ください。
前提条件#
実行のたびに、コンテンツはローカライゼーションエンジンを通ります。これは、どのLLMモデル、用語集、ブランドボイス、ルールを適用するかを決める設定です。まずはLingo.devのダッシュボードで作成し、続いてCLI(Node 22+)をセットアップしてください。
npm install -g @lingo.dev/cli
lingo login
lingo init
lingo linklingo init と lingo link を実行すると .lingo/config.json が作成され、CLI が組織とエンジンに接続されます。すべての環境で同じ設定を共有できるよう、このファイルはコミットしてください。
{
"orgId": "org_abc123",
"engineId": "eng_abc123",
"sourceLocale": "en",
"targetLocales": ["es", "fr", "de", "ja"],
"files": [{ "pattern": "docs/en/getting-started.md" }]
}CI では lingo login をスキップし、代わりに LINGO_API_KEY を環境変数として指定してください。これは API keys から生成できます。
ドキュメントサイト#
多くのドキュメントフレームワークでは、翻訳済みコンテンツをロケールごとのディレクトリで管理します。ソースファイルごと(または glob)にパターンを files へ追加してください。CLI は Markdown、MDX、Markdoc を翻訳しつつ、frontmatter、コードブロック、コンポーネント構文はそのまま保持します。
{
"orgId": "org_abc123",
"engineId": "eng_abc123",
"sourceLocale": "en",
"targetLocales": ["es", "fr", "de", "ja"],
"files": [
{ "pattern": "docs/en/getting-started.md" },
{ "pattern": "docs/en/setup.mdx" }
]
}まずは最初の翻訳を実行して、すべての対象ロケールを埋めましょう。
lingo push --backfill-missing以降の実行では、lingo push が変更のあった箇所だけを翻訳します。別の場所で生成された翻訳を取り込むには、lingo pull を使ってください。
使用中のフレームワークのディレクトリ規約に合わせて、ソースパスを調整してください。
| フレームワーク | ロケールディレクトリ規約 | 参考リンク |
|---|---|---|
| Docusaurus | i18n/[locale]/docusaurus-plugin-content-docs/current/ | Docusaurus i18n ガイド |
| Nextra | ロケールごとのページまたは JSON 辞書 | Nextra ドキュメント |
| Hugo | content/[locale]/ | Hugo 多言語ガイド |
| Astro | src/content/[locale]/ または JSON 辞書 | Astro i18n ガイド |
| VitePress | [locale]/ ディレクトリプレフィックス | VitePress i18n |
| MkDocs | i18n プラグインを使ったロケールごとのdocs/ | MkDocs i18n プラグイン |
MDX コンポーネント
MDX の翻訳では JSX コンポーネント構文が保持されます。<Callout>、<Tabs>、<CodeBlock> のようなカスタムコンポーネントは変更されずにそのまま通過し、その中のテキストだけが翻訳されます。
構造化データ#
JSON と YAML ファイルは、拡張子に応じて自動的に翻訳されます。翻訳対象ではない値(ID、URL、設定フラグ)を変更しないようにするには、key controls を使ってください。
{
"orgId": "org_abc123",
"engineId": "eng_abc123",
"sourceLocale": "en",
"targetLocales": ["es", "fr", "de", "ja"],
"files": [
{ "pattern": "content/en.json" },
{ "pattern": "data/en.yaml" }
]
}汎用 YAML ではformatフィールドは不要です。ファイルエントリで明示的なyaml-openapiが必要なのは、yaml-root-key、android、"format"のみです。
ロケールルートキー YAML
ルートキーにロケールコードを使う YAML ファイル(Rails や Hugo で一般的)では、明示的な"format": "yaml-root-key"が必要です。ルートキーは対象のロケールに書き換えられます。詳しくは、formats リファレンスをご覧ください。
字幕#
SRT 字幕ファイルは拡張子から自動的に判別されて翻訳されます。CLI はタイミングデータ、キューインデックス、書式タグをすべて保持し、翻訳するのはテキストだけです。
{
"orgId": "org_abc123",
"engineId": "eng_abc123",
"sourceLocale": "en",
"targetLocales": ["es", "fr", "de", "ja"],
"files": [{ "pattern": "subs/en/intro.srt" }]
}VTT はまだサポートされていません
WebVTT(.vtt)字幕は、現時点では新しい CLI に対応していません。VTT ファイルはしばらく legacy CLI で運用し、更新は changelog で確認してください。
大規模なコンテンツを扱う#
静的コンテンツのリポジトリには数千ものファイルが含まれることがあります。CLI はそうした規模でも効率よく処理できます。
| 仕組み | 効果 |
|---|---|
| 実行状態 | .lingo/lock.json はソースコンテンツのフィンガープリントを追跡するため、lingo push は新規または変更のあったファイルだけを翻訳します。このファイルもコミットしてください。push のたびに再生成されます。 |
| サーバー側の並列処理 | 翻訳の並列化はエンジン側で行われるため、並行処理フラグを調整する必要はありません。 |
| 対象を絞った実行 | glob を使えば、特定のファイルだけに対象を絞って実行できます: lingo push "docs/en/**"。 |
翻訳が最新かどうかをファイルを書き出さずに確認したい場合—CI のゲートにも便利です—は、lingo check を実行してください。
