Кодировки и наборы символов The Turkish Test Языковые и региональные стандарты Кофе-брейк i18n, g11n, l10n, NLS Locale Дата и время. Практическое задание Многозвенные приложения Отказ от интернационализации 2/65
С 2004 занимаюсь корпоративным программным обеспечением В 2008 пришел в CUSTIS Работал разработчиком, техлидом, тимлидом, сейчас занимаюсь архитектурой 3/65
Yes, of course. ar عبطلاب معن ؟ءاهنإ ديرت كنأ دكأتم تنأ له . zh-Hans 您确定要退出吗?是的,当然。 es ¿Seguro que quieres salir? Sí, por supuesto. el Είστε σίγουροι ότι θέλετε να κλείσετε; Ναι, φυσικά. 12/65
в ресурсы Внешнее по отношению к коду хранение (текстовые или xml- файлы, БД и прочее) Не конкатенировать строки Использовать строки форматирования Знаки препинания и разрывы строк держать также в строке форматирования Писать комментарии для переводчиков Даже для нелокализуемого софта это правила хорошего тона 13/65 Не относится к программным константам
ASCII – 7-битная кодировка В нее не помещаются даже все европейские символы (é, ß, ü, ä, ö и др.) Extended-ASCII – использует 8-й бит Для группы языков (набора символов) нужна собственная кодировка (codepage). Часто их несколько: для русского – cp866, KOI-8R, Windows-1251 А в китайском – около 3000 общеупотребимых иероглифов, а всего – более 80000 15/65
русской морзянке Русская морзянка построена на сходстве звуков Как следствие: символы кириллицы в таблице расположены не по алфавиту зато при отсекании старшего бита текст остается читаемым 11000001 а 01000001 A · − 11000010 б 01000010 B − · · · 11010111 в 01010111 W · − − 11000111 г 01000111 G − − · 11000100 д 01000100 D − · · 11000101 е 01000101 E · 11010110 ж 01010110 V · · · − 11011010 з 01011010 Z − − · · Да здравствует Юникод! dA ZDRAWSTWUET `NIKOD! 17/65
1 114 112 символов, для которых определены уникальные коды. Коды записываются с префиксом U+. Сам набор символов частенько называют Юникодом Семейство кодировок UTF 19/65
Появился в стандарте Юникода 16 июня 2014 года Новые шрифты Windows входят в обновление KB2970228 от 2 сентября 2014 года Которого у многих пользователей нет Многие разработчики не парятся Ну а остальные придумывают способы («тащат» с собой шрифты или используют CSS) 21/65
регистрочувствительность* Совершенно естественной выглядит возможность вводить, получать, искать информацию без учета регистра букв * Есть языки, где нет регистра символов 23/65
изменение регистра такое же, как в латинском алфавите Изменение регистра может привести к изменению числа символов немецкий: ToUpper(“groß”) == “GROSS” Unicode содержит правила для Case Folding и специальных случаев Использовать ToUpper() все же чуть безопаснее, чем ToLower() 26/65
на том, какая локаль используется при сравнении строк и case folding’e (в том числе сортировке и поиске), форматировании: Явно указывайте инвариантную («пустую», «корневую», US English) для внутренних нужд, взаимодействия с другими системами либо используйте специальный формат, например XML’ный (2015-03-26T19:00:12+03:00) Используйте пользовательскую (можно неявно), когда результат увидит пользователь Промежуточные итоги 29/65
Строки Медиа (изображения, звуки, видео) UI Layout Все это мы будем называть ресурсами локализации А еще специфическими могут быть алгоритмы. Правда, нечасто Грамматика языка 36/65
Алфавит, правила сравнения Числа Календарь, дата и время Валюта Система мер Структура почтового адреса, телефонного номера Формат бумаги по умолчанию Печатные формы, отчеты ... 41/65
пользовательского интерфейса Для форматирования дат, чисел и т. д. и сравнения строк (сортировка, поиск, правила case folding’а) Для пользовательского ввода (IME) 43/65
всех вариантов языка может быть неоправданно или будет просто дублированием Пустой текст у пользовательского элемента UI недопустим Ресурсы для ведущего языка (языка по умолчанию, языка разработки) всегда актуальны и непусты Локализация часто не успевает за версиями софта, и часто используется предыдущая версия локализации 48/65
регион» существуют в операционных системах в виде локалей Молдавия (Молдова) говорит по-молдавски (или на молдавском диалекте румынского) Локалей ro-MD, ro-MD-TRI в Windows нет А раньше даже были локали ru-MO, ro-MO Тем не менее, запись на латинице одних и тех же румынских слов различается Можно программно создавать собственные локали Пользователи поступают проще, указывая локаль ro-RO 50/65
Files English Programme C:\Programme German Archivos de programa C:\Archivos de programa Spanish Programmes C:\Programmes French Programmi C:\Programmi Italian Arquivos de Programas C:\Arquivos de Programas Portuguese Program C:\Program Swedish Programmer C:\Programmer Danish Programfiler C:\Programfiler Norwegian Fisiere Program C:\Fisiere Program Romanian Program Files C:\Program Files Dutch / Russian / Polish / Czech / Chinese 51/65
Ближнего Востока. Оплата прокатной машины почасовая, 1 долл/час. Дата и время. Задача 1 марта 2015 в полдень Вася выехал из офиса в Тегеране, в полдень 22 марта подъехал к границе Ирана и Азербайджана в Астаре, а в полдень 29 марта 2015 будет уже в Баку. Сколько заплатит Вася за аренду авто? 52/65
в разных часовых поясах А еще есть летнее время В разных странах переход на летнее время (и обратно) происходит в разные дни В Азербайджане в последнее воскресенье марта В Иране в третью субботу марта 53/65
дней В сутках не всегда 24 часа В часе 60 минут В минуте не всегда 60 секунд Один и тот же момент времени может случиться не единожды или не случиться вообще 56/65
часовым поясом/смещением Календарь/напоминания Нельзя хранить время со смещением Не рекомендуется хранить время с часовым поясом Лучше хранить местоположение Универсального рецепта нет, все зависит от специфики задачи 57/65
или code-Subcode) с весами Сервер решает, может ли и хочет ли он предоставить контент на одном из запрошенных языков Других стандартных средств нет 58/65
Геолокация? Неуниверсально, ненадежно… Датчики мобильных устройств Анализ баз IP- и MAC-адресов JavaScript ► Поэтому приложение должно предоставлять возможность изменить язык и/или регион ► Огромное количество приложений игнорирует локаль пользователя (настройки форматирования), что делает затруднительным, например, копипаст в Excel 59/65
“In addition, flags have nationalistic connotations that may be unwelcome for people of other countries, even though they speak the same language.” 60/65
на искусственном языке На Simlish (симском) даже есть песни GitHub В 2011 году команда отказалась от поддержки многоязычности и сосредоточилась на том, чтобы сделать GitHub быстрым и надежным 63/65