我确实阅读了WebService and Fallback Language主题。但我仍然有一些问题。我们希望与该主题相同。我们有一些网络服务(获取类别,获取产品等),我们需要一个后备语言。
我们的情况如何: 我们的产品名称为法语和英语,我们的后备语言是英语美国人。当我们用lang = fr调用getProduct的web服务时,我们得到了法语名称,所以没关系。当我们在HMC中删除法语名称时,我们希望在使用lang = fr调用getProduct时获取产品的英美名称。但是我们在回复中没有得到任何名字。为什么后备机制不起作用?
现在我刚刚阅读了该主题WebService and Fallback Language,据我所知,您需要创建一个MyProductResource类来覆盖GET方法并添加:
@GET
public Response getMyProduct()
{
i18nService.setLocalizationFallbackEnabled(true);
return createGetResponse().build();
}
但我需要为类别做同样的事情(可能是为了更多的调用),所以为此我还需要创建一个资源类?为什么这么难,而且不能“开箱即用”?
有没有办法通过全局设置或类似的方式来改变它?
答案 0 :(得分:1)
您是否在查询搜索引擎以获取结果?如果是,则Facet搜索配置级别有一个配置 - 启用语言回退机制。如果不是,那么您可以定义自定义过滤器,以便所有Web服务首先通过过滤器,然后在过滤器中调用i18nService.setLocalizationFallbackEnabled(true)。
答案 1 :(得分:1)
我使用的解决方案:
将filter-config-v1-spring.xml中的以下部分添加到defaultCommerceWebServicesFilterChainListV1
<!-- Custom filter to enable Fallback mechanism -->
<ref bean="languageFallbackFilter"/>
在列表之后添加bean定义
<bean id="languageFallbackFilter" class="b2b.hybris.commercewebservices.filter.LanguageFallbackFilter">
<property name="i18nService" ref="i18nService" />
</bean>
andcourse创建类LanguageFallbackFilter
package b2b.hybris.commercewebservices.filter;
import de.hybris.platform.servicelayer.i18n.I18NService;
import java.io.IOException;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Required;
import org.springframework.web.filter.OncePerRequestFilter;
/**
* This LanguageFallbackFilter will enable the Localization Fallback mechanism
*
*/
public class LanguageFallbackFilter extends OncePerRequestFilter
{
private static final Logger LOG = Logger.getLogger(LanguageFallbackFilter.class);
private I18NService i18nService;
@Override
protected void doFilterInternal(final HttpServletRequest request, final HttpServletResponse response,
final FilterChain filterChain) throws ServletException, IOException
{
i18nService.setLocalizationFallbackEnabled(true);
filterChain.doFilter(request, response);
}
@Required
public void setI18nService(final I18NService i18nService)
{
this.i18nService = i18nService;
}
}