This commit is contained in:
Shinsuke Sugaya 2014-02-22 18:30:39 +09:00
parent 681811e9b4
commit a637c889f8
6 changed files with 75 additions and 31 deletions

View file

@ -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";

View file

@ -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();

View file

@ -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;

View file

@ -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[] {

View file

@ -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));
}
}

View 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>