如何本地化 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 {
}
}
我继承了远程内容,我想将其本地化。我正在寻找最好的架构,或者如果有一个简单的逻辑可以在 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 {
}
}