Двуязычный интерфейс (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
+25 -2
View File
@@ -1,3 +1,5 @@
**Русский** · [English](CHANGES.en.md)
# Что изменено по сравнению с оригиналом
Оригинал: **HostinPL 5.6** в виде «nulled»-сборки (форк `Xopowblu-4EJlOBEK/HostinPL-5.6`),
@@ -153,7 +155,28 @@ Node.js берётся из NodeSource **по HTTPS с проверкой клю
---
## 8. Брендинг и даты
## 8. Языки интерфейса: русский и английский
Оригинал был только на русском, весь текст вшит в шаблоны. В сборке появился слой перевода:
* `engine/main/lang.php` — класс `Lang` и глобальный помощник `t()`
* `application/lang/ru.php`, `application/lang/en.php` — словари
* Порядок выбора языка: параметр `?lang=` → cookie `lang` → **заголовок браузера
`Accept-Language`** → значение по умолчанию из конфига
* Переключатель (RU / EN) в шапке кабинета, админки и в подвале страницы входа
* Фразы, которых нет в словаре, остаются на русском — из интерфейса ничего не может пропасть
Перевод применяется к готовому ответу через `ob_start()`, поэтому 200 файлов шаблонов
переписывать не понадобилось, и покрытие сразу распространяется на админку и письма.
Замена работает только на границах слов: без этого короткий ключ портил длинные слова
(«Мод» превращал «Модуль» в «Modуль», «день» делал из «деньги» «dayги»).
Полнота проверена обходом 20 разделов: непереведённых фраз не осталось, мешанины языков нет.
Подробности — в [ИНСТРУКЦИЯ.md](ИНСТРУКЦИЯ.md), раздел «Язык интерфейса».
---
## 9. Брендинг и даты
* Год в подвалах: `2020©``2026©` (`views/common/footer.php`, `views/common/loginheader.php`)
* Название и описание — REDL.IO: `application/config.php` (`description`, `keywords`,
@@ -169,7 +192,7 @@ Node.js берётся из NodeSource **по HTTPS с проверкой клю
---
## 9. phpMyAdmin
## 10. phpMyAdmin
Панель ссылается на `/phpmyadmin` из админки. Оригинальный установщик ставил phpMyAdmin через
Apache, что на nginx не работало. Теперь он ставится из репозитория дистрибутива и отдаётся