Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Ubuntu/Spring3-语言环境的奇怪问题_Java_Linux_Spring_Ubuntu_Internationalization - Fatal编程技术网

Java Ubuntu/Spring3-语言环境的奇怪问题

Java Ubuntu/Spring3-语言环境的奇怪问题,java,linux,spring,ubuntu,internationalization,Java,Linux,Spring,Ubuntu,Internationalization,我在Ubuntu 10.04.1 LTS x86_64上遇到了一个奇怪的问题,当系统区域设置为en_US时,一切似乎都正常工作。但是,当系统区域设置为en_GB时,Spring会尝试将默认资源包作为en_us而不是en_us查找 例外情况: 06-Oct-2010 23:35:12 org.springframework.context.support.ResourceBundleMessageSource getResourceBundle WARNING: ResourceBundle [m

我在Ubuntu 10.04.1 LTS x86_64上遇到了一个奇怪的问题,当系统区域设置为en_US时,一切似乎都正常工作。但是,当系统区域设置为en_GB时,Spring会尝试将默认资源包作为en_us而不是en_us查找

例外情况:

06-Oct-2010 23:35:12 org.springframework.context.support.ResourceBundleMessageSource getResourceBundle
WARNING: ResourceBundle [messages] not found for MessageSource: Can't find bundle for base name messages, locale en_us
系统区域设置:

taylor@taylor-laptop:~$ locale
LANG=en_GB.utf8
LC_CTYPE="en_GB.utf8"
LC_NUMERIC="en_GB.utf8"
LC_TIME="en_GB.utf8"
LC_COLLATE="en_GB.utf8"
LC_MONETARY="en_GB.utf8"
LC_MESSAGES="en_GB.utf8"
LC_PAPER="en_GB.utf8"
LC_NAME="en_GB.utf8"
LC_ADDRESS="en_GB.utf8"
LC_TELEPHONE="en_GB.utf8"
LC_MEASUREMENT="en_GB.utf8"
LC_IDENTIFICATION="en_GB.utf8"
LC_ALL=
taylor@taylor-laptop:~$
默认的Spring区域设置如下所示:

<bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver">
    <property name="cookieName" value="USER_LOCALE" />
    <property name="cookieMaxAge" value="1209600" />
    <property name="defaultLocale" value="en_US" />
</bean>

我已经在Ubuntu虚拟机上从上面的github链接中签出了代码,甚至更改了我的语言环境以匹配您的语言环境:

matt@ubuntu-vm:~/google-app-engine-jappstart$ locale
LANG=en_GB.utf8
LANGUAGE=en_GB:en
LC_CTYPE="en_GB.utf8"
LC_NUMERIC="en_GB.utf8"
LC_TIME="en_GB.utf8"
LC_COLLATE="en_GB.utf8"
LC_MONETARY="en_GB.utf8"
LC_MESSAGES="en_GB.utf8"
LC_PAPER="en_GB.utf8"
LC_NAME="en_GB.utf8"
LC_ADDRESS="en_GB.utf8"
LC_TELEPHONE="en_GB.utf8"
LC_MEASUREMENT="en_GB.utf8"
LC_IDENTIFICATION="en_GB.utf8"
LC_ALL=
当我运行
mvn gae:run
时,我可以很好地打开您的Web应用程序的索引页。我甚至验证过,如果我从index.jsp打印出
java.util.Locale.getDefault()
的值,该值就是
en_GB


您确定没有导致此问题的其他设置吗?我是否试图错误地复制它?

我已经在Ubuntu虚拟机上从您的github链接中签出了代码,甚至更改了我的语言环境以匹配您的语言环境:

matt@ubuntu-vm:~/google-app-engine-jappstart$ locale
LANG=en_GB.utf8
LANGUAGE=en_GB:en
LC_CTYPE="en_GB.utf8"
LC_NUMERIC="en_GB.utf8"
LC_TIME="en_GB.utf8"
LC_COLLATE="en_GB.utf8"
LC_MONETARY="en_GB.utf8"
LC_MESSAGES="en_GB.utf8"
LC_PAPER="en_GB.utf8"
LC_NAME="en_GB.utf8"
LC_ADDRESS="en_GB.utf8"
LC_TELEPHONE="en_GB.utf8"
LC_MEASUREMENT="en_GB.utf8"
LC_IDENTIFICATION="en_GB.utf8"
LC_ALL=
当我运行
mvn gae:run
时,我可以很好地打开您的Web应用程序的索引页。我甚至验证过,如果我从index.jsp打印出
java.util.Locale.getDefault()
的值,该值就是
en_GB



您确定没有导致此问题的其他设置吗?我是否试图错误地复制它?

不知道这是否有帮助,但我相信区域设置字符串的格式应该是“en_GB.UTF-8”,而不是“en_GB.utf8”。@schot-In/etc/default/locale它被设置为LANG=“en_GB.UTF-8”。您的消息解析器bean是什么样子的?你有什么“消息”文件?@matt-Spring配置文件在这里()--看看dispatcher-servlet.xml和applicationContext service.xml。我已经检查了你的源代码,并在maven gae插件的配置中添加了一个
-Duser.country=GB
。我还向index.jsp添加了一点调试文本,以打印出默认的
java.util.Locale
对象(显示en_GB)-我恐怕没有从Spring得到任何与ResourceBundle相关的错误。不知道这是否有帮助,但是我认为区域设置字符串的格式应该是“en_GB.UTF-8”,而不是“en_GB.utf8”。@schot-In/etc/default/locale它被设置为LANG=“en_GB.UTF-8”。您的消息解析器bean是什么样子的?你有什么“消息”文件?@matt-Spring配置文件在这里()--看看dispatcher-servlet.xml和applicationContext service.xml。我已经检查了你的源代码,并在maven gae插件的配置中添加了一个
-Duser.country=GB
。我还向index.jsp添加了一点调试文本,以打印出默认的
java.util.Locale
对象(显示en_GB)-我恐怕没有从Spring得到任何与ResourceBundle相关的错误。@matt-感谢您的回复。实际上,在创建帐户并尝试发送激活电子邮件之前,您不会看到错误。这里是指向Google代码问题的链接:。我得到一个不同的错误:org.springframework.context.NoSuchMessageException:在区域设置“en_us”的代码“mail.subject”下找不到任何消息。。我建议为MessageSource创建一个默认的
messages.properties
,以便在当前区域设置无法解析时返回到该MessageSource-如果我将您的
messages\u en\u US.properties
复制到
messages.properties
并创建一个帐户,则不会生成错误。无论如何,对于用户可能拥有(或选择)但您没有翻译字符串的任何区域设置,提供默认ResourceBundle都是一个好主意。我认为错误在于MailTask方法接受了
@RequestParam字符串区域设置
作为参数。我不确定这个值是从哪里来的——我看不出它是通过JSP传递的。如果您查看,您的处理程序可以接受一个
Locale
对象作为参数,Spring将自动使用您的LocaleResolver来查找要使用的正确区域设置,或者您的邮件服务应该查找区域设置,而不是传递它in@matt-这不是问题所在。看看RegisterController()和UserDetailsServiceImple()。我通过“localeResolver.resolveLocale(请求)”获取区域设置,然后将其传递给邮件任务。它接收到的区域设置很好,只是在en_GB系统区域设置下,它查找en_us.properties而不是en_us.properties。我认为真正的错误是Spring试图解决en_us.properties而不是它应该解决的en_us.properties。它解析为非Ubuntu环境中的en_US.properties。我不必创建messages.properties,因为en_US被设置为localeResolver中的默认区域设置。@matt-感谢您的回复。实际上,在创建帐户并尝试发送激活电子邮件之前,您不会看到错误。这里是指向Google代码问题的链接:。我得到一个不同的错误:org.springframework.context.NoSuchMessageException:在区域设置“en_us”的代码“mail.subject”下找不到任何消息。。我建议为MessageSource创建一个默认的
messages.properties
,以便在当前区域设置无法解析时返回到该MessageSource-如果我将您的
messages\u en\u US.properties
复制到
messages.properties
并创建一个帐户,则不会生成错误。无论如何,对于用户可能拥有(或选择)但您没有翻译字符串的任何区域设置,提供默认ResourceBundle都是一个好主意。我认为错误在于MailTask方法接受了
@RequestParam字符串区域设置
作为参数。我不确定这个值是从哪里来的——我看不出它是通过JSP传递的。如果您查看,您的处理程序可以接受一个
Locale
对象作为参数,Spring将自动使用您的LocaleResolver来查找要使用的正确区域设置,或者您的邮件服务应该查找区域设置,而不是传递它in@matt-这不是问题所在。德