{"id":1640,"date":"2025-11-25T08:00:37","date_gmt":"2025-11-25T16:00:37","guid":{"rendered":"https:\/\/devblogs.microsoft.com\/foundry\/?p=1640"},"modified":"2025-11-24T16:16:59","modified_gmt":"2025-11-25T00:16:59","slug":"translation-customization-a-developers-guide-to-adaptive-custom-translation","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/foundry\/translation-customization-a-developers-guide-to-adaptive-custom-translation\/","title":{"rendered":"Translation Customization, A Developer&#8217;s Guide to Adaptive Custom Translation"},"content":{"rendered":"<div class=\"entry-content sharepostcontent \" data-bi-area=\"body_article\" data-bi-id=\"post_page_body_article\">\n<h2 id=\"introduction\"><strong>Introduction<\/strong><\/h2>\n<p>Translation isn\u2019t just converting words\u2014it\u2019s enabling global communication. Yet for businesses operating worldwide, achieving accuracy, speed, and domain-specific terminology has been a persistent challenge. Market trends show that 70% of consumers prefer content in their native language, and enterprises are under pressure to deliver real-time multilingual experiences without sacrificing quality.<\/p>\n<p>That\u2019s why we\u2019re introducing Adaptive Custom Translation (AdaptCT) in Microsoft Foundry Tools\u2014a breakthrough that redefines how translation systems are customized. Instead of retraining models from scratch, AdaptCT leverages existing LLMs like GPT-4o, combined with tiny datasets and smart indexing, to deliver instant, domain-specific translations.<\/p>\n<h2 id=\"the-problem-with-traditional-custom-translation\"><strong>The Problem with Traditional Custom Translation<\/strong><\/h2>\n<p>For years, building high-quality custom translation models has been resource-heavy and slow. Traditional approaches require:<\/p>\n<ul>\n<li>Massive human-curated datasets (10,000+ sentence pairs)<\/li>\n<li>Long training cycles (a day to several days)<\/li>\n<li>Manual deployment processes<\/li>\n<li>Retraining for every update<\/li>\n<\/ul>\n<p>This works for static, high-volume content like legal documents. But for rapidly changing content\u2014support tickets, product updates, technical documentation\u2014traditional solutions fall short.<\/p>\n<h2 id=\"adaptive-custom-translation:-a-market-driven-game-changer\"><strong>Adaptive Custom Translation: A Market-Driven Game-Changer<\/strong><\/h2>\n<p>Adaptive Custom Translation flips the script. Instead of building a new model, it enhances existing LLMs using a small dataset and indexing.<\/p>\n<p>Think of it this way:<\/p>\n<ul>\n<li>Traditional Custom Translator: Builds a custom car from scratch.<\/li>\n<li>Adaptive Custom Translation: Takes a Ferrari and fine-tunes it for your specific track.<\/li>\n<\/ul>\n<p>Why it matters in today\u2019s market<\/p>\n<p>Speed and simplicity are critical for global communication. AdaptCT delivers both by removing the heavy overhead of traditional systems. It enables customization with minimal data\u2014starting from just five parallel sentences and scaling up to 10,000\u2014making it ideal for niche industries and rapid prototyping. Updates happen in minutes: refresh your dataset, rebuild the index, and go live instantly without retraining or redeployment. With zero maintenance requirements, enterprises can simply upload datasets, create indexes, and call translate APIs, turning translation into a strategic advantage rather than a bottleneck.<\/p>\n<h2 id=\"adaptct-real-world-impact\"><strong>AdaptCT Real-World Impact<\/strong><\/h2>\n<p>AdaptCT delivers tangible impact across critical business scenarios. For customer support, launching a new SaaS feature becomes effortless\u2014upload 50\u2013500 aligned sentence pairs, create an index in minutes, and translations instantly reflect updated terminology, compared to traditional workflows that require 10,000+ pairs and 24\u201348 hours of retraining. In e-commerce, AdaptCT enables continuous product updates by maintaining a living dataset, ensuring instant multilingual consistency across channels. For technical documentation, frequent API changes across multiple languages are no longer a bottleneck\u2014small datasets of technical terms can be indexed and updated on demand, guaranteeing accuracy and consistency at scale. This agility transforms translation from a time-consuming process into a strategic enabler for global growth.<\/p>\n<h2 id=\"how-it-works\"><strong>How It Works<\/strong><\/h2>\n<p>AdaptCT streamlines the process by leveraging existing LLMs with intelligent indexing. When a translation request is submitted, it includes the language pair and a dataset index. adaptCT then applies few-shot learning to retrieve the most relevant sentence pairs, enabling the LLM to generate translations that are not only accurate but also tailored to your domain-specific terminology and style. This approach ensures precision and agility without the overhead of traditional retraining.<\/p>\n<h2 id=\"quick-start-code\">Quick Start Code<\/h2>\n<p data-line=\"121\"><strong>Step 1: Create a Project<\/strong><\/p>\n<pre class=\"prettyprint language-default\" tabindex=\"0\"><code class=\"language-default\">curl -X POST \"https:\/\/&lt;your-resource&gt;.cognitiveservices.azure.com\/translator\/customtranslator\/api\/texttranslator\/v1.0\/workspaces\" \\ -H \"Ocp-Apim-Subscription-Key: &lt;your-key&gt;\" \\ -H \"Content-Type: application\/json\" \\ -d '{ \"name\": \"my-translation-project\", \"subscription\": { \"billingRegionCode\": \"&lt;billing-region&gt;\", \"subscriptionKey\": \"&lt;your-key&gt;\" } }'<\/code><\/pre>\n<p data-line=\"136\"><strong>Step 2: Upload Your Translation Pairs (e.g., English to French)<\/strong><\/p>\n<pre class=\"prettyprint language-default\" tabindex=\"0\"><code class=\"language-default\">curl -X POST \"https:\/\/&lt;your-resource&gt;.cognitiveservices.azure.com\/translator\/customtranslator\/api\/texttranslator\/v1.0\/documents\/import?workspaceId=&lt;workspace-id&gt;\" \\ -H \"Authorization: Bearer &lt;token&gt;\" \\ -F \"DocumentDetails=[{ \\\"DocumentName\\\": \\\"product-terms\\\", \\\"DocumentType\\\": \\\"Adaptive\\\", \\\"FileDetails\\\": [{ \\\"Name\\\": \\\"translations.tmx\\\", \\\"LanguageCode\\\": \\\"en\\\", \\\"OverwriteIfExists\\\": true }] }]\" \\ -F \"FILES=@translations.tmx\"<\/code><\/pre>\n<p data-line=\"153\"><strong>Step 3: Create the Index<\/strong><\/p>\n<pre class=\"prettyprint language-default\" tabindex=\"0\"><code class=\"language-default\">curl -X POST \"https:\/\/&lt;your-resource&gt;.cognitiveservices.azure.com\/translator\/customtranslator\/api\/texttranslator\/v1.0\/index?workspaceId=&lt;workspace-id&gt;\" \\ -H \"Content-Type: application\/json\" \\ -d '{ \"documentIds\": [\"123456\"], \"IndexName\": \"product-index\", \"SourceLanguage\": \"en\", \"TargetLanguage\": \"fr\" }'<\/code><\/pre>\n<p data-line=\"166\"><strong>Step 4: Translate with Your Dataset Index<\/strong><\/p>\n<ul>\n<li data-line=\"168\">Use the\u00a0<strong>New<\/strong>\u00a0Microsoft Foundry:\n<ul>\n<li data-line=\"168\">Select the resource you used to create the dataset index<\/li>\n<li data-line=\"168\">Select Models &gt; Select AI Services &gt; Select Azure Translation \u2013 Text translation<\/li>\n<li data-line=\"168\">Ensure your current resource has GPT-4o or GPT-4o-mini deployment<\/li>\n<li data-line=\"168\">In Deployed model dropdown, select gpt-4o or gpt-4o-mini<\/li>\n<li data-line=\"168\">In Configuration, select Adaptive customization<\/li>\n<li data-line=\"168\">Select Use dataset index ID &gt; Select your index from the dropdown<\/li>\n<li data-line=\"168\">Type text to translate and select target language (to\/from English is only supported)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p style=\"padding-left: 80px;\"><a tabindex=\"0\" href=\"https:\/\/devblogs.microsoft.com\/foundry\/wp-content\/uploads\/sites\/89\/2025\/11\/Screenshot-2025-11-16-at-9.32.57-AM.webp\"><img decoding=\"async\" class=\"alignnone size-medium wp-image-1546 lazyloaded\" src=\"https:\/\/devblogs.microsoft.com\/foundry\/wp-content\/uploads\/sites\/89\/2025\/11\/Screenshot-2025-11-16-at-9.32.57-AM-300x139.webp\" sizes=\"(max-width: 300px) 100vw, 300px\" srcset=\"https:\/\/devblogs.microsoft.com\/foundry\/wp-content\/uploads\/sites\/89\/2025\/11\/Screenshot-2025-11-16-at-9.32.57-AM-300x139.webp 300w, https:\/\/devblogs.microsoft.com\/foundry\/wp-content\/uploads\/sites\/89\/2025\/11\/Screenshot-2025-11-16-at-9.32.57-AM-1024x475.webp 1024w, https:\/\/devblogs.microsoft.com\/foundry\/wp-content\/uploads\/sites\/89\/2025\/11\/Screenshot-2025-11-16-at-9.32.57-AM-768x356.webp 768w, https:\/\/devblogs.microsoft.com\/foundry\/wp-content\/uploads\/sites\/89\/2025\/11\/Screenshot-2025-11-16-at-9.32.57-AM-1536x713.webp 1536w, https:\/\/devblogs.microsoft.com\/foundry\/wp-content\/uploads\/sites\/89\/2025\/11\/Screenshot-2025-11-16-at-9.32.57-AM.webp 1681w\" alt=\"Screenshot 2025 11 16 at 9 32 57 AM image\" width=\"300\" height=\"139\" data-src=\"https:\/\/devblogs.microsoft.com\/foundry\/wp-content\/uploads\/sites\/89\/2025\/11\/Screenshot-2025-11-16-at-9.32.57-AM-300x139.webp\" \/><\/a><\/p>\n<ul>\n<li data-line=\"168\">Use\u00a0<a href=\"https:\/\/learn.microsoft.com\/azure\/ai-services\/translator\/text-translation\/preview\/translate-api\" target=\"_blank\" rel=\"noopener\" data-href=\"https:\/\/learn.microsoft.com\/azure\/ai-services\/translator\/text-translation\/preview\/translate-api\">Text Translation API<\/a>\u00a0with your dataset index ID. Your translations will automatically be adapted based on your dataset index.<\/li>\n<\/ul>\n<h2 id=\"data-format:-keep-it-simple\" data-line=\"168\">Data Format: Keep It Simple<\/h2>\n<ul>\n<li data-line=\"170\">TMX Format (Translation Memory eXchange)<\/li>\n<\/ul>\n<pre class=\"prettyprint language-xml\" style=\"padding-left: 40px;\" tabindex=\"0\"><code class=\"language-xml hljs\" data-highlighted=\"yes\"><span class=\"hljs-meta\">&lt;?xml version=<span class=\"hljs-string\">\"1.0\"<\/span> encoding=<span class=\"hljs-string\">\"UTF-8\"<\/span>?&gt;<\/span> <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">tmx<\/span> <span class=\"hljs-attr\">version<\/span>=<span class=\"hljs-string\">\"1.4\"<\/span>&gt;<\/span> <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">body<\/span>&gt;<\/span> <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">tu<\/span>&gt;<\/span> <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">tuv<\/span> <span class=\"hljs-attr\">xml:lang<\/span>=<span class=\"hljs-string\">\"en\"<\/span>&gt;<\/span> <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">seg<\/span>&gt;<\/span>Click the submit button<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">seg<\/span>&gt;<\/span> <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">tuv<\/span>&gt;<\/span> <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">tuv<\/span> <span class=\"hljs-attr\">xml:lang<\/span>=<span class=\"hljs-string\">\"fr\"<\/span>&gt;<\/span> <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">seg<\/span>&gt;<\/span>Cliquez sur le bouton soumettre<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">seg<\/span>&gt;<\/span> <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">tuv<\/span>&gt;<\/span> <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">tu<\/span>&gt;<\/span> <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">body<\/span>&gt;<\/span> <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">tmx<\/span>&gt;<\/span><\/code><\/pre>\n<ul>\n<li data-line=\"188\">TSV Format (Tab-Separated Values)<\/li>\n<\/ul>\n<pre class=\"prettyprint language-default\" style=\"padding-left: 40px;\" tabindex=\"0\"><code class=\"language-default\">en fr Click the submit button Cliquez sur le bouton soumettre Upload your file T\u00e9l\u00e9chargez votre fichier<\/code><\/pre>\n<h2 id=\"when-to-use-adaptct-vs.-custom-translator\" data-line=\"198\">When to Use AdaptCT vs. Custom Translator<\/h2>\n<p data-line=\"202\">Here\u2019s a decision matrix:<\/p>\n<div>\n<div class=\"table-responsive\">\n<table>\n<tbody>\n<tr>\n<td><strong>Your Scenario<\/strong><\/td>\n<td><strong>Choice<\/strong><\/td>\n<\/tr>\n<tr>\n<td>Low-volume, frequently changing content<\/td>\n<td><strong>AdaptCT<\/strong><\/td>\n<\/tr>\n<tr>\n<td>Need updates within minutes<\/td>\n<td><strong>AdaptCT<\/strong><\/td>\n<\/tr>\n<tr>\n<td>Limited translation data (&lt; 10K pairs)<\/td>\n<td><strong>AdaptCT<\/strong><\/td>\n<\/tr>\n<tr>\n<td>Support tickets, chat, dynamic content<\/td>\n<td><strong>AdaptCT<\/strong><\/td>\n<\/tr>\n<tr>\n<td>High-volume, consistent content<\/td>\n<td>Custom Translator<\/td>\n<\/tr>\n<tr>\n<td>Legal\/medical with strict terminology<\/td>\n<td>Custom Translator<\/td>\n<\/tr>\n<tr>\n<td>Large dataset available (&gt; 10K pairs)<\/td>\n<td>Custom Translator<\/td>\n<\/tr>\n<tr>\n<td>Content changes infrequently<\/td>\n<td>Custom Translator<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h2 id=\"good-practices-from-the-trenches\" data-line=\"213\">Good Practices from the Trenches<\/h2>\n<ul>\n<li data-line=\"215\">Start Small, Iterate Fast \u2013 Begin with your most critical 50-100 sentence pairs. Test, measure, and expand.<\/li>\n<li data-line=\"218\">Organize by Domain \u2013 Create separate indexes for different domains: customer-support-index, product-docs-index, marketing-content-index, etc.<\/li>\n<li data-line=\"224\">Quality Over Quantity \u2013 5 perfect sentence pairs\u00a0 are more impactful than 500 mediocre ones. Focus on high-impact terminology.<\/li>\n<li data-line=\"227\">Version Your Datasets \u2013\u00a0 Use naming conventions, e.g,\u00a0 product-v1, product-v2-holiday-season, product-v3-new-features, etc.<\/li>\n<li data-line=\"235\">Monitor and Measure \u2013 Track which translations are working through user feedback, translation accuracy and coverage of your terminology.<\/li>\n<li data-line=\"235\">Avoid Common Pitfalls \u2013 Achieving high-quality translations requires disciplined practices:\n<ol>\n<li data-line=\"235\">Do not treat the process like Custom Translator by uploading thousands of sentence pairs \u201cjust in case.\u201d Instead, start small with 50\u2013500 in domain high-value pairs and expand based on identified gaps.<\/li>\n<li data-line=\"235\">Maintain proper alignment between source and target sentences using TMX or carefully aligned TSV files, supported by rigorous quality checks.<\/li>\n<li data-line=\"235\">Provide full sentence context rather than isolated words and phrases to preserve meaning and usability.<\/li>\n<li data-line=\"235\">Use blind-testset to validate every index update before full deployment to prevent costly errors.<\/li>\n<\/ol>\n<\/li>\n<\/ul>\n<h2>The Future is Adaptive<\/h2>\n<p data-line=\"267\">Adaptive Custom Translation represents a shift in how we approach translation customization. Instead of building heavyweight solutions for every scenario, we\u2019re using smart indexing and few-shot learning to adapt powerful models on the fly.<\/p>\n<h2 id=\"what-this-means-for-you\" data-line=\"267\">What This Means for You<\/h2>\n<ul data-line=\"271\">\n<li data-line=\"271\">Faster time-to-market\u00a0for multilingual features<\/li>\n<li data-line=\"272\">Lower costs\u00a0(less data, less training time)<\/li>\n<li data-line=\"273\">More agile\u00a0translation workflows<\/li>\n<li data-line=\"274\">Better user experiences\u00a0with up-to-date terminology<\/li>\n<\/ul>\n<h2 id=\"resources\" data-line=\"285\">Resources<\/h2>\n<ul data-line=\"289\">\n<li data-line=\"289\">Check out our\u00a0<a href=\"https:\/\/github.com\/MicrosoftTranslator\/adapct4python\" target=\"_blank\" rel=\"noopener\" data-href=\"https:\/\/github.com\/MicrosoftTranslator\/adapct4python\">GitHub Repository<\/a><\/li>\n<li data-line=\"290\">Watch our demo on\u00a0<a href=\"https:\/\/youtu.be\/K30exeRKGdw\" target=\"_blank\" rel=\"noopener\" data-href=\"https:\/\/youtu.be\/K30exeRKGdw\">YouTube<\/a><\/li>\n<li data-line=\"291\"><a href=\"https:\/\/learn.microsoft.com\/azure\/ai-services\/translator\/\" target=\"_blank\" rel=\"noopener\" data-href=\"https:\/\/learn.microsoft.com\/azure\/ai-services\/translator\/\">Azure AI Translator Documentation<\/a><\/li>\n<li data-line=\"292\"><a href=\"https:\/\/learn.microsoft.com\/azure\/ai-services\/translator\/text-translation\/preview\/overview\" target=\"_blank\" rel=\"noopener\" data-href=\"https:\/\/learn.microsoft.com\/azure\/ai-services\/translator\/text-translation\/preview\/overview\">Text Translation API Preview<\/a><\/li>\n<li data-line=\"293\"><a href=\"https:\/\/azure.microsoft.com\/products\/ai-foundry\" target=\"_blank\" rel=\"noopener\" data-href=\"https:\/\/azure.microsoft.com\/products\/ai-foundry\">Azure AI Foundry<\/a><\/li>\n<li data-line=\"294\"><a href=\"https:\/\/learn.microsoft.com\/azure\/ai-services\/translator\/custom-translator\/overview\" target=\"_blank\" rel=\"noopener\" data-href=\"https:\/\/learn.microsoft.com\/azure\/ai-services\/translator\/custom-translator\/overview\">Custom Translator Overview<\/a><\/li>\n<\/ul>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Introduction Translation isn\u2019t just converting words\u2014it\u2019s enabling global communication. Yet for businesses operating worldwide, achieving accuracy, speed, and domain-specific terminology has been a persistent challenge. Market trends show that 70% of consumers prefer content in their native language, and enterprises are under pressure to deliver real-time multilingual experiences without sacrificing quality. That\u2019s why we\u2019re introducing [&hellip;]<\/p>\n","protected":false},"author":202688,"featured_media":1563,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1,76],"tags":[3,5,4,2,70],"class_list":["post-1640","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-microsoft-foundry","category-msignite","tag-ai-development","tag-ai-tools","tag-generative-ai","tag-microsoft-foundry","tag-model-customization"],"acf":[],"blog_post_summary":"<p>Introduction Translation isn\u2019t just converting words\u2014it\u2019s enabling global communication. Yet for businesses operating worldwide, achieving accuracy, speed, and domain-specific terminology has been a persistent challenge. Market trends show that 70% of consumers prefer content in their native language, and enterprises are under pressure to deliver real-time multilingual experiences without sacrificing quality. That\u2019s why we\u2019re introducing [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/foundry\/wp-json\/wp\/v2\/posts\/1640","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/foundry\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/foundry\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/foundry\/wp-json\/wp\/v2\/users\/202688"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/foundry\/wp-json\/wp\/v2\/comments?post=1640"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/foundry\/wp-json\/wp\/v2\/posts\/1640\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/foundry\/wp-json\/wp\/v2\/media\/1563"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/foundry\/wp-json\/wp\/v2\/media?parent=1640"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/foundry\/wp-json\/wp\/v2\/categories?post=1640"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/foundry\/wp-json\/wp\/v2\/tags?post=1640"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}