Environment
- Balatro: 1.0.1o (Steam)
- Steamodded: 1.0.0-beta-1814a
- All-In-Jest: 0.7.0c
- Language: 简体中文 (zh_CN)
Issue 1 — zh_CN translation not applied (both in-run and in Collection)
With the game set to 简体中文, several All-In-Jest cards do not show their zh_CN translation and display English placeholder text instead. This happens both during a run and in the main-menu Collection.
Affected cards:
- Astral cards (e.g.
c_aij_alkaid) — the poker-hand slot shows English
mute_joker — shows Hand
handsome_joker — shows [enhancement] [rank]
the_journey (boss blind) — shows Suit
- Also affected:
the_auroch, the_heart, the_herald, trophy_kill, rahu, ketu
The zh_CN entries do exist (e.g. k_aij_hand_placeholder = "指定牌型", k_aij_suit_placeholder = "花色" in localization/zh_CN.lua), so this is a lookup bug, not missing translations.
Root cause
These descriptions embed runtime-dependent values (poker hand / suit / rank / card) via loc_vars. When the runtime value is present, the mod falls back to placeholder keys such as k_aij_hand_placeholder.
The placeholder keys are defined under misc.extra_joker_dictionary in the localization files, but the loc_vars fallback calls localize(key) without the extra_joker_dictionary misc-category argument:
-- current (wrong): resolves against misc.dictionary, key not found -> default English
localize('k_aij_hand_placeholder')
-- correct pattern, used elsewhere in the mod (youve_got_mail, baddata, jerko...):
localize('k_aij_hand_placeholder', 'extra_joker_dictionary')
Because the lookup misses extra_joker_dictionary, the zh_CN value is never reached and the English/default text is shown — even during a run.
Suggested fix
Pass 'extra_joker_dictionary' as the second argument on every localize('k_aij_*_placeholder') call in the affected loc_vars:
localize('k_aij_hand_placeholder', 'extra_joker_dictionary')
localize('k_aij_suit_placeholder', 'extra_joker_dictionary')
localize('k_aij_card_placeholder', 'extra_joker_dictionary')
localize('k_aij_rank_placeholder', 'extra_joker_dictionary')
Affected files (in Items/): the 14 astral cards, rahu.lua, ketu.lua, mute_joker.lua, handsome_joker.lua, the_journey.lua, the_auroch.lua, the_heart.lua, the_herald.lua, trophy_kill.lua.
Issue 2 — "ERROR" text in the Collection page (main menu, outside a run)
In the main-menu Collection, the same cards additionally show the literal string ERROR in their descriptions (e.g. 将ERROR对准). This is a separate, remaining problem:
- These
loc_vars depend on runtime-only data that does not exist in the Collection UI (e.g. card.ability.consumeable.hand, assigned in the ConsumableType.inject_card / set_ability wrapper in Utils/hooks.lua:842-854; G.GAME.current_round.aij_the_journey_blind.selected_suit; G.GAME.current_round.jest_handsome_joker_card).
- Balatro's
localize(key, cat) returns the literal string 'ERROR' (not nil) when the key is missing, so even with the placeholder fallback in place, missing runtime values still leak ERROR into the Collection.
the_journey defines collection_loc_vars (Items/Blinds/Boss/the_journey.lua:20), but Steamodded never calls collection_loc_vars; the blind Collection popup goes through create_UIBox_blind_popup → blind.vars, so that function is effectively dead code and does not prevent the ERROR.
Suggested fix
- Detect the Collection context (collection card areas are created with
config.collection = true) and render placeholder text instead of running runtime lookups, or
- Add a helper that checks
G.localization.misc[cat][key] before calling localize() and falls back to a placeholder key when missing.
Note (reporting transparency)
This issue report was written with the help of an AI assistant (opencode) for technical investigation and wording. I am only responsible for the Chinese (zh_CN) translation itself and am not a coder, so I may not be able to answer detailed implementation questions. The technical root causes above were verified by reading the mod's source code with the assistant's help.
Environment
Issue 1 — zh_CN translation not applied (both in-run and in Collection)
With the game set to 简体中文, several All-In-Jest cards do not show their zh_CN translation and display English placeholder text instead. This happens both during a run and in the main-menu Collection.
Affected cards:
c_aij_alkaid) — the poker-hand slot shows Englishmute_joker— showsHandhandsome_joker— shows[enhancement] [rank]the_journey(boss blind) — showsSuitthe_auroch,the_heart,the_herald,trophy_kill,rahu,ketuThe zh_CN entries do exist (e.g.
k_aij_hand_placeholder = "指定牌型",k_aij_suit_placeholder = "花色"inlocalization/zh_CN.lua), so this is a lookup bug, not missing translations.Root cause
These descriptions embed runtime-dependent values (poker hand / suit / rank / card) via
loc_vars. When the runtime value is present, the mod falls back to placeholder keys such ask_aij_hand_placeholder.The placeholder keys are defined under
misc.extra_joker_dictionaryin the localization files, but theloc_varsfallback callslocalize(key)without theextra_joker_dictionarymisc-category argument:Because the lookup misses
extra_joker_dictionary, the zh_CN value is never reached and the English/default text is shown — even during a run.Suggested fix
Pass
'extra_joker_dictionary'as the second argument on everylocalize('k_aij_*_placeholder')call in the affectedloc_vars:Affected files (in
Items/): the 14 astral cards,rahu.lua,ketu.lua,mute_joker.lua,handsome_joker.lua,the_journey.lua,the_auroch.lua,the_heart.lua,the_herald.lua,trophy_kill.lua.Issue 2 — "ERROR" text in the Collection page (main menu, outside a run)
In the main-menu Collection, the same cards additionally show the literal string
ERRORin their descriptions (e.g.将ERROR对准). This is a separate, remaining problem:loc_varsdepend on runtime-only data that does not exist in the Collection UI (e.g.card.ability.consumeable.hand, assigned in theConsumableType.inject_card/set_abilitywrapper inUtils/hooks.lua:842-854;G.GAME.current_round.aij_the_journey_blind.selected_suit;G.GAME.current_round.jest_handsome_joker_card).localize(key, cat)returns the literal string'ERROR'(notnil) when the key is missing, so even with the placeholder fallback in place, missing runtime values still leakERRORinto the Collection.the_journeydefinescollection_loc_vars(Items/Blinds/Boss/the_journey.lua:20), but Steamodded never callscollection_loc_vars; the blind Collection popup goes throughcreate_UIBox_blind_popup→blind.vars, so that function is effectively dead code and does not prevent theERROR.Suggested fix
config.collection = true) and render placeholder text instead of running runtime lookups, orG.localization.misc[cat][key]before callinglocalize()and falls back to a placeholder key when missing.Note (reporting transparency)
This issue report was written with the help of an AI assistant (opencode) for technical investigation and wording. I am only responsible for the Chinese (zh_CN) translation itself and am not a coder, so I may not be able to answer detailed implementation questions. The technical root causes above were verified by reading the mod's source code with the assistant's help.