====== Перевод домена ======
Шапка, меню, подвал и страницы домена можно показывать на языке зрителя. Устроено это так же, как [[authors_main:game_management:localization|переводы игры]]: рядом с текстом лежит словарь пар «оригинал → перевод», и при показе текст подменяется. Перевода нет — зритель видит оригинал.
Экран — **«Перевод»** в админской панели домена (**«Переводы»** в новой админке). Открыть его может администратор домена.
Речь только о том тексте, который написали **вы**. Кнопки, письма и прочий текст самого движка переводятся сами и к этому словарю отношения не имеют.
===== Настройки =====
{{ :admin_main:domain_translate_settings.png?800 |Вкладка «Настройки»: язык домена, языки перевода и на что падает непереведённое}}
* **Язык, на котором написан домен** — язык оригинала. Пока он не выбран, локализации у домена нет вовсе: ничего не подменяется, словарь не читается.
* **Языки перевода** — галочки. Рядом с каждым **«непереведённое показывать»**: на какой язык падать там, где перевода ещё нет. Пусто — сразу на базовый.
* Строка **«Остальные языки»** — куда отправлять зрителя, языка которого у домена нет.
Падать можно только на язык, который у домена **объявлен**. Снимете галочку с языка — всё, что на него падало, сбросится тут же, на экране.
> Выключить локализацию (выбрать «Локализация выключена») можно в любой момент: подмена перестанет работать сразу для всех, а словарь останется в целости.
===== Страницы =====
Вкладка **«Страницы»** перечисляет страницы домена и спрашивает про каждую: переводим её словарём или нет.
У страницы может быть **своя копия** на другом языке. Такая копия всегда **сильнее словаря**: если она есть, зритель увидит её, а словарь к странице не применяется. Превратить копию в пары словаря нечем — либо копия, либо словарь.
===== Переводы =====
Третья вкладка — сама таблица пар. Она **та же самая**, что во вкладке «Перевод» редактора игры: те же группы «непереведённые / переведённые / непереводимые», тот же фильтр, те же пометки «не переводить». Как она устроена, подробно описано на странице [[authors_main:game_management:localization#вкладка_перевод|Многоязычная игра]].
Отличие одно — селектор **«Что переводим»** в строке фильтра:
* **«Всё сразу: домен и страницы»**;
* **«Домен: шапка, меню, подвал»**;
* **«Страница ...»** — по одной.
> **«Всё сразу» пишет перевод в несколько словарей.** Строка, которая встречается и в шапке, и на странице, — это одна строка таблицы, и правка запишется в словарь каждого места, где строка встретилась. Нужен странице свой перевод той же фразы — сузьте «Что переводим» до этой страницы.
===== Что переводится =====
* **Название домена** — оно же в шапке и в заголовке вкладки браузера.
* **Шапка сайта**, **Меню сайта**, **Подвал сайта**, **Шапка в игре** — html из [[admin_main:domain_menu|раздела «Дизайн»]].
* **Страницы домена** — те, что отмечены на вкладке «Страницы».
Не переводится: css, адреса (имя домена, адрес страницы), настройки почты и оплаты, текст самого движка и **содержание игр** — у игр [[authors_main:game_management:localization|свои переводы]].
Письма домена уходят с **базовым** названием, не с переведённым.
Шаблоны ''{% match lang %}'' в дизайне домена не работают — это приём для заданий.
===== Текст внутри скриптов: gt() =====
Меню домена — это скрипт, и подписи кнопок в нём лежат строками. Чтобы движок их увидел, оберните каждую в ''gt()'':
add_navbar({
items: [
{name: gt('ИГРЫ'), url: 'index.php'},
{name: gt('АРХИВ'), url: 'archive.php'},
],
...
});
Дальше подпись появится в таблице переводов как обычная строка, и перевод подставится **на сервере**, до того как страница уедет зрителю.
* ''gt()'' берёт **строку прямо в скобках**, в кавычках. ''gt(x)'' и ''gt('А' + b)'' движок не тронет — они останутся как есть и вернут своё значение.
* Строки без букв (цифры, знаки) не переводятся.
* Подписи **без** ''gt()'' в таблицу просто не попадут, и никто об этом не предупредит.
Это работает в любом html-блоке дизайна, не только в меню.
===== JSON: выгрузить и загрузить =====
Кнопка **«JSON»** наверху экрана:
* **Скачать всё** — снимок словаря целиком, все языки.
* **Скачать непереведённое** — файл для переводчика: только то, что осталось.
* **Скачать (язык)** и **Скачать непереведённое (язык)** — то же по одному языку.
* **Загрузить из файла**, **Копировать в буфер**, **Вставить из буфера**.
Загрузка **не сохраняет**: она правит экран, а записывает всё кнопка **«Сохранить»**. Уйти со страницы с несохранёнными правками браузер не даст молча — спросит.
Загрузка **сливает, а не заменяет**: пары накладываются по одной. Пустой перевод в файле означает «убрать эту пару».
Принимаются оба вида файлов — и полный снимок, и файл переводчика.
===== Новый домен =====
Новый домен получает словарь базового **в наследство** — копией, один раз, в момент создания. Дальнейшие правки словаря базового домена в него уже не приедут.
Название у нового домена своё, поэтому унаследованный перевод старого названия приедет в **«Устаревшие переводы»**, а новое останется непереведённым.
===== Что стоит знать =====
* **Правка оригинала отвязывает перевод.** Изменили текст в дизайне — его перевод уходит в «Устаревшие переводы», откуда его можно привязать заново или удалить. Откат дизайна в студии словари не откатывает.
* **Источник — сохранённый дизайн, а не черновик.** Поправили шапку в студии — сначала сохраните её, потом обновите этот экран.
* **Одна «Сохранить» пишет сразу несколько вещей** — языки, отметки страниц и словари. Если что-то не записалось, красная полоса перечислит всё сразу.
* **Непереведённая и никак не помеченная строка в словарь не пишется** — пустых пар там не бывает.
* **Перевод, потерявший или придумавший подстановку** (''!username!'' и подобные), не сохранится: движок скажет об этом.
===== Старый способ: addTranslation() =====
Раньше подписи меню переводились в браузере, вызовом в том же блоке меню:
addTranslation('en', 'АВТОРАМ', 'ABOUT');
**Он продолжает работать**, и у идущих доменов его не отбирают. Но он покрывает только подписи кнопок меню — ни шапку, ни подвал, ни страницы, — и не говорит, что ещё не переведено.
Двойного перевода не будет: если строку перевёл сервер, в браузер приедет уже английская, и ''addTranslation'' её просто не найдёт.
Для нового домена берите ''gt()'' и эту страницу.
===== Смотрите также =====
* [[admin_main:domain_menu|Настройка меню домена]] — как устроен блок меню.
* [[authors_main:game_management:localization|Многоязычная игра]] — переводы игры; таблица та же самая.