CSV

Lingo.dev CLIによるCSVファイルのAI翻訳

CSVとは?

CSV(カンマ区切り値)は、表形式のデータを保存するプレーンテキストファイル形式で、各行が1つの行を表し、各行内の値はカンマで区切られます。

例:

KEY,en
welcome_message,Welcome to our application
button_save,Save
error_invalid_email,Please enter a valid email address

Lingo.dev CLIとは?

Lingo.dev CLIは、AIを使用してアプリやコンテンツを翻訳するための無料のオープンソースCLIです。従来の翻訳管理ソフトウェアに代わるものとして設計されており、既存のパイプラインと統合できます。

詳細については、概要を参照してください。

このガイドについて

このガイドでは、Lingo.dev CLIを使用してCSVファイルを翻訳する方法を説明します。

以下の方法を学習します:

  • ゼロからプロジェクトを作成する
  • 翻訳パイプラインを設定する
  • 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. ソースコンテンツを作成する

まだ作成していない場合は、翻訳するコンテンツを含むCSVファイルを作成します。

CSVファイルの場合、以下の要件が適用されます:

  • 最初の列は「KEY」という名前にする必要があります。
  • 「KEY」列の各行には、翻訳メッセージの一意のIDを指定する必要があります。
  • 2列目は、i18n.jsonファイルで定義されているソースロケールと一致する必要があります。
  • 2列目の各行には、翻訳されるコンテンツを含める必要があります。

注意: 翻訳プロセス中、ソースコンテンツファイルは翻訳されたコンテンツ(ソースコンテンツに加えて)を含むように上書きされます。

ステップ 5. バケットを作成する

  1. i18n.jsonファイルで、bucketsオブジェクトに"csv"オブジェクトを追加します:

    {
      "$schema": "https://lingo.dev/schema/i18n.json",
      "version": "1.10",
      "locale": {
        "source": "en",
        "targets": ["es"]
      },
      "buckets": {
        "csv": {}
      }
    }
    
  2. "csv"オブジェクトで、1つ以上のincludeパターンの配列を定義します:

    {
      "$schema": "https://lingo.dev/schema/i18n.json",
      "version": "1.10",
      "locale": {
        "source": "en",
        "targets": ["es"]
      },
      "buckets": {
        "csv": {
          "include": ["./example.csv"]
        }
      }
    }
    

    これらのパターンは、翻訳するファイルを定義し、次のいずれかを指定できます:

    • 特定のファイルパスを指定する(例: "some/dir/file.csv")
    • アスタリスクをワイルドカードプレースホルダーとして使用する(例: "some/dir/*.csv")

    再帰的なglobパターン(例: **/*.csv)はサポートされていません。

ステップ 6. LLMを設定する

Lingo.dev CLIは、大規模言語モデル(LLM)を使用してAIでコンテンツを翻訳します。これらのモデルのいずれかを使用するには、サポートされているプロバイダーからAPIキーが必要です。

できるだけ早く開始するには、Lingo.dev Engineの使用をお勧めします。これは、毎月10,000トークンの無料利用枠を提供する当社独自のホスティングプラットフォームです:

  1. Lingo.devアカウントにサインアップしてください。

  2. 次のコマンドを実行します:

    npx lingo.dev@latest login
    

    これによりデフォルトのブラウザが開き、認証が求められます。

  3. プロンプトに従ってください。

ステップ7. 翻訳を生成する

i18n.jsonファイルが含まれるディレクトリで、次のコマンドを実行します:

npx lingo.dev@latest run

このコマンドは:

  1. i18n.jsonファイルを読み込みます。
  2. 翻訳が必要なファイルを検索します。
  3. ファイルから翻訳可能なコンテンツを抽出します。
  4. 設定されたLLMを使用して抽出されたコンテンツを翻訳します。
  5. 翻訳されたコンテンツをファイルシステムに書き戻します。

翻訳が初めて生成されると、i18n.lockファイルが作成されます。このファイルは、どのコンテンツが翻訳されたかを追跡し、以降の実行で不要な再翻訳を防ぎます。

example.csv(翻訳前)

KEY,en
welcome_message,Welcome to our application
button_save,Save
error_invalid_email,Please enter a valid email address
product_name,Premium Widget
empty_row_key,
whitespace_only,
new_feature,This is a new feature

example.csv(翻訳後)

KEY,en,es
welcome_message,Welcome to our application,Bienvenido a nuestra aplicación
button_save,Save,Guardar
error_invalid_email,Please enter a valid email address,"Por favor, introduce una dirección de correo electrónico válida"
product_name,Premium Widget,Widget Premium
empty_row_key,,
whitespace_only,   ,
new_feature,This is a new feature,Esta es una nueva función

i18n.json

{
  "$schema": "https://lingo.dev/schema/i18n.json",
  "version": "1.10",
  "locale": {
    "source": "en",
    "targets": ["es"]
  },
  "buckets": {
    "csv": {
      "include": ["./example.csv"]
    }
  }
}

i18n.lock

version: 1
checksums:
  e8b273672f895de0944f0a2317670d7c:
    welcome_message: 1308168cca4fa5d8d7a0cf24e55e93fc
    button_save: f7a2929f33bc420195e59ac5a8bcd454
    error_invalid_email: 8de4bc8832b11b380bc4cbcedc16e48b
    product_name: d3d99b147cc363dc6db8a48e8a13d4c1
    new_feature: 7cd986af1fe5e89abe7ecffba5413110
  d0f33bd41270762260010c4723a564f5:
    welcome_message: 1308168cca4fa5d8d7a0cf24e55e93fc
    button_save: f7a2929f33bc420195e59ac5a8bcd454
    error_invalid_email: 8de4bc8832b11b380bc4cbcedc16e48b
    product_name: d3d99b147cc363dc6db8a48e8a13d4c1
    new_feature: 7cd986af1fe5e89abe7ecffba5413110