diff --git a/src/main/java/org/codelibs/fess/helper/QueryHelper.java b/src/main/java/org/codelibs/fess/helper/QueryHelper.java
index 1d4cf97f7..489509d3a 100644
--- a/src/main/java/org/codelibs/fess/helper/QueryHelper.java
+++ b/src/main/java/org/codelibs/fess/helper/QueryHelper.java
@@ -569,19 +569,17 @@ public class QueryHelper {
builder.apply(fessConfig.getIndexFieldContent(), fessConfig.getQueryBoostContentAsDecimal().floatValue());
boolQuery.should(contentQuery);
getQueryLanguages().ifPresent(
- langs -> {
- stream(langs).of(
- stream -> stream.forEach(lang -> {
- final QueryBuilder titleLangQuery =
- builder.apply(fessConfig.getIndexFieldTitle() + "_" + lang, fessConfig
- .getQueryBoostTitleLangAsDecimal().floatValue());
- boolQuery.should(titleLangQuery);
- final QueryBuilder contentLangQuery =
- builder.apply(fessConfig.getIndexFieldContent() + "_" + lang, fessConfig
- .getQueryBoostContentLangAsDecimal().floatValue());
- boolQuery.should(contentLangQuery);
- }));
- });
+ langs -> stream(langs).of(
+ stream -> stream.forEach(lang -> {
+ final QueryBuilder titleLangQuery =
+ builder.apply(fessConfig.getIndexFieldTitle() + "_" + lang, fessConfig
+ .getQueryBoostTitleLangAsDecimal().floatValue());
+ boolQuery.should(titleLangQuery);
+ final QueryBuilder contentLangQuery =
+ builder.apply(fessConfig.getIndexFieldContent() + "_" + lang, fessConfig
+ .getQueryBoostContentLangAsDecimal().floatValue());
+ boolQuery.should(contentLangQuery);
+ })));
return boolQuery;
}
diff --git a/src/main/java/org/codelibs/fess/mylasta/direction/FessConfig.java b/src/main/java/org/codelibs/fess/mylasta/direction/FessConfig.java
index 1886e6f0d..52442ed69 100644
--- a/src/main/java/org/codelibs/fess/mylasta/direction/FessConfig.java
+++ b/src/main/java/org/codelibs/fess/mylasta/direction/FessConfig.java
@@ -124,7 +124,7 @@ public interface FessConfig extends FessEnv, org.codelibs.fess.mylasta.direction
/** The key of the configuration. e.g. license.properties */
String SUPPORTED_UPLOADED_FILES = "supported.uploaded.files";
- /** The key of the configuration. e.g. ar,bg,ca,da,de,el,en,es,eu,fa,fi,fr,ga,gl,hi,hu,hy,id,it,ja,lv,ko,nl,no,pt,ro,ru,sv,th,tr,zh_CN,zh_TW,zh */
+ /** The key of the configuration. e.g. ar,bg,bn,ca,ckb_IQ,cs,da,de,el,en,en_IE,es,et,eu,fa,fi,fr,gl,gu,he,hi,hr,hu,hy,id,it,ja,ko,lt,lv,mk,ml,nl,no,pa,pl,pt,pt_BR,ro,ru,si,sq,sv,ta,te,th,tl,tr,uk,ur,vi,zh_CN,zh_TW,zh */
String SUPPORTED_LANGUAGES = "supported.languages";
/** The key of the configuration. e.g. 60 */
@@ -538,12 +538,15 @@ public interface FessConfig extends FessEnv, org.codelibs.fess.mylasta.direction
bg=bg
bn=bn
ca=ca
+ ckb-iq=ckb-iq
+ ckb_IQ=ckb-iq
cs=cs
da=da
de=de
el=el
en=en
en-ie=en-ie
+ en_IE=en-ie
es=es
et=et
eu=eu
@@ -571,6 +574,7 @@ public interface FessConfig extends FessEnv, org.codelibs.fess.mylasta.direction
pl=pl
pt=pt
pt-br=pt-br
+ pt_BR=pt-br
ro=ro
ru=ru
si=si
@@ -584,9 +588,11 @@ public interface FessConfig extends FessEnv, org.codelibs.fess.mylasta.direction
uk=uk
ur=ur
vi=vi
- zh=zh-cn
zh-cn=zh-cn
+ zh_CN=zh-cn
zh-tw=zh-tw
+ zh_TW=zh-tw
+ zh=zh
*/
String QUERY_LANGUAGE_MAPPING = "query.language.mapping";
@@ -1469,7 +1475,7 @@ public interface FessConfig extends FessEnv, org.codelibs.fess.mylasta.direction
/**
* Get the value for the key 'supported.languages'.
- * The value is, e.g. ar,bg,ca,da,de,el,en,es,eu,fa,fi,fr,ga,gl,hi,hu,hy,id,it,ja,lv,ko,nl,no,pt,ro,ru,sv,th,tr,zh_CN,zh_TW,zh
+ * The value is, e.g. ar,bg,bn,ca,ckb_IQ,cs,da,de,el,en,en_IE,es,et,eu,fa,fi,fr,gl,gu,he,hi,hr,hu,hy,id,it,ja,ko,lt,lv,mk,ml,nl,no,pa,pl,pt,pt_BR,ro,ru,si,sq,sv,ta,te,th,tl,tr,uk,ur,vi,zh_CN,zh_TW,zh
* @return The value of found property. (NotNull: if not found, exception but basically no way)
*/
String getSupportedLanguages();
@@ -2884,12 +2890,15 @@ public interface FessConfig extends FessEnv, org.codelibs.fess.mylasta.direction
bg=bg
bn=bn
ca=ca
+ ckb-iq=ckb-iq
+ ckb_IQ=ckb-iq
cs=cs
da=da
de=de
el=el
en=en
en-ie=en-ie
+ en_IE=en-ie
es=es
et=et
eu=eu
@@ -2917,6 +2926,7 @@ public interface FessConfig extends FessEnv, org.codelibs.fess.mylasta.direction
pl=pl
pt=pt
pt-br=pt-br
+ pt_BR=pt-br
ro=ro
ru=ru
si=si
@@ -2930,9 +2940,11 @@ public interface FessConfig extends FessEnv, org.codelibs.fess.mylasta.direction
uk=uk
ur=ur
vi=vi
- zh=zh-cn
zh-cn=zh-cn
+ zh_CN=zh-cn
zh-tw=zh-tw
+ zh_TW=zh-tw
+ zh=zh
* @return The value of found property. (NotNull: if not found, exception but basically no way)
*/
diff --git a/src/main/java/org/codelibs/fess/mylasta/direction/FessProp.java b/src/main/java/org/codelibs/fess/mylasta/direction/FessProp.java
index 1165ce826..17d0d4251 100644
--- a/src/main/java/org/codelibs/fess/mylasta/direction/FessProp.java
+++ b/src/main/java/org/codelibs/fess/mylasta/direction/FessProp.java
@@ -68,6 +68,8 @@ import org.lastaflute.web.validation.theme.typed.LongTypeValidator;
public interface FessProp {
+ public static final String QUERY_DEFAULT_LANGUAGES = "queryDefaultLanguages";
+
public static final String HTML_PROXY = "httpProxy";
public static final String CRAWLER_FAILURE_URL_STATUS_CODES = "crawlerFailureUrlStatusCodes";
@@ -848,25 +850,7 @@ public interface FessProp {
String getQueryLanguageMapping();
- public default String[] getQueryLanguages(final Enumeration locales, final String[] requestLangs) {
- if (StringUtil.isNotBlank(getQueryDefaultLanguages())) {
- String[] langs = (String[]) propMap.get("queryDefaultLanguages");
- if (langs == null) {
- langs = split(getQueryDefaultLanguages(), ",").get(stream -> stream.map(s -> s.trim()).toArray(n -> new String[n]));
- propMap.put("queryDefaultLanguages", langs);
-
- }
- return langs;
- }
-
- if (requestLangs != null && requestLangs.length != 0) {
- return requestLangs;
- }
-
- if (locales == null) {
- return StringUtil.EMPTY_STRINGS;
- }
-
+ public default String[] normalizeQueryLanguages(final String[] langs) {
@SuppressWarnings("unchecked")
Map params = (Map) propMap.get(QUERY_LANGUAGE_MAPPING);
if (params == null) {
@@ -879,24 +863,54 @@ public interface FessProp {
}).collect(Collectors.toMap(Pair::getFirst, d -> d.getSecond())));
propMap.put(QUERY_LANGUAGE_MAPPING, params);
}
-
final Map mapping = params;
- return Collections.list(locales).stream().map(locale -> {
+ return stream(langs).get(stream -> stream.map(s -> {
+ if (StringUtil.isBlank(s)) {
+ return null;
+ }
+ final String lang1 = mapping.get(s);
+ if (lang1 != null) {
+ return lang1;
+ }
+ final String lang2 = mapping.get(s.split("[\\-_]")[0]);
+ if (lang2 != null) {
+ return lang2;
+ }
+ return null;
+ }).filter(StringUtil::isNotBlank).distinct().toArray(n -> new String[n]));
+ }
+
+ public default String[] getQueryLanguages(final Enumeration locales, final String[] requestLangs) {
+ // requestLangs > default > browser
+ if (StringUtil.isNotBlank(getQueryDefaultLanguages())) {
+ String[] langs = (String[]) propMap.get(QUERY_DEFAULT_LANGUAGES);
+ if (langs == null) {
+ langs = split(getQueryDefaultLanguages(), ",").get(stream -> stream.map(s -> s.trim()).toArray(n -> new String[n]));
+ propMap.put(QUERY_DEFAULT_LANGUAGES, langs);
+
+ }
+ return normalizeQueryLanguages(langs);
+ }
+
+ if (requestLangs != null && requestLangs.length != 0) {
+ return normalizeQueryLanguages(requestLangs);
+ }
+
+ if (locales == null) {
+ return StringUtil.EMPTY_STRINGS;
+ }
+
+ return normalizeQueryLanguages(Collections.list(locales).stream().map(locale -> {
final String language = locale.getLanguage();
final String country = locale.getCountry();
if (StringUtil.isNotBlank(language)) {
if (StringUtil.isNotBlank(country)) {
- final String lang = language.toLowerCase(Locale.ROOT) + "-" + country.toLowerCase(Locale.ROOT);
- if (mapping.containsKey(lang)) {
- return mapping.get(lang);
- }
- }
- if (mapping.containsKey(language)) {
- return mapping.get(language);
+ return language.toLowerCase(Locale.ROOT) + "-" + country.toLowerCase(Locale.ROOT);
}
+ return language.toLowerCase(Locale.ROOT);
}
return null;
- }).filter(l -> l != null).distinct().toArray(n -> new String[n]);
+ }).toArray(n -> new String[n]));
}
String getSupportedUploadedFiles();
diff --git a/src/main/resources/fess_config.properties b/src/main/resources/fess_config.properties
index 233e5c918..74049c605 100644
--- a/src/main/resources/fess_config.properties
+++ b/src/main/resources/fess_config.properties
@@ -75,7 +75,7 @@ supported.uploaded.js.extentions=js
supported.uploaded.css.extentions=css
supported.uploaded.media.extentions=jpg,jpeg,gif,png,swf
supported.uploaded.files=license.properties
-supported.languages=ar,bg,ca,da,de,el,en,es,eu,fa,fi,fr,ga,gl,hi,hu,hy,id,it,ja,lv,ko,nl,no,pt,ro,ru,sv,th,tr,zh_CN,zh_TW,zh
+supported.languages=ar,bg,bn,ca,ckb_IQ,cs,da,de,el,en,en_IE,es,et,eu,fa,fi,fr,gl,gu,he,hi,hr,hu,hy,id,it,ja,ko,lt,lv,mk,ml,nl,no,pa,pl,pt,pt_BR,ro,ru,si,sq,sv,ta,te,th,tl,tr,uk,ur,vi,zh_CN,zh_TW,zh
api.access.token.length=60
api.access.token.required=false
api.admin.access.permissions=Radmin-api
@@ -246,12 +246,15 @@ ar=ar\n\
bg=bg\n\
bn=bn\n\
ca=ca\n\
+ckb-iq=ckb-iq\n\
+ckb_IQ=ckb-iq\n\
cs=cs\n\
da=da\n\
de=de\n\
el=el\n\
en=en\n\
en-ie=en-ie\n\
+en_IE=en-ie\n\
es=es\n\
et=et\n\
eu=eu\n\
@@ -279,6 +282,7 @@ pa=pa\n\
pl=pl\n\
pt=pt\n\
pt-br=pt-br\n\
+pt_BR=pt-br\n\
ro=ro\n\
ru=ru\n\
si=si\n\
@@ -292,9 +296,11 @@ tr=tr\n\
uk=uk\n\
ur=ur\n\
vi=vi\n\
-zh=zh-cn\n\
zh-cn=zh-cn\n\
+zh_CN=zh-cn\n\
zh-tw=zh-tw\n\
+zh_TW=zh-tw\n\
+zh=zh\n\
# boost
query.boost.title=0.2
diff --git a/src/test/java/org/codelibs/fess/mylasta/direction/FessPropTest.java b/src/test/java/org/codelibs/fess/mylasta/direction/FessPropTest.java
index 0c247904d..bfd3d4b08 100644
--- a/src/test/java/org/codelibs/fess/mylasta/direction/FessPropTest.java
+++ b/src/test/java/org/codelibs/fess/mylasta/direction/FessPropTest.java
@@ -17,6 +17,7 @@ package org.codelibs.fess.mylasta.direction;
import java.io.File;
import java.io.IOException;
+import java.util.Arrays;
import java.util.HashMap;
import org.codelibs.core.io.FileUtil;
@@ -119,4 +120,31 @@ public class FessPropTest extends UnitFessTestCase {
assertEquals(12288, spaceChars[1]);
}
+ public void test_normalizeQueryLanguages() {
+ FessProp.propMap.clear();
+ FessConfig fessConfig = new FessConfig.SimpleImpl() {
+ @Override
+ public String getQueryLanguageMapping() {
+ return "ja=ja\nzh_cn=zh-cn\nzh_TW=zh-tw\nzh=zh-cn";
+ }
+ };
+
+ assertArrays(new String[] {}, fessConfig.normalizeQueryLanguages(new String[] {}));
+ assertArrays(new String[] {}, fessConfig.normalizeQueryLanguages(new String[] { "unknown" }));
+ assertArrays(new String[] { "ja" }, fessConfig.normalizeQueryLanguages(new String[] { "ja" }));
+ assertArrays(new String[] { "ja" }, fessConfig.normalizeQueryLanguages(new String[] { "ja", "ja" }));
+ assertArrays(new String[] { "ja" }, fessConfig.normalizeQueryLanguages(new String[] { "ja-jp" }));
+ assertArrays(new String[] { "ja" }, fessConfig.normalizeQueryLanguages(new String[] { "ja_JP" }));
+ assertArrays(new String[] { "ja", "zh-cn" }, fessConfig.normalizeQueryLanguages(new String[] { "ja", "zh" }));
+ assertArrays(new String[] { "ja", "zh-cn" }, fessConfig.normalizeQueryLanguages(new String[] { "ja", "zh_CN" }));
+ assertArrays(new String[] { "ja", "zh-cn" }, fessConfig.normalizeQueryLanguages(new String[] { "ja", "zh-cn" }));
+ assertArrays(new String[] { "zh-cn" }, fessConfig.normalizeQueryLanguages(new String[] { "zh", "zh-cn" }));
+ assertArrays(new String[] { "zh-tw" }, fessConfig.normalizeQueryLanguages(new String[] { "zh_TW" }));
+ }
+
+ private void assertArrays(final String[] expected, final String[] actual) {
+ Arrays.sort(expected);
+ Arrays.sort(actual);
+ assertEquals(String.join(",", expected), String.join(",", actual));
+ }
}