我有一个网站,使用代码显示当前日期Datetime.Now.根据我的理解,Datetime.Now应该显示当前时间,因为它将显示在查看器的当前区域设置中.
目前,当我在localhost上测试时,网站正确地确定我的位置(en-nz)并显示正确的日期.但是,当我现场运行网站时,我会得到一个不同的约会日期.
那么系统如何确定查看者的语言环境以及为什么我的网站在本地和现场显示Datetime.Now之间存在差异?
我正在尝试在JSP中设置本地.
我以为我能做的事情如下:
<fmt:setLocale value="${param['local']}" scope="session"/>
Run Code Online (Sandbox Code Playgroud)
关于这个主题的Java自己的页面似乎说得非常多.
但是,当我去执行它时,我得到:
HTTP Status 500 -
type Exception report
message
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
org.apache.jasper.JasperException: /pages/ResourceBundlesJSTL.jsp(11,0) According to TLD or attribute directive in tag file, attribute value does not accept any expressions
org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:40)
org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:407)
org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:148)
org.apache.jasper.compiler.Validator$ValidateVisitor.checkXmlAttributes(Validator.java:1232)
org.apache.jasper.compiler.Validator$ValidateVisitor.visit(Validator.java:868)
org.apache.jasper.compiler.Node$CustomTag.accept(Node.java:1539)
org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2376)
org.apache.jasper.compiler.Node$Visitor.visitBody(Node.java:2428)
org.apache.jasper.compiler.Node$Visitor.visit(Node.java:2434)
org.apache.jasper.compiler.Node$Root.accept(Node.java:475)
org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2376)
org.apache.jasper.compiler.Validator.validateExDirectives(Validator.java:1787)
org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:211)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:360)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:340)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:327)
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:594)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:316)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
note The full stack trace of the root cause …Run Code Online (Sandbox Code Playgroud) 我创建了以下方法:
public List<String> listAll() {
List worldCountriesByLocal = new ArrayList();
for (Locale locale : Locale.getAvailableLocales()) {
final String isoCountry = locale.getDisplayCountry();
if (isoCountry.length() > 0) {
worldCountriesByLocal.add(isoCountry);
Collections.sort(worldCountriesByLocal);
}
}
return worldCountriesByLocal;
}
Run Code Online (Sandbox Code Playgroud)
它非常简单,它返回用户区域设置中的世界国家列表.然后我对它进行排序以使其按字母顺序排列.这一切都很完美(除了我似乎偶尔会得到重复的国家!).
无论如何,我需要的是将美国和英国置于榜单的首位.我遇到的问题是我无法隔离将为美国和英国返回的索引或字符串,因为这是特定于语言环境的!
任何想法都会非常感激.
现在我开始考虑我的ANDROID应用程序的本地化.我在JAVA编码,我正在使用ADT环境.该应用程序应该在完成后以德语和英语运行.我找到了很多关于如何根据设备UI访问字符串,标签图像等资源的好教程.
但是,我需要根据应用程序运行的语言在我的代码中做出DECISIONS.让我举一个简单的例子,说明我想用一些伪代码实现的(仅作为例子):
If ("language-is-german") {
start an audiostream playing a .wav-file saying "Guten morgen lieber Benutzer!!!";
Integer intErgebnis = 2 + 4;
}
Else If ("language-is-english") {
start an audiostream playing a .wav-file saying "Good morning dear user!!!";
Integer intResult = 2 + 9;
}
Run Code Online (Sandbox Code Playgroud)
基本的想法是播放不同的声音文件(我知道你也可以通过指向不同的资源来实现这一点) - 但是它们需要以不同的顺序播放等等.我添加计算只是为了告诉你我真的想要做根据用户计算机上设置的语言不同的东西.
我如何在后面的代码中检查它(即我需要输入什么而不是language-is-german上面的伪代码?
Locale在问题标题中指定的方法中的作用是什么?它如何影响任何结果?我正在尝试以下两行代码:
Calendar cal = Calendar.getInstance();
System.out.println(cal.getTime().toString());
Run Code Online (Sandbox Code Playgroud)
即使我使用参数Locale.GERMANY或Locale.ITALY进行尝试,我也会收到相同的结果.什么时候它实际影响结果?
这段代码被完全简化,但是重现了我的问题:
public String reload(){
System.out.println(FacesContext.getCurrentInstance()
.getViewRoot().getLocale());
return "test";
}
public void setLocale(){
System.out.println("locale changed!");
FacesContext.getCurrentInstance()
.getViewRoot().setLocale(Locale.FRANCE);
}
Run Code Online (Sandbox Code Playgroud)
<h:form>
<h:commandLink action="#{backingBean.reload}" value="reload page"/>
</h:form>
<h:form>
<h:commandLink action="#{backingBean.setLocale}" value="change locale"/>
</h:form>
Run Code Online (Sandbox Code Playgroud)
en
locale changed!
fr_FR
en
Run Code Online (Sandbox Code Playgroud)
如果您要更改区域设置,然后调用reload两次方法,则区域设置将重置为default en。locale重置的原因是什么?此外,仅在转发到其他页面的情况下才会发生这种情况,如果将reload方法更改为void,则语言环境将保持不变fr。
public void reload(){
System.out.println(FacesContext.getCurrentInstance()
.getViewRoot().getLocale());
}
Run Code Online (Sandbox Code Playgroud)
en
locale changed!
fr_FR
fr_FR
Run Code Online (Sandbox Code Playgroud)
但是在2个转发位置之后,区域设置将更改回 en
在我的应用程序中,我必须根据配置页面中选择的语言环境用户显示内容.我没有使用浏览器默认语言环境.
使用时s:text,它始终使用默认资源文件.
在Struts1中,我使用下面的代码在我的过滤器中设置默认语言环境
session.setAttribute("org.apache.struts.action.LOCALE",locale);
Run Code Online (Sandbox Code Playgroud)
如何在Struts2中动态设置用户选择的语言环境?
我正在阅读cppreference.com上的文档std::tolower:
根据当前安装的C语言环境定义的字符转换规则将给定字符转换为小写.
在默认的"C"语言环境中,以下大写字母ABCDEFGHIJKLMNOPQRSTUVWXYZ将替换为相应的小写字母abcdefghijklmnopqrstuvwxyz.
这种行为在不同的语言环境中如何变化?
我正在处理当前项目的问题,我需要一些帮助:
strtoupper(),mb_strtoupper()等不工作setlocale(LC_ALL, "rus");或者setlocale(LC_ALL, "Russian_Russia.1251");对于其他人(我不知道所有其他人是否)setlocale(LC_ALL, 'ru_RU');但是我找到的所有操作系统检测方法都使用strupper()/ strtolower()检测操作系统......所以现在我有些困惑.我该怎么办.如何检测OS ...
顺便说一句,性能是至关重要的,如果有人知道检测操作系统的好方法和设置正确的语言环境,那就太棒了!
我想更改应用程序的语言环境(语言),以便当用户希望使用“更改语言”按钮在北印度语和英语之间切换时进行编程更改。
我有一个代码来更改语言,但是仅当我在setContentView()方法之前在活动的onCreate()中调用时它才起作用。
任何帮助深表感谢。