Страница 1 из 1
Перевод программы на другой язык
Добавлено: 10 Октябрь 2020, 15:57
gopstop2007
Есть программа которую нужно перевести по максиму на другой язык с перспективой на несколько языков.
Если есть кто с этим сталкивался, укажите правильное направление, чтобы не перебирать все что есть и сэкономить кучу времени.
Будут рад услышать рабочие готовые решения, шаблоны и все что связано с сабжом (бесплатные, платные).
Спасибо за внимание.
Перевод программы на другой язык
Добавлено: 10 Октябрь 2020, 16:20
Дед Пахом
ScriptPlayer. Схема такая - в файле настроек пишем все тексты для каждой процедуры (ниже пример для русского, можно иметь много таких секций для каждого языка):
Код: Выделить всё
<!-- Localization -->
<language name="Russian">
<!-- Main -->
<procedure name="Main">
<!-- File menu -->
<field name="?MENU1">Файл</field>
<field name="?PrintSetup">Установка принтера ...</field>
<field name="?Exit">Выход</field>
<!-- Edit menu -->
<field name="?MENU2">Правка</field>
<field name="?Cut">Вырезать</field>
<field name="?Copy">Копировать</field>
<field name="?Paste">Вставить</field>
<!-- Trees menu -->
<field name="?Trees">Роща</field>
<field name="?BrowseClassTree">Берёза</field>
<field name="?BrowseStudentsTree">Рябина</field>
<!-- Browse menu -->
<field name="?MENU3">Списки</field>
<field name="?BrowseStudents">Студенты</field>
<field name="?BrowseTeachers">Преподы</field>
<field name="?BrowseClasses">Классы</field>
<field name="?BrowseEnrollment">Регистрация</field>
<field name="?BrowseCourses">Курсы</field>
<field name="?BrowseMajors">Специализация</field>
<field name="?BrowseUpdateGrades">Статистика</field>
<!-- Reports cmenu -->
<field name="?ReportMenu">Отчёты</field>
<field name="?PrintENR:StuSeq">Расписания студентов</field>
<field name="?ReportsTeacherClassSchedules">Расписания преподавателей</field>
<field name="?PrintENR:SeqStu">Посещаемость</field>
<field name="?PrintCOU:KeyDescription">Регистрация</field>
<field name="?ReportsCourseEnrollmentSummary">Регистрация (суммарн.)</field>
<field name="?ReportsFinalGrades">Итоговаые оценки</field>
<field name="?ReportsStudentIDs">Студенты</field>
<!-- Window menu -->
<field name="?MENU4">Окно</field>
<field name="?Tile">Плитка</field>
<field name="?Cascade">Каскад</field>
<field name="?Arrange">Выровнять иконы</field>
<!-- Help menu -->
<field name="?MENU5">Справка</field>
<field name="?Helpindex">Содержание</field>
<field name="?HelpSearch">Поиск...</field>
<field name="?HelpOnHelp">Как пользоваться спарвкой</field>
</procedure>
<procedure name="BrowseStudents">
<!-- Window title -->
<field>Студенты</field>
<!-- Buttons -->
<field name="?Insert:2">Добавить</field>
<field name="?Change:2">Изменить</field>
<field name="?Delete:2">Удалить</field>
<field name="?Close">Закрыть</field>
<field name="?Help">Справка</field>
</procedure>
</language>
В глобальных настройках указываем, с каким языком будем работать:
Код: Выделить всё
<global logfile="school.log" language="Russian">
<event name="OpenWindow">
<!-- CharSet:Cyrillic for all windows -->
<action name="SetProp">
<property name="FontCharSet" charset="Cyrillic"></property>
</action>
</event>
</global>
Всё, никаких пересборок не надо.
Перевод программы на другой язык
Добавлено: 10 Октябрь 2020, 17:12
kreator
Я делал немного не так. Изначально текст контролов окна на английском. Есть ini файл. Там что-то вот такое:
Код: Выделить всё
[Acceptance by Customer]
RU=Приёмка Заказчиком
IT=Accettazione da Cliente
[Exit]
RU=Выход
IT=Uscita
[Help]
RU=Справка
IT=Aiuto
[Add]
RU=Добавить
IT=Aggiungere
[History]
RU=История
IT=Storia
Есть глобальная переменная, отвечающая за язык. При открытии окна вот такой код:
Код: Выделить всё
SetLanguage Routine
if GLO:Language=1
exit
end
if ~GLO:Language
Language" = 'RU'
else
Language" = choose(GLO:Language,'EN','IT','DE','FR','ES','PT')
end
0{prop:Text} = getini(0{prop:Text},Language",0{prop:Text},GLO:LanguageFile)
0{prop:MSG} = getini(0{prop:MSG},Language",0{prop:MSG},GLO:LanguageFile)
qty# = create(0,CREATE:prompt)
if qty#
destroy(qty#)
loop i#=1 to (qty#-1)
case i#{prop:Type}
of CREATE:button
orof CREATE:tab
orof CREATE:group
orof CREATE:prompt
i#{prop:Text} = getini(i#{prop:Text},Language",i#{prop:Text},GLO:LanguageFile)
i#{prop:MSG} = getini(i#{prop:MSG},Language",i#{prop:MSG},GLO:LanguageFile)
i#{prop:Tip} = getini(i#{prop:Tip},Language",i#{prop:Tip},GLO:LanguageFile)
of CREATE:list
orof CREATE:combo
i#{prop:MSG} = getini(i#{prop:MSG},Language",i#{prop:MSG},GLO:LanguageFile)
i#{prop:Tip} = getini(i#{prop:Tip},Language",i#{prop:Tip},GLO:LanguageFile)
j# = 1
loop
if i#{proplist:Exists, j#}=True
i#{proplist:Header, j#} = getini(i#{proplist:Header, j#},Language",i#{proplist:Header, j#},GLO:LanguageFile)
j# += 1
else
break
end
end
end
end
end
Немного простовато. По-правильному конечно лучше привязаться к конкретному окну (может быть ситуация, например, когда английский "ОК" может быть и "Сохранить" и "Выбрать" и т.д.). Ещё была идея хранить это всё в БД.
Перевод программы на другой язык
Добавлено: 17 Октябрь 2020, 14:50
gopstop2007
Дед Пахом писал(а): ↑10 Октябрь 2020, 16:20
ScriptPlayer. Схема такая - в файле настроек пишем все тексты для каждой процедуры (ниже пример для русского, можно иметь много таких секций для каждого языка):
...
Всё, никаких пересборок не надо.
Спасибо, шикарно сделано, с конечной суммой не совсем понятно, там еще к этому требуется для xml шаблоны.
kreator писал(а): ↑10 Октябрь 2020, 17:12
Я делал немного не так. Изначально текст контролов окна на английском. Есть ini файл. Там что-то вот такое:
...
Немного простовато. По-правильному конечно лучше привязаться к конкретному окну (может быть ситуация, например, когда английский "ОК" может быть и "Сохранить" и "Выбрать" и т.д.). Ещё была идея хранить это всё в БД.
Спасибо, вроде просто, а почему сразу не использовали для этого (QuickWinTranslator.inc и *.clw)?
Перевод программы на другой язык
Добавлено: 17 Октябрь 2020, 15:14
Дед Пахом
gopstop2007 писал(а): ↑17 Октябрь 2020, 14:50
с конечной суммой не совсем понятно, там еще к этому требуется для xml шаблоны.
Да, нужен EasyXML, а конечную сумму можно и обсудить.
Перевод программы на другой язык
Добавлено: 17 Октябрь 2020, 15:59
kreator
gopstop2007 писал(а): ↑17 Октябрь 2020, 14:50
Спасибо, вроде просто, а почему сразу не использовали для этого (QuickWinTranslator.inc и *.clw)?
Что-то мне там не понравилось. Уже не вспомню. Возможно то, что нужно привязываться к окну. Привязка к окну - оно, да, универсальней, но работы по переводу сильно больше. Всё же надо было сделать ещё вчера.
Вот сделать бы параметр окна "необязательным". Если нет его, то брать какие-то глобальные значения. Вот мысль, что пару "Add/Добавить" надо заполнять для всех практически окон, не давала покоя.