From 1bd9e17b60ab54a67615b5bda0c75d0abea4b165 Mon Sep 17 00:00:00 2001 From: gewuyou <1063891901@qq.com> Date: Fri, 25 Aug 2023 23:49:41 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20=E4=BF=AE=E5=A4=8D=20BUG=20?= =?UTF-8?q?=E5=BD=93=E6=B2=A1=E6=9C=89=E9=85=8D=E7=BD=AE=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E6=89=93=E5=BC=80=E8=BD=AF=E4=BB=B6=E6=8A=A5=E9=94=99=E9=97=AE?= =?UTF-8?q?=E9=A2=98=EF=BC=8C=E8=A7=A3=E5=86=B3=E5=90=88=E5=B9=B6=E5=86=B2?= =?UTF-8?q?=E7=AA=81=EF=BC=8C=E2=9C=8F=EF=B8=8F=20=E4=BF=AE=E6=AD=A3?= =?UTF-8?q?=E9=94=99=E5=88=AB=E5=AD=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/config/LoadJnotepadConfig.java | 101 ++++++------- .../app/config/LocalizationConfig.java | 137 +++++++++--------- .../jcnc/jnotepad/constants/AppConstants.java | 10 +- .../jnotepad/constants/TextConstants.java | 22 +++ .../jcnc/jnotepad/tool/EncodingDetector.java | 8 +- 5 files changed, 146 insertions(+), 132 deletions(-) diff --git a/src/main/java/org/jcnc/jnotepad/app/config/LoadJnotepadConfig.java b/src/main/java/org/jcnc/jnotepad/app/config/LoadJnotepadConfig.java index 6d81ab2..a940795 100644 --- a/src/main/java/org/jcnc/jnotepad/app/config/LoadJnotepadConfig.java +++ b/src/main/java/org/jcnc/jnotepad/app/config/LoadJnotepadConfig.java @@ -1,17 +1,14 @@ package org.jcnc.jnotepad.app.config; -import javafx.scene.control.MenuItem; -import javafx.scene.input.KeyCombination; -import org.jcnc.jnotepad.app.entity.ShortcutKey; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.jcnc.jnotepad.exception.AppException; import org.jcnc.jnotepad.tool.LogUtil; import org.jcnc.jnotepad.tool.PopUpUtil; -import org.jcnc.jnotepad.ui.menu.JNotepadMenuBar; import org.slf4j.Logger; import java.io.*; -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; import static org.jcnc.jnotepad.constants.AppConstants.CONFIG_NAME; import static org.jcnc.jnotepad.constants.TextConstants.JNOTEPAD_CONFIG; @@ -63,6 +60,11 @@ public abstract class LoadJnotepadConfig { logger.info("未检测到配置文件!"); // 不存在则创建 createConfig(); + try { + loadConfig(new FileInputStream(CONFIG_NAME)); + } catch (FileNotFoundException ex) { + throw new AppException(ex.getMessage()); + } } } @@ -76,55 +78,56 @@ public abstract class LoadJnotepadConfig { protected abstract T parseConfig(InputStream inputStream); private void createConfig() { - List shortcutKeyList = getShortcutKeys(); - JnotepadConfig.getInstance().setShortcutKeyList(shortcutKeyList); - for (ShortcutKey shortcutKey : shortcutKeyList) { - // 保证json的key必须和变量名一致 - MenuItem menuItem = JNotepadMenuBar.getMenuBar().getItemMap().get(shortcutKey.getButtonName()); - String shortKeyValue = shortcutKey.getShortcutKeyValue(); - if ("".equals(shortKeyValue) || Objects.isNull(menuItem)) { - continue; - } - // 动态添加快捷键 - menuItem.setAccelerator(KeyCombination.keyCombination(shortKeyValue)); - } + // List shortcutKeyList = getShortcutKeys(); + // JnotepadConfig.getInstance().setShortcutKeyList(shortcutKeyList); + // for (ShortcutKey shortcutKey : shortcutKeyList) { + // // 保证json的key必须和变量名一致 + // MenuItem menuItem = JNotepadMenuBar.getMenuBar().getItemMap().get(shortcutKey.getButtonName()); + // String shortKeyValue = shortcutKey.getShortcutKeyValue(); + // if ("".equals(shortKeyValue) || Objects.isNull(menuItem)) { + // continue; + // } + // // 动态添加快捷键 + // menuItem.setAccelerator(KeyCombination.keyCombination(shortKeyValue)); + // } try (BufferedWriter writer = new BufferedWriter(new FileWriter(CONFIG_NAME))) { writer.write(JNOTEPAD_CONFIG); } catch (IOException e) { PopUpUtil.errorAlert("错误", "读写错误", "配置文件读写错误!"); } + LocalizationConfig.getLocalizationConfig().initLocalizationConfig(); } - /** - * 获取快捷键集合 - * - * @return java.util.List 快捷键集合 - * @since 2023/8/24 14:19 - */ - private static List getShortcutKeys() { - List shortcutKeyList = new ArrayList<>(); - // 打开文件 - ShortcutKey shortcutKeyOfOpen = new ShortcutKey("openItem", "ctrl+o"); - - // 新建 - ShortcutKey shortcutKeyOfNew = new ShortcutKey("newItem", "ctrl+n"); - - // 保存 - ShortcutKey shortcutKeyOfSave = new ShortcutKey("saveItem", "ctrl+s"); - - // 保存作为 - ShortcutKey shortcutKeyOfSaveAs = new ShortcutKey("saveAsItem", "ctrl+shift+s"); - - // 打开配置文件 - ShortcutKey shortcutKeyOfOpenConfig = new ShortcutKey("openConfigItem", "alt+s"); - - shortcutKeyList.add(shortcutKeyOfOpen); - shortcutKeyList.add(shortcutKeyOfNew); - shortcutKeyList.add(shortcutKeyOfSave); - shortcutKeyList.add(shortcutKeyOfSaveAs); - shortcutKeyList.add(shortcutKeyOfOpenConfig); - return shortcutKeyList; - } + // /** + // * 获取快捷键集合 + // * + // * @return java.util.List 快捷键集合 + // * @since 2023/8/24 14:19 + // */ + // private static List getShortcutKeys() { + // List shortcutKeyList = new ArrayList<>(); + // // 打开文件 + // ShortcutKey shortcutKeyOfOpen = new ShortcutKey("openItem", "ctrl+o"); + // + // // 新建 + // ShortcutKey shortcutKeyOfNew = new ShortcutKey("newItem", "ctrl+n"); + // + // // 保存 + // ShortcutKey shortcutKeyOfSave = new ShortcutKey("saveItem", "ctrl+s"); + // + // // 保存作为 + // ShortcutKey shortcutKeyOfSaveAs = new ShortcutKey("saveAsItem", "ctrl+shift+s"); + // + // // 打开配置文件 + // ShortcutKey shortcutKeyOfOpenConfig = new ShortcutKey("openConfigItem", "alt+s"); + // + // shortcutKeyList.add(shortcutKeyOfOpen); + // shortcutKeyList.add(shortcutKeyOfNew); + // shortcutKeyList.add(shortcutKeyOfSave); + // shortcutKeyList.add(shortcutKeyOfSaveAs); + // shortcutKeyList.add(shortcutKeyOfOpenConfig); + // return shortcutKeyList; + // } /** * 加载配置文件 diff --git a/src/main/java/org/jcnc/jnotepad/app/config/LocalizationConfig.java b/src/main/java/org/jcnc/jnotepad/app/config/LocalizationConfig.java index 24dda22..7711abd 100644 --- a/src/main/java/org/jcnc/jnotepad/app/config/LocalizationConfig.java +++ b/src/main/java/org/jcnc/jnotepad/app/config/LocalizationConfig.java @@ -7,9 +7,8 @@ import java.io.*; import java.nio.charset.StandardCharsets; import java.util.Properties; -import static org.jcnc.jnotepad.constants.AppConstants.CH_LANGUAGE_PACK_NAME; -import static org.jcnc.jnotepad.constants.AppConstants.EN_LANGUAGE_PACK_NAME; -import static org.jcnc.jnotepad.constants.TextConstants.TEXT_WRAP; +import static org.jcnc.jnotepad.constants.AppConstants.APP_NAME; +import static org.jcnc.jnotepad.constants.TextConstants.*; /** * 本地化配置文件 @@ -42,33 +41,34 @@ public class LocalizationConfig { InputStreamReader reader = new InputStreamReader(inputStream, StandardCharsets.UTF_8); properties.load(reader); } catch (IOException e) { + logger.info("未检测到本地化语言包!"); // 如果读取出错,则调用初始化方法 initializePropertiesFile(); } logger.info("初始化本地化语言包成功!"); - title = properties.getProperty("title", "JNotepad"); - sava = properties.getProperty("SAVA"); - file = properties.getProperty("FILE"); - newly = properties.getProperty("NEW"); - open = properties.getProperty("OPEN"); - savaAs = properties.getProperty("SAVA_AS"); - set = properties.getProperty("SET"); - wordWrap = properties.getProperty("WORD_WRAP"); - plugin = properties.getProperty("PLUGIN"); - addPlugin = properties.getProperty("ADD_PLUGIN"); - statistics = properties.getProperty("STATISTICS"); - openConfigurationFile = properties.getProperty("OPEN_CONFIGURATION_FILE"); - top = properties.getProperty("TOP"); - language = properties.getProperty("LANGUAGE"); - chinese = properties.getProperty("CHINESE"); - english = properties.getProperty("ENGLISH"); + title = properties.getProperty(TITLE, APP_NAME); + sava = properties.getProperty(SAVE); + file = properties.getProperty(FILE); + newly = properties.getProperty(NEW); + open = properties.getProperty(OPEN); + savaAs = properties.getProperty(SAVE_AS); + set = properties.getProperty(SET); + wordWrap = properties.getProperty(WORD_WRAP); + plugin = properties.getProperty(PLUGIN); + addPlugin = properties.getProperty(ADD_PLUGIN); + statistics = properties.getProperty(STATISTICS); + openConfigurationFile = properties.getProperty(OPEN_CONFIGURATION_FILE); + top = properties.getProperty(TOP); + language = properties.getProperty(LANGUAGE); + chinese = properties.getProperty(UPPER_CHINESE); + english = properties.getProperty(UPPER_ENGLISH); textWrap = properties.getProperty(TEXT_WRAP, "true"); - newFile = properties.getProperty("NEW_FILE"); - unknown = properties.getProperty("UNKNOWN"); - row = properties.getProperty("ROW"); - column = properties.getProperty("COLUMN"); - wordCount = properties.getProperty("WORD_COUNT"); - encode = properties.getProperty("ENCODE"); + newFile = properties.getProperty(NEW_FILE); + unknown = properties.getProperty(UNKNOWN); + row = properties.getProperty(ROW); + column = properties.getProperty(COLUMN); + wordCount = properties.getProperty(WORD_COUNT); + encode = properties.getProperty(ENCODE); } /** @@ -103,52 +103,52 @@ public class LocalizationConfig { private void setChineseLanguagePack() { properties.clear(); // 设置默认属性 - properties.setProperty("TITLE", "JNotepad"); - properties.setProperty("NEW_FILE", "新建文件"); - properties.setProperty("SAVA", "保存"); - properties.setProperty("FILE", "文件"); - properties.setProperty("NEW", "新建"); - properties.setProperty("OPEN", "打开"); - properties.setProperty("SAVA_AS", "另存为"); - properties.setProperty("SET", "设置"); - properties.setProperty("WORD_WRAP", "自动换行"); - properties.setProperty("OPEN_CONFIGURATION_FILE", "打开配置文件"); - properties.setProperty("PLUGIN", "插件"); - properties.setProperty("ADD_PLUGIN", "增加插件"); - properties.setProperty("STATISTICS", "统计字数"); - properties.setProperty("ROW", "行数"); - properties.setProperty("COLUMN", "列数"); - properties.setProperty("WORD_COUNT", "字数"); - properties.setProperty("ENCODE", "编码"); - properties.setProperty("TOP", "窗口置顶"); - properties.setProperty("LANGUAGE", "语言"); - properties.setProperty("CHINESE", "中文"); - properties.setProperty("ENGLISH", "英文"); + properties.setProperty(TITLE, APP_NAME); + properties.setProperty(NEW_FILE, "新建文件"); + properties.setProperty(SAVE, "保存"); + properties.setProperty(FILE, "文件"); + properties.setProperty(NEW, "新建"); + properties.setProperty(OPEN, "打开"); + properties.setProperty(SAVE_AS, "另存为"); + properties.setProperty(SET, "设置"); + properties.setProperty(WORD_WRAP, "自动换行"); + properties.setProperty(OPEN_CONFIGURATION_FILE, "打开配置文件"); + properties.setProperty(PLUGIN, "插件"); + properties.setProperty(ADD_PLUGIN, "增加插件"); + properties.setProperty(STATISTICS, "统计字数"); + properties.setProperty(ROW, "行数"); + properties.setProperty(COLUMN, "列数"); + properties.setProperty(WORD_COUNT, "字数"); + properties.setProperty(ENCODE, "编码"); + properties.setProperty(TOP, "窗口置顶"); + properties.setProperty(LANGUAGE, "语言"); + properties.setProperty(UPPER_CHINESE, "中文"); + properties.setProperty(UPPER_ENGLISH, "英文"); } private void setEnglishLanguagePack() { properties.clear(); - properties.setProperty("TITLE", "JNotepad"); - properties.setProperty("NEW_FILE", "New File"); - properties.setProperty("SAVA", "Save"); - properties.setProperty("FILE", "File"); - properties.setProperty("NEW", "New"); - properties.setProperty("OPEN", "Open"); - properties.setProperty("SAVA_AS", "Save As"); - properties.setProperty("SET", "Settings"); - properties.setProperty("WORD_WRAP", "Word Wrap"); - properties.setProperty("OPEN_CONFIGURATION_FILE", "Open Configuration File"); - properties.setProperty("PLUGIN", "Plugins"); - properties.setProperty("ADD_PLUGIN", "Add Plugin"); - properties.setProperty("STATISTICS", "Word Count"); - properties.setProperty("ROW", "Row"); - properties.setProperty("COLUMN", "Column"); - properties.setProperty("WORD_COUNT", "Word Count"); - properties.setProperty("ENCODE", "Encoding"); - properties.setProperty("TOP", "Window Top"); - properties.setProperty("LANGUAGE", "Language"); - properties.setProperty("CHINESE", "Chinese"); - properties.setProperty("ENGLISH", "English"); + properties.setProperty(TITLE, APP_NAME); + properties.setProperty(NEW_FILE, "New File"); + properties.setProperty(SAVE, "Save"); + properties.setProperty(FILE, "File"); + properties.setProperty(NEW, "New"); + properties.setProperty(OPEN, "Open"); + properties.setProperty(SAVE_AS, "Save As"); + properties.setProperty(SET, "Settings"); + properties.setProperty(WORD_WRAP, "Word Wrap"); + properties.setProperty(OPEN_CONFIGURATION_FILE, "Open Configuration File"); + properties.setProperty(PLUGIN, "Plugins"); + properties.setProperty(ADD_PLUGIN, "Add Plugin"); + properties.setProperty(STATISTICS, "Word Count"); + properties.setProperty(ROW, "Row"); + properties.setProperty(COLUMN, "Column"); + properties.setProperty(WORD_COUNT, "Word Count"); + properties.setProperty(ENCODE, "Encoding"); + properties.setProperty(TOP, "Window Top"); + properties.setProperty(LANGUAGE, "Language"); + properties.setProperty(UPPER_CHINESE, "Chinese"); + properties.setProperty(UPPER_ENGLISH, "English"); } private String textWrap; @@ -192,6 +192,9 @@ public class LocalizationConfig { private String newFile; /// EncodingDetector 文本常量 + /** + * 未知 + */ private String unknown; /// JNotepadStatusBox diff --git a/src/main/java/org/jcnc/jnotepad/constants/AppConstants.java b/src/main/java/org/jcnc/jnotepad/constants/AppConstants.java index d6378ec..2a1e151 100644 --- a/src/main/java/org/jcnc/jnotepad/constants/AppConstants.java +++ b/src/main/java/org/jcnc/jnotepad/constants/AppConstants.java @@ -18,20 +18,12 @@ public class AppConstants { * 初始高度 */ public static final double SCREEN_LENGTH = 600; + public static final String APP_NAME = "JNotepad"; /** * logo地址 */ public static final String APP_ICON = "/img/icon.png"; - /** - * 中文语言包 - */ - public static final String CH_LANGUAGE_PACK_NAME = "ch_language_pack.txt"; - /** - * 英文语言包 - */ - public static final String EN_LANGUAGE_PACK_NAME = "en_language_pack.txt"; - /** * 配置文件名 */ diff --git a/src/main/java/org/jcnc/jnotepad/constants/TextConstants.java b/src/main/java/org/jcnc/jnotepad/constants/TextConstants.java index ea4b8d5..981fa94 100644 --- a/src/main/java/org/jcnc/jnotepad/constants/TextConstants.java +++ b/src/main/java/org/jcnc/jnotepad/constants/TextConstants.java @@ -24,6 +24,28 @@ public class TextConstants { */ public static final String TEXT_WRAP = "text.wrap"; + public static final String TITLE = "title"; + public static final String SAVE = "SAVE"; + public static final String FILE = "FILE"; + public static final String NEW = "NEW"; + public static final String OPEN = "OPEN"; + public static final String SAVE_AS = "SAVE_AS"; + public static final String SET = "SET"; + public static final String WORD_WRAP = "WORD_WRAP"; + public static final String PLUGIN = "PLUGIN"; + public static final String ADD_PLUGIN = "ADD_PLUGIN"; + public static final String STATISTICS = "STATISTICS"; + public static final String OPEN_CONFIGURATION_FILE = "OPEN_CONFIGURATION_FILE"; + public static final String TOP = "TOP"; + public static final String LANGUAGE = "LANGUAGE"; + public static final String UPPER_CHINESE = "CHINESE"; + public static final String UPPER_ENGLISH = "ENGLISH"; + public static final String NEW_FILE = "NEW_FILE"; + public static final String UNKNOWN = "UNKNOWN"; + public static final String ROW = "ROW"; + public static final String COLUMN = "COLUMN"; + public static final String WORD_COUNT = "WORD_COUNT"; + public static final String ENCODE = "ENCODE"; /// Config 文本常量 diff --git a/src/main/java/org/jcnc/jnotepad/tool/EncodingDetector.java b/src/main/java/org/jcnc/jnotepad/tool/EncodingDetector.java index 4b33f46..ef70411 100644 --- a/src/main/java/org/jcnc/jnotepad/tool/EncodingDetector.java +++ b/src/main/java/org/jcnc/jnotepad/tool/EncodingDetector.java @@ -3,16 +3,13 @@ package org.jcnc.jnotepad.tool; import com.ibm.icu.text.CharsetDetector; import com.ibm.icu.text.CharsetMatch; -import org.jcnc.jnotepad.constants.TextConstants; +import org.jcnc.jnotepad.app.config.LocalizationConfig; import org.slf4j.Logger; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.nio.charset.Charset; -import java.nio.charset.StandardCharsets; - -import static org.jcnc.jnotepad.constants.TextConstants.UNKNOWN; /** @@ -73,13 +70,10 @@ public class EncodingDetector { */ public static Charset detectEncodingCharset(File file) { String charset = detectEncoding(file); - if (charset.equals(localizationConfig.getUnknown())) { try { - assert charset != null; return Charset.forName(charset); } catch (Exception e) { return Charset.defaultCharset(); } - return Charset.forName(charset); } } \ No newline at end of file