Getting translation strings right/ru

From Free Pascal wiki
Revision as of 20:10, 15 September 2009 by Skalogryz (talk | contribs)
Jump to navigationJump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Правильный перевод строк.

Resourcestrings и GNU gettext

Для работы со строковыми константами, во Free Pascal, была введена специальная конструкция: секция "resourcestring". Подробнее вы сможете прочитать в руководстве по FPC (prog.pdf, стр 89 или здесь)


GNU gettext это специальный набор утилит, для того, чтобы облегчить перевод вашей программы на различные языки. Подробнее описывается в руководстве по FPC (prog.pdf, стр 91 или здесь).

Внимание: GNU gettext имеет принципиальный недостататок. Одна исходная строка, может соответствовать только одной (и не более) переведённой строке.

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

Об этом нужно помнить и не употреблять выражений, в исходном языке со множественными значениями


ResourceStrings в Лазарусе

  • Для конвертации строковых констант в resourcestrings, в Лазурсе создана специальная утилита: Make ResourceString
  • Для каждой секции resourcestring, компилятор создаёт .rst файл, но редактора для этих файлов нет. Лазарус

может автоматический создавать .po файлы из .rst файлов. Для работы с .po файлами есть много утилит (например kbabel).

Перевод файлов пакета и/или проекта

Чтобы разрешить создание .po файлов для пакета, выполните следующие шаги:

  • Создайте директорию 'languages' (или 'locale', имя не существенно). Директория должна находится в директории пакета
  • Откройте пакет. Затем настройки пакета: Options -> IDE Integration -> Directory of .po files. Укажите созданную директорию languages.

В следующий раз когда вы будете компилировать пакет, Лазарус создаст необходимые .po файлы.

Внимание: .rst файлы должны принадлежать пакету, иначе Лазарус их проигнорирует.

Точно так же для проектов. Директорию .po файлов нужно укзать в Project -> Project Options -> IDE Integration -> Directory of .po files.

  • Чтобы создать перевод на другой язык: скопируйте созданный .po файл, изменив его расширение. А затем, используя редактор, переведите все строки необходимые, в скопированном файле.

Например, для германского языка: чтобы перевести файл unit1.po, его нужно скопировать в unit1.de.po, а содержимое нового файла перевести на германский язык.

  • Лазарус автоматически загружает .po файлы для установлыенных пакетов, если они есть. Для примера см: lazarus/components/projecttemplates/languages/.
  • ToDo: Implement and document updating the translated .po files when new resourcestrings are added.
  • ToDo: Implement and document collecting all .po files of statically linked packages.


ResourceStrings в Вашем приложении

Вы можете загрузить .po файл во время инциализации, для того чтобы перевести строки, указанные в секциях resourcestrings. Добавьте этот код в файл .lpr проекта:

<Delphi> ... uses

 ...
 Translations, LCLProc;

procedure TranslateLCL; var

 PODirectory, Lang, FallbackLang: String;

begin

 PODirectory:='/path/to/lazarus/lcl/languages/';
 Lang:=;
 FallbackLang:=;
 LCLGetLanguageIDs(Lang,FallbackLang); // in unit LCLProc
 Translations.TranslateUnitResourceStrings('LCLStrConsts',
                     PODirectory+'lclstrconsts.%s.po',Lang,FallbackLang);
 // ... add here a TranslateUnitResourceStrings call for every po file ...

end;

begin

 TranslateLCL;
 Application.Initialize;
 Application.CreateForm(TForm1, Form1);
 Application.Run;

end. </Delphi>

Заметка для Mac OS X: ID поддерживаемых языков, должны быть добавлены в список свойств приложения (файл в бандлеInfo.plist) в пункт CFBundleLocalizations. Для примера см. lazarus.app/Contents/Info.plist.