From 6bad0d2a4d292fea94732ee33088a79777973f89 Mon Sep 17 00:00:00 2001 From: zhaohuihua Date: Fri, 23 Jul 2021 08:45:25 +0800 Subject: [PATCH 1/6] =?UTF-8?q?=E5=9B=BD=E9=99=85=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gitee/qdbp/able/i18n/LocaleHolder.java | 7 +-- .../com/gitee/qdbp/able/i18n/LocaleTools.java | 50 +++++++++++++++++-- .../resources/settings/i18n/base.properties | 15 +++--- .../com/gitee/qdbp/able/i18n/LocaleTest.java | 4 +- 4 files changed, 58 insertions(+), 18 deletions(-) diff --git a/able/src/main/java/com/gitee/qdbp/able/i18n/LocaleHolder.java b/able/src/main/java/com/gitee/qdbp/able/i18n/LocaleHolder.java index 7194ed9..151e425 100644 --- a/able/src/main/java/com/gitee/qdbp/able/i18n/LocaleHolder.java +++ b/able/src/main/java/com/gitee/qdbp/able/i18n/LocaleHolder.java @@ -8,7 +8,7 @@ import java.util.Locale; * @author zhaohuihua * @version 20210718 */ -public class LocaleHolder { +class LocaleHolder { private static final ThreadLocal localeHolder = new ThreadLocal(); private static final ThreadLocal inheritableLocaleHolder = new InheritableThreadLocal(); @@ -42,9 +42,6 @@ public class LocaleHolder { if (locale == null) { locale = inheritableLocaleHolder.get(); } - if (locale == null) { - locale = LocaleTools.getDefaultLocale(); - } - return locale != null ? locale : Locale.getDefault(); + return locale; } } diff --git a/able/src/main/java/com/gitee/qdbp/able/i18n/LocaleTools.java b/able/src/main/java/com/gitee/qdbp/able/i18n/LocaleTools.java index ff1a256..d9b16b8 100644 --- a/able/src/main/java/com/gitee/qdbp/able/i18n/LocaleTools.java +++ b/able/src/main/java/com/gitee/qdbp/able/i18n/LocaleTools.java @@ -25,8 +25,7 @@ import com.gitee.qdbp.tools.utils.VerifyTools; /** * 本地化工具类
*
- * https://www.iana.org/assignments/language-subtag-registry/language-subtag-registry - *
+ * https://www.iana.org/assignments/language-subtag-registry/language-subtag-registry
* language 语言: zh | en
* script 书写形式: Hans-简体中文 | Hant-繁体中文
* region(country) 国家或地区: CN-中国 | HK-香港
@@ -43,9 +42,50 @@ import com.gitee.qdbp.tools.utils.VerifyTools; */ public class LocaleTools { + public static void setCurrentLocale(Locale locale) { + LocaleHolder.setLocale(locale, false); + } + + public static void setCurrentLocale(Locale locale, boolean inheritable) { + LocaleHolder.setLocale(locale, inheritable); + } + + /** Reset the Locale for the current thread. **/ + public static void resetCurrentLocale() { + LocaleHolder.resetLocale(); + } + + /** + * 获取当前的区域信息
+ *
+ * 取值顺序
+ * 1. ThreadLocale
+ * 2. classes/settings/i18n/base.properties
+ * 3. xxx.jar/settings/i18n/base.properties
+ * 4. qdbp-able.jar/settings/i18n/base.properties
+ * 如果多个jar包中都有该文件, 则取更新时间最近的
+ * + * @return 区域信息 + */ + public static Locale getCurrentLocale() { + Locale locale = LocaleHolder.getLocale(); + if (locale == null) { + locale = getDefaultLocale(); + } + return locale != null ? locale : Locale.getDefault(); + } + /** * 获取默认的区域信息
- * 从settings/i18n/base.properties配置文件读取 + * 从settings/i18n/base.properties配置文件读取
+ * 这样做是为了应对不希望遵循系统locale的情况
+ * 例如, 无论部署在什么环境下, 都希望以中文作为默认的locale
+ *
+ * 取值顺序
+ * 1. classes/settings/i18n/base.properties
+ * 2. xxx.jar/settings/i18n/base.properties
+ * 3. qdbp-able.jar/settings/i18n/base.properties
+ * 如果多个jar包中都有该文件, 则取更新时间最近的
* * @return 区域信息 */ @@ -78,7 +118,7 @@ public class LocaleTools { */ public static String getMessage(String resource, String key) { try { - Locale locale = LocaleHolder.getLocale(); + Locale locale = getCurrentLocale(); ResourceBundle bundle = ResourceBundle.getBundle(resource, locale, new Utf8Control()); return bundle.getString(key); } catch (MissingResourceException e) { @@ -123,7 +163,7 @@ public class LocaleTools { } Config config = new Config(urls.get(0)); String configValue = config.getString("locale.default", false); - if (VerifyTools.isBlank(configValue)) { + if (VerifyTools.isBlank(configValue) || "AUTO".equals(configValue)) { configDefaultLocale = Locale.getDefault(); } else { configDefaultLocale = Locale.forLanguageTag(configValue); diff --git a/able/src/main/resources/settings/i18n/base.properties b/able/src/main/resources/settings/i18n/base.properties index ad02c48..b8c549b 100644 --- a/able/src/main/resources/settings/i18n/base.properties +++ b/able/src/main/resources/settings/i18n/base.properties @@ -1,6 +1,9 @@ -# 默认的区域设置, 取值顺序: -# 1. LocaleHolder -# 2. classes/settings/i18n/base.properties -# 3. xxx.jar/settings/i18n/base.properties -# 如果多个jar包中都有该文件, 则取更新时间最近的 -locale.default = en +# Default locale setting +# This is to cope with situations where you do not wish to follow the system locale +# For example, expect Chinese to be the locale regardless of the environment in which it is deployed +# The priority of the paths is as follows: +# 1. classes/settings/i18n/base.properties +# 2. xxx.jar/settings/i18n/base.properties +# 3. qdbp-able.jar/settings/i18n/base.properties +# If there are multiple files of the same type, the one with the most recent update time is taken +locale.default = AUTO diff --git a/tools/src/test/java/com/gitee/qdbp/able/i18n/LocaleTest.java b/tools/src/test/java/com/gitee/qdbp/able/i18n/LocaleTest.java index aaf9b39..ca1e628 100644 --- a/tools/src/test/java/com/gitee/qdbp/able/i18n/LocaleTest.java +++ b/tools/src/test/java/com/gitee/qdbp/able/i18n/LocaleTest.java @@ -12,7 +12,7 @@ public class LocaleTest { @Test(priority = 1) public void testDefaultLocale() throws Exception { - Locale locale = LocaleHolder.getLocale(); + Locale locale = LocaleTools.getCurrentLocale(); Assert.assertEquals(locale.getLanguage(), "en"); } @@ -43,7 +43,7 @@ public class LocaleTest { } // 设置区域为英文 - LocaleHolder.setLocale(Locale.forLanguageTag("zh-CN")); + LocaleTools.setCurrentLocale(Locale.forLanguageTag("zh-CN")); try { throw new ServiceException(ExcelErrorCode.EXCEL_DATA_FORMAT_ERROR); } catch (ServiceException e) { -- Gitee From 0ec9b365abe1076ceb1491535504d70269e8632a Mon Sep 17 00:00:00 2001 From: zhaohuihua Date: Fri, 23 Jul 2021 08:58:03 +0800 Subject: [PATCH 2/6] =?UTF-8?q?=E5=85=BC=E5=AE=B9=E5=8E=86=E5=8F=B2?= =?UTF-8?q?=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gitee/qdbp/tools/utils/StringTools.java | 117 ++++++++++++++++-- 1 file changed, 108 insertions(+), 9 deletions(-) diff --git a/able/src/main/java/com/gitee/qdbp/tools/utils/StringTools.java b/able/src/main/java/com/gitee/qdbp/tools/utils/StringTools.java index 6668401..3668b1c 100644 --- a/able/src/main/java/com/gitee/qdbp/tools/utils/StringTools.java +++ b/able/src/main/java/com/gitee/qdbp/tools/utils/StringTools.java @@ -48,6 +48,20 @@ public class StringTools { return UTF8MB4.matcher(string).replaceAll("?"); } + /** + * 判断字符串是不是手机号码 + * + * @author zhaohuihua + * @param string 字符串 + * @return 是不是手机号码, 如果字符串等于null或空字符串, 返回false + */ + public static boolean isPhone(String string) { + if (string == null || string.length() == 0) { + return false; + } + return string.length() == 11 && string.charAt(0) == '1' && isDigit(string); + } + /** * 判断字符串是不是手机号码 * @@ -59,7 +73,21 @@ public class StringTools { if (string == null || string.length() == 0) { return false; } - return PHONE.matcher(string).matches(); + return isPhone(string.toString()); + } + + /** + * 判断字符串是不是邮箱地址 + * + * @author zhaohuihua + * @param string 字符串 + * @return 是不是邮箱地址, 如果字符串等于null或空字符串, 返回false + */ + public static boolean isEmail(String string) { + if (string == null || string.length() == 0) { + return false; + } + return EMAIL.matcher(string).matches(); } /** @@ -76,6 +104,21 @@ public class StringTools { return EMAIL.matcher(string).matches(); } + /** + * 判断字符串是不是网址 + * + * @author zhaohuihua + * @param string 字符串 + * @return 是不是网址, 如果字符串等于null或空字符串, 返回false + */ + public static boolean isUrl(String string) { + if (string == null || string.length() == 0) { + return false; + } + return string.startsWith("http://") || string.startsWith("https://") || string.startsWith("HTTP://") + || string.startsWith("HTTPS://"); + } + /** * 判断字符串是不是网址 * @@ -87,9 +130,7 @@ public class StringTools { if (string == null || string.length() == 0) { return false; } - String s = string.toString(); - return s.startsWith("http://") || s.startsWith("https://") || s.startsWith("HTTP://") - || s.startsWith("HTTPS://"); + return isUrl(string.toString()); } /** @@ -99,7 +140,7 @@ public class StringTools { * @param string 字符串 * @return 是不是数字, 如果字符串等于null或空字符串, 返回false */ - public static boolean isDigit(CharSequence string) { + public static boolean isDigit(String string) { if (string == null || string.length() == 0) { return false; } @@ -112,6 +153,20 @@ public class StringTools { return true; } + /** + * 判断字符串是不是纯数字 + * + * @author zhaohuihua + * @param string 字符串 + * @return 是不是数字, 如果字符串等于null或空字符串, 返回false + */ + public static boolean isDigit(CharSequence string) { + if (string == null || string.length() == 0) { + return false; + } + return isDigit(string.toString()); + } + /** * 判断字符串是不是数字 (可带+-号/小数点/逗号) * @@ -119,11 +174,11 @@ public class StringTools { * @param string 字符串 * @return 是不是数字, 如果字符串等于null或空字符串, 返回false */ - public static boolean isNumber(CharSequence string) { + public static boolean isNumber(String string) { if (string == null || string.length() == 0) { return false; } - String number = trim(string.toString()); + String number = trim(string); int dot = 0; int flag = 0; int digit = 0; @@ -174,6 +229,20 @@ public class StringTools { return digit > 0; } + /** + * 判断字符串是不是数字 (可带+-号/小数点/逗号) + * + * @author zhaohuihua + * @param string 字符串 + * @return 是不是数字, 如果字符串等于null或空字符串, 返回false + */ + public static boolean isNumber(CharSequence string) { + if (string == null || string.length() == 0) { + return false; + } + return isNumber(string.toString()); + } + /** * 判断字符串是不是英文字符 * @@ -181,7 +250,7 @@ public class StringTools { * @param string 字符串 * @return 是不是英文字符, 如果字符串等于null或空字符串, 返回false */ - public static boolean isAscii(CharSequence string) { + public static boolean isAscii(String string) { if (string == null || string.length() == 0) { return false; } @@ -194,6 +263,20 @@ public class StringTools { return true; } + /** + * 判断字符串是不是英文字符 + * + * @author zhaohuihua + * @param string 字符串 + * @return 是不是英文字符, 如果字符串等于null或空字符串, 返回false + */ + public static boolean isAscii(CharSequence string) { + if (string == null || string.length() == 0) { + return false; + } + return isAscii(string.toString()); + } + /** * 是不是单词字符 * @@ -210,7 +293,10 @@ public class StringTools { * @param string 字符串 * @return 是不是单词 */ - public static boolean isWordString(CharSequence string) { + public static boolean isWordString(String string) { + if (string == null || string.length() == 0) { + return false; + } char[] chars = string.toString().toCharArray(); char fc = chars[0]; if (fc >= '0' && fc <= '9') { @@ -224,6 +310,19 @@ public class StringTools { return true; } + /** + * 是不是单词 + * + * @param string 字符串 + * @return 是不是单词 + */ + public static boolean isWordString(CharSequence string) { + if (string == null || string.length() == 0) { + return false; + } + return isWordString(string.toString()); + } + /** * 格式化, 实现参数替换
* 1. 占位符具有语义性
-- Gitee From 6fefcb861793ae76291db165eb69a82942b3e109 Mon Sep 17 00:00:00 2001 From: zhaohuihua Date: Sat, 24 Jul 2021 10:30:00 +0800 Subject: [PATCH 3/6] =?UTF-8?q?=E5=9B=BD=E9=99=85=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- able/src/main/java/com/gitee/qdbp/able/i18n/LocaleTools.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/able/src/main/java/com/gitee/qdbp/able/i18n/LocaleTools.java b/able/src/main/java/com/gitee/qdbp/able/i18n/LocaleTools.java index d9b16b8..8f237bc 100644 --- a/able/src/main/java/com/gitee/qdbp/able/i18n/LocaleTools.java +++ b/able/src/main/java/com/gitee/qdbp/able/i18n/LocaleTools.java @@ -128,7 +128,7 @@ public class LocaleTools { /** * 根据资源名和KEY获取本地化消息, 并替换占位符
- * 消息中的占位符以{userName}形式定义 + * 消息中的占位符以{fieldName}形式定义, 以解决中英文参数顺序有可能不一致的问题 * * @param resource 资源名 * @param key KEY -- Gitee From 784f00206365b3d1131930f44476bbd6f38b3ba3 Mon Sep 17 00:00:00 2001 From: zhaohuihua Date: Sat, 24 Jul 2021 10:30:30 +0800 Subject: [PATCH 4/6] =?UTF-8?q?=E4=BC=98=E5=8C=96WrapStringMatcher.toStrin?= =?UTF-8?q?g()?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/gitee/qdbp/able/matches/WrapStringMatcher.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/able/src/main/java/com/gitee/qdbp/able/matches/WrapStringMatcher.java b/able/src/main/java/com/gitee/qdbp/able/matches/WrapStringMatcher.java index 52aa880..b86126b 100644 --- a/able/src/main/java/com/gitee/qdbp/able/matches/WrapStringMatcher.java +++ b/able/src/main/java/com/gitee/qdbp/able/matches/WrapStringMatcher.java @@ -74,7 +74,11 @@ public class WrapStringMatcher implements StringMatcher { if (buffer.length() > 0) { buffer.append(' ').append(logicType).append(' '); } - buffer.append(matcher.toString()); + if (matcher instanceof WrapStringMatcher) { + buffer.append(" ( ").append(matcher.toString()).append(" ) "); + } else { + buffer.append(matcher.toString()); + } } return buffer.toString(); } -- Gitee From 97c5a54b3fb9c6158504f44b7303ec951b0c1ad6 Mon Sep 17 00:00:00 2001 From: zhaohuihua Date: Sat, 24 Jul 2021 10:32:15 +0800 Subject: [PATCH 5/6] =?UTF-8?q?=E4=BC=98=E5=8C=96WrapFileMatcher.toString(?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/gitee/qdbp/able/matches/WrapFileMatcher.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/able/src/main/java/com/gitee/qdbp/able/matches/WrapFileMatcher.java b/able/src/main/java/com/gitee/qdbp/able/matches/WrapFileMatcher.java index 3a234ce..1228476 100644 --- a/able/src/main/java/com/gitee/qdbp/able/matches/WrapFileMatcher.java +++ b/able/src/main/java/com/gitee/qdbp/able/matches/WrapFileMatcher.java @@ -85,7 +85,11 @@ public class WrapFileMatcher implements FileMatcher { if (buffer.length() > 0) { buffer.append(' ').append(logicType).append(' '); } - buffer.append(matcher.toString()); + if (matcher instanceof WrapFileMatcher) { + buffer.append(" ( ").append(matcher.toString()).append(" ) "); + } else { + buffer.append(matcher.toString()); + } } return buffer.toString(); } -- Gitee From 3fa2f41aa969b52a1ddc9bb129911330b9d83b26 Mon Sep 17 00:00:00 2001 From: zhaohuihua Date: Sun, 25 Jul 2021 08:20:59 +0800 Subject: [PATCH 6/6] 5.4.0 --- README.md | 4 ++-- able/pom.xml | 2 +- tools/pom.xml | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 2963d9d..df70a7a 100644 --- a/README.md +++ b/README.md @@ -12,11 +12,11 @@ com.gitee.qdbp qdbp-able - 5.3.5 + 5.4.0 com.gitee.qdbp qdbp-tools - 5.3.5 + 5.4.0 ``` \ No newline at end of file diff --git a/able/pom.xml b/able/pom.xml index e20099e..3353ff5 100644 --- a/able/pom.xml +++ b/able/pom.xml @@ -9,7 +9,7 @@ qdbp-able - 5.3.5 + 5.4.0 jar ${project.artifactId} https://gitee.com/qdbp/qdbp-able/ diff --git a/tools/pom.xml b/tools/pom.xml index 1065606..82bcd73 100644 --- a/tools/pom.xml +++ b/tools/pom.xml @@ -10,7 +10,7 @@ qdbp-tools jar - 5.3.5 + 5.4.0 https://gitee.com/qdbp/qdbp-able/ qdbp tools library -- Gitee