Перевод программы на другой язык

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
gopstop2007
✯ Ветеран ✯
Сообщения: 1485
Зарегистрирован: 25 Март 2009, 21:55

Перевод программы на другой язык

Сообщение gopstop2007 »

Есть программа которую нужно перевести по максиму на другой язык с перспективой на несколько языков.
Если есть кто с этим сталкивался, укажите правильное направление, чтобы не перебирать все что есть и сэкономить кучу времени.
Будут рад услышать рабочие готовые решения, шаблоны и все что связано с сабжом (бесплатные, платные).
Спасибо за внимание.
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп

Аватара пользователя
Дед Пахом
Старичок
Сообщения: 2503
Зарегистрирован: 07 Июль 2005, 15:51
Откуда: Москва, Россия

Перевод программы на другой язык

Сообщение Дед Пахом »

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>
Всё, никаких пересборок не надо.
С уважением, ДП

kreator
✯ Ветеран ✯
Сообщения: 3983
Зарегистрирован: 28 Май 2009, 14:54
Откуда: Москва

Перевод программы на другой язык

Сообщение 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
Немного простовато. По-правильному конечно лучше привязаться к конкретному окну (может быть ситуация, например, когда английский "ОК" может быть и "Сохранить" и "Выбрать" и т.д.). Ещё была идея хранить это всё в БД.
We are hard at work… for you. :)

gopstop2007
✯ Ветеран ✯
Сообщения: 1485
Зарегистрирован: 25 Март 2009, 21:55

Перевод программы на другой язык

Сообщение gopstop2007 »

Дед Пахом писал(а):
10 Октябрь 2020, 16:20
ScriptPlayer. Схема такая - в файле настроек пишем все тексты для каждой процедуры (ниже пример для русского, можно иметь много таких секций для каждого языка):
...
Всё, никаких пересборок не надо.
Спасибо, шикарно сделано, с конечной суммой не совсем понятно, там еще к этому требуется для xml шаблоны.
kreator писал(а):
10 Октябрь 2020, 17:12
Я делал немного не так. Изначально текст контролов окна на английском. Есть ini файл. Там что-то вот такое:
...
Немного простовато. По-правильному конечно лучше привязаться к конкретному окну (может быть ситуация, например, когда английский "ОК" может быть и "Сохранить" и "Выбрать" и т.д.). Ещё была идея хранить это всё в БД.
Спасибо, вроде просто, а почему сразу не использовали для этого (QuickWinTranslator.inc и *.clw)?
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп

Аватара пользователя
Дед Пахом
Старичок
Сообщения: 2503
Зарегистрирован: 07 Июль 2005, 15:51
Откуда: Москва, Россия

Перевод программы на другой язык

Сообщение Дед Пахом »

gopstop2007 писал(а):
17 Октябрь 2020, 14:50
с конечной суммой не совсем понятно, там еще к этому требуется для xml шаблоны.
Да, нужен EasyXML, а конечную сумму можно и обсудить.
С уважением, ДП

kreator
✯ Ветеран ✯
Сообщения: 3983
Зарегистрирован: 28 Май 2009, 14:54
Откуда: Москва

Перевод программы на другой язык

Сообщение kreator »

gopstop2007 писал(а):
17 Октябрь 2020, 14:50
Спасибо, вроде просто, а почему сразу не использовали для этого (QuickWinTranslator.inc и *.clw)?
Что-то мне там не понравилось. Уже не вспомню. Возможно то, что нужно привязываться к окну. Привязка к окну - оно, да, универсальней, но работы по переводу сильно больше. Всё же надо было сделать ещё вчера. :D
Вот сделать бы параметр окна "необязательным". Если нет его, то брать какие-то глобальные значения. Вот мысль, что пару "Add/Добавить" надо заполнять для всех практически окон, не давала покоя.
We are hard at work… for you. :)

Ответить