i18n用于静态html内容

时间:2013-04-24 00:16:46

标签: java html jsp internationalization

我正在REST API前面构建一个网站(这支持i18n),我不确定哪种方式可以实现国际化。我已经研究过js和html解决方案,但它们看起来都不如服务器端选项。

鉴于大多数页面都包含只需要语言环境支持的静态内容,jsp是一个很好的解决方案吗? jsf看起来有点矫枉过正。

2 个答案:

答案 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