# Участие в переводе
## Оформление
- Символ отступа — это пробел (табуляция в файлах `.xml` запрещена)
- В документации используется буква `Ё`. Обращайте на это, пожалуйста, внимание.
## Рекомендации по переводу
Комментарии к коду требуется переводить;
описание вывода, например, `echo "You reload page $num times";` — тоже требуется перевести.
Исключение из правила перевода английских слов в коде —
функция будет по-разному обрабатывать английский и русский варианты, например,
`strtolower("Alex") === "alex"`, но `strtolower("Алексей") !== "алексей"`.
Заголовок примера `
func_name example`
переводится как `Пример [что делает функция, в родительном падеже] функцией func_name`:
`Пример слияния массивов функцией function_name`. То же правило справедливо для методов,
только со словом «метод».
При оформлении кода примеров переводчик придерживается стиля кодирования,
который описывает стандартная PHP-рекомендация [PSR-12](https://www.php-fig.org/psr/psr-12/),
даже если придётся изменить форматирование примера оригинальной документации.
Переводить следует максимально близко к оригинальному тексту с отступлениями, если это оправдано.
Если не устраивает формулировка, сначала следует обновить английскую версию, а затем перевод.
## Актуализация перевода
Оригинал англоязычной документации находится по адресу [doc-en](https://github.com/php/doc-en).
Файлы русскоязычной документации имеют определённый формат. В начале каждого файла должна быть конструкция следующего вида:
```xml
```
где `0abaad099e3ec6064ed8cf31553dcd5e3e3fdfba` — полный номер коммита в англоязычной документации, последнего актуального на момент редактирования для данного файла.
Это нужно для того, чтобы понимать, что именно переведено, а что ещё нет.
### Отслеживание изменений
#### На сайте doc.php.net
Выберите русский язык на правой боковой панели, а затем используйте инструмент Outdated files.
В таблице будут перечислены файлы, для которых необходимо обновить перевод.
В столбце `en` указан хеш актуальной английской версии, а в столбце `ru` — хеш перевода.
#### В командной строке
Клонируйте репозиторий [doc-base](https://github.com/php/doc-base) на один уровень с
[doc-en](https://github.com/php/doc-en) и `doc-ru`, чтобы структура папок была следующей:
```
├── doc-base/
├── en/
└── ru/
```
Обратите внимание, что языковые папки должны быть без префикса `doc-`.
Для клонирования можно воспользоваться командой `git clone https://github.com/php/doc-ru.git ru`.
Выполните следующую команду в терминале и откройте получившийся `revcheck.html` в браузере:
```
php doc-base/scripts/revcheck.php ru > revcheck.html
```
В разделе Outdated Files можно посмотреть актуальную английскую версию и текущую.
### Просмотр изменений
Чтобы посмотреть, какие изменения были произведены, выполните следующую команду:
```
git --no-pager diff 8b5940cadeb4f1c8492f4a7f70743a2be807cf39 68a9c82e06906a5c00e0199307d87dd3739f719b reference/array/functions/in-array.xml
```
где первый хеш — это текущая версия из `EN-Revision`, а второй — хеш актуальной английской версии.
Пример вывода:
```diff
--- a/reference/array/functions/in-array.xml
+++ b/reference/array/functions/in-array.xml
@@ -14,7 +14,7 @@
boolstrict&false;
- Searches haystack for needle using loose comparison
+ Searches for needle in haystack using loose comparison unless strict is set.
```
Как видите, изменилось описание функции.
Строка `Searches haystack for needle using loose comparison`
заменена на `Searches for needle in haystack using loose comparison`.
Откройте файл `reference/array/functions/in-array.xml` в репозитории `doc-ru`
и измените строку в соответствии с английской версией.
Затем обновите комментарий `EN-Revision`.
## Проверка отображения перевода
Для локального просмотра документации, выполните следующие команды в терминале:
````bash
# Настройка
git clone https://github.com/php/phd.git
git clone https://github.com/php/doc-base.git
git clone https://github.com/php/doc-ru.git ru
# Проверка изменений
php doc-base/configure.php --with-lang=ru
php phd/render.php --docbook doc-base/.manual.xml --package PHP --format xhtml
# Откройте output/php-chunked-xhtml/ в браузере.
````
## Соглашение по переводу
| Оригинал | Перевод |
|---------------------------------|-----------------------------------------------------------------------|
| Application | Приложение |
| Cache | Кеш |
| Callback function | Callback-функция |
| Child | Потомок, дочерний элемент (узел) |
| CLI | Интерфейс командной строки |
| Code (php-code) | Код, PHP-код |
| Coding standards | Стандарты кодирования |
| Commandline program | Консольная программа |
| Commit | Фиксация (например, транзакции) |
| Default, by default | По умолчанию (пишется без дефиса) |
| Directory | Директория |
| Download | Скачать (не то же, что «загрузить», см. Load) |
| Entry | Элемент (существительное, для массивов, списков и прочих структур) |
| Expression | Выражение |
| Extension | Модуль |
| Features/functionality | Возможности, функциональность |
| Fiber | Файбер |
| Float (floating point) | Число с плавающей точкой (плавающая точка) |
| Fully Qualified name | Абсолютное имя |
| Getter | Метод чтения |
| Global scope | Глобальное пространство |
| Hash | Хеш |
| HTML entity | HTML-сущность |
| HTTP-Authentication | HTTP-аутентификация |
| Hypertext preprocessor | Препроцессор гипертекста |
| Handle | Дескриптор (например, cURL) или обработчик (кроме cURL) |
| ID (БД) | ID |
| ID (в тексте) | Идентификатор |
| Legacy (system, server) | Устаревшая система, сервер, протокол |
| Legacy support | Поддержка старых версий |
| Load | Загрузить (не то же, что «скачать», см. Download) |
| Locale | Региональные настройки или параметры; локаль |
| Magic quotes | «Магические» кавычки |
| Magic constants/methods/numbers | «Магические» константы/методы/числа |
| Multibyte string | Многобайтовая строка |
| Namespace | Пространство имён |
| Node | Узел |
| Optional | Необязательный |
| Override | Переопределять |
| Otherwise | В противном случае (только в начале предложения! — прим.), иначе |
| On success | В случае успешного выполнения |
| On fail/failure | Если возникла ошибка |
| Parameter(s) | Параметр(ы), аргумент(ы) |
| Parser | Парсер |
| Parsing | Разбор (например, разбор строки) |
| Prefetch | Предварительная выборка |
| PCRE | Perl-совместимые регулярные выражения |
| PHP value | PHP-значение |
| Private | Закрытый |
| Protected | Защищённый |
| Public | Общедоступный или открытый |
| Qualified name | Полное имя |
| Read-only | Доступен только для чтения |
| Result set | Результирующий набор |
| Returns | Возвращает |
| SAPI | Интерфейс разработки серверных приложений |
| Script | Скрипт |
| Setter | Устанавливающий метод |
| Single quotes | Одинарные кавычки |
| Stream | Поток |
| Shared block | Общая блокировка |
| Shared memory | Разделяемая память |
| SQL query | Запрос SQL, SQL-запрос |
| SQL | Структурированный язык запросов |
| Statement | Инструкция |
| Throw exception | Выбросить исключение |
| Timeout | Время ожидания |
| Timezone, time zone | Часовой пояс |
| Token | Лексема |
| Tokenizer | Лексер |
| To throw a warning/error | Вызвать предупреждение или ошибку |
| Trait | Трейт |
| Writable | Доступен для записи |
| Wrapper | Обёртка |
| Unqualified name | Неполное имя |
| Upload | Выгрузить или переданные, или отправленные, данные; но не «загрузка») |
| URL wrapper | Обёртка URL |
## Не переводятся
- Apache
- Cookie
- Linux
- PEAR
- PECL
- PHP Group
- PHP
- Referer
- Windows
- Имена переменных
- Типы переменных (integer, string, bool, resource)
И другие аббревиатуры или имена собственные.
## Сопроводительные, или уточняющие, слова
Когда в английской документации встречаются термины —
аббревиатуры, названия параметров, функций или методов, имена констант, операционных систем и т. д. —
без сопровождающих слов, которые указывают, к какому предмету относится термин,
необходимо добавить уточняющее слово.
Например:
| Оригинал | Перевод |
|---------------------------------|-----------------------------------------------------------------------|
| `$foo` | Переменная `$foo` |
| `$_SERVER` | Суперглобальная переменная `$_SERVER` |
| `__METHOD__` | Магическая константа `__METHOD__` |
| `foo` | Параметр `foo` |
| `echo` | Языковая конструкция `echo` |
| Apache | Веб-сервер Apache, или Модуль Apache |
| Content-Length | Заголовок Content-Length |
| CURLOPT_HEADER | Параметр CURLOPT_HEADER |
| CURLINFO_HTTP_CODE | Опция CURLINFO_HTTP_CODE |
| SAPI | Интерфейс SAPI |
| Linux | Семейство операционных систем Linux или Linux-системы |
| PHP_VERSION | Константа PHP_VERSION |
| `var_dump()` | Функция `var_dump()` |
Одного уточнения хватит, если в предложении или коротком абзаце термин встречается больше одного раза, по смыслу.
При добавлении уточняющего слова дайте точное определение. Для термина `$_SERVER` доступны
уточнения: «Переменная $_SERVER», «Глобальная переменная $_SERVER» или «Суперглобальная переменная $_SERVER» — лучше предпочесть последнее.
## Параметры и аргументы
Параметр — член функции, который принадлежит функции, составляет сигнатуру функции или метода.
Аргумент — значение, которое передают в функцию или метод «снаружи», чтобы определить значение параметра.
Аргумент допускается передавать в функцию, передать в функцию параметр — нельзя, поскольку он уже находится «внутри» функции.
Участники перевода руководствуются этими разъяснениями, даже если в оригинальной документации «параметры»
и «аргументы» употребили некорректно.
## Скобки
Скобки затрудняют и замедляют чтение. Читатель «спотыкается» о скобки. Но без скобок нельзя обойтись. «В скобки заключают
слова и предложения, вставляемые в предложение с целью пояснения или дополнения высказываемой мысли, а также
для каких-либо добавочных замечаний» — гласят правила русского языка.
При переводе не нужно брать в скобки названия параметров.
Например:
> Функция больше не поддерживает передачу разделителя `separator` после массива `array`.
В примере названия параметров — полноценные и равноправные члены предложения.
Названия типов нужно брать в скобки.
Например:
> Функция возвращает строку (`string`).
В этом примере слово string (вместе с тегами) взяли в скобки, потому что слово поясняет,
что «строка», кроме словарного значения, означает тип данных.
Старайтесь избавиться от скобок, если уместно (если это не часть примера или выражения и т. д.),
даже если в исходной документации слова или предложения указали в скобках.
Точку ставят после закрывающей скобки, если слова в скобках — часть предложения (как в этом примере).
(Точку ставят перед закрывающей скобкой, если в скобках написано отдельное предложение — как здесь.)