Страница 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)?
Что-то мне там не понравилось. Уже не вспомню. Возможно то, что нужно привязываться к окну. Привязка к окну - оно, да, универсальней, но работы по переводу сильно больше. Всё же надо было сделать ещё вчера. :D
Вот сделать бы параметр окна "необязательным". Если нет его, то брать какие-то глобальные значения. Вот мысль, что пару "Add/Добавить" надо заполнять для всех практически окон, не давала покоя.