2009-11-19 62 views
7

有一个基本的WinForm问题:默认情况下,为每个表单或用户控件(以及designer.cs)创建一个resx文件。这个resx适用于所有的控件和通过UI添加到控件的文本。程序化字符串的表单资源使用情况?

我想知道如果我可以使用相同的resx来添加必须以编程方式使用并基于条件附加到控件的字符串吗?在任何情况下resx都会被覆盖,这个自定义字符串会被删除吗? 这种情况下遵循的最佳做法是什么?

+2

不要阻止你,但你可能会对这个“仇恨狂欢”(基于VS 2003)关于ResX文件感兴趣:http://www.windojitsu.com/blog/resxsucks.html希望情况会更好现在,但我仍然很害怕直接使用它们。 – BillW 2009-11-19 06:57:14

+1

对于“杯是半满”的看法(?)也许考虑:http://stackoverflow.com/questions/676312/modifying-resx-file-in-c – BillW 2009-11-19 06:59:14

+0

有趣的链接..感谢指出那些BillW – bschandramohan 2009-12-11 15:53:24

回答

2

自动生成的会被覆盖(我使用的是2005),所以我不会使用相同的文件。我会建议在你的项目中为这样的.resx文件创建一个单独的区域。通常我会为每个表单创建一个.resx,当然会匹配这个名称。

编辑:Here是我最近在使用.resx文件本地化应用程序时组织文件/文件夹结构的更详细的答案。

2

Resources.resx文件中的字符串资源存在一个奇怪的问题。我没有明显的方式发现如何使用IDE为其他语言创建新的资源表。它可以通过手工完成。请按照下列步骤:

  1. 项目+属性,资源选项卡, 添加要在 程序
  2. 启动Windows资源管理器中使用的字符串和导航 到项目的属性文件夹
  3. 复制并粘贴Resources.resx 文件
  4. 将其重命名为您要使用的文化 。例如: Resources.fr-FR.resx
  5. 返回VS,单击Solution Explorer窗口中显示所有文件 图标
  6. 展开属性节点,新 资源文件应该是可见的
  7. 权 - 单击它并选择“包含在项目 ”
  8. 选择它,在设置自定义工具属性窗口 = “ResXFileCodeGenerator”
  9. 验证生成操作设置为 “嵌入的资源”

构建您的程序。您应该使用附属程序集名为projectname.resources.dll在项目的bin \ Debug目录中获得一个新文件夹。这个卫星程序集包含本地化的字符串和表单中的任何本地化资源。测试它的代码是这样的:

public Form1() { 
    System.Threading.Thread.CurrentThread.CurrentUICulture = 
    System.Globalization.CultureInfo.GetCultureInfo("fr-FR"); 
    InitializeComponent(); 
    textBox1.Text = Properties.Resources.String1; 
} 
+2

在你的表单上,将'Localizable'设置为'true',然后改变'Language'属性。 – 2009-12-07 15:06:00

+0

的确我还没有找到。 ASP.NET项目有菜单工具 - >生成资源文件,但WinForms没有。我对吗? – abatishchev 2012-02-15 19:49:25

+0

btw,真的需要'ResXFileCodeGenerator'吗?默认.resx具有BuildAction = EmbeddedResource,但CustomTool为空。 – abatishchev 2012-02-15 19:50:11

1

或者你可以试试这个:

添加在主代码();

using System.Resources;

ResXResourceWriter rw = new ResXResourceWriter("Resources.de-DE.resx"); 
rw.AddResource("String1", "de"); 
rw.Close(); 
... 

更多的文件

转到bin目录重复,并移动XML(RESX)文件(S)或许属性的文件夹。

转到nobugz后的第5-9步。

+1

皮特,你指的是什么nobugz帖子? – bschandramohan 2009-12-11 15:54:10