C# 窗体应用本地化



我在评论后修改了我的问题,该评论涉及文章。

我有一个 c# Win 表单应用程序,其中包含一些用于用户交互的表单和对话框/消息框。我想将其本地化为一组语言。

  • 大多数表单是通过表单设计器创建的,文本/字符串是通过属性设置的
  • 消息
  • 框和其他运行时消息的字符串来自代码。

我在这里读过这篇文章http://msdn.microsoft.com/en-us/library/y99d1cd3(v=vs.71).aspx

这指向 2 种方法,

  • 首先是让Visual Studio为你创建资源文件 - 这是为表单设计器德语代码完成
  • 第二种是手动添加资源文件并使用 GetString("strMessage") 方法访问它们的代码

脑海中的问题是对于desingner生成的代码,我必须首先使用VS将自行创建资源文件的方法。要本地化我的运行时消息和 mssage 框,我必须使用第二种方法,这意味着我必须手动添加资源文件。

我最终将为每个语言提供两组资源文件。我不能只使用一种方法并将两种形式的字符串本地化在一个地方吗?

谢谢

不幸的是,你不能(轻易地)吃你的蛋糕。这就是MSFT设计事物的方式。不能将消息字符串添加到 VS 窗体设计器生成的代码隐藏".resx"文件中,因为只要您对这些".resx"文件进行更改(覆盖消息字符串),VS 就会重新生成这些文件。如果您尝试将自己的资源添加到这些文件(使用 VS 中的".resx"编辑器),VS 甚至会警告您这一点。反之亦然,即您无法将代码隐藏的".resx"资源添加到手动创建的".resx"文件中(没有很大的困难)。不过,情况真的没有那么糟糕。多年来一直以这种方式进行,并且有效。虽然我个人更喜欢所有资源的中央存储库,但每个系统都有其优点和缺点。 顺便说一句,您应该对消息字符串和".resx"文件(您自己手动添加的资源)中的任何其他资源使用"强类型"资源。不要使用"GetString()"IOW(或任何其他你可能找到的函数)。强类型资源要容易得多。谷歌了解详细信息,在学习如何使用它们(不难)之后,还要搜索 Dmytro Kryvko 的强类型资源生成器(一个非常有用的 VS 工具,可以进一步改进事情)。

没有什么能阻止你结合使用这两种技术。完成步骤 1 以创建所有语言资源文件,然后将自己的字符串添加到这些文件。

最新更新