JSONC
Lingo.dev CLIによるJSONCファイルのAI翻訳
JSONCとは?
JSONC(JSON with Comments)は、単一行および複数行のコメントを許可するJSONの拡張です。人間が読みやすい注釈が役立つ設定ファイルで一般的に使用されます。
例:
{
"key1": "Hello, world!", // This is a comment for key1
"key2": "A simple demo app with JSONC features" /* This is a comment for key2 */,
// This is a comment for key3
"key3": "1.0.0",
// This is a comment for nested values
"key6": {
"key7": "Nested value",
},
// This key is locked and should not be changed
"locked_key_1": "This value is locked and should not be changed",
}
Lingo.dev CLIとは?
Lingo.dev CLIは、AIを使用してアプリやコンテンツを翻訳するための無料のオープンソースCLIです。従来の翻訳管理ソフトウェアを置き換えながら、既存のパイプラインと統合できるように設計されています。
詳細については、概要を参照してください。
このガイドについて
このガイドでは、Lingo.dev CLIを使用してJSONCファイルを翻訳する方法を説明します。
以下の方法を学習します:
- ゼロからプロジェクトを作成する
- 翻訳パイプラインを設定する
- 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. ソースコンテンツを作成する
まだ作成していない場合は、翻訳するコンテンツを含む1つ以上のJSONCファイルを作成します。これらのファイルは、パスのどこかにソースロケールを含むパスに配置する必要があります(例:en/のようなディレクトリ名、またはmessages.en.jsoncのようなファイル名の一部として)。
ステップ 5. バケットを作成する
-
i18n.jsonファイルで、bucketsオブジェクトに"jsonc"オブジェクトを追加します:{ "$schema": "https://lingo.dev/schema/i18n.json", "version": "1.10", "locale": { "source": "en", "targets": ["es"] }, "buckets": { "jsonc": {} } } -
"jsonc"オブジェクトで、1つ以上のincludeパターンの配列を定義します:{ "$schema": "https://lingo.dev/schema/i18n.json", "version": "1.10", "locale": { "source": "en", "targets": ["es"] }, "buckets": { "jsonc": { "include": ["./[locale]/example.jsonc"] } } }これらのパターンは、翻訳するファイルを定義します。
パターン自体は:
- 設定されたロケールのプレースホルダーとして
[locale]を含む必要があります - ファイルパスを指定できます(例:
"[locale]/config.jsonc") - ワイルドカードプレースホルダーとしてアスタリスクを使用できます(例:
"[locale]/*.jsonc")
再帰的なglobパターン(例:
**/*.jsonc)はサポートされていません。 - 設定されたロケールのプレースホルダーとして
ステップ 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ファイルが作成されます。このファイルは、どのコンテンツが翻訳されたかを追跡し、後続の実行で不要な再翻訳を防ぎます。
例
en/example.jsonc
{
"key1": "Hello, world!", // This is a comment for key1
"key2": "A simple demo app with JSONC features" /* This is a comment for key2 */,
// This is a comment for key3
"key3": "1.0.0",
/* This is a block comment for key4 */
"key4": "[email protected]",
/*
This is a comment for key5
*/
"key5": "🚀",
// This is a comment for key6
"key6": {
// This is a comment for key7
"key7": "Nested value",
},
// This key is locked and should not be changed
"locked_key_1": "This value is locked and should not be changed",
// This key is ignored and should be removed from target locales
"ignored_key_1": "This value is ignored and should not appear in target locales",
}
es/example.jsonc
{
"key1": "¡Hola, mundo!", // This is a comment for key1
"key2": "Una aplicación de demostración simple con características JSONC" /* This is a comment for key2 */,
// This is a comment for key3
"key3": "1.0.0",
/* This is a block comment for key4 */
"key4": "[email protected]",
/*
This is a comment for key5
*/
"key5": "🚀",
// This is a comment for key6
"key6": {
// This is a comment for key7
"key7": "Valor anidado",
},
// This key is locked and should not be changed
"locked_key_1": "This value is locked and should not be changed",
}
i18n.json
{
"version": "1.10",
"locale": {
"source": "en",
"targets": ["es"]
},
"buckets": {
"jsonc": {
"include": ["./[locale]/example.jsonc"]
}
},
"$schema": "https://lingo.dev/schema/i18n.json"
}
i18n.lock
version: 1
checksums:
455da9346f4e772000927cd2ff5bb898:
title: 0468579ef2fbc83c9d520c2f2f1c5059
description: 6f4922f45568161a8cdf4ad2299f6d23
version: 54a9e730e88fb16291b852274d433923
support_email: 10627fcc465897af0f5e1bba042685f9
emoji: b328c432cee108a87a92f05258b6a651
author/name: febee8e9ab40b2fe5106d72675228d00
contributors/0/name: e80d4063a32adaad7b0a82b0bcc10551
contributors/1/name: b2bca2fa3c890618e56d07473f26ead3
messages/0: d1c3a9f35e377554a4ccaa467ca26614
messages/1: 0468579ef2fbc83c9d520c2f2f1c5059
config/theme/primary: 7535a3779d6934ea8ecf18f5cb5b93fd
mixed_array/0: 001b5b003d96c133534f5907abffdf77
mixed_array/3/nested_message: 5f0782dfc5993e99890c0475bc295a30