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,159 lines 103 kB
{ "meta": { "version": "1.5.3", "consolidated": "2025-08-06T14:36:37.519Z", "sourceFiles": 256 }, "common": { "welcome": "欢迎", "hello": "你好", "goodbye": "再见", "yes": "是", "no": "否", "save": "保存", "cancel": "取消", "delete": "删除", "edit": "编辑", "loading": "加载中...", "offlineTitle": "您当前处于离线状态", "offlineMessage": "请检查您的网络连接", "tryReconnect": "尝试重新连接", "logout": "退出登录", "login": "登录", "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": "\n国际化翻译分析器\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. 添加缺失翻译或删除未使用的翻译。", "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": "开始国际化大小分析...", "source_directory": "源目录: {{sourceDir}}", "found_languages": "找到语言: {{languages}}", "analyzing_file_sizes": "正在分析文件大小...", "analyzing_translation_content": "正在分析翻译内容...", "generating_size_comparisons": "正在生成大小比较...", "no_languages_found_for_comparison": "未找到用于比较的语言", "sizing_analysis_results": "国际化大小分析结果", "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} 有 ${data.longKeys} 个翻译超过100个字符 - 考虑拆分它们", "report_saved_to": "报告已保存到: {{reportPath}}", "considerReviewingTranslations": "考虑检查 ${lang} 翻译 - 它们比基准长 ${data.percentageDifference}%", "csv_report_saved_to": "CSV报告已保存到: {{csvPath}}", "no_translation_files_found": "未找到翻译文件", "analysis_completed": "分析在{{duration}}毫秒内完成", "analysis_failed": "分析失败: {{errorMessage}}", "failed_to_parse_language_error": "无法解析{{language}}翻译: {{errorMessage}}", "recommendations": { "keys_have_significant_size_variations": "键有显著的大小变化", "consider_reviewing_translations": "考虑检查 {{lang}} 翻译 - 它们比基准 {{comparison}} {{percentageDifference}}%", "long_translations_detected": "{{lang}} 有 {{longKeys}} 个翻译超过 {{threshold}} 个字符 - 考虑拆分它们" }, "hardcodedTexts": { "keysHaveSignificantSizeVariations": "键有显著的大小变化", "considerReviewingTranslations": "考虑检查 {{lang}} 翻译 - 它们比基准 {{comparison}} {{percentageDifference}}%", "longTranslationsDetected": "{{lang}} 有 {{longKeys}} 个翻译超过 {{threshold}} 个字符 - 考虑拆分它们" } }, "usage": { "help_message": "\n国际化使用分析器\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": "🔍 国际化使用分析", "message": "正在分析项目中国际化键的使用情况。", "help_message": "\n国际化使用分析器\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": "已处理 {processedFiles} / {totalFiles} 个文件。", "i18nDirectoryNotFound": "未找到 I18n 目录: {i18nDir}", "noTranslationLanguagesFound": "未找到翻译语言。", "failedToAnalyzeFile": "分析文件 {filePath} 失败: {error}", "failedToAnalyzeLanguage": "分析语言 {language} 失败: {error}", "translationCompletenessAnalysisFailed": "翻译完整性分析失败: {error}", "n": "" }, "complete": { "configLoadedSuccessfully": "配置加载成功", "configLoadingFailed": "配置加载失败", "title": "🌍 国际化翻译完成", "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": "❌ 禁用管理员保护时出错:{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": " 仅接受数字0-9作为PIN码数字。", "invalid_pin_length": "❌ 无效的PIN码。必须是4-6位数字(仅数字0-9)。", "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": "正在启动自动运行工作流...", "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": "自动运行脚本", "usageTitle": "用法:", "runAllSteps": "node i18ntk-autorun.js --all - 运行 i18ntk-config.json 中定义的所有步骤", "configureSettingsFirst": "node i18ntk-autorun.js --config - 配置工作流设置", "runSpecificSteps": "node i18ntk-autorun.js --steps <步骤编号> - 运行特定步骤(例如:--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": "现在您可以运行自动执行命令。", "configurationFailed": "配置失败:{error}", "noValidStepNumbers": "未提供有效的步骤编号。", "autoRunFailed": "自动运行失败:{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": "📊 国际化管理帮助\n\n", "usage": "用法:node i18ntk-manage.js [选项]\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🌐 国际化管理菜单\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": "🌍 切换界面语言", "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": "读取 locales 目录时出错:{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}", "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}", "packageJsonRead": "读取 package.json 时出错:{error}", "noFramework": "未检测到 i18n 框架,请手动安装或指定。" }, "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": "📊 第1步:初始语言纯洁度评估", "step2_title": "\n🔧 第2步:检测并自动修复语言不匹配", "step3_title": "\n🌐 第3步:应用自动翻译", "step4_title": "\n✅ 第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": "🌐 国际化管理菜单", "separator": "============================================================", "options": { "init": "🚀 初始化新语言", "analyze": "🔍 分析翻译", "validate": "✅ 验证翻译", "usage": "📊 检查键使用情况", "complete": "🎯 完成翻译(100% 覆盖)", "sizing": "📏 分析大小差异", "workflow": "🔄 运行完整工作流", "status": "📋 显示项目状态", "delete": "🗑️ 删除全部报告", "language": "🌍 切换界面语言", "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⚠️ 试运行模式 - 未修改任何文件", "tool_title": "🌍 本地化自动翻译工具 v1.5.3", "tool_separator": "======================================\n", "dry_run_warning": "⚠️ 正在试运行模式 - 不会修改文件\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": "🧪 试运行模式 - 不会修改任何文件", "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": "这将把 i18n-toolkit 包更新到 npm 上可用的最新版本。", "command": "运行命令", "confirm": "确定要继续更新吗?(y/N):", "updating": "正在更新软件包…这可能需要一些时间。", "success": "✅ i18n-toolkit 更新成功!", "error": "❌ 更新 i18n-toolkit 失败", "cancelled": "❌ 更新已取消。" } }, "security": { "pathValidationFailed": "路径验证失败", "invalidInputType": "无效的输入类型", "pathTraversalAttempt": "路径遍历尝试", "pathValidated": "✅ 路径验证成功", "pathValidationError": "路径验证错误", "fileTooLarge": "安全:文件过大:{filePath}", "fileReadError": "安全:读取文件出错:{errorMessage}", "contentTooLargeForFile": "安全:内容过大,无法写入文件:{filePath}", "fileWriteError": "安全:写入文件出错:{errorMessage}", "jsonStringTooLarge": "安全:JSON 字符串过大", "jsonParseError": "安全:JSON 解析错误:{errorMessage}", "inputContainsDisallowedCharacters": "安全:输入包含不允许的字符", "unknownCommandArgument": "安全:未知命令参数:{key}", "unknown_command_argument": "安全:未知命令参数:{key}", "unknownConfigKey": "安全:未知配置键:{key}", "unknown_config_key": "安全:未知配置键:{key}", "securityAlert": "[安全警报] {timestamp}:{event}", "contentTooLarge": "安全:内容过大,无法写入文件:{validatedPath}", "inputDisallowedCharacters": "安全:输入包含不允许的字符", "unknownCommandArg": "未知命令参数", "logMessage": "[安全 {level}] {timestamp}:{event}", "alertMessage": "[安全警报] {timestamp}:{event}", "securityWarning": "[安全警告] {timestamp}:{event}", "json_parse_error": "安全:JSON 解析错误:{errorMessage}" } }, "settings-cli": { "settings": { "mainMenu": { "title": "主菜单:", "uiSettings": "界面设置", "uiSettingsDesc": "语言、主题和界面选项", "directorySettings": "目录设置", "directorySettingsDesc": "源目录和输出目录路径", "scriptDirectorySettings": "脚本目录设置", "scriptDirectorySettingsDesc": "各脚本操作的目录路径", "processingSettings": "处理设置", "processingSettingsDesc": "批量大小、并发和性能", "advancedSettings": "高级设置", "advancedSettingsDesc": "验证、日志和专家选项", "viewAllSettings": "查看所有设置", "viewAllSettingsDesc": "显示当前配置", "importExport": "导入/导出", "importExportDesc": "备份和恢复设置", "resetToDefaults": "重置为默认值", "resetToDefaultsDesc": "恢复出厂设置", "reportBug": "报告错误", "reportBugDesc": "在 GitHub 提交问题报告", "saveChanges": "保存更改", "saveChangesDesc": "将当前设置保存到文件", "updatePackage": "更新软件包", "updatePackageDesc": "通过 npm 更新 i18n-toolkit 包", "help": "帮助", "helpDesc": "显示详细帮助信息", "quit": "退出", "quitDesc": "退出设置(如有更改则提示保存)", "unsavedChangesWarning": "⚠️ 您有未保存的更改", "saveChangesBeforeQuit": "是否在退出前保存更改?(y/N):", "selectOption": "请选择一个选项:", "goodbyeMessage": "感谢使用 i18n 设置管理器!" }, "goodbyeMessage": "感谢使用 i18n 设置管理器!", "relativePathHint": "请使用相对路径(例如:./src/i18n/locales)", "currentDirectory": "当前项目目录" }, "settings_manager": { "error_loading_settings": "❌ 加载设置时出错:", "error_saving_settings": "❌ 保存设置时出错:", "error_setting_value": "❌ 设置值时出错:", "missing_required_setting": "❌ 缺少必需的设置:{prop}", "invalid_language": "❌ 无效的语言:{language}", "invalid_source_language": "❌ 无效的源语言:{sourceLanguage}", "default_languages_must_be_array": "❌ defaultLanguages 必须是数组", "invalid_date_format": "❌ 无效的日期格式:{dateFormat}。有效格式:{validFormats}", "invalid_time_format": "❌ 无效的时间格式:{timeFormat}。有效格式:{validFormats}", "notifications_types_must_be_object": "❌ notifications.types 必须是对象", "exclude_files_must_be_array": "❌ excludeFiles 必须是数组", "exclude_dirs_must_be_array": "❌ excludeDirs 必须是数组", "include_extensions_must_be_array": "❌ includeExtensions 必须是数组", "invalid_batch_size": "❌ 无效的批量大小。必须为正数", "invalid_max_concurrent_files": "❌ 无效的最大并发文件数。必须为正数", "invalid_sizing_threshold": "❌ 无效的大小阈值。必须为正数", "invalid_timeout": "❌ 无效的超时。必须至少为 1000 毫秒", "invalid_sizing_format": "❌ 无效的大小格式:{sizingFormat}。有效格式:{validFormats}", "error_validating_settings": "❌ 验证设置时出错:", "backup_created": "📋 已创建备份:{backupPath}", "error_creating_backup": "❌ 创建备份时出错:", "language_not_supported": "❌ 语言“{language}”不受支持。可用语言:{availableLanguages}", "ui_language_set": "🌍 界面语言已设置为:{language}" } }, "settings": { "title": "⚙️ 设置管理", "separator": "============================================================", "goodbyeMessage": "感谢使用 i18ntk 设置管理器!", "relativePathHint": "请使用相对路径(例如:./src/i18n/locales)", "currentDirectory": "当前项目目录", "pin": "PIN:", "mainMenu": { "title": "主菜单:", "uiSettings": "界面设置", "uiSettingsDesc": "语言、主题和界面选项", "directorySettings": "目录设置", "directorySettingsDesc": "源目录和输出目录路径", "processingSettings": "处理设置", "processingSettingsDesc": "批量大小、并发和性能", "advancedSettings": "高级设置", "advancedSettingsDesc": "验证、日志和专家选项", "viewAllSettings": "查看所有设置", "viewAllSettingsDesc": "显示当前配置", "importExport": "导入/导出", "updatePackage": "更新软件包", "updatePackageDesc": "通过 npm 更新 i18n-toolkit 包", "importExportDesc": "备份并恢复设置", "resetToDefaults": "重置为默认值", "resetToDefaultsDesc": "恢复出厂设置", "reportBug": "报告错误", "reportBugDesc": "在 GitHub 提交问题报告", "saveChanges": "保存更改", "saveChangesDesc": "将当前设置保存到文件", "help": "帮助", "helpDesc": "显示详细帮助信息", "quit": "退出", "quitDesc": "退出设置(如有更改则提示保存)", "unsavedChangesWarning": "⚠️ 您有未保存的更改", "saveChangesBeforeQuit": "是否在退出前保存更改?(y/N):", "selectOption": "请选择一项:", "selectSettingPrompt": "选择要编辑的设置(或输入 'b' 返回):", "enterNewValue": "输入新值:", "updatedSuccessfully": "{setting} 更新成功!", "scriptDirectorySettings": "脚本目录设置", "scriptDirectoryDesc": "为各脚本指定自定义目录", "scriptDirectorySettingsDesc": "可为每个脚本设置自定义目录;如不设置,将使用全局设置。", "securitySettings": "安全设置", "securitySettingsDesc": "管理员 PIN 及其他安全选项" }, "updatePackage": { "title": "更新软件包", "description": "通过 npm 更新 i18n-toolkit