Rule going forward: no user-visible string lives in a Lua script; everything is a skin_config.json text map read through the engine's new tex.skin_text(key [, lang]) (Yonokid/YataiDON PR — "Lua: tex.skin_text"). Stacked on #34 (zh Simplified), so its diff includes that PR until it is merged.
Moved into skin_config.json:
entry boards: titles resolve through the existing entry_game / entry_practice / entry_costume / entry_ai_battle / entry_settings plus a new entry_dan; comment lines are entry_<mode>_comment_1..3. box.lua matches the title the engine drew against tex.skin_text(key, lang) instead of its own copies.
costume menu guide words → guide_select_label / guide_decide_label (the kana-sniffing detect_lang is gone).
dan HUD plate → dan_gauge_name (魂ゲージ) and the existing dan_exam_text_gauge format.
N曲 song-limit label → song_num_max; 演奏スキップON badge → skip_badge_text (same string in every language, as on the cabinet).
The only Japanese left in Lua are the folder-name matchers in song_select.lua (they compare against box.def titles, they are not drawn). Japanese output is unchanged; needs the engine binding, otherwise tex.skin_text is nil.
Rule going forward: no user-visible string lives in a Lua script; everything is a `skin_config.json` text map read through the engine's new `tex.skin_text(key [, lang])` (Yonokid/YataiDON PR — "Lua: tex.skin_text"). Stacked on #34 (zh Simplified), so its diff includes that PR until it is merged.
Moved into `skin_config.json`:
- entry boards: titles resolve through the existing `entry_game / entry_practice / entry_costume / entry_ai_battle / entry_settings` plus a new `entry_dan`; comment lines are `entry_<mode>_comment_1..3`. `box.lua` matches the title the engine drew against `tex.skin_text(key, lang)` instead of its own copies.
- costume menu guide words → `guide_select_label` / `guide_decide_label` (the kana-sniffing `detect_lang` is gone).
- sort window → `sort_window_diff / _star / _order / _order_0..3 / _songs`, `folder_sort_select`, courses through `course_name_0..3`.
- dan HUD plate → `dan_gauge_name` (魂ゲージ) and the existing `dan_exam_text_gauge` format.
- `N曲` song-limit label → `song_num_max`; 演奏スキップON badge → `skip_badge_text` (same string in every language, as on the cabinet).
The only Japanese left in Lua are the folder-name matchers in `song_select.lua` (they compare against box.def titles, they are not drawn). Japanese output is unchanged; needs the engine binding, otherwise `tex.skin_text` is nil.
checksums.sha256 not included.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
entry board titles/comments (entry_* / entry_*_comment_N), costume-menu guide words
(guide_select_label / guide_decide_label), the sort window (sort_window_* /
folder_sort_select / course_name_*), the dan HUD plate (dan_gauge_name /
dan_exam_text_gauge), the N曲 song limit (song_num_max) and the 演奏スキップON
badge (skip_badge_text) are read through the engine's tex.skin_text; the only
Japanese left in Lua are folder-name matchers.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The engine puts a Dan-i Dojo board on the entry screen whenever the skin
defines an entry_dan text; this skin lists the dojo inside song select
instead (75f5d27), so the strings moved into skin_config must not use that
key.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Rule going forward: no user-visible string lives in a Lua script; everything is a
skin_config.jsontext map read through the engine's newtex.skin_text(key [, lang])(Yonokid/YataiDON PR — "Lua: tex.skin_text"). Stacked on #34 (zh Simplified), so its diff includes that PR until it is merged.Moved into
skin_config.json:entry_game / entry_practice / entry_costume / entry_ai_battle / entry_settingsplus a newentry_dan; comment lines areentry_<mode>_comment_1..3.box.luamatches the title the engine drew againsttex.skin_text(key, lang)instead of its own copies.guide_select_label/guide_decide_label(the kana-sniffingdetect_langis gone).sort_window_diff / _star / _order / _order_0..3 / _songs,folder_sort_select, courses throughcourse_name_0..3.dan_gauge_name(魂ゲージ) and the existingdan_exam_text_gaugeformat.N曲song-limit label →song_num_max; 演奏スキップON badge →skip_badge_text(same string in every language, as on the cabinet).The only Japanese left in Lua are the folder-name matchers in
song_select.lua(they compare against box.def titles, they are not drawn). Japanese output is unchanged; needs the engine binding, otherwisetex.skin_textis nil.checksums.sha256 not included.
🤖 Generated with Claude Code
9d381eb64eto9e4e507a279e4e507a27toa2104bf352a2104bf352toad0a3b69f2