如何强制Alfresco Share只使用一种语言,独立于浏览器区域设置?

时间:2013-04-08 06:22:01

标签: browser share alfresco

很容易找到Alfresco Exlplorer的解决方案,但Alfresco Share只使用一种特定语言,与网络浏览器的区域设置无关,哪种方式适合?

4 个答案:

答案 0 :(得分:8)

这取决于您如何部署Alfresco,但假设您在生产环境中工作,在您的客户端和Alfresco服务器之间放置HTTP代理/负载平衡器是标准做法,您有一些潜在的选择。

共享响应Web浏览器发送的Accept-Language标头,因此为了防止它根据此情况切换语言,您可以配置代理以从中删除Accept-Language标头传入的客户请求。

例如,使用Apache,您可以在{/ p>等配置中将mody_proxymod_headers一起使用

ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/
RequestHeader unset Accept-Language

前两行将代理来自Apache的请求(很可能在端口80上运行)到端口8080上托管Alfresco的Tomcat实例,而第三行将删除Accept-Language标头。

Share将默认为运行Alfresco的Java进程的语言环境,因此您应确保将其设置为US English(en-US)。

答案 1 :(得分:6)

分享基于Spring SurfSpring MVC位于AcceptHeaderLocaleResolver之上。默认情况下,使用内置org.springframework.extensions.surf.mvc.LocaleResolver。要覆盖它,只需定义一个扩展slingshot-application-context.xml的bean,如上所述:

将bean声明添加到<!-- Override Locale Resolver --> <bean id="localeResolver" class="mypackage.CustomLocaleResolver" />

导入的任何配置文件中
    package mypackage;

    import java.util.Locale;
    import javax.servlet.http.HttpServletRequest;
    import org.springframework.extensions.surf.mvc.LocaleResolver;
    import org.springframework.extensions.surf.util.I18NUtil;

    public class CustomLocaleResolver extends LocaleResolver {

    public Locale resolveLocale(HttpServletRequest request) {
        Locale locale = Locale.FRENCH;
        I18NUtil.setLocale(locale);

        return locale;
        }
    }

添加新的LocaleResolver实现类

{{1}}

答案 2 :(得分:2)

您可以查看MTAuthenticationFilter.java

public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
    throws IOException, ServletException
{
    if (req instanceof HttpServletRequest)
    {
        requestHolder.set((HttpServletRequest)req);

        /*if (((HttpServletRequest) req).getHeader(ACCEPT_LANGUAGE_HEADER) == null)
        {
            req = new SlingshotServletRequestWrapper((HttpServletRequest) req);
            ((SlingshotServletRequestWrapper) req).addHeader(ACCEPT_LANGUAGE_HEADER, "en_US");
        }*/

        //locale will be always 'french' (fr)
        req = new SlingshotServletRequestWrapper((HttpServletRequest) req);
        ((SlingshotServletRequestWrapper) req).addHeader(ACCEPT_LANGUAGE_HEADER, "fr");
    }
    try
    {
        chain.doFilter(req, res);
    }
    finally
    {
        requestHolder.remove();
    }
}

此过滤器检查Accept-language标头,否则将设置英语。 但是为什么不覆盖它,那么我们可以将我们想要的语言环境放在整个共享应用程序中。

这个解决方案对我来说就像一个魅力。抱歉我的英文。

答案 3 :(得分:1)

删除所有其他* .properties文件的最简单方法。

分享对于web-client-config.xml文件看起来不像资源管理器。

所以像find . -name *_<language>.properties -exec rm -rf {} \;

这样的脚本