Форум: "Основная";
Текущий архив: 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.034 c