mirror of
https://github.com/smogon/pokemon-showdown
synced 2026-08-24 02:26:16 -04:00
Translated battle text (#12247)
Some checks failed
Node.js CI / build (18.x) (push) Failing after 3s
Some checks failed
Node.js CI / build (18.x) (push) Failing after 3s
This adds translated text for use in battles, sourced from PokeAPI/pokeapi@c0a9bc7, projectpokemon/champout@0c11416, and abcboy101/poke-corpus@9dbc7fd And also my personal Japanese, Chinese, and Spanish knowledge. Also I had to learn so much I didn't want to learn about Korean grammar.
This commit is contained in:
parent
20b129d594
commit
5e8ead64b3
68 changed files with 136422 additions and 195 deletions
|
|
@ -448,6 +448,7 @@ export const Aliases: import('../sim/dex').AliasesTable = {
|
|||
wash: "Rotom-Wash",
|
||||
ham: "Samurott-Hisui",
|
||||
hamurott: "Samurott-Hisui",
|
||||
quagsirepaldea: "Clodsire",
|
||||
snowslash: "Sandslash-Alola",
|
||||
shaymins: "Shaymin-Sky",
|
||||
skymin: "Shaymin-Sky",
|
||||
|
|
|
|||
|
|
@ -13678,7 +13678,7 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
|
|||
onTryMovePriority: -1,
|
||||
onTryMove(pokemon, target, move) {
|
||||
if (move.type === 'Fire') {
|
||||
this.add('-activate', pokemon, 'move: Powder');
|
||||
this.add('-activate', pokemon, 'move: Powder', `[move] ${move.name}`);
|
||||
this.damage(this.clampIntRange(Math.round(pokemon.maxhp / 4), 1));
|
||||
this.attrLastMove('[still]');
|
||||
return false;
|
||||
|
|
|
|||
|
|
@ -2451,7 +2451,7 @@ export const Rulesets: import('../sim/dex-formats').FormatDataTable = {
|
|||
if (!set.item) return;
|
||||
const item = this.dex.items.get(set.item);
|
||||
if (!/^tr\d\d/i.test(item.name)) return;
|
||||
const moveName = item.desc.split('move ')[1].split('.')[0];
|
||||
const moveName = this.dex.text.get(item).desc.split('move ')[1].split('.')[0];
|
||||
if (set.moves.map(this.toID).includes(this.toID(moveName))) {
|
||||
return [
|
||||
`${set.species} can't run ${item.name} (${moveName}) as its item because it already has that move in its moveset.`,
|
||||
|
|
@ -2517,7 +2517,7 @@ export const Rulesets: import('../sim/dex-formats').FormatDataTable = {
|
|||
for (const pokemon of this.getAllPokemon()) {
|
||||
const item = pokemon.getItem();
|
||||
if (/^tr\d\d/i.test(item.name)) {
|
||||
const move = this.dex.moves.get(item.desc.split('move ')[1].split('.')[0]);
|
||||
const move = this.dex.moves.get(this.dex.text.get(item).desc.split('move ')[1].split('.')[0]);
|
||||
const pp = this.calculatePP(move);
|
||||
pokemon.moveSlots = (pokemon as any).baseMoveSlots = [
|
||||
...pokemon.baseMoveSlots, {
|
||||
|
|
|
|||
80
data/text/README.md
Normal file
80
data/text/README.md
Normal file
|
|
@ -0,0 +1,80 @@
|
|||
Showdown text
|
||||
=============
|
||||
|
||||
Descriptions mostly by Marty
|
||||
|
||||
Translated names and descriptions sourced from PokeAPI/pokeapi commit c0a9bc75af3a455cdfa27dde21e4ec95aedd3f25
|
||||
|
||||
Translated battle messages in Champions sourced from projectpokemon/champout commit 0c1141656e1a66ae304ac3ee1e7126a00914d1f2
|
||||
|
||||
Translated battle messages from oldgens sourced from abcboy101/poke-corpus commit 9dbc7fdc8bf49042d8ae47a42fed67c94903a4b5
|
||||
|
||||
Battle message grammar
|
||||
----------------------
|
||||
|
||||
Battle message placeholders look like `[POKEMON]`, `[MOVE]`, and `[ITEM]`.
|
||||
|
||||
Languages can add modifiers using colons:
|
||||
|
||||
[ITEM:definite:accusative]
|
||||
[TRAINER:definite:capitalize]
|
||||
[POKEMON:de]
|
||||
[POKEMON:topic]
|
||||
|
||||
Modifiers used by Pokémon's battle text:
|
||||
|
||||
- `definite` - add the appropriate definite article (English "the")
|
||||
- `indefinite` - add the appropriate indefinite article (English "a" or "an")
|
||||
- `nominative` - use the nominative case (like English "I")
|
||||
- `accusative` - use the accusative case (like English "me")
|
||||
- `singular` - force singular grammatical agreement
|
||||
- `plural` - force plural grammatical agreement
|
||||
- `masculine` - force masculine grammatical agreement
|
||||
- `capitalize` - capitalize the generated grammatical form
|
||||
- `classified` - use Pokémon's `ItemClassified` form instead of its ordinary item-name form
|
||||
- `a` - add French, Italian, or Spanish `a`/`à`, including contractions or elision
|
||||
- `de` - add French or Spanish `de`, including contractions or elision
|
||||
- `di` - add Italian `di`, including contractions
|
||||
- `su` - add Italian `su`, including contractions
|
||||
- `e` - select Italian `e` or `ed`
|
||||
- `y` - select Spanish `y` or `e`
|
||||
- `topic` - add the Korean topic particle `은` or `는`
|
||||
- `object` - add the Korean object particle `을` or `를`
|
||||
- `subject` - add the Korean subject particle `이` or `가`
|
||||
- `conjunctive` - add the Korean conjunctive particle `과` or `와`
|
||||
- `directional` - add the Korean directional particle `으로` or `로`
|
||||
|
||||
Modifiers can be in any order.
|
||||
|
||||
Text can be inflected with `[INFLECT]`:
|
||||
|
||||
[INFLECT:ITEM:ms=est détruit:fs=est détruite:mp=sont détruits:fp=sont détruites]
|
||||
|
||||
The second field names the placeholder to inflect on. The rest are:
|
||||
|
||||
- `s=` - show if the placeholder is singular
|
||||
- `p=` - show if the placeholder is plural
|
||||
- `ms=` - show if the placeholder is masculine singular
|
||||
- `mp=` - show if the placeholder is masculine plural
|
||||
- `fs=` - show if the placeholder is feminine singular
|
||||
- `fp=` - show if the placeholder is feminine plural
|
||||
|
||||
Text grammar
|
||||
------------
|
||||
|
||||
Gender, singular/plural, and classified versions are stored for item and stat names, in languages that use them (Spanish, French, Italian, and German):
|
||||
|
||||
name: "Agua Mística",
|
||||
grammar: "fu",
|
||||
articleRule: "stressed-a",
|
||||
classified: {
|
||||
name: "colgante de Agua Mística",
|
||||
grammar: "ms",
|
||||
},
|
||||
|
||||
- The first letter of `grammar` is gender (`m` - masculine, `f` - feminine, or `n` - neuter).
|
||||
- The second letter is countability (`s` - singular, `p` - plural, or `u` - uncountable).
|
||||
- `classified` is optional, for item names that change when they need to be counted.
|
||||
- Example: `¡Mew ha tirado al suelo el colgante de Agua Mística de Vaporeon!`
|
||||
- `articleRule: "stressed-a"` is also optional, and is for Spanish feminine words which use "el" instead of "la" because of a stressed initial `a`.
|
||||
- Not actually used in any game text; kept around in case someone needs it for something else
|
||||
2317
data/text/de/abilities.ts
Normal file
2317
data/text/de/abilities.ts
Normal file
File diff suppressed because it is too large
Load diff
386
data/text/de/default.ts
Normal file
386
data/text/de/default.ts
Normal file
|
|
@ -0,0 +1,386 @@
|
|||
export const DefaultText: { [id: IDEntry]: DefaultText } = {
|
||||
default: {
|
||||
startBattle: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
winBattle: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
tieBattle: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
|
||||
pokemon: "[NICKNAME]",
|
||||
opposingPokemon: "[NICKNAME] (Gegner)",
|
||||
team: "die Pokémon auf deiner Seite",
|
||||
opposingTeam: "die gegnerischen Pokémon",
|
||||
party: "die Mitstreiterseite",
|
||||
opposingParty: "Gegner",
|
||||
|
||||
turn: "== Zug Nr. [NUMBER] ==",
|
||||
switchIn: "[TRAINER:definite:nominative:capitalize] schickt [FULLNAME] in den Kampf!",
|
||||
switchInOwn: "Los, [FULLNAME]!",
|
||||
switchOut: "[TRAINER:definite:nominative:capitalize] hat [NICKNAME] zurückgerufen!",
|
||||
switchOutOwn: "[NICKNAME], komm zurück!",
|
||||
drag: "[FULLNAME] wurde ausgewählt!",
|
||||
faint: "[POKEMON] wurde besiegt!",
|
||||
swap: "[POKEMON] und [TARGET] haben den Platz getauscht!",
|
||||
swapCenter: "[POKEMON] ist in die Mitte gewechselt!",
|
||||
|
||||
// Multi Battles only
|
||||
canDynamax: " [TRAINER] kann nun das Dynamax-Phänomen auslösen!",
|
||||
canDynamaxOwn: " Bei [TRAINER] hat sich Dynamax-Energie angesammelt!",
|
||||
|
||||
zEffect: " [POKEMON] nimmt all seine Kraft zusammen und setzt eine Z-Attacke ein!",
|
||||
move: "[POKEMON] setzt **[MOVE]** ein!",
|
||||
abilityActivation: "[[ABILITY] von [POKEMON]]",
|
||||
|
||||
mega: " [ITEM] von [POKEMON] reagiert auf Schlüssel-Stein von [TRAINER]!",
|
||||
megaNoItem: " [POKEMON] reagiert auf Schlüssel-Stein von [TRAINER]!",
|
||||
megaGen6: " [ITEM] von [POKEMON] reagiert auf Mega-Armreif von [TRAINER]!",
|
||||
transformMega: "[POKEMON] hat sich zu Mega-[SPECIES] entwickelt!",
|
||||
primal: "[POKEMON] hat eine Protomorphose durchgeführt und seine urzeitliche Form zurückerlangt!",
|
||||
zPower: " [POKEMON] hüllt sich in Z-Kraft!",
|
||||
zBroken: " [POKEMON] konnte den Angriff nicht abwehren und erleidet Schaden!",
|
||||
terastallize: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
|
||||
// in case the different default messages didn't make it obvious, the difference
|
||||
// is that the `cant` message REPLACES "Pokemon used Move!", while the `fail`
|
||||
// message happens AFTER "Pokemon used Move!"
|
||||
cant: "[POKEMON] kann [MOVE] nicht einsetzen!",
|
||||
cantNoMove: "[POKEMON] ist gelähmt!",
|
||||
fail: " Es ist fehlgeschlagen!",
|
||||
|
||||
// n.b. this is the default message for in-battle forme changes
|
||||
// for the move Transform and ability Imposter, see the entry for the move Transform
|
||||
transform: "[POKEMON] verwandelt sich!",
|
||||
typeChange: " [POKEMON] nimmt den Typ [TYPE] an!",
|
||||
typeChangeFromEffect: " [EFFECT] von [POKEMON] macht es zu einem [TYPE]-Typ!",
|
||||
typeAdd: " [POKEMON] nimmt zusätzlich den Typ [TYPE] an!",
|
||||
|
||||
start: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
end: " [POKEMON] wurde von [EFFECT] befreit!",
|
||||
activate: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
startTeamEffect: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
endTeamEffect: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
startFieldEffect: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
endFieldEffect: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
|
||||
changeAbility: " [POKEMON] nimmt die Fähigkeit [ABILITY] an!",
|
||||
addItem: " [POKEMON] erhält das Item [ITEM]!",
|
||||
takeItem: " [POKEMON] hat [SOURCE] das Item [ITEM] geklaut!",
|
||||
eatItem: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
useGem: " [ITEM] erhöht die Stärke von [MOVE]!",
|
||||
eatItemWeaken: " [ITEM] reduziert den Schaden gegen [POKEMON]!",
|
||||
removeItem: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
activateItem: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
activateWeaken: " [ITEM] reduziert den Schaden gegen [POKEMON]!",
|
||||
|
||||
damage: " ([POKEMON] wurde Schaden zugefügt!)",
|
||||
damagePercentage: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
damageFromPokemon: " [POKEMON] wird durch das Item [ITEM] von [SOURCE] verletzt!",
|
||||
damageFromItem: " [POKEMON] wurde durch das Item [ITEM] verletzt!",
|
||||
damageFromPartialTrapping: " [POKEMON] wurde durch [MOVE] verletzt!",
|
||||
heal: " KP von [POKEMON] wurden aufgefrischt!",
|
||||
healFromZEffect: " [POKEMON] hat durch Z-Kraft seine KP aufgefrischt!",
|
||||
healFromEffect: " [POKEMON] füllt KP mit Hilfe von [EFFECT] auf!",
|
||||
|
||||
boost: " [STAT] von [POKEMON] steigt!",
|
||||
boost2: " [STAT] von [POKEMON] steigt stark!",
|
||||
boost3: " [STAT] von [POKEMON] steigt drastisch!",
|
||||
boost0: " [STAT] von [POKEMON] kann nicht weiter steigen!",
|
||||
boostFromItem: " [ITEM]: [STAT] von [POKEMON] steigt.",
|
||||
boost2FromItem: " [ITEM]: [STAT] von [POKEMON] steigt stark!",
|
||||
boost3FromItem: " [ITEM] von [POKEMON] erhöht [STAT:definite:accusative] drastisch!",
|
||||
boostFromZEffect: " [STAT] von [POKEMON] wurde durch Z-Kraft erhöht!",
|
||||
boost2FromZEffect: " [STAT] von [POKEMON] wurde durch Z-Kraft stark erhöht!",
|
||||
boost3FromZEffect: " [STAT] von [POKEMON] wurde durch Z-Kraft drastisch erhöht!",
|
||||
boostMultipleFromZEffect: " Mehrere Statuswerte von [POKEMON] wurden durch Z-Kraft erhöht!",
|
||||
|
||||
unboost: " [STAT] von [POKEMON] sinkt!",
|
||||
unboost2: " [STAT] von [POKEMON] sinkt stark!",
|
||||
unboost3: " [STAT] von [POKEMON] sinkt drastisch!",
|
||||
unboost0: " [STAT] von [POKEMON] kann nicht weiter sinken!",
|
||||
unboostFromItem: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
unboost2FromItem: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
unboost3FromItem: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
|
||||
swapBoost: " [POKEMON] tauscht die Statusveränderungen mit dem Ziel!",
|
||||
swapOffensiveBoost: " [POKEMON] tauscht Änderungen an Angriff und Spezial-Angriff mit dem Ziel!",
|
||||
swapDefensiveBoost: " [POKEMON] tauscht Änderungen an Verteidigung und Spezial-Verteidigung mit dem Ziel!",
|
||||
copyBoost: " [POKEMON] kopiert die Statuswertänderungen von [TARGET]!",
|
||||
clearBoost: " Die Statuswertänderungen von [POKEMON] wurden aufgehoben!",
|
||||
clearBoostFromZEffect: " Gesenkte Statuswerte von [POKEMON] wurden durch Z-Kraft zurückgesetzt!",
|
||||
invertBoost: " Alle Statuswertänderungen von [POKEMON] wurden invertiert!",
|
||||
clearAllBoost: " Alle Statuswertänderungen wurden aufgehoben!",
|
||||
|
||||
superEffective: " Das ist sehr effektiv!",
|
||||
superEffectiveSpread: " Das ist sehr effektiv gegen [POKEMON]!",
|
||||
resisted: " Das ist nicht sehr effektiv...",
|
||||
resistedSpread: " Das ist nicht sehr effektiv gegen [POKEMON]...",
|
||||
extremelyEffective: " Das ist extrem effektiv!!",
|
||||
extremelyEffectiveSpread: " Das ist extrem effektiv gegen [POKEMON]!!",
|
||||
mostlyIneffective: " Das ist extrem ineffektiv...",
|
||||
mostlyIneffectiveSpread: " Das ist extrem ineffektiv gegen [POKEMON]...",
|
||||
crit: " Ein Volltreffer!",
|
||||
critSpread: " Gegen [POKEMON] wurde ein Volltreffer gelandet!",
|
||||
immune: " Es hat keine Wirkung auf [POKEMON]...",
|
||||
immuneNoPokemon: " Es ist wirkungslos!",
|
||||
immuneOHKO: " [POKEMON] ist unversehrt!",
|
||||
miss: " Die Attacke hat [POKEMON] verfehlt!",
|
||||
missNoPokemon: " Attacke von [SOURCE] geht daneben!",
|
||||
|
||||
center: " Mittig setzen!",
|
||||
noTarget: " Aber da ist gar kein Ziel...",
|
||||
ohko: " Ein K.O.-Treffer!",
|
||||
combine: " Zwei Attacken bilden zusammen eine Kombi-Attacke!",
|
||||
hitCount: " [NUMBER]-mal getroffen!",
|
||||
},
|
||||
|
||||
// stats
|
||||
hp: {
|
||||
statName: "KP",
|
||||
statShortName: "KP",
|
||||
},
|
||||
atk: {
|
||||
statName: "Angriff",
|
||||
grammar: "ms",
|
||||
statShortName: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
},
|
||||
def: {
|
||||
statName: "Verteidigung",
|
||||
grammar: "fs",
|
||||
statShortName: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
},
|
||||
spa: {
|
||||
statName: "Spezial-Angriff",
|
||||
grammar: "ms",
|
||||
statShortName: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
},
|
||||
spd: {
|
||||
statName: "Spezial-Verteidigung",
|
||||
grammar: "fs",
|
||||
statShortName: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
},
|
||||
spe: {
|
||||
statName: "Initiative",
|
||||
grammar: "fs",
|
||||
statShortName: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
},
|
||||
accuracy: {
|
||||
statName: "Genauigkeit",
|
||||
grammar: "fs",
|
||||
},
|
||||
evasion: {
|
||||
statName: "Ausweichwert",
|
||||
grammar: "ms",
|
||||
},
|
||||
spc: {
|
||||
statName: "Spezial",
|
||||
grammar: "ns",
|
||||
statShortName: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
},
|
||||
stats: {
|
||||
statName: "Statuswerte",
|
||||
grammar: "mp",
|
||||
},
|
||||
|
||||
// statuses
|
||||
brn: {
|
||||
start: " [POKEMON] erleidet Verbrennungen!",
|
||||
startFromItem: " [POKEMON] erleidet Verbrennungen durch das Item [ITEM]!",
|
||||
alreadyStarted: " [POKEMON] leidet bereits unter Verbrennungen!",
|
||||
end: " Die Verbrennungen von [POKEMON] wurden geheilt!",
|
||||
endFromItem: " [ITEM] von [POKEMON] heilt die Verbrennungen!",
|
||||
damage: " Die Verbrennungen schaden [POKEMON]!",
|
||||
},
|
||||
frz: {
|
||||
start: " [POKEMON] erstarrt zu Eis!",
|
||||
alreadyStarted: " [POKEMON] ist bereits eingefroren!",
|
||||
end: " [POKEMON] wurde aufgetaut!",
|
||||
endFromItem: " [ITEM] bewirkt, dass [POKEMON] auftaut!",
|
||||
endFromMove: " Das Eis wurde durch [MOVE] von [POKEMON] aufgetaut!",
|
||||
cant: "[POKEMON] ist eingefroren und kann nicht handeln!",
|
||||
},
|
||||
par: {
|
||||
start: " [POKEMON] ist paralysiert! Es kann eventuell nicht handeln!",
|
||||
alreadyStarted: " [POKEMON] ist bereits paralysiert!",
|
||||
end: " Die Paralyse von [POKEMON] wurde aufgehoben!",
|
||||
endFromItem: " [ITEM] von [POKEMON] heilt die Paralyse!",
|
||||
cant: "[POKEMON] ist paralysiert! Es kann nicht angreifen!",
|
||||
},
|
||||
psn: {
|
||||
start: " [POKEMON] wurde vergiftet!",
|
||||
alreadyStarted: " [POKEMON] ist bereits vergiftet!",
|
||||
end: " Die Vergiftung von [POKEMON] wurde geheilt!",
|
||||
endFromItem: " [ITEM] von [POKEMON] heilt die Vergiftung!",
|
||||
damage: " [POKEMON] wird durch Gift verletzt!",
|
||||
},
|
||||
tox: {
|
||||
start: " [POKEMON] wurde schwer vergiftet!",
|
||||
startFromItem: " [POKEMON] wurde durch das Item [ITEM] schwer vergiftet!",
|
||||
end: "#psn",
|
||||
endFromItem: "#psn",
|
||||
alreadyStarted: "#psn",
|
||||
damage: "#psn",
|
||||
},
|
||||
slp: {
|
||||
start: " [POKEMON] ist eingeschlafen!",
|
||||
startFromRest: " [POKEMON] hat im Schlaf Energie getankt!",
|
||||
alreadyStarted: " [POKEMON] schläft bereits!",
|
||||
end: " [POKEMON] ist aufgewacht!",
|
||||
endFromItem: " [ITEM] bewirkt, dass [POKEMON] aufwacht!",
|
||||
cant: "[POKEMON] schläft tief und fest!",
|
||||
},
|
||||
|
||||
// misc effects
|
||||
confusion: {
|
||||
start: " [POKEMON] wurde verwirrt!",
|
||||
startFromFatigue: " [POKEMON] ist vor Erschöpfung verwirrt!",
|
||||
end: " [POKEMON] ist nicht mehr verwirrt!",
|
||||
endFromItem: " [ITEM] von [POKEMON] hebt die Verwirrung auf!",
|
||||
alreadyStarted: " [POKEMON] ist bereits verwirrt!",
|
||||
activate: " [POKEMON] ist verwirrt!",
|
||||
damage: "Es hat sich vor Verwirrung selbst verletzt!",
|
||||
},
|
||||
drain: {
|
||||
heal: " [SOURCE] wurde Energie abgesaugt!",
|
||||
},
|
||||
flinch: {
|
||||
cant: "[POKEMON] ist zurückgeschreckt und kann nicht handeln!",
|
||||
},
|
||||
heal: {
|
||||
fail: " [POKEMON] hat volle KP!",
|
||||
},
|
||||
healreplacement: {
|
||||
activate: " [POKEMON] wird durch Z-Kraft die KP des für ihn eingewechselten Mitstreiters auffrischen!",
|
||||
},
|
||||
nopp: {
|
||||
cant: "[POKEMON] setzt **[MOVE]** ein!\n Es sind keine AP mehr für diese Attacke übrig!",
|
||||
},
|
||||
recharge: {
|
||||
cant: "[POKEMON] kann sich wegen des Rückstoßes durch den Angriff nicht bewegen!",
|
||||
},
|
||||
recoil: {
|
||||
damage: " [POKEMON] erleidet Schaden durch Rückstoß!",
|
||||
},
|
||||
unboost: {
|
||||
fail: " Statuswerte von [POKEMON] sinken nicht!",
|
||||
},
|
||||
struggle: {
|
||||
activate: " [POKEMON] hat keine Attacken mehr übrig!",
|
||||
},
|
||||
trapped: {
|
||||
start: " [POKEMON] kann nicht mehr fliehen!",
|
||||
},
|
||||
dynamax: {
|
||||
start: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
end: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
block: " Die Wirkung der Attacke wurde durch die Dynamax-Energie blockiert!",
|
||||
fail: " [POKEMON] weigert sich. Es kann diese Attacke wohl nicht einsetzen...",
|
||||
},
|
||||
|
||||
// weather
|
||||
sandstorm: {
|
||||
weatherName: "Sandsturm",
|
||||
start: " Ein Sandsturm kommt auf!",
|
||||
end: " Der Sandsturm legt sich!",
|
||||
upkeep: " (Der Sandsturm tobt!)",
|
||||
damage: " Der Sandsturm fügt [POKEMON] Schaden zu!",
|
||||
},
|
||||
sunnyday: {
|
||||
weatherName: "Sonnenschein",
|
||||
start: " Das Sonnenlicht wird stärker!",
|
||||
end: " Das Sonnenlicht verliert an Intensität!",
|
||||
upkeep: " (Gleißendes Sonnenlicht!)",
|
||||
},
|
||||
raindance: {
|
||||
weatherName: "Regen",
|
||||
start: " Es fängt an zu regnen!",
|
||||
end: " Es hört auf zu regnen!",
|
||||
upkeep: " (Es regnet weiter.)",
|
||||
},
|
||||
hail: {
|
||||
weatherName: "Hagelsturm",
|
||||
start: " Es fängt an zu hageln!",
|
||||
end: " Es hört auf zu hageln!",
|
||||
upkeep: " (Der Hagelsturm tobt!)",
|
||||
damage: " [POKEMON] wird von Hagelkörnern getroffen!",
|
||||
},
|
||||
snowscape: {
|
||||
weatherName: "Schnee",
|
||||
start: " Es fängt an zu schneien!",
|
||||
end: " Es hört auf zu schneien!",
|
||||
upkeep: " (Der Schneefall lässt nicht nach!)",
|
||||
},
|
||||
desolateland: {
|
||||
weatherName: "Gleißende Sonne",
|
||||
start: " Das Sonnenlicht wird sehr viel stärker!",
|
||||
end: " Das Sonnenlicht verliert an Intensität!",
|
||||
block: " Das starke Sonnenlicht lässt nicht nach!",
|
||||
blockMove: " Das intensive Sonnenlicht lässt die Wasser-Attacke verdampfen und macht sie wirkungslos!",
|
||||
},
|
||||
primordialsea: {
|
||||
weatherName: "Strömender Regen",
|
||||
start: " Es fängt an, in Strömen zu regnen!",
|
||||
end: " Der strömende Regen hat aufgehört!",
|
||||
block: " Der strömende Regen lässt nicht nach!",
|
||||
blockMove: " Der strömende Regen löscht den Angriff vom Typ Feuer und macht ihn wirkungslos!",
|
||||
},
|
||||
deltastream: {
|
||||
weatherName: "Luftströmungen",
|
||||
start: " Alle Flug-Pokémon werden von rätselhaften Luftströmungen geschützt!",
|
||||
end: " Die rätselhaften Luftströmungen haben sich wieder gelegt!",
|
||||
activate: " Rätselhafte Luftströmungen haben den Angriff abgeschwächt!",
|
||||
block: " Die rätselhaften Luftströmungen lassen nicht nach!",
|
||||
},
|
||||
|
||||
// terrain
|
||||
electricterrain: {
|
||||
start: " Elektrische Energie fließt durch den Boden!",
|
||||
end: " Das Elektrofeld ist wieder verschwunden!",
|
||||
block: " [POKEMON] wird vom Elektrofeld geschützt!",
|
||||
},
|
||||
grassyterrain: {
|
||||
start: " Dichtes Gras schießt aus dem Boden!",
|
||||
end: " Das Grasfeld ist wieder verschwunden!",
|
||||
heal: " KP von [POKEMON] wurden aufgefrischt!",
|
||||
},
|
||||
mistyterrain: {
|
||||
start: " Am Boden breitet sich dichter Nebel aus!",
|
||||
end: " Das Nebelfeld ist wieder verschwunden!",
|
||||
block: " [POKEMON] wird vom Nebelfeld geschützt!",
|
||||
},
|
||||
psychicterrain: {
|
||||
start: " Der Boden fühlt sich seltsam an!",
|
||||
end: " Das Psychofeld ist wieder verschwunden!",
|
||||
block: " [POKEMON] wird vom Psychofeld geschützt!",
|
||||
},
|
||||
|
||||
// field effects
|
||||
gravity: {
|
||||
start: " Die Erdanziehung wurde verstärkt!",
|
||||
end: " Die Erdanziehung ist wieder normal!",
|
||||
cant: "[POKEMON] kann aufgrund von Erdanziehung [MOVE] nicht einsetzen!",
|
||||
activate: "[POKEMON] kann aufgrund von Erdanziehung nicht mehr in der Luft bleiben!",
|
||||
},
|
||||
magicroom: {
|
||||
start: " Es entsteht ein Raum, in dem getragene Items ihre Wirkung verlieren!",
|
||||
end: " Der Magieraum verpufft. Getragene Items erhalten ihre Wirkung zurück!",
|
||||
},
|
||||
mudsport: {
|
||||
start: " Die Stärke aller Elektro-Attacken wurde reduziert!",
|
||||
end: " Lehmsuhler hört auf zu wirken!",
|
||||
},
|
||||
trickroom: {
|
||||
start: " [POKEMON] hat die Dimensionen verdreht!",
|
||||
end: " Die verdrehte Dimension ist wieder normal!",
|
||||
},
|
||||
watersport: {
|
||||
start: " Die Stärke aller Feuer-Attacken wurde reduziert!",
|
||||
end: " Nassmacher hört auf zu wirken!",
|
||||
},
|
||||
wonderroom: {
|
||||
start: " Es entsteht ein Raum, in dem Verteidigung und Spezial-Verteidigung miteinander vertauscht sind!",
|
||||
end: " Der Wunderraum verpufft. Verteidigung und Spezial-Verteidigung werden wieder zurückgesetzt!",
|
||||
},
|
||||
|
||||
// misc
|
||||
crash: {
|
||||
damage: " [POKEMON] springt daneben und verletzt sich!",
|
||||
},
|
||||
};
|
||||
2819
data/text/de/items.ts
Normal file
2819
data/text/de/items.ts
Normal file
File diff suppressed because it is too large
Load diff
7706
data/text/de/moves.ts
Normal file
7706
data/text/de/moves.ts
Normal file
File diff suppressed because it is too large
Load diff
3923
data/text/de/pokedex.ts
Normal file
3923
data/text/de/pokedex.ts
Normal file
File diff suppressed because it is too large
Load diff
|
|
@ -36,19 +36,19 @@ export const DefaultText: { [id: IDEntry]: DefaultText } = {
|
|||
primal: "[POKEMON]'s Primal Reversion! It reverted to its primal state!",
|
||||
zPower: " [POKEMON] surrounded itself with its Z-Power!",
|
||||
zBroken: " [POKEMON] couldn't fully protect itself and got hurt!",
|
||||
terastallize: " [POKEMON] has Terastallized into the [TYPE]-type!", // filler
|
||||
terastallize: " ([POKEMON] has Terastallized into the [TYPE]-type!)",
|
||||
|
||||
// in case the different default messages didn't make it obvious, the difference
|
||||
// is that the `cant` message REPLACES "Pokemon used Move!", while the `fail`
|
||||
// message happens AFTER "Pokemon used Move!"
|
||||
cant: "[POKEMON] can't use [MOVE]!",
|
||||
cant: "[POKEMON] cannot use [MOVE]!",
|
||||
cantNoMove: "[POKEMON] can't move!",
|
||||
fail: " But it failed!",
|
||||
|
||||
// n.b. this is the default message for in-battle forme changes
|
||||
// for the move Transform and ability Imposter, see the entry for the move Transform
|
||||
transform: "[POKEMON] transformed!",
|
||||
typeChange: " [POKEMON]'s type changed to [TYPE]!",
|
||||
typeChange: " [POKEMON] transformed into the [TYPE] type!",
|
||||
typeChangeFromEffect: " [POKEMON]'s [EFFECT] made it the [TYPE] type!",
|
||||
typeAdd: " [TYPE] type was added to [POKEMON]!",
|
||||
|
||||
|
|
@ -61,17 +61,17 @@ export const DefaultText: { [id: IDEntry]: DefaultText } = {
|
|||
endFieldEffect: " ([EFFECT] ended!)",
|
||||
|
||||
changeAbility: " [POKEMON] acquired [ABILITY]!",
|
||||
addItem: " [POKEMON] obtained one [ITEM].", // Trick, Switcheroo
|
||||
addItem: " [POKEMON] obtained [ITEM].", // Trick, Switcheroo
|
||||
takeItem: " [POKEMON] stole [SOURCE]'s [ITEM]!", // Thief, Covet, Magician, Pickpocket
|
||||
eatItem: " ([POKEMON] ate its [ITEM]!)",
|
||||
useGem: " The [ITEM] strengthened [POKEMON]'s power!",
|
||||
eatItemWeaken: " The [ITEM] weakened damage to [POKEMON]!",
|
||||
useGem: " [ITEM] strengthened [MOVE]'s power!",
|
||||
eatItemWeaken: " [POKEMON]'s [ITEM] lessened the damage it took!",
|
||||
removeItem: " [POKEMON] lost its [ITEM]!",
|
||||
activateItem: " ([POKEMON] used its [ITEM]!)",
|
||||
activateWeaken: " The [ITEM] weakened the damage to [POKEMON]!",
|
||||
activateWeaken: " [POKEMON]'s [ITEM] lessened the damage it took!",
|
||||
|
||||
damage: " ([POKEMON] was hurt!)",
|
||||
damagePercentage: " ([POKEMON] lost [PERCENTAGE] of its health!)",
|
||||
damagePercentage: " ([POKEMON] lost [PERCENTAGE]% of its health!)",
|
||||
damageFromPokemon: " [POKEMON] was hurt by [SOURCE]'s [ITEM]!", // Jaboca/Rowap Berry
|
||||
damageFromItem: " [POKEMON] was hurt by its [ITEM]!", // Sticky Barb
|
||||
damageFromPartialTrapping: " [POKEMON] is hurt by [MOVE]!",
|
||||
|
|
@ -92,8 +92,8 @@ export const DefaultText: { [id: IDEntry]: DefaultText } = {
|
|||
boostMultipleFromZEffect: " [POKEMON] boosted its stats using its Z-Power!",
|
||||
|
||||
unboost: " [POKEMON]'s [STAT] fell!",
|
||||
unboost2: " [POKEMON]'s [STAT] fell harshly!",
|
||||
unboost3: " [POKEMON]'s [STAT] fell severely!",
|
||||
unboost2: " [POKEMON]'s [STAT] harshly fell!",
|
||||
unboost3: " [POKEMON]'s [STAT] severely fell!",
|
||||
unboost0: " [POKEMON]'s [STAT] won't go any lower!",
|
||||
unboostFromItem: " The [ITEM] lowered [POKEMON]'s [STAT]!",
|
||||
unboost2FromItem: " The [ITEM] harshly lowered [POKEMON]'s [STAT]!",
|
||||
|
|
@ -105,7 +105,7 @@ export const DefaultText: { [id: IDEntry]: DefaultText } = {
|
|||
copyBoost: " [POKEMON] copied [TARGET]'s stat changes!",
|
||||
clearBoost: " [POKEMON]'s stat changes were removed!",
|
||||
clearBoostFromZEffect: " [POKEMON] returned its decreased stats to normal using its Z-Power!",
|
||||
invertBoost: " [POKEMON]'s stat changes were inverted!",
|
||||
invertBoost: " All stat changes on [POKEMON] were inverted!",
|
||||
clearAllBoost: " All stat changes were eliminated!",
|
||||
|
||||
superEffective: " It's super effective!",
|
||||
|
|
@ -119,7 +119,7 @@ export const DefaultText: { [id: IDEntry]: DefaultText } = {
|
|||
crit: " A critical hit!",
|
||||
critSpread: " A critical hit on [POKEMON]!",
|
||||
immune: " It doesn't affect [POKEMON]...",
|
||||
immuneNoPokemon: " It had no effect!", // old gens
|
||||
immuneNoPokemon: " But it had no effect!", // old gens
|
||||
immuneOHKO: " [POKEMON] is unaffected!",
|
||||
miss: " [POKEMON] avoided the attack!",
|
||||
missNoPokemon: " [SOURCE]'s attack missed!", // old gens
|
||||
|
|
@ -128,8 +128,7 @@ export const DefaultText: { [id: IDEntry]: DefaultText } = {
|
|||
noTarget: " But there was no target...", // gen 5 and earlier
|
||||
ohko: " It's a one-hit KO!",
|
||||
combine: " The two moves have become one! It's a combined move!",
|
||||
hitCount: " The Pok\u00E9mon was hit [NUMBER] times!",
|
||||
hitCountSingular: " The Pok\u00E9mon was hit 1 time!",
|
||||
hitCount: " The Pok\u00E9mon was hit [NUMBER] [INFLECT:NUMBER:s=time:p=times]!",
|
||||
},
|
||||
|
||||
// stats
|
||||
|
|
@ -189,7 +188,7 @@ export const DefaultText: { [id: IDEntry]: DefaultText } = {
|
|||
cant: "[POKEMON] is frozen solid!",
|
||||
},
|
||||
par: {
|
||||
start: " [POKEMON] is paralyzed! It may be unable to move!",
|
||||
start: " [POKEMON] is paralyzed, so it may be unable to move!",
|
||||
alreadyStarted: " [POKEMON] is already paralyzed!",
|
||||
end: " [POKEMON] was cured of paralysis!",
|
||||
endFromItem: " [POKEMON]'s [ITEM] cured its paralysis!",
|
||||
|
|
@ -251,8 +250,7 @@ export const DefaultText: { [id: IDEntry]: DefaultText } = {
|
|||
damage: " [POKEMON] was damaged by the recoil!",
|
||||
},
|
||||
unboost: {
|
||||
fail: " [POKEMON]'s stats were not lowered!",
|
||||
failSingular: " [POKEMON]'s [STAT] was not lowered!",
|
||||
fail: " [POKEMON]'s [STAT] [INFLECT:STAT:s=was:p=were] not lowered!",
|
||||
},
|
||||
struggle: {
|
||||
activate: " [POKEMON] has no moves left!",
|
||||
|
|
@ -298,7 +296,7 @@ export const DefaultText: { [id: IDEntry]: DefaultText } = {
|
|||
weatherName: "Snow",
|
||||
start: " It started to snow!",
|
||||
end: " The snow stopped.",
|
||||
upkeep: " (The snow is falling down.)",
|
||||
upkeep: " (The snow is blowing about!)",
|
||||
},
|
||||
desolateland: {
|
||||
weatherName: "Intense Sun",
|
||||
|
|
|
|||
214
data/text/en-afd/default.ts
Normal file
214
data/text/en-afd/default.ts
Normal file
|
|
@ -0,0 +1,214 @@
|
|||
export const DefaultText: { [id: IDEntry]: DefaultText } = {
|
||||
default: {
|
||||
// April Fool's 2019
|
||||
// April Fool's 2025: tone down the most common text
|
||||
// (I think the jokes work best as a surprise, when most of the
|
||||
// text is the same as before.)
|
||||
|
||||
// startBattle: "[TRAINER] and [TRAINER] commence battle!",
|
||||
// winBattle: "**[TRAINER]** is victorious!",
|
||||
// tieBattle: "The feud between [TRAINER] and [TRAINER] remains unresolved!",
|
||||
|
||||
// pokemon: "[NICKNAME]",
|
||||
// opposingPokemon: "a villainous [NICKNAME]",
|
||||
// team: "your faithful alliance",
|
||||
// opposingTeam: "the forces of evil",
|
||||
// party: "our blessed allies",
|
||||
// opposingParty: "the barbarous opposition",
|
||||
|
||||
// turn: "== Phase [NUMBER] ==",
|
||||
// switchIn: "[TRAINER] would have us contend with [FULLNAME]!",
|
||||
// switchInOwn: "[FULLNAME]! Honor demands your presence!",
|
||||
// switchOut: "[TRAINER] has other plans for [NICKNAME]!",
|
||||
// switchOutOwn: "[NICKNAME], the time for retreat is upon us!",
|
||||
// drag: "[FULLNAME] was unprepared to join us!",
|
||||
// faint: "[POKEMON]'s service has concluded.",
|
||||
// swap: "[POKEMON] and [TARGET] switched places!",
|
||||
// swapCenter: "[POKEMON] moved to the center!",
|
||||
|
||||
// zEffect: " [POKEMON] isn't holding back anymore!",
|
||||
// move: "[POKEMON] unleashes **[MOVE]**!",
|
||||
// abilityActivation: " [[POKEMON]'s [ABILITY]]",
|
||||
|
||||
mega: " [POKEMON]'s [ITEM] glows!",
|
||||
megaNoItem: " [POKEMON]'s lack of Mega Stone glows!",
|
||||
megaGen6: " [POKEMON]'s [ITEM] glows!",
|
||||
transformMega: "[POKEMON] thinks it's a big deal!",
|
||||
primal: "[POKEMON]'s reversion! It got nostalgic about the old days!",
|
||||
zPower: " [POKEMON] is about to stop holding back!",
|
||||
zBroken: " [POKEMON]'s shields are failing!",
|
||||
terastallize: " [POKEMON] is cosplaying as [TYPE]-type!",
|
||||
|
||||
// in case the different default messages didn't make it obvious, the difference
|
||||
// is that the `cant` message REPLACES "Pokemon used Move!", while the `fail`
|
||||
// message happens AFTER "Pokemon used Move!"
|
||||
cant: "[POKEMON] can't use [MOVE]!",
|
||||
cantNoMove: "[POKEMON] can't move!",
|
||||
fail: " Things did not go as planned!",
|
||||
|
||||
// n.b. this is the default message for in-battle forme changes
|
||||
// for the move Transform and ability Imposter, see the entry for the move Transform
|
||||
transform: "[POKEMON] transformed!",
|
||||
typeChange: " [POKEMON] transformed into the [TYPE] type!",
|
||||
typeChangeFromEffect: " [POKEMON]'s [EFFECT] made it the [TYPE] type!",
|
||||
typeAdd: " [TYPE] type was added to [POKEMON]!",
|
||||
|
||||
start: " ([EFFECT] started on [POKEMON]!)",
|
||||
end: " [POKEMON] was freed from [EFFECT]!",
|
||||
activate: " ([EFFECT] activated!)",
|
||||
startTeamEffect: " ([EFFECT] started on [TEAM]!)",
|
||||
endTeamEffect: " ([EFFECT] ended on [TEAM]!)",
|
||||
startFieldEffect: " ([EFFECT] started!)",
|
||||
endFieldEffect: " ([EFFECT] ended!)",
|
||||
|
||||
changeAbility: " [POKEMON] acquired [ABILITY]!",
|
||||
addItem: " [POKEMON] obtained one [ITEM].", // Trick, Switcheroo
|
||||
takeItem: " [POKEMON] stole [SOURCE]'s [ITEM]!", // Thief, Covet, Magician, Pickpocket
|
||||
eatItem: " [POKEMON] ate its [ITEM]!",
|
||||
useGem: " The [ITEM] strengthened [POKEMON]'s power!",
|
||||
eatItemWeaken: " The [ITEM] weakened damage to [POKEMON]!",
|
||||
removeItem: " [POKEMON] lost its [ITEM]!",
|
||||
activateItem: " ([POKEMON] used its [ITEM]!)",
|
||||
activateWeaken: " The [ITEM] weakened the damage to [POKEMON]!",
|
||||
|
||||
damage: " ([POKEMON] was hurt!)",
|
||||
damagePercentage: " ([POKEMON] lost [PERCENTAGE]% of its health!)",
|
||||
damageFromPokemon: " [POKEMON] is hurt by [SOURCE]'s [ITEM]!", // Jaboca/Rowap Berry
|
||||
damageFromItem: " [POKEMON] is hurt by its [ITEM]!", // Sticky Barb
|
||||
damageFromPartialTrapping: " [POKEMON] is hurt by [MOVE]!",
|
||||
heal: " [POKEMON] restored its HP.",
|
||||
healFromZEffect: " [POKEMON] restored its HP using its Z-Power!",
|
||||
healFromEffect: " [POKEMON] restored HP using its [EFFECT]!",
|
||||
|
||||
boost: " [POKEMON]'s [STAT] increased!",
|
||||
boost2: " [POKEMON]'s [STAT] increased twice!",
|
||||
boost3: " [POKEMON]'s [STAT] increased a lot!",
|
||||
boost0: " [POKEMON]'s [STAT] won't go any higher!",
|
||||
boostFromItem: " The [ITEM] raised [POKEMON]'s [STAT]!",
|
||||
boost2FromItem: " The [ITEM] raised [POKEMON]'s [STAT] twice!",
|
||||
boost3FromItem: " The [ITEM] raised [POKEMON]'s [STAT] a lot!",
|
||||
boostFromZEffect: " [POKEMON] boosted its [STAT] using its Z-Power!",
|
||||
boost2FromZEffect: " [POKEMON] boosted its [STAT] twice using its Z-Power!",
|
||||
boost3FromZEffect: " [POKEMON] boosted its [STAT] a lot using its Z-Power!",
|
||||
boostMultipleFromZEffect: " [POKEMON] boosted its stats using its Z-Power!",
|
||||
|
||||
unboost: " [POKEMON]'s [STAT] was lowered!",
|
||||
unboost2: " [POKEMON]'s [STAT] was lowered twice!",
|
||||
unboost3: " [POKEMON]'s [STAT] was lowered a lot!",
|
||||
unboost0: " [POKEMON]'s [STAT] won't go any lower!",
|
||||
unboostFromItem: " The [ITEM] lowered [POKEMON]'s [STAT]!",
|
||||
unboost2FromItem: " The [ITEM] lowered [POKEMON]'s [STAT] twice!",
|
||||
unboost3FromItem: " The [ITEM] lowered [POKEMON]'s [STAT] a lot!",
|
||||
|
||||
swapBoost: " [POKEMON] switched stat changes with its target!",
|
||||
swapOffensiveBoost: " [POKEMON] switched all changes to its Strength and Intelligence with its target!",
|
||||
swapDefensiveBoost: " [POKEMON] switched all changes to its Armor and Resistance with its target!",
|
||||
copyBoost: " [POKEMON] copied [TARGET]'s stat changes!",
|
||||
clearBoost: " [POKEMON]'s stat changes were removed!",
|
||||
clearBoostFromZEffect: " [POKEMON] returned its decreased stats to normal using its Z-Power!",
|
||||
invertBoost: " [POKEMON]'s stat changes were inverted!",
|
||||
clearAllBoost: " All stat changes were eliminated!",
|
||||
|
||||
superEffective: " It hit its enemy's weakness!",
|
||||
superEffectiveSpread: " It hit [POKEMON]'s weakness!",
|
||||
resisted: " It was resisted...",
|
||||
resistedSpread: " [POKEMON] resisted the attack.",
|
||||
crit: " A lucky hit! Remember to buy crit insurance!",
|
||||
critSpread: " A lucky hit on [POKEMON]! How dare you!",
|
||||
immune: " [POKEMON] is immune to such dastardly tricks!",
|
||||
immuneNoPokemon: " The foe was immune!", // old gens
|
||||
immuneOHKO: " [POKEMON] is unaffected!",
|
||||
miss: " [POKEMON] avoided the attack!",
|
||||
missNoPokemon: " [SOURCE]'s attack missed!", // old gens
|
||||
|
||||
center: " Automatic center!",
|
||||
noTarget: " But there was no target...", // gen 5 and earlier
|
||||
ohko: " It's a one-hit KO!",
|
||||
combine: " The two moves have become one! It's a combined move!",
|
||||
hitCount: " Hit [NUMBER] [INFLECT:NUMBER:s=time:p=times]!",
|
||||
},
|
||||
dynamax: {
|
||||
// April Fool's 2020
|
||||
start: " ([POKEMON]'s Tinymax!)",
|
||||
end: " ([POKEMON] returned to normal!)",
|
||||
block: " The move was blocked by the power of Tinymax!",
|
||||
fail: " [POKEMON] shook its head. It seems like it can't use this move...",
|
||||
},
|
||||
|
||||
// stats
|
||||
hp: {
|
||||
statName: "Constitution",
|
||||
statShortName: "HP",
|
||||
},
|
||||
atk: {
|
||||
statName: "Strength",
|
||||
statShortName: "Atk",
|
||||
},
|
||||
def: {
|
||||
statName: "Armor",
|
||||
statShortName: "Def",
|
||||
},
|
||||
spa: {
|
||||
statName: "Intelligence",
|
||||
statShortName: "SpA",
|
||||
},
|
||||
spd: {
|
||||
statName: "Resistance",
|
||||
statShortName: "SpD",
|
||||
},
|
||||
spe: {
|
||||
statName: "Agility",
|
||||
statShortName: "Spe",
|
||||
},
|
||||
accuracy: {
|
||||
statName: "accuracy",
|
||||
},
|
||||
evasion: {
|
||||
statName: "evasiveness",
|
||||
},
|
||||
spc: {
|
||||
statName: "Intelligence",
|
||||
statShortName: "Spc",
|
||||
},
|
||||
stats: {
|
||||
statName: "stats",
|
||||
},
|
||||
|
||||
// misc effects
|
||||
confusion: {
|
||||
start: " [POKEMON] became confused!",
|
||||
startFromFatigue: " [POKEMON] became confused due to fatigue!",
|
||||
end: " [POKEMON] snapped out of its confusion!",
|
||||
endFromItem: " [POKEMON]'s [ITEM] snapped it out of its confusion!",
|
||||
alreadyStarted: " [POKEMON] is already confused!",
|
||||
activate: " [POKEMON] is confused!",
|
||||
damage: "It hurt itself in its confusion!",
|
||||
},
|
||||
drain: {
|
||||
heal: " [SOURCE] will find its attacker's health restored!",
|
||||
},
|
||||
flinch: {
|
||||
cant: "[POKEMON] flinched and couldn't move!",
|
||||
},
|
||||
healreplacement: {
|
||||
activate: " [POKEMON] will restore its replacement's HP using its Z-Power!",
|
||||
},
|
||||
nopp: {
|
||||
cant: "[POKEMON] used [MOVE]!\n But there was no PP left for the move!",
|
||||
},
|
||||
recharge: {
|
||||
cant: "[POKEMON] must recharge!",
|
||||
},
|
||||
recoil: {
|
||||
damage: " [POKEMON] is damaged by the recoil!",
|
||||
},
|
||||
unboost: {
|
||||
fail: " [POKEMON]'s [STAT] [INFLECT:STAT:s=was:p=were] not lowered!",
|
||||
},
|
||||
struggle: {
|
||||
activate: " [POKEMON] has no moves left!",
|
||||
},
|
||||
trapped: {
|
||||
start: " [POKEMON] can no longer escape!",
|
||||
},
|
||||
};
|
||||
2317
data/text/es/abilities.ts
Normal file
2317
data/text/es/abilities.ts
Normal file
File diff suppressed because it is too large
Load diff
386
data/text/es/default.ts
Normal file
386
data/text/es/default.ts
Normal file
|
|
@ -0,0 +1,386 @@
|
|||
export const DefaultText: { [id: IDEntry]: DefaultText } = {
|
||||
default: {
|
||||
startBattle: "¡El combate entre [TRAINER] y [TRAINER] ha comenzado!",
|
||||
winBattle: "¡**[TRAINER]** ha ganado el combate!",
|
||||
tieBattle: "¡El combate entre [TRAINER] y [TRAINER] ha terminado en empate!",
|
||||
|
||||
pokemon: "[NICKNAME]",
|
||||
opposingPokemon: "el [NICKNAME] rival",
|
||||
team: "tu lado",
|
||||
opposingTeam: "el lado rival",
|
||||
party: "tu bando",
|
||||
opposingParty: "tus adversarios",
|
||||
|
||||
turn: "== Turno [NUMBER] ==",
|
||||
switchIn: "¡[TRAINER:definite:capitalize] saca a [FULLNAME]!",
|
||||
switchInOwn: "¡Adelante, [FULLNAME]!",
|
||||
switchOut: "¡[TRAINER:definite:capitalize] retira a [NICKNAME] del combate!",
|
||||
switchOutOwn: "¡[NICKNAME], ven aquí!",
|
||||
drag: "¡[FULLNAME] ha sido arrastrado al combate!",
|
||||
faint: "¡[POKEMON] se ha debilitado!",
|
||||
swap: "¡[POKEMON] [TARGET:y] han intercambiado sus posiciones!",
|
||||
swapCenter: "¡[POKEMON] se ha desplazado al centro!",
|
||||
|
||||
// Multi Battles only
|
||||
canDynamax: " ¡[TRAINER] ya puede usar la energía Dinamax!",
|
||||
canDynamaxOwn: " ¡La energía Dinamax rodea a [TRAINER]!",
|
||||
|
||||
zEffect: " ¡[POKEMON] despliega toda su fuerza para ejecutar un movimiento Z!",
|
||||
move: "¡[POKEMON] ha usado **[MOVE]**!",
|
||||
abilityActivation: "[[ABILITY] de [POKEMON]]",
|
||||
|
||||
mega: " ¡[ITEM:definite:capitalize] de [POKEMON] está reaccionando a la Piedra Activadora de [TRAINER]!",
|
||||
megaNoItem: " ¡[POKEMON] está reaccionando a la Piedra Activadora de [TRAINER]!",
|
||||
megaGen6: " ¡[ITEM:definite:capitalize] de [POKEMON] reacciona a la Megapulsera de [TRAINER]!",
|
||||
transformMega: "¡[POKEMON] ha evolucionado a Mega-[SPECIES]!",
|
||||
primal: "¡[POKEMON] ha experimentado una Regresión Primigenia y ha recobrado su apariencia primitiva!",
|
||||
zPower: " ¡[POKEMON] se envuelve en un halo de Poder Z!",
|
||||
zBroken: " ¡[POKEMON] no se ha podido proteger del ataque y ha recibido daño!",
|
||||
terastallize: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
|
||||
// in case the different default messages didn't make it obvious, the difference
|
||||
// is that the `cant` message REPLACES "Pokemon used Move!", while the `fail`
|
||||
// message happens AFTER "Pokemon used Move!"
|
||||
cant: "¡[POKEMON] no puede usar [MOVE]!",
|
||||
cantNoMove: "¡[POKEMON] no se mueve!",
|
||||
fail: " ¡Pero ha fallado!",
|
||||
|
||||
// n.b. this is the default message for in-battle forme changes
|
||||
// for the move Transform and ability Imposter, see the entry for the move Transform
|
||||
transform: "¡[POKEMON] se ha transformado!",
|
||||
typeChange: " ¡[POKEMON] ha cambiado a tipo [TYPE]!",
|
||||
typeChangeFromEffect: " ¡[EFFECT] de [POKEMON] lo convirtió en el tipo [TYPE]!",
|
||||
typeAdd: " ¡[POKEMON] ahora también es de tipo [TYPE]!",
|
||||
|
||||
start: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
end: " ¡[POKEMON] se ha liberado de [EFFECT]!",
|
||||
activate: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
startTeamEffect: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
endTeamEffect: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
startFieldEffect: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
endFieldEffect: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
|
||||
changeAbility: " ¡La habilidad de [POKEMON] ha cambiado a [ABILITY]!",
|
||||
addItem: " ¡[POKEMON] ha obtenido [ITEM:indefinite:classified]!",
|
||||
takeItem: " ¡[POKEMON] le ha robado [ITEM:indefinite:classified] a [SOURCE]!",
|
||||
eatItem: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
useGem: " ¡[ITEM:definite:capitalize:classified] refuerza[INFLECT:ITEM:s=:p=n] la potencia de [MOVE]!",
|
||||
eatItemWeaken: " ¡El daño a [POKEMON] ha sido atenuado por [ITEM:definite:classified]!",
|
||||
removeItem: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
activateItem: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
activateWeaken: " ¡El daño a [POKEMON] ha sido atenuado por [ITEM:definite:classified]!",
|
||||
|
||||
damage: " (¡[POKEMON] ha resultado herido!)",
|
||||
damagePercentage: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
damageFromPokemon: " ¡[POKEMON] ha resultado herido por [ITEM:definite] de [SOURCE]!",
|
||||
damageFromItem: " ¡[POKEMON] ha resultado dañado por [ITEM:definite]!",
|
||||
damageFromPartialTrapping: " ¡[MOVE] ha herido a [POKEMON]!",
|
||||
heal: " ¡[POKEMON] ha recuperado PS!",
|
||||
healFromZEffect: " ¡[POKEMON] ha recobrado la salud gracias al Poder Z!",
|
||||
healFromEffect: " ¡[POKEMON] restauró PS usando su [EFFECT]!",
|
||||
|
||||
boost: " ¡[STAT:definite:capitalize] de [POKEMON] ha aumentado!",
|
||||
boost2: " ¡[STAT:definite:capitalize] de [POKEMON] ha aumentado mucho!",
|
||||
boost3: " ¡[STAT:definite:capitalize] de [POKEMON] ha aumentado muchísimo!",
|
||||
boost0: " ¡[STAT:definite:capitalize] de [POKEMON] no puede aumentar más!",
|
||||
boostFromItem: " ¡[STAT] de [POKEMON] subió con [ITEM]!",
|
||||
boost2FromItem: " ¡[STAT] de [POKEMON] subió mucho con [ITEM]!",
|
||||
boost3FromItem: " ¡[STAT:definite:capitalize] de [POKEMON] ha aumentado muchísimo gracias [ITEM:a:definite]!",
|
||||
boostFromZEffect: " ¡[STAT:definite:capitalize] de [POKEMON] ha aumentado gracias al Poder Z!",
|
||||
boost2FromZEffect: " ¡[STAT:definite:capitalize] de [POKEMON] ha aumentado mucho gracias al Poder Z!",
|
||||
boost3FromZEffect: " ¡[STAT:definite:capitalize] de [POKEMON] ha aumentado muchísimo gracias al Poder Z!",
|
||||
boostMultipleFromZEffect: " ¡Varias características de [POKEMON] han aumentado gracias al Poder Z!",
|
||||
|
||||
unboost: " ¡[STAT:definite:capitalize] de [POKEMON] ha disminuido!",
|
||||
unboost2: " ¡[STAT:definite:capitalize] de [POKEMON] ha disminuido mucho!",
|
||||
unboost3: " ¡[STAT:definite:capitalize] de [POKEMON] ha disminuido muchísimo!",
|
||||
unboost0: " ¡[STAT:definite:capitalize] de [POKEMON] no puede disminuir más!",
|
||||
unboostFromItem: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
unboost2FromItem: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
unboost3FromItem: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
|
||||
swapBoost: " ¡[POKEMON] ha intercambiado los cambios en sus características con el objetivo!",
|
||||
swapOffensiveBoost: " ¡[POKEMON] ha intercambiado los cambios en el Ataque y el Ataque Especial con los del objetivo!",
|
||||
swapDefensiveBoost: " ¡[POKEMON] ha intercambiado los cambios en la Defensa y la Defensa Especial con los del objetivo!",
|
||||
copyBoost: " ¡[POKEMON] ha copiado los cambios en las características de [TARGET]!",
|
||||
clearBoost: " ¡Las características de [POKEMON] han vuelto a sus valores originales!",
|
||||
clearBoostFromZEffect: " ¡Las características de [POKEMON] que habían disminuido han vuelto a sus valores originales gracias al Poder Z!",
|
||||
invertBoost: " ¡Se han invertido los cambios en las características de [POKEMON]!",
|
||||
clearAllBoost: " ¡Se han eliminado todos los cambios en las características!",
|
||||
|
||||
superEffective: " ¡Es supereficaz!",
|
||||
superEffectiveSpread: " ¡Es supereficaz contra [POKEMON]!",
|
||||
resisted: " Es poco eficaz...",
|
||||
resistedSpread: " Es poco eficaz contra [POKEMON]...",
|
||||
extremelyEffective: " ¡Es hipereficaz!",
|
||||
extremelyEffectiveSpread: " ¡Es hipereficaz contra [POKEMON]!",
|
||||
mostlyIneffective: " Es muy poco eficaz...",
|
||||
mostlyIneffectiveSpread: " Es muy poco eficaz contra [POKEMON]...",
|
||||
crit: " ¡Un golpe crítico!",
|
||||
critSpread: " ¡[POKEMON] ha recibido un golpe crítico!",
|
||||
immune: " No afecta a [POKEMON]...",
|
||||
immuneNoPokemon: " ¡Pero no ha surtido efecto!",
|
||||
immuneOHKO: " ¡No ha afectado a [POKEMON]!",
|
||||
miss: " ¡[POKEMON] ha evitado el ataque!",
|
||||
missNoPokemon: " ¡El ataque de [SOURCE] falló!",
|
||||
|
||||
center: " Centrando Pokémon",
|
||||
noTarget: " Pero no había objetivo...",
|
||||
ohko: " ¡Es un golpe fulminante!",
|
||||
combine: " ¡Los dos movimientos se han unido! ¡Es un movimiento combinado!",
|
||||
hitCount: " N.º de golpes: [NUMBER].",
|
||||
},
|
||||
|
||||
// stats
|
||||
hp: {
|
||||
statName: "PS",
|
||||
statShortName: "PS",
|
||||
},
|
||||
atk: {
|
||||
statName: "Ataque",
|
||||
grammar: "ms",
|
||||
statShortName: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
},
|
||||
def: {
|
||||
statName: "Defensa",
|
||||
grammar: "fs",
|
||||
statShortName: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
},
|
||||
spa: {
|
||||
statName: "Ataque Especial",
|
||||
grammar: "ms",
|
||||
statShortName: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
},
|
||||
spd: {
|
||||
statName: "Defensa Especial",
|
||||
grammar: "fs",
|
||||
statShortName: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
},
|
||||
spe: {
|
||||
statName: "Velocidad",
|
||||
grammar: "fs",
|
||||
statShortName: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
},
|
||||
accuracy: {
|
||||
statName: "Precisión",
|
||||
grammar: "fs",
|
||||
},
|
||||
evasion: {
|
||||
statName: "Evasión",
|
||||
grammar: "fs",
|
||||
},
|
||||
spc: {
|
||||
statName: "Especial",
|
||||
grammar: "ms",
|
||||
statShortName: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
},
|
||||
stats: {
|
||||
statName: "Características",
|
||||
grammar: "fp",
|
||||
},
|
||||
|
||||
// statuses
|
||||
brn: {
|
||||
start: " ¡[POKEMON] se ha quemado!",
|
||||
startFromItem: " ¡[POKEMON] se ha quemado con [ITEM:definite:classified]!",
|
||||
alreadyStarted: " ¡[POKEMON] ya está quemado!",
|
||||
end: " ¡[POKEMON] ya no tiene quemaduras!",
|
||||
endFromItem: " ¡[POKEMON] ha curado sus quemaduras con [ITEM:definite]!",
|
||||
damage: " ¡[POKEMON] se resiente de las quemaduras!",
|
||||
},
|
||||
frz: {
|
||||
start: " ¡[POKEMON] ha sido congelado!",
|
||||
alreadyStarted: " ¡[POKEMON] ya está congelado!",
|
||||
end: " ¡[POKEMON] ya no está congelado!",
|
||||
endFromItem: " ¡[POKEMON] se ha descongelado gracias [ITEM:a:definite:classified]!",
|
||||
endFromMove: " ¡[POKEMON] ha derretido el hielo con [MOVE]!",
|
||||
cant: "¡[POKEMON] está congelado! No se puede mover.",
|
||||
},
|
||||
par: {
|
||||
start: " ¡[POKEMON] sufre parálisis! Quizá no se pueda mover.",
|
||||
alreadyStarted: " ¡[POKEMON] ya está paralizado!",
|
||||
end: " ¡[POKEMON] se ha curado de la parálisis!",
|
||||
endFromItem: " ¡[POKEMON] ya no está paralizado gracias [ITEM:a:definite:classified]!",
|
||||
cant: "¡[POKEMON] está paralizado! No se puede mover.",
|
||||
},
|
||||
psn: {
|
||||
start: " ¡[POKEMON] ha sido envenenado!",
|
||||
alreadyStarted: " ¡[POKEMON] ya está envenenado!",
|
||||
end: " ¡[POKEMON] ya no está envenenado!",
|
||||
endFromItem: " ¡[POKEMON] ya no está envenenado gracias [ITEM:a:definite]!",
|
||||
damage: " ¡El veneno resta PS a [POKEMON]!",
|
||||
},
|
||||
tox: {
|
||||
start: " ¡[POKEMON] ha sido gravemente envenenado!",
|
||||
startFromItem: " ¡[POKEMON] ha sido gravemente envenenado por [ITEM:definite:classified]!",
|
||||
end: "#psn",
|
||||
endFromItem: "#psn",
|
||||
alreadyStarted: "#psn",
|
||||
damage: "#psn",
|
||||
},
|
||||
slp: {
|
||||
start: " ¡[POKEMON] se ha dormido!",
|
||||
startFromRest: " ¡[POKEMON] se ha recuperado tras dormir un poco!",
|
||||
alreadyStarted: " ¡[POKEMON] ya está dormido!",
|
||||
end: " ¡[POKEMON] se ha despertado!",
|
||||
endFromItem: " ¡[POKEMON] se ha despertado gracias [ITEM:a:definite:classified]!",
|
||||
cant: "¡[POKEMON] está dormido como un tronco!",
|
||||
},
|
||||
|
||||
// misc effects
|
||||
confusion: {
|
||||
start: " ¡[POKEMON] se ha quedado confuso!",
|
||||
startFromFatigue: " ¡El cansancio ha terminado confundiendo a [POKEMON]!",
|
||||
end: " ¡[POKEMON] ya no está confuso!",
|
||||
endFromItem: " ¡[POKEMON] se ha librado de la confusión gracias [ITEM:a:definite:classified]!",
|
||||
alreadyStarted: " ¡[POKEMON] ya está confuso!",
|
||||
activate: " ¡[POKEMON] está confuso!",
|
||||
damage: "¡Está tan confuso que se ha herido a sí mismo!",
|
||||
},
|
||||
drain: {
|
||||
heal: " ¡La energía de [SOURCE] ha sido absorbida!",
|
||||
},
|
||||
flinch: {
|
||||
cant: "¡[POKEMON] se ha amedrentado y no puede lanzar ningún ataque!",
|
||||
},
|
||||
heal: {
|
||||
fail: " ¡Los PS de [POKEMON] están al máximo!",
|
||||
},
|
||||
healreplacement: {
|
||||
activate: " ¡[POKEMON] restaurará la salud de su relevo gracias al Poder Z!",
|
||||
},
|
||||
nopp: {
|
||||
cant: "¡[POKEMON] ha usado **[MOVE]**!\n ¡Pero no le quedan más PP para ejecutar ese movimiento!",
|
||||
},
|
||||
recharge: {
|
||||
cant: "¡[POKEMON] necesita recuperarse de su ataque!",
|
||||
},
|
||||
recoil: {
|
||||
damage: " ¡[POKEMON] también se ha hecho daño!",
|
||||
},
|
||||
unboost: {
|
||||
fail: " ¡Las características de [POKEMON] no han disminuido!",
|
||||
},
|
||||
struggle: {
|
||||
activate: " ¡A [POKEMON] no le quedan más movimientos!",
|
||||
},
|
||||
trapped: {
|
||||
start: " ¡[POKEMON] ya no puede escapar!",
|
||||
},
|
||||
dynamax: {
|
||||
start: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
end: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
block: " ¡La energía Dinamax ha bloqueado el movimiento!",
|
||||
fail: " [POKEMON] ha negado con la cabeza. Parece que no puede usar ese movimiento.",
|
||||
},
|
||||
|
||||
// weather
|
||||
sandstorm: {
|
||||
weatherName: "Tormenta de arena",
|
||||
start: " ¡Se ha desatado una tormenta de arena!",
|
||||
end: " ¡La tormenta de arena ha amainado!",
|
||||
upkeep: " (La tormenta de arena arrecia...)",
|
||||
damage: " ¡La tormenta de arena zarandea a [POKEMON]!",
|
||||
},
|
||||
sunnyday: {
|
||||
weatherName: "Sol",
|
||||
start: " ¡El sol pega fuerte!",
|
||||
end: " ¡El sol vuelve a brillar como siempre!",
|
||||
upkeep: " (Hace mucho sol...)",
|
||||
},
|
||||
raindance: {
|
||||
weatherName: "Lluvia",
|
||||
start: " ¡Ha empezado a llover!",
|
||||
end: " ¡Ha dejado de llover!",
|
||||
upkeep: " (Sigue lloviendo...)",
|
||||
},
|
||||
hail: {
|
||||
weatherName: "Granizo",
|
||||
start: " ¡Ha empezado a granizar!",
|
||||
end: " ¡Ha dejado de granizar!",
|
||||
upkeep: " (¡El granizo cae con violencia!)",
|
||||
damage: " ¡El granizo golpea a [POKEMON]!",
|
||||
},
|
||||
snowscape: {
|
||||
weatherName: "Nieve",
|
||||
start: " ¡Ha empezado a nevar!",
|
||||
end: " ¡Ha dejado de nevar!",
|
||||
upkeep: " (¡La nevada cae con fuerza!)",
|
||||
},
|
||||
desolateland: {
|
||||
weatherName: "Sol abrasador",
|
||||
start: " ¡El sol que hace ahora es realmente abrasador!",
|
||||
end: " ¡El sol vuelve a brillar como siempre!",
|
||||
block: " ¡El calor abrasador se mantiene sin perder un ápice de intensidad!",
|
||||
blockMove: " El sol brilla con tanta intensidad que el agua se evapora, lo que afecta a los movimientos de tipo Agua.",
|
||||
},
|
||||
primordialsea: {
|
||||
weatherName: "Diluvio",
|
||||
start: " ¡Ha empezado a diluviar!",
|
||||
end: " Ha dejado de diluviar.",
|
||||
block: " ¡No parece que vaya a dejar de diluviar!",
|
||||
blockMove: " ¡El diluvio impide todos los ataques de tipo Fuego!",
|
||||
},
|
||||
deltastream: {
|
||||
weatherName: "Turbulencias",
|
||||
start: " ¡Las misteriosas turbulencias protegen a los Pokémon de tipo Volador!",
|
||||
end: " Las misteriosas turbulencias han amainado.",
|
||||
activate: " ¡Las misteriosas turbulencias atenúan el ataque!",
|
||||
block: " ¡Las misteriosas turbulencias continúan sin cesar!",
|
||||
},
|
||||
|
||||
// terrain
|
||||
electricterrain: {
|
||||
start: " ¡Se ha formado un campo de corriente eléctrica en el terreno de combate!",
|
||||
end: " El campo de corriente eléctrica ha desaparecido.",
|
||||
block: " ¡El campo eléctrico ha protegido a [POKEMON]!",
|
||||
},
|
||||
grassyterrain: {
|
||||
start: " ¡El terreno de combate se ha cubierto de hierba!",
|
||||
end: " La hierba ha desaparecido.",
|
||||
heal: " ¡[POKEMON] ha recuperado PS!",
|
||||
},
|
||||
mistyterrain: {
|
||||
start: " ¡La niebla ha envuelto el terreno de combate!",
|
||||
end: " La niebla se ha disipado.",
|
||||
block: " ¡El campo de niebla ha protegido a [POKEMON]!",
|
||||
},
|
||||
psychicterrain: {
|
||||
start: " ¡El terreno de combate se ha vuelto muy extraño!",
|
||||
end: " Ha desaparecido la extraña sensación que se percibía en el terreno de combate.",
|
||||
block: " ¡El campo psíquico ha protegido a [POKEMON]!",
|
||||
},
|
||||
|
||||
// field effects
|
||||
gravity: {
|
||||
start: " ¡La gravedad se ha incrementado!",
|
||||
end: " La gravedad ha vuelto a su estado normal.",
|
||||
cant: "¡[POKEMON] no puede usar [MOVE] debido a la fuerza de la gravedad!",
|
||||
activate: "¡[POKEMON] no ha podido mantenerse en el aire debido al efecto de la gravedad!",
|
||||
},
|
||||
magicroom: {
|
||||
start: " ¡Se ha creado un espacio en el que todos los objetos de los Pokémon quedan inutilizados!",
|
||||
end: " Los efectos de Zona Mágica sobre los objetos de los Pokémon han desaparecido.",
|
||||
},
|
||||
mudsport: {
|
||||
start: " ¡La potencia de los movimientos de tipo Eléctrico ha disminuido!",
|
||||
end: " Chapoteo Lodo ha dejado de surtir efecto.",
|
||||
},
|
||||
trickroom: {
|
||||
start: " ¡[POKEMON] ha alterado las dimensiones!",
|
||||
end: " Se han restaurado las dimensiones alteradas.",
|
||||
},
|
||||
watersport: {
|
||||
start: " ¡La potencia de los movimientos de tipo Fuego ha disminuido!",
|
||||
end: " Hidrochorro ha dejado de surtir efecto.",
|
||||
},
|
||||
wonderroom: {
|
||||
start: " ¡Se ha creado un espacio en el que la Defensa y la Defensa Especial se invierten!",
|
||||
end: " Los efectos de Zona Extraña sobre la Defensa y la Defensa Especial han desaparecido.",
|
||||
},
|
||||
|
||||
// misc
|
||||
crash: {
|
||||
damage: " ¡[POKEMON] ha fallado y se ha caído al suelo!",
|
||||
},
|
||||
};
|
||||
2804
data/text/es/items.ts
Normal file
2804
data/text/es/items.ts
Normal file
File diff suppressed because it is too large
Load diff
7706
data/text/es/moves.ts
Normal file
7706
data/text/es/moves.ts
Normal file
File diff suppressed because it is too large
Load diff
3719
data/text/es/pokedex.ts
Normal file
3719
data/text/es/pokedex.ts
Normal file
File diff suppressed because it is too large
Load diff
2317
data/text/fr/abilities.ts
Normal file
2317
data/text/fr/abilities.ts
Normal file
File diff suppressed because it is too large
Load diff
386
data/text/fr/default.ts
Normal file
386
data/text/fr/default.ts
Normal file
|
|
@ -0,0 +1,386 @@
|
|||
export const DefaultText: { [id: IDEntry]: DefaultText } = {
|
||||
default: {
|
||||
startBattle: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
winBattle: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
tieBattle: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
|
||||
pokemon: "[NICKNAME]",
|
||||
opposingPokemon: "[NICKNAME] ennemi",
|
||||
team: "votre équipe",
|
||||
opposingTeam: "l’équipe ennemie",
|
||||
party: "les alliés",
|
||||
opposingParty: "l’équipe ennemie",
|
||||
|
||||
turn: "== [NUMBER] [INFLECT:NUMBER:s=tour:p=tours] ==",
|
||||
switchIn: "[TRAINER:definite:capitalize] envoie [FULLNAME] !",
|
||||
switchInOwn: "[FULLNAME] ! Go !",
|
||||
switchOut: "[TRAINER:definite:capitalize] retire [NICKNAME] !",
|
||||
switchOutOwn: "Reviens, [NICKNAME] !",
|
||||
drag: "[FULLNAME] est traîné de force au combat !",
|
||||
faint: "[POKEMON] est K.O. !",
|
||||
swap: "[POKEMON] et [TARGET] échangent leur place !",
|
||||
swapCenter: "[POKEMON] s’est déplacé au milieu !",
|
||||
|
||||
// Multi Battles only
|
||||
canDynamax: " [TRAINER] est maintenant capable d’utiliser le Dynamax !",
|
||||
canDynamaxOwn: " La puissance du Dynamax entoure [TRAINER] !",
|
||||
|
||||
zEffect: " [POKEMON] déploie toute la puissance de sa Force Z !",
|
||||
move: "[POKEMON] utilise **[MOVE]** !",
|
||||
abilityActivation: "[[ABILITY] [POKEMON:de]]",
|
||||
|
||||
mega: " [ITEM:definite:capitalize] [POKEMON:de] réagit à la Gemme Sésame de [TRAINER] !",
|
||||
megaNoItem: " [POKEMON] réagit à la Gemme Sésame de [TRAINER] !",
|
||||
megaGen6: " [ITEM:definite:capitalize] [POKEMON:de] réagi[INFLECT:ITEM:s=:p=ssen]t au Méga-Bracelet [TRAINER:de] !",
|
||||
transformMega: "[POKEMON] méga-évolue en Méga-[SPECIES] !",
|
||||
primal: "Primo-Résurgence [POKEMON:de] ! Il retrouve son apparence originelle !",
|
||||
zPower: " [POKEMON] déploie sa Force Z comme une aura !",
|
||||
zBroken: " [POKEMON] n’arrive pas à parer toute l’attaque et subit des dégâts !",
|
||||
terastallize: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
|
||||
// in case the different default messages didn't make it obvious, the difference
|
||||
// is that the `cant` message REPLACES "Pokemon used Move!", while the `fail`
|
||||
// message happens AFTER "Pokemon used Move!"
|
||||
cant: "[POKEMON] ne peut pas utiliser la capacité [MOVE] !",
|
||||
cantNoMove: "[POKEMON] est immobilisé!",
|
||||
fail: " Mais cela échoue !",
|
||||
|
||||
// n.b. this is the default message for in-battle forme changes
|
||||
// for the move Transform and ability Imposter, see the entry for the move Transform
|
||||
transform: "[POKEMON] se transforme !",
|
||||
typeChange: " [POKEMON] prend le type [TYPE] !",
|
||||
typeChangeFromEffect: " [EFFECT] du [POKEMON] le transforme en type [TYPE]!",
|
||||
typeAdd: " [POKEMON] gagne le type [TYPE].",
|
||||
|
||||
start: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
end: " [POKEMON] est libéré de la capacité [EFFECT] !",
|
||||
activate: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
startTeamEffect: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
endTeamEffect: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
startFieldEffect: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
endFieldEffect: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
|
||||
changeAbility: " Le talent [POKEMON:de] devient [ABILITY] !",
|
||||
addItem: " [POKEMON] obtient [ITEM:indefinite:classified] !",
|
||||
takeItem: " [POKEMON] vole [ITEM:definite:classified] [SOURCE:de] !",
|
||||
eatItem: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
useGem: " [ITEM:definite:capitalize:classified] renforce[INFLECT:ITEM:s=:p=nt] la capacité [MOVE] !",
|
||||
eatItemWeaken: " [ITEM:definite:capitalize:classified] rédui[INFLECT:ITEM:s=:p=sen]t les dégâts infligés à [POKEMON] !",
|
||||
removeItem: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
activateItem: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
activateWeaken: " [ITEM:definite:capitalize:classified] rédui[INFLECT:ITEM:s=:p=sen]t les dégâts infligés à [POKEMON] !",
|
||||
|
||||
damage: " ([POKEMON] est blessé !)",
|
||||
damagePercentage: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
damageFromPokemon: " [ITEM:definite:capitalize] [SOURCE:de] blesse[INFLECT:ITEM:s=:p=nt] [POKEMON] !",
|
||||
damageFromItem: " [POKEMON] est blessé par [ITEM:definite] !",
|
||||
damageFromPartialTrapping: " [POKEMON] est blessé par la capacité [MOVE] !",
|
||||
heal: " [POKEMON] récupère des PV !",
|
||||
healFromZEffect: " [POKEMON] utilise la Force Z pour se soigner !",
|
||||
healFromEffect: " [POKEMON] restaure ses PV grâce à [EFFECT]!",
|
||||
|
||||
boost: " [STAT:definite:capitalize] [POKEMON:de] augmente !",
|
||||
boost2: " [STAT:definite:capitalize] [POKEMON:de] augmente beaucoup !",
|
||||
boost3: " [STAT:definite:capitalize] [POKEMON:de] augmente énormément !",
|
||||
boost0: " [STAT:definite:capitalize] [POKEMON:de] ne peut plus augmenter !",
|
||||
boostFromItem: " [ITEM] de [POKEMON] augmente sa stat [STAT]!",
|
||||
boost2FromItem: " [ITEM] de [POKEMON] monte beaucoup sa stat [STAT]!",
|
||||
boost3FromItem: " Grâce [ITEM:a:definite], [STAT:definite:capitalize] [POKEMON:de] augmente énormément !",
|
||||
boostFromZEffect: " Grâce à la Force Z, [STAT:definite:capitalize] [POKEMON:de] augmente !",
|
||||
boost2FromZEffect: " Grâce à la Force Z, [STAT:definite:capitalize] [POKEMON:de] augmente beaucoup !",
|
||||
boost3FromZEffect: " Grâce à la Force Z, [STAT:definite:capitalize] [POKEMON:de] augmente énormément !",
|
||||
boostMultipleFromZEffect: " [POKEMON] utilise la Force Z pour augmenter ses stats !",
|
||||
|
||||
unboost: " [STAT:definite:capitalize] [POKEMON:de] baisse !",
|
||||
unboost2: " [STAT:definite:capitalize] [POKEMON:de] baisse beaucoup !",
|
||||
unboost3: " [STAT:definite:capitalize] [POKEMON:de] baisse énormément !",
|
||||
unboost0: " [STAT:definite:capitalize] [POKEMON:de] ne peut plus baisser !",
|
||||
unboostFromItem: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
unboost2FromItem: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
unboost3FromItem: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
|
||||
swapBoost: " [POKEMON] permute ses changements de stats avec ceux de sa cible !",
|
||||
swapOffensiveBoost: " [POKEMON] permute les changements d’Attaque et d’Attaque Spéciale avec ceux de sa cible !",
|
||||
swapDefensiveBoost: " [POKEMON] permute les changements de Défense et de Défense Spéciale avec ceux de sa cible !",
|
||||
copyBoost: " [POKEMON] copie les changements de stats [TARGET:de] !",
|
||||
clearBoost: " Les stats [POKEMON:de] sont revenues à la normale !",
|
||||
clearBoostFromZEffect: " [POKEMON] utilise la Force Z pour annuler ses baisses de stats !",
|
||||
invertBoost: " Les changements de stats [POKEMON:de] sont inversés !",
|
||||
clearAllBoost: " Les changements de stats ont tous été annulés !",
|
||||
|
||||
superEffective: " C’est super efficace !",
|
||||
superEffectiveSpread: " C’est super efficace sur [POKEMON] !",
|
||||
resisted: " Ce n’est pas très efficace...",
|
||||
resistedSpread: " Ce n’est pas très efficace sur [POKEMON]...",
|
||||
extremelyEffective: " C’est hyper efficace !!!",
|
||||
extremelyEffectiveSpread: " C’est hyper efficace sur [POKEMON] !!!",
|
||||
mostlyIneffective: " Ce n’est vraiment pas très efficace !",
|
||||
mostlyIneffectiveSpread: " Ce n’est vraiment pas très efficace sur [POKEMON] !",
|
||||
crit: " Coup critique !",
|
||||
critSpread: " Coup critique infligé à [POKEMON] !",
|
||||
immune: " Ça n’affecte pas [POKEMON]...",
|
||||
immuneNoPokemon: " Mais ça n’a aucun effet !",
|
||||
immuneOHKO: " [POKEMON] n’est pas affecté !",
|
||||
miss: " [POKEMON] évite l’attaque !",
|
||||
missNoPokemon: " [SOURCE] rate son attaque!",
|
||||
|
||||
center: " Réinitialisation !",
|
||||
noTarget: " Mais il n'y a pas de cible...",
|
||||
ohko: " K.O. en un coup !",
|
||||
combine: " Les deux capacités se sont combinées !",
|
||||
hitCount: " Touché [NUMBER] fois !",
|
||||
},
|
||||
|
||||
// stats
|
||||
hp: {
|
||||
statName: "PV",
|
||||
statShortName: "PV",
|
||||
},
|
||||
atk: {
|
||||
statName: "Attaque",
|
||||
grammar: "fs",
|
||||
statShortName: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
},
|
||||
def: {
|
||||
statName: "Défense",
|
||||
grammar: "fs",
|
||||
statShortName: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
},
|
||||
spa: {
|
||||
statName: "Attaque Spéciale",
|
||||
grammar: "fs",
|
||||
statShortName: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
},
|
||||
spd: {
|
||||
statName: "Défense Spéciale",
|
||||
grammar: "fs",
|
||||
statShortName: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
},
|
||||
spe: {
|
||||
statName: "Vitesse",
|
||||
grammar: "fs",
|
||||
statShortName: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
},
|
||||
accuracy: {
|
||||
statName: "Précision",
|
||||
grammar: "fs",
|
||||
},
|
||||
evasion: {
|
||||
statName: "Esquive",
|
||||
grammar: "fs",
|
||||
},
|
||||
spc: {
|
||||
statName: "Spécial",
|
||||
grammar: "ms",
|
||||
statShortName: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
},
|
||||
stats: {
|
||||
statName: "Stats",
|
||||
grammar: "fp",
|
||||
},
|
||||
|
||||
// statuses
|
||||
brn: {
|
||||
start: " [POKEMON] est brûlé !",
|
||||
startFromItem: " [POKEMON] est brûlé par [ITEM:definite:classified] !",
|
||||
alreadyStarted: " [POKEMON] est déjà brûlé.",
|
||||
end: " [POKEMON] n’est plus brûlé !",
|
||||
endFromItem: " [ITEM:definite:capitalize] [POKEMON:de] le guéri[INFLECT:ITEM:s=:p=ssen]t de sa brûlure !",
|
||||
damage: " [POKEMON] souffre de sa brûlure !",
|
||||
},
|
||||
frz: {
|
||||
start: " [POKEMON] est gelé !",
|
||||
alreadyStarted: " [POKEMON] est déjà gelé.",
|
||||
end: " [POKEMON] n’est plus gelé !",
|
||||
endFromItem: " [ITEM:definite:capitalize:classified] [POKEMON:de] le dégèle[INFLECT:ITEM:s=:p=nt] !",
|
||||
endFromMove: " La glace a fondu grâce à la capacité [MOVE] [POKEMON:de] !",
|
||||
cant: "[POKEMON] est gelé ! Il ne peut plus agir !",
|
||||
},
|
||||
par: {
|
||||
start: " [POKEMON] est paralysé ! Il aura du mal à utiliser des capacités !",
|
||||
alreadyStarted: " [POKEMON] est déjà paralysé.",
|
||||
end: " [POKEMON] n’est plus paralysé !",
|
||||
endFromItem: " [ITEM:definite:capitalize:classified] [POKEMON:de] le sort[INFLECT:ITEM:s=:p=ent] de sa paralysie !",
|
||||
cant: "[POKEMON] est paralysé ! Il n’a pas pu attaquer !",
|
||||
},
|
||||
psn: {
|
||||
start: " [POKEMON] est empoisonné !",
|
||||
alreadyStarted: " [POKEMON] est déjà empoisonné.",
|
||||
end: " [POKEMON] n’est plus empoisonné !",
|
||||
endFromItem: " [ITEM:definite:capitalize] [POKEMON:de] le guéri[INFLECT:ITEM:s=:p=ssen]t de son empoisonnement !",
|
||||
damage: " [POKEMON] souffre du poison !",
|
||||
},
|
||||
tox: {
|
||||
start: " [POKEMON] est gravement empoisonné !",
|
||||
startFromItem: " [POKEMON] est gravement empoisonné par [ITEM:definite:classified] !",
|
||||
end: "#psn",
|
||||
endFromItem: "#psn",
|
||||
alreadyStarted: "#psn",
|
||||
damage: "#psn",
|
||||
},
|
||||
slp: {
|
||||
start: " [POKEMON] s’est endormi !",
|
||||
startFromRest: " [POKEMON] a récupéré en dormant !",
|
||||
alreadyStarted: " [POKEMON] dort déjà.",
|
||||
end: " [POKEMON] se réveille !",
|
||||
endFromItem: " [ITEM:definite:capitalize:classified] [POKEMON:de] le réveille[INFLECT:ITEM:s=:p=nt] !",
|
||||
cant: "[POKEMON] dort profondément.",
|
||||
},
|
||||
|
||||
// misc effects
|
||||
confusion: {
|
||||
start: " Ça rend [POKEMON] confus !",
|
||||
startFromFatigue: " La fatigue rend [POKEMON] confus !",
|
||||
end: " [POKEMON] n’est plus confus !",
|
||||
endFromItem: " [ITEM:definite:capitalize:classified] [POKEMON:de] le tire[INFLECT:ITEM:s=:p=nt] de sa confusion !",
|
||||
alreadyStarted: " [POKEMON] est déjà confus !",
|
||||
activate: " [POKEMON] est confus !",
|
||||
damage: "Il se blesse dans sa confusion.",
|
||||
},
|
||||
drain: {
|
||||
heal: " L’énergie [SOURCE:de] est drainée !",
|
||||
},
|
||||
flinch: {
|
||||
cant: "[POKEMON] a la trouille ! Il ne peut pas utiliser sa capacité !",
|
||||
},
|
||||
heal: {
|
||||
fail: " Les PV [POKEMON:de] sont au maximum !",
|
||||
},
|
||||
healreplacement: {
|
||||
activate: " [POKEMON] utilise la Force Z pour soigner un allié qui entrera sur le terrain !",
|
||||
},
|
||||
nopp: {
|
||||
cant: "[POKEMON] utilise **[MOVE]** !\n Mais cette capacité n’a plus de PP !",
|
||||
},
|
||||
recharge: {
|
||||
cant: "L’épuisement empêche [POKEMON] d’agir !",
|
||||
},
|
||||
recoil: {
|
||||
damage: " [POKEMON] est blessé par le contrecoup !",
|
||||
},
|
||||
unboost: {
|
||||
fail: " Les stats [POKEMON:de] ne baissent pas !",
|
||||
},
|
||||
struggle: {
|
||||
activate: " [POKEMON] n’a plus de capacités utilisables !",
|
||||
},
|
||||
trapped: {
|
||||
start: " [POKEMON] ne peut plus s’échapper !",
|
||||
},
|
||||
dynamax: {
|
||||
start: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
end: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
block: " La puissance du Dynamax a bloqué l’attaque !",
|
||||
fail: " [POKEMON] fait non de la tête. On dirait qu’il ne peut pas utiliser cette capacité...",
|
||||
},
|
||||
|
||||
// weather
|
||||
sandstorm: {
|
||||
weatherName: "Tempête de sable",
|
||||
start: " Une tempête de sable se prépare !",
|
||||
end: " La tempête de sable se calme !",
|
||||
upkeep: " (La tempête de sable fait rage !)",
|
||||
damage: " La tempête de sable inflige des dégâts à [POKEMON] !",
|
||||
},
|
||||
sunnyday: {
|
||||
weatherName: "Soleil",
|
||||
start: " Les rayons du soleil brillent !",
|
||||
end: " Les rayons du soleil s’affaiblissent !",
|
||||
upkeep: " (Les rayons du soleil sont forts.)",
|
||||
},
|
||||
raindance: {
|
||||
weatherName: "Pluie",
|
||||
start: " Il commence à pleuvoir !",
|
||||
end: " La pluie s’est arrêtée !",
|
||||
upkeep: " (La pluie continue de tomber.)",
|
||||
},
|
||||
hail: {
|
||||
weatherName: "Grêle",
|
||||
start: " Il commence à grêler !",
|
||||
end: " La grêle s’est arrêtée !",
|
||||
upkeep: " (Il y a un déluge de grêle.)",
|
||||
damage: " La tempête de grêle inflige des dégâts à [POKEMON] !",
|
||||
},
|
||||
snowscape: {
|
||||
weatherName: "Neige",
|
||||
start: " Il commence à neiger !",
|
||||
end: " La neige s’est arrêtée !",
|
||||
upkeep: " (Il y a une tempête de neige !)",
|
||||
},
|
||||
desolateland: {
|
||||
weatherName: "Soleil intense",
|
||||
start: " Les rayons du soleil s’intensifient !",
|
||||
end: " Les rayons du soleil s’affaiblissent !",
|
||||
block: " Le soleil brille si intensément que rien ne peut l’obscurcir !",
|
||||
blockMove: " Le soleil brille si intensément que toute attaque de type Eau s’évapore !",
|
||||
},
|
||||
primordialsea: {
|
||||
weatherName: "Pluie battante",
|
||||
start: " Une pluie battante s’abat soudainement !",
|
||||
end: " La pluie battante s’est arrêtée...",
|
||||
block: " Impossible de dissiper une telle pluie !",
|
||||
blockMove: " La pluie battante empêche toute attaque de type Feu !",
|
||||
},
|
||||
deltastream: {
|
||||
weatherName: "Vent mystérieux",
|
||||
start: " Un vent mystérieux enveloppe les Pokémon de type Vol !",
|
||||
end: " Le vent mystérieux s’est dissipé...",
|
||||
activate: " Le vent mystérieux affaiblit l’attaque !",
|
||||
block: " Impossible de ramener l’atmosphère à la normale !",
|
||||
},
|
||||
|
||||
// terrain
|
||||
electricterrain: {
|
||||
start: " De l’électricité parcourt le terrain !",
|
||||
end: " L’électricité parcourant le terrain s’est dissipée...",
|
||||
block: " [POKEMON] est protégé par un champ électrifié !",
|
||||
},
|
||||
grassyterrain: {
|
||||
start: " Un beau gazon pousse sur le terrain !",
|
||||
end: " Le gazon disparaît...",
|
||||
heal: " [POKEMON] récupère des PV !",
|
||||
},
|
||||
mistyterrain: {
|
||||
start: " La brume recouvre le terrain !",
|
||||
end: " La brume qui recouvrait le terrain se dissipe...",
|
||||
block: " [POKEMON] est protégé par un champ brumeux !",
|
||||
},
|
||||
psychicterrain: {
|
||||
start: " Le sol se met à réagir de façon bizarre...",
|
||||
end: " Le sol redevient normal !",
|
||||
block: " [POKEMON] est protégé par un champ psychique !",
|
||||
},
|
||||
|
||||
// field effects
|
||||
gravity: {
|
||||
start: " La gravité s’intensifie !",
|
||||
end: " La gravité est revenue à la normale !",
|
||||
cant: "[POKEMON] ne peut pas utiliser la capacité [MOVE] à cause du changement de gravité !",
|
||||
activate: "[POKEMON] ne peut pas rester en l’air à cause du changement de gravité !",
|
||||
},
|
||||
magicroom: {
|
||||
start: " L’effet des objets tenus est neutralisé !",
|
||||
end: " La zone magique a disparu. L’effet des objets tenus est rétabli !",
|
||||
},
|
||||
mudsport: {
|
||||
start: " La puissance des capacités de type Électrik diminue !",
|
||||
end: " L’effet de Lance-Boue se dissipe !",
|
||||
},
|
||||
trickroom: {
|
||||
start: " [POKEMON] fausse les dimensions !",
|
||||
end: " Les dimensions faussées reviennent à la normale !",
|
||||
},
|
||||
watersport: {
|
||||
start: " La puissance des capacités de type Feu diminue !",
|
||||
end: " L’effet de Tourniquet se dissipe !",
|
||||
},
|
||||
wonderroom: {
|
||||
start: " La Défense et la Défense Spéciale sont interverties !",
|
||||
end: " La zone étrange a disparu. La Défense et la Défense Spéciale sont revenues à la normale !",
|
||||
},
|
||||
|
||||
// misc
|
||||
crash: {
|
||||
damage: " [POKEMON] s’écrase au sol !",
|
||||
},
|
||||
};
|
||||
2819
data/text/fr/items.ts
Normal file
2819
data/text/fr/items.ts
Normal file
File diff suppressed because it is too large
Load diff
7706
data/text/fr/moves.ts
Normal file
7706
data/text/fr/moves.ts
Normal file
File diff suppressed because it is too large
Load diff
3896
data/text/fr/pokedex.ts
Normal file
3896
data/text/fr/pokedex.ts
Normal file
File diff suppressed because it is too large
Load diff
2317
data/text/it/abilities.ts
Normal file
2317
data/text/it/abilities.ts
Normal file
File diff suppressed because it is too large
Load diff
386
data/text/it/default.ts
Normal file
386
data/text/it/default.ts
Normal file
|
|
@ -0,0 +1,386 @@
|
|||
export const DefaultText: { [id: IDEntry]: DefaultText } = {
|
||||
default: {
|
||||
startBattle: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
winBattle: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
tieBattle: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
|
||||
pokemon: "[NICKNAME]",
|
||||
opposingPokemon: "[NICKNAME] avversario",
|
||||
team: "la tua squadra",
|
||||
opposingTeam: "la squadra avversaria",
|
||||
party: "i Pokémon alleati",
|
||||
opposingParty: "i Pokémon nemici",
|
||||
|
||||
turn: "== [NUMBER] turn[INFLECT:NUMBER:s=o:p=i] ==",
|
||||
switchIn: "[TRAINER:definite:capitalize] manda in campo [FULLNAME]!",
|
||||
switchInOwn: "Avanti, [FULLNAME]!",
|
||||
switchOut: "[TRAINER:definite:capitalize] ritira [NICKNAME] dalla lotta!",
|
||||
switchOutOwn: "[NICKNAME], rientra!",
|
||||
drag: "[FULLNAME] è trascinato nella lotta!",
|
||||
faint: "[POKEMON] non ha più energie!",
|
||||
swap: "[POKEMON] e [TARGET] si scambiano di posto!",
|
||||
swapCenter: "[POKEMON] passa in prima linea!",
|
||||
|
||||
// Multi Battles only
|
||||
canDynamax: " [TRAINER] ora può usare il Dynamax!",
|
||||
canDynamaxOwn: " L’energia Dynamax avvolge [TRAINER]!",
|
||||
|
||||
zEffect: " [POKEMON] usa una mossa Z sprigionando tutta la sua potenza!",
|
||||
move: "[POKEMON] usa **[MOVE]**!",
|
||||
abilityActivation: "[[ABILITY] di [POKEMON]]",
|
||||
|
||||
mega: " [ITEM:definite:capitalize] di [POKEMON] reagisce alla Pietrachiave di [TRAINER]!",
|
||||
megaNoItem: " [POKEMON] reagisce alla Pietrachiave di [TRAINER]!",
|
||||
megaGen6: " [ITEM:definite:capitalize] di [POKEMON] reagisce al Megabracciale di [TRAINER]!",
|
||||
transformMega: "[POKEMON] si evolve in Mega[SPECIES]!",
|
||||
primal: "[POKEMON] si è archeorisvegliato! È tornato alla sua forma originaria!",
|
||||
zPower: " Il Potere Z circonda [POKEMON] come un’aura!",
|
||||
zBroken: " La protezione fallisce! [POKEMON] subisce dei danni!",
|
||||
terastallize: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
|
||||
// in case the different default messages didn't make it obvious, the difference
|
||||
// is that the `cant` message REPLACES "Pokemon used Move!", while the `fail`
|
||||
// message happens AFTER "Pokemon used Move!"
|
||||
cant: "[POKEMON] non può usare [MOVE]!",
|
||||
cantNoMove: "[POKEMON] è immobilizzato!",
|
||||
fail: " Ma fallisce!",
|
||||
|
||||
// n.b. this is the default message for in-battle forme changes
|
||||
// for the move Transform and ability Imposter, see the entry for the move Transform
|
||||
transform: "[POKEMON] si è trasformato!",
|
||||
typeChange: " [POKEMON] è diventato di tipo [TYPE]!",
|
||||
typeChangeFromEffect: " [EFFECT] di [POKEMON] lo ha reso di tipo [TYPE]!",
|
||||
typeAdd: " Adesso [POKEMON] è anche di tipo [TYPE]!",
|
||||
|
||||
start: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
end: " [POKEMON] si è liberato da [EFFECT]!",
|
||||
activate: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
startTeamEffect: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
endTeamEffect: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
startFieldEffect: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
endFieldEffect: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
|
||||
changeAbility: " L’abilità di [POKEMON] è ora [ABILITY]!",
|
||||
addItem: " [POKEMON] ottiene [ITEM:indefinite:classified]!",
|
||||
takeItem: " [POKEMON] ruba [ITEM:definite:classified] di [SOURCE]!",
|
||||
eatItem: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
useGem: " [ITEM:definite:capitalize:classified] incrementa la potenza di [MOVE]!",
|
||||
eatItemWeaken: " I danni inflitti [POKEMON:a] vengono ridotti d[ITEM:a:definite:classified]!",
|
||||
removeItem: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
activateItem: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
activateWeaken: " I danni inflitti [POKEMON:a] vengono ridotti d[ITEM:a:definite:classified]!",
|
||||
|
||||
damage: " ([POKEMON] è ferito!)",
|
||||
damagePercentage: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
damageFromPokemon: " [ITEM:definite:capitalize] di [SOURCE] ferisc[INFLECT:ITEM:s=e:p=ono] [POKEMON]!",
|
||||
damageFromItem: " [POKEMON] subisce dei danni a causa [ITEM:di:definite]!",
|
||||
damageFromPartialTrapping: " [POKEMON] subisce i danni della mossa [MOVE]!",
|
||||
heal: " [POKEMON] ha recuperato dei PS!",
|
||||
healFromZEffect: " Il Potere Z fa recuperare PS [POKEMON:a]!",
|
||||
healFromEffect: " [POKEMON] ricarica PS usando [EFFECT]!",
|
||||
|
||||
boost: " [STAT:definite:capitalize] di [POKEMON] aumenta!",
|
||||
boost2: " [STAT:definite:capitalize] di [POKEMON] aumenta di molto!",
|
||||
boost3: " [STAT:definite:capitalize] di [POKEMON] aumenta di moltissimo!",
|
||||
boost0: " [STAT:definite:capitalize] di [POKEMON] non può aumentare di più!",
|
||||
boostFromItem: " Con [ITEM], [STAT] di [POKEMON] sale!",
|
||||
boost2FromItem: " Con [ITEM], [STAT] di [POKEMON] sale di molto!",
|
||||
boost3FromItem: " [STAT:definite:capitalize] di [POKEMON] aumenta moltissimo grazie [ITEM:a:definite]!",
|
||||
boostFromZEffect: " [STAT:definite:capitalize] di [POKEMON] aumenta grazie al Potere Z!",
|
||||
boost2FromZEffect: " [STAT:definite:capitalize] di [POKEMON] aumenta di molto grazie al Potere Z!",
|
||||
boost3FromZEffect: " [STAT:definite:capitalize] di [POKEMON] aumenta moltissimo grazie al Potere Z!",
|
||||
boostMultipleFromZEffect: " Le statistiche di [POKEMON] aumentano grazie al Potere Z!",
|
||||
|
||||
unboost: " [STAT:definite:capitalize] di [POKEMON] diminuisce!",
|
||||
unboost2: " [STAT:definite:capitalize] di [POKEMON] diminuisce di molto!",
|
||||
unboost3: " [STAT:definite:capitalize] di [POKEMON] cala drasticamente!",
|
||||
unboost0: " [STAT:definite:capitalize] di [POKEMON] non può diminuire di più!",
|
||||
unboostFromItem: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
unboost2FromItem: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
unboost3FromItem: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
|
||||
swapBoost: " [POKEMON] scambia con il bersaglio le modifiche alle statistiche!",
|
||||
swapOffensiveBoost: " [POKEMON] scambia con il bersaglio le modifiche ad Attacco e Attacco Speciale!",
|
||||
swapDefensiveBoost: " [POKEMON] scambia con il bersaglio le modifiche a Difesa e Difesa Speciale!",
|
||||
copyBoost: " [POKEMON] copia le modifiche alle statistiche di [TARGET]!",
|
||||
clearBoost: " Le statistiche di [POKEMON] tornano alla normalità!",
|
||||
clearBoostFromZEffect: " Le statistiche di [POKEMON] che erano diminuite tornano alla normalità grazie al Potere Z!",
|
||||
invertBoost: " Le modifiche alle statistiche di [POKEMON] vengono invertite!",
|
||||
clearAllBoost: " Tutte le modifiche alle statistiche sono state annullate!",
|
||||
|
||||
superEffective: " È superefficace!",
|
||||
superEffectiveSpread: " È superefficace su [POKEMON]!",
|
||||
resisted: " Non è molto efficace...",
|
||||
resistedSpread: " Non è molto efficace su [POKEMON]...",
|
||||
extremelyEffective: " È iperefficace!!",
|
||||
extremelyEffectiveSpread: " È iperefficace su [POKEMON]!!",
|
||||
mostlyIneffective: " Non è quasi per niente efficace...",
|
||||
mostlyIneffectiveSpread: " Non è quasi per niente efficace su [POKEMON]...",
|
||||
crit: " Brutto colpo!",
|
||||
critSpread: " [POKEMON] subisce un brutto colpo!",
|
||||
immune: " Non ha effetto su [POKEMON]...",
|
||||
immuneNoPokemon: " Ma è inefficace!",
|
||||
immuneOHKO: " [POKEMON] è incolume!",
|
||||
miss: " [POKEMON] evita l’attacco!",
|
||||
missNoPokemon: " L'attacco di [SOURCE] fallisce!",
|
||||
|
||||
center: " Centramento!",
|
||||
noTarget: " Ma il Pokémon non c'è...",
|
||||
ohko: " È un colpo da KO!",
|
||||
combine: " Formidabile! Due mosse che diventano una! È una mossa combinata!",
|
||||
hitCount: " Colpi inflitti: [NUMBER]!",
|
||||
},
|
||||
|
||||
// stats
|
||||
hp: {
|
||||
statName: "PS",
|
||||
statShortName: "PS",
|
||||
},
|
||||
atk: {
|
||||
statName: "Attacco",
|
||||
grammar: "ms",
|
||||
statShortName: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
},
|
||||
def: {
|
||||
statName: "Difesa",
|
||||
grammar: "fs",
|
||||
statShortName: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
},
|
||||
spa: {
|
||||
statName: "Attacco Speciale",
|
||||
grammar: "ms",
|
||||
statShortName: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
},
|
||||
spd: {
|
||||
statName: "Difesa Speciale",
|
||||
grammar: "fs",
|
||||
statShortName: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
},
|
||||
spe: {
|
||||
statName: "Velocità",
|
||||
grammar: "fs",
|
||||
statShortName: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
},
|
||||
accuracy: {
|
||||
statName: "precisione",
|
||||
grammar: "fs",
|
||||
},
|
||||
evasion: {
|
||||
statName: "elusione",
|
||||
grammar: "fs",
|
||||
},
|
||||
spc: {
|
||||
statName: "Speciale",
|
||||
grammar: "ms",
|
||||
statShortName: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
},
|
||||
stats: {
|
||||
statName: "Statistiche",
|
||||
grammar: "fp",
|
||||
},
|
||||
|
||||
// statuses
|
||||
brn: {
|
||||
start: " [POKEMON] è stato scottato!",
|
||||
startFromItem: " [POKEMON] è stato scottato d[ITEM:a:definite:classified]!",
|
||||
alreadyStarted: " [POKEMON] è già scottato.",
|
||||
end: " [POKEMON] guarisce dalla scottatura!",
|
||||
endFromItem: " [POKEMON] guarisce dalla scottatura grazie [ITEM:a:definite]!",
|
||||
damage: " [POKEMON] soffre per la scottatura!",
|
||||
},
|
||||
frz: {
|
||||
start: " [POKEMON] è stato congelato!",
|
||||
alreadyStarted: " [POKEMON] è già congelato.",
|
||||
end: " [POKEMON] non è più congelato!",
|
||||
endFromItem: " [POKEMON] si è scongelato grazie [ITEM:a:definite:classified]!",
|
||||
endFromMove: " [MOVE] di [POKEMON] scioglie il ghiaccio!",
|
||||
cant: "[POKEMON] è congelato! Non può agire!",
|
||||
},
|
||||
par: {
|
||||
start: " [POKEMON] è stato paralizzato! Forse non riuscirà ad agire!",
|
||||
alreadyStarted: " [POKEMON] è già paralizzato!",
|
||||
end: " [POKEMON] guarisce dalla paralisi!",
|
||||
endFromItem: " [POKEMON] guarisce dalla paralisi grazie [ITEM:a:definite:classified]!",
|
||||
cant: "[POKEMON] è paralizzato! Non può agire!",
|
||||
},
|
||||
psn: {
|
||||
start: " [POKEMON] è stato avvelenato!",
|
||||
alreadyStarted: " [POKEMON] è già avvelenato.",
|
||||
end: " [POKEMON] guarisce dall’avvelenamento!",
|
||||
endFromItem: " [POKEMON] guarisce dall’avvelenamento grazie [ITEM:a:definite]!",
|
||||
damage: " Il veleno ha effetto su [POKEMON]!",
|
||||
},
|
||||
tox: {
|
||||
start: " [POKEMON] è stato iperavvelenato!",
|
||||
startFromItem: " [POKEMON] è stato iperavvelenato d[ITEM:a:definite:classified]!",
|
||||
end: "#psn",
|
||||
endFromItem: "#psn",
|
||||
alreadyStarted: "#psn",
|
||||
damage: "#psn",
|
||||
},
|
||||
slp: {
|
||||
start: " [POKEMON] si è addormentato!",
|
||||
startFromRest: " [POKEMON] ha recuperato le energie durante il sonno!",
|
||||
alreadyStarted: " [POKEMON] sta già dormendo!",
|
||||
end: " [POKEMON] si è svegliato!",
|
||||
endFromItem: " [POKEMON] si è svegliato grazie [ITEM:a:definite:classified]!",
|
||||
cant: "[POKEMON] dorme.",
|
||||
},
|
||||
|
||||
// misc effects
|
||||
confusion: {
|
||||
start: " [POKEMON] entra in stato di confusione!",
|
||||
startFromFatigue: " [POKEMON] è confuso per la fatica!",
|
||||
end: " [POKEMON] non è più confuso!",
|
||||
endFromItem: " [POKEMON] si libera dalla confusione grazie [ITEM:a:definite:classified]!",
|
||||
alreadyStarted: " [POKEMON] è già confuso!",
|
||||
activate: " [POKEMON] è confuso!",
|
||||
damage: "È così confuso da colpirsi da solo!",
|
||||
},
|
||||
drain: {
|
||||
heal: " Viene prelevata energia da [SOURCE]!",
|
||||
},
|
||||
flinch: {
|
||||
cant: "[POKEMON] tentenna! Non può agire!",
|
||||
},
|
||||
heal: {
|
||||
fail: " [POKEMON] ha già tutti i PS!",
|
||||
},
|
||||
healreplacement: {
|
||||
activate: " [POKEMON] fa recuperare PS al Pokémon che entra in campo grazie al Potere Z!",
|
||||
},
|
||||
nopp: {
|
||||
cant: "[POKEMON] usa **[MOVE]**!\n Ma non ha PP per sferrare la mossa!",
|
||||
},
|
||||
recharge: {
|
||||
cant: "[POKEMON] deve ricaricarsi!",
|
||||
},
|
||||
recoil: {
|
||||
damage: " [POKEMON] ha subito il contraccolpo!",
|
||||
},
|
||||
unboost: {
|
||||
fail: " La diminuzione delle statistiche di [POKEMON] è stata evitata!",
|
||||
},
|
||||
struggle: {
|
||||
activate: " [POKEMON] non ha più mosse da sferrare!",
|
||||
},
|
||||
trapped: {
|
||||
start: " [POKEMON] non può più scappare!",
|
||||
},
|
||||
dynamax: {
|
||||
start: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
end: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
block: " La mossa è stata vanificata dalla potenza del fenomeno Dynamax!",
|
||||
fail: " [POKEMON] scuote il capo. Sembra che non riesca a usare questa mossa...",
|
||||
},
|
||||
|
||||
// weather
|
||||
sandstorm: {
|
||||
weatherName: "Tempesta di sabbia",
|
||||
start: " Inizia una tempesta di sabbia!",
|
||||
end: " La tempesta di sabbia cessa!",
|
||||
upkeep: " (La tempesta di sabbia imperversa!)",
|
||||
damage: " La tempesta di sabbia infligge danni [POKEMON:a]!",
|
||||
},
|
||||
sunnyday: {
|
||||
weatherName: "Sole intenso",
|
||||
start: " La luce solare diventa intensa!",
|
||||
end: " La luce solare torna normale!",
|
||||
upkeep: " (La luce solare è fortissima!)",
|
||||
},
|
||||
raindance: {
|
||||
weatherName: "Pioggia",
|
||||
start: " Inizia a piovere!",
|
||||
end: " Smette di piovere!",
|
||||
upkeep: " (Continua a piovere.)",
|
||||
},
|
||||
hail: {
|
||||
weatherName: "Grandine",
|
||||
start: " Inizia a grandinare!",
|
||||
end: " Smette di grandinare!",
|
||||
upkeep: " (La grandine imperversa!)",
|
||||
damage: " La grandine infligge danni a [POKEMON]!",
|
||||
},
|
||||
snowscape: {
|
||||
weatherName: "Neve",
|
||||
start: " Inizia a nevicare!",
|
||||
end: " Smette di nevicare!",
|
||||
upkeep: " (La neve imperversa!)",
|
||||
},
|
||||
desolateland: {
|
||||
weatherName: "Sole accecante",
|
||||
start: " La luce solare diventa accecante!",
|
||||
end: " La luce solare torna normale!",
|
||||
block: " La luce accecante non si attenua!",
|
||||
blockMove: " La luce solare accecante neutralizza le mosse di tipo Acqua!",
|
||||
},
|
||||
primordialsea: {
|
||||
weatherName: "Acquazzone",
|
||||
start: " È scoppiato un acquazzone!",
|
||||
end: " Smette di piovere!",
|
||||
block: " L’acquazzone non si placa!",
|
||||
blockMove: " L’acquazzone neutralizza le mosse di tipo Fuoco!",
|
||||
},
|
||||
deltastream: {
|
||||
weatherName: "Vento misterioso",
|
||||
start: " Una corrente d’aria misteriosa protegge i Pokémon di tipo Volante!",
|
||||
end: " La corrente d’aria misteriosa si placa!",
|
||||
activate: " La corrente misteriosa indebolisce l’attacco!",
|
||||
block: " La corrente misteriosa non si placa!",
|
||||
},
|
||||
|
||||
// terrain
|
||||
electricterrain: {
|
||||
start: " Ai piedi dei Pokémon si accumula dell’elettricità.",
|
||||
end: " L’elettricità svanisce.",
|
||||
block: " Il Campo Elettrico protegge [POKEMON]!",
|
||||
},
|
||||
grassyterrain: {
|
||||
start: " Ai piedi dei Pokémon cresce rigogliosa l’erba.",
|
||||
end: " L’erba sparisce.",
|
||||
heal: " [POKEMON] ha recuperato dei PS!",
|
||||
},
|
||||
mistyterrain: {
|
||||
start: " Ai piedi dei Pokémon si addensa la nebbia.",
|
||||
end: " La nebbia si dissolve.",
|
||||
block: " Il Campo Nebbioso protegge [POKEMON]!",
|
||||
},
|
||||
psychicterrain: {
|
||||
start: " Nel campo si avverte una strana sensazione...",
|
||||
end: " La strana sensazione nel campo è svanita!",
|
||||
block: " Il Campo Psichico protegge [POKEMON]!",
|
||||
},
|
||||
|
||||
// field effects
|
||||
gravity: {
|
||||
start: " La gravità si intensifica!",
|
||||
end: " La gravità torna normale!",
|
||||
cant: "L’aumento di gravità impedisce [POKEMON:a] di usare [MOVE]!",
|
||||
activate: "[POKEMON] non riesce a rimanere in aria a causa della gravità alterata!",
|
||||
},
|
||||
magicroom: {
|
||||
start: " È stata creata una nuova dimensione in cui gli strumenti dati ai Pokémon non hanno effetto!",
|
||||
end: " La nuova dimensione svanisce e gli strumenti tornano ad avere effetto!",
|
||||
},
|
||||
mudsport: {
|
||||
start: " La potenza delle mosse di tipo Elettro diminuisce!",
|
||||
end: " L’effetto di Fangata è svanito!",
|
||||
},
|
||||
trickroom: {
|
||||
start: " [POKEMON] crea una dimensione distorta!",
|
||||
end: " La dimensione distorta torna alla normalità!",
|
||||
},
|
||||
watersport: {
|
||||
start: " La potenza delle mosse di tipo Fuoco diminuisce!",
|
||||
end: " L’effetto di Docciascudo è svanito!",
|
||||
},
|
||||
wonderroom: {
|
||||
start: " È stata creata una nuova dimensione in cui Difesa e Difesa Speciale vengono scambiate!",
|
||||
end: " La nuova dimensione svanisce: Difesa e Difesa Speciale tornano alla normalità!",
|
||||
},
|
||||
|
||||
// misc
|
||||
crash: {
|
||||
damage: " [POKEMON] si sbilancia e si schianta!",
|
||||
},
|
||||
};
|
||||
2807
data/text/it/items.ts
Normal file
2807
data/text/it/items.ts
Normal file
File diff suppressed because it is too large
Load diff
7706
data/text/it/moves.ts
Normal file
7706
data/text/it/moves.ts
Normal file
File diff suppressed because it is too large
Load diff
3719
data/text/it/pokedex.ts
Normal file
3719
data/text/it/pokedex.ts
Normal file
File diff suppressed because it is too large
Load diff
2317
data/text/ja/abilities.ts
Normal file
2317
data/text/ja/abilities.ts
Normal file
File diff suppressed because it is too large
Load diff
377
data/text/ja/default.ts
Normal file
377
data/text/ja/default.ts
Normal file
|
|
@ -0,0 +1,377 @@
|
|||
export const DefaultText: { [id: IDEntry]: DefaultText } = {
|
||||
default: {
|
||||
startBattle: "[TRAINER]と [TRAINER]の 勝負が 始まった!",
|
||||
winBattle: "**[TRAINER]**が 勝負に 勝った!",
|
||||
tieBattle: "[TRAINER]と [TRAINER]の 勝負は 引き分けだ!",
|
||||
|
||||
pokemon: "[NICKNAME]",
|
||||
opposingPokemon: "相手の [NICKNAME]",
|
||||
team: "味方",
|
||||
opposingTeam: "相手",
|
||||
party: "味方の ポケモン",
|
||||
opposingParty: "相手の ポケモン",
|
||||
|
||||
turn: "== [NUMBER]ターン ==",
|
||||
switchIn: "[TRAINER]は [FULLNAME]を 繰り出した!",
|
||||
switchInOwn: "ゆけっ! [FULLNAME]!",
|
||||
switchOut: "[TRAINER]は [NICKNAME]を 引っこめた!",
|
||||
switchOutOwn: "[NICKNAME] 戻れ!",
|
||||
drag: "[FULLNAME]は 戦闘に 引きずりだされた!",
|
||||
faint: "[POKEMON]は たおれた!",
|
||||
swap: "[POKEMON]と [TARGET]は 場所を 入れ替えた!",
|
||||
swapCenter: "[POKEMON]は 真ん中に 移動した!",
|
||||
|
||||
// Multi Battles only
|
||||
canDynamax: " [TRAINER]が ダイマックス できるように なった!",
|
||||
canDynamaxOwn: " [TRAINER]に ダイマックスパワーが 集まった!",
|
||||
|
||||
zEffect: " [POKEMON]が 解き放つ 全力の Zワザ!",
|
||||
move: "[POKEMON]の **[MOVE]**!",
|
||||
abilityActivation: "[[POKEMON]の [ABILITY]]",
|
||||
|
||||
mega: " [POKEMON]の [ITEM]と [TRAINER]の キーストーンが 反応した!",
|
||||
megaNoItem: " [TRAINER]の キーストーンと [POKEMON]が 反応した!",
|
||||
megaGen6: " [POKEMON]の [ITEM]と [TRAINER]の メガバングルが 反応した!",
|
||||
transformMega: "[POKEMON]は メガ[SPECIES]に メガシンカした!",
|
||||
primal: "[POKEMON]の ゲンシカイキ! 原始の姿を 取り戻した!",
|
||||
zPower: " [POKEMON]は Zパワーを 身体に まとった!",
|
||||
zBroken: " [POKEMON]は 攻撃を 守りきれずに ダメージを 受けた!",
|
||||
terastallize: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
|
||||
// in case the different default messages didn't make it obvious, the difference
|
||||
// is that the `cant` message REPLACES "Pokemon used Move!", while the `fail`
|
||||
// message happens AFTER "Pokemon used Move!"
|
||||
cant: "[POKEMON]は [MOVE]を 使えない!",
|
||||
cantNoMove: "[POKEMON]は みうごきが とれない!",
|
||||
fail: " しかし うまく 決まらなかった!!",
|
||||
|
||||
// n.b. this is the default message for in-battle forme changes
|
||||
// for the move Transform and ability Imposter, see the entry for the move Transform
|
||||
transform: "[POKEMON]の 姿が 変化した!",
|
||||
typeChange: " [POKEMON]は [TYPE]タイプに なった!",
|
||||
typeChangeFromEffect: " [POKEMON]は [EFFECT]で [TYPE]タイプに なった!",
|
||||
typeAdd: " [POKEMON]に [TYPE]タイプが 追加された!",
|
||||
|
||||
start: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
end: " [POKEMON]は [EFFECT]から 解放された!",
|
||||
activate: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
startTeamEffect: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
endTeamEffect: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
startFieldEffect: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
endFieldEffect: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
|
||||
changeAbility: " [POKEMON]は [ABILITY]に なった!",
|
||||
addItem: " [POKEMON]は [ITEM]を 手に入れた!",
|
||||
takeItem: " [POKEMON]は [SOURCE]から [ITEM]を 奪い取った!",
|
||||
eatItem: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
useGem: " [ITEM]は [MOVE]の 威力を 強めた!",
|
||||
eatItemWeaken: " [POKEMON]への ダメージを [ITEM]が 弱めた!",
|
||||
removeItem: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
activateItem: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
activateWeaken: " [POKEMON]への ダメージを [ITEM]が 弱めた!",
|
||||
|
||||
damage: " ([POKEMON]は ダメージを 受けた!)",
|
||||
damagePercentage: " ([POKEMON]は 体力の [PERCENTAGE]%を 失った!)",
|
||||
damageFromPokemon: " [POKEMON]は [SOURCE]の [ITEM]で ダメージを 受けた!",
|
||||
damageFromItem: " [POKEMON]は [ITEM]で ダメージを 受けた!",
|
||||
damageFromPartialTrapping: " [POKEMON]は [MOVE]の ダメージを 受けている",
|
||||
heal: " [POKEMON]の 体力が 回復した!",
|
||||
healFromZEffect: " [POKEMON]は Zパワーで 体力を 回復した!",
|
||||
healFromEffect: " [POKEMON]は [EFFECT]で かいふくした!",
|
||||
|
||||
boost: " [POKEMON]の [STAT]が 上がった!",
|
||||
boost2: " [POKEMON]の [STAT]が ぐーんと上がった!",
|
||||
boost3: " [POKEMON]の [STAT]が ぐぐーんと上がった!",
|
||||
boost0: " [POKEMON]の [STAT]は もう 上がらない!",
|
||||
boostFromItem: " [POKEMON]は [ITEM]で [STAT]が あがった!",
|
||||
boost2FromItem: " [POKEMON]は [ITEM]で [STAT]が ぐーんと あがった!",
|
||||
boost3FromItem: " [POKEMON]は [ITEM]で [STAT]が ぐぐーんと 上がった!",
|
||||
boostFromZEffect: " [POKEMON]は Zパワーで [STAT]が 上がった!",
|
||||
boost2FromZEffect: " [POKEMON]は Zパワーで [STAT]が ぐーんと 上がった!",
|
||||
boost3FromZEffect: " [POKEMON]は Zパワーで [STAT]が ぐぐーんと 上がった!",
|
||||
boostMultipleFromZEffect: " [POKEMON]は Zパワーで 能力が 上がった!",
|
||||
|
||||
unboost: " [POKEMON]の [STAT]が 下がった!",
|
||||
unboost2: " [POKEMON]の [STAT]が がくっと下がった!",
|
||||
unboost3: " [POKEMON]の [STAT]が がくーんと下がった!",
|
||||
unboost0: " [POKEMON]の [STAT]は もう 下がらない!",
|
||||
unboostFromItem: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
unboost2FromItem: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
unboost3FromItem: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
|
||||
swapBoost: " [POKEMON]は 相手と自分の 能力変化を 入れ替えた!",
|
||||
swapOffensiveBoost: " [POKEMON]は 相手と自分の 攻撃と 特攻の 能力変化を 入れ替えた!",
|
||||
swapDefensiveBoost: " [POKEMON]は 相手と自分の 防御と 特防の 能力変化を 入れ替えた!",
|
||||
copyBoost: " [POKEMON]は [TARGET]の 能力変化を コピーした!",
|
||||
clearBoost: " [POKEMON]の 能力変化が 元に戻った!",
|
||||
clearBoostFromZEffect: " [POKEMON]は Zパワーで 下がった 能力を 元に戻した!",
|
||||
invertBoost: " [POKEMON]は 能力変化が ひっくりかえった!",
|
||||
clearAllBoost: " 全ての ステータスが 元に 戻った!",
|
||||
|
||||
superEffective: " 効果は バツグンだ!",
|
||||
superEffectiveSpread: " [POKEMON]に 効果は バツグンだ!",
|
||||
resisted: " 効果は いまひとつだ",
|
||||
resistedSpread: " [POKEMON]に 効果は いまひとつだ",
|
||||
extremelyEffective: " 効果は ちょうバツグンだ!!",
|
||||
extremelyEffectiveSpread: " [POKEMON]に 効果は ちょうバツグンだ!!",
|
||||
mostlyIneffective: " 効果は かなりいまひとつだ",
|
||||
mostlyIneffectiveSpread: " [POKEMON]に 効果は かなりいまひとつだ",
|
||||
crit: " 急所に 当たった!",
|
||||
critSpread: " [POKEMON]の 急所に 当たった!",
|
||||
immune: " [POKEMON]には 効果が ないようだ…",
|
||||
immuneNoPokemon: " しかし効果がなかった!",
|
||||
immuneOHKO: " [POKEMON]には 全然 効いてない!",
|
||||
miss: " [POKEMON]には 当たらなかった!",
|
||||
missNoPokemon: " しかし [SOURCE]の こうげきは はずれた!",
|
||||
|
||||
center: " リセットムーブ!!",
|
||||
noTarget: " しかし あいてが いないので うまく きまらなかった!",
|
||||
ohko: " 一撃必殺!",
|
||||
combine: " 2つの技が 1つになった! コンビネーション技だ!",
|
||||
hitCount: " [NUMBER]回 当たった!",
|
||||
},
|
||||
|
||||
// stats
|
||||
hp: {
|
||||
statName: "HP",
|
||||
statShortName: "H",
|
||||
},
|
||||
atk: {
|
||||
statName: "攻撃",
|
||||
statShortName: "A",
|
||||
},
|
||||
def: {
|
||||
statName: "防御",
|
||||
statShortName: "B",
|
||||
},
|
||||
spa: {
|
||||
statName: "特攻",
|
||||
statShortName: "C",
|
||||
},
|
||||
spd: {
|
||||
statName: "特防",
|
||||
statShortName: "D",
|
||||
},
|
||||
spe: {
|
||||
statName: "素早さ",
|
||||
statShortName: "S",
|
||||
},
|
||||
accuracy: {
|
||||
statName: "命中率",
|
||||
},
|
||||
evasion: {
|
||||
statName: "回避率",
|
||||
},
|
||||
spc: {
|
||||
statName: "特殊",
|
||||
statShortName: "CD",
|
||||
},
|
||||
stats: {
|
||||
statName: "ステータス",
|
||||
},
|
||||
|
||||
// statuses
|
||||
brn: {
|
||||
start: " [POKEMON]は やけどを 負った!",
|
||||
startFromItem: " [POKEMON]は [ITEM]で やけどを 負った!",
|
||||
alreadyStarted: " [POKEMON]は すでに やけどを 負っている",
|
||||
end: " [POKEMON]の やけどが治った!",
|
||||
endFromItem: " [POKEMON]は [ITEM]で やけどが 治った!",
|
||||
damage: " [POKEMON]は やけどの ダメージを 受けた!",
|
||||
},
|
||||
frz: {
|
||||
start: " [POKEMON]は 凍りついた!",
|
||||
alreadyStarted: " [POKEMON]は すでに 凍っている",
|
||||
end: " [POKEMON]の こおりが 溶けた!",
|
||||
endFromItem: " [POKEMON]は [ITEM]で こおり状態が 治った!",
|
||||
endFromMove: " [POKEMON]の [MOVE]で こおりが 溶けた!",
|
||||
cant: "[POKEMON]は 凍ってしまって 動けない!",
|
||||
},
|
||||
par: {
|
||||
start: " [POKEMON]は まひして 技が でにくくなった!",
|
||||
alreadyStarted: " [POKEMON]は すでに まひしている",
|
||||
end: " [POKEMON]の しびれが とれた!",
|
||||
endFromItem: " [POKEMON]は [ITEM]で まひが 治った!",
|
||||
cant: "[POKEMON]は 体がしびれて 動けない!",
|
||||
},
|
||||
psn: {
|
||||
start: " [POKEMON]は 毒を あびた!",
|
||||
alreadyStarted: " [POKEMON]は すでに 毒を あびている",
|
||||
end: " [POKEMON]の 毒は きれいさっぱり なくなった!",
|
||||
endFromItem: " [POKEMON]は [ITEM]で 毒が 治った!",
|
||||
damage: " [POKEMON]は 毒の ダメージを受けた!",
|
||||
},
|
||||
tox: {
|
||||
start: " [POKEMON]は 猛毒を あびた!",
|
||||
startFromItem: " [POKEMON]は [ITEM]で 猛毒を あびた!",
|
||||
end: "#psn",
|
||||
endFromItem: "#psn",
|
||||
alreadyStarted: "#psn",
|
||||
damage: "#psn",
|
||||
},
|
||||
slp: {
|
||||
start: " [POKEMON]は 眠ってしまった!",
|
||||
startFromRest: " [POKEMON]は 眠って 元気に なった!",
|
||||
alreadyStarted: " [POKEMON]は すでに 眠っている",
|
||||
end: " [POKEMON]は 目を 覚ました!",
|
||||
endFromItem: " [POKEMON]は [ITEM]で 目を 覚ました!",
|
||||
cant: "[POKEMON]は ぐうぐう 眠っている",
|
||||
},
|
||||
|
||||
// misc effects
|
||||
confusion: {
|
||||
start: " [POKEMON]は 混乱した!",
|
||||
startFromFatigue: " [POKEMON]は つかれ果てて 混乱した!",
|
||||
end: " [POKEMON]の 混乱が 解けた!",
|
||||
endFromItem: " [POKEMON]は [ITEM]で 混乱が 治った!",
|
||||
alreadyStarted: " [POKEMON]は すでに 混乱している",
|
||||
activate: " [POKEMON]は 混乱している!",
|
||||
damage: "わけも わからず 自分を 攻撃した!",
|
||||
},
|
||||
drain: {
|
||||
heal: " [SOURCE]から 体力を 吸い取った!",
|
||||
},
|
||||
flinch: {
|
||||
cant: "[POKEMON]は ひるんで 技が だせない!",
|
||||
},
|
||||
heal: {
|
||||
fail: " しかし [POKEMON]は 体力が 満タンだ!",
|
||||
},
|
||||
healreplacement: {
|
||||
activate: " [POKEMON]は Zパワーで 入れ替え先の 味方を回復する!",
|
||||
},
|
||||
nopp: {
|
||||
cant: "[POKEMON]の **[MOVE]**!\n しかし {技|わざ}の {残|のこ}りポイントが なかった!",
|
||||
},
|
||||
recharge: {
|
||||
cant: "[POKEMON]は 攻撃の 反動で 動けない!",
|
||||
},
|
||||
recoil: {
|
||||
damage: " [POKEMON]は 反動による ダメージを 受けた!",
|
||||
},
|
||||
unboost: {
|
||||
fail: " [POKEMON]の 能力は 下がらない!",
|
||||
},
|
||||
struggle: {
|
||||
activate: " [POKEMON]は だすことの できる技が ない!",
|
||||
},
|
||||
trapped: {
|
||||
start: " [POKEMON]は もう 逃げられない!",
|
||||
},
|
||||
dynamax: {
|
||||
start: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
end: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
block: " ダイマックスの ちからで はじかれた!",
|
||||
fail: " [POKEMON]は 首を 横に振った この技を しかけることが できないようだ……",
|
||||
},
|
||||
|
||||
// weather
|
||||
sandstorm: {
|
||||
weatherName: "すなあらし状態",
|
||||
start: " 砂あらしが 吹き始めた!",
|
||||
end: " 砂あらしが おさまった!",
|
||||
upkeep: " (砂あらしが 吹きあれる!)",
|
||||
damage: " 砂あらしが [POKEMON]を 襲う!",
|
||||
},
|
||||
sunnyday: {
|
||||
weatherName: "にほんばれ状態",
|
||||
start: " 日差しが 強くなった!",
|
||||
end: " 日差しが 元に戻った!",
|
||||
upkeep: " (ひざしが つよい)",
|
||||
},
|
||||
raindance: {
|
||||
weatherName: "あめ状態",
|
||||
start: " 雨が 降り始めた!",
|
||||
end: " 雨が 上がった!",
|
||||
upkeep: " (あめが ふりつづいている)",
|
||||
},
|
||||
hail: {
|
||||
weatherName: "あられ",
|
||||
start: " あられが 降り始めた!",
|
||||
end: " あられが 止んだ!",
|
||||
upkeep: " (あられが 吹きすさぶ!)",
|
||||
damage: " あられが [POKEMON]を 襲う!",
|
||||
},
|
||||
snowscape: {
|
||||
weatherName: "ゆき状態",
|
||||
start: " 雪が 降り始めた!",
|
||||
end: " 雪が 止んだ!",
|
||||
upkeep: " (雪が 吹きすさぶ!)",
|
||||
},
|
||||
desolateland: {
|
||||
weatherName: "おおひでり",
|
||||
start: " 日差しが とても強くなった!",
|
||||
end: " 日差しが 元に戻った!",
|
||||
block: " 強い日差しの 勢いは 止まらない!",
|
||||
blockMove: " 強い日差しの 影響で みずタイプの 攻撃が 蒸発した!",
|
||||
},
|
||||
primordialsea: {
|
||||
weatherName: "おおあめ",
|
||||
start: " 強い雨が 降り始めた!",
|
||||
end: " 強い雨が 上がった!",
|
||||
block: " 強い雨の 勢いは 止まらない!",
|
||||
blockMove: " 強い雨の 影響で ほのおタイプの 攻撃が かき消された!",
|
||||
},
|
||||
deltastream: {
|
||||
weatherName: "らんきりゅう",
|
||||
start: " 謎の 乱気流が ひこうポケモンを 護る!",
|
||||
end: " 謎の 乱気流が おさまった!",
|
||||
activate: " 謎の 乱気流が 攻撃を 弱めた!",
|
||||
block: " 謎の 乱気流の 勢いは 止まらない!",
|
||||
},
|
||||
|
||||
// terrain
|
||||
electricterrain: {
|
||||
start: " 足下に 電気が かけめぐる!",
|
||||
end: " 足下の 電気が 消え去った!",
|
||||
block: " [POKEMON]は エレキフィールドに 守られている!",
|
||||
},
|
||||
grassyterrain: {
|
||||
start: " 足下に 草がおいしげった!",
|
||||
end: " 足下の 草が消え去った!",
|
||||
heal: " [POKEMON]の 体力が 回復した!",
|
||||
},
|
||||
mistyterrain: {
|
||||
start: " 足下に 霧が立ち込めた!",
|
||||
end: " 足下の 霧が消え去った!",
|
||||
block: " [POKEMON]は ミストフィールドに 守られている!",
|
||||
},
|
||||
psychicterrain: {
|
||||
start: " 足下が 不思議な感じに なった!",
|
||||
end: " 足下の 不思議感が 消え去った!",
|
||||
block: " [POKEMON]は サイコフィールドに 守られている!",
|
||||
},
|
||||
|
||||
// field effects
|
||||
gravity: {
|
||||
start: " じゅうりょくが 強くなった!",
|
||||
end: " じゅうりょくが 元に戻った!",
|
||||
cant: "[POKEMON]は じゅうりょくが 強くて [MOVE]が だせない!",
|
||||
activate: "[POKEMON]は じゅうりょくの 影響で 空中に いられなくなった!",
|
||||
},
|
||||
magicroom: {
|
||||
start: " 持たせた 道具の 効果が なくなる 空間を 作りだした!",
|
||||
end: " マジックルームが 解除され 道具の 効果が 元に戻った!",
|
||||
},
|
||||
mudsport: {
|
||||
start: " 電気の 威力が 弱まった!",
|
||||
end: " どろあそびの 効果が なくなった!",
|
||||
},
|
||||
trickroom: {
|
||||
start: " [POKEMON]は 時空を ゆがめた!",
|
||||
end: " ゆがんだ 時空が 元に戻った!",
|
||||
},
|
||||
watersport: {
|
||||
start: " 炎の 威力が 弱まった!",
|
||||
end: " みずあそびの 効果が なくなった!",
|
||||
},
|
||||
wonderroom: {
|
||||
start: " 防御と 特防が 入れ替わる 空間を 作りだした!",
|
||||
end: " ワンダールームが 解除され 防御と 特防が 元に戻った!",
|
||||
},
|
||||
|
||||
// misc
|
||||
crash: {
|
||||
damage: " 勢いあまって [POKEMON]は 地面に ぶつかった!",
|
||||
},
|
||||
};
|
||||
2627
data/text/ja/items.ts
Normal file
2627
data/text/ja/items.ts
Normal file
File diff suppressed because it is too large
Load diff
7706
data/text/ja/moves.ts
Normal file
7706
data/text/ja/moves.ts
Normal file
File diff suppressed because it is too large
Load diff
3896
data/text/ja/pokedex.ts
Normal file
3896
data/text/ja/pokedex.ts
Normal file
File diff suppressed because it is too large
Load diff
2317
data/text/ko/abilities.ts
Normal file
2317
data/text/ko/abilities.ts
Normal file
File diff suppressed because it is too large
Load diff
377
data/text/ko/default.ts
Normal file
377
data/text/ko/default.ts
Normal file
|
|
@ -0,0 +1,377 @@
|
|||
export const DefaultText: { [id: IDEntry]: DefaultText } = {
|
||||
default: {
|
||||
startBattle: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
winBattle: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
tieBattle: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
|
||||
pokemon: "[NICKNAME]",
|
||||
opposingPokemon: "상대 [NICKNAME]",
|
||||
team: "우리 편",
|
||||
opposingTeam: "상대",
|
||||
party: "같은 편 포켓몬",
|
||||
opposingParty: "상대의 포켓몬",
|
||||
|
||||
turn: "== [NUMBER]턴 ==",
|
||||
switchIn: "[TRAINER:topic] [FULLNAME:object] 내보냈다!",
|
||||
switchInOwn: "가랏! [FULLNAME]!",
|
||||
switchOut: "[TRAINER:topic] [NICKNAME:object] 넣어 버렸다!",
|
||||
switchOutOwn: "[NICKNAME] 돌아와!",
|
||||
drag: "[FULLNAME:topic] 배틀에 끌려 나왔다!",
|
||||
faint: "[POKEMON:topic] 쓰러졌다!",
|
||||
swap: "[POKEMON:conjunctive] [TARGET:topic] 자리를 바꿨다!",
|
||||
swapCenter: "[POKEMON:topic] 중앙으로 이동했다!",
|
||||
|
||||
// Multi Battles only
|
||||
canDynamax: " [TRAINER:topic] 다이맥스를 사용할 수 있게 됐다!",
|
||||
canDynamaxOwn: " [TRAINER]에게 다이맥스 파워가 모였다!",
|
||||
|
||||
zEffect: " [POKEMON:subject] 뿜어내는 전력의 Z기술!",
|
||||
move: "[POKEMON]의 **[MOVE]**!",
|
||||
abilityActivation: "[[POKEMON]의 [ABILITY]]",
|
||||
|
||||
mega: " [POKEMON]의 [ITEM:conjunctive] [TRAINER]의 키스톤이 반응했다!",
|
||||
megaNoItem: " [TRAINER]의 키스톤과 [POKEMON:subject] 반응했다!",
|
||||
megaGen6: " [POKEMON]의 [ITEM:conjunctive] [TRAINER]의 메가뱅글이 반응했다!",
|
||||
transformMega: "[POKEMON:topic] 메가[SPECIES:directional]로 메가진화했다!",
|
||||
primal: "[POKEMON]의 원시회귀! 원시의 모습으로 돌아갔다!",
|
||||
zPower: " [POKEMON:topic] Z파워에 몸이 둘러싸였다!",
|
||||
zBroken: " [POKEMON:topic] 공격을 막아 내지 못하고 데미지를 입었다!",
|
||||
terastallize: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
|
||||
// in case the different default messages didn't make it obvious, the difference
|
||||
// is that the `cant` message REPLACES "Pokemon used Move!", while the `fail`
|
||||
// message happens AFTER "Pokemon used Move!"
|
||||
cant: "[POKEMON:topic] [MOVE:object] 쓸 수 없다!",
|
||||
cantNoMove: "", // NEEDS TRANSLATION: predates Chinese support
|
||||
fail: " 그러나 실패하고 말았다!!",
|
||||
|
||||
// n.b. this is the default message for in-battle forme changes
|
||||
// for the move Transform and ability Imposter, see the entry for the move Transform
|
||||
transform: "[POKEMON]의 모습이 변화했다!",
|
||||
typeChange: " [POKEMON:topic] [TYPE]타입이 됐다!",
|
||||
typeChangeFromEffect: " [POKEMON] [EFFECT] 때문에 [TYPE]타입이 되었다!",
|
||||
typeAdd: " [POKEMON]에게 [TYPE]타입이 추가되었다!",
|
||||
|
||||
start: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
end: " [POKEMON:topic] [EFFECT:directional]로부터 풀려났다!",
|
||||
activate: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
startTeamEffect: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
endTeamEffect: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
startFieldEffect: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
endFieldEffect: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
|
||||
changeAbility: " [POKEMON:topic] [ABILITY:subject] 되었다!",
|
||||
addItem: " [POKEMON:topic] [ITEM:object] 손에 넣었다!",
|
||||
takeItem: " [POKEMON:topic] [SOURCE:directional]로부터 [ITEM:object] 빼앗았다!",
|
||||
eatItem: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
useGem: " [ITEM:topic] [MOVE]의 위력을 강하게 했다!",
|
||||
eatItemWeaken: " [POKEMON:subject] 입는 데미지를 [ITEM:subject] 약하게 했다!",
|
||||
removeItem: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
activateItem: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
activateWeaken: " [POKEMON:subject] 입는 데미지를 [ITEM:subject] 약하게 했다!",
|
||||
|
||||
damage: " ([POKEMON] 데미지를 입었다!)",
|
||||
damagePercentage: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
damageFromPokemon: " [POKEMON:topic] [SOURCE]의 [ITEM] 때문에 데미지를 입었다!",
|
||||
damageFromItem: " [POKEMON:topic] [ITEM] 때문에 데미지를 입었다!",
|
||||
damageFromPartialTrapping: " [POKEMON:topic] [MOVE]의 데미지를 입고 있다.",
|
||||
heal: " [POKEMON]의 체력이 회복되었다!",
|
||||
healFromZEffect: " [POKEMON:topic] Z파워로 체력을 회복했다!",
|
||||
healFromEffect: " [POKEMON] [EFFECT]로 인해 회복했다!",
|
||||
|
||||
boost: " [POKEMON]의 [STAT:subject] 올라갔다!",
|
||||
boost2: " [POKEMON]의 [STAT:subject] 크게 올라갔다!",
|
||||
boost3: " [POKEMON]의 [STAT:subject] 매우 크게 올라갔다!",
|
||||
boost0: " [POKEMON]의 [STAT:topic] 더 올라가지 않는다!",
|
||||
boostFromItem: " [ITEM]로 [POKEMON]의 [STAT] 올라갔다!",
|
||||
boost2FromItem: " [ITEM]로 [POKEMON]의 [STAT] 크게 올라갔다!",
|
||||
boost3FromItem: " [POKEMON:topic] [ITEM:directional]로 [STAT:subject] 매우 크게 올라갔다!",
|
||||
boostFromZEffect: " [POKEMON:topic] Z파워로 [STAT:subject] 올라갔다!",
|
||||
boost2FromZEffect: " [POKEMON:topic] Z파워로 [STAT:subject] 크게 올라갔다!",
|
||||
boost3FromZEffect: " [POKEMON:topic] Z파워로 [STAT:subject] 매우 크게 올라갔다!",
|
||||
boostMultipleFromZEffect: " [POKEMON:topic] Z파워로 능력이 올라갔다!",
|
||||
|
||||
unboost: " [POKEMON]의 [STAT:subject] 떨어졌다!",
|
||||
unboost2: " [POKEMON]의 [STAT:subject] 크게 떨어졌다!",
|
||||
unboost3: " [POKEMON]의 [STAT:subject] 매우 크게 떨어졌다!",
|
||||
unboost0: " [POKEMON]의 [STAT:topic] 더 떨어지지 않는다!",
|
||||
unboostFromItem: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
unboost2FromItem: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
unboost3FromItem: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
|
||||
swapBoost: " [POKEMON:topic] 상대와 자신의 능력 변화를 바꿨다!",
|
||||
swapOffensiveBoost: " [POKEMON:topic] 상대와 자신의 공격과 특수공격의 능력 변화를 바꿨다!",
|
||||
swapDefensiveBoost: " [POKEMON:topic] 상대와 자신의 방어와 특수방어의 능력 변화를 바꿨다!",
|
||||
copyBoost: " [POKEMON:topic] [TARGET]의 능력 변화를 복사했다!",
|
||||
clearBoost: " [POKEMON]의 능력 변화가 원래대로 되돌아왔다!",
|
||||
clearBoostFromZEffect: " [POKEMON:topic] Z파워로 떨어진 능력을 원래대로 되돌렸다!",
|
||||
invertBoost: " [POKEMON:topic] 능력 변화가 뒤집혔다!",
|
||||
clearAllBoost: " 모든 상태가 원래대로 되돌아왔다!",
|
||||
|
||||
superEffective: " 효과가 굉장했다!",
|
||||
superEffectiveSpread: " [POKEMON]에게 효과가 굉장했다!",
|
||||
resisted: " 효과가 별로인 듯하다...",
|
||||
resistedSpread: " [POKEMON]에게 효과가 별로인 듯하다.",
|
||||
extremelyEffective: " 효과가 매우 굉장했다!!",
|
||||
extremelyEffectiveSpread: " [POKEMON]에게 효과가 매우 굉장했다!!",
|
||||
mostlyIneffective: " 효과가 매우 별로인 듯하다...",
|
||||
mostlyIneffectiveSpread: " [POKEMON]에게 효과가 매우 별로인 듯하다.",
|
||||
crit: " 급소에 맞았다!",
|
||||
critSpread: " [POKEMON]의 급소에 맞았다!",
|
||||
immune: " [POKEMON]에게는 효과가 없는 것 같다...",
|
||||
immuneNoPokemon: " 그러나 효과가 없었다!",
|
||||
immuneOHKO: " [POKEMON]에게는 전혀 효과가 없다!",
|
||||
miss: " [POKEMON]에게는 맞지 않았다!",
|
||||
missNoPokemon: " 그러나 [SOURCE]의 공격은 빗나갔다!",
|
||||
|
||||
center: " 리셋무브!!",
|
||||
noTarget: " 그러나 상대가 없으므로 실패하고 말았다!",
|
||||
ohko: " 일격필살!",
|
||||
combine: " 2개의 기술이 하나가 되었다! 콤비네이션 기술이다!",
|
||||
hitCount: " [NUMBER]번 맞았다!",
|
||||
},
|
||||
|
||||
// stats
|
||||
hp: {
|
||||
statName: "HP",
|
||||
statShortName: "HP",
|
||||
},
|
||||
atk: {
|
||||
statName: "공격",
|
||||
statShortName: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
},
|
||||
def: {
|
||||
statName: "방어",
|
||||
statShortName: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
},
|
||||
spa: {
|
||||
statName: "특수공격",
|
||||
statShortName: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
},
|
||||
spd: {
|
||||
statName: "특수방어",
|
||||
statShortName: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
},
|
||||
spe: {
|
||||
statName: "스피드",
|
||||
statShortName: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
},
|
||||
accuracy: {
|
||||
statName: "명중률",
|
||||
},
|
||||
evasion: {
|
||||
statName: "회피율",
|
||||
},
|
||||
spc: {
|
||||
statName: "특수",
|
||||
statShortName: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
},
|
||||
stats: {
|
||||
statName: "스테이터스",
|
||||
},
|
||||
|
||||
// statuses
|
||||
brn: {
|
||||
start: " [POKEMON:topic] 화상을 입었다!",
|
||||
startFromItem: " [POKEMON:topic] [ITEM] 때문에 화상을 입었다!",
|
||||
alreadyStarted: " [POKEMON:topic] 이미 화상을 입은 상태다.",
|
||||
end: " [POKEMON]의 화상이 나았다!",
|
||||
endFromItem: " [POKEMON:topic] [ITEM:directional]로 화상이 나았다!",
|
||||
damage: " [POKEMON:topic] 화상 데미지를 입었다!",
|
||||
},
|
||||
frz: {
|
||||
start: " [POKEMON:topic] 얼어붙었다!",
|
||||
alreadyStarted: " [POKEMON:topic] 이미 얼어 있다.",
|
||||
end: " [POKEMON]의 얼음이 녹았다!",
|
||||
endFromItem: " [POKEMON:topic] [ITEM:directional]로 얼음 상태가 나았다!",
|
||||
endFromMove: " [POKEMON]의 [MOVE] 때문에 얼음이 녹았다!",
|
||||
cant: "[POKEMON:topic] 얼어 버려서 움직일 수 없다!",
|
||||
},
|
||||
par: {
|
||||
start: " [POKEMON:topic] 마비되어 기술이 나오기 어려워졌다!",
|
||||
alreadyStarted: " [POKEMON:topic] 이미 마비되어 있다.",
|
||||
end: " [POKEMON]의 몸저림이 풀렸다!",
|
||||
endFromItem: " [POKEMON:topic] [ITEM:directional]로 마비가 풀렸다!",
|
||||
cant: "[POKEMON:topic] 몸이 저려서 움직일 수 없다!",
|
||||
},
|
||||
psn: {
|
||||
start: " [POKEMON]의 몸에 독이 퍼졌다!",
|
||||
alreadyStarted: " [POKEMON:topic] 이미 몸에 독이 퍼진 상태다.",
|
||||
end: " [POKEMON]의 독은 말끔하게 해독됐다!",
|
||||
endFromItem: " [POKEMON:topic] [ITEM:directional]로 독이 해독됐다!",
|
||||
damage: " [POKEMON:topic] 독에 의한 데미지를 입었다!",
|
||||
},
|
||||
tox: {
|
||||
start: " [POKEMON]의 몸에 맹독이 퍼졌다!",
|
||||
startFromItem: " [POKEMON:topic] [ITEM] 때문에 맹독에 중독됐다!",
|
||||
end: "#psn",
|
||||
endFromItem: "#psn",
|
||||
alreadyStarted: "#psn",
|
||||
damage: "#psn",
|
||||
},
|
||||
slp: {
|
||||
start: " [POKEMON:topic] 잠들어 버렸다!",
|
||||
startFromRest: " [POKEMON:topic] 잠이 들어 건강해졌다!",
|
||||
alreadyStarted: " [POKEMON:topic] 이미 잠들어 있다.",
|
||||
end: " [POKEMON:topic] 눈을 떴다!",
|
||||
endFromItem: " [POKEMON:topic] [ITEM:directional]로 눈을 떴다!",
|
||||
cant: "[POKEMON:topic] 쿨쿨 잠들어 있다.",
|
||||
},
|
||||
|
||||
// misc effects
|
||||
confusion: {
|
||||
start: " [POKEMON:topic] 혼란에 빠졌다!",
|
||||
startFromFatigue: " [POKEMON:topic] 몹시 지쳐서 혼란에 빠졌다!",
|
||||
end: " [POKEMON]의 혼란이 풀렸다!",
|
||||
endFromItem: " [POKEMON:topic] [ITEM:directional]로 혼란이 풀렸다!",
|
||||
alreadyStarted: " [POKEMON:topic] 이미 혼란에 빠져 있다.",
|
||||
activate: " [POKEMON:topic] 혼란에 빠져 있다!",
|
||||
damage: "영문도 모른 채 자신을 공격했다!",
|
||||
},
|
||||
drain: {
|
||||
heal: " [SOURCE:directional]로부터 체력을 흡수했다!",
|
||||
},
|
||||
flinch: {
|
||||
cant: "[POKEMON:topic] 풀이 죽어 기술을 쓸 수 없다!",
|
||||
},
|
||||
heal: {
|
||||
fail: " 그러나 [POKEMON:topic] 체력이 가득 찬 상태다!",
|
||||
},
|
||||
healreplacement: {
|
||||
activate: " [POKEMON:topic] Z파워로 교체한 같은 편을 회복한다!",
|
||||
},
|
||||
nopp: {
|
||||
cant: "[POKEMON]의 **[MOVE]**!\n 그러나 남은 PP가 없었다!",
|
||||
},
|
||||
recharge: {
|
||||
cant: "[POKEMON:topic] 공격의 반동으로 움직일 수 없다!",
|
||||
},
|
||||
recoil: {
|
||||
damage: " [POKEMON:topic] 반동으로 데미지를 입었다!",
|
||||
},
|
||||
unboost: {
|
||||
fail: " [POKEMON]의 능력은 떨어지지 않는다!",
|
||||
},
|
||||
struggle: {
|
||||
activate: " [POKEMON:topic] 쓸 수 있는 기술이 없다!",
|
||||
},
|
||||
trapped: {
|
||||
start: " [POKEMON:topic] 이제 도망칠 수 없다!",
|
||||
},
|
||||
dynamax: {
|
||||
start: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
end: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
block: " 다이맥스의 힘으로 튕겨 냈다!",
|
||||
fail: " [POKEMON:topic] 고개를 가로저었다. 이 기술은 쓸 수 없는 것 같다...",
|
||||
},
|
||||
|
||||
// weather
|
||||
sandstorm: {
|
||||
weatherName: "모래바람 상태",
|
||||
start: " 모래바람이 불기 시작했다!",
|
||||
end: " 모래바람이 가라앉았다!",
|
||||
upkeep: " (모래바람이 세차게 분다!)",
|
||||
damage: " 모래바람이 [POKEMON:object] 덮쳤다!",
|
||||
},
|
||||
sunnyday: {
|
||||
weatherName: "쾌청 상태",
|
||||
start: " 햇살이 강해졌다!",
|
||||
end: " 햇살이 원래대로 되돌아왔다!",
|
||||
upkeep: " (햇살이 강하다)",
|
||||
},
|
||||
raindance: {
|
||||
weatherName: "비 상태",
|
||||
start: " 비가 내리기 시작했다!",
|
||||
end: " 비가 그쳤다!",
|
||||
upkeep: " (비가 계속 내리고 있다)",
|
||||
},
|
||||
hail: {
|
||||
weatherName: "싸라기눈",
|
||||
start: " 싸라기눈이 내리기 시작했다!",
|
||||
end: " 싸라기눈이 그쳤다!",
|
||||
upkeep: " (싸라기눈이 휘몰아친다!)",
|
||||
damage: " 싸라기눈이 [POKEMON:object] 덮쳤다!",
|
||||
},
|
||||
snowscape: {
|
||||
weatherName: "눈 상태",
|
||||
start: " 눈이 내리기 시작했다!",
|
||||
end: " 눈이 그쳤다!",
|
||||
upkeep: " (눈이 휘몰아친다!)",
|
||||
},
|
||||
desolateland: {
|
||||
weatherName: "큰가뭄",
|
||||
start: " 햇살이 아주 강해졌다!",
|
||||
end: " 햇살이 원래대로 되돌아왔다!",
|
||||
block: " 강한 햇살의 기세는 멈추지 않는다!",
|
||||
blockMove: " 강한 햇살의 영향으로 물타입의 공격이 증발했다!",
|
||||
},
|
||||
primordialsea: {
|
||||
weatherName: "폭우",
|
||||
start: " 강한 비가 내리기 시작했다!",
|
||||
end: " 강한 비가 그쳤다!",
|
||||
block: " 강한 비의 기세는 멈추지 않는다!",
|
||||
blockMove: " 강한 비의 영향으로 불꽃타입의 공격이 사라졌다!",
|
||||
},
|
||||
deltastream: {
|
||||
weatherName: "난기류",
|
||||
start: " 수수께끼의 난기류가 비행포켓몬을 지킨다!",
|
||||
end: " 수수께끼의 난기류가 가라앉았다!",
|
||||
activate: " 수수께끼의 난기류가 공격을 약하게 만들었다!",
|
||||
block: " 수수께끼의 난기류의 기세는 멈추지 않는다!",
|
||||
},
|
||||
|
||||
// terrain
|
||||
electricterrain: {
|
||||
start: " 발밑에 전기가 흐르기 시작했다!",
|
||||
end: " 발밑의 전기가 사라졌다!",
|
||||
block: " [POKEMON:object] 일렉트릭필드가 지켜 주고 있다!",
|
||||
},
|
||||
grassyterrain: {
|
||||
start: " 발밑에 풀이 무성해졌다!",
|
||||
end: " 발밑의 풀이 사라졌다!",
|
||||
heal: " [POKEMON]의 체력이 회복되었다!",
|
||||
},
|
||||
mistyterrain: {
|
||||
start: " 발밑이 안개로 자욱해졌다!",
|
||||
end: " 발밑의 안개가 사라졌다!",
|
||||
block: " [POKEMON:object] 미스트필드가 지켜 주고 있다!",
|
||||
},
|
||||
psychicterrain: {
|
||||
start: " 발밑에서 이상한 느낌이 든다!",
|
||||
end: " 발밑의 이상한 느낌이 사라졌다!",
|
||||
block: " [POKEMON:topic] 사이코필드가 지켜 주고 있다!",
|
||||
},
|
||||
|
||||
// field effects
|
||||
gravity: {
|
||||
start: " 중력이 강해졌다!",
|
||||
end: " 중력이 원래대로 되돌아왔다!",
|
||||
cant: "[POKEMON:topic] 중력이 강해서 [MOVE:object] 쓸 수 없다!",
|
||||
activate: "[POKEMON:topic] 중력의 영향으로 공중에 있을 수 없게 되었다!",
|
||||
},
|
||||
magicroom: {
|
||||
start: " 지니게 한 도구의 효과가 없어지는 공간을 만들어 냈다!",
|
||||
end: " 매직룸이 해제되어 도구의 효과가 원래대로 되돌아왔다!",
|
||||
},
|
||||
mudsport: {
|
||||
start: " 전기의 위력이 약해졌다!",
|
||||
end: " 흙놀이의 효과가 없어졌다!",
|
||||
},
|
||||
trickroom: {
|
||||
start: " [POKEMON:topic] 시공을 뒤틀었다!",
|
||||
end: " 뒤틀린 시공이 원래대로 되돌아왔다!",
|
||||
},
|
||||
watersport: {
|
||||
start: " 불꽃의 위력이 약해졌다!",
|
||||
end: " 물놀이의 효과가 없어졌다!",
|
||||
},
|
||||
wonderroom: {
|
||||
start: " 방어와 특수방어가 바뀌는 공간을 만들어 냈다!",
|
||||
end: " 원더룸이 해제되어 방어와 특수방어가 원래대로 되돌아왔다!",
|
||||
},
|
||||
|
||||
// misc
|
||||
crash: {
|
||||
damage: " [POKEMON:topic] 의욕이 넘쳐서 땅에 부딪쳤다!",
|
||||
},
|
||||
};
|
||||
2627
data/text/ko/items.ts
Normal file
2627
data/text/ko/items.ts
Normal file
File diff suppressed because it is too large
Load diff
7706
data/text/ko/moves.ts
Normal file
7706
data/text/ko/moves.ts
Normal file
File diff suppressed because it is too large
Load diff
3719
data/text/ko/pokedex.ts
Normal file
3719
data/text/ko/pokedex.ts
Normal file
File diff suppressed because it is too large
Load diff
|
|
@ -1541,7 +1541,7 @@ export const MovesText: { [id: IDEntry]: MoveText } = {
|
|||
desc: "Fails unless the user is an Electric type. If this move is successful and the user is not Terastallized, the user's Electric type becomes typeless as long as it remains active.",
|
||||
shortDesc: "User's Electric type: typeless; must be Electric.",
|
||||
|
||||
typeChange: " [POKEMON] used up all of its electricity!",
|
||||
typeChange: " [POKEMON] used up all its electricity!",
|
||||
},
|
||||
doubleslap: {
|
||||
name: "Double Slap",
|
||||
|
|
@ -4303,7 +4303,7 @@ export const MovesText: { [id: IDEntry]: MoveText } = {
|
|||
gen1: {
|
||||
desc: "While the user remains active, it is protected from having its stat stages lowered by other Pokemon, unless caused by the secondary effect of a move. Fails if the user already has the effect. If any Pokemon uses Haze, this effect ends.",
|
||||
start: " [POKEMON]'s shrouded in mist!",
|
||||
block: " But, it failed!",
|
||||
block: " But it failed!",
|
||||
},
|
||||
|
||||
start: " [TEAM] became shrouded in mist!",
|
||||
|
|
@ -4679,7 +4679,7 @@ export const MovesText: { [id: IDEntry]: MoveText } = {
|
|||
shortDesc: "All active Pokemon will faint in 3 turns.",
|
||||
|
||||
start: " All Pok\u00E9mon that heard the song will faint in three turns!",
|
||||
activate: " [POKEMON]'s perish count fell to [NUMBER].",
|
||||
activate: " [POKEMON]'s perish count fell to [NUMBER]!",
|
||||
},
|
||||
petalblizzard: {
|
||||
name: "Petal Blizzard",
|
||||
|
|
@ -7322,7 +7322,7 @@ export const MovesText: { [id: IDEntry]: MoveText } = {
|
|||
end: " [POKEMON] calmed down.",
|
||||
upkeep: " [POKEMON] is making an uproar!",
|
||||
block: " But the uproar kept [POKEMON] awake!",
|
||||
blockSelf: " [POKEMON] can't sleep in an uproar!",
|
||||
blockSelf: " But [POKEMON] can't sleep in an uproar!",
|
||||
},
|
||||
uturn: {
|
||||
name: "U-turn",
|
||||
|
|
|
|||
|
|
@ -821,9 +821,6 @@ export const PokedexText: { [id: IDEntry]: PokedexText } = {
|
|||
quagsire: {
|
||||
name: "Quagsire",
|
||||
},
|
||||
quagsirepaldea: {
|
||||
name: "Quagsire-Paldea",
|
||||
},
|
||||
espeon: {
|
||||
name: "Espeon",
|
||||
},
|
||||
|
|
@ -3545,6 +3542,366 @@ export const PokedexText: { [id: IDEntry]: PokedexText } = {
|
|||
enamorustherian: {
|
||||
name: "Enamorus-Therian",
|
||||
},
|
||||
sprigatito: {
|
||||
name: "Sprigatito",
|
||||
},
|
||||
floragato: {
|
||||
name: "Floragato",
|
||||
},
|
||||
meowscarada: {
|
||||
name: "Meowscarada",
|
||||
},
|
||||
fuecoco: {
|
||||
name: "Fuecoco",
|
||||
},
|
||||
crocalor: {
|
||||
name: "Crocalor",
|
||||
},
|
||||
skeledirge: {
|
||||
name: "Skeledirge",
|
||||
},
|
||||
quaxly: {
|
||||
name: "Quaxly",
|
||||
},
|
||||
quaxwell: {
|
||||
name: "Quaxwell",
|
||||
},
|
||||
quaquaval: {
|
||||
name: "Quaquaval",
|
||||
},
|
||||
lechonk: {
|
||||
name: "Lechonk",
|
||||
},
|
||||
oinkologne: {
|
||||
name: "Oinkologne",
|
||||
},
|
||||
tarountula: {
|
||||
name: "Tarountula",
|
||||
},
|
||||
spidops: {
|
||||
name: "Spidops",
|
||||
},
|
||||
nymble: {
|
||||
name: "Nymble",
|
||||
},
|
||||
lokix: {
|
||||
name: "Lokix",
|
||||
},
|
||||
pawmi: {
|
||||
name: "Pawmi",
|
||||
},
|
||||
pawmo: {
|
||||
name: "Pawmo",
|
||||
},
|
||||
pawmot: {
|
||||
name: "Pawmot",
|
||||
},
|
||||
tandemaus: {
|
||||
name: "Tandemaus",
|
||||
},
|
||||
maushold: {
|
||||
name: "Maushold",
|
||||
},
|
||||
fidough: {
|
||||
name: "Fidough",
|
||||
},
|
||||
dachsbun: {
|
||||
name: "Dachsbun",
|
||||
},
|
||||
smoliv: {
|
||||
name: "Smoliv",
|
||||
},
|
||||
dolliv: {
|
||||
name: "Dolliv",
|
||||
},
|
||||
arboliva: {
|
||||
name: "Arboliva",
|
||||
},
|
||||
squawkabilly: {
|
||||
name: "Squawkabilly",
|
||||
},
|
||||
nacli: {
|
||||
name: "Nacli",
|
||||
},
|
||||
naclstack: {
|
||||
name: "Naclstack",
|
||||
},
|
||||
garganacl: {
|
||||
name: "Garganacl",
|
||||
},
|
||||
charcadet: {
|
||||
name: "Charcadet",
|
||||
},
|
||||
armarouge: {
|
||||
name: "Armarouge",
|
||||
},
|
||||
ceruledge: {
|
||||
name: "Ceruledge",
|
||||
},
|
||||
tadbulb: {
|
||||
name: "Tadbulb",
|
||||
},
|
||||
bellibolt: {
|
||||
name: "Bellibolt",
|
||||
},
|
||||
wattrel: {
|
||||
name: "Wattrel",
|
||||
},
|
||||
kilowattrel: {
|
||||
name: "Kilowattrel",
|
||||
},
|
||||
maschiff: {
|
||||
name: "Maschiff",
|
||||
},
|
||||
mabosstiff: {
|
||||
name: "Mabosstiff",
|
||||
},
|
||||
shroodle: {
|
||||
name: "Shroodle",
|
||||
},
|
||||
grafaiai: {
|
||||
name: "Grafaiai",
|
||||
},
|
||||
bramblin: {
|
||||
name: "Bramblin",
|
||||
},
|
||||
brambleghast: {
|
||||
name: "Brambleghast",
|
||||
},
|
||||
toedscool: {
|
||||
name: "Toedscool",
|
||||
},
|
||||
toedscruel: {
|
||||
name: "Toedscruel",
|
||||
},
|
||||
klawf: {
|
||||
name: "Klawf",
|
||||
},
|
||||
capsakid: {
|
||||
name: "Capsakid",
|
||||
},
|
||||
scovillain: {
|
||||
name: "Scovillain",
|
||||
},
|
||||
rellor: {
|
||||
name: "Rellor",
|
||||
},
|
||||
rabsca: {
|
||||
name: "Rabsca",
|
||||
},
|
||||
flittle: {
|
||||
name: "Flittle",
|
||||
},
|
||||
espathra: {
|
||||
name: "Espathra",
|
||||
},
|
||||
tinkatink: {
|
||||
name: "Tinkatink",
|
||||
},
|
||||
tinkatuff: {
|
||||
name: "Tinkatuff",
|
||||
},
|
||||
tinkaton: {
|
||||
name: "Tinkaton",
|
||||
},
|
||||
wiglett: {
|
||||
name: "Wiglett",
|
||||
},
|
||||
wugtrio: {
|
||||
name: "Wugtrio",
|
||||
},
|
||||
bombirdier: {
|
||||
name: "Bombirdier",
|
||||
},
|
||||
finizen: {
|
||||
name: "Finizen",
|
||||
},
|
||||
palafin: {
|
||||
name: "Palafin",
|
||||
},
|
||||
varoom: {
|
||||
name: "Varoom",
|
||||
},
|
||||
revavroom: {
|
||||
name: "Revavroom",
|
||||
},
|
||||
cyclizar: {
|
||||
name: "Cyclizar",
|
||||
},
|
||||
orthworm: {
|
||||
name: "Orthworm",
|
||||
},
|
||||
glimmet: {
|
||||
name: "Glimmet",
|
||||
},
|
||||
glimmora: {
|
||||
name: "Glimmora",
|
||||
},
|
||||
greavard: {
|
||||
name: "Greavard",
|
||||
},
|
||||
houndstone: {
|
||||
name: "Houndstone",
|
||||
},
|
||||
flamigo: {
|
||||
name: "Flamigo",
|
||||
},
|
||||
cetoddle: {
|
||||
name: "Cetoddle",
|
||||
},
|
||||
cetitan: {
|
||||
name: "Cetitan",
|
||||
},
|
||||
veluza: {
|
||||
name: "Veluza",
|
||||
},
|
||||
dondozo: {
|
||||
name: "Dondozo",
|
||||
},
|
||||
tatsugiri: {
|
||||
name: "Tatsugiri",
|
||||
},
|
||||
annihilape: {
|
||||
name: "Annihilape",
|
||||
},
|
||||
clodsire: {
|
||||
name: "Clodsire",
|
||||
},
|
||||
farigiraf: {
|
||||
name: "Farigiraf",
|
||||
},
|
||||
dudunsparce: {
|
||||
name: "Dudunsparce",
|
||||
},
|
||||
kingambit: {
|
||||
name: "Kingambit",
|
||||
},
|
||||
greattusk: {
|
||||
name: "Great Tusk",
|
||||
},
|
||||
screamtail: {
|
||||
name: "Scream Tail",
|
||||
},
|
||||
brutebonnet: {
|
||||
name: "Brute Bonnet",
|
||||
},
|
||||
fluttermane: {
|
||||
name: "Flutter Mane",
|
||||
},
|
||||
slitherwing: {
|
||||
name: "Slither Wing",
|
||||
},
|
||||
sandyshocks: {
|
||||
name: "Sandy Shocks",
|
||||
},
|
||||
irontreads: {
|
||||
name: "Iron Treads",
|
||||
},
|
||||
ironbundle: {
|
||||
name: "Iron Bundle",
|
||||
},
|
||||
ironhands: {
|
||||
name: "Iron Hands",
|
||||
},
|
||||
ironjugulis: {
|
||||
name: "Iron Jugulis",
|
||||
},
|
||||
ironmoth: {
|
||||
name: "Iron Moth",
|
||||
},
|
||||
ironthorns: {
|
||||
name: "Iron Thorns",
|
||||
},
|
||||
frigibax: {
|
||||
name: "Frigibax",
|
||||
},
|
||||
arctibax: {
|
||||
name: "Arctibax",
|
||||
},
|
||||
baxcalibur: {
|
||||
name: "Baxcalibur",
|
||||
},
|
||||
gimmighoul: {
|
||||
name: "Gimmighoul",
|
||||
},
|
||||
gholdengo: {
|
||||
name: "Gholdengo",
|
||||
},
|
||||
wochien: {
|
||||
name: "Wo-Chien",
|
||||
},
|
||||
chienpao: {
|
||||
name: "Chien-Pao",
|
||||
},
|
||||
tinglu: {
|
||||
name: "Ting-Lu",
|
||||
},
|
||||
chiyu: {
|
||||
name: "Chi-Yu",
|
||||
},
|
||||
roaringmoon: {
|
||||
name: "Roaring Moon",
|
||||
},
|
||||
ironvaliant: {
|
||||
name: "Iron Valiant",
|
||||
},
|
||||
koraidon: {
|
||||
name: "Koraidon",
|
||||
},
|
||||
miraidon: {
|
||||
name: "Miraidon",
|
||||
},
|
||||
walkingwake: {
|
||||
name: "Walking Wake",
|
||||
},
|
||||
ironleaves: {
|
||||
name: "Iron Leaves",
|
||||
},
|
||||
dipplin: {
|
||||
name: "Dipplin",
|
||||
},
|
||||
poltchageist: {
|
||||
name: "Poltchageist",
|
||||
},
|
||||
sinistcha: {
|
||||
name: "Sinistcha",
|
||||
},
|
||||
okidogi: {
|
||||
name: "Okidogi",
|
||||
},
|
||||
munkidori: {
|
||||
name: "Munkidori",
|
||||
},
|
||||
fezandipiti: {
|
||||
name: "Fezandipiti",
|
||||
},
|
||||
ogerpon: {
|
||||
name: "Ogerpon",
|
||||
},
|
||||
archaludon: {
|
||||
name: "Archaludon",
|
||||
},
|
||||
hydrapple: {
|
||||
name: "Hydrapple",
|
||||
},
|
||||
gougingfire: {
|
||||
name: "Gouging Fire",
|
||||
},
|
||||
ragingbolt: {
|
||||
name: "Raging Bolt",
|
||||
},
|
||||
ironboulder: {
|
||||
name: "Iron Boulder",
|
||||
},
|
||||
ironcrown: {
|
||||
name: "Iron Crown",
|
||||
},
|
||||
terapagos: {
|
||||
name: "Terapagos",
|
||||
},
|
||||
pecharunt: {
|
||||
name: "Pecharunt",
|
||||
},
|
||||
missingno: {
|
||||
name: "MissingNo.",
|
||||
},
|
||||
|
|
|
|||
2317
data/text/zh-cn/abilities.ts
Normal file
2317
data/text/zh-cn/abilities.ts
Normal file
File diff suppressed because it is too large
Load diff
377
data/text/zh-cn/default.ts
Normal file
377
data/text/zh-cn/default.ts
Normal file
|
|
@ -0,0 +1,377 @@
|
|||
export const DefaultText: { [id: IDEntry]: DefaultText } = {
|
||||
default: {
|
||||
startBattle: "[TRAINER]和[TRAINER]的对战开始了!",
|
||||
winBattle: "**[TRAINER]**在对战中获胜了!",
|
||||
tieBattle: "[TRAINER]和[TRAINER]打成了平局!",
|
||||
|
||||
pokemon: "[NICKNAME]",
|
||||
opposingPokemon: "对手的[NICKNAME]",
|
||||
team: "我方",
|
||||
opposingTeam: "对手",
|
||||
party: "我方宝可梦",
|
||||
opposingParty: "对手的宝可梦",
|
||||
|
||||
turn: "== [NUMBER]回合 ==",
|
||||
switchIn: "[TRAINER]派出了[FULLNAME]!",
|
||||
switchInOwn: "上吧![FULLNAME]!",
|
||||
switchOut: "[TRAINER]换下了[NICKNAME]!",
|
||||
switchOutOwn: "[NICKNAME],回来!",
|
||||
drag: "[FULLNAME]被拖进了战斗!",
|
||||
faint: "[POKEMON]倒下了!",
|
||||
swap: "[POKEMON]和[TARGET]互换了场地!",
|
||||
swapCenter: "[POKEMON]移动到了中间!",
|
||||
|
||||
// Multi Battles only
|
||||
canDynamax: " [TRAINER]可以极巨化了!",
|
||||
canDynamaxOwn: " [TRAINER]周围汇聚了极巨力!",
|
||||
|
||||
zEffect: " [POKEMON]开始释放全力的Z招式!",
|
||||
move: "[POKEMON]使出了**[MOVE]**!",
|
||||
abilityActivation: "[[POKEMON]的[ABILITY]]",
|
||||
|
||||
mega: " [POKEMON]的[ITEM]和[TRAINER]的钥石起了反应!",
|
||||
megaNoItem: " [TRAINER]的钥石和[POKEMON]起了反应!",
|
||||
megaGen6: " [POKEMON]的[ITEM]和[TRAINER]的超级手镯起了反应!",
|
||||
transformMega: "[POKEMON]超级进化成了超级[SPECIES]!",
|
||||
primal: "[POKEMON]的原始回归!恢复了原始的样子!",
|
||||
zPower: " [POKEMON]让Z力量笼罩了全身!",
|
||||
zBroken: " [POKEMON]没能防住攻击,受到了伤害!",
|
||||
terastallize: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
|
||||
// in case the different default messages didn't make it obvious, the difference
|
||||
// is that the `cant` message REPLACES "Pokemon used Move!", while the `fail`
|
||||
// message happens AFTER "Pokemon used Move!"
|
||||
cant: "[POKEMON]无法使用[MOVE]!",
|
||||
cantNoMove: "", // NEEDS TRANSLATION: predates Chinese support
|
||||
fail: " 但是,没有起到效果!!",
|
||||
|
||||
// n.b. this is the default message for in-battle forme changes
|
||||
// for the move Transform and ability Imposter, see the entry for the move Transform
|
||||
transform: "[POKEMON]的样子发生了变化!",
|
||||
typeChange: " [POKEMON]变成了[TYPE]属性!",
|
||||
typeChangeFromEffect: " [POKEMON]变成了[TYPE]属性!",
|
||||
typeAdd: " [POKEMON]增加了[TYPE]属性!",
|
||||
|
||||
start: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
end: " [POKEMON]摆脱了[EFFECT]的束缚!",
|
||||
activate: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
startTeamEffect: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
endTeamEffect: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
startFieldEffect: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
endFieldEffect: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
|
||||
changeAbility: " [POKEMON]的特性变为[ABILITY]了!",
|
||||
addItem: " [POKEMON]获得了[ITEM]!",
|
||||
takeItem: " [POKEMON]从[SOURCE]那里夺取了[ITEM]!",
|
||||
eatItem: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
useGem: " [ITEM]加强了[MOVE]的威力!",
|
||||
eatItemWeaken: " [ITEM]减轻了对[POKEMON]造成的伤害!",
|
||||
removeItem: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
activateItem: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
activateWeaken: " [ITEM]减轻了对[POKEMON]造成的伤害!",
|
||||
|
||||
damage: " ([POKEMON]受到了伤害!)",
|
||||
damagePercentage: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
damageFromPokemon: " [POKEMON]因[SOURCE]的[ITEM]而受到了伤害!",
|
||||
damageFromItem: " [POKEMON]因[ITEM]而受到了伤害!",
|
||||
damageFromPartialTrapping: " [POKEMON]受到了[MOVE]的伤害。",
|
||||
heal: " [POKEMON]的体力回复了!",
|
||||
healFromZEffect: " 因为Z力量,[POKEMON]回复了体力!",
|
||||
healFromEffect: " [POKEMON]用[EFFECT]回复了体力!",
|
||||
|
||||
boost: " [POKEMON]的[STAT]提高了!",
|
||||
boost2: " [POKEMON]的[STAT]大幅提高了!",
|
||||
boost3: " [POKEMON]的[STAT]巨幅提高了!",
|
||||
boost0: " [POKEMON]的[STAT]已经无法再提高了!",
|
||||
boostFromItem: " [POKEMON]用[ITEM]提高了[STAT]!",
|
||||
boost2FromItem: " [POKEMON]用[ITEM]大幅提高了[STAT]!",
|
||||
boost3FromItem: " [POKEMON]用[ITEM]巨幅提高了[STAT]!",
|
||||
boostFromZEffect: " 因为Z力量,[POKEMON]的[STAT]提高了!",
|
||||
boost2FromZEffect: " 因为Z力量,[POKEMON]的[STAT]大幅提高了!",
|
||||
boost3FromZEffect: " 因为Z力量,[POKEMON]的[STAT]巨幅提高了!",
|
||||
boostMultipleFromZEffect: " 因为Z力量,[POKEMON]的能力提高了!",
|
||||
|
||||
unboost: " [POKEMON]的[STAT]降低了!",
|
||||
unboost2: " [POKEMON]的[STAT]大幅降低了!",
|
||||
unboost3: " [POKEMON]的[STAT]巨幅降低了!",
|
||||
unboost0: " [POKEMON]的[STAT]已经无法再降低了!",
|
||||
unboostFromItem: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
unboost2FromItem: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
unboost3FromItem: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
|
||||
swapBoost: " [POKEMON]和对手互换了自己的能力变化!",
|
||||
swapOffensiveBoost: " [POKEMON]和对手互换了自己的攻击和特攻的能力变化!",
|
||||
swapDefensiveBoost: " [POKEMON]和对手互换了自己的防御和特防的能力变化!",
|
||||
copyBoost: " [POKEMON]复制了[TARGET]的能力变化!",
|
||||
clearBoost: " [POKEMON]的能力变化消失了!",
|
||||
clearBoostFromZEffect: " 因为Z力量,[POKEMON]恢复了降低的能力!",
|
||||
invertBoost: " [POKEMON]的能力变化颠倒过来了!",
|
||||
clearAllBoost: " 所有能力都复原了!",
|
||||
|
||||
superEffective: " 效果绝佳!",
|
||||
superEffectiveSpread: " 对[POKEMON]效果绝佳!",
|
||||
resisted: " 效果不好。",
|
||||
resistedSpread: " 对[POKEMON]效果不好。",
|
||||
extremelyEffective: " 效果无比绝佳!!",
|
||||
extremelyEffectiveSpread: " 对[POKEMON]效果无比绝佳!!",
|
||||
mostlyIneffective: " 效果相当不好。",
|
||||
mostlyIneffectiveSpread: " 对[POKEMON]效果相当不好。",
|
||||
crit: " 击中了要害!",
|
||||
critSpread: " 击中了[POKEMON]的要害!",
|
||||
immune: " 对于[POKEMON],好像没有效果……",
|
||||
immuneNoPokemon: " 但是,没有效果!",
|
||||
immuneOHKO: " 对于[POKEMON],完全没有效果!",
|
||||
miss: " 没有击中[POKEMON]!",
|
||||
missNoPokemon: "", // NEEDS TRANSLATION: predates Chinese support
|
||||
|
||||
center: " 复位移动!!",
|
||||
noTarget: "", // NEEDS TRANSLATION: predates Chinese support
|
||||
ohko: " 一击必杀!",
|
||||
combine: " 两个招式合二为一!这是合体招式!!",
|
||||
hitCount: " 击中了[NUMBER]次!",
|
||||
},
|
||||
|
||||
// stats
|
||||
hp: {
|
||||
statName: "HP",
|
||||
statShortName: "HP",
|
||||
},
|
||||
atk: {
|
||||
statName: "攻击",
|
||||
statShortName: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
},
|
||||
def: {
|
||||
statName: "防御",
|
||||
statShortName: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
},
|
||||
spa: {
|
||||
statName: "特攻",
|
||||
statShortName: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
},
|
||||
spd: {
|
||||
statName: "特防",
|
||||
statShortName: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
},
|
||||
spe: {
|
||||
statName: "速度",
|
||||
statShortName: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
},
|
||||
accuracy: {
|
||||
statName: "命中率",
|
||||
},
|
||||
evasion: {
|
||||
statName: "闪避率",
|
||||
},
|
||||
spc: {
|
||||
statName: "特殊",
|
||||
statShortName: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
},
|
||||
stats: {
|
||||
statName: "状态",
|
||||
},
|
||||
|
||||
// statuses
|
||||
brn: {
|
||||
start: " [POKEMON]被灼伤了!",
|
||||
startFromItem: " [POKEMON]因[ITEM]被灼伤了!",
|
||||
alreadyStarted: " [POKEMON]已经被灼伤了。",
|
||||
end: " [POKEMON]的灼伤治愈了!",
|
||||
endFromItem: " [POKEMON]用[ITEM]治愈了灼伤!",
|
||||
damage: " [POKEMON]受到了灼伤的伤害!",
|
||||
},
|
||||
frz: {
|
||||
start: " [POKEMON]冻住了!",
|
||||
alreadyStarted: " [POKEMON]已经冻住了。",
|
||||
end: " [POKEMON]的冰冻融化了!",
|
||||
endFromItem: " [POKEMON]用[ITEM]治愈了冰冻状态!",
|
||||
endFromMove: " 因[POKEMON]的[MOVE],冰冻融化了!",
|
||||
cant: "[POKEMON]因冻住了而无法行动!",
|
||||
},
|
||||
par: {
|
||||
start: " [POKEMON]麻痹了,很难使出招式!",
|
||||
alreadyStarted: " [POKEMON]已经麻痹了。",
|
||||
end: " [POKEMON]的麻痹解除了!",
|
||||
endFromItem: " [POKEMON]用[ITEM]治愈了麻痹!",
|
||||
cant: "[POKEMON]因身体麻痹而无法行动!",
|
||||
},
|
||||
psn: {
|
||||
start: " [POKEMON]中毒了!",
|
||||
alreadyStarted: " [POKEMON]已经中毒了。",
|
||||
end: " [POKEMON]中的毒彻底清除了!",
|
||||
endFromItem: " [POKEMON]用[ITEM]治愈了中毒!",
|
||||
damage: " [POKEMON]受到了毒的伤害!",
|
||||
},
|
||||
tox: {
|
||||
start: " [POKEMON]中剧毒了!",
|
||||
startFromItem: " [POKEMON]因[ITEM]中剧毒了!",
|
||||
end: "#psn",
|
||||
endFromItem: "#psn",
|
||||
alreadyStarted: "#psn",
|
||||
damage: "#psn",
|
||||
},
|
||||
slp: {
|
||||
start: " [POKEMON]睡着了!",
|
||||
startFromRest: " [POKEMON]睡着了,并且变得精力充沛!",
|
||||
alreadyStarted: " [POKEMON]已经睡着了。",
|
||||
end: " [POKEMON]醒过来了!",
|
||||
endFromItem: " [POKEMON]用[ITEM]让自己醒过来了!",
|
||||
cant: "[POKEMON]正在呼呼大睡。",
|
||||
},
|
||||
|
||||
// misc effects
|
||||
confusion: {
|
||||
start: " [POKEMON]混乱了!",
|
||||
startFromFatigue: " [POKEMON]因精疲力尽而混乱了!",
|
||||
end: " [POKEMON]的混乱解除了!",
|
||||
endFromItem: " [POKEMON]用[ITEM]治愈了混乱!",
|
||||
alreadyStarted: " [POKEMON]已经混乱了。",
|
||||
activate: " [POKEMON]正在混乱中!",
|
||||
damage: "不知所以地攻击了自己!",
|
||||
},
|
||||
drain: {
|
||||
heal: " 从[SOURCE]那里吸取了体力!",
|
||||
},
|
||||
flinch: {
|
||||
cant: "[POKEMON]畏缩了,无法使出招式!",
|
||||
},
|
||||
heal: {
|
||||
fail: " 但是,[POKEMON]的体力是全满的!",
|
||||
},
|
||||
healreplacement: {
|
||||
activate: " 因为Z力量,[POKEMON]将会回复来替换的宝可梦的HP!",
|
||||
},
|
||||
nopp: {
|
||||
cant: "[POKEMON]使出了**[MOVE]**!\n 但是,招式的剩余点数 已经用完了!",
|
||||
},
|
||||
recharge: {
|
||||
cant: "[POKEMON]因攻击的反作用力而无法动弹!",
|
||||
},
|
||||
recoil: {
|
||||
damage: " [POKEMON]受到了反作用力造成的伤害!",
|
||||
},
|
||||
unboost: {
|
||||
fail: " [POKEMON]的能力不会降低!",
|
||||
},
|
||||
struggle: {
|
||||
activate: " [POKEMON]没有可用来施展的招式!",
|
||||
},
|
||||
trapped: {
|
||||
start: " [POKEMON]已经无法逃走了!",
|
||||
},
|
||||
dynamax: {
|
||||
start: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
end: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
block: " 被极巨化之力弹开了!",
|
||||
fail: " [POKEMON]摇了摇头,好像无法使出这个招式……",
|
||||
},
|
||||
|
||||
// weather
|
||||
sandstorm: {
|
||||
weatherName: "沙暴状态",
|
||||
start: " 开始刮沙暴了!",
|
||||
end: " 沙暴停止了!",
|
||||
upkeep: " (沙暴肆虐!)",
|
||||
damage: " 沙暴袭击了[POKEMON]!",
|
||||
},
|
||||
sunnyday: {
|
||||
weatherName: "大晴天状态",
|
||||
start: " 日照变强了!",
|
||||
end: " 日照复原了!",
|
||||
upkeep: "", // NEEDS TRANSLATION: predates Chinese support
|
||||
},
|
||||
raindance: {
|
||||
weatherName: "下雨状态",
|
||||
start: " 开始下雨了!",
|
||||
end: " 雨停了!",
|
||||
upkeep: "", // NEEDS TRANSLATION: predates Chinese support
|
||||
},
|
||||
hail: {
|
||||
weatherName: "冰雹",
|
||||
start: " 开始下冰雹了!",
|
||||
end: " 冰雹不下了!",
|
||||
upkeep: " (冰雹漫天!)",
|
||||
damage: " 冰雹袭击了[POKEMON]!",
|
||||
},
|
||||
snowscape: {
|
||||
weatherName: "下雪状态",
|
||||
start: " 开始下雪了!",
|
||||
end: " 雪停了!",
|
||||
upkeep: " (漫天大雪!)",
|
||||
},
|
||||
desolateland: {
|
||||
weatherName: "大日照",
|
||||
start: " 日照变得非常强了!",
|
||||
end: " 日照复原了!",
|
||||
block: " 强日照势头不减!",
|
||||
blockMove: " 受强日照的影响,水属性的攻击被蒸发了!",
|
||||
},
|
||||
primordialsea: {
|
||||
weatherName: "大雨",
|
||||
start: " 开始下起了暴雨!",
|
||||
end: " 暴雨停了!",
|
||||
block: " 暴雨势头不减!",
|
||||
blockMove: " 受暴雨的影响,火属性的攻击被扑灭了!",
|
||||
},
|
||||
deltastream: {
|
||||
weatherName: "乱流",
|
||||
start: " 神秘的乱流保护着飞行属性宝可梦!",
|
||||
end: " 神秘的乱流停止了!",
|
||||
activate: " 神秘的乱流减弱了攻击!",
|
||||
block: " 神秘的乱流势头不减!",
|
||||
},
|
||||
|
||||
// terrain
|
||||
electricterrain: {
|
||||
start: " 脚下电光飞闪!",
|
||||
end: " 脚下的电光消失不见了!",
|
||||
block: " [POKEMON]正受到电气场地的保护!",
|
||||
},
|
||||
grassyterrain: {
|
||||
start: " 脚下青草如茵!",
|
||||
end: " 脚下的青草消失不见了!",
|
||||
heal: " [POKEMON]的体力回复了!",
|
||||
},
|
||||
mistyterrain: {
|
||||
start: " 脚下雾气缭绕!",
|
||||
end: " 脚下的雾气消失不见了!",
|
||||
block: " [POKEMON]正受到薄雾场地的保护!",
|
||||
},
|
||||
psychicterrain: {
|
||||
start: " 脚下传来了奇妙的感觉!",
|
||||
end: " 脚下的奇妙感觉消失了!",
|
||||
block: " [POKEMON]正受到精神场地的保护!",
|
||||
},
|
||||
|
||||
// field effects
|
||||
gravity: {
|
||||
start: " 重力变强了!",
|
||||
end: " 重力复原了!",
|
||||
cant: "[POKEMON]因重力太强而无法使出[MOVE]!",
|
||||
activate: "[POKEMON]因受到重力影响而无法待在空中!",
|
||||
},
|
||||
magicroom: {
|
||||
start: " 凭空制造出了会让携带的道具的效果消失的空间!",
|
||||
end: " 魔法空间被解除,道具的效果复原了!",
|
||||
},
|
||||
mudsport: {
|
||||
start: " 电气的威力减弱了!",
|
||||
end: " 玩泥巴的效果消失了!",
|
||||
},
|
||||
trickroom: {
|
||||
start: " [POKEMON]扭曲了时空!",
|
||||
end: " 扭曲的时空复原了!",
|
||||
},
|
||||
watersport: {
|
||||
start: " 火焰的威力减弱了!",
|
||||
end: " 玩水的效果消失了!",
|
||||
},
|
||||
wonderroom: {
|
||||
start: " 凭空制造出了互换防御和特防的空间!",
|
||||
end: " 奇妙空间被解除,防御和特防复原了!",
|
||||
},
|
||||
|
||||
// misc
|
||||
crash: {
|
||||
damage: " [POKEMON]因势头过猛而撞到了地面!",
|
||||
},
|
||||
};
|
||||
2627
data/text/zh-cn/items.ts
Normal file
2627
data/text/zh-cn/items.ts
Normal file
File diff suppressed because it is too large
Load diff
7706
data/text/zh-cn/moves.ts
Normal file
7706
data/text/zh-cn/moves.ts
Normal file
File diff suppressed because it is too large
Load diff
3716
data/text/zh-cn/pokedex.ts
Normal file
3716
data/text/zh-cn/pokedex.ts
Normal file
File diff suppressed because it is too large
Load diff
2317
data/text/zh-tw/abilities.ts
Normal file
2317
data/text/zh-tw/abilities.ts
Normal file
File diff suppressed because it is too large
Load diff
377
data/text/zh-tw/default.ts
Normal file
377
data/text/zh-tw/default.ts
Normal file
|
|
@ -0,0 +1,377 @@
|
|||
export const DefaultText: { [id: IDEntry]: DefaultText } = {
|
||||
default: {
|
||||
startBattle: "[TRAINER]與[TRAINER]的對戰開始了!",
|
||||
winBattle: "**[TRAINER]**在對戰中獲勝了!",
|
||||
tieBattle: "[TRAINER]與[TRAINER]打成了平手!",
|
||||
|
||||
pokemon: "[NICKNAME]",
|
||||
opposingPokemon: "對手的[NICKNAME]",
|
||||
team: "我方",
|
||||
opposingTeam: "對手",
|
||||
party: "我方的寶可夢",
|
||||
opposingParty: "對手的寶可夢",
|
||||
|
||||
turn: "== [NUMBER]回合 ==",
|
||||
switchIn: "[TRAINER]派出了[FULLNAME]!",
|
||||
switchInOwn: "上吧![FULLNAME]!",
|
||||
switchOut: "[TRAINER]換下了[NICKNAME]!",
|
||||
switchOutOwn: "[NICKNAME],回來!",
|
||||
drag: "[FULLNAME]被拖出來戰鬥了!",
|
||||
faint: "[POKEMON]倒下了!",
|
||||
swap: "[POKEMON]和[TARGET]互換了位置!",
|
||||
swapCenter: "[POKEMON]移動到了中間!",
|
||||
|
||||
// Multi Battles only
|
||||
canDynamax: " [TRAINER]能夠極巨化了!",
|
||||
canDynamaxOwn: " [TRAINER]周圍聚集了極巨力!",
|
||||
|
||||
zEffect: " [POKEMON]釋放了全力的Z招式!",
|
||||
move: "[POKEMON]使出了**[MOVE]**!",
|
||||
abilityActivation: "[[POKEMON]的[ABILITY]]",
|
||||
|
||||
mega: " [POKEMON]的[ITEM]和[TRAINER]的鑰石起了反應!",
|
||||
megaNoItem: " [TRAINER]的鑰石和[POKEMON]起了反應!",
|
||||
megaGen6: " [POKEMON]的[ITEM]和[TRAINER]的超級手鐲產生了反應!",
|
||||
transformMega: "[POKEMON]超級進化成了超級[SPECIES]!",
|
||||
primal: "[POKEMON]的原始回歸!回到了原始的樣子!",
|
||||
zPower: " [POKEMON]讓Z力量籠罩了全身!",
|
||||
zBroken: " [POKEMON]沒能防住攻擊,受到了傷害!",
|
||||
terastallize: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
|
||||
// in case the different default messages didn't make it obvious, the difference
|
||||
// is that the `cant` message REPLACES "Pokemon used Move!", while the `fail`
|
||||
// message happens AFTER "Pokemon used Move!"
|
||||
cant: "[POKEMON]無法使用[MOVE]!",
|
||||
cantNoMove: "", // NEEDS TRANSLATION: predates Chinese support
|
||||
fail: " 但是,沒有效果!!",
|
||||
|
||||
// n.b. this is the default message for in-battle forme changes
|
||||
// for the move Transform and ability Imposter, see the entry for the move Transform
|
||||
transform: "[POKEMON]的樣子發生了變化!",
|
||||
typeChange: " [POKEMON]變成了[TYPE]屬性!",
|
||||
typeChangeFromEffect: " [POKEMON]變成了[TYPE]屬性!",
|
||||
typeAdd: " [POKEMON]增加了[TYPE]屬性!",
|
||||
|
||||
start: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
end: " [POKEMON]擺脫了[EFFECT]的束縛!",
|
||||
activate: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
startTeamEffect: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
endTeamEffect: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
startFieldEffect: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
endFieldEffect: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
|
||||
changeAbility: " [POKEMON]的特性變成[ABILITY]了!",
|
||||
addItem: " [POKEMON]獲得了[ITEM]!",
|
||||
takeItem: " [POKEMON]從[SOURCE]那裡奪取了[ITEM]!",
|
||||
eatItem: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
useGem: " [ITEM]加強了[MOVE]的威力!",
|
||||
eatItemWeaken: " [ITEM]減輕了對[POKEMON]造成的傷害!",
|
||||
removeItem: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
activateItem: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
activateWeaken: " [ITEM]減輕了對[POKEMON]造成的傷害!",
|
||||
|
||||
damage: " ([POKEMON]受到了傷害!)",
|
||||
damagePercentage: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
damageFromPokemon: " [POKEMON]因[SOURCE]的[ITEM]而受到了傷害!",
|
||||
damageFromItem: " [POKEMON]因[ITEM]而受到了傷害!",
|
||||
damageFromPartialTrapping: " [POKEMON]受到了[MOVE]的傷害。",
|
||||
heal: " [POKEMON]的體力回復了!",
|
||||
healFromZEffect: " 因為Z力量,[POKEMON]回復了體力!",
|
||||
healFromEffect: " [POKEMON]用[EFFECT]回復了體力!",
|
||||
|
||||
boost: " [POKEMON]的[STAT]提高了!",
|
||||
boost2: " [POKEMON]的[STAT]大幅提高了!",
|
||||
boost3: " [POKEMON]的[STAT]極大幅提高了!",
|
||||
boost0: " [POKEMON]的[STAT]已經無法再提高了!",
|
||||
boostFromItem: " [POKEMON]用[ITEM]提高了[STAT]!",
|
||||
boost2FromItem: " [POKEMON]用[ITEM]大幅提高了[STAT]!",
|
||||
boost3FromItem: " [POKEMON]用[ITEM]極大幅提高了[STAT]!",
|
||||
boostFromZEffect: " 因為Z力量,[POKEMON]的[STAT]提高了!",
|
||||
boost2FromZEffect: " 因為Z力量,[POKEMON]的[STAT]大幅提高了!",
|
||||
boost3FromZEffect: " 因為Z力量,[POKEMON]的[STAT]極大幅提高了!",
|
||||
boostMultipleFromZEffect: " 因為Z力量,[POKEMON]的能力提高了!",
|
||||
|
||||
unboost: " [POKEMON]的[STAT]降低了!",
|
||||
unboost2: " [POKEMON]的[STAT]大幅降低了!",
|
||||
unboost3: " [POKEMON]的[STAT]極大幅降低了!",
|
||||
unboost0: " [POKEMON]的[STAT]已經無法再降低了!",
|
||||
unboostFromItem: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
unboost2FromItem: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
unboost3FromItem: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
|
||||
swapBoost: " [POKEMON]和對手互換了自身的能力變化!",
|
||||
swapOffensiveBoost: " [POKEMON]和對手互換了自身的攻擊和特攻的能力變化!",
|
||||
swapDefensiveBoost: " [POKEMON]和對手互換了自身的防禦和特防的能力變化!",
|
||||
copyBoost: " [POKEMON]複製了[TARGET]的能力變化!",
|
||||
clearBoost: " [POKEMON]的能力變化解除了!",
|
||||
clearBoostFromZEffect: " 因為Z力量,[POKEMON]降低的能力恢復了!",
|
||||
invertBoost: " [POKEMON]的能力變化顛倒過來了!",
|
||||
clearAllBoost: " 所有能力都復原了!",
|
||||
|
||||
superEffective: " 效果絕佳!",
|
||||
superEffectiveSpread: " 對[POKEMON]效果絕佳!",
|
||||
resisted: " 效果不好。",
|
||||
resistedSpread: " 對[POKEMON]效果不好。",
|
||||
extremelyEffective: " 效果無比絕佳!!",
|
||||
extremelyEffectiveSpread: " 對[POKEMON]效果無比絕佳!!",
|
||||
mostlyIneffective: " 效果相當不好。",
|
||||
mostlyIneffectiveSpread: " 對[POKEMON]效果相當不好。",
|
||||
crit: " 擊中了要害!",
|
||||
critSpread: " 擊中了[POKEMON]的要害!",
|
||||
immune: " 對於[POKEMON],好像沒有效果……",
|
||||
immuneNoPokemon: " 但是,沒有效果!",
|
||||
immuneOHKO: " 對於[POKEMON]完全沒有效果!",
|
||||
miss: " 沒有擊中[POKEMON]!",
|
||||
missNoPokemon: "", // NEEDS TRANSLATION: predates Chinese support
|
||||
|
||||
center: " 復位移動!!",
|
||||
noTarget: "", // NEEDS TRANSLATION: predates Chinese support
|
||||
ohko: " 一擊必殺!",
|
||||
combine: " 兩個招式合而為一!這是合體招式!",
|
||||
hitCount: " 擊中了[NUMBER]次!",
|
||||
},
|
||||
|
||||
// stats
|
||||
hp: {
|
||||
statName: "HP",
|
||||
statShortName: "HP",
|
||||
},
|
||||
atk: {
|
||||
statName: "攻擊",
|
||||
statShortName: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
},
|
||||
def: {
|
||||
statName: "防禦",
|
||||
statShortName: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
},
|
||||
spa: {
|
||||
statName: "特攻",
|
||||
statShortName: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
},
|
||||
spd: {
|
||||
statName: "特防",
|
||||
statShortName: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
},
|
||||
spe: {
|
||||
statName: "速度",
|
||||
statShortName: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
},
|
||||
accuracy: {
|
||||
statName: "命中率",
|
||||
},
|
||||
evasion: {
|
||||
statName: "閃避率",
|
||||
},
|
||||
spc: {
|
||||
statName: "特殊",
|
||||
statShortName: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
},
|
||||
stats: {
|
||||
statName: "狀態",
|
||||
},
|
||||
|
||||
// statuses
|
||||
brn: {
|
||||
start: " [POKEMON]被灼傷了!",
|
||||
startFromItem: " [POKEMON]因[ITEM]而被灼傷了!",
|
||||
alreadyStarted: " [POKEMON]已經被灼傷了。",
|
||||
end: " [POKEMON]的灼傷痊癒了!",
|
||||
endFromItem: " [POKEMON]用[ITEM]治癒了灼傷!",
|
||||
damage: " [POKEMON]受到了灼傷的傷害!",
|
||||
},
|
||||
frz: {
|
||||
start: " [POKEMON]凍住了!",
|
||||
alreadyStarted: " [POKEMON]已經凍住了。",
|
||||
end: " [POKEMON]的冰凍融化了!",
|
||||
endFromItem: " [POKEMON]用[ITEM]治癒了冰凍狀態!",
|
||||
endFromMove: " [POKEMON]的[MOVE]讓冰凍融化了!",
|
||||
cant: "[POKEMON]因凍住了而無法行動!",
|
||||
},
|
||||
par: {
|
||||
start: " [POKEMON]麻痺了,不易使出招式!",
|
||||
alreadyStarted: " [POKEMON]已經麻痺了。",
|
||||
end: " [POKEMON]的麻痺解除了!",
|
||||
endFromItem: " [POKEMON]用[ITEM]治癒了麻痺!",
|
||||
cant: "[POKEMON]因身體麻痺而無法行動!",
|
||||
},
|
||||
psn: {
|
||||
start: " [POKEMON]中毒了!",
|
||||
alreadyStarted: " [POKEMON]已經中毒了。",
|
||||
end: " [POKEMON]中的毒徹底清除了!",
|
||||
endFromItem: " [POKEMON]用[ITEM]治癒了中毒!",
|
||||
damage: " [POKEMON]受到了毒的傷害!",
|
||||
},
|
||||
tox: {
|
||||
start: " [POKEMON]中劇毒了!",
|
||||
startFromItem: " [POKEMON]因[ITEM]而中劇毒了!",
|
||||
end: "#psn",
|
||||
endFromItem: "#psn",
|
||||
alreadyStarted: "#psn",
|
||||
damage: "#psn",
|
||||
},
|
||||
slp: {
|
||||
start: " [POKEMON]睡著了!",
|
||||
startFromRest: " [POKEMON]睡著了,變得精力充沛!",
|
||||
alreadyStarted: " [POKEMON]已經睡著了。",
|
||||
end: " [POKEMON]醒過來了!",
|
||||
endFromItem: " [POKEMON]用[ITEM]讓自己醒過來了!",
|
||||
cant: "[POKEMON]正在呼呼大睡。",
|
||||
},
|
||||
|
||||
// misc effects
|
||||
confusion: {
|
||||
start: " [POKEMON]混亂了!",
|
||||
startFromFatigue: " [POKEMON]因精疲力盡而混亂了!",
|
||||
end: " [POKEMON]的混亂解除了!",
|
||||
endFromItem: " [POKEMON]用[ITEM]治癒了混亂!",
|
||||
alreadyStarted: " [POKEMON]已經混亂了。",
|
||||
activate: " [POKEMON]正在混亂中!",
|
||||
damage: "不知所以地攻擊了自己!",
|
||||
},
|
||||
drain: {
|
||||
heal: " 從[SOURCE]那裡吸取了體力!",
|
||||
},
|
||||
flinch: {
|
||||
cant: "[POKEMON]畏縮了,無法使出招式!",
|
||||
},
|
||||
heal: {
|
||||
fail: " 但是,[POKEMON]的體力是全滿的!",
|
||||
},
|
||||
healreplacement: {
|
||||
activate: " 因為Z力量,[POKEMON]將會回復替換上場的寶可夢的體力!",
|
||||
},
|
||||
nopp: {
|
||||
cant: "[POKEMON]使出了**[MOVE]**!\n 但是,招式的點數 已經用完了!",
|
||||
},
|
||||
recharge: {
|
||||
cant: "[POKEMON]因攻擊的反作用力而無法動彈!",
|
||||
},
|
||||
recoil: {
|
||||
damage: " [POKEMON]受到了反作用力造成的傷害!",
|
||||
},
|
||||
unboost: {
|
||||
fail: " 無法降低[POKEMON]的能力!",
|
||||
},
|
||||
struggle: {
|
||||
activate: " [POKEMON]沒有可用來施展的招式!",
|
||||
},
|
||||
trapped: {
|
||||
start: " [POKEMON]已經無法逃走了!",
|
||||
},
|
||||
dynamax: {
|
||||
start: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
end: "", // NEEDS TRANSLATION: Showdown custom text
|
||||
block: " 被極巨化的力量彈開了!",
|
||||
fail: " [POKEMON]搖了搖頭,好像無法使出這個招式……",
|
||||
},
|
||||
|
||||
// weather
|
||||
sandstorm: {
|
||||
weatherName: "沙暴狀態",
|
||||
start: " 開始刮沙暴了!",
|
||||
end: " 沙暴停止了!",
|
||||
upkeep: " (沙暴肆虐!)",
|
||||
damage: " 沙暴襲擊了[POKEMON]!",
|
||||
},
|
||||
sunnyday: {
|
||||
weatherName: "大晴天狀態",
|
||||
start: " 日照變強了!",
|
||||
end: " 日照復原了!",
|
||||
upkeep: "", // NEEDS TRANSLATION: predates Chinese support
|
||||
},
|
||||
raindance: {
|
||||
weatherName: "下雨狀態",
|
||||
start: " 開始下雨了!",
|
||||
end: " 雨停了!",
|
||||
upkeep: "", // NEEDS TRANSLATION: predates Chinese support
|
||||
},
|
||||
hail: {
|
||||
weatherName: "冰雹",
|
||||
start: " 開始下冰雹了!",
|
||||
end: " 冰雹不下了!",
|
||||
upkeep: " (冰雹漫天!)",
|
||||
damage: " 冰雹襲擊了[POKEMON]!",
|
||||
},
|
||||
snowscape: {
|
||||
weatherName: "下雪狀態",
|
||||
start: " 開始下雪了!",
|
||||
end: " 雪不下了!",
|
||||
upkeep: " (雪片漫天!)",
|
||||
},
|
||||
desolateland: {
|
||||
weatherName: "大日照",
|
||||
start: " 日照變得非常強!",
|
||||
end: " 日照復原了!",
|
||||
block: " 強日照勢頭不減!",
|
||||
blockMove: " 受強日照的影響,水屬性的攻擊被蒸發了!",
|
||||
},
|
||||
primordialsea: {
|
||||
weatherName: "大雨",
|
||||
start: " 開始下起了暴雨!",
|
||||
end: " 暴雨停了!",
|
||||
block: " 暴雨勢頭不減!",
|
||||
blockMove: " 受暴雨的影響,火屬性的攻擊被撲滅了!",
|
||||
},
|
||||
deltastream: {
|
||||
weatherName: "亂流",
|
||||
start: " 神秘的亂流保護著飛行屬性寶可夢!",
|
||||
end: " 神秘的亂流停止了!",
|
||||
activate: " 神秘的亂流減弱了攻擊!",
|
||||
block: " 神秘的亂流勢頭不減!",
|
||||
},
|
||||
|
||||
// terrain
|
||||
electricterrain: {
|
||||
start: " 腳下電流飛閃!",
|
||||
end: " 腳下的電流消失了!",
|
||||
block: " [POKEMON]正受到電氣場地的保護!",
|
||||
},
|
||||
grassyterrain: {
|
||||
start: " 腳下青草如茵!",
|
||||
end: " 腳下的青草消失不見了!",
|
||||
heal: " [POKEMON]的體力回復了!",
|
||||
},
|
||||
mistyterrain: {
|
||||
start: " 腳下霧氣繚繞!",
|
||||
end: " 腳下的霧氣消失不見了!",
|
||||
block: " [POKEMON]正受到薄霧場地的保護!",
|
||||
},
|
||||
psychicterrain: {
|
||||
start: " 腳下傳來了奇妙的感覺!",
|
||||
end: " 腳下的奇妙感覺消失了!",
|
||||
block: " [POKEMON]正受到精神場地的保護!",
|
||||
},
|
||||
|
||||
// field effects
|
||||
gravity: {
|
||||
start: " 重力變強了!",
|
||||
end: " 重力復原了!",
|
||||
cant: "[POKEMON]因重力太強而無法使出[MOVE]!",
|
||||
activate: "[POKEMON]因重力的影響而無法留在空中!",
|
||||
},
|
||||
magicroom: {
|
||||
start: " 憑空製造出了會讓攜帶的道具的效果消失的空間!",
|
||||
end: " 魔法空間被解除,道具的效果復原了!",
|
||||
},
|
||||
mudsport: {
|
||||
start: " 電氣的威力減弱了!",
|
||||
end: " 玩泥巴的效果消失了!",
|
||||
},
|
||||
trickroom: {
|
||||
start: " [POKEMON]扭曲了時空!",
|
||||
end: " 扭曲的時空復原了!",
|
||||
},
|
||||
watersport: {
|
||||
start: " 火焰的威力減弱了!",
|
||||
end: " 玩水的效果消失了!",
|
||||
},
|
||||
wonderroom: {
|
||||
start: " 憑空製造出了互換防禦和特防的空間!",
|
||||
end: " 奇妙空間被解除,防禦和特防復原了!",
|
||||
},
|
||||
|
||||
// misc
|
||||
crash: {
|
||||
damage: " [POKEMON]因勢頭過猛而撞到了地面!",
|
||||
},
|
||||
};
|
||||
2627
data/text/zh-tw/items.ts
Normal file
2627
data/text/zh-tw/items.ts
Normal file
File diff suppressed because it is too large
Load diff
7706
data/text/zh-tw/moves.ts
Normal file
7706
data/text/zh-tw/moves.ts
Normal file
File diff suppressed because it is too large
Load diff
3716
data/text/zh-tw/pokedex.ts
Normal file
3716
data/text/zh-tw/pokedex.ts
Normal file
File diff suppressed because it is too large
Load diff
|
|
@ -743,21 +743,21 @@ export const commands: Chat.ChatCommands = {
|
|||
|
||||
language(target, room, user) {
|
||||
if (!target) {
|
||||
const language = Chat.languages.get(user.language || 'english' as ID);
|
||||
const language = Chat.getLanguageName(user.language || 'english' as ID);
|
||||
return this.sendReply(this.tr`Currently, you're viewing Pokémon Showdown in ${language}.`);
|
||||
}
|
||||
const languageID = toID(target);
|
||||
if (!Chat.languages.has(languageID)) {
|
||||
const languages = [...Chat.languages.values()].join(', ');
|
||||
const languages = [...Chat.languages].map(([id]) => Chat.getLanguageName(id)).join(', ');
|
||||
throw new Chat.ErrorMessage(this.tr`Valid languages are: ${languages}`);
|
||||
}
|
||||
user.language = languageID;
|
||||
user.update();
|
||||
const languageName = Chat.languages.get(languageID);
|
||||
const langRoom = Rooms.search(languageName || "");
|
||||
let language = languageName;
|
||||
let language = Chat.getLanguageName(languageID);
|
||||
if (langRoom) {
|
||||
language = `<a href="/${langRoom.roomid}">${languageName}</a>`;
|
||||
language = `<a href="/${langRoom.roomid}">${language}</a>`;
|
||||
}
|
||||
return this.sendReply(
|
||||
`|html|` + this.tr`Pokémon Showdown will now be displayed in ${language} (except in language rooms).`
|
||||
|
|
|
|||
|
|
@ -603,6 +603,7 @@ export const commands: Chat.ChatCommands = {
|
|||
}
|
||||
const newTargets = dex.dataSearch(target);
|
||||
const showDetails = (cmd.startsWith('dt') || cmd === 'details');
|
||||
const textLanguage = Chat.getDexLanguage(this.language);
|
||||
if (!newTargets?.length) {
|
||||
throw new Chat.ErrorMessage(`'${target}' doesn't match any Pok\u00e9mon, item, move, ability or nature${Dex.gen > dex.gen ? ` in Gen ${dex.gen}` : ""}. (Check your spelling?)`);
|
||||
}
|
||||
|
|
@ -615,6 +616,7 @@ export const commands: Chat.ChatCommands = {
|
|||
buffer = `'${target}' has no exact match${Dex.gen > dex.gen ? ` in Gen ${dex.gen}` : ""}. Approximate match${newTargets.length === 1 ? '' : 'es'}:\n`;
|
||||
}
|
||||
let details: { [k: string]: string } = {};
|
||||
let description = '';
|
||||
switch (newTarget.searchType) {
|
||||
case 'nature':
|
||||
const nature = Dex.natures.get(newTarget.name);
|
||||
|
|
@ -643,8 +645,11 @@ export const commands: Chat.ChatCommands = {
|
|||
tierDisplay === 'doubles tiers' ? pokemon.doublesTier :
|
||||
tierDisplay === 'National Dex tiers' ? pokemon.natDexTier :
|
||||
pokemon.num >= 0 ? String(pokemon.num) : pokemon.tier;
|
||||
buffer += `${prefix}${Chat.getDataPokemonHTML(pokemon, dex.gen, displayedTier)}\n`;
|
||||
buffer += `${prefix}${Chat.getDataPokemonHTML(
|
||||
pokemon, { dex, tier: displayedTier, language: this.language }
|
||||
)}\n`;
|
||||
if (showDetails) {
|
||||
description = dex.text.get(pokemon, textLanguage).desc;
|
||||
let weighthit = 20;
|
||||
if (pokemon.weighthg >= 2000) {
|
||||
weighthit = 120;
|
||||
|
|
@ -712,8 +717,11 @@ export const commands: Chat.ChatCommands = {
|
|||
break;
|
||||
case 'item':
|
||||
const item = dex.items.get(newTarget.name);
|
||||
buffer += `${prefix}${Chat.getDataItemHTML(item)}\n`;
|
||||
buffer += `${prefix}${Chat.getDataItemHTML(
|
||||
item, { dex, language: this.language, hideShortDescription: showDetails }
|
||||
)}\n`;
|
||||
if (showDetails) {
|
||||
description = dex.text.get(item, textLanguage).desc;
|
||||
details = {
|
||||
Gen: String(item.gen),
|
||||
};
|
||||
|
|
@ -744,8 +752,11 @@ export const commands: Chat.ChatCommands = {
|
|||
break;
|
||||
case 'move':
|
||||
const move = dex.moves.get(newTarget.name);
|
||||
buffer += `${prefix}${Chat.getDataMoveHTML(move, dex.currentMod.startsWith('champions'))}\n`;
|
||||
buffer += `${prefix}${Chat.getDataMoveHTML(
|
||||
move, { dex, language: this.language, hideShortDescription: showDetails }
|
||||
)}\n`;
|
||||
if (showDetails) {
|
||||
description = dex.text.get(move, textLanguage).desc;
|
||||
details = {
|
||||
Priority: String(move.priority),
|
||||
Gen: String(move.gen) || 'CAP',
|
||||
|
|
@ -851,8 +862,11 @@ export const commands: Chat.ChatCommands = {
|
|||
break;
|
||||
case 'ability':
|
||||
const ability = dex.abilities.get(newTarget.name);
|
||||
buffer += `${prefix}${Chat.getDataAbilityHTML(ability)}\n`;
|
||||
buffer += `${prefix}${Chat.getDataAbilityHTML(
|
||||
ability, { dex, language: this.language, hideShortDescription: showDetails }
|
||||
)}\n`;
|
||||
if (showDetails) {
|
||||
description = dex.text.get(ability, textLanguage).desc;
|
||||
details = {
|
||||
Gen: String(ability.gen) || 'CAP',
|
||||
};
|
||||
|
|
@ -868,6 +882,9 @@ export const commands: Chat.ChatCommands = {
|
|||
}
|
||||
|
||||
if (showDetails) {
|
||||
if (description) {
|
||||
buffer += `${prefix}${Utils.escapeHTML(description)}\n`;
|
||||
}
|
||||
buffer += `${prefix}<font size="1">${Object.entries(details).map(([detail, value]) => (
|
||||
value === '' ? detail : `<span class="gray">${detail}:</span> ${value}`
|
||||
)).join(" |  ")}</font>\n`;
|
||||
|
|
|
|||
|
|
@ -2573,7 +2573,7 @@ function runItemsearch(target: string, cmd: string, message: string) {
|
|||
for (const item of dex.items.all()) {
|
||||
let matched = 0;
|
||||
// splits words in the description into a toID()-esk format except retaining / and . in numbers
|
||||
let descWords = item.desc || '';
|
||||
let descWords = dex.text.get(item).desc || '';
|
||||
// add more general quantifier words to descriptions
|
||||
if (/[1-9.]+x/.test(descWords)) descWords += ' increases';
|
||||
if (item.isBerry) descWords += ' berry';
|
||||
|
|
@ -2757,7 +2757,7 @@ function runAbilitysearch(target: string, cmd: string, message: string) {
|
|||
for (const ability of dex.abilities.all()) {
|
||||
let matched = 0;
|
||||
// splits words in the description into a toID()-esque format except retaining / and . in numbers
|
||||
let descWords = ability.desc || ability.shortDesc || '';
|
||||
let descWords = dex.text.get(ability).desc;
|
||||
// add more general quantifier words to descriptions
|
||||
if (/[1-9.]+x/.test(descWords)) descWords += ' increases';
|
||||
descWords = descWords.replace(/super[-\s]effective/g, 'supereffective');
|
||||
|
|
|
|||
|
|
@ -212,7 +212,7 @@ export const commands: Chat.ChatCommands = {
|
|||
};
|
||||
if (mixedSpecies.eggGroups) details["Egg Group(s)"] = mixedSpecies.eggGroups.join(", ");
|
||||
details['<span class="gray">Does Not Evolve</span>'] = "";
|
||||
this.sendReply(`|raw|${Chat.getDataPokemonHTML(mixedSpecies)}`);
|
||||
this.sendReply(`|raw|${Chat.getDataPokemonHTML(mixedSpecies, { language: this.language })}`);
|
||||
this.sendReply(`|raw|<font size="1">` + Object.entries(details).map(([detail, value]) => (
|
||||
value === '' ? detail : `<span class="gray">${detail}:</span> ${value}`
|
||||
)).join(" |  ") + `</font>`);
|
||||
|
|
@ -398,7 +398,7 @@ export const commands: Chat.ChatCommands = {
|
|||
species.baseStats[i] *= (bst <= 350 ? 2 : 1);
|
||||
species.bst += species.baseStats[i];
|
||||
}
|
||||
this.sendReply(`|html|${Chat.getDataPokemonHTML(species, dex.gen)}`);
|
||||
this.sendReply(`|html|${Chat.getDataPokemonHTML(species, { dex, language: this.language })}`);
|
||||
},
|
||||
'350cuphelp': [
|
||||
`/350 OR /350cup <pokemon>[, gen] - Shows the base stats that a Pok\u00e9mon would have in 350 Cup.`,
|
||||
|
|
@ -453,7 +453,9 @@ export const commands: Chat.ChatCommands = {
|
|||
}
|
||||
let tier = species.tier;
|
||||
if (tier[0] === '(') tier = tier.slice(1, -1);
|
||||
if (!(tier in boosts)) return this.sendReply(`|html|${Chat.getDataPokemonHTML(species, dex.gen)}`);
|
||||
if (!(tier in boosts)) {
|
||||
return this.sendReply(`|html|${Chat.getDataPokemonHTML(species, { dex, language: this.language })}`);
|
||||
}
|
||||
const boost = boosts[tier as TierShiftTiers];
|
||||
species.bst = species.baseStats.hp;
|
||||
for (const statName in species.baseStats) {
|
||||
|
|
@ -462,7 +464,7 @@ export const commands: Chat.ChatCommands = {
|
|||
species.baseStats[statName] = Utils.clampIntRange(species.baseStats[statName] + boost, 1, 255);
|
||||
species.bst += species.baseStats[statName];
|
||||
}
|
||||
this.sendReply(`|raw|${Chat.getDataPokemonHTML(species, dex.gen)}`);
|
||||
this.sendReply(`|raw|${Chat.getDataPokemonHTML(species, { dex, language: this.language })}`);
|
||||
},
|
||||
tiershifthelp: [
|
||||
`/ts OR /tiershift <pokemon>[, generation] - Shows the base stats that a Pok\u00e9mon would have in Tier Shift.`,
|
||||
|
|
@ -655,7 +657,7 @@ export const commands: Chat.ChatCommands = {
|
|||
species.bst += species.baseStats[stat];
|
||||
}
|
||||
species.bst += species.baseStats.hp;
|
||||
this.sendReply(`|raw|${Chat.getDataPokemonHTML(species, dex.gen)}`);
|
||||
this.sendReply(`|raw|${Chat.getDataPokemonHTML(species, { dex, language: this.language })}`);
|
||||
},
|
||||
scalemonshelp: [
|
||||
`/scale OR /scalemons <pokemon>[, gen] - Shows the base stats that a Pok\u00e9mon would have in Scalemons.`,
|
||||
|
|
@ -703,14 +705,14 @@ export const commands: Chat.ChatCommands = {
|
|||
for (const stat in species.baseStats) {
|
||||
species.baseStats[stat] = flippedStats[stat];
|
||||
}
|
||||
this.sendReply(`|raw|${Chat.getDataPokemonHTML(species, dex.gen)}`);
|
||||
this.sendReply(`|raw|${Chat.getDataPokemonHTML(species, { dex, language: this.language })}`);
|
||||
return;
|
||||
}
|
||||
const stats = Object.values(species.baseStats).reverse();
|
||||
for (const [i, statName] of Object.keys(species.baseStats).entries()) {
|
||||
species.baseStats[statName] = stats[i];
|
||||
}
|
||||
this.sendReply(`|raw|${Chat.getDataPokemonHTML(species, dex.gen)}`);
|
||||
this.sendReply(`|raw|${Chat.getDataPokemonHTML(species, { dex, language: this.language })}`);
|
||||
},
|
||||
flippedhelp: [
|
||||
`/flip OR /flipped <pokemon>[, gen] - Shows the base stats that a Pok\u00e9mon would have in Flipped.`,
|
||||
|
|
@ -754,7 +756,7 @@ export const commands: Chat.ChatCommands = {
|
|||
species.baseStats[natureObj.plus] = swap;
|
||||
species.tier = 'NS';
|
||||
}
|
||||
this.sendReply(`|raw|${Chat.getDataPokemonHTML(species, dex.gen)}`);
|
||||
this.sendReply(`|raw|${Chat.getDataPokemonHTML(species, { dex, language: this.language })}`);
|
||||
},
|
||||
natureswaphelp: [
|
||||
`/ns OR /natureswap <nature>, <pokemon>[, gen] - Shows the base stats that a Pok\u00e9mon would have in Nature Swap.`,
|
||||
|
|
@ -838,7 +840,7 @@ export const commands: Chat.ChatCommands = {
|
|||
};
|
||||
if (mixedSpecies.eggGroups) details["Egg Group(s)"] = mixedSpecies.eggGroups.join(", ");
|
||||
details['<span class="gray">Does Not Evolve</span>'] = "";
|
||||
this.sendReply(`|raw|${Chat.getDataPokemonHTML(mixedSpecies)}`);
|
||||
this.sendReply(`|raw|${Chat.getDataPokemonHTML(mixedSpecies, { language: this.language })}`);
|
||||
this.sendReply(`|raw|<font size="1">` + Object.entries(details).map(([detail, value]) => (
|
||||
value === '' ? detail : `<span class="gray">${detail}:</span> ${value}`
|
||||
)).join(" |  ") + `</font>`);
|
||||
|
|
@ -913,7 +915,7 @@ export const commands: Chat.ChatCommands = {
|
|||
Weight: `${deltas.weighthg < 0 ? "" : "+"}${deltas.weighthg / 10} kg`,
|
||||
Stage: (dex.species.get(prevoSpecies.prevo).exists ? 3 : 2),
|
||||
};
|
||||
this.sendReply(`|raw|${Chat.getDataPokemonHTML(deltas)}`);
|
||||
this.sendReply(`|raw|${Chat.getDataPokemonHTML(deltas, { language: this.language })}`);
|
||||
if (!isReEvo) {
|
||||
this.sendReply(`|raw|<font size="1"><span class="gray">Gen:</span> ${details["Gen"]} |  <span class="gray">Weight:</span> ${details["Weight"]} |  <span class="gray">Stage:</span> ${details["Stage"]}</font>`);
|
||||
}
|
||||
|
|
@ -953,7 +955,7 @@ export const commands: Chat.ChatCommands = {
|
|||
Weight: `${deltas.weighthg < 0 ? "" : "+"}${deltas.weighthg / 10} kg`,
|
||||
Stage: (dex.species.get(prevoSpecies.prevo).exists ? 3 : 2),
|
||||
};
|
||||
this.sendReply(`|raw|${Chat.getDataPokemonHTML(deltas)}`);
|
||||
this.sendReply(`|raw|${Chat.getDataPokemonHTML(deltas, { language: this.language })}`);
|
||||
if (!isReEvo) {
|
||||
this.sendReply(`|raw|<font size="1"><span class="gray">Gen:</span> ${details["Gen"]} |  <span class="gray">Weight:</span> ${details["Weight"]} |  <span class="gray">Stage:</span> ${details["Stage"]}</font>`);
|
||||
}
|
||||
|
|
@ -978,9 +980,10 @@ export const commands: Chat.ChatCommands = {
|
|||
move.pp = 5;
|
||||
move.gen = species.gen;
|
||||
move.num = species.num;
|
||||
move.desc = move.shortDesc = `Gives ${species.abilities['0']} as a second ability after use.`;
|
||||
move.category = species.baseStats['spa'] >= species.baseStats['atk'] ? 'Special' : 'Physical';
|
||||
this.sendReply(`|raw|${Chat.getDataMoveHTML(move)}`);
|
||||
const desc = `Gives ${species.abilities['0']} as a second ability after use.`;
|
||||
Object.assign(move, { desc, shortDesc: desc });
|
||||
this.sendReply(`|raw|${Chat.getDataMoveHTML(move, { language: this.language })}`);
|
||||
},
|
||||
pokemovehelp: [
|
||||
`/pokemove <Pok\u00e9mon> - Shows the Pokemove data for <Pok\u00e9mon>.`,
|
||||
|
|
@ -1010,7 +1013,9 @@ export const commands: Chat.ChatCommands = {
|
|||
species.baseStats[i] *= (species.baseStats[i] <= 70 ? 2 : 1);
|
||||
species.bst += species.baseStats[i];
|
||||
}
|
||||
this.sendReply(`|raw|${Chat.getDataPokemonHTML(species, dex.gen, 'BnB')}`);
|
||||
this.sendReply(`|raw|${Chat.getDataPokemonHTML(
|
||||
species, { dex, tier: 'BnB', language: this.language }
|
||||
)}`);
|
||||
},
|
||||
'badnboostedhelphelp': [
|
||||
`/bnb OR /badnboosted <pokemon>[, gen] - Shows the base stats that a Pok\u00e9mon would have in Bad 'n Boosted.`,
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
import { type SSBSet, ssbSets } from "../../../data/mods/gen9ssb/random-teams";
|
||||
import type { ModdedEffectText } from "../../../sim/dex-data";
|
||||
import { formatNature, STAT_NAMES } from ".";
|
||||
|
||||
class SSBSetHTML extends Chat.JSX.Component<{ set: SSBSet, dex: ModdedDex, baseDex: ModdedDex }> {
|
||||
|
|
@ -43,9 +44,9 @@ class SSBSetHTML extends Chat.JSX.Component<{ set: SSBSet, dex: ModdedDex, baseD
|
|||
}
|
||||
}
|
||||
|
||||
class SSBMoveHTML extends Chat.JSX.Component<{ sigMove: Move, dex: ModdedDex }> {
|
||||
class SSBMoveHTML extends Chat.JSX.Component<{ sigMove: Move, dex: ModdedDex, language: ID | null }> {
|
||||
render() {
|
||||
const { sigMove, dex } = this.props;
|
||||
const { sigMove, dex, language } = this.props;
|
||||
const details: { [k: string]: string } = {
|
||||
Priority: String(sigMove.priority),
|
||||
Gen: String(sigMove.gen || 9),
|
||||
|
|
@ -125,25 +126,28 @@ class SSBMoveHTML extends Chat.JSX.Component<{ sigMove: Move, dex: ModdedDex }>
|
|||
if (sigMove.isNonstandard === 'Unobtainable') {
|
||||
details[`Unobtainable in Gen ${dex.gen}`] = "";
|
||||
}
|
||||
if (sigMove.shortDesc || sigMove.desc) {
|
||||
const moveText = dex.text.get(sigMove);
|
||||
if (moveText.shortDesc || moveText.desc) {
|
||||
return <><hr />
|
||||
<span dangerouslySetInnerHTML={{ __html: Chat.getDataMoveHTML(sigMove) }}></span>
|
||||
<span dangerouslySetInnerHTML={{ __html: Chat.getDataMoveHTML(sigMove, { dex, language }) }}></span>
|
||||
<font size="1">{Object.entries(details).map(([detail, value], idx, arr) => {
|
||||
const lastEntry = idx === arr.length - 1;
|
||||
if (!value) return <>✓ {detail}{!lastEntry && <> |  </>}</>;
|
||||
if (value === 'x') return <>✗ {detail}{!lastEntry && <> |  </>}</>;
|
||||
return <><span class="gray">{detail}:</span> {value}{!lastEntry && <> |  </>}</>;
|
||||
})}</font>
|
||||
{(sigMove.desc && sigMove.desc !== sigMove.shortDesc) &&
|
||||
<details><summary><strong>In-Depth Description</strong></summary>{sigMove.desc}</details>}
|
||||
{(moveText.desc && moveText.desc !== moveText.shortDesc) &&
|
||||
<details><summary><strong>In-Depth Description</strong></summary>{moveText.desc}</details>}
|
||||
</>;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class SSBItemHTML extends Chat.JSX.Component<{ set: SSBSet, dex: ModdedDex, baseDex: ModdedDex }> {
|
||||
class SSBItemHTML extends Chat.JSX.Component<{
|
||||
set: SSBSet, dex: ModdedDex, baseDex: ModdedDex, language: ID | null,
|
||||
}> {
|
||||
render() {
|
||||
const { set, dex, baseDex } = this.props;
|
||||
const { set, dex, baseDex, language } = this.props;
|
||||
if (!Array.isArray(set.item)) {
|
||||
const baseItem = baseDex.items.get(set.item);
|
||||
const sigItem = dex.items.get(set.item);
|
||||
|
|
@ -173,9 +177,11 @@ class SSBItemHTML extends Chat.JSX.Component<{ set: SSBSet, dex: ModdedDex, base
|
|||
if (sigItem.isNonstandard && sigItem.isNonstandard !== "Custom") {
|
||||
details[`Unobtainable in Gen ${dex.gen}`] = "";
|
||||
}
|
||||
if (!baseItem.exists || (baseItem.desc || baseItem.shortDesc) !== (sigItem.desc || sigItem.shortDesc)) {
|
||||
const baseText = baseDex.text.get(baseItem);
|
||||
const itemText = dex.text.get(sigItem);
|
||||
if (!baseItem.exists || baseText.desc !== itemText.desc || baseText.shortDesc !== itemText.shortDesc) {
|
||||
return <><hr />
|
||||
<span dangerouslySetInnerHTML={{ __html: Chat.getDataItemHTML(sigItem) }}></span>
|
||||
<span dangerouslySetInnerHTML={{ __html: Chat.getDataItemHTML(sigItem, { dex, language }) }}></span>
|
||||
<font size="1">{Object.entries(details).map(([detail, value], idx, arr) => {
|
||||
const lastEntry = idx === arr.length - 1;
|
||||
if (value === '') return <>{detail}{!lastEntry && <> |  </>}</>;
|
||||
|
|
@ -188,9 +194,11 @@ class SSBItemHTML extends Chat.JSX.Component<{ set: SSBSet, dex: ModdedDex, base
|
|||
}
|
||||
}
|
||||
|
||||
class SSBAbilityHTML extends Chat.JSX.Component<{ set: SSBSet, dex: ModdedDex, baseDex: ModdedDex }> {
|
||||
class SSBAbilityHTML extends Chat.JSX.Component<{
|
||||
set: SSBSet, dex: ModdedDex, baseDex: ModdedDex, language: ID | null,
|
||||
}> {
|
||||
render() {
|
||||
const { set, dex, baseDex } = this.props;
|
||||
const { set, dex, baseDex, language } = this.props;
|
||||
const customMegaAbilities = ['Sableye', 'Ampharos'];
|
||||
if (!Array.isArray(set.ability) &&
|
||||
(customMegaAbilities.includes(set.species) || !baseDex.abilities.get(set.ability).exists)) {
|
||||
|
|
@ -199,8 +207,11 @@ class SSBAbilityHTML extends Chat.JSX.Component<{ set: SSBSet, dex: ModdedDex, b
|
|||
const megaAbil = dex.species.get(`${set.species}-Mega`).abilities[0];
|
||||
sigAbil = baseDex.deepClone(dex.abilities.get(megaAbil));
|
||||
}
|
||||
if (!sigAbil.desc && !sigAbil.shortDesc) {
|
||||
sigAbil.desc = `This ability doesn't have a description. Try contacting the SSB dev team.`;
|
||||
let abilityText = dex.text.get(sigAbil);
|
||||
if (!abilityText.desc && !abilityText.shortDesc) {
|
||||
const desc = `This ability doesn't have a description. Try contacting the SSB dev team.`;
|
||||
Object.assign(sigAbil, { desc, shortDesc: desc });
|
||||
abilityText = dex.text.get(sigAbil);
|
||||
}
|
||||
const details: { [k: string]: string } = {
|
||||
Gen: String(sigAbil.gen || 9) || 'CAP',
|
||||
|
|
@ -208,23 +219,25 @@ class SSBAbilityHTML extends Chat.JSX.Component<{ set: SSBSet, dex: ModdedDex, b
|
|||
if (sigAbil.flags['cantsuppress']) details["Not affected by Gastro Acid"] = "";
|
||||
if (sigAbil.flags['breakable']) details["Ignored by Mold Breaker"] = "";
|
||||
return <><hr />
|
||||
<span dangerouslySetInnerHTML={{ __html: Chat.getDataAbilityHTML(sigAbil) }}></span>
|
||||
<span dangerouslySetInnerHTML={{ __html: Chat.getDataAbilityHTML(sigAbil, { dex, language }) }}></span>
|
||||
<font size="1">{Object.entries(details).map(([detail, value], idx, arr) => {
|
||||
const lastEntry = idx === arr.length - 1;
|
||||
if (value === '') return <>{detail}{!lastEntry && <> |  </>}</>;
|
||||
return <><span class="gray">${detail}:</span> {value}{!lastEntry && <> |  </>}</>;
|
||||
})}</font>
|
||||
{(sigAbil.desc && sigAbil.shortDesc && sigAbil.desc !== sigAbil.shortDesc) &&
|
||||
<details><summary><strong>In-Depth Description</strong></summary>{sigAbil.desc}</details>}
|
||||
{(abilityText.desc && abilityText.shortDesc && abilityText.desc !== abilityText.shortDesc) &&
|
||||
<details><summary><strong>In-Depth Description</strong></summary>{abilityText.desc}</details>}
|
||||
</>;
|
||||
}
|
||||
return <></>;
|
||||
}
|
||||
}
|
||||
|
||||
class SSBPokemonHTML extends Chat.JSX.Component<{ species: string, dex: ModdedDex, baseDex: ModdedDex }> {
|
||||
class SSBPokemonHTML extends Chat.JSX.Component<{
|
||||
species: string, dex: ModdedDex, baseDex: ModdedDex, language: ID | null,
|
||||
}> {
|
||||
render() {
|
||||
const { species, dex, baseDex } = this.props;
|
||||
const { species, dex, baseDex, language } = this.props;
|
||||
const origSpecies = baseDex.species.get(species);
|
||||
const newSpecies = dex.species.get(species);
|
||||
let weighthit = 20;
|
||||
|
|
@ -290,7 +303,10 @@ class SSBPokemonHTML extends Chat.JSX.Component<{ species: string, dex: ModdedDe
|
|||
Object.values(newSpecies.baseStats).join('/') !== Object.values(origSpecies.baseStats).join('/')
|
||||
) {
|
||||
return <><hr />
|
||||
<span dangerouslySetInnerHTML={{ __html: Chat.getDataPokemonHTML(newSpecies, dex.gen, 'SSB') }}></span>
|
||||
<span dangerouslySetInnerHTML={{
|
||||
__html: Chat.getDataPokemonHTML(newSpecies, { dex, tier: 'SSB', language }),
|
||||
}}
|
||||
></span>
|
||||
<font size="1">{Object.entries(details).map(([detail, value], idx, arr) => {
|
||||
const lastEntry = idx === arr.length - 1;
|
||||
if (detail.includes('<font')) {
|
||||
|
|
@ -310,9 +326,11 @@ class SSBPokemonHTML extends Chat.JSX.Component<{ species: string, dex: ModdedDe
|
|||
}
|
||||
}
|
||||
|
||||
class SSBInnateHTML extends Chat.JSX.Component<{ name: string, dex: ModdedDex, baseDex: ModdedDex }> {
|
||||
class SSBInnateHTML extends Chat.JSX.Component<{
|
||||
name: string, dex: ModdedDex, baseDex: ModdedDex, language: ID | null,
|
||||
}> {
|
||||
render() {
|
||||
const { name, dex, baseDex } = this.props;
|
||||
const { name, dex, baseDex, language } = this.props;
|
||||
// Special casing for users whose usernames are already existing conditions/etc, i.e. dhelmise
|
||||
let effect = dex.conditions.get(name + 'user');
|
||||
if (!effect.exists) effect = dex.conditions.get(name);
|
||||
|
|
@ -322,14 +340,13 @@ class SSBInnateHTML extends Chat.JSX.Component<{ name: string, dex: ModdedDex, b
|
|||
if (effect.innateName) {
|
||||
// @ts-expect-error
|
||||
baseAbility.name = effect.innateName;
|
||||
if (!effect.desc && !effect.shortDesc) {
|
||||
baseAbility.desc = baseAbility.shortDesc = "This innate does not have a description.";
|
||||
}
|
||||
if (effect.desc) baseAbility.desc = effect.desc;
|
||||
if (effect.shortDesc) baseAbility.shortDesc = effect.shortDesc;
|
||||
const effectText = effect as ModdedEffectText;
|
||||
const desc = effectText.desc || effectText.shortDesc || "This innate does not have a description.";
|
||||
const shortDesc = effectText.shortDesc || effectText.desc || "This innate does not have a description.";
|
||||
Object.assign(baseAbility, { desc, shortDesc });
|
||||
return <><hr />
|
||||
Innate Ability:<br />
|
||||
<span dangerouslySetInnerHTML={{ __html: Chat.getDataAbilityHTML(baseAbility) }}></span>
|
||||
<span dangerouslySetInnerHTML={{ __html: Chat.getDataAbilityHTML(baseAbility, { dex, language }) }}></span>
|
||||
<font size="1"><span class="gray">Gen:</span> 9</font>
|
||||
{longDesc && <details><summary><strong>In-Depth Description</strong></summary>{longDesc}</details>}
|
||||
</>;
|
||||
|
|
@ -338,9 +355,9 @@ class SSBInnateHTML extends Chat.JSX.Component<{ name: string, dex: ModdedDex, b
|
|||
}
|
||||
}
|
||||
|
||||
class SSBSetsHTML extends Chat.JSX.Component<{ target: string }> {
|
||||
class SSBSetsHTML extends Chat.JSX.Component<{ target: string, language: ID | null }> {
|
||||
render() {
|
||||
const target = this.props.target;
|
||||
const { target, language } = this.props;
|
||||
const targetID = toID(target);
|
||||
const baseDex = Dex;
|
||||
const dex = Dex.forFormat('gen9superstaffbrosultimate');
|
||||
|
|
@ -369,17 +386,23 @@ class SSBSetsHTML extends Chat.JSX.Component<{ target: string }> {
|
|||
`${`${setName.split('-').slice(1).join('-')} forme`}</strong></summary>` }}
|
||||
></span>}
|
||||
<SSBSetHTML set={set} dex={dex} baseDex={baseDex} />
|
||||
{(!set.skip || set.signatureMove !== ssbSets[set.skip].signatureMove) && <SSBMoveHTML sigMove={sigMove} dex={dex} />}
|
||||
<SSBItemHTML set={set} dex={dex} baseDex={baseDex} />
|
||||
<SSBAbilityHTML set={set} dex={dex} baseDex={baseDex} />
|
||||
<SSBInnateHTML name={setName} dex={dex} baseDex={baseDex} />
|
||||
<SSBPokemonHTML species={set.species} dex={dex} baseDex={baseDex} />
|
||||
{(!set.skip || set.signatureMove !== ssbSets[set.skip].signatureMove) && <SSBMoveHTML
|
||||
sigMove={sigMove} dex={dex} language={language}
|
||||
/>}
|
||||
<SSBItemHTML set={set} dex={dex} baseDex={baseDex} language={language} />
|
||||
<SSBAbilityHTML set={set} dex={dex} baseDex={baseDex} language={language} />
|
||||
<SSBInnateHTML name={setName} dex={dex} baseDex={baseDex} language={language} />
|
||||
<SSBPokemonHTML species={set.species} dex={dex} baseDex={baseDex} language={language} />
|
||||
{(!Array.isArray(set.item) && item.megaStone) && <SSBPokemonHTML
|
||||
species={Object.values(item.megaStone)[0]} dex={dex} baseDex={baseDex}
|
||||
species={Object.values(item.megaStone)[0]} dex={dex} baseDex={baseDex} language={language}
|
||||
/>}
|
||||
{/* keys and Kennedy have an itemless forme change */}
|
||||
{['Rayquaza'].includes(set.species) && <SSBPokemonHTML species={`${set.species}-Mega`} dex={dex} baseDex={baseDex} />}
|
||||
{['Cinderace'].includes(set.species) && <SSBPokemonHTML species={`${set.species}-Gmax`} dex={dex} baseDex={baseDex} />}
|
||||
{['Rayquaza'].includes(set.species) && <SSBPokemonHTML
|
||||
species={`${set.species}-Mega`} dex={dex} baseDex={baseDex} language={language}
|
||||
/>}
|
||||
{['Cinderace'].includes(set.species) && <SSBPokemonHTML
|
||||
species={`${set.species}-Gmax`} dex={dex} baseDex={baseDex} language={language}
|
||||
/>}
|
||||
{set.skip && <span dangerouslySetInnerHTML={{ __html: `</details>` }}></span>}</>;
|
||||
});
|
||||
}
|
||||
|
|
@ -399,7 +422,7 @@ export const commands: Chat.ChatCommands = {
|
|||
ssb(target, room, user) {
|
||||
if (!this.runBroadcast()) return;
|
||||
if (!target) return this.parse(`/help ssb`);
|
||||
return this.sendReplyBox(<SSBSetsHTML target={target} />);
|
||||
return this.sendReplyBox(<SSBSetsHTML target={target} language={this.language} />);
|
||||
},
|
||||
ssbhelp: [
|
||||
`/ssb [staff member] - Displays a staff member's Super Staff Bros. set and custom features.`,
|
||||
|
|
|
|||
|
|
@ -34,6 +34,42 @@ import { PrivateMessages } from './private-messages';
|
|||
import * as pathModule from 'path';
|
||||
import * as JSX from './chat-jsx';
|
||||
import { pluginDatabase } from './chat-db';
|
||||
import type { TextLanguage } from '../sim/dex-data';
|
||||
|
||||
export interface DataHTMLRenderOptions {
|
||||
dex?: ModdedDex;
|
||||
hideShortDescription?: boolean;
|
||||
language?: ID | null;
|
||||
tier?: string;
|
||||
}
|
||||
|
||||
const LANGUAGE_CODES: Readonly<Record<string, TextLanguage>> = {
|
||||
english: 'en',
|
||||
german: 'de',
|
||||
spanish: 'es',
|
||||
french: 'fr',
|
||||
italian: 'it',
|
||||
japanese: 'ja',
|
||||
korean: 'ko',
|
||||
simplifiedchinese: 'zh-cn',
|
||||
traditionalchinese: 'zh-tw',
|
||||
};
|
||||
|
||||
const LANGUAGE_NATIVE_NAMES: Readonly<Record<string, string>> = {
|
||||
english: 'English',
|
||||
german: 'Deutsch',
|
||||
spanish: 'Español',
|
||||
french: 'Français',
|
||||
italian: 'Italiano',
|
||||
dutch: 'Nederlands',
|
||||
portuguese: 'Português',
|
||||
turkish: 'Türkçe',
|
||||
hindi: 'हिंदी',
|
||||
japanese: '日本語',
|
||||
korean: '한국어',
|
||||
simplifiedchinese: '简体中文',
|
||||
traditionalchinese: '繁體中文',
|
||||
};
|
||||
|
||||
export type PageHandler = (this: PageContext, query: string[], user: User, connection: Connection)
|
||||
=> Promise<string | null | void | JSX.VNode> | string | null | void | JSX.VNode;
|
||||
|
|
@ -1736,6 +1772,15 @@ export const Chat = new class {
|
|||
/** language id -> (english string -> translated string) */
|
||||
readonly translations = new Map<ID, Map<string, [string, string[], string[]]>>();
|
||||
|
||||
getDexLanguage(language: ID | null = null): TextLanguage {
|
||||
return LANGUAGE_CODES[language || 'english'] || 'en';
|
||||
}
|
||||
getLanguageName(language: ID): string {
|
||||
const englishName = Chat.languages.get(language) || "Unknown Language";
|
||||
const nativeName = LANGUAGE_NATIVE_NAMES[language];
|
||||
return nativeName && nativeName !== englishName ? `${nativeName} (${englishName})` : englishName;
|
||||
}
|
||||
|
||||
async loadTranslations() {
|
||||
const directories = await FS(TRANSLATION_DIRECTORY).readdir();
|
||||
|
||||
|
|
@ -2440,11 +2485,15 @@ export const Chat = new class {
|
|||
return Chat.getReadmoreBlock(str, true, cutoff);
|
||||
}
|
||||
|
||||
getDataPokemonHTML(species: Species, gen = 8, tier = '') {
|
||||
getDataPokemonHTML(species: Species, options: DataHTMLRenderOptions = {}) {
|
||||
const { dex = Dex, tier = '' } = options;
|
||||
const lang = Chat.getDexLanguage(options.language);
|
||||
const gen = dex.gen;
|
||||
const text = dex.text.get(species, lang);
|
||||
let buf = '<li class="result">';
|
||||
buf += `<span class="col numcol">${tier || species.tier}</span> `;
|
||||
buf += `<span class="col iconcol"><psicon pokemon="${species.id}"/></span> `;
|
||||
buf += `<span class="col pokemonnamecol" style="white-space:nowrap"><a href="https://${Config.routes.dex}/pokemon/${species.id}" target="_blank">${species.name}</a></span> `;
|
||||
buf += `<span class="col pokemonnamecol" style="white-space:nowrap"><a href="https://${Config.routes.dex}/pokemon/${species.id}" target="_blank">${text.name}</a></span> `;
|
||||
buf += '<span class="col typecol">';
|
||||
if (species.types) {
|
||||
for (const type of species.types) {
|
||||
|
|
@ -2454,18 +2503,18 @@ export const Chat = new class {
|
|||
buf += '</span> ';
|
||||
if (gen >= 3) {
|
||||
buf += '<span style="float:left;min-height:26px">';
|
||||
if (species.abilities['1'] && (gen >= 4 || Dex.abilities.get(species.abilities['1']).gen === 3)) {
|
||||
buf += `<span class="col twoabilitycol">${species.abilities['0']}<br />${species.abilities['1']}</span>`;
|
||||
if (species.abilities['1'] && (gen >= 4 || dex.abilities.get(species.abilities['1']).gen === 3)) {
|
||||
buf += `<span class="col twoabilitycol">${dex.text.get(dex.abilities.get(species.abilities['0']), lang).name}<br />${dex.text.get(dex.abilities.get(species.abilities['1']), lang).name}</span>`;
|
||||
} else {
|
||||
buf += `<span class="col abilitycol">${species.abilities['0']}</span>`;
|
||||
buf += `<span class="col abilitycol">${dex.text.get(dex.abilities.get(species.abilities['0']), lang).name}</span>`;
|
||||
}
|
||||
if (species.abilities['H'] && species.abilities['S']) {
|
||||
buf += `<span class="col twoabilitycol${species.unreleasedHidden ? ' unreleasedhacol' : ''}"><em>${species.abilities['H']}<br /><span style="display: inline-block;">(${species.abilities['S']})</span></em></span>`;
|
||||
buf += `<span class="col twoabilitycol${species.unreleasedHidden ? ' unreleasedhacol' : ''}"><em>${dex.text.get(dex.abilities.get(species.abilities['H']), lang).name}<br /><span style="display: inline-block;">(${dex.text.get(dex.abilities.get(species.abilities['S']), lang).name})</span></em></span>`;
|
||||
} else if (species.abilities['H']) {
|
||||
buf += `<span class="col abilitycol${species.unreleasedHidden ? ' unreleasedhacol' : ''}"><em>${species.abilities['H']}</em></span>`;
|
||||
buf += `<span class="col abilitycol${species.unreleasedHidden ? ' unreleasedhacol' : ''}"><em>${dex.text.get(dex.abilities.get(species.abilities['H']), lang).name}</em></span>`;
|
||||
} else if (species.abilities['S']) {
|
||||
// special case for Zygarde
|
||||
buf += `<span class="col abilitycol"><em>(${species.abilities['S']})</em></span>`;
|
||||
buf += `<span class="col abilitycol"><em>(${dex.text.get(dex.abilities.get(species.abilities['S']), lang).name})</em></span>`;
|
||||
} else {
|
||||
buf += '<span class="col abilitycol"></span>';
|
||||
}
|
||||
|
|
@ -2487,9 +2536,11 @@ export const Chat = new class {
|
|||
buf += '</li>';
|
||||
return `<div class="message"><ul class="utilichart">${buf}<li style="clear:both"></li></ul></div>`;
|
||||
}
|
||||
getDataMoveHTML(move: Move, isChampions = false) {
|
||||
getDataMoveHTML(move: Move, options: DataHTMLRenderOptions = {}) {
|
||||
const { dex = Dex } = options;
|
||||
const text = dex.text.get(move, Chat.getDexLanguage(options.language));
|
||||
let buf = `<ul class="utilichart"><li class="result">`;
|
||||
buf += `<span class="col movenamecol"><a href="https://${Config.routes.dex}/moves/${move.id}">${move.name}</a></span> `;
|
||||
buf += `<span class="col movenamecol"><a href="https://${Config.routes.dex}/moves/${move.id}">${text.name}</a></span> `;
|
||||
// encoding is important for the ??? type icon
|
||||
const encodedMoveType = encodeURIComponent(move.type);
|
||||
buf += `<span class="col typecol"><img src="//${Config.routes.client}/sprites/types/${encodedMoveType}.png" alt="${move.type}" width="32" height="14">`;
|
||||
|
|
@ -2500,23 +2551,33 @@ export const Chat = new class {
|
|||
buf += `<span class="col widelabelcol"><em>Accuracy</em><br>${typeof move.accuracy === 'number' ? (`${move.accuracy}%`) : '—'}</span> `;
|
||||
const basePP = move.pp || 1;
|
||||
let pp = Math.floor(move.noPPBoosts ? basePP : basePP * 8 / 5);
|
||||
if (isChampions) pp = move.noPPBoosts ? basePP : (basePP / 5 + 1) * 4;
|
||||
if (dex.currentMod.startsWith('champions')) pp = move.noPPBoosts ? basePP : (basePP / 5 + 1) * 4;
|
||||
buf += `<span class="col pplabelcol"><em>PP</em><br>${pp}</span> `;
|
||||
buf += `<span class="col movedesccol">${move.shortDesc || move.desc}</span> `;
|
||||
if (!options.hideShortDescription) {
|
||||
buf += `<span class="col movedesccol">${text.shortDesc || text.desc}</span> `;
|
||||
}
|
||||
buf += `</li><li style="clear:both"></li></ul>`;
|
||||
return buf;
|
||||
}
|
||||
getDataAbilityHTML(ability: Ability) {
|
||||
getDataAbilityHTML(ability: Ability, options: DataHTMLRenderOptions = {}) {
|
||||
const { dex = Dex } = options;
|
||||
const text = dex.text.get(ability, Chat.getDexLanguage(options.language));
|
||||
let buf = `<ul class="utilichart"><li class="result">`;
|
||||
buf += `<span class="col namecol"><a href="https://${Config.routes.dex}/abilities/${ability.id}">${ability.name}</a></span> `;
|
||||
buf += `<span class="col abilitydesccol">${ability.shortDesc || ability.desc}</span> `;
|
||||
buf += `<span class="col namecol"><a href="https://${Config.routes.dex}/abilities/${ability.id}">${text.name}</a></span> `;
|
||||
if (!options.hideShortDescription) {
|
||||
buf += `<span class="col abilitydesccol">${text.shortDesc || text.desc}</span> `;
|
||||
}
|
||||
buf += `</li><li style="clear:both"></li></ul>`;
|
||||
return buf;
|
||||
}
|
||||
getDataItemHTML(item: Item) {
|
||||
getDataItemHTML(item: Item, options: DataHTMLRenderOptions = {}) {
|
||||
const { dex = Dex } = options;
|
||||
const text = dex.text.get(item, Chat.getDexLanguage(options.language));
|
||||
let buf = `<ul class="utilichart"><li class="result">`;
|
||||
buf += `<span class="col itemiconcol"><psicon item="${item.id}"></span> <span class="col namecol"><a href="https://${Config.routes.dex}/items/${item.id}">${item.name}</a></span> `;
|
||||
buf += `<span class="col itemdesccol">${item.shortDesc || item.desc}</span> `;
|
||||
buf += `<span class="col itemiconcol"><psicon item="${item.id}"></span> <span class="col namecol"><a href="https://${Config.routes.dex}/items/${item.id}">${text.name}</a></span> `;
|
||||
if (!options.hideShortDescription) {
|
||||
buf += `<span class="col itemdesccol">${text.shortDesc || text.desc}</span> `;
|
||||
}
|
||||
buf += `</li><li style="clear:both"></li></ul>`;
|
||||
return buf;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
import type { PokemonEventMethods, ConditionData, ModdedConditionData } from './dex-conditions';
|
||||
import { assignMissingFields, BasicEffect, toID } from './dex-data';
|
||||
import { assignMissingFields, BasicEffect, toID, type ModdedEffectText } from './dex-data';
|
||||
import { Utils } from '../lib/utils';
|
||||
|
||||
interface AbilityEventMethods {
|
||||
|
|
@ -24,10 +24,10 @@ export interface AbilityData extends Partial<Ability>, AbilityEventMethods, Poke
|
|||
name: string;
|
||||
}
|
||||
|
||||
export type ModdedAbilityData = AbilityData | Partial<AbilityData> & {
|
||||
export type ModdedAbilityData = (AbilityData | Partial<AbilityData> & {
|
||||
inherit: true,
|
||||
condition?: ModdedConditionData,
|
||||
};
|
||||
}) & ModdedEffectText;
|
||||
export interface AbilityDataTable { [abilityid: IDEntry]: AbilityData }
|
||||
export interface ModdedAbilityDataTable { [abilityid: IDEntry]: ModdedAbilityData }
|
||||
|
||||
|
|
@ -96,11 +96,9 @@ export class DexAbilities {
|
|||
ability = this.get(this.dex.getAlias(id));
|
||||
} else if (id && this.dex.data.Abilities.hasOwnProperty(id)) {
|
||||
const abilityData = this.dex.data.Abilities[id] as any;
|
||||
const abilityTextData = this.dex.getDescs('Abilities', id, abilityData);
|
||||
ability = new Ability({
|
||||
name: id,
|
||||
...abilityData,
|
||||
...abilityTextData,
|
||||
});
|
||||
if (ability.gen > this.dex.gen) {
|
||||
(ability as any).isNonstandard = 'Future';
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
import { Utils } from '../lib/utils';
|
||||
import { assignMissingFields, BasicEffect, toID } from './dex-data';
|
||||
import { assignMissingFields, BasicEffect, toID, type ModdedEffectText } from './dex-data';
|
||||
import type { SecondaryEffect, MoveEventMethods } from './dex-moves';
|
||||
|
||||
/**
|
||||
|
|
@ -624,7 +624,7 @@ export interface FieldConditionData extends
|
|||
|
||||
export type ConditionData = PokemonConditionData | SideConditionData | FieldConditionData;
|
||||
|
||||
export type ModdedConditionData = ConditionData & { inherit?: true };
|
||||
export type ModdedConditionData = ConditionData & ModdedEffectText & { inherit?: true };
|
||||
export interface ConditionDataTable { [id: IDEntry]: ConditionData }
|
||||
export interface ModdedConditionDataTable { [id: IDEntry]: ModdedConditionData }
|
||||
|
||||
|
|
|
|||
|
|
@ -40,6 +40,55 @@ export function assignMissingFields(self: AnyObject, data: AnyObject) {
|
|||
}
|
||||
}
|
||||
|
||||
export type EffectText = ResolvedAbilityText | ResolvedItemText | ResolvedMoveText | ResolvedPokedexText;
|
||||
export type TextLanguage = 'en' | 'en-afd' | 'de' | 'es' | 'fr' | 'it' | 'ja' | 'ko' | 'zh-cn' | 'zh-tw';
|
||||
|
||||
/** English-only text for custom effects defined by mods. */
|
||||
export interface ModdedEffectText {
|
||||
desc?: string;
|
||||
shortDesc?: string;
|
||||
}
|
||||
|
||||
type EffectTextTable = 'Abilities' | 'Items' | 'Moves' | 'Pokedex';
|
||||
|
||||
export class DexText {
|
||||
readonly dex: ModdedDex;
|
||||
|
||||
constructor(dex: ModdedDex) {
|
||||
this.dex = dex;
|
||||
}
|
||||
|
||||
get(effect: Species, lang?: TextLanguage): ResolvedPokedexText;
|
||||
get(effect: Item, lang?: TextLanguage): ResolvedItemText;
|
||||
get(effect: Ability, lang?: TextLanguage): ResolvedAbilityText;
|
||||
get(effect: Move, lang?: TextLanguage): ResolvedMoveText;
|
||||
get(effect: Species | Item | Ability | Move, lang?: TextLanguage): EffectText;
|
||||
get(effect: Species | Item | Ability | Move, lang: TextLanguage = 'en'): EffectText {
|
||||
let table: EffectTextTable;
|
||||
switch (effect.effectType) {
|
||||
case 'Pokemon': table = 'Pokedex'; break;
|
||||
case 'Item': table = 'Items'; break;
|
||||
case 'Ability': table = 'Abilities'; break;
|
||||
case 'Move': table = 'Moves'; break;
|
||||
default: throw new Error(`Unsupported effect type`);
|
||||
}
|
||||
|
||||
const entry = this.dex.loadTextData(lang)[table][effect.id];
|
||||
const customText = effect as ModdedEffectText;
|
||||
if (customText.desc !== undefined || customText.shortDesc !== undefined) {
|
||||
const desc = customText.desc || customText.shortDesc || '';
|
||||
const shortDesc = customText.shortDesc || customText.desc || '';
|
||||
return { ...entry, name: effect.name, desc, shortDesc };
|
||||
}
|
||||
|
||||
return entry || {
|
||||
name: effect.name,
|
||||
desc: '',
|
||||
shortDesc: '',
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
export abstract class BasicEffect implements EffectData {
|
||||
/**
|
||||
* ID. This will be a lowercase version of the name with all the
|
||||
|
|
@ -81,13 +130,6 @@ export abstract class BasicEffect implements EffectData {
|
|||
* track generation; this will be 0 if not known.
|
||||
*/
|
||||
gen: number;
|
||||
/**
|
||||
* A shortened form of the description of this effect.
|
||||
* Not all effects have this.
|
||||
*/
|
||||
shortDesc: string;
|
||||
/** The full description for this effect. */
|
||||
desc: string;
|
||||
/**
|
||||
* Is this item/move/ability/pokemon nonstandard? Specified for effects
|
||||
* that have no use in standard formats: made-up pokemon (CAP),
|
||||
|
|
@ -118,8 +160,6 @@ export abstract class BasicEffect implements EffectData {
|
|||
this.exists = data.exists ?? !!this.id;
|
||||
this.num = data.num || 0;
|
||||
this.gen = data.gen || 0;
|
||||
this.shortDesc = data.shortDesc || '';
|
||||
this.desc = data.desc || '';
|
||||
this.isNonstandard = data.isNonstandard || null;
|
||||
this.duration = data.duration;
|
||||
this.noCopy = !!data.noCopy;
|
||||
|
|
|
|||
|
|
@ -441,6 +441,7 @@ export class RuleTable extends Map<string, string> {
|
|||
|
||||
export class Format extends BasicEffect implements Readonly<BasicEffect> {
|
||||
readonly mod: string;
|
||||
declare readonly desc: string;
|
||||
/**
|
||||
* Name of the team generator algorithm, if this format uses
|
||||
* random/fixed teams. null if players can bring teams.
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
import type { PokemonEventMethods, ConditionData, ModdedConditionData } from './dex-conditions';
|
||||
import { assignMissingFields, BasicEffect, toID } from './dex-data';
|
||||
import { assignMissingFields, BasicEffect, toID, type ModdedEffectText } from './dex-data';
|
||||
import { Utils } from '../lib/utils';
|
||||
|
||||
interface FlingData {
|
||||
|
|
@ -13,12 +13,12 @@ export interface ItemData extends Partial<Item>, PokemonEventMethods {
|
|||
name: string;
|
||||
}
|
||||
|
||||
export type ModdedItemData = ItemData | Partial<Omit<ItemData, 'name'>> & {
|
||||
export type ModdedItemData = (ItemData | Partial<Omit<ItemData, 'name'>> & {
|
||||
inherit: true,
|
||||
onCustap?: (this: Battle, pokemon: Pokemon) => void,
|
||||
onWhiteHerb?: (this: Battle, pokemon: Pokemon) => void,
|
||||
condition?: ModdedConditionData,
|
||||
};
|
||||
}) & ModdedEffectText;
|
||||
|
||||
export interface ItemDataTable { [itemid: IDEntry]: ItemData }
|
||||
export interface ModdedItemDataTable { [itemid: IDEntry]: ModdedItemData }
|
||||
|
|
@ -188,11 +188,9 @@ export class DexItems {
|
|||
}
|
||||
if (id && this.dex.data.Items.hasOwnProperty(id)) {
|
||||
const itemData = this.dex.data.Items[id] as any;
|
||||
const itemTextData = this.dex.getDescs('Items', id, itemData);
|
||||
item = new Item({
|
||||
name: id,
|
||||
...itemData,
|
||||
...itemTextData,
|
||||
});
|
||||
if (item.gen > this.dex.gen) {
|
||||
(item as any).isNonstandard = 'Future';
|
||||
|
|
@ -202,11 +200,7 @@ export class DexItems {
|
|||
const parent = this.dex.mod(this.dex.parentMod);
|
||||
if (itemData === parent.data.Items[id]) {
|
||||
const parentItem = parent.items.getByID(id);
|
||||
if (
|
||||
item.isNonstandard === parentItem.isNonstandard &&
|
||||
item.desc === parentItem.desc &&
|
||||
item.shortDesc === parentItem.shortDesc
|
||||
) {
|
||||
if (item.isNonstandard === parentItem.isNonstandard) {
|
||||
item = parentItem;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
import { Utils } from '../lib/utils';
|
||||
import type { ConditionData, ModdedConditionData } from './dex-conditions';
|
||||
import { assignMissingFields, BasicEffect, toID } from './dex-data';
|
||||
import { assignMissingFields, BasicEffect, toID, type ModdedEffectText } from './dex-data';
|
||||
|
||||
/**
|
||||
* Describes the acceptable target(s) of a move.
|
||||
|
|
@ -274,7 +274,7 @@ export interface MoveData extends EffectData, MoveEventMethods, HitEffect {
|
|||
baseMove?: ID;
|
||||
}
|
||||
|
||||
export type ModdedMoveData = MoveData | Partial<Omit<MoveData, 'name'>> & {
|
||||
export type ModdedMoveData = (MoveData | Partial<Omit<MoveData, 'name'>> & {
|
||||
inherit: true,
|
||||
igniteBoosted?: boolean,
|
||||
settleBoosted?: boolean,
|
||||
|
|
@ -282,7 +282,7 @@ export type ModdedMoveData = MoveData | Partial<Omit<MoveData, 'name'>> & {
|
|||
longWhipBoost?: boolean,
|
||||
gen?: number,
|
||||
condition?: ModdedConditionData,
|
||||
};
|
||||
}) & ModdedEffectText;
|
||||
|
||||
export interface MoveDataTable { [moveid: IDEntry]: MoveData }
|
||||
export interface ModdedMoveDataTable { [moveid: IDEntry]: ModdedMoveData }
|
||||
|
|
@ -640,11 +640,9 @@ export class DexMoves {
|
|||
}
|
||||
if (id && this.dex.data.Moves.hasOwnProperty(id)) {
|
||||
const moveData = this.dex.data.Moves[id] as any;
|
||||
const moveTextData = this.dex.getDescs('Moves', id, moveData);
|
||||
move = new DataMove({
|
||||
name: id,
|
||||
...moveData,
|
||||
...moveTextData,
|
||||
});
|
||||
if (move.gen > this.dex.gen) {
|
||||
(move as any).isNonstandard = 'Future';
|
||||
|
|
@ -654,10 +652,7 @@ export class DexMoves {
|
|||
const parentMod = this.dex.mod(this.dex.parentMod);
|
||||
if (moveData === parentMod.data.Moves[id]) {
|
||||
const parentMove = parentMod.moves.getByID(id);
|
||||
if (
|
||||
move.isNonstandard === parentMove.isNonstandard &&
|
||||
move.desc === parentMove.desc && move.shortDesc === parentMove.shortDesc
|
||||
) {
|
||||
if (move.isNonstandard === parentMove.isNonstandard) {
|
||||
move = parentMove;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
import { assignMissingFields, BasicEffect, toID } from './dex-data';
|
||||
import { assignMissingFields, BasicEffect, toID, type ModdedEffectText } from './dex-data';
|
||||
import { Utils } from '../lib/utils';
|
||||
import { isDeepStrictEqual } from 'node:util';
|
||||
|
||||
|
|
@ -28,9 +28,9 @@ export interface CosmeticFormeData {
|
|||
color: string;
|
||||
}
|
||||
|
||||
export type ModdedSpeciesData = SpeciesData | CosmeticFormeData |
|
||||
export type ModdedSpeciesData = (SpeciesData | CosmeticFormeData |
|
||||
Partial<Omit<SpeciesData, 'name'>> & { inherit: true } |
|
||||
Partial<Omit<CosmeticFormeData, 'isCosmeticForme'>> & { inherit: true };
|
||||
Partial<Omit<CosmeticFormeData, 'isCosmeticForme'>> & { inherit: true }) & ModdedEffectText;
|
||||
|
||||
export interface SpeciesFormatsData {
|
||||
doublesTier?: TierTypes.Doubles | TierTypes.Other;
|
||||
|
|
|
|||
134
sim/dex.ts
134
sim/dex.ts
|
|
@ -30,6 +30,7 @@ import * as fs from 'fs';
|
|||
import * as path from 'path';
|
||||
|
||||
import * as Data from './dex-data';
|
||||
import type { TextLanguage } from './dex-data';
|
||||
import { Condition, DexConditions } from './dex-conditions';
|
||||
import { DataMove, DexMoves } from './dex-moves';
|
||||
import { Item, DexItems } from './dex-items';
|
||||
|
|
@ -86,13 +87,20 @@ interface DexTableData {
|
|||
Conditions: DexTable<import('./dex-conditions').ConditionData>;
|
||||
TypeChart: DexTable<import('./dex-data').TypeData>;
|
||||
}
|
||||
interface TextTableData {
|
||||
interface RawTextTableData {
|
||||
Abilities: DexTable<AbilityText>;
|
||||
Items: DexTable<ItemText>;
|
||||
Moves: DexTable<MoveText>;
|
||||
Pokedex: DexTable<PokedexText>;
|
||||
Default: DexTable<DefaultText>;
|
||||
}
|
||||
interface TextTableData {
|
||||
Abilities: DexTable<ResolvedAbilityText>;
|
||||
Items: DexTable<ResolvedItemText>;
|
||||
Moves: DexTable<ResolvedMoveText>;
|
||||
Pokedex: DexTable<ResolvedPokedexText>;
|
||||
Default: DexTable<DefaultText>;
|
||||
}
|
||||
|
||||
export const toID = Data.toID;
|
||||
|
||||
|
|
@ -118,7 +126,8 @@ export class ModdedDex {
|
|||
modsLoaded = false;
|
||||
|
||||
dataCache: DexTableData | null;
|
||||
textCache: TextTableData | null;
|
||||
textCache: { [lang: string]: TextTableData | null | undefined };
|
||||
rawTextCache: { [lang: string]: RawTextTableData | null | undefined };
|
||||
|
||||
deepClone = Utils.deepClone;
|
||||
deepFreeze = Utils.deepFreeze;
|
||||
|
|
@ -130,6 +139,7 @@ export class ModdedDex {
|
|||
readonly moves: DexMoves;
|
||||
readonly species: DexSpecies;
|
||||
readonly conditions: DexConditions;
|
||||
readonly text: Data.DexText;
|
||||
readonly natures: Data.DexNatures;
|
||||
readonly types: Data.DexTypes;
|
||||
readonly stats: Data.DexStats;
|
||||
|
|
@ -142,7 +152,8 @@ export class ModdedDex {
|
|||
this.dataDir = (this.isBase ? DATA_DIR : MODS_DIR + '/' + this.currentMod);
|
||||
|
||||
this.dataCache = null;
|
||||
this.textCache = null;
|
||||
this.textCache = {};
|
||||
this.rawTextCache = {};
|
||||
|
||||
this.formats = new DexFormats(this);
|
||||
this.abilities = new DexAbilities(this);
|
||||
|
|
@ -150,6 +161,7 @@ export class ModdedDex {
|
|||
this.moves = new DexMoves(this);
|
||||
this.species = new DexSpecies(this);
|
||||
this.conditions = new DexConditions(this);
|
||||
this.text = new Data.DexText(this);
|
||||
this.natures = new Data.DexNatures(this);
|
||||
this.types = new Data.DexTypes(this);
|
||||
this.stats = new Data.DexStats(this);
|
||||
|
|
@ -301,35 +313,6 @@ export class ModdedDex {
|
|||
return !!tag.genericFilter?.(thing);
|
||||
}
|
||||
|
||||
getDescs(table: keyof TextTableData, id: ID, dataEntry: AnyObject) {
|
||||
if (dataEntry.shortDesc) {
|
||||
return {
|
||||
desc: dataEntry.desc,
|
||||
shortDesc: dataEntry.shortDesc,
|
||||
};
|
||||
}
|
||||
const entry = this.loadTextData()[table][id];
|
||||
if (!entry) return null;
|
||||
const descs = {
|
||||
desc: '',
|
||||
shortDesc: '',
|
||||
};
|
||||
for (let i = this.gen; i < dexes['base'].gen; i++) {
|
||||
const curDesc = entry[`gen${i}` as keyof typeof entry]?.desc;
|
||||
const curShortDesc = entry[`gen${i}` as keyof typeof entry]?.shortDesc;
|
||||
if (!descs.desc && curDesc) {
|
||||
descs.desc = curDesc;
|
||||
}
|
||||
if (!descs.shortDesc && curShortDesc) {
|
||||
descs.shortDesc = curShortDesc;
|
||||
}
|
||||
if (descs.desc && descs.shortDesc) break;
|
||||
}
|
||||
if (!descs.shortDesc) descs.shortDesc = entry.shortDesc || '';
|
||||
if (!descs.desc) descs.desc = entry.desc || descs.shortDesc;
|
||||
return descs;
|
||||
}
|
||||
|
||||
/**
|
||||
* Ensure we're working on a copy of a move (and make a copy if we aren't)
|
||||
*
|
||||
|
|
@ -489,9 +472,18 @@ export class ModdedDex {
|
|||
}
|
||||
|
||||
loadTextFile(
|
||||
name: string, exportName: string
|
||||
name: string, exportName: string, optional = false
|
||||
): DexTable<MoveText | ItemText | AbilityText | PokedexText | DefaultText> {
|
||||
return require(`${DATA_DIR}/text/${name}`)[exportName];
|
||||
const filePath = `${DATA_DIR}/text/${name}`;
|
||||
if (optional) {
|
||||
try {
|
||||
require.resolve(filePath);
|
||||
} catch (e: any) {
|
||||
if (e.code === 'MODULE_NOT_FOUND' || e.code === 'ENOENT') return {};
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
return require(filePath)[exportName];
|
||||
}
|
||||
|
||||
includeMods(): this {
|
||||
|
|
@ -518,16 +510,70 @@ export class ModdedDex {
|
|||
return this;
|
||||
}
|
||||
|
||||
loadTextData() {
|
||||
if (dexes['base'].textCache) return dexes['base'].textCache;
|
||||
dexes['base'].textCache = {
|
||||
Pokedex: this.loadTextFile('pokedex', 'PokedexText') as DexTable<PokedexText>,
|
||||
Moves: this.loadTextFile('moves', 'MovesText') as DexTable<MoveText>,
|
||||
Abilities: this.loadTextFile('abilities', 'AbilitiesText') as DexTable<AbilityText>,
|
||||
Items: this.loadTextFile('items', 'ItemsText') as DexTable<ItemText>,
|
||||
Default: this.loadTextFile('default', 'DefaultText') as DexTable<DefaultText>,
|
||||
};
|
||||
return dexes['base'].textCache;
|
||||
loadTextData(lang: TextLanguage = 'en'): TextTableData {
|
||||
if (!this.gen) this.loadData();
|
||||
lang ||= 'en';
|
||||
const cacheKey = `${this.gen}:${lang}`;
|
||||
if (dexes['base'].textCache[cacheKey]) return dexes['base'].textCache[cacheKey];
|
||||
|
||||
const englishData = this.loadRawTextData();
|
||||
const localizedData = lang === 'en' ? englishData : this.loadRawTextData(lang);
|
||||
return (dexes['base'].textCache[cacheKey] = {
|
||||
Pokedex: this.resolveTextTable(englishData.Pokedex, localizedData.Pokedex),
|
||||
Moves: this.resolveTextTable(englishData.Moves, localizedData.Moves),
|
||||
Abilities: this.resolveTextTable(englishData.Abilities, localizedData.Abilities),
|
||||
Items: this.resolveTextTable(englishData.Items, localizedData.Items),
|
||||
Default: localizedData.Default,
|
||||
});
|
||||
}
|
||||
|
||||
private loadRawTextData(lang: TextLanguage = 'en'): RawTextTableData {
|
||||
if (dexes['base'].rawTextCache[lang]) return dexes['base'].rawTextCache[lang];
|
||||
const langDir = lang === 'en' ? `` : `${lang}/`;
|
||||
const optional = lang !== 'en';
|
||||
return (dexes['base'].rawTextCache[lang] = {
|
||||
Pokedex: this.loadTextFile(`${langDir}pokedex`, 'PokedexText', optional) as DexTable<PokedexText>,
|
||||
Moves: this.loadTextFile(`${langDir}moves`, 'MovesText', optional) as DexTable<MoveText>,
|
||||
Abilities: this.loadTextFile(`${langDir}abilities`, 'AbilitiesText', optional) as DexTable<AbilityText>,
|
||||
Items: this.loadTextFile(`${langDir}items`, 'ItemsText', optional) as DexTable<ItemText>,
|
||||
Default: this.loadTextFile(`${langDir}default`, 'DefaultText', optional) as DexTable<DefaultText>,
|
||||
});
|
||||
}
|
||||
|
||||
private resolveTextTable<T extends AbilityText | ItemText | MoveText | PokedexText>(
|
||||
englishTable: DexTable<T>, localizedTable: DexTable<T>
|
||||
): DexTable<ResolvedText<T>> {
|
||||
const table: DexTable<ResolvedText<T>> = {};
|
||||
for (const id in englishTable) {
|
||||
const englishEntry = englishTable[id];
|
||||
const localizedEntry = localizedTable[id];
|
||||
const englishDesc = this.resolveTextField(englishEntry, englishEntry, 'desc');
|
||||
const englishShortDesc = this.resolveTextField(englishEntry, englishEntry, 'shortDesc');
|
||||
const localizedDesc = this.resolveTextField(localizedEntry, englishEntry, 'desc');
|
||||
const localizedShortDesc = this.resolveTextField(localizedEntry, englishEntry, 'shortDesc');
|
||||
table[id] = {
|
||||
...(localizedEntry || englishEntry),
|
||||
name: localizedEntry?.name || englishEntry.name,
|
||||
desc: localizedDesc || englishDesc || localizedShortDesc || englishShortDesc,
|
||||
shortDesc: localizedShortDesc || englishShortDesc || localizedDesc || englishDesc,
|
||||
} as ResolvedText<T>;
|
||||
}
|
||||
return table;
|
||||
}
|
||||
|
||||
private resolveTextField<T extends AbilityText | ItemText | MoveText | PokedexText>(
|
||||
localizedEntry: T | undefined, englishEntry: T, field: 'desc' | 'shortDesc'
|
||||
): string {
|
||||
const genKeys = Object.keys(englishEntry)
|
||||
.filter(key => /^gen\d+$/.test(key) && Number(key.slice(3)) >= this.gen)
|
||||
.sort((a, b) => Number(a.slice(3)) - Number(b.slice(3)));
|
||||
for (const genKey of genKeys) {
|
||||
const englishGen = (englishEntry as AnyObject)[genKey] as BasicTextData | undefined;
|
||||
if (!englishGen?.[field]) continue;
|
||||
const localizedGen = (localizedEntry as AnyObject | undefined)?.[genKey] as BasicTextData | undefined;
|
||||
return localizedGen?.[field] || '';
|
||||
}
|
||||
return localizedEntry?.[field] || '';
|
||||
}
|
||||
|
||||
getAlias(id: ID): ID | undefined {
|
||||
|
|
|
|||
|
|
@ -103,7 +103,6 @@ type TableTag = TableGenericTag | TableSpeciesTag;
|
|||
|
||||
interface EffectData {
|
||||
name?: string;
|
||||
desc?: string;
|
||||
duration?: number;
|
||||
durationCallback?: (this: Battle, target: Pokemon, source: Pokemon, effect: Effect | null) => number;
|
||||
effectType?: string;
|
||||
|
|
@ -112,7 +111,6 @@ interface EffectData {
|
|||
isNonstandard?: Nonstandard | null;
|
||||
/** "Are you or are you not on this list" data. */
|
||||
tags?: TableTag[];
|
||||
shortDesc?: string;
|
||||
}
|
||||
|
||||
type ModdedEffectData = EffectData | Partial<EffectData> & { inherit: true };
|
||||
|
|
@ -423,6 +421,13 @@ interface PlayerOptions {
|
|||
interface BasicTextData {
|
||||
desc?: string;
|
||||
shortDesc?: string;
|
||||
grammar?: string;
|
||||
articleRule?: 'stressed-a';
|
||||
classified?: {
|
||||
name: string,
|
||||
grammar: string,
|
||||
articleRule?: 'stressed-a',
|
||||
};
|
||||
}
|
||||
interface ConditionTextData extends BasicTextData {
|
||||
activate?: string;
|
||||
|
|
@ -483,6 +488,12 @@ type ItemText = TextFile<ConditionTextData>;
|
|||
type PokedexText = TextFile<BasicTextData>;
|
||||
type DefaultText = AnyObject;
|
||||
|
||||
type ResolvedText<T extends BasicTextData> = T & { desc: string, shortDesc: string };
|
||||
type ResolvedAbilityText = ResolvedText<AbilityText>;
|
||||
type ResolvedItemText = ResolvedText<ItemText>;
|
||||
type ResolvedMoveText = ResolvedText<MoveText>;
|
||||
type ResolvedPokedexText = ResolvedText<PokedexText>;
|
||||
|
||||
declare namespace RandomTeamsTypes {
|
||||
export interface TeamDetails {
|
||||
megaStone?: number;
|
||||
|
|
|
|||
|
|
@ -1832,7 +1832,7 @@ export class Pokemon {
|
|||
break;
|
||||
default:
|
||||
if (item.isGem) {
|
||||
this.battle.add('-enditem', this, item, '[from] gem');
|
||||
this.battle.add('-enditem', this, item, '[from] gem', `[move] ${this.battle.activeMove!.name}`);
|
||||
} else {
|
||||
this.battle.add('-enditem', this, item);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,6 +3,27 @@
|
|||
const assert = require('assert').strict;
|
||||
|
||||
describe('Chat', () => {
|
||||
it('should convert interface language preferences to game text language codes', () => {
|
||||
assert.equal(Chat.getDexLanguage('japanese'), 'ja');
|
||||
assert.equal(Chat.getDexLanguage('simplifiedchinese'), 'zh-cn');
|
||||
assert.equal(Chat.getDexLanguage('portuguese'), 'en');
|
||||
});
|
||||
|
||||
it('should display both English and native language names', () => {
|
||||
assert.equal(Chat.getLanguageName('japanese'), '日本語 (Japanese)');
|
||||
assert.equal(Chat.getLanguageName('english'), 'English');
|
||||
});
|
||||
|
||||
it('should localize data HTML', () => {
|
||||
const html = Chat.getDataMoveHTML(Dex.moves.get('Close Combat'), { language: 'japanese' });
|
||||
assert(html.includes('インファイト'));
|
||||
assert(html.includes("Lowers the user's Defense and Sp. Def by 1."));
|
||||
const detailsHTML = Chat.getDataMoveHTML(Dex.moves.get('Close Combat'), {
|
||||
language: 'japanese', hideShortDescription: true,
|
||||
});
|
||||
assert(!detailsHTML.includes("Lowers the user's Defense"));
|
||||
});
|
||||
|
||||
it('should not infinite loop formatText', () => {
|
||||
assert.equal(
|
||||
Chat.formatText(`<\\\\||^^**~~\`\`https://a/Olaaaseusbobalhos\`\`~~**^^||\\\\`),
|
||||
|
|
|
|||
|
|
@ -89,6 +89,68 @@ describe('Dex#getMove', () => {
|
|||
});
|
||||
});
|
||||
|
||||
describe('DexText#get', () => {
|
||||
it(`should translate species, items, abilities, and moves`, () => {
|
||||
assert.equal(Dex.text.get(Dex.species.get('Pikachu'), 'ja').name, 'ピカチュウ');
|
||||
assert.equal(Dex.text.get(Dex.items.get('Leftovers'), 'ja').name, 'たべのこし');
|
||||
assert.equal(Dex.text.get(Dex.abilities.get('Levitate'), 'ja').name, 'ふゆう');
|
||||
assert.equal(Dex.text.get(Dex.moves.get('Tackle'), 'ja').name, 'たいあたり');
|
||||
});
|
||||
|
||||
it(`should return the entire text entry`, () => {
|
||||
assert.equal(
|
||||
Dex.text.get(Dex.moves.get('Absorb')).gen4.desc,
|
||||
'The user recovers 1/2 the HP lost by the target, rounded down. If Big Root is held by the user, ' +
|
||||
'the HP recovered is 1.3x normal, rounded down.'
|
||||
);
|
||||
});
|
||||
|
||||
it(`should fall back to English text data`, () => {
|
||||
// TODO: Revise as text is translated
|
||||
const move = Dex.moves.get('Tackle');
|
||||
const text = Dex.text.get(move, 'ja');
|
||||
assert.equal(text.desc, 'No additional effect.');
|
||||
assert.equal(text.shortDesc, 'No additional effect.');
|
||||
assert.deepEqual(Dex.text.get(move), {
|
||||
name: 'Tackle',
|
||||
desc: 'No additional effect.',
|
||||
shortDesc: 'No additional effect.',
|
||||
});
|
||||
assert.equal(Dex.loadTextData('ja').Moves.tackle.shortDesc, 'No additional effect.');
|
||||
});
|
||||
|
||||
it(`should allow localized text files to be omitted`, () => {
|
||||
const afd = Dex.loadTextData('en-afd');
|
||||
assert.equal(afd.Moves.tackle.name, 'Tackle');
|
||||
assert.equal(afd.Default.default.mega, " [POKEMON]'s [ITEM] glows!");
|
||||
});
|
||||
|
||||
it(`should keep long and short description fallbacks separate`, () => {
|
||||
const text = Dex.text.get(Dex.moves.get('Close Combat'), 'ja');
|
||||
assert.notEqual(text.desc, text.shortDesc);
|
||||
});
|
||||
|
||||
it(`should not use a current-generation translation for an old-generation description`, () => {
|
||||
const dex = Dex.forGen(4);
|
||||
const move = dex.moves.get('Brick Break');
|
||||
const desc = 'If this attack does not miss and whether or not the target is immune, the effects of Reflect and ' +
|
||||
'Light Screen end for the target\'s side of the field before damage is calculated.';
|
||||
assert.equal(dex.loadTextData('ja').Moves.brickbreak.desc, desc);
|
||||
assert.equal(dex.text.get(move, 'ja').desc, desc);
|
||||
});
|
||||
|
||||
it(`should use English-only descriptions defined by mods`, () => {
|
||||
const dex = Dex.mod('afd');
|
||||
const ability = dex.abilities.get('Chaos Saliva');
|
||||
const text = dex.text.get(ability, 'ja');
|
||||
assert.deepEqual(text, {
|
||||
name: 'Chaos Saliva',
|
||||
desc: "Contact moves have a 20% chance to paralyze and a 20% chance to confuse.",
|
||||
shortDesc: "Contact moves have a 20% chance to paralyze and a 20% chance to confuse.",
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('Dex#isTagged', () => {
|
||||
it(`should check species, move, and generic tags`, () => {
|
||||
assert(Dex.isTagged(Dex.species.get('Mew'), 'Mythical'));
|
||||
|
|
|
|||
6
translations/korean/main.ts
Normal file
6
translations/korean/main.ts
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
import type { Translations } from '../../server/chat';
|
||||
|
||||
export const translations: Translations = {
|
||||
name: "Korean",
|
||||
strings: {},
|
||||
};
|
||||
|
|
@ -28,7 +28,7 @@
|
|||
"include": [
|
||||
"./config/*.ts",
|
||||
"./data/*",
|
||||
"./data/text/*",
|
||||
"./data/text/**/*",
|
||||
"./data/random-battles/**/*",
|
||||
"./data/mods/*/*",
|
||||
"./dev-tools/*.ts",
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue