很容易找到 Alfresco Exlplorer 的解决方案,但哪种方式适合 Alfresco Share 仅使用一种特定语言,独立于网络浏览器的区域设置?
4 回答
这取决于您如何部署 Alfresco,但假设您在生产环境中工作,在您的客户端和 Alfresco 服务器之间放置 HTTP 代理/负载平衡器是标准做法,您有一些潜在的选择。
Share 响应Accept-Language
Web 浏览器发送的标头,因此为了防止它基于此切换语言,您可以将代理配置为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
)。
分享是基于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;
}
}
你可以检查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
标题,否则将设置英语。但是为什么不覆盖它,那么我们可以为整个共享应用程序放置我们想要的语言环境。
这个解决方案对我来说就像一个魅力。对不起我的英语不好。
删除所有其他 *.properties 文件的最简单方法。
共享在 web-client-config.xml 文件中看起来不像资源管理器。
所以像这样的脚本find . -name *_<language>.properties -exec rm -rf {} \;