N1 Nex1on

Власна мова й мовний пакет: переклад, файли, пакування

Як додати мову, якої немає в каталозі: через панель і готовим пакетом; будова пакета, що приймається, а що ні.

Оновлено 20.10.2026

Мови немає в каталозі? Її можна додати самому, і програмувати для цього не потрібно: мова — це лише переклади, жодного рядка коду. Є два шляхи. Перший — прямо в панелі: завантажили зразок, переклали, завантажили назад. Другий — готовий пакет (файл .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 форми (російська, українська, польське й литовське правила, чеська та словацька). Від вибору залежить, скільки варіантів потрібно писати в рядках із числом

Мова створюється чернеткою: на сайті її поки не видно. Далі три кроки на сторінці самої мови.

  1. Завантажити зразок. Кнопка «Завантажити всі ключі» віддає файл JSON, де є всі рядки рушія й модулів з англійським текстом. Пізніше, коли частину вже перекладено, «Завантажити лише відсутнє» віддає лише те, чого ще немає.
  2. Перекласти й завантажити. Файл влаштований так: нагорі _meta (службове, не змінюйте), нижче strings — «ключ»: «англійський текст». Змінюйте лише значення праворуч. Завантажте файл кнопкою «Завантажити й перевірити» (до 3 МБ). Завантаження доповнює попереднє, тому перекладати можна частинами.
  3. Увімкнути. Коли переклад готовий, натисніть «Увімкнути»: мова з’явиться у виборі мови на сайті та в мові панелі. Повний переклад (100 %) вмикається одразу, від 90 % — за галочкою: відсутнє показується англійською.
JSON
{
    "_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.json
  • language.json — опис мови, лежить у корені архіву.
  • locales/de.json — переклади рушія.
  • modules/news/locales/de.json — переклади модуля «news»: по файлу на модуль, за бажанням.

Інших файлів у пакеті бути не може: будь-який зайвий файл — відмова всьому архіву. Теки з назвою пакета не потрібно, файли лежать прямо в корені архіву.

language.jsonJSON
{
    "code": "de",
    "name": "German",
    "native": "Deutsch",
    "direction": "ltr",
    "plural": "en",
    "version": "1.0.0",
    "engine_min": "0.9.9"
}
ПолеЩо це
codeкод мови, як у формі вище
name, nativeназва англійською й самою мовою, до 40 знаків, без лапок і кутових дужок
directionltr або 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), пакет збирає команда:

Bash
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 перевіряється будь-яким валідатором
«Англійську та основну мову сайту пакетом замінити не можна»візьміть інший код мови
Чи допомогла ця стаття?
На цій сторінці