Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Чем локализовать интерфейс? [D6, WinXP]


Gemini ©   (2004-09-20 12:53:00) 

Подскажите чем воспользоваться для перевода интерфейса программы? Нужен бесплатный компонент, который держит перевод в отдельном текстовом файле желательно вида 1234="Правка". В отличие от BalmsoftPolyglot'а у которого Label.Caption="Правка". Было-бы изумительно если бы с его помощью можно было бы переводить не только компоненты, лежащие на форме, но и скажем сообщения, диалоги. Или такое: в зависимости от вида вызова форме дается разный Caption. Вот чтобы и его перевести.


Iconka   (2004-09-21 10:45:00) [1]

Тогда вывод такой: из описанных двух способов используй который тебе больше подходит.


DiamondShark   (2004-09-20 20:23:00) [2]


> Iconka ©   (20.09.04 18:48) [17]
>
> > Размеры (а и ногда и расположение) элементов
> > управления, графические элементы -- это тоже предмет
> > локализации.
>
> Можно пример?

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

Графические элементы.
Американский офис, кнопки форматирования [ B] [ I] [ U]
Русский офис -- [ Ж] [ К] [ Ч],
Иконка, обозначающая операцию "отсортировать" A->Z в американском офисе или А->Я в русском.

Могут быть более тонкие моменты.


Iconka   (2004-09-20 18:54:00) [3]


> не юзерское это дело интерфейс переводить

А кто ж это будет делать? Тем более за регистрация они с удовольствием этим занимаются. Или у тебя есть знакомый переводчик знающий пару десятков языков?


Iconka   (2004-09-20 18:48:00) [4]


> Размеры (а и ногда и расположение) элементов
> управления, графические элементы -- это тоже предмет
> локализации.

Можно пример?


DiamondShark   (2004-09-20 18:37:00) [5]


> Gemini   (20.09.04 17:57) [15]

Ну, хозяин -- барин, конечно.
Просто, как мне кажеЦа,
а) не юзерское это дело интерфейс переводить
а.1) если уж у юзера нет других более интересных дел, как переводить интерфейс, он вполне может перевести исходники ресурса

б) локализация -- это, всё-таки, не просто перевод строк. Размеры (а и ногда и расположение) элементов управления, графические элементы -- это тоже предмет локализации.

в) инструмент уже готов и встроен в средство разработки.


Gemini   (2004-09-20 17:57:00) [6]


> DiamondShark ©   (20.09.04 17:32) [14]

Держать переведенные DFM не есть хорошо. Нужно в тексте. Чтобы не все мне переводить, а и конечный юзер мог пособить.


DiamondShark   (2004-09-20 17:32:00) [7]

Неистребима в народе тяга к изобретению велосипедов...


Экспериментатор   (2004-09-20 17:03:00) [8]

И по поводу добавленных свойств.
Все это можно реализовать в пять секунд.
Работать будет со свистом.


Экспериментатор   (2004-09-20 16:59:00) [9]

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


Экспериментатор   (2004-09-20 16:57:00) [10]

А почему не нравится если в файле назыания компонентов = потому что их нужно обзывать как нибудь? или еще причина какая?


Gemini   (2004-09-20 16:48:00) [11]


> Экспериментатор   (20.09.04 16:17) [9]

 Спасибо. Это BalmsoftPolyglot умеет. Чего в нем не нравится: 1)вываливает в языковой файл названия компонентов; 2) не работает с добавленными мной свойствами; 3) показываю я юзеру какое-нибудь сообщение. Как его перевести Polyglot'om не представляю.
 Похоже буду писать сам что-то вроде того о чем писал Iconka.


Экспериментатор   (2004-09-20 16:17:00) [12]

Если интересует могу прислать
свой вариант только сохраняет он все в виде типа lbl_Edit.Caption="Правка", есть только один нюанс, но он самый главный - для перевода тебе не надо потом писать типа Label1.caption := "значение взятое из файла перевода"
Для поиска контролов используется функция в которой используются методы RTTI для поиска нужных свойств у объектов (таких как HINT, Caption, Text и т.д. - если нужно что-то еще - это легко добавить).
Достаточно вызвать эту функцию либо в конструкторе, либо ручками после создания формы - это все что нужно сделать.
Сам файл перевода создается автоматически при первом запуске но с пустыми полями, которые естественно не загружаются в форму, если они пустые.
Также в свое время написал редактор файлов перевода - писать было особенно нечего (сделан с использованием компонента Object Inspector из Jedy + фенька для редактора на скорую руку, но достаточно удобен). Для загрузки перевода интерфейса не нужно перезапускать программу. Для поиска файлов перевода есть также пара функций, которая создает меню с пунктами в наименовании которых содержится имя файла перевода без расширения (достаточно просто, но рутина все-таки) - например как в BSPlayer'e.
В общем достаточно функциональная вещь. Единственная морока - это перевод сообщений, но тут все в ваших руках - такой автоматизации как с объектами (контролами) это не поддается, но для этого есть пара функций облегчающих жизнь.
Если нужно, напишите мне -  я пришлю вам все необходимое.

Вообще наверно стоит написать статью с исходным кодом для DelphiMaster. Это тема...


icebeerg   (2004-09-20 15:26:00) [13]

hands.dll если не ошобаюсь 8))))


ghg   (2004-09-20 13:28:00) [14]

>Iconka ©   (20.09.04 13:14) [6]
нет такого он не позволяет.
если хочешь чтобы мог конечный пользователь менять локализацию тогда только из ini (или любого текстового) файла все нужно подгружать.
конечно все имхо


Iconka   (2004-09-20 13:14:00) [15]

++ INI:Конечные пользователи без проблем могут перевести на родной язык (актуально для Shareware)
ITE позволяет такое?


GuAV   (2004-09-20 13:11:00) [16]

ITE.
и незачем текст в ini хранить, лучше целиком переведеные DFM, как ITE делает - тогда можно менять положение/размер контролов, т.е. именно "локализовать" а не тупо переводить.


Iconka   (2004-09-20 13:05:00) [17]

Пользуюсь таким способом: в ini файле строки типа  1234="Правка". Оформленно это одним класом который себе в StringList загружает эти строки и создает меню. У каждой формы есть procedure Translate; В которой все что надо переводится (типа Label1.caption := Lokilizer.Values['10']). Перезагрузка не требуеться. Для формирования сообщений использую Format.


DiamondShark   (2004-09-20 13:05:00) [18]

А ITE чем не нравится?


Gemini   (2004-09-20 13:01:00) [19]

Эт хорошо, переводить нужно "на ходу", без перезапуска.Эт сколько кода писать придется для каждой формы?


TeNY   (2004-09-20 12:59:00) [20]

Используй ini файлы просто и дёшево


Наверх

Титульная страница Поиск, карта сайта Написать письмо