Hybris在Web服务中启用全局回退语言

时间:2014-10-09 09:33:47

标签: hybris

我确实阅读了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();
}

但我需要为类别做同样的事情(可能是为了更多的调用),所以为此我还需要创建一个资源类?为什么这么难,而且不能“开箱即用”?

有没有办法通过全局设置或类似的方式来改变它?

2 个答案:

答案 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;
    }
}