Tuesday, March 10, 2009

Как правильно локализовать формы MS CRM 4.0

Сначала сделаю небольшой экскурс в прошлое почему я поднимаю эту тему в своём блоге.

Изначально в том проекте, которым я занимаюсь сейчас, планировалось все части русского MUI, поддающиеся переводу, перевести на украинский. Поскольку система доделывалась на ходу и пережила за время своего существования 3-и поколения разработчиков - каждый добавлял новые сущности/закладки/группы/поля так, как он привык это делать. Посему когда я принял систему - в ней было много мешанины из английских/русских/украинских меток.


Собственно сейчас занимаюсь причёсыванием этой системы и приведением всех надписей к общему языку. Все языковые метки получены путём экспорта языковых меток для перевода.

Труд этот - рутинный и монотонный и посему, чтобы уберечь людей, которые могут ложно пойти по моим стопам, я придумал концепцию следуя которой можно прийти к результату, когда работа над системой и её локализация идут параллельно. Далее в простых скриншотах и комментариях я постараюсь её изложить.

Для начала - создадим новую сущность с именем test:


Добавим в новосозданную сущность поля Count типа int, поле Extended Name типа nvarchar:




Как известно с интерфейса нет фозможности редактировать то, как будет выглядеть то или иное поле при изменении языка отображения. Посему воспользуемся такой методикой:

Выполним экспорт кастомизации сущности:


Получив zip файл, сохраним его, распакуем, откроем customizations.xml, откроем его на редактирование. Целевые части файла, задествованные в переводе выделены красным на скриншоте:


Тег LocalizedNames/LocalizedName - отвечает за то, как будет именоваться в языке локализации сущность, тег LocalizedCollectionNames/LocalizedCollectionName - ответственен за группу сущностей. Для того, чтобы в русской версии сущность именовалась тест, а группа сущностей - тесты - добавьте в тег LocalizedNames узел <localizedname description="тест" languagecode="1049" /> LocalizedCollectionNames - <localizedcollectionname description="тесты" languagecode="1049"/>. В результате должно получится так, как показано на скриншоте:


Далее обратим внимание на созданные поля Count и Extended Name. Необходимо открытый файл кастомизаций прокрутить немного вниз и найти секцию описания аттрибутов, как выделено красным на следующем рисунке:



Для того, чтобы поля при включенном русском MUI отображались русскими эксивалентами (например Количество и Расширенное имя) необходимо будет дополнить узлы attribute/displaynames, как показано на следующем рисунке:

Сохраняем полученный путём таких изменения файл, импортируем файл кастомизаций, публикуем сущность.

Собственно всё.