Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从类库中的一个文件本地化窗体控件_C#_Winforms_Localization_Controls - Fatal编程技术网

C# 从类库中的一个文件本地化窗体控件

C# 从类库中的一个文件本地化窗体控件,c#,winforms,localization,controls,C#,Winforms,Localization,Controls,我正在开发一个C#WinForms应用程序。基于将来将应用程序迁移到ASP.NET的想法,解决方案有2个项目 类库项目,具有数据访问类和文件夹“模型”,每个类/模型有一个文件 Windows窗体应用程序项目,包含所有窗体、用户控件及其逻辑 新的本地化,我读了微软的文章。根据他们的第一步“”,建议将所有可本地化的资源移动到单独的仅限资源的DLL 因为我的解决方案中已经有一个类库项目(项目1),所以我添加了一个新文件夹“本地化”,并创建了两个资源文件“Strings.resx”和“Strings.e

我正在开发一个C#WinForms应用程序。基于将来将应用程序迁移到ASP.NET的想法,解决方案有2个项目

  • 类库项目,具有数据访问类和文件夹“模型”,每个类/模型有一个文件
  • Windows窗体应用程序项目,包含所有窗体、用户控件及其逻辑
  • 新的本地化,我读了微软的文章。根据他们的第一步“”,建议将所有可本地化的资源移动到单独的仅限资源的DLL

    因为我的解决方案中已经有一个类库项目(项目1),所以我添加了一个新文件夹“本地化”,并创建了两个资源文件“Strings.resx”和“Strings.en.resx”。(默认语言为荷兰语。)

    为了测试这个推荐的设置,我清除了主窗体上其中一个按钮的text属性,将其替换为我创建的资源文件中的值。但我不知道如何将资源文件的值连接到text属性

    我发现post where is all是以编程方式完成的,但我不确定这是否是唯一/最好的方法。以及如何通知ResourceManager其他项目(在同一解决方案中)中的资源文件。并且,如果不使用每个表单的资源文件(默认情况下),是否仍需要将表单的Localizable属性设置为True


    欢迎任何人帮助我找到正确的方向

    您可以像处理普通类一样处理这些资源文件。您只需要将资源公开,使其可以从类库外部访问。为此,您可以使用以下任一选项:

    • 您可以双击资源文件并在设计模式下打开它,然后在其工具栏中,将
      accessmodifier
      下拉列表设置为
      Public

    • 您可以右键单击资源文件并单击属性,然后在属性窗口中将
      自定义工具设置为
      PublicResXFileCodeGenerator

    然后资源类将作为程序集中的公共类生成

    然后,要访问这些资源,您可以添加程序集作为对windows应用程序的引用,并像使用任何其他类一样使用它们,例如:

    saveButton.Text = MyResourceAssembly.Resources.StringResources.Save;
    
    注意:

    • 通常,Windows窗体应用程序本地化不同于ASP.NET应用程序。在windows窗体中,您依赖于窗体的
      本地化
      语言
      属性,就像它是什么一样

    • 如果出于任何原因您想要使用这些资源文件,您可以看看这个示例,它允许您在设计时使用资源文件设置控件的文本

    • 如果在您支持的语言中可能有RTL语言,您可能希望使用RTL表单,或者使用RTL表单

    • 最好用数据注释属性装饰模型类,并尝试在Windows窗体中使用这些属性。例如,您可以为您的模型实现
      IDataErrorInfo
      ,并在Windows窗体以及ASP.NET MVC中使用数据注释验证属性


    谢谢!很好!关于笔记的一些问题:1。您是说资源文件不能用于ASP.NET项目进行本地化吗?2.文本属性是在窗体的构造函数中设置的,还是在_load事件中设置的,这有关系吗?我见过一些例子,其中使用了load事件。我只是从构造函数中调用一个LocalizeForm()方法。3.请给我一页你的第四个音符的例子好吗。事实上,它们对于ASP.NET项目更有用。对于Windows窗体项目,通常会以不同的方式进行本地化。但是,如果您不打算使用Windows窗体本地化的常用方法,也可以在Windows窗体中使用这些资源文件。2.一般来说,将它们放入Load或构造函数中并不重要。3.目前我没有任何例子,但我在一个项目中实现了类似的方法,没有任何问题。我可能会分享一篇关于它的文章/博客。@Robert我发表了一篇关于哇,你是最棒的@你会喜欢它:需要支持控制列标题文本、列顺序、工具提示、列格式吗?