diff --git a/.idea/compiler.xml b/.idea/compiler.xml index fc355c9..dcffce8 100644 --- a/.idea/compiler.xml +++ b/.idea/compiler.xml @@ -6,96 +6,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -104,9 +14,9 @@ \ No newline at end of file diff --git a/app/src/main/java/org/toop/Main.java b/app/src/main/java/org/toop/Main.java index 63349e2..30d8bb3 100644 --- a/app/src/main/java/org/toop/Main.java +++ b/app/src/main/java/org/toop/Main.java @@ -1,5 +1,6 @@ package org.toop; +import org.toop.app.gui.LocalServerSelector; import org.toop.framework.networking.NetworkingClientManager; import org.toop.framework.networking.NetworkingInitializationException; @@ -7,6 +8,7 @@ import org.toop.framework.networking.NetworkingInitializationException; public class Main { public static void main(String[] args) { initSystems(); + javax.swing.SwingUtilities.invokeLater(LocalServerSelector::new); } private static void initSystems() throws NetworkingInitializationException { diff --git a/app/src/main/java/org/toop/app/gui/LocalServerSelector.java b/app/src/main/java/org/toop/app/gui/LocalServerSelector.java index 50eb60b..4ba4c86 100644 --- a/app/src/main/java/org/toop/app/gui/LocalServerSelector.java +++ b/app/src/main/java/org/toop/app/gui/LocalServerSelector.java @@ -1,15 +1,23 @@ package org.toop.app.gui; +import org.toop.events.WindowEvents; +import org.toop.framework.eventbus.EventFlow; +import org.toop.local.AppContext; + import javax.swing.*; +import java.util.Locale; +import java.util.ResourceBundle; public class LocalServerSelector { private JPanel panel1; private JButton serverButton; private JButton localButton; private final JFrame frame; + Locale locale = AppContext.getLocale(); + ResourceBundle resourceBundle = ResourceBundle.getBundle("Localization", locale); public LocalServerSelector() { - frame = new JFrame("Server Selector"); + frame = new JFrame(resourceBundle.getString("windowTitleServerSelector")); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setContentPane(panel1); frame.setSize(1920, 1080); @@ -17,9 +25,15 @@ public class LocalServerSelector { frame.setVisible(true); serverButton.addActionListener(e -> onServerClicked()); + serverButton.setText(resourceBundle.getString("buttonSelectServer")); localButton.addActionListener(e -> onLocalClicked()); + localButton.setText(resourceBundle.getString("buttonSelectLocal")); + new EventFlow().listen(WindowEvents.LanguageChanged.class, this::changeLanguage); + } + private void changeLanguage(WindowEvents.LanguageChanged event) { + locale = AppContext.getLocale(); + resourceBundle = ResourceBundle.getBundle("Localization", locale); } - private void onServerClicked() { frame.dispose(); new RemoteGameSelector(); diff --git a/app/src/main/java/org/toop/events/WindowEvents.java b/app/src/main/java/org/toop/events/WindowEvents.java index 279ea57..50d3f2d 100644 --- a/app/src/main/java/org/toop/events/WindowEvents.java +++ b/app/src/main/java/org/toop/events/WindowEvents.java @@ -22,4 +22,7 @@ public class WindowEvents extends EventsBase { /** Triggers when the mouse is released within the window. */ public record OnMouseRelease(int button) implements EventWithoutSnowflake {} + + /** Triggers when the language is changed. */ + public record LanguageChanged() implements EventWithoutSnowflake {} } \ 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 new file mode 100644 index 0000000..3b1bb47 --- /dev/null +++ b/app/src/main/java/org/toop/local/AppContext.java @@ -0,0 +1,14 @@ +package org.toop.local; + +import java.util.Locale; + +public class AppContext { + private static Locale currentLocale = Locale.getDefault(); + + public static void setCurrentLocale(Locale locale) { + currentLocale = locale; + } + public static Locale getLocale() { + return currentLocale; + } +} diff --git a/app/src/main/java/org/toop/tictactoe/gui/UIGameBoard.java b/app/src/main/java/org/toop/tictactoe/gui/UIGameBoard.java index aa9ee5c..68e0b9f 100644 --- a/app/src/main/java/org/toop/tictactoe/gui/UIGameBoard.java +++ b/app/src/main/java/org/toop/tictactoe/gui/UIGameBoard.java @@ -2,11 +2,16 @@ package org.toop.tictactoe.gui; import java.awt.*; import java.awt.event.ActionEvent; +import java.util.Locale; +import java.util.ResourceBundle; import javax.swing.*; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.toop.app.gui.LocalGameSelector; import org.toop.app.gui.RemoteGameSelector; +import org.toop.events.WindowEvents; +import org.toop.framework.eventbus.EventFlow; +import org.toop.local.AppContext; import org.toop.tictactoe.LocalTicTacToe; import org.toop.game.GameBase; @@ -26,6 +31,8 @@ public class UIGameBoard { private LocalTicTacToe localTicTacToe; private boolean gameOver = false; + Locale locale = AppContext.getLocale(); + ResourceBundle resourceBundle = ResourceBundle.getBundle("Localization", locale); public UIGameBoard(LocalTicTacToe lttt, Object parent) { if (!(parent == null)) { @@ -43,7 +50,7 @@ public class UIGameBoard { tttPanel = new JPanel(new BorderLayout()); // Back button - backToMainMenuButton = new JButton("Back to Main Menu"); + backToMainMenuButton = new JButton(resourceBundle.getString("buttonBackToMainMenu")); tttPanel.add(backToMainMenuButton, BorderLayout.SOUTH); backToMainMenuButton.addActionListener( _ -> { @@ -65,7 +72,11 @@ public class UIGameBoard { // cells[moveIndex].setText(String.valueOf(symbol)); // }); // }); - + new EventFlow().listen(WindowEvents.LanguageChanged.class, this::changeLanguage); + } + private void changeLanguage(WindowEvents.LanguageChanged event) { + locale = AppContext.getLocale(); + resourceBundle = ResourceBundle.getBundle("Localization", locale); } private JPanel createGridPanel(int sizeX, int sizeY) { diff --git a/app/src/main/resources/Localization.properties b/app/src/main/resources/Localization.properties new file mode 100644 index 0000000..ba12663 --- /dev/null +++ b/app/src/main/resources/Localization.properties @@ -0,0 +1,9 @@ +# Window titles +windowTitleServerSelector=Server Selector + +# Buttons on the server selector screen +buttonSelectServer=Connect to a server +buttonSelectLocal=Play a game on this computer + +# Buttons on the UI gameboard +buttonBackToMainMenu=Go back to the main menu \ No newline at end of file diff --git a/app/src/main/resources/Localization_nl.properties b/app/src/main/resources/Localization_nl.properties new file mode 100644 index 0000000..4bc0de4 --- /dev/null +++ b/app/src/main/resources/Localization_nl.properties @@ -0,0 +1,2 @@ +# Window titles +windowTitleServerSelector=Selecteer een server \ No newline at end of file