@goodandready/dsh-russian-lang 0.1.8 → 0.1.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/README.md +44 -17
  2. package/lib/client.js +227 -27
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -6,23 +6,41 @@
6
6
 
7
7
  - Регистрирует русские словари для namespace'ов ядра (`common`,
8
8
  `conversation`, `settings`, `settings.models`, `workspace`, `subagent`,
9
- `reference` и другие — **30 namespace'ов ядра, 722 ключа, 100%
10
- покрытия** релизной поверхности DSH 0.1.1-rc.2) и для ряда сторонних
11
- плагинов (`dsh-market`, `better-sidebar`, `task-board`, `im-hub` и другие —
12
- **9 namespace'ов, 962 ключа**).
9
+ `reference` и другие — **30 namespace'ов ядра, 722 ключа, 100% покрытия**
10
+ релизной поверхности DSH 0.1.1-rc.2) и для ряда сторонних плагинов.
13
11
  - Добавляет **«Русский» третьей позицией** в родной список языков
14
12
  (**Настройки → Общие → Язык**). Выбор сохраняется штатным механизмом
15
13
  настроек DSH и переживает браузеры.
16
- - Синхронизирует `<html lang="ru">` при активном русском.
14
+ - Синхронизирует `<html lang="ru-RU">` при активном русском.
17
15
 
18
16
  Непереведённые ключи показываются по-английски (штатный fallback ядра), пустых
19
17
  мест в интерфейсе не появляется.
20
18
 
19
+ ### Помимо словарей
20
+
21
+ - **Русские plural-формы.** Обёртка `translate` резолвит `one/few/many` для
22
+ счётных ключей (как с суффиксом `.one/.other`, так и голых — через
23
+ `X.one/X.few/X.many`).
24
+ - **Пользовательские переопределения.** Пространство настроек
25
+ `russian-lang.overrides` — `{ ключ: формулировка }`, применяется верхним
26
+ слоем поверх словарей.
27
+ - **Типографика вывода** (`russian-lang.typography`). Идемпотентный
28
+ постпроцессор текстовых узлов: кавычки-«ёлочки», тире, неразрывные пробелы
29
+ после коротких слов, опциональная ё (флаг `yo`). Код, ссылки и поля ввода не
30
+ трогаются.
31
+ - **Орфография** — браузерный `spellcheck` на текстовых полях при активном
32
+ русском; моноширинные поля (код, команды) исключаются.
33
+ - **Фикс неправильной раскладки.** Если текст набран латиницей вместо
34
+ кириллицы, над инпутом появляется подсказка с превью конвертации; клик
35
+ заменяет. Конверсия кириллицы→латиницы предлагается только для
36
+ slash-команд. Ручной конверт текущего инпута — `Alt+L`.
37
+
21
38
  ## Как это работает
22
39
 
23
40
  Реестр локалей живёт в браузере: плагин докладывает русские словари в чужие
24
- namespace'ы через `ctx.locale.register(ns, 'ru', dict)` конфликт возможен
25
- только если пара (namespace, язык) уже занята, а `ru` не занимает никто.
41
+ namespace'ы через `ctx.locale.register(ns, 'ru', dict)`. Namespace'ы, которые
42
+ плагины уже локализуют сами на русский, пропускаются (иначе загрузчик падает с
43
+ `already has locale ru`).
26
44
 
27
45
  Список языков штатного селектора (`Настройки → Общие → Язык`) живёт в snapshot
28
46
  локаль-runtime; меню строится из него, и `setLocale()` валидирует выбор по
@@ -47,16 +65,24 @@ dsh plugin --profile web add @goodandready/dsh-russian-lang
47
65
  ## Разработка и проверка
48
66
 
49
67
  ```bash
50
- python3 extract-dicts.py <profile>/node_modules # обновить *-en.json
51
- python3 check-coverage.py # что не переведено / устарело
52
- python3 build.py # собрать lib/client.js
53
- python3 test/test_extract.py # smoke для extract-dicts/check-coverage
54
- python3 test/smoke.py # E2E против запущенного стенда
68
+ python3 extract-dicts.py <node_modules ядра> [node_modules профиля] # обновить *-en.json
69
+ python3 check-coverage.py # что не переведено / устарело
70
+ python3 build.py # собрать lib/client.js
71
+ python3 tools/mt_fallback.py --dry-run # непереведённые ключи
72
+ python3 tools/mt_fallback.py --review # очередь ручной выверки MT
73
+ python3 tools/merge_freq.py # обновить freq-словарь для фикса раскладки
74
+ python3 tools/upstream_check.py # ночной апстрим-детектор новых ключей
75
+ python3 tools/top100.py <профиль>/node_modules # отчёт покрытия плагинов
76
+ python3 test/test_extract.py # smoke для extract-dicts/check-coverage
77
+ python3 test/smoke.py # E2E против запущенного контура
55
78
  ```
56
79
 
57
- Требует `websocket-client` (`pip install websocket-client`) и Chrome на
58
- `/usr/bin/google-chrome` для `smoke.py`. По умолчанию ходит на
59
- `https://192.168.1.111:3082`; переопределяется через `DSH_URL`.
80
+ MT-переводы непереведённых ключей (`mt_fallback.py --apply`) пишутся в
81
+ `mt-registry.json` как обычные строки; ручной перевод в `ru/*.json` всегда
82
+ имеет приоритет. Очередь ручной выверки — `upstream/review-queue.md`.
83
+
84
+ `smoke.py` требует `websocket-client` (`pip install websocket-client`) и Chrome
85
+ на `/usr/bin/google-chrome`. Адрес переопределяется через `DSH_URL`.
60
86
 
61
87
  ## Скриншоты
62
88
 
@@ -65,8 +91,7 @@ python3 test/smoke.py # E2E против запущ
65
91
  | Интерфейс на русском | `docs/media/ui-russian.png` |
66
92
  | Список языков в Настройки → Общие | `docs/media/language-selector.png` |
67
93
 
68
- Скриншоты обновляются через `python3 test/screenshots.py` против
69
- запущенного стенда с установленным плагином.
94
+ Скриншоты обновляются через `python3 test/screenshots.py`.
70
95
 
71
96
  ## Ограничения
72
97
 
@@ -75,6 +100,8 @@ python3 test/smoke.py # E2E против запущ
75
100
  - Плагины, которые рисуют текст инлайном без locale-слотов, не переводятся.
76
101
  - Текст, добавленный сторонним плагином без `ctx.locale.register`, остаётся на
77
102
  языке плагина — для перевода нужно обновить сам плагин.
103
+ - Фикс раскладки опирается на встроенный частотный словарь (~9k слов) и может
104
+ не распознать редкую терминологию; ложных замен нет — только подсказка.
78
105
 
79
106
  ## Лицензия
80
107