Difference between revisions of "Getting translation strings right/ru"

From Free Pascal wiki
m
m (Fixed syntax highlighting; deleted category included in page template)
 
(8 intermediate revisions by 6 users not shown)
Line 10: Line 10:
 
GNU gettext это специальный набор утилит, для того, чтобы облегчить перевод вашей программы на различные языки. Подробнее  описывается в руководстве по FPC (prog.pdf, стр 91 или [http://www.freepascal.org/docs-html/prog/progse41.html#x210-2130009.4 здесь]).  
 
GNU gettext это специальный набор утилит, для того, чтобы облегчить перевод вашей программы на различные языки. Подробнее  описывается в руководстве по FPC (prog.pdf, стр 91 или [http://www.freepascal.org/docs-html/prog/progse41.html#x210-2130009.4 здесь]).  
  
<u>Внимание:</u> GNU gettext имеет принципиальный недостататок. Одна исходная строка, может соответствовать только одной (и не более) переведённой строке.  
+
<u>Внимание:</u> GNU gettext имеет принципиальный недостаток. Одна исходная строка, может соответствовать только одной (и не более) переведённой строке.  
  
Это важно в тех случаях, когда одна и та же фраза на исходном языке может использоваться в разных значениях, и должна быть переведена по разному, в зависимости от конекста.
+
Это важно в тех случаях, когда одна и та же фраза на исходном языке может использоваться в разных значениях, и должна быть переведена по разному, в зависимости от контекста.
  
 
Об этом нужно помнить и не употреблять выражений, в исходном языке со множественными значениями
 
Об этом нужно помнить и не употреблять выражений, в исходном языке со множественными значениями
 
 
  
 
=== ResourceStrings в Лазарусе ===
 
=== ResourceStrings в Лазарусе ===
Line 22: Line 20:
 
* Для конвертации строковых констант в resourcestrings, в Лазурсе создана специальная утилита: [[IDE Window: Make ResourceString|Make ResourceString]]
 
* Для конвертации строковых констант в resourcestrings, в Лазурсе создана специальная утилита: [[IDE Window: Make ResourceString|Make ResourceString]]
  
* Для каждой секции resourcestring, компилятор создаёт .rst файл, но редактора для этих файлов нет. Лазарус
+
* Для каждой секции resourcestring, компилятор создаёт .rst файл, но редактора для этих файлов нет. Лазарус может автоматический создавать .po файлы из .rst файлов. Для работы с .po файлами есть много утилит (например kbabel).
может автоматический создавать .po файлы из .rst файлов. Для работы с .po файлами есть много утилит (например kbabel).
 
  
 
=== Перевод файлов пакета и/или проекта ===
 
=== Перевод файлов пакета и/или проекта ===
Line 36: Line 33:
 
''Внимание:'' .rst файлы должны принадлежать пакету, иначе Лазарус их проигнорирует.
 
''Внимание:'' .rst файлы должны принадлежать пакету, иначе Лазарус их проигнорирует.
  
Точно так же для проектов. Директорию .po файлов нужно укзать в Project -> Project Options -> IDE Integration -> Directory of .po files.
+
Точно так же для проектов. Директорию .po файлов нужно указать в Project -> Project Options -> IDE Integration -> Directory of .po files.
  
 
* Чтобы создать перевод на другой язык: скопируйте созданный .po файл, изменив его расширение. А затем, используя редактор, переведите все строки необходимые, в скопированном файле.
 
* Чтобы создать перевод на другой язык: скопируйте созданный .po файл, изменив его расширение. А затем, используя редактор, переведите все строки необходимые, в скопированном файле.
 
Например, для германского языка: чтобы перевести файл unit1.po, его нужно скопировать в unit1.de.po, а содержимое нового файла перевести на германский язык.
 
Например, для германского языка: чтобы перевести файл unit1.po, его нужно скопировать в unit1.de.po, а содержимое нового файла перевести на германский язык.
  
* Лазарус автоматически загружает .po файлы для установлыенных пакетов, если они есть. Для примера см: lazarus/components/projecttemplates/languages/.
+
* Лазарус автоматически загружает .po файлы для установленных пакетов, если они есть. Для примера см: lazarus/components/projecttemplates/languages/.
  
 
* ToDo: Implement and document updating the translated .po files when new resourcestrings are added.
 
* ToDo: Implement and document updating the translated .po files when new resourcestrings are added.
Line 50: Line 47:
 
==== ResourceStrings в Вашем приложении ====
 
==== ResourceStrings в Вашем приложении ====
  
Вы можете загрузить .po файл во время инциализации, для того чтобы перевести строки, указанные в секциях resourcestrings. Добавьте этот код в файл .lpr проекта:
+
Вы можете загрузить .po файл во время инициализации, для того чтобы перевести строки, указанные в секциях resourcestrings. Добавьте этот код в файл .lpr проекта:
  
<Delphi>
+
<syntaxhighlight lang=pascal>
 
...
 
...
 
uses
 
uses
 
   ...
 
   ...
   Translations, LCLProc;
+
   Translations, LazUTF8;
  
 
procedure TranslateLCL;
 
procedure TranslateLCL;
Line 65: Line 62:
 
   Lang:='';
 
   Lang:='';
 
   FallbackLang:='';
 
   FallbackLang:='';
   LCLGetLanguageIDs(Lang,FallbackLang); // in unit LCLProc
+
   LazGetLanguageIDs(Lang,FallbackLang); // in unit LazUTF8
 
   Translations.TranslateUnitResourceStrings('LCLStrConsts',
 
   Translations.TranslateUnitResourceStrings('LCLStrConsts',
 
                       PODirectory+'lclstrconsts.%s.po',Lang,FallbackLang);
 
                       PODirectory+'lclstrconsts.%s.po',Lang,FallbackLang);
Line 77: Line 74:
 
   Application.Run;
 
   Application.Run;
 
end.
 
end.
</Delphi>
+
</syntaxhighlight>
 +
 
 +
Заметка для Mac OS X: ID поддерживаемых языков должны быть добавлены в список свойств приложения (файл в бандлеInfo.plist) в пункт CFBundleLocalizations. Для примера см. lazarus.app/Contents/Info.plist.
  
Заметка для Mac OS X: ID поддерживаемых языков, должны быть добавлены в список свойств приложения (файл в бандлеInfo.plist) в пункт CFBundleLocalizations. Для примера см. lazarus.app/Contents/Info.plist.
+
[[Category:Russian (unfinished translation)]]

Latest revision as of 11:27, 16 February 2020

Deutsch (de) English (en) español (es) français (fr) 日本語 (ja) русский (ru)

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

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 проекта:

...
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.