如何国际化/本地化JSP/Servlet web应用程序?
我从谷歌那里了解到,国际化是我实现梦想的过程 使用所有语言的web应用程序。我想了解Unicode的国际化过程,所以我从和学习了Unicode 我能够理解Unicode是如何将字符集编码为字节,然后再将字节解码为字符集的。但我不知道如何进一步前进。我想学习如何比较字符串,我需要知道如何在我的web应用程序中实现国际化。有什么建议吗?请引导我 我的目标:如何国际化/本地化JSP/Servlet web应用程序?,jsp,unicode,localization,internationalization,Jsp,Unicode,Localization,Internationalization,我从谷歌那里了解到,国际化是我实现梦想的过程 使用所有语言的web应用程序。我想了解Unicode的国际化过程,所以我从和学习了Unicode 我能够理解Unicode是如何将字符集编码为字节,然后再将字节解码为字符集的。但我不知道如何进一步前进。我想学习如何比较字符串,我需要知道如何在我的web应用程序中实现国际化。有什么建议吗?请引导我 我的目标: 我的主要目标是开发一个用于翻译的Web应用程序(英语到阿拉伯语,反之亦然)。我想跟随国际化。我希望在所有三种浏览器(即FF、Chrome和IE)
我的主要目标是开发一个用于翻译的Web应用程序(英语到阿拉伯语,反之亦然)。我想跟随国际化。我希望在所有三种浏览器(即FF、Chrome和IE)中运行我的web应用程序进行翻译。我如何实现这一点?对于基本的JSP/Servlet web应用程序,基本方法将结合使用。资源束包含键值对,其中键是一个常量,对于所有语言都是相同的,并且每个语言的值都不同。资源束通常由API加载。但是,这可以自定义,以便您可以从例如数据库中加载键值对 下面是一个示例,说明如何使用基于文件的资源包属性对Web应用程序的登录表单进行国际化
com.example.i18n
(对于Maven,将它们放在src/main/resources
中的包结构中)
text.properties
(包含默认语言的键值对,通常为英语)
text_es.properties
(包含西班牙语(es
)键值对)
管理当前语言。如果语言是作为请求参数提供的(通过语言下拉列表),那么它将被设置。否则,如果会话中以前已经设置了该语言,请改为使用该语言。否则,请在请求标头中使用用户提供的区域设置
设置资源束的区域设置。这一行在
前面很重要
通过其基本名称(即完整的限定包名称)初始化资源包,直到使用不带\ll\u CC
说明符的唯一名称为止
通过指定的绑定键检索消息值
通知搜索机器人程序页面使用的是什么语言,这样它就不会被标记为重复内容(因此,有利于SEO)
当选择另一种语言时,JavaScript将立即提交语言下拉列表,页面将用新选择的语言刷新
但是,您需要记住,默认情况下,属性文件是使用ISO-8859-1字符编码读取的。您需要通过unicode转义来转义它们。这可以使用JDK提供的
native2ascii.exe
工具来完成。有关更多详细信息,请参见
一个理论上的替代方案是提供一个包,其中包含一个自定义的UTF-8加载这些文件,但遗憾的是,基本JSTL
fmt
taglib不支持这一点。您需要在过滤器的帮助下自行管理它。有一些(MVC)框架可以以更透明的方式处理这个问题,比如JSF,另请参见。除了BalusC所说的,您还必须注意方向性(因为英语是从左到右写的,阿拉伯语是从左到右写的)。最简单的方法是将dir
属性添加到JSP网页的html
元素并将其外部化,因此值来自属性文件(与其他元素或属性一样):
...
此外,设计这样的应用程序的样式也没有什么问题——至少应该避免绝对定位。如果由于某种原因无法避免这种情况,您可以使用每种(每种?)语言的不同样式表,或者做一些不必要的事情,即使用表来管理布局。如果您想使用div元素,我建议使用具有“对称”左右样式属性的相对定位(两者具有相同的值),因为这就是切换方向性的原因
你可以找到更多关于双向网站的信息。基于,我在GAE-Google的应用程序引擎上使用以下内容:
jsp文件如下所示:
<%@ page import="java.io.* %>
<%
String lang = "fr"; //Assign the correct language either by page or user-selected or browser language etc.
ResourceBundle RB = ResourceBundle.getBundle("app", new Locale(lang));
%>
<!DOCTYPE html>
<%@ page contentType="text/html;charset=UTF-8" language="java"%>
<head>
</head>
<body>
<p>
<%= RB.getString("greeting") %>
</p>
</body>
app.properties
包含:
greeting=Hello!
这就是全部是的,的确,这也必须考虑在内。
或
。默认值是
这个不错的解决方案有一个问题:从请求中获取的区域设置可以是语言和国家,如“en_US”,它将给出无效的HTML。必须仅使用区域设置中的语言部分“en”作为lang属性的值。上述国际化方法不会根据显示的语言修改url。对于如何根据语言更新url,您有什么建议吗。我这样问是因为,对于索引,建议不同的语言有不同的URL:如果您将语言资源(test.properties和text_en.properties文件)文件放在应用程序/资源根目录下,您可以这样设置fmt:bundle:@bahadirT:假设“test”是一个拼写错误,这是正确的。basename
必须表示不带文件扩展名的基本名称。不在包中组织它只是一种糟糕的做法。@theyuv:用户拥有{0}审查{0,选择,0#s | 1 | 1
login.label.username = Nombre de usuario
login.label.password = Contraseña
login.button.submit = Acceder
<html dir="${direction}">
...
</html>
<%@ page import="java.io.* %>
<%
String lang = "fr"; //Assign the correct language either by page or user-selected or browser language etc.
ResourceBundle RB = ResourceBundle.getBundle("app", new Locale(lang));
%>
<!DOCTYPE html>
<%@ page contentType="text/html;charset=UTF-8" language="java"%>
<head>
</head>
<body>
<p>
<%= RB.getString("greeting") %>
</p>
</body>
greeting=Bonjour!
greeting=Hello!