Локализа́ция програ́ммного обеспе́чения — процесс адаптации программного обеспечения к культуре какой-либо страны. Как частность — перевод пользовательского интерфейса, документации и сопутствующих файлов программного обеспечения с одного языка на другой.
Для локализации в английском языке иногда применяют сокращение «L10n», где буквы «L» и «n» — начало и окончание слова Localization, а число 10 — количество букв между ними.
Что такое локализация
Локализация не ограничивается переводом интерфейса на другой язык. Это многоуровневая операция, первые шаги которой можно выполнить, даже оставив интерфейс нетронутым, а последние — требуют взаимодействия программистов, дизайнеров и переводчиковFoxSoft=Инструменты локализации: Русификация программных продуктов: Обеспечить поддержку языка и национальных стандартов — необходимый минимум, чтобы программа могла выполнять свои функции в другой стране. Современные ОС берут на себя многие из этих вопросов, но и программист должен быть достаточно квалифицированным, чтобы использовать их возможности. Корректная работа в локализованной операционной системе, для игр на ТВ-приставках — стандарт телевидения (PAL или NTSC). Сделать, чтобы программа отвечала товарным законам целевой страны. В частности: издать документацию на целевом языке, подогнать функциональность под патенты, антимонопольное законодательство, законы о печати, о хранении персональных данных… Так, в Windows 98 исчезла подсветка часовых поясов из-за спорных территорий: крайне трудно угодить обеим спорящим странам. Вывод на экран символов языка.Например, старые версии Winamp с растровым шрифтом корректно работают в локализированной ОС, но не выводят русских названий. Подготовка локализованных шрифтов, если таковые нужны. При этом адаптация под другую письменность может быть довольно сложной. Другие действия с языком — ввод текста, алфавитная сортировка, строковые операции, орфографические словари, правила переносов и т. д. Стандарты целевой страны, непосредственно связанные с функционированием программы: Формат даты, времени, дробных и многозначных чисел. Особенности человеческих имён. Символы валюты. Форматы бумаги. Система мер. Особенности законодательства. Налоговая система. Выдаваемые правительством документы — номер социального обеспечения, идентификационный номер налогоплательщика, номер паспорта. Требования к ПО для госструктур — открытость данных, стандарты шифрования и прочее. Перевод текстов в интерфейсе программы на целевой язык. В сложном ПО не все части стоит переводить. Например, многие не согласны с переводом имён функций Excel на русский язык. Некоторые ошибки ОС выводятся, когда компьютер ещё не способен показывать русские буквы, при том, что специалист, кому эти сообщения адресованы, поймёт и английские. Корректное выравнивание и размещение элементов интерфейса с учётом того, что сообщения-строки в разных языках могут иметь существенно разные размеры (например, обычное сообщение на английском, будучи переведено на немецкий язык, как правило, становится длиннее на 17,3 %). Кроме того, существуют языки с написанием справа налево (арабский, иврит) и сверху вниз (японский); Чрезвычайно важен перевод терминологии. Например, спорным является применяемый в Windows термин «обозреватель», обозначающий браузер. Если есть текст на изображениях, его нужно перерисовать. Если есть речевые сообщения, их надо наговорить. Тонкая настройка под целевую страну. Работа со словоформами. Примером будет пресловутое «Найдено 3 файлов». Дополнительные стандарты, не влияющие на основную функциональность программы. Например: формат даты/времени в медиаплеере, особенности типографики. Обеспечить интероперабельность локализированной программы с исходной. Например: мы ввели в документ формулу «x*2,5». Будет ли она работать, если открыть его в английской версии? Наладили сетевую игру русского с английским — не разорвёт ли связь, сославшись на несовпадение версий? Обеспечить интероперабельность программы с ПО, распространённым в целевой стране. Например, от страны к стране варьируются бухгалтерские программы, и «1С: Предприятие» мало известно за пределами стран СССР. Учёт национального менталитета. Например: красный цвет у русских ассоциируется не только с опасностью, но и с праздником. В играх зачастую приходится менять юмор, а изредка — даже корректировать сюжет (например, в Syberia 2 турецкий иммигрант Sirkos превратился в еврея Цукермана). Перерисовка графики (сплэш-экранов, значков, клипартов и т. д.) под реалии другой страны. Например, в разных странах могут выглядеть по-разному дорожные знаки, вилки и розетки, почтовый ящик. Глобус поворачивают к зрителю той частью света, на которую рассчитывается продукт. В Великобритании у выключателя включенным является нижнее положение, в бывшем СССР — верхнее. Значки перерисовывают крайне редко, поэтому дизайнеры изначально стараются сделать их как можно более «интернациональными».
Таким образом, локализация — это сложная и всеобъемлющая операция, и уже при разработке ПО соображения будущей интернационализации должны учитываться самым серьёзным образом. Мы привыкли видеть программное обеспечение, русифицированное по первому-второму уровню; сложного ПО с исчерпывающей русификацией практически не существует. Примером глубокой локализации может служить операционная система Mac OS X компании Apple, где локализация нередко включает и национально-ориентированные пиктограммы.
Инструментарий для локализации Некоторые инструменты для визуального программирования предоставляют возможности и инструменты для облегчения локализации. Например, в GTK чаще всего нет необходимости специально заботиться о разной длине строк в разных языках, так как виджеты автоматически запрашивают необходимый для себя размер.
Однако в большинстве случаев эти возможности значительно ограничены, что сильно отражается на итоговой стоимости локализации. В этих инструментах нет средств для работы с переводчиком, нет автоматизированных проверок перевода, да и контролировать перевод приложения среднего размера становится невозможно. Поэтому, приступая к локализации, стоит задуматься о специализированных средствах, заточенных именно на задачу перевода программного обеспечения.
Для локализации программного обеспечения часто применяются специализированные средства, например, Passolo, которые позволяют переводить меню и сообщения в программных ресурсах и непосредственно в откомпилированных программах, а также тестировать корректность локализации. Для перевода аудиовизуальных материалов (главным образом фильмов) также используются специализированные средства, например, Swift, которые объединяют в себе некоторые аспекты памяти переводов, но дополнительно обеспечивают возможность появления субтитров по времени, их форматирования на экране, следования.
Ресурсы Windows могут существовать в одной программе в нескольких копиях для разных языков — программа из настроек локали определяет язык пользователя и по умолчанию берёт, например, русский, а если он отсутствует, то только тогда английский. При этом русифицированными могут быть не только тексты, но и иконки — такие, как пиктограммы Ж, К, Ч на панели форматирования текста в редакторе документов. Существуют программы-редакторы, позволяющие просматривать, изменять и добавлять в откомпилированные программы ресурсы с новыми языками (например, Resource Hacker или Resource Tuner).
Псевдолокализация
Когда программа дорастает до первого перевода, возникает порочный круг. Нужно проверить, что функции перевода работают: окна компонуются, строки подставляются, осмысленные фразы собираются подстановкой, а не склеиванием, шрифт верный, после смены языка ничего не остаётся на старом, ни одна строка не проходит через однобайтовую кодировку (последнее актуально для старых систем программирования вроде Embarcadero Delphi). Для этого нужна другая локализация, но её нет — чтобы дать задание переводчику, нужно быть уверенным, что оно достаточно полное и не придётся несколько раз давать строки на доперевод. К тому же программист и тестер, не зная языка, не скажут, верна ли строка.
Для подобной начальной проверки используется так называемая псевдолокализация — какое-либо автоматическое преобразование исходного текста. Например: Open file → ≈§Ópèñ fílè×. Синтез осмысленных текстов конкатенацией будет выглядеть как 2 ≈fílèš×, подстановкой как ≈2 fílèš×. В англоязычных странах в роли псевдолокализации любят поросячью латынь (и даже оставляют её как пасхальное яйцо) — за тем исключением, что не проверяет Юникод и конкатенацию.
Параллельная разработка и локализация Если программа не приходит переводчикам готовой раз в несколько лет, а постоянно разрабатывается по принципам непрерывной интеграции, возникает вопрос доперевода новой функциональности и создания строк-затычек (строк на исходном языке или с автоматическим переводом, если переводчика нет).
Простейший вариант перевода «живой» программы сделан в Gettext, Qt Linguist — оригинал зашит в исходный текст программы, а для остальных языков ресурс хранится в виде «Save file → Сохранить файл». Достоинства такого механизма: Быстрое создание интернациональной программы из монолитной. Строки-затычки автоматически есть, даже если неофициальный перевод не успевает за оригиналом. Если исходный текст изменился и переводчик до него не дошёл, система гарантированно не возьмёт старый (возможно, неверный) перевод. Работать можно даже в текстовом редакторе. Простым поиском по исходному тексту можно определить, брошена ли строка (то есть больше не используется и её перевод не нужен).
Недостатки: За текст-оригинал отвечает программист, что требует от него грамотности и/или готовности вносить изменения. Не поощряет эксперименты с языком-оригиналом на поздних стадиях (когда наделано много переводов): если, например, терминология сменилась и массово изменились оригиналы, переводчик не видит (или плохо видит), как было и что изменилось; это важно для длинных текстов. Пока переводчик не разберётся, что с текстами и как надо, пользователь видит тексты-заглушки на языке-оригинале. Программист должен сам думать над расщеплением строк-омонимов на отдельные единицы — строка «Файлы/-ов» в Tixati говорит, что один и тот же текст использовался в заголовке «Files» и синтезированном тексте «2 Files». Отдельно приходится решать такие вопросы: синтез осмысленных фраз (те же «2 Файлы/-ов» в Tixati); передачу контекста строки (например, заголовок окна «Сохранить») от автора к переводчику; группировку строк так, чтобы можно было перевести законченный кусок (например, диалоговое окно) и увидеть его в программе; сегментацию (деление большого монолитного текста на меньшие куски, переводимые поодиночке, см. ниже).
Существуют и более сложные механизмы.
Сегментация Когда большой текст является цельной единицей локализации, возникают проблемы. Из-за недостатков переводческого интерфейса переводчик может ошибиться. Мелкие тексты могут найтись в памяти переводов, и их не нужно будет переводить повторно. С мелкими текстами проще работать на системе управления версиями (Git…) Может компенсироваться умным разбиением XML на строки. Если при параллельной разработке и локализации применяются простейшие механизмы сличения старой и новой локализации вроде Gettext, переводчик вынужден переводить с нуля весь большой текст, не имея понятия, что его уже частично перевели. Нельзя доперевести автоматикой и пометить, что только это предложение переведено некачественно. И при этом большой текст чаще меняется, чем короткая строка.
Для этого при локализации текст делят на меньшие (не подкреплённые логикой программы) единицы — сегменты (предложения или абзацы). Так, в формате XLIFF каждая единица перевода состоит из одного или нескольких сегментов.
Сегментация может использоваться и при переводе больших статичных текстов (статей) для совместной работы.
Недостатки этого подхода: Пересегментация из-за недостатков переводческого ПО может привести к потере переведённого куска.