【问题标题】:How do I best localize an entire app to many different languages?如何最好地将整个应用程序本地化为多种不同的语言?
【发布时间】:2008-09-15 19:34:08
【问题描述】:

我正在使用 Visual Studio(2005 及更高版本)。我正在尝试制作一个应用程序,用户可以在其中更改所有菜单、输入格式等的语言。我将如何继续这样做,因为我认为 .Net 中有一些完整的功能可以帮助我解决这个问题?

我需要考虑以下几点(如果我错过了一些明显的东西,请填写我)

  • 字符串(菜单、文本)
  • 输入数据(解析浮点数、日期等)
  • 应该很容易添加对另一种语言的支持

【问题讨论】:

    标签: c# .net localization


    【解决方案1】:

    无论如何,我都不是 .NET 方面的专家,但本地化绝不像“交换字符串值”或“更改日期格式”那么简单。还有更多需要考虑的因素,例如布局、适当的文本放置。

    以中文为例。您阅读的方式是从上到下,而不是从左到右。如果正确本地化,应用应该考虑到这一点。

    http://msdn.microsoft.com/en-us/library/y99d1cd3(VS.80).aspx 似乎是一个好的开始,但如果您正在处理 Windows 窗体。

    【讨论】:

      【解决方案2】:

      经典的秘诀是:设计应用程序时不要使用母语,而是使用本地化工具,然后将初始化程序开发为一种语言(例如英语)。因此,您每天晚上构建应用程序并将其本地化为英语;如果没有本地化步骤,它将无法使用。做得好,初始样本本地化的资源可以替换为任何其他语言的资源。从一开始就考虑非罗马文字。拥有始终需要本地化的无语言应用程序比需要减去其母语并添加替代语言的特定语言应用程序要干净得多。

      【讨论】:

        【解决方案3】:

        对于字符串,您应该将字符串与代码分开(使用 XML/DLL 将字符串 ID 转换为真实字符串是一种方法)。但是,您确实需要确保您支持某些语言的双字节字符(如果您使用 C/C++,这是相关的)。

        对于输入数据,您想要的是具有不同的语言环境。在 Java 中,这相对容易,如果您使用 C#,它可能也很容易。在 C/C++ 中我真的不知道。基本思想是输入解析器应该根据当时选择的语言环境而有所不同。所以每个字段(文本字段、文本框等)都必须有一个抽象解析器,然后根据语言环境(从右到左、双字节等)由不同的类实现。

        查看 Java 实现,了解他们是如何做到的。很实用。

        【讨论】:

          【解决方案4】:

          肯定需要使用 .NET ResourceManager 和 resx 文件 xml 格式,但是有很多方法可以使用它。

          这实际上取决于您想要实现的目标。对我来说,我想要一个任何人都可以修改的单个 xml 资源文件(针对每种支持的语言)。我创建了一个辅助类,将全局资源文件加载到 ResourceManager(仅一次)中,并且我有一个辅助函数,它为给定名称提供了所需的资源。这种方法的唯一缺点是我无法利用资源到属性的动态绑定。

          我发现这比每个表单的多个或嵌入式资源文件更好、更容易管理。此外,在 ASP.NET 应用程序中可以使用完全相同的方法。我还发现这种方法意味着将资源翻译和向客户提供语言包的外包更易于管理。

          【讨论】:

            【解决方案5】:

            Microsoft 推荐的方法是使用附属程序集,如Packaging and Deploying Resources 中所述。如果您使用 ResourceManager 加载资源,.NET 将为 CurrentUICulture 加载正确的资源。这默认为用户在 Windows 中的当前 UI 语言设置。

            可以通过 Visual Studio 或外部工具 WinRes.exe 本地化 Windows 窗体。 This article 描述 WinRes 以及如何使用 Visual Studio 本地化表单。

            【讨论】:

            • 非常有趣。我一有时间离开 WAR,就会查看这些链接。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2020-01-03
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-10-15
            相关资源
            最近更新 更多