|
ドキュメント
デモを予約プラットフォーム
プラットフォームMCPCLI
APIワークフロー
ガイド変更履歴

概要

  • @lingo.dev/cli

はじめに

  • クイックスタート
  • 設定
  • サンプル

リファレンス

  • lingo push
  • lingo pull
  • lingo purge
  • その他のコマンド

設定

  • キー制御
  • フォーマット
  • ロケール

ガイド

  • ロケールを追加する
  • 既存の翻訳
  • 再翻訳
  • 翻訳メモ
  • 実行、状態、復旧
  • CI/CD
  • モノレポ
  • 大規模プロジェクト

旧CLI(v0)をお探しですか? 旧CLIのドキュメントを見る

サンプルプロジェクト

以下のサンプルはすべて、.lingo/config.json がコミット済みで、翻訳もあらかじめ入っている実在のリポジトリです。生成された出力と並べて設定内容を確認できます。ほとんどはそのまま動かせるアプリケーションで、一部はファイル形式だけを示すためのものです。気になるものをクローンまたはフォークして、lingo link を実行して自分のエンジンを紐づけ、そのまま push できます。

まず、進め方を選びましょう#

CLI でのローカライズには 2 つのやり方があり、どちらを選ぶかで見るべき例が変わります。

今あるファイルをそのまま翻訳する。 フレームワークが翻訳を独自形式で管理している場合 — Rails YAML、Android XML、Laravel PHP、ARB、Markdown など — CLI がそのファイルをその場で翻訳します。コードは一切変える必要がありません。以下の 11 個の例のうち、9 個がこの方法です。

キーなしで書く。 文字列を使う場所で l.text(...) で囲むと、lingo extract がハッシュキー付きのカタログを生成します。翻訳キーを名前付けしたり保守したりする必要はありません。その代わり、ビルドステップとランタイムパッケージが必要になります。Web アプリの 2 つの例で紹介しているのがこの方法です。

モバイルアプリ#

例形式この形式を選ぶ理由
iOSxcode-xcstringsString Catalog にすべてのロケールが入るため、ターゲットパスはソースパスと同じです。
Androidandroidソースはプレーンなvalues/で、Android標準の修飾子(values-pt-rBR/)をそのまま使える
Flutterflutter@メタデータとICUプレースホルダーは保持したまま、@@localeはファイルごとに書き換え

Web アプリ#

キーを使わない2つのサンプルです。どちらも文字列を l.text(...) で囲み、lingo extract でカタログを生成するため、中央の列にはファイル形式ではなくランタイムパッケージ名が表示されます。

例パッケージこの形式を選ぶ理由
React + Vite@lingo.dev/reactキー不要で記述でき、生成される宣言によってl.text()を抽出済み文字列だけに絞り込める
Next.js@lingo.dev/react-nextキーなしオーサリングに、ロケールルーティング、hreflang、スイッチャーを組み合わせた Pages Router

本番環境でのhreflang

LingoHeadはhreflang URLを、デフォルトでは空のbaseUrl propをもとに組み立てるため、そのままだとタグは相対URLになります。検索エンジンが期待するのは絶対URLです。運用で使う前に、サイトのオリジン(<LingoHead baseUrl="https://example.com" />)を渡してください。

コンテンツと仕様#

例形式この形式を選ぶ理由
Markdown docsmd, mdx基本は本文が対象で、frontmatterフィールドとMDX propsは必要に応じて含められる
Markdocmarkdoc, jsonNext.js のコンテンツと UI 文字列を1回の push でまとめて反映 — 3つのエントリにそれぞれ異なるオプションを設定
OpenAPIyaml-openapi対象は要約と説明のみ。パス、operation IDs、enumはそのまま

フレームワークのカタログ#

例形式この形式を選ぶ理由
Railsyaml-root-keyロケールがYAMLのルートキーに入るため、ルートキー自体も書き換えられる
Laravelphp, poLaravelのカタログに加えてgettextファイルにも対応し、:nameプレースホルダーはどちらでも保持される
TypeScript modulestypescriptJSON ではなく TypeScript モジュールとして使うカタログです。ファイル形式のみを示す例で、これを利用するアプリはありません。

TypeScript カタログには default export が必要です

typescript形式が読み取るのはdefault export、つまりexport default { … }です。as constの有無は問いません。named exportでは翻訳対象のコンテンツは生成されず、実行はソースをそのままコピーして終了します。pushで「ファイルはローカライズされた」と出ているのに出力トークンがほぼゼロなら、まずexportの形を確認してください。

これらを使うには#

bash
npm install -g @lingo.dev/cli
lingo login
lingo link          # writes your own orgId and engineId into .lingo/config.json
lingo push --wait

どのサンプルにも orgId と engineId はコミットされていません。これは、フォークしたリポジトリから他人のエンジン経由で push できないようにするためです。lingo link を使えば、その両方をローカルで補えます。

CLI ではなく GitHub App を使う場合

GitHub Appは、リポジトリにコミットされたengineIdから.lingo/config.jsonを読み取ります。組織はAppのインストール情報から解決されますが、エンジンはそのファイル内に書かれている必要があります。forkしたら、先にlingo linkを実行して更新後の設定をコミットし、そのうえでAppをインストールしてください。

すべての形式にサンプルがあるわけではありません#

この11件で、特によく問い合わせの多いフレームワークはひと通りカバーしていますが、CLIが翻訳できる形式は18種類あります。xliff、srt、Xcodeの.stringsと.stringsdict、汎用のyaml、そして単体のJSON/JSONCは、ここにリポジトリがなくても問題なく使えます。完全な一覧と各形式で必要な設定は、Formatsで確認できます。

次のステップ#

形式
このページにサンプルがないものも含めた、CLI対応18形式の一覧
設定
.lingo/config.json の完全なリファレンス
Quickstart
インストールして認証し、最初の push を数分で実行
GitHub App
push のたびに、サーバーサイドで翻訳

このページは役に立ちましたか?

Mike ShulgaMike Shulga·更新済み 約5時間前·1分で読めます