Власна мова й мовний пакет: переклад, файли, пакування
Як додати мову, якої немає в каталозі: через панель і готовим пакетом; будова пакета, що приймається, а що ні.
Мови немає в каталозі? Її можна додати самому, і програмувати для цього не потрібно: мова — це лише переклади, жодного рядка коду. Є два шляхи. Перший — прямо в панелі: завантажили зразок, переклали, завантажили назад. Другий — готовий пакет (файл .zip), який можна поставити на будь-який сайт на Nex1on, свій чи чужий.
Шлях перший: через панель
Мови й тексти → Мови → Додати мову. Заповніть форму:
| Поле | Що вписати |
|---|---|
| Код | дві-три малі латинські літери, можна з регіоном: fr, de, pt-br. Код потрапляє в адреси й у записи, тому потім не змінюється. Зайняті коди поставки (en, ru, uk, no, pl, sv, lt) і службові слова (api, admin, core, new, all, xx) |
| Назва англійською, назва самою мовою | наприклад French і Français; їх побачать у виборі мови |
| Напрям письма | зліва направо або справа наліво |
| Форми множини | правило мови: 2 форми (англійська, німецька, іспанська), 2 форми «0–1 / більше» (французька, португальська), 1 форма (турецька, японська, китайська), 3 форми (російська, українська, польське й литовське правила, чеська та словацька). Від вибору залежить, скільки варіантів потрібно писати в рядках із числом |
Мова створюється чернеткою: на сайті її поки не видно. Далі три кроки на сторінці самої мови.
- Завантажити зразок. Кнопка «Завантажити всі ключі» віддає файл JSON, де є всі рядки рушія й модулів з англійським текстом. Пізніше, коли частину вже перекладено, «Завантажити лише відсутнє» віддає лише те, чого ще немає.
- Перекласти й завантажити. Файл влаштований так: нагорі
_meta(службове, не змінюйте), нижчеstrings— «ключ»: «англійський текст». Змінюйте лише значення праворуч. Завантажте файл кнопкою «Завантажити й перевірити» (до 3 МБ). Завантаження доповнює попереднє, тому перекладати можна частинами. - Увімкнути. Коли переклад готовий, натисніть «Увімкнути»: мова з’явиться у виборі мови на сайті та в мові панелі. Повний переклад (100 %) вмикається одразу, від 90 % — за галочкою: відсутнє показується англійською.
{
"_meta": { "format": 1, "language": "fr", "base": "en", "keys": 15628 },
"strings": {
"ai.bar.label": "Assistant IA",
"ai.bar.run": "Lancer"
}
}Що перевіряється під час завантаження. Файл розбирається рядок за рядком. Невідомі ключі ігноруються. Рядок відхиляється, і в списку під формою написано причину, якщо в ньому:
- загубилася підстановка у фігурних дужках (
{count},{name}): у перекладі вони мають лишитися такими самими, як в англійському тексті; - з’явилася HTML-подібна розмітка або небезпечне посилання;
- неправильна кількість форм у рядка з числом: форми пишуть через «|», за кількістю форм правила мови;
- значення не рядок або довше за 4000 знаків.
Прийняті рядки зберігаються одразу, відхилені можна виправити й завантажити знову.
Видалення. Мову спершу вимикають, потім «Видалити мову» з уведенням її коду. Файли перекладів переносяться поруч у _trash, а не стираються; записи сайту цією мовою зберігають свій текст.
Шлях другий: мовний пакет
Пакет потрібен, щоб віддати мову іншим або поставити її на кілька своїх сайтів: це один файл .zip. Усередині лише опис мови й переклади:
language.json
locales/de.json
modules/news/locales/de.json
modules/forum/locales/de.jsonlanguage.json— опис мови, лежить у корені архіву.locales/de.json— переклади рушія.modules/news/locales/de.json— переклади модуля «news»: по файлу на модуль, за бажанням.
Інших файлів у пакеті бути не може: будь-який зайвий файл — відмова всьому архіву. Теки з назвою пакета не потрібно, файли лежать прямо в корені архіву.
{
"code": "de",
"name": "German",
"native": "Deutsch",
"direction": "ltr",
"plural": "en",
"version": "1.0.0",
"engine_min": "0.9.9"
}| Поле | Що це |
|---|---|
code | код мови, як у формі вище |
name, native | назва англійською й самою мовою, до 40 знаків, без лапок і кутових дужок |
direction | ltr або rtl |
plural | правило множини: en (2 форми), fr (0–1 / більше), none (1 форма), slavic, pl, lt, cs (по 3 форми) |
version | версія пакета: цифри, літери, крапки; пакет старіший за встановлений ставиться лише з окремим підтвердженням |
engine_min | з якої версії рушія пакет підходить (за бажанням) |
Файл перекладів — звичайний об’єкт JSON «ключ»: «текст», той самий формат, що в locales/en.json рушія: ключі беріть звідти. Для модуля — modules/<назва модуля>/locales/<код>.json, ключі з його en.json. Модулів, яких немає на сайті, пакет не торкається.
Правила для значень такі самі, як під час завантаження в панелі: лише рядки, до 4000 знаків, підстановки {…} як в англійському, форми числа через «|». Додатково для пакета: ключі лише з латинських літер, цифр, крапки, підкреслення й дефіса, вкладеність не глибша за вісім рівнів, не більше 40 000 рядків у файлі, без HTML-подібної розмітки та без посилань виду javascript:. Обов’язковий файл перекладів ядра locales/<код>.json.
Якщо мова лежить у вихідному коді рушія (у вас є locales/<код>.json і modules/*/locales/<код>.json), пакет збирає команда:
php nex1on language:pack pl --version=1.0.0Вона збирає nex1on-language-pl-1.0.0.zip, перед пакуванням перевіряє кожен файл так само, як встановлювач, і друкує шлях (за замовчуванням nex1on-moduli на два рівні вище за теку сайту; змінити — --out=<папка> або app.release_directory у config/local.php). Англійська пакетом не випускається: вона є в поставці.
Як поставити пакет
Доповнення → Модулі → Встановити з архіву, вибрати «Мовний пакет», завантажити файл, подивитися звіт і встановити. Докладно — у статті «Як встановити власне доповнення». Після встановлення мова лишається вимкненою: увімкніть її на сторінці «Мови». Англійську й основну мову сайту пакетом замінити не можна. Мову з поставки замінює лише пакет з підписом Nex1on і версією не нижчою за встановлену.
Помилки
| Що ви бачите | Що не так |
|---|---|
| «В архіві є файл, якого не має бути в мовному пакеті» | окрім language.json і файлів locales/…json в архіві нічого бути не може, зокрема службових тек і картинок |
| «У пакеті немає файлу перекладів ядра» | немає locales/<код>.json в корені архіву |
| «У перекладі є HTML-подібна розмітка» | приберіть кутові дужки з перекладених рядків: у пакетах розмітка заборонена |
| «Файл перекладів — не JSON» | пропущено лапку або кому; JSON перевіряється будь-яким валідатором |
| «Англійську та основну мову сайту пакетом замінити не можна» | візьміть інший код мови |