# Тестирование локализации, глобализации и интернационализации (Localization/ globalization/internatio

Глобализированное ПО - это ПО, функционирующее одинаково качественно независимо от географической, культурной и национальной среды. Тестирование глобализации концентрируется на выявлении потенциальных проблем в дизайне продукта, которые могут испортить глобализацию. Например, разработчик должен заложить в CSS основу для вертикального текста, если в будущем планируется локализовать продукт на язык с вертикальным письмом, обработку почтовых индексов для разных стран (где-то цифры, где-то цифры с буквами и т.п.). Оно гарантирует, что код может обрабатывать желаемую международную поддержку без нарушения какой-либо функциональности. А также, что не будет никакой потери данных и проблем с отображением.

**Globalization = Internationalization + Localization**.

**Интернационализация ПО** (Internationalization (I18N)) - это особый процесс, при котором веб-софт создается таким образом, чтобы оно было равноудаленным от какой-либо культуры и (или) специфики определенного географического региона. Например, одна из задач по интернационализации ПО - корректное редактирование логики всех подключенных параметров форматирования (формат даты, времени, цифровое и валютное форматирование). Также, тестировщики во время проверки на соответствие ПО требованиям I18N тестируют работу продукта на одинаковую работу в разных регионах и культурах мира. Основной задачей тестирования интернациональности является проверка того, может ли программный код работать со всей международной поддержкой без нарушения функциональности, что может привести к потере данных или проблемам целостности информации. В основном, фокус тестирования интернационализации направлен на:

* Тестирование языковой совместимости: это включает проверку того, может ли продукт правильно работать в определенной языковой среде;
* Тестирование функциональности: это включает выполнение регрессионных тестов функциональности в различных языковых средах и ввод строк на родном языке. Это включает в себя проверку того, правильно ли отображается и принимается на ввод валюта, дата, время, индекс и т.п.;
* Проверка пользовательского интерфейса: пытается выявить любые визуальные проблемы, такие как проблемы с графикой, наложение текста, усечение текста и т. д.;
* Тестирование совместимости: это включает тестирование программного обеспечения на целевых кросс-платформах, операционных системах, версиях приложений и т. д.;
* Тестирование юзабилити: проверяет простоту использования приложения;
* Тестирование установки: это включает попытку установить приложение на разных родных языках и проверить, правильно ли отображаются все сообщения об установке в языковых настройках;

**Локализация ПО** (Localization (L10N)) - деятельность по модификации ПО в соответствии с определенными региональными настройками (языком, географической территорией, культурными особенностями). В данный вид проверки входит необходимость выполнения работ по переводу всего контента программного обеспечения для конечного пользователя. Во время перевода должны учитываться иконки, информационная графика, справочные материалы, техническая документация и иные культурные особенности регионов (например, онлайн-сервис по заказу бургеров не будет показывать корову на главной странице в Индии или свинью в мусульманских странах). На что обратить внимание:

* Длина переведенных слов;
* Параметры шрифта пользовательского интерфейса;
* Ввод текста в разных локализациях;
* RTL-языки (справа-налево) или вертикальные;
* Перевод сокращений или аббревиатур;
* Мета-теги (проблемы с SEO или отображением имени вкладки (title, description, keywords));
* Соответствие мер исчисления, валюты, postal code и т.п.;

**Примеры проверок**:

* **Языковой словарь**: Глобализированный продукт поддерживает множество языков. Чем больше языков он поддерживает, тем больше потребность в тестировании. Вы можете использовать языковые переводчики и по одному проверять, использует ли приложение правильный словарный запас для каждого языка;
* **Пользовательский интерфейс:** Как вы знаете, у каждого языкового сценария свой стиль письма (некоторые пишутся слева направо, а некоторые - справа налево), и пространство, необходимое для слов, может варьироваться от одного языка к другому. Таким образом, необходимо протестировать макет пользовательского интерфейса на каждом языке, чтобы убедиться, что пользовательский интерфейс чистый и отсутствуют такие проблемы, как перекрытие текста, несовпадение текста, проблемы с навигацией и т. д.;
* **Обозначение даты и времени:** Форматы отображения даты и времени зависят от региона. Например, наиболее распространенный формат даты в США - мм / дд / гггг. В отличие от этого, наиболее распространенный формат даты в Европе - дд / мм / гггг. С другой стороны, Канада принимает как ДД / ММ / ГГГГ, так и ММ / ДД / ГГГГ. Точно так же некоторые страны используют 24-часовую нотацию, в то время как другие используют 12-часовую нотацию. Поэтому очень важно убедиться, что дата и время отображаются в соответствующем формате при переключении на другие регионы / страны;
* **Корректность даты / времени:** Это не только формат, но и фактическая дата и время варьируются от региона к региону в зависимости от часового пояса. Например, 11:53 субботы по индийскому стандартному времени (IST) - 1:23 субботы по восточному времени (ET). Значит, необходимо проверить правильность отображения даты и времени в приложении при переключении в разные страны;
* **Формат валюты и обработка курсов конвертации:** Если ваше приложение включает электронную коммерцию, проверка валюты становится критически важной. Числовые форматы валют варьируются от страны к стране. Итак, вам следует позаботиться о форматировании. Еще одна важная вещь - отображать правильный символ валюты вместе с единицами измерения. Например, если цена товара составляет 100 рупий, но в приложении он упоминается как «100», это может сбить с толку покупателя, так как это 100 рупий или 100 долларов. Следующим важным тестом должно быть подтверждение того, позаботились ли о коэффициентах конверсии. Также рекомендуется отображать обменный курс для пользователя, чтобы сделать его более удобным и полезным;
* **Формат номера телефона, адреса и почтового индекса:** Порядок отображения адресов зависит от языка. Например, на японском языке порядок адресов - это почтовый индекс, штат, город, а на английском языке порядок адресов - это имя, город, штат, почтовый индекс и т. д. Итак, вам необходимо проверить, нормально ли работает отображение порядка адресов при переключении между разными языками, поддерживаемыми вашим приложением. Точно так же длина и формат телефонного номера также различаются от страны к стране. В наши дни у нас также есть [рекомендация E.164](https://en.wikipedia.org/wiki/E.164) для форматирования чисел в соответствии с общей международной нотацией;

Примечание автора: частный случай задачи на тестирование локализации в android/ios приложениях может быть и в контексте файлов strings, в которых приложение хранит все текстовые строки. Строки могут быть с динамически подставляемыми параметрами чтобы содержимое строки динамически изменялось в зависимости от чего-либо. Например: “Вы сможете запросить код повторно через %s” или “Закрыто. До открытия %1$d ч.”, В данном случае потребуется проверить переводы на предмет того, что динамические аргументы в строках не были сломаны переводчиками. Лично я для этого писал скрипт на python, он есть в другом репозитории.

Источники:

* [What Is Globalization Testing (A Complete Guide)](https://www.softwaretestinghelp.com/globalization-testing/)

Доп. материал:

* [Тестировщик с нуля / Урок 8 / Тестирование локализации](https://www.youtube.com/watch?v=VQC0bVopwXg)
* [Sample International Test Cases](https://docs.microsoft.com/en-us/globalization/testing/sample-international-test-cases)
* [Страх и ненависть локализации в больших проектах. Доклад Яндекса](https://habr.com/ru/company/yandex/blog/545698/)
* [Локализационное тестирование: зачем оно нужно приложению или сайту?](https://habr.com/ru/company/alconost/blog/521330/)
* [Почему интернационализация и локализация имеют значение](https://habr.com/ru/company/otus/blog/523112/)
* [Гайд по тестированию локализации и интернационализации, а также большой и полезный checklist](https://habr.com/ru/post/532836/)
* [Accelerate localization from code to delivery](https://lokalise.com)
* [Internationalization & localization testing](https://www.slideshare.net/Robin0590/internationalization-localization-testing)
* [Android Developers - Docs - Reference - Formatter](https://developer.android.com/reference/java/util/Formatter.html)
* [Тестирование локализации](https://www.software-testing.ru/library/testing/testing-for-beginners/3746-localization-testing)
