SlideShare a Scribd company logo
1 of 37
Современный подход к локализации
на примере одного проекта
Зубец Ярослав
Softengi, Киев
О докладчике
Зубец Ярослав
Team Lead, Softengi,
Украина, Киев
7 лет опыта разработки .NET приложений
MCPD Web Developer
Глобализация
Глобализация — процесс
всемирной экономической,
политической, культурной и
религиозной интеграции.
Глобализация ПО— процесс
многократной локализации на
большое количество языков для
целевых групп различных стран и
культур.
I18n
ция (internationalization)
технологические приѐмы разработки, упрощающие адаптацию
продукта (такого как программное или аппаратное обеспечение) к
языковым и культурным особенностям региона (регионов), отличного
от того, в котором разрабатывался продукт.

L10n
ция (localization)
процесс адаптации программного обеспечения к культуре какой-либо
страны. Как частность — перевод пользовательского интерфейса,
документации и сопутствующих файлов программного обеспечения с
одного языка на другой.
Исходные данные
Проект:
21 подсистема
Основные технологии:
ASP.Net (C#), XML/HTML/JavaScript, DB MS SQL Server
Файлы:
C# (*.cs) ~ 6000
SQL (stored procedures and functions) ~2500
Pages (aspx, html) ~ 600
JavaScript ~300
Срок выполнения: ~ 12 месяцев
Что предстоит сделать
1.
2.
3.
4.
5.

Интернационализировать БД
Интернационализировать Business уровнь (.NET)
Интернационализировать UI
Сформировать материалы для переводчиков
Локализировать
Ручной подход
 Разделение кода по разработчикам и выполнение ручного
вынесения ресурсов

 Доступные ресурсы на проекте:
5 разработчиков, 2 архитектора, 5-7 тестировщиков
Проблемы подхода
• Огромное количество багов

- человеческий фактор
• Наличие дубликатов
- отсутствие анализа при вынесении ресурсов

• Трудности с отслеживанием объема работ
• Проблемы «долокализации» новой функциональности
Результаты
 Срок выполнения – 1.5 года (estimate – 1год)
 Большой объем тестирования
 Перенос релиза на неопределенный срок
Второй шанс
Автоматизированный подход
Основные цели:
- качественный анализ с целью определения литералов, которые
необходимо локализировать
- максимальное уменьшение ручной работы
- сокращение временных затрат
Шаг 1. Нахождение всех
литералов для локализации
Использование парсеров
Тип файла

3rd party library

JS

AjaxMin

CS

NRefactory

HTML

Html Agility Pack

SQL

Microsoft ScriptDom

Покрывают 97% литералов приложения
Объем локализации
Литералы, неотображаемые на UI
Литералы, подлежащие локализации
9%

91%

Всего литералов ~ 200.000
Проблемы
 Механизм отделения строк без дополнительной обработки
не работает!
 Нужно найти способ определения ненужных литералов
Шаг 2. Фильтрация по
простым правилам
•

По файлу
- автогенерируемые (*.design.cs)
- 3rd party libraries

•

По содержимому
- только цифры
- пустые строки
- символы не из алфавита
- идентификаторы

Примеры:
item.SetAttribute(ATTRIBUTE_NAME, field.IsPredefined ? "1" : "0");
_defaultSeparator = ",";
var EMPTY_GUID = '00000000-0000-0000-0000-000000000000';
Результат применения
простых правил
Объем локализации

Оставшиеся
литералы

40%

60%

Отсеянные
литералы по
простым правилам
Шаг 3. Фильтрация на основе
контекста использования

Семантическое дерево:
Анализируемые значения
Функция в которую передается литерал

Порядковый номер аргумента
Анализируемые значения
Оператор присваивания

Название тэга и аттрибут (для HTML)
<a href="www.softengi.com">Узнать больше о компании</a>
Результат применения
правил на основе контекста
Объем локализации

25%
40%

35%

Оставшиеся
литералы
Отсеянные
литералы по
простым правилам
Отсеянные
литералы по
контексту
Итоги
 Количество литералов для пересмотра ~ 50.000 (25%)
Хранение ресурсов
Варианты:
 в одном файле
 разбивать по сборкам
 по подсистемам

Плохо разложенные
по ресурсам строки мешают
переводам.
Категоризация литералов по
области использования
Область

Описание

Пример

Global

общие тексты кнопок
общие тексты сообщений
общие строки для всего сообщения
общие валидационные сообщения

Save, Cancel
Help
"Value is required"

Module

Литералы, общие для всех страниц и
контролов в рамках одного модуля

Dashboard
Task

Local

Специфичные литералы для одной
страниц или контрола или
вспомагательного класс и т.д.

"Auto Fill" (on one of
Tasks pages)
Категоризация литералов
по смысловому значению
 Exceptions
 Validations
 Pages
 Javascripts
 Xmls
 Entities
 Enums
Структура приложения
Root /
Resources / (global scope)
Exceptions.resx
Validations.resx
Pages.resx
Citations /
Resources / (module scope)
Pages.resx
Validations.resx
JavaScripts.resx
Xstls.resx
CitationEdit.aspx
CitationContextMenu.xml
MainForm.aspx
Локализация объектов
(entities)
 Около 15% литералов для локализации – имена сущностей
или их свойств.
Результаты категоризации
 Именование ключей
•
•
•
•
•

Resources.Pages.Command_Delete
Resources.Exceptions.InvalidCastException.NameNotValid
Citations.Resources.Validations.NameRequired
Security.Resources.Pages.ExpireUser.aspx.cs.Command_Revoke
Task.DueDate

 У каждого литерала своя область действия
Локализация динамических
страниц (aspx, ascx)
Стандартный подход ASP.NET не подошел 

Свой собственный ASP.NET Expression:
Локализация статических
файлов
Типы файлов: Html, JavaScript, Xslt, Xml
 Универсальный подход - сделать статические файлы
динамическими.
 Производительность благодаря кэшированию не
пострадала!
Синтаксис вставки
 Аналогично динамическим страницам!
Localization Studio
Назначение
Работа со строками, выводимыми на интерфейс приложения:

 Оценка состояния интернационализации
 Обработка строк, создание ресурсных файлов

 Управление правилами фильтрации литералов
 Подготовка материалов для переводчиков
 Управление переводами для разных культур.
Localization Studio
Дополнительные
возможности
Для разработчиков
• поиск литералов
• нахождение дубликатов (для уменьшения стоимости переводов)
• статистика по литералам

Для переводчиков
• Импорт, экспорт ресурсов в Excel
• Получение информации о контексте ресурса
Автоматизированный подход
(результаты)









Срок выполнения – 6 месяцев
Уменьшение дублирования ресурсов
Повышение согласованности переводов
Прозрачная поддержка циклов будущих релизов
Улучшение прозрачности кода
Сокращение циклов тестирования
Уменьшение количества багов
Организация взаимодействия с переводчиками
Идеи развития





Подключение к continuous integration
Поддержка других типов проектов
Адаптация под Agile
Оказание услуг локализации другим проектам/компаниям
О компании
Intecracy Group
Международный консорциум, работающий в сфере высоких
технологий. Консорциум Intecracy Group объединяет 10 ITкомпаний, каждая из которых достигла наивысшего уровня
компетенции в своем виде деятельности.
Localization Service






Экспертиза готовности продукта к локализации
Интернационализация и локализация корпоративных приложений
Обеспечение работ по переводу
Тестирование локализации приложений
Вопросы?

More Related Content

Similar to Современный подход к локализации на примере одного проекта

Desktop app based on node js and html5
Desktop app based on node js and html5Desktop app based on node js and html5
Desktop app based on node js and html5Provectus
 
Автоматизация SEO-процессов в продуктовых компаниях - DVOMA.pro 30.08
Автоматизация SEO-процессов в продуктовых компаниях - DVOMA.pro 30.08Автоматизация SEO-процессов в продуктовых компаниях - DVOMA.pro 30.08
Автоматизация SEO-процессов в продуктовых компаниях - DVOMA.pro 30.08Vladislav Morgun
 
IOP202 DevCon 2012 Apache Lucene in Windows Azure
IOP202 DevCon 2012 Apache Lucene in Windows AzureIOP202 DevCon 2012 Apache Lucene in Windows Azure
IOP202 DevCon 2012 Apache Lucene in Windows AzureVadim Novitskiy
 
Web programming modern tendencies
Web programming modern tendenciesWeb programming modern tendencies
Web programming modern tendenciesDarkestMaster
 
Профессиональная разработка в суровом Enterprise
Профессиональная разработка в суровом EnterpriseПрофессиональная разработка в суровом Enterprise
Профессиональная разработка в суровом EnterpriseAlexander Granin
 
2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий
2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий
2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел КрынецкийJSC “Arcadia Inc”
 
Фронтенд в Яндексе
Фронтенд в ЯндексеФронтенд в Яндексе
Фронтенд в ЯндексеYandex
 
Sergey Ilinsky Rit 2010 Complex Gui Development Ample Sdk
Sergey Ilinsky Rit 2010 Complex Gui Development Ample SdkSergey Ilinsky Rit 2010 Complex Gui Development Ample Sdk
Sergey Ilinsky Rit 2010 Complex Gui Development Ample Sdkrit2010
 
Как делать глобальный проект
Как делать глобальный проектКак делать глобальный проект
Как делать глобальный проектisdeforum
 
Embarcadero All-Access
Embarcadero All-AccessEmbarcadero All-Access
Embarcadero All-AccessSerghei Urban
 
Фронтенд в Яндексе
Фронтенд в ЯндексеФронтенд в Яндексе
Фронтенд в ЯндексеYandex
 
Фронтенд в Яндексе
Фронтенд в ЯндексеФронтенд в Яндексе
Фронтенд в ЯндексеYandex
 
Локализация - как делать глобальный проект?
Локализация - как делать глобальный проект?Локализация - как делать глобальный проект?
Локализация - как делать глобальный проект?Alconost
 
Лекция 4
Лекция 4Лекция 4
Лекция 4itc73
 
Микросервисы в .NET Core
Микросервисы в .NET CoreМикросервисы в .NET Core
Микросервисы в .NET CoreAndrew Gubskiy
 
Что должен уметь Linux программист
Что должен уметь Linux программистЧто должен уметь Linux программист
Что должен уметь Linux программистru_Parallels
 
Sql Server Data Services
Sql Server Data ServicesSql Server Data Services
Sql Server Data ServicesMedia Gorod
 
игровая логика, проблемы и решения
игровая логика, проблемы и решенияигровая логика, проблемы и решения
игровая логика, проблемы и решенияВладимир Кожаев
 

Similar to Современный подход к локализации на примере одного проекта (20)

Desktop app based on node js and html5
Desktop app based on node js and html5Desktop app based on node js and html5
Desktop app based on node js and html5
 
Автоматизация SEO-процессов в продуктовых компаниях - DVOMA.pro 30.08
Автоматизация SEO-процессов в продуктовых компаниях - DVOMA.pro 30.08Автоматизация SEO-процессов в продуктовых компаниях - DVOMA.pro 30.08
Автоматизация SEO-процессов в продуктовых компаниях - DVOMA.pro 30.08
 
IOP202 DevCon 2012 Apache Lucene in Windows Azure
IOP202 DevCon 2012 Apache Lucene in Windows AzureIOP202 DevCon 2012 Apache Lucene in Windows Azure
IOP202 DevCon 2012 Apache Lucene in Windows Azure
 
Web programming modern tendencies
Web programming modern tendenciesWeb programming modern tendencies
Web programming modern tendencies
 
Профессиональная разработка в суровом Enterprise
Профессиональная разработка в суровом EnterpriseПрофессиональная разработка в суровом Enterprise
Профессиональная разработка в суровом Enterprise
 
2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий
2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий
2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий
 
Фронтенд в Яндексе
Фронтенд в ЯндексеФронтенд в Яндексе
Фронтенд в Яндексе
 
Genome
GenomeGenome
Genome
 
Sergey Ilinsky Rit 2010 Complex Gui Development Ample Sdk
Sergey Ilinsky Rit 2010 Complex Gui Development Ample SdkSergey Ilinsky Rit 2010 Complex Gui Development Ample Sdk
Sergey Ilinsky Rit 2010 Complex Gui Development Ample Sdk
 
Как делать глобальный проект
Как делать глобальный проектКак делать глобальный проект
Как делать глобальный проект
 
Embarcadero All-Access
Embarcadero All-AccessEmbarcadero All-Access
Embarcadero All-Access
 
Фронтенд в Яндексе
Фронтенд в ЯндексеФронтенд в Яндексе
Фронтенд в Яндексе
 
Фронтенд в Яндексе
Фронтенд в ЯндексеФронтенд в Яндексе
Фронтенд в Яндексе
 
Локализация - как делать глобальный проект?
Локализация - как делать глобальный проект?Локализация - как делать глобальный проект?
Локализация - как делать глобальный проект?
 
Лекция 4
Лекция 4Лекция 4
Лекция 4
 
559646.pptx
559646.pptx559646.pptx
559646.pptx
 
Микросервисы в .NET Core
Микросервисы в .NET CoreМикросервисы в .NET Core
Микросервисы в .NET Core
 
Что должен уметь Linux программист
Что должен уметь Linux программистЧто должен уметь Linux программист
Что должен уметь Linux программист
 
Sql Server Data Services
Sql Server Data ServicesSql Server Data Services
Sql Server Data Services
 
игровая логика, проблемы и решения
игровая логика, проблемы и решенияигровая логика, проблемы и решения
игровая логика, проблемы и решения
 

More from SQALab

Готовим стажировку
Готовим стажировкуГотовим стажировку
Готовим стажировкуSQALab
 
Куда приводят мечты? или Искусство развития тестировщика
Куда приводят мечты? или Искусство развития тестировщикаКуда приводят мечты? или Искусство развития тестировщика
Куда приводят мечты? или Искусство развития тестировщикаSQALab
 
Оптимизация Selenium тестов и ускорение их поддержки
Оптимизация Selenium тестов и ускорение их поддержкиОптимизация Selenium тестов и ускорение их поддержки
Оптимизация Selenium тестов и ускорение их поддержкиSQALab
 
Автоматизация 0.0: 0 - бюджет, 0 - опыт программирования
Автоматизация 0.0: 0 - бюджет, 0 - опыт программированияАвтоматизация 0.0: 0 - бюджет, 0 - опыт программирования
Автоматизация 0.0: 0 - бюджет, 0 - опыт программированияSQALab
 
Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J...
Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J...Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J...
Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J...SQALab
 
Continuous performance testing
Continuous performance testingContinuous performance testing
Continuous performance testingSQALab
 
Конфиги вместо костылей. Pytestconfig и зачем он нужен
Конфиги вместо костылей. Pytestconfig и зачем он нуженКонфиги вместо костылей. Pytestconfig и зачем он нужен
Конфиги вместо костылей. Pytestconfig и зачем он нуженSQALab
 
Команда чемпионов в ИТ стихии
Команда чемпионов в ИТ стихииКоманда чемпионов в ИТ стихии
Команда чемпионов в ИТ стихииSQALab
 
API. Серебряная пуля в магазине советов
API. Серебряная пуля в магазине советовAPI. Серебряная пуля в магазине советов
API. Серебряная пуля в магазине советовSQALab
 
Добиваемся эффективности каждого из 9000+ UI-тестов
Добиваемся эффективности каждого из 9000+ UI-тестовДобиваемся эффективности каждого из 9000+ UI-тестов
Добиваемся эффективности каждого из 9000+ UI-тестовSQALab
 
Делаем автоматизацию проектных KPIs
Делаем автоматизацию проектных KPIsДелаем автоматизацию проектных KPIs
Делаем автоматизацию проектных KPIsSQALab
 
Вредные привычки в тест-менеджменте
Вредные привычки в тест-менеджментеВредные привычки в тест-менеджменте
Вредные привычки в тест-менеджментеSQALab
 
Мощь переполняет с JDI 2.0 - новая эра UI автоматизации
Мощь переполняет с JDI 2.0 - новая эра UI автоматизацииМощь переполняет с JDI 2.0 - новая эра UI автоматизации
Мощь переполняет с JDI 2.0 - новая эра UI автоматизацииSQALab
 
Как hh.ru дошли до 500 релизов в квартал без потери в качестве
Как hh.ru дошли до 500 релизов в квартал без потери в качествеКак hh.ru дошли до 500 релизов в квартал без потери в качестве
Как hh.ru дошли до 500 релизов в квартал без потери в качествеSQALab
 
Стили лидерства и тестирование
Стили лидерства и тестированиеСтили лидерства и тестирование
Стили лидерства и тестированиеSQALab
 
"Давайте не будем про качество"
"Давайте не будем про качество""Давайте не будем про качество"
"Давайте не будем про качество"SQALab
 
Apache.JMeter для .NET-проектов
Apache.JMeter для .NET-проектовApache.JMeter для .NET-проектов
Apache.JMeter для .NET-проектовSQALab
 
Тестирование геолокационных систем
Тестирование геолокационных системТестирование геолокационных систем
Тестирование геолокационных системSQALab
 
Лидер или босс? Вот в чем вопрос
Лидер или босс? Вот в чем вопросЛидер или босс? Вот в чем вопрос
Лидер или босс? Вот в чем вопросSQALab
 
От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут...
От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут...От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут...
От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут...SQALab
 

More from SQALab (20)

Готовим стажировку
Готовим стажировкуГотовим стажировку
Готовим стажировку
 
Куда приводят мечты? или Искусство развития тестировщика
Куда приводят мечты? или Искусство развития тестировщикаКуда приводят мечты? или Искусство развития тестировщика
Куда приводят мечты? или Искусство развития тестировщика
 
Оптимизация Selenium тестов и ускорение их поддержки
Оптимизация Selenium тестов и ускорение их поддержкиОптимизация Selenium тестов и ускорение их поддержки
Оптимизация Selenium тестов и ускорение их поддержки
 
Автоматизация 0.0: 0 - бюджет, 0 - опыт программирования
Автоматизация 0.0: 0 - бюджет, 0 - опыт программированияАвтоматизация 0.0: 0 - бюджет, 0 - опыт программирования
Автоматизация 0.0: 0 - бюджет, 0 - опыт программирования
 
Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J...
Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J...Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J...
Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J...
 
Continuous performance testing
Continuous performance testingContinuous performance testing
Continuous performance testing
 
Конфиги вместо костылей. Pytestconfig и зачем он нужен
Конфиги вместо костылей. Pytestconfig и зачем он нуженКонфиги вместо костылей. Pytestconfig и зачем он нужен
Конфиги вместо костылей. Pytestconfig и зачем он нужен
 
Команда чемпионов в ИТ стихии
Команда чемпионов в ИТ стихииКоманда чемпионов в ИТ стихии
Команда чемпионов в ИТ стихии
 
API. Серебряная пуля в магазине советов
API. Серебряная пуля в магазине советовAPI. Серебряная пуля в магазине советов
API. Серебряная пуля в магазине советов
 
Добиваемся эффективности каждого из 9000+ UI-тестов
Добиваемся эффективности каждого из 9000+ UI-тестовДобиваемся эффективности каждого из 9000+ UI-тестов
Добиваемся эффективности каждого из 9000+ UI-тестов
 
Делаем автоматизацию проектных KPIs
Делаем автоматизацию проектных KPIsДелаем автоматизацию проектных KPIs
Делаем автоматизацию проектных KPIs
 
Вредные привычки в тест-менеджменте
Вредные привычки в тест-менеджментеВредные привычки в тест-менеджменте
Вредные привычки в тест-менеджменте
 
Мощь переполняет с JDI 2.0 - новая эра UI автоматизации
Мощь переполняет с JDI 2.0 - новая эра UI автоматизацииМощь переполняет с JDI 2.0 - новая эра UI автоматизации
Мощь переполняет с JDI 2.0 - новая эра UI автоматизации
 
Как hh.ru дошли до 500 релизов в квартал без потери в качестве
Как hh.ru дошли до 500 релизов в квартал без потери в качествеКак hh.ru дошли до 500 релизов в квартал без потери в качестве
Как hh.ru дошли до 500 релизов в квартал без потери в качестве
 
Стили лидерства и тестирование
Стили лидерства и тестированиеСтили лидерства и тестирование
Стили лидерства и тестирование
 
"Давайте не будем про качество"
"Давайте не будем про качество""Давайте не будем про качество"
"Давайте не будем про качество"
 
Apache.JMeter для .NET-проектов
Apache.JMeter для .NET-проектовApache.JMeter для .NET-проектов
Apache.JMeter для .NET-проектов
 
Тестирование геолокационных систем
Тестирование геолокационных системТестирование геолокационных систем
Тестирование геолокационных систем
 
Лидер или босс? Вот в чем вопрос
Лидер или босс? Вот в чем вопросЛидер или босс? Вот в чем вопрос
Лидер или босс? Вот в чем вопрос
 
От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут...
От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут...От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут...
От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут...
 

Современный подход к локализации на примере одного проекта

Editor's Notes

  1. Есть важное различие между интернационализацией и локализацией. Интернационализация — это адаптация продукта для потенциального использования практически в любом месте, в то время как локализация — это добавление специальных функций для использования в некотором определённом регионе. Интернационализация производится на начальных этапах разработки, в то время как локализация — для каждого целевого языка.
  2. Система, предоставляющая клиентам по всему миру возможность отслеживать выбросы, создавать отчетность и соблюдать стандарты охраны окружающей среды на основе SaaS модели.
  3. Рассказать устно
  4. Определение литералов по регулярным выражениям
  5. Добавить слайд с фото синтаксического дерева
  6. Объяснить откуда 9 процентов
  7. Нарисовать проценты
  8. Усно расказать какие типы хранения есть. resx
  9. Количество regressionтестирования с 6 до 1