1

我确实阅读了WebService and Fallback Language主题。但我仍然有一些问题。我们希望与该主题相同。我们有几个 web 服务(获取类别、获取产品等),我们需要有一个备用语言。

我们的案例是什么:我们有一个产品名称为法语和英语美国人,我们的后备语言是英语美国人。当我们使用 lang=fr 调用 getProduct 的 web 服务时,我们得到的是法语名称,所以没关系。当我们在 HMC 中删除法语名称时,我们期望在使用 lang=fr 调用 getProduct 时获得产品的英美名称。但是我们在回复中没有得到任何名字。为什么回退机制不起作用?

现在我刚刚阅读了WebService 和 Fallback Language这个主题,据我了解,您需要创建一个 MyProductResource 类来覆盖 GET 方法并添加:

@GET
public Response getMyProduct()
{
    i18nService.setLocalizationFallbackEnabled(true);
    return createGetResponse().build();
}

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

有没有办法用全局设置或类似的东西来改变它?

4

2 回答 2

3

我使用的解决方案:

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

当然还要创建类 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;
    }
}
于 2014-10-14T08:27:34.963 回答
2

您是否正在查询搜索引擎以获取结果?如果是,则在 Facet Search 配置级别有一个配置 - 启用语言回退机制。如果不是,那么您可以定义一个自定义过滤器,以便您的所有 Web 服务首先通过过滤器,然后在您的过滤器中调用 i18nService.setLocalizationFallbackEnabled(true)。

于 2014-10-09T21:57:38.383 回答