как интернационализировать приложение Delphi

Возможный дубликат:
Перевести приложение

Как лучше всего интернационализировать мое приложение, написанное на delphi xe2?

Я видел ресурс stringtable, но я беспокоюсь, потому что у меня есть ощущение, что реализация может занять много времени и сил.

Существуют ли другие не менее действенные методы для этого?


person Supercim    schedule 22.01.2013    source источник
comment
интернационализировать приложение всегда трудоемко. :(   -  person balazs    schedule 22.01.2013


Ответы (5)


Возможно, это не лучший инструмент для переводов, но я много лет использую GNU Gettext. Процесс довольно прост:

  • Вы запускаете dxgettext для извлечения строк
  • Вы переводите или отдаете на перевод файлы
  • Лично мне нравится инструмент poEdit для перевода и управления хранилищем переводов.
  • Необязательно: вы объединяете файлы перевода в окончательный EXE
  • ИЛИ вы помещаете файлы перевода в подкаталоги и все!

http://dxgettext.po.dk/

Обновление:

1/ GNU Gettext включен в библиотеку JCL/JVCL, вам просто нужно активировать эту опцию при запуске.

2/ Gnu Gettext может переводить все в библиотеке, как VCL, так и JCL/JVCL! Это не ограничивается только вашим кодом!

person TridenT    schedule 22.01.2013

Один из вариантов — использовать интегрированную среду перевода в Delphi:

http://docwiki.embarcadero.com/RADStudio/XE3/en/Localizing_Applications_by_Using_Translation_Manager_Overview

person Stijn Sanders    schedule 22.01.2013

Здесь вы можете найти две статьи на эту тему:

Вы можете найти другие методы и коммерческие компоненты (я использовал компоненты TsiLang -отличная библиотека-)

Приветствие.

person Germán Estévez -Neftalí-    schedule 22.01.2013

Я не знаю, лучший ли это способ интернационализации приложения, но для меня это сработало. Это нечто домашнее.

Я создал файл xml, который представляет собой словарь, содержащий переводы, но вы можете использовать любой другой формат, от json до xls (возможно, это лучший). Затем реализован класс, который читает переводы из этого файла, и способ регистрации процедур в случае изменения языка во время выполнения, что я считаю хорошей функцией.

TDictionary = class
private
  fOnChanged: TSignal;
  fLanguage: String;
  procedure setLanguage( const Value: String );
public
  procedure loadFromFile( filename: string );
  function getTranslation( id: string; lang: string = '' ): string;

  property language: String read fLanguage write setLanguage;
  property onChanged: TSignal read fonChanged;
end;

...

function TDictionary.getTranslation( id: string; lang: string = '' ): string;
begin  
  if lang = '' then 
    lang := Language; // use the default lang.
  // read the translation from the file.
end;

procedure TDictionary.setLanguage( const Value: String );
begin     
  fLanguage := Value;
  onChanged.Execute;
end;

TSignal - это класс, который регистрирует методы, и если вы вызываете Execute, он выполняет все зарегистрированные методы. Возможно, в xe2 у вас есть что-то встроенное для этого, в delphi7 мне пришлось создать этот класс самому, но это интересно реализовать.

в форме createForm:

procedure TMyClass.doTranslate( dictionary: TObject );
begin
  with dictionary as TDictionary do
  begin
    caption := dictionary.getTranslation( 'myclass.caption' );
    button.caption := dictionary.getTranslation( 'some id' );
  end;
  // or you can go through Controls array, and automate the assignment.
end;

procedure TMyClass.FormCreate(Sender: TObject);
begin
  Dictionary.onChanged.register( doTranslate );
  doTranslate( dictionary );
end;

procedure TMyClass.FormDestroy(Sender: TObject);
begin
  Dictionary.onChanged.deregister( doTranslate ); 
end;

Как видите, это не рабочий пример того, что вы можете копировать и вставлять, я просто хотел показать вам основную идею. если что-то непонятно, прокомментируйте это, и я могу расширить свой ответ.

Некоторые примечания:

  • Я думаю, что важно иметь переводы в формате utf8.
  • использование xls облегчает жизнь локализаторам, да и вам тоже, если они испортят ваш xml файл (Если переводчик не проф., может случиться так, что вы получите обратно свой xml файл в формате microsoft word)
  • вы можете поместить файл словаря в ресурс и загрузить оттуда.

Плюсы

  • Таким образом, вы можете изменить язык выполнения
  • если вам нужен другой язык, вам просто нужно отредактировать файл словаря.

Минусы

  • Если у вас много форм, соединить все метки, кнопки и т. д. будет кошмаром, но вы можете автоматизировать это разумным способом.
  • Это немного замедляет работу вашего приложения, но не сильно, если смена языка приложения происходит не так часто.
person balazs    schedule 22.01.2013

Существует продукт под названием sisulizer, я думаю, он работает после того, как вы соберете исполняемый файл. Не пробовал, но много читал о нем.

Посмотрите на это

person Ali Avcı    schedule 22.01.2013