JSON辞書
Lingo.dev CLIによるJSON辞書ファイルのAI翻訳
JSON辞書とは?
JSON辞書は、複数のロケールのすべての翻訳を単一のJSONファイルに保存するローカライゼーション形式です。各キーには、ロケールコードをキーとし、翻訳された文字列を値とするオブジェクトが含まれており、すべての翻訳を1か所で簡単に管理できます。
例:
{
"navigation": {
"en": "Home"
},
"buttons": {
"submit": {
"en": "Submit"
},
"cancel": {
"en": "Cancel"
}
},
"forms": {
"login": {
"username": {
"en": "Username"
}
}
}
}
Lingo.dev CLIとは?
Lingo.dev CLIは、AIを使用してアプリやコンテンツを翻訳するための無料のオープンソースCLIです。従来の翻訳管理ソフトウェアを置き換えながら、既存のパイプラインと統合できるように設計されています。
詳細については、概要を参照してください。
このガイドについて
このガイドでは、Lingo.dev CLIを使用してJSON辞書ファイルを翻訳する方法を説明します。
以下の方法を学習します:
- ゼロからプロジェクトを作成する
- 翻訳パイプラインを設定する
- AIで翻訳を生成する
前提条件
Lingo.dev CLIを使用するには、Node.js v18以降がインストールされていることを確認してください:
❯ node -v
v22.17.0
ステップ1. プロジェクトのセットアップ
プロジェクトのディレクトリで、i18n.jsonファイルを作成します:
{
"$schema": "https://lingo.dev/schema/i18n.json",
"version": "1.10",
"locale": {
"source": "en",
"targets": ["es"]
},
"buckets": {}
}
このファイルは、翻訳する言語やファイルシステム上のローカライズ可能なコンテンツの場所など、翻訳パイプラインの動作を定義します。
使用可能なプロパティの詳細については、i18n.jsonを参照してください。
ステップ2. ソースロケールの設定
_ソースロケール_は、コンテンツが記述された元の言語と地域です。ソースロケールを設定するには、i18n.jsonファイルでlocale.sourceプロパティを設定します:
{
"$schema": "https://lingo.dev/schema/i18n.json",
"version": "1.10",
"locale": {
"source": "en",
"targets": ["es"]
},
"buckets": {}
}
ソースロケールは、BCP 47言語タグとして指定する必要があります。
Lingo.dev CLIがサポートするロケールコードの完全なリストについては、サポートされているロケールコードを参照してください。
ステップ3. ターゲットロケールの設定
_ターゲットロケール_は、コンテンツを翻訳したい言語と地域です。ターゲットロケールを設定するには、i18n.jsonファイルのlocale.targetsプロパティを設定します:
{
"$schema": "https://lingo.dev/schema/i18n.json",
"version": "1.10",
"locale": {
"source": "en",
"targets": ["es"]
},
"buckets": {}
}
ステップ4. ソースコンテンツの作成
まだ作成していない場合は、翻訳するコンテンツを含むJSON辞書ファイルを作成します。
**注意:**翻訳プロセス中、ソースコンテンツファイルは翻訳されたコンテンツ(ソースコンテンツに加えて)を含むように上書きされます。
ステップ5. バケットの作成
-
i18n.jsonファイルで、bucketsオブジェクトに"json-dictionary"オブジェクトを追加します:{ "$schema": "https://lingo.dev/schema/i18n.json", "version": "1.10", "locale": { "source": "en", "targets": ["es"] }, "buckets": { "json-dictionary": {} } } -
"json-dictionary"オブジェクトで、1つ以上のincludeパターンの配列を定義します:{ "$schema": "https://lingo.dev/schema/i18n.json", "version": "1.10", "locale": { "source": "en", "targets": ["es"] }, "buckets": { "json-dictionary": { "include": ["./example.json"] } } }これらのパターンは、翻訳するファイルを定義し、次のいずれかが可能です:
- 特定のファイルパスを指定する(例:
"some/dir/file.json") - アスタリスクをワイルドカードプレースホルダーとして使用する(例:
"some/dir/*.json")
再帰的なglobパターン(例:
**/*.json)はサポートされていません。 - 特定のファイルパスを指定する(例:
ステップ6. LLMの設定
Lingo.dev CLIは、大規模言語モデル(LLM)を使用してAIでコンテンツを翻訳します。これらのモデルのいずれかを使用するには、サポートされているプロバイダーからAPIキーが必要です。
できるだけ早く使い始めるために、Lingo.dev Engineの使用をお勧めします。これは、毎月10,000トークンの無料使用量を提供する当社独自のホスト型プラットフォームです:
-
次のコマンドを実行します:
npx lingo.dev@latest loginこれにより、デフォルトのブラウザが開き、認証を求められます。
-
プロンプトに従って操作します。
ステップ7. 翻訳を生成する
i18n.jsonファイルが含まれるディレクトリで、次のコマンドを実行します:
npx lingo.dev@latest run
このコマンドは:
i18n.jsonファイルを読み込みます。- 翻訳が必要なファイルを検索します。
- ファイルから翻訳可能なコンテンツを抽出します。
- 設定されたLLMを使用して抽出されたコンテンツを翻訳します。
- 翻訳されたコンテンツをファイルシステムに書き込みます。
翻訳が初めて生成されるとき、i18n.lockファイルが作成されます。このファイルは、どのコンテンツが翻訳されたかを追跡し、後続の実行で不要な再翻訳を防ぎます。
例
example.json(翻訳前)
{
"navigation": {
"en": "Home"
},
"buttons": {
"submit": {
"en": "Submit"
},
"cancel": {
"en": "Cancel"
}
},
"messages": {
"welcome": {
"en": "Welcome to our application"
},
"error": {
"en": "An error occurred"
}
},
"forms": {
"login": {
"title": {
"en": "Login"
},
"fields": {
"username": {
"en": "Username"
},
"password": {
"en": "Password"
}
}
}
}
}
example.json(翻訳後)
{
"navigation": {
"en": "Home",
"es": "Inicio"
},
"buttons": {
"submit": {
"en": "Submit",
"es": "Enviar"
},
"cancel": {
"en": "Cancel",
"es": "Cancelar"
}
},
"messages": {
"welcome": {
"en": "Welcome to our application",
"es": "Bienvenido a nuestra aplicación"
},
"error": {
"en": "An error occurred",
"es": "Ha ocurrido un error"
}
},
"forms": {
"login": {
"title": {
"en": "Login",
"es": "Iniciar sesión"
},
"fields": {
"username": {
"en": "Username",
"es": "Nombre de usuario"
},
"password": {
"en": "Password",
"es": "Contraseña"
}
}
}
}
}
i18n.json
{
"version": "1.10",
"locale": {
"source": "en",
"targets": ["es"]
},
"buckets": {
"json-dictionary": {
"include": ["./example.json"]
}
},
"$schema": "https://lingo.dev/schema/i18n.json"
}
i18n.lock
version: 1
checksums:
455da9346f4e772000927cd2ff5bb898:
navigation: 104a3db3b671c04e167eafbe21e57881
buttons/submit: 7c91ef5f747eea9f77a9c4f23e19fb2e
buttons/cancel: 2e2a849c2223911717de8caa2c71bade
messages/welcome: 1308168cca4fa5d8d7a0cf24e55e93fc
messages/error: 53a2b5f5e7d83c737c8e02fe18fb4bdb
forms/login/title: f4f219abeb5a465ecb1c7efaf50246de
forms/login/fields/username: 2ee65bc2dd2f12cf2672f95b2a054bf8
forms/login/fields/password: 223a61cf906ab9c40d22612c588dff48
a8f80a1a4e0e0aa2750e514a8a6abacf:
navigation: 104a3db3b671c04e167eafbe21e57881
buttons/submit: 7c91ef5f747eea9f77a9c4f23e19fb2e
buttons/cancel: 2e2a849c2223911717de8caa2c71bade
messages/welcome: 1308168cca4fa5d8d7a0cf24e55e93fc
messages/error: 53a2b5f5e7d83c737c8e02fe18fb4bdb
forms/login/title: f4f219abeb5a465ecb1c7efaf50246de
forms/login/fields/username: 2ee65bc2dd2f12cf2672f95b2a054bf8
forms/login/fields/password: 223a61cf906ab9c40d22612c588dff48