| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > VB6 > перевод интерфейса |
| Автор: alexandr10 14.4.2006, 15:31 |
| Захотел вставить в свою программу на VB6 перевод интерфейса (чтобы в зависимости от локализации винды надписи были на русском, английском, украинском языках). Создал res-файл, забил в него текст. Вставил в программу вместо простых строк текста обращения к этому файлу с помощью функции loadressting. Получившаяся в результате данных действий программа при запуске кода встроенным интерпретатором VB работает как надо - правильно выбирает текст при разных локальных настройках, но, к сожалению, откомпилированный exe-шник выдаёт текст только на русском языке (нет ни украинского ни английского). Подскажите пожалуйста, в чем тут дело и как исправить данную ситуацию. |
| Автор: Akina 14.4.2006, 16:06 |
| Не видя кода, сказать невозможно... а телепаты у нас в отпуске. Найти источник проблемы. Начать например с расстановки контрольных точек и отслеживания выполнения участков кода и значений переменных (сброс в текстовый лог и его анализ). |
| Автор: alexandr10 17.4.2006, 10:06 | ||
| Спасибо за ответ. Ничего такого секретного в коде, конечно же, нет. Вот процедура с которой происходит загрузка программы и сама процедура загрузки ресурсов.
Программу целиком, думаю приводить здесь не стоит, однако она открыта и я могу выслать её код целиком любому. Проблема, всётаки, как мне кажется не в коде программы – еще раз подчёркиваю в итрепретаторе VB6 программа работает как следует – происходит автоматический выбор текстовых переменных, согласно языковым настройкам винды, а вот после компиляции происходит выборка текстовых переменных только на русском языке. |
| Автор: Akina 17.4.2006, 10:28 | ||||
Сделайте следующее:
и посмотрите выполняется ли вообще процедура (появляется ли файл), выполняется ли переприсвоение свойства... если да, попробуйте в конец Form_Load добавить что-нить типа Form_Repaint... |
| Автор: alexandr10 18.4.2006, 10:05 | ||||
| Спасибо за совет. Сам я обычно пользуюсь для «дебагигнга» выводом MsgBox с необходимой переменной в нужном месте, однако такой способ мне кажется более культурным, хоть текст кода процедуры пришлось немного исправить, чтобы она нормально записывала протокол в файл:
Однако результат не сильно утешает, откомпилированная программа (в отличии от запускаемой из VB6) отказывается использовать текстовые переменные иных языков, кроме русского. Вот текст файла Debug.TXT 1-я часть соответствует запуску из VB6 , а 2-я откомпилированной программы (оба запуска происходили с украинскими локальными настройками):
Не помогло также присвоение свойству автоперерисовки формы значения “истина“. Буду ещё ждать Ваших предложений по поводу утранения этого бага. |
| Автор: boevik 18.4.2006, 10:35 | ||||
| Предлагаю отказаться от автоматического выбора языка по локальным настройкам. 1) Когда то такую же проблему не решил 2) Отказ от зависимости локальных настроек, позволяет менять язык по усмотрению пользователя. А для этого создается переменная BasisLanguage которй присваивается значение с шагом, к примеру, 1000 и тогда BasеLanguage = 0 соотвествует английскому, BasеLanguage = 1000 - русский, BasеLanguage = 2000 - украинский и т.д. Соотвественно в res файле надо создать записи соотвественно коду и языку К примеру:
В коде
|
| Автор: alexandr10 18.4.2006, 14:22 |
| Спасибо. Однако у меня нет пока желания доверять пользователю выбор языка интерфейса – ведь неизвестно на каком языке делать этот «выбор». Один мой товарищ (программист-философ), узнав о моей проблеме, посоветовал выяснить то, каким образом интерпретатор VB6 узнаёт локальные настройки компьютера (по всей видимости, он получает их из реестра через какую-то WinAPI-функцию) и как он ими распоряжается? Буду готов с благодарностью узнать ваше мнения на этот счёт. |
| Автор: Akina 18.4.2006, 14:41 |
Однозначно на английском. |
| Автор: cardinal 18.4.2006, 22:37 | ||
Посмотри вот тут http://www.activevb.de/tipps/vb6tipps/tipp0277.html Если надо что-то перевести - спрашивай... |
| Автор: alexandr10 19.4.2006, 13:26 |
| Большое спасибо, cardinal. Как мне кажется, предложенный Вами метод соответствует моему вопросу в наибольшей степени. Из предложенного Вами кода я собираюсь использовать значение соответствующее "Sprach ID" (если я всё правильно понял – оно даёт ID языка по умолчанию из локальных настроек винды, если нет, то, пожалуйста, поправьте меня). Однако, данный пример соответствует только считыванию локальных данных винды. У меня еще осталась вторая часть вопроса – как производить выборку строчных переменных из res-файла, если они принадлежат разным языкам, но имеют одинаковый номер? Способ, предложенный boevik мне понятен (да и был известен ранее). |
| Автор: cardinal 19.4.2006, 14:47 | ||
Я особо не всматривался, но похоже на то... |
| Автор: alexandr10 25.4.2006, 08:51 |
| Спасибо всем тем, кто откликнулся на мой вопрос. Отдельное спасибо, cardinal, благодаря которому удалось обойти баг в VB6 (к сожалению лишь обойти, но не устранить его). Результат работы откомпилирован и лежит по адресу: http://alex-dr-10.narod.ru/DominoX.2.02.zip |