fix #116
This commit is contained in:
parent
681811e9b4
commit
a637c889f8
6 changed files with 75 additions and 31 deletions
|
@ -166,7 +166,7 @@ public class Constants extends CoreLibConstants {
|
|||
|
||||
public static final String NOTIFICATION_TO_PROPERTY = "notification.to";
|
||||
|
||||
public static final String USE_BROWSER_LOCALE_FOR_SEARCH_PROPERTY = "search.browser.locale";
|
||||
public static final String USE_BROWSER_LOCALE_FOR_SEARCH_PROPERTY = "search.use.browser.locale";
|
||||
|
||||
public static final String AUTH_CIPHER = "authenticationCipher";
|
||||
|
||||
|
|
|
@ -27,6 +27,7 @@ import java.sql.Timestamp;
|
|||
import java.text.NumberFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Enumeration;
|
||||
import java.util.HashSet;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
|
@ -799,26 +800,33 @@ public class IndexAction {
|
|||
}
|
||||
}
|
||||
if (indexForm.lang != null) {
|
||||
final Set<String> langSet = new HashSet<>();
|
||||
for (final String lang : indexForm.lang) {
|
||||
if (StringUtil.isNotBlank(lang) && lang.length() < 1000) {
|
||||
final String normalizeLang = systemHelper
|
||||
.normalizeLang(lang);
|
||||
if (normalizeLang != null) {
|
||||
queryBuf.append(' ').append(systemHelper.langField)
|
||||
.append(':').append(normalizeLang);
|
||||
langSet.add(normalizeLang);
|
||||
}
|
||||
}
|
||||
}
|
||||
appendLangQuery(queryBuf, langSet);
|
||||
} else if (Constants.TRUE.equals(crawlerProperties.getProperty(
|
||||
Constants.USE_BROWSER_LOCALE_FOR_SEARCH_PROPERTY,
|
||||
Constants.FALSE))) {
|
||||
final Locale locale = request.getLocale();
|
||||
if (locale != null) {
|
||||
final String normalizeLang = systemHelper.normalizeLang(locale
|
||||
.getLanguage());
|
||||
if (normalizeLang != null) {
|
||||
queryBuf.append(' ').append(systemHelper.langField)
|
||||
.append(':').append(normalizeLang);
|
||||
final Set<String> langSet = new HashSet<>();
|
||||
final Enumeration<Locale> locales = request.getLocales();
|
||||
if (locales != null) {
|
||||
while (locales.hasMoreElements()) {
|
||||
final Locale locale = locales.nextElement();
|
||||
final String normalizeLang = systemHelper
|
||||
.normalizeLang(locale.toString());
|
||||
if (normalizeLang != null) {
|
||||
langSet.add(normalizeLang);
|
||||
}
|
||||
}
|
||||
if (!langSet.isEmpty()) {
|
||||
appendLangQuery(queryBuf, langSet);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -968,6 +976,27 @@ public class IndexAction {
|
|||
return query;
|
||||
}
|
||||
|
||||
private void appendLangQuery(final StringBuilder queryBuf,
|
||||
final Set<String> langSet) {
|
||||
if (langSet.size() == 1) {
|
||||
queryBuf.append(' ').append(systemHelper.langField).append(':')
|
||||
.append(langSet.iterator().next());
|
||||
} else if (langSet.size() > 1) {
|
||||
boolean first = true;
|
||||
for (final String lang : langSet) {
|
||||
if (first) {
|
||||
queryBuf.append(" (");
|
||||
first = false;
|
||||
} else {
|
||||
queryBuf.append(" OR ");
|
||||
}
|
||||
queryBuf.append(systemHelper.langField).append(':')
|
||||
.append(lang);
|
||||
}
|
||||
queryBuf.append(')');
|
||||
}
|
||||
}
|
||||
|
||||
protected void updateSearchParams() {
|
||||
if (indexForm.facet == null) {
|
||||
indexForm.facet = queryHelper.getDefaultFacetInfo();
|
||||
|
|
|
@ -137,7 +137,7 @@ public class SystemHelper implements Serializable {
|
|||
protected String[] supportedLanguages = new String[] { "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", "zh_CN", "zh_TW" };
|
||||
"ro", "ru", "sv", "th", "tr", "zh_CN", "zh_TW", "zh" };
|
||||
|
||||
protected LoadingCache<String, List<Map<String, String>>> langItemsCache;
|
||||
|
||||
|
@ -482,21 +482,13 @@ public class SystemHelper implements Serializable {
|
|||
return null;
|
||||
}
|
||||
|
||||
final StringBuilder buf = new StringBuilder(value.length());
|
||||
for (int i = 0; i < value.length(); i++) {
|
||||
final char c = value.charAt(i);
|
||||
if ('a' <= c && c <= 'z') {
|
||||
buf.append(c);
|
||||
} else if (buf.length() > 0) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (buf.length() > 0) {
|
||||
final String lang = buf.toString();
|
||||
for (final String supportedLang : supportedLanguages) {
|
||||
if (supportedLang.equalsIgnoreCase(lang)) {
|
||||
return supportedLang;
|
||||
}
|
||||
final String localeName = value.trim().toLowerCase(Locale.ENGLISH)
|
||||
.replace("-", "_");
|
||||
|
||||
for (final String supportedLang : supportedLanguages) {
|
||||
if (localeName
|
||||
.startsWith(supportedLang.toLowerCase(Locale.ENGLISH))) {
|
||||
return supportedLang;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
|
|
|
@ -32,7 +32,7 @@
|
|||
<property name="supportedLanguages">new String[] { "ar", "bg", "ca",
|
||||
"cz", "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", "zh_CN", "zh_TW" }</property>
|
||||
"ro", "ru", "sv", "th", "tr", "zh_CN", "zh_TW", "zh" }</property>
|
||||
-->
|
||||
<property name="logFilePath">@System@getProperty("fess.log.file").replaceAll(".out", "_crawler.out")</property>
|
||||
<property name="crawlerJavaOptions">new String[] {
|
||||
|
|
|
@ -23,7 +23,7 @@ public class SystemHelperTest extends S2TestCase {
|
|||
|
||||
@Override
|
||||
protected String getRootDicon() throws Throwable {
|
||||
return "app.dicon";
|
||||
return "jp/sf/fess/helper/system.dicon";
|
||||
}
|
||||
|
||||
public void test_encodeUrlFilter() {
|
||||
|
@ -48,15 +48,15 @@ public class SystemHelperTest extends S2TestCase {
|
|||
value = "";
|
||||
assertNull(systemHelper.normalizeLang(value));
|
||||
|
||||
value = "_ja";
|
||||
assertNull(systemHelper.normalizeLang(value));
|
||||
|
||||
value = "ja";
|
||||
assertEquals("ja", systemHelper.normalizeLang(value));
|
||||
|
||||
value = " ja ";
|
||||
assertEquals("ja", systemHelper.normalizeLang(value));
|
||||
|
||||
value = "_ja";
|
||||
assertEquals("ja", systemHelper.normalizeLang(value));
|
||||
|
||||
value = "ja-JP";
|
||||
assertEquals("ja", systemHelper.normalizeLang(value));
|
||||
|
||||
|
@ -65,5 +65,20 @@ public class SystemHelperTest extends S2TestCase {
|
|||
|
||||
value = "ja_JP_AAA";
|
||||
assertEquals("ja", systemHelper.normalizeLang(value));
|
||||
|
||||
value = "zh";
|
||||
assertEquals("zh", systemHelper.normalizeLang(value));
|
||||
|
||||
value = "zh-cn";
|
||||
assertEquals("zh_CN", systemHelper.normalizeLang(value));
|
||||
|
||||
value = "zh_CN";
|
||||
assertEquals("zh_CN", systemHelper.normalizeLang(value));
|
||||
|
||||
value = "zh-tw";
|
||||
assertEquals("zh_TW", systemHelper.normalizeLang(value));
|
||||
|
||||
value = "zh_TW";
|
||||
assertEquals("zh_TW", systemHelper.normalizeLang(value));
|
||||
}
|
||||
}
|
||||
|
|
8
src/test/resources/jp/sf/fess/helper/system.dicon
Normal file
8
src/test/resources/jp/sf/fess/helper/system.dicon
Normal file
|
@ -0,0 +1,8 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"
|
||||
"http://www.seasar.org/dtd/components24.dtd">
|
||||
<components>
|
||||
<component name="systemHelper" class="jp.sf.fess.helper.SystemHelper">
|
||||
</component>
|
||||
|
||||
</components>
|
Loading…
Add table
Reference in a new issue