From 147bf07b45019a8ac867fec35d0e4fa099c8d8c6 Mon Sep 17 00:00:00 2001 From: Sergey Ponomarev Date: Sun, 2 Aug 2026 22:46:39 +0300 Subject: [PATCH] refactor Spellcheck plugin --- .../SpellcheckChatRoomDecorator.java | 27 ++++++++----------- .../spellchecker/SpellcheckManager.java | 3 ++- .../SpellcheckerPreferenceDialog.java | 14 +++------- 3 files changed, 17 insertions(+), 27 deletions(-) diff --git a/plugins/spelling/src/main/java/org/jivesoftware/spellchecker/SpellcheckChatRoomDecorator.java b/plugins/spelling/src/main/java/org/jivesoftware/spellchecker/SpellcheckChatRoomDecorator.java index 5b846b506..9f5980c22 100644 --- a/plugins/spelling/src/main/java/org/jivesoftware/spellchecker/SpellcheckChatRoomDecorator.java +++ b/plugins/spelling/src/main/java/org/jivesoftware/spellchecker/SpellcheckChatRoomDecorator.java @@ -41,7 +41,7 @@ public class SpellcheckChatRoomDecorator { private RolloverButton _spellingButton; private final ChatRoom _room; private final JComboBox _languageSelection = new JComboBox<>(); - private Map _languages; + private Map _languages = new HashMap<>(); public SpellcheckChatRoomDecorator(ChatRoom room) { _room = room; @@ -87,23 +87,18 @@ public class SpellcheckChatRoomDecorator { } private void languagesToLocales() { - String spellLanguage = SpellcheckManager.getInstance().getSpellcheckerPreference().getPreferences().getSpellLanguage(); - _languages = new HashMap<>(); - Locale[] locales = Locale.getAvailableLocales(); + SpellcheckerPreferences preferences = SpellcheckManager.getInstance().getSpellcheckerPreference().getPreferences(); + String spellLanguage = preferences.getSpellLanguage(); + _languages.clear(); List languages = SpellcheckManager.getInstance().getSupportedLanguages(); for (String language : languages) { - for (final Locale locale : locales) { - if (locale.toString().equals(language)) { - String label = locale.getDisplayLanguage(Locale.getDefault()); - if (!locale.getDisplayCountry(locale).isEmpty()) { - label = label + "-" + locale.getDisplayCountry(locale); - } - _languages.put(label, language); - _languageSelection.addItem(label); - if (language.equals(spellLanguage)) { - _languageSelection.setSelectedItem(label); - } - } + String localeTag = language.replace("_", "-"); + Locale locale = Locale.forLanguageTag(localeTag); + String label = locale.getDisplayName(Locale.getDefault()); + _languageSelection.addItem(label); + _languages.put(label, language); + if (language.equals(spellLanguage)) { + _languageSelection.setSelectedItem(label); } } } diff --git a/plugins/spelling/src/main/java/org/jivesoftware/spellchecker/SpellcheckManager.java b/plugins/spelling/src/main/java/org/jivesoftware/spellchecker/SpellcheckManager.java index cdf8534cc..8b4d13ad4 100644 --- a/plugins/spelling/src/main/java/org/jivesoftware/spellchecker/SpellcheckManager.java +++ b/plugins/spelling/src/main/java/org/jivesoftware/spellchecker/SpellcheckManager.java @@ -63,12 +63,13 @@ public class SpellcheckManager { } public SpellDictionary getDictionary(String language) { + File personalDictionary = new File(SparkManager.getUserDirectory(), "personalDictionary.dict"); try { InputStream dictionary = getClass().getClassLoader().getResourceAsStream("dictionary/" + language + ".zip"); if (dictionary == null) { Log.error("Dictionary not found"); + return null; } - File personalDictionary = new File(SparkManager.getUserDirectory(), "personalDictionary.dict"); SpellDictionary dict = new OpenOfficeSpellDictionary(dictionary, personalDictionary); return dict; } catch (IOException e) { diff --git a/plugins/spelling/src/main/java/org/jivesoftware/spellchecker/SpellcheckerPreferenceDialog.java b/plugins/spelling/src/main/java/org/jivesoftware/spellchecker/SpellcheckerPreferenceDialog.java index 1ef8228b2..29953bbf7 100644 --- a/plugins/spelling/src/main/java/org/jivesoftware/spellchecker/SpellcheckerPreferenceDialog.java +++ b/plugins/spelling/src/main/java/org/jivesoftware/spellchecker/SpellcheckerPreferenceDialog.java @@ -42,7 +42,6 @@ public class SpellcheckerPreferenceDialog extends JPanel { private final JPanel spellPanel = new JPanel(); private final JLabel lLanguage = new JLabel(); - private final Locale[] locales = Locale.getAvailableLocales(); private final ArrayList languages; public SpellcheckerPreferenceDialog(ArrayList languages) { @@ -52,15 +51,10 @@ public class SpellcheckerPreferenceDialog extends JPanel { ignoreCase.addActionListener(e -> setIgnoreUppercase(ignoreCase.isSelected())); spellcheckingEnabled.addActionListener(e -> updateUI(spellcheckingEnabled.isSelected())); for (String language : languages) { - for (final Locale locale : locales) { - if (locale.toString().equals(language)) { - String label = locale.getDisplayLanguage(Locale.getDefault()); - if (!locale.getDisplayCountry(locale).isEmpty()) { - label = label + "-" + locale.getDisplayCountry(locale); - } - spellLanguages.addItem(label); - } - } + String localeTag = language.replace("_", "-"); + Locale locale = Locale.forLanguageTag(localeTag); + String label = locale.getDisplayName(Locale.getDefault()); + spellLanguages.addItem(label); } Insets insets = new Insets(5, 5, 5, 5);