Skip to content

zh_CN translation not applied — English placeholder text, plus "ERROR" in the Collection page #287

Description

@By990920

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_popupblind.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.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions