Двуязычный интерфейс (RU/EN) с автоопределением + документация на двух языках

Панель:
- engine/main/lang.php: класс Lang, автоопределение языка (?lang= -> cookie -> Accept-Language -> конфиг)
- перевод применяется к готовому ответу через ob_start(): покрывает всю панель, админку и письма,
  не требуя правки 200 файлов шаблонов; отсутствующая фраза остаётся русской
- замена только на границах слов, иначе короткий ключ портил длинные слова (Модуль -> Modуль)
- AJAX-ответы переводятся отдельно (json_encode экранирует кириллицу в \uXXXX)
- application/lang/en.php: 657 переводов; ru.php как точка расширения
- переключатель RU/EN в шапке кабинета, админки и в подвале страницы входа
- 'lang' в config.php — язык по умолчанию
- проверено обходом 20 разделов: 0 непереведённых фраз, 0 мешанины языков, 0 фаталов

Документация — теперь на русском и английском:
- README.en.md, CHANGES.en.md, SECURITY.en.md, GUIDE.en.md
- переключатели языка в начале каждого документа
- раздел «Язык интерфейса» в инструкции: как работает, как добавить свой язык
This commit is contained in:
2026-07-30 02:25:34 +00:00
parent 6ee2744e3a
commit e0b96d3501
16 changed files with 2145 additions and 11 deletions
+54 -9
View File
@@ -1,3 +1,5 @@
**Русский** · [English](GUIDE.en.md)
# Полная инструкция
От пустого сервера до принимающего клиентов хостинга.
@@ -12,10 +14,11 @@
4. [Подключение ноды к панели](#4-подключение-ноды-к-панели)
5. [Сборки игр](#5-сборки-игр)
6. [Настройка панели](#6-настройка-панели)
7. [Капча](#7-капча)
8. [HTTPS и домен](#8-https-и-домен)
9. [Обслуживание](#9-обслуживание)
10. [Если что-то не работает](#10-если-что-то-не-работает)
7. [Язык интерфейса](#7-язык-интерфейса)
8. [Капча](#8-капча)
9. [HTTPS и домен](#9-https-и-домен)
10. [Обслуживание](#10-обслуживание)
11. [Если что-то не работает](#11-если-что-то-не-работает)
---
@@ -219,7 +222,49 @@ Minecraft (Paper) — с `papermc.io`, RAGE:MP — с `rage.mp`, игры Steam
---
## 7. Капча
## 7. Язык интерфейса
Панель говорит на **русском и английском**. Язык выбирается в таком порядке:
1. `?lang=en` или `?lang=ru` в адресе — явный выбор, запоминается в cookie на год
2. cookie `lang` — прошлый выбор
3. **заголовок браузера `Accept-Language`** — автоопределение
4. параметр `lang` в `application/config.php` (по умолчанию `ru`)
Автоопределение намеренно оставляет русский для русскоязычных локалей (ru, uk, be, kk и других)
и переключает на английский для всех остальных — то есть посетитель из Германии или Бразилии
сразу получает английский интерфейс, ничего не нажимая.
**Переключатель** стоит в верхней панели кабинета и админки (кнопки `RU` / `EN` рядом с балансом)
и в подвале страницы входа.
**Как это сделано.** Панель написана с русским текстом прямо в шаблонах — около 1500 строк в
200 файлах. Вместо того чтобы переписывать их все, перевод применяется к готовому ответу:
`index.php` оборачивает вывод в `ob_start()`, и перед отправкой браузеру строки заменяются по
словарю (`engine/main/lang.php`). Это разом покрывает всю панель, включая админку и письма, а
фразы, которых нет в словаре, просто остаются русскими — ничего не может пропасть с экрана.
Замена работает **только на границах слов**, поэтому короткий ключ не может испортить слово
подлиннее (без этого «Мод» превращал «Модуль» в «Modуль»).
**Как добавить свой язык**, например немецкий:
```bash
cp panel/application/lang/en.php panel/application/lang/de.php
# перевести значения в de.php, затем добавить 'de' в Lang::AVAILABLE
# в panel/engine/main/lang.php
```
Полноту словаря мы проверяли обходом страниц: все 20 разделов, которые проходим, отдаются без
остатков русского текста. Если увидите непереведённую фразу — допишите её в
`application/lang/en.php`, ключ это русский текст ровно в том виде, в каком он на странице.
Перевод включается только когда язык не русский; в русском режиме словарь даже не загружается,
поэтому накладных расходов нет.
---
## 8. Капча
По умолчанию **выключена** — регистрация и вход работают без неё, поля просто нет.
@@ -246,7 +291,7 @@ sudo service php8.4-fpm restart # подставьте свою версию
---
## 8. HTTPS и домен
## 9. HTTPS и домен
Панель ставится на HTTP. Для сертификата:
@@ -269,7 +314,7 @@ sudo service php8.4-fpm restart
---
## 9. Обслуживание
## 10. Обслуживание
**Резервные копии.** Сохраняйте базу и конфиг:
@@ -303,7 +348,7 @@ sudo service php8.4-fpm restart
---
## 10. Если что-то не работает
## 11. Если что-то не работает
**«Ошибка: Не удалось загрузить контроллер …»** — панель не нашла контроллер для этого адреса.
Обычно это ссылка на то, чего нет: например `/phpmyadmin`, когда phpMyAdmin не установлен
@@ -314,7 +359,7 @@ sudo service php8.4-fpm restart
Частая причина: `short_open_tag = Off`. Панель использует короткие теги `<? ?>`, установщик
включает эту опцию сам, но при переустановке PHP её нужно вернуть.
**Не могу войти, на форме «Invalid site key»** — включена капча без ключей, см. раздел 7.
**Не могу войти, на форме «Invalid site key»** — включена капча без ключей, см. раздел 8.
**Планировщик не работает** (статистика не обновляется, просроченные сервера не отключаются):