Показано с 1 по 8 из 8
  1. #1
    Low Power Аватар для UA0JFY
    Регистрация
    07.08.2006
    Адрес
    Амурская область
    Возраст
    70
    Сообщений
    94
    Поблагодарили
    7
    Поблагодарил
    13

    Как локализовать программу

    Имеется некая программа, написанная на Net Framework. При установке есть выбор языка, турецкий или английский. Часть сообщений находится в .XML файлах и с ними проблем нет, локализуется просто. А вот часть находится в самом ЕХЕ-файле и в DLL-ках. Reschaker и Restorator "не видят " никаких ресурсов кроме Version Info. Как бы это дело обрулить и русифицировать всю программу, нужен совет гуру. Спасибо.


  2. #2
    Low Power Аватар для UA0JFY
    Регистрация
    07.08.2006
    Адрес
    Амурская область
    Возраст
    70
    Сообщений
    94
    Поблагодарили
    7
    Поблагодарил
    13
    Дальнейшие исследования ЕХЕ-шника и DLL-лок показали, что в бинарном коде имеются все надписи, которые есть на формах. Простая замена латинских символов на кириллицу выводит "квадратики". Если заменить транслитом, то все ОК. Естественно все это с соблюдением количества символов, иначе изменяется CRC-код и программа просто не грузится. Как указать фонт, чтобы поддерживалась кириллица?

  3. #3
    High Power
    Регистрация
    26.02.2006
    Адрес
    Рыбинск, Ярославская обл.
    Возраст
    41
    Сообщений
    783
    Поблагодарили
    157
    Поблагодарил
    478
    Попробуйте разные кодировки: win1251, utf-8, utf-16.
    Но затея плохая - сами понимаете.

  4. #4
    Very High Power Аватар для RX1AL
    Регистрация
    12.03.2007
    Адрес
    Грац, Австрия - Санкт-Петербург, Россия
    Возраст
    60
    Сообщений
    1,749
    Поблагодарили
    374
    Поблагодарил
    160
    Цитата Сообщение от UA0JFY Посмотреть сообщение
    А вот часть находится в самом ЕХЕ-файле и в DLL-ках. Reschaker и Restorator "не видят " никаких ресурсов кроме Version Info. Как бы это дело обрулить и русифицировать всю программу, нужен совет гуру. Спасибо.
    В принципе элементарно, если эти DLL тоже написаны на .NET. Тогда через Reflector можно вытащить все ресурсы. В случае, если
    написаны на другом языке и нет CLI - то поможет только один способ, использовать сателлитные ассембли (satellite assemblies) для
    каждого языка. Других способов сцепить СОМ/СОМ+ с .NET нет, если не писать специальный wrapper или interop по выдергиванию
    строк в память и их конвертации в нужные языки - но это серьезный геморрой.

    Можно обеспечить перехват через Property Grid, но только для веб приложения, так как любой визуальный контроль имеет
    аттрибут Localize. Отлавливаем через CultureInfo текущий язык и меняем его, и строки по контролю. Можно попробовать
    использовать и ResourceManager, но только в случае, если формат ресурс-файлов совпадает.

    Ну и попробуйте пару тулзов:
    http://www.visloc.com/formate.0.html?&L=2 - Visual Localize
    http://www.sisulizer.com/ - Sisulizer
    Хотелось бы правда иметь побольше данных о DLL. Не могли бы выложить здесь для опытов? Так легче будет сказать,
    что с ней делать.
    Последний раз редактировалось RX1AL; 15.02.2011 в 19:30. Причина: Добавлено сообщение
    73! Михаил (OE6MAF) :: HB9/OE6MAF, DL/OE6MAF

  5. #5
    Low Power Аватар для UA0JFY
    Регистрация
    07.08.2006
    Адрес
    Амурская область
    Возраст
    70
    Сообщений
    94
    Поблагодарили
    7
    Поблагодарил
    13
    Цитата Сообщение от RX1AL Посмотреть сообщение
    Хотелось бы правда иметь побольше данных о DLL. Не могли бы выложить здесь для опытов? Так легче будет сказать,
    что с ней делать.
    Доброго времени суток, Вам!
    Еще до конца не разобрался во взаимодействии и зависимостях всех файлов этой программы. Могу выложить дистр проги, 12.5 мб. Программа не назойлива, даже не создает ярлыков и пунктов в менюшках. Запуск из %Program Files%\RAINBOW\RAINBOW Но тогда получается, что Вы мне очень сильно поможете. По ссылкам скачал программы, что рекомендованы, но что-то ничего у меня пока не получается. Вот в архиве только те, что явно нужны. Ну а весь дистр можно разбить и выложить. Что скажете?
    73! de UA0JFY
    Вложения Вложения

  6. #6
    Very High Power Аватар для RX1AL
    Регистрация
    12.03.2007
    Адрес
    Грац, Австрия - Санкт-Петербург, Россия
    Возраст
    60
    Сообщений
    1,749
    Поблагодарили
    374
    Поблагодарил
    160
    Цитата Сообщение от UA0JFY Посмотреть сообщение
    Доброго времени суток, Вам!
    Еще до конца не разобрался во взаимодействии и зависимостях всех
    ....
    Что скажете?
    Для начала скажу, что сначала взгляну на этого зверя, а там посмотрим...

    UA0JFY
    Ну я взглянул на ваш Rainbow.exe. В двух директориях en и en-AU находятся сателлитные ассембли Rainbow.resources.dll, что говорит
    о том, что кто-то начинал делать локализацию правильно. Именно начинал, потому, что потом в самом коде .exe используются те же
    ресурсы, но embedded. Чем я смотрел файл, не суть важно, есть средства. Но важно другое, то, что в самом коде при использовании
    нейтральной CultureInfo есть интересные моменты. Кое-что перечислю:
    1. chkGSM2.Text, Culture=neutral, а текст в ресурсе - SMS Gönder, по-турецки. Таких строчек по контролям там масса - ресурсы:
    btnReport.Text=Rapor &Hazırlama ve Yazdırma, lstGelenAramalar.Name=lstGelenAramalar, btnIncoming.Text=Gelen Aramalar и.т.д.
    2. Часть ресурсов имеет при этом английские строки: lblPasswordText.Text=Password и т.д.
    3. А есть ресурсы, где и английские и турецкие вместе.

    Вывод напрашивается сам собой. Без перекомпиляции данных ресурсов и вынесения каждой CultureInfo в отдельный ресурс по
    отдельному файлу (satellite assembly) вы не сможете ничего сделать. Это физически невозможно при смешанных ресурс-файлах.
    Кто так сделал, интересный вопрос, выходящий за рамки вашей проблемы. Теперь, как пытаться победить сие чудо в перьях?
    Просто, но трудоемко по времени. Необходим дизассемблер: а) либо программным путем через Reflection.Emit (но это вам не под
    силу, так как требует много знаний) и б) уже готовым тулзом. К сожалению, по пункту б) не так много бесплатных, которые позволят
    вам это сделать. Другие стоят денег и таблетки на них нет, в силу того, что они obfuscated сами по себе. У нас есть такой тулз, которым
    я и смотрел весь ваш код - мне в принципе не сложно сделать для вас весь исходный код по всему namespace J89Y01. Но только сам
    исходный код - не более! На C# или на VB.NET - как скажете. Компилировать и проверять саму программу не буду - у меня нет половины
    тех компонентов (ActiveX, COM+), которые она использует и ставить я их у себя не буду. Далее получив код, вы сами сначала для
    нейтральной CultureInfo правите ресурс файл (редактором ресурсов в самой студии или любым внешним), затем добавляете языки.
    Нейтральная CultureInfo всегда en-EN. Затем компилируете и отлаживаете на предмет других ошибок. Вот и все. Устраивает?

    Правда, есть вот такая песня в коде нескольких форм:
    this.createTabControl("pgm1", "Şebeke Frek Alt Limit", "1", 1, 200, num2, Conversions.ToString(modFunctions.Mains_Freq_Low), 0, 0);
    Ключевое здесь ""Şebeke Frek Alt Limit" - данный параметр без переделки кода исправить невозможно, он в вызове метода, а не в
    ресурсе. То есть еще и логику придется переписывать. Чьи такие кривые ручки писали код? Тем более по автоматике.

    Добавлено через 59 минут
    UA0JFY
    Вдогонку по вашей программе. Есть и еще один момент с использованием констант в коде. То есть по исходному коду
    нужно будет пройтись с напильником и рашпилем. Фрагмент декларации констант ниже:
    public const string ShutDownEN547_0 = "Low Oil Press. Switch,High Temp. Switch,Low Coolant Level,Battery Charger Fail,Emergency Stop,Spare-1 Input,Spare-2 Input,Low Fuel Level Switch";
    public const string ShutDownEN547_1 = "Low Oil Press. Sender,High Temp. Sender,Genset Low Frequency,Genset High Frequency, Genset Low Voltage, Genset High Voltage, Fail to Start, Low Fuel Level Sender";
    public const string ShutDownEN547_2 = "Undefined Shutdown-16,Undefined Shutdown-17,Undefined Shutdown-18,High Battery Voltage, Charge Altern. Fail, J1939 ECU Alarm,Low Coolant Level AC,Undefined Shutdown-23";
    public const string ShutDownTR547_0 = "D\x00fcş\x00fck Yağ Bas. Kontak, Aşırı Hararet Kontak, D\x00fcş\x00fck Su Seviye Kontak,Redresor Arıza,Acil Stop,Yedek-1 Arıza,Yedek-2 Arıza,D\x00fcş\x00fck Yakıt Sev.Kont.";
    public const string ShutDownTR547_1 = "D\x00fcş\x00fck Yağ Bas. M\x00fcşir, Aşırı Hararet M\x00fcşir,Jenerat\x00f6r D\x00fcş\x00fck Frekans,Jenerat\x00f6r Y\x00fcksek Frekans,Jenerat\x00f6r D\x00fcş\x00fck Voltaj, Jenerat\x00f6r Y\x00fcksek Voltaj, Marşlama Hatası, D\x00fcş\x00fck Yakıt Sev.M\x00fcşir";
    public const string ShutDownTR547_2 = "Undefined Shutdown-16,Undefined Shutdown-17,Undefined Shutdown-18,Y\x00fcksek Ak\x00fc Voltajı, Sarj Alternator Arıza, J1939 ECU Baglanti Alarm,D\x00fcş\x00fck Soğutucu Seviyesi AC,Undefined Shutdown-23";
    Это вообще песня... Поскольку по сути это не просто константы, а комбинированные константы, разделенные ",". И для двух языков сразу при одной
    нейтральной Culture. За такой код руки вырывают с корнем сразу.
    Последний раз редактировалось RX1AL; 16.02.2011 в 14:04. Причина: Добавлено сообщение
    73! Михаил (OE6MAF) :: HB9/OE6MAF, DL/OE6MAF

  7. #7
    Low Power Аватар для UA0JFY
    Регистрация
    07.08.2006
    Адрес
    Амурская область
    Возраст
    70
    Сообщений
    94
    Поблагодарили
    7
    Поблагодарил
    13
    Цитата Сообщение от RX1AL Посмотреть сообщение
    Это вообще песня... Поскольку по сути это не просто константы, а комбинированные константы, разделенные ",". И для двух языков сразу при одной нейтральной Culture. За такой код руки вырывают с корнем сразу.
    Здравствуйте, Михаил. Посмеялся от души, как Вы разносите программеров турецких. Эта программа для мониторинга и управления контроллерами серии DKG от турецкой компании DATAKOM. У нас это используется в резервном источнике электропитания (дизель-генератор YANMAR). В целом программа(хоть и написана криво) с основной задачей справляется: т.е. и мониторит, и управляет. XML-ную часть программы, т.е. перевод надписей под приборами сделал примитивно в AkelPad. Работа с программой понятна, но хотелось, чтобы уж все на русском. Вот последовательно скрины (не все, а только те, что нужны для мониторинга)
    Цитата Сообщение от RX1AL Посмотреть сообщение
    Другие стоят денег и таблетки на них нет, в силу того, что они obfuscated сами по себе. У нас есть такой тулз, которым
    я и смотрел весь ваш код - мне в принципе не сложно сделать для вас весь исходный код по всему namespace J89Y01. Но только сам исходный код - не более! На C# или на VB.NET - как скажете. Компилировать и проверять саму программу не буду - у меня нет половины тех компонентов (ActiveX, COM+), которые она использует и ставить я их у себя не буду.
    С этой программой, похоже, все очень "сильно запущено", в плане существующих правил написания и оптимизации кода. Наверное и PIC-контроллер прошит соответствующим образом. Хотя в программе предусмотрено оперативное изменение различных параметров по их уровням. А также можно слить в файл прошивку, можно из файла залить. Ну, а в-общем, Михаил, Вам большой респект, чувствуется настоящий программер. А я так, чуть-чуть для себя. Еще раз спасибо. 73 de UA0JFY.
    PS Скрины последовательно не легли, смотреть 3-1-2
    Миниатюры Миниатюры Нажмите на изображение для увеличения. 

Название:	2.JPG 
Просмотров:	200 
Размер:	51.5 Кб 
ID:	45848   Нажмите на изображение для увеличения. 

Название:	3.JPG 
Просмотров:	220 
Размер:	151.3 Кб 
ID:	45849  
    Изображения Изображения  

  8. #8
    Very High Power Аватар для RX1AL
    Регистрация
    12.03.2007
    Адрес
    Грац, Австрия - Санкт-Петербург, Россия
    Возраст
    60
    Сообщений
    1,749
    Поблагодарили
    374
    Поблагодарил
    160
    UA0JFY:
    Александр, тут смеяться то, вообщем нечему - плакать надо... Вас можно в "" поздравить, что связались с Datakom Electronic
    Engineering Ltd. Очень знакомая компания, бывали мы у них в Стамбуле не раз. Дело там даже нe в программерах, а в менеджерах
    или технических лидерах, как они себя называют. Ни знаний, ничего, но пальцы крутить перед заказчиком - на ура! Правда, были
    весьма разочарованы, когда резко обломались. Тоже начали нам "вкручивать", как все здорово у них работает. Потом мы взглянули
    на их исходный код - разнесли его в пух и прах всей командой - надо было видеть лица. Естесственно, такое г... покупать никто не
    стал. В европах между прочим, тоже самое - плююсь уже который год от здешних программеров (не только студентов) на фирмах.
    Тихий ужас! Но оставим лирику, перейдем к прозе. Я ничего не могу сказать про прошивку EEPROM для PIC - всяко может быть,
    скорее всего там один турецкий будет. Но вот чего вам делать, реально не знаю. Один путь (правда, затратный по времени
    я вижу в полной декомпиляции исходного кода. Черт с ним, что он не оптимизирован - дело десятое! Я просмотрел уже весь код,
    там структуры нет вообще, так к слову. На коленке писали. Однако, имея весь исходный код, а он писался на VB.NET 2.0, то есть
    достаточно уже старенький (не 3.5 или 4.0), его можно легко превратить в рабочее состояние. Никаких супер-пупер визуальных
    контролей там нет. Используются стандартные, плюс пара типов Gauge. Без исходного кода - вы никогда не сможете локализовать
    данную программу, а имея исходники - сможете. Бенефит в том, что вы ее и модифицировать сами сможете, а также перевести и
    на новую платформу 3.5 или 4.0 (с WPF), если потребуется. Исходники наша группа может вам подготовить в течение месяца. Не
    безвозмездно конечно, но договориться всегда по договору можно. Если хотите, то можем заключить договор и на саппорт, а также
    на оптимизацию данного кода - ТЗ нам, и в принципе, препятствий нет. Тем более HMI+SCADA для промышленной автоматики,
    включая нефть, газ и т.д. - наш (и мой) основной профиль. Решайте. Ответ можно в ЛС, чтобы не забивать топик.

    PS Да, особенно убило наповал изменение языка через перезагрузку программы. Это кто же там шибко грамотный такой?
    Даже не в курсе, что на дотнете локализация работает давным-давно по принципу on-the-fly (на лету), ничего делать не
    надо - одно из серьезных преимуществ перед стандартными прогами с мульти-языковой поддержкой.

Похожие темы

  1. Посоветуйте программу для SDR
    от RV9WHU в разделе SDR техника
    Ответов: 15
    Последнее сообщение: 15.02.2011, 22:28
  2. Ищу программу для микрофона
    от Вадим Федорович в разделе Программное обеспечение
    Ответов: 4
    Последнее сообщение: 05.01.2010, 20:51
  3. Ищу программу
    от Русский в разделе Программы для телеграфа
    Ответов: 13
    Последнее сообщение: 23.01.2009, 23:41
  4. Оцените программу...
    от RX3X в разделе КВ аппаратура
    Ответов: 46
    Последнее сообщение: 24.11.2007, 19:55
  5. Ищу программу !
    от EW6DR в разделе Программное обеспечение
    Ответов: 2
    Последнее сообщение: 23.03.2006, 14:13

Социальные закладки

Социальные закладки

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •  
Похоже, что вы используете блокировщик рекламы :(
Форум QRZ.RU существует только за счет рекламы, поэтому мы были бы Вам благодарны если Вы внесете сайт в список исключений!
как отключить
×
Рейтинг@Mail.ru
eXTReMe Tracker


Похоже, что вы используете блокировщик рекламы :(
Форум QRZ.RU существует только за счет рекламы, поэтому мы были бы Вам благодарны если Вы внесете сайт в список исключений!
как отключить
×