Skip to content

Localization

The Season Pass uses a file-first localization system with automatic version management. Nine languages are bundled by default.

configs/kyuubisoft_seasonpass/localization/
├── en-US.json # English (default)
├── de-DE.json # German
├── fr-FR.json # French
├── es-ES.json # Spanish
├── pt-BR.json # Portuguese (Brazil)
├── ru-RU.json # Russian
├── pl-PL.json # Polish
├── tr-TR.json # Turkish
└── it-IT.json # Italian

Set the active language in config.json:

{
"language": "en-US"
}
  1. The plugin checks localization/{lang}.json on disk
  2. If the file doesn’t exist, it extracts the default from the JAR
  3. Missing keys fall back to en-US
  4. User edits to the file are preserved across updates

Each localization file contains a _localization_version field:

{
"_localization_version": "9",
"seasonpass.ui.title": "Season Pass",
...
}

When the plugin ships new keys (version bump), it:

  1. Creates a backup of the existing file (e.g., en-US.json.backup-v8)
  2. Replaces the file with the new version from the JAR
  3. Updates the _localization_version field
  4. Previous user edits are preserved in the backup file

:::info Version Bump Required When adding new i18n keys to a custom build, you must bump the _localization_version number. Otherwise, deployed files will NOT be updated (file-first pattern skips files that already exist). :::

KeyDefault (en-US)
seasonpass.cmd.players_onlyThis command is for players only
seasonpass.cmd.no_permissionYou don’t have permission
seasonpass.cmd.player_not_foundPlayer not found
seasonpass.cmd.season_infoSeason info message
seasonpass.cmd.no_active_seasonNo active season
seasonpass.cmd.premium_alreadyYou already have premium
seasonpass.cmd.premium_disabledPremium is disabled
seasonpass.cmd.premium_purchasedPremium purchased
seasonpass.cmd.premium_insufficientNot enough currency
seasonpass.cmd.openingOpening Season Pass…
KeyDefault (en-US)
seasonpass.ui.titleSeason Pass
seasonpass.ui.tab_tiersTiers
seasonpass.ui.tab_challengesChallenges
seasonpass.ui.tab_shopShop
seasonpass.ui.tab_historyHistory
seasonpass.ui.tab_settingsSettings
seasonpass.ui.free_trackFree
seasonpass.ui.premium_trackPremium
seasonpass.ui.bonus_trackBonus
seasonpass.ui.season_ends_inSeason ends in: {0}
seasonpass.ui.xp_progress{0} / {1} XP
seasonpass.ui.token_balance{0} Tokens
seasonpass.ui.premium_badgePREMIUM
KeyDefault (en-US)
seasonpass.tier.tier_upTier Up! You reached Tier {0}
seasonpass.tier.claimClaim now
seasonpass.tier.claimedClaimed
seasonpass.tier.lockedLocked
seasonpass.tier.premium_lockedPremium Only
seasonpass.tier.reward_claimedReward claimed!
seasonpass.tier.not_reachedTier not reached yet
seasonpass.tier.need_premiumPremium pass required
KeyDefault (en-US)
seasonpass.challenge.kill_mobsKill {0} mobs
seasonpass.challenge.kill_specificKill {0} {1}
seasonpass.challenge.break_blocksBreak {0} blocks
seasonpass.challenge.break_specificBreak {0} {1}
seasonpass.challenge.place_blocksPlace {0} blocks
seasonpass.challenge.harvestHarvest {0} crops
seasonpass.challenge.travelTravel {0} blocks
seasonpass.challenge.discover_zoneDiscover {0} zones
seasonpass.challenge.play_timePlay for {0} minutes
seasonpass.challenge.completeChallenge completed!
KeyDefault (en-US)
seasonpass.shop.titleSeason Shop
seasonpass.shop.cost{0} Tokens
seasonpass.shop.buyBuy
seasonpass.shop.sold_outSOLD
seasonpass.shop.purchasedPurchased {0}!
seasonpass.shop.not_enough_tokensNot enough tokens
seasonpass.shop.daily_rotationDaily Rotation
seasonpass.shop.refreshes_inRefreshes in: {0}
KeyDefault (en-US)
seasonpass.admin.season_startedSeason {0} started
seasonpass.admin.season_endedSeason ended
seasonpass.admin.season_pausedSeason paused
seasonpass.admin.season_resumedSeason resumed
seasonpass.admin.config_reloadedConfiguration reloaded
seasonpass.admin.xp_grantedGranted {0} XP to {1}
seasonpass.admin.tokens_grantedGranted {0} tokens to {1}
seasonpass.admin.premium_grantedPremium granted to {0}
seasonpass.admin.premium_revokedPremium revoked from {0}
seasonpass.admin.tier_setSet {0}‘s tier to {1}
seasonpass.admin.player_resetReset {0}‘s season data
KeyDefault (en-US)
seasonpass.settings.titleSeason Pass Settings
seasonpass.settings.hud_enabledShow HUD Tracker
seasonpass.settings.hud_positionHUD Position
seasonpass.settings.xp_notificationsXP Notifications
seasonpass.settings.xp_allAll
seasonpass.settings.xp_largeLarge only
seasonpass.settings.xp_offOff
seasonpass.settings.xp_notif.allAll
seasonpass.settings.xp_notif.largeLarge only
seasonpass.settings.xp_notif.noneOff
seasonpass.settings.tier_notificationsTier Up Notifications
seasonpass.settings.challenge_notificationsChallenge Notifications
seasonpass.settings.saveSave Settings
seasonpass.settings.savedSettings saved!
KeyDefault (en-US)
seasonpass.booster.activatedXP Booster activated! {0}x for {1} minutes.
seasonpass.booster.expiredYour XP Booster has expired.
seasonpass.booster.active_multiplier{0}x XP | {1}
seasonpass.booster.statusBooster: {0}x ({1} remaining)
seasonpass.booster.replacedYour previous booster was replaced with a new one.
KeyDefault (en-US)
seasonpass.event.startedDOUBLE XP EVENT! {0}x XP for {1} minutes!
seasonpass.event.endedThe Double XP Event has ended.
seasonpass.event.statusEvent: {0}x XP ({1} remaining)
seasonpass.event.warning_5minThe Double XP Event ends in 5 minutes!
KeyDefault (en-US)
seasonpass.prestige.buttonPRESTIGE
seasonpass.prestige.achievedPRESTIGE! You reached Prestige Level {0}!
seasonpass.prestige.levelPrestige {0}
seasonpass.prestige.xp_boost+{0}% XP Boost from Prestige
seasonpass.prestige.max_reachedMaximum Prestige Level reached!
seasonpass.prestige.disabledPrestige is not enabled for this season.
seasonpass.prestige.badgeP{0}
KeyDefault (en-US)
seasonpass.claim_all.buttonClaim All ({0})
seasonpass.claim_all.successClaimed {0} rewards!
seasonpass.claim_all.nothingNo rewards available to claim.
KeyDefault (en-US)
seasonpass.season.activeActive
seasonpass.season.endedEnded
seasonpass.season.pausedPaused
seasonpass.season.teaserComing Soon
seasonpass.season.not_startedNot Started
KeyDefault (en-US)
seasonpass.xp.block_brokenBlock broken
seasonpass.xp.block_placedBlock placed
seasonpass.xp.mob_killMob killed
seasonpass.xp.pvp_killPvP kill
seasonpass.xp.playtimePlaytime
seasonpass.xp.zone_discoveredZone discovered
seasonpass.xp.daily_loginDaily login
seasonpass.xp.login_streakLogin streak
seasonpass.xp.quest_completedQuest completed
seasonpass.xp.achievement_unlockedAchievement unlocked
seasonpass.xp.challengeChallenge reward
seasonpass.xp.first_login_bonusFirst login bonus
KeyDefault (en-US)
seasonpass.error.no_dataCould not load your season data.
seasonpass.error.save_failedFailed to save data.
seasonpass.error.season_inactiveNo season is currently active.
seasonpass.error.already_claimedReward already claimed.
seasonpass.error.tier_not_reachedYou haven’t reached this tier yet.
seasonpass.error.premium_requiredPremium pass required.

Premium Content (seasonpass.challenges.*, seasonpass.shop.*)

Section titled “Premium Content (seasonpass.challenges.*, seasonpass.shop.*)”
KeyDefault (en-US)
seasonpass.challenges.premium_headerPREMIUM CHALLENGES
seasonpass.challenges.premium_lockedPremium Pass required for bonus challenges
seasonpass.shop.premium_headerPREMIUM SHOP
seasonpass.shop.premium_lockedPremium Pass required for exclusive items
seasonpass.cmd.premium_command_onlyThe Premium Pass can only be granted by an admin.
seasonpass.ui.premium_contact_adminContact an admin to get the Premium Pass

The Season Pass supports custom per-language translation overrides. Use the setCustomTranslation() API to set a custom value for any key. Custom translations are saved to custom_{lang}.json files in the localization folder (e.g., custom_en-US.json).

  1. Copy en-US.json and rename to your locale (e.g., fr-FR.json)
  2. Translate all values (keep the keys unchanged)
  3. Set "language": "fr-FR" in config.json
  4. Reload with /spadmin reload

:::tip Partial Translations You don’t need to translate every key. Any missing key automatically falls back to the en-US value. :::