Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Мультиязычный интерфейс, Мультиязычный интерфейс 
:(
    Опции темы
sergio_1982
Дата 24.8.2007, 18:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Здраствуйте Ув. коллеги.

Подскажите пожалуйста, как сделать мультиязычный интерфейс в приложении? Например, по умолчанию интерфейс на русском, а при клике на пункт меню English, все компоненты меняют свои кепшины...

Заранее благодарен!
PM MAIL   Вверх
Bose
Дата 24.8.2007, 18:41 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1458
Регистрация: 5.3.2005
Где: Riga, Latvia

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



Посмотри The Kryvich's Delphi Localizer

Бесплатно и просто. 
PM MAIL WWW Skype   Вверх
ALeXandrK
Дата 24.8.2007, 22:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Bose @ 24.8.2007,  18:41)
Посмотри The Kryvich's Delphi Localizer

Бесплатно и просто.

А это чудо позволяет пользователям программ локализовать твое приложение 
(создать свой INI со своим переводом) или это может только разработчик?

Переформулирую: локализация происходит при загрузке исполняемого файла или во время компиляции?

Как понял, на сайте написано, что все записывается в INI, а значит любой может создать свою локализацию.

Это сообщение отредактировал(а) ALeXandrK - 24.8.2007, 22:06


--------------------
Богат не/ни тот, у кого много, а тот, кому хватает
PM WWW   Вверх
Bose
Дата 25.8.2007, 01:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1458
Регистрация: 5.3.2005
Где: Riga, Latvia

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



Цитата(ALeXandrK @  24.8.2007,  22:05 Найти цитируемый пост)
Как понял, на сайте написано, что все записывается в INI, а значит любой может создать свою локализацию.


Там на сайте есть HowTo в котором приведён весь код необходимый для загрузки:
Код

Application.Initialize;

FreeLocalizer.AutoTranslate := True;
FreeLocalizer.LoadLanguageFile := 'myapp.english.lng';


=) Т.е. получается, что локализация произходит при загрузке. 

И судя по всему, для того чтобы изменить язык не перезапуская программу придётся пересоздать все формы... 
PM MAIL WWW Skype   Вверх
lukas
Дата 25.8.2007, 09:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



я делал так локализацию...

Пробегаюсь по всем формам с помощью Screen, на каждой форме пробегаюсь по Контролам, и записываю все примерно так, в ини файл

[_form_]
c=
h=

[ObjectName]
c=
h=

Где c - Caption, а H - hint

Каждую форму записываю в файл название которого. <Имя формы>.lng 
В таком же духе читаю эту информацию.

Для локализации достаточно один раз запусть запись в lng, затем копировать все эти файлы в другую папку, и переводить. smile 

Можно также применить модуль TypInfo, тогда вообще все сделается очень быстро и для любых контролов.

Присоединённый файл ( Кол-во скачиваний: 12 )
Присоединённый файл  LocalLng.pas 12,05 Kb


--------------------
http://code.google.com/p/orionphp/ - opensource скриптовой язык Orion (аналог PHP) для freepascal/delphi.
PM MAIL WWW   Вверх
EvilsInterrupt
Дата 25.8.2007, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Executables research
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 14.7.2007
Где: Железнодорожный, МО, Россия

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



sergio_1982, Я покажу свой путь, как я сделал много-языковость ;)))
Первое: Я умел немного работать с XML-Data Binding`ом и поэтому пришел к выводу, что файлы настроек языка будут построены на XML
Второе: Я понял, что может быть и не быть, файла с языком, поэтому я сделал все не обходимое в дизайн-тайме и ран-тайме, т.е задал язык по умолчанию - выбрал англ. - т.к. пусть с горем-пополам но юзер разберется
Третье: Я понял что юзер может быть и не русским и англичанином, потому я сделал на юникоде )

Пришел к выводу, что все будет выглядеть так:
1. Прога ищет в папке запуска другую папку "language" и названия всех файлов с расширением lng выводит в окно настроек языка
2. в общем файле настроек задан файл языка к примеру "english" при заданном языке прога ищет в папке языков, если не нашла, то язык по дефолту
3. файл языка подчиняется стандарту к примеру:
Код

<?xml version = "1.0" encoding = "utf-8"?>
<Language Name="English">
  <TrayMenu
  About="About"
  Exit="Exit"
  />
</Language>

4. Дальше File->New->XML и жму XML Data Binding - формируется инклуд позваляющий очень просто работать с файлом настроек языка

ну а дальше дело техники ;)

Удачи
PM MAIL WWW ICQ Jabber   Вверх
ZBugz
Дата 26.8.2007, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 636
Регистрация: 15.2.2006
Где: Москва

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



А я этим пользуюсь, с юникодом дружит http://www.dk-soft.org/download.php?lang=ru&cat_id=4
PM MAIL   Вверх
MetalFan
Дата 26.8.2007, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

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



Цитата(lukas @  25.8.2007,  09:11 Найти цитируемый пост)
Пробегаюсь по всем формам с помощью Screen

ага, если формы динамически создаются?


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Bose
Дата 26.8.2007, 17:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1458
Регистрация: 5.3.2005
Где: Riga, Latvia

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



ZBugz, в DKLang все константы приходится заключать в функцию-обёртку?

А как там дело обстоит с resourcestring? Обращения к ним тоже нужно "оборачивать"?

The Kryvich's Delphi Localizer, насколько я понял сам выдаёт нужную "resourcestring" в зависимости от выбранного языка. Кстати, интересно, как у них это реализовано smile 
PM MAIL WWW Skype   Вверх
lukas
Дата 26.8.2007, 21:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



MetalFan, 

ну тут уж... твои проблемы... все равно они в Screen появятся... что еще можно лучше предложить... для статистических лучше решения не найдешь... по крайней мере вручную писать для каждого контрола ключики... не придеться...   а только лишь переводить... Это когда программа маленькая... с несколькими окнами... то можно в ручную, а когда в программе за 30 форм... то тут уж... на один перевод может уйти весь день.... (если вручную)  smile 


--------------------
http://code.google.com/p/orionphp/ - opensource скриптовой язык Orion (аналог PHP) для freepascal/delphi.
PM MAIL WWW   Вверх
ZBugz
Дата 27.8.2007, 08:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 636
Регистрация: 15.2.2006
Где: Москва

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



Цитата(Bose @ 26.8.2007,  17:39)
ZBugz, в DKLang все константы приходится заключать в функцию-обёртку?

А как там дело обстоит с resourcestring? Обращения к ним тоже нужно "оборачивать"?

The Kryvich's Delphi Localizer, насколько я понял сам выдаёт нужную "resourcestring" в зависимости от выбранного языка. Кстати, интересно, как у них это реализовано smile

Там все просто. Кидаешь компонент на форму. Он автоматом генерит все Caption всех компонентов на форме в файл. Ты его переводишь как хочешь. При добавление в проект новых компонентов, он тебе догенерит строки в исходный шаблон. Если ты удалишь DK и заново кинешь на форму, он перегенерит исходный файл,  причем 90% что подругому, т.е. номерация строк может отличаться.
Насчет resourcestring незнаю, непользовал, потому что мутерно.
PM MAIL   Вверх
Lence
Дата 28.8.2007, 00:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чухарадземадзупэ
*


Профиль
Группа: Участник
Сообщений: 209
Регистрация: 9.5.2006
Где: Ташкент

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



Если выбор языка зависит от языка ОС, то лучший вариант через resourcestring. Очень удобно когда много мессаг с одним текстом выпрыгивают. Один раз вбил и юзаешь его на протяжении все простыни проекта. 
Если же пользовательсам выбирает себе язык - то один из варинтов - который предложил lukas
Либо как обычный ини .
Я делал с ини.  Получилось следущее - создал отдельный модул с процедуркой принимающая булевые значения, на каждую форму  - тру или фалс. 
Код

procedure LoadingLang (AAppPath: String; ALogoLang, AMainLang, AContactLang : boolean) ;


а внутри проверял - если тру значит каждому компоненту на такойто форме присваивал значению caption стринг из ини ... 
примерно так

Код

  if ALogoLang then
    begin
      with frmLogo do
      begin
        lbLogin.Caption := IniFiles.ReadString(cLogoForm,'1','');
        lbPass.Caption :=  IniFiles.ReadString(cLogoForm,'2','');
        actLogin.Caption :=   IniFiles.ReadString(cLogoForm,'3','');
        actClose.Caption := IniFiles.ReadString(cLogoForm,'4','');
....


где 
Код

const
   cLogoForm = 'LogoForm';
...


тут же параллельно вводил в этот самый ини файлик сответствующий капшн... ключи - обчнфе цифры, не нужно выдумывать имена....
довольно удобно тем, что любой другой потом сможет перевести на свой язык и нормально работать с программой. Однозначно кодировку нужно указывать ... 
--------------------
Шуруп, забитый молотком, крепче сидит чем гвоздь, закрученный отверткой ....  
PM MAIL ICQ Skype   Вверх
ZBugz
Дата 28.8.2007, 07:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 636
Регистрация: 15.2.2006
Где: Москва

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



Цитата(Lence @ 28.8.2007,  00:21)
Если выбор языка зависит от языка ОС, то лучший вариант через resourcestring. Очень удобно когда много мессаг с одним текстом выпрыгивают. Один раз вбил и юзаешь его на протяжении все простыни проекта.


А я использую компонентик, там вбиваешь все стринги и вызываешь их когда тебе надо, т.е. все caption  находятся в нем. 
Ну и DKLang все это обрабатывает.
PM MAIL   Вверх
s-mike
Дата 31.8.2007, 09:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 425
Регистрация: 16.1.2005
Где: Киев

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



А почему про Integrated Translation Environment никто не вспоминает? Самый лучший способ, потому что не трубует никаких добавлений в код.

Еще есть трансляция GnuGetText для Delphi.
PM MAIL WWW   Вверх
lukas
Дата 31.8.2007, 18:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



например в моем коде... количество килобайт исчисляется даже не в десятки, а намного меньше... 


--------------------
http://code.google.com/p/orionphp/ - opensource скриптовой язык Orion (аналог PHP) для freepascal/delphi.
PM MAIL WWW   Вверх
Lence
Дата 2.9.2007, 01:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чухарадземадзупэ
*


Профиль
Группа: Участник
Сообщений: 209
Регистрация: 9.5.2006
Где: Ташкент

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



зачем добавлять лишний код компонентоа, когда можно написать самому, причем понимая то, что делаешь и размер нормальный.
--------------------
Шуруп, забитый молотком, крепче сидит чем гвоздь, закрученный отверткой ....  
PM MAIL ICQ Skype   Вверх
aktuba
Дата 3.9.2007, 09:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Смышленный
***


Профиль
Группа: Завсегдатай
Сообщений: 1915
Регистрация: 24.4.2006
Где: Планета Земля

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



Цитата

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


Зачем использовать Delphi, если можно написать на асме, "причем понимая то, что делаешь и размер нормальный"?
Зачем использовать VCL, если можно написать на WinAPI?

Да все за тем же - чтобы было меньше гемороя и проще вносить изменения...


--------------------
user posted image
PM MAIL WWW Skype   Вверх
EvilsInterrupt
Дата 3.9.2007, 10:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Executables research
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 14.7.2007
Где: Железнодорожный, МО, Россия

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



aktuba, В принципе можно сделать один раз универсальный компонент для языковой дури )))
Алгоритм:
1) Открыть XML
2) Прочитать очередное имя_атрибута
3) Сделать строку T | имя_атрибута, получим класс
4) Найти такой класс
5) Добавить значение атрибута в caption, text в зависимости от других свойств в атрибуте характеризующих компонент
6) Перейти к следующему ноду
PM MAIL WWW ICQ Jabber   Вверх
s-mike
Дата 3.9.2007, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 425
Регистрация: 16.1.2005
Где: Киев

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



И получим огромные тормоза при загрузке, так как поиск по неупорядоченному нехешированному строковому массиву (массив классов/кепшенов компонентов) занимает очень значительное время.
PM MAIL WWW   Вверх
HappyLife
Дата 3.9.2007, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Я создал очень простой класс.
Он требует добавить все "многоязыковые" компоненты вместе с заголовком и именем текста в INI в один большой список. Что-то типо
Код
Label.AddComponent(Edit1,'Title','Name')


В классе уществует метод
Код

SetLanguage('Eng')

После его вызова меняется INI файл и мой класс пробегается по всем добавленным в общий список компонентам и меняет их кепшены вместе с хинтами.
Очень хорошо работает.


Это сообщение отредактировал(а) HappyLife - 3.9.2007, 16:48
PM MAIL   Вверх
lukas
Дата 3.9.2007, 19:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



HappyLife, 

я же говорю можно пробежаться по всем компонентам на форме... и сделать типа параметра, если tag=13 значит не переводим... и т.д... этот метод я использовал в своей программе. (в моей подписи).. только в след. раз я использую кое что более лучшее чем ини-файл... загрузка будет моментальной... да и кстати с ини файлами загрузка перевода на более 30 форм очень быстрая... почти незаметная... ;)

Это сообщение отредактировал(а) lukas - 3.9.2007, 19:33


--------------------
http://code.google.com/p/orionphp/ - opensource скриптовой язык Orion (аналог PHP) для freepascal/delphi.
PM MAIL WWW   Вверх
aktuba
Дата 4.9.2007, 01:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Смышленный
***


Профиль
Группа: Завсегдатай
Сообщений: 1915
Регистрация: 24.4.2006
Где: Планета Земля

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



Цитата

aktuba, В принципе можно сделать один раз универсальный компонент для языковой дури )))
Алгоритм:
1) Открыть XML
2) Прочитать очередное имя_атрибута
3) Сделать строку T | имя_атрибута, получим класс
4) Найти такой класс
5) Добавить значение атрибута в caption, text в зависимости от других свойств в атрибуте характеризующих компонент
6) Перейти к следующему ноду 


Такой компонент даже есть =)))) Поищи на форуме - Quadr0 делал... Правда мне он показался неудобным...


--------------------
user posted image
PM MAIL WWW Skype   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


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

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


 




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


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

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