UNPKG

i18ntk

Version:

i18ntk (i18n Toolkit) - A comprehensive, enterprise-grade internationalization (i18n) management toolkit for JavaScript/TypeScript projects with advanced analysis, validation, and automation features

1,021 lines 129 kB
{ "meta": { "version": "1.5.3", "consolidated": "2025-08-06", "sourceFiles": 256 }, "common": { "welcome": "ようこそ", "hello": "こんにちは", "goodbye": "さようなら", "yes": "はい", "no": "いいえ", "save": "保存", "cancel": "キャンセル", "delete": "削除", "edit": "編集", "loading": "読み込み中...", "offlineTitle": "You are offline", "offlineMessage": "Please check your internet connection", "tryReconnect": "Try to reconnect", "logout": "Logout", "login": "Login", "amount": "Amount", "success": "成功", "error": "エラー", "warning": "警告", "info": "情報:", "debug": "デバッグ", "progress": "進捗:", "remaining": "残り:", "total": "合計:", "completed": "7. 正常に完了しました!", "missing": "不足", "partial": "部分的", "sameAsSource": "ソースと同じ:", "formatMismatch": "形式の不一致:", "typeMismatch": "タイプの不一致", "structureMismatch": "構造の不一致:", "invalidOption": "無効なオプション", "separator": "==================================================", "initializationFailed": "❌ 初期化に失敗しました: {error}", "stackTrace": "スタックトレース: {stack}", "pressEnterToContinue": "Enterキーを押して続行...", "pressEnterToReturn": "Enterキーを押してメインメニューに戻る...", "stepCompleted": "ステップ '{stepName}' が完了しました。", "stepFailed": "ステップ '{stepName}' が失敗しました。", "runningStep": "ステップを実行中: {stepName}", "command": "コマンド: {command}", "startingWorkflow": "ワークフローを開始中...", "workflowCompleted": "ワークフローが完了しました。", "checkReports": "詳細についてはレポートを確認してください。", "errorExecutingCommand": "コマンド実行エラー:{error}", "genericError": "❌ エラー:{{error}}", "errorGeneratingStatusSummary": "ステータスサマリーの生成エラー:{error}", "errorRunningDebugTool": "デバッグツール'{displayName}'の実行エラー:{error}", "errorReadingDebugLogs": "デバッグログの読み取りエラー:{error}", "errorAnalyzingLogFile": "ログファイルの分析エラー:{error}", "errorAnalyzingTranslationKeys": "翻訳キーの分析エラー:{error}", "errorAnalyzingTranslationCompleteness": "翻訳の完全性分析エラー:{error}", "errorAnalyzingTranslationFormat": "翻訳形式の分析エラー:{error}", "errorAnalyzingTranslationType": "翻訳タイプの分析エラー:{error}", "errorAnalyzingTranslationStructure": "翻訳構造の分析エラー:{error}", "errorAnalyzingTranslationFormatMismatch": "翻訳形式の不一致分析エラー:{error}", "errorAnalyzingTranslationTypeMismatch": "翻訳タイプの不一致分析エラー:{error}", "errorAnalyzingTranslationStructureMismatch": "翻訳構造の不一致分析エラー:{error}", "errorAnalyzingTranslationSameAsSource": "ソースと同じ翻訳の分析エラー:{error}", "title": "ステータス", "nextStep1": "1. 使用状況分析を確認:", "nextStep2": "2. 翻訳を検証:", "nextStep3": "3. 完全性を分析:", "nextStep4": "4. 不足している翻訳を補完:", "nextStep5": "5. サマリーレポートを生成:", "nextStep6": "6. 翻訳を確認して確定:", "generating": "サマリーレポートを生成中...", "review": "翻訳をレビュー中...", "finalizing": "翻訳を最終調整中...", "finalized": "正常に確定されました!", "errors": "エラー:", "warnings": "警告:", "completedKeys": "完了したキー:", "missingKeys": "不足しているキー:", "partialKeys": "部分的なキー:" }, "analyze": { "help_message": "\ni18n 翻訳分析ツール\n\n使い方: node i18ntk-analyze.js [オプション]\n\nオプション:\n --source-dir <dir> スキャンするソースディレクトリ(デフォルト: ./src)\n --i18n-dir <dir> I18n ディレクトリ(デフォルト: ./src/locales)\n --output-report 詳細レポートを生成する\n --output-dir <dir> レポート出力先ディレクトリ(デフォルト: ./reports)\n --help このヘルプを表示する\n\n例:\n node i18ntk-analyze.js --output-report\n node i18ntk-analyze.js --source-dir=./app --i18n-dir=./locales\n node i18ntk-analyze.js --output-dir=./analysis --output-report\n", "source_directory": "📁 ソースディレクトリ: {sourceDir}", "i18n_directory": "🌐 I18n ディレクトリ: {i18nDir}", "loading_translation_files": "📋 翻訳ファイルを読み込み中...", "sourceDirectoryLabel": "📁 ソースディレクトリ: {{sourceDir}}", "sourceLanguageLabel": "🌍 ソース言語: {{sourceLanguage}}", "strictModeLabel": "⚙️ 厳密モード: {{mode}}\n", "found_translation_files_count": "✅ {count} 件の翻訳ファイルを検出しました", "analyzing_translations": "🔍 翻訳を分析中...", "analysis_completed_successfully": "🎉 分析が正常に完了しました!", "analysis_results": "📊 分析結果", "language_analysis_stats": " {language}: {translatedKeys}/{totalKeys} ({percentage}% 翻訳済み)", "sample_missing_keys": "\n翻訳が抜けているキーの例:", "missing_key": "- {key}", "and_more_missing": "...およびさらに {count} 件。", "sample_unused_keys": "\n未使用のキーの例:", "unused_key": "- {key}", "and_more_unused": "...およびさらに {count} 件。", "recommendations": "\n📋 推奨事項", "add_missing_translations": "💡 カバレッジを改善するために不足している翻訳を追加してください。", "remove_unused_translations": "💡 プロジェクトをクリーンに保つために未使用の翻訳を削除してください。", "next_steps": "\n📋 次のステップ", "review_analysis_results": "1. コンソールまたは生成されたレポートで分析結果を確認します。", "run_with_output_report": "2. 詳細レポートを得るには --output-report を付けて実行します。", "add_or_remove_translations": "3. 不足している翻訳を追加するか、未使用のものを削除します。", "rerun_analysis": "4. 改善を確認するために再度分析を実行します。", "analysis_summary": "📊 分析サマリー", "source_files_scanned": "スキャンされたソースファイル: {fileCount}", "translation_files_checked": "確認された翻訳ファイル: {translationFileCount}", "total_keys": "キー合計: {totalKeys}", "translated_keys": "翻訳済みキー: {translatedKeys}", "missing_keys": "不足しているキー: {missingKeys}", "unused_keys": "未使用のキー: {unusedKeys}", "translation_coverage": "翻訳カバレッジ: {coverage}%", "analysis_passed_for_language": "✅ {language} の分析は合格しました", "analysis_failed_for_language": "❌ {language} の分析に失敗しました(不足: {missingKeys}、未使用: {unusedKeys})", "starting": "🔍 翻訳分析を開始しています...", "foundLanguages": "📋 分析対象の言語を {count} 件検出しました: {languages}", "analyzing": "🔄 {language} を分析中...", "reportTitle": "📊 翻訳分析レポート", "generated": "生成日時: {timestamp}", "status": "ステータス: {translated}/{total} キー ({percentage}% 翻訳済み)", "filesAnalyzed": "分析されたファイル: {analyzed}/{total}", "keysNeedingTranslation": "翻訳が必要なキー: {count}", "fileBreakdown": "📋 ファイル詳細", "error": "エラー", "completed": "✅ {language} の分析が完了しました", "progress": "📊 全体の進捗: {translated}/{total} 言語を処理済み", "reportSaved": " レポートを保存しました: {reportPath}", "summary": "📊 分析サマリー", "finished": "✅ 分析が正常に完了しました!", "statusFileMissing": "❌ 翻訳ファイルが見つかりません", "sourceKeys": "📊 ソースキー: {count}", "translation": "📊 翻訳: {translated}/{total} ({percentage}%)", "structure": "🗂️ 構造: {status}", "consistent": "一貫性あり", "inconsistent": "一貫性なし", "missingKeys": "不足しているキー: {count}", "extraKeys": "余分なキー: {count}", "issues": "⚠️ 検出された問題: {count}", "issueType": { "not_translated": "未翻訳: {count}", "empty_value": "空の値: {count}", "partial_translation": "部分翻訳: {count}", "format_mismatch": "形式の不一致: {count}", "type_mismatch": "型の不一致: {count}", "structure_mismatch": "構造の不一致: {count}", "same_as_source": "ソースと同じ: {count}" }, "keysToTranslate": "📋 翻訳すべきキー", "key": "キー", "english": "英語", "needsTranslation": "翻訳が必要", "andMoreKeys": "...およびさらに {count} 件のキー。", "noLanguages": "⚠️ 対象言語が見つかりませんでした。", "languageStats": "{language}: {percentage}% 完了 ({translated}/{total} キー)", "invalidReportFilePath": "無効なレポートファイルパス", "failedToWriteReportFile": "レポートファイルを安全に書き込めませんでした" }, "complete": { "configLoadedSuccessfully": "設定が正常に読み込まれました", "configLoadingFailed": "設定の読み込みに失敗しました", "title": "🌍 I18N 翻訳の補完", "separator": "============================================================", "sourceDir": "📁 ソースディレクトリ:{sourceDir}", "sourceLanguage": "🌐 ソース言語:{sourceLanguage}", "dryRunMode": "🧪 ドライランモード - 変更は行われません", "languages": "🌍 利用可能な言語:{languages}", "addingMissingKeys": "➕ 翻訳ファイルに不足しているキーを追加しています...", "processing": "🔄 {language} を処理中...", "addedKeys": "✅ {count} 件の不足しているキーを追加しました", "noChangesNeeded": "✅ {language} には変更の必要はありません", "summaryTitle": "📊 補完サマリー", "totalChanges": "📝 合計変更:{totalChanges}", "languagesProcessed": "🌍 処理済みの言語:{languagesProcessed}", "missingKeysAdded": "➕ 追加された不足キー:{missingKeysAdded}", "nextStepsTitle": "📋 次のステップ", "nextStep1": "1. 使用状況分析を実行:", "nextStep2": " node i18ntk-usage.js --output-report", "nextStep3": "2. 翻訳を検証:", "nextStep4": " node i18ntk-validate.js", "nextStep5": "3. パターンを分析:", "nextStep6": " node i18ntk-analyze.js", "allKeysAvailable": "🎉 すべての翻訳キーが利用可能になりました!", "runWithoutDryRun": "💡 --dry-run を外して実行すると変更が適用されます", "deletingOldReport": "🗑️ 古いレポートを削除中...", "generatingFreshAnalysis": "📊 新しい使用状況分析を生成中...", "couldNotGenerate": "❌ 使用状況分析を生成できませんでした", "reportNotFound": "📋 使用レポートが見つかりません。共通のキーを使用しています...", "foundMissingKeys": "📋 使用状況分析から {count} 件の不足キーを検出しました", "couldNotParse": "❌ 使用レポートの解析に失敗しました。共通のキーを使用しています...", "errorDuringCompletion": "❌ 完了中にエラーが発生しました: {error}", "fatalError": "❌ 致命的なエラー: {error}", "configurationValidationFailed": "構成の検証に失敗しました:必要なフィールドが不足しています" }, "sizing": { "separator": "================================================================================", "lineSeparator": "--------------------------------------------------------------------------------", "analysisStats": "{{stats}}", "sourceDirectoryLabel": "📁 ソースディレクトリ: {{sourceDir}}", "sourceLanguageLabel": "🌍 ソース言語: {{sourceLanguage}}", "strictModeLabel": "⚙️ 厳格モード: {{mode}}", "invalidSourceDirectoryError": "無効なソースディレクトリパス: {{sourceDir}}", "sourceDirectoryNotFoundError": "ソースディレクトリが見つかりません: {{sourceDir}}", "invalidOutputDirectoryError": "無効な出力ディレクトリパス: {{outputDir}}", "invalidReportFileError": "無効なレポートファイルパス", "problematic_keys": "問題のあるキー: {problematicKeys}", "problematicKeysLabel": "問題のあるキー: {problematicKeys}", "long_translations": "長い翻訳: {{longTranslations}}", "failedToSaveReportError": "レポートの安全な保存に失敗しました", "invalidCsvFileError": "無効な CSV ファイルパス", "failedToSaveCsvError": "CSV レポートの安全な保存に失敗しました", "fatalError": "❌ サイズ分析に失敗しました: {{error}}", "starting_i18n_sizing_analysis": "i18n サイズ分析を開始しています...", "source_directory": "ソースディレクトリ: {{sourceDir}}", "found_languages": "検出された言語: {{languages}}", "analyzing_file_sizes": "ファイルサイズを分析中...", "analyzing_translation_content": "翻訳内容を分析中...", "generating_size_comparisons": "サイズ比較を生成中...", "no_languages_found_for_comparison": "比較用の言語が見つかりません", "sizing_analysis_results": "i18n サイズ分析結果", "file_sizes_title": "ファイルサイズ", "file_sizes_header": "言語 サイズ(KB) 行数 文字数", "file_size_row": "{{lang}} {{sizeKB}} {{lines}} {{characters}}", "language_statistics_title": "言語統計", "language_stats_header": "言語 キー数 文字数 平均長 最大長 空 長い", "language_stats_row": "{{lang}} {{totalKeys}} {{totalCharacters}} {{averageKeyLength}} {{maxKeyLength}} {{emptyKeys}} {{longKeys}}", "size_variations_title": "サイズのばらつき", "size_variations_header": "言語 文字差分 差分(%) 問題あり", "size_variation_row": "{{lang}} {{characterDifference}} {{percentageDifference}}% {{problematic}}", "problematic_yes": "はい", "problematic_no": "いいえ", "recommendations_title": "推奨事項", "recommendation_item": "{{index}}. {{recommendation}}", "problematic_key_detail": " {{index}}. キー: '{{key}}' - バリエーション: {{variations}}", "generating_detailed_report": "詳細レポートを生成中...", "keysHaveSignificantSizeVariations": "キーに大きなサイズのばらつきがあります", "longTranslationsDetected": "${lang} では長さが100文字を超える翻訳が ${data.longKeys} 件検出されました - 分割を検討してください", "report_saved_to": "レポートを保存しました: {{reportPath}}", "considerReviewingTranslations": "${lang} の翻訳を見直すことを検討してください - ベースラインより ${data.percentageDifference}% 長くなっています", "csv_report_saved_to": "CSV レポートを保存しました: {{csvPath}}", "no_translation_files_found": "翻訳ファイルが見つかりません", "analysis_completed": "分析が完了しました({{duration}}ms)", "analysis_failed": "分析に失敗しました: {{errorMessage}}", "failed_to_parse_language_error": "{{language}} の翻訳の解析に失敗しました: {{errorMessage}}", "recommendations": { "keys_have_significant_size_variations": "キーに大きなサイズのばらつきがあります", "consider_reviewing_translations": "{{lang}} の翻訳を見直すことを検討してください - ベースラインより {{percentageDifference}}% {{comparison}} です", "long_translations_detected": "{{lang}} では長さが {{threshold}} 文字を超える翻訳が {{longKeys}} 件検出されました - 分割を検討してください" }, "hardcodedTexts": { "keysHaveSignificantSizeVariations": "キーに大きなサイズのばらつきがあります", "considerReviewingTranslations": "{{lang}} の翻訳を見直すことを検討してください - ベースラインより {{percentageDifference}}% {{comparison}} です", "longTranslationsDetected": "{{lang}} では長さが {{threshold}} 文字を超える翻訳が {{longKeys}} 件検出されました - 分割を検討してください" } }, "usage": { "help_message": "\nI18n 使用解析ツール\n\n使い方: node i18ntk-usage.js [オプション]\n\nオプション:\n --source-dir <dir> スキャンするソースディレクトリ(デフォルト: ./src)\n --i18n-dir <dir> I18n ディレクトリ(デフォルト: ./src/locales)\n --output-report 詳細レポートを生成する\n --output-dir <dir> レポートの出力ディレクトリ(デフォルト: ./reports)\n --help このヘルプを表示する\n\n例:\n node i18ntk-usage.js --output-report\n node i18ntk-usage.js --source-dir=./app --i18n-dir=./locales\n node i18ntk-usage.js --output-dir=./analysis --output-report\n", "source_directory_thissourcedir": "📁 ソースディレクトリ: {sourceDir}", "translationCompletenessTitle": "🌍 翻訳の完全性:", "i18n_directory_thisi18ndir": "🌐 I18n ディレクトリ: {i18nDir}", "failed_to_parse_filename_error": "⚠️ {fileName} の解析に失敗しました: {errorMessage}", "analyzing_source_files": "🔍 ソースファイルを解析中...", "found_files_in_source": "📂 ソースディレクトリで {numFiles} 件のファイルを検出", "found_thisusedkeyssize_unique_": "🎯 一意の使用中キーを {usedKeysSize} 件検出", "total_key_usages_totalkeysfoun": "📊 キーの使用合計: {totalKeysFound}", "loading_available_translation_": "📋 利用可能な翻訳キーを読み込み中...", "found_thisavailablekeyssize_av": "✅ 利用可能なキーを {availableKeysSize} 件検出", "foundTranslationFiles": "✅ {count} 件の翻訳ファイルを検出", "pressEnterToReturnToMenu": "Enter キーを押してメインメニューに戻ります", "notTranslatedKeysTotal": "⚠️ 翻訳されていないキー: {total}", "noSourceFilesFound": "⚠️ ソースディレクトリにファイルが見つかりません。", "reviewNotTranslatedKeys": "💡 翻訳されていないキーを確認してください", "analysisCompletedSuccessfully": "🎉 分析が正常に完了しました!", "detectedSourceDirectory": "検出されたソースディレクトリ: {{sourceDir}}", "detectedI18nDirectory": "検出された I18n ディレクトリ: {{i18nDir}}", "fileInfo": " 📄 {namespace}: {keys} 件のキー", "failedToAnalyzeUsage": "❌ 使用状況の解析に失敗しました: {error}", "failedToAnalyzeFile": "❌ ファイルの解析に失敗しました: {error}", "analyzerInitialized": "アナライザが初期化されました", "analyzerInitFailed": "アナライザの初期化に失敗しました: {error}", "argsParsed": "引数を解析しました", "argsParseFailed": "引数の解析に失敗しました: {error}", "translationDiscoveryError": "翻訳の検出エラー: {error}", "fileTraversalError": "ファイル走査エラー: {error}", "usageAnalysisFailed": "使用状況分析に失敗しました: {error}", "translationFileParseError": "翻訳ファイルの解析エラー: {error}", "translationKeysLoadError": "翻訳キーの読み込みエラー: {error}", "languageCompletenessStats": "{language}: {translated}/{total} ({completeness}% 翻訳済み)", "missingKeysCount": "不足しているキー: {count}", "analyzingTranslationCompleteness": "翻訳の完全性を分析中...", "unusedKeysCount": "未使用のキー: {count}", "usedKeysCount": "使用されたキー: {count}", "availableKeysCount": "利用可能なキー: {count}", "analysisResults": "分析結果:", "checkUsage": { "title": "🔍 I18N 使用状況分析", "message": "プロジェクト全体の i18n キー使用を分析しています。", "help_message": "\nI18n 使用解析ツール\n\n使い方: node i18ntk-usage.js [オプション]\n\nオプション:\n --source-dir <dir> スキャンするソースディレクトリ(デフォルト: ./src)\n --i18n-dir <dir> I18n ディレクトリ(デフォルト: ./src/locales)\n --output-report 詳細レポートを生成する\n --output-dir <dir> レポートの出力ディレクトリ(デフォルト: ./reports)\n --help このヘルプを表示する\n\n例:\n node i18ntk-usage.js --output-report\n node i18ntk-usage.js --source-dir=./app --i18n-dir=./locales\n node i18ntk-usage.js --output-dir=./analysis --output-report\n", "source_directory_thissourcedir": "📁 ソースディレクトリ: {sourceDir}", "i18n_directory_thisi18ndir": "🌐 I18n ディレクトリ: {i18nDir}", "loading_available_translation_": "📋 利用可能な翻訳キーを読み込み中...", "found_thisavailablekeyssize_av": "✅ 利用可能なキーを {availableKeysSize} 件検出", "analyzing_source_files": "🔍 ソースファイルを解析中...", "found_files_in_source": "📂 ソースディレクトリで {numFiles} 件のファイルを検出", "found_thisusedkeyssize_unique_": "🎯 一意の使用中キーを {usedKeysSize} 件検出", "total_key_usages_totalkeysfoun": "📊 キーの使用合計: {totalKeysFound}", "translation_completeness_title": "📊 翻訳の完全性", "language_completeness_stats": " {language}: {translated}/{total} ({completeness}% 翻訳済み)", "n_sample_unused_keys": "\n未使用のキーの例:", "key": "- {key}", "and_unusedkeyslength_5_more": "...およびさらに {count} 件。", "n_recommendations": "\n📋 推奨事項", "consider_removing_unused_trans": "💡 プロジェクトをクリーンに保つために未使用の翻訳を削除することを検討してください。", "n_next_steps": "\n📋 次のステップ", "1_review_the_analysis_results": "1. コンソールまたは生成されたレポートで分析結果を確認します。", "2_run_with_outputreport_for_de": "2. 詳細なレポートを得るには --output-report を付けて実行します。", "3_remove_unused_keys_or_add_mi": "3. 未使用のキーを削除するか、欠落しているキーをソースコードに追加します。", "4_rerun_analysis_to_verify_imp": "4. 改善を確認するために再度分析を実行します。", "usage_analysis_results": "📊 使用状況分析の結果", "source_files_scanned_thisfileu": "スキャンされたソースファイル: {fileUsageSize}", "available_translation_keys_thi": "利用可能な翻訳キー: {availableKeysSize}", "used_translation_keys_thisused": "使用された翻訳キー: {usedKeysSize}", "dynamic_keys_detected_dynamick": "検出された動的キー: {dynamicKeysLength}", "unused_keys_unusedkeyslength": "未使用のキー: {unusedKeysLength}", "missing_keys_missingkeyslength": "不足しているキー: {missingKeysLength}", "noSourceFilesFound": "解析するソースファイルが見つかりませんでした。", "processedFiles": "{totalFiles} ファイルのうち {processedFiles} を処理済み。", "i18nDirectoryNotFound": "I18n ディレクトリが見つかりません: {i18nDir}", "noTranslationLanguagesFound": "翻訳言語が見つかりませんでした。", "failedToAnalyzeFile": "{filePath} の解析に失敗しました: {error}", "failedToAnalyzeLanguage": "{language} の解析に失敗しました: {error}", "translationCompletenessAnalysisFailed": "翻訳の完全性分析に失敗しました: {error}", "n": "" }, "complete": { "configLoadedSuccessfully": "設定が正常に読み込まれました", "configLoadingFailed": "設定の読み込みに失敗しました", "title": "🌍 I18N 翻訳の補完", "separator": "============================================================", "sourceDir": "📁 ソースディレクトリ: {sourceDir}", "sourceLanguage": "🌐 ソース言語: {sourceLanguage}", "dryRunMode": "🧪 ドライランモード - 変更は行われません", "languages": "🌍 利用可能な言語: {languages}", "addingMissingKeys": "➕ 翻訳ファイルに不足しているキーを追加中...", "processing": "🔄 {language} を処理中...", "addedKeys": "✅ {count} 件の不足しているキーを追加しました", "noChangesNeeded": "✅ {language} には変更の必要がありません", "summaryTitle": "📊 補完サマリー", "totalChanges": "📝 合計変更: {totalChanges}", "languagesProcessed": "🌍 処理された言語: {languagesProcessed}", "missingKeysAdded": "➕ 追加された不足キー: {missingKeysAdded}", "nextStepsTitle": "📋 次のステップ", "nextStep1": "1. 使用状況分析を実行:", "nextStep2": " node i18ntk-usage.js --output-report", "nextStep3": "2. 翻訳を検証:", "nextStep4": " node i18ntk-validate.js", "nextStep5": "3. パターンを分析:", "nextStep6": " node i18ntk-analyze.js", "allKeysAvailable": "🎉 すべての翻訳キーが利用可能になりました!", "runWithoutDryRun": "💡 --dry-run を外して実行すると変更が適用されます", "deletingOldReport": "🗑️ 古いレポートを削除中...", "generatingFreshAnalysis": "📊 新しい使用状況分析を生成中...", "couldNotGenerate": "❌ 使用状況分析を生成できませんでした", "reportNotFound": "📋 使用レポートが見つかりません。共通キーを使用しています...", "foundMissingKeys": "📋 使用状況分析から {count} 件の不足キーを検出しました", "couldNotParse": "❌ 使用レポートの解析に失敗しました。共通キーを使用しています..." } }, "validate": { "help_message": "\nI18n 翻訳バリデータ\n\n使い方: node i18ntk-validate.js [オプション]\n\nオプション:\n --source-dir <dir> スキャンするソースディレクトリ (デフォルト: ./src)\n --i18n-dir <dir> I18n ディレクトリ (デフォルト: ./src/locales)\n --output-report 詳細レポートを生成\n --output-dir <dir> レポートの出力ディレクトリ (デフォルト: ./reports)\n --help ヘルプを表示\n\n例:\n node i18ntk-validate.js --output-report\n node i18ntk-validate.js --source-dir=./app --i18n-dir=./locales\n node i18ntk-validate.js --output-dir=./analysis --output-report\n", "title": "🔍 I18n 翻訳バリデータ", "message": "バリデーションプロセスを開始しています…", "sourceDirectory": "📁 ソースディレクトリ: {dir}", "sourceLanguage": "🌍 ソース言語: {sourceLanguage}", "strictMode": "⚙️ 厳密モード: {mode}", "noTargetLanguages": "⚠️ バリデートする対象言語が見つかりませんでした", "validatingLanguages": "🌍 バリデート中の言語: {langs}", "validatingLanguage": "🔍 言語をバリデートしています: {lang}", "filesCount": "📄 ファイル数: {count}", "keysCount": "🔑 キー数: {count}", "missingFilesCount": "📁 欠落ファイル数: {count}", "syntaxErrorsCount": "❌ 構文エラー数: {count}", "translationPercentage": "🎯 翻訳率: {percentage}% ({translated}/{total} キー)", "validationSummary": "📊 バリデーションサマリー", "validation_failed": "❌ バリデーション失敗: {error}", "totalErrors": "❌ 合計エラー数: {count}", "totalWarnings": "⚠️ 合計警告数: {count}", "errorsSection": "❌ エラー", "warningsSection": "⚠️ 警告", "recommendationsSection": "💡 推奨事項", "fixErrorsFirst": "1. まずすべてのエラーを修正", "resolveMissingFilesAndSyntaxErrors": "1. 欠落ファイルと構文エラーを解消", "fixStructuralInconsistencies": "2. 構造的不整合を修正", "completeMissingTranslations": "3. 欠落している翻訳を補完", "rerunValidation": "4. 修正を確認するためにバリデーションを再実行", "addressWarnings": "警告に対処して品質を向上", "reviewWarnings": "警告を確認し、適宜修正", "considerRunningWithStrict": "2. --strict フラグを使用して厳密なバリデーションを検討", "allValidationsPassed": "🎉 すべてのバリデーションが成功しました!", "considerRunningUsageAnalysis": "使用状況分析を実行することを検討: node i18ntk-usage.js", "deletedOldReport": "🗑️ 古いバリデーションレポートを削除しました", "sourceDir": "📁 ソースディレクトリ: {sourceDir}", "i18nDir": "🌐 I18n ディレクトリ: {i18nDir}", "loadingTranslationFiles": "📋 翻訳ファイルを読み込んでいます…", "foundTranslationFilesCount": "✅ {count} 件の翻訳ファイルを検出しました", "analyzingTranslations": "🔍 翻訳を分析中…", "validationCompletedSuccessfully": "🎉 バリデーションが正常に完了しました!", "validationErrorsFound": "⚠️ バリデーションエラーが見つかりました: {count}", "validationWarningsFound": "⚠️ バリデーション警告が見つかりました: {count}", "validationPassed": "✅ エラーなしでバリデーションに合格しました", "validationFailed": "バリデーション失敗: {error}", "startingValidationProcess": "🔍 バリデーションプロセスを開始しています…", "validationProcessCompletedSuccessfully": "✅ バリデーションプロセスが正常に完了しました", "stackTrace": "スタックトレース: {{stack}}", "authenticationFailed": "❌ 認証に失敗しました。アクセスが拒否されました。", "fatalValidationError": "❌ 致命的なバリデーションエラー: {{error}}", "configAccess": "設定をバリデーションのために読み込んでいます", "configValidated": "設定が正常に検証されました", "configError": "設定エラー: {error}", "validatorInit": "I18n バリデータを初期化しています", "validatorInitialized": "I18n バリデータが正常に初期化されました", "validatorInitError": "バリデータ初期化エラー: {error}", "argsParsing": "コマンドライン引数を解析しています", "argsParsed": "コマンドライン引数が正常に解析されました", "argsParseError": "引数解析エラー: {error}", "languagesScan": "利用可能な言語をスキャンしています", "languagesFound": "{count} 言語が見つかりました", "languagesScanError": "言語スキャンエラー: {error}", "filesScan": "{language} のファイルを {count} 件検出", "filesScanError": "ファイルスキャンエラー: {error}", "jsonValidated": "JSON 構文を検証済み: {filePath}", "jsonValidationError": "JSON 構文エラー: {error}", "languageValidation": "言語をバリデートしています: {language}", "languageValidationError": "言語バリデーションエラー: {error}", "fileDeleted": "ファイルを削除しました", "runStarted": "バリデーション実行を開始しました", "runCompleted": "バリデーション実行が正常に完了しました", "runError": "バリデーション実行失敗: {error}", "scriptExecution": "スクリプト実行中", "validationCompleted": "バリデーション完了", "validationError": "バリデーションエラー: {error}", "separator": "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━", "languageHeader": "🌐 言語: {language}", "validationResults": "📊 バリデーション結果", "noErrors": "✅ エラーは見つかりませんでした", "noWarnings": "✅ 警告は見つかりませんでした", "summaryHeader": "📋 全体サマリー", "progressIndicator": "⏳ 処理中…", "completedIndicator": "✅ 完了", "errorIndicator": "❌ エラー", "warningIndicator": "⚠️ 警告", "infoIndicator": "ℹ️ 情報", "sourceDirNotConfigured": "ソースディレクトリが設定されていません", "sourceLanguageNotConfigured": "ソース言語が設定されていません", "translationFunctionNotInitialized": "翻訳関数が適切に初期化されていません", "sourceLanguageDirectoryNotFound": "ソース言語ディレクトリが見つかりませんでした", "specifiedLanguageNotFound": "指定された言語が見つかりませんでした", "noJsonFilesFound": "ソースディレクトリに JSON ファイルが見つかりません: {sourceDir}", "i18nDirectoryNotFound": "I18n ディレクトリが見つかりません: {i18nDir}", "invalidDirectoryPaths": "無効なディレクトリパスが検出されました", "invalidSampleFilePath": "無効なサンプルファイルパス", "failedToCreateSampleTranslationFile": "サンプル翻訳ファイルの作成に失敗しました", "invalidFilePathDetected": "無効なファイルパスが検出されました", "failedToWriteFile": "ファイルの書き込みに失敗しました: {filePath}" }, "adminCli": { "setupPinProtectionTitle": "\n🔐 管理者PIN保護の設定", "setupPinProtectionDescription": "これにより管理操作に4〜6桁のPINが必要になります。", "enablePinProtectionPrompt": "管理者PIN保護を有効にしますか?", "setupCancelled": "管理者PIN保護の設定がキャンセルされました。", "enterPinPrompt": "4〜6桁のPINを入力してください: ", "pinFormatError": "❌ PINは4〜6桁でなければなりません。もう一度お試しください。", "confirmPinPrompt": "PINを確認してください: ", "pinMismatchError": "❌ PINが一致しません。もう一度お試しください。", "pinProtectionEnabledSuccess": "✅ 管理者PIN保護が有効になりました!", "pinRecoveryWarning": "⚠️ PINを忘れないでください。失われた場合は復旧できません。", "setupPinProtectionFailed": "❌ 管理者PIN保護の設定に失敗しました。", "errorSettingUpPin": "❌ 管理者PINの設定中にエラーが発生しました: {message}", "authRequiredForOperation": "\n🔐 次の操作には管理者認証が必要です: {operation}", "invalidPinFormat": "❌ 無効なPIN形式です。PINは4〜6桁である必要があります。", "authenticationSuccess": "✅ 認証に成功しました!", "invalidPinAttemptsRemaining": "❌ 無効なPINです。残り{remaining}回の試行が可能です。", "authenticationFailedAccessDenied": "❌ 認証に失敗しました。アクセスが拒否されました。", "authenticationError": "❌ 認証エラー: {message}", "pinProtectionNotEnabled": "管理者PIN保護は現在有効になっていません。", "disablingPinProtectionTitle": "\n🔓 管理者PIN保護の無効化", "confirmDisablePinProtection": "管理者PIN保護を無効にしてもよろしいですか?", "operationCancelled": "操作がキャンセルされました。", "pinProtectionDisabledSuccess": "✅ 管理者PIN保護が無効化されました。", "disablePinProtectionFailed": "❌ 管理者PIN保護の無効化に失敗しました。", "errorDisablingPinProtection": "❌ 管理者PIN保護の無効化中にエラーが発生しました: {message}", "adminProtectionStatusTitle": "\n🔐 管理者保護のステータス", "statusEnabled": "ステータス: ✅ 有効", "protectionDetails": "保護: 管理操作には4〜6桁のPINが必要", "lockoutDetails": "ロックアウト: 3回の失敗で15分間ロック", "statusDisabled": "ステータス: ❌ 無効", "noAuthRequired": "保護: 認証は不要", "unprotectedRisk": "リスク: 管理操作は保護されていません", "errorCheckingAdminStatus": "❌ 管理者ステータスの確認中にエラーが発生しました: {message}", "authRequired": "🔐 管理者認証が必要です。", "invalidPin": "❌ 無効なPINです。", "authSuccess": "✅ 認証に成功しました!", "adminPinSetupCli": "admin_pin_setup_cli", "adminAuthFailedCli": "admin_auth_failed_cli", "adminAuthDisabledCli": "admin_auth_disabled_cli", "protectedAccess": "保護されたアクセス: 機密操作には管理者認証が必要です。", "enterPin": "管理者PINを入力してください: ", "accessGranted": "アクセスが許可されました。" }, "adminPin": { "setup_title": "🔐 管理者PIN設定", "setup_separator": "============================================================", "setup_description": "機密設定へのアクセスのために4〜6桁のPINを作成します。", "required_for_title": "このPINは以下の操作に必要です:", "required_for_1": " • セキュリティ設定の変更", "required_for_2": " • 高度な設定の変更", "required_for_3": " • デバッグツールへのアクセス", "required_for_4": " • 設定のリセット", "setup_note": "💡 メモ: 入力中はアスタリスク(*)が表示されますが、これはマスク文字です。", "setup_digits_only": " PINには0〜9の数字のみ使用できます。", "invalid_pin_length": "❌ 無効なPINです。4〜6桁の数字で入力してください。", "invalid_pin_example": " 例: 1234 または 567890", "pins_do_not_match": "❌ PINが一致しません。", "setup_success": "✅ 管理者PINが正常に設定されました!", "setup_warning": "⚠️ このPINを安全に保管してください。失われた場合は復旧できません。", "setup_error": "❌ PINの設定中にエラーが発生しました:", "session_expired": "\n⏰ 非アクティブのため、管理者セッションの有効期限が切れました。", "no_pin_set_setting_up": "⚠️ 管理者PINが設定されていません。PINを設定します...", "no_pin_configured_access_denied": "⚠️ 管理者PINが設定されていません。アクセスが拒否されました。", "use_admin_settings_to_set_pin": "💡 まず管理設定からPINを設定してください。", "locked_out": "🔒 失敗が多すぎたため、管理者アクセスはロックされています。", "wait_before_retry": "再試行する前に5分待ってください。", "access_granted": "✅ 管理者アクセスが許可されました。", "incorrect_pin": "❌ PINが間違っています。残り{attempts}回の試行が可能です。", "verify_pin_error": "❌ PINの確認中にエラーが発生しました:", "already_configured": "✅ 管理者PINはすでに設定されています。", "optional_setup_title": "\n🔐 管理者PIN設定(オプション)", "optional_setup_description": "管理者PIN保護を有効にすると、以下の操作でセキュリティが向上します:", "setup_prompt": "管理者PINを設定しますか? (y/N): ", "skipping_setup": "⏭️ 管理者PINの設定をスキップしました。後で設定できます。", "setup_prompt_error": "❌ PIN設定プロンプト中にエラーが発生しました:", "protectedAccess": "保護されたアクセス: 機密操作には管理者認証が必要です。", "enterPin": "管理者PINを入力してください: ", "accessGranted": "アクセスが許可されました。", "invalidPin": "❌ 無効なPINです。もう一度お試しください。", "weak_pin_warning": "⚠️ 警告: このPINは弱いか一般的すぎる可能性があります。", "weak_pin_suggestion": "💡 さまざまな数字を使用した、より強力なPINを検討してください。", "use_anyway_prompt": "それでも使用する場合は「yes」と入力するか、Enterキーを押して別のPINを選択してください: ", "enter_new_pin": "新しい管理者PINを入力してください (4〜6桁): ", "confirm_pin": "管理者PINを確認してください: ", "not_set": "未設定", "pin_display_mask": "####" }, "autorun": { "missingRequiredFile": "必須ファイルが見つかりません: {file}", "runInitializationFirst": "まず初期化を実行してください。", "initializationCheckPassed": "初期化チェックが完了しました。", "runningStep": "ステップを実行中: {stepName}", "commandLabel": "コマンド: {command}", "stepRunning": "ステップ「{stepName}」を実行中...", "stepCompletedWithTime": "ステップ「{stepName}」が{duration}msで完了しました。", "stepCompleted": "ステップ「{stepName}」が完了しました。", "stepFailed": "ステップ「{stepName}」が失敗しました。", "errorLabel": "エラー: {error}", "stepFailedWithError": "ステップ「{stepName}」がエラーで失敗しました: {error}", "requiredStepFailed": "必須ステップが失敗しました。ワークフローを停止します。", "optionalStepFailed": "オプションステップが失敗しました。ワークフローを継続します。", "startingAutoRunWorkflow": "Auto-Runワークフローを開始しています...", "workflowIncludesSteps": "ワークフローには{count}ステップが含まれています:", "stepRequired": "(必須)", "stepOptional": "(オプション)", "startingExecution": "実行を開始します...", "workflowStopped": "ワークフローが停止しました。", "workflowCompleted": "ワークフローが完了しました。", "pressEnterToContinue": "続行するにはEnterキーを押してください...", "runningSelectedSteps": "選択したステップを実行中...", "invalidStepNumber": "無効なステップ番号: {stepNum}", "executionReport": "実行レポート:", "successfulSteps": "成功したステップ: {count}", "failedSteps": "失敗したステップ: {count}", "requiredFailedSteps": "必須ステップの失敗: {count}", "stepDetails": "ステップの詳細:", "errorDetails": "エラーの詳細: {error}", "reportSavedTo": "レポートが保存されました: {path}", "overallStatusSuccess": "成功", "overallStatusFailed": "失敗", "overallStatus": "全体のステータス: {status}", "customSettingsConfiguration": "カスタム設定の構成", "pressEnterForDefaults": "既定値を使用するにはEnterキーを押してください。", "sourceDirPrompt": "ソースディレクトリを入力してください (デフォルト: {default}): ", "sourceLangPrompt": "ソース言語を入力してください (デフォルト: {default}): ", "targetLangsPrompt": "ターゲット言語を入力してください (カンマ区切り, デフォルト: {default}): ", "translationMarkerPrompt": "翻訳マーカーを入力してください (デフォルト: {default}): ", "outputDirPrompt": "レポートの出力ディレクトリを入力してください (デフォルト: {default}): ", "settingsUpdatedSuccessfully": "設定が正常に更新されました!", "errorConfiguringSettings": "設定構成エラー: {error}", "autoRunScriptTitle": "Auto-Runスクリプト", "usageTitle": "使用法:", "runAllSteps": "node i18ntk-autorun.js --all - i18ntk-config.jsonで定義されたすべてのステップを実行", "configureSettingsFirst": "node i18ntk-autorun.js --config - ワークフローの設定を構成", "runSpecificSteps": "node i18ntk-autorun.js --steps <step_numbers> - 特定のステップを実行 (例: --steps 1,3,5)", "showHelp": "node i18ntk-autorun.js --help - ヘルプメッセージを表示", "availableSteps": "利用可能なステップ:", "examplesTitle": "例:", "configExample": "node i18ntk-autorun.js --config", "stepsExample1": "node i18ntk-autorun.js --steps 1,2,3", "stepsExample2": "node i18ntk-autorun.js --all", "configurationComplete": "構成が完了しました。", "runAutoRunCommand": "これでAuto-Runコマンドを実行できます。", "configurationFailed": "構成に失敗しました: {error}", "noValidStepNumbers": "有効なステップ番号が指定されていません。", "autoRunFailed": "Auto-Runが失敗しました: {error}", "stepInitializeProject": "プロジェクトの初期化", "stepAnalyzeTranslations": "翻訳の分析", "stepValidateTranslations": "翻訳の検証", "stepCheckUsage": "使用状況のチェック", "stepCompleteTranslations": "翻訳の完成", "stepAnalyzeSizing": "サイズ分析", "stepGenerateSummary": "要約レポートを生成中...", "stepCompletedIcon": "✅", "stepCompletedWithIcon": "✅ ステップ「{stepName}」が完了しました。", "stepRunningWithNumber": "[{stepNumber}/{totalSteps}] ステップ「{stepName}」を実行中...", "stepFailedIcon": "❌", "translationLoadWarning": "警告: {lang}の翻訳を読み込めませんでした", "configReadError": "{file}の読み込みエラー", "separator": "==================================================" }, "debug": { "title": "🔧 デバッグツール", "separator": "============================================================", "mainDebuggerSystemDiagnostics": "1. システム診断", "_consoleTranslationsCheck": "// 2. コンソール翻訳チェック", "_exportMissingKeys": "// 3. 欠落翻訳キーをエクスポート", "_replaceHardcodedConsole": "// 4. ハードコードされたコンソール文字列を置換", "_consoleKeyChecker": "// 5. コンソールキー検査", "debugLogs": "2. デバッグログ", "backToMainMenu": "0. メインメニューに戻る", "selectOption": "デバッグツールを選択してください: ", "runningDebugTool": "{displayName}を実行中...", "debugToolNotFound": "❌ デバッグツールが見つかりません: {toolName}", "recentDebugLogs": "📄 最新のデバッグログ", "noDebugLogsFound": "❌ デバッグログが見つかりません。", "debugLogsDirectoryNotFound": "❌ デバッグログディレクトリが見つかりません。", "selectLogPrompt": "表示するログファイルを選択してください (1-{count}): ", "invalidChoiceSelectRange": "無効な選択です。範囲内から選択してください。", "contentOf": "{filename}の内容:", "pressEnterToContinue": "続行するにはEnterキーを押してください..." }, "detect_language_mismatches": { "tool_title": "🔍 言語不一致検出ツール", "separator": "=====================================\n", "analyzing_file": "📄 {language}.json を解析中…", "error_analyzing_file": "❌ {filename} の解析エラー: {errorMessage}", "results_title": "📊 言語不一致検出結果", "results_separator": "========================================\n", "summary_title": "📋 サマリー:", "total_files_analyzed": " 解析したファイル数: {totalFiles}", "files_with_mismatches": " 不一致のあるファイル数: {filesWithMismatches}", "total_mismatches_found": " 発見された不一致の総数: {totalMismatches}\n", "no_mismatches_found": "✅ 言語不一致は見つかりませんでした!すべての翻訳が正しい言語で記述されています。\n", "detailed_results_title": "🔍 詳細結果:\n", "file_mismatch_header": "📄 {filename} ({language})", "mismatches_count": " 不一致 {count} 件を発見:\n", "mismatch_details": " {index}. キー: {key}", "mismatch_value": " 値: \"{value}\"", "mismatch_issue": " 問題: {description}", "recommendations_title": "💡 推奨事項:\n", "recommendation_1": "1. [TRANSLATE] とマークされたエントリをすべて確認し翻訳する", "recommendation_2": "2. 言語プレフィックス(例: [DE], [FR])を適切な翻訳に置き換える", "recommendation_3": "3. 英語テキストを対象言語に翻訳する", "recommendation_4": "4. すべてのユーザー向けテキストにネイティブ言語の表現を使用する", "recommendation_5": "5. 修正後にもう一度ツールを実行し、修正を検証する\n", "detailed_report_saved": "📄 詳細レポートを保存しました: {reportPath}\n", "error_saving_report": "❌ レポート保存エラー: {errorMessage}\n", "auto_fix_mode": "🔧 自動修正モード {dryRun}", "auto_fix_separator": "=====================================\n", "fixed_file": "✅ {filename} を修正しました", "auto_fix_summary_title": "\n📊 自動修正サマリー:", "total_fixes_applied": " 適用された修正の総数: {count}", "preview_fixes_title": "\n🔍 修正プレビュー:", "fix_details": " {file}: {key}\n 旧: \"{old}\"\n 新: \"{new}\"\n", "more_fixes": " …さらに{count}件の修正\n", "run_with_apply_fixes": "💡 --apply フラグを付けて実行するとこれらの修正を適用します\n", "error_general": "❌ エラー:", "mainDebuggerSystemDiagnostics": "メインデバッガー / システム診断", "exportMissingKeys": "欠落キーをエクスポート", "replaceHardcodedConsole": "ハードコードされたコンソール文字列を置換", "consoleKeyChecker": "コンソールキー検査", "debugLogs": "デバッグログ", "backToMainMenu": "メインメニューに戻る", "invalidChoiceSelectRange": "❌ 無効な選択です。表示された範囲内の番号を選択してください。", "runningDebugTool": "デバッグツールを実行中: {displayName}", "debugToolNotFound": "デバッグツール '{toolName}' が見つかりません。", "recentDebugLogs": "最新のデバッグログ", "noDebugLogsFound": "デバッグログが見つかりません。", "logEntry": "ログエントリ: {timestamp} - {message}", "debugLogsDirectoryNotFound": "デバッグログディレクトリが見つかりません。" }, "help": { "title": "📊 I18N 管理ヘルプ\n\n", "usage": "使用法: node i18ntk-manage.js [options]\n", "interactiveMode": "\n💡 直接実行するには: node i18ntk-manage.js --command=<command>\n", "showHelp": "\n📖 利用可能なコマンドを見るには: node i18ntk-manage.js --help\n", "availableCommands": "\n📖 利用可能なコマンド:\n", "initProject": "🚀 新しい言語を初期化", "analyzeTranslations": "🔍 翻訳を分析", "validateTranslations": "✅ 翻訳を検証", "checkUsage": "📊 キー使用状況をチェック", "initCommand": " init - 新しい言語を初期化", "analyzeCommand": " analyze - 翻訳を分析", "validateCommand": " validate - 翻訳を検証", "usageCommand": " usage - キー使用状況をチェック", "sizingCommand": " sizing - サイズを分析", "completeCommand": " complete - 翻訳を完了 (100% カバレッジ)", "summaryCommand": " summary - プロジェクトのステータスを表示", "debugCommand": " debug - 翻訳の問題をデバッグ", "menu": { "title": "\n🌐 I18N 管理メニュー\n", "description": "国際化管理のためのインタラクティブメニュー\n", "exit": "\n🚪 終了" }, "commands": { "init": "\n init - 新しい言語を初期化", "analyze": " analyze - 翻訳を分析", "validate": " validate - 翻訳を検証", "usage": " usage - キー使用状況をチェック", "sizing": " sizing - サイズを分析", "complete": " complete - 翻訳を完了 (100% カバレッジ)", "summary": " summary - プロジェクトのステータスを表示", "debug": " debug - 翻訳の問題をデバッグ" }, "options": { "sourceDir": "\n --source-dir <dir> 分析するソースディレクトリ", "output": " --output <file> レポートの出力ファイル", "verbose": " --verbose, -v 詳細情報を表示", "keepReports": " --keep-reports 既存のレポートを保持", "deleteReports": " --delete-reports 既存のレポートを削除", "help": " --help, -h ヘルプを表示" }, "examples": { "title": "\n例:\n", "example1": " node i18ntk-manage.js", "example2": " node i18ntk-manage.js --source-dir ./locales", "example3": " node i18ntk-manage.js --output summary-report.txt", "example4": " node i18ntk-manage.js --verbose", "example5": " node i18ntk-manage.js --source-dir ./locales --output report.json" }, "features": { "initProject": "🚀 新しい言語を初期化", "analyzeTranslations": "🔍 翻訳を分析", "validateTranslations": "✅ 翻訳を検証", "checkUsage": "📊 キー使用状況をチェック", "completeTranslations": "🎯 翻訳を完了 (100% カバレッジ)", "showSizing": "📏 サイズを分析", "runWorkflow": "🔄 フルワークフローを実行", "showStatus": "📋 プロジェクトのステータスを表示", "deleteReports": "🗑️ すべてのレポートを削除", "changeLanguage": "🌍 UI言語を変更", "settings": "⚙️ 設定", "showHelp": "❓ ヘルプ", "debugTools": "🔧 デバッグツール" }, "messages": { "selectOption": "オプションを選択してください:", "invalidOption": "❌ 無効なオプションです。もう一度お試しください。", "operationCompleted": "✅ 操作が正常に完了しました!", "pressEnter": "Enterキーを押して続行してください…", "goodbye": "👋 さようなら!", "unknownCommand": "不明なコマンド: {{command}}", "nonInteractive": "⚠️ 非インタラクティブモードが検出されました。メニューは参照用のみです。" }, "i18n_helper": { "translation_file_not_found": "翻訳ファイルが見つかりません: {translationFile}", "error_loading_translations": "翻訳の読み込みエラー: {errorMessage}", "translation_not_found": "キーに対する翻訳が見つかりません: {key}", "translation_key_not_string": "翻訳キーが文字列ではありません: {key}", "error_reading_locales_directory": "ロケールディレクトリの読み込みエラー: {errorMessage}" } }, "init": { "initializationTitle": "🚀 i18n 管理ツールキット – プロジェクト初期化", "sourceDirectoryLabel": "📁 ソースディレクトリ: {dir}", "sourceLanguageLabel": "🌍 ソース言語: {language}", "detectedI18nFrameworks": "🔍 検出されたi18nフレームワーク: {frameworks}", "existingDirectoriesFound": "📁 既存の翻訳ディレクトリが見つかりました:", "useExistingDirectoryPrompt": "既存のディレクトリを使用しますか? (y/n)", "autoDetectedI18nDirectory": "📂 自動検出されたi18nディレクトリ: {directory}", "initializingProject": "⚙️ プロジェクト設定を初期化中…", "createdSampleTranslationFile": "✅ サンプル翻訳ファイルを作成しました: {file}", "languageSelectionTitle": "🌐 言語設定", "available": "利用可能", "defaultLanguages": "📝 デフォルト言語: {languages}", "enterLanguageCodes": "🎯 対象言語コードを入力してください (カンマ区切り 例: de, es, fr, ru):", "targetLanguages": "🌍 対象言語", "foundSourceFiles": "📄 分析対象として {count} 件のソースファイルを検出", "processingLanguage": "🔄 言語を処理中: {language}", "fileProcessingResult": "✅ {file} を処理しました: {translated}/{total} キー ({percentage}%)", "overallProgress": "📊 全体進捗: {translated}/{total} キー処理済み ({percentage}%)", "initializationSummaryTitle": "📋 初期化サマリー", "languageSummary": "{icon} {name} ({code}): {percentage}% 完了", "languageFiles": " 📄 ファイル数: {count}", "languageKeys": " 🔤 キー: {translated}/{total}", "languageMissing": " ⚠️ 欠落: {count}", "initializationCompletedSuccessfully": "🎉 プロジェクトの初期化が完了しました!", "nextStepsTitle": "🚀 次のステップ", "nextStep1": "1. locales/ ディレクトリの生成された翻訳ファイルを確認する", "nextStep2": "2. 各対象言語の翻訳を追加する", "nextStep3": "3. 'npm run i18ntk' を再実行して翻訳を検証する", "detectedFrameworks": "✅ 検出されたi18nフレームワーク: {frameworks}", "warnings.noPackageJson": "package.json が見つかりません。i18nフレームワークを自動検出できません。", "errorsNoFramework": "i18nフレームワークが検出されませんでした。インストールするか手動で指定してください。", "suggestions": { "noFramework": "i18nフレームワークが検出されませんでした。以下のいずれかの使用を検討してください:", "installFramework": "フレームワークをインストールするには次を実行: npm install <パッケージ名>" }, "frameworks": { "react": "- React i18next (react-i18next)", "vue": "- Vue i18n (vue-i18n)", "i18next": "- i18next (i18next)", "nuxt": "- Nuxt i18n (@nuxtjs/i18n)", "svelte": "- Svelte i18n (svelte-i18n)" }, "continueWithoutI18nPrompt": "i18nフレームワークが検出されません。続行しますか? (y/N): ", "detectedI18nFramework": "検出されたi18nフレームワーク: {frameworks}", "existingDirectoryItem": " {index}. {location}", "usingExistingStructure": "既存の構造を使用: {dir}", "creatingSourceDirectory": "ソースディレクトリを作成中: {dir}", "creatingSourceLanguageDirectory": "ソース言語ディレクトリを作成中: {dir}", "errors": { "sourceDirectoryNotFound": "ソースディレクトリが見つかりません: {dir}", "sourceLanguageDirectoryNotFound": "ソース言語ディレクトリが見つかりません: {dir}", "noJsonFilesInSourceDirectory": "ソースディレクトリにJSONファイルが見つかりません: {dir}", "invalidFilePathDetected": "無効なファイルパスが検出されました", "initializationFailed": "初期化に失敗しました: {error}" }, "processingFile": "{language} の {file} を処理中…", "fileAlreadyExistsMerging": "{file} は既に存在します。新しいキーをマージ中。", "createdNewFile": "新しいファイルを作成しました: {file}", "updatedFile": "ファイルを更新しました: {file}", "skippingExcludedFile": "{language} の {file} は除外リストにあるためスキップされました。" }, "language": { "title": "🌍 言語を変更", "separator": "============================================================", "current": "現在の言語: {language}", "available": "利用可能な言語:", "languageOption": "{index}. {displayName}{current}", "backToMainMenu": "メインメニューに戻る", "prompt": "言語を選択してください (0-8):", "cancelled": "言語変更がキャンセルされました。", "invalid": "無効な選択です。もう一度お試しください。", "changed": "言語が {language} に変更されました", "pressEnterToContinue": "続行するにはEnterキーを押してください…" }, "maintainLanguagePurity": { "workflow_title": "🚀 言語純度維持ワークフロー", "step1_title": "📊 STEP 1: 初期言語純度評価", "step2_title": "\n🔧 STEP 2: 言語不一致の検出と自動修正", "step3_title": "\n🌐 STEP 3: 自動翻訳の適用", "step4_title": "\n✅ STEP 4: 最終言語純度評価", "workflow_error": "❌ ワークフローエラー: {errorMessage}", "running_initial_validation": "初期言語純度検証を実行中…", "initial_assessment_complete": "✅ 初期評価完了: {count} 件の違反を検出\n", "initial_assessment_warnings": "⚠️ 初期評価は警告付きで完了しました\n", "detecting_fixing_mismatches": "言語不一致の検出と修正を実行中…", "detection_complete_applying_fixes": "検出完了。自動修正を適用中…", "mismatch_fixes_complete": "✅ 言語不一致の修正完了: {count} 件の修正を適用\n", "mismatch_fixes_warnings": "⚠️ 言語不一致の修正は警告付きで完了しました\n", "applying_automatic_translations": "自動翻訳を適用中…", "translation_preview_complete": "翻訳プレビュー完了。翻訳を適用中…" }, "menu": { "title": "🌐 I18N 管理メニュー", "separator": "============================================================", "options": { "init": "🚀 新しい言語を初期化", "analyze": "🔍 翻訳を分析", "validate": "✅ 翻訳を検証", "usage": "📊 キー使用状況をチェック", "complete": "🎯 翻訳を完了 (100% カバレッジ)", "sizing": "📏 サイズを分析", "workflow": "🔄 フルワークフローを実行", "status": "📋 プロジェクトステータスを表示", "delete": "🗑️ すべてのレポートを削除", "language": "🌍 UI言語を変更", "settings": "⚙️ 設定", "help": "❓ ヘルプ", "debug": "🔧 デバッグツール", "exit": "🚪 終了" }, "update": "📦 パッケージを更新", "goodbye": "👋 さようなら!", "invalidChoice": "❌ 無効な選択です。0〜13を選択してください。", "returning": "🔄 メインメニューに戻ります…", "invalidOption": "❌ 無効なオプションです。もう一度お試しください。", "nonInteractiveModeWarning": "⚠️ 非対話モードが検出されました。メニューは参照用です。", "useDirectExecution": "💡 直接実行するには: node main/i18ntk-manage.js --command=<command>", "useHelpForCommands": "📖 コマンドを見るには: node main/i18ntk-manage.js --help", "returnToMainMenu": "Enterキーでメインメニューに戻ります。", "pressEnterToContinue": "Enterキーを押して続行してください…", "selectOptionPrompt": "オプションを選択してください:", "selectDebugToolPrompt": "デバッグツールを選択してください:", "selectLogPrompt": "ログファイルを選択してください (1-{count}):", "autoDetectedI18nDirectory": "📂 自動検出されたi18nディレクトリ: {directory}", "executingCommand": "コマンドを実行中: {command}", "unknownCommand": "不明なコマンド: {command}", "languageOption": " {{index}}. {{displayName}}{{current}}", "debugTools": { "1": "ログファイル分析", "2": "翻訳キー使用状況分析", "3": "翻訳完了度分析", "4": "翻訳フォーマット分析", "5": "翻訳タイプ分析", "6": "翻訳構造分析" }, "native_translations": { "exact_translation_found": " ✅ {keyPath}: {value}", "no_exact_translation": " ⚠️ '{keyPath}' の完全一致翻訳が見つかりません。類似キー:", "similar_key": " - {key} ({similarity}% 一致)", "processing_language_files": "🔄 {count} 件の言語ファイルを処理中…\n", "file_not_found": "⚠️ ファイルが見つかりません: {file}", "processing_translations": "🌍 {code} の翻訳を処理中…", "backup_created": "📋 バックアップを作成しました: {filename}", "error_parsing_json": "❌ {code}.json の解析エラー: {errorMessage}", "existing_keys_found": "📊 {code}: {count} 件の既存キーを検出", "error_writing_json": "❌ {code}.json の書き込みエラー: {errorMessage}", "translations_replaced": "📊 {code}: {count} 件の翻訳を置換", "translation_replacement_complete": "\n✅ 翻訳置換が完了しました!", "total_replacements": "📊 置換総数: {count}", "dry_run_mode": "\n⚠️ DRY RUNモード - ファイルは変更されません", "tool_title": "🌍 ネイティブ翻訳リプレーサ v1.5.3", "tool_separator": "======================================\n", "dry_run_warning": "⚠️ DRY RUNモードで実行中 - ファイルは変更されません\n", "error_during_replacement": "❌ 翻訳置換中にエラーが発生しました:" } }, "operations": { "completed": "✅ 操作が正常に完了しました!", "deleteReportsTitle": "🗑️ レポート & ログの削除", "scanningForFiles": "🔍 削除対象ファイルをスキャン中…", "noFilesFoundToDelete": "✅ 削除対象ファイルはありません。", "availableDirectories": "📁 利用可能なディレクトリ:", "allDirectories": "すべてのディレクトリ", "cancelOption": "キャンセル", "cancelReportOption": "キャンセル / メニューに戻る", "invalidSelection": "❌ 無効な選択です。", "foundFilesInSelectedDirectories": "📊 選択されたディレクトリで{count} 件のファイルを検出:", "deletionOptions": "🗑️ 削除オプション:", "deleteAllFiles": "すべてのファイルを削除", "keepLast3Files": "最後の3ファイルを保持", "keepLast5Files": "最後の5ファイルを保持", "noFilesToDelete": "✅ 削除するファイルはありません。", "filesToDeleteCount": "📋 削除予定のファイル数: {count}", "filesToKeepCount": "📋 保持するファイル数: {count}", "confirmDeletion": "⚠️ これらのファイルを削除してもよろしいですか? (y/N):", "deletedFile": "✅ 削除: {filename}", "failedToDeleteFile": "❌ {filename} の削除に失敗しました: {error}", "cancelled": "❌ 操作がキャンセルされました。", "init": { "title": "🚀 新しい言語を初期化" }, "usage": { "title": "📊 キー使用状況をチェック" }, "analyze": { "title": "🔍 翻訳を分析" }, "validate": { "title": "✅ 翻訳を検証" }, "settings": { "title": "⚙️ 設定管理", "separator": "============================================================" }, "complete": { "deletingOldReport": "🗑️ 古い使用状況レポートを削除中", "generatingFreshAnalysis": "🔄 新しい使用状況分析を生成中…", "couldNotGenerate": "⚠️ 使用状況分析を生成できませんでした。共通の欠落キーを使用します。", "reportNotFound": "⚠️ 使用状況レポートが見つかりません。新しい分析を生成中…", "foundMissingKeys": "🔍 使用状況分析で{count} 件の欠落キーを検出", "couldNotParse": "⚠️ 使用状況レポートを解析できませんでした。共通の欠落キーを使用します。", "title": "🎯 翻訳の完了", "separator": "============================================================", "sourceDir": "📁 ソースディレクトリ: {sourceDir}", "sourceLanguage": "🔤 ソース言語: {sourceLanguage}", "dryRunMode": "🧪 DRY RUNモード - ファイルは変更されません", "languages": "🎯 対象言語: {languages}", "addingMissingKeys": "➕ 欠落キーを翻訳ファイルに追加中…", "processing": "🔄 {language} を処理中…", "addedKeys": "✅ {count} 件のキーを追加しました", "changeDetails": "📝 {file}: {key}", "noChangesNeeded": "✅ {language} に変更は必要ありません", "summaryTitle": "📊 完了サマリー", "totalChanges": "📝 総変更数: {totalChanges}", "languagesProcessed": "🌐 処理済み言語数: {languagesProcessed}", "missingKeysAdded": "➕ 追加された欠落キー: {missingKeysAdded}", "nextStepsTitle": "📋 次のステップ", "nextStep1": "1. 使用状況分析を実行:", "nextStep2": "2. 翻訳を検証:", "nextStep3": "3. 完了度を分析:", "allKeysAvailable": "🎉 すべての翻訳キーが利用可能になりました!", "runWithoutDryRun": "💡 --dry-runなしで実行して変更を適用", "pressEnterToContinue": "Enterキーを押して続行してください…" }, "updatePackage": { "title": "📦 i18n-toolkit パッケージを更新", "description": "npmの最新バージョンにi18n-toolkitパッケージを更新します。", "command": "実行コマンド", "confirm": "更新を実行してもよろしいですか? (y/N): ", "updating": "パッケージを更新中…しばらくお待ちください。", "success": "✅ i18n-toolkit が正常に更新されました!", "error": "❌ i18n-toolkit の更新に失敗しました", "cancelled": "❌ 更新がキャンセルされました。" } }, "sec