detect browser language
This commit is contained in:
parent
30587ceb58
commit
e60be8f71a
6 changed files with 227 additions and 57 deletions
|
@ -20,7 +20,6 @@ import java.util.ArrayList;
|
|||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.Set;
|
||||
|
@ -123,8 +122,6 @@ public class QueryHelper implements Serializable {
|
|||
|
||||
protected Map<String, String[]> requestParameterMap = new HashMap<>();
|
||||
|
||||
protected Map<String, String> fieldLanguageMap = new HashMap<>();
|
||||
|
||||
protected int maxSearchResultOffset = 100000;
|
||||
|
||||
protected SortBuilder[] defaultSortBuilders;
|
||||
|
@ -135,8 +132,6 @@ public class QueryHelper implements Serializable {
|
|||
|
||||
protected GeoInfo defaultGeoInfo;
|
||||
|
||||
protected String defaultQueryLanguage;
|
||||
|
||||
protected Map<String, String[]> queryRequestHeaderMap = new HashMap<>();
|
||||
|
||||
protected Map<String, String> fieldBoostMap = new HashMap<>();
|
||||
|
@ -489,29 +484,10 @@ public class QueryHelper implements Serializable {
|
|||
}
|
||||
|
||||
protected OptionalThing<String> getQueryLanguage() {
|
||||
if (defaultQueryLanguage != null) {
|
||||
return OptionalEntity.of(defaultQueryLanguage);
|
||||
if (StringUtil.isNotBlank(fessConfig.getQueryDefaultLanguage())) {
|
||||
return OptionalEntity.of(fessConfig.getQueryDefaultLanguage());
|
||||
}
|
||||
return LaRequestUtil.getOptionalRequest().map(request -> {
|
||||
final Locale locale = request.getLocale();
|
||||
if (locale == null) {
|
||||
return null;
|
||||
}
|
||||
final String language = locale.getLanguage();
|
||||
final String country = locale.getCountry();
|
||||
if (StringUtil.isNotBlank(language)) {
|
||||
if (StringUtil.isNotBlank(country)) {
|
||||
final String lang = language + "-" + country;
|
||||
if (fieldLanguageMap.containsKey(lang)) {
|
||||
return fieldLanguageMap.get(lang);
|
||||
}
|
||||
}
|
||||
if (fieldLanguageMap.containsKey(language)) {
|
||||
return fieldLanguageMap.get(language);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
});
|
||||
return LaRequestUtil.getOptionalRequest().map(request -> fessConfig.getQueryLanguage(request.getLocale()));
|
||||
|
||||
}
|
||||
|
||||
|
@ -716,10 +692,6 @@ public class QueryHelper implements Serializable {
|
|||
return requestParameterMap.entrySet();
|
||||
}
|
||||
|
||||
public void addFieldLanguage(final String lang, final String fieldLang) {
|
||||
fieldLanguageMap.put(lang, fieldLang);
|
||||
}
|
||||
|
||||
public int getMaxSearchResultOffset() {
|
||||
return maxSearchResultOffset;
|
||||
}
|
||||
|
@ -762,14 +734,6 @@ public class QueryHelper implements Serializable {
|
|||
this.defaultGeoInfo = defaultGeoInfo;
|
||||
}
|
||||
|
||||
public String getDefaultQueryLanguage() {
|
||||
return defaultQueryLanguage;
|
||||
}
|
||||
|
||||
public void setDefaultQueryLanguage(final String defaultQueryLanguage) {
|
||||
this.defaultQueryLanguage = defaultQueryLanguage;
|
||||
}
|
||||
|
||||
public Map<String, String[]> getQueryRequestHeaderMap() {
|
||||
if (queryRequestHeaderMap.isEmpty()) {
|
||||
return queryRequestHeaderMap;
|
||||
|
|
|
@ -305,6 +305,60 @@ public interface FessConfig extends FessEnv, org.codelibs.fess.mylasta.direction
|
|||
/** The key of the configuration. e.g. true */
|
||||
String QUERY_REPLACE_TERM_WITH_PREFIX_QUERY = "query.replace.term.with.prefix.query";
|
||||
|
||||
/** The key of the configuration. e.g. */
|
||||
String QUERY_DEFAULT_LANGUAGE = "query.default.language";
|
||||
|
||||
/** The key of the configuration. e.g. ar=ar
|
||||
bg=bg
|
||||
bn=bn
|
||||
ca=ca
|
||||
cs=cs
|
||||
da=da
|
||||
de=de
|
||||
el=el
|
||||
en=en
|
||||
es=es
|
||||
et=et
|
||||
fa=fa
|
||||
fi=fi
|
||||
fr=fr
|
||||
gu=gu
|
||||
he=he
|
||||
hi=hi
|
||||
hr=hr
|
||||
hu=hu
|
||||
id=id
|
||||
it=it
|
||||
ja=ja
|
||||
ko=ko
|
||||
lt=lt
|
||||
lv=lv
|
||||
mk=mk
|
||||
ml=ml
|
||||
nl=nl
|
||||
no=no
|
||||
pa=pa
|
||||
pl=pl
|
||||
pt=pt
|
||||
ro=ro
|
||||
ru=ru
|
||||
si=si
|
||||
sq=sq
|
||||
sv=sv
|
||||
ta=ta
|
||||
te=te
|
||||
th=th
|
||||
tl=tl
|
||||
tr=tr
|
||||
uk=uk
|
||||
ur=ur
|
||||
vi=vi
|
||||
zh=zh-cn
|
||||
zh-cn=zh-cn
|
||||
zh-tw=zh-tw
|
||||
*/
|
||||
String QUERY_LANGUAGE_MAPPING = "query.language.mapping";
|
||||
|
||||
/** The key of the configuration. e.g. 1.6 */
|
||||
String QUERY_BOOST_TITLE = "query.boost.title";
|
||||
|
||||
|
@ -1409,6 +1463,76 @@ public interface FessConfig extends FessEnv, org.codelibs.fess.mylasta.direction
|
|||
*/
|
||||
boolean isQueryReplaceTermWithPrefixQuery();
|
||||
|
||||
/**
|
||||
* Get the value for the key 'query.default.language'. <br>
|
||||
* The value is, e.g. <br>
|
||||
* @return The value of found property. (NotNull: if not found, exception but basically no way)
|
||||
*/
|
||||
String getQueryDefaultLanguage();
|
||||
|
||||
/**
|
||||
* Get the value for the key 'query.default.language' as {@link Integer}. <br>
|
||||
* The value is, e.g. <br>
|
||||
* @return The value of found property. (NotNull: if not found, exception but basically no way)
|
||||
* @throws NumberFormatException When the property is not integer.
|
||||
*/
|
||||
Integer getQueryDefaultLanguageAsInteger();
|
||||
|
||||
/**
|
||||
* Get the value for the key 'query.language.mapping'. <br>
|
||||
* The value is, e.g. ar=ar
|
||||
bg=bg
|
||||
bn=bn
|
||||
ca=ca
|
||||
cs=cs
|
||||
da=da
|
||||
de=de
|
||||
el=el
|
||||
en=en
|
||||
es=es
|
||||
et=et
|
||||
fa=fa
|
||||
fi=fi
|
||||
fr=fr
|
||||
gu=gu
|
||||
he=he
|
||||
hi=hi
|
||||
hr=hr
|
||||
hu=hu
|
||||
id=id
|
||||
it=it
|
||||
ja=ja
|
||||
ko=ko
|
||||
lt=lt
|
||||
lv=lv
|
||||
mk=mk
|
||||
ml=ml
|
||||
nl=nl
|
||||
no=no
|
||||
pa=pa
|
||||
pl=pl
|
||||
pt=pt
|
||||
ro=ro
|
||||
ru=ru
|
||||
si=si
|
||||
sq=sq
|
||||
sv=sv
|
||||
ta=ta
|
||||
te=te
|
||||
th=th
|
||||
tl=tl
|
||||
tr=tr
|
||||
uk=uk
|
||||
ur=ur
|
||||
vi=vi
|
||||
zh=zh-cn
|
||||
zh-cn=zh-cn
|
||||
zh-tw=zh-tw
|
||||
<br>
|
||||
* @return The value of found property. (NotNull: if not found, exception but basically no way)
|
||||
*/
|
||||
String getQueryLanguageMapping();
|
||||
|
||||
/**
|
||||
* Get the value for the key 'query.boost.title'. <br>
|
||||
* The value is, e.g. 1.6 <br>
|
||||
|
@ -2759,6 +2883,18 @@ public interface FessConfig extends FessEnv, org.codelibs.fess.mylasta.direction
|
|||
return is(FessConfig.QUERY_REPLACE_TERM_WITH_PREFIX_QUERY);
|
||||
}
|
||||
|
||||
public String getQueryDefaultLanguage() {
|
||||
return get(FessConfig.QUERY_DEFAULT_LANGUAGE);
|
||||
}
|
||||
|
||||
public Integer getQueryDefaultLanguageAsInteger() {
|
||||
return getAsInteger(FessConfig.QUERY_DEFAULT_LANGUAGE);
|
||||
}
|
||||
|
||||
public String getQueryLanguageMapping() {
|
||||
return get(FessConfig.QUERY_LANGUAGE_MAPPING);
|
||||
}
|
||||
|
||||
public String getQueryBoostTitle() {
|
||||
return get(FessConfig.QUERY_BOOST_TITLE);
|
||||
}
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
*/
|
||||
package org.codelibs.fess.mylasta.direction;
|
||||
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.regex.Pattern;
|
||||
|
@ -32,6 +33,8 @@ import org.lastaflute.job.subsidiary.ConcurrentExec;
|
|||
|
||||
public interface FessProp {
|
||||
|
||||
public static final String QUERY_LANGUAGE_MAPPING = "queryLanguageMapping";
|
||||
|
||||
public static final String CRAWLER_METADATA_NAME_MAPPING = "crawlerMetadataNameMapping";
|
||||
|
||||
public static final String CRAWLER_METADATA_CONTENT_EXCLUDES = "crawlerMetadataContentExcludes";
|
||||
|
@ -374,4 +377,38 @@ public interface FessProp {
|
|||
return Boolean.valueOf(getQueryReplaceTermWithPrefixQuery());
|
||||
}
|
||||
|
||||
String getQueryLanguageMapping();
|
||||
|
||||
public default String getQueryLanguage(Locale locale) {
|
||||
if (locale == null) {
|
||||
return null;
|
||||
}
|
||||
@SuppressWarnings("unchecked")
|
||||
Map<String, String> params = (Map<String, String>) propMap.get(QUERY_LANGUAGE_MAPPING);
|
||||
if (params == null) {
|
||||
params = StreamUtil.of(getQueryLanguageMapping().split("\n")).filter(v -> StringUtil.isNotBlank(v)).map(v -> {
|
||||
String[] values = v.split("=");
|
||||
if (values.length == 2) {
|
||||
return new Pair<String, String>(values[0], values[1]);
|
||||
}
|
||||
return null;
|
||||
}).collect(Collectors.toMap(Pair::getFirst, d -> d.getSecond()));
|
||||
propMap.put(QUERY_LANGUAGE_MAPPING, params);
|
||||
}
|
||||
|
||||
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 (params.containsKey(lang)) {
|
||||
return params.get(lang);
|
||||
}
|
||||
}
|
||||
if (params.containsKey(language)) {
|
||||
return params.get(language);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -39,8 +39,6 @@ import org.codelibs.fess.util.ComponentUtil;
|
|||
import org.lastaflute.di.util.LdiURLUtil;
|
||||
import org.lastaflute.web.util.LaRequestUtil;
|
||||
|
||||
import opennlp.tools.parser.Cons;
|
||||
|
||||
public class FessFunctions {
|
||||
|
||||
private static final String GEO_PREFIX = "geo.";
|
||||
|
|
|
@ -52,22 +52,6 @@
|
|||
]</property>
|
||||
</component>
|
||||
</property>
|
||||
<postConstruct name="addFieldLanguage">
|
||||
<arg>"zh"</arg>
|
||||
<arg>"cjk"</arg>
|
||||
</postConstruct>
|
||||
<postConstruct name="addFieldLanguage">
|
||||
<arg>"zh_CN"</arg>
|
||||
<arg>"cjk"</arg>
|
||||
</postConstruct>
|
||||
<postConstruct name="addFieldLanguage">
|
||||
<arg>"zh_TW"</arg>
|
||||
<arg>"cjk"</arg>
|
||||
</postConstruct>
|
||||
<postConstruct name="addFieldLanguage">
|
||||
<arg>"ko"</arg>
|
||||
<arg>"cjk"</arg>
|
||||
</postConstruct>
|
||||
<postConstruct name="addHighlightField">
|
||||
<arg>"title"</arg>
|
||||
</postConstruct>
|
||||
|
|
|
@ -150,6 +150,57 @@ index.document.type=doc
|
|||
# query
|
||||
query.max.length=1000
|
||||
query.replace.term.with.prefix.query=true
|
||||
query.default.language=
|
||||
query.language.mapping=\
|
||||
ar=ar\n\
|
||||
bg=bg\n\
|
||||
bn=bn\n\
|
||||
ca=ca\n\
|
||||
cs=cs\n\
|
||||
da=da\n\
|
||||
de=de\n\
|
||||
el=el\n\
|
||||
en=en\n\
|
||||
es=es\n\
|
||||
et=et\n\
|
||||
fa=fa\n\
|
||||
fi=fi\n\
|
||||
fr=fr\n\
|
||||
gu=gu\n\
|
||||
he=he\n\
|
||||
hi=hi\n\
|
||||
hr=hr\n\
|
||||
hu=hu\n\
|
||||
id=id\n\
|
||||
it=it\n\
|
||||
ja=ja\n\
|
||||
ko=ko\n\
|
||||
lt=lt\n\
|
||||
lv=lv\n\
|
||||
mk=mk\n\
|
||||
ml=ml\n\
|
||||
nl=nl\n\
|
||||
no=no\n\
|
||||
pa=pa\n\
|
||||
pl=pl\n\
|
||||
pt=pt\n\
|
||||
ro=ro\n\
|
||||
ru=ru\n\
|
||||
si=si\n\
|
||||
sq=sq\n\
|
||||
sv=sv\n\
|
||||
ta=ta\n\
|
||||
te=te\n\
|
||||
th=th\n\
|
||||
tl=tl\n\
|
||||
tr=tr\n\
|
||||
uk=uk\n\
|
||||
ur=ur\n\
|
||||
vi=vi\n\
|
||||
zh=zh-cn\n\
|
||||
zh-cn=zh-cn\n\
|
||||
zh-tw=zh-tw\n\
|
||||
|
||||
|
||||
# boost
|
||||
query.boost.title=1.6
|
||||
|
|
Loading…
Add table
Reference in a new issue