[Localization] Add Japanese Localization (#3332)

* Update fonts

* Add locales/ja files

* Add some more files

* Add more ui stuff

* Fix failing typescript doc being generated

* Add the 4 ui handlers

* Add i18n.ts

* Try something in text.ts

* Fix some more errors

* Add ja type icons

* Add missed message keys

* Update src/plugins/i18n.ts

Co-authored-by: Enoch <enoch.jwsong@gmail.com>

* Update src/ui/text.ts

Co-authored-by: Enoch <enoch.jwsong@gmail.com>

* Update src/plugins/i18n.ts

Co-authored-by: Enoch <enoch.jwsong@gmail.com>

* Apply TLs from xsn34kzx

Co-authored-by: Amani H. <109637146+xsn34kzx@users.noreply.github.com>

* Translate essential text (move, ability descriptions)

* Translate missed move/ability

* Translated battle.ts

- All phrases are taken from USUM script via Poké Corpus https://abcboy101.github.io/poke-corpus/ 
(I used the USUM script because it is in hiragana/katakana. If we decide to change these phrases to Kanji later, I will refer to the SV script to modify them again.)
-

* Update battle.ts

* Update battle.ts

* Update src/locales/ja/battle.ts

Co-authored-by: Enoch <enoch.jwsong@gmail.com>

* Update battle.ts

---------

Co-authored-by: EnochG1 <enoch.jwsong@gmail.com>
Co-authored-by: Amani H. <109637146+xsn34kzx@users.noreply.github.com>
Co-authored-by: Chapybara-jp <charlie.beer@hotmail.com>
This commit is contained in:
Tempoanon 2024-08-06 20:36:07 -04:00 committed by GitHub
parent 2bdfe9315c
commit 98ae2bc665
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
69 changed files with 12336 additions and 89 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

440
public/images/types_ja.json Normal file
View File

@ -0,0 +1,440 @@
{
"textures": [
{
"image": "types_ja.png",
"format": "RGBA8888",
"size": {
"w": 32,
"h": 280
},
"scale": 1,
"frames": [
{
"filename": "unknown",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 32,
"h": 14
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 32,
"h": 14
},
"frame": {
"x": 0,
"y": 0,
"w": 32,
"h": 14
}
},
{
"filename": "bug",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 32,
"h": 14
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 32,
"h": 14
},
"frame": {
"x": 0,
"y": 14,
"w": 32,
"h": 14
}
},
{
"filename": "dark",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 32,
"h": 14
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 32,
"h": 14
},
"frame": {
"x": 0,
"y": 28,
"w": 32,
"h": 14
}
},
{
"filename": "dragon",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 32,
"h": 14
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 32,
"h": 14
},
"frame": {
"x": 0,
"y": 42,
"w": 32,
"h": 14
}
},
{
"filename": "electric",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 32,
"h": 14
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 32,
"h": 14
},
"frame": {
"x": 0,
"y": 56,
"w": 32,
"h": 14
}
},
{
"filename": "fairy",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 32,
"h": 14
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 32,
"h": 14
},
"frame": {
"x": 0,
"y": 70,
"w": 32,
"h": 14
}
},
{
"filename": "fighting",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 32,
"h": 14
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 32,
"h": 14
},
"frame": {
"x": 0,
"y": 84,
"w": 32,
"h": 14
}
},
{
"filename": "fire",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 32,
"h": 14
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 32,
"h": 14
},
"frame": {
"x": 0,
"y": 98,
"w": 32,
"h": 14
}
},
{
"filename": "flying",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 32,
"h": 14
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 32,
"h": 14
},
"frame": {
"x": 0,
"y": 112,
"w": 32,
"h": 14
}
},
{
"filename": "ghost",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 32,
"h": 14
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 32,
"h": 14
},
"frame": {
"x": 0,
"y": 126,
"w": 32,
"h": 14
}
},
{
"filename": "grass",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 32,
"h": 14
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 32,
"h": 14
},
"frame": {
"x": 0,
"y": 140,
"w": 32,
"h": 14
}
},
{
"filename": "ground",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 32,
"h": 14
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 32,
"h": 14
},
"frame": {
"x": 0,
"y": 154,
"w": 32,
"h": 14
}
},
{
"filename": "ice",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 32,
"h": 14
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 32,
"h": 14
},
"frame": {
"x": 0,
"y": 168,
"w": 32,
"h": 14
}
},
{
"filename": "normal",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 32,
"h": 14
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 32,
"h": 14
},
"frame": {
"x": 0,
"y": 182,
"w": 32,
"h": 14
}
},
{
"filename": "poison",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 32,
"h": 14
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 32,
"h": 14
},
"frame": {
"x": 0,
"y": 196,
"w": 32,
"h": 14
}
},
{
"filename": "psychic",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 32,
"h": 14
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 32,
"h": 14
},
"frame": {
"x": 0,
"y": 210,
"w": 32,
"h": 14
}
},
{
"filename": "rock",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 32,
"h": 14
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 32,
"h": 14
},
"frame": {
"x": 0,
"y": 224,
"w": 32,
"h": 14
}
},
{
"filename": "steel",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 32,
"h": 14
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 32,
"h": 14
},
"frame": {
"x": 0,
"y": 238,
"w": 32,
"h": 14
}
},
{
"filename": "water",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 32,
"h": 14
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 32,
"h": 14
},
"frame": {
"x": 0,
"y": 252,
"w": 32,
"h": 14
}
},
{
"filename": "stellar",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 32,
"h": 14
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 32,
"h": 14
},
"frame": {
"x": 0,
"y": 266,
"w": 32,
"h": 14
}
}
]
}
],
"meta": {
"app": "https://www.codeandweb.com/texturepacker",
"version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:f14cf47d9a8f1d40c8e03aa6ba00fff3:6fc4227b57a95d429a1faad4280f7ec8:5961efbfbf4c56b8745347e7a663a32f$"
}
}

BIN
public/images/types_ja.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.1 KiB

View File

@ -0,0 +1,62 @@
import { SimpleTranslationEntries } from "#app/interfaces/locales";
export const abilityTriggers: SimpleTranslationEntries = {
"blockRecoilDamage" : "{{pokemonName}}は {{abilityName}}で\nはんどうダメージを うけない!",
"badDreams": "{{pokemonName}}は ナイトメアに うなされている!",
"costar": "{{pokemonName}} copied {{allyName}}'s stat changes!",
"iceFaceAvoidedDamage": "{{pokemonName}}は\n{{abilityName}}で ダメージを うけない!",
"perishBody": "{{pokemonName}}の {{abilityName}}で\nおたがいは 3ターンごに ほろびてしまう!",
"poisonHeal": "{{pokemonName}}は {{abilityName}}で\nかいふくした",
"trace": "{{pokemonName}} copied {{targetName}}'s\n{{abilityName}}!",
"windPowerCharged": "{{pokemonName}}は\n{{moveName}}を うけて じゅうでんした!",
"quickDraw": "{{pokemonName}} can act faster than normal, thanks to its Quick Draw!",
"blockItemTheft": "{{pokemonNameWithAffix}}'s {{abilityName}}\nprevents item theft!",
"typeImmunityHeal": "{{pokemonNameWithAffix}}'s {{abilityName}}\nrestored its HP a little!",
"nonSuperEffectiveImmunity": "{{pokemonNameWithAffix}} avoided damage\nwith {{abilityName}}!",
"postDefendDisguise": "{{pokemonNameWithAffix}}'s disguise was busted!",
"moveImmunity": "It doesn't affect {{pokemonNameWithAffix}}!",
"reverseDrain": "{{pokemonNameWithAffix}} sucked up the liquid ooze!",
"postDefendTypeChange": "{{pokemonNameWithAffix}}'s {{abilityName}}\nmade it the {{typeName}} type!",
"postDefendContactDamage": "{{pokemonNameWithAffix}}'s {{abilityName}}\nhurt its attacker!",
"postDefendAbilitySwap": "{{pokemonNameWithAffix}} swapped\nabilities with its target!",
"postDefendAbilityGive": "{{pokemonNameWithAffix}} gave its target\n{{abilityName}}!",
"postDefendMoveDisable": "{{pokemonNameWithAffix}}'s {{moveName}}\nwas disabled!",
"pokemonTypeChange": "{{pokemonNameWithAffix}} transformed into the {{moveType}} type!",
"postAttackStealHeldItem": "{{pokemonNameWithAffix}} stole\n{{defenderName}}'s {{stolenItemType}}!",
"postDefendStealHeldItem": "{{pokemonNameWithAffix}} stole\n{{attackerName}}'s {{stolenItemType}}!",
"copyFaintedAllyAbility": "{{pokemonNameWithAffix}}'s {{abilityName}} was taken over!",
"intimidateImmunity": "{{pokemonNameWithAffix}}'s {{abilityName}} prevented it from being Intimidated!",
"postSummonAllyHeal": "{{pokemonNameWithAffix}} drank down all the\nmatcha that {{pokemonName}} made!",
"postSummonClearAllyStats": "{{pokemonNameWithAffix}}'s stat changes\nwere removed!",
"postSummonTransform": "{{pokemonNameWithAffix}} transformed\ninto {{targetName}}!",
"protectStat": "{{pokemonNameWithAffix}}'s {{abilityName}}\nprevents lowering its {{statName}}!",
"statusEffectImmunityWithName": "{{pokemonNameWithAffix}}'s {{abilityName}}\nprevents {{statusEffectName}}!",
"statusEffectImmunity": "{{pokemonNameWithAffix}}'s {{abilityName}}\nprevents status problems!",
"battlerTagImmunity": "{{pokemonNameWithAffix}}'s {{abilityName}}\nprevents {{battlerTagName}}!",
"forewarn": "{{pokemonNameWithAffix}} was forewarned about {{moveName}}!",
"frisk": "{{pokemonNameWithAffix}} frisked {{opponentName}}'s {{opponentAbilityName}}!",
"postWeatherLapseHeal": "{{pokemonNameWithAffix}}'s {{abilityName}}\nrestored its HP a little!",
"postWeatherLapseDamage": "{{pokemonNameWithAffix}} is hurt\nby its {{abilityName}}!",
"postTurnLootCreateEatenBerry": "{{pokemonNameWithAffix}} harvested one {{berryName}}!",
"postTurnHeal": "{{pokemonNameWithAffix}}'s {{abilityName}}\nrestored its HP a little!",
"fetchBall": "{{pokemonNameWithAffix}} found a\n{{pokeballName}}!",
"healFromBerryUse": "{{pokemonNameWithAffix}}'s {{abilityName}}\nrestored its HP!",
"arenaTrap": "{{pokemonNameWithAffix}}'s {{abilityName}}\nprevents switching!",
"postBattleLoot": "{{pokemonNameWithAffix}} picked up\n{{itemName}}!",
"postFaintContactDamage": "{{pokemonNameWithAffix}}'s {{abilityName}}\nhurt its attacker!",
"postFaintHpDamage": "{{pokemonNameWithAffix}}'s {{abilityName}}\nhurt its attacker!",
"postSummonPressure": "{{pokemonNameWithAffix}} is exerting its Pressure!",
"postSummonMoldBreaker": "{{pokemonNameWithAffix}} breaks the mold!",
"postSummonAnticipation": "{{pokemonNameWithAffix}} shuddered!",
"postSummonTurboblaze": "{{pokemonNameWithAffix}} is radiating a blazing aura!",
"postSummonTeravolt": "{{pokemonNameWithAffix}} is radiating a bursting aura!",
"postSummonDarkAura": "{{pokemonNameWithAffix}} is radiating a Dark Aura!",
"postSummonFairyAura": "{{pokemonNameWithAffix}} is radiating a Fairy Aura!",
"postSummonNeutralizingGas": "{{pokemonNameWithAffix}}'s Neutralizing Gas filled the area!",
"postSummonAsOneGlastrier": "{{pokemonNameWithAffix}} has two Abilities!",
"postSummonAsOneSpectrier": "{{pokemonNameWithAffix}} has two Abilities!",
"postSummonVesselOfRuin": "{{pokemonNameWithAffix}}'s Vessel of Ruin lowered the {{statName}}\nof all surrounding Pokémon!",
"postSummonSwordOfRuin": "{{pokemonNameWithAffix}}'s Sword of Ruin lowered the {{statName}}\nof all surrounding Pokémon!",
"postSummonTabletsOfRuin": "{{pokemonNameWithAffix}}'s Tablets of Ruin lowered the {{statName}}\nof all surrounding Pokémon!",
"postSummonBeadsOfRuin": "{{pokemonNameWithAffix}}'s Beads of Ruin lowered the {{statName}}\nof all surrounding Pokémon!",
} as const;

1244
src/locales/ja/ability.ts Normal file

File diff suppressed because it is too large Load Diff

274
src/locales/ja/achv.ts Normal file
View File

@ -0,0 +1,274 @@
import { AchievementTranslationEntries } from "#app/interfaces/locales.js";
// Achievement translations for the when the player character is male
export const PGMachv: 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",
},
"MONO_GEN_ONE": {
name: "The Original Rival",
description: "Complete the generation one only challenge.",
},
"MONO_GEN_TWO": {
name: "Generation 1.5",
description: "Complete the generation two only challenge.",
},
"MONO_GEN_THREE": {
name: "Too much water?",
description: "Complete the generation three only challenge.",
},
"MONO_GEN_FOUR": {
name: "Is she really the hardest?",
description: "Complete the generation four only challenge.",
},
"MONO_GEN_FIVE": {
name: "All Original",
description: "Complete the generation five only challenge.",
},
"MONO_GEN_SIX": {
name: "Almost Royalty",
description: "Complete the generation six only challenge.",
},
"MONO_GEN_SEVEN": {
name: "Only Technically",
description: "Complete the generation seven only challenge.",
},
"MONO_GEN_EIGHT": {
name: "A Champion Time!",
description: "Complete the generation eight only challenge.",
},
"MONO_GEN_NINE": {
name: "She was going easy on you",
description: "Complete the generation nine only challenge.",
},
"MonoType": {
description: "Complete the {{type}} monotype challenge.",
},
"MONO_NORMAL": {
name: "Extra Ordinary",
},
"MONO_FIGHTING": {
name: "I Know Kung Fu",
},
"MONO_FLYING": {
name: "Angry Birds",
},
"MONO_POISON": {
name: "Kanto's Favourite",
},
"MONO_GROUND": {
name: "Forecast: Earthquakes",
},
"MONO_ROCK": {
name: "Brock Hard",
},
"MONO_BUG": {
name: "You Like Jazz?",
},
"MONO_GHOST": {
name: "Who You Gonna Call?",
},
"MONO_STEEL": {
name: "Iron Giant",
},
"MONO_FIRE": {
name: "I Cast Fireball!",
},
"MONO_WATER": {
name: "When It Rains, It Pours",
},
"MONO_GRASS": {
name: "Can't Touch This",
},
"MONO_ELECTRIC": {
name: "Aim For The Horn!",
},
"MONO_PSYCHIC": {
name: "Big Brain Energy",
},
"MONO_ICE": {
name: "Walking On Thin Ice",
},
"MONO_DRAGON": {
name: "Pseudo-Legend Club",
},
"MONO_DARK": {
name: "It's Just A Phase",
},
"MONO_FAIRY": {
name: "Hey! Listen!",
},
"FRESH_START": {
name: "First Try!",
description: "Complete the fresh start challenge."
}
} as const;
// Achievement translations for the when the player character is female (it for now uses the same translations as the male version)
export const PGFachv: AchievementTranslationEntries = PGMachv;

View File

@ -0,0 +1,49 @@
import { SimpleTranslationEntries } from "#app/interfaces/locales";
export const arenaFlyout: SimpleTranslationEntries = {
// Title
"activeBattleEffects": "Active Battle Effects",
"player": "Player",
"neutral": "Neutral",
"enemy": "Enemy",
// WeatherType
"sunny": "Sunny",
"rain": "Rain",
"sandstorm": "Sandstorm",
"hail": "Hail",
"snow": "Snow",
"fog": "Fog",
"heavyRain": "Heavy Rain",
"harshSun": "Harsh Sun",
"strongWinds": "Strong Winds",
// TerrainType
"misty": "Misty Terrain",
"electric": "Electric Terrain",
"grassy": "Grassy Terrain",
"psychic": "Psychic Terrain",
// ArenaTagType
"mudSport": "Mud Sport",
"waterSport": "Water Sport",
"spikes": "Spikes",
"toxicSpikes": "Toxic Spikes",
"mist": "Mist",
"futureSight": "Future Sight",
"doomDesire": "Doom Desire",
"wish": "Wish",
"stealthRock": "Stealth Rock",
"stickyWeb": "Sticky Web",
"trickRoom": "Trick Room",
"gravity": "Gravity",
"reflect": "Reflect",
"lightScreen": "Light Screen",
"auroraVeil": "Aurora Veil",
"quickGuard": "Quick Guard",
"wideGuard": "Wide Guard",
"matBlock": "Mat Block",
"craftyShield": "Crafty Shield",
"tailwind": "Tailwind",
"happyHour": "Happy Hour",
};

View File

@ -0,0 +1,50 @@
import { SimpleTranslationEntries } from "#app/interfaces/locales";
export const arenaTag: SimpleTranslationEntries = {
"yourTeam": "your team",
"opposingTeam": "the opposing team",
"arenaOnRemove": "{{moveName}}'s effect wore off.",
"arenaOnRemovePlayer": "{{moveName}}'s effect wore off\non your side.",
"arenaOnRemoveEnemy": "{{moveName}}'s effect wore off\non the foe's side.",
"mistOnAdd": "{{pokemonNameWithAffix}}'s team became\nshrouded in mist!",
"mistApply": "The mist prevented\nthe lowering of stats!",
"reflectOnAdd": "Reflect reduced the damage of physical moves.",
"reflectOnAddPlayer": "Reflect reduced the damage of physical moves on your side.",
"reflectOnAddEnemy": "Reflect reduced the damage of physical moves on the foe's side.",
"lightScreenOnAdd": "Light Screen reduced the damage of special moves.",
"lightScreenOnAddPlayer": "Light Screen reduced the damage of special moves on your side.",
"lightScreenOnAddEnemy": "Light Screen reduced the damage of special moves on the foe's side.",
"auroraVeilOnAdd": "Aurora Veil reduced the damage of moves.",
"auroraVeilOnAddPlayer": "Aurora Veil reduced the damage of moves on your side.",
"auroraVeilOnAddEnemy": "Aurora Veil reduced the damage of moves on the foe's side.",
"conditionalProtectOnAdd": "{{moveName}} protected team!",
"conditionalProtectOnAddPlayer": "{{moveName}} protected your team!",
"conditionalProtectOnAddEnemy": "{{moveName}} protected the\nopposing team!",
"conditionalProtectApply": "{{moveName}} protected {{pokemonNameWithAffix}}!",
"matBlockOnAdd": "{{pokemonNameWithAffix}} intends to flip up a mat\nand block incoming attacks!",
"wishTagOnAdd": "{{pokemonNameWithAffix}}'s wish\ncame true!",
"mudSportOnAdd": "Electricity's power was weakened!",
"mudSportOnRemove": "The effects of Mud Sport\nhave faded.",
"waterSportOnAdd": "Fire's power was weakened!",
"waterSportOnRemove": "The effects of Water Sport\nhave faded.",
"spikesOnAdd": "{{moveName}} were scattered\nall around {{opponentDesc}}'s feet!",
"spikesActivateTrap": "{{pokemonNameWithAffix}} is hurt\nby the spikes!",
"toxicSpikesOnAdd": "{{moveName}} were scattered\nall around {{opponentDesc}}'s feet!",
"toxicSpikesActivateTrapPoison": "{{pokemonNameWithAffix}} absorbed the {{moveName}}!",
"stealthRockOnAdd": "Pointed stones float in the air\naround {{opponentDesc}}!",
"stealthRockActivateTrap": "Pointed stones dug into\n{{pokemonNameWithAffix}}!",
"stickyWebOnAdd": "A {{moveName}} has been laid out on the ground around the opposing team!",
"stickyWebActivateTrap": "The opposing {{pokemonName}} was caught in a sticky web!",
"trickRoomOnAdd": "{{pokemonNameWithAffix}} twisted\nthe dimensions!",
"trickRoomOnRemove": "The twisted dimensions\nreturned to normal!",
"gravityOnAdd": "Gravity intensified!",
"gravityOnRemove": "Gravity returned to normal!",
"tailwindOnAdd": "The Tailwind blew from behind team!",
"tailwindOnAddPlayer": "The Tailwind blew from behind\nyour team!",
"tailwindOnAddEnemy": "The Tailwind blew from behind\nthe opposing team!",
"tailwindOnRemove": "Team's Tailwind petered out!",
"tailwindOnRemovePlayer": "Your team's Tailwind petered out!",
"tailwindOnRemoveEnemy": "The opposing team's Tailwind petered out!",
"happyHourOnAdd": "Everyone is caught up in the happy atmosphere!",
"happyHourOnRemove": "The atmosphere returned to normal.",
} as const;

View File

@ -0,0 +1,5 @@
import { SimpleTranslationEntries } from "#app/interfaces/locales";
export const battleInfo: SimpleTranslationEntries = {
"generation": "Generation {{generation}}",
} as const;

View File

@ -0,0 +1,10 @@
import { SimpleTranslationEntries } from "#app/interfaces/locales";
export const battleMessageUiHandler: SimpleTranslationEntries = {
"ivBest": "さいこう",
"ivFantastic": "すばらしい",
"ivVeryGood": "すごくいい",
"ivPrettyGood": "かなりいい",
"ivDecent": "まぁまぁ",
"ivNoGood": "ダメかも",
} as const;

159
src/locales/ja/battle.ts Normal file
View File

@ -0,0 +1,159 @@
import { SimpleTranslationEntries } from "#app/interfaces/locales";
export const battle: SimpleTranslationEntries = {
"bossAppeared": "{{bossName}}が あらわれた!",
"trainerAppeared": "{{trainerName}}が\nしょうぶを しかけてきた!",
"trainerAppearedDouble": "{{trainerName}}が\nしょうぶを しかけてきた!",
"trainerSendOut": "{{trainerName}}は\n{{pokemonName}}を くりだした!",
"singleWildAppeared": "あっ! やせいの\n{{pokemonName}}が とびだしてきた!",
"multiWildAppeared": "あっ! やせいの {{pokemonName1}}と\n{{pokemonName2}}が とびだしてきた!",
"playerComeBack": "{{pokemonName}}! もどれ!",
"trainerComeBack": "{{trainerName}}は\n{{pokemonName}}を ひっこめた!",
"playerGo": "ゆけっ! {{pokemonName}}",
"trainerGo": "{{trainerName}}は\n{{pokemonName}}を くりだした!",
"switchQuestion": "{{pokemonName}}を\nいれかえますか",
"trainerDefeated": "{{trainerName}}\nとの しょうぶに かった!",
"moneyWon": "しょうきんとして\n₽{{moneyAmount}} てにいれた!",
"moneyPickedUp": "₽{{moneyAmount}}を ひろった!",
"pokemonCaught": "{{pokemonName}}を\nつかまえたぞ",
"addedAsAStarter": "{{pokemonName}} has been\nadded as a starter!",
"partyFull": "てもちがいっぱいです。\n{{pokemonName}}をいれるために ポケモンを ひとり てばなしますか?",
"pokemon": "ポケモン",
"sendOutPokemon": "がんばれ! {{pokemonName}}",
"hitResultCriticalHit": "きゅうしょに あたった!",
"hitResultSuperEffective": "こうかは ばつぐんだ!",
"hitResultNotVeryEffective": "こうかは いまひとつの ようだ……",
"hitResultNoEffect": "{{pokemonName}}には こうかが ないようだ…",
"hitResultOneHitKO": "いちげき ひっさつ!",
"attackFailed": "しかし うまく きまらなかった!!",
"attackMissed": "{{pokemonNameWithAffix}}には あたらなかった!",
"attackHitsCount": "{{count}}かい あたった!",
"rewardGain": "{{modifierName}}を\nてにいれた!",
"expGain": "{{pokemonName}}は\n{{exp}}けいけんちを もらった!",
"levelUp": "{{pokemonName}}は\nレベル{{level}} に あがった!",
"learnMove": "{{pokemonName}}は あたらしく\n{{moveName}}を おぼえた!",
"learnMovePrompt": "{{pokemonName}}は あたらしく\n{{moveName}}を おぼえたい……",
"learnMoveLimitReached": "しかし {{pokemonName}}は わざを 4つ\nおぼえるので せいいっぱいだ!",
"learnMoveReplaceQuestion": "{{moveName}}の かわりに\nほかの わざを わすれさせますか?",
"learnMoveStopTeaching": "それでは…… {{moveName}}を\nおぼえるのを あきらめますか?",
"learnMoveNotLearned": "{{pokemonName}}は {{moveName}}を\nおぼえずに おわった!",
"learnMoveForgetQuestion": "どの わざを\nわすれさせたい",
"learnMoveForgetSuccess": "{{pokemonName}}は {{moveName}}の\nつかいかたを きれいに わすれた!",
"countdownPoof": "@d{32}1 @d{15}2の @d{15}… @d{15}… @d{15}… @d{15}@s{pb_bounce_1}ポカン!",
"learnMoveAnd": "そして…",
"levelCapUp": "レベルキャップの\n{{levelCap}}に あがった!",
"moveNotImplemented": "{{moveName}}は まだじっそうされておらず、せんたくできません。",
"moveNoPP": "しかし わざの\nのこりポイントが なかった!",
"moveDisabled": "かなしばりで\n{{moveName}}が だせない!",
"noPokeballForce": "みえない ちからの せいで\nボールを なげられない",
"noPokeballTrainer": "ひとのものを\nとったら どろぼう!",
"noPokeballMulti": "あいての ポケモンが ひとつしか\n いないまえに ボールが つかえない!",
"noPokeballStrong": "あいての ポケモンが つよすぎて つかまえられない!\nまずは よわらせよう!",
"noEscapeForce": "みえない ちからの せいで\nにげることが できない!",
"noEscapeTrainer": "ダメだ! しょうぶのさいちゅうに\nあいてに せなかを みせられない!",
"noEscapePokemon": "{{pokemonName}}の {{moveName}}で {{escapeVerb}}!",
"runAwaySuccess": " うまく にげきれた!",
"runAwayCannotEscape": "にげることが できない!",
"escapeVerbSwitch": "いれかえることが できない",
"escapeVerbFlee": "にげることが できない",
"notDisabled": "{{pokemonName}}の かなしばりが とけた!\nまた {{moveName}}が つかえられる!",
"turnEndHpRestore": "{{pokemonName}}の たいりょくが かいふくした!",
"hpIsFull": "{{pokemonName}}の\nHPが まんたんだ!",
"skipItemQuestion": "ほんとに アイテムを とらない?",
"eggHatching": "おや?",
"ivScannerUseQuestion": "{{pokemonName}}を\nこたいちスキャナーで そうさする?",
"wildPokemonWithAffix": "やせいの {{pokemonName}}",
"foePokemonWithAffix": "あいての {{pokemonName}}",
"useMove": "{{pokemonNameWithAffix}}の {{moveName}}",
"drainMessage": "{{pokemonName}}から\nたいりょくを すいとった!",
"regainHealth": "{{pokemonName}}は\nたいりょくを かいふくした!",
"stealEatBerry": "{{pokemonName}}は {{targetName}}の\n{{berryName}}を うばって たべた!",
"ppHealBerry": "{{pokemonNameWithAffix}}は {{berryName}}で {{moveName}}のPPを かいふくした!",
"hpHealBerry": "{{pokemonNameWithAffix}}は {{berryName}}で たいりょくを かいふくした!",
"fainted": "{{pokemonNameWithAffix}}は たおれた!",
"statsAnd": "と ",
"stats": "のうりょく",
"statRose_one": "{{pokemonNameWithAffix}}の {{stats}}が あがった!",
"statRose_other": "{{pokemonNameWithAffix}}の {{stats}}が あがった!",
"statSharplyRose_one": "{{pokemonNameWithAffix}}の {{stats}}が ぐーんと あがった!",
"statSharplyRose_other": "{{pokemonNameWithAffix}}の {{stats}}が ぐーんと あがった!",
"statRoseDrastically_one": "{{pokemonNameWithAffix}}の {{stats}}が ぐぐーんと あがった!",
"statRoseDrastically_other": "{{pokemonNameWithAffix}}の {{stats}}が ぐぐーんと あがった!",
"statWontGoAnyHigher_one": "{{pokemonNameWithAffix}}の {{stats}}が もう あがらない!",
"statWontGoAnyHigher_other": "{{pokemonNameWithAffix}}の {{stats}}が もう あがらない!",
"statFell_one": "{{pokemonNameWithAffix}}の {{stats}}が さがった!",
"statFell_other": "{{pokemonNameWithAffix}}の {{stats}}が さがった!",
"statHarshlyFell_one": "{{pokemonNameWithAffix}}の {{stats}}が がくっと さがった!",
"statHarshlyFell_other": "{{pokemonNameWithAffix}}の {{stats}}が がくっと さがった!",
"statSeverelyFell_one": "{{pokemonNameWithAffix}}の {{stats}}が がくーんと さがった!",
"statSeverelyFell_other": "{{pokemonNameWithAffix}}の {{stats}}が がくーんと さがった!",
"statWontGoAnyLower_one": "{{pokemonNameWithAffix}}の {{stats}}が もう さがらない!",
"statWontGoAnyLower_other": "{{pokemonNameWithAffix}}の {{stats}}が もう さがらない!",
"transformedIntoType": "{{pokemonName}}は\n{{type}}タイプに へんしんした!",
"retryBattle": "このせんとうの はじまりから やりなおす?",
"unlockedSomething": "{{unlockedThing}}\nを アンロックした",
"congratulations": "おめでとうございます!!",
"beatModeFirstTime": "はじめて {{speciesName}}が {{gameMode}}モードを クリアした!\n{{newModifier}}を てにいれた!",
"ppReduced": "{{targetName}}の {{moveName}}を {{reduction}}けずった!",
"battlerTagsRechargingLapse": "{{pokemonNameWithAffix}}は こうげきの はんどうで うごけない!",
"battlerTagsTrappedOnAdd": "{{pokemonNameWithAffix}}は もう にげられない!",
"battlerTagsTrappedOnRemove": "{{pokemonNameWithAffix}}は\n{{moveName}}の こうかが とけた!",
"battlerTagsFlinchedLapse": "{{pokemonNameWithAffix}}は ひるんで わざが だせない!",
"battlerTagsConfusedOnAdd": "{{pokemonNameWithAffix}}は こんらん した!",
"battlerTagsConfusedOnRemove": "{{pokemonNameWithAffix}}の こんらんが とけた!",
"battlerTagsConfusedOnOverlap": "{{pokemonNameWithAffix}}は すでに こんらん している!",
"battlerTagsConfusedLapse": "{{pokemonNameWithAffix}}は こんらん している!",
"battlerTagsConfusedLapseHurtItself": "わけも わからず じぶんを こうげきした!",
"battlerTagsDestinyBondLapseIsBoss": "{{pokemonNameWithAffix}}を みちづれに できない!",
"battlerTagsDestinyBondLapse": "{{pokemonNameWithAffix}}は あいてを みちづれに した!",
"battlerTagsInfatuatedOnAdd": "{{pokemonNameWithAffix}}は {{sourcePokemonName}}に メロメロに なった!",
"battlerTagsInfatuatedOnOverlap": "{{pokemonNameWithAffix}}は すでに メロメロだ!",
"battlerTagsInfatuatedLapse": "{{pokemonNameWithAffix}}は {{sourcePokemonName}}に メロメロだ!",
"battlerTagsInfatuatedLapseImmobilize": "{{pokemonNameWithAffix}}は\nメロメロで わざが だせなかった",
"battlerTagsInfatuatedOnRemove": "{{pokemonNameWithAffix}}は メロメロじょうたいが なおった!",
"battlerTagsSeededOnAdd": "{{pokemonNameWithAffix}}に たねを うえつけた!",
"battlerTagsSeededLapse": "やどりぎが {{pokemonNameWithAffix}}の たいりょくを うばう!",
"battlerTagsSeededLapseShed": "{{pokemonNameWithAffix}}は ヘドロえきを すいとった!",
"battlerTagsNightmareOnAdd": "{{pokemonNameWithAffix}}は あくむを みはじめた!",
"battlerTagsNightmareOnOverlap": "{{pokemonNameWithAffix}}は すでに うなされている!",
"battlerTagsNightmareLapse": "{{pokemonNameWithAffix}}は あくむに うなされている!",
"battlerTagsEncoreOnAdd": "{{pokemonNameWithAffix}}は アンコールをうけた!",
"battlerTagsEncoreOnRemove": "{{pokemonNameWithAffix}}の アンコールじょうたいが とけた!",
"battlerTagsHelpingHandOnAdd": "{{pokemonNameWithAffix}}は {{pokemonName}}を\nてだすけする たいせいに はいった!",
"battlerTagsIngrainLapse": "{{pokemonNameWithAffix}}は ねから\n ようぶんを すいとった!",
"battlerTagsIngrainOnTrap": "{{pokemonNameWithAffix}}は ねを はった!",
"battlerTagsAquaRingOnAdd": "{{pokemonNameWithAffix}}は みずのリングを まとった!",
"battlerTagsAquaRingLapse": "{{pokemonName}}は {{moveName}}で\nたいりょくを かいふくした",
"battlerTagsDrowsyOnAdd": "{{pokemonNameWithAffix}} の ねむけを さそった!",
"battlerTagsDamagingTrapLapse": "{{pokemonNameWithAffix}}は {{moveName}}の ダメージを うけた!",
"battlerTagsBindOnTrap": "{{pokemonNameWithAffix}}は {{sourcePokemonName}}に しめつけられた!",
"battlerTagsWrapOnTrap": "{{pokemonNameWithAffix}}は {{sourcePokemonName}}に まきつかれた!",
"battlerTagsVortexOnTrap": "{{pokemonNameWithAffix}}は うずの なかに とじこめられた!",
"battlerTagsClampOnTrap": "{{pokemonName}}は {{sourcePokemonNameWithAffix}}の\nからに はさまれた",
"battlerTagsSandTombOnTrap": "{{pokemonNameWithAffix}}は {{moveName}}に とらわれた!",
"battlerTagsMagmaStormOnTrap": "{{pokemonNameWithAffix}}は マグマの\n うずに とじこめられた",
"battlerTagsSnapTrapOnTrap": "{{pokemonNameWithAffix}}は トラバサミに とらわれた!",
"battlerTagsThunderCageOnTrap": "{{sourcePokemonNameWithAffix}}は {{pokemonNameWithAffix}}に とじこめられた!",
"battlerTagsInfestationOnTrap": "{{pokemonNameWithAffix}}は {{sourcePokemonNameWithAffix}}に まとわりつかれた!",
"battlerTagsProtectedOnAdd": "{{pokemonNameWithAffix}}は\nまもりの たいせいに はいった",
"battlerTagsProtectedLapse": "{{pokemonNameWithAffix}}は\nこうげきから みを まもった",
"battlerTagsEnduringOnAdd": "{{pokemonNameWithAffix}}は\nこらえる たいせいに はいった",
"battlerTagsEnduringLapse": "{{pokemonNameWithAffix}}は\nこうげきを こらえた",
"battlerTagsSturdyLapse": "{{pokemonNameWithAffix}}は\nこうげきを こらえた",
"battlerTagsPerishSongLapse": "{{pokemonNameWithAffix}}の ほろびのカウントが {{turnCount}}になった!",
"battlerTagsCenterOfAttentionOnAdd": "{{pokemonNameWithAffix}}は ちゅうもくの まとになった!",
"battlerTagsTruantLapse": "{{pokemonNameWithAffix}}は なまけている!",
"battlerTagsSlowStartOnAdd": "{{pokemonNameWithAffix}}は ちょうしが あがらない!",
"battlerTagsSlowStartOnRemove": "{{pokemonNameWithAffix}}は ちょうしを とりもどした!",
"battlerTagsHighestStatBoostOnAdd": "{{pokemonNameWithAffix}}の {{statName}}が\nあがっている じょうたいに なった",
"battlerTagsHighestStatBoostOnRemove": "{{pokemonNameWithAffix}}の {{abilityName}}の こうかが なくなった!",
"battlerTagsMagnetRisenOnAdd": "{{pokemonNameWithAffix}}は でんじりょくで うかびあがった!",
"battlerTagsMagnetRisenOnRemove": "{{pokemonNameWithAffix}}は でんじりょくが なくなった!",
"battlerTagsCritBoostOnAdd": "{{pokemonNameWithAffix}}は はりきっている!",
"battlerTagsCritBoostOnRemove": "{{pokemonNameWithAffix}}は おちついた。",
"battlerTagsSaltCuredOnAdd": "{{pokemonNameWithAffix}}は しおづけに なった!",
"battlerTagsSaltCuredLapse": "{{pokemonNameWithAffix}}は {{moveName}}の\n ダメージを うけている",
"battlerTagsCursedOnAdd": "{{pokemonNameWithAffix}}は じぶんの たいりょくを けずって\n{{pokemonName}}に のろいを かけた!",
"battlerTagsCursedLapse": "{{pokemonNameWithAffix}}は のろわれている!",
"battlerTagsStockpilingOnAdd": "{{pokemonNameWithAffix}}は {{stockpiledCount}}つ たくわえた!"
} as const;

View File

@ -0,0 +1,12 @@
import { SimpleTranslationEntries } from "#app/interfaces/locales";
export const battlerTags: SimpleTranslationEntries = {
"trappedDesc": "trapping",
"flinchedDesc": "flinching",
"confusedDesc": "confusion",
"infatuatedDesc": "infatuation",
"seedDesc": "seeding",
"nightmareDesc": "nightmares",
"ingrainDesc": "roots",
"drowsyDesc": "drowsiness",
} as const;

48
src/locales/ja/berry.ts Normal file
View File

@ -0,0 +1,48 @@
import { BerryTranslationEntries } from "#app/interfaces/locales";
export const berry: BerryTranslationEntries = {
"SITRUS": {
name: "オボンのみ",
effect: "HP 50%いかのとき HPを 25パーセント かいふくする",
},
"LUM": {
name: "ラムのみ",
effect: "すべての じょうたい いじょうと こんらんを かいふくする",
},
"ENIGMA": {
name: "ナゾのみ",
effect: "こうかばつぐんの わざを うけたとき HPを 25パーセント かいふくする",
},
"LIECHI": {
name: "チイラのみ",
effect: "HP 25%いかのとき こうげきが あがる",
},
"GANLON": {
name: "リュガのみ",
effect: "HP 25%いかのとき ぼうぎょが あがる",
},
"PETAYA": {
name: "ヤタピのみ",
effect: "HP 25%いかのとき とくこうが あがる",
},
"APICOT": {
name: "ズアのみ",
effect: "HP 25%いかのとき とくぼうが あがる",
},
"SALAC": {
name: "カムラのみ",
effect: "HP 25%いかのとき すばやさが あがる",
},
"LANSAT": {
name: "サンのみ",
effect: "HP 25%いかのとき こうげきが きゅうしょに あたりやすくなる",
},
"STARF": {
name: "スターのみ",
effect: "HP 25%いかのとき のうりょくの どれか 1つが ぐーんと あがる",
},
"LEPPA": {
name: "ヒメリのみ",
effect: "PPが 0に なった わざの PPを 10だけ かいふくする",
},
} as const;

145
src/locales/ja/bgm-name.ts Normal file
View File

@ -0,0 +1,145 @@
import { SimpleTranslationEntries } from "#app/interfaces/locales";
export const bgmName: SimpleTranslationEntries = {
"music": "Music: ",
"missing_entries" : "{{name}}",
"battle_kanto_champion": "B2W2 Kanto Champion Battle",
"battle_johto_champion": "B2W2 Johto Champion Battle",
"battle_hoenn_champion": "B2W2 Hoenn Champion Battle",
"battle_sinnoh_champion": "B2W2 Sinnoh Champion Battle",
"battle_champion_alder": "BW Unova Champion Battle",
"battle_champion_iris": "B2W2 Unova Champion Battle",
"battle_kalos_champion": "XY Kalos Champion Battle",
"battle_alola_champion": "USUM Alola Champion Battle",
"battle_galar_champion": "SWSH Galar Champion Battle",
"battle_champion_geeta": "SV Champion Geeta Battle",
"battle_champion_nemona": "SV Champion Nemona Battle",
"battle_champion_kieran": "SV Champion Kieran Battle",
"battle_hoenn_elite": "ORAS Elite Four Battle",
"battle_unova_elite": "BW Elite Four Battle",
"battle_kalos_elite": "XY Elite Four Battle",
"battle_alola_elite": "SM Elite Four Battle",
"battle_galar_elite": "SWSH League Tournament Battle",
"battle_paldea_elite": "SV Elite Four Battle",
"battle_bb_elite": "SV BB League Elite Four Battle",
"battle_final_encounter": "PMD RTDX Rayquaza's Domain",
"battle_final": "BW Ghetsis Battle",
"battle_kanto_gym": "B2W2 Kanto Gym Battle",
"battle_johto_gym": "B2W2 Johto Gym Battle",
"battle_hoenn_gym": "B2W2 Hoenn Gym Battle",
"battle_sinnoh_gym": "B2W2 Sinnoh Gym Battle",
"battle_unova_gym": "BW Unova Gym Battle",
"battle_kalos_gym": "XY Kalos Gym Battle",
"battle_galar_gym": "SWSH Galar Gym Battle",
"battle_paldea_gym": "SV Paldea Gym Battle",
"battle_legendary_kanto": "XY Kanto Legendary Battle",
"battle_legendary_raikou": "HGSS Raikou Battle",
"battle_legendary_entei": "HGSS Entei Battle",
"battle_legendary_suicune": "HGSS Suicune Battle",
"battle_legendary_lugia": "HGSS Lugia Battle",
"battle_legendary_ho_oh": "HGSS Ho-oh Battle",
"battle_legendary_regis_g5": "B2W2 Legendary Titan Battle",
"battle_legendary_regis_g6": "ORAS Legendary Titan Battle",
"battle_legendary_gro_kyo": "ORAS Groudon & Kyogre Battle",
"battle_legendary_rayquaza": "ORAS Rayquaza Battle",
"battle_legendary_deoxys": "ORAS Deoxys Battle",
"battle_legendary_lake_trio": "ORAS Lake Guardians Battle",
"battle_legendary_sinnoh": "ORAS Sinnoh Legendary Battle",
"battle_legendary_dia_pal": "ORAS Dialga & Palkia Battle",
"battle_legendary_giratina": "ORAS Giratina Battle",
"battle_legendary_arceus": "HGSS Arceus Battle",
"battle_legendary_unova": "BW Unova Legendary Battle",
"battle_legendary_kyurem": "BW Kyurem Battle",
"battle_legendary_res_zek": "BW Reshiram & Zekrom Battle",
"battle_legendary_xern_yvel": "XY Xerneas & Yveltal Battle",
"battle_legendary_tapu": "SM Tapu Battle",
"battle_legendary_sol_lun": "SM Solgaleo & Lunala Battle",
"battle_legendary_ub": "SM Ultra Beast Battle",
"battle_legendary_dusk_dawn": "USUM Dusk Mane & Dawn Wings Necrozma Battle",
"battle_legendary_ultra_nec": "USUM Ultra Necrozma Battle",
"battle_legendary_zac_zam": "SWSH Zacian & Zamazenta Battle",
"battle_legendary_glas_spec": "SWSH Glastrier & Spectrier Battle",
"battle_legendary_calyrex": "SWSH Calyrex Battle",
"battle_legendary_birds_galar": "SWSH Galarian Legendary Birds Battle",
"battle_legendary_ruinous": "SV Treasures of Ruin Battle",
"battle_legendary_kor_mir": "SV Depths of Area Zero Battle",
"battle_legendary_loyal_three": "SV Loyal Three Battle",
"battle_legendary_ogerpon": "SV Ogerpon Battle",
"battle_legendary_terapagos": "SV Terapagos Battle",
"battle_legendary_pecharunt": "SV Pecharunt Battle",
"battle_rival": "BW Rival Battle",
"battle_rival_2": "BW N Battle",
"battle_rival_3": "BW Final N Battle",
"battle_trainer": "BW Trainer Battle",
"battle_wild": "BW Wild Battle",
"battle_wild_strong": "BW Strong Wild Battle",
"end_summit": "PMD RTDX Sky Tower Summit",
"battle_rocket_grunt": "HGSS Team Rocket Battle",
"battle_aqua_magma_grunt": "ORAS Team Aqua & Magma Battle",
"battle_galactic_grunt": "BDSP Team Galactic Battle",
"battle_plasma_grunt": "BW Team Plasma Battle",
"battle_flare_grunt": "XY Team Flare Battle",
"battle_rocket_boss": "USUM Giovanni Battle",
"battle_aqua_magma_boss": "ORAS Archie & Maxie Battle",
"battle_galactic_boss": "BDSP Cyrus Battle",
"battle_plasma_boss": "B2W2 Ghetsis Battle",
"battle_flare_boss": "XY Lysandre Battle",
// Biome Music
"abyss": "PMD EoS Dark Crater",
"badlands": "PMD EoS Barren Valley",
"beach": "PMD EoS Drenched Bluff",
"cave": "PMD EoS Sky Peak Cave",
"construction_site": "PMD EoS Boulder Quarry",
"desert": "PMD EoS Northern Desert",
"dojo": "PMD EoS Marowak Dojo",
"end": "PMD RTDX Sky Tower",
"factory": "PMD EoS Concealed Ruins",
"fairy_cave": "PMD EoS Star Cave",
"forest": "PMD EoS Dusk Forest",
"grass": "PMD EoS Apple Woods",
"graveyard": "PMD EoS Mystifying Forest",
"ice_cave": "PMD EoS Vast Ice Mountain",
"island": "PMD EoS Craggy Coast",
"jungle": "Lmz - Jungle", // The composer thinks about a more creative name
"laboratory": "Firel - Laboratory", // The composer thinks about a more creative name
"lake": "PMD EoS Crystal Cave",
"meadow": "PMD EoS Sky Peak Forest",
"metropolis": "Firel - Metropolis", // The composer thinks about a more creative name
"mountain": "PMD EoS Mt. Horn",
"plains": "PMD EoS Sky Peak Prairie",
"power_plant": "PMD EoS Far Amp Plains",
"ruins": "PMD EoS Deep Sealed Ruin",
"sea": "Andr06 - Marine Mystique", // Name defined by the composer
"seabed": "Firel - Seabed", // The composer thinks about a more creative name
"slum": "Andr06 - Sneaky Snom", // Name defined by the composer
"snowy_forest": "PMD EoS Sky Peak Snowfield",
"space": "Firel - Aether",
"swamp": "PMD EoS Surrounded Sea",
"tall_grass": "PMD EoS Foggy Forest",
"temple": "PMD EoS Aegis Cave",
"town": "PMD EoS Random Dungeon Theme 3",
"volcano": "PMD EoS Steam Cave",
"wasteland": "PMD EoS Hidden Highland",
// Encounter
"encounter_ace_trainer": "BW Trainers' Eyes Meet (Ace Trainer)",
"encounter_backpacker": "BW Trainers' Eyes Meet (Backpacker)",
"encounter_clerk": "BW Trainers' Eyes Meet (Clerk)",
"encounter_cyclist": "BW Trainers' Eyes Meet (Cyclist)",
"encounter_lass": "BW Trainers' Eyes Meet (Lass)",
"encounter_parasol_lady": "BW Trainers' Eyes Meet (Parasol Lady)",
"encounter_pokefan": "BW Trainers' Eyes Meet (Poke Fan)",
"encounter_psychic": "BW Trainers' Eyes Meet (Psychic)",
"encounter_rich": "BW Trainers' Eyes Meet (Gentleman)",
"encounter_rival": "BW Cheren",
"encounter_roughneck": "BW Trainers' Eyes Meet (Roughneck)",
"encounter_scientist": "BW Trainers' Eyes Meet (Scientist)",
"encounter_twins": "BW Trainers' Eyes Meet (Twins)",
"encounter_youngster": "BW Trainers' Eyes Meet (Youngster)",
// Other
"heal": "BW Pokémon Heal",
"menu": "PMD EoS Welcome to the World of Pokémon!",
"title": "PMD EoS Top Menu Theme",
} as const;

40
src/locales/ja/biome.ts Normal file
View File

@ -0,0 +1,40 @@
import { SimpleTranslationEntries } from "#app/interfaces/locales";
export const biome: SimpleTranslationEntries = {
"unknownLocation": "Somewhere you can\'t remember",
"TOWN": "Town",
"PLAINS": "Plains",
"GRASS": "Grassy Field",
"TALL_GRASS": "Tall Grass",
"METROPOLIS": "Metropolis",
"FOREST": "Forest",
"SEA": "Sea",
"SWAMP": "Swamp",
"BEACH": "Beach",
"LAKE": "Lake",
"SEABED": "Seabed",
"MOUNTAIN": "Mountain",
"BADLANDS": "Badlands",
"CAVE": "Cave",
"DESERT": "Desert",
"ICE_CAVE": "Ice Cave",
"MEADOW": "Meadow",
"POWER_PLANT": "Power Plant",
"VOLCANO": "Volcano",
"GRAVEYARD": "Graveyard",
"DOJO": "Dojo",
"FACTORY": "Factory",
"RUINS": "Ancient Ruins",
"WASTELAND": "Wasteland",
"ABYSS": "Abyss",
"SPACE": "Space",
"CONSTRUCTION_SITE": "Construction Site",
"JUNGLE": "Jungle",
"FAIRY_CAVE": "Fairy Cave",
"TEMPLE": "Temple",
"SLUM": "Slum",
"SNOWY_FOREST": "Snowy Forest",
"ISLAND": "Island",
"LABORATORY": "Laboratory",
"END": "???",
} as const;

View File

@ -0,0 +1,32 @@
import { TranslationEntries } from "#app/interfaces/locales";
export const challenges: TranslationEntries = {
"title": "チャレンジ じょうけん せってい",
"illegalEvolution": "{{pokemon}} changed into an ineligble pokémon\nfor this challenge!",
"singleGeneration": {
"name": "Mono Gen",
"desc": "You can only use Pokémon from Generation {{gen}}.",
"desc_default": "You can only use Pokémon from the chosen generation.",
"gen_1": "one",
"gen_2": "two",
"gen_3": "three",
"gen_4": "four",
"gen_5": "five",
"gen_6": "six",
"gen_7": "seven",
"gen_8": "eight",
"gen_9": "nine",
},
"singleType": {
"name": "Mono Type",
"desc": "You can only use Pokémon with the {{type}} type.",
"desc_default": "You can only use Pokémon of the chosen type."
//types in pokemon-info
},
"freshStart": {
"name": "Fresh Start",
"desc": "You can only use the original starters, and only as if you had just started pokerogue.",
"value.0": "Off",
"value.1": "On",
},
} as const;

View File

@ -0,0 +1,9 @@
import { SimpleTranslationEntries } from "#app/interfaces/locales";
export const commandUiHandler: SimpleTranslationEntries = {
"fight": "たたかう",
"ball": "ボール",
"pokemon": "ポケモン",
"run": "にげる",
"actionMessage": "{{pokemonName}}は どうする?",
} as const;

10
src/locales/ja/common.ts Normal file
View File

@ -0,0 +1,10 @@
import { SimpleTranslationEntries } from "#app/interfaces/locales";
export const common: SimpleTranslationEntries = {
"start": "Start",
"luckIndicator": "Luck:",
"shinyOnHover": "Shiny",
"commonShiny": "Common",
"rareShiny": "Rare",
"epicShiny": "Epic",
} as const;

117
src/locales/ja/config.ts Normal file
View File

@ -0,0 +1,117 @@
import { ability } from "./ability";
import { abilityTriggers } from "./ability-trigger";
import { arenaFlyout } from "./arena-flyout";
import { arenaTag } from "./arena-tag";
import { PGFachv, PGMachv } from "./achv";
import { battle } from "./battle";
import { battleInfo } from "./battle-info";
import { battleMessageUiHandler } from "./battle-message-ui-handler";
import { battlerTags } from "./battler-tags";
import { berry } from "./berry";
import { bgmName } from "./bgm-name";
import { biome } from "./biome";
import { challenges } from "./challenges";
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 { filterBar } from "./filter-bar";
import { gameMode } from "./game-mode";
import { gameStatsUiHandler } from "./game-stats-ui-handler";
import { growth } from "./growth";
import { menu } from "./menu";
import { menuUiHandler } from "./menu-ui-handler";
import { modifier } from "./modifier";
import { modifierType } from "./modifier-type";
import { move } from "./move";
import { nature } from "./nature";
import { pokeball } from "./pokeball";
import { pokemon } from "./pokemon";
import { pokemonForm, battlePokemonForm } from "./pokemon-form";
import { pokemonInfo } from "./pokemon-info";
import { pokemonInfoContainer } from "./pokemon-info-container";
import { pokemonSummary } from "./pokemon-summary";
import { saveSlotSelectUiHandler } from "./save-slot-select-ui-handler";
import { splashMessages } from "./splash-messages";
import { starterSelectUiHandler } from "./starter-select-ui-handler";
import { statusEffect } from "./status-effect";
import { titles, trainerClasses, trainerNames } from "./trainers";
import { tutorial } from "./tutorial";
import { voucher } from "./voucher";
import { terrain, weather } from "./weather";
import { partyUiHandler } from "./party-ui-handler";
import { settings } from "./settings.js";
import { common } from "./common.js";
import { modifierSelectUiHandler } from "./modifier-select-ui-handler";
import { moveTriggers } from "./move-trigger";
export const jaConfig = {
ability: ability,
abilityTriggers: abilityTriggers,
arenaFlyout: arenaFlyout,
arenaTag: arenaTag,
battle: battle,
battleInfo: battleInfo,
battleMessageUiHandler: battleMessageUiHandler,
battlePokemonForm: battlePokemonForm,
battlerTags: battlerTags,
berry: berry,
bgmName: bgmName,
biome: biome,
challenges: challenges,
commandUiHandler: commandUiHandler,
common: common,
PGMachv: PGMachv,
PGFachv: PGFachv,
PGMdialogue: PGMdialogue,
PGFdialogue: PGFdialogue,
PGMbattleSpecDialogue: PGMbattleSpecDialogue,
PGFbattleSpecDialogue: PGFbattleSpecDialogue,
PGMmiscDialogue: PGMmiscDialogue,
PGFmiscDialogue: PGFmiscDialogue,
PGMdoubleBattleDialogue: PGMdoubleBattleDialogue,
PGFdoubleBattleDialogue: PGFdoubleBattleDialogue,
egg: egg,
fightUiHandler: fightUiHandler,
filterBar: filterBar,
gameMode: gameMode,
gameStatsUiHandler: gameStatsUiHandler,
growth: growth,
menu: menu,
menuUiHandler: menuUiHandler,
modifier: modifier,
modifierType: modifierType,
move: move,
nature: nature,
pokeball: pokeball,
pokemon: pokemon,
pokemonForm: pokemonForm,
pokemonInfo: pokemonInfo,
pokemonInfoContainer: pokemonInfoContainer,
pokemonSummary: pokemonSummary,
saveSlotSelectUiHandler: saveSlotSelectUiHandler,
settings: settings,
splashMessages: splashMessages,
starterSelectUiHandler: starterSelectUiHandler,
statusEffect: statusEffect,
terrain: terrain,
titles: titles,
trainerClasses: trainerClasses,
trainerNames: trainerNames,
tutorial: tutorial,
voucher: voucher,
weather: weather,
partyUiHandler: partyUiHandler,
modifierSelectUiHandler: modifierSelectUiHandler,
moveTriggers: moveTriggers
};

2746
src/locales/ja/dialogue.ts Normal file

File diff suppressed because it is too large Load Diff

28
src/locales/ja/egg.ts Normal file
View File

@ -0,0 +1,28 @@
import { SimpleTranslationEntries } from "#app/interfaces/locales";
export const egg: SimpleTranslationEntries = {
"egg": "Egg",
"greatTier": "Rare",
"ultraTier": "Epic",
"masterTier": "Legendary",
"defaultTier": "Common",
"hatchWavesMessageSoon": "Sounds can be heard coming from inside! It will hatch soon!",
"hatchWavesMessageClose": "It appears to move occasionally. It may be close to hatching.",
"hatchWavesMessageNotClose": "What will hatch from this? It doesn't seem close to hatching.",
"hatchWavesMessageLongTime": "It looks like this Egg will take a long time to hatch.",
"gachaTypeLegendary": "Legendary Rate Up",
"gachaTypeMove": "Rare Egg Move Rate Up",
"gachaTypeShiny": "Shiny Rate Up",
"selectMachine": "Select a machine.",
"notEnoughVouchers": "You don't have enough vouchers!",
"tooManyEggs": "You have too many eggs!",
"pull": "Pull",
"pulls": "Pulls",
"sameSpeciesEgg": "{{species}} will hatch from this egg!",
"hatchFromTheEgg": "{{pokemonName}} hatched from the egg!",
"eggMoveUnlock": "Egg Move unlocked: {{moveName}}",
"rareEggMoveUnlock": "Rare Egg Move unlocked: {{moveName}}",
"moveUPGacha": "Move UP!",
"shinyUPGacha": "Shiny UP!",
"legendaryUPGacha": "UP!",
} as const;

View File

@ -0,0 +1,9 @@
import { SimpleTranslationEntries } from "#app/interfaces/locales";
export const fightUiHandler: SimpleTranslationEntries = {
"pp": "PP",
"power": "いりょく",
"accuracy": "めいちゅう",
"abilityFlyInText": " {{pokemonName}}の {{passive}}{{abilityName}}",
"passive": "Passive ", // The space at the end is important
} as const;

View File

@ -0,0 +1,21 @@
import { SimpleTranslationEntries } from "#app/interfaces/locales";
export const filterBar: SimpleTranslationEntries = {
"genFilter": "Gen",
"typeFilter": "Type",
"unlocksFilter": "Unlocks",
"winFilter": "Win",
"sortFilter": "Sort",
"all": "All",
"normal": "Normal",
"uncaught": "Uncaught",
"passiveUnlocked": "Passive Unlocked",
"passiveLocked": "Passive Locked",
"hasWon": "Yes",
"hasNotWon": "No",
"sortByNumber": "No.",
"sortByCost": "Cost",
"sortByCandies": "Candy Count",
"sortByIVs": "IVs",
"sortByName": "Name",
};

View File

@ -0,0 +1,10 @@
import { SimpleTranslationEntries } from "#app/interfaces/locales";
export const gameMode: SimpleTranslationEntries = {
"classic": "クラシック",
"endless": "エンドレス",
"endlessSpliced": "エンドレス (Spliced)",
"dailyRun": "デイリーラン",
"unknown": "Unknown",
"challenge": "チャレンジ",
} as const;

View File

@ -0,0 +1,44 @@
import { SimpleTranslationEntries } from "#app/interfaces/locales";
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;

10
src/locales/ja/growth.ts Normal file
View File

@ -0,0 +1,10 @@
import { SimpleTranslationEntries } from "#app/interfaces/locales";
export const growth: SimpleTranslationEntries = {
"Erratic": "60まんタイプ",
"Fast": "80まんタイプ",
"Medium_Fast": "100まんタイプ",
"Medium_Slow": "105まんタイプ",
"Slow": "125まんタイプ",
"Fluctuating": "164まんタイプ"
} as const;

View File

@ -0,0 +1,28 @@
import { SimpleTranslationEntries } from "#app/interfaces/locales";
export const menuUiHandler: SimpleTranslationEntries = {
"GAME_SETTINGS": "せってい",
"ACHIEVEMENTS": "じっせき",
"STATS": "とうけい",
"VOUCHERS": "クーポン",
"EGG_LIST": "タマゴリスト",
"EGG_GACHA": "タマゴガチャ",
"MANAGE_DATA": "データかんり",
"COMMUNITY": "コミュニティ",
"SAVE_AND_QUIT": "Save and Quit",
"LOG_OUT": "ログアウト",
"slot": "スロット {{slotNumber}}",
"importSession": "セッションのインポート",
"importSlotSelect": "Select a slot to import to.",
"exportSession": "セッションのエクスポート",
"exportSlotSelect": "Select a slot to export from.",
"importData": "データのインポート",
"exportData": "データのエクスポート",
"linkDiscord": "Link Discord",
"unlinkDiscord": "Unlink Discord",
"linkGoogle": "Link Google",
"unlinkGoogle": "Unlink Google",
"cancel": "キャンセル",
"losingProgressionWarning": "You will lose any progress since the beginning of the battle. Proceed?",
"noEggs": "You are not hatching\nany eggs at the moment!",
} as const;

62
src/locales/ja/menu.ts Normal file
View File

@ -0,0 +1,62 @@
import { SimpleTranslationEntries } from "#app/interfaces/locales";
/**
* The menu namespace holds most miscellaneous text that isn't directly part of the game's
* contents or directly related to Pokemon data. This includes menu navigation, settings,
* account interactions, descriptive text, etc.
*/
export const menu: SimpleTranslationEntries = {
"cancel": "キャンセル",
"continue": "つづきから",
"dailyRun": "Daily Run (Beta)",
"loadGame": "ロードセーブ",
"newGame": "はじめから",
"settings": "Settings",
"selectGameMode": "Select a game mode.",
"logInOrCreateAccount": "Log in or create an account to start. No email required!",
"username": "ユーザーめい",
"password": "パスワード",
"login": "ログイン",
"orUse": "Or use",
"register": "かいいん とうろく",
"emptyUsername": "ユーザー名は空にできません",
"invalidLoginUsername": "入力したユーザー名は無効です",
"invalidRegisterUsername": "ユーザー名には英文字、数字、アンダースコアのみを含める必要があります",
"invalidLoginPassword": "入力したパスワードは無効です",
"invalidRegisterPassword": "パスワードは6文字以上でなければなりません",
"usernameAlreadyUsed": "ユーザー名は既に使用されています",
"accountNonExistent": "ユーザーは存在しません",
"unmatchingPassword": "パスワードが一致しません",
"passwordNotMatchingConfirmPassword": "パスワードは確認パスワードと一致する必要があります",
"confirmPassword": "パスワード確認",
"registrationAgeWarning": "登録することで、あなたが13歳以上であることを確認します。",
"backToLogin": "ログインへ",
"failedToLoadSaveData": "保存データの読み込みに失敗しました。ページを再読み込みしてください。\nこれが続く場合は、管理者に連絡してください。",
"sessionSuccess": "セッションが正常に読み込まれました。",
"failedToLoadSession": "セッションデータを読み込むことができませんでした。\nデータが破損している可能性があります。",
"boyOrGirl": "おとこのこ?\nそれとも おんなのこ?",
"evolving": "…おや!?\n{{pokemonName}}のようすが…!",
"stoppedEvolving": "{{pokemonName}}のへんかがとまった",
"pauseEvolutionsQuestion": "Would you like to pause evolutions for {{pokemonName}}?\nEvolutions can be re-enabled from the party screen.",
"evolutionsPaused": "Evolutions have been paused for {{pokemonName}}.",
"evolutionDone": "おめでとう!\n{{pokemonName}}は{{evolvedPokemonName}}にしんかした!",
"dailyRankings": "ほんじつのランキング",
"weeklyRankings": "しゅうのランキング",
"noRankings": "ランキングなし",
"positionIcon": "#",
"usernameScoreboard": "Username",
"score": "Score",
"wave": "Wave",
"loading": "よみこみちゅう…",
"loadingAsset": "Loading asset: {{assetName}}",
"playersOnline": "オンラインのプレイヤー",
"yes":"はい",
"no":"いいえ",
"disclaimer": "DISCLAIMER",
"disclaimerDescription": "This game is an unfinished product; it might have playability issues (including the potential loss of save data),\n change without notice, and may or may not be updated further or completed.",
"choosePokemon": "Choose a Pokémon.",
"renamePokemon": "Rename Pokémon",
"rename": "Rename",
"nickname": "Nickname",
"errorServerDown": "Oops! There was an issue contacting the server.\n\nYou may leave this window open,\nthe game will automatically reconnect.",
} as const;

View File

@ -0,0 +1,14 @@
import { SimpleTranslationEntries } from "#app/interfaces/locales";
export const modifierSelectUiHandler: SimpleTranslationEntries = {
"transfer": "Transfer",
"reroll": "Reroll",
"lockRarities": "Lock Rarities",
"checkTeam": "Check Team",
"transferDesc": "Transfer a held item from one Pokémon to another.",
"rerollDesc": "Spend money to reroll your item options.",
"lockRaritiesDesc": "Lock item rarities on reroll (affects reroll cost).",
"checkTeamDesc": "Check your team or use a form changing item.",
"rerollCost": "₽{{formattedMoney}}",
"itemCost": "₽{{formattedMoney}}"
} as const;

View File

@ -0,0 +1,456 @@
import { ModifierTypeTranslationEntries } from "#app/interfaces/locales";
export const modifierType: ModifierTypeTranslationEntries = {
ModifierType: {
"AddPokeballModifierType": {
name: "{{modifierCount}}x {{pokeballName}}",
description: "{{pokeballName}} x{{modifierCount}}こ てにいれる (インベントリ: {{pokeballAmount}}) \nほそくりつ: {{catchRate}}",
},
"AddVoucherModifierType": {
name: "{{modifierCount}}x {{voucherTypeName}}",
description: "{{voucherTypeName}} x{{modifierCount}}こ てにいれる",
},
"PokemonHeldItemModifierType": {
extra: {
"inoperable": "{{pokemonName}} はこのアイテムを\nもつことができません",
"tooMany": "{{pokemonName}} はこのアイテムを\nもちすぎています",
}
},
"PokemonHpRestoreModifierType": {
description: "ポケモンの HPを {{restorePoints}} または {{restorePercent}}%のどちらか たかいほうを かいふくする",
extra: {
"fully": "ポケモンのHPをすべてかいふくする",
"fullyWithStatus": "ポケモンの HPと じょうたいいじょうを かいふくする",
}
},
"PokemonReviveModifierType": {
description: "ひんしになってしまったポケモンの HP {{restorePercent}}%を かいふくする",
},
"PokemonStatusHealModifierType": {
description: "すべてのじょうたいいじょうを なおす",
},
"PokemonPpRestoreModifierType": {
description: "ポケモンが おぼえている わざの PPを {{restorePoints}}ずつ かいふくする",
extra: {
"fully": "ポケモンが おぼえている わざの PPを すべて かいふくする",
}
},
"PokemonAllMovePpRestoreModifierType": {
description: "ポケモンが おぼえている 4つの わざの PPを {{restorePoints}}ずつ かいふくする",
extra: {
"fully": "ポケモンが おぼえている 4つの わざの PPを すべて かいふくする",
}
},
"PokemonPpUpModifierType": {
description: "ポケモンのわざのさいだいPPを さいだいPP 5ごとに {{upPoints}} ポイントずつ ふやしますさいだい3",
},
"PokemonNatureChangeModifierType": {
name: "{{natureName}} Mint",
description: "ポケモンのせいかくを {{natureName}}にかえて スターターのせいかくをえいきゅうにかいじょする",
},
"DoubleBattleChanceBoosterModifierType": {
description: "バトル{{battleCount}}かいのあいだ ダブルバトルになるかくりつを2ばいにする",
},
"TempBattleStatBoosterModifierType": {
description: "すべてのパーティメンバーの {{tempBattleStatName}}を5かいのバトルのあいだ 1だんかいあげる",
},
"AttackTypeBoosterModifierType": {
description: "ポケモンの {{moveType}}タイプのわざのいりょくを20パーセントあげる",
},
"PokemonLevelIncrementModifierType": {
description: "ポケモンのレベルを1あげる",
},
"AllPokemonLevelIncrementModifierType": {
description: "すべてのパーティメンバーのレベルを1あげる",
},
"PokemonBaseStatBoosterModifierType": {
description: "ポケモンの{{statName}}のきほんステータスを10パーセントあげる。こたいちがたかいほどスタックのげんかいもたかくなる。",
},
"AllPokemonFullHpRestoreModifierType": {
description: "すべてのポケモンのHPを100パーセントかいふくする",
},
"AllPokemonFullReviveModifierType": {
description: "ひんしになったすべてのポケモンをふっかつさせ HPをぜんかいふくする",
},
"MoneyRewardModifierType": {
description: "{{moneyMultiplier}}ぶんのきんがくをあたえる (₽{{moneyAmount}})",
extra: {
"small": "すくない",
"moderate": "ふつう",
"large": "おおい",
},
},
"ExpBoosterModifierType": {
description: "もらえるけいけんちを {{boostPercent}}パーセントふやす",
},
"PokemonExpBoosterModifierType": {
description: "もっているポケモンのけいけんちを {{boostPercent}}パーセントふやす",
},
"PokemonFriendshipBoosterModifierType": {
description: "しょうりごとに 50%パーセント なかよく なりやすくなる",
},
"PokemonMoveAccuracyBoosterModifierType": {
description: "わざのめいちゅうりつを{{accuracyAmount}}ふやす (さいだい100)",
},
"PokemonMultiHitModifierType": {
description: "こうげきがもういちどあたる。そのたびにいりょくがそれぞれ60/75/82.5%へる",
},
"TmModifierType": {
name: "TM{{moveId}} - {{moveName}}",
description: "ポケモンに {{moveName}} をおしえる",
},
"TmModifierTypeWithInfo": {
name: "TM{{moveId}} - {{moveName}}",
description: "ポケモンに {{moveName}} をおしえる\n(Hold C or Shift for more info)",
},
"EvolutionItemModifierType": {
description: "とくていのポケモンをしんかさせる",
},
"FormChangeItemModifierType": {
description: "とくていのポケモンをフォームチェンジさせる",
},
"FusePokemonModifierType": {
description: "2匹のポケモンをけつごうする (とくせいをいどうし、きほんステータスとタイプをわけ、わざプールをきょうゆうする)",
},
"TerastallizeModifierType": {
name: "{{teraType}} Tera Shard",
description: "ポケモンを{{teraType}}タイプにテラスタル10かいのバトルまで",
},
"ContactHeldItemTransferChanceModifierType": {
description: "こうげきするとき あいてがもっているアイテムを {{chancePercent}}パーセントのかくりつでぬすむ",
},
"TurnHeldItemTransferModifierType": {
description: "まいターン あいてからひとつのもちものをてにいれる",
},
"EnemyAttackStatusEffectChanceModifierType": {
description: "こうげきわざに {{chancePercent}}パーセントのかくりつで {{statusEffect}}をあたえる",
},
"EnemyEndureChanceModifierType": {
description: "こうげきをこらえるかくりつを{{chancePercent}}パーセントふやす",
},
"RARE_CANDY": { name: "ふしぎなアメ" },
"RARER_CANDY": { name: "もっとふしぎなアメ" },
"MEGA_BRACELET": { name: "メガバングル", description: "メガストーンがつかえるようになる" },
"DYNAMAX_BAND": { name: "ダイマックスバンド", description: "ダイスープがつかえるようになる" },
"TERA_ORB": { name: "テラスタルオーブ", description: "テラピースがつかえるようになる" },
"MAP": { name: "ちず", description: "わかれみちでいきさきをえらべるようになる" },
"POTION": { name: "キズぐすり" },
"SUPER_POTION": { name: "いいキズぐすり" },
"HYPER_POTION": { name: "すごいキズぐすり" },
"MAX_POTION": { name: "まんたんのくすり" },
"FULL_RESTORE": { name: "かいふくのくすり" },
"REVIVE": { name: "げんきのかけら" },
"MAX_REVIVE": { name: "げんきのかたまり" },
"FULL_HEAL": { name: "なんでもなおし" },
"SACRED_ASH": { name: "せいなるはい" },
"REVIVER_SEED": { name: "ふっかつのタネ", description: "ひんしになったときもっているポケモンをHPはんぶんでふっかつさせる" },
"WHITE_HERB": { name: "White Herb", description: "An item to be held by a Pokémon. It will restore any lowered stat in battle." },
"ETHER": { name: "ピーピーエイド" },
"MAX_ETHER": { name: "ピーピーリカバー" },
"ELIXIR": { name: "ピーピーエイダー" },
"MAX_ELIXIR": { name: "ピーピーマックス" },
"PP_UP": { name: "ポイントアップ" },
"PP_MAX": { name: "ポイントマックス" },
"LURE": { name: "ダブルバトルコロン" },
"SUPER_LURE": { name: "シルバーコロン" },
"MAX_LURE": { name: "ゴールドコロン" },
"MEMORY_MUSHROOM": { name: "きおくキノコ", description: "ポケモンのわすれたわざをおぼえさせる" },
"EXP_SHARE": { name: "がくしゅうそうち", description: "バトルにさんかしていないポケモンが けいけんちの20パーセントをもらう" },
"EXP_BALANCE": { name: "バランスそうち", description: "レベルがひくいパーティメンバーがもらうけいけんちがふえる" },
"OVAL_CHARM": { name: "まるいおまもり", description: "バトルにふくすうのポケモンがさんかするとけいけんちが10パーセントふえる" },
"EXP_CHARM": { name: "けいけんちおまもり" },
"SUPER_EXP_CHARM": { name: "いいけいけんちおまもり" },
"GOLDEN_EXP_CHARM": { name: "ゴールドけいけんちおまもり" },
"LUCKY_EGG": { name: "しあわせタマゴ" },
"GOLDEN_EGG": { name: "おうごんタマゴ" },
"SOOTHE_BELL": { name: "やすらぎのすず" },
"SCOPE_LENS": { name: "ピントレンズ", description: "弱点が 見える レンズ。持たせた ポケモンの技が 急所に 当たりやすくなる。"},
"LEEK": { name: "ながねぎ", description: "とても長くて 硬いクキ。カモネギに 持たせると 技が 急所に 当たりやすくなる。"},
"EVIOLITE": { name: "しんかのきせき", description: "進化の不思議な かたまり。持たせると 進化前ポケモンの 防御と 特防が あがる。" },
"SOUL_DEW": { name: "こころのしずく", description: "ポケモンのせいかくがステータスにあたえるえいきょうを10%ふやす(合算)" },
"NUGGET": { name: "きんのたま" },
"BIG_NUGGET": { name: "でかいきんのたま" },
"RELIC_GOLD": { name: "こだいのきんか" },
"AMULET_COIN": { name: "おまもりこばん", description: "もらえる おかねが 20パーセント ふえる" },
"GOLDEN_PUNCH": { name: "ゴールドパンチ", description: "あたえたちょくせつダメージの50パーセントをおかねとしてもらえる" },
"COIN_CASE": { name: "コインケース", description: "10かいのバトルごとにもちきんの10パーセントをりしとしてうけとる" },
"LOCK_CAPSULE": { name: "ロックカプセル", description: "リロールするときにアイテムのレアリティをロックできる" },
"GRIP_CLAW": { name: "ねばりのかぎづめ" },
"WIDE_LENS": { name: "こうかくレンズ" },
"MULTI_LENS": { name: "マルチレンズ" },
"HEALING_CHARM": { name: "ヒーリングチャーム", description: "HPをかいふくするわざとアイテムのこうかを10パーセントあげる (ふっかつはのぞく)" },
"CANDY_JAR": { name: "アメボトル", description: "ふしぎなアメのアイテムでふえるレベルが1ふえる" },
"BERRY_POUCH": { name: "きのみぶくろ", description: "つかったきのみがつかわれないかくりつを30パーセントふやす" },
"FOCUS_BAND": { name: "きあいのハチマキ", description: "ひんしになるダメージをうけてもHP1でたえるかくりつを10パーセントふやす" },
"QUICK_CLAW": { name: "せんせいのツメ", description: "すばやさにかかわらず さきにこうどうするかくりつを10パーセントふやす (ゆうせんどのあと)" },
"KINGS_ROCK": { name: "おうじゃのしるし", description: "こうげきわざがあいてをひるませるかくりつを10パーセントふやす" },
"LEFTOVERS": { name: "たべのこし", description: "ポケモンのさいだいHPの1/16をまいターンかいふくする" },
"SHELL_BELL": { name: "かいがらのすず", description: "ポケモンがあたえたダメージの1/8をかいふくする" },
"TOXIC_ORB": { name: "どくどくだま", description: "ターンの終わりに すでに じょうたいじょうしょうが なければ もうどくの じょうたいに なる" },
"FLAME_ORB": { name: "かえんだま", description: "ターンの終わりに すでに じょうたいじょうしょうが なければ やけどの じょうたいに なる" },
"BATON": { name: "バトン", description: "ポケモンをこうたいするときにこうかをひきつぎ わなをかいひすることもできる" },
"SHINY_CHARM": { name: "ひかるおまもり", description: "やせいのポケモンがいろちがいポケモンであるかくりつをおおきくふやす" },
"ABILITY_CHARM": { name: "とくせいおまもり", description: "やせいのポケモンがかくれとくせいをもつかくりつをおおきくふやす" },
"IV_SCANNER": { name: "こたいち たんちき", description: "やせいのポケモンのこたいちをスキャンできる。スタックごとに2つのこたいちがあきらかになる。もっともたかいこたいちがさいしょにひょうじされる" },
"DNA_SPLICERS": { name: "いでんしのくさび" },
"MINI_BLACK_HOLE": { name: "ミニブラックホール" },
"GOLDEN_POKEBALL": { name: "ゴールドモンスターボール", description: "バトルごとに1つのアイテムオプションをふやす" },
"ENEMY_DAMAGE_BOOSTER": { name: "ダメージトークン", description: "ダメージを5%ふやす" },
"ENEMY_DAMAGE_REDUCTION": { name: "プロテクショントークン", description: "うけるダメージを2.5%へらす" },
"ENEMY_HEAL": { name: "かいふくトークン", description: "まいターンさいだいHPの2%をかいふくする" },
"ENEMY_ATTACK_POISON_CHANCE": { name: "どくトークン" },
"ENEMY_ATTACK_PARALYZE_CHANCE": { name: "まひトークン" },
"ENEMY_ATTACK_BURN_CHANCE": { name: "やけどトークン" },
"ENEMY_STATUS_EFFECT_HEAL_CHANCE": { name: "なおしトークン", description: "まいターン2.5%のかくりつでじょうたいじょうしょうをかいふくする" },
"ENEMY_ENDURE_CHANCE": { name: "こらえるトークン" },
"ENEMY_FUSED_CHANCE": { name: "フュージョントークン", description: "やせいのポケモンがフュージョンするかくりつを1%ふやす" },
},
SpeciesBoosterItem: {
"LIGHT_BALL": { name: "でんきだま", description: "ピカチュウに 持たせると 攻撃と 特攻が あがる 不思議な玉。" },
"THICK_CLUB": { name: "ふといホネ", description: "なにかの 硬いホネ。カラカラ または ガラガラに 持たせると 攻撃が あがる。" },
"METAL_POWDER": { name: "メタルパウダー", description: "メタモンに 持たせると 防御が あがる 不思議な粉。とても こまかくて 硬い。" },
"QUICK_POWDER": { name: "スピードパウダー", description: "メタモンに 持たせると 素早さが あがる 不思議 粉。とても こまかくて 硬い。" }
},
TempBattleStatBoosterItem: {
"x_attack": "プラスパワー",
"x_defense": "ディフェンダー",
"x_sp_atk": "スペシャルアップ",
"x_sp_def": "スペシャルガード",
"x_speed": "スピーダー",
"x_accuracy": "ヨクアタール",
"dire_hit": "クリティカット",
},
TempBattleStatBoosterStatName: {
"ATK": "こうげき",
"DEF": "ぼうぎょ",
"SPATK": "とくこう",
"SPDEF": "とくぼう",
"SPD": "すばやさ",
"ACC": "めいちゅう",
"CRIT": "きゅうしょりつ",
"EVA": "かいひ",
"DEFAULT": "???",
},
AttackTypeBoosterItem: {
"silk_scarf": "シルクのスカーフ",
"black_belt": "くろおび",
"sharp_beak": "するどいくちばし",
"poison_barb": "どくバリ",
"soft_sand": "やわらかいすな",
"hard_stone": "かたいいし",
"silver_powder": "ぎんのこな",
"spell_tag": "のろいのおふだ",
"metal_coat": "メタルコート",
"charcoal": "もくたん",
"mystic_water": "しんぴのしずく",
"miracle_seed": "きせきのタネ",
"magnet": "じしゃく",
"twisted_spoon": "まがったスプーン",
"never_melt_ice": "とけないこおり",
"dragon_fang": "りゅうのキバ",
"black_glasses": "くろいメガネ",
"fairy_feather": "ようせいのハネ",
},
BaseStatBoosterItem: {
"hp_up": "マックスアップ",
"protein": "タウリン",
"iron": "ブロムヘキシン",
"calcium": "リゾチウム",
"zinc": "キトサン",
"carbos": "インドメタシン",
},
EvolutionItem: {
"NONE": "None",
"LINKING_CORD": "つながりのヒモ",
"SUN_STONE": "たいようのいし",
"MOON_STONE": "つきのいし",
"LEAF_STONE": "リーフのいし",
"FIRE_STONE": "ほのおのいし",
"WATER_STONE": "みずのいし",
"THUNDER_STONE": "かみなりのいし",
"ICE_STONE": "こおりのいし",
"DUSK_STONE": "やみのいし",
"DAWN_STONE": "めざめいし",
"SHINY_STONE": "ひかりのいし",
"CRACKED_POT": "われたポット",
"SWEET_APPLE": "あまーいりんご",
"TART_APPLE": "すっぱいりんご",
"STRAWBERRY_SWEET": "いちごアメざいく",
"UNREMARKABLE_TEACUP": "ボンサクのちゃわん",
"CHIPPED_POT": "かけたポット",
"BLACK_AUGURITE": "くろのきせき",
"GALARICA_CUFF": "ガラナツブレス",
"GALARICA_WREATH": "ガラナツリース",
"PEAT_BLOCK": "ピートブロック",
"AUSPICIOUS_ARMOR": "イワイノヨロイ",
"MALICIOUS_ARMOR": "ノロイノヨロイ",
"MASTERPIECE_TEACUP": "ケッサクのちゃわん",
"METAL_ALLOY": "ふくごうきんぞく",
"SCROLL_OF_DARKNESS": "あくのかけじく",
"SCROLL_OF_WATERS": "みずのかけじく",
"SYRUPY_APPLE": "みついりりんご",
},
FormChangeItem: {
"NONE": "None",
"ABOMASITE": "ユキノオナイト",
"ABSOLITE": "アブソルナイト",
"AERODACTYLITE": "プテラナイト",
"AGGRONITE": "ボスゴドラナイト",
"ALAKAZITE": "フーディナイト",
"ALTARIANITE": "チルタリスナイト",
"AMPHAROSITE": "デンリュウナイト",
"AUDINITE": "タブンネナイト",
"BANETTITE": "ジュペッタナイト",
"BEEDRILLITE": "スピアナイト",
"BLASTOISINITE": "カメックスナイト",
"BLAZIKENITE": "バシャーモナイト",
"CAMERUPTITE": "バクーダナイト",
"CHARIZARDITE_X": "リザードナイトX",
"CHARIZARDITE_Y": "リザードナイトY",
"DIANCITE": "ディアンシナイト",
"GALLADITE": "エルレイドナイト",
"GARCHOMPITE": "ガブリアスナイト",
"GARDEVOIRITE": "サーナイトナイト",
"GENGARITE": "ゲンガナイト",
"GLALITITE": "オニゴーリナイト",
"GYARADOSITE": "ギャラドスナイト",
"HERACRONITE": "ヘラクロスナイト",
"HOUNDOOMINITE": "ヘルガナイト",
"KANGASKHANITE": "ガルーラナイト",
"LATIASITE": "ラティアスナイト",
"LATIOSITE": "ラティオスナイト",
"LOPUNNITE": "ミミロップナイト",
"LUCARIONITE": "ルカリオナイト",
"MANECTITE": "ライボルトナイト",
"MAWILITE": "クチートナイト",
"MEDICHAMITE": "チャーレムナイト",
"METAGROSSITE": "メタグロスナイト",
"MEWTWONITE_X": "ミュウツナイトX",
"MEWTWONITE_Y": "ミュウツナイトY",
"PIDGEOTITE": "ピジョットナイト",
"PINSIRITE": "カイロスナイト",
"RAYQUAZITE": "レックウザナイト",
"SABLENITE": "ヤミラミナイト",
"SALAMENCITE": "ボーマンダナイト",
"SCEPTILITE": "ジュカインナイト",
"SCIZORITE": "ハッサムナイト",
"SHARPEDONITE": "サメハダナイト",
"SLOWBRONITE": "ヤドランナイト",
"STEELIXITE": "ハガネールナイト",
"SWAMPERTITE": "ラグラージナイト",
"TYRANITARITE": "バンギラスナイト",
"VENUSAURITE": "フシギバナイト",
"BLUE_ORB": "あいいろのたま",
"RED_ORB": "べにいろのたま",
"SHARP_METEORITE": "シャープなうんせき",
"HARD_METEORITE": "かたいうんせき",
"SMOOTH_METEORITE": "やわらかいうんせき",
"ADAMANT_CRYSTAL": "だいこんごうだま",
"LUSTROUS_GLOBE": "だいしらたま",
"GRISEOUS_CORE": "だいはっきんだま",
"REVEAL_GLASS": "うつしかがみ",
"GRACIDEA": "グラシデアのはな",
"MAX_MUSHROOMS": "ダイキノコ",
"DARK_STONE": "ダークストーン",
"LIGHT_STONE": "ライトストーン",
"PRISON_BOTTLE": "いましめのツボ",
"N_LUNARIZER": "ネクロプラスルナ",
"N_SOLARIZER": "ネクロプラスソル",
"RUSTED_SWORD": "くちたけん",
"RUSTED_SHIELD": "くちたたて",
"ICY_REINS_OF_UNITY": "つめたいキズナのタヅナ",
"SHADOW_REINS_OF_UNITY": "くろいキズナのタヅナ",
"WELLSPRING_MASK": "いどのめん",
"HEARTHFLAME_MASK": "かまどのめん",
"CORNERSTONE_MASK": "いしずえのめん",
"SHOCK_DRIVE": "イナズマカセット",
"BURN_DRIVE": "ブレイズカセット",
"CHILL_DRIVE": "フリーズカセット",
"DOUSE_DRIVE": "アクアカセット",
"FIST_PLATE": "Fist Plate",
"SKY_PLATE": "Sky Plate",
"TOXIC_PLATE": "Toxic Plate",
"EARTH_PLATE": "Earth Plate",
"STONE_PLATE": "Stone Plate",
"INSECT_PLATE": "Insect Plate",
"SPOOKY_PLATE": "Spooky Plate",
"IRON_PLATE": "Iron Plate",
"FLAME_PLATE": "Flame Plate",
"SPLASH_PLATE": "Splash Plate",
"MEADOW_PLATE": "Meadow Plate",
"ZAP_PLATE": "Zap Plate",
"MIND_PLATE": "Mind Plate",
"ICICLE_PLATE": "Icicle Plate",
"DRACO_PLATE": "Draco Plate",
"DREAD_PLATE": "Dread Plate",
"PIXIE_PLATE": "Pixie Plate",
"BLANK_PLATE": "Blank Plate",
"LEGEND_PLATE": "Legend Plate",
"FIGHTING_MEMORY": "Fighting Memory",
"FLYING_MEMORY": "Flying Memory",
"POISON_MEMORY": "Poison Memory",
"GROUND_MEMORY": "Ground Memory",
"ROCK_MEMORY": "Rock Memory",
"BUG_MEMORY": "Bug Memory",
"GHOST_MEMORY": "Ghost Memory",
"STEEL_MEMORY": "Steel Memory",
"FIRE_MEMORY": "Fire Memory",
"WATER_MEMORY": "Water Memory",
"GRASS_MEMORY": "Grass Memory",
"ELECTRIC_MEMORY": "Electric Memory",
"PSYCHIC_MEMORY": "Psychic Memory",
"ICE_MEMORY": "Ice Memory",
"DRAGON_MEMORY": "Dragon Memory",
"DARK_MEMORY": "Dark Memory",
"FAIRY_MEMORY": "Fairy Memory",
"BLANK_MEMORY": "Blank Memory",
},
} as const;

View File

@ -0,0 +1,14 @@
import { SimpleTranslationEntries } from "#app/interfaces/locales";
export const modifier: SimpleTranslationEntries = {
"surviveDamageApply": "{{pokemonNameWithAffix}} hung on\nusing its {{typeName}}!",
"turnHealApply": "{{pokemonNameWithAffix}} restored a little HP using\nits {{typeName}}!",
"hitHealApply": "{{pokemonNameWithAffix}} restored a little HP using\nits {{typeName}}!",
"pokemonInstantReviveApply": "{{pokemonNameWithAffix}} was revived\nby its {{typeName}}!",
"pokemonResetNegativeStatStageApply": "{{pokemonNameWithAffix}}'s lowered stats were restored\nby its {{typeName}}!",
"moneyInterestApply": "You received interest of ₽{{moneyAmount}}\nfrom the {{typeName}}!",
"turnHeldItemTransferApply": "{{pokemonNameWithAffix}}'s {{itemName}} was absorbed\nby {{pokemonName}}'s {{typeName}}!",
"contactHeldItemTransferApply": "{{pokemonNameWithAffix}}'s {{itemName}} was snatched\nby {{pokemonName}}'s {{typeName}}!",
"enemyTurnHealApply": "{{pokemonNameWithAffix}}\nrestored some HP!",
"bypassSpeedChanceApply": "{{pokemonName}} can act faster than normal, thanks to its {{itemName}}!",
} as const;

View File

@ -0,0 +1,62 @@
import { SimpleTranslationEntries } from "#app/interfaces/locales";
export const moveTriggers: SimpleTranslationEntries = {
"hitWithRecoil" : "{{pokemonName}} was damaged by the recoil!",
"cutHpPowerUpMove": "{{pokemonName}} cut its own HP to power up its move!",
"absorbedElectricity": "{{pokemonName}} absorbed electricity!",
"switchedStatChanges": "{{pokemonName}} switched stat changes with the target!",
"goingAllOutForAttack": "{{pokemonName}} is going all out for this attack!",
"regainedHealth": "{{pokemonName}} regained\nhealth!",
"keptGoingAndCrashed": "{{pokemonName}} kept going\nand crashed!",
"fled": "{{pokemonName}} fled!",
"cannotBeSwitchedOut": "{{pokemonName}} can't be switched out!",
"swappedAbilitiesWithTarget": "{{pokemonName}} swapped\nabilities with its target!",
"coinsScatteredEverywhere": "Coins were scattered everywhere!",
"attackedByItem": "{{pokemonName}} is about to be attacked by its {{itemName}}!",
"whippedUpAWhirlwind": "{{pokemonName}} whipped\nup a whirlwind!",
"flewUpHigh": "{{pokemonName}} flew\nup high!",
"tookInSunlight": "{{pokemonName}} absorbed light!",
"dugAHole": "{{pokemonName}} burrowed its way under the ground!",
"loweredItsHead": "{{pokemonName}} tucked in its head!",
"isGlowing": "{{pokemonName}} became cloaked in a harsh light!",
"bellChimed": "A bell chimed!",
"foresawAnAttack": "{{pokemonName}} foresaw\nan attack!",
"hidUnderwater": "{{pokemonName}} hid\nunderwater!",
"soothingAromaWaftedThroughArea": "A soothing aroma wafted through the area!",
"sprangUp": "{{pokemonName}} sprang up!",
"choseDoomDesireAsDestiny": "{{pokemonName}} chose\nDoom Desire as its destiny!",
"vanishedInstantly": "{{pokemonName}} vanished\ninstantly!",
"tookTargetIntoSky": "{{pokemonName}} took {{targetName}}\ninto the sky!",
"becameCloakedInFreezingLight": "{{pokemonName}} became cloaked\nin a freezing light!",
"becameCloakedInFreezingAir": "{{pokemonName}} became cloaked\nin freezing air!",
"isChargingPower": "{{pokemonName}} is absorbing power!",
"burnedItselfOut": "{{pokemonName}} burned itself out!",
"startedHeatingUpBeak": "{{pokemonName}} started\nheating up its beak!",
"isOverflowingWithSpacePower": "{{pokemonName}} is overflowing\nwith space power!",
"usedUpAllElectricity": "{{pokemonName}} used up all its electricity!",
"stoleItem": "{{pokemonName}} stole\n{{targetName}}'s {{itemName}}!",
"incineratedItem": "{{pokemonName}} incinerated\n{{targetName}}'s {{itemName}}!",
"knockedOffItem": "{{pokemonName}} knocked off\n{{targetName}}'s {{itemName}}!",
"tookMoveAttack": "{{pokemonName}} took\nthe {{moveName}} attack!",
"cutOwnHpAndMaximizedStat": "{{pokemonName}} cut its own HP\nand maximized its {{statName}}!",
"copiedStatChanges": "{{pokemonName}} copied\n{{targetName}}'s stat changes!",
"magnitudeMessage": "Magnitude {{magnitude}}!",
"tookAimAtTarget": "{{pokemonName}} took aim\nat {{targetName}}!",
"transformedIntoType": "{{pokemonName}} transformed\ninto the {{typeName}} type!",
"copiedMove": "{{pokemonName}} copied\n{{moveName}}!",
"sketchedMove": "{{pokemonName}} sketched\n{{moveName}}!",
"acquiredAbility": "The {{pokemonName}} acquired\n{{abilityName}}!",
"copiedTargetAbility": "{{pokemonName}} copied the {{targetName}}'s\n{{abilityName}}!",
"transformedIntoTarget": "{{pokemonName}} transformed\ninto {{targetName}}!",
"tryingToTakeFoeDown": "{{pokemonName}} is hoping to take its attacker down with it!",
"addType": "{{typeName}} was added to\n{{pokemonName}}!",
"cannotUseMove": "{{pokemonName}} cannot use {{moveName}}!",
"healHp": "{{pokemonName}} had its HP restored.",
"sacrificialFullRestore": "{{pokemonName}}'s Healing Wish\nwas granted!",
"invertStats": "{{pokemonName}}'s stat changes\nwere all reversed!",
"resetStats": "{{pokemonName}}'s stat changes\nwere eliminated!",
"faintCountdown": "{{pokemonName}}\nwill faint in {{turnCount}} turns.",
"copyType": "{{pokemonName}}'s type became the same as\n{{targetPokemonName}}'s type!",
"suppressAbilities": "{{pokemonName}}'s ability\nwas suppressed!",
"swapArenaTags": "{{pokemonName}} swapped the battle effects affecting each side of the field!",
} as const;

3812
src/locales/ja/move.ts Normal file

File diff suppressed because it is too large Load Diff

29
src/locales/ja/nature.ts Normal file
View File

@ -0,0 +1,29 @@
import { SimpleTranslationEntries } from "#app/interfaces/locales";
export const nature: SimpleTranslationEntries = {
"Hardy": "がんばりや",
"Lonely": "さみしがり",
"Brave": "ゆうかん",
"Adamant": "いじっぱり",
"Naughty": "やんちゃ",
"Bold": "ずぶとい",
"Docile": "すなお",
"Relaxed": "のんき",
"Impish": "わんぱく",
"Lax": "のうてんき",
"Timid": "おくびょう",
"Hasty": "せっかち",
"Serious": "まじめ",
"Jolly": "ようき",
"Naive": "むじゃき",
"Modest": "ひかえめ",
"Mild": "おっとり",
"Quiet": "れいせい",
"Bashful": "てれや",
"Rash": "うっかりや",
"Calm": "おだやか",
"Gentle": "おとなしい",
"Sassy": "なまいき",
"Careful": "しんちょう",
"Quirky": "きまぐれ"
} as const;

View File

@ -0,0 +1,54 @@
import { SimpleTranslationEntries } from "#app/interfaces/locales";
export const partyUiHandler: SimpleTranslationEntries = {
"SEND_OUT": "いれかえる",
"SUMMARY": "つよさをみる",
"CANCEL": "やめる",
"RELEASE": "にがす",
"APPLY": "つかう",
"TEACH": "おしえる",
"SPLICE": "Splice",
"UNSPLICE": "Unsplice",
"ACTIVATE": "Activate",
"DEACTIVATE": "Deactivate",
"TRANSFER": "Transfer",
"ALL": "すべて",
"PASS_BATON": "Pass Baton",
"UNPAUSE_EVOLUTION": "Unpause Evolution",
"REVIVE": "Revive",
"RENAME": "Rename",
"choosePokemon": "Choose a Pokémon.",
"doWhatWithThisPokemon": "Do what with this Pokémon?",
"noEnergy": "{{pokemonName}} has no energy\nleft to battle!",
"hasEnergy": "{{pokemonName}} still has energy\nto battle!",
"cantBeUsed": "{{pokemonName}} can't be used in\nthis challenge!",
"tooManyItems": "{{pokemonName}} has too many\nof this item!",
"anyEffect": "It won't have any effect.",
"unpausedEvolutions": "Evolutions have been unpaused for {{pokemonName}}.",
"unspliceConfirmation": "Do you really want to unsplice {{fusionName}}\nfrom {{pokemonName}}? {{fusionName}} will be lost.",
"wasReverted": "{{fusionName}} was reverted to {{pokemonName}}.",
"releaseConfirmation": "Do you really want to release {{pokemonName}}?",
"releaseInBattle": "You can't release a Pokémon that's in battle!",
"selectAMove": "Select a move.",
"changeQuantity": "Select a held item to transfer.\nUse < and > to change the quantity.",
"selectAnotherPokemonToSplice": "Select another Pokémon to splice.",
"cancel": "Cancel",
// Slot TM text
"able": "Able",
"notAble": "Not able",
"learned": "Learned",
// Releasing messages
"goodbye": "Goodbye, {{pokemonName}}!",
"byebye": "Byebye, {{pokemonName}}!",
"farewell": "Farewell, {{pokemonName}}!",
"soLong": "So long, {{pokemonName}}!",
"thisIsWhereWePart": "This is where we part, {{pokemonName}}!",
"illMissYou": "I'll miss you, {{pokemonName}}!",
"illNeverForgetYou": "I'll never forget you, {{pokemonName}}!",
"untilWeMeetAgain": "Until we meet again, {{pokemonName}}!",
"sayonara": "Sayonara, {{pokemonName}}!",
"smellYaLater": "Smell ya later, {{pokemonName}}!",
} as const;

View File

@ -0,0 +1,10 @@
import { SimpleTranslationEntries } from "#app/interfaces/locales";
export const pokeball: SimpleTranslationEntries = {
"pokeBall": "モンスターボール",
"greatBall": "スーパーボール",
"ultraBall": "ハイパーボール",
"rogueBall": "ローグボール",
"masterBall": "マスターボール",
"luxuryBall": "ゴージャスボール",
} as const;

View File

@ -0,0 +1,197 @@
import { SimpleTranslationEntries } from "#app/interfaces/locales";
export const battlePokemonForm: SimpleTranslationEntries = {
"mega": "Mega {{pokemonName}}",
"mega-x": "Mega {{pokemonName}} X",
"mega-y": "Mega {{pokemonName}} Y",
"primal": "Primal {{pokemonName}}",
"gigantamax": "G-Max {{pokemonName}}",
"eternamax": "E-Max {{pokemonName}}",
"megaChange": "{{preName}} Mega Evolved\ninto {{pokemonName}}!",
"gigantamaxChange": "{{preName}} Gigantamaxed\ninto {{pokemonName}}!",
"eternamaxChange": "{{preName}} Eternamaxed\ninto {{pokemonName}}!",
"revertChange": "{{pokemonName}} reverted\nto its original form!",
"formChange": "{{preName}} changed form!",
} as const;
export const pokemonForm: SimpleTranslationEntries = {
// Starters forms
// 1G
"pikachuCosplay": "Cosplay",
"pikachuCoolCosplay": "Cool Cosplay",
"pikachuBeautyCosplay": "Beauty Cosplay",
"pikachuCuteCosplay": "Cute Cosplay",
"pikachuSmartCosplay": "Smart Cosplay",
"pikachuToughCosplay": "Tough Cosplay",
"pikachuPartner": "Partner",
"eeveePartner": "Partner",
// 2G
"pichuSpiky": "Spiky",
"unownA": "A",
"unownB": "B",
"unownC": "C",
"unownD": "D",
"unownE": "E",
"unownF": "F",
"unownG": "G",
"unownH": "H",
"unownI": "I",
"unownJ": "J",
"unownK": "K",
"unownL": "L",
"unownM": "M",
"unownN": "N",
"unownO": "O",
"unownP": "P",
"unownQ": "Q",
"unownR": "R",
"unownS": "S",
"unownT": "T",
"unownU": "U",
"unownV": "V",
"unownW": "W",
"unownX": "X",
"unownY": "Y",
"unownZ": "Z",
"unownExclamation": "!",
"unownQuestion": "?",
// 3G
"castformSunny": "Sunny",
"castformRainy": "Rainy",
"castformSnowy": "Snowy",
"deoxysNormal": "Normal",
// 4G
"burmyPlant": "Plant",
"burmySandy": "Sandy",
"burmyTrash": "Trash",
"shellosEast": "East",
"shellosWest": "West",
"rotomHeat": "Heat",
"rotomWash": "Wash",
"rotomFrost": "Frost",
"rotomFan": "Fan",
"rotomMow": "Mow",
"giratinaAltered": "Altered",
"shayminLand": "Land",
// 5G
"basculinRedStriped": "Red Striped",
"basculinBlueStriped": "Blue Striped",
"basculinWhiteStriped": "White Striped",
"deerlingSpring": "Spring",
"deerlingSummer": "Summer",
"deerlingAutumn": "Autumn",
"deerlingWinter": "Winter",
"tornadusIncarnate": "Incarnate",
"thundurusIncarnate": "Incarnate",
"landorusIncarnate": "Incarnate",
"keldeoOrdinary": "Ordinary",
"meloettaAria": "Aria",
// 6G
"froakieBattleBond": "Battle Bond",
"scatterbugMeadow": "Meadow",
"scatterbugIcySnow": "Icy Snow",
"scatterbugPolar": "Polar",
"scatterbugTundra": "Tundra",
"scatterbugContinental": "Continental",
"scatterbugGarden": "Garden",
"scatterbugElegant": "Elegant",
"scatterbugModern": "Modern",
"scatterbugMarine": "Marine",
"scatterbugArchipelago": "Archipelago",
"scatterbugHighPlains": "High Plains",
"scatterbugSandstorm": "Sandstorm",
"scatterbugRiver": "River",
"scatterbugMonsoon": "Monsoon",
"scatterbugSavanna": "Savanna",
"scatterbugSun": "Sun",
"scatterbugOcean": "Ocean",
"scatterbugJungle": "Jungle",
"scatterbugFancy": "Fancy",
"scatterbugPokeBall": "Poké Ball",
"flabebeRed": "Red",
"flabebeYellow": "Yellow",
"flabebeOrange": "Orange",
"flabebeBlue": "Blue",
"flabebeWhite": "White",
"furfrouHeart": "Heart",
"furfrouStar": "Star",
"furfrouDiamond": "Diamond",
"furfrouDebutante": "Debutante",
"furfrouMatron": "Matron",
"furfrouDandy": "Dandy",
"furfrouLaReine": "La Reine",
"furfrouKabuki": "Kabuki",
"furfrouPharaoh": "Pharaoh",
"pumpkabooSmall": "Small",
"pumpkabooLarge": "Large",
"pumpkabooSuper": "Super",
"xerneasNeutral": "Neutral",
"xerneasActive": "Active",
"zygarde50": "50% Forme",
"zygarde10": "10% Forme",
"zygarde50Pc": "50% Forme Power Construct",
"zygarde10Pc": "10% Forme Power Construct",
"zygardeComplete": "Complete Forme",
// 7G
"oricorioBaile": "Baile",
"oricorioPompom": "Pom-Pom",
"oricorioPau": "Pau",
"oricorioSensu": "Sensu",
"rockruffOwnTempo": "Own Tempo",
"miniorRedMeteor": "Red Meteor",
"miniorOrangeMeteor": "Orange Meteor",
"miniorYellowMeteor": "Yellow Meteor",
"miniorGreenMeteor": "Green Meteor",
"miniorBlueMeteor": "Blue Meteor",
"miniorIndigoMeteor": "Indigo Meteor",
"miniorVioletMeteor": "Violet Meteor",
"miniorRed": "Red",
"miniorOrange": "Orange",
"miniorYellow": "Yellow",
"miniorGreen": "Green",
"miniorBlue": "Blue",
"miniorIndigo": "Indigo",
"miniorViolet": "Violet",
"mimikyuDisguised": "Disguised",
"mimikyuBusted": "Busted",
"magearnaOriginal": "Original",
"marshadowZenith": "Zenith",
// 8G
"sinisteaPhony": "Phony",
"sinisteaAntique": "Antique",
"eiscueNoIce": "No Ice",
"indeedeeMale": "Male",
"indeedeeFemale": "Female",
"morpekoFullBelly": "Full Belly",
"zacianHeroOfManyBattles": "Hero Of Many Battles",
"zamazentaHeroOfManyBattles": "Hero Of Many Battles",
"zarudeDada": "Dada",
"enamorusIncarnate": "Incarnate",
// 9G
"squawkabillyGreenPlumage": "Green Plumage",
"squawkabillyBluePlumage": "Blue Plumage",
"squawkabillyYellowPlumage": "Yellow Plumage",
"squawkabillyWhitePlumage": "White Plumage",
"tatsugiriCurly": "Curly",
"tatsugiriDroopy": "Droopy",
"tatsugiriStretchy": "Stretchy",
"gimmighoulChest": "Chest",
"gimmighoulRoaming": "Roaming",
"koraidonApexBuild": "Apex Build",
"koraidonLimitedBuild":"Limited Build",
"koraidonSprintingBuild":"Sprinting Build",
"koraidonSwimmingBuild":"Swimming Build",
"koraidonGlidingBuild":"Gliding Build",
"miraidonUltimateMode":"Ultimate Mode",
"miraidonLowPowerMode":"Low Power Mode",
"miraidonDriveMode":"Drive Mode",
"miraidonAquaticMode":"Aquatic Mode",
"miraidonGlideMode":"Glide Mode",
"poltchageistCounterfeit": "Counterfeit",
"poltchageistArtisan": "Artisan",
"paldeaTaurosCombat": "Combat",
"paldeaTaurosBlaze": "Blaze",
"paldeaTaurosAqua": "Aqua",
} as const;

View File

@ -0,0 +1,9 @@
import { SimpleTranslationEntries } from "#app/interfaces/locales";
export const pokemonInfoContainer: SimpleTranslationEntries = {
"moveset": "わざ",
"gender": "せいべつ:",
"ability": "とくせい:",
"nature": "せいかく:",
"form": "すがた:"
} as const;

View File

@ -0,0 +1,43 @@
import { PokemonInfoTranslationEntries } from "#app/interfaces/locales";
export const pokemonInfo: PokemonInfoTranslationEntries = {
Stat: {
"HP": "HP",
"HPshortened": "HP",
"ATK": "こうげき",
"ATKshortened": "こうげき",
"DEF": "ぼうぎょ",
"DEFshortened": "ぼうぎょ",
"SPATK": "とくこう",
"SPATKshortened": "とくこう",
"SPDEF": "とくぼう",
"SPDEFshortened": "とくぼう",
"SPD": "すばやさ",
"SPDshortened": "すばやさ",
"ACC": "めいちゅう",
"EVA": "かいひ"
},
Type: {
"UNKNOWN": "Unknown",
"NORMAL": "ノーマル",
"FIGHTING": "かくとう",
"FLYING": "ひこう",
"POISON": "どく",
"GROUND": "じめん",
"ROCK": "いわ",
"BUG": "むし",
"GHOST": "ゴースト",
"STEEL": "はがね",
"FIRE": "ほのお",
"WATER": "みず",
"GRASS": "くさ",
"ELECTRIC": "でんき",
"PSYCHIC": "エスパー",
"ICE": "こおり",
"DRAGON": "ドラゴン",
"DARK": "あく",
"FAIRY": "フェアリー",
"STELLAR": "ステラ",
},
} as const;

View File

@ -0,0 +1,20 @@
import { TranslationEntries } from "#app/interfaces/locales";
export const pokemonSummary: TranslationEntries = {
"pokemonInfo": "Pokémon Info",
"status": "Status",
"powerAccuracyCategory": "Power\nAccuracy\nCategory",
"type": "Type",
"unknownTrainer": "Unknown",
"ot": "OT",
"nature": "nature",
"expPoints": "Exp. Points",
"nextLv": "Next Lv.",
"cancel": "Cancel",
"memoString": "{{natureFragment}} nature,\n{{metFragment}}",
"metFragment": {
"normal": "met at Lv{{level}},\n{{biome}}.",
"apparently": "apparently met at Lv{{level}},\n{{biome}}.",
},
} as const;

1086
src/locales/ja/pokemon.ts Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,9 @@
import { SimpleTranslationEntries } from "#app/interfaces/locales";
export const saveSlotSelectUiHandler: SimpleTranslationEntries = {
"overwriteData": "せんたくしたスロットにデータをうわがきしますか?",
"loading": "ローディング...",
"wave": "Wave",
"lv": "Lv",
"empty": "なし",
} as const;

100
src/locales/ja/settings.ts Normal file
View File

@ -0,0 +1,100 @@
import { SimpleTranslationEntries } from "#app/interfaces/locales.js";
export const settings: SimpleTranslationEntries = {
"boy": "男の子",
"girl": "女の子",
"general": "全般",
"display": "ディスプレイ",
"audio": "音声",
"gamepad": "コントローラー",
"keyboard": "キーボード",
"gameSpeed": "ゲームスピード",
"hpBarSpeed": "HPバーの増減スピード",
"expGainsSpeed": "EXPバーの増加スピード",
"expPartyDisplay": "パーティの経験値取得表示",
"skipSeenDialogues": "Skip Seen Dialogues",
"battleStyle": "試合のルール",
"enableRetries": "リトライを有効にする",
"tutorials": "チュートリアル",
"touchControls": "タッチ操作",
"vibrations": "振動",
"normal": "普通",
"fast": "早い",
"faster": "とても早い",
"skip": "スキップ",
"levelUpNotifications": "レベルアップ時のみ",
"on": "オン",
"off": "オフ",
"switch": "入れ替え",
"set": "勝ち抜き",
"auto": "自動",
"disabled": "無効",
"language": "言語",
"change": "変更",
"uiTheme": "UIテーマ",
"default": "デフォルト",
"legacy": "レガシー",
"windowType": "ウィンドウタイプ",
"moneyFormat": "お金の表示形式",
"damageNumbers": "ダメージ表示",
"simple": "シンプル",
"fancy": "Fancy",
"abbreviated": "省略",
"moveAnimations": "戦闘アニメ",
"showStatsOnLevelUp": "レベルアップ時のステータス表示",
"candyUpgradeNotification": "Candy Upgrade Notification",
"passivesOnly": "パッシブのみ",
"candyUpgradeDisplay": "Candy Upgrade Display",
"icon": "アイコン",
"animation": "アニメーション",
"moveInfo": "技の情報表示",
"showMovesetFlyout": "Show Moveset Flyout",
"showArenaFlyout": "Show Arena Flyout",
"showTimeOfDayWidget": "Show Time of Day Widget",
"timeOfDayAnimation": "Time of Day Animation",
"bounce": "Bounce",
"timeOfDay_back": "Back",
"spriteSet": "Sprite Set",
"consistent": "Consistent",
"mixedAnimated": "Mixed Animated",
"fusionPaletteSwaps": "Fusion Palette Swaps",
"playerGender": "プレイヤーの性別",
"typeHints": "相性のヒント",
"masterVolume": "マスターボリューム",
"bgmVolume": "BGMのボリューム",
"seVolume": "SEのボリューム",
"musicPreference": "Music Preference",
"mixed": "Mixed",
"gamepadPleasePlug": "Please Plug in a Gamepad or Press a Button",
"delete": "Delete",
"keyboardPleasePress": "Please Press a Key on Your Keyboard",
"reset": "リセット",
"requireReload": "再読み込みが必要",
"action": "決定",
"back": "戻る",
"pressToBind": "Press to Bind",
"pressButton": "Press a Button...",
"buttonUp": "上",
"buttonDown": "下",
"buttonLeft": "左",
"buttonRight": "右",
"buttonAction": "決定",
"buttonMenu": "メニュー",
"buttonSubmit": "Submit",
"buttonCancel": "キャンセル",
"buttonStats": "Stats",
"buttonCycleForm": "Cycle Form",
"buttonCycleShiny": "Cycle Shiny",
"buttonCycleGender": "Cycle Gender",
"buttonCycleAbility": "Cycle Ability",
"buttonCycleNature": "Cycle Nature",
"buttonCycleVariant": "Cycle Variant",
"buttonSpeedUp": "Speed Up",
"buttonSlowDown": "Slow Down",
"alt": " (代替)",
"mute": "ミュート",
"controller": "コントローラー",
"gamepadSupport": "コントローラーサポート",
"showBgmBar": "Show Music Names",
"shopOverlayOpacity": "Shop Overlay Opacity",
} as const;

View File

@ -0,0 +1,38 @@
import { SimpleTranslationEntries } from "#app/interfaces/locales";
export const splashMessages: SimpleTranslationEntries = {
"battlesWon": "Battles Won!",
"joinTheDiscord": "Join the Discord!",
"infiniteLevels": "Infinite Levels!",
"everythingStacks": "Everything Stacks!",
"optionalSaveScumming": "Optional Save Scumming!",
"biomes": "35 Biomes!",
"openSource": "Open Source!",
"playWithSpeed": "Play with 5x Speed!",
"liveBugTesting": "Live Bug Testing!",
"heavyInfluence": "Heavy RoR2 Influence!",
"pokemonRiskAndPokemonRain": "Pokémon Risk and Pokémon Rain!",
"nowWithMoreSalt": "Now with 33% More Salt!",
"infiniteFusionAtHome": "Infinite Fusion at Home!",
"brokenEggMoves": "Broken Egg Moves!",
"magnificent": "Magnificent!",
"mubstitute": "Mubstitute!",
"thatsCrazy": "That's Crazy!",
"oranceJuice": "Orance Juice!",
"questionableBalancing": "Questionable Balancing!",
"coolShaders": "Cool Shaders!",
"aiFree": "AI-Free!",
"suddenDifficultySpikes": "Sudden Difficulty Spikes!",
"basedOnAnUnfinishedFlashGame": "Based on an Unfinished Flash Game!",
"moreAddictiveThanIntended": "More Addictive than Intended!",
"mostlyConsistentSeeds": "Mostly Consistent Seeds!",
"achievementPointsDontDoAnything": "Achievement Points Don't Do Anything!",
"youDoNotStartAtLevel": "You Do Not Start at Level 2000!",
"dontTalkAboutTheManaphyEggIncident": "Don't Talk About the Manaphy Egg Incident!",
"alsoTryPokengine": "Also Try Pokéngine!",
"alsoTryEmeraldRogue": "Also Try Emerald Rogue!",
"alsoTryRadicalRed": "Also Try Radical Red!",
"eeveeExpo": "Eevee Expo!",
"ynoproject": "YNOproject!",
"breedersInSpace": "Breeders in space!",
} as const;

View File

@ -0,0 +1,49 @@
import { SimpleTranslationEntries } from "#app/interfaces/locales";
/**
* The menu namespace holds most miscellaneous text that isn't directly part of the game's
* contents or directly related to Pokemon data. This includes menu navigation, settings,
* account interactions, descriptive text, etc.
*/
export const starterSelectUiHandler: SimpleTranslationEntries = {
"confirmStartTeam": "この じょうけんで チャレンジを しんこうしますか?",
"confirmExit": "しゅうりょう しますか?",
"invalidParty": "This is not a valid starting party!",
"gen1": "1せだい",
"gen2": "2せだい",
"gen3": "3せだい",
"gen4": "4せだい",
"gen5": "5せだい",
"gen6": "6せだい",
"gen7": "7せだい",
"gen8": "8せだい",
"gen9": "9せだい",
"growthRate": "EXPタイプ:",
"ability": "とくせい:",
"passive": "パッシブ:",
"nature": "せいかく:",
"eggMoves": "タマゴわざ",
"start": "始める",
"addToParty": "えらぶ",
"toggleIVs": "個体値を ひょうじ",
"manageMoves": "わざを ならびかえ",
"manageNature": "せいかくを ならびかえ",
"useCandies": "アメを つかう",
"selectNature": "せいかくをえらんでください",
"selectMoveSwapOut": "交換する技を選択してください",
"selectMoveSwapWith": "交換先の技を選択してください",
"unlockPassive": "パッシブを かいほうする",
"reduceCost": "ポケモンの 必要ポイントを へらす",
"sameSpeciesEgg": "Buy an Egg",
"cycleShiny": ": 色違い変更",
"cycleForm": ": フォルム変更",
"cycleGender": ": 性別変更",
"cycleAbility": ": 特性変更",
"cycleNature": ": 性格変更",
"cycleVariant": ": 色変更",
"enablePassive": "パッシブ ゆうこう",
"disablePassive": "パッシブ むこう",
"locked": "Locked",
"disabled": "Disabled",
"uncaught": "Uncaught"
};

View File

@ -0,0 +1,67 @@
import { StatusEffectTranslationEntries } from "#app/interfaces/locales.js";
export const statusEffect: StatusEffectTranslationEntries = {
none: {
name: "None",
description: "",
obtain: "",
obtainSource: "",
activation: "",
overlap: "",
heal: ""
},
poison: {
name: "Poison",
description: "poisoning",
obtain: "{{pokemonNameWithAffix}}\nwas poisoned!",
obtainSource: "{{pokemonNameWithAffix}}\nwas poisoned by the {{sourceText}}!",
activation: "{{pokemonNameWithAffix}} is hurt\nby poison!",
overlap: "{{pokemonNameWithAffix}} is\nalready poisoned!",
heal: "{{pokemonNameWithAffix}} was\ncured of its poison!"
},
toxic: {
name: "Toxic",
description: "poisoning",
obtain: "{{pokemonNameWithAffix}}\nwas badly poisoned!",
obtainSource: "{{pokemonNameWithAffix}}\nwas badly poisoned by the {{sourceText}}!",
activation: "{{pokemonNameWithAffix}} is hurt\nby poison!",
overlap: "{{pokemonNameWithAffix}} is\nalready poisoned!",
heal: "{{pokemonNameWithAffix}} was\ncured of its poison!"
},
paralysis: {
name: "Paralysis",
description: "paralysis",
obtain: "{{pokemonNameWithAffix}} was paralyzed,\nIt may be unable to move!",
obtainSource: "{{pokemonNameWithAffix}} was paralyzed by the {{sourceText}}!\nIt may be unable to move!",
activation: "{{pokemonNameWithAffix}} is paralyzed!\nIt can't move!",
overlap: "{{pokemonNameWithAffix}} is\nalready paralyzed!",
heal: "{{pokemonNameWithAffix}} was\nhealed of paralysis!"
},
sleep: {
name: "Sleep",
description: "sleep",
obtain: "{{pokemonNameWithAffix}}\nfell asleep!",
obtainSource: "{{pokemonNameWithAffix}}\nfell asleep from the {{sourceText}}!",
activation: "{{pokemonNameWithAffix}} is fast asleep.",
overlap: "{{pokemonNameWithAffix}} is\nalready asleep!",
heal: "{{pokemonNameWithAffix}} woke up!"
},
freeze: {
name: "Freeze",
description: "freezing",
obtain: "{{pokemonNameWithAffix}}\nwas frozen solid!",
obtainSource: "{{pokemonNameWithAffix}}\nwas frozen solid by the {{sourceText}}!",
activation: "{{pokemonNameWithAffix}} is\nfrozen solid!",
overlap: "{{pokemonNameWithAffix}} is\nalready frozen!",
heal: "{{pokemonNameWithAffix}} was\ndefrosted!"
},
burn: {
name: "Burn",
description: "burn",
obtain: "{{pokemonNameWithAffix}}\nwas burned!",
obtainSource: "{{pokemonNameWithAffix}}\nwas burned by the {{sourceText}}!",
activation: "{{pokemonNameWithAffix}} is hurt\nby its burn!",
overlap: "{{pokemonNameWithAffix}} is\nalready burned!",
heal: "{{pokemonNameWithAffix}} was\nhealed of its burn!"
},
} as const;

302
src/locales/ja/trainers.ts Normal file
View File

@ -0,0 +1,302 @@
import { SimpleTranslationEntries } from "#app/interfaces/locales";
// Titles of special trainers like gym leaders, elite four, and the champion
export const titles: SimpleTranslationEntries = {
"elite_four": "Elite Four",
"elite_four_female": "Elite Four",
"gym_leader": "Gym Leader",
"gym_leader_female": "Gym Leader",
"gym_leader_double": "Gym Leader Duo",
"champion": "Champion",
"champion_female": "Champion",
"champion_double": "Champion Duo",
"rival": "Rival",
"professor": "Professor",
"frontier_brain": "Frontier Brain",
"rocket_boss": "Team Rocket Boss",
"magma_boss": "Team Magma Boss",
"aqua_boss": "Team Aqua Boss",
"galactic_boss": "Team Galactic Boss",
"plasma_boss": "Team Plasma Boss",
"flare_boss": "Team Flare Boss",
// Maybe if we add the evil teams we can add "Team Rocket" and "Team Aqua" etc. here as well as "Team Rocket Boss" and "Team Aqua Admin" etc.
} as const;
// Titles of trainers like "Youngster" or "Lass"
export const trainerClasses: SimpleTranslationEntries = {
"ace_trainer": "Ace Trainer",
"ace_trainer_female": "Ace Trainer",
"ace_duo": "Ace Duo",
"artist": "Artist",
"artist_female": "Artist",
"backers": "Backers",
"backpacker": "Backpacker",
"backpacker_female": "Backpacker",
"backpackers": "Backpackers",
"baker": "Baker",
"battle_girl": "Battle Girl",
"beauty": "Beauty",
"beginners": "Beginners",
"biker": "Biker",
"black_belt": "Black Belt",
"breeder": "Breeder",
"breeder_female": "Breeder",
"breeders": "Breeders",
"clerk": "Clerk",
"clerk_female": "Clerk",
"colleagues": "Colleagues",
"crush_kin": "Crush Kin",
"cyclist": "Cyclist",
"cyclist_female": "Cyclist",
"cyclists": "Cyclists",
"dancer": "Dancer",
"dancer_female": "Dancer",
"depot_agent": "Depot Agent",
"doctor": "Doctor",
"doctor_female": "Doctor",
"firebreather": "Firebreather",
"fisherman": "Fisherman",
"fisherman_female": "Fisherman",
"gentleman": "Gentleman",
"guitarist": "Guitarist",
"guitarist_female": "Guitarist",
"harlequin": "Harlequin",
"hiker": "Hiker",
"hooligans": "Hooligans",
"hoopster": "Hoopster",
"infielder": "Infielder",
"janitor": "Janitor",
"lady": "Lady",
"lass": "Lass",
"linebacker": "Linebacker",
"maid": "Maid",
"madame": "Madame",
"medical_team": "Medical Team",
"musician": "Musician",
"hex_maniac": "Hex Maniac",
"nurse": "Nurse",
"nursery_aide": "Nursery Aide",
"officer": "Officer",
"parasol_lady": "Parasol Lady",
"pilot": "Pilot",
"pokéfan": "Poké Fan",
"pokéfan_female": "Poké Fan",
"pokéfan_family": "Poké Fan Family",
"preschooler": "Preschooler",
"preschooler_female": "Preschooler",
"preschoolers": "Preschoolers",
"psychic": "Psychic",
"psychic_female": "Psychic",
"psychics": "Psychics",
"pokémon_ranger": "Pokémon Ranger",
"pokémon_ranger_female": "Pokémon Ranger",
"pokémon_rangers": "Pokémon Ranger",
"ranger": "Ranger",
"restaurant_staff": "Restaurant Staff",
"rich": "Rich",
"rich_female": "Rich",
"rich_boy": "Rich Boy",
"rich_couple": "Rich Couple",
"rich_kid": "Rich Kid",
"rich_kid_female": "Rich Kid",
"rich_kids": "Rich Kids",
"roughneck": "Roughneck",
"sailor": "Sailor",
"scientist": "Scientist",
"scientist_female": "Scientist",
"scientists": "Scientists",
"smasher": "Smasher",
"snow_worker": "Snow Worker",
"snow_worker_female": "Snow Worker",
"striker": "Striker",
"school_kid": "School Kid",
"school_kid_female": "School Kid",
"school_kids": "School Kids",
"swimmer": "Swimmer",
"swimmer_female": "Swimmer",
"swimmers": "Swimmers",
"twins": "Twins",
"veteran": "Veteran",
"veteran_female": "Veteran",
"veteran_duo": "Veteran Duo",
"waiter": "Waiter",
"waitress": "Waitress",
"worker": "Worker",
"worker_female": "Worker",
"workers": "Workers",
"youngster": "Youngster",
"rocket_grunt": "Rocket Grunt",
"rocket_grunts": "Rocket Grunts",
"rocket_grunt_female": "Rocket Grunt",
"rocket_admin": "Rocket Admin",
"rocket_admin_female": "Rocket Admin",
"magma_grunt": "Magma Grunt",
"magma_grunt_female": "Magma Grunt",
"magma_grunts": "Magma Grunts",
"magma_admin": "Magma Admin",
"magma_admin_female": "Magma Admin",
"aqua_grunt": "Aqua Grunt",
"aqua_grunt_female": "Aqua Grunt",
"aqua_grunts": "Aqua Grunts",
"aqua_admin": "Aqua Admin",
"aqua_admin_female": "Aqua Admin",
"galactic_grunt": "Galactic Grunt",
"galactic_grunt_female": "Galactic Grunt",
"galactic_grunts": "Galactic Grunts",
"galactic_admin": "Galactic Admin",
"galactic_admin_female": "Galactic Admin",
"plasma_grunt": "Plasma Grunt",
"plasma_grunt_female": "Plasma Grunt",
"plasma_grunts": "Plasma Grunts",
"plasma_sage": "Plasma Sage",
"flare_grunt": "Flare Grunt",
"flare_grunt_female": "Flare Grunt",
"flare_grunts": "Flare Grunts",
"flare_admin": "Flare Admin",
"flare_admin_female": "Flare Admin",
} as const;
// Names of special trainers like gym leaders, elite four, and the champion
export const trainerNames: SimpleTranslationEntries = {
"brock": "Brock",
"misty": "Misty",
"lt_surge": "Lt Surge",
"erika": "Erika",
"janine": "Janine",
"sabrina": "Sabrina",
"blaine": "Blaine",
"giovanni": "Giovanni",
"falkner": "Falkner",
"bugsy": "Bugsy",
"whitney": "Whitney",
"morty": "Morty",
"chuck": "Chuck",
"jasmine": "Jasmine",
"pryce": "Pryce",
"clair": "Clair",
"roxanne": "Roxanne",
"brawly": "Brawly",
"wattson": "Wattson",
"flannery": "Flannery",
"norman": "Norman",
"winona": "Winona",
"tate": "Tate",
"liza": "Liza",
"juan": "Juan",
"roark": "Roark",
"gardenia": "Gardenia",
"maylene": "Maylene",
"crasher_wake": "Crasher Wake",
"fantina": "Fantina",
"byron": "Byron",
"candice": "Candice",
"volkner": "Volkner",
"cilan": "Cilan",
"chili": "Chili",
"cress": "Cress",
"cheren": "Cheren",
"lenora": "Lenora",
"roxie": "Roxie",
"burgh": "Burgh",
"elesa": "Elesa",
"clay": "Clay",
"skyla": "Skyla",
"brycen": "Brycen",
"drayden": "Drayden",
"marlon": "Marlon",
"viola": "Viola",
"grant": "Grant",
"korrina": "Korrina",
"ramos": "Ramos",
"clemont": "Clemont",
"valerie": "Valerie",
"olympia": "Olympia",
"wulfric": "Wulfric",
"milo": "Milo",
"nessa": "Nessa",
"kabu": "Kabu",
"bea": "Bea",
"allister": "Allister",
"opal": "Opal",
"bede": "Bede",
"gordie": "Gordie",
"melony": "Melony",
"piers": "Piers",
"marnie": "Marnie",
"raihan": "Raihan",
"katy": "Katy",
"brassius": "Brassius",
"iono": "Iono",
"kofu": "Kofu",
"larry": "Larry",
"ryme": "Ryme",
"tulip": "Tulip",
"grusha": "Grusha",
"lorelei": "Lorelei",
"bruno": "Bruno",
"agatha": "Agatha",
"lance": "Lance",
"will": "Will",
"koga": "Koga",
"karen": "Karen",
"sidney": "Sidney",
"phoebe": "Phoebe",
"glacia": "Glacia",
"drake": "Drake",
"aaron": "Aaron",
"bertha": "Bertha",
"flint": "Flint",
"lucian": "Lucian",
"shauntal": "Shauntal",
"marshal": "Marshal",
"grimsley": "Grimsley",
"caitlin": "Caitlin",
"malva": "Malva",
"siebold": "Siebold",
"wikstrom": "Wikstrom",
"drasna": "Drasna",
"hala": "Hala",
"molayne": "Molayne",
"olivia": "Olivia",
"acerola": "Acerola",
"kahili": "Kahili",
"rika": "Rika",
"poppy": "Poppy",
"hassel": "Hassel",
"crispin": "Crispin",
"amarys": "Amarys",
"lacey": "Lacey",
"drayton": "Drayton",
"blue": "Blue",
"red": "Red",
"steven": "Steven",
"wallace": "Wallace",
"cynthia": "Cynthia",
"alder": "Alder",
"iris": "Iris",
"diantha": "Diantha",
"hau": "Hau",
"geeta": "Geeta",
"nemona": "Nemona",
"kieran": "Kieran",
"leon": "Leon",
"rival": "Finn",
"rival_female": "Ivy",
"maxie": "Maxie",
"archie": "Archie",
"cyrus": "Cyrus",
"ghetsis": "Ghetsis",
"lysandre": "Lysandre",
// Double Names
"blue_red_double": "Blue & Red",
"red_blue_double": "Red & Blue",
"tate_liza_double": "Tate & Liza",
"liza_tate_double": "Liza & Tate",
"steven_wallace_double": "Steven & Wallace",
"wallace_steven_double": "Wallace & Steven",
"alder_iris_double": "Alder & Iris",
"iris_alder_double": "Iris & Alder",
"marnie_piers_double": "Marnie & Piers",
"piers_marnie_double": "Piers & Marnie",
} as const;

View File

@ -0,0 +1,44 @@
import { SimpleTranslationEntries } from "#app/interfaces/locales";
export const tutorial: SimpleTranslationEntries = {
intro: `PokéRogueへようこそログライク要素が\n加わったバトル中心のポケモンファンゲームです。
$このゲームは収益を上げずPokémonおよび使用される\n著作権資産に対する所有権を主張しません
$ゲームはまだ作業中ですが\nバグ報告はディスコードコミュニティをご利用ください
$ゲームが遅い場合は\nアクセラレーション`,
accessMenu: "メニューにアクセスするには、入力待ちの間にMキーまたはEscを押してください。\nメニューには設定やさまざまな機能が含まれています。",
menu: `このメニューから設定にアクセスできます。
$設定ではゲームスピード\nおよびその他のオプションを変更できます
$ここにはさまざまな他の機能もありますので\nぜひ確認してみてください`,
starterSelect: `この画面でZキーやSpaceを押してポケモンを選択できます。\n選んだポケモンは自分の最初のパーティーになります。
$最大6匹のパーティーで始めることができますが\nポケモンによってポイントがあり10
$捕まえたりふかさせたりすることで\n選択できる性別
$個体値も徐々に累積して高くなるので\n同じポケモンをたくさん捕まえてみてください`,
pokerus: `毎日ランダムでスターターの\n3種類に紫色の枠が表示されます。
$登録されたスターターの中にあれば\nパーティに追加してつよさを確認してみましょう`,
statChange: `ポケモンは交代しない限り、\n次のバトルでも能力変化が維持されます。
$その代わりに\n入る直前に自動的にリセットされます
$CキーまたはShiftキーを押し続けると\n現在のポケモンの能力変化を確認できます
$Vキーを押すと\n相手が使用した技も確認できます
$ただし\n使った技のみが表示されます`,
selectItem: `バトルが終わるたびに、\nランダムなアイテム3つの中から1つを選んで獲得します。
$種類は消耗品\n永続的なパッシブアイテムなど様々です
$ほとんどの消耗しない道具は\n効果が累積されます
$進化用など一部のアイテムは\n使用できる場合にのみ登場します
$持ち物を渡す機能を使用して\nポケモン同士で道具を持たせることもできます
$持ち物があれば\n右下に渡す機能が表示されます
$お金で消耗品を購入することもでき\nウェーブが進むにつれて購入可能な種類が増えます
$アイテムを選択すると次のウェーブに進むため\nまず消耗品の購入を行ってください`,
eggGacha: `この画面でポケモンのたまごクーポンを\nガチャができます。
$卵は戦闘を繰り返すうちにふかします\n珍しいほどもっと長くかかります
$ふかさせたポケモンはパーティーに追加されず\nスターティングに登録されます
$卵からふかしたポケモンは一般的に\n野生で捕まえたポケモンよりも高い個体値を持ちます
$一部のポケモンは卵からしか手に入りません
$各ガチャマシンがそれぞれ異なるボーナスを持っているため\n好きな方を使ってみてください!,`,
} as const;

11
src/locales/ja/voucher.ts Normal file
View File

@ -0,0 +1,11 @@
import { SimpleTranslationEntries } from "#app/interfaces/locales";
export const voucher: SimpleTranslationEntries = {
"vouchers": "クーポン",
"eggVoucher": "たまごクーポン",
"eggVoucherPlus": "たまごクーポンプラス",
"eggVoucherPremium": "たまごクーポンプレミアム",
"eggVoucherGold": "たまごクーポンゴールド",
"locked": "Locked",
"defeatTrainer": "Defeat {{trainerName}}"
} as const;

66
src/locales/ja/weather.ts Normal file
View File

@ -0,0 +1,66 @@
import { SimpleTranslationEntries } from "#app/interfaces/locales";
/**
* The weather namespace holds text displayed when weather is active during a battle
*/
export const weather: SimpleTranslationEntries = {
"sunnyStartMessage": "The sunlight got bright!",
"sunnyLapseMessage": "The sunlight is strong.",
"sunnyClearMessage": "The sunlight faded.",
"rainStartMessage": "A downpour started!",
"rainLapseMessage": "The downpour continues.",
"rainClearMessage": "The rain stopped.",
"sandstormStartMessage": "A sandstorm brewed!",
"sandstormLapseMessage": "The sandstorm rages.",
"sandstormClearMessage": "The sandstorm subsided.",
"sandstormDamageMessage": "{{pokemonNameWithAffix}} is buffeted\nby the sandstorm!",
"hailStartMessage": "It started to hail!",
"hailLapseMessage": "Hail continues to fall.",
"hailClearMessage": "The hail stopped.",
"hailDamageMessage": "{{pokemonNameWithAffix}} is pelted\nby the hail!",
"snowStartMessage": "It started to snow!",
"snowLapseMessage": "The snow is falling down.",
"snowClearMessage": "The snow stopped.",
"fogStartMessage": "A thick fog emerged!",
"fogLapseMessage": "The fog continues.",
"fogClearMessage": "The fog disappeared.",
"heavyRainStartMessage": "A heavy downpour started!",
"heavyRainLapseMessage": "The heavy downpour continues.",
"heavyRainClearMessage": "The heavy rain stopped.",
"harshSunStartMessage": "The sunlight got hot!",
"harshSunLapseMessage": "The sun is scorching hot.",
"harshSunClearMessage": "The harsh sunlight faded.",
"strongWindsStartMessage": "A heavy wind began!",
"strongWindsLapseMessage": "The wind blows intensely.",
"strongWindsEffectMessage": "The mysterious air current weakened the attack!",
"strongWindsClearMessage": "The heavy wind stopped."
};
export const terrain: SimpleTranslationEntries = {
"misty": "Misty",
"mistyStartMessage": "Mist swirled around the battlefield!",
"mistyClearMessage": "The mist disappeared from the battlefield.",
"mistyBlockMessage": "{{pokemonNameWithAffix}} surrounds itself with a protective mist!",
"electric": "Electric",
"electricStartMessage": "An electric current ran across the battlefield!",
"electricClearMessage": "The electricity disappeared from the battlefield.",
"grassy": "Grassy",
"grassyStartMessage": "Grass grew to cover the battlefield!",
"grassyClearMessage": "The grass disappeared from the battlefield.",
"psychic": "Psychic",
"psychicStartMessage": "The battlefield got weird!",
"psychicClearMessage": "The weirdness disappeared from the battlefield!",
"defaultBlockMessage": "{{pokemonNameWithAffix}} is protected by the {{terrainName}} Terrain!"
};

View File

@ -8,53 +8,67 @@ import { esConfig } from "#app/locales/es/config.js";
import { frConfig } from "#app/locales/fr/config.js"; import { frConfig } from "#app/locales/fr/config.js";
import { itConfig } from "#app/locales/it/config.js"; import { itConfig } from "#app/locales/it/config.js";
import { koConfig } from "#app/locales/ko/config.js"; import { koConfig } from "#app/locales/ko/config.js";
import { jaConfig } from "#app/locales/ja/config.js";
import { ptBrConfig } from "#app/locales/pt_BR/config.js"; import { ptBrConfig } from "#app/locales/pt_BR/config.js";
import { zhCnConfig } from "#app/locales/zh_CN/config.js"; import { zhCnConfig } from "#app/locales/zh_CN/config.js";
import { zhTwConfig } from "#app/locales/zh_TW/config.js"; import { zhTwConfig } from "#app/locales/zh_TW/config.js";
const unicodeHalfAndFullWidthForms = [ interface LoadingFontFaceProperty {
"U+FF00-FFEF" face: FontFace,
extraOptions?: { [key:string]: any },
only?: Array<string>
}
const unicodeRanges = {
fullwidth: "U+FF00-FFEF",
hangul: "U+1100-11FF,U+3130-318F,U+A960-A97F,U+AC00-D7AF,U+D7B0-D7FF",
kana: "U+3040-30FF",
CJKCommon: "U+2E80-2EFF,U+3000-303F,U+31C0-31EF,U+3200-32FF,U+3400-4DBF,U+F900-FAFF,U+FE30-FE4F",
CJKIdeograph: "U+4E00-9FFF",
};
const rangesByLanguage = {
korean: [unicodeRanges.CJKCommon, unicodeRanges.hangul].join(","),
chinese: [unicodeRanges.CJKCommon, unicodeRanges.fullwidth, unicodeRanges.CJKIdeograph].join(","),
japanese: [unicodeRanges.CJKCommon, unicodeRanges.fullwidth, unicodeRanges.kana, unicodeRanges.CJKIdeograph].join(",")
};
const fonts: Array<LoadingFontFaceProperty> = [
{
face: new FontFace("emerald", "url(./fonts/PokePT_Wansung.woff2)", { unicodeRange: rangesByLanguage.korean }),
},
{
face: new FontFace("pkmnems", "url(./fonts/PokePT_Wansung.woff2)", { unicodeRange: rangesByLanguage.korean }),
extraOptions: { sizeAdjust: "133%" },
},
// unicode (chinese)
{
face: new FontFace("emerald", "url(./fonts/unifont-15.1.05.subset.woff2)", { unicodeRange: rangesByLanguage.chinese }),
extraOptions: { sizeAdjust: "70%", format: "woff2" },
only: [ "en", "es", "fr", "it", "de", "zh", "pt", "ko" ],
},
{
face: new FontFace("pkmnems", "url(./fonts/unifont-15.1.05.subset.woff2)", { unicodeRange: rangesByLanguage.chinese }),
extraOptions: { format: "woff2" },
only: [ "en", "es", "fr", "it", "de", "zh", "pt", "ko" ],
},
// japanese
{
face: new FontFace("emerald", "url(./fonts/Galmuri11.subset.woff2)", { unicodeRange: rangesByLanguage.japanese }),
extraOptions: { sizeAdjust: "66%" },
only: [ "ja" ],
},
{
face: new FontFace("pkmnems", "url(./fonts/Galmuri9.subset.woff2)", { unicodeRange: rangesByLanguage.japanese }),
only: [ "ja" ],
},
]; ];
const unicodeCJK = [ async function initFonts(language: string | undefined) {
"U+2E80-2EFF", const results = await Promise.allSettled(
"U+3000-303F", fonts
"U+31C0-31EF", .filter(font => !font.only || font.only.some(exclude => language?.indexOf(exclude) === 0))
"U+3200-32FF", .map(font => Object.assign(font.face, font.extraOptions ?? {}).load())
"U+3400-4DBF", );
"U+4E00-9FFF",
"U+F900-FAFF",
"U+FE30-FE4F",
].join(",");
const unicodeHangul = [
"U+1100-11FF",
"U+3130-318F",
"U+A960-A97F",
"U+AC00-D7AF",
"U+D7B0-D7FF",
].join(",");
const fonts = [
// korean
new FontFace("emerald", "url(./fonts/PokePT_Wansung.ttf)", { unicodeRange: unicodeHangul}),
Object.assign(
new FontFace("pkmnems", "url(./fonts/PokePT_Wansung.ttf)", { unicodeRange: unicodeHangul}),
{ sizeAdjust: "133%" }
),
// unicode
Object.assign(
new FontFace("emerald", "url(./fonts/unifont-15.1.05.otf)", { unicodeRange: [unicodeCJK, unicodeHalfAndFullWidthForms].join(",") }),
{ sizeAdjust: "70%", format: "opentype" }
),
Object.assign(
new FontFace("pkmnems", "url(./fonts/unifont-15.1.05.otf)", { unicodeRange: [unicodeCJK, unicodeHalfAndFullWidthForms].join(",") }),
{ format: "opentype" }
),
];
async function initFonts() {
const results = await Promise.allSettled(fonts.map(font => font.load()));
for (const result of results) { for (const result of results) {
if (result.status === "fulfilled") { if (result.status === "fulfilled") {
document.fonts?.add(result.value); document.fonts?.add(result.value);
@ -94,7 +108,7 @@ export async function initI18n(): Promise<void> {
await i18next.init({ await i18next.init({
nonExplicitSupportedLngs: true, nonExplicitSupportedLngs: true,
fallbackLng: "en", fallbackLng: "en",
supportedLngs: ["en", "es", "fr", "it", "de", "zh", "pt", "ko"], supportedLngs: ["en", "es", "fr", "it", "de", "zh", "pt", "ko", "ja"],
defaultNS: "menu", defaultNS: "menu",
ns: Object.keys(enConfig), ns: Object.keys(enConfig),
detection: { detection: {
@ -132,11 +146,14 @@ export async function initI18n(): Promise<void> {
ko: { ko: {
...koConfig ...koConfig
}, },
ja: {
...jaConfig
}
}, },
postProcess: ["korean-postposition"], postProcess: ["korean-postposition"],
}); });
await initFonts(); await initFonts(localStorage.getItem("prLang"));
} }
export default i18next; export default i18next;

View File

@ -763,6 +763,10 @@ export function setSetting(scene: BattleScene, setting: string, value: integer):
label: "한국어", label: "한국어",
handler: () => changeLocaleHandler("ko") handler: () => changeLocaleHandler("ko")
}, },
{
label: "日本語",
handler: () => changeLocaleHandler("ja")
},
{ {
label: i18next.t("settings:back"), label: i18next.t("settings:back"),
handler: () => cancelHandler() handler: () => cancelHandler()

View File

@ -1,5 +1,5 @@
import BattleScene from "../battle-scene"; import BattleScene from "../battle-scene";
import { TextStyle, addTextObject } from "./text"; import { TextStyle, addTextObject, getTextStyleOptions } from "./text";
import { Mode } from "./ui"; import { Mode } from "./ui";
import UiHandler from "./ui-handler"; import UiHandler from "./ui-handler";
import { addWindow } from "./ui-theme"; import { addWindow } from "./ui-theme";
@ -42,6 +42,8 @@ export default abstract class AbstractOptionSelectUiHandler extends UiHandler {
protected scrollCursor: integer = 0; protected scrollCursor: integer = 0;
protected scale: number = 0.1666666667;
private cursorObj: Phaser.GameObjects.Image; private cursorObj: Phaser.GameObjects.Image;
constructor(scene: BattleScene, mode?: Mode) { constructor(scene: BattleScene, mode?: Mode) {
@ -51,7 +53,7 @@ export default abstract class AbstractOptionSelectUiHandler extends UiHandler {
abstract getWindowWidth(): integer; abstract getWindowWidth(): integer;
getWindowHeight(): integer { getWindowHeight(): integer {
return (Math.min((this.config?.options || []).length, this.config?.maxOptions || 99) + 1) * 16; return (Math.min((this.config?.options || []).length, this.config?.maxOptions || 99) + 1) * 96 * this.scale;
} }
setup() { setup() {
@ -69,6 +71,8 @@ export default abstract class AbstractOptionSelectUiHandler extends UiHandler {
this.optionSelectIcons = []; this.optionSelectIcons = [];
this.scale = getTextStyleOptions(TextStyle.WINDOW, (this.scene as BattleScene).uiTheme).scale;
this.setCursor(0); this.setCursor(0);
} }
@ -84,6 +88,7 @@ export default abstract class AbstractOptionSelectUiHandler extends UiHandler {
} }
this.optionSelectText = addTextObject(this.scene, 0, 0, options.map(o => o.item ? ` ${o.label}` : o.label).join("\n"), TextStyle.WINDOW, { maxLines: options.length }); this.optionSelectText = addTextObject(this.scene, 0, 0, options.map(o => o.item ? ` ${o.label}` : o.label).join("\n"), TextStyle.WINDOW, { maxLines: options.length });
this.optionSelectText.setLineSpacing(this.scale * 72);
this.optionSelectText.setName("text-option-select"); this.optionSelectText.setName("text-option-select");
this.optionSelectText.setLineSpacing(12); this.optionSelectText.setLineSpacing(12);
this.optionSelectContainer.add(this.optionSelectText); this.optionSelectContainer.add(this.optionSelectText);
@ -97,26 +102,26 @@ export default abstract class AbstractOptionSelectUiHandler extends UiHandler {
this.optionSelectBg.height = this.getWindowHeight(); this.optionSelectBg.height = this.getWindowHeight();
this.optionSelectText.setPositionRelative(this.optionSelectBg, 16, 9); this.optionSelectText.setPositionRelative(this.optionSelectBg, 12+24*this.scale, 2+42*this.scale);
options.forEach((option: OptionSelectItem, i: integer) => { options.forEach((option: OptionSelectItem, i: integer) => {
if (option.item) { if (option.item) {
const itemIcon = this.scene.add.sprite(0, 0, "items", option.item); const itemIcon = this.scene.add.sprite(0, 0, "items", option.item);
itemIcon.setScale(0.5); itemIcon.setScale(3 * this.scale);
this.optionSelectIcons.push(itemIcon); this.optionSelectIcons.push(itemIcon);
this.optionSelectContainer.add(itemIcon); this.optionSelectContainer.add(itemIcon);
itemIcon.setPositionRelative(this.optionSelectText, 6, 7 + 16 * i); itemIcon.setPositionRelative(this.optionSelectText, 36 * this.scale, 7 + i * (114 * this.scale - 3));
if (option.item === "candy") { if (option.item === "candy") {
const itemOverlayIcon = this.scene.add.sprite(0, 0, "items", "candy_overlay"); const itemOverlayIcon = this.scene.add.sprite(0, 0, "items", "candy_overlay");
itemOverlayIcon.setScale(0.5); itemOverlayIcon.setScale(3 * this.scale);
this.optionSelectIcons.push(itemOverlayIcon); this.optionSelectIcons.push(itemOverlayIcon);
this.optionSelectContainer.add(itemOverlayIcon); this.optionSelectContainer.add(itemOverlayIcon);
itemOverlayIcon.setPositionRelative(this.optionSelectText, 6, 7 + 16 * i); itemOverlayIcon.setPositionRelative(this.optionSelectText, 36 * this.scale, 7 + i * (114 * this.scale - 3));
itemIcon.setTint(argbFromRgba(Utils.rgbHexToRgba(option.itemArgs[0]))); itemIcon.setTint(argbFromRgba(Utils.rgbHexToRgba(option.itemArgs[0])));
itemOverlayIcon.setTint(argbFromRgba(Utils.rgbHexToRgba(option.itemArgs[1]))); itemOverlayIcon.setTint(argbFromRgba(Utils.rgbHexToRgba(option.itemArgs[1])));
@ -294,7 +299,8 @@ export default abstract class AbstractOptionSelectUiHandler extends UiHandler {
this.optionSelectContainer.add(this.cursorObj); this.optionSelectContainer.add(this.cursorObj);
} }
this.cursorObj.setPositionRelative(this.optionSelectBg, 12, 17 + this.cursor * 16); this.cursorObj.setScale(this.scale * 6);
this.cursorObj.setPositionRelative(this.optionSelectBg, 12, 102*this.scale + this.cursor * (114 * this.scale - 3));
return changed; return changed;
} }

View File

@ -1,7 +1,7 @@
import { CommandPhase } from "../phases"; import { CommandPhase } from "../phases";
import BattleScene from "../battle-scene"; import BattleScene from "../battle-scene";
import { getPokeballName } from "../data/pokeball"; import { getPokeballName } from "../data/pokeball";
import { addTextObject, TextStyle } from "./text"; import { addTextObject, getTextStyleOptions, TextStyle } from "./text";
import { Command } from "./command-ui-handler"; import { Command } from "./command-ui-handler";
import { Mode } from "./ui"; import { Mode } from "./ui";
import UiHandler from "./ui-handler"; import UiHandler from "./ui-handler";
@ -15,6 +15,8 @@ export default class BallUiHandler extends UiHandler {
private cursorObj: Phaser.GameObjects.Image; private cursorObj: Phaser.GameObjects.Image;
private scale: number = 0.1666666667;
constructor(scene: BattleScene) { constructor(scene: BattleScene) {
super(scene, Mode.BALL); super(scene, Mode.BALL);
} }
@ -22,13 +24,7 @@ export default class BallUiHandler extends UiHandler {
setup() { setup() {
const ui = this.getUi(); const ui = this.getUi();
this.pokeballSelectContainer = this.scene.add.container((this.scene.game.canvas.width / 6) - 115, -49); this.scale = getTextStyleOptions(TextStyle.WINDOW, this.scene.uiTheme).scale;
this.pokeballSelectContainer.setVisible(false);
ui.add(this.pokeballSelectContainer);
this.pokeballSelectBg = addWindow(this.scene, 0, 0, 114, 112);
this.pokeballSelectBg.setOrigin(0, 1);
this.pokeballSelectContainer.add(this.pokeballSelectBg);
let optionsTextContent = ""; let optionsTextContent = "";
@ -37,14 +33,22 @@ export default class BallUiHandler extends UiHandler {
} }
optionsTextContent += "Cancel"; optionsTextContent += "Cancel";
const optionsText = addTextObject(this.scene, 0, 0, optionsTextContent, TextStyle.WINDOW, { align: "right", maxLines: 6 }); const optionsText = addTextObject(this.scene, 0, 0, optionsTextContent, TextStyle.WINDOW, { align: "right", maxLines: 6 });
const optionsTextWidth = optionsText.displayWidth;
this.pokeballSelectContainer = this.scene.add.container((this.scene.game.canvas.width / 6) - 51 - Math.max(64, optionsTextWidth), -49);
this.pokeballSelectContainer.setVisible(false);
ui.add(this.pokeballSelectContainer);
this.pokeballSelectBg = addWindow(this.scene, 0, 0, 50 + Math.max(64, optionsTextWidth), 32 + 480 * this.scale);
this.pokeballSelectBg.setOrigin(0, 1);
this.pokeballSelectContainer.add(this.pokeballSelectBg);
this.pokeballSelectContainer.add(optionsText);
optionsText.setOrigin(0, 0); optionsText.setOrigin(0, 0);
optionsText.setPositionRelative(this.pokeballSelectBg, 42, 9); optionsText.setPositionRelative(this.pokeballSelectBg, 42, 9);
optionsText.setLineSpacing(12); optionsText.setLineSpacing(this.scale * 72);
this.pokeballSelectContainer.add(optionsText);
this.countsText = addTextObject(this.scene, 0, 0, "", TextStyle.WINDOW, { maxLines: 5 }); this.countsText = addTextObject(this.scene, 0, 0, "", TextStyle.WINDOW, { maxLines: 5 });
this.countsText.setPositionRelative(this.pokeballSelectBg, 18, 9); this.countsText.setPositionRelative(this.pokeballSelectBg, 18, 9);
this.countsText.setLineSpacing(12); this.countsText.setLineSpacing(this.scale * 72);
this.pokeballSelectContainer.add(this.countsText); this.pokeballSelectContainer.add(this.countsText);
this.setCursor(0); this.setCursor(0);
@ -114,7 +118,8 @@ export default class BallUiHandler extends UiHandler {
this.pokeballSelectContainer.add(this.cursorObj); this.pokeballSelectContainer.add(this.cursorObj);
} }
this.cursorObj.setPositionRelative(this.pokeballSelectBg, 12, 17 + 16 * this.cursor); this.cursorObj.setScale(this.scale * 6);
this.cursorObj.setPositionRelative(this.pokeballSelectBg, 12, 15 + (6 + this.cursor * 96) * this.scale);
return ret; return ret;
} }

View File

@ -1,6 +1,6 @@
import BattleScene from "../battle-scene"; import BattleScene from "../battle-scene";
import { Mode } from "./ui"; import { Mode } from "./ui";
import { TextStyle, addTextObject, getEggTierTextTint } from "./text"; import { TextStyle, addTextObject, getEggTierTextTint, getTextStyleOptions } from "./text";
import MessageUiHandler from "./message-ui-handler"; import MessageUiHandler from "./message-ui-handler";
import * as Utils from "../utils"; import * as Utils from "../utils";
import { Egg, getLegendaryGachaSpeciesForTimestamp, IEggOptions } from "../data/egg"; import { Egg, getLegendaryGachaSpeciesForTimestamp, IEggOptions } from "../data/egg";
@ -36,6 +36,8 @@ export default class EggGachaUiHandler extends MessageUiHandler {
private transitionCancelled: boolean; private transitionCancelled: boolean;
private defaultText: string; private defaultText: string;
private scale: number = 0.1666666667;
constructor(scene: BattleScene) { constructor(scene: BattleScene) {
super(scene, Mode.EGG_GACHA); super(scene, Mode.EGG_GACHA);
@ -50,6 +52,7 @@ export default class EggGachaUiHandler extends MessageUiHandler {
setup() { setup() {
this.gachaCursor = 0; this.gachaCursor = 0;
this.scale = getTextStyleOptions(TextStyle.WINDOW, this.scene.uiTheme).scale;
const ui = this.getUi(); const ui = this.getUi();
@ -200,7 +203,7 @@ export default class EggGachaUiHandler extends MessageUiHandler {
this.eggGachaContainer.add(this.eggGachaOptionsContainer); this.eggGachaContainer.add(this.eggGachaOptionsContainer);
this.eggGachaOptionSelectBg = addWindow(this.scene, 0, 0, 96, 112); this.eggGachaOptionSelectBg = addWindow(this.scene, 0, 0, 96, 16 + 576 * this.scale);
this.eggGachaOptionSelectBg.setOrigin(1, 1); this.eggGachaOptionSelectBg.setOrigin(1, 1);
this.eggGachaOptionsContainer.add(this.eggGachaOptionSelectBg); this.eggGachaOptionsContainer.add(this.eggGachaOptionSelectBg);
@ -243,8 +246,8 @@ export default class EggGachaUiHandler extends MessageUiHandler {
pullOptions.forEach((option, i) => { pullOptions.forEach((option, i) => {
const icon = this.scene.add.sprite(0, 0, "items", option.icon); const icon = this.scene.add.sprite(0, 0, "items", option.icon);
icon.setScale(0.5); icon.setScale(3 * this.scale);
icon.setPositionRelative(this.eggGachaOptionSelectBg, 20, 17 + i * 16); icon.setPositionRelative(this.eggGachaOptionSelectBg, 20, 9 + (48 + i * 96) * this.scale);
this.eggGachaOptionsContainer.add(icon); this.eggGachaOptionsContainer.add(icon);
}); });
@ -735,7 +738,8 @@ export default class EggGachaUiHandler extends MessageUiHandler {
this.eggGachaOptionsContainer.add(this.cursorObj); this.eggGachaOptionsContainer.add(this.cursorObj);
} }
this.cursorObj.setPositionRelative(this.eggGachaOptionSelectBg, 10, 17 + this.cursor * 16); this.cursorObj.setScale(this.scale * 6);
this.cursorObj.setPositionRelative(this.eggGachaOptionSelectBg, 10, 9 + (48 + this.cursor * 96) * this.scale);
return ret; return ret;
} }

View File

@ -1,5 +1,5 @@
import BattleScene, { bypassLogin } from "../battle-scene"; import BattleScene, { bypassLogin } from "../battle-scene";
import { TextStyle, addTextObject } from "./text"; import { TextStyle, addTextObject, getTextStyleOptions } from "./text";
import { Mode } from "./ui"; import { Mode } from "./ui";
import * as Utils from "../utils"; import * as Utils from "../utils";
import { addWindow } from "./ui-theme"; import { addWindow } from "./ui-theme";
@ -46,6 +46,8 @@ export default class MenuUiHandler extends MessageUiHandler {
protected manageDataConfig: OptionSelectConfig; protected manageDataConfig: OptionSelectConfig;
protected communityConfig: OptionSelectConfig; protected communityConfig: OptionSelectConfig;
protected scale: number = 0.1666666667;
public bgmBar: BgmBar; public bgmBar: BgmBar;
@ -109,10 +111,16 @@ export default class MenuUiHandler extends MessageUiHandler {
this.optionSelectText = addTextObject(this.scene, 0, 0, this.menuOptions.map(o => `${i18next.t(`menuUiHandler:${MenuOptions[o]}`)}`).join("\n"), TextStyle.WINDOW, { maxLines: this.menuOptions.length }); this.optionSelectText = addTextObject(this.scene, 0, 0, this.menuOptions.map(o => `${i18next.t(`menuUiHandler:${MenuOptions[o]}`)}`).join("\n"), TextStyle.WINDOW, { maxLines: this.menuOptions.length });
this.optionSelectText.setLineSpacing(12); this.optionSelectText.setLineSpacing(12);
this.menuBg = addWindow(this.scene, (this.scene.game.canvas.width / 6) - (this.optionSelectText.displayWidth + 25), 0, this.optionSelectText.displayWidth + 23, (this.scene.game.canvas.height / 6) - 2); this.scale = getTextStyleOptions(TextStyle.WINDOW, (this.scene as BattleScene).uiTheme).scale;
this.menuBg = addWindow(this.scene,
(this.scene.game.canvas.width / 6) - (this.optionSelectText.displayWidth + 25),
0,
this.optionSelectText.displayWidth + 19+24*this.scale,
(this.scene.game.canvas.height / 6) - 2
);
this.menuBg.setOrigin(0, 0); this.menuBg.setOrigin(0, 0);
this.optionSelectText.setPositionRelative(this.menuBg, 14, 6); this.optionSelectText.setPositionRelative(this.menuBg, 10+24*this.scale, 6);
this.menuContainer.add(this.menuBg); this.menuContainer.add(this.menuBg);
@ -517,7 +525,8 @@ export default class MenuUiHandler extends MessageUiHandler {
this.menuContainer.add(this.cursorObj); this.menuContainer.add(this.cursorObj);
} }
this.cursorObj.setPositionRelative(this.menuBg, 7, 9 + this.cursor * 16); this.cursorObj.setScale(this.scale * 6);
this.cursorObj.setPositionRelative(this.menuBg, 7, 6 + (18 + this.cursor * 96) * this.scale);
return ret; return ret;
} }

View File

@ -52,7 +52,7 @@ export default class ModifierSelectUiHandler extends AwaitableUiHandler {
const canvas = document.createElement("canvas"); const canvas = document.createElement("canvas");
const context = canvas.getContext("2d"); const context = canvas.getContext("2d");
const [ , styleOptions, , , ] = getTextStyleOptions(TextStyle.PARTY, (this.scene as BattleScene).uiTheme); const styleOptions = getTextStyleOptions(TextStyle.PARTY, (this.scene as BattleScene).uiTheme).styleOptions;
context.font = styleOptions.fontSize + "px " + styleOptions.fontFamily; context.font = styleOptions.fontSize + "px " + styleOptions.fontFamily;
this.transferButtonWidth = context.measureText(i18next.t("modifierSelectUiHandler:transfer")).width; this.transferButtonWidth = context.measureText(i18next.t("modifierSelectUiHandler:transfer")).width;
this.checkButtonWidth = context.measureText(i18next.t("modifierSelectUiHandler:checkTeam")).width; this.checkButtonWidth = context.measureText(i18next.t("modifierSelectUiHandler:checkTeam")).width;

View File

@ -105,7 +105,7 @@ export default class AbstractSettingsUiHandler extends UiHandler {
this.optionsContainer.add(this.settingLabels[s]); this.optionsContainer.add(this.settingLabels[s]);
this.optionValueLabels.push(setting.options.map((option, o) => { this.optionValueLabels.push(setting.options.map((option, o) => {
const valueLabel = addTextObject(this.scene, 0, 0, option.label, setting.default === o ? TextStyle.SETTINGS_SELECTED : TextStyle.WINDOW); const valueLabel = addTextObject(this.scene, 0, 0, option.label, setting.default === o ? TextStyle.SETTINGS_SELECTED : TextStyle.SETTINGS_VALUE);
valueLabel.setOrigin(0, 0); valueLabel.setOrigin(0, 0);
this.optionsContainer.add(valueLabel); this.optionsContainer.add(valueLabel);
@ -314,8 +314,8 @@ export default class AbstractSettingsUiHandler extends UiHandler {
const lastCursor = this.optionCursors[settingIndex]; const lastCursor = this.optionCursors[settingIndex];
const lastValueLabel = this.optionValueLabels[settingIndex][lastCursor]; const lastValueLabel = this.optionValueLabels[settingIndex][lastCursor];
lastValueLabel.setColor(this.getTextColor(TextStyle.WINDOW)); lastValueLabel.setColor(this.getTextColor(TextStyle.SETTINGS_VALUE));
lastValueLabel.setShadowColor(this.getTextColor(TextStyle.WINDOW, true)); lastValueLabel.setShadowColor(this.getTextColor(TextStyle.SETTINGS_VALUE, true));
this.optionCursors[settingIndex] = cursor; this.optionCursors[settingIndex] = cursor;

View File

@ -79,6 +79,12 @@ export default class SettingsDisplayUiHandler extends AbstractSettingsUiHandler
label: "한국어", label: "한국어",
}; };
break; break;
case "ja":
this.settings[languageIndex].options[0] = {
value: "日本語",
label: "日本語",
};
break;
default: default:
this.settings[languageIndex].options[0] = { this.settings[languageIndex].options[0] = {
value: "English", value: "English",

View File

@ -103,6 +103,10 @@ const languageSettings: { [key: string]: LanguageSetting } = {
"ko":{ "ko":{
starterInfoTextSize: "52px", starterInfoTextSize: "52px",
instructionTextSize: "38px", instructionTextSize: "38px",
},
"ja":{
starterInfoTextSize: "51px",
instructionTextSize: "38px",
} }
}; };

View File

@ -5,6 +5,7 @@ import BBCodeText from "phaser3-rex-plugins/plugins/gameobjects/tagtext/bbcodete
import InputText from "phaser3-rex-plugins/plugins/inputtext"; import InputText from "phaser3-rex-plugins/plugins/inputtext";
import BattleScene from "../battle-scene"; import BattleScene from "../battle-scene";
import { ModifierTier } from "../modifier/modifier-tier"; import { ModifierTier } from "../modifier/modifier-tier";
import i18next from "#app/plugins/i18n.js";
export enum TextStyle { export enum TextStyle {
MESSAGE, MESSAGE,
@ -24,6 +25,7 @@ export enum TextStyle {
MONEY, MONEY,
STATS_LABEL, STATS_LABEL,
STATS_VALUE, STATS_VALUE,
SETTINGS_VALUE,
SETTINGS_LABEL, SETTINGS_LABEL,
SETTINGS_SELECTED, SETTINGS_SELECTED,
SETTINGS_LOCKED, SETTINGS_LOCKED,
@ -38,44 +40,64 @@ export enum TextStyle {
BGM_BAR BGM_BAR
} }
export interface TextStyleOptions {
scale: number,
styleOptions: Phaser.Types.GameObjects.Text.TextStyle | InputText.IConfig,
shadowColor: string,
shadowXpos: number,
shadowYpos: number
}
export function addTextObject(scene: Phaser.Scene, x: number, y: number, content: string, style: TextStyle, extraStyleOptions?: Phaser.Types.GameObjects.Text.TextStyle): Phaser.GameObjects.Text { export function addTextObject(scene: Phaser.Scene, x: number, y: number, content: string, style: TextStyle, extraStyleOptions?: Phaser.Types.GameObjects.Text.TextStyle): Phaser.GameObjects.Text {
const [ scale, styleOptions, shadowColor, shadowXpos, shadowYpos ] = getTextStyleOptions(style, (scene as BattleScene).uiTheme, extraStyleOptions); const { scale, styleOptions, shadowColor, shadowXpos, shadowYpos } = getTextStyleOptions(style, (scene as BattleScene).uiTheme, extraStyleOptions);
const ret = scene.add.text(x, y, content, styleOptions); const ret = scene.add.text(x, y, content, styleOptions);
ret.setScale(scale); ret.setScale(scale);
ret.setShadow(shadowXpos, shadowYpos, shadowColor); ret.setShadow(shadowXpos, shadowYpos, shadowColor);
if (!(styleOptions as Phaser.Types.GameObjects.Text.TextStyle).lineSpacing) { if (!(styleOptions as Phaser.Types.GameObjects.Text.TextStyle).lineSpacing) {
ret.setLineSpacing(5); ret.setLineSpacing(scale * 30);
}
if (ret.lineSpacing < 12 && i18next.resolvedLanguage === "ja") {
ret.setLineSpacing(ret.lineSpacing + 35);
} }
return ret; return ret;
} }
export function setTextStyle(obj: Phaser.GameObjects.Text, scene: Phaser.Scene, style: TextStyle, extraStyleOptions?: Phaser.Types.GameObjects.Text.TextStyle) { export function setTextStyle(obj: Phaser.GameObjects.Text, scene: Phaser.Scene, style: TextStyle, extraStyleOptions?: Phaser.Types.GameObjects.Text.TextStyle) {
const [ scale, styleOptions, shadowColor, shadowXpos, shadowYpos ] = getTextStyleOptions(style, (scene as BattleScene).uiTheme, extraStyleOptions); const { scale, styleOptions, shadowColor, shadowXpos, shadowYpos } = getTextStyleOptions(style, (scene as BattleScene).uiTheme, extraStyleOptions);
obj.setScale(scale); obj.setScale(scale);
obj.setShadow(shadowXpos, shadowYpos, shadowColor); obj.setShadow(shadowXpos, shadowYpos, shadowColor);
if (!(styleOptions as Phaser.Types.GameObjects.Text.TextStyle).lineSpacing) { if (!(styleOptions as Phaser.Types.GameObjects.Text.TextStyle).lineSpacing) {
obj.setLineSpacing(5); obj.setLineSpacing(scale * 30);
}
if (obj.lineSpacing < 12 && i18next.resolvedLanguage === "ja") {
obj.setLineSpacing(obj.lineSpacing + 35);
} }
} }
export function addBBCodeTextObject(scene: Phaser.Scene, x: number, y: number, content: string, style: TextStyle, extraStyleOptions?: Phaser.Types.GameObjects.Text.TextStyle): BBCodeText { export function addBBCodeTextObject(scene: Phaser.Scene, x: number, y: number, content: string, style: TextStyle, extraStyleOptions?: Phaser.Types.GameObjects.Text.TextStyle): BBCodeText {
const [ scale, styleOptions, shadowColor, shadowXpos, shadowYpos ] = getTextStyleOptions(style, (scene as BattleScene).uiTheme, extraStyleOptions); const { scale, styleOptions, shadowColor, shadowXpos, shadowYpos } = getTextStyleOptions(style, (scene as BattleScene).uiTheme, extraStyleOptions);
const ret = new BBCodeText(scene, x, y, content, styleOptions as BBCodeText.TextStyle); const ret = new BBCodeText(scene, x, y, content, styleOptions as BBCodeText.TextStyle);
scene.add.existing(ret); scene.add.existing(ret);
ret.setScale(scale); ret.setScale(scale);
ret.setShadow(shadowXpos, shadowYpos, shadowColor); ret.setShadow(shadowXpos, shadowYpos, shadowColor);
if (!(styleOptions as BBCodeText.TextStyle).lineSpacing) { if (!(styleOptions as BBCodeText.TextStyle).lineSpacing) {
ret.setLineSpacing(10); ret.setLineSpacing(scale * 60);
}
if (ret.lineSpacing < 12 && i18next.resolvedLanguage === "ja") {
ret.setLineSpacing(ret.lineSpacing + 35);
} }
return ret; return ret;
} }
export function addTextInputObject(scene: Phaser.Scene, x: number, y: number, width: number, height: number, style: TextStyle, extraStyleOptions?: InputText.IConfig): InputText { export function addTextInputObject(scene: Phaser.Scene, x: number, y: number, width: number, height: number, style: TextStyle, extraStyleOptions?: InputText.IConfig): InputText {
const [ scale, styleOptions ] = getTextStyleOptions(style, (scene as BattleScene).uiTheme, extraStyleOptions); const { scale, styleOptions } = getTextStyleOptions(style, (scene as BattleScene).uiTheme, extraStyleOptions);
const ret = new InputText(scene, x, y, width, height, styleOptions as InputText.IConfig); const ret = new InputText(scene, x, y, width, height, styleOptions as InputText.IConfig);
scene.add.existing(ret); scene.add.existing(ret);
@ -84,10 +106,10 @@ export function addTextInputObject(scene: Phaser.Scene, x: number, y: number, wi
return ret; return ret;
} }
export function getTextStyleOptions(style: TextStyle, uiTheme: UiTheme, extraStyleOptions?: Phaser.Types.GameObjects.Text.TextStyle): [ number, Phaser.Types.GameObjects.Text.TextStyle | InputText.IConfig, string, number, number ] { export function getTextStyleOptions(style: TextStyle, uiTheme: UiTheme, extraStyleOptions?: Phaser.Types.GameObjects.Text.TextStyle): TextStyleOptions {
let shadowXpos = 4; let shadowXpos = 4;
let shadowYpos = 5; let shadowYpos = 5;
const scale = 0.1666666667; let scale = 0.1666666667;
const defaultFontSize = 96; const defaultFontSize = 96;
let styleOptions: Phaser.Types.GameObjects.Text.TextStyle = { let styleOptions: Phaser.Types.GameObjects.Text.TextStyle = {
@ -99,6 +121,11 @@ export function getTextStyleOptions(style: TextStyle, uiTheme: UiTheme, extraSty
} }
}; };
if (i18next.resolvedLanguage === "ja") {
scale = 0.1388888889;
styleOptions.padding = { top:2, bottom:4 };
}
switch (style) { switch (style) {
case TextStyle.SUMMARY: case TextStyle.SUMMARY:
case TextStyle.SUMMARY_ALT: case TextStyle.SUMMARY_ALT:
@ -164,7 +191,7 @@ export function getTextStyleOptions(style: TextStyle, uiTheme: UiTheme, extraSty
styleOptions = Object.assign(styleOptions, extraStyleOptions); styleOptions = Object.assign(styleOptions, extraStyleOptions);
} }
return [ scale, styleOptions, shadowColor, shadowXpos, shadowYpos ]; return { scale, styleOptions, shadowColor, shadowXpos, shadowYpos };
} }
export function getBBCodeFrag(content: string, textStyle: TextStyle, uiTheme: UiTheme = UiTheme.DEFAULT): string { export function getBBCodeFrag(content: string, textStyle: TextStyle, uiTheme: UiTheme = UiTheme.DEFAULT): string {
@ -179,6 +206,7 @@ export function getTextColor(textStyle: TextStyle, shadow?: boolean, uiTheme: Ui
case TextStyle.MOVE_INFO_CONTENT: case TextStyle.MOVE_INFO_CONTENT:
case TextStyle.MOVE_PP_FULL: case TextStyle.MOVE_PP_FULL:
case TextStyle.TOOLTIP_CONTENT: case TextStyle.TOOLTIP_CONTENT:
case TextStyle.SETTINGS_VALUE:
if (uiTheme) { if (uiTheme) {
return !shadow ? "#484848" : "#d0d0c8"; return !shadow ? "#484848" : "#d0d0c8";
} }

View File

@ -2,7 +2,7 @@ import BattleScene from "../battle-scene";
import OptionSelectUiHandler from "./settings/option-select-ui-handler"; import OptionSelectUiHandler from "./settings/option-select-ui-handler";
import { Mode } from "./ui"; import { Mode } from "./ui";
import * as Utils from "../utils"; import * as Utils from "../utils";
import { TextStyle, addTextObject } from "./text"; import { TextStyle, addTextObject, getTextStyleOptions } from "./text";
import { getBattleCountSplashMessage, getSplashMessages } from "../data/splash-messages"; import { getBattleCountSplashMessage, getSplashMessages } from "../data/splash-messages";
import i18next from "i18next"; import i18next from "i18next";
import { TimedEventDisplay } from "#app/timed-event-manager.js"; import { TimedEventDisplay } from "#app/timed-event-manager.js";
@ -40,7 +40,14 @@ export default class TitleUiHandler extends OptionSelectUiHandler {
this.titleContainer.add(this.eventDisplay); this.titleContainer.add(this.eventDisplay);
} }
this.playerCountLabel = addTextObject(this.scene, (this.scene.game.canvas.width / 6) - 2, (this.scene.game.canvas.height / 6) - 109, `? ${i18next.t("menu:playersOnline")}`, TextStyle.MESSAGE, { fontSize: "54px" }); this.playerCountLabel = addTextObject(
this.scene,
(this.scene.game.canvas.width / 6) - 2,
(this.scene.game.canvas.height / 6) - 13 - 576 * getTextStyleOptions(TextStyle.WINDOW, this.scene.uiTheme).scale,
`? ${i18next.t("menu:playersOnline")}`,
TextStyle.MESSAGE,
{ fontSize: "54px" }
);
this.playerCountLabel.setOrigin(1, 0); this.playerCountLabel.setOrigin(1, 0);
this.titleContainer.add(this.playerCountLabel); this.titleContainer.add(this.playerCountLabel);

View File

@ -454,7 +454,7 @@ export default class UI extends Phaser.GameObjects.Container {
this.modeChain.push(this.mode); this.modeChain.push(this.mode);
} }
this.mode = mode; this.mode = mode;
const touchControls = document.getElementById("touchControls"); const touchControls = document?.getElementById("touchControls");
if (touchControls) { if (touchControls) {
touchControls.dataset.uiMode = Mode[mode]; touchControls.dataset.uiMode = Mode[mode];
} }

View File

@ -466,6 +466,7 @@ export function verifyLang(lang?: string): boolean {
case "zh-TW": case "zh-TW":
case "pt-BR": case "pt-BR":
case "ko": case "ko":
case "ja":
return true; return true;
default: default:
return false; return false;