Skip to content

LxBox v2.24.2

Choose a tag to compare

@github-actions github-actions released this 16 Sep 17:37
· 353 commits to main since this release

L×Box v2.24.2

The interface speaks Simplified Chinese. Settings, the node wizard, routing
and DNS, plus the native Android surfaces — the notification, the Quick Settings
tile and the shortcuts — are translated in full. Pick the language in
Settings → General, or leave it on System and the app follows the device. The
translation was contributed by @wyphgsy; the
dictionary was brought up to the current branch, since 58 strings had been added
to the app while the contribution was in flight. Behind it, a quieter fix: the
localization checks used to look at Russian alone, so a newly added language
passed CI while missing dozens of strings. They now cover every language.

Интерфейс заговорил на упрощённом китайском. Настройки, мастер узла,
маршрутизация и DNS, а также нативные поверхности Android — уведомление, плитка
быстрых настроек и ярлыки — переведены целиком. Язык выбирается в «Настройки →
Общие», а при значении «Системный» приложение следует языку устройства. Перевод
прислал @wyphgsy; словарь доведён до текущей
ветки — пока перевод шёл, в приложении появились ещё 58 строк. За этим — более
тихая починка: проверки локализации смотрели только на русский, поэтому
свежедобавленный язык проходил CI с десятками непереведённых строк. Теперь они
охватывают все языки.


🇬🇧 English

🇨🇳 Simplified Chinese (docs/spec/tasks/452, #139, #137)

  • Was: the interface existed in English and Russian. Users in mainland China
    asked for Chinese in #139.
  • Now: a third language. The UI dictionary, the wizard template overlay and the
    native Android strings are all translated — 1598 UI strings, 205 template
    strings and the notification / tile / shortcut surfaces. The language picker
    gains 中文(简体), and System follows the device language on Android 13+
    per-app language settings as before.
  • The translation was contributed by @wyphgsy in
    #137 and follows the project's
    own guide for adding a language, down to the CLDR plural resolver — Chinese
    has a single other form. The dictionary was then brought up to develop:
    the 58 strings that arrived with 2.24.x (Tailscale nodes, node sections) were
    translated and two stale entries dropped.
  • Nothing changed structurally: English remains the base language and the source
    of truth, and the English text at each call site is still the key.

🧰 The localization checks cover every language (docs/spec/tasks/452)

  • Was: ui_check was hardcoded to assets/l10n/ru/ui.json and kotlin_check
    to values-ru/strings.xml. Run against a Chinese dictionary that was 58 keys
    short, both reported zero findings — they never looked at it. A language added
    exactly as the documentation prescribes would have stayed outside CI and
    fallen further behind with every new string.
  • Now: both discover languages by their directories, the way template_check
    already did, and the set of plural forms is taken per language, mirroring the
    resolver choice in LocaleController. A new language is under the gates from
    the moment its files exist, and the checkers need no edit to accept it.
  • The practical effect: one new interface string now requires one translation
    per language, and ui_check --strict will not let it slip.

🧪 Tests

  • flutter analyze is clean and all four l10n checkers pass under --strict,
    now reporting per language.
  • The Chinese dictionary was verified key for key against Russian: identical key
    sets, matching printf placeholder arity in every plural form, no entry with
    forms other than other, no empty values.

🇷🇺 Русский

🇨🇳 Упрощённый китайский (docs/spec/tasks/452, #139, #137)

  • Было: интерфейс существовал на английском и русском. Пользователи из
    материкового Китая просили китайский в #139.
  • Стало: третий язык. Переведены словарь интерфейса, оверлей шаблона мастера и
    нативные строки Android — 1598 строк интерфейса, 205 строк шаблона и
    поверхности уведомления, плитки и ярлыков. В выборе языка появился пункт
    中文(简体), а значение «Системный», как и раньше, следует языку устройства
    и пер-приложенческой настройке Android 13+.
  • Перевод прислал @wyphgsy в
    #137; он сделан по проектному
    руководству по добавлению языка вплоть до CLDR-резолвера множественного
    числа — у китайского единственная форма other. Словарь доведён до ветки
    develop: 58 строк, пришедших с 2.24.x (узлы Tailscale, секции узлов),
    переведены, две устаревшие удалены.
  • Структурно не изменилось ничего: английский остаётся базовым языком и
    источником истины, английский текст в месте вызова по-прежнему служит ключом.

🧰 Проверки локализации охватывают все языки (docs/spec/tasks/452)

  • Было: ui_check был зашит на assets/l10n/ru/ui.json, kotlin_check — на
    values-ru/strings.xml. На китайском словаре, которому не хватало 58 ключей,
    оба показывали ноль находок: они в него не заглядывали. Язык, добавленный
    ровно по документации, оставался вне CI и отставал бы всё сильнее с каждой
    новой строкой.
  • Стало: оба находят языки по каталогам — так уже делал template_check, — а
    набор форм множественного числа берётся для каждого языка отдельно и зеркалит
    выбор resolver'а в LocaleController. Новый язык попадает под гейты самим
    фактом своих файлов, и править чекеры под него не нужно.
  • Практическое следствие: одна новая строка интерфейса теперь требует по
    переводу на каждый язык, и ui_check --strict не даст это пропустить.

🧪 Тесты

  • flutter analyze чист, все четыре l10n-чекера проходят под --strict и
    отчитываются теперь по каждому языку.
  • Китайский словарь сверен с русским поключно: множества ключей совпадают,
    арность printf-плейсхолдеров совпадает в каждой форме, нет записей с формами
    кроме other, нет пустых значений.

Install / Установка

adb install -r LxBox-v2.24.2-arm64-v8a.apk

Без uninstall! Поверх существующей установки. Настройки и подписки сохранятся.

No uninstall needed — install over the existing one. Settings and subscriptions
are preserved.


Previous release / Предыдущий релиз: v2.24.1.