本地化.NET Web应用程序的最佳方式(服务器端和客户端)

时间:2012-10-05 10:31:13

标签: asp.net asp.net-mvc design-patterns language-agnostic localization

在过去的几天里,我一直在为用MVC编写的web应用程序实现本地化。 关于Lozalization “问题”的3个主要任务我可以指出:

  1. 存储:以多种语言存储要在您的应用中使用的键值对字符串
  2. 服务器端访问:根据服务器端脚本中的给定密钥访问值(例如,视图,控制器,Web表单等...)
  3. 客户端访问:根据客户端脚本中的给定密钥(例如Java脚本)访问值
  4. 创建文化转换机制。
  5. 有几种方法可以完成我已经探索过的每项任务,而且我正在努力在它们之间进行选择。 我有两个问题:

    1. 我想知道本地化的最佳做法是什么?从你的角度来看。 请为一种方法与另一种方法写下优点/缺点。
    2. 您可以建议使用其他方法或增强功能。

    3. 1。存储

      资源文件:

      • 在资源文件中存储本地化字符串的键值对
      • 为每种文化创建一个具有相同密钥的资源文件,例如myString.resx,myStrings.he-IL.resex等......

      XML文件:

      • 创建一个结构化XML文件,该文件将包含每个文本特定值的每个键和childe节点的父节点,例如

        <string key="myAppName">
            <heIL>some Hebrew value</heIL>
            <enUS>some English value</enUS>
        </string>
        

      2。服务器端访问

      • 使用 Storage 选项,从服务器端访问将非常容易。
        • 在这种情况下使用资源文件稍微容易一些,因为有自动生成的classess以便于访问值。因此,您可以将资源用作具有静态属性的常规clasess,以根据键访问每个字符串值。
        • 使用XML文件,您必须自己写下访问层代码,这不一定是件坏事 - 因为您可以通过这种方式获得更多控制权(仅在您需要时)

      3。客户端访问

      这是有趣的,有时很复杂的地方。 我在这里探讨了两个选项,我不知道如何继续。

      服务器端生成的脚本:

      • 在View \ Web-Form中,在<script>标记
      • 中添加服务器脚本渲染块
      • 从这一点开始,在java脚本中动态创建一个键数组或静态变量,并将所需的字符串放在其中。 以下是使用Razor引擎的示例。

           <script type="text/javascript">
                    k_CultureInfo = "@CultureInfo.CurrentCulture.Name";
                    K_ApplicationName = "@MyStrings.SomeStringKey";
                    ....
           </script>
        

      自定义HTTP处理程序:

      我在博客中找到了这个想法:Localize text in JavaScript files in ASP.NET这里

      • 您可以编写一个处理任何“.js.axd”请求的HTTP处理程序来到服务器。
      • “ScriptTranslatorHandler”将读取javascrip文件,并将替换预定义标记的任何实例,例如将java脚本中的(SomeStringKey)转换为上述任何方法所采用的正确字符串。

2 个答案:

答案 0 :(得分:1)

资源文件:

使用resx格式。翻译工具将无法处理您提议的格式,因为它在同一文件中包含多种语言。典型的翻译工具将获取源文件并在翻译后为每种语言生成匹配文件。我会不惜一切代价避免你建议的格式。

如果要使用XML,请按语言使用单个文件。此外,无论您选择何种格式,请确保为每个片段添加上下文注释以帮助翻译。

服务器端访问

使用resx并节省定义图层的时间

客户端访问

在我看来,服务器端生成的脚本更简单,与服务器端访问更加一致。

文化转换机制

我假设您在询问逻辑而不是UI。最常用的方法是获取用户的浏览器语言设置。如果语言设置为应用程序中不存在的语言,请回退到默认语言。您还希望设置一个包含用户选择的cookie(如果他们手动更改语言),以便下次使用他们选择的语言。

答案 1 :(得分:-2)

如果它是一个webapp,也许这会有所帮助 https://developers.google.com/chrome/web-store/docs/i18n

试一试!!!