From c7de17a46ebd190dda380fb59f78b7c11583fb68 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Ricardo=20Fleury=20Oliveira?= Date: Sat, 1 Jun 2024 20:53:13 -0300 Subject: [PATCH] Achievements localization, organized some locales files and ptBR translations (#1150) * organizing, translations and achv localization * localized for all languages * minor fix * minor fix 2 * minor fix 3 * Fixed Achivment Localization, Added german localization and fixes some issues with german localization at other parts * fix pickup description * Update French achv.ts * French typo correction achv.ts * eslint fixes * added zhTW * minor fix * Achivment Bar is localized and gets bigger when using german * Changed some things to make it not as Big * The Achivment Bar now grows with the context * Updated Achivment Names in german * Update French achv.ts * Vouchers now will show the correct descrption again * minor fix * minor fixes * "sub" to "semi" * minor fix * fixes warning and organizes some files * forgot about english * korean translations * test fix --------- Co-authored-by: Jannik Tappert Co-authored-by: Jannik Tappert <38758606+CodeTappert@users.noreply.github.com> Co-authored-by: Lugiad --- src/locales/de/ability.ts | 12 +- src/locales/de/achv.ts | 172 +++++++++++++++ src/locales/de/config.ts | 60 +++--- src/locales/de/pokemon-info.ts | 4 +- src/locales/de/starter-select-ui-handler.ts | 2 +- src/locales/en/achv.ts | 171 +++++++++++++++ src/locales/en/config.ts | 60 +++--- src/locales/es/achv.ts | 171 +++++++++++++++ src/locales/es/config.ts | 60 +++--- src/locales/fr/achv.ts | 171 +++++++++++++++ src/locales/fr/config.ts | 60 +++--- src/locales/it/achv.ts | 171 +++++++++++++++ src/locales/it/config.ts | 60 +++--- src/locales/ko/achv.ts | 171 +++++++++++++++ src/locales/ko/config.ts | 61 +++--- src/locales/pt_BR/ability.ts | 3 +- src/locales/pt_BR/achv.ts | 171 +++++++++++++++ src/locales/pt_BR/config.ts | 60 +++--- src/locales/pt_BR/modifier-type.ts | 8 +- src/locales/pt_BR/voucher.ts | 14 +- src/locales/zh_CN/achv.ts | 171 +++++++++++++++ src/locales/zh_CN/config.ts | 60 +++--- src/locales/zh_TW/achv.ts | 171 +++++++++++++++ src/locales/zh_TW/config.ts | 60 +++--- src/locales/zh_TW/game-stats-ui-handler.ts | 44 ++++ src/plugins/i18n.ts | 18 +- src/system/achv.ts | 223 ++++++++++++++------ src/test/achievement.test.ts | 6 +- src/ui/achv-bar.ts | 8 +- src/ui/achvs-ui-handler.ts | 12 +- src/ui/starter-select-ui-handler.ts | 11 +- src/ui/text.ts | 10 +- 32 files changed, 2095 insertions(+), 361 deletions(-) create mode 100644 src/locales/de/achv.ts create mode 100644 src/locales/en/achv.ts create mode 100644 src/locales/es/achv.ts create mode 100644 src/locales/fr/achv.ts create mode 100644 src/locales/it/achv.ts create mode 100644 src/locales/ko/achv.ts create mode 100644 src/locales/pt_BR/achv.ts create mode 100644 src/locales/zh_CN/achv.ts create mode 100644 src/locales/zh_TW/achv.ts create mode 100644 src/locales/zh_TW/game-stats-ui-handler.ts diff --git a/src/locales/de/ability.ts b/src/locales/de/ability.ts index 3d8ca7f61f5..4567976e0ef 100644 --- a/src/locales/de/ability.ts +++ b/src/locales/de/ability.ts @@ -894,27 +894,27 @@ export const ability: AbilityTranslationEntries = { description: "Wechselt seine Fähigkeit zu der eines kampfunfähig gewordenen Mitstreiters.", }, beastBoost: { - name: "BestienBoost", + name: "Bestien-Boost", description: "Erhöht in jeder Runde, in der es ein anderes Pokémon besiegt, seinen höchsten Statuswert.", }, rksSystem: { - name: "AlphaSystem", + name: "Alpha-System", description: "Das Pokémon passt seinen Typ der getragenen Disc an.", }, electricSurge: { - name: "ElektroErzeuger", + name: "Elektro-Erzeuger", description: "Erzeugt bei Kampfantritt ein Elektrofeld.", }, psychicSurge: { - name: "PsychoErzeuger", + name: "Psycho-Erzeuger", description: "Erzeugt bei Kampfantritt ein Psychofeld.", }, mistySurge: { - name: "NebelErzeuger", + name: "Nebel-Erzeuger", description: "Erzeugt bei Kampfantritt ein Nebelfeld.", }, grassySurge: { - name: "GrasErzeuger", + name: "Gras-Erzeuger", description: "Erzeugt bei Kampfantritt ein Grasfeld.", }, fullMetalBody: { diff --git a/src/locales/de/achv.ts b/src/locales/de/achv.ts new file mode 100644 index 00000000000..42f2b2cf86c --- /dev/null +++ b/src/locales/de/achv.ts @@ -0,0 +1,172 @@ +import { AchievementTranslationEntries } from "#app/plugins/i18n.js"; + +export const achv: AchievementTranslationEntries = { + "Achievements": { + name: "Errungenschaften", + }, + "Locked": { + name: "Gesperrt", + }, + + + "MoneyAchv": { + description:"Häufe eine Gesamtsumme von {{moneyAmount}} ₽ an", + }, + "10K_MONEY": { + name: "Besserverdiener", + }, + "100K_MONEY": { + name: "Reich", + }, + "1M_MONEY": { + name: "Millionär", + }, + "10M_MONEY": { + name: "Einprozenter", + }, + + "DamageAchv": { + description: "Füge mit einem Treffer {{damageAmount}} Schaden zu", + }, + "250_DMG": { + name: "Harte Treffer", + }, + "1000_DMG": { + name: "Härtere Treffer", + }, + "2500_DMG": { + name: "Das ist ne Menge Schaden!", + }, + "10000_DMG": { + name: "One Punch Man", + }, + + "HealAchv": { + description: "Heile {{healAmount}} {{HP}} auf einmal. Mit einer Attacke, Fähigkeit oder einem gehaltenen Gegenstand", + }, + "250_HEAL": { + name: "Anfänger-Heiler", + }, + "1000_HEAL": { + name: "Gesundheitsprofi", + }, + "2500_HEAL": { + name: "Kleriker", + }, + "10000_HEAL": { + name: "Wiederherstellungsmeister", + }, + + "LevelAchv": { + description: "Erhöhe das Level eines Pokémon auf {{level}}", + }, + "LV_100": { + name: "Warte, es gibt mehr!", + }, + "LV_250": { + name: "Elite", + }, + "LV_1000": { + name: "Geh noch höher hinaus!", + }, + + "RibbonAchv": { + description: "Sammle insgesamt {{ribbonAmount}} Bänder", + }, + "10_RIBBONS": { + name: "Champion der Pokémon Liga", + }, + "25_RIBBONS": { + name: "Bänder-Sammler", + }, + "50_RIBBONS": { + name: "Bänder-Experte", + }, + "75_RIBBONS": { + name: "Bänder-Guru", + }, + "100_RIBBONS": { + name: "Bänder-Meister", + }, + + "TRANSFER_MAX_BATTLE_STAT": { + name: "Teamwork", + description: "Nutze Staffette, während der Anwender mindestens eines Statuswertes maximiert hat", + }, + "MAX_FRIENDSHIP": { + name: "Freundschaftsmaximierung", + description: "Erreiche maximale Freundschaft bei einem Pokémon", + }, + "MEGA_EVOLVE": { + name: "Megaverwandlung", + description: "Megaentwickle ein Pokémon", + }, + "GIGANTAMAX": { + name: "Absolute Einheit", + description: "Gigadynamaximiere ein Pokémon", + }, + "TERASTALLIZE": { + name: "Typen-Bonus Enthusiast", + description: "Terrakristallisiere ein Pokémon", + }, + "STELLAR_TERASTALLIZE": { + name: "Der geheime Typ", + description: "Terrakristallisiere ein Pokémon zum Typen Stellar", + }, + "SPLICE": { + name: "Unendliche Fusion", + description: "Kombiniere zwei Pokémon mit einem DNS-Keil", + }, + "MINI_BLACK_HOLE": { + name: "Ein Loch voller Items", + description: "Erlange ein Mini-Schwarzes Loch", + }, + "CATCH_MYTHICAL": { + name: "Mysteriöses!", + description: "Fange ein mysteriöses Pokémon", + }, + "CATCH_SUB_LEGENDARY": { + name: "Sub-Legendär", + description: "Fange ein sub-legendäres Pokémon", + }, + "CATCH_LEGENDARY": { + name: "Legendär", + description: "Fange ein legendäres Pokémon", + }, + "SEE_SHINY": { + name: "Schillerndes Licht", + description: "Finde ein wildes schillerndes Pokémon", + }, + "SHINY_PARTY": { + name: "Das ist Hingabe", + description: "Habe ein Team aus schillernden Pokémon", + }, + "HATCH_MYTHICAL": { + name: "Mysteriöses Ei", + description: "Lass ein mysteriöses Pokémon aus einem Ei schlüpfen", + }, + "HATCH_SUB_LEGENDARY": { + name: "Sub-Legendäres Ei", + description: "Lass ein sub-legendäres Pokémon aus einem Ei schlüpfen", + }, + "HATCH_LEGENDARY": { + name: "Legendäres Ei", + description: "Lass ein legendäres Pokémon aus einem Ei schlüpfen", + }, + "HATCH_SHINY": { + name: "Schillerndes Ei", + description: "Lass ein schillerndes Pokémon aus einem Ei schlüpfen", + }, + "HIDDEN_ABILITY": { + name: "Geheimes Talent", + description: "Fang ein Pokémon mit versteckter Fähigkeit", + }, + "PERFECT_IVS": { + name: "Zertifikat der Echtheit", + description: "Erhalte ein Pokémon mit perfekten IS-Werten", + }, + "CLASSIC_VICTORY": { + name: "Ungeschlagen", + description: "Beende den klassischen Modus erfolgreich", + }, +} as const; diff --git a/src/locales/de/config.ts b/src/locales/de/config.ts index 50cf09181fa..e243aac135d 100644 --- a/src/locales/de/config.ts +++ b/src/locales/de/config.ts @@ -1,9 +1,24 @@ import { ability } from "./ability"; import { abilityTriggers } from "./ability-trigger"; +import { achv } from "./achv"; import { battle } from "./battle"; +import { battleMessageUiHandler } from "./battle-message-ui-handler"; +import { berry } from "./berry"; +import { biome } from "./biome"; import { commandUiHandler } from "./command-ui-handler"; +import { + PGFbattleSpecDialogue, + PGFdialogue, + PGFdoubleBattleDialogue, + PGFmiscDialogue, + PGMbattleSpecDialogue, + PGMdialogue, + PGMdoubleBattleDialogue, + PGMmiscDialogue +} from "./dialogue"; import { egg } from "./egg"; import { fightUiHandler } from "./fight-ui-handler"; +import { gameStatsUiHandler } from "./game-stats-ui-handler"; import { growth } from "./growth"; import { menu } from "./menu"; import { menuUiHandler } from "./menu-ui-handler"; @@ -13,33 +28,34 @@ import { nature } from "./nature"; import { pokeball } from "./pokeball"; import { pokemon } from "./pokemon"; import { pokemonInfo } from "./pokemon-info"; +import { pokemonInfoContainer } from "./pokemon-info-container"; import { splashMessages } from "./splash-messages"; import { starterSelectUiHandler } from "./starter-select-ui-handler"; import { titles, trainerClasses, trainerNames } from "./trainers"; import { tutorial } from "./tutorial"; -import { weather } from "./weather"; -import { battleMessageUiHandler } from "./battle-message-ui-handler"; -import { berry } from "./berry"; -import { gameStatsUiHandler } from "./game-stats-ui-handler"; import { voucher } from "./voucher"; -import { - PGMdialogue, - PGFdialogue, - PGMbattleSpecDialogue, - PGFbattleSpecDialogue, - PGMmiscDialogue, - PGFmiscDialogue, PGMdoubleBattleDialogue, PGFdoubleBattleDialogue -} from "./dialogue"; -import { biome } from "./biome"; -import { pokemonInfoContainer } from "./pokemon-info-container"; +import { weather } from "./weather"; export const deConfig = { ability: ability, abilityTriggers: abilityTriggers, + achv: achv, battle: battle, + battleMessageUiHandler: battleMessageUiHandler, + berry: berry, + biome: biome, commandUiHandler: commandUiHandler, + PGMdialogue: PGMdialogue, + PGFdialogue: PGFdialogue, + PGMbattleSpecDialogue: PGMbattleSpecDialogue, + PGFbattleSpecDialogue: PGFbattleSpecDialogue, + PGMmiscDialogue: PGMmiscDialogue, + PGFmiscDialogue: PGFmiscDialogue, + PGMdoubleBattleDialogue: PGMdoubleBattleDialogue, + PGFdoubleBattleDialogue: PGFdoubleBattleDialogue, egg: egg, fightUiHandler: fightUiHandler, + gameStatsUiHandler: gameStatsUiHandler, growth: growth, menu: menu, menuUiHandler: menuUiHandler, @@ -49,25 +65,13 @@ export const deConfig = { pokeball: pokeball, pokemon: pokemon, pokemonInfo: pokemonInfo, + pokemonInfoContainer: pokemonInfoContainer, splashMessages: splashMessages, starterSelectUiHandler: starterSelectUiHandler, titles: titles, trainerClasses: trainerClasses, trainerNames: trainerNames, tutorial: tutorial, - weather: weather, - battleMessageUiHandler: battleMessageUiHandler, - berry: berry, - gameStatsUiHandler: gameStatsUiHandler, voucher: voucher, - biome: biome, - pokemonInfoContainer: pokemonInfoContainer, - PGMdialogue: PGMdialogue, - PGFdialogue: PGFdialogue, - PGMbattleSpecDialogue: PGMbattleSpecDialogue, - PGFbattleSpecDialogue: PGFbattleSpecDialogue, - PGMmiscDialogue: PGMmiscDialogue, - PGFmiscDialogue: PGFmiscDialogue, - PGMdoubleBattleDialogue: PGMdoubleBattleDialogue, - PGFdoubleBattleDialogue: PGFdoubleBattleDialogue + weather: weather }; diff --git a/src/locales/de/pokemon-info.ts b/src/locales/de/pokemon-info.ts index d61e6475299..203ad9e6e1e 100644 --- a/src/locales/de/pokemon-info.ts +++ b/src/locales/de/pokemon-info.ts @@ -2,8 +2,8 @@ import { PokemonInfoTranslationEntries } from "#app/plugins/i18n"; export const pokemonInfo: PokemonInfoTranslationEntries = { Stat: { - "HP": "Max. KP", - "HPshortened": "MaxKP", + "HP": "KP", + "HPshortened": "KP", "ATK": "Angriff", "ATKshortened": "Ang", "DEF": "Verteidigung", diff --git a/src/locales/de/starter-select-ui-handler.ts b/src/locales/de/starter-select-ui-handler.ts index 12061e7ca3f..bae094563cb 100644 --- a/src/locales/de/starter-select-ui-handler.ts +++ b/src/locales/de/starter-select-ui-handler.ts @@ -17,7 +17,7 @@ export const starterSelectUiHandler: SimpleTranslationEntries = { "gen8": "VIII", "gen9": "IX", "growthRate": "Wachstum:", - "ability": "Fähgkeit:", + "ability": "Fähigkeit:", "passive": "Passiv:", "nature": "Wesen:", "eggMoves": "Ei-Attacken", diff --git a/src/locales/en/achv.ts b/src/locales/en/achv.ts new file mode 100644 index 00000000000..42b1995bcde --- /dev/null +++ b/src/locales/en/achv.ts @@ -0,0 +1,171 @@ +import { AchievementTranslationEntries } from "#app/plugins/i18n.js"; + +export const achv: AchievementTranslationEntries = { + "Achievements": { + name: "Achievements", + }, + "Locked": { + name: "Locked", + }, + + "MoneyAchv": { + description: "Accumulate a total of ₽{{moneyAmount}}", + }, + "10K_MONEY": { + name: "Money Haver", + }, + "100K_MONEY": { + name: "Rich", + }, + "1M_MONEY": { + name: "Millionaire", + }, + "10M_MONEY": { + name: "One Percenter", + }, + + "DamageAchv": { + description: "Inflict {{damageAmount}} damage in one hit", + }, + "250_DMG": { + name: "Hard Hitter", + }, + "1000_DMG": { + name: "Harder Hitter", + }, + "2500_DMG": { + name: "That's a Lotta Damage!", + }, + "10000_DMG": { + name: "One Punch Man", + }, + + "HealAchv": { + description: "Heal {{healAmount}} {{HP}} at once with a move, ability, or held item", + }, + "250_HEAL": { + name: "Novice Healer", + }, + "1000_HEAL": { + name: "Big Healer", + }, + "2500_HEAL": { + name: "Cleric", + }, + "10000_HEAL": { + name: "Recovery Master", + }, + + "LevelAchv": { + description: "Level up a Pokémon to Lv{{level}}", + }, + "LV_100": { + name: "But Wait, There's More!", + }, + "LV_250": { + name: "Elite", + }, + "LV_1000": { + name: "To Go Even Further Beyond", + }, + + "RibbonAchv": { + description: "Accumulate a total of {{ribbonAmount}} Ribbons", + }, + "10_RIBBONS": { + name: "Pokémon League Champion", + }, + "25_RIBBONS": { + name: "Great League Champion", + }, + "50_RIBBONS": { + name: "Ultra League Champion", + }, + "75_RIBBONS": { + name: "Rogue League Champion", + }, + "100_RIBBONS": { + name: "Master League Champion", + }, + + "TRANSFER_MAX_BATTLE_STAT": { + name: "Teamwork", + description: "Baton pass to another party member with at least one stat maxed out", + }, + "MAX_FRIENDSHIP": { + name: "Friendmaxxing", + description: "Reach max friendship on a Pokémon", + }, + "MEGA_EVOLVE": { + name: "Megamorph", + description: "Mega evolve a Pokémon", + }, + "GIGANTAMAX": { + name: "Absolute Unit", + description: "Gigantamax a Pokémon", + }, + "TERASTALLIZE": { + name: "STAB Enthusiast", + description: "Terastallize a Pokémon", + }, + "STELLAR_TERASTALLIZE": { + name: "The Hidden Type", + description: "Stellar Terastallize a Pokémon", + }, + "SPLICE": { + name: "Infinite Fusion", + description: "Splice two Pokémon together with DNA Splicers", + }, + "MINI_BLACK_HOLE": { + name: "A Hole Lot of Items", + description: "Acquire a Mini Black Hole", + }, + "CATCH_MYTHICAL": { + name: "Mythical", + description: "Catch a mythical Pokémon", + }, + "CATCH_SUB_LEGENDARY": { + name: "(Sub-)Legendary", + description: "Catch a sub-legendary Pokémon", + }, + "CATCH_LEGENDARY": { + name: "Legendary", + description: "Catch a legendary Pokémon", + }, + "SEE_SHINY": { + name: "Shiny", + description: "Find a shiny Pokémon in the wild", + }, + "SHINY_PARTY": { + name: "That's Dedication", + description: "Have a full party of shiny Pokémon", + }, + "HATCH_MYTHICAL": { + name: "Mythical Egg", + description: "Hatch a mythical Pokémon from an egg", + }, + "HATCH_SUB_LEGENDARY": { + name: "Sub-Legendary Egg", + description: "Hatch a sub-legendary Pokémon from an egg", + }, + "HATCH_LEGENDARY": { + name: "Legendary Egg", + description: "Hatch a legendary Pokémon from an egg", + }, + "HATCH_SHINY": { + name: "Shiny Egg", + description: "Hatch a shiny Pokémon from an egg", + }, + "HIDDEN_ABILITY": { + name: "Hidden Potential", + description: "Catch a Pokémon with a hidden ability", + }, + "PERFECT_IVS": { + name: "Certificate of Authenticity", + description: "Get perfect IVs on a Pokémon", + }, + "CLASSIC_VICTORY": { + name: "Undefeated", + description: "Beat the game in classic mode", + }, +} as const; diff --git a/src/locales/en/config.ts b/src/locales/en/config.ts index d01102bc3a4..0891a6a4c10 100644 --- a/src/locales/en/config.ts +++ b/src/locales/en/config.ts @@ -1,9 +1,24 @@ import { ability } from "./ability"; import { abilityTriggers } from "./ability-trigger"; +import { achv } from "./achv"; import { battle } from "./battle"; +import { battleMessageUiHandler } from "./battle-message-ui-handler"; +import { berry } from "./berry"; +import { biome } from "./biome"; import { commandUiHandler } from "./command-ui-handler"; +import { + PGFbattleSpecDialogue, + PGFdialogue, + PGFdoubleBattleDialogue, + PGFmiscDialogue, + PGMbattleSpecDialogue, + PGMdialogue, + PGMdoubleBattleDialogue, + PGMmiscDialogue +} from "./dialogue"; import { egg } from "./egg"; import { fightUiHandler } from "./fight-ui-handler"; +import { gameStatsUiHandler } from "./game-stats-ui-handler"; import { growth } from "./growth"; import { menu } from "./menu"; import { menuUiHandler } from "./menu-ui-handler"; @@ -13,33 +28,34 @@ import { nature } from "./nature"; import { pokeball } from "./pokeball"; import { pokemon } from "./pokemon"; import { pokemonInfo } from "./pokemon-info"; +import { pokemonInfoContainer } from "./pokemon-info-container"; import { splashMessages } from "./splash-messages"; import { starterSelectUiHandler } from "./starter-select-ui-handler"; import { titles, trainerClasses, trainerNames } from "./trainers"; import { tutorial } from "./tutorial"; -import { weather } from "./weather"; -import { battleMessageUiHandler } from "./battle-message-ui-handler"; -import { berry } from "./berry"; -import { gameStatsUiHandler } from "./game-stats-ui-handler"; import { voucher } from "./voucher"; -import { - PGMdialogue, - PGFdialogue, - PGMbattleSpecDialogue, - PGFbattleSpecDialogue, - PGMmiscDialogue, - PGFmiscDialogue, PGMdoubleBattleDialogue, PGFdoubleBattleDialogue -} from "./dialogue"; -import { biome } from "./biome"; -import { pokemonInfoContainer } from "./pokemon-info-container"; +import { weather } from "./weather"; export const enConfig = { ability: ability, abilityTriggers: abilityTriggers, + achv: achv, battle: battle, + battleMessageUiHandler: battleMessageUiHandler, + berry: berry, + biome: biome, commandUiHandler: commandUiHandler, + PGMdialogue: PGMdialogue, + PGFdialogue: PGFdialogue, + PGMbattleSpecDialogue: PGMbattleSpecDialogue, + PGFbattleSpecDialogue: PGFbattleSpecDialogue, + PGMmiscDialogue: PGMmiscDialogue, + PGFmiscDialogue: PGFmiscDialogue, + PGMdoubleBattleDialogue: PGMdoubleBattleDialogue, + PGFdoubleBattleDialogue: PGFdoubleBattleDialogue, egg: egg, fightUiHandler: fightUiHandler, + gameStatsUiHandler: gameStatsUiHandler, growth: growth, menu: menu, menuUiHandler: menuUiHandler, @@ -49,25 +65,13 @@ export const enConfig = { pokeball: pokeball, pokemon: pokemon, pokemonInfo: pokemonInfo, + pokemonInfoContainer: pokemonInfoContainer, splashMessages: splashMessages, starterSelectUiHandler: starterSelectUiHandler, titles: titles, trainerClasses: trainerClasses, trainerNames: trainerNames, tutorial: tutorial, - weather: weather, - battleMessageUiHandler: battleMessageUiHandler, - berry: berry, - gameStatsUiHandler: gameStatsUiHandler, voucher: voucher, - biome: biome, - pokemonInfoContainer: pokemonInfoContainer, - PGMdialogue: PGMdialogue, - PGFdialogue: PGFdialogue, - PGMbattleSpecDialogue: PGMbattleSpecDialogue, - PGFbattleSpecDialogue: PGFbattleSpecDialogue, - PGMmiscDialogue: PGMmiscDialogue, - PGFmiscDialogue: PGFmiscDialogue, - PGMdoubleBattleDialogue: PGMdoubleBattleDialogue, - PGFdoubleBattleDialogue: PGFdoubleBattleDialogue + weather: weather }; diff --git a/src/locales/es/achv.ts b/src/locales/es/achv.ts new file mode 100644 index 00000000000..42b1995bcde --- /dev/null +++ b/src/locales/es/achv.ts @@ -0,0 +1,171 @@ +import { AchievementTranslationEntries } from "#app/plugins/i18n.js"; + +export const achv: AchievementTranslationEntries = { + "Achievements": { + name: "Achievements", + }, + "Locked": { + name: "Locked", + }, + + "MoneyAchv": { + description: "Accumulate a total of ₽{{moneyAmount}}", + }, + "10K_MONEY": { + name: "Money Haver", + }, + "100K_MONEY": { + name: "Rich", + }, + "1M_MONEY": { + name: "Millionaire", + }, + "10M_MONEY": { + name: "One Percenter", + }, + + "DamageAchv": { + description: "Inflict {{damageAmount}} damage in one hit", + }, + "250_DMG": { + name: "Hard Hitter", + }, + "1000_DMG": { + name: "Harder Hitter", + }, + "2500_DMG": { + name: "That's a Lotta Damage!", + }, + "10000_DMG": { + name: "One Punch Man", + }, + + "HealAchv": { + description: "Heal {{healAmount}} {{HP}} at once with a move, ability, or held item", + }, + "250_HEAL": { + name: "Novice Healer", + }, + "1000_HEAL": { + name: "Big Healer", + }, + "2500_HEAL": { + name: "Cleric", + }, + "10000_HEAL": { + name: "Recovery Master", + }, + + "LevelAchv": { + description: "Level up a Pokémon to Lv{{level}}", + }, + "LV_100": { + name: "But Wait, There's More!", + }, + "LV_250": { + name: "Elite", + }, + "LV_1000": { + name: "To Go Even Further Beyond", + }, + + "RibbonAchv": { + description: "Accumulate a total of {{ribbonAmount}} Ribbons", + }, + "10_RIBBONS": { + name: "Pokémon League Champion", + }, + "25_RIBBONS": { + name: "Great League Champion", + }, + "50_RIBBONS": { + name: "Ultra League Champion", + }, + "75_RIBBONS": { + name: "Rogue League Champion", + }, + "100_RIBBONS": { + name: "Master League Champion", + }, + + "TRANSFER_MAX_BATTLE_STAT": { + name: "Teamwork", + description: "Baton pass to another party member with at least one stat maxed out", + }, + "MAX_FRIENDSHIP": { + name: "Friendmaxxing", + description: "Reach max friendship on a Pokémon", + }, + "MEGA_EVOLVE": { + name: "Megamorph", + description: "Mega evolve a Pokémon", + }, + "GIGANTAMAX": { + name: "Absolute Unit", + description: "Gigantamax a Pokémon", + }, + "TERASTALLIZE": { + name: "STAB Enthusiast", + description: "Terastallize a Pokémon", + }, + "STELLAR_TERASTALLIZE": { + name: "The Hidden Type", + description: "Stellar Terastallize a Pokémon", + }, + "SPLICE": { + name: "Infinite Fusion", + description: "Splice two Pokémon together with DNA Splicers", + }, + "MINI_BLACK_HOLE": { + name: "A Hole Lot of Items", + description: "Acquire a Mini Black Hole", + }, + "CATCH_MYTHICAL": { + name: "Mythical", + description: "Catch a mythical Pokémon", + }, + "CATCH_SUB_LEGENDARY": { + name: "(Sub-)Legendary", + description: "Catch a sub-legendary Pokémon", + }, + "CATCH_LEGENDARY": { + name: "Legendary", + description: "Catch a legendary Pokémon", + }, + "SEE_SHINY": { + name: "Shiny", + description: "Find a shiny Pokémon in the wild", + }, + "SHINY_PARTY": { + name: "That's Dedication", + description: "Have a full party of shiny Pokémon", + }, + "HATCH_MYTHICAL": { + name: "Mythical Egg", + description: "Hatch a mythical Pokémon from an egg", + }, + "HATCH_SUB_LEGENDARY": { + name: "Sub-Legendary Egg", + description: "Hatch a sub-legendary Pokémon from an egg", + }, + "HATCH_LEGENDARY": { + name: "Legendary Egg", + description: "Hatch a legendary Pokémon from an egg", + }, + "HATCH_SHINY": { + name: "Shiny Egg", + description: "Hatch a shiny Pokémon from an egg", + }, + "HIDDEN_ABILITY": { + name: "Hidden Potential", + description: "Catch a Pokémon with a hidden ability", + }, + "PERFECT_IVS": { + name: "Certificate of Authenticity", + description: "Get perfect IVs on a Pokémon", + }, + "CLASSIC_VICTORY": { + name: "Undefeated", + description: "Beat the game in classic mode", + }, +} as const; diff --git a/src/locales/es/config.ts b/src/locales/es/config.ts index 2f33cd680ae..7e1935a23a0 100644 --- a/src/locales/es/config.ts +++ b/src/locales/es/config.ts @@ -1,9 +1,24 @@ import { ability } from "./ability"; import { abilityTriggers } from "./ability-trigger"; +import { achv } from "./achv"; import { battle } from "./battle"; +import { battleMessageUiHandler } from "./battle-message-ui-handler"; +import { berry } from "./berry"; +import { biome } from "./biome"; import { commandUiHandler } from "./command-ui-handler"; +import { + PGFbattleSpecDialogue, + PGFdialogue, + PGFdoubleBattleDialogue, + PGFmiscDialogue, + PGMbattleSpecDialogue, + PGMdialogue, + PGMdoubleBattleDialogue, + PGMmiscDialogue +} from "./dialogue"; import { egg } from "./egg"; import { fightUiHandler } from "./fight-ui-handler"; +import { gameStatsUiHandler } from "./game-stats-ui-handler"; import { growth } from "./growth"; import { menu } from "./menu"; import { menuUiHandler } from "./menu-ui-handler"; @@ -13,33 +28,34 @@ import { nature } from "./nature"; import { pokeball } from "./pokeball"; import { pokemon } from "./pokemon"; import { pokemonInfo } from "./pokemon-info"; +import { pokemonInfoContainer } from "./pokemon-info-container"; import { splashMessages } from "./splash-messages"; import { starterSelectUiHandler } from "./starter-select-ui-handler"; import { titles, trainerClasses, trainerNames } from "./trainers"; import { tutorial } from "./tutorial"; -import { weather } from "./weather"; -import { battleMessageUiHandler } from "./battle-message-ui-handler"; -import { berry } from "./berry"; -import { gameStatsUiHandler } from "./game-stats-ui-handler"; import { voucher } from "./voucher"; -import { - PGMdialogue, - PGFdialogue, - PGMbattleSpecDialogue, - PGFbattleSpecDialogue, - PGMmiscDialogue, - PGFmiscDialogue, PGMdoubleBattleDialogue, PGFdoubleBattleDialogue -} from "./dialogue"; -import { biome } from "./biome"; -import { pokemonInfoContainer } from "./pokemon-info-container"; +import { weather } from "./weather"; export const esConfig = { ability: ability, abilityTriggers: abilityTriggers, + achv: achv, battle: battle, + battleMessageUiHandler: battleMessageUiHandler, + berry: berry, + biome: biome, commandUiHandler: commandUiHandler, + PGMdialogue: PGMdialogue, + PGFdialogue: PGFdialogue, + PGMbattleSpecDialogue: PGMbattleSpecDialogue, + PGFbattleSpecDialogue: PGFbattleSpecDialogue, + PGMmiscDialogue: PGMmiscDialogue, + PGFmiscDialogue: PGFmiscDialogue, + PGMdoubleBattleDialogue: PGMdoubleBattleDialogue, + PGFdoubleBattleDialogue: PGFdoubleBattleDialogue, egg: egg, fightUiHandler: fightUiHandler, + gameStatsUiHandler: gameStatsUiHandler, growth: growth, menu: menu, menuUiHandler: menuUiHandler, @@ -49,25 +65,13 @@ export const esConfig = { pokeball: pokeball, pokemon: pokemon, pokemonInfo: pokemonInfo, + pokemonInfoContainer: pokemonInfoContainer, splashMessages: splashMessages, starterSelectUiHandler: starterSelectUiHandler, titles: titles, trainerClasses: trainerClasses, trainerNames: trainerNames, tutorial: tutorial, - weather: weather, - battleMessageUiHandler: battleMessageUiHandler, - berry: berry, - gameStatsUiHandler: gameStatsUiHandler, voucher: voucher, - biome: biome, - pokemonInfoContainer: pokemonInfoContainer, - PGMdialogue: PGMdialogue, - PGFdialogue: PGFdialogue, - PGMbattleSpecDialogue: PGMbattleSpecDialogue, - PGFbattleSpecDialogue: PGFbattleSpecDialogue, - PGMmiscDialogue: PGMmiscDialogue, - PGFmiscDialogue: PGFmiscDialogue, - PGMdoubleBattleDialogue: PGMdoubleBattleDialogue, - PGFdoubleBattleDialogue: PGFdoubleBattleDialogue + weather: weather }; diff --git a/src/locales/fr/achv.ts b/src/locales/fr/achv.ts new file mode 100644 index 00000000000..6383c6817c0 --- /dev/null +++ b/src/locales/fr/achv.ts @@ -0,0 +1,171 @@ +import { AchievementTranslationEntries } from "#app/plugins/i18n.js"; + +export const achv: AchievementTranslationEntries = { + "Achievements": { + name: "Succès", + }, + "Locked": { + name: "Verrouillé", + }, + + "MoneyAchv": { + description: "Récolter un total de {{moneyAmount}} ₽", + }, + "10K_MONEY": { + name: "Épargnant", + }, + "100K_MONEY": { + name: "Je possède des thunes", + }, + "1M_MONEY": { + name: "Banquier", + }, + "10M_MONEY": { + name: "Évadé·e fiscal·e", + }, + + "DamageAchv": { + description: "Infliger {{damageAmount}} de dégâts en un coup", + }, + "250_DMG": { + name: "Caïd", + }, + "1000_DMG": { + name: "Boxeur", + }, + "2500_DMG": { + name: "Distributeur de pains", + }, + "10000_DMG": { + name: "One Punch Man", + }, + + "HealAchv": { + description: "Soigner {{healAmount}} {{HP}} en une fois avec une capacité, un talent ou un objet tenu", + }, + "250_HEAL": { + name: "Infirmier·ère", + }, + "1000_HEAL": { + name: "Médecin", + }, + "2500_HEAL": { + name: "Clerc", + }, + "10000_HEAL": { + name: "Centre Pokémon", + }, + + "LevelAchv": { + description: "Monter un Pokémon au N.{{level}}", + }, + "LV_100": { + name: "Et c’est pas fini !", + }, + "LV_250": { + name: "Élite", + }, + "LV_1000": { + name: "Vers l’infini et au-delà", + }, + + "RibbonAchv": { + description: "Accumuler un total de {{ribbonAmount}} Rubans", + }, + "10_RIBBONS": { + name: "Maitre·sse de la Ligue", + }, + "25_RIBBONS": { + name: "Super Maitre·sse de la Ligue", + }, + "50_RIBBONS": { + name: "Hyper Maitre·sse de la Ligue", + }, + "75_RIBBONS": { + name: "Rogue Maitre·sse de la Ligue", + }, + "100_RIBBONS": { + name: "Master Maitre·sse de la Ligue", + }, + + "TRANSFER_MAX_BATTLE_STAT": { + name: "Travail d’équipe", + description: "Utiliser Relais avec au moins une statistique montée à fond", + }, + "MAX_FRIENDSHIP": { + name: "Copinage", + description: "Atteindre le niveau de bonheur maximal avec un Pokémon", + }, + "MEGA_EVOLVE": { + name: "Mégamorph", + description: "Méga-évoluer un Pokémon", + }, + "GIGANTAMAX": { + name: "Kaijū", + description: "Gigamaxer un Pokémon", + }, + "TERASTALLIZE": { + name: "J’aime les STAB", + description: "Téracristalliser un Pokémon", + }, + "STELLAR_TERASTALLIZE": { + name: "Le type enfoui", + description: "Téracristalliser un Pokémon en type Stellaire", + }, + "SPLICE": { + name: "Infinite Fusion", + description: "Fusionner deux Pokémon avec le Pointeau ADN", + }, + "MINI_BLACK_HOLE": { + name: "Item-stellar", + description: "Obtenir un Mini Trou Noir", + }, + "CATCH_MYTHICAL": { + name: "Fabuleux", + description: "Capturer un Pokémon fabuleux", + }, + "CATCH_SUB_LEGENDARY": { + name: "(Semi-)Légendaire", + description: "Capturer un Pokémon semi-légendaire", + }, + "CATCH_LEGENDARY": { + name: "Légendaire", + description: "Capturer un Pokémon légendaire", + }, + "SEE_SHINY": { + name: "Chromatique", + description: "Trouver un Pokémon sauvage chromatique", + }, + "SHINY_PARTY": { + name: "Shasseur", + description: "Avoir une équipe exclusivement composée de Pokémon chromatiques", + }, + "HATCH_MYTHICAL": { + name: "Œuf fabuleux", + description: "Obtenir un Pokémon fabuleux dans un Œuf", + }, + "HATCH_SUB_LEGENDARY": { + name: "Œuf semi-légendaire", + description: "Obtenir un Pokémon semi-légendaire dans un Œuf", + }, + "HATCH_LEGENDARY": { + name: "Œuf légendaire", + description: "Obtenir un Pokémon légendaire dans un Œuf", + }, + "HATCH_SHINY": { + name: "Œuf chromatique", + description: "Obtenir un Pokémon chromatique dans un Œuf", + }, + "HIDDEN_ABILITY": { + name: "Potentiel enfoui", + description: "Capturer un Pokémon possédant un talent caché", + }, + "PERFECT_IVS": { + name: "Certificat d’Authenticité", + description: "Avoir des IV parfaits sur un Pokémon", + }, + "CLASSIC_VICTORY": { + name: "Invaincu·e", + description: "Terminer le jeu en mode classique", + }, +} as const; diff --git a/src/locales/fr/config.ts b/src/locales/fr/config.ts index f7f7201ddd7..ee9e9a1e2ac 100644 --- a/src/locales/fr/config.ts +++ b/src/locales/fr/config.ts @@ -1,9 +1,24 @@ import { ability } from "./ability"; import { abilityTriggers } from "./ability-trigger"; +import { achv } from "./achv"; import { battle } from "./battle"; +import { battleMessageUiHandler } from "./battle-message-ui-handler"; +import { berry } from "./berry"; +import { biome } from "./biome"; import { commandUiHandler } from "./command-ui-handler"; +import { + PGFbattleSpecDialogue, + PGFdialogue, + PGFdoubleBattleDialogue, + PGFmiscDialogue, + PGMbattleSpecDialogue, + PGMdialogue, + PGMdoubleBattleDialogue, + PGMmiscDialogue +} from "./dialogue"; import { egg } from "./egg"; import { fightUiHandler } from "./fight-ui-handler"; +import { gameStatsUiHandler } from "./game-stats-ui-handler"; import { growth } from "./growth"; import { menu } from "./menu"; import { menuUiHandler } from "./menu-ui-handler"; @@ -13,33 +28,34 @@ import { nature } from "./nature"; import { pokeball } from "./pokeball"; import { pokemon } from "./pokemon"; import { pokemonInfo } from "./pokemon-info"; +import { pokemonInfoContainer } from "./pokemon-info-container"; import { splashMessages } from "./splash-messages"; import { starterSelectUiHandler } from "./starter-select-ui-handler"; import { titles, trainerClasses, trainerNames } from "./trainers"; import { tutorial } from "./tutorial"; -import { weather } from "./weather"; -import { battleMessageUiHandler } from "./battle-message-ui-handler"; -import { berry } from "./berry"; -import { gameStatsUiHandler } from "./game-stats-ui-handler"; import { voucher } from "./voucher"; -import { - PGMdialogue, - PGFdialogue, - PGMbattleSpecDialogue, - PGFbattleSpecDialogue, - PGMmiscDialogue, - PGFmiscDialogue, PGMdoubleBattleDialogue, PGFdoubleBattleDialogue -} from "./dialogue"; -import { biome } from "./biome"; -import { pokemonInfoContainer } from "./pokemon-info-container"; +import { weather } from "./weather"; export const frConfig = { ability: ability, abilityTriggers: abilityTriggers, + achv: achv, battle: battle, + battleMessageUiHandler: battleMessageUiHandler, + berry: berry, + biome: biome, commandUiHandler: commandUiHandler, + PGMdialogue: PGMdialogue, + PGFdialogue: PGFdialogue, + PGMbattleSpecDialogue: PGMbattleSpecDialogue, + PGFbattleSpecDialogue: PGFbattleSpecDialogue, + PGMmiscDialogue: PGMmiscDialogue, + PGFmiscDialogue: PGFmiscDialogue, + PGMdoubleBattleDialogue: PGMdoubleBattleDialogue, + PGFdoubleBattleDialogue: PGFdoubleBattleDialogue, egg: egg, fightUiHandler: fightUiHandler, + gameStatsUiHandler: gameStatsUiHandler, growth: growth, menu: menu, menuUiHandler: menuUiHandler, @@ -49,25 +65,13 @@ export const frConfig = { pokeball: pokeball, pokemon: pokemon, pokemonInfo: pokemonInfo, + pokemonInfoContainer: pokemonInfoContainer, splashMessages: splashMessages, starterSelectUiHandler: starterSelectUiHandler, titles: titles, trainerClasses: trainerClasses, trainerNames: trainerNames, tutorial: tutorial, - weather: weather, - battleMessageUiHandler: battleMessageUiHandler, - berry: berry, - gameStatsUiHandler: gameStatsUiHandler, voucher: voucher, - biome: biome, - pokemonInfoContainer: pokemonInfoContainer, - PGMdialogue: PGMdialogue, - PGFdialogue: PGFdialogue, - PGMbattleSpecDialogue: PGMbattleSpecDialogue, - PGFbattleSpecDialogue: PGFbattleSpecDialogue, - PGMmiscDialogue: PGMmiscDialogue, - PGFmiscDialogue: PGFmiscDialogue, - PGMdoubleBattleDialogue: PGMdoubleBattleDialogue, - PGFdoubleBattleDialogue: PGFdoubleBattleDialogue + weather: weather }; diff --git a/src/locales/it/achv.ts b/src/locales/it/achv.ts new file mode 100644 index 00000000000..42b1995bcde --- /dev/null +++ b/src/locales/it/achv.ts @@ -0,0 +1,171 @@ +import { AchievementTranslationEntries } from "#app/plugins/i18n.js"; + +export const achv: AchievementTranslationEntries = { + "Achievements": { + name: "Achievements", + }, + "Locked": { + name: "Locked", + }, + + "MoneyAchv": { + description: "Accumulate a total of ₽{{moneyAmount}}", + }, + "10K_MONEY": { + name: "Money Haver", + }, + "100K_MONEY": { + name: "Rich", + }, + "1M_MONEY": { + name: "Millionaire", + }, + "10M_MONEY": { + name: "One Percenter", + }, + + "DamageAchv": { + description: "Inflict {{damageAmount}} damage in one hit", + }, + "250_DMG": { + name: "Hard Hitter", + }, + "1000_DMG": { + name: "Harder Hitter", + }, + "2500_DMG": { + name: "That's a Lotta Damage!", + }, + "10000_DMG": { + name: "One Punch Man", + }, + + "HealAchv": { + description: "Heal {{healAmount}} {{HP}} at once with a move, ability, or held item", + }, + "250_HEAL": { + name: "Novice Healer", + }, + "1000_HEAL": { + name: "Big Healer", + }, + "2500_HEAL": { + name: "Cleric", + }, + "10000_HEAL": { + name: "Recovery Master", + }, + + "LevelAchv": { + description: "Level up a Pokémon to Lv{{level}}", + }, + "LV_100": { + name: "But Wait, There's More!", + }, + "LV_250": { + name: "Elite", + }, + "LV_1000": { + name: "To Go Even Further Beyond", + }, + + "RibbonAchv": { + description: "Accumulate a total of {{ribbonAmount}} Ribbons", + }, + "10_RIBBONS": { + name: "Pokémon League Champion", + }, + "25_RIBBONS": { + name: "Great League Champion", + }, + "50_RIBBONS": { + name: "Ultra League Champion", + }, + "75_RIBBONS": { + name: "Rogue League Champion", + }, + "100_RIBBONS": { + name: "Master League Champion", + }, + + "TRANSFER_MAX_BATTLE_STAT": { + name: "Teamwork", + description: "Baton pass to another party member with at least one stat maxed out", + }, + "MAX_FRIENDSHIP": { + name: "Friendmaxxing", + description: "Reach max friendship on a Pokémon", + }, + "MEGA_EVOLVE": { + name: "Megamorph", + description: "Mega evolve a Pokémon", + }, + "GIGANTAMAX": { + name: "Absolute Unit", + description: "Gigantamax a Pokémon", + }, + "TERASTALLIZE": { + name: "STAB Enthusiast", + description: "Terastallize a Pokémon", + }, + "STELLAR_TERASTALLIZE": { + name: "The Hidden Type", + description: "Stellar Terastallize a Pokémon", + }, + "SPLICE": { + name: "Infinite Fusion", + description: "Splice two Pokémon together with DNA Splicers", + }, + "MINI_BLACK_HOLE": { + name: "A Hole Lot of Items", + description: "Acquire a Mini Black Hole", + }, + "CATCH_MYTHICAL": { + name: "Mythical", + description: "Catch a mythical Pokémon", + }, + "CATCH_SUB_LEGENDARY": { + name: "(Sub-)Legendary", + description: "Catch a sub-legendary Pokémon", + }, + "CATCH_LEGENDARY": { + name: "Legendary", + description: "Catch a legendary Pokémon", + }, + "SEE_SHINY": { + name: "Shiny", + description: "Find a shiny Pokémon in the wild", + }, + "SHINY_PARTY": { + name: "That's Dedication", + description: "Have a full party of shiny Pokémon", + }, + "HATCH_MYTHICAL": { + name: "Mythical Egg", + description: "Hatch a mythical Pokémon from an egg", + }, + "HATCH_SUB_LEGENDARY": { + name: "Sub-Legendary Egg", + description: "Hatch a sub-legendary Pokémon from an egg", + }, + "HATCH_LEGENDARY": { + name: "Legendary Egg", + description: "Hatch a legendary Pokémon from an egg", + }, + "HATCH_SHINY": { + name: "Shiny Egg", + description: "Hatch a shiny Pokémon from an egg", + }, + "HIDDEN_ABILITY": { + name: "Hidden Potential", + description: "Catch a Pokémon with a hidden ability", + }, + "PERFECT_IVS": { + name: "Certificate of Authenticity", + description: "Get perfect IVs on a Pokémon", + }, + "CLASSIC_VICTORY": { + name: "Undefeated", + description: "Beat the game in classic mode", + }, +} as const; diff --git a/src/locales/it/config.ts b/src/locales/it/config.ts index 5f76e4d4205..8549afb12be 100644 --- a/src/locales/it/config.ts +++ b/src/locales/it/config.ts @@ -1,9 +1,24 @@ import { ability } from "./ability"; import { abilityTriggers } from "./ability-trigger"; +import { achv } from "./achv"; import { battle } from "./battle"; +import { battleMessageUiHandler } from "./battle-message-ui-handler"; +import { berry } from "./berry"; +import { biome } from "./biome"; import { commandUiHandler } from "./command-ui-handler"; +import { + PGFbattleSpecDialogue, + PGFdialogue, + PGFdoubleBattleDialogue, + PGFmiscDialogue, + PGMbattleSpecDialogue, + PGMdialogue, + PGMdoubleBattleDialogue, + PGMmiscDialogue +} from "./dialogue"; import { egg } from "./egg"; import { fightUiHandler } from "./fight-ui-handler"; +import { gameStatsUiHandler } from "./game-stats-ui-handler"; import { growth } from "./growth"; import { menu } from "./menu"; import { menuUiHandler } from "./menu-ui-handler"; @@ -13,33 +28,34 @@ import { nature } from "./nature"; import { pokeball } from "./pokeball"; import { pokemon } from "./pokemon"; import { pokemonInfo } from "./pokemon-info"; +import { pokemonInfoContainer } from "./pokemon-info-container"; import { splashMessages } from "./splash-messages"; import { starterSelectUiHandler } from "./starter-select-ui-handler"; import { titles, trainerClasses, trainerNames } from "./trainers"; import { tutorial } from "./tutorial"; -import { weather } from "./weather"; -import { battleMessageUiHandler } from "./battle-message-ui-handler"; -import { berry } from "./berry"; -import { gameStatsUiHandler } from "./game-stats-ui-handler"; import { voucher } from "./voucher"; -import { - PGMdialogue, - PGFdialogue, - PGMbattleSpecDialogue, - PGFbattleSpecDialogue, - PGMmiscDialogue, - PGFmiscDialogue, PGMdoubleBattleDialogue, PGFdoubleBattleDialogue -} from "./dialogue"; -import { biome } from "./biome"; -import { pokemonInfoContainer } from "./pokemon-info-container"; +import { weather } from "./weather"; export const itConfig = { ability: ability, abilityTriggers: abilityTriggers, + achv: achv, battle: battle, + battleMessageUiHandler: battleMessageUiHandler, + berry: berry, + biome: biome, commandUiHandler: commandUiHandler, + PGMdialogue: PGMdialogue, + PGFdialogue: PGFdialogue, + PGMbattleSpecDialogue: PGMbattleSpecDialogue, + PGFbattleSpecDialogue: PGFbattleSpecDialogue, + PGMmiscDialogue: PGMmiscDialogue, + PGFmiscDialogue: PGFmiscDialogue, + PGMdoubleBattleDialogue: PGMdoubleBattleDialogue, + PGFdoubleBattleDialogue: PGFdoubleBattleDialogue, egg: egg, fightUiHandler: fightUiHandler, + gameStatsUiHandler: gameStatsUiHandler, growth: growth, menu: menu, menuUiHandler: menuUiHandler, @@ -49,25 +65,13 @@ export const itConfig = { pokeball: pokeball, pokemon: pokemon, pokemonInfo: pokemonInfo, + pokemonInfoContainer: pokemonInfoContainer, splashMessages: splashMessages, starterSelectUiHandler: starterSelectUiHandler, titles: titles, trainerClasses: trainerClasses, trainerNames: trainerNames, tutorial: tutorial, - weather: weather, - battleMessageUiHandler: battleMessageUiHandler, - berry: berry, - gameStatsUiHandler: gameStatsUiHandler, voucher: voucher, - biome: biome, - pokemonInfoContainer: pokemonInfoContainer, - PGMdialogue: PGMdialogue, - PGFdialogue: PGFdialogue, - PGMbattleSpecDialogue: PGMbattleSpecDialogue, - PGFbattleSpecDialogue: PGFbattleSpecDialogue, - PGMmiscDialogue: PGMmiscDialogue, - PGFmiscDialogue: PGFmiscDialogue, - PGMdoubleBattleDialogue: PGMdoubleBattleDialogue, - PGFdoubleBattleDialogue: PGFdoubleBattleDialogue + weather: weather }; diff --git a/src/locales/ko/achv.ts b/src/locales/ko/achv.ts new file mode 100644 index 00000000000..d48a63868b1 --- /dev/null +++ b/src/locales/ko/achv.ts @@ -0,0 +1,171 @@ +import { AchievementTranslationEntries } from "#app/plugins/i18n.js"; + +export const achv: AchievementTranslationEntries = { + "Achievements": { + name: "업적", + }, + "Locked": { + name: "미완료", + }, + + "MoneyAchv": { + description: "누적 소지금 ₽{{moneyAmount}} 달성", + }, + "10K_MONEY": { + name: "돈 좀 있나?", + }, + "100K_MONEY": { + name: "부자", + }, + "1M_MONEY": { + name: "백만장자", + }, + "10M_MONEY": { + name: "상위 1프로", + }, + + "DamageAchv": { + description: "한 번의 공격만으로 {{damageAmount}} 대미지", + }, + "250_DMG": { + name: "강타자", + }, + "1000_DMG": { + name: "최강타자", + }, + "2500_DMG": { + name: "때릴 줄 아시는군요!", + }, + "10000_DMG": { + name: "원펀맨", + }, + + "HealAchv": { + description: "기술이나 특성, 지닌 도구로 한 번에 {{healAmount}} {{HP}} 회복", + }, + "250_HEAL": { + name: "견습 힐러", + }, + "1000_HEAL": { + name: "상급 힐러", + }, + "2500_HEAL": { + name: "클레릭", + }, + "10000_HEAL": { + name: "회복 마스터", + }, + + "LevelAchv": { + description: "포켓몬 Lv{{level}} 달성", + }, + "LV_100": { + name: "잠깐, 여기가 끝이 아니라구!", + }, + "LV_250": { + name: "엘리트", + }, + "LV_1000": { + name: "더 먼 곳을 향해", + }, + + "RibbonAchv": { + description: "총 {{ribbonAmount}}개의 리본 획득", + }, + "10_RIBBONS": { + name: "포켓몬 리그 챔피언", + }, + "25_RIBBONS": { + name: "슈퍼 리그 챔피언", + }, + "50_RIBBONS": { + name: "하이퍼 리그 챔피언", + }, + "75_RIBBONS": { + name: "로그 리그 챔피언", + }, + "100_RIBBONS": { + name: "마스터 리그 챔피언", + }, + + "TRANSFER_MAX_BATTLE_STAT": { + name: "팀워크", + description: "한 개 이상의 능력치가 최대 랭크일 때 배턴터치 사용", + }, + "MAX_FRIENDSHIP": { + name: "친밀 맥스", + description: "최대 친밀도 달성", + }, + "MEGA_EVOLVE": { + name: "메가변환", + description: "포켓몬을 메가진화", + }, + "GIGANTAMAX": { + name: "엄청난 것", + description: "포켓몬을 다이맥스", + }, + "TERASTALLIZE": { + name: "반짝반짝", + description: "포켓몬을 테라스탈", + }, + "STELLAR_TERASTALLIZE": { + name: "숨겨진 타입", + description: "포켓몬을 스텔라 테라스탈", + }, + "SPLICE": { + name: "끝없는 융합", + description: "유전자쐐기로 두 포켓몬을 융합", + }, + "MINI_BLACK_HOLE": { + name: "도구가 가득한 구멍", + description: "미니 블랙홀 획득", + }, + "CATCH_MYTHICAL": { + name: "환상", + description: "환상의 포켓몬 포획", + }, + "CATCH_SUB_LEGENDARY": { + name: "(준)전설", + description: "준전설 포켓몬 포획", + }, + "CATCH_LEGENDARY": { + name: "전설", + description: "전설의 포켓몬 포획", + }, + "SEE_SHINY": { + name: "다른 색", + description: "야생의 색이 다른 포켓몬 발견", + }, + "SHINY_PARTY": { + name: "찐사랑", + description: "색이 다른 포켓몬만으로 파티 구성", + }, + "HATCH_MYTHICAL": { + name: "환상의 알", + description: "알에서 환상의 포켓몬이 부화", + }, + "HATCH_SUB_LEGENDARY": { + name: "준전설 알", + description: "알에서 준전설 포켓몬이 부화", + }, + "HATCH_LEGENDARY": { + name: "전설의 알", + description: "알에서 전설의 포켓몬이 부화", + }, + "HATCH_SHINY": { + name: "빛나는 알", + description: "알에서 색이 다른 포켓몬이 부화", + }, + "HIDDEN_ABILITY": { + name: "숨은 잠재력", + description: "숨겨진 특성을 지닌 포켓몬을 포획", + }, + "PERFECT_IVS": { + name: "진짜배기 증명서", + description: "최고의 개체값을 지닌 포켓몬 획득", + }, + "CLASSIC_VICTORY": { + name: "무패", + description: "클래식 모드 클리어", + }, +} as const; diff --git a/src/locales/ko/config.ts b/src/locales/ko/config.ts index 3de0e3275c2..ad0035ede0f 100644 --- a/src/locales/ko/config.ts +++ b/src/locales/ko/config.ts @@ -1,9 +1,24 @@ import { ability } from "./ability"; import { abilityTriggers } from "./ability-trigger"; +import { achv } from "./achv"; import { battle } from "./battle"; +import { battleMessageUiHandler } from "./battle-message-ui-handler"; +import { berry } from "./berry"; +import { biome } from "./biome"; import { commandUiHandler } from "./command-ui-handler"; +import { + PGFbattleSpecDialogue, + PGFdialogue, + PGFdoubleBattleDialogue, + PGFmiscDialogue, + PGMbattleSpecDialogue, + PGMdialogue, + PGMdoubleBattleDialogue, + PGMmiscDialogue +} from "./dialogue"; import { egg } from "./egg"; import { fightUiHandler } from "./fight-ui-handler"; +import { gameStatsUiHandler } from "./game-stats-ui-handler"; import { growth } from "./growth"; import { menu } from "./menu"; import { menuUiHandler } from "./menu-ui-handler"; @@ -13,34 +28,34 @@ import { nature } from "./nature"; import { pokeball } from "./pokeball"; import { pokemon } from "./pokemon"; import { pokemonInfo } from "./pokemon-info"; +import { pokemonInfoContainer } from "./pokemon-info-container"; import { splashMessages } from "./splash-messages"; import { starterSelectUiHandler } from "./starter-select-ui-handler"; import { titles, trainerClasses, trainerNames } from "./trainers"; import { tutorial } from "./tutorial"; -import { weather } from "./weather"; -import { battleMessageUiHandler } from "./battle-message-ui-handler"; -import { berry } from "./berry"; -import { gameStatsUiHandler } from "./game-stats-ui-handler"; import { voucher } from "./voucher"; -import { - PGMdialogue, - PGFdialogue, - PGMbattleSpecDialogue, - PGFbattleSpecDialogue, - PGMmiscDialogue, - PGFmiscDialogue, PGMdoubleBattleDialogue, PGFdoubleBattleDialogue -} from "./dialogue"; -import { biome } from "./biome"; -import { pokemonInfoContainer } from "./pokemon-info-container"; - +import { weather } from "./weather"; export const koConfig = { ability: ability, abilityTriggers: abilityTriggers, + achv: achv, battle: battle, + battleMessageUiHandler: battleMessageUiHandler, + berry: berry, + biome: biome, commandUiHandler: commandUiHandler, + PGMdialogue: PGMdialogue, + PGFdialogue: PGFdialogue, + PGMbattleSpecDialogue: PGMbattleSpecDialogue, + PGFbattleSpecDialogue: PGFbattleSpecDialogue, + PGMmiscDialogue: PGMmiscDialogue, + PGFmiscDialogue: PGFmiscDialogue, + PGMdoubleBattleDialogue: PGMdoubleBattleDialogue, + PGFdoubleBattleDialogue: PGFdoubleBattleDialogue, egg: egg, fightUiHandler: fightUiHandler, + gameStatsUiHandler: gameStatsUiHandler, growth: growth, menu: menu, menuUiHandler: menuUiHandler, @@ -50,25 +65,13 @@ export const koConfig = { pokeball: pokeball, pokemon: pokemon, pokemonInfo: pokemonInfo, + pokemonInfoContainer: pokemonInfoContainer, splashMessages: splashMessages, starterSelectUiHandler: starterSelectUiHandler, titles: titles, trainerClasses: trainerClasses, trainerNames: trainerNames, tutorial: tutorial, - weather: weather, - battleMessageUiHandler: battleMessageUiHandler, - berry: berry, - gameStatsUiHandler: gameStatsUiHandler, voucher: voucher, - biome: biome, - pokemonInfoContainer: pokemonInfoContainer, - PGMdialogue: PGMdialogue, - PGFdialogue: PGFdialogue, - PGMbattleSpecDialogue: PGMbattleSpecDialogue, - PGFbattleSpecDialogue: PGFbattleSpecDialogue, - PGMmiscDialogue: PGMmiscDialogue, - PGFmiscDialogue: PGFmiscDialogue, - PGMdoubleBattleDialogue: PGMdoubleBattleDialogue, - PGFdoubleBattleDialogue: PGFdoubleBattleDialogue + weather: weather }; diff --git a/src/locales/pt_BR/ability.ts b/src/locales/pt_BR/ability.ts index 05ef735bfde..48e8790b227 100644 --- a/src/locales/pt_BR/ability.ts +++ b/src/locales/pt_BR/ability.ts @@ -211,7 +211,7 @@ export const ability: AbilityTranslationEntries = { }, pickup: { name: "Pickup", - description: "Durante a batalha, o Pokémon pode tomar o item do Pokémon adversário. Fora de batalha pode encontrar itens pelo chão.", + description: "Após uma batalha, o Pokémon pegará um item que um adversário deixou cair.", }, truant: { name: "Truant", @@ -1237,5 +1237,4 @@ export const ability: AbilityTranslationEntries = { name: "Poison Puppeteer", description: "Pokémon envenenados pelos movimentos de Pecharunt também ficarão confusos.", }, - } as const; diff --git a/src/locales/pt_BR/achv.ts b/src/locales/pt_BR/achv.ts new file mode 100644 index 00000000000..5aaccc465ac --- /dev/null +++ b/src/locales/pt_BR/achv.ts @@ -0,0 +1,171 @@ +import { AchievementTranslationEntries } from "#app/plugins/i18n.js"; + +export const achv: AchievementTranslationEntries = { + "Achievements": { + name: "Conquistas", + }, + "Locked": { + name: "Não conquistado", + }, + + "MoneyAchv": { + description: "Acumule um total de ₽{{moneyAmount}}", + }, + "10K_MONEY": { + name: "Chuva de Dinheiro", + }, + "100K_MONEY": { + name: "Tô Rica!", + }, + "1M_MONEY": { + name: "Quem Quer Ser Um Milionário?", + }, + "10M_MONEY": { + name: "Tio Patinhas", + }, + + "DamageAchv": { + description: "Inflija {{damageAmount}} de dano em um único golpe", + }, + "250_DMG": { + name: "Essa Doeu!", + }, + "1000_DMG": { + name: "Essa Doeu Mais!", + }, + "2500_DMG": { + name: "Essa Doeu Muito!", + }, + "10000_DMG": { + name: "Essa Doeu Pra Caramba!", + }, + + "HealAchv": { + description: "Cure {{healAmount}} {{HP}} de uma vez só com um movimento, habilidade ou item segurado", + }, + "250_HEAL": { + name: "Residente", + }, + "1000_HEAL": { + name: "Enfermeiro", + }, + "2500_HEAL": { + name: "Médico", + }, + "10000_HEAL": { + name: "Médico de Plantão", + }, + + "LevelAchv": { + description: "Aumente o nível de um Pokémon para o Nv{{level}}", + }, + "LV_100": { + name: "Calma Que Tem Mais!", + }, + "LV_250": { + name: "Treinador de Elite", + }, + "LV_1000": { + name: "Ao Infinito e Além!", + }, + + "RibbonAchv": { + description: "Acumule um total de {{ribbonAmount}} Fitas", + }, + "10_RIBBONS": { + name: "Fita de Bronze", + }, + "25_RIBBONS": { + name: "Fita de Prata", + }, + "50_RIBBONS": { + name: "Fita de Ouro", + }, + "75_RIBBONS": { + name: "Fita de Platina", + }, + "100_RIBBONS": { + name: "Fita de Diamante", + }, + + "TRANSFER_MAX_BATTLE_STAT": { + name: "Trabalho em Equipe", + description: "Use Baton Pass com pelo menos um atributo aumentado ao máximo", + }, + "MAX_FRIENDSHIP": { + name: "Melhores Amigos", + description: "Alcance a amizade máxima com um Pokémon", + }, + "MEGA_EVOLVE": { + name: "Megamorfose", + description: "Megaevolua um Pokémon", + }, + "GIGANTAMAX": { + name: "Ficou Gigante!", + description: "Gigantamax um Pokémon", + }, + "TERASTALLIZE": { + name: "Terastalização", + description: "Terastalize um Pokémon", + }, + "STELLAR_TERASTALLIZE": { + name: "Estrela Cadente", + description: "Terastalize um Pokémon para o tipo Estelar", + }, + "SPLICE": { + name: "Fusão!", + description: "Funda dois Pokémon com um Splicer de DNA", + }, + "MINI_BLACK_HOLE": { + name: "Buraco Sem Fundo", + description: "Adquira um Mini Buraco Negro", + }, + "CATCH_MYTHICAL": { + name: "Mítico", + description: "Capture um Pokémon Mítico", + }, + "CATCH_SUB_LEGENDARY": { + name: "Quase Lendário", + description: "Capture um Pokémon Semi-Lendário", + }, + "CATCH_LEGENDARY": { + name: "Lendário", + description: "Capture um Pokémon Lendário", + }, + "SEE_SHINY": { + name: "Ué, Tá Brilhando?", + description: "Encontre um Pokémon Shiny selvagem", + }, + "SHINY_PARTY": { + name: "Tá Todo Mundo Brilhando!", + description: "Tenha uma equipe formada por 6 Pokémon Shiny", + }, + "HATCH_MYTHICAL": { + name: "Ovo Mítico", + description: "Choque um Pokémon Mítico", + }, + "HATCH_SUB_LEGENDARY": { + name: "Ovo Semi-Lendário", + description: "Choque um Pokémon Semi-Lendário", + }, + "HATCH_LEGENDARY": { + name: "Ovo Lendário", + description: "Choque um Pokémon Lendário", + }, + "HATCH_SHINY": { + name: "Ovo Shiny", + description: "Choque um Pokémon Shiny", + }, + "HIDDEN_ABILITY": { + name: "Potencial Oculto", + description: "Capture um Pokémon com uma Habilidade Oculta", + }, + "PERFECT_IVS": { + name: "Perfeição Certificada", + description: "Obtenha IVs perfeitos em um Pokémon", + }, + "CLASSIC_VICTORY": { + name: "Invencível", + description: "Vença o jogo no modo clássico", + }, +} as const; diff --git a/src/locales/pt_BR/config.ts b/src/locales/pt_BR/config.ts index ae43e0aba75..1aadb5b20b1 100644 --- a/src/locales/pt_BR/config.ts +++ b/src/locales/pt_BR/config.ts @@ -1,9 +1,24 @@ import { ability } from "./ability"; import { abilityTriggers } from "./ability-trigger"; +import { achv } from "./achv"; import { battle } from "./battle"; +import { battleMessageUiHandler } from "./battle-message-ui-handler"; +import { berry } from "./berry"; +import { biome } from "./biome"; import { commandUiHandler } from "./command-ui-handler"; +import { + PGFbattleSpecDialogue, + PGFdialogue, + PGFdoubleBattleDialogue, + PGFmiscDialogue, + PGMbattleSpecDialogue, + PGMdialogue, + PGMdoubleBattleDialogue, + PGMmiscDialogue +} from "./dialogue"; import { egg } from "./egg"; import { fightUiHandler } from "./fight-ui-handler"; +import { gameStatsUiHandler } from "./game-stats-ui-handler"; import { growth } from "./growth"; import { menu } from "./menu"; import { menuUiHandler } from "./menu-ui-handler"; @@ -13,33 +28,34 @@ import { nature } from "./nature"; import { pokeball } from "./pokeball"; import { pokemon } from "./pokemon"; import { pokemonInfo } from "./pokemon-info"; +import { pokemonInfoContainer } from "./pokemon-info-container"; import { splashMessages } from "./splash-messages"; import { starterSelectUiHandler } from "./starter-select-ui-handler"; import { titles, trainerClasses, trainerNames } from "./trainers"; import { tutorial } from "./tutorial"; -import { weather } from "./weather"; -import { battleMessageUiHandler } from "./battle-message-ui-handler"; -import { berry } from "./berry"; -import { gameStatsUiHandler } from "./game-stats-ui-handler"; import { voucher } from "./voucher"; -import { - PGMdialogue, - PGFdialogue, - PGMbattleSpecDialogue, - PGFbattleSpecDialogue, - PGMmiscDialogue, - PGFmiscDialogue, PGMdoubleBattleDialogue, PGFdoubleBattleDialogue -} from "./dialogue"; -import { biome } from "./biome"; -import { pokemonInfoContainer } from "./pokemon-info-container"; +import { weather } from "./weather"; export const ptBrConfig = { ability: ability, abilityTriggers: abilityTriggers, + achv: achv, battle: battle, + battleMessageUiHandler: battleMessageUiHandler, + berry: berry, + biome: biome, commandUiHandler: commandUiHandler, + PGMdialogue: PGMdialogue, + PGFdialogue: PGFdialogue, + PGMbattleSpecDialogue: PGMbattleSpecDialogue, + PGFbattleSpecDialogue: PGFbattleSpecDialogue, + PGMmiscDialogue: PGMmiscDialogue, + PGFmiscDialogue: PGFmiscDialogue, + PGMdoubleBattleDialogue: PGMdoubleBattleDialogue, + PGFdoubleBattleDialogue: PGFdoubleBattleDialogue, egg: egg, fightUiHandler: fightUiHandler, + gameStatsUiHandler: gameStatsUiHandler, growth: growth, menu: menu, menuUiHandler: menuUiHandler, @@ -49,25 +65,13 @@ export const ptBrConfig = { pokeball: pokeball, pokemon: pokemon, pokemonInfo: pokemonInfo, + pokemonInfoContainer: pokemonInfoContainer, splashMessages: splashMessages, starterSelectUiHandler: starterSelectUiHandler, titles: titles, trainerClasses: trainerClasses, trainerNames: trainerNames, tutorial: tutorial, - weather: weather, - battleMessageUiHandler: battleMessageUiHandler, - berry: berry, - gameStatsUiHandler: gameStatsUiHandler, voucher: voucher, - biome: biome, - pokemonInfoContainer: pokemonInfoContainer, - PGMdialogue: PGMdialogue, - PGFdialogue: PGFdialogue, - PGMbattleSpecDialogue: PGMbattleSpecDialogue, - PGFbattleSpecDialogue: PGFbattleSpecDialogue, - PGMmiscDialogue: PGMmiscDialogue, - PGFmiscDialogue: PGFmiscDialogue, - PGMdoubleBattleDialogue: PGMdoubleBattleDialogue, - PGFdoubleBattleDialogue: PGFdoubleBattleDialogue + weather: weather }; diff --git a/src/locales/pt_BR/modifier-type.ts b/src/locales/pt_BR/modifier-type.ts index 051454009f2..fafcae9a835 100644 --- a/src/locales/pt_BR/modifier-type.ts +++ b/src/locales/pt_BR/modifier-type.ts @@ -110,7 +110,7 @@ export const modifierType: ModifierTypeTranslationEntries = { }, "TerastallizeModifierType": { name: "{{teraType}} Fragmento Tera", - description: "{{teraType}} Terastaliza um Pokémon por até 10 batalhas", + description: "{{teraType}} Terastalize um Pokémon por até 10 batalhas", }, "ContactHeldItemTransferChanceModifierType": { description: "Quando atacar, tem {{chancePercent}}% de chance de roubar um item do oponente", @@ -128,8 +128,8 @@ export const modifierType: ModifierTypeTranslationEntries = { "RARE_CANDY": { name: "Doce Raro" }, "RARER_CANDY": { name: "Doce Raríssimo" }, - "MEGA_BRACELET": { name: "Mega Bracelete", description: "Mega Stones become available" }, - "DYNAMAX_BAND": { name: "Bracelete Dynamax", description: "Max Mushrooms become available" }, + "MEGA_BRACELET": { name: "Mega Bracelete", description: "Mega Pedras ficam disponíveis" }, + "DYNAMAX_BAND": { name: "Bracelete Dynamax", description: "Cogumáximos ficam disponíveis" }, "TERA_ORB": { name: "Orbe Tera", description: "Fragmentos Tera ficam disponíveis" }, "MAP": { name: "Mapa", description: "Permite escolher a próxima rota" }, @@ -369,7 +369,7 @@ export const modifierType: ModifierTypeTranslationEntries = { "GRISEOUS_CORE": "Núcleo Platinado", "REVEAL_GLASS": "Espelho da Verdade", "GRACIDEA": "Gracídea", - "MAX_MUSHROOMS": "Cogumax", + "MAX_MUSHROOMS": "Cogumáximo", "DARK_STONE": "Pedra das Trevas", "LIGHT_STONE": "Pedra da Luz", "PRISON_BOTTLE": "Garrafa Prisão", diff --git a/src/locales/pt_BR/voucher.ts b/src/locales/pt_BR/voucher.ts index f2bcb8d723c..6ffffd48735 100644 --- a/src/locales/pt_BR/voucher.ts +++ b/src/locales/pt_BR/voucher.ts @@ -2,10 +2,10 @@ import { SimpleTranslationEntries } from "#app/plugins/i18n"; export const voucher: SimpleTranslationEntries = { "vouchers": "Vouchers", - "eggVoucher": "Egg Voucher", - "eggVoucherPlus": "Egg Voucher Plus", - "eggVoucherPremium": "Egg Voucher Premium", - "eggVoucherGold": "Egg Voucher Gold", - "locked": "Locked", - "defeatTrainer": "Defeat {{trainerName}}" -} as const; + "eggVoucher": "Voucher de Ovo", + "eggVoucherPlus": "Voucher de Ovo Plus", + "eggVoucherPremium": "Voucher de Ovo Premium", + "eggVoucherGold": "Voucher de Ovo Dourado", + "locked": "Bloqueado", + "defeatTrainer": "Derrote {{trainerName}}" +} as const; diff --git a/src/locales/zh_CN/achv.ts b/src/locales/zh_CN/achv.ts new file mode 100644 index 00000000000..42b1995bcde --- /dev/null +++ b/src/locales/zh_CN/achv.ts @@ -0,0 +1,171 @@ +import { AchievementTranslationEntries } from "#app/plugins/i18n.js"; + +export const achv: AchievementTranslationEntries = { + "Achievements": { + name: "Achievements", + }, + "Locked": { + name: "Locked", + }, + + "MoneyAchv": { + description: "Accumulate a total of ₽{{moneyAmount}}", + }, + "10K_MONEY": { + name: "Money Haver", + }, + "100K_MONEY": { + name: "Rich", + }, + "1M_MONEY": { + name: "Millionaire", + }, + "10M_MONEY": { + name: "One Percenter", + }, + + "DamageAchv": { + description: "Inflict {{damageAmount}} damage in one hit", + }, + "250_DMG": { + name: "Hard Hitter", + }, + "1000_DMG": { + name: "Harder Hitter", + }, + "2500_DMG": { + name: "That's a Lotta Damage!", + }, + "10000_DMG": { + name: "One Punch Man", + }, + + "HealAchv": { + description: "Heal {{healAmount}} {{HP}} at once with a move, ability, or held item", + }, + "250_HEAL": { + name: "Novice Healer", + }, + "1000_HEAL": { + name: "Big Healer", + }, + "2500_HEAL": { + name: "Cleric", + }, + "10000_HEAL": { + name: "Recovery Master", + }, + + "LevelAchv": { + description: "Level up a Pokémon to Lv{{level}}", + }, + "LV_100": { + name: "But Wait, There's More!", + }, + "LV_250": { + name: "Elite", + }, + "LV_1000": { + name: "To Go Even Further Beyond", + }, + + "RibbonAchv": { + description: "Accumulate a total of {{ribbonAmount}} Ribbons", + }, + "10_RIBBONS": { + name: "Pokémon League Champion", + }, + "25_RIBBONS": { + name: "Great League Champion", + }, + "50_RIBBONS": { + name: "Ultra League Champion", + }, + "75_RIBBONS": { + name: "Rogue League Champion", + }, + "100_RIBBONS": { + name: "Master League Champion", + }, + + "TRANSFER_MAX_BATTLE_STAT": { + name: "Teamwork", + description: "Baton pass to another party member with at least one stat maxed out", + }, + "MAX_FRIENDSHIP": { + name: "Friendmaxxing", + description: "Reach max friendship on a Pokémon", + }, + "MEGA_EVOLVE": { + name: "Megamorph", + description: "Mega evolve a Pokémon", + }, + "GIGANTAMAX": { + name: "Absolute Unit", + description: "Gigantamax a Pokémon", + }, + "TERASTALLIZE": { + name: "STAB Enthusiast", + description: "Terastallize a Pokémon", + }, + "STELLAR_TERASTALLIZE": { + name: "The Hidden Type", + description: "Stellar Terastallize a Pokémon", + }, + "SPLICE": { + name: "Infinite Fusion", + description: "Splice two Pokémon together with DNA Splicers", + }, + "MINI_BLACK_HOLE": { + name: "A Hole Lot of Items", + description: "Acquire a Mini Black Hole", + }, + "CATCH_MYTHICAL": { + name: "Mythical", + description: "Catch a mythical Pokémon", + }, + "CATCH_SUB_LEGENDARY": { + name: "(Sub-)Legendary", + description: "Catch a sub-legendary Pokémon", + }, + "CATCH_LEGENDARY": { + name: "Legendary", + description: "Catch a legendary Pokémon", + }, + "SEE_SHINY": { + name: "Shiny", + description: "Find a shiny Pokémon in the wild", + }, + "SHINY_PARTY": { + name: "That's Dedication", + description: "Have a full party of shiny Pokémon", + }, + "HATCH_MYTHICAL": { + name: "Mythical Egg", + description: "Hatch a mythical Pokémon from an egg", + }, + "HATCH_SUB_LEGENDARY": { + name: "Sub-Legendary Egg", + description: "Hatch a sub-legendary Pokémon from an egg", + }, + "HATCH_LEGENDARY": { + name: "Legendary Egg", + description: "Hatch a legendary Pokémon from an egg", + }, + "HATCH_SHINY": { + name: "Shiny Egg", + description: "Hatch a shiny Pokémon from an egg", + }, + "HIDDEN_ABILITY": { + name: "Hidden Potential", + description: "Catch a Pokémon with a hidden ability", + }, + "PERFECT_IVS": { + name: "Certificate of Authenticity", + description: "Get perfect IVs on a Pokémon", + }, + "CLASSIC_VICTORY": { + name: "Undefeated", + description: "Beat the game in classic mode", + }, +} as const; diff --git a/src/locales/zh_CN/config.ts b/src/locales/zh_CN/config.ts index 245727d874b..7a8ab5595f7 100644 --- a/src/locales/zh_CN/config.ts +++ b/src/locales/zh_CN/config.ts @@ -1,9 +1,24 @@ import { ability } from "./ability"; import { abilityTriggers } from "./ability-trigger"; +import { achv } from "./achv"; import { battle } from "./battle"; +import { battleMessageUiHandler } from "./battle-message-ui-handler"; +import { berry } from "./berry"; +import { biome } from "./biome"; import { commandUiHandler } from "./command-ui-handler"; +import { + PGFbattleSpecDialogue, + PGFdialogue, + PGFdoubleBattleDialogue, + PGFmiscDialogue, + PGMbattleSpecDialogue, + PGMdialogue, + PGMdoubleBattleDialogue, + PGMmiscDialogue +} from "./dialogue"; import { egg } from "./egg"; import { fightUiHandler } from "./fight-ui-handler"; +import { gameStatsUiHandler } from "./game-stats-ui-handler"; import { growth } from "./growth"; import { menu } from "./menu"; import { menuUiHandler } from "./menu-ui-handler"; @@ -13,33 +28,34 @@ import { nature } from "./nature"; import { pokeball } from "./pokeball"; import { pokemon } from "./pokemon"; import { pokemonInfo } from "./pokemon-info"; +import { pokemonInfoContainer } from "./pokemon-info-container"; import { splashMessages } from "./splash-messages"; import { starterSelectUiHandler } from "./starter-select-ui-handler"; import { titles, trainerClasses, trainerNames } from "./trainers"; import { tutorial } from "./tutorial"; -import { weather } from "./weather"; -import { battleMessageUiHandler } from "./battle-message-ui-handler"; -import { berry } from "./berry"; -import { gameStatsUiHandler } from "./game-stats-ui-handler"; import { voucher } from "./voucher"; -import { - PGMdialogue, - PGFdialogue, - PGMbattleSpecDialogue, - PGFbattleSpecDialogue, - PGMmiscDialogue, - PGFmiscDialogue, PGMdoubleBattleDialogue, PGFdoubleBattleDialogue -} from "./dialogue"; -import { biome } from "./biome"; -import { pokemonInfoContainer } from "./pokemon-info-container"; +import { weather } from "./weather"; export const zhCnConfig = { ability: ability, abilityTriggers: abilityTriggers, + achv: achv, battle: battle, + battleMessageUiHandler: battleMessageUiHandler, + berry: berry, + biome: biome, commandUiHandler: commandUiHandler, + PGMdialogue: PGMdialogue, + PGFdialogue: PGFdialogue, + PGMbattleSpecDialogue: PGMbattleSpecDialogue, + PGFbattleSpecDialogue: PGFbattleSpecDialogue, + PGMmiscDialogue: PGMmiscDialogue, + PGFmiscDialogue: PGFmiscDialogue, + PGMdoubleBattleDialogue: PGMdoubleBattleDialogue, + PGFdoubleBattleDialogue: PGFdoubleBattleDialogue, egg: egg, fightUiHandler: fightUiHandler, + gameStatsUiHandler: gameStatsUiHandler, growth: growth, menu: menu, menuUiHandler: menuUiHandler, @@ -49,25 +65,13 @@ export const zhCnConfig = { pokeball: pokeball, pokemon: pokemon, pokemonInfo: pokemonInfo, + pokemonInfoContainer: pokemonInfoContainer, splashMessages: splashMessages, starterSelectUiHandler: starterSelectUiHandler, titles: titles, trainerClasses: trainerClasses, trainerNames: trainerNames, tutorial: tutorial, - weather: weather, - battleMessageUiHandler: battleMessageUiHandler, - berry: berry, - gameStatsUiHandler: gameStatsUiHandler, voucher: voucher, - biome: biome, - pokemonInfoContainer: pokemonInfoContainer, - PGMdialogue: PGMdialogue, - PGFdialogue: PGFdialogue, - PGMbattleSpecDialogue: PGMbattleSpecDialogue, - PGFbattleSpecDialogue: PGFbattleSpecDialogue, - PGMmiscDialogue: PGMmiscDialogue, - PGFmiscDialogue: PGFmiscDialogue, - PGMdoubleBattleDialogue: PGMdoubleBattleDialogue, - PGFdoubleBattleDialogue: PGFdoubleBattleDialogue + weather: weather }; diff --git a/src/locales/zh_TW/achv.ts b/src/locales/zh_TW/achv.ts new file mode 100644 index 00000000000..42b1995bcde --- /dev/null +++ b/src/locales/zh_TW/achv.ts @@ -0,0 +1,171 @@ +import { AchievementTranslationEntries } from "#app/plugins/i18n.js"; + +export const achv: AchievementTranslationEntries = { + "Achievements": { + name: "Achievements", + }, + "Locked": { + name: "Locked", + }, + + "MoneyAchv": { + description: "Accumulate a total of ₽{{moneyAmount}}", + }, + "10K_MONEY": { + name: "Money Haver", + }, + "100K_MONEY": { + name: "Rich", + }, + "1M_MONEY": { + name: "Millionaire", + }, + "10M_MONEY": { + name: "One Percenter", + }, + + "DamageAchv": { + description: "Inflict {{damageAmount}} damage in one hit", + }, + "250_DMG": { + name: "Hard Hitter", + }, + "1000_DMG": { + name: "Harder Hitter", + }, + "2500_DMG": { + name: "That's a Lotta Damage!", + }, + "10000_DMG": { + name: "One Punch Man", + }, + + "HealAchv": { + description: "Heal {{healAmount}} {{HP}} at once with a move, ability, or held item", + }, + "250_HEAL": { + name: "Novice Healer", + }, + "1000_HEAL": { + name: "Big Healer", + }, + "2500_HEAL": { + name: "Cleric", + }, + "10000_HEAL": { + name: "Recovery Master", + }, + + "LevelAchv": { + description: "Level up a Pokémon to Lv{{level}}", + }, + "LV_100": { + name: "But Wait, There's More!", + }, + "LV_250": { + name: "Elite", + }, + "LV_1000": { + name: "To Go Even Further Beyond", + }, + + "RibbonAchv": { + description: "Accumulate a total of {{ribbonAmount}} Ribbons", + }, + "10_RIBBONS": { + name: "Pokémon League Champion", + }, + "25_RIBBONS": { + name: "Great League Champion", + }, + "50_RIBBONS": { + name: "Ultra League Champion", + }, + "75_RIBBONS": { + name: "Rogue League Champion", + }, + "100_RIBBONS": { + name: "Master League Champion", + }, + + "TRANSFER_MAX_BATTLE_STAT": { + name: "Teamwork", + description: "Baton pass to another party member with at least one stat maxed out", + }, + "MAX_FRIENDSHIP": { + name: "Friendmaxxing", + description: "Reach max friendship on a Pokémon", + }, + "MEGA_EVOLVE": { + name: "Megamorph", + description: "Mega evolve a Pokémon", + }, + "GIGANTAMAX": { + name: "Absolute Unit", + description: "Gigantamax a Pokémon", + }, + "TERASTALLIZE": { + name: "STAB Enthusiast", + description: "Terastallize a Pokémon", + }, + "STELLAR_TERASTALLIZE": { + name: "The Hidden Type", + description: "Stellar Terastallize a Pokémon", + }, + "SPLICE": { + name: "Infinite Fusion", + description: "Splice two Pokémon together with DNA Splicers", + }, + "MINI_BLACK_HOLE": { + name: "A Hole Lot of Items", + description: "Acquire a Mini Black Hole", + }, + "CATCH_MYTHICAL": { + name: "Mythical", + description: "Catch a mythical Pokémon", + }, + "CATCH_SUB_LEGENDARY": { + name: "(Sub-)Legendary", + description: "Catch a sub-legendary Pokémon", + }, + "CATCH_LEGENDARY": { + name: "Legendary", + description: "Catch a legendary Pokémon", + }, + "SEE_SHINY": { + name: "Shiny", + description: "Find a shiny Pokémon in the wild", + }, + "SHINY_PARTY": { + name: "That's Dedication", + description: "Have a full party of shiny Pokémon", + }, + "HATCH_MYTHICAL": { + name: "Mythical Egg", + description: "Hatch a mythical Pokémon from an egg", + }, + "HATCH_SUB_LEGENDARY": { + name: "Sub-Legendary Egg", + description: "Hatch a sub-legendary Pokémon from an egg", + }, + "HATCH_LEGENDARY": { + name: "Legendary Egg", + description: "Hatch a legendary Pokémon from an egg", + }, + "HATCH_SHINY": { + name: "Shiny Egg", + description: "Hatch a shiny Pokémon from an egg", + }, + "HIDDEN_ABILITY": { + name: "Hidden Potential", + description: "Catch a Pokémon with a hidden ability", + }, + "PERFECT_IVS": { + name: "Certificate of Authenticity", + description: "Get perfect IVs on a Pokémon", + }, + "CLASSIC_VICTORY": { + name: "Undefeated", + description: "Beat the game in classic mode", + }, +} as const; diff --git a/src/locales/zh_TW/config.ts b/src/locales/zh_TW/config.ts index c213aa4b0df..1b942e0234f 100644 --- a/src/locales/zh_TW/config.ts +++ b/src/locales/zh_TW/config.ts @@ -1,9 +1,24 @@ import { ability } from "./ability"; import { abilityTriggers } from "./ability-trigger"; +import { achv } from "./achv"; import { battle } from "./battle"; +import { battleMessageUiHandler } from "./battle-message-ui-handler"; +import { berry } from "./berry"; +import { biome } from "./biome"; import { commandUiHandler } from "./command-ui-handler"; +import { + PGFbattleSpecDialogue, + PGFdialogue, + PGFdoubleBattleDialogue, + PGFmiscDialogue, + PGMbattleSpecDialogue, + PGMdialogue, + PGMdoubleBattleDialogue, + PGMmiscDialogue +} from "./dialogue"; import { egg } from "./egg"; import { fightUiHandler } from "./fight-ui-handler"; +import { gameStatsUiHandler } from "./game-stats-ui-handler"; import { growth } from "./growth"; import { menu } from "./menu"; import { menuUiHandler } from "./menu-ui-handler"; @@ -13,32 +28,34 @@ import { nature } from "./nature"; import { pokeball } from "./pokeball"; import { pokemon } from "./pokemon"; import { pokemonInfo } from "./pokemon-info"; +import { pokemonInfoContainer } from "./pokemon-info-container"; import { splashMessages } from "./splash-messages"; import { starterSelectUiHandler } from "./starter-select-ui-handler"; import { titles, trainerClasses, trainerNames } from "./trainers"; import { tutorial } from "./tutorial"; -import { weather } from "./weather"; -import { battleMessageUiHandler } from "./battle-message-ui-handler"; -import { berry } from "./berry"; import { voucher } from "./voucher"; -import { - PGMdialogue, - PGFdialogue, - PGMbattleSpecDialogue, - PGFbattleSpecDialogue, - PGMmiscDialogue, - PGFmiscDialogue, PGMdoubleBattleDialogue, PGFdoubleBattleDialogue -} from "./dialogue"; -import { biome } from "./biome"; -import { pokemonInfoContainer } from "./pokemon-info-container"; +import { weather } from "./weather"; -export const zhTWConfig = { +export const zhTwConfig = { ability: ability, abilityTriggers: abilityTriggers, + achv: achv, battle: battle, + battleMessageUiHandler: battleMessageUiHandler, + berry: berry, + biome: biome, commandUiHandler: commandUiHandler, + PGMdialogue: PGMdialogue, + PGFdialogue: PGFdialogue, + PGMbattleSpecDialogue: PGMbattleSpecDialogue, + PGFbattleSpecDialogue: PGFbattleSpecDialogue, + PGMmiscDialogue: PGMmiscDialogue, + PGFmiscDialogue: PGFmiscDialogue, + PGMdoubleBattleDialogue: PGMdoubleBattleDialogue, + PGFdoubleBattleDialogue: PGFdoubleBattleDialogue, egg: egg, fightUiHandler: fightUiHandler, + gameStatsUiHandler: gameStatsUiHandler, growth: growth, menu: menu, menuUiHandler: menuUiHandler, @@ -48,24 +65,13 @@ export const zhTWConfig = { pokeball: pokeball, pokemon: pokemon, pokemonInfo: pokemonInfo, + pokemonInfoContainer: pokemonInfoContainer, splashMessages: splashMessages, starterSelectUiHandler: starterSelectUiHandler, titles: titles, trainerClasses: trainerClasses, trainerNames: trainerNames, tutorial: tutorial, - weather: weather, - battleMessageUiHandler: battleMessageUiHandler, - berry: berry, voucher: voucher, - biome: biome, - pokemonInfoContainer: pokemonInfoContainer, - PGMdialogue: PGMdialogue, - PGFdialogue: PGFdialogue, - PGMbattleSpecDialogue: PGMbattleSpecDialogue, - PGFbattleSpecDialogue: PGFbattleSpecDialogue, - PGMmiscDialogue: PGMmiscDialogue, - PGFmiscDialogue: PGFmiscDialogue, - PGMdoubleBattleDialogue: PGMdoubleBattleDialogue, - PGFdoubleBattleDialogue: PGFdoubleBattleDialogue + weather: weather }; diff --git a/src/locales/zh_TW/game-stats-ui-handler.ts b/src/locales/zh_TW/game-stats-ui-handler.ts new file mode 100644 index 00000000000..cb3228c1a4a --- /dev/null +++ b/src/locales/zh_TW/game-stats-ui-handler.ts @@ -0,0 +1,44 @@ +import { SimpleTranslationEntries } from "#app/plugins/i18n"; + +export const gameStatsUiHandler: SimpleTranslationEntries = { + "stats": "Stats", + "playTime": "Play Time", + "totalBattles": "Total Battles", + "starters": "Starters", + "shinyStarters": "Shiny Starters", + "speciesSeen": "Species Seen", + "speciesCaught": "Species Caught", + "ribbonsOwned": "Ribbons Owned", + "classicRuns": "Classic Runs", + "classicWins": "Classic Wins", + "dailyRunAttempts": "Daily Run Attempts", + "dailyRunWins": "Daily Run Wins", + "endlessRuns": "Endless Runs", + "highestWaveEndless": "Highest Wave (Endless)", + "highestMoney": "Highest Money", + "highestDamage": "Highest Damage", + "highestHPHealed": "Highest HP Healed", + "pokemonEncountered": "Pokémon Encountered", + "pokemonDefeated": "Pokémon Defeated", + "pokemonCaught": "Pokémon Caught", + "eggsHatched": "Eggs Hatched", + "subLegendsSeen": "Sub-Legends Seen", + "subLegendsCaught": "Sub-Legends Caught", + "subLegendsHatched": "Sub-Legends Hatched", + "legendsSeen": "Legends Seen", + "legendsCaught": "Legends Caught", + "legendsHatched": "Legends Hatched", + "mythicalsSeen": "Mythicals Seen", + "mythicalsCaught": "Mythicals Caught", + "mythicalsHatched": "Mythicals Hatched", + "shiniesSeen": "Shinies Seen", + "shiniesCaught": "Shinies Caught", + "shiniesHatched": "Shinies Hatched", + "pokemonFused": "Pokémon Fused", + "trainersDefeated": "Trainers Defeated", + "eggsPulled": "Eggs Pulled", + "rareEggsPulled": "Rare Eggs Pulled", + "epicEggsPulled": "Epic Eggs Pulled", + "legendaryEggsPulled": "Legendary Eggs Pulled", + "manaphyEggsPulled": "Manaphy Eggs Pulled", +} as const; diff --git a/src/plugins/i18n.ts b/src/plugins/i18n.ts index 06c660434d5..9bd03b501f4 100644 --- a/src/plugins/i18n.ts +++ b/src/plugins/i18n.ts @@ -6,10 +6,10 @@ import { enConfig } from "#app/locales/en/config.js"; import { esConfig } from "#app/locales/es/config.js"; import { frConfig } from "#app/locales/fr/config.js"; import { itConfig } from "#app/locales/it/config.js"; +import { koConfig } from "#app/locales/ko/config.js"; import { ptBrConfig } from "#app/locales/pt_BR/config.js"; import { zhCnConfig } from "#app/locales/zh_CN/config.js"; -import { zhTWConfig } from "#app/locales/zh_TW/config.js"; -import { koConfig } from "#app/locales/ko/config.js"; +import { zhTwConfig } from "#app/locales/zh_TW/config.js"; export interface SimpleTranslationEntries { [key: string]: string @@ -54,13 +54,22 @@ export interface PokemonInfoTranslationEntries { export interface BerryTranslationEntry { name: string, - effect: string + effect: string, } export interface BerryTranslationEntries { [key: string]: BerryTranslationEntry } +export interface AchievementTranslationEntry { + name?: string, + description?: string, +} + +export interface AchievementTranslationEntries { + [key: string]: AchievementTranslationEntry; +} + export interface DialogueTranslationEntry { [key: number]: string; } @@ -171,7 +180,7 @@ export function initI18n(): void { ...zhCnConfig }, zh_TW: { - ...zhTWConfig + ...zhTwConfig }, ko: { ...koConfig @@ -209,6 +218,7 @@ declare module "i18next" { modifierType: ModifierTypeTranslationEntries; battleMessageUiHandler: SimpleTranslationEntries; berry: BerryTranslationEntries; + achv: AchievementTranslationEntries; gameStatsUiHandler: SimpleTranslationEntries; voucher: SimpleTranslationEntries; biome: SimpleTranslationEntries; diff --git a/src/system/achv.ts b/src/system/achv.ts index 9af01830b60..f52d547a53f 100644 --- a/src/system/achv.ts +++ b/src/system/achv.ts @@ -1,7 +1,8 @@ import { Modifier } from "typescript"; import BattleScene from "../battle-scene"; -import * as Utils from "../utils"; import { TurnHeldItemTransferModifier } from "../modifier/modifier"; +import i18next from "../plugins/i18n"; +import * as Utils from "../utils"; export enum AchvTier { COMMON, @@ -12,6 +13,7 @@ export enum AchvTier { } export class Achv { + public localizationKey: string; public id: string; public name: string; public description: string; @@ -24,16 +26,18 @@ export class Achv { private conditionFunc: (scene: BattleScene, args: any[]) => boolean; - constructor(name: string, description: string, iconImage: string, score: integer, conditionFunc?: (scene: BattleScene, args: any[]) => boolean) { + constructor(localizationKey:string, name: string, description: string, iconImage: string, score: integer, conditionFunc?: (scene: BattleScene, args: any[]) => boolean) { this.name = name; this.description = description; this.iconImage = iconImage; this.score = score; this.conditionFunc = conditionFunc; + this.localizationKey = localizationKey; } getName(): string { - return this.name; + // Localization key is used to get the name of the achievement + return i18next.t(`achv:${this.localizationKey}.name`); } getIconImage(): string { @@ -68,102 +72,191 @@ export class Achv { } export class MoneyAchv extends Achv { - private moneyAmount: integer; - - constructor(name: string, moneyAmount: integer, iconImage: string, score: integer) { - super(name, `Accumulate a total of ₽${moneyAmount.toLocaleString("en-US")}`, iconImage, score, (scene: BattleScene, _args: any[]) => scene.money >= this.moneyAmount); + moneyAmount: integer; + constructor(localizationKey: string, name: string, moneyAmount: integer, iconImage: string, score: integer) { + super(localizationKey, name, "", iconImage, score, (scene: BattleScene, _args: any[]) => scene.money >= this.moneyAmount); this.moneyAmount = moneyAmount; } } export class RibbonAchv extends Achv { - private ribbonAmount: integer; - - constructor(name: string, ribbonAmount: integer, iconImage: string, score: integer) { - super(name, `Accumulate a total of ${ribbonAmount.toLocaleString("en-US")} Ribbons`, iconImage, score, (scene: BattleScene, _args: any[]) => scene.gameData.gameStats.ribbonsOwned >= this.ribbonAmount); + ribbonAmount: integer; + constructor(localizationKey: string, name: string, ribbonAmount: integer, iconImage: string, score: integer) { + super(localizationKey, name, "", iconImage, score, (scene: BattleScene, _args: any[]) => scene.gameData.gameStats.ribbonsOwned >= this.ribbonAmount); this.ribbonAmount = ribbonAmount; } } export class DamageAchv extends Achv { - private damageAmount: integer; - - constructor(name: string, damageAmount: integer, iconImage: string, score: integer) { - super(name, `Inflict ${damageAmount.toLocaleString("en-US")} damage in one hit`, iconImage, score, (_scene: BattleScene, args: any[]) => (args[0] as Utils.NumberHolder).value >= this.damageAmount); + damageAmount: integer; + constructor(localizationKey: string, name: string, damageAmount: integer, iconImage: string, score: integer) { + super(localizationKey, name, "", iconImage, score, (_scene: BattleScene, args: any[]) => (args[0] as Utils.NumberHolder).value >= this.damageAmount); this.damageAmount = damageAmount; } } export class HealAchv extends Achv { - private healAmount: integer; - - constructor(name: string, healAmount: integer, iconImage: string, score: integer) { - super(name, `Heal ${healAmount.toLocaleString("en-US")} HP at once with a move, ability, or held item`, iconImage, score, (_scene: BattleScene, args: any[]) => (args[0] as Utils.NumberHolder).value >= this.healAmount); + healAmount: integer; + constructor(localizationKey: string, name: string, healAmount: integer, iconImage: string, score: integer) { + super(localizationKey, name, "", iconImage, score, (_scene: BattleScene, args: any[]) => (args[0] as Utils.NumberHolder).value >= this.healAmount); this.healAmount = healAmount; } } export class LevelAchv extends Achv { - private level: integer; - - constructor(name: string, level: integer, iconImage: string, score: integer) { - super(name, `Level up a Pokémon to Lv${level}`, iconImage, score, (scene: BattleScene, args: any[]) => (args[0] as Utils.IntegerHolder).value >= this.level); + level: integer; + constructor(localizationKey: string, name: string, level: integer, iconImage: string, score: integer) { + super(localizationKey, name, "", iconImage, score, (scene: BattleScene, args: any[]) => (args[0] as Utils.IntegerHolder).value >= this.level); this.level = level; } } export class ModifierAchv extends Achv { - constructor(name: string, description: string, iconImage: string, score: integer, modifierFunc: (modifier: Modifier) => boolean) { - super(name, description, iconImage, score, (_scene: BattleScene, args: any[]) => modifierFunc((args[0] as Modifier))); + constructor(localizationKey: string, name: string, description: string, iconImage: string, score: integer, modifierFunc: (modifier: Modifier) => boolean) { + super(localizationKey, name, description, iconImage, score, (_scene: BattleScene, args: any[]) => modifierFunc((args[0] as Modifier))); } } + +/** + * Get the description of an achievement from the localization file with all the necessary variables filled in + * @param localizationKey The localization key of the achievement + * @returns The description of the achievement + */ +export function getAchievementDescription(localizationKey: string): string { + switch (localizationKey) { + case "10K_MONEY": + return i18next.t("achv:MoneyAchv.description", {"moneyAmount": achvs._10K_MONEY.moneyAmount.toLocaleString("en-US")}); + case "100K_MONEY": + return i18next.t("achv:MoneyAchv.description", {"moneyAmount": achvs._100K_MONEY.moneyAmount.toLocaleString("en-US")}); + case "1M_MONEY": + return i18next.t("achv:MoneyAchv.description", {"moneyAmount": achvs._1M_MONEY.moneyAmount.toLocaleString("en-US")}); + case "10M_MONEY": + return i18next.t("achv:MoneyAchv.description", {"moneyAmount": achvs._10M_MONEY.moneyAmount.toLocaleString("en-US")}); + case "250_DMG": + return i18next.t("achv:DamageAchv.description", {"damageAmount": achvs._250_DMG.damageAmount.toLocaleString("en-US")}); + case "1000_DMG": + return i18next.t("achv:DamageAchv.description", {"damageAmount": achvs._1000_DMG.damageAmount.toLocaleString("en-US")}); + case "2500_DMG": + return i18next.t("achv:DamageAchv.description", {"damageAmount": achvs._2500_DMG.damageAmount.toLocaleString("en-US")}); + case "10000_DMG": + return i18next.t("achv:DamageAchv.description", {"damageAmount": achvs._10000_DMG.damageAmount.toLocaleString("en-US")}); + case "250_HEAL": + return i18next.t("achv:HealAchv.description", {"healAmount": achvs._250_HEAL.healAmount.toLocaleString("en-US"), "HP": i18next.t("pokemonInfo:Stat.HPshortened")}); + case "1000_HEAL": + return i18next.t("achv:HealAchv.description", {"healAmount": achvs._1000_HEAL.healAmount.toLocaleString("en-US"), "HP": i18next.t("pokemonInfo:Stat.HPshortened")}); + case "2500_HEAL": + return i18next.t("achv:HealAchv.description", {"healAmount": achvs._2500_HEAL.healAmount.toLocaleString("en-US"), "HP": i18next.t("pokemonInfo:Stat.HPshortened")}); + case "10000_HEAL": + return i18next.t("achv:HealAchv.description", {"healAmount": achvs._10000_HEAL.healAmount.toLocaleString("en-US"), "HP": i18next.t("pokemonInfo:Stat.HPshortened")}); + case "LV_100": + return i18next.t("achv:LevelAchv.description", {"level": achvs.LV_100.level}); + case "LV_250": + return i18next.t("achv:LevelAchv.description", {"level": achvs.LV_250.level}); + case "LV_1000": + return i18next.t("achv:LevelAchv.description", {"level": achvs.LV_1000.level}); + case "10_RIBBONS": + return i18next.t("achv:RibbonAchv.description", {"ribbonAmount": achvs._10_RIBBONS.ribbonAmount.toLocaleString("en-US")}); + case "25_RIBBONS": + return i18next.t("achv:RibbonAchv.description", {"ribbonAmount": achvs._25_RIBBONS.ribbonAmount.toLocaleString("en-US")}); + case "50_RIBBONS": + return i18next.t("achv:RibbonAchv.description", {"ribbonAmount": achvs._50_RIBBONS.ribbonAmount.toLocaleString("en-US")}); + case "75_RIBBONS": + return i18next.t("achv:RibbonAchv.description", {"ribbonAmount": achvs._75_RIBBONS.ribbonAmount.toLocaleString("en-US")}); + case "100_RIBBONS": + return i18next.t("achv:RibbonAchv.description", {"ribbonAmount": achvs._100_RIBBONS.ribbonAmount.toLocaleString("en-US")}); + case "TRANSFER_MAX_BATTLE_STAT": + return i18next.t("achv:TRANSFER_MAX_BATTLE_STAT.description"); + case "MAX_FRIENDSHIP": + return i18next.t("achv:MAX_FRIENDSHIP.description"); + case "MEGA_EVOLVE": + return i18next.t("achv:MEGA_EVOLVE.description"); + case "GIGANTAMAX": + return i18next.t("achv:GIGANTAMAX.description"); + case "TERASTALLIZE": + return i18next.t("achv:TERASTALLIZE.description"); + case "STELLAR_TERASTALLIZE": + return i18next.t("achv:STELLAR_TERASTALLIZE.description"); + case "SPLICE": + return i18next.t("achv:SPLICE.description"); + case "MINI_BLACK_HOLE": + return i18next.t("achv:MINI_BLACK_HOLE.description"); + case "CATCH_MYTHICAL": + return i18next.t("achv:CATCH_MYTHICAL.description"); + case "CATCH_SUB_LEGENDARY": + return i18next.t("achv:CATCH_SUB_LEGENDARY.description"); + case "CATCH_LEGENDARY": + return i18next.t("achv:CATCH_LEGENDARY.description"); + case "SEE_SHINY": + return i18next.t("achv:SEE_SHINY.description"); + case "SHINY_PARTY": + return i18next.t("achv:SHINY_PARTY.description"); + case "HATCH_MYTHICAL": + return i18next.t("achv:HATCH_MYTHICAL.description"); + case "HATCH_SUB_LEGENDARY": + return i18next.t("achv:HATCH_SUB_LEGENDARY.description"); + case "HATCH_LEGENDARY": + return i18next.t("achv:HATCH_LEGENDARY.description"); + case "HATCH_SHINY": + return i18next.t("achv:HATCH_SHINY.description"); + case "HIDDEN_ABILITY": + return i18next.t("achv:HIDDEN_ABILITY.description"); + case "PERFECT_IVS": + return i18next.t("achv:PERFECT_IVS.description"); + case "CLASSIC_VICTORY": + return i18next.t("achv:CLASSIC_VICTORY.description"); + default: + return ""; + } + +} + export const achvs = { - _10K_MONEY: new MoneyAchv("Money Haver", 10000, "nugget", 10), - _100K_MONEY: new MoneyAchv("Rich", 100000, "big_nugget", 25).setSecret(true), - _1M_MONEY: new MoneyAchv("Millionaire", 1000000, "relic_gold", 50).setSecret(true), - _10M_MONEY: new MoneyAchv("One Percenter", 10000000, "coin_case", 100).setSecret(true), - _250_DMG: new DamageAchv("Hard Hitter", 250, "lucky_punch", 10), - _1000_DMG: new DamageAchv("Harder Hitter", 1000, "lucky_punch_great", 25).setSecret(true), - _2500_DMG: new DamageAchv("That's a Lotta Damage!", 2500, "lucky_punch_ultra", 50).setSecret(true), - _10000_DMG: new DamageAchv("One Punch Man", 10000, "lucky_punch_master", 100).setSecret(true), - _250_HEAL: new HealAchv("Novice Healer", 250, "potion", 10), - _1000_HEAL: new HealAchv("Big Healer", 1000, "super_potion", 25).setSecret(true), - _2500_HEAL: new HealAchv("Cleric", 2500, "hyper_potion", 50).setSecret(true), - _10000_HEAL: new HealAchv("Recovery Master", 10000, "max_potion", 100).setSecret(true), - LV_100: new LevelAchv("But Wait, There's More!", 100, "rare_candy", 25).setSecret(), - LV_250: new LevelAchv("Elite", 250, "rarer_candy", 50).setSecret(true), - LV_1000: new LevelAchv("To Go Even Further Beyond", 1000, "candy_jar", 100).setSecret(true), - _10_RIBBONS: new RibbonAchv("Pokémon League Champion", 10, "bronze_ribbon", 10), - _25_RIBBONS: new RibbonAchv("Great League Champion", 25, "great_ribbon", 25).setSecret(true), - _50_RIBBONS: new RibbonAchv("Ultra League Champion", 50, "ultra_ribbon", 50).setSecret(true), - _75_RIBBONS: new RibbonAchv("Rogue League Champion", 75, "rogue_ribbon", 75).setSecret(true), - _100_RIBBONS: new RibbonAchv("Master League Champion", 100, "master_ribbon", 100).setSecret(true), - TRANSFER_MAX_BATTLE_STAT: new Achv("Teamwork", "Baton pass to another party member with at least one stat maxed out", "stick", 20), - MAX_FRIENDSHIP: new Achv("Friendmaxxing", "Reach max friendship on a Pokémon", "soothe_bell", 25), - MEGA_EVOLVE: new Achv("Megamorph", "Mega evolve a Pokémon", "mega_bracelet", 50), - GIGANTAMAX: new Achv("Absolute Unit", "Gigantamax a Pokémon", "dynamax_band", 50), - TERASTALLIZE: new Achv("STAB Enthusiast", "Terastallize a Pokémon", "tera_orb", 25), - STELLAR_TERASTALLIZE: new Achv("The Hidden Type", "Stellar Terastallize a Pokémon", "stellar_tera_shard", 25).setSecret(true), - SPLICE: new Achv("Infinite Fusion", "Splice two Pokémon together with DNA Splicers", "dna_splicers", 10), - MINI_BLACK_HOLE: new ModifierAchv("A Hole Lot of Items", "Acquire a Mini Black Hole", "mini_black_hole", 25, modifier => modifier instanceof TurnHeldItemTransferModifier).setSecret(), - CATCH_MYTHICAL: new Achv("Mythical", "Catch a mythical Pokémon", "strange_ball", 50).setSecret(), - CATCH_SUB_LEGENDARY: new Achv("(Sub-)Legendary", "Catch a sub-legendary Pokémon", "rb", 75).setSecret(), - CATCH_LEGENDARY: new Achv("Legendary", "Catch a legendary Pokémon", "mb", 100).setSecret(), - SEE_SHINY: new Achv("Shiny", "Find a shiny Pokémon in the wild", "pb_gold", 75), - SHINY_PARTY: new Achv("That's Dedication", "Have a full party of shiny Pokémon", "shiny_charm", 100).setSecret(true), - HATCH_MYTHICAL: new Achv("Mythical Egg", "Hatch a mythical Pokémon from an egg", "pair_of_tickets", 75).setSecret(), - HATCH_SUB_LEGENDARY: new Achv("Sub-Legendary Egg", "Hatch a sub-legendary Pokémon from an egg", "mystic_ticket", 100).setSecret(), - HATCH_LEGENDARY: new Achv("Legendary Egg", "Hatch a legendary Pokémon from an egg", "mystic_ticket", 125).setSecret(), - HATCH_SHINY: new Achv("Shiny Egg", "Hatch a shiny Pokémon from an egg", "golden_mystic_ticket", 100).setSecret(), - HIDDEN_ABILITY: new Achv("Hidden Potential", "Catch a Pokémon with a hidden ability", "ability_charm", 75), - PERFECT_IVS: new Achv("Certificate of Authenticity", "Get perfect IVs on a Pokémon", "blunder_policy", 100), - CLASSIC_VICTORY: new Achv("Undefeated", "Beat the game in classic mode", "relic_crown", 150) + _10K_MONEY: new MoneyAchv("10K_MONEY", "",10000, "nugget", 10), + _100K_MONEY: new MoneyAchv("100K_MONEY", "",100000, "big_nugget", 25).setSecret(true), + _1M_MONEY: new MoneyAchv("1M_MONEY","", 1000000, "relic_gold", 50).setSecret(true), + _10M_MONEY: new MoneyAchv("10M_MONEY","", 10000000, "coin_case", 100).setSecret(true), + _250_DMG: new DamageAchv("250_DMG","", 250, "lucky_punch", 10), + _1000_DMG: new DamageAchv("1000_DMG","", 1000, "lucky_punch_great", 25).setSecret(true), + _2500_DMG: new DamageAchv("2500_DMG","", 2500, "lucky_punch_ultra", 50).setSecret(true), + _10000_DMG: new DamageAchv("10000_DMG","", 10000, "lucky_punch_master", 100).setSecret(true), + _250_HEAL: new HealAchv("250_HEAL","", 250, "potion", 10), + _1000_HEAL: new HealAchv("1000_HEAL", "",1000, "super_potion", 25).setSecret(true), + _2500_HEAL: new HealAchv("2500_HEAL","", 2500, "hyper_potion", 50).setSecret(true), + _10000_HEAL: new HealAchv("10000_HEAL","", 10000, "max_potion", 100).setSecret(true), + LV_100: new LevelAchv("LV_100", "",100, "rare_candy", 25).setSecret(), + LV_250: new LevelAchv("LV_250", "",250, "rarer_candy", 50).setSecret(true), + LV_1000: new LevelAchv("LV_1000", "",1000, "candy_jar", 100).setSecret(true), + _10_RIBBONS: new RibbonAchv("10_RIBBONS","", 10, "bronze_ribbon", 10), + _25_RIBBONS: new RibbonAchv("25_RIBBONS", "",25, "great_ribbon", 25).setSecret(true), + _50_RIBBONS: new RibbonAchv("50_RIBBONS","", 50, "ultra_ribbon", 50).setSecret(true), + _75_RIBBONS: new RibbonAchv("75_RIBBONS","", 75, "rogue_ribbon", 75).setSecret(true), + _100_RIBBONS: new RibbonAchv("100_RIBBONS","", 100, "master_ribbon", 100).setSecret(true), + TRANSFER_MAX_BATTLE_STAT: new Achv("TRANSFER_MAX_BATTLE_STAT","", "TRANSFER_MAX_BATTLE_STAT.description", "stick", 20), + MAX_FRIENDSHIP: new Achv("MAX_FRIENDSHIP", "", "MAX_FRIENDSHIP.description", "soothe_bell", 25), + MEGA_EVOLVE: new Achv("MEGA_EVOLVE", "", "MEGA_EVOLVE.description", "mega_bracelet", 50), + GIGANTAMAX: new Achv("GIGANTAMAX", "", "GIGANTAMAX.description", "dynamax_band", 50), + TERASTALLIZE: new Achv("TERASTALLIZE","", "TERASTALLIZE.description", "tera_orb", 25), + STELLAR_TERASTALLIZE: new Achv("STELLAR_TERASTALLIZE", "", "STELLAR_TERASTALLIZE.description", "stellar_tera_shard", 25).setSecret(true), + SPLICE: new Achv("SPLICE","", "SPLICE.description", "dna_splicers", 10), + MINI_BLACK_HOLE: new ModifierAchv("MINI_BLACK_HOLE","", "MINI_BLACK_HOLE.description", "mini_black_hole", 25, modifier => modifier instanceof TurnHeldItemTransferModifier).setSecret(), + CATCH_MYTHICAL: new Achv("CATCH_MYTHICAL","", "CATCH_MYTHICAL.description", "strange_ball", 50).setSecret(), + CATCH_SUB_LEGENDARY: new Achv("CATCH_SUB_LEGENDARY","", "CATCH_SUB_LEGENDARY.description", "rb", 75).setSecret(), + CATCH_LEGENDARY: new Achv("CATCH_LEGENDARY", "", "CATCH_LEGENDARY.description", "mb", 100).setSecret(), + SEE_SHINY: new Achv("SEE_SHINY", "", "SEE_SHINY.description", "pb_gold", 75), + SHINY_PARTY: new Achv("SHINY_PARTY", "", "SHINY_PARTY.description", "shiny_charm", 100).setSecret(true), + HATCH_MYTHICAL: new Achv("HATCH_MYTHICAL", "", "HATCH_MYTHICAL.description", "pair_of_tickets", 75).setSecret(), + HATCH_SUB_LEGENDARY: new Achv("HATCH_SUB_LEGENDARY","", "HATCH_SUB_LEGENDARY.description", "mystic_ticket", 100).setSecret(), + HATCH_LEGENDARY: new Achv("HATCH_LEGENDARY","", "HATCH_LEGENDARY.description", "mystic_ticket", 125).setSecret(), + HATCH_SHINY: new Achv("HATCH_SHINY","", "HATCH_SHINY.description", "golden_mystic_ticket", 100).setSecret(), + HIDDEN_ABILITY: new Achv("HIDDEN_ABILITY","", "HIDDEN_ABILITY.description", "ability_charm", 75), + PERFECT_IVS: new Achv("PERFECT_IVS","", "PERFECT_IVS.description", "blunder_policy", 100), + CLASSIC_VICTORY: new Achv("CLASSIC_VICTORY","", "CLASSIC_VICTORY.description", "relic_crown", 150), }; { diff --git a/src/test/achievement.test.ts b/src/test/achievement.test.ts index a27c2d90154..c33707cf5b2 100644 --- a/src/test/achievement.test.ts +++ b/src/test/achievement.test.ts @@ -1,9 +1,9 @@ -import {describe, expect, it} from "vitest"; -import {MoneyAchv} from "#app/system/achv"; +import { MoneyAchv } from "#app/system/achv"; +import { describe, expect, it } from "vitest"; describe("check some Achievement related stuff", () => { it ("should check Achievement creation", () => { - const ach = new MoneyAchv("Achievement", 1000, null, 100); + const ach = new MoneyAchv("", "Achievement", 1000, null, 100); expect(ach.name).toBe("Achievement"); }); }); diff --git a/src/ui/achv-bar.ts b/src/ui/achv-bar.ts index e28de4e7869..f24fda0792b 100644 --- a/src/ui/achv-bar.ts +++ b/src/ui/achv-bar.ts @@ -1,5 +1,5 @@ import BattleScene from "../battle-scene"; -import { Achv } from "../system/achv"; +import { Achv, getAchievementDescription } from "../system/achv"; import { Voucher } from "../system/voucher"; import { TextStyle, addTextObject } from "./text"; @@ -66,7 +66,11 @@ export default class AchvBar extends Phaser.GameObjects.Container { this.icon.setFrame(achv.getIconImage()); this.titleText.setText(achv.getName()); this.scoreText.setVisible(achv instanceof Achv); - this.descriptionText.setText(achv.description); + if (achv instanceof Achv) { + this.descriptionText.setText(getAchievementDescription((achv as Achv).localizationKey)); + } else if (achv instanceof Voucher) { + this.descriptionText.setText((achv as Voucher).description); + } if (achv instanceof Achv) { this.scoreText.setText(`+${(achv as Achv).score}pt`); diff --git a/src/ui/achvs-ui-handler.ts b/src/ui/achvs-ui-handler.ts index da56024a4d6..a73f7560282 100644 --- a/src/ui/achvs-ui-handler.ts +++ b/src/ui/achvs-ui-handler.ts @@ -1,10 +1,11 @@ import BattleScene from "../battle-scene"; -import { Achv, achvs } from "../system/achv"; +import { Button } from "../enums/buttons"; +import i18next from "../plugins/i18n"; +import { Achv, achvs, getAchievementDescription } from "../system/achv"; import MessageUiHandler from "./message-ui-handler"; import { TextStyle, addTextObject } from "./text"; import { Mode } from "./ui"; import { addWindow } from "./ui-theme"; -import {Button} from "../enums/buttons"; export default class AchvsUiHandler extends MessageUiHandler { private achvsContainer: Phaser.GameObjects.Container; @@ -32,7 +33,7 @@ export default class AchvsUiHandler extends MessageUiHandler { const headerBg = addWindow(this.scene, 0, 0, (this.scene.game.canvas.width / 6) - 2, 24); headerBg.setOrigin(0, 0); - const headerText = addTextObject(this.scene, 0, 0, "Achievements", TextStyle.SETTINGS_LABEL); + const headerText = addTextObject(this.scene, 0, 0, i18next.t("achv:Achievements.name"), TextStyle.SETTINGS_LABEL); headerText.setOrigin(0, 0); headerText.setPositionRelative(headerBg, 8, 4); @@ -136,14 +137,15 @@ export default class AchvsUiHandler extends MessageUiHandler { } protected showAchv(achv: Achv) { + achv.name = i18next.t(`achv:${achv.localizationKey}.name`); + achv.description = getAchievementDescription(achv.localizationKey); const achvUnlocks = this.scene.gameData.achvUnlocks; const unlocked = achvUnlocks.hasOwnProperty(achv.id); const hidden = !unlocked && achv.secret && (!achv.parentId || !achvUnlocks.hasOwnProperty(achv.parentId)); - this.titleText.setText(unlocked ? achv.name : "???"); this.showText(!hidden ? achv.description : ""); this.scoreText.setText(`${achv.score}pt`); - this.unlockText.setText(unlocked ? new Date(achvUnlocks[achv.id]).toLocaleDateString() : "Locked"); + this.unlockText.setText(unlocked ? new Date(achvUnlocks[achv.id]).toLocaleDateString() : i18next.t("achv:Locked.name")); } processInput(button: Button): boolean { diff --git a/src/ui/starter-select-ui-handler.ts b/src/ui/starter-select-ui-handler.ts index c739804609a..3faec4bfcc6 100644 --- a/src/ui/starter-select-ui-handler.ts +++ b/src/ui/starter-select-ui-handler.ts @@ -63,13 +63,18 @@ const languageSettings: { [key: string]: LanguageSetting } = { starterInfoTextSize: "56px", instructionTextSize: "35px", }, + "fr":{ + starterInfoTextSize: "54px", + instructionTextSize: "42px", + }, "it":{ starterInfoTextSize: "56px", instructionTextSize: "38px", }, - "fr":{ - starterInfoTextSize: "54px", - instructionTextSize: "42px", + "pt_BR":{ + starterInfoTextSize: "47px", + instructionTextSize: "38px", + starterInfoXPos: 33, }, "zh":{ starterInfoTextSize: "40px", diff --git a/src/ui/text.ts b/src/ui/text.ts index 3db4c37fe67..4e76386aae7 100644 --- a/src/ui/text.ts +++ b/src/ui/text.ts @@ -1,10 +1,10 @@ +import i18next from "i18next"; import BBCodeText from "phaser3-rex-plugins/plugins/gameobjects/tagtext/bbcodetext/BBCodeText"; import InputText from "phaser3-rex-plugins/plugins/inputtext"; -import { ModifierTier } from "../modifier/modifier-tier"; -import { EggTier } from "../data/enums/egg-type"; import BattleScene from "../battle-scene"; +import { EggTier } from "../data/enums/egg-type"; import { UiTheme } from "../enums/ui-theme"; -import i18next from "i18next"; +import { ModifierTier } from "../modifier/modifier-tier"; export enum TextStyle { MESSAGE, @@ -45,10 +45,10 @@ const languageSettings: { [key: string]: LanguageSetting } = { "en":{}, "de":{}, "es":{}, - "it":{}, "fr":{}, - "zh_CN":{}, + "it":{}, "pt_BR":{}, + "zh_CN":{}, }; export function addTextObject(scene: Phaser.Scene, x: number, y: number, content: string, style: TextStyle, extraStyleOptions?: Phaser.Types.GameObjects.Text.TextStyle): Phaser.GameObjects.Text {