Псевдолокализация

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
Пример английской псевдолокализации. Видны удлинение строк, показ границ, расширенный набор символов. В строке «400 MB» заметно, из каких частей она собрана.

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

Типичный пример: Account Settings[!!! Àççôûñţ Šéţţîñĝš !!!].

В результате таких изменений тексты остаются читаемыми, но появляются изменения, которые могут встречаться в настоящей локализации: более длинные строки, расширенные наборы символов, другая типографика (справа налево и т. д.), бездумный перевод технических строк, переводу не подлежащих. Иногда в строку добавляют её идентификатор в языковом ресурсе[2].

Часто роль псевдолокализации играет поросячья латынь, с тем недостатком, что не проверяет Юникод, типографику и методы сборки осмысленных фраз.

Разработчики программы POEditor делят псевдолокализацию на текстовую (подставляются особые тексты), шрифтовую (подставляются шрифты других габаритов) и программную (последствия перевода имитируются программно)[1].

Потребность

[править | править код]

Когда программа дорастает до первого перевода, возникает порочный круг. Нужно проверить, что функции локализации работают, для этого нужен другой перевод, но его нет — чтобы дать задание переводчику, нужно быть уверенным, что оно достаточно полное и не придётся несколько раз давать строки на доперевод[1][3]. К тому же программист и тестер, не зная языка, не скажут, верен ли текст[5].

В условиях бывшего СССР, когда любой программист знает два, а то и три языка — русский, английский и национальный — псевдолокализация не так нужна, ведь программист (или кто-то из находящихся рядом, например тестер) своими силами может сделать доперевод или даже полный перевод, или хотя бы убедиться в работоспособности английской версии. Со знанием двух языков из разных групп проще заранее предусмотреть интернационализацию. Но даже тут есть препятствия: программист дороже переводчика, может не иметь нужных навыков (от владения художественным словом до обычной грамотности), перевод с русского языка на английский плохо проверяет ошибки компоновки окон (английский короче), программе для западной публики русский перевод попросту не нужен. Коммерческая программа для широкой публики (в частности, игра) должна выйти если не переведённой, то хотя бы готовой к переводу, и об интернационализации нужно задумываться уже при разработке[3].

Генератор псевдолокализации должен понимать языки разметки, имеющиеся в текстах (HTML, вики, printf и другие), и как минимум их не трогать[3].

Программная функциональность локализации

[править | править код]
Проверка поддержки письма справа налево[англ.], восточных арабских цифр.

Псевдолокализация даже без перевода испытывает такие механизмы перевода:

  • Строки, даты и числа корректно поделены на локализуемые и жёстко закодированные[5][4]: глагол ассоциации файлов open неизменный, а строка пользовательского интерфейса Open — локализуется. Если жёстко закодировать локализуемую строку, она не дойдёт до переводчиков, и это типовая ошибка[4], но и обратное (перевели нелокализуемую техническую строку) встречается и может помешать работе программы[6].
  • Текст, впечатанный в изображение[4][6].
  • Окна скомпонованы с запасом или динамически перекомпоновываются (перевод может удлинить строку)[1][2][4][6].
  • Осмысленные фразы собираются подстановкой (? files), а не склеиванием (2 + + files)[7][2][8] — это даёт гибкость (вариативная часть может быть в середине или справа) и легче переводится. Псевдолокализация будет 2 [!!!ᶂïłɛʃ!!!] для склеивания строк и [!!!2 ᶂïłɛʃ!!!] для подстановки.
  • Локализованы ли знаки препинания. Склеивание строк работает в двух специфичных местах: ключ-значение «UTF-8: D0 80» и перечисление «первый, второй, третий». В неевропейских письменностях вместо двоеточия и запятой могут быть свои символы, и обычно это обнаруживается поздно, когда вышли несколько европейских локализаций.
  • Текст собирается из частей без нужды, когда его можно вписать в локализацию целиком[6].
  • Если фраза собирается в массиве ограниченной длины (например, командой snprintf), то длины хватает с запасом.
  • Шрифт поддерживает нужные символы[2][3]. Работают программные механизмы вокруг шрифта: шрифт применяется, типографский движок исполняет вписанные в шрифт программы, текст перекодируется, если это нужно.
  • Работает компоновка всей программы под другое устройство печатной строки: с большим количеством диакритики[3], справа налево[3][4], иероглифы, индийские слоги, неевропейские цифры[2], перенос не по пробелам…
  • Работает смена языка без перезапуска программы: окна переводятся и перекомпоновываются.
  • Ни одна строка не проходит через постороннюю кодировку (например, однобайтовую или UCS-2)[8][6].
  • Для неюникодных локализаций: поддерживаются многобайтовые кодировки[4].
  • Разные переводы программы интероперабельны: читают файлы друг друга, вместе участвуют в сетевой игре…
  • Позволяет переводить по частям, наблюдать, как программа постепенно заполняется новым языком, и хорошо видеть непереведённые строки[3].

Псевдолокализация — не панацея и с трудом определяет:

  • Достаточность шрифта, если кодировка представляет собой комбинаторный взрыв: китайские иероглифы, индийские слоги… Решается высококачественным шрифтом с возможностью его заменить именно для данного языка.
  • Наличие в шрифте специфичного правила — для украинского это кернинг распространённой пары ії[9]: її вії. Для этого типограф проверяет шрифт на реальных текстах.
  • Готовность программы к другой грамматике — например, счётные формы «1 файл», «2 файла», «5 файлов». Это нужно просто обнаружить на CLDR или путём препродакшена со знающим язык, отдельно псевдолокализовать и проверить, и задокументировать для переводчиков.
  • Достаточно расщеплённые (то есть имеющие один текст, но разные идентификаторы) строки локализации — то же Open в разных местах можно перевести как «Открыть», «Открывать», «Открыто», «открыт», «Откр.» Решается интернационализаторским опытом и стандартными советами: расщеплять команду, состояние и заголовок, законченную строку и фрагмент более длинной, свободно помещающуюся и едва втиснутую, «открытый» файл и «открытый» кран а если строка из редактора форм — расщеплять по умолчанию и объединять с большой осторожностью (например, для сходных кнопок одной формы).
  • Новые символы участвуют в текстовых алгоритмах вроде алфавитной сортировки. Нет стандартного решения: где-то вручную расставить элементы, где-то найти хорошо запрограммированные алгоритмы…
  • Неиспользуемые строки.
  • Логичное устройство комплекта локализации, чтобы близкие строки находились рядом, плохо понятные — задокументированы…
  • Не показывает на нужную строку кода, и программистам бывает сложно найти источник проблем[8].
  • Для дат и культурных особенностей нужны отдельные механизмы[8], которые, впрочем, также можно псевдолокализовать.
  • В некоторых цепочках псевдолокализации удлинение строки может срабатывать там, где строку уже обрезали, и приводить к ложным тревогам[10][8].

Microsoft пользовался псевдолокализацией с 90-х, но вставил этот механизм прямо в ОС начиная с Windows Vista[11]. Мало того, псевдолокализованная Windows стала главной, а английская — такой же локализацией, как и все остальные[5]. Бета-версии Windows 7[12] и 8[13] попадали к тестерам в частично псевдолокализованном виде.

Изначально псевдолокализация была «туркменская», но это работало ровно до того момента, как Windows 7 SP1 была переведена на настоящий туркменский[2][5]. Потом ps-PS — пуштунский для Палестины[14], что неправдоподобно, но формально бывает. Так что теперь Windows имеет три псевдолокали, начинающиеся на qps (имена qaa…qtz зарезервированы под личные нужды), автоматически синтезированные из английских ресурсов: базовую (европейские языки преимущественно слева направо), зеркальную (текст преимущественно справа налево) и восточноазиатскую (ККЯ)[2], и поддерживает все три класса языков одновременно, не требуя разных сборок под разные языки.

Примечания

[править | править код]