spring mvc i18n:设置默认语言环境似乎回退到 'en'
spring mvc i18n: setting default locale seems to fallback to 'en'
我想通过以下方式实现国际化:
- 有一个不是 'en' 的默认语言环境(FWIW,我的目标是特定国家/地区的语言环境,例如 'en_US')。
- 对某些资源有 'en' 专业化
在 spring-by-example's simple-form project 的基础上,我更改了以下内容:
Index: web/simple-form-annotation-config-webapp/src/main/resources/messages_en.properties
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>windows-1252
===================================================================
--- web/simple-form-annotation-config-webapp/src/main/resources/messages_en.properties (date 1567652013000)
+++ web/simple-form-annotation-config-webapp/src/main/resources/messages_en.properties (date 1567652013000)
@@ -0,0 +1,1 @@
+index.message=this is English (en)
Index: web/simple-form-annotation-config-webapp/src/main/webapp/WEB-INF/templates/footer.jsp
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- web/simple-form-annotation-config-webapp/src/main/webapp/WEB-INF/templates/footer.jsp (date 1422210675000)
+++ web/simple-form-annotation-config-webapp/src/main/webapp/WEB-INF/templates/footer.jsp (date 1567652013000)
@@ -4,13 +4,17 @@
<div align="right">
<div>
<fmt:message key="button.locale"/>:
- <c:url var="englishLocaleUrl" value="/index.html">
+ <c:url var="fooLocaleUrl" value="/index.html">
<c:param name="locale" value="" />
</c:url>
+ <c:url var="englishLocaleUrl" value="/index.html">
+ <c:param name="locale" value="en" />
+ </c:url>
<c:url var="spanishLocaleUrl" value="/index.html">
<c:param name="locale" value="es" />
</c:url>
-
+
+ <a href='<c:out value="${fooLocaleUrl}"/>'>Foo</a>
<a href='<c:out value="${englishLocaleUrl}"/>'><fmt:message key="locale.english"/></a>
<a href='<c:out value="${spanishLocaleUrl}"/>'><fmt:message key="locale.spanish"/></a>
</div>
所以现在 'en' 是特定于语言环境的资源,而不是默认值(通过选择 'Foo' 作为语言来设置)。
我原以为在 index.html 上单击 'Foo' 会显示 messages.properties
中的原始 index.message
,单击 'English' 会显示 this is English (en)
来自 'en'-专用文件。但是,两者都生成 messages_en.properties
.
的版本
如何设置它以便应用认为默认值不是 'en'?
谢谢!
已解决。
我误解的是如何在消息包中实现 'default' 的概念,以及它与默认语言环境的关系。我假设基本名称资源 (messages.properties
) 映射到默认语言环境。
它的实际工作原理是:
- 可以通过语言环境解析器设置默认语言环境。当没有设置其他语言环境时,它将被使用。
- 消息包需要在基本名称资源 (
messages.properties
) 中包含所有公共资源,并在各自的资源中包含特定于区域设置的属性。在此上下文中,ResourceBundle 的 'default' 集是一组通用的、与语言环境无关的属性。
我想通过以下方式实现国际化:
- 有一个不是 'en' 的默认语言环境(FWIW,我的目标是特定国家/地区的语言环境,例如 'en_US')。
- 对某些资源有 'en' 专业化
在 spring-by-example's simple-form project 的基础上,我更改了以下内容:
Index: web/simple-form-annotation-config-webapp/src/main/resources/messages_en.properties
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>windows-1252
===================================================================
--- web/simple-form-annotation-config-webapp/src/main/resources/messages_en.properties (date 1567652013000)
+++ web/simple-form-annotation-config-webapp/src/main/resources/messages_en.properties (date 1567652013000)
@@ -0,0 +1,1 @@
+index.message=this is English (en)
Index: web/simple-form-annotation-config-webapp/src/main/webapp/WEB-INF/templates/footer.jsp
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- web/simple-form-annotation-config-webapp/src/main/webapp/WEB-INF/templates/footer.jsp (date 1422210675000)
+++ web/simple-form-annotation-config-webapp/src/main/webapp/WEB-INF/templates/footer.jsp (date 1567652013000)
@@ -4,13 +4,17 @@
<div align="right">
<div>
<fmt:message key="button.locale"/>:
- <c:url var="englishLocaleUrl" value="/index.html">
+ <c:url var="fooLocaleUrl" value="/index.html">
<c:param name="locale" value="" />
</c:url>
+ <c:url var="englishLocaleUrl" value="/index.html">
+ <c:param name="locale" value="en" />
+ </c:url>
<c:url var="spanishLocaleUrl" value="/index.html">
<c:param name="locale" value="es" />
</c:url>
-
+
+ <a href='<c:out value="${fooLocaleUrl}"/>'>Foo</a>
<a href='<c:out value="${englishLocaleUrl}"/>'><fmt:message key="locale.english"/></a>
<a href='<c:out value="${spanishLocaleUrl}"/>'><fmt:message key="locale.spanish"/></a>
</div>
所以现在 'en' 是特定于语言环境的资源,而不是默认值(通过选择 'Foo' 作为语言来设置)。
我原以为在 index.html 上单击 'Foo' 会显示 messages.properties
中的原始 index.message
,单击 'English' 会显示 this is English (en)
来自 'en'-专用文件。但是,两者都生成 messages_en.properties
.
如何设置它以便应用认为默认值不是 'en'?
谢谢!
已解决。
我误解的是如何在消息包中实现 'default' 的概念,以及它与默认语言环境的关系。我假设基本名称资源 (messages.properties
) 映射到默认语言环境。
它的实际工作原理是:
- 可以通过语言环境解析器设置默认语言环境。当没有设置其他语言环境时,它将被使用。
- 消息包需要在基本名称资源 (
messages.properties
) 中包含所有公共资源,并在各自的资源中包含特定于区域设置的属性。在此上下文中,ResourceBundle 的 'default' 集是一组通用的、与语言环境无关的属性。