我正在 REST API 前面构建一个网站(这支持 i18n),但我不确定采用哪种方式进行国际化。我研究过 js 和 html 解决方案,但它们似乎都不如服务器端选项。
鉴于大多数页面包含只需要语言环境支持的静态内容,jsp 会是一个好的解决方案吗?jsf 似乎有点矫枉过正。
我正在 REST API 前面构建一个网站(这支持 i18n),但我不确定采用哪种方式进行国际化。我研究过 js 和 html 解决方案,但它们似乎都不如服务器端选项。
鉴于大多数页面包含只需要语言环境支持的静态内容,jsp 会是一个好的解决方案吗?jsf 似乎有点矫枉过正。
我真的不推荐拥有各种 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>
现在需要提取可本地化的内容。可以使用 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 获取所选语言环境的简单方法;IE./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>
此示例的代码可在此处找到。
1)如果您只有静态内容,请创建具有不同语言的不同 html 文件并将其放在单独的文件夹中并访问该站点,例如
for English
http://yourdomain.com/en/english_index.html
for French
http://yourdomain.com/fr/french_index.html
2) 如果您有动态操作,JSP 也是一个不错的选择。有一个很好的选择来维护 i18n 资源边界。
我建议选择选项 1