如何本地化 java tomcat 网络服务器上的内容?

How to localize content on a java tomcat webserver?

我继承了远程内容,我想将其本地化。我正在寻找最好的架构,或者如果有一个简单的逻辑可以在 java 中完成它,那就太好了。这是问题所在:

在我的移动应用程序中从远程服务器检索内容时,我会调用: https://mywebsite.com/contentFarm/static/images/storeFrontSign@2x.png

它会 return 给我一张英文店面招牌的图片。但是,如果用户将设备切换到西班牙语,我需要能够获得西班牙语店面标志。我当然已经加载了该图像,但是将其放置在哪里?

我想我可以使用 url 路径来进行网络调用,如下所示: https://mywebsite.com/contentFarm/static/images-西班牙语/storeFrontSign@2x.png

https://mywebsite.com/contentFarm/static/images-英语/storeFrontSign@2x.png

但是有没有更简洁的方法来本地化我的服务器资产?例如,服务器上的一个小型 java 应用程序读取 header 信息以决定向 return 等什么。它的 java 服务器,只是需要一个架构。

您可以为此尝试 serverfault - 您实际上可以在 apache 或 nginx 中评估请求 headers 并在那里进行转发。只是语言,还是语言和国家?

无论如何 - 在 apache 中,您可以这样做:

## Rewriting url for IT browser 
RewriteCond %{HTTP:Accept-Language} ^it [NC]
RewriteRule ^/$ http://my-site.com/it/foo-page [L,R=301]

## Rewriting url for EN browser
RewriteCond %{HTTP:Accept-Language} ^en [NC]
RewriteRule ^/$ http://my-site.com/en/foo-page [L,R=301]

...只要你的语言不是太多。

如果您确实必须使用 servlet 容器,则可能需要使用 servlet 过滤器:

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;


public class Blah implements Filter {

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
        if(request instanceof HttpServletRequest) {
            HttpServletRequest hr = (HttpServletRequest)request;
            String lang = hr.getHeader("Accept-Language");

            String url = "the new url"; // decide where to send the person
            boolean needsForward = true; // decide wether or not to forward at all
            if(needsForward) {
                request.getRequestDispatcher(url).forward(request, response);
                return;
            }
        }
        chain.doFilter(request, response);
    }

    @Override
    public void destroy() {
    }

    @Override
    public void init(FilterConfig arg0) throws ServletException {
    }
}