There are some seeded badges on every site that are internationalised (i18n) through Crowdin.
Custom badges store name/description as plain text in the database. When I18n.t (internationalization feature) is called with a key like badges.my_custom_badge.name, there’s no matching translation, so it falls back to the stored DB value — same text for all locales.
There’s a workaround where admins can manually add translations for custom badge keys per locale.
You can customize your site texts at <your site>/admin/customize/site_texts.
Some concrete steps for you
- Create the badge
- Go to /admin/badges → New Badge
- Set name, description, icon, etc. as normal
- Derive the i18n key
- The key pattern is
badges.{snake_case_name}.name - The snake_case_name is the badge name lowercased with spaces replaced by underscores
- So “Pokémon Master” →
badges.pokémon_master.name
- Add translation overrides
- Go to /admin/customize/site_texts
- Search for
badges.pokémon_master - You’ll see keys like:
badges.pokémon_master.namebadges.pokémon_master.descriptionbadges.pokémon_master.long_description
- Switch to the target locale (e.g. 简体中文), click the key, and enter the translated text
- Repeat per locale
- Switch locale in the dropdown, add translations for each language you need
.name- badge title.description- short description shown on badge cards.long_description- full description shown on the badge detail page


