AI-Powered Content Translation for Websites
Automated website content translation to multiple languages using neural models. Fast, cost-effective alternative to human translation for high-volume sites.
Translation Approaches
Direct API (Google Translate, DeepL) — fastest, suitable for non-critical content. Cost: $15–20 per million characters.
Fine-tuned models (Azure Translator, AWS Translate) — better for domain-specific terminology. 2–3 week setup.
Open-source (Argos, Ollama + Seamless M4T) — self-hosted, no per-request costs, full control.
Implementation via DeepL API
import * as deepl from 'deepl-node';
const translator = new deepl.Translator(process.env.DEEPL_API_KEY);
async function translateContent(text, targetLang = 'EN') {
const result = await translator.translateText(text, null, targetLang);
return result.text;
}
// Batch translation
async function translatePage(page, languages = ['DE', 'FR', 'UK']) {
const translations = {};
for (const lang of languages) {
translations[lang] = {
title: await translateContent(page.title, lang),
description: await translateContent(page.description, lang),
body: await translateContent(page.body, lang),
};
}
return translations;
}
// Save to database
async function saveTranslations(pageId, translations) {
for (const [lang, content] of Object.entries(translations)) {
await db.insert('page_translations', {
page_id: pageId,
language: lang,
title: content.title,
description: content.description,
body: content.body,
translated_at: new Date(),
});
}
}
SEO & Language Detection
// Auto-detect user language from header
function getPreferredLanguage(request) {
const acceptLanguage = request.headers['accept-language'];
if (!acceptLanguage) return 'en';
const languages = acceptLanguage.split(',').map(lang =>
lang.split(';')[0].trim().split('-')[0]
);
return languages[0] || 'en';
}
// Hreflang tags for SEO
function generateHreflangs(path, languages = ['en', 'de', 'fr', 'uk']) {
return languages.map(lang =>
`<link rel="alternate" hreflang="${lang}" href="https://example.com/${lang}${path}" />`
).join('\n');
}
Quality Control
// Post-translation QA checks
async function validateTranslation(original, translated, lang) {
const checks = [
// Length should be within 20% of original
Math.abs(translated.length - original.length) / original.length < 0.2,
// No untranslated placeholders (${var})
!/{{\w+}}/.test(translated),
// Proper punctuation
/[.!?;:]$/.test(translated),
];
return checks.every(c => c);
}
// Use translation API with glossary
async function translateWithGlossary(text, lang, glossary) {
return translator.translateText(text, null, lang, {
glossary: glossary, // Custom term mappings
});
}
Timeline
- Setup translation API — 1 day
- Batch translate existing content — 2–3 days
- Language detection + routing — 1–2 days
- SEO (hreflang, lang attributes) — 1 day
- Quality review + glossary management — 2–3 weeks ongoing







