SlideShare a Scribd company logo
26 марта 2015 года
Интернационализация ПО:
тонкости культуры в разработке
Владислав Иофе
Архитектор
План
 О компании и о себе
 Hello, world!
 Кодировки и наборы символов
 The Turkish Test
 Языковые и региональные стандарты
 Кофе-брейк 
 i18n, g11n, l10n, NLS
 Locale
 Дата и время. Практическое задание
 Многозвенные приложения
 Отказ от интернационализации
2/68
О себе
 В 2005 окончил мехмат
Ташкентского государственного университета
 С 2004 занимаюсь корпоративным
программным обеспечением
 В 2008 пришел в CUSTIS
 Работал разработчиком, техлидом,
тимлидом, сейчас занимаюсь архитектурой
3/68
О компании
Проектирование Заказная разработка
Бережное внедрение Масштабных IT-систем
4/68
Hello, world!
5/68
Hello, world! (2)
6/68
Hello, world! (3)
7/68
Hello, world! (4)
8/68
Hello, world! (5)
9/68
Hello, world! (6)
10/68
Hello, world! (7)
11/68
Знаки препинания
en Are you sure you want to quit? Yes, of course.
ar ‫ﺑﺎﻟطﺑﻊ‬ ‫ﻧﻌم‬ ‫إﻧﮭﺎء؟‬ ‫ﺗرﯾد‬ ‫أﻧك‬ ‫ﻣﺗﺄﻛد‬ ‫أﻧت‬ ‫ھل‬.
zh-Hans 您确定要退出吗?是的,当然。
es ¿Seguro que quieres salir? Sí, por supuesto.
el Είστε σίγουροι ότι θέλετε να κλείσετε; Ναι, φυσικά.
12/68
Hello, world! Выводы
Не зашивать в код строки Выносить строки в ресурсы
 Внешнее по отношению к коду
хранение (текстовые или xml-
файлы, БД и прочее)
Не конкатенировать строки Использовать строки
форматирования
 Знаки препинания и разрывы
строк держать также в строке
форматирования
 Писать комментарии
для переводчиков
Даже для нелокализуемого
софта это правила
хорошего тона
Не относится
к программным
константам
13/68
Кодировки и наборы символов
(Encodings and Character Sets)
14/68
Кодировки и наборы символов
(Encodings and Character Sets)
 Начало…
 ASCII – 7-битная кодировка
 В нее не помещаются даже все европейские символы
(é, ß, ü, ä, ö и др.)
 Extended-ASCII – использует 8-й бит
 Для группы языков (набора символов) нужна
собственная кодировка (codepage). Часто их несколько:
для русского – cp866, KOI-8R, Windows-1251
 А в китайском – около 3000 общеупотребимых
иероглифов, а всего – более 80000
15/68
KOI-8R
16/68
KOI-8R – код обмена информацией,
8 битов
 Основана на русской морзянке
 Русская морзянка построена на
сходстве звуков
 Как следствие:
 символы кириллицы в таблице
расположены не по алфавиту
 зато при отсекании старшего
бита текст остается читаемым
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/68
Extended-ASCII
18/68
Что такое ?
 Это – стандарт кодирования символов…
 1 114 112 символов, для которых определены
уникальные коды. Коды записываются
с префиксом U+. Сам набор символов
частенько называют Юникодом
 Семейство кодировок UTF
19/68
Символ рубля
20/68
Символ рубля U+20BD
 Официально утвержден 11 декабря 2013 года
 Появился в стандарте Юникода 16 июня 2014 года
 Новые шрифты Windows входят в обновление
KB2970228 от 2 сентября 2014 года
 Которого у многих пользователей нет
 Многие разработчики не парятся
 Ну а остальные придумывают способы
(«тащат» с собой шрифты или используют CSS)
21/68
Кстати, о локализации
22/68
The Turkish Test
 Англоязычному или русскоязычному
пользователю редко важна
регистрочувствительность*
 Совершенно естественной выглядит
возможность вводить, получать, искать
информацию без учета регистра букв
* Есть языки, где нет регистра символов
23/68
The Turkish Test (2)
24/68
The Turkish Test (3)
25/68
Case Folding – изменение регистра
 Не во всех языках изменение регистра
такое же, как в латинском алфавите
 Изменение регистра может привести
к изменению числа символов
 немецкий: ToUpper(“groß”) == “GROSS”
 Unicode содержит правила для Case Folding
и специальных случаев
 Использовать ToUpper() все же чуть
безопаснее, чем ToLower()
26/68
Языковые и региональные стандарты
27/68
Языковые и региональные стандарты
Примеры
Английский
(США)
Английский
(Индия)
Русский
(Россия)
Немецкий
(Германия)
Итальянский
(Италия)
Персидский
3/26/2015 7:30:12
PM
26.03.2015 19:30 26.03.2015 19:30 26.03.2015 19:30
26/03/2015
19.30.12
26/03/2015
07:30:12‫ب‬.‫ظ‬
($12,345,678.90) ₹ -123,45,678.90 -12 345 678,90 ₽ -12.345.678,90 € -€ 12.345.678,90 ‫﷼‬12،345،678/90-
13.00 % 13.00% 13,00% 13,00% 13,00% 13/00 %
28/68
 Почитайте о нормализации строк в Unicode
 Заостряйте внимание на том, какая локаль
используется при сравнении строк и case folding’e
(в том числе сортировке и поиске), форматировании:
 Явно указывайте инвариантную («пустую», «корневую»,
US English) для внутренних нужд, взаимодействия
с другими системами
либо
используйте специальный формат, например XML’ный
(2015-03-26T19:00:12+03:00)
 Используйте пользовательскую (можно неявно),
когда результат увидит пользователь
Промежуточные итоги
29/68
Перерыв10минут
30/68
Buzzwords
31/68
i18n, g11n, l10n, NLS
32/68
i18n, g11n, l10n, NLS
33/68
Что здесь не так?
34/68
Локализация
35/68
Локализация – не только перевод
 Какие элементы подлежат локализации?
 Строки
 Медиа (изображения, звуки, видео)
 UI Layout
Все это мы будем называть ресурсами
локализации
 А еще специфическими могут быть
алгоритмы. Правда, нечасто
 Грамматика языка
36/68
Локализация – не только перевод (2)
37/68
История
38/68
Когда работает банк?
39/68
Письменность
40/68
Языковые и региональные стандарты
 Язык и система письма (письменность)
 Алфавит, правила сравнения
 Числа
 Календарь, дата и время
 Валюта
 Система мер
 Структура почтового адреса, телефонного
номера
 Формат бумаги по умолчанию
 Печатные формы, отчеты
 ...
41/68
Описание языковых и региональных
стандартов
Locale («локаль»), в .NET – Culture («культура»)
 Имеет два компонента:
 Язык (обязательный)
 Регион (необязательный)
42/68
Locale
 Можно выделить три использования:
 Для языка отображения пользовательского
интерфейса
 Для форматирования дат, чисел и т. д.
и сравнения строк (сортировка, поиск, правила
case folding’а)
 Для пользовательского ввода (IME)
43/68
Locale
Обычно локали UI и форматирования
 Наследуются от системных
 Могут быть переопределены программно
 Применяются на приложение (Java)
или даже отдельный поток (Windows)
44/68
Методы ввода
45/68
Методы ввода
46/68
Методы ввода
47/68
Фонетические методы ввода
48/68
Иерархия локалей
49/68
Процесс поиска подходящих ресурсов
(Resource Fallback Process)
 Переводить для всех вариантов языка может быть
неоправданно или будет просто дублированием
 Пустой текст у пользовательского элемента UI
недопустим
 Ресурсы для ведущего
языка (языка по умолчанию,
языка разработки) всегда
актуальны и непусты
 Локализация часто
не успевает за версиями
софта, и часто используется
предыдущая версия
локализации
50/68
.NET Resource Fallback
• en-IN → en → ru
• en-GB → en → ru
• zh-CN → zh-Hans → zh → ru
51/68
Locale
 Не все встречающиеся в жизни сочетания
«язык – регион» существуют в операционных
системах в виде локалей
 Молдавия (Молдова) говорит по-молдавски
(или на молдавском диалекте румынского)
 Локалей ro-MD, ro-MD-TRI в Windows нет
 А раньше даже были локали ru-MO, ro-MO
 Тем не менее, запись на латинице одних и тех же румынских
слов различается
 Можно программно создавать собственные локали
 Пользователи поступают проще, указывая локаль
ro-RO
52/68
Особенности окружения
Folder name Folder path Language
Program Files C:Program 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
53/68
Особенности окружения
54/68
Корреспондент Василий Пупкин
отправился в длительную
командировку по провинциям
стран Ближнего Востока.
Оплата прокатной машины
почасовая, 1 долл/час.
Дата и время. Задача
1 марта 2015 в полдень Вася
выехал из офиса в Тегеране,
в полдень 22 марта подъехал
к границе Ирана и Азербайджана
в Астаре, а в полдень 29 марта
2015 будет уже в Баку.
Сколько заплатит Вася
за аренду авто?
55/68
Дата и время. Задача. Подсказки
 Иран и Азербайджан находятся в разных
часовых поясах
 А еще есть летнее время
 В разных странах переход на летнее время
(и обратно) происходит в разные дни
 В Азербайджане в последнее воскресенье
марта
 В Иране в третью субботу марта
56/68
Дата и время. Задача
57/68
Дата и время. Выводы
 Надо различать термины «часовой пояс»
(timezone) и «смещение» (offset)
 В Гринвиче (район Лондона)
тоже переходят на летнее время 
 UTC и GMT – не одно и то же (GMT устарел)
58/68
Дата и время. Выводы
 В году не всегда 365 дней
 В сутках не всегда 24 часа
 В часе 60 минут
 В минуте не всегда 60 секунд
 Один и тот же момент времени может
случиться не единожды или не случиться
вообще
59/68
Хранение даты-времени
 Журналирование
 прошедшие события
логично хранить с часовым
поясом/смещением
 Календарь/напоминания
 Нельзя хранить время
со смещением
 Не рекомендуется хранить
время с часовым поясом
 Лучше хранить местоположение
 Универсального рецепта нет,
все зависит от специфики задачи
60/68
Веб-приложения
 Браузер использует заголовок Accept-Language
 Указываются языки (code или code-Subcode) с весами
 Сервер решает, может ли и хочет ли он предоставить
контент на одном из запрошенных языков
 Других стандартных средств нет
61/68
Веб-приложения
 А нам еще нужна информация о местоположении
 Геолокация? Неуниверсально, ненадежно…
 Датчики мобильных устройств
 Анализ баз IP- и MAC-адресов
 JavaScript
► Поэтому приложение должно предоставлять
возможность изменить язык и/или регион
► Огромное количество приложений игнорирует
локаль пользователя (настройки форматирования),
что делает затруднительным, например, копипаст
в Excel
62/68
Веб-приложения
Кстати, W3C не рекомендует использовать
флаги для обозначения языков
“In addition, flags have
nationalistic connotations that
may be unwelcome
for people of other countries,
even though they speak the
same language.”
63/68
Тестирование локализации
Псевдолокализация:
 В русскоязычных интерфейсах – транслитерация
 В англоязычных – Pig Latin
64/68
Трудности перевода
В рецепте сказано
«варить неприкрытым»!
65/68
Отказ от интернационализации
 Style
 Герои серии игр говорят на искусственном
языке
 На Simlish (симском) даже есть песни
 GitHub
 В 2011 году команда отказалась от поддержки
многоязычности и сосредоточилась на том,
чтобы сделать GitHub быстрым и надежным
66/68
О чем мы не говорили?
 Работа с исключениями
 Нормализация в Unicode
 Шрифты
 Полнотекстовый поиск
 Взаимодействие с переводчиками
 …
67/68
Спасибо!
Вопросы?
Владислав Иофе
viofe@custis.ru
68/68

More Related Content

Similar to Интернационализация ПО: тонкости культуры в разработке

Фишки и прелести TypeScript
Фишки и прелести TypeScriptФишки и прелести TypeScript
Фишки и прелести TypeScript
Александр Майоров
 
Тестирование Локализации и Интернализации
Тестирование Локализации и ИнтернализацииТестирование Локализации и Интернализации
Тестирование Локализации и ИнтернализацииLilia Gorbachik
 
Дракон в мешке: от LLVM к C++ и проблемам неопределенного поведения
Дракон в мешке: от LLVM к C++ и проблемам неопределенного поведенияДракон в мешке: от LLVM к C++ и проблемам неопределенного поведения
Дракон в мешке: от LLVM к C++ и проблемам неопределенного поведения
Platonov Sergey
 
О.В.Сухорослов "Параллельное программирование. Часть 2"
О.В.Сухорослов "Параллельное программирование. Часть 2"О.В.Сухорослов "Параллельное программирование. Часть 2"
О.В.Сухорослов "Параллельное программирование. Часть 2"
Yandex
 
Архитектура и программирование потоковых многоядерных процессоров для научных...
Архитектура и программирование потоковых многоядерных процессоров для научных...Архитектура и программирование потоковых многоядерных процессоров для научных...
Архитектура и программирование потоковых многоядерных процессоров для научных...
a15464321646213
 
инструментарий переводчика-часть-3
инструментарий переводчика-часть-3инструментарий переводчика-часть-3
инструментарий переводчика-часть-3
Yulia Akhulkova
 
Ag Systran 2008 04 26
Ag Systran 2008 04 26Ag Systran 2008 04 26
Ag Systran 2008 04 26
NLPseminar
 
HappyDev-lite-2016-весна 05 Евгений Тюменцев. Не все технологии одинаково по...
HappyDev-lite-2016-весна 05 Евгений Тюменцев. Не все технологии одинаково по...HappyDev-lite-2016-весна 05 Евгений Тюменцев. Не все технологии одинаково по...
HappyDev-lite-2016-весна 05 Евгений Тюменцев. Не все технологии одинаково по...
HappyDev-lite
 
игровая логика, проблемы и решения
игровая логика, проблемы и решенияигровая логика, проблемы и решения
игровая логика, проблемы и решения
Владимир Кожаев
 
Введение в Clojure (Margincon 2010)
Введение в Clojure (Margincon 2010)Введение в Clojure (Margincon 2010)
Введение в Clojure (Margincon 2010)
Alex Ott
 
F# функциональный язык "новой" волны
F# функциональный язык "новой" волныF# функциональный язык "новой" волны
F# функциональный язык "новой" волныArtem Prysyazhnuk
 
Функции в языке программирования QBasic
Функции в языке программирования QBasicФункции в языке программирования QBasic
Функции в языке программирования QBasickvlar
 
331 информатика. 8кл. миняйлова, вербовиков и др-минск, 2010 -189с
331  информатика. 8кл. миняйлова, вербовиков и др-минск, 2010 -189с331  информатика. 8кл. миняйлова, вербовиков и др-минск, 2010 -189с
331 информатика. 8кл. миняйлова, вербовиков и др-минск, 2010 -189с
dfdkfjs
 
ОПК № 1 – Вводная
ОПК № 1 – ВводнаяОПК № 1 – Вводная
ОПК № 1 – Вводная
Vladimir Parfinenko
 
Автоматизация design patterns и компактный код вместе с PostSharp
Автоматизация design patterns и компактный код вместе с PostSharpАвтоматизация design patterns и компактный код вместе с PostSharp
Автоматизация design patterns и компактный код вместе с PostSharp
geekfamilyrussia
 
Translation Technology in Russia: 10 tools most popular with large LSPs
Translation Technology in Russia: 10 tools most popular with large LSPsTranslation Technology in Russia: 10 tools most popular with large LSPs
Translation Technology in Russia: 10 tools most popular with large LSPs
Konstantin Dranch
 
Локализационное тестирование - это не только перевод
Локализационное тестирование - это не только переводЛокализационное тестирование - это не только перевод
Локализационное тестирование - это не только перевод
Vitebsk Miniq
 

Similar to Интернационализация ПО: тонкости культуры в разработке (17)

Фишки и прелести TypeScript
Фишки и прелести TypeScriptФишки и прелести TypeScript
Фишки и прелести TypeScript
 
Тестирование Локализации и Интернализации
Тестирование Локализации и ИнтернализацииТестирование Локализации и Интернализации
Тестирование Локализации и Интернализации
 
Дракон в мешке: от LLVM к C++ и проблемам неопределенного поведения
Дракон в мешке: от LLVM к C++ и проблемам неопределенного поведенияДракон в мешке: от LLVM к C++ и проблемам неопределенного поведения
Дракон в мешке: от LLVM к C++ и проблемам неопределенного поведения
 
О.В.Сухорослов "Параллельное программирование. Часть 2"
О.В.Сухорослов "Параллельное программирование. Часть 2"О.В.Сухорослов "Параллельное программирование. Часть 2"
О.В.Сухорослов "Параллельное программирование. Часть 2"
 
Архитектура и программирование потоковых многоядерных процессоров для научных...
Архитектура и программирование потоковых многоядерных процессоров для научных...Архитектура и программирование потоковых многоядерных процессоров для научных...
Архитектура и программирование потоковых многоядерных процессоров для научных...
 
инструментарий переводчика-часть-3
инструментарий переводчика-часть-3инструментарий переводчика-часть-3
инструментарий переводчика-часть-3
 
Ag Systran 2008 04 26
Ag Systran 2008 04 26Ag Systran 2008 04 26
Ag Systran 2008 04 26
 
HappyDev-lite-2016-весна 05 Евгений Тюменцев. Не все технологии одинаково по...
HappyDev-lite-2016-весна 05 Евгений Тюменцев. Не все технологии одинаково по...HappyDev-lite-2016-весна 05 Евгений Тюменцев. Не все технологии одинаково по...
HappyDev-lite-2016-весна 05 Евгений Тюменцев. Не все технологии одинаково по...
 
игровая логика, проблемы и решения
игровая логика, проблемы и решенияигровая логика, проблемы и решения
игровая логика, проблемы и решения
 
Введение в Clojure (Margincon 2010)
Введение в Clojure (Margincon 2010)Введение в Clojure (Margincon 2010)
Введение в Clojure (Margincon 2010)
 
F# функциональный язык "новой" волны
F# функциональный язык "новой" волныF# функциональный язык "новой" волны
F# функциональный язык "новой" волны
 
Функции в языке программирования QBasic
Функции в языке программирования QBasicФункции в языке программирования QBasic
Функции в языке программирования QBasic
 
331 информатика. 8кл. миняйлова, вербовиков и др-минск, 2010 -189с
331  информатика. 8кл. миняйлова, вербовиков и др-минск, 2010 -189с331  информатика. 8кл. миняйлова, вербовиков и др-минск, 2010 -189с
331 информатика. 8кл. миняйлова, вербовиков и др-минск, 2010 -189с
 
ОПК № 1 – Вводная
ОПК № 1 – ВводнаяОПК № 1 – Вводная
ОПК № 1 – Вводная
 
Автоматизация design patterns и компактный код вместе с PostSharp
Автоматизация design patterns и компактный код вместе с PostSharpАвтоматизация design patterns и компактный код вместе с PostSharp
Автоматизация design patterns и компактный код вместе с PostSharp
 
Translation Technology in Russia: 10 tools most popular with large LSPs
Translation Technology in Russia: 10 tools most popular with large LSPsTranslation Technology in Russia: 10 tools most popular with large LSPs
Translation Technology in Russia: 10 tools most popular with large LSPs
 
Локализационное тестирование - это не только перевод
Локализационное тестирование - это не только переводЛокализационное тестирование - это не только перевод
Локализационное тестирование - это не только перевод
 

More from CUSTIS

Три истории микросервисов, или MSA для Enterprise
Три истории микросервисов, или MSA для EnterpriseТри истории микросервисов, или MSA для Enterprise
Три истории микросервисов, или MSA для Enterprise
CUSTIS
 
Долгоживущие ИТ в динамичном ритейле
Долгоживущие ИТ в динамичном ритейлеДолгоживущие ИТ в динамичном ритейле
Долгоживущие ИТ в динамичном ритейле
CUSTIS
 
Будущее уже наступило: от Agile к бирюзовым организациям
Будущее уже наступило: от Agile к бирюзовым организациямБудущее уже наступило: от Agile к бирюзовым организациям
Будущее уже наступило: от Agile к бирюзовым организациям
CUSTIS
 
Как выбрать для проекта практики проектирования и работы с требованиями
Как выбрать для проекта практики проектирования и работы с требованиямиКак выбрать для проекта практики проектирования и работы с требованиями
Как выбрать для проекта практики проектирования и работы с требованиями
CUSTIS
 
Диаграммы учета как средство для наглядного и целостного отображения правил у...
Диаграммы учета как средство для наглядного и целостного отображения правил у...Диаграммы учета как средство для наглядного и целостного отображения правил у...
Диаграммы учета как средство для наглядного и целостного отображения правил у...
CUSTIS
 
Сотрудничество с корпорациями: рецепты из практики
Сотрудничество с корпорациями: рецепты из практикиСотрудничество с корпорациями: рецепты из практики
Сотрудничество с корпорациями: рецепты из практики
CUSTIS
 
Agile — ответ на вызовы третьей промышленной революции
Agile — ответ на вызовы третьей промышленной революцииAgile — ответ на вызовы третьей промышленной революции
Agile — ответ на вызовы третьей промышленной революции
CUSTIS
 
Опыт построения микросервисной архитектуры в цифровом банке
Опыт построения микросервисной архитектуры в цифровом банкеОпыт построения микросервисной архитектуры в цифровом банке
Опыт построения микросервисной архитектуры в цифровом банке
CUSTIS
 
Золотая лихорадка MSA: почему нам не подошли микросервисы?
Золотая лихорадка MSA: почему нам не подошли микросервисы?Золотая лихорадка MSA: почему нам не подошли микросервисы?
Золотая лихорадка MSA: почему нам не подошли микросервисы?
CUSTIS
 
Барьеры микросервисной архитектуры
Барьеры микросервисной архитектурыБарьеры микросервисной архитектуры
Барьеры микросервисной архитектуры
CUSTIS
 
Три истории микросервисов
Три истории микросервисовТри истории микросервисов
Три истории микросервисов
CUSTIS
 
От монолитных моделей предметной области — к модульным
От монолитных моделей предметной области — к модульнымОт монолитных моделей предметной области — к модульным
От монолитных моделей предметной области — к модульным
CUSTIS
 
Будущее omni-channel маркетинга: инструменты, кейсы и цифры
Будущее omni-channel маркетинга: инструменты, кейсы и цифрыБудущее omni-channel маркетинга: инструменты, кейсы и цифры
Будущее omni-channel маркетинга: инструменты, кейсы и цифры
CUSTIS
 
Agile и управление знаниями в ИТ-проектах
Agile и управление знаниями в ИТ-проектахAgile и управление знаниями в ИТ-проектах
Agile и управление знаниями в ИТ-проектах
CUSTIS
 
State of the .Net Performance
State of the .Net PerformanceState of the .Net Performance
State of the .Net Performance
CUSTIS
 
Опыт применения метода ATAM для оценки архитектуры
Опыт применения метода ATAM для оценки архитектурыОпыт применения метода ATAM для оценки архитектуры
Опыт применения метода ATAM для оценки архитектуры
CUSTIS
 
Гибридный подход к управлению правами доступа: когда стандартного IDM не хватает
Гибридный подход к управлению правами доступа: когда стандартного IDM не хватаетГибридный подход к управлению правами доступа: когда стандартного IDM не хватает
Гибридный подход к управлению правами доступа: когда стандартного IDM не хватает
CUSTIS
 
Собираем кубик Рубика: восстановление архитектурного описания корпоративной р...
Собираем кубик Рубика: восстановление архитектурного описания корпоративной р...Собираем кубик Рубика: восстановление архитектурного описания корпоративной р...
Собираем кубик Рубика: восстановление архитектурного описания корпоративной р...
CUSTIS
 
Process и Case Management в информационной системе: от автоматизации As Is к ...
Process и Case Management в информационной системе: от автоматизации As Is к ...Process и Case Management в информационной системе: от автоматизации As Is к ...
Process и Case Management в информационной системе: от автоматизации As Is к ...
CUSTIS
 
RBAC & ABAC: гибридное решение для управления правами доступа
RBAC & ABAC: гибридное решение для управления правами доступаRBAC & ABAC: гибридное решение для управления правами доступа
RBAC & ABAC: гибридное решение для управления правами доступа
CUSTIS
 

More from CUSTIS (20)

Три истории микросервисов, или MSA для Enterprise
Три истории микросервисов, или MSA для EnterpriseТри истории микросервисов, или MSA для Enterprise
Три истории микросервисов, или MSA для Enterprise
 
Долгоживущие ИТ в динамичном ритейле
Долгоживущие ИТ в динамичном ритейлеДолгоживущие ИТ в динамичном ритейле
Долгоживущие ИТ в динамичном ритейле
 
Будущее уже наступило: от Agile к бирюзовым организациям
Будущее уже наступило: от Agile к бирюзовым организациямБудущее уже наступило: от Agile к бирюзовым организациям
Будущее уже наступило: от Agile к бирюзовым организациям
 
Как выбрать для проекта практики проектирования и работы с требованиями
Как выбрать для проекта практики проектирования и работы с требованиямиКак выбрать для проекта практики проектирования и работы с требованиями
Как выбрать для проекта практики проектирования и работы с требованиями
 
Диаграммы учета как средство для наглядного и целостного отображения правил у...
Диаграммы учета как средство для наглядного и целостного отображения правил у...Диаграммы учета как средство для наглядного и целостного отображения правил у...
Диаграммы учета как средство для наглядного и целостного отображения правил у...
 
Сотрудничество с корпорациями: рецепты из практики
Сотрудничество с корпорациями: рецепты из практикиСотрудничество с корпорациями: рецепты из практики
Сотрудничество с корпорациями: рецепты из практики
 
Agile — ответ на вызовы третьей промышленной революции
Agile — ответ на вызовы третьей промышленной революцииAgile — ответ на вызовы третьей промышленной революции
Agile — ответ на вызовы третьей промышленной революции
 
Опыт построения микросервисной архитектуры в цифровом банке
Опыт построения микросервисной архитектуры в цифровом банкеОпыт построения микросервисной архитектуры в цифровом банке
Опыт построения микросервисной архитектуры в цифровом банке
 
Золотая лихорадка MSA: почему нам не подошли микросервисы?
Золотая лихорадка MSA: почему нам не подошли микросервисы?Золотая лихорадка MSA: почему нам не подошли микросервисы?
Золотая лихорадка MSA: почему нам не подошли микросервисы?
 
Барьеры микросервисной архитектуры
Барьеры микросервисной архитектурыБарьеры микросервисной архитектуры
Барьеры микросервисной архитектуры
 
Три истории микросервисов
Три истории микросервисовТри истории микросервисов
Три истории микросервисов
 
От монолитных моделей предметной области — к модульным
От монолитных моделей предметной области — к модульнымОт монолитных моделей предметной области — к модульным
От монолитных моделей предметной области — к модульным
 
Будущее omni-channel маркетинга: инструменты, кейсы и цифры
Будущее omni-channel маркетинга: инструменты, кейсы и цифрыБудущее omni-channel маркетинга: инструменты, кейсы и цифры
Будущее omni-channel маркетинга: инструменты, кейсы и цифры
 
Agile и управление знаниями в ИТ-проектах
Agile и управление знаниями в ИТ-проектахAgile и управление знаниями в ИТ-проектах
Agile и управление знаниями в ИТ-проектах
 
State of the .Net Performance
State of the .Net PerformanceState of the .Net Performance
State of the .Net Performance
 
Опыт применения метода ATAM для оценки архитектуры
Опыт применения метода ATAM для оценки архитектурыОпыт применения метода ATAM для оценки архитектуры
Опыт применения метода ATAM для оценки архитектуры
 
Гибридный подход к управлению правами доступа: когда стандартного IDM не хватает
Гибридный подход к управлению правами доступа: когда стандартного IDM не хватаетГибридный подход к управлению правами доступа: когда стандартного IDM не хватает
Гибридный подход к управлению правами доступа: когда стандартного IDM не хватает
 
Собираем кубик Рубика: восстановление архитектурного описания корпоративной р...
Собираем кубик Рубика: восстановление архитектурного описания корпоративной р...Собираем кубик Рубика: восстановление архитектурного описания корпоративной р...
Собираем кубик Рубика: восстановление архитектурного описания корпоративной р...
 
Process и Case Management в информационной системе: от автоматизации As Is к ...
Process и Case Management в информационной системе: от автоматизации As Is к ...Process и Case Management в информационной системе: от автоматизации As Is к ...
Process и Case Management в информационной системе: от автоматизации As Is к ...
 
RBAC & ABAC: гибридное решение для управления правами доступа
RBAC & ABAC: гибридное решение для управления правами доступаRBAC & ABAC: гибридное решение для управления правами доступа
RBAC & ABAC: гибридное решение для управления правами доступа
 

Интернационализация ПО: тонкости культуры в разработке

  • 1. 26 марта 2015 года Интернационализация ПО: тонкости культуры в разработке Владислав Иофе Архитектор
  • 2. План  О компании и о себе  Hello, world!  Кодировки и наборы символов  The Turkish Test  Языковые и региональные стандарты  Кофе-брейк   i18n, g11n, l10n, NLS  Locale  Дата и время. Практическое задание  Многозвенные приложения  Отказ от интернационализации 2/68
  • 3. О себе  В 2005 окончил мехмат Ташкентского государственного университета  С 2004 занимаюсь корпоративным программным обеспечением  В 2008 пришел в CUSTIS  Работал разработчиком, техлидом, тимлидом, сейчас занимаюсь архитектурой 3/68
  • 4. О компании Проектирование Заказная разработка Бережное внедрение Масштабных IT-систем 4/68
  • 12. Знаки препинания en Are you sure you want to quit? Yes, of course. ar ‫ﺑﺎﻟطﺑﻊ‬ ‫ﻧﻌم‬ ‫إﻧﮭﺎء؟‬ ‫ﺗرﯾد‬ ‫أﻧك‬ ‫ﻣﺗﺄﻛد‬ ‫أﻧت‬ ‫ھل‬. zh-Hans 您确定要退出吗?是的,当然。 es ¿Seguro que quieres salir? Sí, por supuesto. el Είστε σίγουροι ότι θέλετε να κλείσετε; Ναι, φυσικά. 12/68
  • 13. Hello, world! Выводы Не зашивать в код строки Выносить строки в ресурсы  Внешнее по отношению к коду хранение (текстовые или xml- файлы, БД и прочее) Не конкатенировать строки Использовать строки форматирования  Знаки препинания и разрывы строк держать также в строке форматирования  Писать комментарии для переводчиков Даже для нелокализуемого софта это правила хорошего тона Не относится к программным константам 13/68
  • 14. Кодировки и наборы символов (Encodings and Character Sets) 14/68
  • 15. Кодировки и наборы символов (Encodings and Character Sets)  Начало…  ASCII – 7-битная кодировка  В нее не помещаются даже все европейские символы (é, ß, ü, ä, ö и др.)  Extended-ASCII – использует 8-й бит  Для группы языков (набора символов) нужна собственная кодировка (codepage). Часто их несколько: для русского – cp866, KOI-8R, Windows-1251  А в китайском – около 3000 общеупотребимых иероглифов, а всего – более 80000 15/68
  • 17. KOI-8R – код обмена информацией, 8 битов  Основана на русской морзянке  Русская морзянка построена на сходстве звуков  Как следствие:  символы кириллицы в таблице расположены не по алфавиту  зато при отсекании старшего бита текст остается читаемым 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/68
  • 19. Что такое ?  Это – стандарт кодирования символов…  1 114 112 символов, для которых определены уникальные коды. Коды записываются с префиксом U+. Сам набор символов частенько называют Юникодом  Семейство кодировок UTF 19/68
  • 21. Символ рубля U+20BD  Официально утвержден 11 декабря 2013 года  Появился в стандарте Юникода 16 июня 2014 года  Новые шрифты Windows входят в обновление KB2970228 от 2 сентября 2014 года  Которого у многих пользователей нет  Многие разработчики не парятся  Ну а остальные придумывают способы («тащат» с собой шрифты или используют CSS) 21/68
  • 23. The Turkish Test  Англоязычному или русскоязычному пользователю редко важна регистрочувствительность*  Совершенно естественной выглядит возможность вводить, получать, искать информацию без учета регистра букв * Есть языки, где нет регистра символов 23/68
  • 24. The Turkish Test (2) 24/68
  • 25. The Turkish Test (3) 25/68
  • 26. Case Folding – изменение регистра  Не во всех языках изменение регистра такое же, как в латинском алфавите  Изменение регистра может привести к изменению числа символов  немецкий: ToUpper(“groß”) == “GROSS”  Unicode содержит правила для Case Folding и специальных случаев  Использовать ToUpper() все же чуть безопаснее, чем ToLower() 26/68
  • 28. Языковые и региональные стандарты Примеры Английский (США) Английский (Индия) Русский (Россия) Немецкий (Германия) Итальянский (Италия) Персидский 3/26/2015 7:30:12 PM 26.03.2015 19:30 26.03.2015 19:30 26.03.2015 19:30 26/03/2015 19.30.12 26/03/2015 07:30:12‫ب‬.‫ظ‬ ($12,345,678.90) ₹ -123,45,678.90 -12 345 678,90 ₽ -12.345.678,90 € -€ 12.345.678,90 ‫﷼‬12،345،678/90- 13.00 % 13.00% 13,00% 13,00% 13,00% 13/00 % 28/68
  • 29.  Почитайте о нормализации строк в Unicode  Заостряйте внимание на том, какая локаль используется при сравнении строк и case folding’e (в том числе сортировке и поиске), форматировании:  Явно указывайте инвариантную («пустую», «корневую», US English) для внутренних нужд, взаимодействия с другими системами либо используйте специальный формат, например XML’ный (2015-03-26T19:00:12+03:00)  Используйте пользовательскую (можно неявно), когда результат увидит пользователь Промежуточные итоги 29/68
  • 32. i18n, g11n, l10n, NLS 32/68
  • 33. i18n, g11n, l10n, NLS 33/68
  • 34. Что здесь не так? 34/68
  • 36. Локализация – не только перевод  Какие элементы подлежат локализации?  Строки  Медиа (изображения, звуки, видео)  UI Layout Все это мы будем называть ресурсами локализации  А еще специфическими могут быть алгоритмы. Правда, нечасто  Грамматика языка 36/68
  • 37. Локализация – не только перевод (2) 37/68
  • 41. Языковые и региональные стандарты  Язык и система письма (письменность)  Алфавит, правила сравнения  Числа  Календарь, дата и время  Валюта  Система мер  Структура почтового адреса, телефонного номера  Формат бумаги по умолчанию  Печатные формы, отчеты  ... 41/68
  • 42. Описание языковых и региональных стандартов Locale («локаль»), в .NET – Culture («культура»)  Имеет два компонента:  Язык (обязательный)  Регион (необязательный) 42/68
  • 43. Locale  Можно выделить три использования:  Для языка отображения пользовательского интерфейса  Для форматирования дат, чисел и т. д. и сравнения строк (сортировка, поиск, правила case folding’а)  Для пользовательского ввода (IME) 43/68
  • 44. Locale Обычно локали UI и форматирования  Наследуются от системных  Могут быть переопределены программно  Применяются на приложение (Java) или даже отдельный поток (Windows) 44/68
  • 50. Процесс поиска подходящих ресурсов (Resource Fallback Process)  Переводить для всех вариантов языка может быть неоправданно или будет просто дублированием  Пустой текст у пользовательского элемента UI недопустим  Ресурсы для ведущего языка (языка по умолчанию, языка разработки) всегда актуальны и непусты  Локализация часто не успевает за версиями софта, и часто используется предыдущая версия локализации 50/68
  • 51. .NET Resource Fallback • en-IN → en → ru • en-GB → en → ru • zh-CN → zh-Hans → zh → ru 51/68
  • 52. Locale  Не все встречающиеся в жизни сочетания «язык – регион» существуют в операционных системах в виде локалей  Молдавия (Молдова) говорит по-молдавски (или на молдавском диалекте румынского)  Локалей ro-MD, ro-MD-TRI в Windows нет  А раньше даже были локали ru-MO, ro-MO  Тем не менее, запись на латинице одних и тех же румынских слов различается  Можно программно создавать собственные локали  Пользователи поступают проще, указывая локаль ro-RO 52/68
  • 53. Особенности окружения Folder name Folder path Language Program Files C:Program 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 53/68
  • 55. Корреспондент Василий Пупкин отправился в длительную командировку по провинциям стран Ближнего Востока. Оплата прокатной машины почасовая, 1 долл/час. Дата и время. Задача 1 марта 2015 в полдень Вася выехал из офиса в Тегеране, в полдень 22 марта подъехал к границе Ирана и Азербайджана в Астаре, а в полдень 29 марта 2015 будет уже в Баку. Сколько заплатит Вася за аренду авто? 55/68
  • 56. Дата и время. Задача. Подсказки  Иран и Азербайджан находятся в разных часовых поясах  А еще есть летнее время  В разных странах переход на летнее время (и обратно) происходит в разные дни  В Азербайджане в последнее воскресенье марта  В Иране в третью субботу марта 56/68
  • 57. Дата и время. Задача 57/68
  • 58. Дата и время. Выводы  Надо различать термины «часовой пояс» (timezone) и «смещение» (offset)  В Гринвиче (район Лондона) тоже переходят на летнее время   UTC и GMT – не одно и то же (GMT устарел) 58/68
  • 59. Дата и время. Выводы  В году не всегда 365 дней  В сутках не всегда 24 часа  В часе 60 минут  В минуте не всегда 60 секунд  Один и тот же момент времени может случиться не единожды или не случиться вообще 59/68
  • 60. Хранение даты-времени  Журналирование  прошедшие события логично хранить с часовым поясом/смещением  Календарь/напоминания  Нельзя хранить время со смещением  Не рекомендуется хранить время с часовым поясом  Лучше хранить местоположение  Универсального рецепта нет, все зависит от специфики задачи 60/68
  • 61. Веб-приложения  Браузер использует заголовок Accept-Language  Указываются языки (code или code-Subcode) с весами  Сервер решает, может ли и хочет ли он предоставить контент на одном из запрошенных языков  Других стандартных средств нет 61/68
  • 62. Веб-приложения  А нам еще нужна информация о местоположении  Геолокация? Неуниверсально, ненадежно…  Датчики мобильных устройств  Анализ баз IP- и MAC-адресов  JavaScript ► Поэтому приложение должно предоставлять возможность изменить язык и/или регион ► Огромное количество приложений игнорирует локаль пользователя (настройки форматирования), что делает затруднительным, например, копипаст в Excel 62/68
  • 63. Веб-приложения Кстати, W3C не рекомендует использовать флаги для обозначения языков “In addition, flags have nationalistic connotations that may be unwelcome for people of other countries, even though they speak the same language.” 63/68
  • 64. Тестирование локализации Псевдолокализация:  В русскоязычных интерфейсах – транслитерация  В англоязычных – Pig Latin 64/68
  • 65. Трудности перевода В рецепте сказано «варить неприкрытым»! 65/68
  • 66. Отказ от интернационализации  Style  Герои серии игр говорят на искусственном языке  На Simlish (симском) даже есть песни  GitHub  В 2011 году команда отказалась от поддержки многоязычности и сосредоточилась на том, чтобы сделать GitHub быстрым и надежным 66/68
  • 67. О чем мы не говорили?  Работа с исключениями  Нормализация в Unicode  Шрифты  Полнотекстовый поиск  Взаимодействие с переводчиками  … 67/68