5

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

  1. 存储:以多种语言存储键值对字符串以在您的应用程序中使用
  2. 服务器端访问:根据服务器端脚本中的给定键访问值(例如视图、控制器、Web 表单等...)
  3. 客户端访问:根据客户端脚本(例如 Java 脚本)中的给定键访问值
  4. 建立文化转换机制。

有几种方法可以完成我探索过的每项任务,我正在努力在它们之间进行选择。有两个我感兴趣的问题:

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

1. 存储

资源文件:

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

XML 文件:

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

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

2.服务器端访问

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

3.客户端访问

这是它变得有趣且有时复杂的地方。我在这里探索了两个选项,但我不确定如何继续。

服务器端生成的脚本:

  • <script>在您的 View\ Web-Form 中,在标签内添加一个服务器脚本渲染块
  • 从这一点开始,在 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 Here

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

2 回答 2

1

资源文件:

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

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

服务器端访问

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

客户端访问

我认为服务器端生成的脚本更简单,更符合服务器端访问。

文化转换机制

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

于 2012-10-05T23:45:43.190 回答
-2

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

试试看!!!

于 2012-10-05T10:38:33.930 回答