![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Чем локализовать интерфейс? [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 файлы просто и дёшево