Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-doc
Path: blob/main/documentation/content/ru/books/fdp-primer/po-translations/_index.adoc
18099 views
---
description: 'Как работать с переводом PO в проекте документации FreeBSD'
next: books/fdp-primer/weblate
params:
  path: /books/fdp-primer/po-translations/
prev: books/fdp-primer/translations
showBookMenu: 'true'
tags: ["po", "translations", "tutorial", "quick start"]
title: 'Глава 9. Переводы PO'
weight: 9
---

[[po-translations]]
= Переводы PO
:doctype: book
:toc: macro
:toclevels: 1
:icons: font
:sectnums:
:sectnumlevels: 6
:sectnumoffset: 9
:partnums:
:source-highlighter: rouge
:experimental:
:images-path: books/fdp-primer/

ifdef::env-beastie[]
ifdef::backend-html5[]
:imagesdir: ../../../../images/{images-path}
endif::[]
ifndef::book[]
include::shared/authors.adoc[]
include::shared/mirrors.adoc[]
include::shared/releases.adoc[]
include::shared/attributes/attributes-{{% lang %}}.adoc[]
include::shared/{{% lang %}}/teams.adoc[]
include::shared/{{% lang %}}/mailing-lists.adoc[]
include::shared/{{% lang %}}/urls.adoc[]
toc::[]
endif::[]
ifdef::backend-pdf,backend-epub3[]
include::../../../../../shared/asciidoctor.adoc[]
endif::[]
endif::[]

ifndef::env-beastie[]
toc::[]
include::../../../../../shared/asciidoctor.adoc[]
endif::[]

[[po-translations-introduction]]
== Введение

Система http://www.gnu.org/software/gettext/[GNU gettext] предоставляет переводчикам удобный способ создания и поддержки переводов документов. Переводимые строки извлекаются из исходного документа в файл PO (Portable Object). Переводы строк добавляются с помощью отдельного редактора. Эти строки могут использоваться напрямую или собираться в полную переведённую версию исходного документа.

[[po-translations-quick-start]]
== Быстрый старт

Предполагается, что процедура, описанная в crossref:overview[overview-quick-start,Быстрый старт], уже выполнена. Опция `TRANSLATOR` необходима и уже включена по умолчанию в порте package:textproc/docproj[].

Этот пример демонстрирует создание испанского перевода краткой статьи extref:{leap-seconds}[Високосные секунды].

[[po-translations-quick-start-install-po-editor]]

[.procedure]
====
.Процедура: Установка PO-редактора
. Редактор PO необходим для редактирования файлов переводов. В этом примере используется package:editors/poedit[].
+
[source, shell]
....
# pkg install poedit
....
====

[[po-translations-quick-start-initial-setup]]
[.procedure]
====
.Процедура: Начальная настройка

Когда создаётся новый перевод, структура каталогов должна быть создана или скопирована из оригинальной английской версии:

. Создайте каталог для нового перевода. Исходный текст статьи на английском находится в [.filename]#~/doc/documentation/content/en/articles/leap-seconds/#. Испанский перевод будет расположен в [.filename]#~/doc/documentation/content/es/articles/leap-seconds/#. Путь идентичен, за исключением названия языкового каталога. Исходный текст статьи на английском находится в [.filename]#~/doc/en/articles/leap-seconds/#. Испанский перевод будет расположен в [.filename]#~/doc/es/articles/leap-seconds/#. Путь идентичен, за исключением названия языкового каталога.
+
[source, shell]
....
% mkdir ~/doc/documentation/content/es/articles/leap-seconds
....

. Скопируйте [.filename]#_index.po# из исходного документа в каталог перевода:
+
[source, shell]
....
% cp ~/doc/documentation/content/en/articles/leap-seconds/_index.po \
  ~/doc/documentation/content/es/articles/leap-seconds/
....

Предположим, что документ или язык также переводится через Weblate. В таком случае рекомендуется взять файл `.po` оттуда и загрузить переведённый документ обратно в платформу, чтобы централизовать усилия по переводу через Weblate и избежать повторной работы.

См. как загрузить файлы `.po` в главе crossref:weblate[weblate-translating-offline,Перевод офлайн в Weblate].
====

[[po-translations-quick-start-translation]]
[.procedure]
====
.Процедура: Перевод

Используйте PO-редактор для ввода переводов в PO-файл. Доступно несколько различных редакторов. Здесь показан [.filename]#poedit# из пакета:editors/poedit[].

[source, shell]
....
% poedit documentation/content/es/articles/leap-seconds/_index.po
....
====

[[po-translations-quick-generating-a-translated-document]]
[.procedure]
====
.Процедура: Создание переведенного документа
. Сгенерируйте переведенный документ:
+
[source, shell]
....
% cd ~/doc
% ./tools/translate.sh documentation es articles/leap-seconds
....
+
Имя сгенерированного документа соответствует имени оригинала на английском языке, обычно `[.filename]#_index.adoc#`.
+
. Проверьте сгенерированный файл, преобразовав его в HTML и просмотрев в веб-браузере:
+
[source, shell]
....
% cd ~/doc/documentation
% make
....
====

[[po-translations-creating]]
== Создание новых переводов

Первым шагом в создании нового переведённого документа является поиск или создание каталога для его размещения. FreeBSD размещает переведённые документы в подкаталоге с названием, соответствующим языку и региону, в формате [.filename]#lang#. Здесь _lang_ — это двухбуквенный код в нижнем регистре.

[[po-translations-language-names]]
.Названия языков
[cols="1,1,1", frame="none", options="header"]
|===
| Язык
| Регион
| Имя каталога с переводами

|Английский
|Соединённые Штаты
|[.filename]#en#

|Бенгальский
|Бангладеш
|[.filename]#bn-bd#

|Датский
|Дания
|[.filename]#da#

|Немецкий
|Германия
|[.filename]#de#

|Греческий
|Греция
|[.filename]#el#

|Испанский
|Испания
|[.filename]#es#

|Французский
|Франция
|[.filename]#fr#

|Венгерский
|Венгрия
|[.filename]#hu#

|Итальянский
|Италия
|[.filename]#it#

|Японский
|Япония
|[.filename]#ja#

|Корейский
|Корея
|[.filename]#ko#

|Монгольский
|Монголия
|[.filename]#mn#

|Голландский
|Нидерланды
|[.filename]#nl#

|Польский
|Польша
|[.filename]#pl#

|Португальский
|Бразилия
|[.filename]#pt-br#

|Русский
|Россия
|[.filename]#ru#

|Турецкий
|Турция
|[.filename]#tr#

|Китайский
|Китай
|[.filename]#zh-cn#

|Китайский
|Тайвань
|[.filename]#zh-tw#
|===

Переводы находятся в подкаталогах основного каталога документации, который в данном случае предполагается как [.filename]#~/doc/documentation/#, как показано в crossref:overview[overview-quick-start, Быстрый старт]. Например, немецкие переводы расположены в [.filename]#~/doc/documentation/content/de/#, а французские — в [.filename]#~/doc/documentation/content/fr/#.

Каждый языковой каталог содержит отдельные подкаталоги с названиями по типу документов, обычно [.filename]#articles/# и [.filename]#books/#.

Объединение этих имён каталогов даёт полный путь к статье или книге. Например, французский перевод статьи NanoBSD находится в [.filename]#~/doc/documentation/content/fr/articles/nanobsd/#, а монгольский перевод Руководства — в [.filename]#~/doc/documentation/content/mn/books/handbook/#.

При переводе документа на новый язык необходимо создать новый каталог языка. Если каталог языка уже существует, достаточно создать подкаталог в каталоге [.filename]#articles/# или [.filename]#books/#.

[[po-translations-creating-example]]
.Создание испанского перевода Руководства портировщика
[example]
====
Создайте новый перевод на испанский язык extref:{porters-handbook}[Руководства портировщика]. Оригинал находится в книге [.filename]#~/doc/documentation/content/en/books/porters-handbook/#.

[.procedure]
======

. Каталог для книг на испанском языке [.filename]#~/doc/documentation/content/es/books/# уже существует, поэтому требуется только создать подкаталог для Руководства портировщика:
+
[source, shell]
....
% cd ~/doc/documentation/content/es/books
% mkdir porters-handbook
....

. Скопируйте содержимое из переводимой книги:
+
[source, shell]
....
% cd porters-handbook
% cp -R ~/doc/documentation/content/en/books/porters-handbook/* .
....
+
Теперь структура документа готова для начала перевода с помощью команды `po4a`.
======
====

[[po-translations-translating]]
== Перевод

Система gettext значительно сокращает количество элементов, за которыми нужно следить переводчику. Строки, подлежащие переводу, извлекаются из исходного документа в файл PO. Затем с помощью редактора PO вводятся переведённые версии каждой строки.

Система перевода FreeBSD PO не перезаписывает PO-файлы, поэтому этап извлечения можно выполнять в любое время для обновления PO-файла.

Редактор PO используется для редактирования файла. В этих примерах показан package:editors/poedit[], так как он прост и имеет минимальные требования. Другие редакторы PO предоставляют функции, облегчающие процесс перевода. В Коллекции портов доступно несколько таких редакторов, включая package:devel/gtranslator[].

Важно сохранить PO-файл. Он содержит всю работу, проделанную переводчиками.

[IMPORTANT]
====
Перевод документов онлайн оказывается наиболее простым способом перевода документации в FreeBSD, так как позволяет нескольким пользователям совместно работать над одним файлом, эффективно распределяя нагрузку. Для получения дополнительной информации обратитесь к следующей главе: crossref:weblate[weblate-introduction,Переводы в Weblate].
====

[[po-translations-tips]]
== Советы переводчикам

[[po-translations-tips-xmltags]]
=== Сохранение AsciiDoc макросов

Сохраните макросы AsciiDoc, которые указаны на английском языке.

.Сохранение AsciiDoc макросов
[example]
====
Оригинал на английском:

[.programlisting]
....
msgid ""
"This example shows the creation of a Spanish translation of the short "
"extref:{leap-seconds}[Leap Seconds] article."
....

Испанский перевод:

[.programlisting]
....
msgid ""
"Este ejemplo muestra la creación de un artículo con poco contenido como el artículo "
"extref:{leap-seconds}[Leap Seconds]."
....

====

[[po-translations-tips-spaces]]
=== Сохранение пробелов

Сохраняйте существующие пробелы в начале и конце строк, которые нужно перевести. В переведённой версии эти пробелы также должны присутствовать.

[[po-translations-tips-verbatim]]
=== Дословные теги

Содержимое некоторых тегов должно быть скопировано дословно, без перевода:

* `man:man[1]`
* `package:package[]`
* `link`
* `image`
* `include`
* `Admonitions`
* `id's`
* `Heading tags`
* `source`

[[po-translations-building]]
== Сборка переведенного документа

Переведённую версию оригинального документа можно создать в любое время. При этом все непереведённые части документа будут включены в итоговый документ на английском языке. Большинство PO-редакторов имеют индикатор, показывающий, какая часть перевода завершена. Это позволяет переводчику легко увидеть, когда переведено достаточно строк, чтобы сборка итогового документа имела смысл.

Глава о Weblate есть полный пример того, как crossref:weblate[weblate-building,Собрать переведённый документ].

[[po-translations-submitting]]
== Отправка новой переведённой версии

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

Файлы различий, созданные в этих примерах, можно прикрепить к https://bugs.freebsd.org/bugzilla/enter_bug.cgi?product=Documentation[отчёту об ошибке в документации] или https://reviews.freebsd.org/[обзору кода].

[[po-translations-submitting-spanish]]
.Перевод статьи NanoBSD на испанский язык
[example]
====
[.procedure]
======

. Создайте diff новых файлов из базового каталога [.filename]#~/doc/# так, чтобы полный путь отображался вместе с именами файлов. Это помогает коммиттерам определить целевой языковой каталог.
+
[source, shell]
....
% cd ~/doc
% git diff documentation/content/es/articles/nanobsd/ > /tmp/es_nanobsd.diff
....
======

Глава о Weblate содержит полный пример того, как crossref:weblate[weblate-submitting-translations, отправить новый перевод].

====