Страницы: 1
RSS
Мультиязычная форма на базе XLS
 
Здравствуйте!

Нужно сделать возможность переключения языка интерфейса в UserForm.
Перевод - на листе Lang в Excel, позже прикручу function для перевода через Google Translate.
При выборе в Combobox0 "Rus" всё должно выбираться из столбца B, при выборе "Eng" - из столбца C и т.д.
Как это сделать? И можно ли ещё как-то упростить/улучшить заполнение формы?

Пример во вложении.
 
вот с этим сложно
ComboBox1.Item1
ComboBox1.Item2
ListBox1.List(0, 0)
ListBox1.List(0, 1)

а для остального - проще

при запуске форму, в событие UserForm_Initialize, добавляем строку кода
TranslateUserForm Me

пример кода - в файле по ссылке:
http://ExcelVBA.ru/sites/default/files/translate_userform.xlsb
 
Игорь, спасибо Вам!
Попробую прикрутить к своему примеру, хотя он сильно упрощён...
По факту текст/таблицы в ListBox'ах меняются при наведении на какой-то элемент формы.

Upd1: пока сделал перевод текста через GoogleTranslate. Вар.1 работает, но тормозит; Вар.2 должен быть быстрее, но не работает.
Можно ускорить вариант 1 или реанимировать 2-й?

Upd2: адаптировал код под свою UserForm.
Есть идеи, как сделать перевод Box'ов? Может не по TabIndex, а по имени элемента грузить?

Upd3: ещё немного доработал. Дальше продвинуться с переводом не могу.
Изменено: Acid Burn - 28.01.2016 22:01:15
 
Help!
 
Цитата
Можно ускорить вариант 1
нет
браузер IE славится своей тормознутостью
можно не запускать браузер IE, а использовать компонент WebBrowser на форме, - но лучше вряд ли станет

Цитата
реанимировать 2-й?
можно
но не нужно (если вы не хотите вводить капчу по нескольку раз, после переключения языка)
у меня на сайте была функция GoogleTranslate - сейчас там написано, почему такой вариант не сраобтает
http://excelvba.ru/code/GoogleTranslate

СОВЕТ: отказаться раз и навсегда от гугл транслейт
и перевод брать с листа, как в моем примере
вряд ли надписи на кнопках будут вводиться пользователем во время работы программы
а если надписи постоянные - их проще перевести один раз, и поместить переводы на лист (как вы это сделали)


Цитата
как сделать перевод Box'ов?
у вас есть функции tt(), которая переведёт на текущий язык фразу, по её коду
что-то типа такого
MsgBox tt("MSG_0001"), vbCritical, tt("MSG_0001_Caption")
только не надо было функцию внутрь формы совать, - теперь без загрузки формы функцию не вызвать (мало ли, понадобится перевод чего-то помимо формы)


Цитата
Может не по TabIndex, а по имени элемента грузить?
да как угодно.  вообще без разницы.
как вам удобнее, так и делайте
нам неведомо, какие данные там будут в реальности (и для чего все это делается)
потому, вряд ли кто подскажет что-то дельное
 
Цитата
Игорь написал:
MsgBox tt("MSG_0001"), vbCritical, tt("MSG_0001_Caption")
Игорь, не выходит у меня каменный цветок. Я уже часа 4 туплю над этим.
Проблема в том, что главный ListBox выступает в роли инфопанели - показывает подсказки к control'ам и выполняемые операции.
В нём иногда 1-2 строки, иногда таблица 7x8. Это вообще ставит меня в тупик.
Пожалуйста, помогите сделать перевод Box'ов и MultiPage, а также убрать глюки ComboLNG (у Вас он работал).
Изменено: Acid Burn - 29.01.2016 15:13:40
 
Кто-нибудь на каких-либо условиях может помочь с переводом?
 
Цитата
на каких-либо условиях...помочь...
Перенести в платный раздел?

Цитата
Нужно сделать возможность переключения языка интерфейса в UserForm
Я делал со сссылкой на лист, в котором в столбцах - одинаковые тексты на разных языках.
 
Т.е. каждой текстовой строке дать осмысленное имя; значение и перевод для каждого имени поместить на лист Excel.
В коде заменить значение имени на аналог впр(имя, таблица, № столбца). А изменение № столбца повесить на ComboLNG.
Так? Или как-то по-другому? Вечером попробую.
Изменено: Acid Burn - 29.01.2016 15:47:48
 
Почти. Имена не нужны.
При выбре языка данные листа заносятся в массив, из массива берем нужное.
 
Эх, как же я люблю размытые формулировки и многомерные массивы. )))
Хоть бы "рыбой" поделились с народом - это же не приватная переписка и точно уж не гос. тайна, да и форумчане не враги и не коммерсанты.
Особенно те, которые с Вами уже больше 3 лет. Но это я так... Не обращайте внимания...
Завтра буду дальше разбираться - сегодня погода и стресс победили.
 
Цитата
Acid Burn написал: Хоть бы "рыбой" поделились с народом
Ну, как бы... Посчитал, что Вы имеете достаточный опыт, давно ведь на форуме. Нарисуете и поделитесь :)

Цитата
форумчане не враги и не коммерсанты.  Особенно те, которые с Вами уже больше 3 лет.
пора уже, пора...

Если с массивами - никак, попытайтесь написать через условия:
Код
With Лист1
     If что-то Then 
          Label1.Caption=.Cells(5,1).Value ' тут чешский
     Else
          Label1.Caption=.Cells(5,2).Value ' тут китайский
     End If
End With
 
Таки вот перевод текста UserForm - работает с Multipage и т.д. Но:
1) не могу прикрутить GetInfo вместо KeyLang для определения языка.
2) есть проблема с функцией TR - по идее она должна добавлять строки без перевода (н-р, "Выполнить") на лист, переводить и считывать их.
Помогите доработать, please!
Изменено: Acid Burn - 22.02.2016 15:04:15
 
Acid Burn круто ты сделал.
____________________________________________
Для кого то это пара кликов решает все !
 
А как доделать, чтобы было лучше - ХЗ, перемкнуло.
Форум становится не тот, Гуру уже видимо не до нас, простых пацанов...
 
Acid Burn
редко но помогают !
и на том им спасибо !
____________________________________________
Для кого то это пара кликов решает все !
 
Да, я согласен!
И очень надеюсь, что кто-нибудь поможет доделать эту штуковину!
 
Acid Burn, удивляетесь, что не помогают?
а зря... почитайте правила форума, где написано, что один вопрос - одна тема.

был бы в теме ОДИН вопрос, с примером без всего лишнего,
с понятным описанием, что где должно получиться, - тогда да, помогут.
А при нынешней формулировке типа «не могу прикрутить GetInfo вместо KeyLang для определения языка, помогите», - вам вряд ли кто будет помогать.
Кому охота ковыряться в вашем коде, догадываться, что куда там надо прикручивать, и т.д.

Хотите, чтобы доделали за вас, - есть платный раздел на форуме.
Хотите бесплатной помощи, - не ленитесь понятно формулировать задачи, без лишнего кода, не забывая про «1 вопрос - 1 тема»
 
Игорь, я не представляю как ещё раздробить и без того мелкую тему и придумать названия этим "осколкам".
В коде минимум строк, всё прокомментировано.
Вопрос с TR решил. Остаётся KeyLang/GetInfo - определение текущего языка при загрузке UserForm.
Первый способ по раскладке клавиатуры (выдаёт цифру, н-р, 419), второй - по настройкам ОС (выдаёт имя языка, н-р, "русский").
Оба варианта работают. Но, если заменить KeyLang на GetInfo в составе UserForm_Initialize, это многое упростит.

Upd: чуть поправил и заменил файл: Перевод (рабочая версия).xls
Изменено: Acid Burn - 22.02.2016 15:07:11
 
Перевод (рабочая версия).xls меня в целом устраивает.
Подскажите, что надо поправить в Перевод (цель).xls, чтобы и оно тоже заработало?
Изменено: Acid Burn - 22.02.2016 15:09:25
 
Проблема в присвоении значений переменным. Пошагово пройдитесь по коду.
У Вас LngColumn = Empty, а Вы пытаетесь что-то записать в ячейку с ТАКИМ номером столбца
Согласие есть продукт при полном непротивлении сторон
 
Sanja, да я понимаю, что Empty. Не могу додуматься, как исправить...
Страницы: 1
Наверх