{{indexmenu_n>50}} ====== Багатомовна гра (переклади) ====== Одна гра, одна статистика, одні коди — а текст кожен гравець читає своєю мовою. Переклади лежать **поруч** із грою і підміняють текст під час показу; там, де перекладу немає, гравець бачить оригінал. Гравцеві, у якого мова збігається з мовою гри, не підміняється нічого взагалі. Це рекомендований спосіб для перекладу тексту, посилань і картинок. Старий прийом із шаблоном ''{% match lang %}'' ([[uk:authors_main:task_editor:advanced:edit_templates#як_зробити_багатомовну_гру|Шаблони]]) продовжує працювати і залишається правильним вибором там, де мові потрібна не інша версія того самого тексту (це якраз перекладається), а інша структура: свій набір html-блоків, якого немає в інших мов, своя логіка у скрипті завдання, а не просто інший рядок у ньому, або розгалуження за мовою, скомбіноване з іншим темплейтом - за кодом, за командою, за бонусом. А для перекладу тексту гри нові ігри краще робити перекладами: текст завдання не перетворюється на простирадло з N копій, правка верстки не розмножується мовами, а редактор показує, що ще не перекладено. ===== Увімкнення ===== У [[uk:authors_main:task_editor:editor|редакторі гри]], вкладка **"Налаштування гри"**, блок **"Локалізація"**: {{ :authors_main:game_management:localization_block_uk.png?800 |Блок «Локалізація»: мова гри, мови перекладу і на що падає неперекладене}} * **Мова гри** — мова, якою гру написано. Доки її не вибрано, жодної локалізації в гри немає: нічого не рахується, нічого не зберігається, редактор виглядає як завжди. * **Мови перекладу** — галочки мов, на які гру перекладають. Поруч із кожною — **"падає на"**: якою мовою показувати те, що цією ще не перекладено. Порожньо — одразу мовою гри. * Рядок **"інші мови"** — куди відправляти гравця, мови якого в гри немає взагалі. Приклад: гру написано російською, перекладено українською та англійською, а польська падає на українську (вона ближча за російську). Гравець-поляк побачить польський текст там, де він є, український — там, де польського ще немає, і російський — там, де немає й українського. Щойно з'явилася хоча б одна мова перекладу, у редакторі з'являється вкладка **"Переклад"**. ===== Вкладка "Переклад" ===== Це таблиця пар «оригінал → переклад». Ліворуч рядок із гри, праворуч поле для перекладу. Відкривається вона на неперекладених рядках — на тому, що лишилося зробити. {{ :authors_main:game_management:localization_todo_uk.png?800 |Вкладка «Переклад»: типово показані неперекладені рядки}} * **Рядки збираються автоматично.** Великий текст (завдання, підказка, афіша, фінішний текст) ріжеться на абзаци; короткі поля (назва гри, назва завдання, назва коду, опис підказки, формат відповіді) йдуть цілком. Розмічати в тексті нічого не треба. * **Розкладка** — перемикач праворуч над таблицею. **«За полями»** (типово) ставить рядки під заголовком їхнього поля — «Завдання 7 → Текст завдання» — і в тому порядку, в якому вони йдуть у тексті: так абзац перекладають, бачачи сусідні.\ {{ :authors_main:game_management:localization_fields_uk.png?800 |Розкладка «За полями»: рядки стоять під заголовком свого поля}} **«Списком»** дає суцільний список, де адреса написана біля кожного рядка; так зручніше з короткими полями — у назви коду поле це один рядок, і заголовків виходить більше, ніж роботи.\ {{ :authors_main:game_management:localization_flat_uk.png?800 |Розкладка «Списком»: суцільний список, адреса написана біля кожного рядка}} * **Однаковий текст перекладається один раз на всю гру.** Якщо рядок трапляється в кількох місцях, поряд із ним стоїть **"місць: N"** — наведіть мишу, щоб побачити де. Правка такого рядка змінює його всюди. За полями такий рядок намальовано в кожному своєму полі й позначено **"спільний рядок, місць: N"**: це не дубль, а той самий запис словника. * **Стан рядка** видно значком: свій переклад, //з мови X// (прийшло ланцюжком), //база// (перекладу немає) або //не перекладається//. * **Повнота** показується двома числами: скільки перекладено цією мовою і скільки вийде з урахуванням ланцюжка. Друге число саме по собі оманливе — воно ховає неперекладене за чужою мовою. * **Групи рядків** — «неперекладені», «перекладені», «неперекладні». Це не вибір одного з трьох, а перемикачі: вони складаються. Типово ввімкнені лише неперекладені — це і є робота; перекладені вмикають, коли йдуть вичитувати готове, неперекладні — коли треба зняти позначку. * **Фільтр** — рядок під групами. Відбирає за **оригіналом**, регулярним виразом, і працює **разом** із групами, а не замість них: «неперекладені» і ті, що підійшли під фільтр. Застосовується по Enter або кнопкою «Фільтр», числа на кнопках груп при цьому показують уже відібране, а поруч із полем стоїть **«показано: N / M»** — скільки рядків лишилося після фільтра **і** груп. ==== Фільтри і масова позначка ==== Стрілка біля поля відкриває **готові фільтри**: * **«немає кирилиці»** та **«немає латиниці»** — рахуються за текстом без чипсів і підстановок, тому ''!username!'' і ''%offline%'' латиницею не вважаються; * **«немає слів»** — літера є, а слова немає: координати на кшталт ''N 49.5905177 34.5434377'', схеми, «2+ шт». Вибране зі списку стає в те саме поле, тож завжди видно, чим відібрано; готовий фільтр можна й виправити — щойно торкнулися тексту, він стає звичайним регекспом. Свій фільтр можна **зберегти** («зберегти фільтр» поруч із полем) — він потрапить до другої половини того самого списку, а прибирається звідти кнопкою «забути фільтр». Збережені фільтри особисті й спільні на всі ігри: це інструмент того, хто розбирає словник, а не властивість гри. Заради цього фільтр і потрібен: праворуч від нього — список **«з усім показаним...»**. У ньому ті самі три пункти, що наприкінці кожного рядка таблиці («перекладаємо», «не перекладати цією мовою», «не перекладати ніде»), тільки застосовуються вони разом до всього, що зараз показано, — тобто до фільтра разом із групами. Питається з числом в обидва боки: зняття пачкою небезпечніше за позначку — воно повертає в роботу те, що виключили свідомо. Уся пачка — один крок скасування, і кожен рядок видно у вікні збереження. Типовий сценарій: фільтр «немає кирилиці» → у списку лишилися бренди, імена й посилання → позначити їх разом → лічильник повноти перестав упиратися в те, що перекладати ніхто не збирався. ==== Розмітка всередині рядка ==== Жирний, посилання, картинки та шаблони всередині абзацу в перекладі не пишуться руками: на їхньому місці стоять **чипси** — маленькі рамки з номером. {{ :authors_main:game_management:localization_row_uk.png?800 |Розмітка всередині рядка: жирний, посилання та шаблони стоять чипсами}} Клацніть по чипсу — він стане в переклад там, де стоїть курсор. {{ :authors_main:game_management:localization_chips_uk.gif |Клац по чипсу ставить маркер розмітки в переклад}} Чипси можна переставляти (порядок слів у мовах різний), але кожен має бути в перекладі рівно один раз — інакше переклад не збережеться і редактор про це скаже. Так само поводяться **підстановки** — ''!username!'', ''!task_n!'' та інші: вони лишаються в перекладі як є, просто в потрібному місці фрази. Корисний наслідок: самі теги, адреси посилань і класи живуть лише в оригіналі. Виправили посилання в завданні — воно змінилося в усіх мовах одразу. ==== Що не перекладається ==== * **Коди-відповіді не перекладаються ніколи.** Це й робить статистику спільною. Відповіді різними мовами просто дописуються синонімами через кому в тому самому коді. * **Не перекладати цей рядок** — перемикач у кінці рядка таблиці, два режими: «не перекладати цією мовою» і «не перекладати ніде». Для брендів, власних назв, латинських цитат. Такі рядки йдуть із «неперекладених» і не заважають лічильнику повноти дійти до 100%. * **''translate="no"''** у HTML завдання — сильніший спосіб: такий шматок не стане рядком узагалі, і його не зачепить навіть автопереклад браузера. Для кодових слів і відповідей усередині тексту це важливіше, ніж здається: автоматично перекладене кодове слово ламає гру. ==== Посилання та файли ==== Адреси картинок, звуків, відео та посилань за замовчуванням **не** перекладаються — майже всі вони мовно-незалежні. Але переклад адреси завести можна: так гравець потрапляє на сторінку своєю мовою або отримує озвучення своєю мовою, а абзац і верстка лишаються одні на всіх. Адреса стоїть у таблиці **там, де вона стоїть у тексті**, звичайним рядком: посилання всередині абзацу — під самим абзацом, з відступом; картинка, що стоїть у полі сама, — рядком сама по собі. Перекладаєте абзац — бачите і його посилання, окремо шукати не треба. У всьому іншому це такий самий рядок, як текстовий: ті самі групи («неперекладені» та решта), той самий перемикач «не перекладати». Відмінність одна — у рахунок повноти адреси не йдуть. Субтитри оверлеєм робити не треба — HTML це вже вміє: кілька '''' в одному ''