Превод на интерфейса на Delphi програма. Как ?

14 отговора 694 прегледа
#1

Превод на интерфейса на Delphi програма. Как ?

Моето питане е към хора, които подържат своите Delphi програми с интерфейс на няколко езика. Например: български, английски, немски и т.н.

Аз се опитвам да ползвам вградения translation manager в Delphi-то, но той е адски бъгав и поддръжката на преводите е много трудна. Затова ме интересуват други по-стабилни алтернативи.

Та кажете какви компоненти или tool-чета ползвате за целта ?

Отговор
в отговор на Dark_Dirk #2

Balmsoft Polyglot 1.6 (969Kb)

Balmsoft Polyglot 1.6 (969Kb)
[линк]


Fрее

Ne sym go probval, no v ruskite saitove tozi problem chesto se obsyjda.

Редактирано от NikB на

Отговор
в отговор на Dark_Dirk #3

Re: Превод на интерфейса на Delphi програма. Как ?

Здравей!
Понеже съм привърженик на собствените решения моето предложение е да си направиш програмата да ползва малко XML за да ти инициализира елементите които съдържат текстове от текстов фаил за съответния език. Така ще стане нещо подобно на скин и ще можеш да я разширяваш с нови езици без да я променяш а сама с добавянето на нов езиков фаил.

Отговор
в отговор на v_automation #4

Re: Превод на интерфейса на Delphi програма. Как ?

Или пък с INI файл-че :) Записваш елементите (например caption-ите на Label-ите)във файла, като всеки обект се записва с отделен ред (запис) в INI файла. Бих го направил така, ако ми се налагаше, а и честно да си кажа на v_automation предложението също не е лошо. Но понеже ще ми е по-лесно с INI, предпочитам INI :)
На _FlashGet language-файловете са му инита, ако искаш отвори си един такъв файл и виж какво става въпрос..
Късмет

Отговор
в отговор на v_automation #5

Re: Превод на интерфейса на Delphi програма. Как ?

И какво ще стане в случая на превод на арабски или китайски ;-))))))) - един елемент може да заема различно място, също така ако има бутони с картинки които имат текст (позната ситуация ;-))))) те също трябва да бъдат преведени????
Освен това това което предлагаш ще трябва да се прави runtime - и веднъж ще се зареждат оригиналните ресурси, след което ще ги подменяш - доста бавно ми се струва. За съжаление повечето програми/компоненти ползват подобен подход - рядко са тези които боравят директно с ресурсите.

Мисля, че и друг път съм го казвал - най-добре е да се ползва вградената в Делфи процедура за превод/замяна на ресурсите - това е единствения смислен начин, защото превода не се основава само на смяна на caption-и !!!! А за това, че е бъгав - ами минава се на версия на Делфи в която работи - никога не съм го ползвал - просто съм го разглеждал - и не мога да кажа дали наистина има проблем.

---
Колкото повече, толкова повече.
Отговор
в отговор на PhantomAS #6

Re: Превод на интерфейса на Delphi програма. Как ?

PhantomAS,
проблема е че това нещо е бъгаво дори в Delphi 7.
Засега си разработвам проекта само в Delphi 5, защото на него Translation Managera горе-долу работи (поради един гаден bug в Delphi 6 и Delphi 7, който го няма в Delphi 5).

Идеята на Translation Managera на Borland е срахотна и много лесно се превежда с нея, но за съжаление за проект по-голям от 50 форми е трудно приложима (много се бави, пък и има бъгове).

Няма ли някой, който е реализирал многоезичен интерфейс на практика да се изкаже ?

Отговор
в отговор на Dark_Dirk #7

Re: Превод на интерфейса на Delphi програма. Как ?

Дай повече инфо за този бъг - имам 6-ца и 7-ца инсталирани - ще го пробвам - ако трябва ще направя проект с 50+ форми. Другия вариант е да изкараш кода - и да ми пратиш само формите без код - за да видя дали проблема не ти идва от това че ползваш един и същи проект ??? Виж дали си си настройл да ти записва формите като текс - това решаваше някои проблеми при зареждането на "стари" dfm файлове от новите версии.

---
Колкото повече, толкова повече.
Отговор
в отговор на PhantomAS #8

Re: Превод на интерфейса на Delphi програма. Как ?

Бъга е следния:
Репродуциране:

Delphi 6 sp2 и Delphi 7

1. Създаваш ново приложение.
2. Слагаш един DBGrid.
3. Добавяш някаква колонка в него.
4. На колонка променяш font-a на title да не е равен на Parent-a т.е. например му слагаш да е BOLD.
5. Създаваш езиците.
6. Статрираш приложението.
7. То чете ресурсите от ресурсния файл, не от EXE-то.
и получаваш следния Exception:
Exception EReadError in module LangTest.exe at 0002023B
Error reading DBGrid1.Columns: Error reading TColumn.Title.Font.Font: Property Font does not exists.

Забелязваш ли повторението на Font.Font ?

Това означаве, че вградения Translation Manager никой не го ползва, защото този бъг го има в Delphi 6 sp 2 и Delphi 7. А това е доста време такъв елементарн бъг да не бъде отсранен.

Друго в Delphi 6 и 7 не съм пробвал.

Сега за Delphi 5:

Другото лошо нещо е, че е много бавно update-ването на езиците. 2-3 мин. за проект от 50+ форми.
В Delphi 5 от време на време се получава загуба на превод в някои ресурси или пък не може да update-не правилно езиковите ресурси при промяна на оригиналната форма. Тогава почваш да вадиш от архиви стари ресурси и да кърпиш.
В transation manager-a на ресурсите пък забрави да работиш ако не си си махнал 'г.' от shotdatafomrat.
а и да не забравя: трябва всички форми да са затворени при update на езиците и да няма нищо изобразено в Object Inspector-a, защото иначе счупва езиковите ресурси.

Отговор
в отговор на Dark_Dirk #9

Re: Превод на интерфейса на Delphi програма. Как ?

По-горе ти препоръчаха компонента BalmSoft Polyglot. Преди известно време доста здраво го разрових и смея да твърдя, че е добър. Има си култирна инсталация и подробна документация. Проблема е единствено в това, че всички стрингове се съхраняват в обикновени текстови файлове, т.е. не можеш да ограничиш превода само до определни езици, а всеки ще може да си превежда програмата ти на собствения му език (това, рaзбира се, може да бъде и плюс).

Mixy
Отговор
в отговор на Mixy #10

Re: Превод на интерфейса на Delphi програма. Как ?

Непременно ще го пробвам.
Благодаря за мненията.

Отговор
в отговор на v_automation #11

Re: Превод на интерфейса на Delphi програма. Как ?

Дай пример как може да стане това ако имаш нещо под ръка.
Ако нямаш , дай някой линк.

Отговор
в отговор на Dark_Dirk #12

Явно проблема съществува...

но има разрешение - или поне аз намерих - има проблем с първоначалното създаване на формите - не е коректно - и странното е, че не ги създава в текстови вид - dfm-тата де.
Обаче ако не те мързи - след всяка новосъздадена форма - можеш да я отвориш във всички езици - и да дадеш Ignore - на съобщението което се появява. След това десен бутон - Text DFM - и записваш - и от там нататък няма никакви ядове ;-)))) вярно, че за голям проект си е малко неприятно да се направи това за всички форми - ама при положение, че веднъж се прави - мисля, че може да се изтърпи.

---
Колкото повече, толкова повече.
Отговор
в отговор на Dark_Dirk #13

Виж това....

[линк]

---
Колкото повече, толкова повече.
Отговор
в отговор на PhantomAS #14

Re: Много добро попадение!

Много добро попадение! Още не съм го разгледал в детайли, но от пръв поглед, мисля, че е от най-добрите, които съм срещал!

Mixy
Отговор
в отговор на Mixy #15

Не забравяй основното....

че е БЕЗПЛАТНО и е със сорс!!!!!!!!!!!!!!!!!!!!!! Освен това можеш да си мигрираш от настоящия translation tool - към него до колкото разбрах - поддържа и миграция на по-ниски версии.

---
Колкото повече, толкова повече.
Отговор