Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.11.13;
Скачать: CL | DM;

Вниз

Languages   Найти похожие ветки 

 
Lamak   (2003-10-30 16:23) [0]

Привет, мастерам!
Возникла потребность в переводе приложения на различные языки, может кто подскажет, как лучше это сделать?


 
AbrosimovA   (2003-10-30 16:37) [1]

Посмотри Projects->Languages->Add... и т.д.


 
Lamak   (2003-10-30 16:39) [2]

Этот вариант меня не устраивает :(


 
dataMaster ©   (2003-10-30 16:43) [3]

Возьми INI


 
AbrosimovA   (2003-10-30 16:44) [4]

Тогда уточни твои хотелки, мы же не Нострадамусы.


 
atmospheric   (2003-10-30 16:45) [5]

создавать файлы типа ini. и каждый пунктик программы загружать из этого файла.

rus.lng
Label1 = Привет !

eng.lng
Label1 = Hello !


 
WithOut Any ... ©   (2003-10-30 16:47) [6]

ИМХО как в некоторых "фирменных" программах. Создать каталоги внутри корневого (каталога программы) с переводами для контролов ключевых слов. И, естественно, в главном меню предложить выбор языка. Я лично поступаю так. А если детальнее, то это относится не только к конторолам, но и ко всякого рода Messages и ко всему, что требует перевода. Пока не обламывался (примерно 6 языков). Кстати комп должен поддерживать эти языки. Успеха


 
Lamak   (2003-10-30 18:07) [7]


> rus.lng
> Label1 = Привет !
>
> eng.lng
> Label1 = Hello !

Это понятно, а с процедурой перевода что? Записывать замену Caption каждого объекта в новой строке? Это же какой код получиться, да и не удобно. Есть же другие, более рациональные варианты.


 
Amoeba   (2003-10-30 18:21) [8]

Библиотека AgLib
http://delphiplus.nagano.ru/projects/lcp/aglib.htm
http://aghost.da.ru/
компонет TagTranslator


 
Mystic ©   (2003-10-30 18:25) [9]

> Этот вариант меня не устраивает :(
Чем же? Одно из самых рациональных решений

> Возьми INI
Очень неудобно. Часть переводимого кода содержиться только в ресурсах (например компоненты третьих фирм, стандартные диалоговые окна, ...). Иногда, например, надо немного расширить тот или иной визуальный компонент. Иногда настроить шрифты. иногда заполнить TStrings...


 
Mild ©   (2003-10-30 18:35) [10]

Возьми компонент в инете IvTranslator,
Отдельно заполняешь словарик слов или выражений,
|Англ|Русский|Китайский|Еврейский|......любой, хоть Арктурианский
и перевод. На приложение на попап меню вылазить "Языки" и список доступных языков........клик и всё :)
переводить может:
кэпшн, хинты.....вообщем всё что угодно


 
TUser ©   (2003-10-31 15:33) [11]

Вот приличная урла
http://cpr.biblio-globus.ru/MultiLanguage.htm


 
Anatoly Podgoretsky ©   (2003-10-31 15:38) [12]

Lamak (30.10.03 18:07) [7]
Одними Caption не отделаешься, много чего еще придется переводить и вручную загружать, а образы, звуковые файлы, иконки тоже будешь в ИНИ совать, а размеры элементов на форме тоже руками будешь подгонять.


 
AlexT1000 ©   (2003-10-31 17:25) [13]

>> Anatoly Podgoretsky
Позвольте с вами не согласиться . Наша фирма выпустила не один десяток продуктов и всегда вся локализация была в ини файлах.
все легко и просто .
а размеры кнопок всегда стоит брать с запасом. т.е английская строка + еще 60-75 процентов.

а код загрузки совсем не громоздок .
естественно не
Caption := Ini.ReadString ...
Caption := Ini.ReadString ...

a for i:= 0 to СomponentsCount -1 do
if Components[i]......... и понеслась.

раз написал процедуру и никаких проблем
LoadTermins(Form : TForm);
SaveTermins(Form : TForm);
и забыл об этом.

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


 
RoLeX   (2003-10-31 17:33) [14]

Ха! Я какраз сейчас занимаюсь этим делом в своей проге!
Я вот как предпочёл делать:
if (Form3.RadioButton1.checked=True) then begin
Form1.Radiogroup1.Caption:="Action:";
Form1.rShutdown.Caption:="Shutdown";
Form1.rRestart.Caption:="Restart";
Form1.rWait.Caption:="Standby";
Form1.rSleep.Caption:="Hibernate";
Form1.rExit.Caption:="Logoff";
Form1.GroupBox1.Caption:="When:";
Form1.rIN.Caption:="In...";
Form1.rAfter.Caption:="After...";
Form1.label1.Caption:="min.";
...
end else begin
Form1.Radiogroup1.Caption:="Действие:";
Form1.rShutdown.Caption:="Выключить";
Form1.rRestart.Caption:="Перезагрузить";
Form1.rWait.Caption:="Ждущий режим";
Form1.rSleep.Caption:="Спящий режим";
Form1.rExit.Caption:="Выход из системы";
Form1.GroupBox1.Caption:="Когда:";
Form1.rIN.Caption:="В...";
Form1.rAfter.Caption:="Через...";
Form1.label1.Caption:="мин.";
Form1.Button1.Caption:="Включить";
...
end;


 
Mystic ©   (2003-10-31 17:57) [15]

> AlexT1000 © (31.10.03 17:25)

Ну а как же с сообщениями вроде:
"" is not valid integer type

Или компонентами третьих фирм, которые содержат в ресурсах кучу строковой английской информации?

И вообще, зачем постоянно думать об каких-то INI-файлах, если об этом можно напрочь забыть?


 
Dsgnr ©   (2003-11-01 05:15) [16]

1. Все строки, однозначно, в ресурс.
2. Когда надо поддержать некую новую локаль, создаешь dll с тем же именем, что и переводимый модуль (неважно, bpl, dll, exe), в которую копируешь все dfm (без pas) и rc
3. Компилишь dll с расширением, соответствующим локали (например, rus или ukr).
4. Кладешь ее рядом с переводимым модулем. Именно рядом, %PATH% не пройдет.
5. Запускаешь свою программу и наслаждаешься.

Никаких переприсваиваний значений свойств для компонентов (типа [5], [13], [14]) делать не надо, pas файлы вообще не модифицируются, пересобирать целевые модули тоже не надо. Размеры контролов, их расположение можно менять без проблем (в ответ на [12]).
Для более глубокого понимания смотри LoadResourceModule в system.pas и все, связанное с этим.

PS Вынося строки в ресурс, не надо использовать resourcestring. Лучше делать честные .rc файлы.

PPS Ресурсные строки чужих модулей, в том числе и vclX0.bpl и т. п. (это по поводу [15]) локализуются тем же способом, не имея при этом исходников (при условии, конечно, что строки в ресурсах, а не в коде прошиты).


 
Lamak   (2003-11-01 16:19) [17]

Всем огромное спасибо!
Есть несколько комментариев:

[13]
for i:= 0 to СomponentsCount -1 do
if Components[i]......... а далее?
[14]
вариант ужасный :)



Страницы: 1 вся ветка

Текущий архив: 2003.11.13;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.025 c
1-41278
Nikolay M.
2003-10-31 11:32
2003.11.13
Ручной отлов Exception-ов - ?


4-42304
-AGGRESSOR-
2003-09-04 18:51
2003.11.13
Open Directory


1-41586
Василиск
2003-10-27 11:37
2003.11.13
Delphi и Excel (проблема с последним)


1-41371
Тимохов
2003-10-30 13:16
2003.11.13
Вопрос по внутренней организации классов в Delphi


1-41168
АлексейКотляр
2003-11-03 18:50
2003.11.13
Как програмно нажать кнопку мыши?