![]() |
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]() ![]() ![]() |
|
-= DEMON =- |
|
|||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 22.7.2002 Где: Санкт-Петербург Репутация: нет Всего: нет |
Всем добрый день!
Как создается мультиязычное приложение? Нет ли у кого ссылки на документацию? |
|||
|
||||
Step |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5151 Регистрация: 26.9.2002 Где: дурдом.UA Репутация: нет Всего: 25 |
Технология очень проста, все строки выносишь в отдельный файл и создаеш дублежи этих файлов только на разных языках, и при необходимости просто пользуесся тем или иным, а также необходимо сделать несколько одинаковых меню, но на разном языке и тоже его переключать. Это если просто.
если сложно то это делается на основе создания ДЛЛ библиотек на разных языках. -------------------- - Дурак учится на своих ошибках, умный на чужих. - умные учатся у дураков |
|||
|
||||
AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: нет Всего: 118 |
В принципе Step практически указал путь. Могу только от себя добавить
MSDN - National Language Support. Надо почитать и подумать. Если будут уже конкретные вопросы - welcome. Народ не даст тебе погибнуть ![]() |
|||
|
||||
Technoboss |
|
|||
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 22.11.2002 Репутация: нет Всего: нет |
Привет!
Я посоветую использовать INI файл. [Rus] Button1=Отмена [Engl] Button1=Cancel и т.д Создание нескольких файлов влечет за собой заметное снижение скорости работы приложения. |
|||
|
||||
Technoboss |
|
|||
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 22.11.2002 Репутация: нет Всего: нет |
Да, совсем забыл!
Из собственного опыта. Необходимо пользоваться своими шрифтами для каждого языка, другие пути (определение Default Charset) и прочее не дают желаемого результата. |
|||
|
||||
XpyDi |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 114 Регистрация: 25.11.2002 Где: USSR Репутация: нет Всего: 2 |
Может будет полезно вот стандартные возможности которые предоставляет Delphi 5, я думаю нужно вначале ознакомиться с ними, чтобы искать другие пути решения этой проблемы.
Итак поехали: Delphi 5 предоставляет новые удобные средства создания приложений в различных языковых версиях. Для создания таких приложений используется набор средств под общим названием International Translation Environment. Проиллюстрируем эти возможности на простейшем примере. Предположим, нам нужно создать приложение, существующее в русской и английской версии. Создадим новый проект, состоящий из одной формы с несколькими интерфейсными элементами, и сохраним его: Далее выберем из главного меню опцию Project/Language/Add. В результате будет запущен эксперт, предлагающий последовательность форм, в которых следует выбрать поддерживаемые проектом языки ![]() В результате будут созданы два дополнительных проекта динамически загружаемых библиотек, содержащих строковые ресурсы для двух языков, и автоматически запущен Translation Manager ![]() Translation Manager представляет собой, по существу, редактор строковых ресурсов, которые могут присутствовать в форме. В нем отображены сведения о тех свойствах интерфейсных элементов, которые могут быть различными в различных языковых версиях приложения. В числе этих свойств - не только свойства типа Caption или Text, но и иные визуальные характеристики, например, Height и Width. Помимо этого, в строковых ресурсах присутствуют и стандартные строки (названия дней недели и месяцев, сообщения об ошибках, названия общеупотребимых кнопок типа "Yes", "No", "Cancel", "Help", и др.). Отредактируем в нашем примере названия интерфейсных элементов ![]() Теперь мы можем выбрать опцию Project/Languages/Set Active и выбрать один из доступных языков. Скомпилировав приложение, получим нужную языковую версию ![]() ![]() При поставке такого приложения следует не забыть скопировать в его каталог один из двух скомпилированных файлов ресурсов, имеющих в нашем случае расширения *.ENU и *.RUS и имя, совпадающее с именем исполняемого файла. Отметим, что языковые версии строк можно сохранить в специальном хранилище (так называемомTranslation Repository - репозитарии переводов) и загружать из него. Данный репозитарий является разделяемым, что позволяет использовать его при групповой работе. |
|||
|
||||
Step |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5151 Регистрация: 26.9.2002 Где: дурдом.UA Репутация: нет Всего: 25 |
Это конечно хорошо, вот только я не уверен, что эта вещь сможет учесть все строковые переменные проекта, уж их слишком много, и в разных местах, и представлены по разному и т.д. и т.п. и как правило без глюков в этом аспекте не обойдется -------------------- - Дурак учится на своих ошибках, умный на чужих. - умные учатся у дураков |
|||
|
||||
XpyDi |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 114 Регистрация: 25.11.2002 Где: USSR Репутация: нет Всего: 2 |
Скорее всего что-то будет очень неудобно использовать в своих программах. А по поводу того, что сможет эта "вещь" учесть все строковые переменные проекта или нет, то это я думаю уже зависит от автора/руководителя проекта. |
|||
|
||||
Fantasist |
|
|||
![]() Лентяй ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1517 Регистрация: 24.3.2002 Репутация: нет Всего: 41 |
XpyDi: Отлично! Надо только маленько поподробнее, с примерами, и будет неплохая статья.
-------------------- Волны гасят ветер... |
|||
|
||||
Fantasist |
|
|||
![]() Лентяй ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1517 Регистрация: 24.3.2002 Репутация: нет Всего: 41 |
Никто за тебя ВСЕ строковые переменные учесть все равно не сможет. Твоя задача организовать проект так, чтобы учестывать их было как можно легче. -------------------- Волны гасят ветер... |
|||
|
||||
Alex |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4147 Регистрация: 25.3.2002 Где: Москва Репутация: 80 Всего: 162 |
Месяца три назад сам столкнулся с проблемой перевода своего приложения на разные языки. После долгих поисков и разбирательств остановил свой выбор на стандартном методе перевода, который в строен в delphi, так как он лишен одного недостатка которым обладают все остальные методы, которые я встречал. А недостаток, вот какой все методы перевода хорошо работают, когда нужно перевести саму форму, но ужасно или вообще не работают с переводом сообщений и разных других строк, вставленных в код, в том числе и констант в которых лично я и храню все строки, а по коду просто обращаюсь к константам. При реализации в своем приложении других я зыков мне пришлось только заменить слово Const на resourcestring.
Примером может служить демо проект RichEdit, который входит в состав delphi. Будут проблемы, пишите. -------------------- Написать можно все - главное четко представлять, что ты хочешь получить в конце. |
|||
|
||||
Гость_Sergun |
|
|||
Unregistered |
Так, а кто нибудь конкретный пример может привести
![]() |
|||
|
||||
stab |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1839 Регистрация: 1.1.2003 Репутация: 14 Всего: 48 |
в хелпе вычитал про динамическую смену языков:
procedure TForm1.Button1Click(Sender: TObject); const RUS = (SUBLANG_NEUTRAL shl 10) or LANG_RUSSIAN; begin if LoadNewResourceModule(RUS) <> 0 then ReinitializeForms; end; все бы хорошо, только все published свойства компонентов сбрасывются в то состояние кокое они имели при разрботке, т.е.: 1. Есть Form1 2. В процессе работы с прогой Form1 была максисмизированна 3. Меняем язык 4. Form1 имеет позицию как при разработке, при чем состояние максимизации не верно обрабатывается... т.е. все выглядит так как будто приложение только что запустили ![]() как быть? мысли? может как-то можно изменять только свойства, которые реально имеют перевод? з.ы. LoadNewResourceModule и ReinitializeForms в модуле ReInit, который лежит в $(DELPHI)\Demos\RichEdit -------------------- 6, 6, 6 - the number of the beast. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "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. |