From 2c4719f6d46ba3fd0bd30212ee270188b5154acf Mon Sep 17 00:00:00 2001 From: Ticho Hidding Date: Thu, 25 Sep 2025 14:38:06 +0200 Subject: [PATCH 1/5] added localization options //todo add all the strings --- .idea/compiler.xml | 96 +------------------ app/src/main/java/org/toop/Main.java | 2 + .../org/toop/app/gui/LocalServerSelector.java | 18 +++- .../java/org/toop/events/WindowEvents.java | 3 + .../main/java/org/toop/local/AppContext.java | 14 +++ .../org/toop/tictactoe/gui/UIGameBoard.java | 15 ++- .../main/resources/Localization.properties | 9 ++ .../main/resources/Localization_nl.properties | 2 + 8 files changed, 62 insertions(+), 97 deletions(-) create mode 100644 app/src/main/java/org/toop/local/AppContext.java create mode 100644 app/src/main/resources/Localization.properties create mode 100644 app/src/main/resources/Localization_nl.properties 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 From 52d41e587ee612b464c9afbd9251c532fcc38df7 Mon Sep 17 00:00:00 2001 From: Ticho Hidding Date: Tue, 30 Sep 2025 14:22:08 +0200 Subject: [PATCH 2/5] merge to UI --- .idea/misc.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.idea/misc.xml b/.idea/misc.xml index 72be14a..64c32f6 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -13,7 +13,7 @@ - + \ No newline at end of file From b12c74433a8f3f4d30d023d185f9fa6517d32ae4 Mon Sep 17 00:00:00 2001 From: Ticho Hidding Date: Wed, 1 Oct 2025 15:31:38 +0200 Subject: [PATCH 3/5] merge to UI --- .idea/compiler.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/.idea/compiler.xml b/.idea/compiler.xml index d801bf4..dcffce8 100644 --- a/.idea/compiler.xml +++ b/.idea/compiler.xml @@ -7,7 +7,6 @@ - From 9e35db4dd489de4295f6973ee5f0f342174cf061 Mon Sep 17 00:00:00 2001 From: Ticho Hidding Date: Wed, 1 Oct 2025 15:51:14 +0200 Subject: [PATCH 4/5] added NL and EN for all strings currently in UI --- app/src/main/java/org/toop/app/App.java | 9 ++++++- .../java/org/toop/app/menu/CreditsMenu.java | 9 ++++++- .../main/java/org/toop/app/menu/MainMenu.java | 25 ++++++++++++------- app/src/main/java/org/toop/app/menu/Menu.java | 6 +++++ .../java/org/toop/app/menu/OptionsMenu.java | 9 ++++++- .../main/java/org/toop/app/menu/QuitMenu.java | 14 ++++++++--- .../main/resources/Localization.properties | 22 ++++++++++------ .../main/resources/Localization_nl.properties | 19 ++++++++++++-- 8 files changed, 88 insertions(+), 25 deletions(-) diff --git a/app/src/main/java/org/toop/app/App.java b/app/src/main/java/org/toop/app/App.java index da9a955..db9683d 100644 --- a/app/src/main/java/org/toop/app/App.java +++ b/app/src/main/java/org/toop/app/App.java @@ -8,12 +8,19 @@ import javafx.application.Application; import javafx.scene.layout.StackPane; import javafx.scene.Scene; import javafx.stage.Stage; +import org.toop.local.AppContext; + +import java.util.Locale; +import java.util.ResourceBundle; public class App extends Application { private static Stage stage; private static Scene scene; private static StackPane root; + private Locale currentLocale = AppContext.getLocale(); + private ResourceBundle resourceBundle = ResourceBundle.getBundle("Localization", currentLocale); + public static void run(String[] args) { launch(args); } @@ -23,7 +30,7 @@ public class App extends Application { final StackPane root = new StackPane(new MainMenu().getPane()); final Scene scene = new Scene(root); - stage.setTitle("pism"); + stage.setTitle(resourceBundle.getString("windowTitle")); stage.setMinWidth(1080); stage.setMinHeight(720); diff --git a/app/src/main/java/org/toop/app/menu/CreditsMenu.java b/app/src/main/java/org/toop/app/menu/CreditsMenu.java index 96c77cd..385bf42 100644 --- a/app/src/main/java/org/toop/app/menu/CreditsMenu.java +++ b/app/src/main/java/org/toop/app/menu/CreditsMenu.java @@ -1,6 +1,13 @@ package org.toop.app.menu; +import org.toop.local.AppContext; + +import java.util.Locale; +import java.util.ResourceBundle; + public final class CreditsMenu extends Menu { - public CreditsMenu() { + private Locale currentLocale = AppContext.getLocale(); + private ResourceBundle resourceBundle = ResourceBundle.getBundle("Localization", currentLocale); + public CreditsMenu() { } } \ 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 index d4e1b70..4a01ca9 100644 --- a/app/src/main/java/org/toop/app/menu/MainMenu.java +++ b/app/src/main/java/org/toop/app/menu/MainMenu.java @@ -4,23 +4,30 @@ import javafx.geometry.Pos; import javafx.scene.control.Button; import javafx.scene.image.ImageView; import javafx.scene.layout.*; +import org.toop.local.AppContext; + +import java.util.Locale; +import java.util.ResourceBundle; public final class MainMenu extends Menu { - public MainMenu() { + private Locale currentLocale = AppContext.getLocale(); + private ResourceBundle resourceBundle = ResourceBundle.getBundle("Localization", currentLocale); + + public MainMenu() { final ImageView background = new ImageView(); - final Button tictactoe = createButton("Tic Tac Toe", () -> {}); - final Button reversi = createButton("Reversi", () -> {}); - final Button sudoku = createButton("Sudoku", () -> {}); - final Button battleship = createButton("Battleship", () -> {}); - final Button other = createButton("Other", () -> {}); + final Button tictactoe = createButton(resourceBundle.getString("mainMenuSelectTicTacToe"), () -> {}); + final Button reversi = createButton(resourceBundle.getString("mainMenuSelectReversi"), () -> {}); + final Button sudoku = createButton(resourceBundle.getString("mainMenuSelectSudoku"), () -> {}); + final Button battleship = createButton(resourceBundle.getString("mainMenuSelectBattleship"), () -> {}); + final Button other = createButton(resourceBundle.getString("mainMenuSelectOther"), () -> {}); final VBox gamesBox = new VBox(tictactoe, reversi, sudoku, background, other); gamesBox.setAlignment(Pos.TOP_CENTER); - final Button credits = createButton("Credits", () -> {}); - final Button options = createButton("Options", () -> {}); - final Button quit = createButton("Quit", () -> {}); + final Button credits = createButton(resourceBundle.getString("mainMenuSelectCredits"), () -> {}); + final Button options = createButton(resourceBundle.getString("mainMenuSelectOptions"), () -> {}); + final Button quit = createButton(resourceBundle.getString("mainMenuSelectQuit"), () -> {}); final VBox creditsBox = new VBox(10, credits, options, quit); creditsBox.setAlignment(Pos.BOTTOM_CENTER); diff --git a/app/src/main/java/org/toop/app/menu/Menu.java b/app/src/main/java/org/toop/app/menu/Menu.java index fc0627f..fba8208 100644 --- a/app/src/main/java/org/toop/app/menu/Menu.java +++ b/app/src/main/java/org/toop/app/menu/Menu.java @@ -6,10 +6,16 @@ import javafx.animation.FadeTransition; import javafx.scene.control.Button; import javafx.scene.layout.Pane; import javafx.util.Duration; +import org.toop.local.AppContext; + +import java.util.Locale; +import java.util.ResourceBundle; public abstract class Menu { protected Pane pane; public Pane getPane() { return pane; } + private Locale currentLocale = AppContext.getLocale(); + private ResourceBundle resourceBundle = ResourceBundle.getBundle("Localization", currentLocale); public void fadeBackgroundImage(String imagePath, float from, float to, float milliseconds) { final FadeTransition fade = new FadeTransition(Duration.millis(milliseconds), App.getRoot()); diff --git a/app/src/main/java/org/toop/app/menu/OptionsMenu.java b/app/src/main/java/org/toop/app/menu/OptionsMenu.java index 541bb73..2d2bd64 100644 --- a/app/src/main/java/org/toop/app/menu/OptionsMenu.java +++ b/app/src/main/java/org/toop/app/menu/OptionsMenu.java @@ -1,6 +1,13 @@ package org.toop.app.menu; +import org.toop.local.AppContext; + +import java.util.Locale; +import java.util.ResourceBundle; + public final class OptionsMenu extends Menu { - public OptionsMenu() { + private Locale currentLocale = AppContext.getLocale(); + private ResourceBundle resourceBundle = ResourceBundle.getBundle("Localization", currentLocale); + public OptionsMenu() { } } \ No newline at end of file diff --git a/app/src/main/java/org/toop/app/menu/QuitMenu.java b/app/src/main/java/org/toop/app/menu/QuitMenu.java index fe359da..f57d592 100644 --- a/app/src/main/java/org/toop/app/menu/QuitMenu.java +++ b/app/src/main/java/org/toop/app/menu/QuitMenu.java @@ -8,23 +8,29 @@ import javafx.scene.layout.StackPane; import javafx.scene.layout.VBox; import javafx.scene.text.Text; import org.toop.app.App; +import org.toop.local.AppContext; + +import java.util.Locale; +import java.util.ResourceBundle; public final class QuitMenu extends Menu { - public QuitMenu() { + private Locale currentLocale = AppContext.getLocale(); + private ResourceBundle resourceBundle = ResourceBundle.getBundle("Localization", currentLocale); + public QuitMenu() { final Region background = new Region(); background.getStyleClass().add("quit-background"); background.setPrefSize(Double.MAX_VALUE, Double.MAX_VALUE); - final Text sure = new Text("Are you sure?"); + final Text sure = new Text(resourceBundle.getString("quitMenuTextSure")); sure.getStyleClass().add("quit-text"); - final Button yes = new Button("Yes"); + final Button yes = new Button(resourceBundle.getString("quitMenuButtonYes")); yes.getStyleClass().add("quit-button"); yes.setOnAction(_ -> { App.quit(); }); - final Button no = new Button("No"); + final Button no = new Button(resourceBundle.getString("quitMenuButtonNo")); no.getStyleClass().add("quit-button"); no.setOnAction(_ -> { App.pop(); diff --git a/app/src/main/resources/Localization.properties b/app/src/main/resources/Localization.properties index ba12663..9718bf0 100644 --- a/app/src/main/resources/Localization.properties +++ b/app/src/main/resources/Localization.properties @@ -1,9 +1,17 @@ -# Window titles -windowTitleServerSelector=Server Selector +# Window title +windowTitle=ISY Games Selector -# Buttons on the server selector screen -buttonSelectServer=Connect to a server -buttonSelectLocal=Play a game on this computer +# Main Menu buttons +mainMenuSelectTicTacToe=Tic Tac Toe +mainMenuSelectReversi=Reversi +mainMenuSelectSudoku=Sudoku +mainMenuSelectBattleship=Battleship +mainMenuSelectOther=Other +mainMenuSelectCredits=Credits +mainMenuSelectOptions=Options +mainMenuSelectQuit=Quit -# Buttons on the UI gameboard -buttonBackToMainMenu=Go back to the main menu \ No newline at end of file +# Quit Menu text and buttons +quitMenuTextSure=Are you sure? +quitMenuButtonYes=Yes +quitMenuButtonNo=No \ No newline at end of file diff --git a/app/src/main/resources/Localization_nl.properties b/app/src/main/resources/Localization_nl.properties index 4bc0de4..4c3eb30 100644 --- a/app/src/main/resources/Localization_nl.properties +++ b/app/src/main/resources/Localization_nl.properties @@ -1,2 +1,17 @@ -# Window titles -windowTitleServerSelector=Selecteer een server \ No newline at end of file +# Window title +windowTitle=ISY Spellen Kiezer + +# 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 \ No newline at end of file From 2c83427faf4809aa17c3fd72b330f8e4399158ac Mon Sep 17 00:00:00 2001 From: Ticho Hidding Date: Wed, 1 Oct 2025 15:57:46 +0200 Subject: [PATCH 5/5] fix small merge error --- app/src/main/java/org/toop/app/menu/MainMenu.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/app/src/main/java/org/toop/app/menu/MainMenu.java b/app/src/main/java/org/toop/app/menu/MainMenu.java index b378adf..3ac4955 100644 --- a/app/src/main/java/org/toop/app/menu/MainMenu.java +++ b/app/src/main/java/org/toop/app/menu/MainMenu.java @@ -17,8 +17,6 @@ public final class MainMenu extends Menu { private ResourceBundle resourceBundle = ResourceBundle.getBundle("Localization", currentLocale); public MainMenu() { - final ImageView background = new ImageView(); - final Button tictactoe = createButton(resourceBundle.getString("mainMenuSelectTicTacToe"), () -> {}); final Button reversi = createButton(resourceBundle.getString("mainMenuSelectReversi"), () -> {}); final Button sudoku = createButton(resourceBundle.getString("mainMenuSelectSudoku"), () -> {});