From e1f68bd06c0ac00e165f3a19a85c5b17d2f4b8f8 Mon Sep 17 00:00:00 2001 From: Lyu Zong-Hong Date: Mon, 22 Feb 2021 19:55:05 +0900 Subject: [PATCH] Update Lang.java so it can support other languages. Also translated phase/step names --- forge-core/src/main/java/forge/util/Lang.java | 63 +++++++++++-------- .../java/forge/util/lang/LangChinese.java | 22 +++++++ .../java/forge/util/lang/LangEnglish.java | 33 ++++++++++ .../main/java/forge/util/lang/LangGerman.java | 29 +++++++++ .../java/forge/util/lang/LangItalian.java | 26 ++++++++ .../java/forge/util/lang/LangJapanese.java | 22 +++++++ .../java/forge/util/lang/LangSpanish.java | 26 ++++++++ .../java/forge/game/GameLogFormatter.java | 2 +- .../forge/game/ability/effects/DigEffect.java | 2 +- .../effects/RearrangeTopOfLibraryEffect.java | 2 +- .../forge/game/event/GameEventManaPool.java | 2 +- .../event/GameEventPlayerLivesChanged.java | 2 +- .../forge/game/event/GameEventTurnPhase.java | 2 +- .../java/forge/game/event/GameEventZone.java | 2 +- .../main/java/forge/game/phase/PhaseType.java | 33 +++++----- .../main/java/forge/game/player/Player.java | 6 +- .../main/java/forge/game/zone/PlayerZone.java | 2 +- .../src/main/java/forge/util/MessageUtil.java | 10 +-- .../screens/match/controllers/CCombat.java | 2 +- forge-gui/res/languages/de-DE.properties | 16 +++++ forge-gui/res/languages/en-US.properties | 15 +++++ forge-gui/res/languages/es-ES.properties | 16 +++++ forge-gui/res/languages/it-IT.properties | 16 +++++ forge-gui/res/languages/ja-JP.properties | 51 +++++++++------ forge-gui/res/languages/zh-CN.properties | 17 ++++- .../control/FControlGameEventHandler.java | 2 +- .../match/input/InputConfirmMulligan.java | 2 +- .../src/main/java/forge/model/FModel.java | 2 + .../forge/player/PlayerControllerHuman.java | 2 +- 29 files changed, 345 insertions(+), 82 deletions(-) create mode 100644 forge-core/src/main/java/forge/util/lang/LangChinese.java create mode 100644 forge-core/src/main/java/forge/util/lang/LangEnglish.java create mode 100644 forge-core/src/main/java/forge/util/lang/LangGerman.java create mode 100644 forge-core/src/main/java/forge/util/lang/LangItalian.java create mode 100644 forge-core/src/main/java/forge/util/lang/LangJapanese.java create mode 100644 forge-core/src/main/java/forge/util/lang/LangSpanish.java diff --git a/forge-core/src/main/java/forge/util/Lang.java b/forge-core/src/main/java/forge/util/Lang.java index 531f7237314..e02ce60fdaf 100644 --- a/forge-core/src/main/java/forge/util/Lang.java +++ b/forge-core/src/main/java/forge/util/Lang.java @@ -6,6 +6,8 @@ import java.util.regex.Pattern; import org.apache.commons.lang3.StringUtils; +import forge.util.lang.*; + import com.google.common.base.Function; import com.google.common.collect.Iterables; import com.google.common.collect.Lists; @@ -13,12 +15,39 @@ import com.google.common.collect.Lists; /** * Static library containing language-related utility methods. */ -public final class Lang { +public abstract class Lang { - /** - * Private constructor to prevent instantiation. - */ - private Lang() { + private static Lang instance; + + protected String languageCode; + protected String countryCode; + + public static void createInstance(String localeID) { + String[] splitLocale = localeID.split("-"); + String language = splitLocale[0]; + String country = splitLocale[1]; + if (language.equals("de")) { + instance = new LangGerman(); + } else if (language.equals("es")) { + instance = new LangSpanish(); + } else if (language.equals("it")) { + instance = new LangItalian(); + } else if (language.equals("zh")) { + instance = new LangChinese(); + } else if (language.equals("ja")) { + instance = new LangJapanese(); + } else { // default is English + instance = new LangEnglish(); + } + instance.languageCode = language; + instance.countryCode = country; + } + + public static Lang getInstance() { + return instance; + } + + protected Lang() { } /** @@ -29,17 +58,7 @@ public final class Lang { * the number to get the ordinal suffix for. * @return a string containing two characters. */ - public static String getOrdinal(final int position) { - final String[] sufixes = new String[] { "th", "st", "nd", "rd", "th", "th", "th", "th", "th", "th" }; - switch (position % 100) { - case 11: - case 12: - case 13: - return position + "th"; - default: - return position + sufixes[position % 10]; - } - } + public abstract String getOrdinal(final int position); public static String joinHomogenous(final String s1, final String s2) { final boolean has1 = StringUtils.isNotBlank(s1); @@ -121,16 +140,8 @@ public final class Lang { } } - public static String getPossesive(final String name) { - if ("You".equalsIgnoreCase(name)) { - return name + "r"; // to get "your" - } - return name.endsWith("s") ? name + "'" : name + "'s"; - } - - public static String getPossessedObject(final String owner, final String object) { - return getPossesive(owner) + " " + object; - } + public abstract String getPossesive(final String name); + public abstract String getPossessedObject(final String owner, final String object); public static boolean startsWithVowel(final String word) { return isVowel(word.trim().charAt(0)); diff --git a/forge-core/src/main/java/forge/util/lang/LangChinese.java b/forge-core/src/main/java/forge/util/lang/LangChinese.java new file mode 100644 index 00000000000..fabe54ca173 --- /dev/null +++ b/forge-core/src/main/java/forge/util/lang/LangChinese.java @@ -0,0 +1,22 @@ +package forge.util.lang; + +import forge.util.Lang; + +public class LangChinese extends Lang { + + @Override + public String getOrdinal(final int position) { + return "第" + position; + } + + @Override + public String getPossesive(final String name) { + return name + "的"; + } + + @Override + public String getPossessedObject(final String owner, final String object) { + return getPossesive(owner) + object; + } + +} diff --git a/forge-core/src/main/java/forge/util/lang/LangEnglish.java b/forge-core/src/main/java/forge/util/lang/LangEnglish.java new file mode 100644 index 00000000000..d47cd6b416f --- /dev/null +++ b/forge-core/src/main/java/forge/util/lang/LangEnglish.java @@ -0,0 +1,33 @@ +package forge.util.lang; + +import forge.util.Lang; + +public class LangEnglish extends Lang { + + @Override + public String getOrdinal(final int position) { + final String[] sufixes = new String[] { "th", "st", "nd", "rd", "th", "th", "th", "th", "th", "th" }; + switch (position % 100) { + case 11: + case 12: + case 13: + return position + "th"; + default: + return position + sufixes[position % 10]; + } + } + + @Override + public String getPossesive(final String name) { + if ("You".equalsIgnoreCase(name)) { + return name + "r"; // to get "your" + } + return name.endsWith("s") ? name + "'" : name + "'s"; + } + + @Override + public String getPossessedObject(final String owner, final String object) { + return getPossesive(owner) + " " + object; + } + +} diff --git a/forge-core/src/main/java/forge/util/lang/LangGerman.java b/forge-core/src/main/java/forge/util/lang/LangGerman.java new file mode 100644 index 00000000000..27dc6d1fae0 --- /dev/null +++ b/forge-core/src/main/java/forge/util/lang/LangGerman.java @@ -0,0 +1,29 @@ +package forge.util.lang; + +import forge.util.Lang; + +public class LangGerman extends Lang { + + @Override + public String getOrdinal(final int position) { + if (position < 20) { + return position + "te"; + } + return position + "ste"; + } + + // TODO: Please update this when you modified lblYou in de-DE.properties + @Override + public String getPossesive(final String name) { + if ("You".equalsIgnoreCase(name)) { + return name + "r"; // to get "your" + } + return name.endsWith("s") ? name + "'" : name + "'s"; + } + + @Override + public String getPossessedObject(final String owner, final String object) { + return getPossesive(owner) + " " + object; + } + +} diff --git a/forge-core/src/main/java/forge/util/lang/LangItalian.java b/forge-core/src/main/java/forge/util/lang/LangItalian.java new file mode 100644 index 00000000000..3d5d43524a0 --- /dev/null +++ b/forge-core/src/main/java/forge/util/lang/LangItalian.java @@ -0,0 +1,26 @@ +package forge.util.lang; + +import forge.util.Lang; + +public class LangItalian extends Lang { + + @Override + public String getOrdinal(final int position) { + return position + "º"; + } + + // TODO: Please update this when you modified lblYou in it-IT.properties + @Override + public String getPossesive(final String name) { + if ("You".equalsIgnoreCase(name)) { + return name + "r"; // to get "your" + } + return name.endsWith("s") ? name + "'" : name + "'s"; + } + + @Override + public String getPossessedObject(final String owner, final String object) { + return getPossesive(owner) + " " + object; + } + +} diff --git a/forge-core/src/main/java/forge/util/lang/LangJapanese.java b/forge-core/src/main/java/forge/util/lang/LangJapanese.java new file mode 100644 index 00000000000..3fe6e87f67a --- /dev/null +++ b/forge-core/src/main/java/forge/util/lang/LangJapanese.java @@ -0,0 +1,22 @@ +package forge.util.lang; + +import forge.util.Lang; + +public class LangJapanese extends Lang { + + @Override + public String getOrdinal(final int position) { + return position + "番"; + } + + @Override + public String getPossesive(final String name) { + return name + "の"; + } + + @Override + public String getPossessedObject(final String owner, final String object) { + return getPossesive(owner) + object; + } + +} diff --git a/forge-core/src/main/java/forge/util/lang/LangSpanish.java b/forge-core/src/main/java/forge/util/lang/LangSpanish.java new file mode 100644 index 00000000000..f3d8d096937 --- /dev/null +++ b/forge-core/src/main/java/forge/util/lang/LangSpanish.java @@ -0,0 +1,26 @@ +package forge.util.lang; + +import forge.util.Lang; + +public class LangSpanish extends Lang { + + @Override + public String getOrdinal(final int position) { + return position + "º"; + } + + // TODO: Please update this when you modified lblYou in es-ES.properties + @Override + public String getPossesive(final String name) { + if ("You".equalsIgnoreCase(name)) { + return name + "r"; // to get "your" + } + return name.endsWith("s") ? name + "'" : name + "'s"; + } + + @Override + public String getPossessedObject(final String owner, final String object) { + return getPossesive(owner) + " " + object; + } + +} diff --git a/forge-game/src/main/java/forge/game/GameLogFormatter.java b/forge-game/src/main/java/forge/game/GameLogFormatter.java index 15d611d1414..8cb3a19091d 100644 --- a/forge-game/src/main/java/forge/game/GameLogFormatter.java +++ b/forge-game/src/main/java/forge/game/GameLogFormatter.java @@ -172,7 +172,7 @@ public class GameLogFormatter extends IGameEventVisitor.Base { @Override public GameLogEntry visit(GameEventTurnPhase ev) { Player p = ev.playerTurn; - return new GameLogEntry(GameLogEntryType.PHASE, ev.phaseDesc + Lang.getPossesive(p.getName()) + " " + ev.phase.nameForUi); + return new GameLogEntry(GameLogEntryType.PHASE, ev.phaseDesc + Lang.getInstance().getPossesive(p.getName()) + " " + ev.phase.nameForUi); } @Override diff --git a/forge-game/src/main/java/forge/game/ability/effects/DigEffect.java b/forge-game/src/main/java/forge/game/ability/effects/DigEffect.java index 7f4e29676fd..474726c08d8 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/DigEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/DigEffect.java @@ -46,7 +46,7 @@ public class DigEffect extends SpellAbilityEffect { } else { for (final Player p : tgtPlayers) { - sb.append(Lang.getPossesive(p.getName())).append(" "); + sb.append(Lang.getInstance().getPossesive(p.getName())).append(" "); } } sb.append("library."); diff --git a/forge-game/src/main/java/forge/game/ability/effects/RearrangeTopOfLibraryEffect.java b/forge-game/src/main/java/forge/game/ability/effects/RearrangeTopOfLibraryEffect.java index ef8046245f4..2048fb7ed28 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/RearrangeTopOfLibraryEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/RearrangeTopOfLibraryEffect.java @@ -37,7 +37,7 @@ public class RearrangeTopOfLibraryEffect extends SpellAbilityEffect { ret.append(numCards); ret.append(" cards of "); for (final Player p : tgtPlayers) { - ret.append(Lang.getPossesive(p.getName())); + ret.append(Lang.getInstance().getPossesive(p.getName())); ret.append(" & "); } ret.delete(ret.length() - 3, ret.length()); diff --git a/forge-game/src/main/java/forge/game/event/GameEventManaPool.java b/forge-game/src/main/java/forge/game/event/GameEventManaPool.java index 14b3b004001..003006ad4c8 100644 --- a/forge-game/src/main/java/forge/game/event/GameEventManaPool.java +++ b/forge-game/src/main/java/forge/game/event/GameEventManaPool.java @@ -30,6 +30,6 @@ public class GameEventManaPool extends GameEvent { */ @Override public String toString() { - return TextUtil.concatWithSpace(Lang.getPossesive(player.getName()),"mana pool", mode.toString(), "-", TextUtil.addSuffix(mana.toString()," ")); + return TextUtil.concatWithSpace(Lang.getInstance().getPossesive(player.getName()),"mana pool", mode.toString(), "-", TextUtil.addSuffix(mana.toString()," ")); } } diff --git a/forge-game/src/main/java/forge/game/event/GameEventPlayerLivesChanged.java b/forge-game/src/main/java/forge/game/event/GameEventPlayerLivesChanged.java index cce88d48ecb..7b303ead7ab 100644 --- a/forge-game/src/main/java/forge/game/event/GameEventPlayerLivesChanged.java +++ b/forge-game/src/main/java/forge/game/event/GameEventPlayerLivesChanged.java @@ -22,6 +22,6 @@ public class GameEventPlayerLivesChanged extends GameEvent { @Override public String toString() { - return TextUtil.concatWithSpace(Lang.getPossesive(player.getName()),"lives changed:", String.valueOf(oldLives),"->", String.valueOf(newLives)); + return TextUtil.concatWithSpace(Lang.getInstance().getPossesive(player.getName()),"lives changed:", String.valueOf(oldLives),"->", String.valueOf(newLives)); } } diff --git a/forge-game/src/main/java/forge/game/event/GameEventTurnPhase.java b/forge-game/src/main/java/forge/game/event/GameEventTurnPhase.java index 98f0e717702..e0b99b5ce49 100644 --- a/forge-game/src/main/java/forge/game/event/GameEventTurnPhase.java +++ b/forge-game/src/main/java/forge/game/event/GameEventTurnPhase.java @@ -27,7 +27,7 @@ public class GameEventTurnPhase extends GameEvent { @Override public String toString() { - String playerName = Lang.getPossesive(playerTurn.getName()); + String playerName = Lang.getInstance().getPossesive(playerTurn.getName()); return TextUtil.concatWithSpace(playerName,"turn,", phaseDesc+phase.nameForUi, "phase"); } } diff --git a/forge-game/src/main/java/forge/game/event/GameEventZone.java b/forge-game/src/main/java/forge/game/event/GameEventZone.java index a7d82daf366..fd9f5bd72f2 100644 --- a/forge-game/src/main/java/forge/game/event/GameEventZone.java +++ b/forge-game/src/main/java/forge/game/event/GameEventZone.java @@ -35,7 +35,7 @@ public class GameEventZone extends GameEvent { */ @Override public String toString() { - String owners = player == null ? "Game" : Lang.getPossesive(player.getName()); + String owners = player == null ? "Game" : Lang.getInstance().getPossesive(player.getName()); return card == null ? TextUtil.concatWithSpace(owners, zoneType.toString(), ":", mode.toString()) : TextUtil.concatWithSpace(owners, zoneType.toString(), ":", mode.toString(), card.toString() diff --git a/forge-game/src/main/java/forge/game/phase/PhaseType.java b/forge-game/src/main/java/forge/game/phase/PhaseType.java index f3e5e734957..8bfad8c67ab 100644 --- a/forge-game/src/main/java/forge/game/phase/PhaseType.java +++ b/forge-game/src/main/java/forge/game/phase/PhaseType.java @@ -3,23 +3,25 @@ package forge.game.phase; import com.google.common.collect.Lists; import org.apache.commons.lang3.StringUtils; +import forge.util.Localizer; + import java.util.*; public enum PhaseType { - UNTAP("Untap"), - UPKEEP("Upkeep"), - DRAW("Draw"), - MAIN1("Main, precombat", "Main1"), - COMBAT_BEGIN("Begin Combat", "BeginCombat"), - COMBAT_DECLARE_ATTACKERS("Declare Attackers"), - COMBAT_DECLARE_BLOCKERS("Declare Blockers"), - COMBAT_FIRST_STRIKE_DAMAGE("First Strike Damage"), - COMBAT_DAMAGE("Combat Damage"), - COMBAT_END("End Combat", "EndCombat"), - MAIN2("Main, postcombat", "Main2"), - END_OF_TURN("End of Turn"), - CLEANUP("Cleanup"); + UNTAP("lblUntapStep", "Untap"), + UPKEEP("lblUpkeepStep", "Upkeep"), + DRAW("lblDrawStep", "Draw"), + MAIN1("lblMainPhase1", "Main1"), + COMBAT_BEGIN("lblCombatBeginStep", "BeginCombat"), + COMBAT_DECLARE_ATTACKERS("lblCombatDeclareAttackersStep", "Declare Attackers"), + COMBAT_DECLARE_BLOCKERS("lblCombatDeclareBlockersStep", "Declare Blockers"), + COMBAT_FIRST_STRIKE_DAMAGE("lblCombatFirstStrikeDamageStep", "First Strike Damage"), + COMBAT_DAMAGE("lblCombatDamageStep", "Combat Damage"), + COMBAT_END("lblCombatEndStep", "EndCombat"), + MAIN2("lblMainPhase2", "Main2"), + END_OF_TURN("lblEndStep", "End of Turn"), + CLEANUP("lblCleanupStep", "Cleanup"); public static final List> PHASE_GROUPS = Arrays.asList( Arrays.asList(UNTAP, UPKEEP, DRAW), @@ -50,11 +52,8 @@ public enum PhaseType { public final String nameForUi; public final String nameForScripts; - PhaseType(String name) { - this(name, name); - } PhaseType(String name, String name_for_scripts) { - nameForUi = name; + nameForUi = Localizer.getInstance().getMessage(name); nameForScripts = name_for_scripts; } diff --git a/forge-game/src/main/java/forge/game/player/Player.java b/forge-game/src/main/java/forge/game/player/Player.java index 34ea7157c8b..7e9d2587458 100644 --- a/forge-game/src/main/java/forge/game/player/Player.java +++ b/forge-game/src/main/java/forge/game/player/Player.java @@ -215,7 +215,7 @@ public class Player extends GameEntity implements Comparable { if (!haveDuplicates) { return nameCandidate; } - nameCandidate = Lang.getOrdinal(i) + " " + originalName; + nameCandidate = Lang.getInstance().getOrdinal(i) + " " + originalName; } return nameCandidate; } @@ -3131,7 +3131,7 @@ public class Player extends GameEntity implements Comparable { } public static DetachedCardEffect createCompanionEffect(Game game, Card companion) { - final String name = Lang.getPossesive(companion.getName()) + " Companion Effect"; + final String name = Lang.getInstance().getPossesive(companion.getName()) + " Companion Effect"; DetachedCardEffect eff = new DetachedCardEffect(companion, name); String addToHandAbility = "Mode$ Continuous | EffectZone$ Command | Affected$ Card.YouOwn+EffectSource | AffectedZone$ Command | AddAbility$ MoveToHand"; @@ -3144,7 +3144,7 @@ public class Player extends GameEntity implements Comparable { } public static DetachedCardEffect createCommanderEffect(Game game, Card commander) { - final String name = Lang.getPossesive(commander.getName()) + " Commander Effect"; + final String name = Lang.getInstance().getPossesive(commander.getName()) + " Commander Effect"; DetachedCardEffect eff = new DetachedCardEffect(commander, name); if (game.getRules().hasAppliedVariant(GameType.Oathbreaker) && commander.getRules().canBeSignatureSpell()) { diff --git a/forge-game/src/main/java/forge/game/zone/PlayerZone.java b/forge-game/src/main/java/forge/game/zone/PlayerZone.java index 0360bf22a1c..4e25b35c68e 100644 --- a/forge-game/src/main/java/forge/game/zone/PlayerZone.java +++ b/forge-game/src/main/java/forge/game/zone/PlayerZone.java @@ -102,7 +102,7 @@ public class PlayerZone extends Zone { @Override public final String toString() { - return TextUtil.concatWithSpace(Lang.getPossesive(player.toString()), zoneType.toString()); + return TextUtil.concatWithSpace(Lang.getInstance().getPossesive(player.toString()), zoneType.toString()); } public CardCollectionView getCardsPlayerCanActivate(Player who) { diff --git a/forge-game/src/main/java/forge/util/MessageUtil.java b/forge-game/src/main/java/forge/util/MessageUtil.java index 2edc42ffafc..10db6860e03 100644 --- a/forge-game/src/main/java/forge/util/MessageUtil.java +++ b/forge-game/src/main/java/forge/util/MessageUtil.java @@ -14,7 +14,7 @@ public class MessageUtil { public static String formatMessage(String message, Player player, Object related) { if (related instanceof Player && message.indexOf("{player") >= 0) { String noun = mayBeYou(player, related); - message = TextUtil.fastReplace(TextUtil.fastReplace(message, "{player}", noun),"{player's}", Lang.getPossesive(noun)); + message = TextUtil.fastReplace(TextUtil.fastReplace(message, "{player}", noun),"{player's}", Lang.getInstance().getPossesive(noun)); } return message; } @@ -22,7 +22,7 @@ public class MessageUtil { public static String formatMessage(String message, PlayerView player, Object related) { if (related instanceof PlayerView && message.indexOf("{player") >= 0) { String noun = mayBeYou(player, related); - message = TextUtil.fastReplace(TextUtil.fastReplace(message, "{player}", noun),"{player's}", Lang.getPossesive(noun)); + message = TextUtil.fastReplace(TextUtil.fastReplace(message, "{player}", noun),"{player's}", Lang.getInstance().getPossesive(noun)); } return message; } @@ -48,7 +48,7 @@ public class MessageUtil { case FlipACoin: String flipper = StringUtils.capitalize(mayBeYou(player, target)); return sa.hasParam("NoCall") - ? Localizer.getInstance().getMessage("lblPlayerFlipComesUpValue", Lang.getPossesive(flipper), value) + ? Localizer.getInstance().getMessage("lblPlayerFlipComesUpValue", Lang.getInstance().getPossesive(flipper), value) : Localizer.getInstance().getMessage("lblPlayerActionFlip", flipper, Lang.joinVerb(flipper, value)); case Protection: return Localizer.getInstance().getMessage("lblPlayerChooseValue", choser, value); @@ -66,9 +66,9 @@ public class MessageUtil { } public static String mayBeYou(Player player, Object what) { - return what == null ? "(null)" : what == player ? "you" : what.toString(); + return what == null ? "(null)" : what == player ? Localizer.getInstance().getMessage("lblYou") : what.toString(); } public static String mayBeYou(PlayerView player, Object what) { - return what == null ? "(null)" : what == player ? "you" : what.toString(); + return what == null ? "(null)" : what == player ? Localizer.getInstance().getMessage("lblYou") : what.toString(); } } diff --git a/forge-gui-desktop/src/main/java/forge/screens/match/controllers/CCombat.java b/forge-gui-desktop/src/main/java/forge/screens/match/controllers/CCombat.java index ba7e30a7e87..6a6420a97ab 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/match/controllers/CCombat.java +++ b/forge-gui-desktop/src/main/java/forge/screens/match/controllers/CCombat.java @@ -81,7 +81,7 @@ public class CCombat implements ICDoc { if (defender instanceof CardView) { final PlayerView controller = ((CardView) defender).getController(); - display.append(Lang.getPossesive(controller.getName())).append(" "); + display.append(Lang.getInstance().getPossesive(controller.getName())).append(" "); } display.append(defender).append(" is attacked by:\n"); diff --git a/forge-gui/res/languages/de-DE.properties b/forge-gui/res/languages/de-DE.properties index 21553a2e522..c31337145df 100644 --- a/forge-gui/res/languages/de-DE.properties +++ b/forge-gui/res/languages/de-DE.properties @@ -1944,6 +1944,20 @@ lblRepeatAddCard=Wiederhole letztes Karten-hinzufügen lblRemoveFromGame=Entferne Karte aus dem Spiel lblRiggedRoll=Gezinkter Weltenwürfelwurf lblWalkTo=Weltenwandere zu +#PhaseType.java +lblUntapStep=Untap step +lblUpkeepStep=Upkeep step +lblDrawStep=Draw step +lblMainPhase1=Main phase, precombat +lblCombatBeginStep=Beginning of Combat Step +lblCombatDeclareAttackersStep=Declare Attackers Step +lblCombatDeclareBlockersStep=Declare Blockers Step +lblCombatFirstStrikeDamageStep=First Strike Damage Step +lblCombatDamageStep=Combat Damage Step +lblCombatEndStep=End of Combat Step +lblMainPhase2=Main phase, postcombat +lblEndStep=End step +lblCleanupStep=Cleanup step #ZoneType.java lblHandZone=Hand lblLibraryZone=Bibliothek @@ -2052,6 +2066,8 @@ lblPlayerChooseValue={0} wähle {1} lblPlayerVoteValue={0} stimme für {1} lblCardEffectValueIs=Der Wert von {0}s Effekt ist {1} lblCardEffectToTargetValueIs=Der Wert von {0}s Effekt für {1} ist {2} +# TODO: If below is changed, also need to modify LangGerman.getPossesive() function +lblYou=you #CardListChooser.java lblAreYouSureWantPickCard=Willst du wirklich "{0}" nehmen? lblSelectThisCardConfirm=Wähle diese Karte? diff --git a/forge-gui/res/languages/en-US.properties b/forge-gui/res/languages/en-US.properties index 6e545a0dc2f..14cd6ff0294 100644 --- a/forge-gui/res/languages/en-US.properties +++ b/forge-gui/res/languages/en-US.properties @@ -1944,6 +1944,20 @@ lblRepeatAddCard=Repeat Last Add Card lblRemoveFromGame=Remove Card from Game lblRiggedRoll=Rigged Planar Roll lblWalkTo=Planeswalk to +#PhaseType.java +lblUntapStep=Untap step +lblUpkeepStep=Upkeep step +lblDrawStep=Draw step +lblMainPhase1=Main phase, precombat +lblCombatBeginStep=Beginning of Combat Step +lblCombatDeclareAttackersStep=Declare Attackers Step +lblCombatDeclareBlockersStep=Declare Blockers Step +lblCombatFirstStrikeDamageStep=First Strike Damage Step +lblCombatDamageStep=Combat Damage Step +lblCombatEndStep=End of Combat Step +lblMainPhase2=Main phase, postcombat +lblEndStep=End step +lblCleanupStep=Cleanup step #ZoneType.java lblHandZone=hand lblLibraryZone=library @@ -2052,6 +2066,7 @@ lblPlayerChooseValue={0} choose {1} lblPlayerVoteValue={0} vote {1} lblCardEffectValueIs={0} effect''s value is {1} lblCardEffectToTargetValueIs={0} effect''s value for {1} is {2} +lblYou=you #CardListChooser.java lblAreYouSureWantPickCard=Are you sure you want to pick ''{0}'' ? lblSelectThisCardConfirm=Select this card? diff --git a/forge-gui/res/languages/es-ES.properties b/forge-gui/res/languages/es-ES.properties index c30a4550ac0..0a8f3b5066b 100644 --- a/forge-gui/res/languages/es-ES.properties +++ b/forge-gui/res/languages/es-ES.properties @@ -1942,6 +1942,20 @@ lblRepeatAddCard=Repetir añadir última carta lblRemoveFromGame=Quitar carta del juego lblRiggedRoll=Rollo Plano montado lblWalkTo=Planeswalk a +#PhaseType.java +lblUntapStep=Untap step +lblUpkeepStep=Upkeep step +lblDrawStep=Draw step +lblMainPhase1=Main phase, precombat +lblCombatBeginStep=Beginning of Combat Step +lblCombatDeclareAttackersStep=Declare Attackers Step +lblCombatDeclareBlockersStep=Declare Blockers Step +lblCombatFirstStrikeDamageStep=First Strike Damage Step +lblCombatDamageStep=Combat Damage Step +lblCombatEndStep=End of Combat Step +lblMainPhase2=Main phase, postcombat +lblEndStep=End step +lblCleanupStep=Cleanup step #ZoneType.java lblHandZone=mano lblLibraryZone=biblioteca @@ -2050,6 +2064,8 @@ lblPlayerChooseValue={0} elige {1} lblPlayerVoteValue={0} vota {1} lblCardEffectValueIs=El valor del efecto de {0} es {1} lblCardEffectToTargetValueIs=El valor del efecto de {0} para {1} es {2} +# TODO: If below is changed, also need to modify LangSpanish.getPossesive() function +lblYou=you #CardListChooser.java lblAreYouSureWantPickCard=¿Estás seguro de que quieres elegir ''{0}''? lblSelectThisCardConfirm=¿Selecciona esta carta? diff --git a/forge-gui/res/languages/it-IT.properties b/forge-gui/res/languages/it-IT.properties index d7a3a400dd1..996362fbc98 100644 --- a/forge-gui/res/languages/it-IT.properties +++ b/forge-gui/res/languages/it-IT.properties @@ -1944,6 +1944,20 @@ lblRepeatAddCard=Repeat Last Add Card lblRemoveFromGame=Remove Card from Game lblRiggedRoll=Rigged Planar Roll lblWalkTo=Planeswalk to +#PhaseType.java +lblUntapStep=Untap step +lblUpkeepStep=Upkeep step +lblDrawStep=Draw step +lblMainPhase1=Main phase, precombat +lblCombatBeginStep=Beginning of Combat Step +lblCombatDeclareAttackersStep=Declare Attackers Step +lblCombatDeclareBlockersStep=Declare Blockers Step +lblCombatFirstStrikeDamageStep=First Strike Damage Step +lblCombatDamageStep=Combat Damage Step +lblCombatEndStep=End of Combat Step +lblMainPhase2=Main phase, postcombat +lblEndStep=End step +lblCleanupStep=Cleanup step #ZoneType.java lblHandZone=hand lblLibraryZone=library @@ -2052,6 +2066,8 @@ lblPlayerChooseValue={0} choose {1} lblPlayerVoteValue={0} vote {1} lblCardEffectValueIs={0} effect''s value is {1} lblCardEffectToTargetValueIs={0} effect''s value for {1} is {2} +# TODO: If below is changed, also need to modify LangItalian.getPossesive() function +lblYou=you #CardListChooser.java lblAreYouSureWantPickCard=Are you sure you want to pick ''{0}'' ? lblSelectThisCardConfirm=Select this card? diff --git a/forge-gui/res/languages/ja-JP.properties b/forge-gui/res/languages/ja-JP.properties index d8ecbd405c9..73f7e02671b 100644 --- a/forge-gui/res/languages/ja-JP.properties +++ b/forge-gui/res/languages/ja-JP.properties @@ -337,10 +337,10 @@ lblTeam=チーム lblKeep=キープ lblYouAreGoingFirst=あなたが先攻です lblIsGoingFirst=が先攻です -lblYouAreGoing=あなたは後攻です +lblYouAreGoing=あなたの順番は lblMulligan=マリガン lblDoYouWantToKeepYourHand=手札をキープしますか? -lblReturnForLondon=ライブラリの一番下に %d枚カードを返してください +lblReturnForLondon=ライブラリの一番下に %d枚カードを戻してください lblOk=Ok lblReset=リセット lblAuto=自動 @@ -1158,7 +1158,7 @@ lblPriority=優先権 lblTurn=ターン lblPhase=フェイズ lblEmpty=なし -lbltoResolve=に対して解決する。 +lbltoResolve=つ解決中。 lblStormCount=ストームカウント #InputAttack.java lblCallBack=呼び戻す @@ -1304,9 +1304,9 @@ lblErrorEntityWithId=Error: Entity with ID lblNotFound=not found lblChooseAnnounceForCard={1}の{0}を選ぶ lblSacrifice=生け贄 -lblLookCardInPlayerZone={0}の{1}のカードを見る +lblLookCardInPlayerZone={0} {1}のカードを見る lblPlayerZone={0} {1} -lblActionFromPlayerDeck={1}のデッキから{0} +lblActionFromPlayerDeck={1}デッキから{0} #AbstractGuiGame.java lblConcedeCurrentGame=これは現在のゲームを投了し、負けます。とにかく投了しますか? lblConcedeTitle=ゲームを投了する? @@ -1384,24 +1384,24 @@ lblLogSurveiledToLibraryGraveyard={0}は諜報で {1}枚のカードをカード lblLogSurveiledToLibrary={0}は諜報で {1}枚のカードをカードをライブラリーのトップに置きました lblLogSurveiledToGraveyard={0}は諜報で {1}枚のカードを墓地に置きました lblLogCardAbilityFizzles={0}の能力が立ち消えしました -lblCast=唱える -lblTriggered=誘発された -lblActivated=起動された -lblLogPlayerActionObjectWitchTarget={3}を対象に{0} {1} {2} -lblLogPlayerActionObject={0} {1} {2} +lblCast=を唱えた +lblTriggered=が誘発された +lblActivated=を起動した +lblLogPlayerActionObjectWitchTarget={0}: {3}を対象に {2} {1} +lblLogPlayerActionObject={0}: {2} {1} lblLogPlayerChosenModeForCard={0}は {2}の {1}を選択しました。 lblLogPlayerHasRestoredControlThemself={0}は自身の制御が戻りました lblLogPlayerControlledTargetPlayer={0}は {1}によって制御されます lblDeathtouch=接死 lblAsM1M1Counters=同等の -1/-1カウンター lblRemovingNLoyaltyCounter={0}個忠誠カウンターを除去 -lblSourceDealsNDamageToDest={0}は {3}に対して {1}のダメージ({2})。 +lblSourceDealsNDamageToDest={0}は {3}に対して {1}点のダメージ({2})。 lblLogPlayerPlayedLand={0}が {1}を置きました lblLogTurnNOwnerByPlayer=ターン{0}({1}) lblLogAsPoisonCounters=(同等の毒カウンター) lblCombat=戦闘 lblNonCombat=非戦闘 -lblLogSourceDealsNDamageOfTypeToDest={0}は {3}{4}に対して{1} {2}のダメージを与えました。 +lblLogSourceDealsNDamageOfTypeToDest={0}は {3}{4}に対して{1} {2}点のダメージを与えました。 lblLogPlayerReceivesNPosionCounterFrom={0}は {2}から {1}個毒カウンターを貰いました。 lblLogPlayerAssignedAttackerToAttackTarget={0}は {1}を {2}の攻撃に指定しました。 lblLogPlayerDidntBlockAttacker={0}が {1}をブロックしていません。 @@ -1736,14 +1736,14 @@ lblChooseColorReplace=置き換える色を表す単語を選ぶ lblChooseNewColor=別の色の単語を選ぶ #ChangeZoneEffect.java lblDoYouWantMoveTargetFromOriToDest={0}を {1}から {2}へ移動しますか? -lblPutThatCardFromPlayerOriginToDestination=カードを {0}の {1}から {2}へ移動します -lblSearchPlayerZoneConfirm={0}の {1}を探しますか? +lblPutThatCardFromPlayerOriginToDestination=カードを {0} {1}から {2}へ移動します +lblSearchPlayerZoneConfirm={0} {1}を探しますか? lblCardMatchSearchingTypeInAlternateZones=枚もう一つの領域のカードが探すタイプと一致します。 lblLookingCardIn=カードを見る lblDoYouWantPlayCard={0}をプレイしますか? -lblSelectCardFromPlayerZone={0}の {1}から 1枚のカードを選ぶ -lblSelectUpToNumCardFromPlayerZone={1}の {2}から最大 {0}枚のカードを選ぶ -lblSelectCardsFromPlayerZone={0}の {1}からカードを選ぶ +lblSelectCardFromPlayerZone={0} {1}から 1枚のカードを選ぶ +lblSelectUpToNumCardFromPlayerZone={1} {2}から最大 {0}枚のカードを選ぶ +lblSelectCardsFromPlayerZone={0} {1}からカードを選ぶ lblCancelSearchUpToSelectNumCards=探しを中止しますか? あと {0}枚までカードを選びます。 #ChangeZoneAllEffect.java lblMoveTargetFromOriginToDestination={0}を {1}から {2}へ移動しますか? @@ -1754,7 +1754,7 @@ lblTotalPowerNum=パワーの合計:{0} lblCancelChooseConfirm=選びを中止しますか? #ChooseCardNameEffect.java lblChooseACardName=カード名 1つを選ぶ -lblChooseASpecificCard={0}のカード名 1つを選ぶ +lblChooseASpecificCard={0}カード名 1つを選ぶ lblPlayerPickedChosen={0}が {1}を選択した #ChooseColorEffect.java lblChooseAColor=色 1色を選ぶ @@ -1944,6 +1944,20 @@ lblRepeatAddCard=Repeat Last Add Card lblRemoveFromGame=Remove Card from Game lblRiggedRoll=Rigged Planar Roll lblWalkTo=Planeswalk to +#PhaseType.java +lblUntapStep=アンタップ・ステップ +lblUpkeepStep=アップキープ・ステップ +lblDrawStep=ドロー・ステップ +lblMainPhase1=戦闘前メイン・フェイズ +lblCombatBeginStep=戦闘開始ステップ +lblCombatDeclareAttackersStep=攻撃クリーチャー指定ステップ +lblCombatDeclareBlockersStep=ブロック・クリーチャー指定ステップ +lblCombatFirstStrikeDamageStep=先制戦闘ダメージ・ステップ +lblCombatDamageStep=通常戦闘ダメージ・ステップ +lblCombatEndStep=戦闘終了ステップ +lblMainPhase2=戦闘後メイン・フェイズ +lblEndStep=終了ステップ +lblCleanupStep=クリンナップ・ステップ #ZoneType.java lblHandZone=手札 lblLibraryZone=ライブラリー @@ -2052,6 +2066,7 @@ lblPlayerChooseValue={0}は{1}を選択します lblPlayerVoteValue={0}は{1}票を投票した lblCardEffectValueIs={0}の効果の値は{1}です lblCardEffectToTargetValueIs={1}の{0}効果の値は{2}です +lblYou=あなた #CardListChooser.java lblAreYouSureWantPickCard=「{0}」選択してもいいですか? lblSelectThisCardConfirm=このカードを選択しますか? diff --git a/forge-gui/res/languages/zh-CN.properties b/forge-gui/res/languages/zh-CN.properties index b9cee0aa2ac..7b132ab2843 100644 --- a/forge-gui/res/languages/zh-CN.properties +++ b/forge-gui/res/languages/zh-CN.properties @@ -336,7 +336,7 @@ lblTeam=团队 lblKeep=保留 lblYouAreGoingFirst=你先手 lblIsGoingFirst=是先手 -lblYouAreGoing=你将 +lblYouAreGoing=你是 lblMulligan=调度 lblDoYouWantToKeepYourHand=你想保留这个手牌吗? lblReturnForLondon=放回%d张牌到牌库底 @@ -1942,6 +1942,20 @@ lblRepeatAddCard=重复上一张添加的牌 lblRemoveFromGame=从游戏中删除牌 lblRiggedRoll=触发时空骰 lblWalkTo=时空换入 +#PhaseType.java +lblUntapStep=Untap step +lblUpkeepStep=Upkeep step +lblDrawStep=Draw step +lblMainPhase1=Main phase, precombat +lblCombatBeginStep=Beginning of Combat Step +lblCombatDeclareAttackersStep=Declare Attackers Step +lblCombatDeclareBlockersStep=Declare Blockers Step +lblCombatFirstStrikeDamageStep=First Strike Damage Step +lblCombatDamageStep=Combat Damage Step +lblCombatEndStep=End of Combat Step +lblMainPhase2=Main phase, postcombat +lblEndStep=End step +lblCleanupStep=Cleanup step #ZoneType.java lblHandZone=手牌 lblLibraryZone=牌库 @@ -2050,6 +2064,7 @@ lblPlayerChooseValue={0}选择{1} lblPlayerVoteValue={0}投票给{1} lblCardEffectValueIs={0}效应的值为{1} lblCardEffectToTargetValueIs={0}对{1}的影响的值为{2} +lblYou=你 #CardListChooser.java lblAreYouSureWantPickCard=确定要选择''{0}''吗? lblSelectThisCardConfirm=选择这张牌? diff --git a/forge-gui/src/main/java/forge/control/FControlGameEventHandler.java b/forge-gui/src/main/java/forge/control/FControlGameEventHandler.java index d9a8ba3be7c..d07e5a7c9b7 100644 --- a/forge-gui/src/main/java/forge/control/FControlGameEventHandler.java +++ b/forge-gui/src/main/java/forge/control/FControlGameEventHandler.java @@ -198,7 +198,7 @@ public class FControlGameEventHandler extends IGameEventVisitor.Base { final List options = Lists.newArrayList(); for (final Entry kv : ev.cards.entries()) { //use fake card so real cards appear with proper formatting - final CardView fakeCard = new CardView(-1, null, " -- From " + Lang.getPossesive(kv.getKey().getName()) + " deck --"); + final CardView fakeCard = new CardView(-1, null, " -- From " + Lang.getInstance().getPossesive(kv.getKey().getName()) + " deck --"); options.add(fakeCard); options.add(kv.getValue().getView()); } diff --git a/forge-gui/src/main/java/forge/match/input/InputConfirmMulligan.java b/forge-gui/src/main/java/forge/match/input/InputConfirmMulligan.java index 24e2a6a1d19..e9ed8371e0b 100644 --- a/forge-gui/src/main/java/forge/match/input/InputConfirmMulligan.java +++ b/forge-gui/src/main/java/forge/match/input/InputConfirmMulligan.java @@ -67,7 +67,7 @@ public class InputConfirmMulligan extends InputSyncronizedBase { } else { sb.append(startingPlayer.getName()).append(" ").append(localizer.getMessage("lblIsGoingFirst")).append(".\n"); - sb.append(player).append(", ").append(localizer.getMessage("lblYouAreGoing")).append(" ").append(Lang.getOrdinal(game.getPosition(player, startingPlayer))).append(".\n\n"); + sb.append(player).append(", ").append(localizer.getMessage("lblYouAreGoing")).append(" ").append(Lang.getInstance().getOrdinal(game.getPosition(player, startingPlayer))).append(".\n\n"); } getController().getGui().updateButtons(getOwner(), localizer.getMessage("lblKeep"), localizer.getMessage("lblMulligan"), true, true, true); diff --git a/forge-gui/src/main/java/forge/model/FModel.java b/forge-gui/src/main/java/forge/model/FModel.java index 951a043f8bc..68a53264c9b 100644 --- a/forge-gui/src/main/java/forge/model/FModel.java +++ b/forge-gui/src/main/java/forge/model/FModel.java @@ -52,6 +52,7 @@ import forge.quest.data.QuestPreferences; import forge.tournament.TournamentData; import forge.util.CardTranslation; import forge.util.FileUtil; +import forge.util.Lang; import forge.util.Localizer; import forge.util.storage.IStorage; import forge.util.storage.StorageBase; @@ -126,6 +127,7 @@ public final class FModel { throw new RuntimeException(exn); } + Lang.createInstance(FModel.getPreferences().getPref(FPref.UI_LANGUAGE)); Localizer.getInstance().initialize(FModel.getPreferences().getPref(FPref.UI_LANGUAGE), ForgeConstants.LANG_DIR); final ProgressObserver progressBarBridge = (progressBar == null) ? diff --git a/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java b/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java index 5b02178ff66..201f0d30ba8 100644 --- a/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java +++ b/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java @@ -1874,7 +1874,7 @@ public class PlayerControllerHuman extends PlayerController implements IGameCont @Override public void revealAnte(final String message, final Multimap removedAnteCards) { for (final Player p : removedAnteCards.keySet()) { - getGui().reveal(localizer.getMessage("lblActionFromPlayerDeck", message, Lang.getPossessedObject(MessageUtil.mayBeYou(player, p), "")), + getGui().reveal(localizer.getMessage("lblActionFromPlayerDeck", message, Lang.getInstance().getPossessedObject(MessageUtil.mayBeYou(player, p), "")), ImmutableList.copyOf(removedAnteCards.get(p))); } }