我正在REST API前面构建一个网站(这支持i18n),我不确定哪种方式可以实现国际化。我已经研究过js和html解决方案,但它们看起来都不如服务器端选项。
鉴于大多数页面都包含只需要语言环境支持的静态内容,jsp是一个很好的解决方案吗? jsf看起来有点矫枉过正。
答案 0 :(得分:2)
我真的不能推荐各种HTML文件。可本地化的最佳实践建议将翻译与代码分开。
我所知道的最快,最简单,最不具阻碍性的方法是使用Google ARB。考虑使用以下示例HTML:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Testing ARB...</title>
</head>
<body>
<h2>This is a test.</h2>
</body>
</html>
现在需要提取可本地化的内容。可以使用extractor tool ARB提供的方式执行此操作,或者如果您的网页非常简单,您甚至可以手动执行此操作:
<html>
<head arb:namespace="test">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title arb:id="MSG_HTML_TITLE">Testing ARB...</title>
</head>
<body>
<h2 arb:id="MSG_BODY_TEST">This is a test.</h2>
</body>
</html>
然后让我们为这些消息创建资源文件,并提供翻译:
arb.register(
"test",
{
"MSG_HTML_TITLE": "Testing ARB",
"MSG_BODY_TEST": "This is a test.",
"MSG_CURR_LOCALE": "...and the selected language is \"{currentLocale}\".",
"@MSG_CURR_LOCALE": {
"placeholders": {
"0": {
"description": "This variable would show the current locale.",
"example": "fr"
}
}
}
}
);
arb.register(
"test:de",
{
"MSG_HTML_TITLE": "ARB auf Probe",
"MSG_BODY_TEST": "Das ist ein Test.",
"MSG_CURR_LOCALE": "...und die ausgewählte Sprache ist \"{currentLocale}\".",
"@MSG_CURR_LOCALE": {
"placeholders": {
"0": {
"description": "This variable would show the current locale.",
"example": "fr"
}
}
}
}
);
最后,将JS添加到HTML中。另外,提供一种从URL获取所选语言环境的简便方法;即./index.html?locale=de
<html>
<head arb:namespace="test">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title arb:id="MSG_HTML_TITLE">Testing ARB...</title>
<script src="arb/lib/arbcore.js"></script>
<script src="test.arb"></script> <!-- ARB file w/ translations. -->
</head>
<body>
<h2 arb:id="MSG_BODY_TEST">This is a test.</h2>
<!-- Get locale from URL and translate page HTML -->
<script>
function main(){
var locale = arb.getParamFromUrl('locale');
if (!locale){
locale = 'en';
}
arb.setResourceSelector(locale);
// JS localization
var r$ = arb.getResource("test");
document.write(arb.msg(r$.MSG_CURR_LOCALE, {'currentLocale': locale}));
// This should appear after all the translatable HTML content
arb.localizeHtml();
}
main();
</script>
</body>
</html>
可以找到此示例的代码here。
答案 1 :(得分:-1)
1)如果您只有静态内容,请创建不同的html文件 不同的语言,并将其放在单独的文件夹中,并访问该网站 像
for English
http://yourdomain.com/en/english_index.html
for French
http://yourdomain.com/fr/french_index.html
2)如果你有动态操作,JSP也是一个不错的选择。有一个 保持i18n资源边界的好选择。
我建议选择选项1