![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| mohax |
|
|||
|
Unregistered |
Приветствую!
У меня такой вопрос: есть большой проект, >70 форм, >40000 строк кода. Все на русском языке. Сейчас понадобилось добавить англ язык. Как лучше это сделать? Ведь перевести надо не только текст на формах, но и в коде тоже... |
|||
|
||||
| Плаха |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 126 Регистрация: 10.11.2004 Где: МО п. Киевский Репутация: нет Всего: нет |
поиши компоненты. гдето я подобное встречал.
Посмотри компонет JoGaLang Это сообщение отредактировал(а) Плаха - 24.8.2005, 09:08 --------------------
Принимай то что есть и устраивайся как хочеш |
|||
|
||||
| mohax |
|
|||
|
Unregistered |
Плаха
интересный компонент... но загвоздка в том что мне нужно "добавить" второй язык и когда пользователь выбирает тот или иной язык, то приложение переключается на него "на лету". Как вот совместить в переводе "на лету" строки с формы и строки из кода... |
|||
|
||||
| Dimannn |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 318 Регистрация: 14.4.2005 Где: Владимир Репутация: нет Всего: 1 |
Вот. Долго искал. Нашол.
Правда несовсем красиво. Может, кто подскажет, как зделать что-то типа этого: If Obj has Caption then Obj.Caption .. -------------------- Хотите быстро и без проблем опубликовать вашу программу в сети за 5 минут? Тогда потратьте пару минут чтобы посмотреть, что предлагает OpenProject.org.ru |
|||
|
||||
| Delphins |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 93 Регистрация: 10.8.2005 Где: Россия, Краснодар Репутация: нет Всего: нет |
Так ты пиши компоненыт у которых есть Caption или Text. А код выведи в константы и потом какнить юзай. |
|||
|
||||
| Illusion Dolphin |
|
||||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1198 Регистрация: 3.5.2003 Репутация: 36 Всего: 63 |
и ещё:
imho, как-то так -------------------- В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен. Шифрование и организация фотографий - Photo Database 4.5 |
||||||
|
|||||||
| Dimannn |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 318 Регистрация: 14.4.2005 Где: Владимир Репутация: нет Всего: 1 |
Почему же не надо. Так он толлько у форм каптион поменяет. Добавлено @ 20:02 Тока что попробовал. Действительно так. -------------------- Хотите быстро и без проблем опубликовать вашу программу в сети за 5 минут? Тогда потратьте пару минут чтобы посмотреть, что предлагает OpenProject.org.ru |
|||
|
||||
| TP@MB@Y |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 370 Регистрация: 18.12.2004 Где: Москва Репутация: нет Всего: 4 |
По сабжу:
Можно создать матрицу строк размера M*N, где M - кол-во текстовых констант, а N - кол-во языков. Заполнить. В настройках сделать выюор языка (например через радиопереключатели), а в ходе программы выводить соответствующие константы. Идея думаю ясна. |
|||
|
||||
| bel_nikita |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Эксперт Сообщений: 2304 Регистрация: 12.10.2003 Где: Поезд №21/22 ( ст . Прага ) Репутация: нет Всего: 47 |
Можно обойтись без матрицы, а использовать XML
Не знаю, как тут у Вас в Дельфях, но у меня в Сях так: Идея такова, что нужен XML-парсер и метод GetString(), который будет извлекать из *.xml файла нужный перевод в зависимости от языка. Ваша программа прежде, чем вывести, что-либо на форму вызывает метод GetString() с текущим, заданным языком, который возвращает перевод. Причем, если в xml файле мы не находим нужный нам clause name, то мы его записываем в файл. Таким образом мы пишем, отлаживаем программу, а она сама записывает все стандартные(дефолтные) строки в файл. А потом только вставляем нужный перевод и локализация готова.
|
|||
|
||||
| mohax |
|
|||
|
Unregistered |
Способ с хмл понравился)) не подумал об этом, хотя в проекте активно используется эта технология...
У меня немного другой вопрос - нужно же перевести все строки на русском языке в коде... Например тут - "if StatusStr = 'не распознан' then ..." или "ShowMessage('Нет распознанных файлов!');" То есть надо как-то собрать все строки и заменить их в коде на переменные? Пример - "ShowMessage(TranslateStr1);" А значения переменных меняются в зависимости от выбранного языка... Самая проблема как это сделать без больших затрат времени и самым оптимальным способом |
|||
|
||||
| bel_nikita |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Эксперт Сообщений: 2304 Регистрация: 12.10.2003 Где: Поезд №21/22 ( ст . Прага ) Репутация: нет Всего: 47 |
Ну тут либо ручками, либо написать програмку, которая будет парсить паскалевсткий файл. Вместо 'а-ля строка' ставить переменную, а эту 'а-ля строка' записывать в файл. Т.е. в файл будет выглядеть следующим образом:
А дальше, берешь этот файл и вставляешь в проект. В итоге, переменные готовы. Делаешь ребилд проекта, и добовляешь локализацию З.Ы.: ИМХО. Сам так никога не пробывал, но думаю это один из возможных методов. Тем более написать парсер - никаких проблем, просто икриментируешь и записываешь в файл найденые строки. |
|||
|
||||
| offline |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 474 Регистрация: 7.2.2005 Репутация: нет Всего: 7 |
||||
|
||||
| Delphins |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 93 Регистрация: 10.8.2005 Где: Россия, Краснодар Репутация: нет Всего: нет |
kirillliusNo input file specified.
А еще можно взять какойнить эксперт для дельфи, например ModelMaker Code Explorer. И так в меню есть Wizard. Так он все такие строки собирает. А потом ты ими можеш пользоваться. Удобно! |
|||
|
||||
| offline |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 474 Регистрация: 7.2.2005 Репутация: нет Всего: 7 |
||||
|
||||
| offline |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 474 Регистрация: 7.2.2005 Репутация: нет Всего: 7 |
Можно сделать следующее:
Заготовить ini фай с переводами следующей структуры [язык] имя компонента1 = перевод имя компонента2 = перевод имя компонента3 = перевод … сообщение1 = перевод сообщение2 = перевод … Пример [Russian] forma = Мои фотографии butAdd = Добавить butEdit = Редактировать message1 = Фотография уже существует! [English] forma = My photos butAdd = Add butEdit = Edit message1 = Photos ...! [Germany] ... Затем
Код может содержать ошибки, т.к. не проверен, но думаю, что смысл понятен. Будут переведены те компоненты имя которых содержится в ini файле. Перевод сообщений выглядит также. Нужно создать процедуру или функцию в которую отправляешь язык и номер сообщения, а она возвращает текст сообщения, который и подставляется в сообщение. |
|||
|
||||
| allx |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 73 Регистрация: 1.9.2005 Репутация: нет Всего: нет |
Для фриварных программ удобно делать так, чтобы сами юзеры могли быстро создавать свои переводы.
Я делаю так:
Плюс в том что многократно повторяющиеся элементы в ini-файле переводить не надо - удобство для переводчиков. Минус думаю всем ясен. Придется писать громоздкую процедуру считывания локализованных заголовков ... (Label1.caption:=ReadLocalizedValue('File'); и так по каждому элементу) INI-Файл выглядит так:
Если сразу предположить наличие многоязыковости, то времени лишнего отнимает лишь малость. |
||||
|
|||||
| offline |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 474 Регистрация: 7.2.2005 Репутация: нет Всего: 7 |
ага, я посмотрю, как ты создашь перевод китайской программы ;) |
|||
|
||||
| allx |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 73 Регистрация: 1.9.2005 Репутация: нет Всего: нет |
kirilllius
Ни разу в жизни не пользовался китайской программой Вопрос к народу. Кто-нибудь пробовал выносить все строки в ресурсы, и можно ли селать MUI-файлы с дельфийскими ресурсами, чтобы все автоматом работало? Может есть какой-нить компонент который этим занимается? |
|||
|
||||
| offline |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 474 Регистрация: 7.2.2005 Репутация: нет Всего: 7 |
посиотри мои ответы выше, там я скидывал ссылки на компоненты.
|
|||
|
||||
| allx |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 73 Регистрация: 1.9.2005 Репутация: нет Всего: нет |
kirilllius
Спасибо! Чет ссылки среди кода сразу я не заметил. Интересная статейка про локализацию. Это сообщение отредактировал(а) allx - 3.9.2005, 10:03 |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |