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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Создание многоязычного приложения 
:(
    Опции темы
ur5fcm
  Дата 19.11.2008, 23:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 1.10.2008
Где: Одесса, Украина

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



Подскажите как сделать многоязычную поддержку 

Проэктов на Visual Basic 6

спасибо smile 
PM MAIL WWW   Вверх
BorisVorontsov
Дата 19.11.2008, 23:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Thinker
**


Профиль
Группа: Комодератор
Сообщений: 714
Регистрация: 3.11.2005
Где: Молдавия, г. Киши нёв

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



Ну... Например, можешь хранить строки в ресурсах dll-ек, или в ini-файлах. Конкретизируй как-то вопрос.


--------------------
[code=cpp]
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;
[/code]
PM MAIL ICQ GTalk   Вверх
ur5fcm
Дата 19.11.2008, 23:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 1.10.2008
Где: Одесса, Украина

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



Цитата(BorisVorontsov @ 19.11.2008,  23:33)
Ну... Например, можешь хранить строки в ресурсах dll-ек, или в ini-файлах. Конкретизируй как-то вопрос.

Уже есть приложение 
Но оно на английском языке
Т.е. меню надписи и т.д.

Хотелось бы сделать переключение на русский язык и обратно

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


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


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

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



Начинай переписывать приложение, перенося все появляющиеся на экране надписи (с лейблов, кнопок, заголовков окон и пр.) в процедуру инициализации приложения. А когда будет готово, дополнишь эту процедуру считыванием всех этих надписей из файла, ресурса, получением из DLL или доставанием откуда-нить ещё - на что фантазии хватит.


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

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


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 1.10.2008
Где: Одесса, Украина

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



Цитата(Akina @ 20.11.2008,  00:04)
Начинай переписывать приложение, перенося все появляющиеся на экране надписи (с лейблов, кнопок, заголовков окон и пр.) в процедуру инициализации приложения. А когда будет готово, дополнишь эту процедуру считыванием всех этих надписей из файла, ресурса, получением из DLL или доставанием откуда-нить ещё - на что фантазии хватит.

Какую процедуру  всмысле 

Я не понял 

Насчет ресурсного файла понял 
Но как сделать  smile 

Не много сложно

Очень много форм и надписей 

Тяжело smile 
PM MAIL WWW   Вверх
Akina
Дата 20.11.2008, 00:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(ur5fcm @  20.11.2008,  01:12 Найти цитируемый пост)
Очень много форм и надписей 
Тяжело 

Есть другой вариант - не править проект, а написАть его заново, сразу закладывая мультиязычность.

Цитата(ur5fcm @  20.11.2008,  01:12 Найти цитируемый пост)
Какую процедуру  всмысле 

sub main()


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

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


Thinker
**


Профиль
Группа: Комодератор
Сообщений: 714
Регистрация: 3.11.2005
Где: Молдавия, г. Киши нёв

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



Цитата(ur5fcm @  20.11.2008,  00:12 Найти цитируемый пост)
Но как сделать


LoadResString или LoadString. Для загрузки dll используй LoadLibrary/FreeLibrary.


--------------------
[code=cpp]
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;
[/code]
PM MAIL ICQ GTalk   Вверх
XOXOJI
Дата 20.11.2008, 11:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 20.9.2008

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



пожно при инифиализации формы... form_load
читаешь из файла нужные позиции, и меняешь caption на нужные знасения
PM MAIL   Вверх
ur5fcm
Дата 20.11.2008, 21:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 1.10.2008
Где: Одесса, Украина

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



Привет Всем

Спасибо

Нашел в инете прогу Jonas ML Support shareware

Она посоздвала часть перевода ресурсный файл 

Дальше сам перевожу 


Использую его MLRuntime.dll
PM MAIL WWW   Вверх
ur5fcm
Дата 21.11.2008, 02:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 1.10.2008
Где: Одесса, Украина

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



Цитата(BorisVorontsov @ 20.11.2008,  10:13)
Цитата(ur5fcm @  20.11.2008,  00:12 Найти цитируемый пост)
Но как сделать


LoadResString или LoadString. Для загрузки dll используй LoadLibrary/FreeLibrary.

Да но LoadresString грузит только одну колонку 

допустим английскую 

У меня две колонки  Engl Russian

При использовании MLRuntime.dll 

Незнаю как сделано но взависимости от языка читается колонка

либо русская либо английская

Это сообщение отредактировал(а) ur5fcm - 21.11.2008, 02:22

Присоединённый файл ( Кол-во скачиваний: 7 )
Присоединённый файл  Clipboard02.jpg 11,79 Kb
PM MAIL WWW   Вверх
BorisVorontsov
Дата 21.11.2008, 10:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Thinker
**


Профиль
Группа: Комодератор
Сообщений: 714
Регистрация: 3.11.2005
Где: Молдавия, г. Киши нёв

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



Используй FindResourceEx + LoadResource. И не надо злоупотреблять переносами, твой пост от этого не становится более читабельным.


--------------------
[code=cpp]
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;
[/code]
PM MAIL ICQ GTalk   Вверх
ur5fcm
  Дата 21.11.2008, 16:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 1.10.2008
Где: Одесса, Украина

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



Цитата(BorisVorontsov @ 21.11.2008,  10:17)
Используй FindResourceEx + LoadResource. И не надо злоупотреблять переносами, твой пост от этого не становится более читабельным.

Можно приложить пример. У меня что-то не получается 
Что подставлять Hmodule lpName? 
Спасибо  smile  
PM MAIL WWW   Вверх
BorisVorontsov
Дата 21.11.2008, 18:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Thinker
**


Профиль
Группа: Комодератор
Сообщений: 714
Регистрация: 3.11.2005
Где: Молдавия, г. Киши нёв

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



Цитата(ur5fcm @  21.11.2008,  16:09 Найти цитируемый пост)
Что подставлять Hmodule


App.hInstace или тот хендл, что возвращает LoadLibrary.

Цитата(ur5fcm @  21.11.2008,  16:09 Найти цитируемый пост)
lpName


Имя (идентификатор) ресурса
Цитата(MSDN)

If IS_INTRESOURCE(x) is TRUE for x = lpType or lpName, x specifies the integer identifier of the type or name of the given resource. Otherwise, those parameters are long pointers to null-terminated strings. If the first character of the string is a pound sign (#), the remaining characters represent a decimal number that specifies the integer identifier of the resource's name or type. For example, the string "#258" represents the integer identifier 258. 



--------------------
[code=cpp]
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;
[/code]
PM MAIL ICQ GTalk   Вверх
ur5fcm
  Дата 21.11.2008, 22:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 1.10.2008
Где: Одесса, Украина

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



Цитата(BorisVorontsov @  21.11.2008,  18:01 Найти цитируемый пост)
If IS_INTRESOURCE(x) is TRUE for x = lpType or lpName

Спасибо!  Ничего так и не получилось. Функция FindResourceEx передает 0. Так и непонял где брать IS_INTRES....
 MSDN на сайте  читал. Где же пример?. Мне же надо  получить строковое значение а там Long
IS_INTRESOURCE(x) - где брать ее ?
Что подставлять lpType ? Я пробовал App.path & "\MY.RES
IS_INTRESOURCE(x) - это на c++ 
В Visual Basic нет такой АPi функции


Это сообщение отредактировал(а) ur5fcm - 21.11.2008, 23:20
PM MAIL WWW   Вверх
Akina
Дата 21.11.2008, 23:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(ur5fcm @  21.11.2008,  23:55 Найти цитируемый пост)
Функция FindResourceEx передает 0.

Цитата

Return Values
If the function succeeds, the return value is a handle to the specified resource's information block. To obtain a handle to the resource, pass this handle to the LoadResource function. 

If the function fails, the return value is NULL. To get extended error information, call GetLastError. 





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

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


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 1.10.2008
Где: Одесса, Украина

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



Цитата(Akina @  21.11.2008,  23:36 Найти цитируемый пост)
If the function fails, the return value is NULL. To get extended error information, call GetLastError. 


Ну и GetlastError  тоже ноль
PM MAIL WWW   Вверх
Akina
Дата 22.11.2008, 00:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(ur5fcm @  22.11.2008,  00:59 Найти цитируемый пост)
Ну и GetlastError  тоже ноль 

Под VB6 иначе и быть не может, вообще-то... ошибка давно сброшена промежуточными вызовами.


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

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


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 1.10.2008
Где: Одесса, Украина

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



Цитата(Akina @ 22.11.2008,  00:02)
Цитата(ur5fcm @  22.11.2008,  00:59 Найти цитируемый пост)
Ну и GetlastError  тоже ноль 

Под VB6 иначе и быть не может, вообще-то... ошибка давно сброшена промежуточными вызовами.

И что делать 
Что подставить вместо LpName 
Имя файла ресурсного или нет

hl = FindResourceEx(App.hInstance, RT_STRING, App.path & "\ur5fcm_log.RES", ml_CurrentLanguageId)

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


Thinker
**


Профиль
Группа: Комодератор
Сообщений: 714
Регистрация: 3.11.2005
Где: Молдавия, г. Киши нёв

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



Цитата(ur5fcm @  22.11.2008,  00:06 Найти цитируемый пост)
И что делать 


Юзать Err.LastDllError

Модератор: удалено

Это сообщение отредактировал(а) Akina - 23.11.2008, 20:50


--------------------
[code=cpp]
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;
[/code]
PM MAIL ICQ GTalk   Вверх
ur5fcm
  Дата 23.11.2008, 21:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 1.10.2008
Где: Одесса, Украина

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



Цитата(ur5fcm @  21.11.2008,  23:59 Найти цитируемый пост)
If the function fails, the return value is NULL. To get extended error information, call GetLastError. 


уже получилось. Помогли мне на Делфи написали библиотеку 
Там она четко извлекает а в VB6 - GetLastError выдает ошибку 1812
Что за ошибка?
PM MAIL WWW   Вверх
BorisVorontsov
Дата 23.11.2008, 21:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Thinker
**


Профиль
Группа: Комодератор
Сообщений: 714
Регистрация: 3.11.2005
Где: Молдавия, г. Киши нёв

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



Цитата(ur5fcm @  23.11.2008,  21:35 Найти цитируемый пост)
Что за ошибка?

Цитата

The specified image file did not contain a resource section. 


Ты что передавал в качестве hModule?


--------------------
[code=cpp]
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;
[/code]
PM MAIL ICQ GTalk   Вверх
ur5fcm
  Дата 23.11.2008, 21:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 1.10.2008
Где: Одесса, Украина

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



Цитата(BorisVorontsov @  23.11.2008,  21:50 Найти цитируемый пост)
Ты что передавал в качестве hModule?

App.hInstance передавал. Или надо что-то другое. Вроде правильно
PM MAIL WWW   Вверх
BorisVorontsov
Дата 24.11.2008, 10:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Thinker
**


Профиль
Группа: Комодератор
Сообщений: 714
Регистрация: 3.11.2005
Где: Молдавия, г. Киши нёв

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



Тьфу, не заметил строки кода в посте неизвестно_какой_номер (и почему на винграде посты не нумеруются?). В качестве lpName передавай строку "#_тут_ID_строки".


--------------------
[code=cpp]
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;
[/code]
PM MAIL ICQ GTalk   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "VB6"
Akina

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

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

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

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


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

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


 




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


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

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