Shinsuke Sugaya 11 yıl önce
ebeveyn
işleme
a637c889f8

+ 1 - 1
src/main/java/jp/sf/fess/Constants.java

@@ -166,7 +166,7 @@ public class Constants extends CoreLibConstants {
 
 
     public static final String NOTIFICATION_TO_PROPERTY = "notification.to";
     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";
     public static final String AUTH_CIPHER = "authenticationCipher";
 
 

+ 38 - 9
src/main/java/jp/sf/fess/action/IndexAction.java

@@ -27,6 +27,7 @@ import java.sql.Timestamp;
 import java.text.NumberFormat;
 import java.text.NumberFormat;
 import java.util.ArrayList;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Arrays;
+import java.util.Enumeration;
 import java.util.HashSet;
 import java.util.HashSet;
 import java.util.LinkedHashMap;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.List;
@@ -799,26 +800,33 @@ public class IndexAction {
             }
             }
         }
         }
         if (indexForm.lang != null) {
         if (indexForm.lang != null) {
+            final Set<String> langSet = new HashSet<>();
             for (final String lang : indexForm.lang) {
             for (final String lang : indexForm.lang) {
                 if (StringUtil.isNotBlank(lang) && lang.length() < 1000) {
                 if (StringUtil.isNotBlank(lang) && lang.length() < 1000) {
                     final String normalizeLang = systemHelper
                     final String normalizeLang = systemHelper
                             .normalizeLang(lang);
                             .normalizeLang(lang);
                     if (normalizeLang != null) {
                     if (normalizeLang != null) {
-                        queryBuf.append(' ').append(systemHelper.langField)
-                                .append(':').append(normalizeLang);
+                        langSet.add(normalizeLang);
                     }
                     }
                 }
                 }
             }
             }
+            appendLangQuery(queryBuf, langSet);
         } else if (Constants.TRUE.equals(crawlerProperties.getProperty(
         } else if (Constants.TRUE.equals(crawlerProperties.getProperty(
                 Constants.USE_BROWSER_LOCALE_FOR_SEARCH_PROPERTY,
                 Constants.USE_BROWSER_LOCALE_FOR_SEARCH_PROPERTY,
                 Constants.FALSE))) {
                 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;
         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() {
     protected void updateSearchParams() {
         if (indexForm.facet == null) {
         if (indexForm.facet == null) {
             indexForm.facet = queryHelper.getDefaultFacetInfo();
             indexForm.facet = queryHelper.getDefaultFacetInfo();

+ 8 - 16
src/main/java/jp/sf/fess/helper/SystemHelper.java

@@ -137,7 +137,7 @@ public class SystemHelper implements Serializable {
     protected String[] supportedLanguages = new String[] { "ar", "bg", "ca",
     protected String[] supportedLanguages = new String[] { "ar", "bg", "ca",
             "da", "de", "el", "en", "es", "eu", "fa", "fi", "fr", "ga", "gl",
             "da", "de", "el", "en", "es", "eu", "fa", "fi", "fr", "ga", "gl",
             "hi", "hu", "hy", "id", "it", "ja", "lv", "ko", "nl", "no", "pt",
             "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;
     protected LoadingCache<String, List<Map<String, String>>> langItemsCache;
 
 
@@ -482,21 +482,13 @@ public class SystemHelper implements Serializable {
             return null;
             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;
         return null;

+ 1 - 1
src/main/resources/fess.dicon

@@ -32,7 +32,7 @@
 		<property name="supportedLanguages">new String[] { "ar", "bg", "ca",
 		<property name="supportedLanguages">new String[] { "ar", "bg", "ca",
             "cz", "da", "de", "el", "en", "es", "eu", "fa", "fi", "fr", "ga", "gl",
             "cz", "da", "de", "el", "en", "es", "eu", "fa", "fi", "fr", "ga", "gl",
             "hi", "hu", "hy", "id", "it", "ja", "lv", "ko", "nl", "no", "pt",
             "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="logFilePath">@System@getProperty("fess.log.file").replaceAll(".out", "_crawler.out")</property>
         <property name="crawlerJavaOptions">new String[] {
         <property name="crawlerJavaOptions">new String[] {

+ 19 - 4
src/test/java/jp/sf/fess/helper/SystemHelperTest.java

@@ -23,7 +23,7 @@ public class SystemHelperTest extends S2TestCase {
 
 
     @Override
     @Override
     protected String getRootDicon() throws Throwable {
     protected String getRootDicon() throws Throwable {
-        return "app.dicon";
+        return "jp/sf/fess/helper/system.dicon";
     }
     }
 
 
     public void test_encodeUrlFilter() {
     public void test_encodeUrlFilter() {
@@ -48,15 +48,15 @@ public class SystemHelperTest extends S2TestCase {
         value = "";
         value = "";
         assertNull(systemHelper.normalizeLang(value));
         assertNull(systemHelper.normalizeLang(value));
 
 
+        value = "_ja";
+        assertNull(systemHelper.normalizeLang(value));
+
         value = "ja";
         value = "ja";
         assertEquals("ja", systemHelper.normalizeLang(value));
         assertEquals("ja", systemHelper.normalizeLang(value));
 
 
         value = " ja ";
         value = " ja ";
         assertEquals("ja", systemHelper.normalizeLang(value));
         assertEquals("ja", systemHelper.normalizeLang(value));
 
 
-        value = "_ja";
-        assertEquals("ja", systemHelper.normalizeLang(value));
-
         value = "ja-JP";
         value = "ja-JP";
         assertEquals("ja", systemHelper.normalizeLang(value));
         assertEquals("ja", systemHelper.normalizeLang(value));
 
 
@@ -65,5 +65,20 @@ public class SystemHelperTest extends S2TestCase {
 
 
         value = "ja_JP_AAA";
         value = "ja_JP_AAA";
         assertEquals("ja", systemHelper.normalizeLang(value));
         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 - 0
src/test/resources/jp/sf/fess/helper/system.dicon

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