構造を保持するJSONトランスレーター | 無料の国際化ツール
JSONファイル内の文字列の値だけに翻訳先の言語コードを付与し、キー、数値、真偽値、全体の構造はそのまま変更しない無料のブラウザツール。ネストされたオブジェクトや配列にも対応する。i18nextなどの多言語対応ファイルやAPIレスポンスを翻訳する作業に役立つ。
JSONオブジェクト構造保持翻訳ツール
このツールは、JSONオブジェクトの構造を保持しながら、そのコンテンツを翻訳します。左パネルにJSONを貼り付け、ターゲット言語を選択すると、右側に翻訳された出力が表示されます。
翻訳された出力がここに表示されます...
使用方法
- 元のJSONオブジェクトを「元のJSON」フィールドに貼り付けます。
- ドロップダウンメニューからターゲット言語を選択します。
- 翻訳されたJSONが自動的に右パネルに表示されます。
- 「コピー」ボタンをクリックして、翻訳されたJSONをクリップボードにコピーします。
ドキュメンテーション
JSONの構造を保持する翻訳ツールとは
Google翻訳にJSONをコピーして、壊れたキー、欠落したブラケット、または破損した構文に遭遇したことはありませんか?まさにこのツールがその問題を解決します。
JSONの構造を保持する翻訳ツールは、JSONオブジェクト内の文字列値を別の言語に変換しながら、他のすべてをそのままにします。キーは同じままで、数字は数字のまま、ブール値はブール値のまま、ネストされた構造も崩れません。
これが通常の翻訳ツールと異なる点は次の通りです:50以上のネストされたキーを持つ一般的なi18nファイルを翻訳する際、スペイン語、フランス語、または日本語でuser.profile.displayNameを参照できるように、構造を同一に保つ必要があります。その構造が壊れると、何時間もデバッグすることになります。
このツールは再帰的なトラバーサルを自動的に処理し、翻訳が必要な文字列と、APIキー、設定値、数値IDなどそのままにすべき要素を識別します。
JSONの構造保存の仕組み
構造保存が重要な理由
JSONの翻訳を扱う際、通常以下のシナリオのいずれかに対応しています:
- i18nファイル で、アプリが
en.jsonとfr.jsonに同一のキーを持つことを期待している場合 - APIレスポンス で、クライアントの解析のために言語間で一貫した構造が必要な場合
- 設定ファイル で、キー名の変更が全アプリケーションを破壊してしまう場合
- データベースエクスポート で、関係が特定のフィールド名に依存している場合
課題:JSONは単なるテキストではありません。コードが依存する構造化されたデータとスキーマを持っています。翻訳中に"userName"を"nombreUsuario"に変更すると、アプリはundefinedエラーを投げます。
翻訳プロセスの仕組み
以下が、JSONを翻訳する際のフードの下で起こることです:
1. 解析と検証 ツールは最初にJSONの構文を検証します。カンマが欠けているか、余分な括弧がある場合、翻訳が開始される前に明確なエラーメッセージを表示し、破損した出力を防ぎます。
2. 再帰的走査 ルートから開始し、アルゴリズムはJSONツリーの各ノードを走査します。各要素について、データ型をチェックします:
- 文字列?翻訳のキューに入れる
- 数値、ブール値、null?完全にスキップ
- オブジェクトまたは配列?その中に再帰的に入る
3. 型安全な翻訳
文字列値のみが翻訳APIに送信されます。"quantity": 42は42のまま、"cuarenta y dos"にはなりません。"isActive": trueはtrueのまま、"verdadero"にはなりません。
4. キーの保存
すべてのオブジェクトキーは元の言語のままです。これは重要で、translations.header.welcomeMessageは各言語ファイルで同じパスでなければならないためです。
5. 構造の再構築 翻訳された文字列は、すべてのネストレベル、配列インデックス、オブジェクト階層を維持しながら、まったく同じ位置に挿入されます。
よくある落とし穴:一部の開発者は、オブジェクトをJSON.stringify()し、文字列全体を翻訳し、その後パースし直そうとします。これは翻訳者がキー、括弧、構文を変更するため、破壊されます。再帰的アプローチはこれを完全に回避します。
JSONの構造を保持する翻訳ツールの使用
ステップバイステップガイド
1. JSONを貼り付ける JSONオブジェクトをコピーし、左パネルに貼り付けます。このツールは、5つのキーを持つシンプルなオブジェクトから、配列や複数のレベルを持つ深くネストされた構造まで、あらゆる有効なJSONを処理できます。
2. ターゲット言語を選択 言語ドロップダウンから選択:スペイン語、フランス語、ドイツ語、イタリア語、ポルトガル語、中国語、日本語、韓国語、ロシア語など。i18nextプロジェクト用に翻訳する場合は、フレームワークが期待する言語コードに合わせてください。
3. 即座に翻訳 翻訳された出力が右パネルに自動的に表示されます。「翻訳」ボタンは不要で、有効なJSONと選択された言語があれば、すぐに処理されます。
4. コピーして使用 「コピー」ボタンをクリックして、翻訳されたJSONを取得します。クリーンアップ不要で、そのままプロジェクトに貼り付けられます。
5. 次の翻訳のためにクリア 別のファイルを翻訳する準備ができたら、「すべてクリア」を押します。ツールは両パネルを即座にリセットします。
一般的な問題と解決策
「無効なJSONフォーマット」エラー 構文に問題がある場合に表示されます。よくある原因:
- キーと値のペア間のカンマの欠落
- 最後のアイテムの後の末尾のカンマ(JavaScriptでは有効、JSONでは無効)
- シングルクォートの代わりにダブルクォート
- 文字列内のエスケープされていない特殊文字
簡単な修正:貼り付ける前に、JSONLintのようなバリデーターでJSONを確認してください。
翻訳が静かに失敗 出力パネルが空のままの場合:
- インターネット接続を確認—翻訳にはAPIアクセスが必要です
- ターゲット言語が選択されていることを確認
- 小さなJSONスニペットで問題を分離してみてください
翻訳の予期しない結果 機械翻訳は標準的なフレーズではうまく機能しますが、以下では苦労します:
- 技術用語やドメイン固有の用語
- ブランド名(多くの場合、そのまま残すべき)
{{username}}や%sのようなプレースホルダー構文
本番アプリケーションでは、このツールを最初のパスとして使用し、ドメイン固有または顧客向けのコンテンツは、ネイティブスピーカーにレビューしてもらってください。
より良い結果のためのプロのヒント
技術的な文字列を分離する JSONにユーザー向けのテキストと技術的な識別子が混在する場合は、分割を検討してください。例:
1{
2 "display": {"welcome": "おかえりなさい"},
3 "config": {"apiKey": "abc123", "endpoint": "https://api.example.com"}
4}
5configの値を誤って処理しないよう、displayオブジェクトを別々に翻訳します。
文字列にコンテキストを使用 「送信」は、コンテキストによって異なる翻訳になる可能性があります。「フォームを送信」や「支払いを送信」は、翻訳者(人間または機械)にとってより正確な翻訳のためのコンテキストを提供します。
実際のデータでテスト 500以上のキーを持つ全体のi18nファイルを翻訳する前に、文字列、数値、ネストされたオブジェクト、配列など、すべてのデータ型を含む小さなサンプルでテストしてください。
コード例
JavaScriptによるJSONの翻訳
1// JavaScriptで同様の機能を実装する例
2function translateJsonStructure(jsonObj, targetLanguage) {
3 // 文字列を翻訳するヘルパー関数
4 function translateString(str, lang) {
5 // 実際の実装では、翻訳APIを呼び出すことになります
6 return `[${lang}] ${str}`;
7 }
8
9 // JSONを走査して翻訳する再帰関数
10 function processNode(node) {
11 if (node === null) return null;
12
13 if (typeof node === 'string') {
14 return translateString(node, targetLanguage);
15 }
16
17 if (Array.isArray(node)) {
18 return node.map(item => processNode(item));
19 }
20
21 if (typeof node === 'object') {
22 const result = {};
23 for (const key in node) {
24 result[key] = processNode(node[key]);
25 }
26 return result;
27 }
28
29 // 数値、真偽値などは変更せずに返す
30 return node;
31 }
32
33 return processNode(jsonObj);
34}
35
36// 使用例
37const sourceJson = {
38 "product": {
39 "name": "ワイヤレスヘッドホン",
40 "description": "ノイズキャンセリング機能付きの高品質ワイヤレスヘッドホン",
41 "features": ["Bluetooth 5.0", "40時間バッテリー寿命", "折りたたみ式デザイン"],
42 "price": 99.99,
43 "inStock": true
44 }
45};
46
47const translatedJson = translateJsonStructure(sourceJson, "es");
48console.log(JSON.stringify(translatedJson, null, 2));
49Pythonによるデータの翻訳
1import json
2
3def translate_json_structure(json_obj, target_language):
4 """
5 JSONオブジェクトの文字列値を翻訳し、構造を保持する関数。
6
7 引数:
8 json_obj: パースされたJSONオブジェクト
9 target_language: ターゲット言語コード(例:'es'、'fr')
10
11 戻り値:
12 構造を保持した翻訳済みJSONオブジェクト
13 """
14 def translate_string(text, lang):
15 # 実際の実装では、翻訳APIを呼び出すことになります
16 return f"[{lang}] {text}"
17
18 def process_node(node):
19 if node is None:
20 return None
21
22 if isinstance(node, str):
23 return translate_string(node, target_language)
24
25 if isinstance(node, list):
26 return [process_node(item) for item in node]
27
28 if isinstance(node, dict):
29 result = {}
30 for key, value in node.items():
31 result[key] = process_node(value)
32 return result
33
34 # 数値、真偽値などは変更せずに返す
35 return node
36
37 return process_node(json_obj)
38
39# 使用例
40source_json = {
41 "user": {
42 "name": "ジェーン・スミス",
43 "bio": "ソフトウェア開発者とオープンソースコントリビューター",
44 "skills": ["JavaScript", "Python", "React"],
45 "active": True,
46 "followers": 245
47 }
48}
49
50translated_json = translate_json_structure(source_json, "fr")
51print(json.dumps(translated_json, indent=2))
52PHPによるJSONの翻訳
1<?php
2/**
3 * JSONの構造を保持しながら翻訳する関数
4 *
5 * @param mixed $jsonObj パースされたJSONオブジェクト
6 * @param string $targetLanguage ターゲット言語コード
7 * @return mixed 翻訳されたJSONオブジェクト
8 */
9function translateJsonStructure($jsonObj, $targetLanguage) {
10 // 文字列を翻訳するヘルパー関数
11 function translateString($text, $lang) {
12 // 実際の実装では、翻訳APIを呼び出すことになります
13 return "[$lang] $text";
14 }
15
16 // 各ノードを処理する再帰関数
17 function processNode($node, $lang) {
18 if ($node === null) {
19 return null;
20 }
21
22 if (is_string($node)) {
23 return translateString($node, $lang);
24 }
25
26 if (is_array($node)) {
27 // 連想配列(オブジェクト)またはインデックス付き配列かをチェック
28 if (array_keys($node) !== range(0, count($node) - 1)) {
29 // 連想配列(オブジェクト)
30 $result = [];
31 foreach ($node as $key => $value) {
32 $result[$key] = processNode($value, $lang);
33 }
34 return $result;
35 } else {
36 // インデックス付き配列
37 return array_map(function($item) use ($lang) {
38 return processNode($item, $lang);
39 }, $node);
40 }
41 }
42
43 // 数値、真偽値などは変更せずに返す
44 return $node;
45 }
46
47 return processNode($jsonObj, $targetLanguage);
48}
49
50// 使用例
51$sourceJson = [
52 "company" => [
53 "name" => "グローバルテックソリューションズ",
54 "description" => "革新的なソフトウェア開発会社",
55 "founded" => 2010,
56 "services" => ["ウェブ開発", "モバイルアプリ", "クラウドソリューション"],
57 "active" => true
58 ]
59];
60
61$translatedJson = translateJsonStructure($sourceJson, "de");
62echo json_encode($translatedJson, JSON_PRETTY_PRINT);
63?>
64実世界のユースケース
Web アプリケーションの i18n ファイル
Next.js、React、Vue などの最新のフレームワークでは、翻訳は通常 JSON 形式で保存されます。アプリに新しい言語を追加する必要がある場合、手動でコピー&ペーストして各キーを翻訳する(エラーが発生しやすい)か、このツールを使用して数分で最初の下書きを生成するかの選択に直面します。
実際のシナリオ:アプリには、ナビゲーション、フォーム、エラーメッセージ、ツールチップにまたがる 200 以上の翻訳キーを持つ en.json があります。次のスプリントまでにフランス語とドイツ語版が必要です。
入力 (en.json):
1{
2 "common": {
3 "welcome": "Welcome to our application",
4 "login": "Log in",
5 "signup": "Sign up",
6 "errorMessages": {
7 "required": "This field is required",
8 "invalidEmail": "Please enter a valid email address"
9 }
10 }
11}
12フランス語に翻訳し、同じ構造の fr.json を取得します。コードは引き続き t('common.errorMessages.required') を参照し、変更はありません。
私が効果的だと見つけたこと: このツールで翻訳を生成し、その後、二言語話者のチームメンバーに技術用語とボタンラベルをスポットチェックしてもらいます。これにより、「送信」が「フォームを送信」と「支払いを送信」で異なる翻訳が必要な場合を捉えることができます。
API レスポンスのローカライズ
複数の国にサービスを提供する API を構築していますか?言語間で一貫したレスポンス構造が必要です。通知 API は次のように返すかもしれません:
1{
2 "status": "success",
3 "notification": {
4 "title": "Order Shipped",
5 "message": "Your order #12345 has been shipped",
6 "priority": 1,
7 "timestamp": 1678901234
8 }
9}
10モバイルアプリは notification.title と notification.message を解析します。フランス語翻訳でキー構造が変更されると、フランス人ユーザーのアプリが破損します。
このツールは、文字列値のみが翻訳され、notification.title が常に notification.title のままであることを保証します。クライアントコードは、すべてのロケールで同一に動作します。
注意すべき制限: 自動翻訳はドメインを理解できません。電子商取引のコンテキストでの「出荷」は、物流や海事のコンテキストとは異なる翻訳が必要かもしれません。顧客向けの API の場合、デプロイ前に出力を確認してください。
ヘッドレス CMS コンテンツの翻訳
Contentful や Strapi などのヘッドレス CMS プラットフォームは、多くの場合コンテンツを JSON としてエクスポートします。作者、タグ、注目画像の URL、公開日などの構造化されたメタデータを持つ 50 のブログ投稿がある場合、メタデータに触れずに本文とタイトルを翻訳したいでしょう。
典型的なエクスポートには、コンテンツ文字列と設定の両方が含まれます:
- コンテンツ:記事本文、見出し、抜粋
- 構造:作者 ID、画像パス、カテゴリースラッグ、タイムスタンプ
手動翻訳では、スラッグを technology から tecnología に変更してしまい、ルーティングを破壊するリスクがあります。構造を保持する翻訳は、コンテンツフィールドのみを処理します。
複数地域デプロイ用の設定ファイル
地域をまたいでデプロイしていますか?設定ファイルには、エンドポイント、資格情報、機能フラグをそのままに、ローカライズされた文字列が必要かもしれません:
1{
2 "region": "eu-west",
3 "welcomeMessage": "Welcome to our service",
4 "endpoint": "https://api.eu.example.com",
5 "retryAttempts": 3,
6 "features": {"darkMode": true}
7}
8endpoint、retryAttempts、features はそのままに、welcomeMessage をドイツ語に翻訳します。
翻訳アプローチの比較
| 方法 | 最適な用途 | 速度 | 精度 | 構造の安全性 | コスト |
|---|---|---|---|---|---|
| このツール | 迅速なi18nファイル生成、プロトタイプ、内部ツール | 即時 | 標準的なコンテンツに適している | 100%保持 | 無料 |
| Google翻訳(コピー/ペースト) | 単一のフレーズ、非技術的なテキスト | 即時 | 変動あり | JSONが壊れる | 無料 |
| プロフェッショナル翻訳 | 顧客向けコンテンツ、法的文書、マーケティング | 日数 | 優れている | 手動作業が必要 | $0.08-0.15/単語 |
| 翻訳管理システム(Lokalise、Phrase) | エンタープライズアプリ、コラボレーションワークフロー | 数時間〜日数 | レビューで優れている | JSON対応組み込み | $$$+ |
このツールを使用するタイミング: 初期段階のプロジェクト、レビュー用下書きの生成、完璧な翻訳が重要でない内部アプリケーション。
プロフェッショナル翻訳に投資するタイミング: 顧客向けコンテンツ、法的/コンプライアンステキスト、ブランドメッセージ、または文化的なニュアンスが速度よりも重要な場合。
技術的な考慮事項とエッジケース
何が翻訳されるか(されないか)
ツールは型チェックを使用して、何を翻訳するかを判断します:
✅ 翻訳される:
- 文字列値:
"Welcome"→"ようこそ" - 配列内の文字列:
["Hello", "World"]→["こんにちは", "世界"] - あらゆるネストレベルの文字列
❌ 翻訳されない:
- 数値:
42、3.14、-10は変更されません - ブール値:
trueとfalseはそのまま - Null:
nullはnullのまま - オブジェクトキー: キーとしての
"userName"は"userName"のまま - 空文字列:
""は""のまま
特殊文字の処理
Unicode と絵文字 ツールはUTF-8を適切に処理するため、絵文字や非ラテン文字も問題なく動作します:
1{"greeting": "👋 Hello"}
2日本語に翻訳すると:
1{"greeting": "👋 こんにちは"}
2エスケープシーケンス
JSONのエスケープシーケンス(\n、\t、\")は保持されます:
1{"message": "Line 1\nLine 2"}
2\n は翻訳中もそのまま維持されます。
プレースホルダー
潜在的な問題:{username} や %s のようなプレースホルダーを含む文字列は、翻訳されたり並べ替えられたりする可能性があります。アラビア語やヘブライ語のような右から左へ記述する言語では、プレースホルダーの位置が変わることがあるため、注意深く確認してください。
大規模JSONのパフォーマンス
ウェブベースのツールは、一般的な国際化ファイル(500KB未満)を問題なく処理します。大きなデータセットの場合:
- 500KB - 2MB: ブラウザで動作しますが、遅くなる可能性があります
- 2MB以上: 論理的なチャンク(機能やセクションごとの別ファイルなど)に分割することをお勧めします
制限要因はアルゴリズム自体ではなく、ブラウザのメモリです。
よくある質問
これは、JSONをGoogle翻訳に貼り付けるのとどう違うのですか?
Google翻訳は、JSONをプレーンテキストとして扱うため、キー、構文文字、数値を含むすべてを翻訳しようとします。以下のような出力になります:
1{ "nom d'utilisateur": "Jean Dupont", "âge": "vingt-cinq" }
2"username" が "nom d'utilisateur" に、数値 25 が文字列 "vingt-cinq" になっていることに注意してください。これによりコードは即座に破壊されます。
このツールはJSON構造を理解し、文字列値のみを翻訳し、キーやその他のデータ型はそのままにします。
配列を含む深くネストされたJSONも処理できますか?
はい。再帰的アルゴリズムは、ネストのすべてのレベルを処理します:
1{
2 "users": [
3 {"name": "John", "roles": ["admin", "editor"]},
4 {"name": "Jane", "roles": ["viewer"]}
5 ]
6}
7JSON構造を維持しながら、すべての文字列値("John"、"Jane"、"admin"、"editor"、"viewer")を翻訳します。
英語と既に翻訳された内容が混在するJSONの場合はどうなりますか?
ツールは、すでに対象言語にある文字列も含めて、見つかるすべての文字列を翻訳します。既存の翻訳ファイルに新しいキーを追加する場合は、新しいセクションのみを別々に翻訳し、結果をマージしてください。
i18nextやreact-intlファイルで使用できますか?
その通りです。出力構造はこれらのフレームワークが期待する形式と一致します。例えば、i18nextのJSONファイル:
1{"translation": {"welcome": "Hello", "goodbye": "Goodbye"}}
2は次のようになります:
1{"translation": {"welcome": "Hola", "goodbye": "Adiós"}}
2t('translation.welcome') の呼び出しは変更なしで機能します。
技術的なコンテンツの自動翻訳の精度はどうですか?
コンテキストによって異なります:
- 一般的なUIテキスト: 「保存」、「キャンセル」、「送信」 → 通常は正確
- 技術用語: 「webhook」、「OAuth2」、「idempotent」 → 誤訳されるか、そのまま残される可能性がある
- ドメイン固有の用語: 「患者記録」(医療)vs「患者」(忍耐) → コンテキストを見逃す可能性がある
本番アプリでは、これを最初のパスとして使用し、技術的およびドメイン固有の用語を誰かにレビューしてもらうことをお勧めします。
異なる文字セット(中国語、アラビア語、ロシア語)はどうなりますか?
ツールはUnicodeを適切に処理するため、すべての文字セットで動作します。注意点:アラビア語とヘブライ語は右から左(RTL)であり、翻訳された文字列のプレースホルダーの表示に影響を与える可能性があります。JSON構造は正確に保たれますが、読みやすさのために翻訳されたテキストを確認してください。
フォーマット(インデント、改行)は保持されますか?
出力は有効なJSONですが、フォーマット(空白、インデント)は入力と異なる場合があります。特定のフォーマットが必要な場合は、希望の設定でJSONフォーマッターに通してください。
URLやAPIキーなどの設定値を翻訳できますか?
ツールはすべての文字列を翻訳します。これを防ぐには:
- JSONをユーザー向けコンテンツと設定に分割
- コンテンツセクションのみを翻訳
- 設定は未翻訳のままにする
さらに良いのは、最初から翻訳可能なコンテンツと技術的な値を分離するようにファイルを構造化することです。
これは無料ですか? レート制限はありますか?
ウェブベースのツールは一般的な使用には無料です。非常に大量の翻訳(1分間に数百のファイル)は、基盤となる翻訳サービスのレート制限に達する可能性があります。ほとんどの開発ワークフローでは、制限に遭遇することはありません。
参考文献と追加情報
JSONの構造、国際化標準、およびベストプラクティスをより深く理解するために:
-
ECMA-404: JSONデータ交換構文 - Ecma Internationalによる、標準形式を定義する公式JSONの仕様: ecma-international.org/publications-and-standards/standards/ecma-404/
-
MDN Web Docs: JSONの操作 - MozillaによるJSON解析、文字列化、および構造に関する包括的なガイド: developer.mozilla.org/en-US/docs/Learn/JavaScript/Objects/JSON
-
W3C国際化(i18n)アクティビティ - Webの国際化に関する標準とベストプラクティス: w3.org/International/
-
RFC 8259: JSONデータ交換フォーマット - JSONの構文とセマンティクスに関するIETF仕様: datatracker.ietf.org/doc/html/rfc8259
JSONファイルの翻訳を開始する
多言語アプリケーション用の翻訳ファイルを迅速に生成する必要がありますか?JSONをペーストし、ターゲット言語を選択すると、構造を保持した翻訳をすぐに取得できます。i18next、react-intl、vue-i18n、および言語間で一貫したJSONの構造を期待する任意のフレームワークで動作します。
翻訳を今すぐ開始: