![]() |
Мультиязычность приложения Delphi.
Вот недавно столкнулся с необходимостью сделать в программе (ужа написаной) мультиязычный интерфейс, т.е. чтобы все Caption'ы и тому подобные свойства были на таком языке который выберет пользователь из моего списка.
Может кто нить уже занимался подобными вещами, посоветуйте как лучше сделать. Была идея хранить тексты в каком нить ini или xml файле, в Form.OnCreate сделать перебор всех компонентов и по имени компонента находить и присваивать нужный Caption. Недостаток этого метода в том что если имя компонента измениться то будет Exception. Ещё можно искать не по имени а по тому же Caption но тут ещё хуже. Хелп ми народ, подкиньте идейку. |
Цитата:
Код:
:rus |
В том то и дело что проек постоянно меняеться (развиваеться) и не исключено что имена компонентов нужно будет менять. допустим был какой нить Label12 а стал LbName
|
http://www.codenet.ru/progr/delphi/stat/multilang.php
Отличное решение, хотя я этот код фиксил. Уже не помню, как. |
В Delphi вроде есть что-то типа встроенной мультиязычности. Если рядом с исполняемым файлом положить библиотеку с переведенными ресурсами с расширением rus, то приложение будет использовать ресурсы из этой библиотеки.
|
мда...
https://forum.antichat.ru/thread142629.html не судьба соседние темы посмотреть? Тем более что в заголовке описана (более/менее) твоя проблема |
Цитата:
|
Цитата:
Цитата:
|
лооолл
1. Цикл 2. "Недостаток этого метода в том что если имя компонента измениться" ололо? не правда ли? |
=) ну ты ппц) чё написал то,сам понял?) ладно нехочу сориться, видимо друг друга не поняли.
|
Можно использовать компонент TsiLang
|
Сори что поднял эту тему, просто хотелось бы высказаться по результатам решения проблемы:
В Borland не лохи сидели и всё уже продумали. Локализация приложения осуществляется очень легко встроенными средствами. Итак, по шагам 1. открываем наш проект (который нужно перевести с русского на буржуйский ) и заходим в Project => Languages => Add 2. далее следуем указаниям мастера (выбираем язык, в нашем случае это English(UK) ENG). среда создаст Progect Group и ещё один отдельный проект. 3. Открывается программа Translation Manager в ней то мы и осуществляем весь перевод. Тут существует несколько подводных камней о которых я напишу ниже. 4. Всё перевели, сохранилии закрыли. теперь открываем проект который у нас создался автоматически в папке ENG и компилим его. 5. В результате компиляции сформируеться файл Project1.ENG в котором находяться все наши труды и старания по переводу. 6. Тут возникает вопрос, как указать при запуске какой интерфейс мы хотим видеть в программе (наш родной русский или буржуйский из файла project1.ENG). Регулируеться это всё дело значение в реестре HKCU\Software\Borland\Lacales\ (необходимо добавить текстовое значение с полным патчем к файлу, например c:\Progect1.exe) если значение ключа ENG то все строки беруться из Project1.ENG иначе всё по умолчанию на русском. ПОДВОДНЫЕ КАМНИ И УКАЗАНИЯ ПО ЛОКАЛИЗАЦИИ Я уверен что опишу далеко не все, но вот те с которыми столкнулся я. 1. Все строки(которые вы желаете перевести) в коде нужно вывести в resourcestring только там их можно увидеть Translation Manager'ом. (даже те строки которые у вас в разделе const) Пример : Код:
былоЗаключение При добавлении/изменении строк, имён объектов в проекте мы заходим в project => Languages => Update и переводим добавленные строки. На мой взгляд всё очень просто и удобно. Будут вопросы пишите. PS. Сори за знаки препинания... торопился. |
А я как-то сталкивался с этой проблемой:
Просто в массив со строками заносил строки нужного языка, а caption'ам присваивал значение элемента массива, единственное если много слов нужно мто много элементов в которых легко запутатся. |
20ldbi4 У меня в приложении около 3к строк было.
Возникла её одна проблема... сервисы по такой схеме не работают. в реестре пишу например строковое значение C:\123\MyService.exe содержащее ENG в папке 123 лежит 2 файла MyService.exe и MyService.ENG. И при всём при этом сервис один хнр запускается на русском. Ребят.... есть мысли? |
| Время: 17:59 |