From a7cb87dd75a92a6155372dad42ef5c3c897517b9 Mon Sep 17 00:00:00 2001 From: Akurosia Kamo Date: Thu, 14 Dec 2023 17:14:23 +0100 Subject: [PATCH] i18n: new translations (#6008) --- ui/oopsyraidsy/data/00-misc/test.ts | 3 ++ ui/raidboss/data/00-misc/test.ts | 2 +- .../04-sb/ultimate/ultima_weapon_ultimate.ts | 13 +++++++ ui/raidboss/data/05-shb/raid/e12s.ts | 23 +++++++---- ui/raidboss/data/05-shb/raid/e4s.ts | 12 ++++-- ui/raidboss/data/05-shb/raid/e8s.ts | 38 ++++++++++++++++++- ui/raidboss/data/05-shb/trial/titania-ex.ts | 1 + 7 files changed, 77 insertions(+), 15 deletions(-) diff --git a/ui/oopsyraidsy/data/00-misc/test.ts b/ui/oopsyraidsy/data/00-misc/test.ts index 157289bad0..00732db47e 100644 --- a/ui/oopsyraidsy/data/00-misc/test.ts +++ b/ui/oopsyraidsy/data/00-misc/test.ts @@ -16,6 +16,9 @@ const triggerSet: OopsyTriggerSet = { id: 'Test Bow', type: 'GameLog', netRegex: NetRegexes.gameNameLog({ line: 'You bow courteously to the striking dummy.*?' }), + netRegexDe: NetRegexes.gameNameLog({ + line: 'Du verbeugst dich hochachtungsvoll vor der Trainingspuppe.*?', + }), netRegexFr: NetRegexes.gameNameLog({ line: 'Vous vous inclinez devant le mannequin d\'entraînement.*?', }), diff --git a/ui/raidboss/data/00-misc/test.ts b/ui/raidboss/data/00-misc/test.ts index 954add8cb3..f41da01e60 100644 --- a/ui/raidboss/data/00-misc/test.ts +++ b/ui/raidboss/data/00-misc/test.ts @@ -394,7 +394,6 @@ const triggerSet: TriggerSet = { timelineReplace: [ { locale: 'de', - missingTranslations: true, replaceSync: { 'You bid farewell to the striking dummy': 'Du winkst der Trainingspuppe zum Abschied zu', 'You bow courteously to the striking dummy': @@ -407,6 +406,7 @@ const triggerSet: TriggerSet = { 'cactbot test config': 'cactbot test konfig', 'cactbot test outputStrings': 'cactbot test outputStrings', 'cactbot test combatant cast': 'cactbot test gegner wirken', + 'testNetRegexTimeline': 'testNetRegexTimeline', 'You clap for the striking dummy': 'Du klatschst begeistert Beifall für die Trainingspuppe', 'You psych yourself up alongside the striking dummy': 'Du willst wahren Kampfgeist in der Trainingspuppe entfachen', diff --git a/ui/raidboss/data/04-sb/ultimate/ultima_weapon_ultimate.ts b/ui/raidboss/data/04-sb/ultimate/ultima_weapon_ultimate.ts index 963f33b28d..d320de36fe 100644 --- a/ui/raidboss/data/04-sb/ultimate/ultima_weapon_ultimate.ts +++ b/ui/raidboss/data/04-sb/ultimate/ultima_weapon_ultimate.ts @@ -845,6 +845,10 @@ const triggerSet: TriggerSet = { en: `If the first nail is SE, this will call SE/NW for both reverse-Z and normal-Z. If the first nail is S, this will call SE/NW for reverse-Z and SW/NE for normal-Z. Other nail orders are also supported, these are just examples.`, + de: + `Wenn der erste Nagel SO ist, wird dies SO/NW sowohl für Umgekehrtes-Z als auch für Normal-Z aufgerufen. + Wenn der erste Nagel S ist, wird dies SO/NW für Umgekehrtes-Z und SW/NO für Normal-Z aufgerufen. + Andere Nagelreihenfolgen werden ebenfalls unterstützt, dies sind nur Beispiele.`, cn: `如果第一个火神柱在东南,则反向 Z 和正常 Z 都会提示东南/西北 如果第一个火神柱在南, 则反向 Z 将提示东南/西北,正常 Z 将提示西南/东北。 这些只是示例, 还支持其他火神柱顺序。`, @@ -893,6 +897,10 @@ const triggerSet: TriggerSet = { en: `If the first nail was on an intercard, then the first Ifrit dash is on an intercard and this optional call is to move to be adjacent to that first dash. If you are already safe, this will not be called.`, + de: + `Wenn der erste Nagel Interkardinal war, dann ist der erste Ifrit-Ansturm auf einer Interkardinalen + und dieser optionale Aufruf besteht darin, sich in die Nähe dieses ersten Ansturms zu bewegen. + Wenn man bereits in Sicherheit ist, wird dies nicht aufgerufen.`, cn: `如果第一个火神柱在对角线上,那么第一次火神冲也在对角线上。 这个可选提示会提示你移动到第一次火神冲附近的位置。 如果你已在安全区,则不会输出此提示。`, @@ -939,6 +947,11 @@ const triggerSet: TriggerSet = { Both the party and the healer will move either 45 or 90 degrees. It is a "fast" movement if you need to move fast to avoid the Ifrit follow-up dash. It is a "slow" movement if you have extra time to do this.`, + de: + `Dies ist die Hauptbewegung für die Ifrit-Anstürme, die in der Nähe des ersten Ansturms beginnt. + Sowohl die Gruppe als auch der Heiler bewegen sich entweder um 45 oder 90 Grad. + Es ist eine "schnelle" Bewegung, wenn man sich schnell bewegen muss, um dem Ifrit-Folgeschlag auszuweichen. + Es ist eine "langsame" Bewegung, wenn man mehr Zeit hat, dies zu tun.`, cn: `这是从第一次火神冲附近开始的火神冲主要移动。 人群和奶妈都将移动 45 度或 90 度。 "快" 可以让你快速移动,躲避第二次火神冲。 diff --git a/ui/raidboss/data/05-shb/raid/e12s.ts b/ui/raidboss/data/05-shb/raid/e12s.ts index b3607e74e1..8c3e1973f5 100644 --- a/ui/raidboss/data/05-shb/raid/e12s.ts +++ b/ui/raidboss/data/05-shb/raid/e12s.ts @@ -319,6 +319,7 @@ const triggerSet: TriggerSet = { }, formlessBusterBLU: { en: 'Buster on YOU (w/${player})', + de: 'Tankbuster auf DIR (mit ${player})', fr: 'Tankbuster sur VOUS (avec ${player})', cn: '死刑点名 (与${player})', ko: '탱버 대상자 (+${player})', @@ -453,12 +454,14 @@ const triggerSet: TriggerSet = { output.responseOutputStrings = { stackOnYou: { en: 'Stack on YOU (w/${player})', + de: 'Auf DIR sammeln (mit ${player})', fr: 'Package sur VOUS (avec ${player})', cn: '分摊点名 (与${player})', ko: '쉐어 대상자 (+${player})', }, stacks: { en: 'Stacks: ${players}', + de: 'Sammeln: ${players}', fr: 'Package: ${players}', cn: '分摊: ${players}', ko: '쉐어: ${players}', @@ -1304,7 +1307,7 @@ const triggerSet: TriggerSet = { output.responseOutputStrings = { shadoweye: { en: 'Eye (w/${player})', - de: 'Auge auf DIR (w/${player})', // FIXME + de: 'Auge (mit ${player})', fr: 'Œil (avec ${player})', ja: '自分に目 (w/${player})', // FIXME cn: '石化眼点名 (与${player})', @@ -1312,13 +1315,14 @@ const triggerSet: TriggerSet = { }, water: { en: 'Stack (w/${player})', + de: 'Sammeln (mit ${player})', fr: 'Pack (avec ${player})', cn: '分摊 (与${player})', ko: '쉐어징 (+${player})', }, longFire: { en: 'Long Fire (w/${player})', - de: 'langes Feuer (w/${player})', // FIXME + de: 'langes Feuer (w/${player})', fr: 'Feu long (avec ${player})', ja: 'ファイガ(遅い) (w/${player})', // FIXME cn: '长火 (与${player})', @@ -1326,7 +1330,7 @@ const triggerSet: TriggerSet = { }, shortFire: { en: 'Short Fire (w/${player})', - de: 'kurzes Feuer (w/${player})', // FIXME + de: 'kurzes Feuer (w/${player})', fr: 'Feu court (avec ${player})', ja: 'ファイガ(早い) (w/${player})', // FIXME cn: '短火 (与${player})', @@ -1334,7 +1338,7 @@ const triggerSet: TriggerSet = { }, longIce: { en: 'Long Ice (w/${player})', - de: 'langes Eis (w/${player})', // FIXME + de: 'langes Eis (w/${player})', fr: 'Glace longue (avec ${player})', ja: 'ブリザガ(遅い) (w/${player})', // FIXME cn: '长冰 (与${player})', @@ -1342,7 +1346,7 @@ const triggerSet: TriggerSet = { }, shortIce: { en: 'Short Ice (w/${player})', - de: 'kurzes Eis (w/${player})', // FIXME + de: 'kurzes Eis (w/${player})', fr: 'Glace courte (avec ${player})', ja: 'ブリザガ(早い) (w/${player})', // FIXME cn: '短冰 (与${player})', @@ -1665,6 +1669,7 @@ const triggerSet: TriggerSet = { }, stacksOn: { en: 'Stacks (${player1}, ${player2})', + de: 'Sammeln (${player1}, ${player2})', fr: 'Packages (${player1}, ${player2})', cn: '分摊 (${player1}, ${player2})', ko: '쉐어 (${player1}, ${player2})', @@ -1679,6 +1684,7 @@ const triggerSet: TriggerSet = { }, knockbackIntoStacksOn: { en: 'Knockback => Stacks (${player1}, ${player2})', + de: 'Rückstoß => Sammeln (${player1}, ${player2})', fr: 'Poussée => Package (${player1}, ${player2})', cn: '击退 => 分摊 (${player1}, ${player2})', ko: '넉백 => 쉐어 (${player1}, ${player2})', @@ -1746,6 +1752,7 @@ const triggerSet: TriggerSet = { }, stacksOn: { en: 'Stacks (${player1}, ${player2})', + de: 'Sammeln (${player1}, ${player2})', fr: 'Packages (${player1}, ${player2})', cn: '分摊 (${player1}, ${player2})', ko: '쉐어 (${player1}, ${player2})', @@ -1772,7 +1779,7 @@ const triggerSet: TriggerSet = { output.responseOutputStrings = { shadoweye: { en: 'Eye (w/${player})', - de: 'Auge auf DIR (w/${player})', // FIXME + de: 'Auge (mit ${player})', fr: 'Œil(avec ${player})', ja: '自分に目 (w/${player})', // FIXME cn: '石化眼点名 (与${player})', @@ -1780,7 +1787,7 @@ const triggerSet: TriggerSet = { }, doubleAero: { en: 'Double Aero (w/${player})', - de: 'Doppel Windga auf DIR (w/${player})', // FIXME + de: 'Doppel Windga (mit ${player})', fr: 'Double Vent(avec ${player})', ja: '自分にエアロガ×2 (w/${player})', // FIXME cn: '双风点名 (与${player})', @@ -1788,7 +1795,7 @@ const triggerSet: TriggerSet = { }, spread: { en: 'Spread (w/${player1}, ${player2}, ${player3})', - de: 'Verteilen auf DIR (w/${player1}, ${player2}, ${player3})', // FIXME + de: 'Verteilen (mit ${player1}, ${player2}, ${player3})', fr: 'Dispersion (avec ${player1}, ${player2}, ${player3})', ja: '自分に散開 (w/${player1}, ${player2}, ${player3})', // FIXME cn: '分散点名 (与${player1}, ${player2}, ${player3})', diff --git a/ui/raidboss/data/05-shb/raid/e4s.ts b/ui/raidboss/data/05-shb/raid/e4s.ts index 17bfc12dea..bed0ee460b 100644 --- a/ui/raidboss/data/05-shb/raid/e4s.ts +++ b/ui/raidboss/data/05-shb/raid/e4s.ts @@ -72,6 +72,7 @@ const triggerSet: TriggerSet = { outputStrings: { text: { en: 'Yellow Spread', + de: 'Gelb Verteilen', fr: 'Dispersion des jaunes', cn: '黄标分散', ko: '노란색 산개', @@ -104,6 +105,7 @@ const triggerSet: TriggerSet = { outputStrings: { text: { en: 'Orange Stack', + de: 'Orange Sammeln', fr: 'Package des oranges', cn: '橙标分摊', ko: '주황색 쉐어', @@ -367,6 +369,7 @@ const triggerSet: TriggerSet = { outputStrings: { text: { en: 'Blue Weight', + de: 'Blau Gewicht', fr: 'Poids bleu', cn: '蓝标大陆之重', ko: '파란징 대륙의 무게', @@ -418,6 +421,7 @@ const triggerSet: TriggerSet = { outputStrings: { text: { en: 'Gaol on YOU (w/${player})', + de: 'Gefängnis auf DIR (mit ${player})', fr: 'Geôle sur VOUS (avec ${player})', cn: '石牢点名 (与${player})', ko: '돌감옥 대상자 (+${player})', @@ -441,7 +445,7 @@ const triggerSet: TriggerSet = { outputStrings: { leftOrBack: { en: 'Left (or Back)', - de: 'VON VORNE RECHTS RUNTER', // FIXME + de: 'Links (oder Hinten)', fr: 'Gauche (ou Arrière)', ja: '右前壊れるよ', // FIXME cn: '左 (或 后)', @@ -468,7 +472,7 @@ const triggerSet: TriggerSet = { outputStrings: { leftOrFront: { en: 'Left (or Front)', - de: 'VON HINTEN RECHTS RUNTER', // FIXME + de: 'Links (oder Vorne)', fr: 'Gauche (ou Devant)', ja: '右後ろ壊れるよ', // FIXME cn: '左 (或 前)', @@ -495,7 +499,7 @@ const triggerSet: TriggerSet = { outputStrings: { frontOrRight: { en: 'Right (or Front)', - de: 'VON HINTEN LINKS RUNTER', // FIXME + de: 'Rechts (oder Vorne)', fr: 'Droite (ou Devant)', ja: '左後ろ壊れるよ', // FIXME cn: '右 (或 前)', @@ -522,7 +526,7 @@ const triggerSet: TriggerSet = { outputStrings: { backOrRight: { en: 'Right (or Back)', - de: 'VON VORNE LINKS RUNTER', // FIXME + de: 'Rechts (oder Hinten)', fr: 'Droite (ou Arrière)', ja: '左前壊れるよ', // FIXME cn: '右 (或 后)', diff --git a/ui/raidboss/data/05-shb/raid/e8s.ts b/ui/raidboss/data/05-shb/raid/e8s.ts index 6278a6e520..0ad45d4732 100644 --- a/ui/raidboss/data/05-shb/raid/e8s.ts +++ b/ui/raidboss/data/05-shb/raid/e8s.ts @@ -103,6 +103,15 @@ const triggerSet: TriggerSet = { Tanks adjust to where the Red and Green Mirror are located. One tank must be inbetween the party, the other closest to Greem Mirror. Once Green Mirror goes off, the tanks adjust for Red Mirror.`, + de: + `Wenn du möchten, dass Cactbot den doppelten Knockback von Spiegelland 4 auslöst, aktivieren Sie diese Option. + Die Anzeige erfolgt während/nach den Drehungen des Bosses und erfordert <1,4s Reaktionszeit + um sowohl den grünen als auch den roten Spiegel-Rückstoß zu vermeiden. + Beispiel: https://clips.twitch.tv/CreativeDreamyAsparagusKlappa + Die Gruppe teilt sich nach dem Sprung hinter dem Boss in zwei Gruppen auf. + Die Tanks passen sich danach an, wo sich der rote und der grüne Spiegel befinden. + Ein Tank muss sich in der Mitte der Gruppe befinden, der andere in der Nähe des grünen Spiegels. + Sobald der grüne Spiegel ausgelöst wird, passen sich die Tanks auf den roten Spiegel an.`, fr: `Si vous voulez que cactbot signale le double knockback de Mirror Mirror 4, activez cette option. L'annonce se fait pendant/après les tours du boss et nécessite un temps de réaction < à 1.4s @@ -239,12 +248,14 @@ const triggerSet: TriggerSet = { outputStrings: { scytheNext: { en: '(under boss => under mirrors soon)', + de: '(unter den Boss => gleich unter den Spiegel)', fr: '(sous le boss => sous les miroirs bientôt', cn: '(BOSS 下方 => 即将去镜子下方)', ko: '(보스 밑 => 이후 거울 밑)', }, axeNext: { en: '(out => middle soon)', + de: '(raus => gleich Mitte)', cn: '(外 => 即将去中间)', ko: '(밖 => 이후 중앙)', }, @@ -278,12 +289,14 @@ const triggerSet: TriggerSet = { outputStrings: { redMirrorWest: { en: 'Behind => SW', + de: 'Hinten => SW', fr: 'Derrière => SO', cn: '后 => 左下 (西南)', ko: '뒤 => 남서', }, redMirrorEast: { en: 'Behind => SE', + de: 'Hinten => SO', fr: 'Derrière => SE', cn: '后 => 右下 (东南)', ko: '뒤 => 남동', @@ -306,12 +319,14 @@ const triggerSet: TriggerSet = { outputStrings: { redMirrorEast: { en: 'Front => NW', + de: 'Vorne => NW', fr: 'Devant => NO', cn: '前 => 左上 (西北)', ko: '앞 => 북서', }, redMirrorWest: { en: 'Front => NE', + de: 'Vorne => NO', fr: 'Devant => NE', cn: '前 => 右上 (东北)', ko: '앞 => 북동', @@ -379,7 +394,7 @@ const triggerSet: TriggerSet = { outputStrings: { bitingFrostNext: { en: 'Biting Next (face outward)', - de: 'Frosthieb als nächstes', // FIXME + de: 'Frosthieb als nächstes (nach außen drehen)', fr: 'Taillade de givre (pointez vers l\'extérieur)', ja: '次はフロストスラッシュ', // FIXME cn: '冰霜斩 (去背后)', @@ -387,7 +402,7 @@ const triggerSet: TriggerSet = { }, drivingFrostNext: { en: 'Driving Next (face inward)', - de: 'Froststoß als nächstes', // FIXME + de: 'Froststoß als nächstes (nach innen drehen)', fr: 'Percée de givre (pointez vers l\'intérieur)', ja: '次はフロストスラスト', // FIXME cn: '冰霜刺 (去前面)', @@ -421,6 +436,7 @@ const triggerSet: TriggerSet = { outputStrings: { cleanse: { en: 'Cleanse: ${players}', + de: 'Reinige: ${players}', fr: 'Guérison : ${players}', cn: '驱散: ${players}', ko: '에스나: ${players}', @@ -436,6 +452,7 @@ const triggerSet: TriggerSet = { outputStrings: { text: { en: 'Star on YOU', + de: 'Stern auf DIR', fr: 'Étoile sur VOUS', cn: '冰针点名', ko: '별 징 대상자', @@ -529,6 +546,7 @@ const triggerSet: TriggerSet = { outputStrings: { outThenMiddle: { en: 'Out => Middle', + de: 'Raus => Mitte', fr: 'Extérieur => Milieu', cn: '远离 => 中间', ko: '밖 => 중앙', @@ -554,18 +572,21 @@ const triggerSet: TriggerSet = { outputStrings: { getUnderCards: { en: 'Under => Under Cardinal Mirrors', + de: 'Unter den Boss => Unter Kardinal-Spiegel', fr: 'Dessous => Sous les miroirs cardinaux', cn: '下方 => 正点镜下方', ko: '보스 밑 => 십자 방향 거울 밑', }, getUnderIntercards: { en: 'Under => Under Intercard Mirrors', + de: 'Unter den Boss => Unter Interkardinal-Spiegel', fr: 'Dessous => Sous les miroirs intercardinaux', cn: '下方 => 斜点镜下方', ko: '보스 밑 => 대각선 방향 거울 밑', }, getUnderUnknown: { en: 'Under Boss => Under Mirrors', + de: 'Unter den Boss => Unter Spiegel', fr: 'Sous le boss => Sous les miroirs', cn: 'BOSS 下方 => 镜下方', ko: '보스 밑 => 거울 밑', @@ -634,12 +655,14 @@ const triggerSet: TriggerSet = { output.responseOutputStrings = { getFinalTower: { en: 'Get Final Tower', + de: 'Nimm letzten Turm', fr: 'Prenez la tour finale', cn: '踩最后塔', ko: '마지막 기둥 들어가기', }, avoidFinalTower: { en: 'Avoid Final Tower', + de: 'Vermeide letzten Turm', fr: 'Évitez la tour finale', cn: '躲最后塔', ko: '마지막 기둥 피하기', @@ -692,6 +715,7 @@ const triggerSet: TriggerSet = { outputStrings: { text: { en: 'Stun Aqueous Aether', + de: 'Wasseräther unterbrechen', fr: 'Étourdissez l\'ether aqueux', cn: '眩晕水以太', ko: '물 에테르 기절', @@ -793,6 +817,9 @@ const triggerSet: TriggerSet = { en: `Fast means you can go from the 1st to the 3rd safe spot directly. Slow means you need to go 1 => 2 => 3 without skipping 2. This is for casters who may not want to move as much.`, + de: `Schnell bedeutet, dass man direkt vom 1. zum 3. sicheren Punkt gehen kann. + Langsam bedeutet, dass man 1 => 2 => 3 gehen muss, ohne 2 zu überspringen. + Dies ist für Magier, die sich vielleicht nicht so viel bewegen wollen.`, fr: `Rapide signifie que vous pouvez passer directement du premier au troisième point sûr. Lent signifie que vous devez aller de 1 => 2 => 3 sans omettre 2. C'est pour les lanceurs de sorts qui ne veulent pas se déplacer autant.`, @@ -861,12 +888,14 @@ const triggerSet: TriggerSet = { outputStrings: { slowText: { en: '${dir1} => ${dir2} => ${dir3} (slow)', + de: '${dir1} => ${dir2} => ${dir3} (langsam)', fr: '${dir1} => ${dir2} => ${dir3} (lent)', cn: '${dir1} => ${dir2} => ${dir3} (慢)', ko: '${dir1} => ${dir2} => ${dir3} (느림)', }, fastText: { en: '${dir1} => ${dir2} => ${dir3} (fast)', + de: '${dir1} => ${dir2} => ${dir3} (schnell)', fr: '${dir1} => ${dir2} => ${dir3} (rapide)', cn: '${dir1} => ${dir2} => ${dir3} (快)', ko: '${dir1} => ${dir2} => ${dir3} (빠름)', @@ -1062,12 +1091,14 @@ const triggerSet: TriggerSet = { outputStrings: { redDragonHead: { en: 'Pop Head #${num}', + de: 'Nimm Kopf #${num}', fr: 'Tête #${num}', cn: '撞头 #${num}', ko: '${num}번 머리 부딪히기', }, bluePuddle: { en: 'Get Puddle #${num}', + de: 'Nimm Fläche #${num}', fr: 'Prenez le puddle #${num}', cn: '踩圈 #${num}', ko: '${num}번 장판 밟기', @@ -1144,6 +1175,7 @@ const triggerSet: TriggerSet = { }, bluCleanse: { en: 'Exuviation', + de: 'Exuviation', fr: 'Exuviation', cn: '蜕皮', ko: '허물 벗기', @@ -1197,12 +1229,14 @@ const triggerSet: TriggerSet = { outputStrings: { proteanGetFinalTower: { en: 'Protean => Get Final Tower', + de: 'Himmelsrichtung => Nimm letzten Turm', fr: 'Positions => Prenez la tour finale', cn: '八方分散 => 踩最后塔', ko: '8방향 산개 => 마지막 기둥 들어가기', }, proteanAvoidFinalTower: { en: 'Protean => Avoid Final Tower', + de: 'Himmelsrichtung => Vermeide letzten Turm', fr: 'Position => Évitez la tour finale', cn: '八方分散 => 躲最后塔', ko: '8방향 산개 => 마지막 기둥 피하기', diff --git a/ui/raidboss/data/05-shb/trial/titania-ex.ts b/ui/raidboss/data/05-shb/trial/titania-ex.ts index 6880e00fde..9b58176bfe 100644 --- a/ui/raidboss/data/05-shb/trial/titania-ex.ts +++ b/ui/raidboss/data/05-shb/trial/titania-ex.ts @@ -138,6 +138,7 @@ const triggerSet: TriggerSet = { outputStrings: { breakTether: { en: 'Break Tether (w/${player})', + de: 'Verbindungen brechen (mit ${player})', cn: '拉断连线 (与${player})', ko: '선 끊기 (+${player})', },