OpenRouter
OpenRouterとLingo.dev Compilerを使用したAI翻訳
OpenRouterとは何ですか?
OpenRouterは、統一されたAPIを通じて様々なプロバイダーからの多様なAIモデルへのアクセスを提供するプラットフォームで、開発者が簡単に比較、切り替え、リクエストのルーティングを行うことができます。柔軟性、透明性、そしてユーザーがどのモデルを使用するか、どのように課金されるかについてより多くの制御を与えることに重点を置いています。
APIキーの設定
OpenRouterはLingo.dev Compilerからのリクエストを認証するためにAPIキーを必要とします。あなたのワークフローに最適なセットアップ方法を選択してください:
オプション1:環境変数(ターミナル)
ファイルを変更せずに素早く実験やテストを行うのに最適です。
ターミナルセッションで直接キーを設定します:
export OPENROUTER_API_KEY="your-api-key-here"
このキーはターミナルウィンドウを閉じるまで有効です。
オプション2:プロジェクト設定(.env)
プロジェクト固有の設定やチーム環境で、各プロジェクトが異なる認証情報を使用する場合に最適です。
プロジェクトのルートに.env
ファイルを作成します:
touch .env
ファイルに次の行を追加します:
OPENROUTER_API_KEY="your-api-key-here"
Lingo.dev Compilerは以下の優先順位で環境ファイルをチェックします:
.env.development
(最高優先度).env.local
.env
(最低優先度)
優先度の高いファイルの値は、優先度の低いファイルの値を上書きします。
オプション3:グローバル設定(ユーザー設定)
すべてのプロジェクトで同じAPIキーを使用したい個人開発者に最適です。
ホームディレクトリに設定ファイルを作成します:
touch ~/.lingodotdevrc
ファイルに次の内容を追加します:
[llm]
openrouterApiKey="your-api-key-here"
この設定はマシン上のすべてのターミナルセッションとプロジェクトで持続します。
設定の優先順位
複数の設定方法が使用されている場合、Lingo.dev Compilerは以下の順序でAPIキーをチェックします:
- 環境変数(最高優先度)
- プロジェクトの.envファイル(それぞれの優先順位で)
- ユーザー設定ファイル
~/.lingodotdevrc
(最低優先度)
最初に見つかった有効なAPIキーが使用されます。
OpenRouterの使用
OpenRouterを有効にするには、コンパイラオプションでmodels
プロパティを設定します:
import react from "@vitejs/plugin-react";
import lingoCompiler from "lingo.dev/compiler";
import { type UserConfig } from "vite";
// https://vite.dev/config/
const viteConfig: UserConfig = {
plugins: [react()],
};
const withLingo = lingoCompiler.vite({
sourceRoot: "src",
lingoDir: "lingo",
sourceLocale: "en",
targetLocales: ["es", "fr", "de", "ja"],
rsc: false,
useDirective: false,
debug: false,
models: {
"*:*": "openrouter:anthropic/claude-3.5-sonnet",
},
});
export default withLingo(viteConfig);
このプロパティは以下のようなオブジェクトを受け付けます:
- キーはソースロケールとターゲットロケールのペアで、
*
は任意のロケールを表します - 値はモデル識別子です(例:
openrouter:anthropic/claude-3.5-sonnet
)
OpenRouterを使用して以下の翻訳が可能です:
- すべてのロケール間
- 特定のソースロケールから
- 特定のターゲットロケールへ
- 特定のソースロケールと特定のターゲットロケール間
すべてのロケールの翻訳
ワイルドカードパターン*:*
を使用して、すべての翻訳ペアに同じOpenRouterモデルを適用します:
const withLingo = lingoCompiler.vite({
sourceRoot: "src",
lingoDir: "lingo",
sourceLocale: "en",
targetLocales: ["es", "fr", "de", "ja", "pt", "zh"],
models: {
// すべての翻訳ペアにClaude 3.5 Sonnetを使用
"*:*": "openrouter:anthropic/claude-3.5-sonnet",
},
});
特定のソースロケールからの翻訳
特定のソースロケールとワイルドカードターゲットを使用して、そのソースからのすべての翻訳にモデルを適用します:
const withLingo = lingoCompiler.vite({
sourceRoot: "src",
lingoDir: "lingo",
sourceLocale: "en",
targetLocales: ["es", "fr", "de", "ja", "pt", "zh"],
models: {
// 英語からのすべての翻訳にClaude 3.5 Sonnetを使用
"en:*": "openrouter:anthropic/claude-3.5-sonnet",
// スペイン語から任意の言語への翻訳にGPT-4 Turboを使用
"es:*": "openrouter:openai/gpt-4-turbo",
// その他のソース言語のフォールバック
"*:*": "openrouter:meta-llama/llama-3.1-70b",
},
});
特定のターゲットロケールへの翻訳
ワイルドカードソースと特定のターゲットロケールを使用して、そのターゲットへのすべての翻訳にモデルを適用します:
const withLingo = lingoCompiler.vite({
sourceRoot: "src",
lingoDir: "lingo",
sourceLocale: "en",
targetLocales: ["es", "fr", "de", "ja", "pt", "zh"],
models: {
// 日本語への翻訳には特殊なモデルを使用
"*:ja": "openrouter:anthropic/claude-3-opus",
// 中国語への翻訳にはGemini Proを使用
"*:zh": "openrouter:google/gemini-pro-1.5",
// フランス語への翻訳にはMistral Largeを使用
"*:fr": "openrouter:mistralai/mistral-large",
// その他のターゲット言語のデフォルト
"*:*": "openrouter:openai/gpt-3.5-turbo",
},
});
特定のロケール間の翻訳
特定の言語の組み合わせを処理するモデルをきめ細かく制御するために、正確なソースとターゲットのペアを定義します:
const withLingo = lingoCompiler.vite({
sourceRoot: "src",
lingoDir: "lingo",
sourceLocale: "en",
targetLocales: ["es", "fr", "de", "ja", "pt", "zh"],
models: {
// 最適なモデルを使用した特定のペア
"en:es": "openrouter:openai/gpt-3.5-turbo", // 英語からスペイン語
"en:ja": "openrouter:anthropic/claude-3.5-sonnet", // 英語から日本語
"en:zh": "openrouter:google/gemini-pro-1.5", // 英語から中国語
"en:fr": "openrouter:mistralai/mistral-large", // 英語からフランス語
"es:en": "openrouter:meta-llama/llama-3.1-8b", // スペイン語から英語
"fr:en": "openrouter:cohere/command-r-plus", // フランス語から英語
"de:en": "openrouter:perplexity/llama-3.1-sonar-large", // ドイツ語から英語
// 指定されていないペアのフォールバック
"*:*": "openrouter:openai/gpt-3.5-turbo",
},
});