キーに触れずにJSONロケールファイルを翻訳します。
キーはキーのまま。ネストもそのまま。翻訳されるのは文字列の値だけ—そして文字列の値だけです。他のすべてのプロパティタイプは送信されたまま戻ってきます。
標準の翻訳ツールはJSONを理解していません。
一般的な翻訳APIはJSONを単なるテキストの塊として扱います。キー名も値と一緒に翻訳し、ネストされたオブジェクトを平坦化し、翻訳すべきでない文字列を連結します。戻ってくるのは構造が壊れたJSONで、使用前に手動で修正が必要です。実際のアプリケーションのロケールファイルを管理しているなら、標準の翻訳APIに渡すことが手間を増やすだけだとわかるでしょう。
問題はキー名だけにとどまりません。標準の翻訳APIは補間変数も壊します。例えば「Hello {name}, you have {count} messages」という文字列は変数名も翻訳されて戻ってきます—「Hola {nombre}, tienes {cuenta} mensajes」—これにより元の変数名を期待していたすべてのランタイムが壊れます。数時間のデバッグが続きます。
複数言語のロケールファイルを管理するチームにとって、これは理論上の問題ではありません。すでに起きています。問題は手動修正に毎回どれだけ時間がかかるかです。
PolyLingoは翻訳前にJSONを走査します。
PolyLingoはJSONの構造を理解しています。オブジェクトを再帰的に走査し、翻訳可能なテキストを含む文字列の値だけを翻訳モデルに送信します。キー名は決して変更されません。数値、真偽値、null値、文字列以外の型はそのまま通過します。出力は構造が同一の有効なJSONで、翻訳された文字列の値だけが異なります。
補間変数—{name}、{{count}}、%s、その他類似パターン—は翻訳プロセス全体で識別され保持されます。翻訳前にプレースホルダーに置き換えられ、出力時に元の形に戻されます。翻訳モデルはこれらを翻訳可能なテキストとして認識しません。
配列は正しく処理されます:文字列要素は翻訳され、数値インデックスや配列構造は変更されません。文字列と非文字列(数値、オブジェクト)が混在する配列も正しく走査され、非文字列型はそのまま通過します。
{
"nav_home": "Home",
"nav_pricing": "Pricing",
"hero_title": "Grow your audience globally",
"hero_cta": "Get started for free",
"footer_rights": "All rights reserved."
}{
"nav_home": "Accueil",
"nav_pricing": "Tarifs",
"hero_title": "Développez votre audience mondiale",
"hero_cta": "Commencer gratuitement",
"footer_rights": "Tous droits réservés."
}{
"nav": {
"home": "Home",
"pricing": "Pricing",
"blog": "Blog"
},
"hero": {
"title": "Grow your audience globally",
"subtitle": "Translate in seconds.",
"cta": "Get started for free"
},
"errors": {
"notFound": "Page not found",
"serverError": "Something went wrong"
}
}{
"nav": {
"home": "Inicio",
"pricing": "Precios",
"blog": "Blog"
},
"hero": {
"title": "Expande tu audiencia globalmente",
"subtitle": "Traduce en segundos.",
"cta": "Comienza gratis"
},
"errors": {
"notFound": "Página no encontrada",
"serverError": "Algo salió mal"
}
}curl -X POST https://api.usepolylingo.com/v1/translate \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"content": "{\"nav_home\": \"Home\", \"hero_title\": \"Get started\"}",
"format": "json",
"targets": ["es", "fr", "de", "ja", "zh"],
"model": "standard"
}'
# Response:
# {
# "translations": {
# "es": "{\"nav_home\": \"Inicio\", \"hero_title\": \"Empezar\"}",
# "fr": "{\"nav_home\": \"Accueil\", \"hero_title\": \"Commencer\"}",
# ...
# }
# }PolyLingoがすべてのJSON翻訳で保証すること
- ✓キー名は決して変更されません
- ✓ネストされたオブジェクトと配列を再帰的に処理
- ✓数値、真偽値、null値はそのまま通過
- ✓36言語すべてを単一リクエストで対応
- ✓JSONとして自動検出—フォーマットフラグ不要
- ✓フラットおよび深くネストされたロケールファイルに対応
- ✓補間変数({name}、{{count}}、%s)を正確に保持
- ✓出力は有効なJSON—修正なしで解析可能
翻訳済みロケールファイル作成の3ステップ
JSONを貼り付けるかAPIを呼び出す
ワンオフ翻訳にはノーコード翻訳ツールを使用:JSONを貼り付け、言語を選択し、翻訳済みファイルをダウンロード。自動化にはPOST /v1/translateを呼び出し、JSONコンテンツとターゲット言語コードを送信。
すべての言語を一度のレスポンスで受け取る
APIはターゲット言語ごとに1つのエントリを持つJSONオブジェクトを返し、完全に翻訳されたロケールファイルを同一構造で含みます。言語ごとの呼び出しは不要。ループも不要。すべての出力を一度のリクエストで。
出力をmessagesディレクトリに配置
翻訳済みファイルをmessages/es.json、messages/fr.json、messages/de.jsonなどに書き込みます。i18nライブラリが期待する場所に。構造は元ファイルと同一なので追加処理は不要。
JSON翻訳が最も重要な場面
next-intlやi18nextを使ったアプリのi18n
messages/*.jsonやlocales/*.jsonファイルを直接翻訳。キーはそのまま、ネストは保持、補間変数も変更なし。ファイルをmessagesディレクトリに置いてデプロイ。
CMSコンテンツのエクスポート
ヘッドレスCMSプラットフォームは構造化コンテンツをJSONでエクスポートすることが多い。PolyLingoは文字列の値だけを翻訳し、フィールド名、ネストされたコンテンツタイプ、日付や真偽値、IDなどの非文字列値は保持。
APIレスポンスや設定ファイル
翻訳可能な文字列値を含む任意のJSON構造—製品説明、通知テンプレート、API経由で提供されるアプリ内コピー—をアプリケーションの依存する構造を変更せずに翻訳可能。
JSON翻訳に関するよくある質問
{name}や{{count}}のような補間変数は保持されますか?
はい。PolyLingoは{variable}、{{variable}}、%(variable)s、%sなどの一般的な補間パターンを翻訳前に識別します。これらは安定したプレースホルダーに置き換えられ、周囲のテキストが翻訳され、元の変数名が出力時に復元されます。翻訳モデルは変数名を翻訳可能な内容として認識しません。
数値、真偽値、nullなどの非文字列値はどうなりますか?
非文字列値は完全にそのまま通過します。PolyLingoは自然言語テキストを含む文字列の値だけを翻訳します。数値、真偽値、null値、非文字列の配列はソースのまま保持されます。
深くネストされたJSON構造にも対応できますか?
はい。PolyLingoは任意のネスト深度のオブジェクトを再帰的に走査します。構造内のすべての文字列値に翻訳が適用され、ネストの深さに関係ありません。
スラッグやコードのような翻訳不要な内容を含むキーがある場合は?
PolyLingoはデフォルトで全ての文字列値を翻訳します。翻訳すべきでない文字列フィールド(スラッグ、言語コード、技術的識別子)がある場合は、それらを送信するJSONから除外するか、まもなく提供予定の明示的なフォーマットパラメータでスキップするフィールドを指定する方法が推奨されます。ほとんどのロケールファイルではすべての文字列値が翻訳対象です。
JSON5やJSONC(コメント付きJSON)にも対応していますか?
現在PolyLingoは標準JSONを処理します。JSON5やJSONC(コメント付き)は送信前にコメントを除去し標準JSONに変換する必要があります。これはビルドパイプラインで一般的なステップであり、ほとんど負荷はかかりません。
一度に何言語まで対応できますか?
最大36言語すべてを単一リクエストで対応可能です。レスポンスは言語コードごとに1つの翻訳済みJSONオブジェクトを含みます。レート制限はプランによって異なり、無料プランは1分あたり10リクエスト、GrowthおよびScaleプランは1分あたり200〜600リクエストを許可します。