キーに触れずに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値はそのまま通過
- ✓43言語すべてを単一リクエストで対応
- ✓JSONとして自動検出 — フォーマットフラグ不要
- ✓フラットおよび深くネストされたロケールファイルに対応
- ✓補間変数({name}, {{count}}, %s)を正確に保持
- ✓出力は有効なJSON — 変更なしでパース可能
翻訳済みロケールファイル作成の3ステップ
JSONを貼り付けるかAPIを呼び出す
ワンオフ翻訳にはノーコード翻訳ツールを使用:JSONを貼り付け、言語を選び、翻訳済みファイルをダウンロード。自動化にはPOST /v1/translateにJSON内容とターゲット言語コードを送信。
すべての言語を1つのレスポンスで受け取る
APIはターゲット言語ごとに1つのエントリを持つJSONオブジェクトを返し、構造が同一の完全翻訳済みロケールファイルを含みます。言語ごとの呼び出し不要。ループ不要。1回のリクエストで全出力。
出力を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)は送信前にコメントを除去し標準JSONに変換する必要があります。これはビルドパイプラインで一般的なステップであり、ほとんど負荷はかかりません。
1回のリクエストで何言語まで対応可能ですか?
最大30言語まで単一リクエストで対応可能です。レスポンスは言語コードごとに1つの翻訳済みJSONオブジェクトを含みます。レート制限はプランによって異なり、無料プランは1分あたり10リクエスト、GrowthおよびScaleプランは1分あたり200〜600リクエストを許可します。
数秒でロケールファイルを翻訳。
JSONを貼り付け、言語を選択し、すべてのターゲット言語の有効なロケールファイルを取得。
無料で翻訳を始めるロケールJSONを貼り付けて出力を確認 — 無料、アカウント不要。