![]() |
|
![]() ![]() ![]() |
|
NightWishMaster |
|
|||
Новичок Профиль Группа: Участник Сообщений: 41 Регистрация: 14.4.2006 Репутация: нет Всего: нет |
Есть программа, сделанная в C++ Builder 6 с украинским интерфейсом. Сейчас мне нужно организовать английский и русский языки. Как я себе это представляю – программа ставится по умолчанию с каким-либо языком (либо можно выбрать в инсталляторе). После этого можно выбрать в настройках любой язык.
Я только один раз делал программу с несколькими языками и тогда просто при изменении языка менял из программы надписи на всех элементах, а также проверял какой сейчас язык при выводе определенных сообщений. Но это конечно все не правильно и для программ по больше не годится – не хочется засорять код всякой чепухней. Подскажите, пожалуйста, как можно легче всего сделать то, что мне нужно (не хочется долго париться – времени в обрез)? Чтобы в будущем можно было легко добавить и другие языки в программу. Как это делают опытные люди? Заранее благодарен за все советы ![]() |
|||
|
||||
osmus |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 58 Регистрация: 12.6.2008 Репутация: нет Всего: нет |
Projekt---Languages---add.....
Расказать как это делается, несмогу, сам не делал, но читал в книге "Программирование С++Builder 6(Второе издание )" Понял что очень удобно и быстро, решил если буду писать под разные языки только описанным в книге методом, пока не чево другово не нашел. |
|||
|
||||
UniBomb |
|
||||
Новичок ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 1754 Регистрация: 24.10.2006 Где: Санкт-Петербург Репутация: 3 Всего: 97 |
Тут уже были подобные темы, надо было воспользоваться поиском. Самый практичный и удобный способо - это использование ini-файлов.
Радует стремление помочь, но это очень-очень-очень плохой способ. Во-первых нелогично увеличивается вес экзешника, во-вторых не самый удобный способ, т.к. при изменении количества и назначения контролов придёться вносить правки и в языковой лангпак, что не всегда очевидно и не всегда легко найти где менять. И самое главное - выбор языка будет отсутсвовать. Т.е. по желанию пользователя язык меняться не будет. При запуске программа смотрит локаль компьтера по умолчанию, и если она такой язык поддерживает, на таком и заговорит. Делается это с помощью ini файлов. В данном случае этот файл может иметь вид:
Далее в программе ты делаеш одну-единственную функцию, где считываеш все эти строки и выводиш их где надо. Плюс в том, что ты в любой момент можеш определить какие секции у тебя есть и динамически генерировать список поддерживаемых языков без перекомпиляции самой программы. Изменения самих надписей вестимо тоже не требуют перекомпиляции. |
||||
|
|||||
Sharkfire |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 236 Регистрация: 30.11.2006 Где: Одесса Репутация: 2 Всего: 2 |
Продолжe мысль UniBomb
Ты нумеруешь строки которые так или иначе у тебя будут в программе и делалешь:
и далее ты знешь что у тебя к примеру под номером 1 - заголовок главного окна. а к пимеру 21 - это какая-то там надпись, можешь сделать к примеру 1(главная форма)+2(надпись в главном меню) = 12 т.е. первая цифра - номер формы а 2-ая какая-то надпись. Так же само для сообщений: MessageBox(Language->Strings[43]); Лучше себе на бумажечку или в текстовичок выписываь индексы твоих надписей дабы избежать путаницы. Для автоматиацци твоего процесса локализации ты можешь все контроллы пронумеровать в свойстве Tag тогда, ипользуя оператор dynamic_cast ты можешь в одном цикле применить "языковацию" на все контолы, используя как индекс Tag ... |
|||
|
||||
dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 32 Всего: 158 |
![]() для 20 строчек - возможно и "прокатит", но для нормального проекта... ![]() зря люди напрягались и придумывали всякие константы, ассоциативные массивы, итд. - сотня-другая стикеров на рамке монитора решает! ![]() |
|||
|
||||
Dem_max |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 14 Всего: 39 |
создаешь отдельное файло *.h
тама
вот переопределение твоих циферок есть, один раз заполнишь, а дальше никаких мучений. Я бы тебе советовал всетаки использовать Ini файл для хранения языка, его всегда можно подредактировать, даже обычный пользователь. Можно конечно в ресурсах dll хранить, одна dll один язык, по мне лучше уж Ini файл [/code] Тот же Total Commander хранит язык в таком виде
-------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
||||
|
|||||
586 |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: 57 Всего: 146 |
Можно вместо цифр указать имена компонентов. А во время чтения ini-файла находить эти компоненты и задавать им значения. Задаваться значения будут примерно так:
Добавлено через 7 минут и 36 секунд пример ini-файла:
|
||||
|
|||||
Vyacheslav |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 47 Всего: 59 |
Все не читал, но Вы занимаетесь изобретением велосипеда.
Правильный ответ дал osmus. Это дейстивтельно довольно удобвно и практически не потребует изменения в коде. Используйте предоставленную возможность и без проблем можете локализовать все формы. Возможно придется все зашитые непосредственно в код сообщения , если они есть, перевести в ресурсы. -------------------- С уважением, Вячеслав Ермолаев |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++ Builder" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C++ Builder | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |