diff --git a/frontend/index.html b/frontend/index.html index 941b7c2..70e496d 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -1413,7 +1413,7 @@ // ===== Version ===== // Single source of truth for the PWA version: shown in the header and used // by the server version check in pysimConnect(). -const SIMPLE_VERSION = '2.7.5'; +const SIMPLE_VERSION = '2.7.6'; document.getElementById('app-version').textContent = 'v' + SIMPLE_VERSION; // ===== Tab switching ===== @@ -13032,7 +13032,7 @@ const LANG_RU = { 'No events configured.': 'Нет настроенных событий.', 'Fetched proactive commands:': 'Извлечённые проактивные команды:', 'Network simulation': 'Симуляция сети', - 'Replays the write patterns a real phone performs on network-condition changes (EPS attach, service loss, roaming denial, 2G fallback, SMS delivery, cell-broadcast reconfiguration, AUTHENTICATE). Only UPDATE BINARY/RECORD, ENVELOPE and AUTHENTICATE are sent; FPLMN is written only by the permanent "PLMN not allowed" rejection (TS 31.102 4.2.16), and the 5GS location files are never touched.': 'Воспроизводит шаблоны записи реального телефона при смене сетевых условий (подключение EPS, потеря сервиса, запрет роуминга, откат на 2G, приём SMS, перенастройка cell broadcast, AUTHENTICATE). Отправляются только UPDATE BINARY/RECORD, ENVELOPE и AUTHENTICATE; FPLMN записывается только при постоянном отказе «PLMN not allowed» (TS 31.102 4.2.16), а 5GS location-файлы не затрагиваются.', + 'Replays the write patterns a real phone performs on network-condition changes (EPS attach, service loss, roaming denial, 2G fallback, SMS delivery, cell-broadcast reconfiguration, AUTHENTICATE). Only UPDATE BINARY/RECORD, ENVELOPE and AUTHENTICATE are sent; FPLMN is written only by the permanent "PLMN not allowed" rejection (TS 31.102 4.2.16), and the 5GS location files are never touched.': 'Воспроизводит шаблоны записи реального телефона при смене сетевых условий (подключение EPS, потеря сервиса, запрет роуминга, откат на 2G, приём SMS, перенастройка cell broadcast, AUTHENTICATE). Отправляются только UPDATE BINARY/RECORD, ENVELOPE и AUTHENTICATE; FPLMN записывается только при постоянном отказе «PLMN not allowed» (TS 31.102 4.2.16), а 5GS location-файлы не затрагиваются.', 'Cold boot': 'Холодная загрузка', 'EPS attach': 'Подключение EPS', '2G attach': 'Подключение 2G', @@ -13042,9 +13042,16 @@ const LANG_RU = { 'Churn': 'Серия переподключений', 'SMS received': 'Принято SMS', 'CB reconfig': 'Перенастройка CB', + 'AUTHENTICATE': 'AUTHENTICATE', 'Parameters': 'Параметры', 'Operator search (country / brand / MCC-MNC)': 'Поиск оператора (страна / бренд / MCC-MNC)', 'Sets the PLMN written to LOCI/PSLOCI/EPSLOCI. Used by EPS attach, 2G attach and SMS received (real LAI/RAI/TAI; SMS only when its location rewrite is enabled), and by Cold boot, Service lost, Limited service and Roaming denied (the dummy LOCI/PSLOCI keep this PLMN, the EPSLOCI dummy wipes the TAI PLMN). Churn, CB reconfig and AUTHENTICATE don\'t use it.': 'Задаёт PLMN, записываемый в LOCI/PSLOCI/EPSLOCI. Используется в сценариях «Подключение EPS», «Подключение 2G» и «Принято SMS» (реальные LAI/RAI/TAI; в SMS — только при включённой перезаписи location), а также «Холодная загрузка», «Потеря сервиса», «Ограниченный сервис» и «Роуминг запрещён» (фиктивные LOCI/PSLOCI сохраняют этот PLMN, фиктивный EPSLOCI стирает TAI PLMN). «Серия переподключений», «Перенастройка CB» и AUTHENTICATE его не используют.', + 'MCC': 'MCC', + 'MNC': 'MNC', + 'LAC': 'LAC', + 'Cell ID': 'Идентификатор соты', + 'TAC': 'TAC', + 'RAC': 'RAC', 'Random roaming operator': 'Случайный роуминг-оператор', 'Advanced identity (empty = random)': 'Дополнительные идентификаторы (пусто = случайно)', 'Algorithm': 'Алгоритм', diff --git a/frontend/sw.js b/frontend/sw.js index b412e0b..bd71c79 100644 --- a/frontend/sw.js +++ b/frontend/sw.js @@ -1,4 +1,4 @@ -const CACHE = 'simple-v208'; +const CACHE = 'simple-v209'; const URLS = [ 'index.html', 'help.html', diff --git a/frontend/tests/html.test.js b/frontend/tests/html.test.js index 2a6102c..f9457a7 100644 --- a/frontend/tests/html.test.js +++ b/frontend/tests/html.test.js @@ -298,3 +298,22 @@ test('the network monitor labels its refresh timestamp and has no area line', () assert.match(html, /data-l10n="Last refresh">Last refresh<\/span>: <\/span>/); assert.ok(!/id="netstate-area"/.test(html), 'the area line is gone; LAI/RAI/TAI live in the EF rows'); }); + +test('every data-l10n attribute resolves in LANG_RU after HTML decoding', () => { + // translatePage() looks up el.getAttribute('data-l10n') — the browser + // decodes entities in attribute values, but NOT inside the