Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.11.13;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.038 c
1-41280
Cranium
2003-10-31 14:19
2003.11.13
Перечисляемый тип в качестве свойства класса.


14-42116
zax
2003-10-20 22:18
2003.11.13
ModelMaker


3-40888
User_OKA
2003-10-17 06:40
2003.11.13
Создание тригера.


1-41521
maestro
2003-10-28 07:55
2003.11.13
уничтожение компонента Button


1-41687
TCrash
2003-11-05 00:07
2003.11.13
ListView. Как раскрасить строки





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский