UNPKG

i18ntk

Version:

i18n Tool Kit - Zero-dependency internationalization toolkit for setup, scanning, analysis, validation, auto translation, fixing, reporting, and runtime translation loading.

806 lines 254 kB
{ "meta": { "version": "4.7.0", "updated": "2026-07-07", "lang": "th" }, "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}", "errors": { "errors": "ข้อผิดพลาด:", "genericError": "❌ ข้อผิดพลาด: {error}", "initializationFailed": "❌ การเริ่มต้นล้มเหลว: {error}", "initializationCancelled": "❌ การเริ่มต้นถูกยกเลิกโดยผู้ใช้", "translationKeyNotFound": "ไม่พบคีย์การแปล: {key}", "sourceDirectoryNotFound": "ไม่พบไดเรกทอรีต้นทาง: {directory}", "configLoadingFailed": "การโหลดการกำหนดค่าล้มเหลว", "invalidSourceDirectory": "ไดเรกทอรีต้นทางไม่ถูกต้อง: {directory}", "securityViolation": "ตรวจพบการละเมิดความปลอดภัย", "authenticationFailed": "การตรวจสอบสิทธิ์ล้มเหลว", "sourceEqualsI18nWarn": "⚠️ sourceDir เท่ากับ i18nDir ({sourceDir}). ถอยกลับไป. {fallback} สำหรับการสแกนแหล่งที่มา" }, "errorGeneratingStatusSummary": "เกิดข้อผิดพลาดในการสร้างสรุปสถานะ: {error}", "errorRunningDebugTool": "เกิดข้อผิดพลาดในการเรียกใช้เครื่องมือแก้ไขข้อบกพร่อง '{displayName}': {error}", "errorReadingDebugLogs": "เกิดข้อผิดพลาดในการอ่านบันทึกการแก้ไขข้อบกพร่อง: {error}", "errorAnalyzingLogFile": "เกิดข้อผิดพลาดในการวิเคราะห์ไฟล์บันทึก: {error}", "errorAnalyzingTranslationKeys": "เกิดข้อผิดพลาดในการวิเคราะห์คีย์การแปล: {error}", "errorAnalyzingTranslationCompleteness": "เกิดข้อผิดพลาดในการวิเคราะห์ความสมบูรณ์ของการแปล: {error}", "analyzingTranslationCompleteness": "กำลังวิเคราะห์ความสมบูรณ์ของการแปลในทุกภาษา...", "i18nDirectoryNotFound": "⚠️ ไม่พบไดเรกทอรี i18n: {i18nDir}", "translationCompletenessAnalysisFailed": "⚠️ การวิเคราะห์ความสมบูรณ์ของการแปลล้มเหลว: {error}", "failedToAnalyzeLanguage": "❌วิเคราะห์ภาษาไม่สำเร็จ {language}: {error}", "errorReadingI18nDirectory": "❌ เกิดข้อผิดพลาดในการอ่านไดเรกทอรี i18n:", "languageCompletenessTitle": "📈 ความสมบูรณ์ในการแปลตามภาษา", "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": "สำเร็จแล้ว!", "warnings": "คำเตือน:", "completedKeys": "กุญแจที่เสร็จสมบูรณ์:", "missingKeys": "คีย์ที่หายไป:", "partialKeys": "คีย์บางส่วน:", "home": "บ้าน", "settings": "การตั้งค่า", "startingSettings": "🎛️ กำลังเริ่มการตั้งค่า CLI...", "confirm": "ยืนยัน", "errorExiting": "เกิดข้อผิดพลาดขณะออก" }, "errors": { "invalidOption": "❌ ตัวเลือกไม่ถูกต้อง: {option}. โปรดลองอีกครั้ง", "readlineClosed": "สตรีมอินพุตปิดอยู่ ทำงานในโหมดไม่โต้ตอบ", "noPackageJson": "ไม่พบ package.json ไม่สามารถตรวจจับเฟรมเวิร์ก i18n อัตโนมัติได้", "noI18nDir": "ไม่พบไดเร็กทอรี i18n ในรูทโปรเจ็กต์", "noI18nConfig": "ไม่พบไฟล์การกำหนดค่า i18n ในรูทโปรเจ็กต์", "errorReadingDebugLogs": "เกิดข้อผิดพลาดในการอ่านบันทึกการแก้ไขข้อบกพร่อง: {error}" }, "scanner": { "help_message": "การใช้งานเครื่องสแกนข้อความ I18n: โหนด i18ntk-scanner.js [ตัวเลือก] ตัวเลือก: --source-dir <dir> ไดเร็กทอรีต้นทางที่จะสแกน (ค่าเริ่มต้น: ./src) --output <file> ไฟล์เอาต์พุตสำหรับผลการสแกน (ค่าเริ่มต้น: ./i18ntk-scanner-report.json) --framework <name> กรอบการทำงานเพื่อกำหนดเป้าหมาย (react, vue, เชิงมุม, วานิลลา) --patterns <patterns> รูปแบบ regex ที่กำหนดเอง (คั่นด้วยเครื่องหมายจุลภาค) --include-tests รวมไฟล์ทดสอบในการสแกน --exclude-dirs <dirs> ไดเร็กทอรีที่จะยกเว้น (คั่นด้วยเครื่องหมายจุลภาค) --help แสดงความช่วยเหลือนี้ ตัวอย่าง: node i18ntk-scanner.js --source-dir=./src --framework=react node i18ntk-scanner.js --patterns 'console.log\\((.*?)\\)' --include-tests node i18ntk-scanner.js --output=./scan-results.json", "help_options": { "source_dir": "ไดเรกทอรีต้นทางที่จะสแกนหาปัญหา i18n", "output_dir": "ไดเร็กทอรีสำหรับรายงานการสแกนและผลลัพธ์", "framework": "กรอบงานเป้าหมาย (react, vue, เชิงมุม, วานิลลา)", "patterns": "รูปแบบ regex ที่กำหนดเองสำหรับการตรวจจับข้อความ", "exclude": "รูปแบบไฟล์ที่จะแยกออกจากการสแกน", "output_report": "สร้างรายงานการสแกนโดยละเอียด", "min_length": "ความยาวข้อความขั้นต่ำที่ต้องพิจารณาในการแปล", "max_length": "ความยาวข้อความสูงสุดที่ต้องพิจารณาในการแปล", "include_tests": "รวมไฟล์ทดสอบในกระบวนการสแกน" }, "starting": "🔍 การเริ่มเครื่องสแกนข้อความสำหรับเฟรมเวิร์ก: {framework}", "sourceDirectory": "📁 กำลังสแกนไดเรกทอรี: {sourceDir}", "frameworkDetected": "🎯 กรอบงานที่ตรวจพบ: {framework}", "scanningFiles": "📊 การสแกน {fileCount} ไฟล์...", "foundTexts": "⏩ พบแล้ว {textCount} ข้อความที่ต้องการการแปล", "generatingReport": "📊 กำลังสร้างรายงานโดยละเอียด...", "reportSaved": "💾 บันทึกรายงานการสแกนไปที่: {reportPath}", "noTextsFound": "✅ ไม่พบข้อความภาษาอังกฤษแบบฮาร์ดโค้ด", "scanComplete": "🎉 สแกนสำเร็จแล้ว!", "analysisTitle": "🔍 การวิเคราะห์การสแกนการแปล", "fileSummary": "📄 {file}: {count} พบข้อความ", "textLocation": "📍 ไลน์ {line}: {text}", "foundText": "พบ {count} อินสแตนซ์ข้อความฮาร์ดโค้ดที่เป็นไปได้", "context": "⏩ บริบท: {context}", "severity": "⚠️ความรุนแรง: {severity}", "recommendation": "💡 คำแนะนำ: {recommendation}", "welcome": { "title": "🎯 ยินดีต้อนรับสู่เครื่องสแกนข้อความ!", "description": "เครื่องมือนี้จะสแกนซอร์สโค้ดของคุณเพื่อหาข้อความภาษาอังกฤษแบบฮาร์ดโค้ดที่อาจต้องมีการแปล" }, "frameworkPrompt": { "title": "🎯 เลือกกรอบงาน", "available": "เฟรมเวิร์กที่ใช้ได้: react, vue, เชิงมุม, vanilla", "description": "ป้อนประเภทเฟรมเวิร์ก (หรือกด Enter เพื่อการตรวจจับอัตโนมัติ):", "input": "กรอบ:" }, "directoryPrompt": { "title": "📁 เลือกไดเรกทอรีต้นทาง", "current": "ไดเรกทอรีปัจจุบัน: {dir}", "description": "ป้อนไดเร็กทอรีที่จะสแกน (หรือกด Enter เพื่อดูรายการปัจจุบัน):", "input": "ไดเรกทอรี:" }, "options": { "includeTests": "รวมไฟล์ทดสอบ?", "excludeDirs": "ไดเรกทอรีที่จะยกเว้น (คั่นด้วยเครื่องหมายจุลภาค):", "customPatterns": "รูปแบบที่กำหนดเองที่จะสแกนหา (regex):" }, "reportGenerated": "รายงานการสแกนที่สร้างขึ้น: {path}" }, "fixer": { "help_message": "การใช้งานผู้ให้บริการการแปล I18n: โหนด i18ntk-fixer.js [ตัวเลือก] ตัวเลือก: --source-dir <dir> ไดเรกทอรีต้นทางที่จะสแกน (ค่าเริ่มต้น: ./locales) --ภาษา <langs> รายการภาษาที่คั่นด้วยเครื่องหมายจุลภาคเพื่อแก้ไข --markers <markers> เครื่องหมายคั่นด้วยเครื่องหมายจุลภาคเพื่อถือเป็นข้อมูลที่ไม่ได้แปล --no-backup ข้ามการสร้างการสำรองข้อมูลอัตโนมัติ --help แสดงความช่วยเหลือนี้ ตัวอย่าง: โหนด i18ntk-fixer.js --ภาษา de,fr โหนด i18ntk-fixer.js --source-dir=./locales --markers NOT_TRANSLATED โหนด i18ntk-fixer.js --no-backup", "starting": "🚀 เริ่มการแก้ไขการแปลสำหรับภาษาต่างๆ: {languages}", "sourceDirectory": "📁 ไดเรกทอรีต้นทาง: {sourceDir}", "sourceLanguage": "🔤 ภาษาต้นฉบับ: {sourceLanguage}", "markers": "🏷️ เครื่องหมายที่ต้องแก้ไข: {markers}", "scanningLanguage": "📊 การสแกน {language}...", "noLanguages": "❌ไม่มีการระบุภาษาในการซ่อม", "allComplete": "🎉 แปลทั้งหมดเรียบร้อยแล้ว!", "fullReportSaved": "📊 รายงานฉบับเต็มบันทึกไว้ที่: {reportPath}", "reviewReport": "โปรดตรวจสอบรายงานก่อนดำเนินการต่อ", "backupCreated": "💾 สร้างการสำรองข้อมูลเรียบร้อยแล้ว", "applyingFixes": "🔄 กำลังใช้การแก้ไข...", "fixingComplete": "✅ แก้คำแปลเสร็จ!", "operationCancelled": "❌ การดำเนินการถูกยกเลิกโดยผู้ใช้", "analysisTitle": "🔍 การวิเคราะห์การแก้ไขการแปล", "analysisSeparator": "==================================================", "totalIssues": "ปัญหาทั้งหมดที่พบ: {totalIssues}", "missingTranslations": "คำแปลที่ขาดหายไป: {missing}", "placeholderTranslations": "การแปลตัวยึดตำแหน่ง: {placeholder}", "noIssues": "✅ไม่พบปัญหาใดๆ การแปลทั้งหมดเสร็จสมบูรณ์แล้ว", "detailedIssues": "📋 DETAILED ISSUES:", "detailedSeparator": "--------------------------------------------------", "filePath": "📄 {file} → {path}", "missingKey": "❌ ขาดหายไป: {source} → {new}", "placeholderKey": "⚠️ ตัวยึดตำแหน่ง: \"{target}\" → \"{new}\"", "moreIssues": "... และ {count} ปัญหาเพิ่มเติม ตรวจสอบไฟล์รายงานเพื่อดูรายละเอียดทั้งหมด", "confirmationTitle": "🤔 คุณต้องการดำเนินการแก้ไขเหล่านี้ต่อหรือไม่?", "confirmationOptions": "ตัวเลือก:", "optionYes": "y - ใช่ ใช้การแก้ไขทั้งหมด", "optionNo": "n - ไม่ ยกเลิกการดำเนินการ", "optionShow": "s - แสดงปัญหาโดยละเอียด", "choicePrompt": "ทางเลือกของคุณ (มี/ไม่มี/วินาที):", "nonInteractiveMode": "⚡ ตรวจพบโหมดที่ไม่โต้ตอบ - ใช้การแก้ไขโดยอัตโนมัติ...", "reportGenerated": "📊 สร้างรายงานผู้ให้บริการแล้ว: {path}", "summary": "สรุปผู้ให้บริการ:", "welcome": { "title": "🎯 ยินดีต้อนรับสู่ผู้ให้บริการแปล!", "description": "เครื่องมือนี้จะช่วยคุณแก้ไขคำแปลและตัวยึดตำแหน่งที่เสียหายในไฟล์สถานที่ของคุณ" }, "markerPrompt": { "title": "🏷️ กำหนดค่าเครื่องหมายตัวยึดตำแหน่ง", "description": "ป้อนเครื่องหมายที่ระบุข้อความที่ไม่ได้แปล (คั่นด้วยเครื่องหมายจุลภาค):", "currentDefaults": "เครื่องหมายเริ่มต้น: {markers}", "input": "เครื่องหมาย (หรือกด Enter เพื่อดูค่าเริ่มต้น):" }, "languagePrompt": { "title": "🌍 เลือกภาษาที่จะแก้ไข", "available": "ภาษาที่ใช้ได้: {languages}", "description": "ป้อนภาษาที่จะแก้ไข (คั่นด้วยเครื่องหมายจุลภาค) หรือกด Enter สำหรับทุกคน:", "input": "ภาษา:", "noLanguages": "ไม่พบภาษาที่จะแก้ไข" }, "directoryPrompt": { "title": "📁 เลือกไดเรกทอรี", "current": "ไดเรกทอรีปัจจุบัน: {dir}", "description": "ป้อนไดเร็กทอรีที่มีไฟล์โลแคลของคุณ (หรือกด Enter เพื่อดูไฟล์ปัจจุบัน):", "input": "ไดเรกทอรี:" }, "backupLocation": "ตำแหน่งสำรอง: {dir}", "completed": "การแก้ไขเสร็จสมบูรณ์", "creatingBackup": "กำลังสร้างข้อมูลสำรองใน {dir}...", "dryRunMode": "โหมดดรายรัน: {mode}", "error": "ตัวแก้ไขล้มเหลว: {error}", "fixing": "การแก้ไข {language}...", "foundLanguages": "พบ {count} ภาษา: {languages}", "languageFixed": "{language}: ที่ตายตัว {fixed} คีย์ถูกข้ามไป {skipped}.", "running": "กำลังเรียกใช้โปรแกรมแก้ไขการแปล...", "totalFixed": "คงที่ทั้งหมด: {count}" }, "autorun": { "stepAnalyzeTranslations": "วิเคราะห์คำแปล", "stepCompletedWithIcon": "✅ เสร็จสิ้น: {stepName}", "stepValidateTranslations": "ตรวจสอบการแปล", "stepRunning": "▶️สเต็ป {stepNumber}/{totalSteps}: {stepName}", "separator": "==================================================", "stepFailed": "❌ ล้มเหลว: {stepName}", "errorLabel": "ข้อผิดพลาด", "autoRunScriptTitle": "🧪 เวิร์กโฟลว์การทำงานอัตโนมัติ", "usageTitle": "การใช้งาน", "runAllSteps": "รัน: โหนด i18ntk-autorun.js", "configureSettingsFirst": "กำหนดค่า: แฟล็ก i18ntk-config.json หรือ CLI", "runSpecificSteps": "ใช้ --steps=1,3 หรือ --list เพื่อแสดงขั้นตอน", "showHelp": "--help สำหรับข้อมูลเพิ่มเติม", "examplesTitle": "ตัวอย่าง", "configExample": "โหนด i18ntk-autorun.js --ui-ภาษา=zh", "stepsExample1": "โหนด i18ntk-autorun.js --steps=analyze,validate", "stepsExample2": "โหนด i18ntk-autorun.js --list", "customSettingsConfiguration": "การตั้งค่าการทำงานอัตโนมัติแบบกำหนดเอง", "availableSteps": "ขั้นตอนที่ใช้ได้", "startingAutoRunWorkflow": "🚀 กำลังเริ่มเวิร์กโฟลว์การทำงานอัตโนมัติ...", "workflowIncludesSteps": "ขั้นตอนการทำงานประกอบด้วย {count} ขั้นตอน:", "missingRequiredFile": "ไฟล์ที่ต้องการหายไป: {file}", "workflowStopped": "เวิร์กโฟลว์หยุดลงเนื่องจากความล้มเหลว", "workflowCompleted": "🎉 ขั้นตอนการทำงานเสร็จสมบูรณ์!", "successfulSteps": "ขั้นตอนที่สำเร็จ: {count}", "failedSteps": "ขั้นตอนที่ล้มเหลว: {count}", "stepInitializeProject": "เริ่มต้นโครงการ", "stepCheckUsage": "ตรวจสอบการใช้งานคีย์", "stepGenerateSummary": "สร้างรายงานสรุป", "runInitializationFirst": "กรุณาเรียกใช้การเริ่มต้นก่อน", "initializationCheckPassed": "ผ่านการตรวจสอบการเริ่มต้นแล้ว", "runningStep": "ขั้นตอนการวิ่ง: {stepName}", "commandLabel": "สั่งการ: {command}", "stepCompletedWithTime": "ขั้นตอน'{stepName}' เสร็จสิ้นใน {duration}นางสาว", "stepCompleted": "ขั้นตอน'{stepName}' สมบูรณ์.", "stepFailedWithError": "ขั้นตอน'{stepName}' ล้มเหลวโดยมีข้อผิดพลาด: {error}", "requiredStepFailed": "ขั้นตอนที่จำเป็นล้มเหลว กำลังหยุดเวิร์กโฟลว์", "optionalStepFailed": "ขั้นตอนที่ไม่บังคับล้มเหลว กระบวนการทำงานอย่างต่อเนื่อง", "stepRequired": "(ที่จำเป็น)", "stepOptional": "(ไม่จำเป็น)", "startingExecution": "กำลังเริ่มดำเนินการ...", "pressEnterToContinue": "กด Enter เพื่อดำเนินการต่อ...", "runningSelectedSteps": "กำลังดำเนินการขั้นตอนที่เลือก...", "invalidStepNumber": "หมายเลขขั้นตอนไม่ถูกต้อง: {stepNum}", "executionReport": "รายงานการดำเนินการ:", "requiredFailedSteps": "ขั้นตอนที่จำเป็นล้มเหลว: {count}", "stepDetails": "รายละเอียดขั้นตอน:", "reportSavedTo": "บันทึกรายงานไปที่: {path}", "overallStatusSuccess": "SUCCESS", "overallStatusFailed": "FAILED", "overallStatus": "สถานะโดยรวม: {status}", "pressEnterForDefaults": "กด Enter เพื่อใช้การตั้งค่าเริ่มต้นสำหรับข้อความแจ้งใดๆ", "sourceDirPrompt": "ป้อนไดเร็กทอรีต้นทาง (ค่าเริ่มต้น: {default}):", "sourceLangPrompt": "ป้อนภาษาต้นฉบับ (ค่าเริ่มต้น: {default}):", "targetLangsPrompt": "ป้อนภาษาเป้าหมาย (คั่นด้วยเครื่องหมายจุลภาค ค่าเริ่มต้น: {default}):", "translationMarkerPrompt": "ป้อนเครื่องหมายการแปล (ค่าเริ่มต้น: {default}):", "outputDirPrompt": "ป้อนไดเรกทอรีผลลัพธ์สำหรับรายงาน (ค่าเริ่มต้น: {default}):", "settingsUpdatedSuccessfully": "อัปเดตการตั้งค่าสำเร็จแล้ว!", "errorConfiguringSettings": "เกิดข้อผิดพลาดในการกำหนดการตั้งค่า: {error}", "configurationComplete": "การกำหนดค่าเสร็จสมบูรณ์", "runAutoRunCommand": "ตอนนี้คุณสามารถรันคำสั่งทำงานอัตโนมัติได้แล้ว", "configurationFailed": "การกำหนดค่าล้มเหลว: {error}", "noValidStepNumbers": "ไม่ได้ระบุหมายเลขขั้นตอนที่ถูกต้อง", "autoRunFailed": "การทำงานอัตโนมัติล้มเหลว: {error}", "stepCompleteTranslations": "การแปลที่สมบูรณ์", "stepAnalyzeSizing": "วิเคราะห์ขนาด", "stepCompletedIcon": "✅", "stepRunningWithNumber": "[{stepNumber}/{totalSteps}] ขั้นตอน '{stepName}' วิ่ง...", "stepFailedIcon": "❌", "translationLoadWarning": "คำเตือน: ไม่สามารถโหลดได้ {lang} การแปล", "configReadError": "เกิดข้อผิดพลาดในการอ่าน {file}" }, "analyze": { "help_message": "การใช้งานตัววิเคราะห์การแปล I18n: โหนด i18ntk-analyze.js [ตัวเลือก] ตัวเลือก: --source-dir <dir> ไดเร็กทอรีต้นทางที่จะสแกน (ค่าเริ่มต้น: ./src) --i18n-dir <dir> ไดเรกทอรี I18n (ค่าเริ่มต้น: ./src/locales) --output-report สร้างรายงานโดยละเอียด --output-dir <dir> ไดเร็กทอรีเอาต์พุตสำหรับรายงาน (ค่าเริ่มต้น: ./reports) --help แสดงวิธีใช้นี้ ตัวอย่าง: โหนด i18ntk-analyze.js --output-report node i18ntk-analyze.js --source-dir=./app --i18n-dir=./locales node i18ntk-analyze.js --output-dir=./analysis --output-report", "source_directory": "📁 ไดเรกทอรีต้นทาง: {sourceDir}", "i18n_directory": "🌐 ไดเรกทอรี I18n: {i18nDir}", "loading_translation_files": "📋 กำลังโหลดไฟล์แปล...", "sourceDirectoryLabel": "📁 ไดเรกทอรีที่มา: {sourceDir}", "sourceLanguageLabel": "🌍 ภาษาต้นฉบับ: {sourceLanguage}", "strictModeLabel": "⚙️ โหมดเข้มงวด: {mode}", "found_translation_files_count": "✅พบ {count} ไฟล์แปล", "analyzing_translations": "🔍 กำลังวิเคราะห์คำแปล...", "analysis_completed_successfully": "🎉 วิเคราะห์สำเร็จแล้ว!", "analysis_results": "📊 ANALYSIS RESULTS", "language_analysis_stats": "{language}: {translatedKeys}/{totalKeys} ({percentage}% ที่แปลแล้ว)", "sample_missing_keys": "ตัวอย่างคีย์ที่หายไป:", "missing_key": "- {key}", "and_more_missing": "...และ {count} มากกว่า.", "sample_unused_keys": "ตัวอย่างคีย์ที่ไม่ได้ใช้:", "unused_key": "- {key}", "and_more_unused": "...และ {count} มากกว่า.", "recommendations": "📋 คำแนะนำ", "add_missing_translations": "💡 เพิ่มคำแปลที่ขาดหายไปเพื่อปรับปรุงความครอบคลุม", "remove_unused_translations": "💡 ลบคำแปลที่ไม่ได้ใช้ออกเพื่อให้โปรเจ็กต์ของคุณสะอาด", "next_steps": "📋 NEXT STEPS", "review_analysis_results": "1. ตรวจสอบผลการวิเคราะห์ในคอนโซลหรือรายงานที่สร้างขึ้น", "run_with_output_report": "2. รันด้วย --output-report สำหรับรายงานโดยละเอียด", "add_or_remove_translations": "3. เพิ่มคำแปลที่ขาดหายไปหรือลบคำแปลที่ไม่ได้ใช้", "rerun_analysis": "4. ดำเนินการวิเคราะห์ซ้ำเพื่อตรวจสอบการปรับปรุง", "analysis_summary": "📊 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": "📊 ANALYSIS 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": "การโหลดการกำหนดค่าล้มเหลว", "sourceLanguageNotFound": "ไม่พบไดเร็กทอรีภาษาต้นฉบับ: {sourceLanguage}", "couldNotParseTarget": "ไม่สามารถแยกวิเคราะห์ไฟล์เป้าหมาย: {file}", "couldNotParseSource": "ไม่สามารถแยกวิเคราะห์ไฟล์ต้นฉบับ: {file}", "reportGenerated": "สร้างรายงานแล้ว: {path}", "generateReportPrompt": "คุณต้องการสร้างรายงานหรือไม่?", "title": "🌍 การแปล I18NTK เสร็จสมบูรณ์", "separator": "============================================================", "sourceDir": "📁 ไดเรกทอรีต้นทาง: {sourceDir}", "sourceLanguage": "🌐 ภาษาต้นฉบับ: {sourceLanguage}", "dryRunMode": "🧪 โหมดดรายรัน - จะไม่มีการเปลี่ยนแปลงใดๆ", "languages": "🌍 ภาษาที่ใช้ได้: {languages}", "addingMissingKeys": "➕ การเพิ่มคีย์ที่หายไปให้กับไฟล์การแปล...", "processing": "🔄 กำลังประมวลผล {language}...", "addedKeys": "✅เข้าเพิ่ม {count} กุญแจหายไป", "noChangesNeeded": "✅ไม่จำเป็นต้องเปลี่ยนแปลงใดๆ {language}", "summaryTitle": "📊 สรุปผลสำเร็จ", "totalChanges": "แปลก การเปลี่ยนแปลงทั้งหมด: {totalChanges}", "languagesProcessed": "🌍 ภาษาที่ประมวลผล: {languagesProcessed}", "missingKeysAdded": "➕ เพิ่มคีย์ที่หายไป: {missingKeysAdded}", "nextStepsTitle": "📋 NEXT STEPS", "nextStep1": "1. เรียกใช้การวิเคราะห์การใช้งาน:", "nextStep2": "โหนด i18ntk-usage.js --output-report", "nextStep3": "2. ตรวจสอบการแปล:", "nextStep4": "โหนด i18ntk-validate.js", "nextStep5": "3. วิเคราะห์รูปแบบ:", "nextStep6": "โหนด 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": "ภาษา Char Diff % Diff เป็นปัญหา", "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 ตัวอักษร - ลองแยกย่อย", "longer": "อีกต่อไป", "shorter": "สั้นลง", "review_translations": "พิจารณาทบทวน {lang} การแปล - พวกเขาเป็น {percentageDifference}% {comparison} กว่าพื้นฐาน", "report_saved_to": "บันทึกรายงานไปที่: {reportPath}", "considerReviewingTranslations": "พิจารณาทบทวน ${lang} การแปล - ยาวกว่าพื้นฐาน ${data.percentageDifference}%", "csv_report_saved_to": "รายงาน CSV บันทึกไปที่: {csvPath}", "human_report_saved": "บันทึกรายงานที่สามารถอ่านได้: {reportPath}", "folder_summary_title": "สรุปโฟลเดอร์", "folder_summary_table_header": "ขนาดภาษา(KB) คีย์ ความยาวเฉลี่ย ตัวอักษรทั้งหมด", "folder_summary_row": "{lang} {sizeKB} {totalKeys} {avgLength} {totalChars}", "language_comparison_title": "การเปรียบเทียบภาษา", "language_comparison_row": "{lang}: {diff} ตัวอักษร ({percent}%) {status}", "summary_stats": "📊 สรุป: {totalLanguages} ภาษา {totalKeys} คีย์ - รายงานที่บันทึกไว้ใน {reportPath}", "detailedKeysDescription": "แสดงการวิเคราะห์ระดับคีย์โดยละเอียดในคอนโซล", "too_many_keys_warning": "⚠️ มีคีย์มากเกินไปที่จะแสดงในคอนโซล - ตรวจสอบไฟล์รายงานโดยละเอียดเพื่อการวิเคราะห์แบบเต็ม", "no_translation_files_found": "ไม่พบไฟล์การแปล", "analysis_completed": "วิเคราะห์เสร็จเมื่อ พ.ศ {duration}นางสาว", "analysis_failed": "การวิเคราะห์ล้มเหลว: {errorMessage}", "starting_analysis": "กำลังเริ่มการวิเคราะห์...", "found_files": "พบ {count} ไฟล์", "failed_to_parse_language_error": "แยกวิเคราะห์ไม่สำเร็จ {language} การแปล: {errorMessage}", "recommendations": { "keys_have_significant_size_variations": "คีย์จะมีขนาดที่แตกต่างกันอย่างมาก", "consider_reviewing_translations": "พิจารณาทบทวน {lang} การแปล - พวกเขาเป็น {percentageDifference}% {comparison} กว่าพื้นฐาน", "long_translations_detected": "{lang} มี {longKeys} แปลยาวกว่า. {threshold} ตัวละคร - ลองแยกย่อยพวกมันออก" }, "detailed_key_analysis_title": "การวิเคราะห์คีย์โดยละเอียด", "key_analysis_detail": "{lang}: {length} ตัวอักษร ({status}) - {translation}", "key_analysis_header": "สำคัญ: {key}", "status_empty": "ว่างเปล่า", "status_long": "ยาว", "status_ok": "ตกลง" }, "usage": { "help_message": "ตัววิเคราะห์การใช้งาน I18n การใช้งาน: โหนด i18ntk-usage.js [ตัวเลือก] ตัวเลือก: --source-dir <dir> ไดเร็กทอรีต้นทางที่จะสแกน (ค่าเริ่มต้น: ./src) --i18n-dir <dir> ไดเรกทอรี I18n (ค่าเริ่มต้น: ./src/locales) --output-report สร้างรายงานโดยละเอียด --output-dir <dir> ไดเร็กทอรีเอาต์พุตสำหรับรายงาน (ค่าเริ่มต้น: ./reports) --help แสดงวิธีใช้นี้ ตัวอย่าง: โหนด i18ntk-usage.js --output-report node i18ntk-usage.js --source-dir=./app --i18n-dir=./locales node i18ntk-usage.js --output-dir=./analysis --output-report", "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} ไฟล์แปล", "errorReadingI18nDirectory": "⚠️ เกิดข้อผิดพลาดในการอ่านไดเรกทอรี i18n: {error}", "pressEnterToReturnToMenu": "⏩ กด Enter เพื่อกลับสู่เมนูหลัก...", "notTranslatedKeysTotal": "⚠️ คีย์ที่ไม่ได้แปล: {total}", "noSourceFilesFound": "⚠️ ไม่พบไฟล์ต้นฉบับในไดเร็กทอรีต้นทาง", "reviewNotTranslatedKeys": "💡 รีวิวคีย์ที่ไม่ได้แปล", "analysisCompletedSuccessfully": "🎉 วิเคราะห์สำเร็จแล้ว!", "detectedSourceDirectory": "ไดเรกทอรีต้นทางที่ตรวจพบ: {sourceDir}", "detectedI18nDirectory": "ตรวจพบไดเร็กทอรี i18n: {i18nDir}", "fileInfo": "📄 {namespace}: {keys} กุญแจ", "failedToAnalyzeUsage": "❌ ล้มเหลวในการวิเคราะห์การใช้งาน: {error}", "failedToAnalyzeFile": "❌ ไม่สามารถวิเคราะห์ไฟล์: {error}", "failedToExtractKeys": "❌ ไม่สามารถแยกคีย์ออกจาก {filePath}: {error}", "analysisFailedError": "❌ การวิเคราะห์ล้มเหลว: {error}", "analyzerInitialized": "เริ่มต้นตัววิเคราะห์แล้ว", "analyzerInitFailed": "การเริ่มต้นตัววิเคราะห์ล้มเหลว: {error}", "argsParsed": "อาร์กิวเมนต์แยกวิเคราะห์แล้ว", "processedFiles": "ดำเนินการแล้ว {processedFiles} ของ {totalFiles} ไฟล์.", "argsParseFailed": "การแยกวิเคราะห์อาร์กิวเมนต์ล้มเหลว: {error}", "translationDiscoveryError": "ข้อผิดพลาดในการค้นพบคำแปล: {error}", "fileTraversalError": "ข้อผิดพลาดในการข้ามไฟล์: {error}", "sourceEqualsI18nWarn": "{reason}. การวิเคราะห์การใช้งานจะไม่สแกนไฟล์ภาษาเป็นซอร์สโค้ด", "i18nEqualsSourceWarn": "⚠️ ไดเร็กทอรี I18n และไดเร็กทอรีต้นทางเหมือนกัน นี่อาจทำให้เกิดปัญหากับการวิเคราะห์", "usageAnalysisFailed": "⚠️ การวิเคราะห์การใช้งานล้มเหลว: {error}", "translationFileParseError": "⚠️ ข้อผิดพลาดในการแยกวิเคราะห์ไฟล์การแปล: {error}", "translationKeysLoadError": "⚠️ ข้อผิดพลาดในการโหลดคีย์การแปล: {error}", "languageCompletenessStats": "🌐 {language}: {translated}/{total} ({completeness}% ที่แปลแล้ว)", "missingKeysCount": "⚠️ กุญแจที่หายไป: {count}", "analyzingTranslationCompleteness": "กำลังวิเคราะห์ความสมบูรณ์ของการแปล...", "unusedKeysCount": "คีย์ที่ไม่ได้ใช้: {count}", "usedKeysCount": "กุญแจที่ใช้: {count}", "availableKeysCount": "กุญแจที่มีอยู่: {count}", "analysisResults": "ผลการวิเคราะห์:", "i18nDirectoryNotFound": "⚠️ ไม่พบไดเรกทอรี I18n กรุณาตรวจสอบเส้นทาง", "sourceDirectoryNotFound": "⚠️ ไม่พบไดเรกทอรีต้นทาง: {dir}", "checkUsage": { "title": "🔍 I18NTK USAGE ANALYSIS", "analyzing_source_files": "🔍 กำลังวิเคราะห์ไฟล์ต้นฉบับ...", "source_directory_thissourcedir": "📁 ไดเรกทอรีต้นทาง: {sourceDir}", "i18n_directory_thisi18ndir": "📁 ไดเรกทอรี i18n: {i18nDir}", "found_files_in_source": "✅พบ {numFiles} ไฟล์ในไดเร็กทอรีต้นทาง", "no_source_files_found": "⚠️ ไม่พบไฟล์ต้นฉบับในไดเร็กทอรีที่ระบุ", "processedFiles": "📊 แปรรูปแล้ว {processedFiles} ของ {totalFiles} ไฟล์", "failedToProcessFile": "❌ ดำเนินการไม่สำเร็จ", "found_thisusedkeyssize_unique_": "🔍 พบแล้ว {usedKeysSize} กุญแจที่ใช้ไม่ซ้ำใคร", "total_key_usages_totalkeysfoun": "📊 การใช้งานคีย์ทั้งหมด: {totalKeysFound}", "loading_available_translation_": "📂 กำลังโหลดคีย์การแปลที่มีอยู่...", "found_thisavailablekeyssize_av": "✅พบ {availableKeysSize} กุญแจที่มีอยู่", "message": "กำลังวิเคราะห์การใช้คีย์การแปลทั่วทั้งโปรเจ็กต์ของคุณ...", "usage_analysis_results": "📊 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}", "translation_completeness_title": "📈 ความสมบูรณ์ของการแปล", "language_completeness_stats": "{language}: {translated}/{total} กุญแจ ({percentage}%)", "n_sample_unused_keys": "🗑️ ตัวอย่างคีย์ที่ไม่ได้ใช้ (5 ตัวแรก):", "key": "🔑 {key}", "and_unusedkeyslength_5_more": "... และ {count} คีย์ที่ไม่ได้ใช้มากขึ้น", "n_sample_missing_keys": "❌ ตัวอย่างคีย์ที่หายไป (5 ตัวแรก):", "and_missingkeyslength_5_more": "... และ {count} กุญแจที่หายไปมากขึ้น", "n_generating_detailed_report": "📊 กำลังสร้างรายงานโดยละเอียด...", "report_saved_reportpath": "📄 บันทึกรายงานแล้ว: {reportPath}", "n_recommendations": "💡 คำแนะนำ:", "consider_removing_unused_trans": "🗑️ พิจารณาลบคำแปลที่ไม่ได้ใช้เพื่อลดขนาดชุดรวม", "add_missing_translation_keys_t": "➕ เพิ่มคีย์การแปลที่หายไปเพื่อรักษาความสอดคล้อง", "review_dynamic_keys_manually_t": "🔍 ตรวจสอบไดนามิกคีย์ด้วยตนเอง (อาจใช้ได้)", "all_translation_keys_are_prope": "✅ ใช้คีย์การแปลทั้งหมดอย่างถูกต้อง!", "n_next_steps": "🎯 NEXT STEPS:", "2_check_the_detailed_report_fo": "2. ตรวจสอบรายงานโดยละเอียดสำหรับปัญหาเฉพาะ", "help_message": "ตัววิเคราะห์การใช้งาน I18n การใช้งาน: โหนด i18ntk-usage.js [ตัวเลือก] ตัวเลือก: --source-dir <dir> ไดเร็กทอรีต้นทางที่จะสแกน (ค่าเริ่มต้น: ./src) --i18n-dir <dir> ไดเรกทอรี I18n (ค่าเริ่มต้น: ./src/locales) --output-report สร้างรายงานโดยละเอียด --output-dir <dir> ไดเร็กทอรีเอาต์พุตสำหรับรายงาน (ค่าเริ่มต้น: ./reports) --help แสดงวิธีใช้นี้ ตัวอย่าง: โหนด i18ntk-usage.js --output-report node i18ntk-usage.js --source-dir=./app --i18n-dir=./locales node i18ntk-usage.js --output-dir=./analysis --output-report", "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. ดำเนินการวิเคราะห์ซ้ำเพื่อตรวจสอบการปรับปรุง", "noSourceFilesFound": "ไม่พบไฟล์ต้นฉบับที่จะวิเคราะห์", "i18nDirectoryNotFound": "ไม่พบไดเรกทอรี I18n: {i18nDir}", "noTranslationLanguagesFound": "ไม่พบภาษาแปล", "failedToAnalyzeFile": "วิเคราะห์ไฟล์ไม่สำเร็จ {filePath}: {error}", "failedToAnalyzeLanguage": "วิเคราะห์ภาษาไม่สำเร็จ {language}: {error}", "translationCompletenessAnalysisFailed": "การวิเคราะห์ความสมบูรณ์ของการแปลล้มเหลว: {error}", "n": "\\n" }, "complete": { "configLoadedSuccessfully": "โหลดการกำหนดค่าเรียบร้อยแล้ว", "configLoadingFailed": "การโหลดการกำหนดค่าล้มเหลว", "title": "🌍 การแปล I18NTK เสร็จสมบูรณ์", "separator": "============================================================", "sourceDir": "📁 ไดเรกทอรีต้นทาง: {sourceDir}", "sourceLanguage": "🌐 ภาษาต้นฉบับ: {sourceLanguage}", "dryRunMode": "🧪 โหมดดรายรัน - จะไม่มีการเปลี่ยนแปลงใดๆ", "languages": "🌍 ภาษาที่ใช้ได้: {languages}", "addingMissingKeys": "➕ การเพิ่มคีย์ที่หายไปให้กับไฟล์การแปล...", "processing": "🔄 กำลังประมวลผล {language}...", "addedKeys": "✅เข้าเพิ่ม {count} กุญแจหายไป", "changeDetails": "📝 {file}: {key}", "andMore": "...และ {count} มากกว่า", "noChangesNeeded": "✅ไม่จำเป็นต้องเปลี่ยนแปลงใดๆ {language}", "summaryTitle": "📊 สรุปผลสำเร็จ", "totalChanges": "แปลก การเปลี่ยนแปลงทั้งหมด: {totalChanges}", "languagesProcessed": "🌍 ภาษาที่ประมวลผล: {languagesProcessed}", "missingKeysAdded": "➕ เพิ่มคีย์ที่หายไป: {missingKeysAdded}", "nextStepsTitle": "📋 NEXT STEPS", "nextStep1": "1. เรียกใช้การวิเคราะห์การใช้งาน:", "nextStep2": "โหนด i18ntk-usage.js --output-report", "nextStep3": "2. ตรวจสอบการแปล:", "nextStep4": "โหนด i18ntk-validate.js", "nextStep5": "3. วิเคราะห์รูปแบบ:", "nextStep6": "โหนด i18ntk-analyze.js", "allKeysAvailable": "🎉 คีย์การแปลทั้งหมดพร้อมใช้งานแล้ว!", "runWithoutDryRun": "💡 ทำงานโดยไม่ต้อง --dry-run เพื่อใช้การเปลี่ยนแปลง", "deletingOldReport": "🗑️ กำลังลบรายงานเก่า...", "generatingFreshAnalysis": "📊 กำลังสร้างการวิเคราะห์การใช้งานใหม่...", "couldNotGenerate": "❌ ไม่สามารถสร้างการวิเคราะห์การใช้งานได้", "reportNotFound": "📋 ไม่พบรายงานการใช้งาน การใช้ปุ่มทั่วไป...", "foundMissingKeys": "📋 พบแล้ว {count} คีย์หายไปจากการวิเคราะห์การใช้งาน", "couldNotParse": "❌ ไม่สามารถแยกวิเคราะห์รายงานการใช้งานได้ การใช้ปุ่มทั่วไป..." }, "noTranslationLanguagesFound": "ไม่พบภาษาแปล", "failedToAnalyzeLanguage": "ไม่สามารถวิเคราะห์ภาษาได้", "translationCompletenessAnalysisFailed": "การวิเคราะห์ความสมบูรณ์ของการแปลล้มเหลว", "failedToProcessFile": "ล้มเหลวในการประมวลผลไฟล์:", "failedToSaveReport": "ไม่สามารถบันทึกรายงานการใช้งาน: {error}", "i18nDirectoryDoesNotExist": "ไม่มีไดเร็กทอรี I18n: {dir}", "reportSavedTo": "รายงานการใช้งานบันทึกไว้ที่: {reportPath}", "sourceDirectoryDoesNotExist": "ไม่มีไดเรกทอรีต้นทาง: {dir}", "noSourceDirectoryConfigured": "(ไม่มีการกำหนดค่า)" }, "validate": { "help_message": "การใช้งานเครื่องมือตรวจสอบการแปล I18n: โหนด i18ntk-validate.js [ตัวเลือก] ตัวเลือก: --source-dir <dir> ไดเร็กทอรีต้นทางที่จะสแกน (ค่าเริ่มต้น: ./src) --i18n-dir <dir> ไดเรกทอรี I18n (ค่าเริ่มต้น: ./src/locales) --output-report สร้างรายงานโดยละเอียด --output-dir <dir> ไดเร็กทอรีเอาต์พุตสำหรับรายงาน (ค่าเริ่มต้น: ./reports) --help แสดงวิธีใช้นี้ ตัวอย่าง: โหนด i18ntk-validate.js --output-report node i18ntk-validate.js --source-dir=./app --i18n-dir=./locales node i18ntk-validate.js --output-dir=./analysis --output-report", "title": "🔍 เครื่องมือตรวจสอบการแปล I18n", "message": "กำลังเริ่มกระบวนการตรวจสอบ...", "sourceDirectory": "📁 ไดเรกทอรีต้นทาง: {dir}", "sourceLanguage": "🌍 ภาษาต้นฉบับ: {sourceLanguage}", "strictMode": "⚙️ โหมดเข้มงวด: {mode}", "noTargetLanguages": "ไม่มีภาษาเป้าหมายที่กำหนดค่าไว้ ข้ามการตรวจสอบเป้าหมาย เพิ่มภาษาผ่าน \"i18ntk init -- languages=de,fr\"", "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": "❌ ERRORS", "warningsSection": "⚠️ WARNINGS", "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": "พบ {count} ไฟล์ใน {language}", "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": "📋 OVERALL SUMMARY", "progressIndicator": "⏳ กำลังประมวลผล...", "completedIndicator": "✅ จบ.", "errorIndicator": "❌เกิดข้อผิดพลาด", "warningIndicator": "⚠️คำเตือน", "infoIndicator": "ℹ️ข้อมูล", "sourceDirNotConfigured": "ไม่ได้กำหนดค่าไดเรกทอรีต้นทาง", "sourceLanguageNotConfigured": "ไม่ได้กำหนดค่าภาษาต้นฉบับ", "translationFunctionNotInitialized": "ฟังก์ชั่นการแปลไม่ได้เริ่มต้นอย่างถูกต้อง", "sourceLanguageDirectoryNotFound": "ไม่พบไดเรกทอรีภาษาต้นฉบับ", "specifiedLanguageNotFound": "ไม่พบภาษาที่ระบุ", "noJsonFilesFound": "ไม่พบไฟล์ JSON ในไดเรกทอรีต้นทาง: {sourceDir}", "i18nDirectoryNotFound": "ไม่พบไดเรกทอรี I18n: {i18nDir}", "invalidDirectoryPaths": "ตรวจพบเส้นทางไดเรกทอรีที่ไม่ถูกต้อง", "invalidSampleFilePath": "เส้นทางไฟล์ตัวอย่างไม่ถูกต้อง", "failedToCreateSampleTranslationFile": "ไม่สามารถสร้างไฟล์การแปลตัวอย่างได้", "invalidFilePathDetected": "ตรวจพบเส้นทางไฟล์ไม่ถูกต้อง", "failedToWriteFile": "ไม่สามารถเขียนไฟล์: {filePath}", "invalidSourceDirectory": "ไดเรกทอรีต้นทางไม่ถูกต้อง: {sourceDir}", "invalidSourceLanguageDirectory": "ไดเรกทอรีภาษาต้นฉบับไม่ถูกต้อง: {sourceDir}" }, "adminCli": { "setupPinProtectionTitle": "🔐 การตั้งค่าการป้องกัน PIN ของผู้ดูแลระบบ", "setupPinProtectionDescription": "ซึ่งจะต้องใช้ PIN 4-6 หลักสำหรับการดำเนินการด้านผู้ดูแลระบบ", "enablePinProtectionPrompt": "คุณต้องการเปิดใช้งานการป้องกัน PIN ของผู้ดูแลระบบหรือไม่", "setupCancelled": "การตั้งค่าการป้องกัน PIN ของผู้ดูแลระบบถูกยกเลิก", "enterPinPrompt": "ป้อน PIN 4-6 หลัก:", "pinFormatError": "❌ PIN ต้องเป็นตัวเลข 4-6 หลัก โปรดลองอีกครั้ง", "confirmPinPrompt": "ยืนยันรหัส PIN:", "pinMismatchError": "❌ PIN ไม่ตรงกัน โปรดลองอีกครั้ง", "pinProtectionEnabledSuccess": "✅ เปิดใช้งานการป้องกัน PIN ของผู้ดูแลระบบเรียบร้อยแล้ว!", "pinRecoveryWarning": "⚠️ จำ PIN ของคุณ - ไม่สามารถกู้คืนได้หากสูญหาย", "setupPinProtectionFailed": "❌ ไม่สามารถตั้งค่าการป้องกัน PIN ของผู้ดูแลระบบได้", "errorSettingUpPin": "❌ เกิดข้อผิดพลาดในการตั้งค่า PIN ผู้ดูแลระบบ: {message}", "authRequiredForOperation": "🔐 ต้องมีการรับรองความถูกต้องของผู้ดูแลระบบสำหรับ: {operation}", "invalidPinFormat": "❌ รูปแบบ PIN ไม่ถูกต้อง PIN ต้องเป็นตัวเลข 4-6 หลัก", "authenticationSuccess": "✅ รับรองความถูกต้องสำเร็จ!", "invalidPinAttemptsRemaining": "❌ PIN ไม่ถูกต้อง {remaining} ความพยายามที่เหลืออยู่", "authenticationFailedAccessDenied": "❌ การรับรองความถูกต้องล้มเหลว การเข้าถึงถูกปฏิเสธ", "authenticationError": "❌ ข้อผิดพลาดในการรับรองความถูกต้อง: {message}", "pinProtectionNotEnabled": "การป้องกัน PIN ของผู้ดูแลระบบไม่ได้เปิดใช้งานอยู่ในขณะนี้", "disablingPinProtectionTitle": "🔓 ปิดการใช้งานการป้องกัน PIN ของผู้ดูแลระบบ", "confirmDisablePinProtection": "คุณแน่ใจหรือไม่ว่าต้องการปิดใช้งานการป้องกัน PIN ของผู้ดูแลระบบ", "operationCancelled": "การดำเนินการถูกยกเลิก", "pinProtectionDisabledSuccess": "✅ การป้องกัน PIN ของผู้ดูแลระบบถูกปิดใช้งาน", "disablePinProtectionFailed": "❌ ไม่สามารถปิดใช้งานการป้องกัน PIN ของผู้ดูแลระบบได้", "errorDisablingPinProtection": "❌ เกิดข้อผิดพลาดในการปิดใช้งานการป้องกันผู้ดูแลระบบ: {message}", "adminProtectionStatusTitle": "🔐 สถานะการคุ้มครองผู้ดูแลระบบ", "statusEnabled": "สถานะ: ✅เปิดใช้งานแล้ว", "protectionDetails": "การป้องกัน: ต้องใช้ PIN 4-6 หลักสำหรับการดำเนินงานของผู้ดูแลระบบ", "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": "สร้าง PIN 4-6 หลักสำหรับผู้ดูแลระบบในการเข้าถึงการตั้งค่าที่ละเอียดอ่อน", "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_s