CLI и API локализации Lingo.dev поддерживают два сценария локализации email-писем: перевод файлов шаблонов на этапе сборки с выпуском отдельных шаблонов для каждой локали или перевод контента во время выполнения перед отправкой. В обоих случаях используется настроенный движок локализации, который автоматически применяет правила глоссария, тональность бренда и выбранную модель.
Выберите подход#
| Подход | Оптимально для | Как это работает |
|---|---|---|
| На этапе сборки (CLI) | Файлов шаблонов: react-email, MJML, HTML | Переводите файлы в репозитории и развёртывайте отдельные шаблоны для каждой локали |
| Во время выполнения (API) | Динамического контента, шаблонов с рендерингом на стороне ESP | Вызывайте API локализации перед отправкой и передавайте переведённый контент вашему почтовому провайдеру |
Какой подход выбрать?
Если шаблоны писем хранятся в репозитории как файлы (HTML, MJML или React-компоненты), используйте локализацию на этапе сборки. Если контент писем генерируется динамически или хранится у вашего провайдера email-рассылок, выбирайте локализацию во время выполнения.
Что понадобится#
Каждый перевод проходит через движок локализации — конфигурацию, которая определяет, какие модель LLM, глоссарий, тональность бренда и инструкции будут применяться. Создайте его в панели Lingo.dev и сгенерируйте API key.
Локализация на этапе сборки#
CLI переводит файлы шаблонов писем напрямую. Настройте бакет под формат ваших шаблонов, запустите CLI и получите файлы шаблонов для каждой локали рядом с исходными шаблонами.
Шаблоны react-email — это React-компоненты, которые рендерятся в HTML. Вынесите переводимые строки в JSON-файлы ресурсов с помощью i18n-библиотеки, например react-i18next, а затем переведите эти JSON-файлы через CLI.
{
"$schema": "https://lingo.dev/schema/i18n.json",
"version": "1.15",
"locale": {
"source": "en",
"targets": ["es", "fr", "de", "ja"]
},
"buckets": {
"json": {
"include": ["emails/locales/[locale].json"]
}
}
}Во время рендеринга передайте локаль в компонент письма и загрузите соответствующий JSON-файл. Функция react-email render() создаст HTML для нужной локали, готовый к отправке.
Запустите перевод командой:
npx lingo.dev@latest runЛокализация во время выполнения#
Если контент писем динамический — персонализированные уведомления, сводки пользовательского контента или маркетинговые тексты из CMS, — переводите его во время выполнения перед отправкой. Этот сценарий основан на подходе, описанном в руководстве по API перевода.
async function sendLocalizedEmail(userId, templateId, content) {
const user = await db.users.findById(userId);
const response = await fetch("https://api.lingo.dev/process/localize", {
method: "POST",
headers: {
"X-API-Key": process.env.LINGODOTDEV_API_KEY,
"Content-Type": "application/json",
},
body: JSON.stringify({
engineId: "eng_abc123",
sourceLocale: "en",
targetLocale: user.locale,
data: {
subject: content.subject,
preheader: content.preheader,
body: content.body,
},
}),
});
const { data } = await response.json();
await emailProvider.send({
to: user.email,
subject: data.subject,
html: renderTemplate(templateId, data),
});
}Рекомендации#
| Область | Рекомендация |
|---|---|
| Темы писем | Не превышайте 50 символов. Используйте глоссарий, чтобы названия брендов не переводились. |
| Превью-текст | Переводите отдельно от основного текста — почтовые клиенты показывают его независимо. |
| Тональность бренда | Настройте тон для каждой локали в движке локализации. Маркетинговым письмам на японском нужен иной регистр, чем на немецком. |
| RTL-языки | Проверяйте итоговое отображение в почтовых клиентах для арабского, иврита и персидского. Обработка HTML dir="rtl" отличается от клиента к клиенту. |
| Блокировка ключей | Используйте locked keys для URL, названий продуктов и юридических идентификаторов, которые не должны переводиться. |
