2026-09-28: у строки, которая ЦЕЛИКОМ является названием, слой не перекрывает запись категории — мод показывает категорию, даже английскую. Поэтому целое название переводится в своей категории, а английский возвращается отключением категории в «Файлах перевода». Слой отвечает за имена ВНУТРИ фраз. Раздел ниже «В слой идёт ВСЯКОЕ название» описывает расчёт, который в игре не подтвердился.
Выключатель «названия по-английски» работает так: игрок гасит словари pn_*,
и на экране остаётся оригинал — но только если в общем словаре имя оставлено
латиницей или строки там нет вовсе. Значит у каждого названия должно быть два
свойства сразу:
- оно заведено в
pn_*— иначе гасить нечего; - общий словарь его не переводит — иначе гасить бесполезно.
Эта таблица отвечает на первый вопрос: в какой из словарей pn_* идёт класс
названий. Класс строке проставляет tools/names.py scan по официальному API и
по категории словаря — не по виду строки. Таблица версионируется, разбор нет:
поменять раскладку — это правка одной клетки здесь и повторный scan.
Словарь = группа отключения в игре. Чем их больше, тем точнее игрок выбирает, что вернуть к английскому; чем меньше — тем короче список в оверлее.
| класс | словарь | подпись в оверлее | откуда знаем класс |
|---|---|---|---|
| items | pn_items |
Имена: предметы | /v2/items + категория item_names |
| skins | pn_items |
Имена: предметы | категория skins |
| minis | pn_items |
Имена: предметы | /v2/minis |
| colors | pn_items |
Имена: предметы | /v2/colors |
| currencies | pn_items |
Имена: предметы | /v2/currencies |
| outfits | pn_items |
Имена: предметы | /v2/outfits |
| gliders | pn_items |
Имена: предметы | /v2/gliders |
| mounts | pn_items |
Имена: предметы | категория mounts |
| novelties | pn_items |
Имена: предметы | /v2/novelties |
| finishers | pn_items |
Имена: предметы | /v2/finishers |
| mailcarriers | pn_items |
Имена: предметы | /v2/mailcarriers |
| skiffs | pn_items |
Имена: предметы | /v2/skiffs |
| jadebots | pn_items |
Имена: предметы | /v2/jadebots |
| itemstats | pn_items |
Имена: предметы | категория itemstats |
| skills | pn_skills |
Имена: умения | /v2/skills, /v2/specializations, категории skill_names, traits |
| masteries | pn_skills |
Имена: умения | /v2/masteries |
| achievements | pn_achievements |
Имена: достижения | категории achievement_names, achievement_categories, achievement_groups |
| titles | pn_achievements |
Имена: достижения | /v2/titles |
| creatures | pn_names |
Имена: персонажи | ранговый префикс (Champion / Veteran / Legendary / Elite) |
| npc_side | pn_names |
Имена: персонажи | имя слоя, упоминается в events / renown_hearts / zone_dialogue / npc_dialogue |
| pets | pn_names |
Имена: персонажи | /v2/pets |
| places | pn_world_map |
Имена: карта мира | /v2/maps, /v2/continents (секторы, ориентиры, точки) |
| wvw | pn_world_map |
Имена: карта мира | /v2/wvw/objectives, /v2/wvw/abilities, /v2/wvw/ranks |
| terms | pn_terms |
Имена: термины | слой pn_terms |
| guild | pn_terms |
Имена: термины | категория guild_upgrades, /v2/guild/permissions |
| pvp | pn_terms |
Имена: термины | /v2/pvp/ranks, /v2/pvp/heroes |
| npc_story | — | — | имя слоя, упоминается только в сюжетных категориях |
| quests | — | — | /v2/quests |
Категория wizardsvault раньше целиком считалась названиями и шла в
pn_achievements. Но в ней лежат задания Хранилища Волшебника: «Defeat 25
Enemies», «Log In», «Complete the Pig Iron Quarry Jumping Puzzle». Их не
гуглят, и выключатель «Имена: достижения» делал английским всё Хранилище
целиком — вплоть до «Log In».
Решение мейнтейнера: описания заданий из слоя убраны, класса wizardsvault
больше нет. Задание переводится в своей категории, а имя ВНУТРИ него идёт своим
классом, как в любой фразе: «Победите 10 врагов в Horn of Maguuma» —
Horn of Maguuma подставит pn_world_map.
Договорено 2026-08-28: сюжетную кампанию не трогаем. Прочерк в колонке словаря
значит «класс размечаем, но в дыры слоя не тянем» — имя остаётся тем, что оно
есть сейчас, и names.py emit для него ничего не выпускает. Имена, которые
звучат и в сюжете, и во второстепенном контенте, попадают в npc_side: их
всё равно видно на табличках монстров в открытом мире.
Раньше правило было уже: в слой шло только то, что встречается внутри чужой
фразы или лежит вне именной категории. Довод был такой — строку, которая
ЦЕЛИКОМ является названием, уже гасит своя категория (item_names,
skill_names и прочие разведены dictsplit.py 2026-08-11), и копия в слое
заставит игрока щёлкать два выключателя вместо одного.
Довод остаётся верным, но выбор сделан в пользу полноты: любое название должно быть видно и переключаться в одном месте. Цена — у названий с собственной группой отключения выключателей теперь два, и гасить надо оба.
Что по-прежнему НЕ идёт в слой:
- строки с разметкой форм (
[s],[pl:],[f:]) и плейсхолдерами — слой подставляет подстроку и отрисовать их не может; - строки длиннее 60 символов — это описания, попавшие в именную категорию по ошибке;
- сюжетные классы
npc_storyиquests— у них в таблице выше прочерк.
Одно слово принимается, когда названием его назвал ИСТОЧНИК — API или категория словаря (Orr, Hoelbrak, Tyria). Улики по корпусу требуют двух слов: там одиночное слово почти всегда мусор вроде Boots, которым слой и засорён.
pn_items (4 262), pn_skills (495), pn_achievements (1 111) заведены в
dictionary.bin, подписи — в tools/dict_tool.py DICT_NAMES. Правило «новые
словари не создаём» из CLAUDE.md §6 писалось про общие словари, где
название и описание разводились по существующим группам; здесь другое — словарь
слоя парный к своей категории: «Предметы: названия» гасит название предмета
как строку, «Имена: предметы» — то же название внутри чужого текста. Один общий
словарь имён такой пары не даёт: пришлось бы гасить и имена персонажей.
Перевод в них засеян машинно — из той же строки в общей категории. Вычитки не
было, порядок строк в файлах pn/ по числу вхождений во фразы: с головы списка
одна запись закрывает десятки вхождений.