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

Mor*_*lus 5 language-agnostic asp.net asp.net-mvc design-patterns localization

在过去的几天里,我已经为我用MVC编写的web应用程序实现了Localization.有三个主要任务可以解决 Lozalization "问题",我可以指出:

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

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

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

1.储存

资源文件:

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

XML文件:

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

    <string key="myAppName">
        <heIL>some Hebrew value</heIL>
        <enUS>some English value</enUS>
    </string>
    
    Run Code Online (Sandbox Code Playgroud)

2.服务器端访问

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

3.客户端访问

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

服务器端生成的脚本:

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

       <script type="text/javascript">
                k_CultureInfo = "@CultureInfo.CurrentCulture.Name";
                K_ApplicationName = "@MyStrings.SomeStringKey";
                ....
       </script>
    
    Run Code Online (Sandbox Code Playgroud)

自定义HTTP处理程序:

我在博客pos中找到了这个想法:在ASP.NET Here 中的JavaScript文件中本地化文本

  • 您可以编写一个处理任何".js.axd"请求的HTTP处理程序来到服务器.
  • "ScriptTranslatorHandler"将读取的javascrip文件和西港岛线在你的Java脚本替换预定义的令牌如的任何实例翻译(SomeStringKey)由上述任何方法采取正确的字符串.

eak*_*kas 1

资源文件:

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

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

服务器端访问

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

客户端访问

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

文化切换机制

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