4

我正在 REST API 前面构建一个网站(这支持 i18n),但我不确定采用哪种方式进行国际化。我研究过 js 和 html 解决方案,但它们似乎都不如服务器端选项。

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

4

2 回答 2

3

我真的不推荐拥有各种 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>

此示例的代码可在此处找到。

于 2013-04-25T07:08:55.467 回答
-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

于 2013-04-24T04:11:49.777 回答