Difference between revisions of "Getting translation strings right/ru"
m |
m (Fixed syntax highlighting; deleted category included in page template) |
||
(10 intermediate revisions by 7 users not shown) | |||
Line 1: | Line 1: | ||
+ | {{Getting translation strings right}} | ||
+ | |||
Правильный перевод строк. | Правильный перевод строк. | ||
− | + | === Resourcestrings и GNU gettext === | |
Для работы со строковыми константами, во Free Pascal, была введена специальная конструкция: секция "resourcestring". Подробнее вы сможете прочитать в руководстве по FPC (prog.pdf, стр 89 или [http://www.freepascal.org/docs-html/prog/progch9.html#x184-1870009 здесь]) | Для работы со строковыми константами, во Free Pascal, была введена специальная конструкция: секция "resourcestring". Подробнее вы сможете прочитать в руководстве по FPC (prog.pdf, стр 89 или [http://www.freepascal.org/docs-html/prog/progch9.html#x184-1870009 здесь]) | ||
+ | |||
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, в Лазурсе создана специальная утилита: [[IDE Window: Make ResourceString|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 проекта: | ||
+ | |||
+ | <syntaxhighlight lang=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. | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | Заметка для Mac OS X: ID поддерживаемых языков должны быть добавлены в список свойств приложения (файл в бандлеInfo.plist) в пункт CFBundleLocalizations. Для примера см. lazarus.app/Contents/Info.plist. | ||
+ | |||
+ | [[Category:Russian (unfinished translation)]] |
Latest revision as of 12: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.