Копия викизеркало

Это зеркало вики с pascal.chat. Правка, история и вход — там.

Getting translation strings right/ru

Deutsch · English · Español · Français · Русский · 日本語

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

Resourcestrings и GNU gettext

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

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

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

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

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

ResourceStrings в Лазарусе

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

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

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

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

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

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

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

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

pascal
...
uses
  ...
  Translations, LazUTF8;

procedure TranslateLCL;
var
  PODirectory, Lang, FallbackLang: String;
begin
  PODirectory:='/path/to/lazarus/lcl/languages/';
  Lang:='';
  FallbackLang:='';
  LazGetLanguageIDs(Lang,FallbackLang); // in unit LazUTF8
  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.

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


From the Free Pascal wiki, page "Getting translation strings right/ru", as it stood on 2020-02-16 after a change by Trev, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's Licensing page. If you have concerns about this material, message the admin.

Версия 2, последнее изменение: WikiArchive, .