[{"data":1,"prerenderedAt":63},["Reactive",2],{"blog-post-markdown-internationalization-multilingual-documentation-complete-guide":3},{"slug":4,"title":5,"description":6,"excerpt":7,"date":8,"category":9,"author":10,"keywords":11,"readingMinutes":12,"html":13,"headings":14,"tools":37,"related":38},"markdown-internationalization-multilingual-documentation-complete-guide","Markdown Internationalization and Multilingual Documentation: Complete Guide for Global Content Management, Translation Workflows, and Localization Strategies","Master internationalization in Markdown with comprehensive multilingual documentation systems, automated translation workflows, locale-specific formatting, and global content management strategies for worldwide audiences.","Markdown internationalization and multilingual documentation systems enable technical writers to create, manage, and maintain documentation that serves global audiences across diverse languages,…","2025-12-24","Tutorial","Matthew Rathbone","markdown internationalization, multilingual markdown documentation, markdown translation workflows, markdown localization, global documentation markdown, i18n markdown, markdown language support, multilingual content management",14,"\u003Cp>Markdown internationalization and multilingual documentation systems enable technical writers to create, manage, and maintain documentation that serves global audiences across diverse languages, cultural contexts, and regional requirements. By implementing comprehensive translation workflows, locale-specific formatting systems, and automated content synchronization processes, organizations can deliver consistent, culturally appropriate documentation that scales efficiently across international markets while maintaining content quality and technical accuracy.\u003C/p>\n\u003Ch2 id=\"why-implement-markdown-internationalization\">Why Implement Markdown Internationalization?\u003C/h2>\n\u003Cp>Professional multilingual documentation provides essential benefits for global organizations:\u003C/p>\n\u003Cul>\n\u003Cli>\u003Cstrong>Global Reach\u003C/strong>: Serve international audiences with native-language documentation\u003C/li>\n\u003Cli>\u003Cstrong>Cultural Adaptation\u003C/strong>: Localize content for regional preferences and cultural norms\u003C/li>\n\u003Cli>\u003Cstrong>Automated Workflows\u003C/strong>: Streamline translation processes with integrated content management systems\u003C/li>\n\u003Cli>\u003Cstrong>Consistency Management\u003C/strong>: Maintain synchronized content across all language versions\u003C/li>\n\u003Cli>\u003Cstrong>SEO Benefits\u003C/strong>: Improve search visibility in international markets with localized content\u003C/li>\n\u003Cli>\u003Cstrong>Compliance Requirements\u003C/strong>: Meet regulatory documentation requirements in multiple jurisdictions\u003C/li>\n\u003C/ul>\n\u003Ch2 id=\"foundation-internationalization-architecture\">Foundation Internationalization Architecture\u003C/h2>\n\u003Ch3 id=\"file-structure-and-organization\">File Structure and Organization\u003C/h3>\n\u003Cp>Implementing scalable multilingual file organization:\u003C/p>\n\u003Cpre>\u003Ccode>docs/\n├── en/                     # English (default)\n│   ├── getting-started.md\n│   ├── api-reference.md\n│   └── tutorials/\n│       ├── basic-setup.md\n│       └── advanced-config.md\n├── es/                     # Spanish\n│   ├── getting-started.md\n│   ├── api-reference.md\n│   └── tutorials/\n│       ├── basic-setup.md\n│       └── advanced-config.md\n├── fr/                     # French\n│   ├── getting-started.md\n│   ├── api-reference.md\n│   └── tutorials/\n│       ├── basic-setup.md\n│       └── advanced-config.md\n└── i18n/\n    ├── config.yml          # Internationalization configuration\n    ├── translations.json   # Shared translations\n    └── locales/\n        ├── en.yml\n        ├── es.yml\n        └── fr.yml\n\u003C/code>\u003C/pre>\u003Ch3 id=\"frontmatter-internationalization\">Frontmatter Internationalization\u003C/h3>\n\u003Cp>Structuring multilingual frontmatter for comprehensive metadata management:\u003C/p>\n\u003Cpre>\u003Ccode class=\"hljs language-yaml\">\u003Cspan class=\"hljs-meta\">---\u003C/span>\n\u003Cspan class=\"hljs-comment\"># Universal metadata\u003C/span>\n\u003Cspan class=\"hljs-attr\">id:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;getting-started-guide&quot;\u003C/span>\n\u003Cspan class=\"hljs-attr\">type:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;tutorial&quot;\u003C/span>\n\u003Cspan class=\"hljs-attr\">version:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;2.1.0&quot;\u003C/span>\n\u003Cspan class=\"hljs-attr\">last_updated:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;2025-12-24&quot;\u003C/span>\n\n\u003Cspan class=\"hljs-comment\"># Language-specific metadata\u003C/span>\n\u003Cspan class=\"hljs-attr\">lang:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;en&quot;\u003C/span>\n\u003Cspan class=\"hljs-attr\">title:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;Getting Started with Our Platform&quot;\u003C/span>\n\u003Cspan class=\"hljs-attr\">description:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;Comprehensive guide to platform setup and initial configuration&quot;\u003C/span>\n\u003Cspan class=\"hljs-attr\">keywords:\u003C/span> [\u003Cspan class=\"hljs-string\">&quot;getting started&quot;\u003C/span>, \u003Cspan class=\"hljs-string\">&quot;setup&quot;\u003C/span>, \u003Cspan class=\"hljs-string\">&quot;configuration&quot;\u003C/span>, \u003Cspan class=\"hljs-string\">&quot;tutorial&quot;\u003C/span>]\n\n\u003Cspan class=\"hljs-comment\"># Localization metadata\u003C/span>\n\u003Cspan class=\"hljs-attr\">translations:\u003C/span>\n  \u003Cspan class=\"hljs-attr\">es:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;es/getting-started.md&quot;\u003C/span>\n  \u003Cspan class=\"hljs-attr\">fr:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;fr/getting-started.md&quot;\u003C/span>\n  \u003Cspan class=\"hljs-attr\">de:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;de/getting-started.md&quot;\u003C/span>\n  \u003Cspan class=\"hljs-attr\">ja:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;ja/getting-started.md&quot;\u003C/span>\n\n\u003Cspan class=\"hljs-comment\"># Cultural adaptations\u003C/span>\n\u003Cspan class=\"hljs-attr\">region_specific:\u003C/span>\n  \u003Cspan class=\"hljs-attr\">currency:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;USD&quot;\u003C/span>\n  \u003Cspan class=\"hljs-attr\">date_format:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;MM/DD/YYYY&quot;\u003C/span>\n  \u003Cspan class=\"hljs-attr\">number_format:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;1,234.56&quot;\u003C/span>\n\n\u003Cspan class=\"hljs-comment\"># Translation status\u003C/span>\n\u003Cspan class=\"hljs-attr\">translation_status:\u003C/span>\n  \u003Cspan class=\"hljs-attr\">source_lang:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;en&quot;\u003C/span>\n  \u003Cspan class=\"hljs-attr\">translated_by:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;professional&quot;\u003C/span>\n  \u003Cspan class=\"hljs-attr\">reviewed_by:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;technical-writer&quot;\u003C/span>\n  \u003Cspan class=\"hljs-attr\">last_sync:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;2025-12-24T10:00:00Z&quot;\u003C/span>\n\u003Cspan class=\"hljs-meta\">---\u003C/span>\n\u003C/code>\u003C/pre>\u003Ch2 id=\"advanced-translation-workflow-systems\">Advanced Translation Workflow Systems\u003C/h2>\n\u003Ch3 id=\"automated-translation-pipeline\">Automated Translation Pipeline\u003C/h3>\n\u003Cp>Building comprehensive translation automation with modern tools:\u003C/p>\n\u003Cpre>\u003Ccode class=\"hljs language-javascript\">\u003Cspan class=\"hljs-comment\">// i18n-automation.js - Advanced translation workflow system\u003C/span>\n\u003Cspan class=\"hljs-keyword\">const\u003C/span> fs = \u003Cspan class=\"hljs-built_in\">require\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;fs&#x27;\u003C/span>);\n\u003Cspan class=\"hljs-keyword\">const\u003C/span> path = \u003Cspan class=\"hljs-built_in\">require\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;path&#x27;\u003C/span>);\n\u003Cspan class=\"hljs-keyword\">const\u003C/span> matter = \u003Cspan class=\"hljs-built_in\">require\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;gray-matter&#x27;\u003C/span>);\n\u003Cspan class=\"hljs-keyword\">const\u003C/span> { translateText } = \u003Cspan class=\"hljs-built_in\">require\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;@google-cloud/translate&#x27;\u003C/span>).\u003Cspan class=\"hljs-property\">v2\u003C/span>;\n\u003Cspan class=\"hljs-keyword\">const\u003C/span> yaml = \u003Cspan class=\"hljs-built_in\">require\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;js-yaml&#x27;\u003C/span>);\n\n\u003Cspan class=\"hljs-keyword\">class\u003C/span> \u003Cspan class=\"hljs-title class_\">MarkdownInternationalization\u003C/span> {\n    \u003Cspan class=\"hljs-title function_\">constructor\u003C/span>(\u003Cspan class=\"hljs-params\">config\u003C/span>) {\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">config\u003C/span> = {\n            \u003Cspan class=\"hljs-attr\">sourceLanguage\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;en&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-attr\">targetLanguages\u003C/span>: [\u003Cspan class=\"hljs-string\">&#x27;es&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;fr&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;de&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;ja&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;zh&#x27;\u003C/span>],\n            \u003Cspan class=\"hljs-attr\">translationProvider\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;google&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-attr\">autoTranslate\u003C/span>: \u003Cspan class=\"hljs-literal\">false\u003C/span>,\n            \u003Cspan class=\"hljs-attr\">preserveCodeBlocks\u003C/span>: \u003Cspan class=\"hljs-literal\">true\u003C/span>,\n            \u003Cspan class=\"hljs-attr\">preserveUrls\u003C/span>: \u003Cspan class=\"hljs-literal\">true\u003C/span>,\n            \u003Cspan class=\"hljs-attr\">reviewRequired\u003C/span>: \u003Cspan class=\"hljs-literal\">true\u003C/span>,\n            ...config\n        };\n        \n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">translate\u003C/span> = \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title function_\">translateText\u003C/span>({\n            \u003Cspan class=\"hljs-attr\">projectId\u003C/span>: process.\u003Cspan class=\"hljs-property\">env\u003C/span>.\u003Cspan class=\"hljs-property\">GOOGLE_CLOUD_PROJECT_ID\u003C/span>,\n            \u003Cspan class=\"hljs-attr\">keyFilename\u003C/span>: process.\u003Cspan class=\"hljs-property\">env\u003C/span>.\u003Cspan class=\"hljs-property\">GOOGLE_CLOUD_KEY_FILE\u003C/span>\n        });\n    }\n\n    \u003Cspan class=\"hljs-keyword\">async\u003C/span> \u003Cspan class=\"hljs-title function_\">processDocument\u003C/span>(\u003Cspan class=\"hljs-params\">filePath\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> content = fs.\u003Cspan class=\"hljs-title function_\">readFileSync\u003C/span>(filePath, \u003Cspan class=\"hljs-string\">&#x27;utf8&#x27;\u003C/span>);\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> { \u003Cspan class=\"hljs-attr\">data\u003C/span>: frontmatter, \u003Cspan class=\"hljs-attr\">content\u003C/span>: markdownContent } = \u003Cspan class=\"hljs-title function_\">matter\u003C/span>(content);\n        \n        \u003Cspan class=\"hljs-comment\">// Extract translatable content\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> translatableContent = \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">extractTranslatableContent\u003C/span>(markdownContent);\n        \n        \u003Cspan class=\"hljs-comment\">// Process each target language\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">for\u003C/span> (\u003Cspan class=\"hljs-keyword\">const\u003C/span> targetLang \u003Cspan class=\"hljs-keyword\">of\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">config\u003C/span>.\u003Cspan class=\"hljs-property\">targetLanguages\u003C/span>) {\n            \u003Cspan class=\"hljs-keyword\">await\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">createTranslation\u003C/span>(filePath, frontmatter, translatableContent, targetLang);\n        }\n    }\n\n    \u003Cspan class=\"hljs-title function_\">extractTranslatableContent\u003C/span>(\u003Cspan class=\"hljs-params\">content\u003C/span>) {\n        \u003Cspan class=\"hljs-comment\">// Preserve code blocks and URLs while extracting text\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> codeBlockPattern = \u003Cspan class=\"hljs-regexp\">/```[\\s\\S]*?```/g\u003C/span>;\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> inlineCodePattern = \u003Cspan class=\"hljs-regexp\">/`[^`]+`/g\u003C/span>;\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> urlPattern = \u003Cspan class=\"hljs-regexp\">/https?:\\/\\/[^\\s\\)]+/g\u003C/span>;\n        \n        \u003Cspan class=\"hljs-keyword\">let\u003C/span> preservedElements = [];\n        \u003Cspan class=\"hljs-keyword\">let\u003C/span> processedContent = content;\n        \n        \u003Cspan class=\"hljs-comment\">// Replace code blocks with placeholders\u003C/span>\n        processedContent = processedContent.\u003Cspan class=\"hljs-title function_\">replace\u003C/span>(codeBlockPattern, \u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">match, index\u003C/span>) =&gt;\u003C/span> {\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> placeholder = \u003Cspan class=\"hljs-string\">`__CODE_BLOCK_\u003Cspan class=\"hljs-subst\">${preservedElements.length}\u003C/span>__`\u003C/span>;\n            preservedElements.\u003Cspan class=\"hljs-title function_\">push\u003C/span>({ \u003Cspan class=\"hljs-attr\">type\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;codeblock&#x27;\u003C/span>, \u003Cspan class=\"hljs-attr\">content\u003C/span>: match });\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> placeholder;\n        });\n        \n        \u003Cspan class=\"hljs-comment\">// Replace inline code with placeholders\u003C/span>\n        processedContent = processedContent.\u003Cspan class=\"hljs-title function_\">replace\u003C/span>(inlineCodePattern, \u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">match, index\u003C/span>) =&gt;\u003C/span> {\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> placeholder = \u003Cspan class=\"hljs-string\">`__INLINE_CODE_\u003Cspan class=\"hljs-subst\">${preservedElements.length}\u003C/span>__`\u003C/span>;\n            preservedElements.\u003Cspan class=\"hljs-title function_\">push\u003C/span>({ \u003Cspan class=\"hljs-attr\">type\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;inlinecode&#x27;\u003C/span>, \u003Cspan class=\"hljs-attr\">content\u003C/span>: match });\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> placeholder;\n        });\n        \n        \u003Cspan class=\"hljs-comment\">// Replace URLs with placeholders\u003C/span>\n        processedContent = processedContent.\u003Cspan class=\"hljs-title function_\">replace\u003C/span>(urlPattern, \u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">match, index\u003C/span>) =&gt;\u003C/span> {\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> placeholder = \u003Cspan class=\"hljs-string\">`__URL_\u003Cspan class=\"hljs-subst\">${preservedElements.length}\u003C/span>__`\u003C/span>;\n            preservedElements.\u003Cspan class=\"hljs-title function_\">push\u003C/span>({ \u003Cspan class=\"hljs-attr\">type\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;url&#x27;\u003C/span>, \u003Cspan class=\"hljs-attr\">content\u003C/span>: match });\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> placeholder;\n        });\n        \n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> {\n            \u003Cspan class=\"hljs-attr\">content\u003C/span>: processedContent,\n            \u003Cspan class=\"hljs-attr\">preservedElements\u003C/span>: preservedElements\n        };\n    }\n\n    \u003Cspan class=\"hljs-keyword\">async\u003C/span> \u003Cspan class=\"hljs-title function_\">translateContent\u003C/span>(\u003Cspan class=\"hljs-params\">text, targetLanguage\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">try\u003C/span> {\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> [translation] = \u003Cspan class=\"hljs-keyword\">await\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">translate\u003C/span>.\u003Cspan class=\"hljs-title function_\">translate\u003C/span>(text, {\n                \u003Cspan class=\"hljs-attr\">from\u003C/span>: \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">config\u003C/span>.\u003Cspan class=\"hljs-property\">sourceLanguage\u003C/span>,\n                \u003Cspan class=\"hljs-attr\">to\u003C/span>: targetLanguage,\n                \u003Cspan class=\"hljs-attr\">format\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;text&#x27;\u003C/span>\n            });\n            \n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> translation;\n        } \u003Cspan class=\"hljs-keyword\">catch\u003C/span> (error) {\n            \u003Cspan class=\"hljs-variable language_\">console\u003C/span>.\u003Cspan class=\"hljs-title function_\">error\u003C/span>(\u003Cspan class=\"hljs-string\">`Translation error for \u003Cspan class=\"hljs-subst\">${targetLanguage}\u003C/span>:`\u003C/span>, error);\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> text; \u003Cspan class=\"hljs-comment\">// Return original on error\u003C/span>\n        }\n    }\n\n    \u003Cspan class=\"hljs-title function_\">restorePreservedElements\u003C/span>(\u003Cspan class=\"hljs-params\">translatedContent, preservedElements\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">let\u003C/span> restoredContent = translatedContent;\n        \n        preservedElements.\u003Cspan class=\"hljs-title function_\">forEach\u003C/span>(\u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">element, index\u003C/span>) =&gt;\u003C/span> {\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> placeholder = element.\u003Cspan class=\"hljs-property\">type\u003C/span> === \u003Cspan class=\"hljs-string\">&#x27;codeblock&#x27;\u003C/span> ? \u003Cspan class=\"hljs-string\">`__CODE_BLOCK_\u003Cspan class=\"hljs-subst\">${index}\u003C/span>__`\u003C/span> :\n                               element.\u003Cspan class=\"hljs-property\">type\u003C/span> === \u003Cspan class=\"hljs-string\">&#x27;inlinecode&#x27;\u003C/span> ? \u003Cspan class=\"hljs-string\">`__INLINE_CODE_\u003Cspan class=\"hljs-subst\">${index}\u003C/span>__`\u003C/span> :\n                               \u003Cspan class=\"hljs-string\">`__URL_\u003Cspan class=\"hljs-subst\">${index}\u003C/span>__`\u003C/span>;\n            \n            restoredContent = restoredContent.\u003Cspan class=\"hljs-title function_\">replace\u003C/span>(placeholder, element.\u003Cspan class=\"hljs-property\">content\u003C/span>);\n        });\n        \n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> restoredContent;\n    }\n\n    \u003Cspan class=\"hljs-keyword\">async\u003C/span> \u003Cspan class=\"hljs-title function_\">createTranslation\u003C/span>(\u003Cspan class=\"hljs-params\">sourcePath, frontmatter, translatableContent, targetLang\u003C/span>) {\n        \u003Cspan class=\"hljs-comment\">// Translate content\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> translatedText = \u003Cspan class=\"hljs-keyword\">await\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">translateContent\u003C/span>(\n            translatableContent.\u003Cspan class=\"hljs-property\">content\u003C/span>, \n            targetLang\n        );\n        \n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> finalContent = \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">restorePreservedElements\u003C/span>(\n            translatedText, \n            translatableContent.\u003Cspan class=\"hljs-property\">preservedElements\u003C/span>\n        );\n        \n        \u003Cspan class=\"hljs-comment\">// Update frontmatter for target language\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> translatedFrontmatter = {\n            ...frontmatter,\n            \u003Cspan class=\"hljs-attr\">lang\u003C/span>: targetLang,\n            \u003Cspan class=\"hljs-attr\">title\u003C/span>: \u003Cspan class=\"hljs-keyword\">await\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">translateContent\u003C/span>(frontmatter.\u003Cspan class=\"hljs-property\">title\u003C/span>, targetLang),\n            \u003Cspan class=\"hljs-attr\">description\u003C/span>: \u003Cspan class=\"hljs-keyword\">await\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">translateContent\u003C/span>(frontmatter.\u003Cspan class=\"hljs-property\">description\u003C/span>, targetLang),\n            \u003Cspan class=\"hljs-attr\">translation_status\u003C/span>: {\n                \u003Cspan class=\"hljs-attr\">source_lang\u003C/span>: \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">config\u003C/span>.\u003Cspan class=\"hljs-property\">sourceLanguage\u003C/span>,\n                \u003Cspan class=\"hljs-attr\">translated_by\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;automated&#x27;\u003C/span>,\n                \u003Cspan class=\"hljs-attr\">reviewed_by\u003C/span>: \u003Cspan class=\"hljs-literal\">null\u003C/span>,\n                \u003Cspan class=\"hljs-attr\">last_sync\u003C/span>: \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">Date\u003C/span>().\u003Cspan class=\"hljs-title function_\">toISOString\u003C/span>(),\n                \u003Cspan class=\"hljs-attr\">requires_review\u003C/span>: \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">config\u003C/span>.\u003Cspan class=\"hljs-property\">reviewRequired\u003C/span>\n            }\n        };\n        \n        \u003Cspan class=\"hljs-comment\">// Generate target file path\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> targetPath = \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">generateTargetPath\u003C/span>(sourcePath, targetLang);\n        \n        \u003Cspan class=\"hljs-comment\">// Create translated document\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> translatedDocument = matter.\u003Cspan class=\"hljs-title function_\">stringify\u003C/span>(finalContent, translatedFrontmatter);\n        \n        \u003Cspan class=\"hljs-comment\">// Ensure target directory exists\u003C/span>\n        fs.\u003Cspan class=\"hljs-title function_\">mkdirSync\u003C/span>(path.\u003Cspan class=\"hljs-title function_\">dirname\u003C/span>(targetPath), { \u003Cspan class=\"hljs-attr\">recursive\u003C/span>: \u003Cspan class=\"hljs-literal\">true\u003C/span> });\n        \n        \u003Cspan class=\"hljs-comment\">// Write translated file\u003C/span>\n        fs.\u003Cspan class=\"hljs-title function_\">writeFileSync\u003C/span>(targetPath, translatedDocument, \u003Cspan class=\"hljs-string\">&#x27;utf8&#x27;\u003C/span>);\n        \n        \u003Cspan class=\"hljs-variable language_\">console\u003C/span>.\u003Cspan class=\"hljs-title function_\">log\u003C/span>(\u003Cspan class=\"hljs-string\">`Created translation: \u003Cspan class=\"hljs-subst\">${targetPath}\u003C/span>`\u003C/span>);\n    }\n\n    \u003Cspan class=\"hljs-title function_\">generateTargetPath\u003C/span>(\u003Cspan class=\"hljs-params\">sourcePath, targetLang\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> parsedPath = path.\u003Cspan class=\"hljs-title function_\">parse\u003C/span>(sourcePath);\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> sourceDir = parsedPath.\u003Cspan class=\"hljs-property\">dir\u003C/span>;\n        \n        \u003Cspan class=\"hljs-comment\">// Replace &#x27;en&#x27; directory with target language\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> targetDir = sourceDir.\u003Cspan class=\"hljs-title function_\">replace\u003C/span>(\u003Cspan class=\"hljs-regexp\">/\\/en(\\/|$)/\u003C/span>, \u003Cspan class=\"hljs-string\">`/\u003Cspan class=\"hljs-subst\">${targetLang}\u003C/span>$1`\u003C/span>);\n        \n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> path.\u003Cspan class=\"hljs-title function_\">join\u003C/span>(targetDir, parsedPath.\u003Cspan class=\"hljs-property\">base\u003C/span>);\n    }\n}\n\n\u003Cspan class=\"hljs-comment\">// Usage example\u003C/span>\n\u003Cspan class=\"hljs-keyword\">const\u003C/span> i18n = \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">MarkdownInternationalization\u003C/span>({\n    \u003Cspan class=\"hljs-attr\">sourceLanguage\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;en&#x27;\u003C/span>,\n    \u003Cspan class=\"hljs-attr\">targetLanguages\u003C/span>: [\u003Cspan class=\"hljs-string\">&#x27;es&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;fr&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;de&#x27;\u003C/span>],\n    \u003Cspan class=\"hljs-attr\">autoTranslate\u003C/span>: \u003Cspan class=\"hljs-literal\">true\u003C/span>,\n    \u003Cspan class=\"hljs-attr\">reviewRequired\u003C/span>: \u003Cspan class=\"hljs-literal\">true\u003C/span>\n});\n\n\u003Cspan class=\"hljs-comment\">// Process all English documentation\u003C/span>\n\u003Cspan class=\"hljs-keyword\">const\u003C/span> glob = \u003Cspan class=\"hljs-built_in\">require\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;glob&#x27;\u003C/span>);\n\u003Cspan class=\"hljs-title function_\">glob\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;docs/en/**/*.md&#x27;\u003C/span>, \u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">err, files\u003C/span>) =&gt;\u003C/span> {\n    files.\u003Cspan class=\"hljs-title function_\">forEach\u003C/span>(\u003Cspan class=\"hljs-function\">\u003Cspan class=\"hljs-params\">file\u003C/span> =&gt;\u003C/span> {\n        i18n.\u003Cspan class=\"hljs-title function_\">processDocument\u003C/span>(file);\n    });\n});\n\u003C/code>\u003C/pre>\u003Ch3 id=\"translation-memory-and-consistency\">Translation Memory and Consistency\u003C/h3>\n\u003Cp>Implementing translation memory for consistent terminology:\u003C/p>\n\u003Cpre>\u003Ccode class=\"hljs language-javascript\">\u003Cspan class=\"hljs-comment\">// translation-memory.js - Advanced translation memory system\u003C/span>\n\u003Cspan class=\"hljs-keyword\">class\u003C/span> \u003Cspan class=\"hljs-title class_\">TranslationMemory\u003C/span> {\n    \u003Cspan class=\"hljs-title function_\">constructor\u003C/span>(\u003Cspan class=\"hljs-params\">memoryPath = \u003Cspan class=\"hljs-string\">&#x27;i18n/translation-memory.json&#x27;\u003C/span>\u003C/span>) {\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">memoryPath\u003C/span> = memoryPath;\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">memory\u003C/span> = \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">loadMemory\u003C/span>();\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">terminology\u003C/span> = \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">Map\u003C/span>();\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">loadTerminology\u003C/span>();\n    }\n\n    \u003Cspan class=\"hljs-title function_\">loadMemory\u003C/span>(\u003Cspan class=\"hljs-params\">\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">try\u003C/span> {\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> data = fs.\u003Cspan class=\"hljs-title function_\">readFileSync\u003C/span>(\u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">memoryPath\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;utf8&#x27;\u003C/span>);\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-title class_\">JSON\u003C/span>.\u003Cspan class=\"hljs-title function_\">parse\u003C/span>(data);\n        } \u003Cspan class=\"hljs-keyword\">catch\u003C/span> (error) {\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> {\n                \u003Cspan class=\"hljs-attr\">segments\u003C/span>: \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">Map\u003C/span>(),\n                \u003Cspan class=\"hljs-attr\">metadata\u003C/span>: {\n                    \u003Cspan class=\"hljs-attr\">created\u003C/span>: \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">Date\u003C/span>().\u003Cspan class=\"hljs-title function_\">toISOString\u003C/span>(),\n                    \u003Cspan class=\"hljs-attr\">last_updated\u003C/span>: \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">Date\u003C/span>().\u003Cspan class=\"hljs-title function_\">toISOString\u003C/span>(),\n                    \u003Cspan class=\"hljs-attr\">version\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;1.0.0&#x27;\u003C/span>\n                }\n            };\n        }\n    }\n\n    \u003Cspan class=\"hljs-title function_\">saveMemory\u003C/span>(\u003Cspan class=\"hljs-params\">\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> serializedMemory = {\n            ...\u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">memory\u003C/span>,\n            \u003Cspan class=\"hljs-attr\">segments\u003C/span>: \u003Cspan class=\"hljs-title class_\">Array\u003C/span>.\u003Cspan class=\"hljs-title function_\">from\u003C/span>(\u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">memory\u003C/span>.\u003Cspan class=\"hljs-property\">segments\u003C/span>.\u003Cspan class=\"hljs-title function_\">entries\u003C/span>()),\n            \u003Cspan class=\"hljs-attr\">metadata\u003C/span>: {\n                ...\u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">memory\u003C/span>.\u003Cspan class=\"hljs-property\">metadata\u003C/span>,\n                \u003Cspan class=\"hljs-attr\">last_updated\u003C/span>: \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">Date\u003C/span>().\u003Cspan class=\"hljs-title function_\">toISOString\u003C/span>()\n            }\n        };\n        \n        fs.\u003Cspan class=\"hljs-title function_\">writeFileSync\u003C/span>(\u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">memoryPath\u003C/span>, \u003Cspan class=\"hljs-title class_\">JSON\u003C/span>.\u003Cspan class=\"hljs-title function_\">stringify\u003C/span>(serializedMemory, \u003Cspan class=\"hljs-literal\">null\u003C/span>, \u003Cspan class=\"hljs-number\">2\u003C/span>));\n    }\n\n    \u003Cspan class=\"hljs-title function_\">addTranslation\u003C/span>(\u003Cspan class=\"hljs-params\">sourceText, targetText, sourceLang, targetLang\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> segmentKey = \u003Cspan class=\"hljs-string\">`\u003Cspan class=\"hljs-subst\">${sourceLang}\u003C/span>-\u003Cspan class=\"hljs-subst\">${targetLang}\u003C/span>:\u003Cspan class=\"hljs-subst\">${\u003Cspan class=\"hljs-variable language_\">this\u003C/span>.normalizeText(sourceText)}\u003C/span>`\u003C/span>;\n        \n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">memory\u003C/span>.\u003Cspan class=\"hljs-property\">segments\u003C/span>.\u003Cspan class=\"hljs-title function_\">set\u003C/span>(segmentKey, {\n            \u003Cspan class=\"hljs-attr\">source\u003C/span>: sourceText,\n            \u003Cspan class=\"hljs-attr\">target\u003C/span>: targetText,\n            \u003Cspan class=\"hljs-attr\">source_lang\u003C/span>: sourceLang,\n            \u003Cspan class=\"hljs-attr\">target_lang\u003C/span>: targetLang,\n            \u003Cspan class=\"hljs-attr\">created\u003C/span>: \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">Date\u003C/span>().\u003Cspan class=\"hljs-title function_\">toISOString\u003C/span>(),\n            \u003Cspan class=\"hljs-attr\">usage_count\u003C/span>: (\u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">memory\u003C/span>.\u003Cspan class=\"hljs-property\">segments\u003C/span>.\u003Cspan class=\"hljs-title function_\">get\u003C/span>(segmentKey)?.\u003Cspan class=\"hljs-property\">usage_count\u003C/span> || \u003Cspan class=\"hljs-number\">0\u003C/span>) + \u003Cspan class=\"hljs-number\">1\u003C/span>,\n            \u003Cspan class=\"hljs-attr\">quality_score\u003C/span>: \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">calculateQualityScore\u003C/span>(sourceText, targetText)\n        });\n        \n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">saveMemory\u003C/span>();\n    }\n\n    \u003Cspan class=\"hljs-title function_\">findTranslation\u003C/span>(\u003Cspan class=\"hljs-params\">sourceText, sourceLang, targetLang\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> segmentKey = \u003Cspan class=\"hljs-string\">`\u003Cspan class=\"hljs-subst\">${sourceLang}\u003C/span>-\u003Cspan class=\"hljs-subst\">${targetLang}\u003C/span>:\u003Cspan class=\"hljs-subst\">${\u003Cspan class=\"hljs-variable language_\">this\u003C/span>.normalizeText(sourceText)}\u003C/span>`\u003C/span>;\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> exact = \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">memory\u003C/span>.\u003Cspan class=\"hljs-property\">segments\u003C/span>.\u003Cspan class=\"hljs-title function_\">get\u003C/span>(segmentKey);\n        \n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> (exact) {\n            \u003Cspan class=\"hljs-comment\">// Update usage count\u003C/span>\n            exact.\u003Cspan class=\"hljs-property\">usage_count\u003C/span>++;\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> {\n                \u003Cspan class=\"hljs-attr\">translation\u003C/span>: exact.\u003Cspan class=\"hljs-property\">target\u003C/span>,\n                \u003Cspan class=\"hljs-attr\">confidence\u003C/span>: \u003Cspan class=\"hljs-number\">1.0\u003C/span>,\n                \u003Cspan class=\"hljs-attr\">type\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;exact&#x27;\u003C/span>\n            };\n        }\n        \n        \u003Cspan class=\"hljs-comment\">// Look for fuzzy matches\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">findFuzzyMatch\u003C/span>(sourceText, sourceLang, targetLang);\n    }\n\n    \u003Cspan class=\"hljs-title function_\">findFuzzyMatch\u003C/span>(\u003Cspan class=\"hljs-params\">sourceText, sourceLang, targetLang\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> normalizedSource = \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">normalizeText\u003C/span>(sourceText);\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> prefix = \u003Cspan class=\"hljs-string\">`\u003Cspan class=\"hljs-subst\">${sourceLang}\u003C/span>-\u003Cspan class=\"hljs-subst\">${targetLang}\u003C/span>:`\u003C/span>;\n        \n        \u003Cspan class=\"hljs-keyword\">let\u003C/span> bestMatch = \u003Cspan class=\"hljs-literal\">null\u003C/span>;\n        \u003Cspan class=\"hljs-keyword\">let\u003C/span> bestScore = \u003Cspan class=\"hljs-number\">0\u003C/span>;\n        \n        \u003Cspan class=\"hljs-keyword\">for\u003C/span> (\u003Cspan class=\"hljs-keyword\">const\u003C/span> [key, segment] \u003Cspan class=\"hljs-keyword\">of\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">memory\u003C/span>.\u003Cspan class=\"hljs-property\">segments\u003C/span>.\u003Cspan class=\"hljs-title function_\">entries\u003C/span>()) {\n            \u003Cspan class=\"hljs-keyword\">if\u003C/span> (!key.\u003Cspan class=\"hljs-title function_\">startsWith\u003C/span>(prefix)) \u003Cspan class=\"hljs-keyword\">continue\u003C/span>;\n            \n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> segmentSource = key.\u003Cspan class=\"hljs-title function_\">substring\u003C/span>(prefix.\u003Cspan class=\"hljs-property\">length\u003C/span>);\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> similarity = \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">calculateSimilarity\u003C/span>(normalizedSource, segmentSource);\n            \n            \u003Cspan class=\"hljs-keyword\">if\u003C/span> (similarity &gt; bestScore &amp;&amp; similarity &gt; \u003Cspan class=\"hljs-number\">0.8\u003C/span>) {\n                bestMatch = segment;\n                bestScore = similarity;\n            }\n        }\n        \n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> bestMatch ? {\n            \u003Cspan class=\"hljs-attr\">translation\u003C/span>: bestMatch.\u003Cspan class=\"hljs-property\">target\u003C/span>,\n            \u003Cspan class=\"hljs-attr\">confidence\u003C/span>: bestScore,\n            \u003Cspan class=\"hljs-attr\">type\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;fuzzy&#x27;\u003C/span>\n        } : \u003Cspan class=\"hljs-literal\">null\u003C/span>;\n    }\n\n    \u003Cspan class=\"hljs-title function_\">normalizeText\u003C/span>(\u003Cspan class=\"hljs-params\">text\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> text.\u003Cspan class=\"hljs-title function_\">toLowerCase\u003C/span>().\u003Cspan class=\"hljs-title function_\">trim\u003C/span>().\u003Cspan class=\"hljs-title function_\">replace\u003C/span>(\u003Cspan class=\"hljs-regexp\">/\\s+/g\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27; &#x27;\u003C/span>);\n    }\n\n    \u003Cspan class=\"hljs-title function_\">calculateSimilarity\u003C/span>(\u003Cspan class=\"hljs-params\">text1, text2\u003C/span>) {\n        \u003Cspan class=\"hljs-comment\">// Simple Levenshtein distance-based similarity\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> distance = \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">levenshteinDistance\u003C/span>(text1, text2);\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> maxLength = \u003Cspan class=\"hljs-title class_\">Math\u003C/span>.\u003Cspan class=\"hljs-title function_\">max\u003C/span>(text1.\u003Cspan class=\"hljs-property\">length\u003C/span>, text2.\u003Cspan class=\"hljs-property\">length\u003C/span>);\n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-number\">1\u003C/span> - (distance / maxLength);\n    }\n\n    \u003Cspan class=\"hljs-title function_\">levenshteinDistance\u003C/span>(\u003Cspan class=\"hljs-params\">str1, str2\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> matrix = [];\n        \n        \u003Cspan class=\"hljs-keyword\">for\u003C/span> (\u003Cspan class=\"hljs-keyword\">let\u003C/span> i = \u003Cspan class=\"hljs-number\">0\u003C/span>; i &lt;= str2.\u003Cspan class=\"hljs-property\">length\u003C/span>; i++) {\n            matrix[i] = [i];\n        }\n        \n        \u003Cspan class=\"hljs-keyword\">for\u003C/span> (\u003Cspan class=\"hljs-keyword\">let\u003C/span> j = \u003Cspan class=\"hljs-number\">0\u003C/span>; j &lt;= str1.\u003Cspan class=\"hljs-property\">length\u003C/span>; j++) {\n            matrix[\u003Cspan class=\"hljs-number\">0\u003C/span>][j] = j;\n        }\n        \n        \u003Cspan class=\"hljs-keyword\">for\u003C/span> (\u003Cspan class=\"hljs-keyword\">let\u003C/span> i = \u003Cspan class=\"hljs-number\">1\u003C/span>; i &lt;= str2.\u003Cspan class=\"hljs-property\">length\u003C/span>; i++) {\n            \u003Cspan class=\"hljs-keyword\">for\u003C/span> (\u003Cspan class=\"hljs-keyword\">let\u003C/span> j = \u003Cspan class=\"hljs-number\">1\u003C/span>; j &lt;= str1.\u003Cspan class=\"hljs-property\">length\u003C/span>; j++) {\n                \u003Cspan class=\"hljs-keyword\">if\u003C/span> (str2.\u003Cspan class=\"hljs-title function_\">charAt\u003C/span>(i - \u003Cspan class=\"hljs-number\">1\u003C/span>) === str1.\u003Cspan class=\"hljs-title function_\">charAt\u003C/span>(j - \u003Cspan class=\"hljs-number\">1\u003C/span>)) {\n                    matrix[i][j] = matrix[i - \u003Cspan class=\"hljs-number\">1\u003C/span>][j - \u003Cspan class=\"hljs-number\">1\u003C/span>];\n                } \u003Cspan class=\"hljs-keyword\">else\u003C/span> {\n                    matrix[i][j] = \u003Cspan class=\"hljs-title class_\">Math\u003C/span>.\u003Cspan class=\"hljs-title function_\">min\u003C/span>(\n                        matrix[i - \u003Cspan class=\"hljs-number\">1\u003C/span>][j - \u003Cspan class=\"hljs-number\">1\u003C/span>] + \u003Cspan class=\"hljs-number\">1\u003C/span>,\n                        matrix[i][j - \u003Cspan class=\"hljs-number\">1\u003C/span>] + \u003Cspan class=\"hljs-number\">1\u003C/span>,\n                        matrix[i - \u003Cspan class=\"hljs-number\">1\u003C/span>][j] + \u003Cspan class=\"hljs-number\">1\u003C/span>\n                    );\n                }\n            }\n        }\n        \n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> matrix[str2.\u003Cspan class=\"hljs-property\">length\u003C/span>][str1.\u003Cspan class=\"hljs-property\">length\u003C/span>];\n    }\n\n    \u003Cspan class=\"hljs-title function_\">calculateQualityScore\u003C/span>(\u003Cspan class=\"hljs-params\">sourceText, targetText\u003C/span>) {\n        \u003Cspan class=\"hljs-comment\">// Simple quality scoring based on length ratio and character diversity\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> lengthRatio = targetText.\u003Cspan class=\"hljs-property\">length\u003C/span> / sourceText.\u003Cspan class=\"hljs-property\">length\u003C/span>;\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> lengthScore = lengthRatio &gt; \u003Cspan class=\"hljs-number\">0.5\u003C/span> &amp;&amp; lengthRatio &lt; \u003Cspan class=\"hljs-number\">2.0\u003C/span> ? \u003Cspan class=\"hljs-number\">1.0\u003C/span> : \u003Cspan class=\"hljs-number\">0.5\u003C/span>;\n        \n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> charDiversitySource = \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">Set\u003C/span>(sourceText.\u003Cspan class=\"hljs-title function_\">toLowerCase\u003C/span>()).\u003Cspan class=\"hljs-property\">size\u003C/span>;\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> charDiversityTarget = \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">Set\u003C/span>(targetText.\u003Cspan class=\"hljs-title function_\">toLowerCase\u003C/span>()).\u003Cspan class=\"hljs-property\">size\u003C/span>;\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> diversityScore = \u003Cspan class=\"hljs-title class_\">Math\u003C/span>.\u003Cspan class=\"hljs-title function_\">min\u003C/span>(charDiversityTarget / charDiversitySource, \u003Cspan class=\"hljs-number\">1.0\u003C/span>);\n        \n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> (lengthScore + diversityScore) / \u003Cspan class=\"hljs-number\">2\u003C/span>;\n    }\n}\n\u003C/code>\u003C/pre>\u003Ch2 id=\"locale-specific-formatting-and-cultural-adaptation\">Locale-Specific Formatting and Cultural Adaptation\u003C/h2>\n\u003Ch3 id=\"regional-content-customization\">Regional Content Customization\u003C/h3>\n\u003Cp>Implementing comprehensive locale-specific formatting:\u003C/p>\n\u003Cpre>\u003Ccode class=\"hljs language-yaml\">\u003Cspan class=\"hljs-comment\"># i18n/locales/cultural-adaptations.yml\u003C/span>\n\u003Cspan class=\"hljs-attr\">locales:\u003C/span>\n  \u003Cspan class=\"hljs-attr\">en-US:\u003C/span>\n    \u003Cspan class=\"hljs-attr\">currency:\u003C/span>\n      \u003Cspan class=\"hljs-attr\">symbol:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;$&quot;\u003C/span>\n      \u003Cspan class=\"hljs-attr\">position:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;before&quot;\u003C/span>\n      \u003Cspan class=\"hljs-attr\">decimal_separator:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;.&quot;\u003C/span>\n      \u003Cspan class=\"hljs-attr\">thousands_separator:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;,&quot;\u003C/span>\n      \u003Cspan class=\"hljs-attr\">format:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;${amount}&quot;\u003C/span>\n    \n    \u003Cspan class=\"hljs-attr\">date:\u003C/span>\n      \u003Cspan class=\"hljs-attr\">format:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;MM/DD/YYYY&quot;\u003C/span>\n      \u003Cspan class=\"hljs-attr\">long_format:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;MMMM DD, YYYY&quot;\u003C/span>\n      \u003Cspan class=\"hljs-attr\">time_format:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;h:mm A&quot;\u003C/span>\n    \n    \u003Cspan class=\"hljs-attr\">numbers:\u003C/span>\n      \u003Cspan class=\"hljs-attr\">decimal_separator:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;.&quot;\u003C/span>\n      \u003Cspan class=\"hljs-attr\">thousands_separator:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;,&quot;\u003C/span>\n      \n    \u003Cspan class=\"hljs-attr\">cultural_notes:\u003C/span>\n      \u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-string\">&quot;Use direct, concise language&quot;\u003C/span>\n      \u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-string\">&quot;Include specific examples and step-by-step instructions&quot;\u003C/span>\n      \u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-string\">&quot;Emphasize efficiency and time-saving benefits&quot;\u003C/span>\n    \n    \u003Cspan class=\"hljs-attr\">legal_disclaimers:\u003C/span>\n      \u003Cspan class=\"hljs-attr\">privacy:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;en-US/privacy-notice.md&quot;\u003C/span>\n      \u003Cspan class=\"hljs-attr\">terms:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;en-US/terms-of-service.md&quot;\u003C/span>\n      \n  \u003Cspan class=\"hljs-attr\">de-DE:\u003C/span>\n    \u003Cspan class=\"hljs-attr\">currency:\u003C/span>\n      \u003Cspan class=\"hljs-attr\">symbol:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;€&quot;\u003C/span>\n      \u003Cspan class=\"hljs-attr\">position:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;after&quot;\u003C/span>\n      \u003Cspan class=\"hljs-attr\">decimal_separator:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;,&quot;\u003C/span>\n      \u003Cspan class=\"hljs-attr\">thousands_separator:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;.&quot;\u003C/span>\n      \u003Cspan class=\"hljs-attr\">format:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;{amount} €&quot;\u003C/span>\n    \n    \u003Cspan class=\"hljs-attr\">date:\u003C/span>\n      \u003Cspan class=\"hljs-attr\">format:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;DD.MM.YYYY&quot;\u003C/span>\n      \u003Cspan class=\"hljs-attr\">long_format:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;DD. MMMM YYYY&quot;\u003C/span>\n      \u003Cspan class=\"hljs-attr\">time_format:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;HH:mm&quot;\u003C/span>\n    \n    \u003Cspan class=\"hljs-attr\">numbers:\u003C/span>\n      \u003Cspan class=\"hljs-attr\">decimal_separator:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;,&quot;\u003C/span>\n      \u003Cspan class=\"hljs-attr\">thousands_separator:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;.&quot;\u003C/span>\n      \n    \u003Cspan class=\"hljs-attr\">cultural_notes:\u003C/span>\n      \u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-string\">&quot;Provide detailed technical specifications&quot;\u003C/span>\n      \u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-string\">&quot;Include comprehensive safety and compliance information&quot;\u003C/span>\n      \u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-string\">&quot;Use formal tone and complete explanations&quot;\u003C/span>\n    \n    \u003Cspan class=\"hljs-attr\">legal_disclaimers:\u003C/span>\n      \u003Cspan class=\"hljs-attr\">privacy:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;de-DE/datenschutzerklaerung.md&quot;\u003C/span>\n      \u003Cspan class=\"hljs-attr\">terms:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;de-DE/nutzungsbedingungen.md&quot;\u003C/span>\n      \n  \u003Cspan class=\"hljs-attr\">ja-JP:\u003C/span>\n    \u003Cspan class=\"hljs-attr\">currency:\u003C/span>\n      \u003Cspan class=\"hljs-attr\">symbol:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;¥&quot;\u003C/span>\n      \u003Cspan class=\"hljs-attr\">position:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;before&quot;\u003C/span>\n      \u003Cspan class=\"hljs-attr\">decimal_separator:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;.&quot;\u003C/span>\n      \u003Cspan class=\"hljs-attr\">thousands_separator:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;,&quot;\u003C/span>\n      \u003Cspan class=\"hljs-attr\">format:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;¥{amount}&quot;\u003C/span>\n    \n    \u003Cspan class=\"hljs-attr\">date:\u003C/span>\n      \u003Cspan class=\"hljs-attr\">format:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;YYYY/MM/DD&quot;\u003C/span>\n      \u003Cspan class=\"hljs-attr\">long_format:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;YYYY年MM月DD日&quot;\u003C/span>\n      \u003Cspan class=\"hljs-attr\">time_format:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;HH:mm&quot;\u003C/span>\n    \n    \u003Cspan class=\"hljs-attr\">numbers:\u003C/span>\n      \u003Cspan class=\"hljs-attr\">decimal_separator:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;.&quot;\u003C/span>\n      \u003Cspan class=\"hljs-attr\">thousands_separator:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;,&quot;\u003C/span>\n      \n    \u003Cspan class=\"hljs-attr\">cultural_notes:\u003C/span>\n      \u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-string\">&quot;Use respectful, humble language&quot;\u003C/span>\n      \u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-string\">&quot;Provide context and background information&quot;\u003C/span>\n      \u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-string\">&quot;Include visual diagrams and illustrations&quot;\u003C/span>\n      \u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-string\">&quot;Consider hierarchical information structure&quot;\u003C/span>\n    \n    \u003Cspan class=\"hljs-attr\">legal_disclaimers:\u003C/span>\n      \u003Cspan class=\"hljs-attr\">privacy:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;ja-JP/privacy-policy.md&quot;\u003C/span>\n      \u003Cspan class=\"hljs-attr\">terms:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;ja-JP/terms-of-use.md&quot;\u003C/span>\n\u003C/code>\u003C/pre>\u003Ch3 id=\"dynamic-content-localization\">Dynamic Content Localization\u003C/h3>\n\u003Cp>Building intelligent content adaptation systems:\u003C/p>\n\u003Cpre>\u003Ccode class=\"hljs language-javascript\">\u003Cspan class=\"hljs-comment\">// content-localizer.js - Dynamic content localization\u003C/span>\n\u003Cspan class=\"hljs-keyword\">class\u003C/span> \u003Cspan class=\"hljs-title class_\">ContentLocalizer\u003C/span> {\n    \u003Cspan class=\"hljs-title function_\">constructor\u003C/span>(\u003Cspan class=\"hljs-params\">localeConfig\u003C/span>) {\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">locales\u003C/span> = localeConfig;\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">currentLocale\u003C/span> = \u003Cspan class=\"hljs-string\">&#x27;en-US&#x27;\u003C/span>;\n    }\n\n    \u003Cspan class=\"hljs-title function_\">localizeContent\u003C/span>(\u003Cspan class=\"hljs-params\">content, targetLocale\u003C/span>) {\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">currentLocale\u003C/span> = targetLocale;\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> locale = \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">locales\u003C/span>[targetLocale];\n        \n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> (!locale) {\n            \u003Cspan class=\"hljs-variable language_\">console\u003C/span>.\u003Cspan class=\"hljs-title function_\">warn\u003C/span>(\u003Cspan class=\"hljs-string\">`Locale \u003Cspan class=\"hljs-subst\">${targetLocale}\u003C/span> not found, using default`\u003C/span>);\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> content;\n        }\n        \n        \u003Cspan class=\"hljs-keyword\">let\u003C/span> localizedContent = content;\n        \n        \u003Cspan class=\"hljs-comment\">// Localize currency formats\u003C/span>\n        localizedContent = \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">localizeCurrency\u003C/span>(localizedContent, locale);\n        \n        \u003Cspan class=\"hljs-comment\">// Localize date formats\u003C/span>\n        localizedContent = \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">localizeDates\u003C/span>(localizedContent, locale);\n        \n        \u003Cspan class=\"hljs-comment\">// Localize number formats\u003C/span>\n        localizedContent = \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">localizeNumbers\u003C/span>(localizedContent, locale);\n        \n        \u003Cspan class=\"hljs-comment\">// Apply cultural adaptations\u003C/span>\n        localizedContent = \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">applyCulturalAdaptations\u003C/span>(localizedContent, locale);\n        \n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> localizedContent;\n    }\n\n    \u003Cspan class=\"hljs-title function_\">localizeCurrency\u003C/span>(\u003Cspan class=\"hljs-params\">content, locale\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> currencyPattern = \u003Cspan class=\"hljs-regexp\">/\\$(\\d+(?:,\\d{3})*(?:\\.\\d{2})?)/g\u003C/span>;\n        \n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> content.\u003Cspan class=\"hljs-title function_\">replace\u003C/span>(currencyPattern, \u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">match, amount\u003C/span>) =&gt;\u003C/span> {\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> numericAmount = \u003Cspan class=\"hljs-built_in\">parseFloat\u003C/span>(amount.\u003Cspan class=\"hljs-title function_\">replace\u003C/span>(\u003Cspan class=\"hljs-regexp\">/,/g\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;&#x27;\u003C/span>));\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">formatCurrency\u003C/span>(numericAmount, locale.\u003Cspan class=\"hljs-property\">currency\u003C/span>);\n        });\n    }\n\n    \u003Cspan class=\"hljs-title function_\">formatCurrency\u003C/span>(\u003Cspan class=\"hljs-params\">amount, currencyConfig\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> formattedAmount = amount.\u003Cspan class=\"hljs-title function_\">toLocaleString\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;en-US&#x27;\u003C/span>, {\n            \u003Cspan class=\"hljs-attr\">minimumFractionDigits\u003C/span>: \u003Cspan class=\"hljs-number\">2\u003C/span>,\n            \u003Cspan class=\"hljs-attr\">maximumFractionDigits\u003C/span>: \u003Cspan class=\"hljs-number\">2\u003C/span>\n        }).\u003Cspan class=\"hljs-title function_\">replace\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;,&#x27;\u003C/span>, currencyConfig.\u003Cspan class=\"hljs-property\">thousands_separator\u003C/span>)\n          .\u003Cspan class=\"hljs-title function_\">replace\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;.&#x27;\u003C/span>, currencyConfig.\u003Cspan class=\"hljs-property\">decimal_separator\u003C/span>);\n        \n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> currencyConfig.\u003Cspan class=\"hljs-property\">format\u003C/span>.\u003Cspan class=\"hljs-title function_\">replace\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;{amount}&#x27;\u003C/span>, formattedAmount);\n    }\n\n    \u003Cspan class=\"hljs-title function_\">localizeDates\u003C/span>(\u003Cspan class=\"hljs-params\">content, locale\u003C/span>) {\n        \u003Cspan class=\"hljs-comment\">// Match various date patterns and convert them\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> datePatterns = [\n            \u003Cspan class=\"hljs-regexp\">/\\b(\\d{1,2})\\/(\\d{1,2})\\/(\\d{4})\\b/g\u003C/span>,  \u003Cspan class=\"hljs-comment\">// MM/DD/YYYY\u003C/span>\n            \u003Cspan class=\"hljs-regexp\">/\\b(\\d{4})-(\\d{1,2})-(\\d{1,2})\\b/g\u003C/span>     \u003Cspan class=\"hljs-comment\">// YYYY-MM-DD\u003C/span>\n        ];\n        \n        \u003Cspan class=\"hljs-keyword\">let\u003C/span> localizedContent = content;\n        \n        datePatterns.\u003Cspan class=\"hljs-title function_\">forEach\u003C/span>(\u003Cspan class=\"hljs-function\">\u003Cspan class=\"hljs-params\">pattern\u003C/span> =&gt;\u003C/span> {\n            localizedContent = localizedContent.\u003Cspan class=\"hljs-title function_\">replace\u003C/span>(pattern, \u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">match, p1, p2, p3\u003C/span>) =&gt;\u003C/span> {\n                \u003Cspan class=\"hljs-comment\">// Parse and reformat based on locale\u003C/span>\n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> date = \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">Date\u003C/span>(p3, p1 - \u003Cspan class=\"hljs-number\">1\u003C/span>, p2); \u003Cspan class=\"hljs-comment\">// Assuming first pattern is MM/DD/YYYY\u003C/span>\n                \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">formatDate\u003C/span>(date, locale.\u003Cspan class=\"hljs-property\">date\u003C/span>.\u003Cspan class=\"hljs-property\">format\u003C/span>);\n            });\n        });\n        \n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> localizedContent;\n    }\n\n    \u003Cspan class=\"hljs-title function_\">formatDate\u003C/span>(\u003Cspan class=\"hljs-params\">date, format\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> day = \u003Cspan class=\"hljs-title class_\">String\u003C/span>(date.\u003Cspan class=\"hljs-title function_\">getDate\u003C/span>()).\u003Cspan class=\"hljs-title function_\">padStart\u003C/span>(\u003Cspan class=\"hljs-number\">2\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;0&#x27;\u003C/span>);\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> month = \u003Cspan class=\"hljs-title class_\">String\u003C/span>(date.\u003Cspan class=\"hljs-title function_\">getMonth\u003C/span>() + \u003Cspan class=\"hljs-number\">1\u003C/span>).\u003Cspan class=\"hljs-title function_\">padStart\u003C/span>(\u003Cspan class=\"hljs-number\">2\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;0&#x27;\u003C/span>);\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> year = date.\u003Cspan class=\"hljs-title function_\">getFullYear\u003C/span>();\n        \n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> format\n            .\u003Cspan class=\"hljs-title function_\">replace\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;DD&#x27;\u003C/span>, day)\n            .\u003Cspan class=\"hljs-title function_\">replace\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;MM&#x27;\u003C/span>, month)\n            .\u003Cspan class=\"hljs-title function_\">replace\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;YYYY&#x27;\u003C/span>, year);\n    }\n\n    \u003Cspan class=\"hljs-title function_\">localizeNumbers\u003C/span>(\u003Cspan class=\"hljs-params\">content, locale\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> numberPattern = \u003Cspan class=\"hljs-regexp\">/\\b(\\d{1,3}(?:,\\d{3})*(?:\\.\\d+)?)\\b/g\u003C/span>;\n        \n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> content.\u003Cspan class=\"hljs-title function_\">replace\u003C/span>(numberPattern, \u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">match, number\u003C/span>) =&gt;\u003C/span> {\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> number\n                .\u003Cspan class=\"hljs-title function_\">replace\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;,&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;TEMP_THOUSANDS&#x27;\u003C/span>)\n                .\u003Cspan class=\"hljs-title function_\">replace\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;.&#x27;\u003C/span>, locale.\u003Cspan class=\"hljs-property\">numbers\u003C/span>.\u003Cspan class=\"hljs-property\">decimal_separator\u003C/span>)\n                .\u003Cspan class=\"hljs-title function_\">replace\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;TEMP_THOUSANDS&#x27;\u003C/span>, locale.\u003Cspan class=\"hljs-property\">numbers\u003C/span>.\u003Cspan class=\"hljs-property\">thousands_separator\u003C/span>);\n        });\n    }\n\n    \u003Cspan class=\"hljs-title function_\">applyCulturalAdaptations\u003C/span>(\u003Cspan class=\"hljs-params\">content, locale\u003C/span>) {\n        \u003Cspan class=\"hljs-comment\">// Apply locale-specific content modifications\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> (locale.\u003Cspan class=\"hljs-property\">cultural_notes\u003C/span>) {\n            \u003Cspan class=\"hljs-comment\">// This would involve more sophisticated content analysis\u003C/span>\n            \u003Cspan class=\"hljs-comment\">// and adaptation based on cultural preferences\u003C/span>\n            \u003Cspan class=\"hljs-variable language_\">console\u003C/span>.\u003Cspan class=\"hljs-title function_\">log\u003C/span>(\u003Cspan class=\"hljs-string\">`Applying cultural adaptations for \u003Cspan class=\"hljs-subst\">${\u003Cspan class=\"hljs-variable language_\">this\u003C/span>.currentLocale}\u003C/span>`\u003C/span>);\n        }\n        \n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> content;\n    }\n}\n\u003C/code>\u003C/pre>\u003Ch2 id=\"quality-assurance-and-translation-validation\">Quality Assurance and Translation Validation\u003C/h2>\n\u003Ch3 id=\"automated-translation-quality-checks\">Automated Translation Quality Checks\u003C/h3>\n\u003Cp>Implementing comprehensive quality assurance for multilingual content:\u003C/p>\n\u003Cpre>\u003Ccode class=\"hljs language-python\">\u003Cspan class=\"hljs-comment\">#!/usr/bin/env python3\u003C/span>\n\u003Cspan class=\"hljs-comment\"># translation-qa.py - Translation quality assurance system\u003C/span>\n\n\u003Cspan class=\"hljs-keyword\">import\u003C/span> re\n\u003Cspan class=\"hljs-keyword\">import\u003C/span> os\n\u003Cspan class=\"hljs-keyword\">import\u003C/span> yaml\n\u003Cspan class=\"hljs-keyword\">import\u003C/span> json\n\u003Cspan class=\"hljs-keyword\">from\u003C/span> pathlib \u003Cspan class=\"hljs-keyword\">import\u003C/span> Path\n\u003Cspan class=\"hljs-keyword\">from\u003C/span> collections \u003Cspan class=\"hljs-keyword\">import\u003C/span> defaultdict\n\n\u003Cspan class=\"hljs-keyword\">class\u003C/span> \u003Cspan class=\"hljs-title class_\">TranslationQualityAssurance\u003C/span>:\n    \u003Cspan class=\"hljs-keyword\">def\u003C/span> \u003Cspan class=\"hljs-title function_\">__init__\u003C/span>(\u003Cspan class=\"hljs-params\">self, config_path=\u003Cspan class=\"hljs-string\">&#x27;i18n/qa-config.yml&#x27;\u003C/span>\u003C/span>):\n        \u003Cspan class=\"hljs-keyword\">with\u003C/span> \u003Cspan class=\"hljs-built_in\">open\u003C/span>(config_path, \u003Cspan class=\"hljs-string\">&#x27;r&#x27;\u003C/span>, encoding=\u003Cspan class=\"hljs-string\">&#x27;utf-8&#x27;\u003C/span>) \u003Cspan class=\"hljs-keyword\">as\u003C/span> f:\n            self.config = yaml.safe_load(f)\n        \n        self.errors = []\n        self.warnings = []\n        self.metrics = defaultdict(\u003Cspan class=\"hljs-built_in\">int\u003C/span>)\n        \n    \u003Cspan class=\"hljs-keyword\">def\u003C/span> \u003Cspan class=\"hljs-title function_\">validate_translation_completeness\u003C/span>(\u003Cspan class=\"hljs-params\">self, source_dir, target_dirs\u003C/span>):\n        \u003Cspan class=\"hljs-string\">&quot;&quot;&quot;Ensure all source files have corresponding translations.&quot;&quot;&quot;\u003C/span>\n        source_files = \u003Cspan class=\"hljs-built_in\">set\u003C/span>()\n        \n        \u003Cspan class=\"hljs-comment\"># Collect all source files\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">for\u003C/span> file_path \u003Cspan class=\"hljs-keyword\">in\u003C/span> Path(source_dir).rglob(\u003Cspan class=\"hljs-string\">&#x27;*.md&#x27;\u003C/span>):\n            relative_path = file_path.relative_to(source_dir)\n            source_files.add(\u003Cspan class=\"hljs-built_in\">str\u003C/span>(relative_path))\n        \n        \u003Cspan class=\"hljs-comment\"># Check each target language\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">for\u003C/span> target_dir \u003Cspan class=\"hljs-keyword\">in\u003C/span> target_dirs:\n            \u003Cspan class=\"hljs-keyword\">if\u003C/span> \u003Cspan class=\"hljs-keyword\">not\u003C/span> os.path.exists(target_dir):\n                self.errors.append(\u003Cspan class=\"hljs-string\">f&quot;Target directory missing: \u003Cspan class=\"hljs-subst\">{target_dir}\u003C/span>&quot;\u003C/span>)\n                \u003Cspan class=\"hljs-keyword\">continue\u003C/span>\n                \n            target_files = \u003Cspan class=\"hljs-built_in\">set\u003C/span>()\n            \u003Cspan class=\"hljs-keyword\">for\u003C/span> file_path \u003Cspan class=\"hljs-keyword\">in\u003C/span> Path(target_dir).rglob(\u003Cspan class=\"hljs-string\">&#x27;*.md&#x27;\u003C/span>):\n                relative_path = file_path.relative_to(target_dir)\n                target_files.add(\u003Cspan class=\"hljs-built_in\">str\u003C/span>(relative_path))\n            \n            \u003Cspan class=\"hljs-comment\"># Find missing translations\u003C/span>\n            missing_files = source_files - target_files\n            \u003Cspan class=\"hljs-keyword\">if\u003C/span> missing_files:\n                self.warnings.append(\u003Cspan class=\"hljs-string\">f&quot;Missing translations in \u003Cspan class=\"hljs-subst\">{target_dir}\u003C/span>: \u003Cspan class=\"hljs-subst\">{missing_files}\u003C/span>&quot;\u003C/span>)\n            \n            \u003Cspan class=\"hljs-comment\"># Find orphaned translations\u003C/span>\n            orphaned_files = target_files - source_files\n            \u003Cspan class=\"hljs-keyword\">if\u003C/span> orphaned_files:\n                self.warnings.append(\u003Cspan class=\"hljs-string\">f&quot;Orphaned translations in \u003Cspan class=\"hljs-subst\">{target_dir}\u003C/span>: \u003Cspan class=\"hljs-subst\">{orphaned_files}\u003C/span>&quot;\u003C/span>)\n    \n    \u003Cspan class=\"hljs-keyword\">def\u003C/span> \u003Cspan class=\"hljs-title function_\">validate_frontmatter_consistency\u003C/span>(\u003Cspan class=\"hljs-params\">self, file_path, expected_fields\u003C/span>):\n        \u003Cspan class=\"hljs-string\">&quot;&quot;&quot;Validate frontmatter contains required fields.&quot;&quot;&quot;\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">try\u003C/span>:\n            \u003Cspan class=\"hljs-keyword\">with\u003C/span> \u003Cspan class=\"hljs-built_in\">open\u003C/span>(file_path, \u003Cspan class=\"hljs-string\">&#x27;r&#x27;\u003C/span>, encoding=\u003Cspan class=\"hljs-string\">&#x27;utf-8&#x27;\u003C/span>) \u003Cspan class=\"hljs-keyword\">as\u003C/span> f:\n                content = f.read()\n            \n            \u003Cspan class=\"hljs-keyword\">if\u003C/span> \u003Cspan class=\"hljs-keyword\">not\u003C/span> content.startswith(\u003Cspan class=\"hljs-string\">&#x27;---\\n&#x27;\u003C/span>):\n                self.errors.append(\u003Cspan class=\"hljs-string\">f&quot;\u003Cspan class=\"hljs-subst\">{file_path}\u003C/span>: Missing frontmatter&quot;\u003C/span>)\n                \u003Cspan class=\"hljs-keyword\">return\u003C/span>\n            \n            \u003Cspan class=\"hljs-comment\"># Extract frontmatter\u003C/span>\n            end_index = content.find(\u003Cspan class=\"hljs-string\">&#x27;\\n---\\n&#x27;\u003C/span>, \u003Cspan class=\"hljs-number\">4\u003C/span>)\n            \u003Cspan class=\"hljs-keyword\">if\u003C/span> end_index == -\u003Cspan class=\"hljs-number\">1\u003C/span>:\n                self.errors.append(\u003Cspan class=\"hljs-string\">f&quot;\u003Cspan class=\"hljs-subst\">{file_path}\u003C/span>: Invalid frontmatter format&quot;\u003C/span>)\n                \u003Cspan class=\"hljs-keyword\">return\u003C/span>\n            \n            frontmatter_text = content[\u003Cspan class=\"hljs-number\">4\u003C/span>:end_index]\n            frontmatter = yaml.safe_load(frontmatter_text)\n            \n            \u003Cspan class=\"hljs-comment\"># Check required fields\u003C/span>\n            \u003Cspan class=\"hljs-keyword\">for\u003C/span> field \u003Cspan class=\"hljs-keyword\">in\u003C/span> expected_fields:\n                \u003Cspan class=\"hljs-keyword\">if\u003C/span> field \u003Cspan class=\"hljs-keyword\">not\u003C/span> \u003Cspan class=\"hljs-keyword\">in\u003C/span> frontmatter:\n                    self.errors.append(\u003Cspan class=\"hljs-string\">f&quot;\u003Cspan class=\"hljs-subst\">{file_path}\u003C/span>: Missing required field &#x27;\u003Cspan class=\"hljs-subst\">{field}\u003C/span>&#x27;&quot;\u003C/span>)\n            \n            \u003Cspan class=\"hljs-comment\"># Validate translation status\u003C/span>\n            \u003Cspan class=\"hljs-keyword\">if\u003C/span> \u003Cspan class=\"hljs-string\">&#x27;translation_status&#x27;\u003C/span> \u003Cspan class=\"hljs-keyword\">in\u003C/span> frontmatter:\n                status = frontmatter[\u003Cspan class=\"hljs-string\">&#x27;translation_status&#x27;\u003C/span>]\n                \u003Cspan class=\"hljs-keyword\">if\u003C/span> \u003Cspan class=\"hljs-string\">&#x27;last_sync&#x27;\u003C/span> \u003Cspan class=\"hljs-keyword\">not\u003C/span> \u003Cspan class=\"hljs-keyword\">in\u003C/span> status:\n                    self.warnings.append(\u003Cspan class=\"hljs-string\">f&quot;\u003Cspan class=\"hljs-subst\">{file_path}\u003C/span>: Missing translation sync timestamp&quot;\u003C/span>)\n                    \n        \u003Cspan class=\"hljs-keyword\">except\u003C/span> Exception \u003Cspan class=\"hljs-keyword\">as\u003C/span> e:\n            self.errors.append(\u003Cspan class=\"hljs-string\">f&quot;\u003Cspan class=\"hljs-subst\">{file_path}\u003C/span>: Error validating frontmatter: \u003Cspan class=\"hljs-subst\">{e}\u003C/span>&quot;\u003C/span>)\n    \n    \u003Cspan class=\"hljs-keyword\">def\u003C/span> \u003Cspan class=\"hljs-title function_\">validate_link_consistency\u003C/span>(\u003Cspan class=\"hljs-params\">self, source_file, translated_file\u003C/span>):\n        \u003Cspan class=\"hljs-string\">&quot;&quot;&quot;Ensure links are properly localized or maintained.&quot;&quot;&quot;\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">def\u003C/span> \u003Cspan class=\"hljs-title function_\">extract_links\u003C/span>(\u003Cspan class=\"hljs-params\">content\u003C/span>):\n            \u003Cspan class=\"hljs-comment\"># Extract markdown links\u003C/span>\n            link_pattern = \u003Cspan class=\"hljs-string\">r&#x27;\\[([^\\]]*)\\]\\(([^)]+)\\)&#x27;\u003C/span>\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> re.findall(link_pattern, content)\n        \n        \u003Cspan class=\"hljs-keyword\">try\u003C/span>:\n            \u003Cspan class=\"hljs-keyword\">with\u003C/span> \u003Cspan class=\"hljs-built_in\">open\u003C/span>(source_file, \u003Cspan class=\"hljs-string\">&#x27;r&#x27;\u003C/span>, encoding=\u003Cspan class=\"hljs-string\">&#x27;utf-8&#x27;\u003C/span>) \u003Cspan class=\"hljs-keyword\">as\u003C/span> f:\n                source_content = f.read()\n            \u003Cspan class=\"hljs-keyword\">with\u003C/span> \u003Cspan class=\"hljs-built_in\">open\u003C/span>(translated_file, \u003Cspan class=\"hljs-string\">&#x27;r&#x27;\u003C/span>, encoding=\u003Cspan class=\"hljs-string\">&#x27;utf-8&#x27;\u003C/span>) \u003Cspan class=\"hljs-keyword\">as\u003C/span> f:\n                translated_content = f.read()\n            \n            source_links = extract_links(source_content)\n            translated_links = extract_links(translated_content)\n            \n            \u003Cspan class=\"hljs-comment\"># Check for missing links\u003C/span>\n            \u003Cspan class=\"hljs-keyword\">if\u003C/span> \u003Cspan class=\"hljs-built_in\">len\u003C/span>(source_links) != \u003Cspan class=\"hljs-built_in\">len\u003C/span>(translated_links):\n                self.warnings.append(\n                    \u003Cspan class=\"hljs-string\">f&quot;Link count mismatch: \u003Cspan class=\"hljs-subst\">{source_file}\u003C/span> has \u003Cspan class=\"hljs-subst\">{\u003Cspan class=\"hljs-built_in\">len\u003C/span>(source_links)}\u003C/span> links, &quot;\u003C/span>\n                    \u003Cspan class=\"hljs-string\">f&quot;\u003Cspan class=\"hljs-subst\">{translated_file}\u003C/span> has \u003Cspan class=\"hljs-subst\">{\u003Cspan class=\"hljs-built_in\">len\u003C/span>(translated_links)}\u003C/span> links&quot;\u003C/span>\n                )\n            \n            \u003Cspan class=\"hljs-comment\"># Validate internal links are localized\u003C/span>\n            \u003Cspan class=\"hljs-keyword\">for\u003C/span> text, url \u003Cspan class=\"hljs-keyword\">in\u003C/span> translated_links:\n                \u003Cspan class=\"hljs-keyword\">if\u003C/span> url.startswith(\u003Cspan class=\"hljs-string\">&#x27;/&#x27;\u003C/span>) \u003Cspan class=\"hljs-keyword\">and\u003C/span> \u003Cspan class=\"hljs-keyword\">not\u003C/span> self.is_localized_url(url, translated_file):\n                    self.warnings.append(\n                        \u003Cspan class=\"hljs-string\">f&quot;\u003Cspan class=\"hljs-subst\">{translated_file}\u003C/span>: Internal link may need localization: \u003Cspan class=\"hljs-subst\">{url}\u003C/span>&quot;\u003C/span>\n                    )\n                    \n        \u003Cspan class=\"hljs-keyword\">except\u003C/span> Exception \u003Cspan class=\"hljs-keyword\">as\u003C/span> e:\n            self.errors.append(\u003Cspan class=\"hljs-string\">f&quot;Error validating links: \u003Cspan class=\"hljs-subst\">{e}\u003C/span>&quot;\u003C/span>)\n    \n    \u003Cspan class=\"hljs-keyword\">def\u003C/span> \u003Cspan class=\"hljs-title function_\">is_localized_url\u003C/span>(\u003Cspan class=\"hljs-params\">self, url, file_path\u003C/span>):\n        \u003Cspan class=\"hljs-string\">&quot;&quot;&quot;Check if internal URL appears to be localized.&quot;&quot;&quot;\u003C/span>\n        \u003Cspan class=\"hljs-comment\"># Extract language code from file path\u003C/span>\n        lang_match = re.search(\u003Cspan class=\"hljs-string\">r&#x27;/([a-z]{2}(-[A-Z]{2})?)/.*\\.md$&#x27;\u003C/span>, \u003Cspan class=\"hljs-built_in\">str\u003C/span>(file_path))\n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> \u003Cspan class=\"hljs-keyword\">not\u003C/span> lang_match:\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-literal\">True\u003C/span>  \u003Cspan class=\"hljs-comment\"># Can&#x27;t determine, assume it&#x27;s OK\u003C/span>\n        \n        lang_code = lang_match.group(\u003Cspan class=\"hljs-number\">1\u003C/span>)\n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-string\">f&#x27;/\u003Cspan class=\"hljs-subst\">{lang_code}\u003C/span>/&#x27;\u003C/span> \u003Cspan class=\"hljs-keyword\">in\u003C/span> url\n    \n    \u003Cspan class=\"hljs-keyword\">def\u003C/span> \u003Cspan class=\"hljs-title function_\">validate_terminology_consistency\u003C/span>(\u003Cspan class=\"hljs-params\">self, file_path, terminology_db\u003C/span>):\n        \u003Cspan class=\"hljs-string\">&quot;&quot;&quot;Check for consistent terminology usage.&quot;&quot;&quot;\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">try\u003C/span>:\n            \u003Cspan class=\"hljs-keyword\">with\u003C/span> \u003Cspan class=\"hljs-built_in\">open\u003C/span>(file_path, \u003Cspan class=\"hljs-string\">&#x27;r&#x27;\u003C/span>, encoding=\u003Cspan class=\"hljs-string\">&#x27;utf-8&#x27;\u003C/span>) \u003Cspan class=\"hljs-keyword\">as\u003C/span> f:\n                content = f.read()\n            \n            \u003Cspan class=\"hljs-comment\"># Extract language from file path\u003C/span>\n            lang_match = re.search(\u003Cspan class=\"hljs-string\">r&#x27;/([a-z]{2}(-[A-Z]{2})?)/.*\\.md$&#x27;\u003C/span>, \u003Cspan class=\"hljs-built_in\">str\u003C/span>(file_path))\n            \u003Cspan class=\"hljs-keyword\">if\u003C/span> \u003Cspan class=\"hljs-keyword\">not\u003C/span> lang_match:\n                \u003Cspan class=\"hljs-keyword\">return\u003C/span>\n                \n            lang_code = lang_match.group(\u003Cspan class=\"hljs-number\">1\u003C/span>)\n            \u003Cspan class=\"hljs-keyword\">if\u003C/span> lang_code \u003Cspan class=\"hljs-keyword\">not\u003C/span> \u003Cspan class=\"hljs-keyword\">in\u003C/span> terminology_db:\n                \u003Cspan class=\"hljs-keyword\">return\u003C/span>\n            \n            \u003Cspan class=\"hljs-comment\"># Check terminology usage\u003C/span>\n            \u003Cspan class=\"hljs-keyword\">for\u003C/span> term_key, translations \u003Cspan class=\"hljs-keyword\">in\u003C/span> terminology_db[lang_code].items():\n                preferred = translations.get(\u003Cspan class=\"hljs-string\">&#x27;preferred&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;&#x27;\u003C/span>)\n                alternatives = translations.get(\u003Cspan class=\"hljs-string\">&#x27;alternatives&#x27;\u003C/span>, [])\n                deprecated = translations.get(\u003Cspan class=\"hljs-string\">&#x27;deprecated&#x27;\u003C/span>, [])\n                \n                \u003Cspan class=\"hljs-comment\"># Check for deprecated terms\u003C/span>\n                \u003Cspan class=\"hljs-keyword\">for\u003C/span> deprecated_term \u003Cspan class=\"hljs-keyword\">in\u003C/span> deprecated:\n                    \u003Cspan class=\"hljs-keyword\">if\u003C/span> deprecated_term.lower() \u003Cspan class=\"hljs-keyword\">in\u003C/span> content.lower():\n                        self.warnings.append(\n                            \u003Cspan class=\"hljs-string\">f&quot;\u003Cspan class=\"hljs-subst\">{file_path}\u003C/span>: Using deprecated term &#x27;\u003Cspan class=\"hljs-subst\">{deprecated_term}\u003C/span>&#x27;, &quot;\u003C/span>\n                            \u003Cspan class=\"hljs-string\">f&quot;prefer &#x27;\u003Cspan class=\"hljs-subst\">{preferred}\u003C/span>&#x27;&quot;\u003C/span>\n                        )\n                \n        \u003Cspan class=\"hljs-keyword\">except\u003C/span> Exception \u003Cspan class=\"hljs-keyword\">as\u003C/span> e:\n            self.errors.append(\u003Cspan class=\"hljs-string\">f&quot;Error validating terminology in \u003Cspan class=\"hljs-subst\">{file_path}\u003C/span>: \u003Cspan class=\"hljs-subst\">{e}\u003C/span>&quot;\u003C/span>)\n    \n    \u003Cspan class=\"hljs-keyword\">def\u003C/span> \u003Cspan class=\"hljs-title function_\">generate_quality_report\u003C/span>(\u003Cspan class=\"hljs-params\">self\u003C/span>):\n        \u003Cspan class=\"hljs-string\">&quot;&quot;&quot;Generate comprehensive quality assurance report.&quot;&quot;&quot;\u003C/span>\n        report = {\n            \u003Cspan class=\"hljs-string\">&#x27;summary&#x27;\u003C/span>: {\n                \u003Cspan class=\"hljs-string\">&#x27;errors&#x27;\u003C/span>: \u003Cspan class=\"hljs-built_in\">len\u003C/span>(self.errors),\n                \u003Cspan class=\"hljs-string\">&#x27;warnings&#x27;\u003C/span>: \u003Cspan class=\"hljs-built_in\">len\u003C/span>(self.warnings),\n                \u003Cspan class=\"hljs-string\">&#x27;files_checked&#x27;\u003C/span>: self.metrics[\u003Cspan class=\"hljs-string\">&#x27;files_checked&#x27;\u003C/span>],\n                \u003Cspan class=\"hljs-string\">&#x27;timestamp&#x27;\u003C/span>: datetime.now().isoformat()\n            },\n            \u003Cspan class=\"hljs-string\">&#x27;errors&#x27;\u003C/span>: self.errors,\n            \u003Cspan class=\"hljs-string\">&#x27;warnings&#x27;\u003C/span>: self.warnings,\n            \u003Cspan class=\"hljs-string\">&#x27;metrics&#x27;\u003C/span>: \u003Cspan class=\"hljs-built_in\">dict\u003C/span>(self.metrics)\n        }\n        \n        \u003Cspan class=\"hljs-comment\"># Save report\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">with\u003C/span> \u003Cspan class=\"hljs-built_in\">open\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;translation-qa-report.json&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;w&#x27;\u003C/span>, encoding=\u003Cspan class=\"hljs-string\">&#x27;utf-8&#x27;\u003C/span>) \u003Cspan class=\"hljs-keyword\">as\u003C/span> f:\n            json.dump(report, f, indent=\u003Cspan class=\"hljs-number\">2\u003C/span>, ensure_ascii=\u003Cspan class=\"hljs-literal\">False\u003C/span>)\n        \n        \u003Cspan class=\"hljs-comment\"># Print summary\u003C/span>\n        \u003Cspan class=\"hljs-built_in\">print\u003C/span>(\u003Cspan class=\"hljs-string\">f&quot;Translation QA Report:&quot;\u003C/span>)\n        \u003Cspan class=\"hljs-built_in\">print\u003C/span>(\u003Cspan class=\"hljs-string\">f&quot;  ✅ Files checked: \u003Cspan class=\"hljs-subst\">{self.metrics[\u003Cspan class=\"hljs-string\">&#x27;files_checked&#x27;\u003C/span>]}\u003C/span>&quot;\u003C/span>)\n        \u003Cspan class=\"hljs-built_in\">print\u003C/span>(\u003Cspan class=\"hljs-string\">f&quot;  ❌ Errors: \u003Cspan class=\"hljs-subst\">{\u003Cspan class=\"hljs-built_in\">len\u003C/span>(self.errors)}\u003C/span>&quot;\u003C/span>)\n        \u003Cspan class=\"hljs-built_in\">print\u003C/span>(\u003Cspan class=\"hljs-string\">f&quot;  ⚠️  Warnings: \u003Cspan class=\"hljs-subst\">{\u003Cspan class=\"hljs-built_in\">len\u003C/span>(self.warnings)}\u003C/span>&quot;\u003C/span>)\n        \n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> self.errors:\n            \u003Cspan class=\"hljs-built_in\">print\u003C/span>(\u003Cspan class=\"hljs-string\">&quot;\\nErrors:&quot;\u003C/span>)\n            \u003Cspan class=\"hljs-keyword\">for\u003C/span> error \u003Cspan class=\"hljs-keyword\">in\u003C/span> self.errors[:\u003Cspan class=\"hljs-number\">10\u003C/span>]:  \u003Cspan class=\"hljs-comment\"># Show first 10\u003C/span>\n                \u003Cspan class=\"hljs-built_in\">print\u003C/span>(\u003Cspan class=\"hljs-string\">f&quot;  - \u003Cspan class=\"hljs-subst\">{error}\u003C/span>&quot;\u003C/span>)\n        \n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> self.warnings:\n            \u003Cspan class=\"hljs-built_in\">print\u003C/span>(\u003Cspan class=\"hljs-string\">&quot;\\nWarnings:&quot;\u003C/span>)\n            \u003Cspan class=\"hljs-keyword\">for\u003C/span> warning \u003Cspan class=\"hljs-keyword\">in\u003C/span> self.warnings[:\u003Cspan class=\"hljs-number\">10\u003C/span>]:  \u003Cspan class=\"hljs-comment\"># Show first 10\u003C/span>\n                \u003Cspan class=\"hljs-built_in\">print\u003C/span>(\u003Cspan class=\"hljs-string\">f&quot;  - \u003Cspan class=\"hljs-subst\">{warning}\u003C/span>&quot;\u003C/span>)\n        \n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-built_in\">len\u003C/span>(self.errors) == \u003Cspan class=\"hljs-number\">0\u003C/span>\n\n\u003Cspan class=\"hljs-comment\"># Configuration example\u003C/span>\n\u003Cspan class=\"hljs-keyword\">def\u003C/span> \u003Cspan class=\"hljs-title function_\">main\u003C/span>():\n    qa = TranslationQualityAssurance()\n    \n    \u003Cspan class=\"hljs-comment\"># Validate translation completeness\u003C/span>\n    qa.validate_translation_completeness(\n        source_dir=\u003Cspan class=\"hljs-string\">&#x27;docs/en&#x27;\u003C/span>,\n        target_dirs=[\u003Cspan class=\"hljs-string\">&#x27;docs/es&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;docs/fr&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;docs/de&#x27;\u003C/span>]\n    )\n    \n    \u003Cspan class=\"hljs-comment\"># Validate individual files\u003C/span>\n    required_fields = [\u003Cspan class=\"hljs-string\">&#x27;lang&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;title&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;description&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;translation_status&#x27;\u003C/span>]\n    \n    \u003Cspan class=\"hljs-keyword\">for\u003C/span> lang_dir \u003Cspan class=\"hljs-keyword\">in\u003C/span> [\u003Cspan class=\"hljs-string\">&#x27;docs/en&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;docs/es&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;docs/fr&#x27;\u003C/span>]:\n        \u003Cspan class=\"hljs-keyword\">for\u003C/span> md_file \u003Cspan class=\"hljs-keyword\">in\u003C/span> Path(lang_dir).rglob(\u003Cspan class=\"hljs-string\">&#x27;*.md&#x27;\u003C/span>):\n            qa.validate_frontmatter_consistency(md_file, required_fields)\n            qa.metrics[\u003Cspan class=\"hljs-string\">&#x27;files_checked&#x27;\u003C/span>] += \u003Cspan class=\"hljs-number\">1\u003C/span>\n    \n    \u003Cspan class=\"hljs-comment\"># Generate report\u003C/span>\n    success = qa.generate_quality_report()\n    exit(\u003Cspan class=\"hljs-number\">0\u003C/span> \u003Cspan class=\"hljs-keyword\">if\u003C/span> success \u003Cspan class=\"hljs-keyword\">else\u003C/span> \u003Cspan class=\"hljs-number\">1\u003C/span>)\n\n\u003Cspan class=\"hljs-keyword\">if\u003C/span> __name__ == \u003Cspan class=\"hljs-string\">&#x27;__main__&#x27;\u003C/span>:\n    main()\n\u003C/code>\u003C/pre>\u003Ch2 id=\"content-synchronization-and-maintenance\">Content Synchronization and Maintenance\u003C/h2>\n\u003Ch3 id=\"automated-sync-management\">Automated Sync Management\u003C/h3>\n\u003Cp>Building intelligent content synchronization systems:\u003C/p>\n\u003Cpre>\u003Ccode class=\"hljs language-bash\">\u003Cspan class=\"hljs-meta\">#!/bin/bash\u003C/span>\n\u003Cspan class=\"hljs-comment\"># sync-translations.sh - Advanced translation synchronization\u003C/span>\n\n\u003Cspan class=\"hljs-built_in\">set\u003C/span> -euo pipefail\n\nSCRIPT_DIR=\u003Cspan class=\"hljs-string\">&quot;\u003Cspan class=\"hljs-subst\">$(cd \u003Cspan class=\"hljs-string\">&quot;\u003Cspan class=\"hljs-subst\">$(dirname \u003Cspan class=\"hljs-string\">&quot;\u003Cspan class=\"hljs-variable\">${BASH_SOURCE[0]}\u003C/span>&quot;\u003C/span>)\u003C/span>&quot;\u003C/span> &amp;&amp; pwd)\u003C/span>&quot;\u003C/span>\nCONFIG_FILE=\u003Cspan class=\"hljs-string\">&quot;\u003Cspan class=\"hljs-variable\">${SCRIPT_DIR}\u003C/span>/../i18n/sync-config.yml&quot;\u003C/span>\nSOURCE_LANG=\u003Cspan class=\"hljs-string\">&quot;en&quot;\u003C/span>\nLOG_FILE=\u003Cspan class=\"hljs-string\">&quot;sync-translations.log&quot;\u003C/span>\n\n\u003Cspan class=\"hljs-function\">\u003Cspan class=\"hljs-title\">log\u003C/span>\u003C/span>() {\n    \u003Cspan class=\"hljs-built_in\">echo\u003C/span> \u003Cspan class=\"hljs-string\">&quot;\u003Cspan class=\"hljs-subst\">$(date &#x27;+%Y-%m-%d %H:%M:%S&#x27;)\u003C/span> - \u003Cspan class=\"hljs-variable\">$1\u003C/span>&quot;\u003C/span> | \u003Cspan class=\"hljs-built_in\">tee\u003C/span> -a \u003Cspan class=\"hljs-string\">&quot;\u003Cspan class=\"hljs-variable\">$LOG_FILE\u003C/span>&quot;\u003C/span>\n}\n\n\u003Cspan class=\"hljs-function\">\u003Cspan class=\"hljs-title\">check_prerequisites\u003C/span>\u003C/span>() {\n    \u003Cspan class=\"hljs-built_in\">log\u003C/span> \u003Cspan class=\"hljs-string\">&quot;Checking prerequisites...&quot;\u003C/span>\n    \n    \u003Cspan class=\"hljs-comment\"># Check required tools\u003C/span>\n    \u003Cspan class=\"hljs-keyword\">for\u003C/span> tool \u003Cspan class=\"hljs-keyword\">in\u003C/span> git node python3 yq; \u003Cspan class=\"hljs-keyword\">do\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> ! \u003Cspan class=\"hljs-built_in\">command\u003C/span> -v \u003Cspan class=\"hljs-string\">&quot;\u003Cspan class=\"hljs-variable\">$tool\u003C/span>&quot;\u003C/span> &amp;&gt; /dev/null; \u003Cspan class=\"hljs-keyword\">then\u003C/span>\n            \u003Cspan class=\"hljs-built_in\">log\u003C/span> \u003Cspan class=\"hljs-string\">&quot;ERROR: Required tool &#x27;\u003Cspan class=\"hljs-variable\">$tool\u003C/span>&#x27; not found&quot;\u003C/span>\n            \u003Cspan class=\"hljs-built_in\">exit\u003C/span> 1\n        \u003Cspan class=\"hljs-keyword\">fi\u003C/span>\n    \u003Cspan class=\"hljs-keyword\">done\u003C/span>\n    \n    \u003Cspan class=\"hljs-comment\"># Check configuration\u003C/span>\n    \u003Cspan class=\"hljs-keyword\">if\u003C/span> [[ ! -f \u003Cspan class=\"hljs-string\">&quot;\u003Cspan class=\"hljs-variable\">$CONFIG_FILE\u003C/span>&quot;\u003C/span> ]]; \u003Cspan class=\"hljs-keyword\">then\u003C/span>\n        \u003Cspan class=\"hljs-built_in\">log\u003C/span> \u003Cspan class=\"hljs-string\">&quot;ERROR: Configuration file not found: \u003Cspan class=\"hljs-variable\">$CONFIG_FILE\u003C/span>&quot;\u003C/span>\n        \u003Cspan class=\"hljs-built_in\">exit\u003C/span> 1\n    \u003Cspan class=\"hljs-keyword\">fi\u003C/span>\n}\n\n\u003Cspan class=\"hljs-function\">\u003Cspan class=\"hljs-title\">detect_content_changes\u003C/span>\u003C/span>() {\n    \u003Cspan class=\"hljs-built_in\">log\u003C/span> \u003Cspan class=\"hljs-string\">&quot;Detecting content changes since last sync...&quot;\u003C/span>\n    \n    \u003Cspan class=\"hljs-comment\"># Get list of changed files since last sync\u003C/span>\n    \u003Cspan class=\"hljs-built_in\">local\u003C/span> last_sync_commit\n    last_sync_commit=$(git \u003Cspan class=\"hljs-built_in\">log\u003C/span> --grep=\u003Cspan class=\"hljs-string\">&quot;Translation sync&quot;\u003C/span> --format=\u003Cspan class=\"hljs-string\">&quot;%H&quot;\u003C/span> -1 || \u003Cspan class=\"hljs-built_in\">echo\u003C/span> \u003Cspan class=\"hljs-string\">&quot;&quot;\u003C/span>)\n    \n    \u003Cspan class=\"hljs-keyword\">if\u003C/span> [[ -z \u003Cspan class=\"hljs-string\">&quot;\u003Cspan class=\"hljs-variable\">$last_sync_commit\u003C/span>&quot;\u003C/span> ]]; \u003Cspan class=\"hljs-keyword\">then\u003C/span>\n        \u003Cspan class=\"hljs-built_in\">log\u003C/span> \u003Cspan class=\"hljs-string\">&quot;No previous sync found, processing all files&quot;\u003C/span>\n        find \u003Cspan class=\"hljs-string\">&quot;docs/\u003Cspan class=\"hljs-variable\">$SOURCE_LANG\u003C/span>&quot;\u003C/span> -name \u003Cspan class=\"hljs-string\">&quot;*.md&quot;\u003C/span> -\u003Cspan class=\"hljs-built_in\">type\u003C/span> f\n    \u003Cspan class=\"hljs-keyword\">else\u003C/span>\n        \u003Cspan class=\"hljs-built_in\">log\u003C/span> \u003Cspan class=\"hljs-string\">&quot;Last sync: \u003Cspan class=\"hljs-variable\">$last_sync_commit\u003C/span>&quot;\u003C/span>\n        git diff --name-only \u003Cspan class=\"hljs-string\">&quot;\u003Cspan class=\"hljs-variable\">$last_sync_commit\u003C/span>&quot;\u003C/span> HEAD -- \u003Cspan class=\"hljs-string\">&quot;docs/\u003Cspan class=\"hljs-variable\">$SOURCE_LANG\u003C/span>/*.md&quot;\u003C/span> || \u003Cspan class=\"hljs-literal\">true\u003C/span>\n    \u003Cspan class=\"hljs-keyword\">fi\u003C/span>\n}\n\n\u003Cspan class=\"hljs-function\">\u003Cspan class=\"hljs-title\">update_translation_status\u003C/span>\u003C/span>() {\n    \u003Cspan class=\"hljs-built_in\">local\u003C/span> file_path=\u003Cspan class=\"hljs-string\">&quot;\u003Cspan class=\"hljs-variable\">$1\u003C/span>&quot;\u003C/span>\n    \u003Cspan class=\"hljs-built_in\">local\u003C/span> target_lang=\u003Cspan class=\"hljs-string\">&quot;\u003Cspan class=\"hljs-variable\">$2\u003C/span>&quot;\u003C/span>\n    \u003Cspan class=\"hljs-built_in\">local\u003C/span> sync_type=\u003Cspan class=\"hljs-string\">&quot;\u003Cspan class=\"hljs-variable\">$3\u003C/span>&quot;\u003C/span>\n    \n    \u003Cspan class=\"hljs-comment\"># Update frontmatter with sync information\u003C/span>\n    python3 - &lt;&lt; \u003Cspan class=\"hljs-string\">EOF\nimport sys\nimport yaml\nimport re\nfrom datetime import datetime\n\nfile_path = &quot;$file_path&quot;\ntarget_lang = &quot;$target_lang&quot;\nsync_type = &quot;$sync_type&quot;\n\ntry:\n    with open(file_path, &#x27;r&#x27;, encoding=&#x27;utf-8&#x27;) as f:\n        content = f.read()\n    \n    # Extract frontmatter\n    if content.startswith(&#x27;---\\\\n&#x27;):\n        end_index = content.find(&#x27;\\\\n---\\\\n&#x27;, 4)\n        if end_index != -1:\n            frontmatter_text = content[4:end_index]\n            body = content[end_index + 5:]\n            \n            frontmatter = yaml.safe_load(frontmatter_text)\n            \n            # Update translation status\n            if &#x27;translation_status&#x27; not in frontmatter:\n                frontmatter[&#x27;translation_status&#x27;] = {}\n            \n            frontmatter[&#x27;translation_status&#x27;].update({\n                &#x27;last_sync&#x27;: datetime.now().isoformat(),\n                &#x27;sync_type&#x27;: sync_type,\n                &#x27;requires_review&#x27;: True if sync_type == &#x27;auto_updated&#x27; else False\n            })\n            \n            # Reconstruct file\n            updated_content = &#x27;---\\\\n&#x27; + yaml.dump(frontmatter, allow_unicode=True) + &#x27;---\\\\n&#x27; + body\n            \n            with open(file_path, &#x27;w&#x27;, encoding=&#x27;utf-8&#x27;) as f:\n                f.write(updated_content)\n                \n            print(f&quot;Updated translation status for {file_path}&quot;)\n        \nexcept Exception as e:\n    print(f&quot;Error updating {file_path}: {e}&quot;, file=sys.stderr)\n    sys.exit(1)\nEOF\u003C/span>\n}\n\n\u003Cspan class=\"hljs-function\">\u003Cspan class=\"hljs-title\">sync_translations\u003C/span>\u003C/span>() {\n    \u003Cspan class=\"hljs-built_in\">log\u003C/span> \u003Cspan class=\"hljs-string\">&quot;Starting translation synchronization...&quot;\u003C/span>\n    \n    \u003Cspan class=\"hljs-comment\"># Get target languages from config\u003C/span>\n    \u003Cspan class=\"hljs-built_in\">local\u003C/span> target_languages\n    target_languages=$(yq \u003Cspan class=\"hljs-built_in\">eval\u003C/span> \u003Cspan class=\"hljs-string\">&#x27;.target_languages[]&#x27;\u003C/span> \u003Cspan class=\"hljs-string\">&quot;\u003Cspan class=\"hljs-variable\">$CONFIG_FILE\u003C/span>&quot;\u003C/span>)\n    \n    \u003Cspan class=\"hljs-comment\"># Get changed files\u003C/span>\n    \u003Cspan class=\"hljs-built_in\">local\u003C/span> changed_files\n    changed_files=$(detect_content_changes)\n    \n    \u003Cspan class=\"hljs-keyword\">if\u003C/span> [[ -z \u003Cspan class=\"hljs-string\">&quot;\u003Cspan class=\"hljs-variable\">$changed_files\u003C/span>&quot;\u003C/span> ]]; \u003Cspan class=\"hljs-keyword\">then\u003C/span>\n        \u003Cspan class=\"hljs-built_in\">log\u003C/span> \u003Cspan class=\"hljs-string\">&quot;No content changes detected&quot;\u003C/span>\n        \u003Cspan class=\"hljs-built_in\">return\u003C/span> 0\n    \u003Cspan class=\"hljs-keyword\">fi\u003C/span>\n    \n    \u003Cspan class=\"hljs-built_in\">log\u003C/span> \u003Cspan class=\"hljs-string\">&quot;Changed files:&quot;\u003C/span>\n    \u003Cspan class=\"hljs-built_in\">echo\u003C/span> \u003Cspan class=\"hljs-string\">&quot;\u003Cspan class=\"hljs-variable\">$changed_files\u003C/span>&quot;\u003C/span> | \u003Cspan class=\"hljs-keyword\">while\u003C/span> \u003Cspan class=\"hljs-built_in\">read\u003C/span> -r file; \u003Cspan class=\"hljs-keyword\">do\u003C/span>\n        \u003Cspan class=\"hljs-built_in\">log\u003C/span> \u003Cspan class=\"hljs-string\">&quot;  - \u003Cspan class=\"hljs-variable\">$file\u003C/span>&quot;\u003C/span>\n    \u003Cspan class=\"hljs-keyword\">done\u003C/span>\n    \n    \u003Cspan class=\"hljs-comment\"># Process each target language\u003C/span>\n    \u003Cspan class=\"hljs-keyword\">while\u003C/span> IFS= \u003Cspan class=\"hljs-built_in\">read\u003C/span> -r target_lang; \u003Cspan class=\"hljs-keyword\">do\u003C/span>\n        \u003Cspan class=\"hljs-built_in\">log\u003C/span> \u003Cspan class=\"hljs-string\">&quot;Processing translations for: \u003Cspan class=\"hljs-variable\">$target_lang\u003C/span>&quot;\u003C/span>\n        \n        \u003Cspan class=\"hljs-keyword\">while\u003C/span> IFS= \u003Cspan class=\"hljs-built_in\">read\u003C/span> -r source_file; \u003Cspan class=\"hljs-keyword\">do\u003C/span>\n            [[ -n \u003Cspan class=\"hljs-string\">&quot;\u003Cspan class=\"hljs-variable\">$source_file\u003C/span>&quot;\u003C/span> ]] || \u003Cspan class=\"hljs-built_in\">continue\u003C/span>\n            \n            \u003Cspan class=\"hljs-comment\"># Generate target file path\u003C/span>\n            \u003Cspan class=\"hljs-built_in\">local\u003C/span> target_file\n            target_file=$(\u003Cspan class=\"hljs-built_in\">echo\u003C/span> \u003Cspan class=\"hljs-string\">&quot;\u003Cspan class=\"hljs-variable\">$source_file\u003C/span>&quot;\u003C/span> | sed \u003Cspan class=\"hljs-string\">&quot;s|docs/\u003Cspan class=\"hljs-variable\">$SOURCE_LANG\u003C/span>/|docs/\u003Cspan class=\"hljs-variable\">$target_lang\u003C/span>/|&quot;\u003C/span>)\n            \n            \u003Cspan class=\"hljs-keyword\">if\u003C/span> [[ -f \u003Cspan class=\"hljs-string\">&quot;\u003Cspan class=\"hljs-variable\">$target_file\u003C/span>&quot;\u003C/span> ]]; \u003Cspan class=\"hljs-keyword\">then\u003C/span>\n                \u003Cspan class=\"hljs-comment\"># Existing translation - mark for review\u003C/span>\n                \u003Cspan class=\"hljs-built_in\">log\u003C/span> \u003Cspan class=\"hljs-string\">&quot;Marking existing translation for review: \u003Cspan class=\"hljs-variable\">$target_file\u003C/span>&quot;\u003C/span>\n                update_translation_status \u003Cspan class=\"hljs-string\">&quot;\u003Cspan class=\"hljs-variable\">$target_file\u003C/span>&quot;\u003C/span> \u003Cspan class=\"hljs-string\">&quot;\u003Cspan class=\"hljs-variable\">$target_lang\u003C/span>&quot;\u003C/span> \u003Cspan class=\"hljs-string\">&quot;source_updated&quot;\u003C/span>\n            \u003Cspan class=\"hljs-keyword\">else\u003C/span>\n                \u003Cspan class=\"hljs-comment\"># New file - create translation\u003C/span>\n                \u003Cspan class=\"hljs-built_in\">log\u003C/span> \u003Cspan class=\"hljs-string\">&quot;Creating new translation: \u003Cspan class=\"hljs-variable\">$target_file\u003C/span>&quot;\u003C/span>\n                \n                \u003Cspan class=\"hljs-comment\"># Ensure target directory exists\u003C/span>\n                \u003Cspan class=\"hljs-built_in\">mkdir\u003C/span> -p \u003Cspan class=\"hljs-string\">&quot;\u003Cspan class=\"hljs-subst\">$(dirname \u003Cspan class=\"hljs-string\">&quot;\u003Cspan class=\"hljs-variable\">$target_file\u003C/span>&quot;\u003C/span>)\u003C/span>&quot;\u003C/span>\n                \n                \u003Cspan class=\"hljs-comment\"># Run translation automation\u003C/span>\n                node \u003Cspan class=\"hljs-string\">&quot;\u003Cspan class=\"hljs-variable\">$SCRIPT_DIR\u003C/span>/i18n-automation.js&quot;\u003C/span> \u003Cspan class=\"hljs-string\">&quot;\u003Cspan class=\"hljs-variable\">$source_file\u003C/span>&quot;\u003C/span> \u003Cspan class=\"hljs-string\">&quot;\u003Cspan class=\"hljs-variable\">$target_lang\u003C/span>&quot;\u003C/span>\n                \n                \u003Cspan class=\"hljs-keyword\">if\u003C/span> [[ -f \u003Cspan class=\"hljs-string\">&quot;\u003Cspan class=\"hljs-variable\">$target_file\u003C/span>&quot;\u003C/span> ]]; \u003Cspan class=\"hljs-keyword\">then\u003C/span>\n                    update_translation_status \u003Cspan class=\"hljs-string\">&quot;\u003Cspan class=\"hljs-variable\">$target_file\u003C/span>&quot;\u003C/span> \u003Cspan class=\"hljs-string\">&quot;\u003Cspan class=\"hljs-variable\">$target_lang\u003C/span>&quot;\u003C/span> \u003Cspan class=\"hljs-string\">&quot;auto_created&quot;\u003C/span>\n                \u003Cspan class=\"hljs-keyword\">else\u003C/span>\n                    \u003Cspan class=\"hljs-built_in\">log\u003C/span> \u003Cspan class=\"hljs-string\">&quot;ERROR: Failed to create translation: \u003Cspan class=\"hljs-variable\">$target_file\u003C/span>&quot;\u003C/span>\n                \u003Cspan class=\"hljs-keyword\">fi\u003C/span>\n            \u003Cspan class=\"hljs-keyword\">fi\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">done\u003C/span> &lt;&lt;&lt; \u003Cspan class=\"hljs-string\">&quot;\u003Cspan class=\"hljs-variable\">$changed_files\u003C/span>&quot;\u003C/span>\n        \n    \u003Cspan class=\"hljs-keyword\">done\u003C/span> &lt;&lt;&lt; \u003Cspan class=\"hljs-string\">&quot;\u003Cspan class=\"hljs-variable\">$target_languages\u003C/span>&quot;\u003C/span>\n}\n\n\u003Cspan class=\"hljs-function\">\u003Cspan class=\"hljs-title\">generate_sync_report\u003C/span>\u003C/span>() {\n    \u003Cspan class=\"hljs-built_in\">log\u003C/span> \u003Cspan class=\"hljs-string\">&quot;Generating synchronization report...&quot;\u003C/span>\n    \n    \u003Cspan class=\"hljs-comment\"># Count translation status across all languages\u003C/span>\n    python3 - &lt;&lt; \u003Cspan class=\"hljs-string\">&#x27;EOF&#x27;\u003C/span>\nimport os\nimport yaml\nfrom pathlib import Path\nfrom collections import defaultdict\n\ndef extract_frontmatter(file_path):\n    try:\n        with open(file_path, \u003Cspan class=\"hljs-string\">&#x27;r&#x27;\u003C/span>, encoding=\u003Cspan class=\"hljs-string\">&#x27;utf-8&#x27;\u003C/span>) as f:\n            content = f.read()\n        \n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> content.startswith(\u003Cspan class=\"hljs-string\">&#x27;---\\n&#x27;\u003C/span>):\n            end_index = content.find(\u003Cspan class=\"hljs-string\">&#x27;\\n---\\n&#x27;\u003C/span>, 4)\n            \u003Cspan class=\"hljs-keyword\">if\u003C/span> end_index != -1:\n                frontmatter_text = content[4:end_index]\n                \u003Cspan class=\"hljs-built_in\">return\u003C/span> yaml.safe_load(frontmatter_text)\n    except:\n        pass\n    \u003Cspan class=\"hljs-built_in\">return\u003C/span> {}\n\nstats = defaultdict(lambda: defaultdict(int))\n\n\u003Cspan class=\"hljs-keyword\">for\u003C/span> lang_dir \u003Cspan class=\"hljs-keyword\">in\u003C/span> Path(\u003Cspan class=\"hljs-string\">&#x27;docs&#x27;\u003C/span>).iterdir():\n    \u003Cspan class=\"hljs-keyword\">if\u003C/span> not lang_dir.is_dir() or lang_dir.name.startswith(\u003Cspan class=\"hljs-string\">&#x27;.&#x27;\u003C/span>):\n        \u003Cspan class=\"hljs-built_in\">continue\u003C/span>\n        \n    lang_code = lang_dir.name\n    \n    \u003Cspan class=\"hljs-keyword\">for\u003C/span> md_file \u003Cspan class=\"hljs-keyword\">in\u003C/span> lang_dir.rglob(\u003Cspan class=\"hljs-string\">&#x27;*.md&#x27;\u003C/span>):\n        frontmatter = extract_frontmatter(md_file)\n        translation_status = frontmatter.get(\u003Cspan class=\"hljs-string\">&#x27;translation_status&#x27;\u003C/span>, {})\n        \n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> translation_status.get(\u003Cspan class=\"hljs-string\">&#x27;requires_review&#x27;\u003C/span>):\n            stats[lang_code][\u003Cspan class=\"hljs-string\">&#x27;needs_review&#x27;\u003C/span>] += 1\n        \u003Cspan class=\"hljs-keyword\">else\u003C/span>:\n            stats[lang_code][\u003Cspan class=\"hljs-string\">&#x27;up_to_date&#x27;\u003C/span>] += 1\n        \n        stats[lang_code][\u003Cspan class=\"hljs-string\">&#x27;total&#x27;\u003C/span>] += 1\n\n\u003Cspan class=\"hljs-built_in\">print\u003C/span>(\u003Cspan class=\"hljs-string\">&quot;Translation Synchronization Report&quot;\u003C/span>)\n\u003Cspan class=\"hljs-built_in\">print\u003C/span>(\u003Cspan class=\"hljs-string\">&quot;=&quot;\u003C/span> * 40)\n\u003Cspan class=\"hljs-keyword\">for\u003C/span> lang, counts \u003Cspan class=\"hljs-keyword\">in\u003C/span> sorted(stats.items()):\n    \u003Cspan class=\"hljs-built_in\">print\u003C/span>(f\u003Cspan class=\"hljs-string\">&quot;\\n{lang.upper()}:&quot;\u003C/span>)\n    \u003Cspan class=\"hljs-built_in\">print\u003C/span>(f\u003Cspan class=\"hljs-string\">&quot;  Total files: {counts[&#x27;total&#x27;]}&quot;\u003C/span>)\n    \u003Cspan class=\"hljs-built_in\">print\u003C/span>(f\u003Cspan class=\"hljs-string\">&quot;  Up to date: {counts[&#x27;up_to_date&#x27;]}&quot;\u003C/span>)\n    \u003Cspan class=\"hljs-built_in\">print\u003C/span>(f\u003Cspan class=\"hljs-string\">&quot;  Needs review: {counts[&#x27;needs_review&#x27;]}&quot;\u003C/span>)\n    \n    \u003Cspan class=\"hljs-keyword\">if\u003C/span> counts[\u003Cspan class=\"hljs-string\">&#x27;total&#x27;\u003C/span>] &gt; 0:\n        coverage = (counts[\u003Cspan class=\"hljs-string\">&#x27;up_to_date&#x27;\u003C/span>] / counts[\u003Cspan class=\"hljs-string\">&#x27;total&#x27;\u003C/span>]) * 100\n        \u003Cspan class=\"hljs-built_in\">print\u003C/span>(f\u003Cspan class=\"hljs-string\">&quot;  Coverage: {coverage:.1f}%&quot;\u003C/span>)\nEOF\n}\n\n\u003Cspan class=\"hljs-function\">\u003Cspan class=\"hljs-title\">commit_changes\u003C/span>\u003C/span>() {\n    \u003Cspan class=\"hljs-built_in\">local\u003C/span> changes_made=\u003Cspan class=\"hljs-literal\">false\u003C/span>\n    \n    \u003Cspan class=\"hljs-comment\"># Check if there are any changes to commit\u003C/span>\n    \u003Cspan class=\"hljs-keyword\">if\u003C/span> git diff --quiet &amp;&amp; git diff --staged --quiet; \u003Cspan class=\"hljs-keyword\">then\u003C/span>\n        \u003Cspan class=\"hljs-built_in\">log\u003C/span> \u003Cspan class=\"hljs-string\">&quot;No changes to commit&quot;\u003C/span>\n        \u003Cspan class=\"hljs-built_in\">return\u003C/span> 0\n    \u003Cspan class=\"hljs-keyword\">fi\u003C/span>\n    \n    \u003Cspan class=\"hljs-built_in\">log\u003C/span> \u003Cspan class=\"hljs-string\">&quot;Committing translation updates...&quot;\u003C/span>\n    \n    git add docs/\n    git commit -m \u003Cspan class=\"hljs-string\">&quot;Translation sync: \u003Cspan class=\"hljs-subst\">$(date &#x27;+%Y-%m-%d %H:%M:%S&#x27;)\u003C/span>\n\n- Updated translation status for modified content\n- Created new translations for added files\n- Marked outdated translations for review\n\n[automated]&quot;\u003C/span>\n    \n    \u003Cspan class=\"hljs-built_in\">log\u003C/span> \u003Cspan class=\"hljs-string\">&quot;Changes committed successfully&quot;\u003C/span>\n}\n\n\u003Cspan class=\"hljs-function\">\u003Cspan class=\"hljs-title\">main\u003C/span>\u003C/span>() {\n    \u003Cspan class=\"hljs-built_in\">log\u003C/span> \u003Cspan class=\"hljs-string\">&quot;Starting translation synchronization process...&quot;\u003C/span>\n    \n    check_prerequisites\n    sync_translations\n    generate_sync_report\n    commit_changes\n    \n    \u003Cspan class=\"hljs-built_in\">log\u003C/span> \u003Cspan class=\"hljs-string\">&quot;Translation synchronization completed successfully&quot;\u003C/span>\n}\n\n\u003Cspan class=\"hljs-comment\"># Run main function\u003C/span>\nmain \u003Cspan class=\"hljs-string\">&quot;\u003Cspan class=\"hljs-variable\">$@\u003C/span>&quot;\u003C/span>\n\u003C/code>\u003C/pre>\u003Ch2 id=\"best-practices-and-implementation-strategy\">Best Practices and Implementation Strategy\u003C/h2>\n\u003Ch3 id=\"gradual-implementation-approach\">Gradual Implementation Approach\u003C/h3>\n\u003Cp>Rolling out internationalization systematically:\u003C/p>\n\u003Col>\n\u003Cli>\u003Cstrong>Phase 1\u003C/strong>: File structure and basic translation workflow\u003C/li>\n\u003Cli>\u003Cstrong>Phase 2\u003C/strong>: Automated translation and quality assurance\u003C/li>\n\u003Cli>\u003Cstrong>Phase 3\u003C/strong>: Cultural adaptation and locale-specific formatting\u003C/li>\n\u003Cli>\u003Cstrong>Phase 4\u003C/strong>: Advanced sync management and reporting\u003C/li>\n\u003Cli>\u003Cstrong>Phase 5\u003C/strong>: Integration with content management systems\u003C/li>\n\u003C/ol>\n\u003Ch3 id=\"team-collaboration-guidelines\">Team Collaboration Guidelines\u003C/h3>\n\u003Cp>Establishing effective international documentation workflows:\u003C/p>\n\u003Cpre>\u003Ccode class=\"hljs language-markdown\">\u003Cspan class=\"hljs-section\"># International Documentation Guidelines\u003C/span>\n\n\u003Cspan class=\"hljs-section\">## Translation Workflow\u003C/span>\n\u003Cspan class=\"hljs-bullet\">1.\u003C/span> \u003Cspan class=\"hljs-strong\">**Source Content**\u003C/span>: All content originates in English (en)\n\u003Cspan class=\"hljs-bullet\">2.\u003C/span> \u003Cspan class=\"hljs-strong\">**Translation Process**\u003C/span>: Automated translation → Human review → Publication\n\u003Cspan class=\"hljs-bullet\">3.\u003C/span> \u003Cspan class=\"hljs-strong\">**Quality Assurance**\u003C/span>: Automated QA checks before and after human review\n\u003Cspan class=\"hljs-bullet\">4.\u003C/span> \u003Cspan class=\"hljs-strong\">**Synchronization**\u003C/span>: Weekly automated sync with manual review queue\n\n\u003Cspan class=\"hljs-section\">## Reviewer Responsibilities\u003C/span>\n\u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-strong\">**Technical Accuracy**\u003C/span>: Verify technical content is correct in target language\n\u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-strong\">**Cultural Adaptation**\u003C/span>: Adjust examples and references for local context\n\u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-strong\">**Terminology Consistency**\u003C/span>: Use approved terminology database\n\u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-strong\">**Link Validation**\u003C/span>: Ensure all internal links are properly localized\n\n\u003Cspan class=\"hljs-section\">## Content Guidelines\u003C/span>\n\u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-strong\">**Universal Examples**\u003C/span>: Use examples that work across cultures\n\u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-strong\">**Locale-Specific Content**\u003C/span>: Provide region-specific information where needed\n\u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-strong\">**Visual Content**\u003C/span>: Include alt text in all supported languages\n\u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-strong\">**Legal Content**\u003C/span>: Always require professional translation for legal text\n\u003C/code>\u003C/pre>\u003Cp>Markdown internationalization and multilingual documentation systems provide the foundation for global content strategies that scale effectively while maintaining quality and cultural sensitivity. By implementing comprehensive translation workflows, automated quality assurance, and intelligent synchronization systems, organizations can deliver consistent, localized documentation that serves international audiences efficiently.\u003C/p>\n\u003Cp>The key to successful implementation lies in starting with solid file structure and translation memory systems, gradually adding automation and quality assurance, and continuously refining processes based on user feedback and content performance metrics across different markets and cultures.\u003C/p>\n",[15,19,22,25,28,31,34],{"id":16,"text":17,"level":18},"why-implement-markdown-internationalization","Why Implement Markdown Internationalization?",2,{"id":20,"text":21,"level":18},"foundation-internationalization-architecture","Foundation Internationalization Architecture",{"id":23,"text":24,"level":18},"advanced-translation-workflow-systems","Advanced Translation Workflow Systems",{"id":26,"text":27,"level":18},"locale-specific-formatting-and-cultural-adaptation","Locale-Specific Formatting and Cultural Adaptation",{"id":29,"text":30,"level":18},"quality-assurance-and-translation-validation","Quality Assurance and Translation Validation",{"id":32,"text":33,"level":18},"content-synchronization-and-maintenance","Content Synchronization and Maintenance",{"id":35,"text":36,"level":18},"best-practices-and-implementation-strategy","Best Practices and Implementation Strategy",[],[39,47,55],{"slug":40,"title":41,"description":42,"excerpt":43,"date":44,"category":9,"author":10,"keywords":45,"readingMinutes":46},"markdown-version-control-git-integration-complete-guide","Markdown Version Control and Git Integration: Complete Guide for Documentation Workflows and Collaborative Content Management","Master Markdown version control with Git integration for collaborative documentation workflows, automated content management, and efficient technical writing processes. Learn Git hooks, merge strategies, and workflow optimization.","Advanced Markdown version control and Git integration enables sophisticated collaborative documentation workflows that maintain content quality, track changes systematically, and automate content…","2025-09-29","markdown version control, git markdown integration, documentation git workflows, markdown collaboration, git hooks markdown, version control documentation, markdown git best practices, collaborative writing git",22,{"slug":48,"title":49,"description":50,"excerpt":51,"date":52,"category":9,"author":10,"keywords":53,"readingMinutes":54},"markdown-dynamic-content-generation-automation-workflows-complete-guide","Markdown Dynamic Content Generation and Automation Workflows: Complete Guide for Automated Documentation, Template Systems, and Content Pipeline Management","Master dynamic content generation in Markdown with comprehensive automation workflows, template engines, data-driven documentation systems, and intelligent content pipeline management for scalable technical writing.","Advanced Markdown dynamic content generation and automation workflows enable systematic creation of data-driven documentation, template-based content systems, and intelligent content pipelines…","2025-12-22","markdown automation, dynamic content generation markdown, markdown templates, automated documentation markdown, content pipeline markdown, markdown workflows, data driven documentation, template engines markdown",37,{"slug":56,"title":57,"description":58,"excerpt":59,"date":60,"category":9,"author":10,"keywords":61,"readingMinutes":62},"markdown-frontmatter-metadata-complete-guide","Markdown Front Matter and Metadata: Complete Guide for Documentation and Content Management","Master Markdown front matter and metadata for static site generators, Jekyll, Hugo, and content management systems. Learn YAML, TOML, and JSON formats with practical examples.","Markdown front matter is the metadata section at the beginning of Markdown files that provides structured information about your content. Used extensively in static site generators like Jekyll,…","2025-10-30","markdown front matter, markdown metadata, yaml frontmatter, jekyll front matter, hugo front matter, markdown headers, static site generator metadata",8,1792184946071]