Skip to content

Commit 9f175ad

Browse files
authored
Merge pull request #296 from MiguelGarcia-E/feature/native-language-names-291
[Feature]: Show language names in their native language
2 parents 282334f + d9360a8 commit 9f175ad

File tree

2 files changed

+55
-7
lines changed

2 files changed

+55
-7
lines changed

src/main/java/com/dinosaur/dinosaurexploder/utils/LanguageManager.java

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,30 @@
1414
import javafx.beans.property.StringProperty;
1515

1616
public class LanguageManager {
17-
private final StringProperty selectedLanguage = new SimpleStringProperty("English");
17+
18+
public static final String DEFAULT_LANGUAGE = "English";
19+
private final StringProperty selectedLanguage = new SimpleStringProperty(DEFAULT_LANGUAGE);
1820
private Map<String, String> translations = new HashMap<>();
21+
private static final Map<String, String> NATIVE_LANGUAGE_NAMES =
22+
Map.of(
23+
DEFAULT_LANGUAGE,
24+
DEFAULT_LANGUAGE,
25+
"French",
26+
"Français",
27+
"German",
28+
"Deutsch",
29+
"Spanish",
30+
"Español",
31+
"Japanese",
32+
"日本語",
33+
"Russian",
34+
"Русский",
35+
"Portuguese",
36+
"Português",
37+
"Greek",
38+
"Ελληνικά",
39+
"Bulgarian",
40+
"Български");
1941

2042
private static final String RESOURCE_PATH_SEPARATOR = "/"; // Always forward slash for classpath
2143
private static final String TRANSLATION_PATH_NO_SLASH = "assets/translation/";
@@ -32,7 +54,7 @@ private LanguageManager() {}
3254
public static synchronized LanguageManager getInstance() {
3355
if (languageManager == null) {
3456
languageManager = new LanguageManager();
35-
languageManager.setSelectedLanguage("English");
57+
languageManager.setSelectedLanguage(DEFAULT_LANGUAGE);
3658
}
3759
return languageManager;
3860
}
@@ -62,6 +84,12 @@ public List<String> getAvailableLanguages() {
6284
return languages;
6385
}
6486

87+
// Returns the language name in the native word (ex. English->English, Spanish->Español). Default
88+
// returns word in english
89+
public String getNativeLanguageName(String language) {
90+
return NATIVE_LANGUAGE_NAMES.getOrDefault(language, language);
91+
}
92+
6593
// Check if the application is running inside a JAR
6694
private boolean isRunningInsideJar() {
6795
try (InputStream is =

src/main/java/com/dinosaur/dinosaurexploder/view/DinosaurMenu.java

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.dinosaur.dinosaurexploder.view;
22

33
import static com.almasb.fxgl.dsl.FXGLForKtKt.getUIFactoryService;
4+
import static com.dinosaur.dinosaurexploder.utils.LanguageManager.DEFAULT_LANGUAGE;
45

56
import com.almasb.fxgl.app.scene.FXGLMenu;
67
import com.almasb.fxgl.app.scene.MenuType;
@@ -19,10 +20,7 @@
1920
import javafx.animation.TranslateTransition;
2021
import javafx.geometry.Insets;
2122
import javafx.geometry.Pos;
22-
import javafx.scene.control.Button;
23-
import javafx.scene.control.ComboBox;
24-
import javafx.scene.control.Label;
25-
import javafx.scene.control.Slider;
23+
import javafx.scene.control.*;
2624
import javafx.scene.image.Image;
2725
import javafx.scene.image.ImageView;
2826
import javafx.scene.layout.StackPane;
@@ -165,12 +163,34 @@ private VBox createLanguageSelector() {
165163
languageComboBox.setPrefWidth(ComboBox.USE_COMPUTED_SIZE);
166164
languageComboBox.setMinWidth(ComboBox.USE_COMPUTED_SIZE);
167165

168-
languageComboBox.setValue(settings.getLanguage() != null ? settings.getLanguage() : "English");
166+
languageComboBox.setValue(
167+
settings.getLanguage() != null ? settings.getLanguage() : DEFAULT_LANGUAGE);
169168

170169
if (settings.getLanguage() != null) {
171170
changeLanguage(settings.getLanguage());
172171
}
173172

173+
// Define what text is drawn, keeping orignal item value (Draws text->"Français" while item
174+
// value->"French"
175+
languageComboBox.setCellFactory(
176+
cb ->
177+
new ListCell<>() {
178+
@Override
179+
protected void updateItem(String item, boolean empty) {
180+
super.updateItem(item, empty);
181+
setText(empty || item == null ? null : languageManager.getNativeLanguageName(item));
182+
}
183+
});
184+
185+
languageComboBox.setButtonCell(
186+
new ListCell<>() {
187+
@Override
188+
protected void updateItem(String item, boolean empty) {
189+
super.updateItem(item, empty);
190+
setText(empty || item == null ? null : languageManager.getNativeLanguageName(item));
191+
}
192+
});
193+
174194
applyStylesheet(languageComboBox);
175195
languageComboBox.setOnAction(
176196
event -> {

0 commit comments

Comments
 (0)