From 043b789da1859c3a35db1f2131f9ae389d2d94d5 Mon Sep 17 00:00:00 2001
From: ramollia <@>
Date: Sat, 4 Oct 2025 22:57:12 +0200
Subject: [PATCH] readd: localization
---
.idea/resourceBundles.xml | 18 +-
app/src/main/java/org/toop/app/App.java | 5 +-
.../java/org/toop/app/events/AppEvents.java | 2 -
.../main/java/org/toop/app/layer/Layer.java | 13 +-
.../toop/app/layer/layers/CreditsLayer.java | 25 +--
.../org/toop/app/layer/layers/GameLayer.java | 3 +-
.../org/toop/app/layer/layers/MainLayer.java | 11 +-
.../app/layer/layers/MultiplayerLayer.java | 25 +--
.../toop/app/layer/layers/OptionsLayer.java | 41 +++--
.../org/toop/app/layer/layers/QuitLayer.java | 10 +-
.../java/org/toop/app/menu/CreditsMenu.java | 100 ----------
.../org/toop/app/menu/GameSelectMenu.java | 66 -------
.../main/java/org/toop/app/menu/MainMenu.java | 69 -------
app/src/main/java/org/toop/app/menu/Menu.java | 51 -----
.../java/org/toop/app/menu/OptionsMenu.java | 174 ------------------
.../java/org/toop/app/menu/game/GameMenu.java | 127 -------------
.../main/java/org/toop/local/AppContext.java | 34 ++--
.../localization/localization_de.properties | 78 ++++----
.../localization/localization_en.properties | 40 ++++
.../localization_en_US.properties | 39 ----
.../localization/localization_es.properties | 78 ++++----
.../localization/localization_fr.properties | 78 ++++----
.../localization/localization_it.properties | 79 ++++----
.../localization/localization_nl.properties | 78 ++++----
.../localization/localization_zh.properties | 90 ++++-----
app/src/main/resources/assets/style/quit.css | 2 +-
26 files changed, 380 insertions(+), 956 deletions(-)
delete mode 100644 app/src/main/java/org/toop/app/menu/CreditsMenu.java
delete mode 100644 app/src/main/java/org/toop/app/menu/GameSelectMenu.java
delete mode 100644 app/src/main/java/org/toop/app/menu/MainMenu.java
delete mode 100644 app/src/main/java/org/toop/app/menu/Menu.java
delete mode 100644 app/src/main/java/org/toop/app/menu/OptionsMenu.java
delete mode 100644 app/src/main/java/org/toop/app/menu/game/GameMenu.java
create mode 100644 app/src/main/resources/assets/localization/localization_en.properties
delete mode 100644 app/src/main/resources/assets/localization/localization_en_US.properties
diff --git a/.idea/resourceBundles.xml b/.idea/resourceBundles.xml
index 362dcdf..328097e 100644
--- a/.idea/resourceBundles.xml
+++ b/.idea/resourceBundles.xml
@@ -1,8 +1,14 @@
+
+
+
+
+
+
+
-
@@ -11,5 +17,15 @@
localization
+
+
+
+
+
+
+
+
+ localization
+
\ No newline at end of file
diff --git a/app/src/main/java/org/toop/app/App.java b/app/src/main/java/org/toop/app/App.java
index 9646f46..83c1626 100644
--- a/app/src/main/java/org/toop/app/App.java
+++ b/app/src/main/java/org/toop/app/App.java
@@ -5,6 +5,7 @@ import org.toop.app.layer.layers.MainLayer;
import org.toop.app.layer.layers.QuitLayer;
import org.toop.framework.asset.ResourceManager;
import org.toop.framework.asset.resources.CssAsset;
+import org.toop.local.AppContext;
import javafx.application.Application;
import javafx.scene.Scene;
@@ -34,7 +35,7 @@ public final class App extends Application {
final Scene scene = new Scene(root);
scene.getStylesheets().add(ResourceManager.get(CssAsset.class, "app.css").getUrl());
- stage.setTitle("pism");
+ stage.setTitle(AppContext.getString("appTitle"));
stage.setWidth(1080);
stage.setHeight(720);
@@ -100,6 +101,8 @@ public final class App extends Application {
}
public static void reloadAll() {
+ stage.setTitle(AppContext.getString("appTitle"));
+
for (final Layer layer : stack) {
layer.reload();
}
diff --git a/app/src/main/java/org/toop/app/events/AppEvents.java b/app/src/main/java/org/toop/app/events/AppEvents.java
index 00a1d4d..a982290 100644
--- a/app/src/main/java/org/toop/app/events/AppEvents.java
+++ b/app/src/main/java/org/toop/app/events/AppEvents.java
@@ -5,6 +5,4 @@ import org.toop.framework.eventbus.events.EventsBase;
public class AppEvents extends EventsBase {
public record OnNodeHover() implements EventWithoutSnowflake {}
-
- public record OnLanguageChange(String language) implements EventWithoutSnowflake {}
}
\ No newline at end of file
diff --git a/app/src/main/java/org/toop/app/layer/Layer.java b/app/src/main/java/org/toop/app/layer/Layer.java
index 695f420..263220c 100644
--- a/app/src/main/java/org/toop/app/layer/Layer.java
+++ b/app/src/main/java/org/toop/app/layer/Layer.java
@@ -12,22 +12,17 @@ public abstract class Layer {
protected StackPane layer;
protected Region background;
- protected Layer(String cssFile, String backgroundCssClass) {
+ protected Layer(String cssFile) {
layer = new StackPane();
- layer.setPickOnBounds(false);
layer.getStylesheets().add(ResourceManager.get(CssAsset.class, cssFile).getUrl());
background = new Region();
+ background.getStyleClass().add("background");
background.setPrefSize(Double.MAX_VALUE, Double.MAX_VALUE);
- background.getStyleClass().add(backgroundCssClass);
layer.getChildren().addLast(background);
}
- protected Layer(String cssFile) {
- this(cssFile, "background");
- }
-
protected void addContainer(Container container, Pos position, int xOffset, int yOffset, int widthPercent, int heightPercent) {
StackPane.setAlignment(container.getContainer(), position);
@@ -72,9 +67,5 @@ public abstract class Layer {
return layer;
}
- public Region getBackground() {
- return background;
- }
-
public abstract void reload();
}
\ No newline at end of file
diff --git a/app/src/main/java/org/toop/app/layer/layers/CreditsLayer.java b/app/src/main/java/org/toop/app/layer/layers/CreditsLayer.java
index 4b2a5dd..b6f3852 100644
--- a/app/src/main/java/org/toop/app/layer/layers/CreditsLayer.java
+++ b/app/src/main/java/org/toop/app/layer/layers/CreditsLayer.java
@@ -5,6 +5,7 @@ import org.toop.app.layer.Container;
import org.toop.app.layer.Layer;
import org.toop.app.layer.containers.HorizontalContainer;
import org.toop.app.layer.containers.VerticalContainer;
+import org.toop.local.AppContext;
import javafx.animation.PauseTransition;
import javafx.animation.TranslateTransition;
@@ -14,17 +15,6 @@ import javafx.util.Duration;
public final class CreditsLayer extends Layer {
private final int lineHeight = 100;
- private final String[] credits = {
- "Scrum Master: Stef",
- "Product Owner: Omar",
- "Merge Commander: Bas",
- "Localization: Ticho",
- "AI: Michiel",
- "Developers: Michiel, Bas, Stef, Omar, Ticho",
- "Moral Support: Wesley (voor 1 week)",
- "OpenGL: Omar"
- };
-
CreditsLayer() {
super("credits.css");
reload();
@@ -34,6 +24,17 @@ public final class CreditsLayer extends Layer {
public void reload() {
popAll();
+ final String[] credits = {
+ AppContext.getString("scrumMaster") + ": Stef",
+ AppContext.getString("productOwner") + ": Omar",
+ AppContext.getString("mergeCommander") + ": Bas",
+ AppContext.getString("localization") + ": Ticho",
+ AppContext.getString("ai") + ": Michiel",
+ AppContext.getString("developers") + ": Michiel, Bas, Stef, Omar, Ticho",
+ AppContext.getString("moralSupport") + ": Wesley",
+ AppContext.getString("opengl") + ": Omar"
+ };
+
final Container creditsContainer = new HorizontalContainer(0);
final Container animatedContainer = new VerticalContainer("animated_credits_container", lineHeight);
@@ -44,7 +45,7 @@ public final class CreditsLayer extends Layer {
}
final Container controlContainer = new VerticalContainer(5);
- controlContainer.addButton("Back", () -> {
+ controlContainer.addButton(AppContext.getString("back"), () -> {
App.activate(new MainLayer());
});
diff --git a/app/src/main/java/org/toop/app/layer/layers/GameLayer.java b/app/src/main/java/org/toop/app/layer/layers/GameLayer.java
index 53cca28..ac9daa2 100644
--- a/app/src/main/java/org/toop/app/layer/layers/GameLayer.java
+++ b/app/src/main/java/org/toop/app/layer/layers/GameLayer.java
@@ -4,6 +4,7 @@ import org.toop.app.App;
import org.toop.app.layer.Container;
import org.toop.app.layer.Layer;
import org.toop.app.layer.containers.VerticalContainer;
+import org.toop.local.AppContext;
import javafx.geometry.Pos;
@@ -19,7 +20,7 @@ public class GameLayer extends Layer {
final Container controlContainer = new VerticalContainer(5);
- controlContainer.addButton("Back", () -> {
+ controlContainer.addButton(AppContext.getString("back"), () -> {
App.activate(new MainLayer());
});
diff --git a/app/src/main/java/org/toop/app/layer/layers/MainLayer.java b/app/src/main/java/org/toop/app/layer/layers/MainLayer.java
index ae5fedf..9f97970 100644
--- a/app/src/main/java/org/toop/app/layer/layers/MainLayer.java
+++ b/app/src/main/java/org/toop/app/layer/layers/MainLayer.java
@@ -6,6 +6,7 @@ import org.toop.app.layer.Layer;
import org.toop.app.layer.containers.VerticalContainer;
import org.toop.game.othello.Othello;
import org.toop.game.tictactoe.TicTacToe;
+import org.toop.local.AppContext;
import javafx.geometry.Pos;
@@ -21,25 +22,25 @@ public final class MainLayer extends Layer {
final Container gamesContainer = new VerticalContainer(5);
- gamesContainer.addButton("Tic Tac Toe", () -> {
+ gamesContainer.addButton(AppContext.getString("tictactoe"), () -> {
App.activate(new MultiplayerLayer());
});
- gamesContainer.addButton("Othello", () -> {
+ gamesContainer.addButton(AppContext.getString("othello"), () -> {
App.activate(new MultiplayerLayer());
});
final Container controlContainer = new VerticalContainer(5);
- controlContainer.addButton("Credits", () -> {
+ controlContainer.addButton(AppContext.getString("credits"), () -> {
App.activate(new CreditsLayer());
});
- controlContainer.addButton("Options", () -> {
+ controlContainer.addButton(AppContext.getString("options"), () -> {
App.activate(new OptionsLayer());
});
- controlContainer.addButton("Quit", () -> {
+ controlContainer.addButton(AppContext.getString("quit"), () -> {
App.quitPopup();
});
diff --git a/app/src/main/java/org/toop/app/layer/layers/MultiplayerLayer.java b/app/src/main/java/org/toop/app/layer/layers/MultiplayerLayer.java
index dd30ba1..0402f1d 100644
--- a/app/src/main/java/org/toop/app/layer/layers/MultiplayerLayer.java
+++ b/app/src/main/java/org/toop/app/layer/layers/MultiplayerLayer.java
@@ -6,6 +6,7 @@ import org.toop.app.layer.Layer;
import org.toop.app.layer.containers.HorizontalContainer;
import org.toop.app.layer.containers.VerticalContainer;
import org.toop.game.TurnBasedGame;
+import org.toop.local.AppContext;
import javafx.geometry.Pos;
@@ -34,7 +35,7 @@ public final class MultiplayerLayer extends Layer {
final Container mainContainer = new VerticalContainer(5);
- mainContainer.addToggle("Local", "Server", !isConnectionLocal, (server) -> {
+ mainContainer.addToggle(AppContext.getString("local"), AppContext.getString("server"), !isConnectionLocal, (server) -> {
isConnectionLocal = !server;
reload();
});
@@ -54,56 +55,56 @@ public final class MultiplayerLayer extends Layer {
playersContainer.addContainer(player2Container, true);
if (isConnectionLocal) {
- mainContainer.addButton("Start", () -> {
+ mainContainer.addButton(AppContext.getString("start"), () -> {
});
} else {
- mainContainer.addButton("Connect", () -> {
+ mainContainer.addButton(AppContext.getString("connect"), () -> {
});
}
- player1Container.addToggle("Human", "Computer", !isPlayer1Human, (computer) -> {
+ player1Container.addToggle(AppContext.getString("human"), AppContext.getString("computer"), !isPlayer1Human, (computer) -> {
isPlayer1Human = !computer;
reload();
});
if (isPlayer1Human) {
- player1Container.addText("Player name", true);
+ player1Container.addText(AppContext.getString("playerName"), true);
player1Container.addInput(player1Name, (name) -> {
player1Name = name;
});
} else {
- player1Container.addText("Computer difficulty", true);
+ player1Container.addText(AppContext.getString("computerDifficulty"), true);
player1Container.addSlider(5, computer1Difficulty, (difficulty) -> {
computer1Difficulty = difficulty;
});
}
if (isConnectionLocal) {
- player2Container.addToggle("Human", "Computer", !isPlayer2Human, (computer) -> {
+ player2Container.addToggle(AppContext.getString("human"), AppContext.getString("computer"), !isPlayer2Human, (computer) -> {
isPlayer2Human = !computer;
reload();
});
if (isPlayer2Human) {
- player2Container.addText("Player name", true);
+ player2Container.addText(AppContext.getString("playerName"), true);
player2Container.addInput(player2Name, (name) -> {
player2Name = name;
});
} else {
- player2Container.addText("Computer difficulty", true);
+ player2Container.addText(AppContext.getString("computerDifficulty"), true);
player2Container.addSlider(5, computer2Difficulty, (difficulty) -> {
computer2Difficulty = difficulty;
});
}
} else {
- player2Container.addText("Server IP", true);
+ player2Container.addText(AppContext.getString("serverIP"), true);
player2Container.addInput(serverIP, (ip) -> {
serverIP = ip;
});
player2Container.addSeparator(true);
- player2Container.addText("Server Port", true);
+ player2Container.addText(AppContext.getString("serverPort"), true);
player2Container.addInput(serverPort, (port) -> {
serverPort = port;
});
@@ -111,7 +112,7 @@ public final class MultiplayerLayer extends Layer {
final Container controlContainer = new VerticalContainer(5);
- controlContainer.addButton("Back", () -> {
+ controlContainer.addButton(AppContext.getString("back"), () -> {
App.activate(new MainLayer());
});
diff --git a/app/src/main/java/org/toop/app/layer/layers/OptionsLayer.java b/app/src/main/java/org/toop/app/layer/layers/OptionsLayer.java
index f617f66..4f7dce6 100644
--- a/app/src/main/java/org/toop/app/layer/layers/OptionsLayer.java
+++ b/app/src/main/java/org/toop/app/layer/layers/OptionsLayer.java
@@ -4,8 +4,6 @@ import org.toop.app.App;
import org.toop.app.layer.Container;
import org.toop.app.layer.Layer;
import org.toop.app.layer.containers.VerticalContainer;
-import org.toop.framework.asset.ResourceManager;
-import org.toop.framework.asset.resources.LocalizationAsset;
import org.toop.framework.audio.events.AudioEvents;
import org.toop.framework.eventbus.EventFlow;
import org.toop.local.AppContext;
@@ -16,9 +14,6 @@ import javafx.scene.control.ChoiceBox;
import java.util.Locale;
public final class OptionsLayer extends Layer {
- private Locale currentLocale = AppContext.getLocale();
- private LocalizationAsset locale = ResourceManager.get("localization");
-
private static int currentVolume = 25;
private static boolean isWindowed = true;
@@ -32,20 +27,22 @@ public final class OptionsLayer extends Layer {
popAll();
final Container optionsContainer = new VerticalContainer(5);
- optionsContainer.addText("Language", false);
+ optionsContainer.addText(AppContext.getString("language"), false);
addLanguageBox(optionsContainer);
optionsContainer.addSeparator(true);
- optionsContainer.addText("Volume", false);
+
+ optionsContainer.addText(AppContext.getString("volume"), false);
addVolumeSlider(optionsContainer);
optionsContainer.addSeparator(true);
+
addFullscreenToggle(optionsContainer);
final Container mainContainer = new VerticalContainer(50);
- mainContainer.addText("Options", false);
+ mainContainer.addText(AppContext.getString("options"), false);
mainContainer.addContainer(optionsContainer, true);
final Container controlContainer = new VerticalContainer(5);
- controlContainer.addButton("Back", () -> {
+ controlContainer.addButton(AppContext.getString("back"), () -> {
App.activate(new MainLayer());
});
@@ -54,24 +51,34 @@ public final class OptionsLayer extends Layer {
}
private void addLanguageBox(Container container) {
+ assert AppContext.getLocalization() != null;
+
final ChoiceBox languageBox = container.addChoiceBox((locale) -> {
- if (locale == currentLocale) {
+ if (locale == AppContext.getLocale()) {
return;
}
AppContext.setLocale(locale);
-
- this.currentLocale = AppContext.getLocale();
- this.locale = ResourceManager.get("localization");
-
App.reloadAll();
});
- for (final Locale localeFile : locale.getAvailableLocales()) {
+ for (final Locale localeFile : AppContext.getLocalization().getAvailableLocales()) {
languageBox.getItems().add(localeFile);
}
- languageBox.setValue(currentLocale);
+ languageBox.setConverter(new javafx.util.StringConverter<>() {
+ @Override
+ public String toString(Locale locale) {
+ return AppContext.getString(locale.getDisplayName().toLowerCase());
+ }
+
+ @Override
+ public Locale fromString(String string) {
+ return null;
+ }
+ });
+
+ languageBox.setValue(AppContext.getLocale());
}
private void addVolumeSlider(Container container) {
@@ -82,7 +89,7 @@ public final class OptionsLayer extends Layer {
}
private void addFullscreenToggle(Container container) {
- container.addToggle("Windowed", "Fullscreen", !isWindowed, (fullscreen) -> {
+ container.addToggle(AppContext.getString("windowed"), AppContext.getString("fullscreen"), !isWindowed, (fullscreen) -> {
isWindowed = !fullscreen;
App.setFullscreen(fullscreen);
});
diff --git a/app/src/main/java/org/toop/app/layer/layers/QuitLayer.java b/app/src/main/java/org/toop/app/layer/layers/QuitLayer.java
index 2c56c21..13fc367 100644
--- a/app/src/main/java/org/toop/app/layer/layers/QuitLayer.java
+++ b/app/src/main/java/org/toop/app/layer/layers/QuitLayer.java
@@ -5,12 +5,13 @@ import org.toop.app.layer.Container;
import org.toop.app.layer.Layer;
import org.toop.app.layer.containers.HorizontalContainer;
import org.toop.app.layer.containers.VerticalContainer;
+import org.toop.local.AppContext;
import javafx.geometry.Pos;
public final class QuitLayer extends Layer {
public QuitLayer() {
- super("quit.css", "quit_background");
+ super("quit.css");
reload();
}
@@ -19,18 +20,17 @@ public final class QuitLayer extends Layer {
popAll();
final Container mainContainer = new VerticalContainer(30);
-
- mainContainer.addText("Are you sure?", false);
+ mainContainer.addText(AppContext.getString("quitSure"), false);
final Container controlContainer = new HorizontalContainer(30);
mainContainer.addContainer(controlContainer, false);
- controlContainer.addButton("Yes", () -> {
+ controlContainer.addButton(AppContext.getString("yes"), () -> {
App.quit();
});
- controlContainer.addButton("No", () -> {
+ controlContainer.addButton(AppContext.getString("no"), () -> {
App.pop();
});
diff --git a/app/src/main/java/org/toop/app/menu/CreditsMenu.java b/app/src/main/java/org/toop/app/menu/CreditsMenu.java
deleted file mode 100644
index 3817d69..0000000
--- a/app/src/main/java/org/toop/app/menu/CreditsMenu.java
+++ /dev/null
@@ -1,100 +0,0 @@
-// package org.toop.app.menu;
-//
-// import javafx.animation.Interpolator;
-// import javafx.animation.PauseTransition;
-// import javafx.animation.TranslateTransition;
-// import javafx.application.Platform;
-// import javafx.geometry.Pos;
-// import javafx.scene.control.Button;
-// import javafx.scene.layout.Region;
-// import javafx.scene.layout.StackPane;
-// import javafx.scene.layout.VBox;
-// import javafx.util.Duration;
-// import org.toop.app.App;
-// import org.toop.framework.asset.ResourceManager;
-// import org.toop.framework.asset.resources.LocalizationAsset;
-// import org.toop.framework.eventbus.EventFlow;
-// import org.toop.local.AppContext;
-// import org.toop.local.LocalizationEvents;
-//
-// import java.util.Locale;
-//
-// public final class CreditsMenu extends Menu { ;
-// private Locale currentLocale = AppContext.getLocale();
-// private LocalizationAsset loc = ResourceManager.get("localization_en_us.properties");
-//
-// String[] credits = {
-// "Scrum Master: Stef",
-// "Product Owner: Omar",
-// "Merge Commander: Bas",
-// "Localization: Ticho",
-// "AI: Michiel",
-// "Developers: Michiel, Bas, Stef, Omar, Ticho",
-// "Moral Support: Wesley (voor 1 week)",
-// "OpenGL: Omar"
-// };
-//
-// double scrollDuration = 20.0;
-// double lineHeight = 40.0;
-//
-// public CreditsMenu() {
-// VBox creditsBox = new VBox(lineHeight / 2);
-// for (int i = credits.length - 1; i >= 0; i--) {
-// creditsBox.getChildren().add(createText(credits[i]));
-// creditsBox.setAlignment(Pos.CENTER);
-// }
-//
-// Button exit = new Button("<");
-// exit.setStyle(
-// "-fx-background-color: transparent;" +
-// "-fx-text-fill: white;" +
-// "-fx-font-size: 72px;" +
-// "-fx-padding: 10 20 10 20;"
-// );
-// exit.setOnAction(e -> App.pop());
-//
-// final Region background = createBackground();
-// StackPane.setAlignment(exit, Pos.TOP_LEFT);
-// pane = new StackPane(background, creditsBox, exit);
-//
-// Platform.runLater(() -> playCredits(creditsBox, 800));
-//
-// try {
-// new EventFlow()
-// .listen(this::handleChangeLanguage);
-//
-// }catch (Exception e){
-// System.out.println("Something went wrong while trying to change the language.");
-// throw e;
-// }
-// }
-//
-// public void playCredits(VBox creditsBox, double sceneLength) {
-// double height = (credits.length * lineHeight);
-// double startY = -sceneLength;
-// double endY = height;
-//
-// creditsBox.setTranslateY(startY);
-//
-// TranslateTransition scrollCredits = new TranslateTransition();
-// scrollCredits.setNode(creditsBox);
-// scrollCredits.setFromY(startY);
-// scrollCredits.setToY(endY / 2 - 200);
-// scrollCredits.setDuration(Duration.seconds(scrollDuration));
-// scrollCredits.setInterpolator(Interpolator.LINEAR);
-//
-// scrollCredits.setOnFinished(e -> {
-// PauseTransition pauseCredits = new PauseTransition(Duration.seconds(5));
-// pauseCredits.setOnFinished(a -> playCredits(creditsBox, sceneLength));
-// pauseCredits.play();
-// });
-//
-// scrollCredits.play();
-// }
-// private void handleChangeLanguage(LocalizationEvents.LanguageHasChanged event) {
-// Platform.runLater(() -> {
-// currentLocale = AppContext.getLocale();
-// //credits.setText(loc.getString("credits",currentLocale));
-// });
-// }
-// }
\ No newline at end of file
diff --git a/app/src/main/java/org/toop/app/menu/GameSelectMenu.java b/app/src/main/java/org/toop/app/menu/GameSelectMenu.java
deleted file mode 100644
index 89d9a89..0000000
--- a/app/src/main/java/org/toop/app/menu/GameSelectMenu.java
+++ /dev/null
@@ -1,66 +0,0 @@
-// package org.toop.app.menu;
-//
-// import javafx.application.Platform;
-// import javafx.scene.control.ComboBox;
-// import javafx.scene.control.TextField;
-// import javafx.scene.layout.HBox;
-// import javafx.scene.layout.Region;
-// import javafx.scene.layout.StackPane;
-// import javafx.scene.layout.VBox;
-// import org.toop.app.GameType;
-// import org.toop.framework.asset.ResourceManager;
-// import org.toop.framework.asset.resources.LocalizationAsset;
-// import org.toop.framework.eventbus.EventFlow;
-// import org.toop.local.AppContext;
-//
-// import java.util.Locale;
-//
-// public class GameSelectMenu extends Menu {
-// private Locale currentLocale = AppContext.getLocale();
-// private final LocalizationAsset loc = ResourceManager.get("localization");
-//
-// final ComboBox selectedMode, selectedGame;
-// final TextField serverIpField;
-//
-// public GameSelectMenu(GameType type) {
-// final Region background = createBackground();
-//
-// selectedGame = new ComboBox<>();
-// selectedGame.getItems().add(GameType.toName(GameType.TICTACTOE));
-// selectedGame.getItems().add(GameType.toName(GameType.REVERSI));
-// selectedGame.setValue(GameType.toName(type));
-//
-// selectedMode = new ComboBox<>();
-// selectedMode.getItems().add("Local");
-// selectedMode.getItems().add("Online");
-// selectedMode.setValue("Local");
-//
-// final HBox selectedContainer = new HBox(10, selectedGame, selectedMode);
-//
-// serverIpField = new TextField();
-// serverIpField.setPromptText(loc.getString("gameSelectMenuEnterIP",currentLocale));
-//
-// VBox box = new VBox(selectedContainer, serverIpField);
-// pane = new StackPane(background, box);
-// try {
-// new EventFlow()
-// .listen(this::handleChangeLanguage);
-//
-// }catch (Exception e){
-// System.out.println("Something went wrong while trying to change the language.");
-// throw e;
-// }
-//
-// }
-// private void handleChangeLanguage(LocalizationEvents.LanguageHasChanged event) {
-// Platform.runLater(() -> {
-// currentLocale = AppContext.getLocale();
-// serverIpField.setPromptText(loc.getString("gameSelectMenuEnterIP",currentLocale));
-// selectedGame.getItems().set(0, loc.getString("mainMenuSelectTicTacToe",currentLocale));
-// selectedGame.getItems().set(1, loc.getString("mainMenuSelectReversi",currentLocale));
-// selectedMode.getItems().set(0, loc.getString("gameSelectMenuLocal",currentLocale));
-// selectedMode.getItems().set(1, loc.getString("gameSelectMenuOnline",currentLocale));
-// });
-//
-// }
-// }
\ No newline at end of file
diff --git a/app/src/main/java/org/toop/app/menu/MainMenu.java b/app/src/main/java/org/toop/app/menu/MainMenu.java
deleted file mode 100644
index 9696b5d..0000000
--- a/app/src/main/java/org/toop/app/menu/MainMenu.java
+++ /dev/null
@@ -1,69 +0,0 @@
-// package org.toop.app.menu;
-//
-// import javafx.application.Platform;
-// import org.toop.app.App;
-// import org.toop.app.GameType;
-//
-// import javafx.geometry.Pos;
-// import javafx.scene.control.Button;
-// import javafx.scene.layout.*;
-// import org.toop.framework.asset.ResourceManager;
-// import org.toop.framework.asset.resources.LocalizationAsset;
-// import org.toop.framework.eventbus.EventFlow;
-// import org.toop.game.tictactoe.TicTacToe;
-// import org.toop.local.AppContext;
-// import org.toop.local.LocalizationEvents;
-//
-// import java.util.Locale;
-//
-// public final class MainMenu extends Menu {
-// private Locale currentLocale = AppContext.getLocale();
-// private final LocalizationAsset loc = ResourceManager.get("localization");
-// private final Button tictactoe,reversi,credits,options,quit;
-// public MainMenu() {
-// final Region background = createBackground();
-//
-// tictactoe = createButton(
-// loc.getString("mainMenuSelectTicTacToe",currentLocale), () -> { App.activate(new GameSelectMenu(GameType.TICTACTOE)); });
-// reversi = createButton(
-// loc.getString("mainMenuSelectReversi",currentLocale), () -> { App.activate(new GameSelectMenu(GameType.REVERSI)); });
-//
-// final VBox gamesBox = new VBox(10, tictactoe, reversi);
-// gamesBox.setAlignment(Pos.TOP_LEFT);
-// gamesBox.setPickOnBounds(false);
-// gamesBox.setTranslateY(50);
-// gamesBox.setTranslateX(25);
-//
-// credits = createButton(loc.getString("mainMenuSelectCredits",currentLocale), () -> { App.push(new CreditsMenu()); });
-// options = createButton(loc.getString("mainMenuSelectOptions",currentLocale), () -> { App.push(new OptionsMenu()); });
-// quit = createButton(loc.getString("mainMenuSelectQuit",currentLocale), () -> { App.quitPopup(); });
-//
-// final VBox controlBox = new VBox(10, credits, options, quit);
-// controlBox.setAlignment(Pos.BOTTOM_LEFT);
-// controlBox.setPickOnBounds(false);
-// controlBox.setTranslateY(-50);
-// controlBox.setTranslateX(25);
-//
-// pane = new StackPane(background, gamesBox, controlBox);
-// try {
-// new EventFlow()
-// .listen(this::handleChangeLanguage);
-//
-// }catch (Exception e){
-// System.out.println("Something went wrong while trying to change the language.");
-// throw e;
-// }
-//
-// }
-// private void handleChangeLanguage(LocalizationEvents.LanguageHasChanged event) {
-// Platform.runLater(() -> {
-// currentLocale = AppContext.getLocale();
-// tictactoe.setText(loc.getString("mainMenuSelectTicTacToe",currentLocale));
-// reversi.setText(loc.getString("mainMenuSelectReversi",currentLocale));
-// credits.setText(loc.getString("mainMenuSelectCredits",currentLocale));
-// options.setText(loc.getString("mainMenuSelectOptions",currentLocale));
-// quit.setText(loc.getString("mainMenuSelectQuit",currentLocale));
-// });
-//
-// }
-// }
\ No newline at end of file
diff --git a/app/src/main/java/org/toop/app/menu/Menu.java b/app/src/main/java/org/toop/app/menu/Menu.java
deleted file mode 100644
index 6863d8e..0000000
--- a/app/src/main/java/org/toop/app/menu/Menu.java
+++ /dev/null
@@ -1,51 +0,0 @@
-package org.toop.app.menu;
-
-import javafx.scene.control.Button;
-import javafx.scene.layout.Pane;
-import javafx.scene.layout.Region;
-import javafx.scene.text.Text;
-import org.toop.framework.audio.events.AudioEvents;
-import org.toop.framework.eventbus.EventFlow;
-
-public abstract class Menu {
- protected Pane pane;
- public Pane getPane() { return pane; }
-
- public Region createBackground(String css) {
- final Region background = new Region();
- background.setPrefSize(Double.MAX_VALUE, Double.MAX_VALUE);
- background.getStyleClass().add(css);
-
- return background;
- }
-
- public Region createBackground() {
- return createBackground("background");
- }
-
- public Text createText(String css, String x) {
- final Text text = new Text(x);
- text.getStyleClass().add(css);
-
- return text;
- }
-
- public Text createText(String x) {
- return createText("text", x);
- }
-
- public Button createButton(String css, String x, Runnable runnable) {
- final Button button = new Button(x);
- button.setOnAction(_ -> {
- new EventFlow().addPostEvent(new AudioEvents.clickButton()).asyncPostEvent();
- runnable.run();
- });
- button.getStyleClass().add(css);
-
- return button;
- }
-
- public Button createButton(String x, Runnable runnable) {
- return createButton("button", x, runnable);
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/org/toop/app/menu/OptionsMenu.java b/app/src/main/java/org/toop/app/menu/OptionsMenu.java
deleted file mode 100644
index c738d32..0000000
--- a/app/src/main/java/org/toop/app/menu/OptionsMenu.java
+++ /dev/null
@@ -1,174 +0,0 @@
-// package org.toop.app.menu;
-//
-// import javafx.geometry.Pos;
-// import javafx.scene.control.*;
-// import javafx.scene.control.Button;
-// import javafx.scene.control.Label;
-// import javafx.scene.layout.Region;
-// import javafx.scene.layout.StackPane;
-// import javafx.scene.layout.VBox;
-// import org.toop.app.App;
-// import org.toop.framework.asset.ResourceManager;
-// import org.toop.framework.asset.resources.LocalizationAsset;
-// import org.toop.framework.audio.events.AudioEvents;
-// import org.toop.framework.eventbus.EventFlow;
-// import org.toop.local.AppContext;
-//
-// import java.awt.*;
-// import java.util.Locale;
-//
-// public final class OptionsMenu extends Menu {
-// private Locale currentLocale = AppContext.getLocale();
-// private LocalizationAsset loc = ResourceManager.get("localization");
-// private GraphicsDevice currentScreenDevice = GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices()[0];
-//
-// public OptionsMenu() {
-// final Label selectLanguageLabel = new Label(
-// loc.getString("optionsMenuLabelSelectLanguage", currentLocale)
-// );
-//
-// final Button exitOptionsButton = createButton("Exit Options", () -> { App.pop(); } );
-//
-// final VBox optionsBox = new VBox(10,
-// selectLanguageLabel,
-// languageSelectorCreation(),
-// screenDeviceSelectorCreation(),
-// displayModeSelectorCreation(),
-// selectFullscreenCreation(),
-// volumeSelectorCreation(),
-// exitOptionsButton);
-//
-// optionsBox.setAlignment(Pos.CENTER);
-// optionsBox.setPickOnBounds(false);
-// optionsBox.setTranslateY(50);
-// optionsBox.setTranslateX(25);
-//
-// pane = new StackPane(optionsBox);
-//
-// }
-//
-// private ChoiceBox languageSelectorCreation() {
-// final ChoiceBox selectLanguage = new ChoiceBox<>();
-// selectLanguage.setValue(currentLocale);
-//
-// for (Locale locFile : loc.getAvailableLocales()) {
-// selectLanguage.getItems().add(locFile);
-// }
-//
-// selectLanguage.setConverter(new javafx.util.StringConverter<>() {
-// @Override
-// public String toString(Locale locale) {
-// return locale.getDisplayName();
-// }
-//
-// @Override
-// public Locale fromString(String string) {
-// return null;
-// }
-// });
-//
-// selectLanguage.setOnShowing(event -> {
-// new EventFlow().addPostEvent(new AudioEvents.clickButton()).asyncPostEvent();
-// });
-//
-// selectLanguage.setOnAction(event -> {
-// new EventFlow().addPostEvent(new AudioEvents.clickButton()).asyncPostEvent();
-// Locale selectedLocale = selectLanguage.getSelectionModel().getSelectedItem();
-// if (selectedLocale != null) {
-// AppContext.setLocale(selectedLocale);
-// App.pop();
-// App.push(new OptionsMenu());
-// }
-// });
-//
-// return selectLanguage;
-// }
-//
-// private ChoiceBox screenDeviceSelectorCreation() {
-// GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
-// GraphicsDevice[] devices = ge.getScreenDevices();
-// final ChoiceBox selectScreen = new ChoiceBox<>();
-// for (GraphicsDevice screen : devices) {
-// selectScreen.getItems().add(screen);
-// }
-//
-// selectScreen.setOnShowing(event -> {
-// new EventFlow().addPostEvent(new AudioEvents.clickButton()).asyncPostEvent();
-// });
-//
-// selectScreen.setOnAction(event -> {
-// new EventFlow().addPostEvent(new AudioEvents.clickButton()).asyncPostEvent();
-// int selectedIndex = selectScreen.getSelectionModel().getSelectedIndex();
-// Object selectedItem = selectScreen.getSelectionModel().getSelectedItem();
-//
-// System.out.println("Selection made: [" + selectedIndex + "] " + selectedItem);
-// System.out.println(" ChoiceBox.getValue(): " + selectScreen.getValue());
-// });
-// return selectScreen;
-// }
-//
-// private ChoiceBox displayModeSelectorCreation() {
-// final ChoiceBox selectWindowSize = new ChoiceBox<>();
-// for (DisplayMode displayMode : currentScreenDevice.getDisplayModes()) {
-// selectWindowSize.getItems().add(displayMode);
-// }
-// selectWindowSize.setOnShowing(event -> {
-// new EventFlow().addPostEvent(new AudioEvents.clickButton()).asyncPostEvent();
-// });
-// selectWindowSize.setOnAction(event -> {
-// new EventFlow().addPostEvent(new AudioEvents.clickButton()).asyncPostEvent();
-// int selectedIndex = selectWindowSize.getSelectionModel().getSelectedIndex();
-// Object selectedItem = selectWindowSize.getSelectionModel().getSelectedItem();
-//
-// System.out.println("Selection made: [" + selectedIndex + "] " + selectedItem);
-// System.out.println(" ChoiceBox.getValue(): " + selectWindowSize.getValue());
-// });
-// return selectWindowSize;
-// }
-//
-// private CheckBox selectFullscreenCreation() {
-// final CheckBox setFullscreen = new CheckBox("Fullscreen");
-// setFullscreen.setSelected(App.isFullscreen());
-// setFullscreen.setOnAction(event -> {
-// new EventFlow().addPostEvent(new AudioEvents.clickButton()).asyncPostEvent();
-// boolean isSelected = setFullscreen.isSelected();
-// App.setFullscreen(isSelected);
-// });
-// return setFullscreen;
-// }
-//
-// private Slider volumeSelectorCreation() {
-// Slider volumeSlider = new Slider(0, 100, 50);
-// new EventFlow()
-// .addPostEvent(AudioEvents.GetCurrentVolume.class)
-// .onResponse(AudioEvents.GetCurrentVolumeReponse.class, event -> {
-// volumeSlider.setValue(event.currentVolume() * 100);
-// }, true).asyncPostEvent();
-// volumeSlider.setShowTickLabels(true);
-// volumeSlider.setShowTickMarks(true);
-// volumeSlider.setMajorTickUnit(25);
-// volumeSlider.setMinorTickCount(4);
-// volumeSlider.setBlockIncrement(5);
-// volumeSlider.setMaxWidth(225);
-//
-// Label valueLabel = new Label(String.valueOf((int) volumeSlider.getValue()));
-//
-// final long[] lastPlayed = {0};
-// final long cooldown = 50;
-// volumeSlider.valueProperty().addListener((obs, oldVal, newVal) -> {
-// long now = System.currentTimeMillis();
-//
-// if (now - lastPlayed[0] >= cooldown) {
-// lastPlayed[0] = now;
-// // new EventFlow().addPostEvent(new AudioEvents.clickButton())
-// // .asyncPostEvent(); // TODO: creates double sound bug, WHYYY????
-// }
-// valueLabel.setText(String.valueOf(newVal.intValue()));
-// new EventFlow().addPostEvent(new AudioEvents.ChangeVolume(newVal.doubleValue()/100.0))
-// .asyncPostEvent();
-// });
-//
-// return volumeSlider;
-// }
-//
-// }
\ No newline at end of file
diff --git a/app/src/main/java/org/toop/app/menu/game/GameMenu.java b/app/src/main/java/org/toop/app/menu/game/GameMenu.java
deleted file mode 100644
index 13ab5e1..0000000
--- a/app/src/main/java/org/toop/app/menu/game/GameMenu.java
+++ /dev/null
@@ -1,127 +0,0 @@
-// package org.toop.app.menu.game;
-//
-// import javafx.application.Platform;
-// import javafx.geometry.Pos;
-// import javafx.scene.canvas.Canvas;
-// import javafx.scene.canvas.GraphicsContext;
-// import javafx.scene.control.Button;
-// import javafx.scene.layout.HBox;
-// import javafx.scene.layout.Region;
-// import javafx.scene.layout.StackPane;
-// import javafx.scene.layout.VBox;
-// import javafx.scene.text.Text;
-// import org.toop.app.App;
-// import org.toop.app.menu.MainMenu;
-// import org.toop.app.menu.Menu;
-// import org.toop.framework.asset.ResourceManager;
-// import org.toop.framework.asset.resources.LocalizationAsset;
-// import org.toop.framework.eventbus.EventFlow;
-// import org.toop.local.AppContext;
-//
-// import java.util.Locale;
-//
-// public abstract class GameMenu extends Menu {
-// protected final class Cell {
-// public float x;
-// public float y;
-//
-// public float width;
-// public float height;
-//
-// public Cell(float x, float y, float width, float height) {
-// this.x = x;
-// this.y = y;
-//
-// this.width = width;
-// this.height = height;
-// }
-//
-// public boolean check(float x, float y) {
-// return x >= this.x && y >= this.y && x <= this.x + width && y <= this.y + height;
-// }
-// }
-//
-// protected final int size;
-//
-// protected final Canvas canvas;
-// protected final GraphicsContext graphics;
-//
-// protected final int rows;
-// protected final int columns;
-//
-// protected final int gapSize;
-//
-// protected final Cell[] cells;
-//
-// private Locale currentLocale = AppContext.getLocale();
-// private final LocalizationAsset loc = ResourceManager.get("localization");
-// private final Button hint,back;
-// protected GameMenu(int rows, int columns, int gapSize) {
-//
-// final int size = Math.min(App.getWidth(), App.getHeight()) / 5 * 4;
-//
-// final Canvas canvas = new Canvas(size, size);
-//
-// final GraphicsContext graphics = canvas.getGraphicsContext2D();
-//
-// this.size = size;
-//
-// this.canvas = canvas;
-// this.graphics = graphics;
-//
-// this.rows = rows;
-// this.columns = columns;
-//
-// this.gapSize = gapSize;
-//
-// cells = new Cell[rows * columns];
-//
-// final float cellWidth = ((float)size - (rows - 1) * gapSize) / rows;
-// final float cellHeight = ((float)size - (columns - 1) * gapSize) / rows;
-//
-// for (int y = 0; y < columns; y++) {
-// final float startY = y * cellHeight + y * gapSize;
-//
-// for (int x = 0; x < rows; x++) {
-// final float startX = x * cellWidth + x * gapSize;
-// cells[y * rows + x] = new Cell(startX, startY, cellWidth, cellHeight);
-// }
-// }
-//
-// final Region background = createBackground();
-//
-// final Text player1 = createText("player_1", "Player 1");
-// final Text player2 = createText("player_2", "Player 2");
-//
-// final HBox playersContainer = new HBox(100, player1, player2);
-// playersContainer.setAlignment(Pos.TOP_CENTER);
-// playersContainer.setPickOnBounds(false);
-// playersContainer.setTranslateY(50);
-//
-// hint = createButton(loc.getString("gameMenuHint",currentLocale), () -> {});
-// back = createButton(loc.getString("gameMenuBack",currentLocale), () -> { App.activate(new MainMenu()); });
-//
-// final VBox controlContainer = new VBox(hint, back);
-// StackPane.setAlignment(controlContainer, Pos.BOTTOM_LEFT);
-// controlContainer.setPickOnBounds(false);
-//
-// pane = new StackPane(background, canvas, playersContainer, controlContainer);
-// try {
-// new EventFlow()
-// .listen(this::handleChangeLanguage);
-//
-// }catch (Exception e){
-// System.out.println("Something went wrong while trying to change the language.");
-// throw e;
-// }
-//
-// }
-// private void handleChangeLanguage(LocalizationEvents.LanguageHasChanged event) {
-// Platform.runLater(() -> {
-// currentLocale = AppContext.getLocale();
-// hint.setText(loc.getString("gameMenuHint",currentLocale));
-// back.setText(loc.getString("gameMenuBack",currentLocale));
-// });
-//
-// }
-// }
\ No newline at end of file
diff --git a/app/src/main/java/org/toop/local/AppContext.java b/app/src/main/java/org/toop/local/AppContext.java
index 277940e..4a50029 100644
--- a/app/src/main/java/org/toop/local/AppContext.java
+++ b/app/src/main/java/org/toop/local/AppContext.java
@@ -1,24 +1,28 @@
package org.toop.local;
-import org.toop.app.events.AppEvents;
-import org.toop.framework.eventbus.EventFlow;
+import org.toop.framework.asset.ResourceManager;
+import org.toop.framework.asset.resources.LocalizationAsset;
import java.util.Locale;
public class AppContext {
- private static Locale currentLocale = Locale.getDefault();
+ private static final LocalizationAsset localization = ResourceManager.get("localization");
+ private static Locale locale = Locale.forLanguageTag("en");
- public static void setLocale(Locale locale) {
- currentLocale = locale;
- new EventFlow().addPostEvent(new AppEvents.OnLanguageChange(locale.getLanguage())).asyncPostEvent();
- }
+ public static LocalizationAsset getLocalization() {
+ return localization;
+ }
- public static void setCurrentLocale(Locale locale) {
- currentLocale = locale;
- new EventFlow().addPostEvent(new AppEvents.OnLanguageChange(locale.getLanguage())).asyncPostEvent();
- }
+ public static void setLocale(Locale locale) {
+ AppContext.locale = locale;
+ }
- public static Locale getLocale() {
- return currentLocale;
- }
-}
+ public static Locale getLocale() {
+ return locale;
+ }
+
+ public static String getString(String key) {
+ assert localization != null;
+ return localization.getString(key, locale);
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/resources/assets/localization/localization_de.properties b/app/src/main/resources/assets/localization/localization_de.properties
index e38762e..6ce186e 100644
--- a/app/src/main/resources/assets/localization/localization_de.properties
+++ b/app/src/main/resources/assets/localization/localization_de.properties
@@ -1,40 +1,40 @@
-# Window title
-windowTitle=ISY Spiele-Auswahl
+ai=K\u00fcnstliche Intelligenz
+appTitle=ISY Spieleauswahl
+back=Zur\u00fcck
+computer=Computer
+computerDifficulty=Computerschwierigkeit
+connect=Verbinden
+credits=Credits
+developers=Entwickler
+fullscreen=Vollbild
+human=Mensch
+language=Sprache
+local=Lokal
+localization=Lokalisierung
+mergeCommander=Merge-Kommandant
+moralSupport=Mentale Unterst\u00fctzung
+no=Nein
+opengl=OpenGL
+options=Optionen
+othello=Othello
+playerName=Spielername
+productOwner=Produktverantwortlicher
+quit=Beenden
+quitSure=Bist du dir sicher?
+scrumMaster=Scrum Master
+server=Server
+serverIP=Server-IP
+serverPort=Server-Port
+start=Start
+tictactoe=Tic Tac Toe
+volume=Lautst\u00e4rke
+windowed=Fenstermodus
+yes=Ja
-# Main Menu buttons
-mainMenuSelectTicTacToe=Tic Tac Toe
-mainMenuSelectReversi=Reversi
-mainMenuSelectSudoku=Sudoku
-mainMenuSelectBattleship=Flottenman\u00F6ver
-mainMenuSelectOther=Andere
-mainMenuSelectCredits=Credits
-mainMenuSelectOptions=Optionen
-mainMenuSelectQuit=Beenden
-
-# Quit Menu text and buttons
-quitMenuTextSure=Bist du sicher?
-quitMenuButtonYes=Ja
-quitMenuButtonNo=Nein
-
-# Language menu
-languageChangeText=Sprache w\u00E4hlen.
-languageEnglish=Englisch
-languageDutch=Niederl\u00E4ndisch
-languageGerman=Deutsch
-languageFrench=Franz\u00F6sisch
-languageItalian=Italienisch
-languageSpanish=Spanisch
-languageChinese=Chinesisch
-
-# Game select menu
-gameSelectMenuLocal=Lokal
-gameSelectMenuOnline=Online
-gameSelectMenuEnterIP=Gib hier deine IP-Adresse ein:
-
-# Game Menu
-gameMenuHint=Tipp
-gameMenuBack=Zur\u00FCck
-
-
-# Options menu
-optionsMenuLabelSelectLanguage=Sprache:
\ No newline at end of file
+chinese=\u4e2d\u6587
+dutch=Nederlands
+english=English
+french=Fran\u00e7ais
+german=Deutsch
+italian=Italiano
+spanish=Espa\u00f1ol
\ No newline at end of file
diff --git a/app/src/main/resources/assets/localization/localization_en.properties b/app/src/main/resources/assets/localization/localization_en.properties
new file mode 100644
index 0000000..e8035e2
--- /dev/null
+++ b/app/src/main/resources/assets/localization/localization_en.properties
@@ -0,0 +1,40 @@
+ai=Artificial Intelligence
+appTitle=ISY Games Selector
+back=Back
+computer=Computer
+computerDifficulty=Computer Difficulty
+connect=Connect
+credits=Credits
+developers=Developers
+fullscreen=Fullscreen
+human=Human
+language=Language
+local=Local
+localization=Localization
+mergeCommander=Merge Commander
+moralSupport=Moral Support
+no=No
+opengl=OpenGL
+options=Options
+othello=Othello
+playerName=Player Name
+productOwner=Product Owner
+quit=Quit
+quitSure=Are you sure?
+scrumMaster=Scrum Master
+server=Server
+serverIP=Server IP
+serverPort=Server Port
+start=Start
+tictactoe=Tic Tac Toe
+volume=Volume
+windowed=Windowed
+yes=Yes
+
+chinese=\u4e2d\u6587
+dutch=Nederlands
+english=English
+french=Fran\u00e7ais
+german=Deutsch
+italian=Italiano
+spanish=Espa\u00f1ol
\ No newline at end of file
diff --git a/app/src/main/resources/assets/localization/localization_en_US.properties b/app/src/main/resources/assets/localization/localization_en_US.properties
deleted file mode 100644
index 2d5da19..0000000
--- a/app/src/main/resources/assets/localization/localization_en_US.properties
+++ /dev/null
@@ -1,39 +0,0 @@
-# Window title
-windowTitle=ISY Games Selector
-
-# Main Menu buttons
-mainMenuSelectTicTacToe=Tic Tac Toe
-mainMenuSelectReversi=Reversi
-mainMenuSelectSudoku=Sudoku
-mainMenuSelectBattleship=Battleship
-mainMenuSelectOther=Other
-mainMenuSelectCredits=Credits
-mainMenuSelectOptions=Options
-mainMenuSelectQuit=Quit
-
-# Quit Menu text and buttons
-quitMenuTextSure=Are you sure?
-quitMenuButtonYes=Yes
-quitMenuButtonNo=No
-
-# Language menu
-languageChangeText=Choose a language.
-languageEnglish=English
-languageDutch=Dutch
-languageGerman=German
-languageFrench=French
-languageItalian=Italian
-languageSpanish=Spanish
-languageChinese=Chinese
-
-# Game select menu
-gameSelectMenuLocal=Local
-gameSelectMenuOnline=Online
-gameSelectMenuEnterIP=Enter your IP address here:
-
-# Game Menu
-gameMenuHint=Hint
-gameMenuBack=Back
-
-# Options menu
-optionsMenuLabelSelectLanguage=Language:
\ No newline at end of file
diff --git a/app/src/main/resources/assets/localization/localization_es.properties b/app/src/main/resources/assets/localization/localization_es.properties
index c6c0648..f407436 100644
--- a/app/src/main/resources/assets/localization/localization_es.properties
+++ b/app/src/main/resources/assets/localization/localization_es.properties
@@ -1,40 +1,40 @@
-# Window title
-windowTitle=Selector de juegos ISY
+ai=Inteligencia Artificial
+appTitle=Selector de Juegos ISY
+back=Atr\u00e1s
+computer=Ordenador
+computerDifficulty=Dificultad del Ordenador
+connect=Conectar
+credits=Cr\u00e9ditos
+developers=Desarrolladores
+fullscreen=Pantalla completa
+human=Humano
+language=Idioma
+local=Local
+localization=Localizaci\u00f3n
+mergeCommander=Comandante de Merge
+moralSupport=Apoyo moral
+no=No
+opengl=OpenGL
+options=Opciones
+othello=Othello
+playerName=Nombre del Jugador
+productOwner=Propietario del Producto
+quit=Salir
+quitSure=\u00BFAst\u00e1s seguro?
+scrumMaster=Scrum Master
+server=Servidor
+serverIP=Servidor-IP
+serverPort=Servidor-puerto
+start=Iniciar
+tictactoe=Tres en Raya
+volume=Volumen
+windowed=Ventana
+yes=S\u00ed
-# Main Menu buttons
-mainMenuSelectTicTacToe=Tres en raya
-mainMenuSelectReversi=Reversi
-mainMenuSelectSudoku=Sudoku
-mainMenuSelectBattleship=Batalla naval
-mainMenuSelectOther=Otros
-mainMenuSelectCredits=Cr\u00E9ditos
-mainMenuSelectOptions=Opciones
-mainMenuSelectQuit=Salir
-
-# Quit Menu text and buttons
-quitMenuTextSure=\u00BFEst\u00E1s seguro?
-quitMenuButtonYes=S\u00ED
-quitMenuButtonNo=No
-
-# Language menu
-languageChangeText=Elige un idioma.
-languageEnglish=Ingl\u00E9s
-languageDutch=Neerland\u00E9s
-languageGerman=Alem\u00E1n
-languageFrench=Franc\u00E9s
-languageItalian=Italiano
-languageSpanish=Espa\u00F1ol
-languageChinese=Chino
-
-# Game select menu
-gameSelectMenuLocal=Local
-gameSelectMenuOnline=En l\u00EDnea
-gameSelectMenuEnterIP=Introduce aqu\u00ED tu direcci\u00F3n IP:
-
-# Game Menu
-gameMenuHint=Pista
-gameMenuBack=Atr\u00E1s
-
-
-# Options menu
-optionsMenuLabelSelectLanguage=Idioma:
\ No newline at end of file
+chinese=\u4e2d\u6587
+dutch=Nederlands
+english=English
+french=Fran\u00e7ais
+german=Deutsch
+italian=Italiano
+spanish=Espa\u00f1ol
\ No newline at end of file
diff --git a/app/src/main/resources/assets/localization/localization_fr.properties b/app/src/main/resources/assets/localization/localization_fr.properties
index 6b71c6e..83b5b5f 100644
--- a/app/src/main/resources/assets/localization/localization_fr.properties
+++ b/app/src/main/resources/assets/localization/localization_fr.properties
@@ -1,40 +1,40 @@
-# Window title
-windowTitle=S\u00E9lecteur de jeux ISY
+ai=Intelligence Artificielle
+appTitle=S\u00e9lecteur de Jeux ISY
+back=Retour
+computer=Ordinateur
+computerDifficulty=Difficult\u00e9 de l'Ordinateur
+connect=Connecter
+credits=Cr\u00e9dits
+developers=D\u00e9veloppeurs
+fullscreen=Plein \u00e9cran
+human=Humain
+language=Langue
+local=Local
+localization=Localisation
+mergeCommander=Commandant de Merge
+moralSupport=Soutien moral
+no=Non
+opengl=OpenGL
+options=Options
+othello=Othello
+playerName=Nom du joueur
+productOwner=Responsable du produit
+quit=Quitter
+quitSure=Es-tu s\u00fbr ?
+scrumMaster=Scrum Master
+server=Serveur
+serverIP=Serveur-IP
+serverPort=Serveur-Port
+start=D\u00e9marrer
+tictactoe=Morpion
+volume=Volume
+windowed=Fen\u00eatre
+yes=Oui
-# Main Menu buttons
-mainMenuSelectTicTacToe=Morpion
-mainMenuSelectReversi=Reversi
-mainMenuSelectSudoku=Sudoku
-mainMenuSelectBattleship=Bataille navale
-mainMenuSelectOther=Autres
-mainMenuSelectCredits=Cr\u00E9dits
-mainMenuSelectOptions=Options
-mainMenuSelectQuit=Quitter
-
-# Quit Menu text and buttons
-quitMenuTextSure=\u00CAtes-vous s\u00FBr?
-quitMenuButtonYes=Oui
-quitMenuButtonNo=Non
-
-# Language menu
-languageChangeText=Choisissez une langue.
-languageEnglish=Anglais
-languageDutch=N\u00E9erlandais
-languageGerman=Allemand
-languageFrench=Fran\u00E7ais
-languageItalian=Italien
-languageSpanish=Espagnol
-languageChinese=Chinois
-
-# Game select menu
-gameSelectMenuLocal=Local
-gameSelectMenuOnline=En ligne
-gameSelectMenuEnterIP=Entrez votre adresse IP ici :
-
-# Game Menu
-gameMenuHint=Indice
-gameMenuBack=Retour
-
-
-# Options menu
-optionsMenuLabelSelectLanguage=Langue:
\ No newline at end of file
+chinese=\u4e2d\u6587
+dutch=Nederlands
+english=English
+french=Fran\u00e7ais
+german=Deutsch
+italian=Italiano
+spanish=Espa\u00f1ol
\ No newline at end of file
diff --git a/app/src/main/resources/assets/localization/localization_it.properties b/app/src/main/resources/assets/localization/localization_it.properties
index c608a87..86e91ea 100644
--- a/app/src/main/resources/assets/localization/localization_it.properties
+++ b/app/src/main/resources/assets/localization/localization_it.properties
@@ -1,41 +1,40 @@
-# Window title
-windowTitle=Selettore giochi ISY
+ai=Intelligenza Artificiale
+appTitle=Selettore di Giochi ISY
+back=Indietro
+computer=Computer
+computerDifficulty=Difficolt\u00e0 del computer
+connect=Connetti
+credits=Crediti
+developers=Sviluppatori
+fullscreen=Schermo intero
+human=Umano
+language=Lingua
+local=Locale
+localization=Localizzazione
+mergeCommander=Comandante di Merge
+moralSupport=Supporto morale
+no=No
+opengl=OpenGL
+options=Opzioni
+othello=Othello
+playerName=Nome del giocatore
+productOwner=Proprietario del prodotto
+quit=Uscire
+quitSure=Sei sicuro?
+scrumMaster=Scrum Master
+server=Server
+serverIP=Server-IP
+serverPort=Porta del server
+start=Inizia
+tictactoe=Tic Tac Toe
+volume=Volume
+windowed=Finestra
+yes=S\u00ec
-# Main Menu buttons
-mainMenuSelectTicTacToe=Tris
-mainMenuSelectReversi=Reversi
-mainMenuSelectSudoku=Sudoku
-mainMenuSelectBattleship=Battaglia navale
-mainMenuSelectOther=Altro
-mainMenuSelectCredits=Crediti
-mainMenuSelectOptions=Opzioni
-mainMenuSelectQuit=Esci
-
-# Quit Menu text and buttons
-quitMenuTextSure=Sei sicuro?
-quitMenuButtonYes=S\u00EC
-quitMenuButtonNo=No
-
-# Language menu
-languageChangeText=Scegli una lingua.
-languageEnglish=Inglese
-languageDutch=Olandese
-languageGerman=Tedesco
-languageFrench=Francese
-languageItalian=Italiano
-languageSpanish=Spagnolo
-languageChinese=Cinese
-
-# Game select menu
-gameSelectMenuLocal=Locale
-gameSelectMenuOnline=Online
-gameSelectMenuEnterIP=Inserisci qui il tuo indirizzo IP:
-
-# Game Menu
-gameMenuHint=Suggerimento
-gameMenuBack=Indietro
-
-
-
-# Options menu
-optionsMenuLabelSelectLanguage=Lingua:
\ No newline at end of file
+chinese=\u4e2d\u6587
+dutch=Nederlands
+english=English
+french=Fran\u00e7ais
+german=Deutsch
+italian=Italiano
+spanish=Espa\u00f1ol
\ No newline at end of file
diff --git a/app/src/main/resources/assets/localization/localization_nl.properties b/app/src/main/resources/assets/localization/localization_nl.properties
index 2f3cf82..58604ed 100644
--- a/app/src/main/resources/assets/localization/localization_nl.properties
+++ b/app/src/main/resources/assets/localization/localization_nl.properties
@@ -1,40 +1,40 @@
-# Window title
-windowTitle=ISY Spellen Kiezer
+ai=Kunstmatige Intelligentie
+appTitle=ISY Spel Kiezer
+back=Terug
+computer=Computer
+computerDifficulty=Computermoeilijkheid
+connect=Verbinden
+credits=Credits
+developers=Ontwikkelaars
+fullscreen=Volledig scherm
+human=Mens
+language=Taal
+local=Lokaal
+localization=Lokalisatie
+mergeCommander=Merge-commandant
+moralSupport=Moraalsteun
+no=Nee
+opengl=OpenGL
+options=Opties
+othello=Othello
+playerName=Spelernaam
+productOwner=Producteigenaar
+quit=Afsluiten
+quitSure=Weet je het zeker?
+scrumMaster=Scrum Master
+server=Server
+serverIP=Server-IP
+serverPort=Serverpoort
+start=Start
+tictactoe=Boter Kaas en Eieren
+volume=Volume
+windowed=Venstermodus
+yes=Ja
-# Main Menu buttons
-mainMenuSelectTicTacToe=Boter Kaas En Eieren
-mainMenuSelectReversi=Reversi
-mainMenuSelectSudoku=Sudoku
-mainMenuSelectBattleship=Zeeslag
-mainMenuSelectOther=Anders
-mainMenuSelectCredits=Credits
-mainMenuSelectOptions=Opties
-mainMenuSelectQuit=Afsluiten
-
-# Quit Menu text and buttons
-quitMenuTextSure=Weet je het zeker?
-quitMenuButtonYes=Ja
-quitMenuButtonNo=Nee
-
-# Language menu
-languageChangeText=Kies een taal.
-languageEnglish=Engels
-languageDutch=Nederlands
-languageGerman=Duits
-languageFrench=Frans
-languageItalian=Italiaans
-languageSpanish=Spaans
-languageChinese=Chinees
-
-# Game select menu
-gameSelectMenuLocal=Lokaal
-gameSelectMenuOnline=Online
-gameSelectMenuEnterIP=Voer hier je IP-adres in:
-
-# Game Menu
-gameMenuHint=Hint
-gameMenuBack=Terug
-
-
-# Options menu
-optionsMenuLabelSelectLanguage=Taal:
\ No newline at end of file
+chinese=\u4e2d\u6587
+dutch=Nederlands
+english=English
+french=Fran\u00e7ais
+german=Deutsch
+italian=Italiano
+spanish=Espa\u00f1ol
\ No newline at end of file
diff --git a/app/src/main/resources/assets/localization/localization_zh.properties b/app/src/main/resources/assets/localization/localization_zh.properties
index 2e82178..898fe12 100644
--- a/app/src/main/resources/assets/localization/localization_zh.properties
+++ b/app/src/main/resources/assets/localization/localization_zh.properties
@@ -1,52 +1,40 @@
-# suppress inspection "LossyEncoding" for whole file
-# Window title
-windowTitle=ISY \u6E38\u620F\u9009\u62E9\u5668
-# ?????
+ai=\u4eba\u5de5\u667a\u80fd
+appTitle=ISY \u6e38\u620f\u9009\u62e9\u5668
+back=\u8fd4\u56de
+computer=\u8ba1\u7b97\u673a
+computerDifficulty=\u8ba1\u7b97\u673a\u96be\u5ea6
+connect=\u8fde\u63a5
+credits=\u6b23\u8d4f
+developers=\u5f00\u53d1\u8005
+fullscreen=\u5168\u5c4f
+human=\u4eba
+language=\u8bed\u8a00
+local=\u672c\u5730
+localization=\u6d88\u606f\u5c55\u793a / \u672c\u5730\u5316
+mergeCommander=Merge \u63a7\u4e3b
+moralSupport=\u795e\u7cbe\u652f\u6301
+no=\u5426
+opengl=OpenGL
+options=\u9009\u9879
+othello=Othello
+playerName=\u73a9\u5bb6\u540d\u79f0
+productOwner=\u54c1\u76d8\u4ea7\u54c1\u4eba
+quit=\u9000\u51fa
+quitSure=\u4f60\u786e\u5b9a\u5417?
+scrumMaster=Scrum \u4f1a\u5458
+server=\u670d\u52a1\u5668
+serverIP=\u670d\u52a1\u5668 IP
+serverPort=\u670d\u52a1\u5668 \u7aef\u53e3
+start=\u5f00\u59cb
+tictactoe=Tic Tac Toe
+volume=\u97f3\u91cf
+windowed=\u7a97\u53e3\u6a21\u5f0f
+yes=\u662f
-# Main Menu buttons
-mainMenuSelectTicTacToe=\u4E95\u5B57\u68CB
-# ???
-mainMenuSelectReversi=\u9ED1\u767D\u68CB
-# ???
-mainMenuSelectSudoku=\u6570\u72EC
-# ??
-mainMenuSelectBattleship=\u6D77\u6218\u68CB
-# ???
-mainMenuSelectOther=\u5176\u4ED6
-# ??
-mainMenuSelectCredits=\u5236\u4F5C\u4EBA\u5458
-# ????
-mainMenuSelectOptions=\u9009\u9879
-# ??
-mainMenuSelectQuit=\u9000\u51FA
-# ??
-
-# Quit Menu text and buttons
-quitMenuTextSure=\u4F60\u786E\u5B9A\u5417\uFF1F
-# ?????
-quitMenuButtonYes=\u662F
-# ?
-quitMenuButtonNo=\u5426
-# ?
-# Language menu
-languageChangeText=\u9009\u62E9\u4E00\u79CD\u8BED\u8A00\u3002
-languageEnglish=\u82F1\u8BED
-languageDutch=\u8377\u5170\u8BED
-languageGerman=\u5FB7\u8BED
-languageFrench=\u6CD5\u8BED
-languageItalian=\u610F\u5927\u5229\u8BED
-languageSpanish=\u897F\u73ED\u7259\u8BED
-languageChinese=\u4E2D\u6587
-
-# Game select menu
-gameSelectMenuLocal=\u672C\u5730
-gameSelectMenuOnline=\u5728\u7EBF
-gameSelectMenuEnterIP=\u5728\u6B64\u8F93\u5165\u4F60\u7684IP\u5730\u5740\uFF1A
-
-# Game Menu
-gameMenuHint=\u63D0\u793A
-gameMenuBack=\u8FD4\u56DE
-
-
-# Options menu
-optionsMenuLabelSelectLanguage=\u8BED\u8A00:
\ No newline at end of file
+chinese=\u4e2d\u6587
+dutch=Nederlands
+english=English
+french=Fran\u00e7ais
+german=Deutsch
+italian=Italiano
+spanish=Espa\u00f1ol
\ No newline at end of file
diff --git a/app/src/main/resources/assets/style/quit.css b/app/src/main/resources/assets/style/quit.css
index b49bf21..bc0615c 100644
--- a/app/src/main/resources/assets/style/quit.css
+++ b/app/src/main/resources/assets/style/quit.css
@@ -1,3 +1,3 @@
-.quit_background {
+.background {
-fx-background-color: #0000007f;
}
\ No newline at end of file