# General Translation Knowledge Base: Интернационализация и локализация (i18n и l10n)
URL: https://generaltranslation.com/ru/kb/internationalization-vs-localization.mdx
Docs index: https://generaltranslation.com/llms.txt
Description: Интернационализация (i18n) — это работа над кодом и дизайном, благодаря которой один продукт может поддерживать множество локалей: например, форматировать даты с помощью Intl и отображать текст с направлением right-to-left. Локализация (l10n) адаптирует продукт под конкретную локаль: это перевод, а также валюта, форматы дат, единицы измерения, тон и правовые нюансы.
Category: Интернационализация
Last updated: 2026-10-20
Authors: Kevin Wu, Jackie Chen
Published: 2026-10-20

Интернационализация делает продукт адаптируемым, а локализация использует эту возможность для конкретного рынка. Разработчики, дизайнеры, переводчики и продуктовые команды часто занимаются и тем и другим в рамках одного релиза. Перевод — лишь одна из составляющих локализации наряду с форматами, вёрсткой и местными особенностями.

## Что такое интернационализация (i18n) и что такое локализация (l10n)?

* **Интернационализация (i18n)** — это подготовка кодовой базы к поддержке нескольких локалей (обработка дат, форм множественного числа, валют и вёрстки). W3C определяет её как такое проектирование и разработку, которые «упрощают локализацию» для аудиторий, различающихся по культуре, региону или языку. На практике это означает вынос пользовательского текста из жёстко заданных в коде строк, форматирование значений в соответствии с локалью, поддержку текста с направлением right-to-left и использование Unicode повсюду. (См. статью W3C [Localization vs. Internationalization](https://www.w3.org/International/questions/qa-i18n).)
* **Перевод** — это передача контента с одного языка на другой.
* **Локализация (l10n)** — более широкий процесс адаптации продукта к другой локали. Помимо перевода, W3C относит к нему форматы чисел, дат и времени, валюту, сортировку, символы, значки и цвета, форматы адресов и телефонных номеров, правовые требования, а также отсылки, которые представители другой культуры могут понять неправильно.

Локаль — это язык или диалект вместе с присущими ему соглашениями, обозначаемый кодом, например `en-US` или `de-DE`.

## Откуда взялись i18n, l10n и g11n

Это нумеронимы: первая буква, число букв между первой и последней и последняя буква. В слове «Internationalization» между i и n 18 букв, поэтому получается i18n; в слове «localization» между l и n — 10 букв, отсюда l10n. По тому же принципу «Globalization» превращается в g11n.

Из трёх терминов «глобализация» трактуется наименее единообразно. W3C отмечает, что некоторые используют это слово как синоним интернационализации, тогда как в [глоссарии Microsoft по глобализации](https://learn.microsoft.com/en-us/globalization/reference/glossary) глобализацией называется адаптация приложения к работе в любой локали, а интернационализацией — весь процесс вывода программного обеспечения на мировые рынки. Встретив g11n, уточните, в каком значении его использует автор.

## Локализация — это то же самое, что перевод?

Перевод — лишь один из этапов локализации. В [руководстве Microsoft по локализации](https://learn.microsoft.com/en-us/globalization/localization/localization) приводится пример — фраза о цене билета на поезд на определённую дату. Просто перевести её на немецкий недостаточно: цена должна быть указана в евро, а дата — в формате «день-месяц-год». В том же руководстве отмечается, что при локализации с американского английского на британский перевод может вовсе не понадобиться — достаточно изменить орфографию, лексику и форматы.

## Примеры для каждого понятия

**Интернационализация — это изменение кода.** Вот сводка заказа до и после:

```js title="order-summary.mjs"
const date = new Date(Date.UTC(2026, 6, 30));
const total = 1234.5;

// До: английский текст, американский формат даты и знак доллара жёстко зашиты в код
console.log(
  `Order placed on ${date.getUTCMonth() + 1}/${date.getUTCDate()}/${date.getUTCFullYear()}. Total: $${total.toFixed(2)}`
);

// После: текст берётся из сообщения для конкретной локали, а Intl форматирует значения
const messages = {
  'en-US': 'Order placed on {date}. Total: {total}',
  'de-DE': 'Bestellt am {date}. Gesamt: {total}',
};

function orderSummary(locale, currency) {
  const values = {
    date: new Intl.DateTimeFormat(locale, { timeZone: 'UTC' }).format(date),
    total: new Intl.NumberFormat(locale, { style: 'currency', currency }).format(total),
  };
  return messages[locale].replace(/\{(\w+)\}/g, (_, key) => values[key]);
}

console.log(orderSummary('en-US', 'USD'));
console.log(orderSummary('de-DE', 'EUR'));
```

Запускаем в Node.js 24:

```text title="Output"
Order placed on 7/30/2026. Total: $1234.50
Order placed on 7/30/2026. Total: $1,234.50
Bestellt am 30.7.2026. Gesamt: 1.234,50 €
```

Код форматирования работает с любой из этих локалей, а сообщение на немецком предоставляется отдельно. `Intl.NumberFormat` форматирует сумму в выбранной валюте, но не конвертирует доллары в евро. Одинаковая сумма здесь приведена лишь для наглядности и не является пересчётом по курсу.

**Локализация — это адаптированная страница.** При локализации американской страницы товара для Германии меняются не только слова:

| Элемент        | Страница en-US                    | Страница de-DE                                 |
| -------------- | --------------------------------- | ---------------------------------------------- |
| Цена           | $49.00                            | 49,00 €                                        |
| Дата           | July 30, 2026                     | 30. Juli 2026                                  |
| Часы поддержки | 3:00 PM                           | 15:00                                          |
| Вес            | 2.2 lb                            | 1 kg                                           |
| Тон            | &quot;Start your free trial&quot; | Вежливое &quot;Sie&quot; вместо &quot;du&quot; |

Форматы в первых трёх строках обеспечивает `Intl`, как только код интернационализирован. А единица измерения, тон и необходимость менять саму цену — это решения в рамках локализации, которые кто-то должен принять для каждого рынка.

## Кто отвечает за i18n и l10n?

* **Разработчики** занимаются интернационализацией: оборачивают или извлекают строки, добавляют locale-aware форматирование и обработку множественного числа, настраивают маршрутизацию по локалям и адаптируют макеты под более длинный текст и письменности с направлением right-to-left.
* **Переводчики, рецензенты и менеджеры по локализации** занимаются локализацией: переводят, следят за единообразием терминологии, адаптируют тон и примеры, а также проверяют каждый язык в работающем продукте.
* **Продуктовая и юридическая команды** решают, что должно меняться для каждого рынка: например, валюты, способы оплаты и обязательные уведомления.

## Кратко

|              | Интернационализация (i18n)                                                                                   | Локализация (l10n)                                                                 |
| ------------ | ------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------- |
| Что меняется | Код и дизайн                                                                                                 | Контент и региональные конвенции для одной локали                                  |
| Когда        | Закладывается до добавления первого дополнительного языка и поддерживается по мере развития функциональности | Для каждой локали — и заново при каждом изменении контента                         |
| Кто          | Разработчики                                                                                                 | Переводчики, рецензенты, менеджеры по локализации                                   |
| Результат    | Единая кодовая база с поддержкой всех ваших целевых локалей                                                  | Продукт, адаптированный и проверенный для одной локали                             |
| Пример       | Заменить `$${total}` на `Intl.NumberFormat`                                                                  | Перевести страницу оформления заказа на немецкий, обращаясь к пользователю на «вы» |

## Типичные ошибки

* **Локализацию сводят к переводу.** Переведённая страница с американским форматом дат, ценами в долларах и идиомами, которые не работают в другом языке, всё равно воспринимается как чужая. По словам W3C, локализация — «зачастую существенно более сложная задача», чем перевод интерфейса и документации.
* **i18n внедряют слишком поздно.** Жёстко закодированные строки, предложения, склеенные из фрагментов, и кнопки фиксированной ширины усложняют локализацию большой кодовой базы. Переведённые подписи могут не помещаться в макет, даже если их смысл передан верно. [Псевдолокализация](/kb/pseudo-localization) выявляет многие из этих проблем ещё до начала перевода.
* **Логику выбора формы множественного числа пишут вручную.** `count === 1 ? 'item' : 'items'` работает для английского языка, в котором 2 формы множественного числа, но в арабском их 6. (См. [Как работать с формами множественного числа в React?](/kb/how-to-handle-plurals-in-react))
* **Переводят без контекста.** Переводчик или модель, видя одно лишь слово «Save», не может понять, идёт ли речь о сохранении на диск или об экономии денег.

О том, что проверить в каждой локали перед запуском, рассказано в [чек-листе запуска многоязычного приложения](/kb/multilingual-app-launch-checklist).

## Как General Translation разделяет i18n и l10n

За интернационализацию на стороне кода отвечают библиотеки General Translation с открытым исходным кодом, такие как `gt-next`, `gt-react`, `gt-vue` и `gt-node`. Компонент [`<T>`](/docs/react/reference/components/t) оборачивает JSX прямо там, где он написан, поэтому не нужен отдельный файл с ключами, куда пришлось бы выносить строки, а компоненты [`<DateTime>`](/docs/react/reference/components/datetime), [`<Currency>`](/docs/react/reference/components/currency) и [`<Plural>`](/docs/react/reference/components/plural) форматируют значения с учётом локали:

```jsx title="OrderSummary.jsx"
import { T, DateTime, Currency } from 'gt-next';

export function OrderSummary({ date, total, currency }) {
  return (
    <T>
      Order placed on <DateTime>{date}</DateTime>. Total:{' '}
      <Currency currency={currency}>{total}</Currency>
    </T>
  );
}
```

Для локализации добавьте локаль в `gt.config.json` и выполните [`npx gt translate`](/docs/cli/reference/commands/translate), чтобы сгенерировать для неё переводы. Платформа перевода использует в качестве контекста компонент, переменные и примечания разработчиков, [контекстные группы](/docs/platform/dashboard/guides/defining-context-for-translations) позволяют применять единую терминологию и правила стиля в разных проектах, а ваша команда [проверяет переводы](/docs/platform/dashboard/guides/reviewing-translations) в панели управления. Чтобы проверить публичный сайт, воспользуйтесь бесплатным сервисом [Report Card](https://generaltranslation.com/report-card): он оценивает качество локализации, в том числе теги `hreflang`, объявления языка, маршрутизацию по локалям, переведённые метаданные и направление текста.

## Ключевые выводы

* Интернационализация (i18n) закладывает общую поддержку нескольких локалей. Эту поддержку нужно сохранять по мере развития функциональности; сама по себе интернационализация переводов не создаёт.
* Локализация (l10n) адаптирует продукт под каждую локаль: это перевод, а также валюта, форматы дат и чисел, единицы измерения, тон, правовые и культурные особенности.
* Числа в i18n, l10n и g11n обозначают количество букв между первой и последней буквой слова; значение g11n в разных источниках трактуется по-разному.

## Related questions

- [Чек-лист тестирования локализации для многоязычных приложений](https://generaltranslation.com/ru/kb/multilingual-app-launch-checklist.mdx): Проверьте девять аспектов в каждой поддерживаемой локали на сборке для рабочей среды: пользовательские сценарии целиком, включая состояния ошибок и письма; переключение языка; формы множественного числа; валюту и часовые пояса; увеличение длины текста; вёрстку для языков right-to-left; доступность; доставку переводов; индексируемые языковые URL. Задайте для каждой проверки явный критерий успешного прохождения.
- [Писать собственную i18n или использовать General Translation?](https://generaltranslation.com/ru/kb/general-translation-vs-in-house-i18n.mdx): Самописной i18n (по словарю на каждый язык и небольшой вспомогательной функции t()) вполне достаточно для одного-двух языков и небольшого объёма текста. По мере роста приложения вам приходится заново реализовывать правила множественного числа, резервные варианты и синхронизацию файлов, а переводы всё равно нужно где-то брать. Библиотеки General Translation с открытым исходным кодом берут на себя рендеринг, а General Translation генерирует и обновляет переводы на основе вашего кода.
- [Что такое псевдолокализация?](https://generaltranslation.com/ru/kb/pseudo-localization.mdx): Псевдолокализация — это тест, при котором исходный текст заменяется изменённой версией с диакритикой, удлинённой примерно на 40% и заключённой в скобки. Так жёстко закодированные строки, усечение, проблемы со шрифтами и склеенные из фрагментов предложения выявляются ещё до появления перевода. В Android для этого предусмотрены псевдолокали en-XA и ar-XB.
- [Что такое система управления переводами (TMS)?](https://generaltranslation.com/ru/kb/what-is-a-translation-management-system.mdx): Система управления переводами (TMS) — это программное обеспечение, которое хранит исходное содержимое и его переводы и обеспечивает весь процесс перевода: память переводов, глоссарии, проверку, машинный перевод и интеграции. Память переводов позволяет повторно использовать ранее выполненные переводы при точном или нечётком совпадении. Типичные примеры — Crowdin, Lokalise, Phrase, Smartling и Transifex.
- [General Translation против i18next, react-intl и next-intl: какую библиотеку интернационализации выбрать?](https://generaltranslation.com/ru/kb/general-translation-vs-i18n-libraries.mdx): Библиотеки с открытым исходным кодом, такие как i18next, react-intl и next-intl, ничего не переводят. Они лишь отображают переводы, которые вы сами помещаете в файл каталога для каждого языка, — их пишете вы, ваши переводчики или сторонний сервис. Библиотеки General Translation тоже имеют открытый исходный код и делают то же самое, но General Translation ещё и выполняет перевод, используя ваш код как контекст.

## Previous and next questions

- Previous question: [Достаточно ли точен ИИ-перевод для приложения в рабочей среде?](https://generaltranslation.com/ru/kb/is-ai-translation-accurate.mdx)
- Next question: [Как локализовать iOS-приложение с помощью String Catalogs?](https://generaltranslation.com/ru/kb/localize-ios-app.mdx)

## Sitemap

See the [Knowledge Base sitemap](https://generaltranslation.com/ru/kb/sitemap.md) for every article.
