# General Translation Knowledge Base: Что такое псевдолокализация?
URL: https://generaltranslation.com/ru/kb/pseudo-localization.mdx
Docs index: https://generaltranslation.com/llms.txt
Description: Псевдолокализация — это тест, при котором исходный текст заменяется изменённой версией с диакритикой, удлинённой примерно на 40% и заключённой в скобки. Так жёстко закодированные строки, усечение, проблемы со шрифтами и склеенные из фрагментов предложения выявляются ещё до появления перевода. В Android для этого предусмотрены псевдолокали en-XA и ar-XB.
Category: Интернационализация
Last updated: 2026-10-20
Authors: Kevin Wu, Jackie Chen
Published: 2026-10-20

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

## В чём разница между псевдопереводом и псевдолокалью?

[Документация Microsoft по глобализации](https://learn.microsoft.com/en-us/globalization/methodology/pseudolocalization) разделяет это на две составляющие:

* **Псевдоперевод** преобразует сами строки: «Save changes» превращается во что-то вроде `[Šáṽé çĥáñĝéš~~~~~]`.
* **Псевдолокали** — это фиктивные коды локалей, например `qps-ploc` в Windows или `en-XA` в Android, которые можно выбрать как обычный язык. Некоторые из них также намеренно используют необычные форматы дат, времени и чисел, чтобы проверить код форматирования.

Microsoft рекомендует использовать коды, которые корректны по форме, но гарантированно не совпадут ни с одной реальной локалью, — например, коды `qps-` в Windows: они входят в диапазон, который BCP 47 резервирует для частного использования. К этому компания пришла на собственном горьком опыте: её первой псевдолокалью была `tk-TM` (туркменский, Туркменистан), которая позже появилась в Windows как настоящая локаль и вызвала конфликты в системах сборки и тестирования.

## Какие ошибки помогает выявить псевдолокализация?

* **Жёстко закодированные строки.** Любой текст, не прошедший через ваш слой i18n, остаётся обычным английским, тогда как всё вокруг отображается с диакритикой, поэтому он сразу бросается в глаза на любом экране. (О том, как найти такие строки в коде, см. [Как найти жёстко закодированные строки без перевода?](/kb/find-hardcoded-strings))
* **Усечение и переполнение из-за увеличения длины текста.** Удлинённые строки показывают, какие кнопки, вкладки и заголовки таблиц обрезаются, неудачно переносятся или выталкивают элементы управления за пределы экрана.
* **Проблемы с кодировкой и шрифтами.** Символы с диакритикой и нелатинские символы выявляют сломанные кодировки, шрифты без нужных глифов и межстрочные интервалы, при которых обрезаются диакритические знаки.
* **Конкатенация.** Предложение, собранное из фрагментов, отображается не единым целым, а несколькими фрагментами в скобках: `[Ýöû ĥáṽé~~~~] 3 [íţéɱš~~]`. Это значит, что переводчики получат разрозненные фрагменты без всего предложения.
* **Отсутствие поддержки right-to-left.** Псевдолокаль RTL показывает, отражается ли макет зеркально, какие значки нужно перевернуть и где ломаются значения left-to-right. (См. [Как поддержать языки RTL (right-to-left) в CSS?](/kb/right-to-left-css))

## Как работает псевдолокализация?

Большинство инструментов сочетают несколько из следующих приёмов:

* **Диакритика и другие письменности.** Замените `a` символами вроде `á`, `ä` или `å`, а цифры — цифрами в кружках, как советует руководство Microsoft.
* **Удлинение.** Увеличьте длину каждой строки. Для английского источника Microsoft в качестве эвристики предлагает удлинять примерно на 40% и отмечает, что после перевода некоторые строки становятся длиннее на 200% и даже на 400%, причём сильнее всего растут строки из одного-двух слов.
* **Разделители.** Оберните каждую строку маркерами, например скобками или знаками вставки. Если закрывающего маркера нет, значит, текст обрезан.
* **Идентификаторы.** При желании добавьте к каждой строке короткий ID, чтобы тестировщик мог найти её источник.
* **Right-to-left.** Измените направление текста на обратное, чтобы UI вёл себя так же, как на арабском или иврите, — так работают `ar-XB` в Android и зеркальная `qps-plocm` в Windows.

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

## На каких платформах есть встроенные псевдолокали?

| Платформа           | Псевдолокали                                                                        | Что они делают                                                                                                                                                                             | Как их включить                                                                                                                                         |
| ------------------- | ----------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Android             | `en-XA`, `ar-XB`                                                                    | `en-XA` добавляет диакритические знаки, удлиняет текст и заключает каждое сообщение в скобки; `ar-XB` переводит сообщения в режим right-to-left и записывает их символы в обратном порядке | `pseudoLocalesEnabled` для типа сборки debug; включите режим разработчика и перезагрузите устройство, затем выберите псевдолокаль в языковых настройках |
| Xcode (iOS, macOS)  | Double-Length, Right-to-Left, Accented, Bounded String, Tall и другие псевдоязыки   | Удваивают длину строк, меняют направление письма, добавляют диакритические знаки, обрамляют строки, чтобы выявить усечение, увеличивают высоту текста                                      | **Product &gt; Scheme &gt; Edit Scheme &gt; Run &gt; Options**, затем выберите язык в меню **App Language**                                             |
| Windows             | `qps-ploc`, `qps-plocm`, `qps-ploca` (а также `qps-Latn-x-sh` начиная с Windows 10) | Базовая, зеркальная (right-to-left) и восточноазиатская псевдолокали с тестовыми данными для дат, шрифтов и длины строк                                                                    | Передайте имя псевдолокали в API NLS, например в `GetLocaleInfoEx`; Multilingual App Toolkit от Microsoft выполняет псевдоперевод ресурсов              |
| Lingui (JavaScript) | Любая локаль с произвольным именем, например `pseudo-LOCALE`                        | Генерирует сообщения с диакритическими знаками на этапе компиляции; доступен также необязательный вариант right-to-left                                                                    | Ключ `pseudoLocale` в конфигурации Lingui                                                                                                               |

Для Android в [руководстве по псевдолокалям](https://developer.android.com/guide/topics/resources/pseudolocales) они включаются в файле Gradle модуля:

```kotlin title="build.gradle.kts"
android {
    buildTypes.getByName("debug") {
        isPseudoLocalesEnabled = true
    }
}
```

В [справочнике по Gradle](https://developer.android.com/reference/tools/gradle-api/8.3/null/com/android/build/api/dsl/BuildType) указано, что фильтр `resourceConfigurations` позволяет исключить ресурсы псевдолокалей из APK. В Xcode в том же окне настройки схемы есть параметр **Show non-localized strings**, который выводит заглавными буквами строки, не экспортируемые Xcode. (См. статью Apple [Preparing your interface for localization](https://developer.apple.com/documentation/xcode/preparing-your-interface-for-localization).) Коды Windows перечислены на странице [Pseudo-Locales](https://learn.microsoft.com/en-us/windows/win32/intl/pseudo-locales); там же отмечено, что по умолчанию они не отображаются в списке системных локалей ([Using pseudo-locales](https://learn.microsoft.com/en-us/windows/win32/intl/using-pseudo-locales-for-localization-testing)). Настройка в Lingui описана в [руководстве по псевдолокализации](https://lingui.dev/guides/pseudolocalization).

## Псевдолокализация строк в JavaScript

В вебе встроенной псевдолокали нет, но преобразование укладывается в несколько строк. Приведённая ниже функция добавляет диакритические знаки к буквам ASCII, удлиняет строку примерно на 40% и заключает результат в скобки. При этом `{placeholders}` и HTML-теги остаются нетронутыми, так что интерполяция и разметка продолжают работать:

```js title="pseudo.mjs"
// Похожие на буквы ASCII символы с диакритикой
const ACCENTS = {
  a: 'á', b: 'ƀ', c: 'ç', d: 'ð', e: 'é', f: 'ƒ', g: 'ĝ', h: 'ĥ', i: 'í',
  j: 'ĵ', k: 'ķ', l: 'ļ', m: 'ɱ', n: 'ñ', o: 'ö', p: 'þ', q: 'ǫ', r: 'ŕ',
  s: 'š', t: 'ţ', u: 'û', v: 'ṽ', w: 'ŵ', x: 'ẋ', y: 'ý', z: 'ž',
  A: 'Á', B: 'Ɓ', C: 'Ç', D: 'Ð', E: 'É', F: 'Ƒ', G: 'Ĝ', H: 'Ĥ', I: 'Í',
  J: 'Ĵ', K: 'Ķ', L: 'Ļ', M: 'Ṁ', N: 'Ñ', O: 'Ö', P: 'Þ', Q: 'Ǫ', R: 'Ŕ',
  S: 'Š', T: 'Ţ', U: 'Û', V: 'Ṽ', W: 'Ŵ', X: 'Ẋ', Y: 'Ý', Z: 'Ž',
};

// Заполнители вида {name} и теги вида <b> должны остаться без изменений
const PROTECTED = /(\{[^}]*\}|<[^>]+>)/;

export function pseudoLocalize(text, { expansion = 0.4 } = {}) {
  const accented = text
    .split(PROTECTED)
    .map((part, i) =>
      i % 2 === 1 ? part : part.replace(/[A-Za-z]/g, (ch) => ACCENTS[ch])
    )
    .join('');
  // Добавляем примерно 40% от длины исходного текста, чтобы имитировать более длинные переводы
  const padding = '~'.repeat(Math.ceil(text.length * expansion));
  // Скобки отмечают начало и конец строки, чтобы усечение было заметно
  return `[${accented}${padding}]`;
}
```

```js title="demo.mjs"
import { pseudoLocalize } from './pseudo.mjs';

for (const source of ['Save changes', 'Hello, {name}!', 'Read the <a>terms</a>']) {
  console.log(pseudoLocalize(source));
}
```

Запуск `node demo.mjs` в Node.js 24:

```text title="Output"
[Šáṽé çĥáñĝéš~~~~~]
[Ĥéļļö, {name}!~~~~~~]
[Ŕéáð ţĥé <a>ţéŕɱš</a>~~~~~~~~~]
```

Чтобы воспользоваться ею, применяйте её к каждому сообщению, которое возвращает ваш слой i18n, когда включён отладочный флаг или активна фиктивная локаль. Тогда предложение, собранное конкатенацией, сразу себя выдаст:

```js title="concatenation.mjs"
import { pseudoLocalize } from './pseudo.mjs';

// ❌ Три фрагмента: переводчик так и не увидит предложение целиком
console.log(pseudoLocalize('You have') + ' 3 ' + pseudoLocalize('items'));
// ✅ Одно сообщение с плейсхолдером
console.log(pseudoLocalize('You have {count} items'));
```

```text title="Output"
[Ýöû ĥáṽé~~~~] 3 [íţéɱš~~]
[Ýöû ĥáṽé {count} íţéɱš~~~~~~~~~]
```

Регулярное выражение для плейсхолдеров обрабатывает простые переменные вида `{name}`. В ICU-сообщениях plural и select фигурные скобки вложены друг в друга, поэтому применяйте псевдолокализацию к отформатированному результату, а не к исходному сообщению. То же касается npm-пакета [`pseudo-localization`](https://github.com/tryggvigy/pseudo-localization): его функция `pseudoLocalizeString('Hello, {name}!')` возвращает `Ħḗḗŀŀǿǿ, {ƞȧȧḿḗḗ}!`, добавляя диакритику и к имени плейсхолдера, поэтому применяйте её к уже переведённому результату, как показано в README пакета. Кроме того, в этом пакете есть стратегия `bidi` для тестирования right-to-left и DOM-режим, который псевдолокализует всю страницу целиком. Чтобы проверить RTL самостоятельно, задайте `dir="rtl"` для элемента `<html>`, пока активна псевдолокаль.

Чтобы находить жёстко закодированные строки, применяйте преобразование на границе i18n. Преобразование DOM всей страницы затрагивает и захардкоженный текст: оно подходит для проверки вёрстки, но не позволяет понять, какие строки обошли ваши вызовы перевода. Преобразование отформатированного вывода также изменяет интерполированные имена и другие данные, поэтому ограничьте такой вывод тестовым UI.

## Что псевдолокализация не проверяет

Псевдолокализация ничего не говорит о качестве перевода, порядке слов или тоне. Проверить правила множественного числа с её помощью тоже не получится: в английском языке 2 формы множественного числа, а в арабском — 6, но у английской строки с диакритическими знаками их по-прежнему 2, как и в английском. В руководстве Microsoft сказано, что она «не является полноценной заменой» проверке переведённого приложения, поэтому перед запуском обязательно протестируйте и реальные языки. Что именно проверять, описано в [чек-листе запуска многоязычного приложения](/kb/multilingual-app-launch-checklist).

## Сочетайте псевдолокализацию с реальными переводами

General Translation позволяет проверять реальные переводы прямо во время разработки: если у ключа API проекта есть разрешение на перевод во время выполнения, `gt-next` запрашивает переводы у сервиса GT по запросу. Переключитесь на немецкий, чтобы оценить реальные формулировки и вёрстку, а затем на язык с другими правилами множественного числа, чтобы проверить соответствующие ветви. Текст вне [`<T>`](/docs/react/reference/components/t) или функции перевода остаётся на языке-источнике (см. [Быстрый старт для Next.js](/docs/react/nextjs-quickstart)). На раннем этапе проверяйте вёрстку с помощью псевдолокализации — такой текст тестировщики смогут прочитать. Затем сгенерируйте переводы для релиза с помощью [CLI](/docs/cli/reference/commands/translate) и проверьте их в [редакторе переводов](/docs/platform/dashboard/guides/reviewing-translations) GT и в запущенном приложении. По удлинённому английскому тексту нельзя понять, правильно ли переведено предложение и поместится ли оно в отведённое место.

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

* Псевдолокализация заменяет исходный текст версиями с диакритикой, дополнительными символами, скобками или зеркальным отображением, чтобы выявить ошибки i18n ещё до начала перевода.
* Она помогает обнаружить жёстко закодированные строки, усечение текста, проблемы со шрифтами и кодировкой, предложения, склеенные из фрагментов, и отсутствие поддержки right-to-left.
* В Android (`en-XA`, `ar-XB`), Xcode (псевдоязыки в параметрах схемы) и Windows (`qps-ploc`, `qps-plocm`, `qps-ploca`) она встроена; в вебе достаточно короткой функции преобразования или пакета `pseudo-localization`.
* Она не проверяет качество перевода и правила множественного числа — для этого нужны реальные переводы, которые `gt-next` может генерировать по запросу во время разработки.

## Related questions

- [Как найти захардкоженные строки, которые не переведены?](https://generaltranslation.com/ru/kb/find-hardcoded-strings.mdx): Запустите в CI линтер, который находит строковые литералы, видимые пользователю, — например, правило no-literal-string из eslint-plugin-i18next для JSX, проверку HardcodedText в Android Lint или линтер HardCodedString из erb_lint для Rails. Затем пройдитесь по приложению в псевдолокали, чтобы найти текст, который статические проверки отследить не могут.
- [Как поддержать RTL-языки (right-to-left) в CSS?](https://generaltranslation.com/ru/kb/right-to-left-css.mdx): Укажите dir="rtl" и lang на элементе html — сам по себе lang не меняет направление письма, — а затем замените физические CSS-свойства вроде margin-left логическими, например margin-inline-start. Flex-строки, grid-столбцы и выравнивание текста по умолчанию зеркалятся автоматически, а translateX(), left и right — нет.
- [Чек-лист тестирования локализации для многоязычных приложений](https://generaltranslation.com/ru/kb/multilingual-app-launch-checklist.mdx): Проверьте девять аспектов в каждой поддерживаемой локали на сборке для рабочей среды: пользовательские сценарии целиком, включая состояния ошибок и письма; переключение языка; формы множественного числа; валюту и часовые пояса; увеличение длины текста; вёрстку для языков right-to-left; доступность; доставку переводов; индексируемые языковые URL. Задайте для каждой проверки явный критерий успешного прохождения.
- [Интернационализация и локализация (i18n и l10n)](https://generaltranslation.com/ru/kb/internationalization-vs-localization.mdx): Интернационализация (i18n) — это работа над кодом и дизайном, благодаря которой один продукт может поддерживать множество локалей: например, форматировать даты с помощью Intl и отображать текст с направлением right-to-left. Локализация (l10n) адаптирует продукт под конкретную локаль: это перевод, а также валюта, форматы дат, единицы измерения, тон и правовые нюансы.

## Previous and next questions

- Previous question: [Что такое hreflang и как его настроить?](https://generaltranslation.com/ru/kb/what-is-hreflang.mdx)
- Next question: [Что такое система управления переводами (TMS)?](https://generaltranslation.com/ru/kb/what-is-a-translation-management-system.mdx)

## Sitemap

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