【问题标题】:Which is a good way to maintain resources for Internationalization in .Net这是维护.Net国际化资源的好方法
【发布时间】:2009-09-03 18:18:21
【问题描述】:

我已经想到了三种使用 Visual Studio 2008 在 WinForms 的 .Net 项目中创建和维护资源的方法。(我相信应该有不止三种方法。)我需要决定在开始为我们的产品实施国际化之前。

  • 对于每个 .net 项目中的每个窗口窗体或 UI 片段(自定义控件)都有单独的资源文件集 (resx)。当窗体或控件属性中的 Localizable 属性设置为 true 时,这些是由 Visual Studio 自动生成的。
  • 每个 .net 项目有一个资源文件。这是手动添加并使用资源字符串和消息手动更新的。
  • 拥有一个资源管理器项目,该项目包含一组 .net 项目的所有组件的资源。

就我个人而言,我不喜欢第一种方法,因为它会创建大量资源文件。我们在这种方法中获得的唯一优势是我们不需要手动在 UI 元素中设置文本。

我喜欢第二种和第三种方法,因为它们易于维护,并且您只需处理一组资源。所以没有重复的字符串和消息。译者也很容易。

你的想法是什么?请分享。

【问题讨论】:

  • 请注意,两个不同上下文中的字符串在另一种语言中的翻译方式可能会有所不同,因此不必使用一个巨大的资源文件来避免重复的字符串。
  • 很高兴知道您指的是 .Net 的哪一部分? Asp.Net、WinForms 还是 WPF? WPF 有一些非常好的本地化功能,而其他的则没有。

标签: c# .net localization resources internationalization


【解决方案1】:

我倾向于使用 VS 创建项目并提供默认资源集,然后通过 SDK 工具 winres.exe、resgen.exe 和 al.exe 在 Visual Studio 之外维护任何其他资源。

您可以在一个相当简单的文件夹结构中维护资源,每个区域性一个文件夹,并且只需一两个批处理文件即可将资源构建到附属程序集中。这为您提供了将 VS 解决方案保留在核心产品中的优势,并且所有本地化都可以在事后完成。

【讨论】:

    【解决方案2】:

    如果国际化您的应用程序不仅仅意味着翻译文本片段,那么您应该使用第一个。您可以创建附属程序集来部署不同的文化。这样,您不仅可以本地化文本,还可以本地化图像、控件布局等。这是 Microsoft 推荐的方式,他们有充分的理由采用这种方法。

    【讨论】:

      【解决方案3】:

      我发现最简单的国际化方法是在电子表格或某种制表符分隔的文件中简单地维护应用程序中所有不同文本片段(标签、按钮、表单标题等)的列表,然后将此文件发送给翻译人员以添加(在每种语言的一个附加列中)所有翻译。

      然后,您在每个表单的 Load 事件中调用一个简单的方法(全部以英语维护),该方法递归地遍历表单上的所有控件,并将它们的 Text 属性更改为您正在翻译的任何语言的翻译值应用程序进入。语言可以通过编程方式确定(我忘记了在 .Net 命名空间中的哪个位置),或者您可以在应用程序首次启动时有一个简单的语言选择对话框(第二种方法的优点是您的应用程序可以翻译成用户希望使用的任何语言,无需为所有 Windows 设置语言 - 这对于信息亭应用程序特别有用)。

      在我看来,创建和维护每个表单的所有不同的国际化版本是一个很大的痛苦,尽管当翻译的文本值与英文版本的大小显着不同时它很有用。

      【讨论】:

        【解决方案4】:

        就我个人而言,我更喜欢第一种方法,因为上下文(在您的情况下是表格)对于翻译人员完美地完成工作非常重要。在您的第二种和第三种方法中,上下文消失了,因为它只是一个字符串列表。

        是的,第一种方法可能很难维护,但至少您的应用程序会被正确翻译。

        【讨论】:

        • 译者有能力在设计器中看到表格吗?如果他们这样做,那么他们将有上下文。否则,即使使用第一种方法,他们也不知道在什么上下文中使用了哪个词。
        • 我们使用翻译机构的外部翻译,所以他们看不到设计器中的表格。因此,我们正努力向他们提供尽可能多的信息(屏幕截图、用户手册等)。
        【解决方案5】:

        我个人喜欢添加单个项目 .Resources。 接下来我启用 Microsoft MAT (https://developer.microsoft.com/en-us/windows/develop/multilingual-app-toolkit) 并通过 MAT 管理我的所有翻译。

        这样您还可以从其他解决方案中回收翻译,节省您的时间;-)

        【讨论】:

          猜你喜欢
          • 2023-03-13
          • 2014-01-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-30
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多