Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> перевод интерфейса, res-файл 
:(
    Опции темы
alexandr10
Дата 14.4.2006, 15:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 14.4.2006
Где: Украина Харьков

Репутация: нет
Всего: нет



Захотел вставить в свою программу на VB6 перевод интерфейса (чтобы в зависимости от локализации винды надписи были на русском, английском, украинском языках). Создал res-файл, забил в него текст. Вставил в программу вместо простых строк текста обращения к этому файлу с помощью функции loadressting.
Получившаяся в результате данных действий программа при запуске кода встроенным интерпретатором VB работает как надо - правильно выбирает текст при разных локальных настройках, но, к сожалению, откомпилированный exe-шник выдаёт текст только на русском языке (нет ни украинского ни английского).
Подскажите пожалуйста, в чем тут дело и как исправить данную ситуацию.

PM MAIL WWW   Вверх
Akina
Дата 14.4.2006, 16:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 34
Всего: 454



Цитата(alexandr10 @ 14.4.2006, 16:31 Найти цитируемый пост)
в чем тут дело

Не видя кода, сказать невозможно... а телепаты у нас в отпуске.

Цитата(alexandr10 @ 14.4.2006, 16:31 Найти цитируемый пост)
как исправить

Найти источник проблемы. Начать например с расстановки контрольных точек и отслеживания выполнения участков кода и значений переменных (сброс в текстовый лог и его анализ).


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
alexandr10
Дата 17.4.2006, 10:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 14.4.2006
Где: Украина Харьков

Репутация: нет
Всего: нет



Спасибо за ответ.
Ничего такого секретного в коде, конечно же, нет. Вот процедура с которой происходит загрузка программы и сама процедура загрузки ресурсов.

Код


Private Sub Form_Load()
    Randomize
    NovStr = Chr(10) + Chr(13)
    NomSposobTasDom = 2
    SchVsexOtkrParDom = 0
    SchVuigrPartij = 0
    SchPartij = 0
    NumVidDom = 1
    Call MasSootv
    Call LoadResDom
    Call StartinGame
End Sub

Private Sub LoadResDom()

    For i = 0 To 6
        NumResDom = (NumVidDom * 10) + i
        DomForm1.DomIm(i).Picture = LoadResPicture(NumResDom, vbResBitmap)
    Next i
    
    DomForm1.CommandDom(1).Caption = LoadResString(101)
    DomForm1.CommandDom(3).Caption = LoadResString(102)
    DomForm1.LabelDom1.Caption = LoadResString(103)
    DomForm1.CommandDom(1).ToolTipText = LoadResString(104)
    DomForm1.CommandDom(2).ToolTipText = LoadResString(105)
    DomForm1.CommandDom(3).ToolTipText = LoadResString(106)
    DomForm1.LabelDom1.ToolTipText = LoadResString(107)
    DomForm1.LabelDom1.ToolTipText = LoadResString(107)
End Sub



Программу целиком, думаю приводить здесь не стоит, однако она открыта и я могу выслать её код целиком любому.
Проблема, всётаки, как мне кажется не в коде программы – еще раз подчёркиваю в итрепретаторе VB6 программа работает как следует – происходит автоматический выбор текстовых переменных, согласно языковым настройкам винды, а вот после компиляции происходит выборка текстовых переменных только на русском языке.
   

Это сообщение отредактировал(а) alexandr10 - 19.4.2006, 14:08
PM MAIL WWW   Вверх
Akina
Дата 17.4.2006, 10:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 34
Всего: 454




M
Akina
Пользуйтесь тегом "Код".

Сделайте следующее:

Код

Private Sub LoadResDom()

Dim Temp As Long

Temp = FreeFile
Open "Debug.TXT" For Appent As #FreeFile
Print #FreeFile, "Procedure LoadResDom started at " & cstr(Timer)

    For i = 0 To 6
        NumResDom = (NumVidDom * 10) + i
        DomForm1.DomIm(i).Picture = LoadResPicture(NumResDom, vbResBitmap)
    Next i
    
Print #FreeFile, "DomForm1.CommandDom(1).Caption befole LoadResString = " & chr(34) & DomForm1.CommandDom(1).Caption & chr(34)

    DomForm1.CommandDom(1).Caption = LoadResString(101)

Print #FreeFile, "DomForm1.CommandDom(1).Caption after LoadResString = " & chr(34) & DomForm1.CommandDom(1).Caption & chr(34)

    DomForm1.CommandDom(3).Caption = LoadResString(102)
    DomForm1.LabelDom1.Caption = LoadResString(103)
    DomForm1.CommandDom(1).ToolTipText = LoadResString(104)
    DomForm1.CommandDom(2).ToolTipText = LoadResString(105)
    DomForm1.CommandDom(3).ToolTipText = LoadResString(106)
    DomForm1.LabelDom1.ToolTipText = LoadResString(107)
    DomForm1.LabelDom1.ToolTipText = LoadResString(107)

Print #FreeFile, "Procedure LoadResDom completed at " & cstr(Timer)
Close #FreeFile

End Sub

и посмотрите выполняется ли вообще процедура (появляется ли файл), выполняется ли переприсвоение свойства... если да, попробуйте в конец Form_Load добавить что-нить типа Form_Repaint... 


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
alexandr10
Дата 18.4.2006, 10:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 14.4.2006
Где: Украина Харьков

Репутация: нет
Всего: нет



Спасибо за совет.
Сам я обычно пользуюсь для «дебагигнга» выводом MsgBox с необходимой переменной в нужном месте, однако такой способ мне кажется более культурным, хоть текст кода процедуры пришлось немного исправить, чтобы она нормально записывала протокол в файл:

Код


Private Sub LoadResDom()

Dim Temp As Long

Temp = FreeFile
Open "Debug.TXT" For Append As #Temp
Print #Temp, "Procedure LoadResDom started at " & CStr(Timer)

For i = 0 To 6
NumResDom = (NumVidDom * 10) + i
DomForm1.DomIm(i).Picture = LoadResPicture(NumResDom, vbResBitmap)
Next i

Print #Temp, "DomForm1.CommandDom(1).Caption befole LoadResString = " & Chr(34) & DomForm1.CommandDom(1).Caption & Chr(34)

DomForm1.CommandDom(1).Caption = LoadResString(101)

Print #Temp, "DomForm1.CommandDom(1).Caption after LoadResString = " & Chr(34) & DomForm1.CommandDom(1).Caption & Chr(34)

DomForm1.CommandDom(3).Caption = LoadResString(102)
DomForm1.LabelDom1.Caption = LoadResString(103)
DomForm1.CommandDom(1).ToolTipText = LoadResString(104)
DomForm1.CommandDom(2).ToolTipText = LoadResString(105)
DomForm1.CommandDom(3).ToolTipText = LoadResString(106)
DomForm1.LabelDom1.ToolTipText = LoadResString(107)

Print #Temp, "Procedure LoadResDom completed at " & CStr(Timer)
Close #Temp

End Sub



Однако результат не сильно утешает, откомпилированная программа (в отличии от запускаемой из VB6) отказывается использовать текстовые переменные иных языков, кроме русского. Вот текст файла Debug.TXT 1-я часть соответствует запуску из VB6 , а 2-я откомпилированной программы (оба запуска происходили с украинскими локальными настройками):
Код


Procedure LoadResDom started at 81699,08
DomForm1.CommandDom(1).Caption befole LoadResString = ""
DomForm1.CommandDom(1).Caption after LoadResString = "Нова гра"
Procedure LoadResDom completed at 81699,14

Procedure LoadResDom started at 81754,61
DomForm1.CommandDom(1).Caption befole LoadResString = ""
DomForm1.CommandDom(1).Caption after LoadResString = "Новая игра"
Procedure LoadResDom completed at 81754,83



Не помогло также присвоение свойству автоперерисовки формы значения “истина“.
Буду ещё ждать Ваших предложений по поводу утранения этого бага.





 
PM MAIL WWW   Вверх
boevik
Дата 18.4.2006, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1452
Регистрация: 31.5.2004
Где: Израиль

Репутация: 12
Всего: 35



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

А для этого создается переменная BasisLanguage которй присваивается значение с шагом, к примеру,  1000
и тогда BasеLanguage = 0 соотвествует английскому, BasеLanguage = 1000 - русский, BasеLanguage = 2000 - украинский и т.д.

Соотвественно в res файле надо создать записи соотвественно коду и языку
К примеру:
Код

1  new game
1001 Новая игра
2001 Нова гра

В коде 
Код

DomForm1.CommandDom(3).Caption = LoadResString(102+BasеLanguage)
DomForm1.LabelDom1.Caption = LoadResString(103+BasеLanguage)
DomForm1.CommandDom(1).ToolTipText = LoadResString(104+BasеLanguage)
DomForm1.CommandDom(2).ToolTipText = LoadResString(105+BasеLanguage)
DomForm1.CommandDom(3).ToolTipText = LoadResString(106+BasеLanguage)
DomForm1.LabelDom1.ToolTipText = LoadResString(107+BasеLanguage)

 


--------------------
Никогда не говори никогда
PM MAIL WWW   Вверх
alexandr10
Дата 18.4.2006, 14:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 14.4.2006
Где: Украина Харьков

Репутация: нет
Всего: нет



Спасибо.
Однако у меня нет пока желания доверять пользователю выбор языка интерфейса – ведь неизвестно на каком языке делать этот «выбор».

Один мой товарищ (программист-философ), узнав о моей проблеме, посоветовал выяснить то, каким образом интерпретатор VB6 узнаёт локальные настройки компьютера (по всей видимости, он получает их из реестра через какую-то WinAPI-функцию) и как он ими распоряжается?
Буду готов с благодарностью узнать ваше мнения на этот счёт.
 
PM MAIL WWW   Вверх
Akina
Дата 18.4.2006, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 34
Всего: 454



Цитата(alexandr10 @  18.4.2006,  15:22 Найти цитируемый пост)
неизвестно на каком языке делать этот «выбор».

Однозначно на английском. 


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
boevik
Дата 18.4.2006, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1452
Регистрация: 31.5.2004
Где: Израиль

Репутация: 12
Всего: 35



Цитата(alexandr10 @  18.4.2006,  14:22 Найти цитируемый пост)
Однако у меня нет пока желания доверять пользователю выбор языка интерфейса 

Простите, а кому как не пользователю решать на каком языке работать.
Выбор языка так же как и остальные элементы UI надо переводить на язык интерфейса. 


--------------------
Никогда не говори никогда
PM MAIL WWW   Вверх
cardinal
Дата 18.4.2006, 22:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 19
Всего: 99



Цитата(alexandr10 @  18.4.2006,  12:22 Найти цитируемый пост)
посоветовал выяснить то, каким образом интерпретатор VB6 узнаёт локальные настройки компьютера (по всей видимости, он получает их из реестра через какую-то WinAPI-функцию) и как он ими распоряжается?

Посмотри вот тут
http://www.activevb.de/tipps/vb6tipps/tipp0277.html
Если надо что-то перевести - спрашивай... 


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
alexandr10
Дата 19.4.2006, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 14.4.2006
Где: Украина Харьков

Репутация: нет
Всего: нет



Большое спасибо, cardinal.
Как мне кажется, предложенный Вами метод соответствует моему вопросу в наибольшей степени. Из предложенного Вами кода я собираюсь использовать значение соответствующее "Sprach ID" (если я всё правильно понял – оно даёт ID языка по умолчанию из локальных настроек винды, если нет, то, пожалуйста, поправьте меня).

Однако, данный пример соответствует только считыванию локальных данных винды.

У меня еще осталась вторая часть вопроса – как производить выборку строчных переменных из res-файла, если они принадлежат разным языкам, но имеют одинаковый номер? Способ, предложенный boevik мне понятен (да и был известен ранее).
 
PM MAIL WWW   Вверх
cardinal
Дата 19.4.2006, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 19
Всего: 99



Цитата(alexandr10 @  19.4.2006,  11:26 Найти цитируемый пост)
если я всё правильно понял – оно даёт ID языка по умолчанию из локальных настроек винды, если нет, то, пожалуйста, поправьте меня

Я особо не всматривался, но похоже на то... 


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
alexandr10
Дата 25.4.2006, 08:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 14.4.2006
Где: Украина Харьков

Репутация: нет
Всего: нет



Спасибо всем тем, кто откликнулся на мой вопрос. Отдельное спасибо, cardinal, благодаря которому удалось обойти баг в VB6 (к сожалению лишь обойти, но не устранить его).

Результат работы откомпилирован и лежит по адресу: http://alex-dr-10.narod.ru/DominoX.2.02.zip  
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "VB6"
Akina

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по VB обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB6 | Следующая тема »


 




[ Время генерации скрипта: 0.0713 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.