3

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

4

4 回答 4

8

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

Share 响应Accept-LanguageWeb 浏览器发送的标头,因此为了防止它基于此切换语言,您可以将代理配置为Accept-Language从传入的客户端请求中删除标头。

例如,使用 Apache,您可以在配置中mody_proxy一起使用mod_headers,例如

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

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

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

于 2013-04-08T10:28:35.540 回答
6

分享是基于Spring Surf哪个在上面Spring MVC。默认情况下,使用内置AcceptHeaderLocaleResolver。要覆盖它,只需定义一个org.springframework.extensions.surf.mvc.LocaleResolver如上扩展的 bean:

将 bean 声明添加到由导入的任何配置文件中slingshot-application-context.xml

<!-- Override Locale Resolver -->
<bean id="localeResolver" class="mypackage.CustomLocaleResolver" />

添加新的 LocaleResolver 实现类

    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;
        }
    }
于 2013-07-24T14:52:38.217 回答
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标题,否则将设置英语。但是为什么不覆盖它,那么我们可以为整个共享应用程序放置我们想要的语言环境。

这个解决方案对我来说就像一个魅力。对不起我的英语不好。

于 2013-05-30T15:54:08.880 回答
1

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

共享在 web-client-config.xml 文件中看起来不像资源管理器。

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

于 2013-04-08T08:23:34.330 回答