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

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

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

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

  • 有几种方法可以完成我探索过的每项任务,我正在努力在它们之间进行选择。
    有两个我感兴趣的问题:
  • 我想知道本地化的最佳实践是什么?从你的角度来看。
    请写出一种方法与另一种方法的优点\缺点。
  • 您是否可以建议其他方法或增强功能。


  • 1. 存储

    资源文件:
  • 将本地化字符串的键值对存储在资源文件中
  • 为每种文化创建一个具有相同 key 的资源文件,例如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. 客户端访问

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

    服务器端生成的脚本:
  • 在您的 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”将读取 javascript 文件并替换任何预定义 token 的实例,例如将您的 java 脚本中的 (SomeStringKey) 转换为上述任何方法所采用的正确字符串。
  • 最佳答案

    资源文件:

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

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

    服务器端访问

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

    客户端访问

    在我看来,服务器端生成的脚本更简单,更符合服务器端访问。

    文化切换机制

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

    关于asp.net - 本地化 .NET Web 应用程序的最佳方式(服务器端和客户端),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12744362/

    相关文章:

    asp.net - 在渲染为位图之前缩放 WPF 内容

    javascript - 使用 Javascript 插件作为客户端进行 Web API 的身份验证和授权

    将方法名称保存在属性文件中的 Java 设计模式

    javascript - 在初始页面加载时通过 Ajax 加载内容的设计模式

    c# - 日期时间转换失败

    c# - 将 .asp.net 图表标签更改为值,然后仅格式化图表,而不是图例

    c# - Informix 和 .NET 的时间和日期时间格式

    javascript - jQuery Validate() 和 Valid() 方法未定义或不起作用

    javascript - @Html.CheckBoxFor() - 更改复选框标签颜色

    c# - 如何检查默认的 DateTime 值?