Зміст

Багатомовна гра (переклади)

Одна гра, одна статистика, одні коди — а текст кожен гравець читає своєю мовою. Переклади лежать поруч із грою і підміняють текст під час показу; там, де перекладу немає, гравець бачить оригінал. Гравцеві, у якого мова збігається з мовою гри, не підміняється нічого взагалі.

Це рекомендований спосіб. Старий прийом із шаблоном {% match lang %} (Шаблони) продовжує працювати, але нові ігри краще робити перекладами: текст завдання не перетворюється на простирадло з N копій, правка верстки не розмножується мовами, а редактор показує, що ще не перекладено.

Увімкнення

У редакторі гри, вкладка “Налаштування гри”, блок “Локалізація”:

Приклад: гру написано російською, перекладено українською та англійською, а польська падає на українську (вона ближча за російську). Гравець-поляк побачить польський текст там, де він є, український — там, де польського ще немає, і російський — там, де немає й українського.

Щойно з'явилася хоча б одна мова перекладу, у редакторі з'являється вкладка “Переклад”.

Вкладка "Переклад"

Це таблиця пар «оригінал → переклад». Ліворуч рядок із гри, праворуч поле для перекладу.

Розмітка всередині рядка

Жирний, посилання, картинки та шаблони всередині абзацу в перекладі не пишуться руками: на їхньому місці стоять чипси — маленькі рамки з номером. Клацніть по чипсу — він стане в переклад там, де стоїть курсор. Чипси можна переставляти (порядок слів у мовах різний), але кожен має бути в перекладі рівно один раз — інакше переклад не збережеться і редактор про це скаже.

Так само поводяться підстановки!username!, !task_n! та інші: вони лишаються в перекладі як є, просто в потрібному місці фрази.

Корисний наслідок: самі теги, адреси посилань і класи живуть лише в оригіналі. Виправили посилання в завданні — воно змінилося в усіх мовах одразу.

Що не перекладається

Посилання та файли

Друга вкладка таблиці, з тими самими групами. Адреси картинок, звуків, відео та посилань за замовчуванням не перекладаються — майже всі вони мовно-незалежні. Але переклад адреси завести можна: так гравець потрапляє на сторінку своєю мовою або отримує озвучення своєю мовою, а абзац і верстка лишаються одні на всіх. У рахунок повноти ці рядки не йдуть.

Субтитри оверлеєм робити не треба — HTML це вже вміє: кілька <track srclang=“…”> в одному <video>, браузер вибере сам.

Застарілі переклади

Ідентичність рядка — його текст. Виправили оригінал — переклад до нього більше не підходить, рядок знову стає неперекладеним, а старий переклад їде в розділ “Застарілі переклади”. Якщо правка була дрібною (одрук), редактор сам запропонує його повернути кнопкою “відновити” просто під новим рядком. Непотрібні можна видалити — по одному або всі разом.

Переклади з іншої гри

Унизу вкладки: “Завантажити переклади з гри” — номер гри та кнопка. Візьмуться лише ті пари, чий оригінал є і в цій грі; звіт скаже, скільки збіглося і скільки пропущено. Наявні переклади за замовчуванням не перезаписуються. Має сенс для серії ігор одного автора з однією мовою оригіналу: у гри іншою мовою збігів не буде.

Як це зберігається

Переклади — частина чернетки редактора, нарівні з текстом. Перекладати можна й незбережене завдання: написали завдання, тут же переклали, зберегли однією кнопкою. Правка оригіналу та полагоджені переклади їдуть на сервер однією операцією, тож моменту, коли гравці бачать новий текст зі старим перекладом, не виникає.

Переклади їдуть разом із грою в її JSON — секцією translations — і повертаються під час імпорту. Копія гри отримує й переклади; копіювання одного завдання в іншу гру переклади не переносить (словник спільний на гру, чужі рядки там були б сміттям) — для цього є «Завантажити переклади з гри».

Перевірка

Відкрийте гру з явною мовою: https://qeng.org/game/1234/?lang=uk. Перевірте й мову, якої в гри немає, — так видно, чи працює рядок «інші мови».

Чого переклади поки не стосуються

Для них поки працює попередній спосіб — {% match lang %}.