воскресенье, 2 августа 2015 г.

Перевод на русский SambaPOS v4

Вводная: Есть такая программа для автоматизации общепита (кафе, столовых, ресторанов, фастфудов и прочего) SambaPOS. Она бесплатная, версии 2 и 3 в опенсорсе, лежат себе спокойно на гитхабе и прочее. В своё время для одного заведения мы переводили вторую версию (и до сих пор именно наш перевод там используется, хоть и корявый). Но в четвёртой версии почему-то вообще нет поддержки многоязычности и соответственно русского языка. Официальное мнение на этот счёт - "Only English is supported at the moment". Но ко мне обратились с вопросом - "Можно ли как-нибудь получить четвёртую версию на русский?"

Решение: Для начала я решил действовать "в лоб", зашел в MultiCommander (бесплатный аналог TotalCommander`a и ИМХО более для меня удобный и быстрый) и сделал поиск подстроки по папке - "Admin PIN". Данное сообщение выходит на первом экране, и решено было тестирование возможности перевода начать с него.

Искомая подстрока была найдена в библиотеке - Samba.Localization.dll и уже обрадовавшись, попробовал просто её поправить в обычном редакторе. И естественно у меня ничего не получилось. Если количество символов совпадало, то программа запускалась и даже работала, но так как отличие русского и английского языка весьма существенно и большинство слов и фраз по количеству не попадают, то пришлось думать дальше.

Для дальнейшей работы нам потребуется две вещи - Visual Studio (я использовал Visual Studio Community 2015, но можно использовать любую в которой есть поддержка 4 версии) и программу Resource.NET (взять можно по адресу - http://fishcodelib.com/Resource.htm ).

Теперь копируем Samba.Localization.dll в какую-либо папку (в моём случае X:\POS\) и открываем "Командную строку разработчика" 

Выполняем команду ildasm https://msdn.microsoft.com/ru-ru/library/f7dy01k1(v=vs.110).aspx

C:\Program Files (x86)\Microsoft Visual Studio 14.0>ildasm /out=x:\pos\sambaloc.il x:\POS\Samba.Localization.dll

Выполнив данную команду мы получим несколько файлов и среди них будет Samba.Localization.Properties.Resources.resources (имя будет таким вне зависимости от того, что вы указали в параметре out команды ildasm). Теперь открывает Resource.NET и выбираем данный файл. Открыв, мы увидим строки для редактирования, которые можно перевести самому или отдать фрилансерам на перевод. Переводим только раздел DATA и ни в коем случае не трогаем раздел Name!!!

После изменения, не забываем нажать кнопки "Update" и "Save".


После этого возвращаемся в Командную строку разработчика и вводим уже другую команду ilasm https://msdn.microsoft.com/ru-ru/library/496e4ekx(v=vs.110).aspx

C:\Program Files (x86)\Microsoft Visual Studio 14.0>ilasm x:\pos\sambaloc.il /output:x:\pos\Samba.Localization.dll /dll


После этого нужно просто скопировать новую dll обратно в папку с программой и наслаждаться русским языком.



PS: Также некоторые кнопки НЕ БУДУТ переведены данным способом, их нужно переводить в разделе - Manage-Automation-Automatiom Commands. Выбираем нужную для перевода команду и переводим секцию "Button Header"