【问题标题】:C# Creating a setup for multi-languageC# 创建多语言设置
【发布时间】:2010-10-22 09:12:06
【问题描述】:

我使用下面的简短文章添加了多语言。

当您添加例如德语时,您将拥有以下文件: formMain.resx formMain.de-DE.resx formMain.Designer.cs formMain.cs

在第一个文件中,您将拥有中性语言的资源,例如字符串、图像、..

所以现在您还需要为代码中使用的字符串添加资源。添加一个新的资源文件并将其命名为 formMain.Strings.resx 然后我将为每个应该翻译的字符串输入名称、值对。当您添加资源文件时,它会自动输入,因为在每次关闭 resx 设计器时都会自动重新生成另一个名为 formMain.Strings.Designer.cs 的文件。

添加另一个名为 formMain.Strings.de-DE.resx 的资源。从以前的资源中添加相同的名称键,然后用对应的德语单词更改值。现在从源访问创建的资源将是这样的。

MessageBox.Show(formMain_Strings.SameStringName);

但是,我已将我的语言更改为泰语。当我在 VS 中运行我的应用程序时,一切正常。

但是,一旦我添加了一个安装项目并安装在客户端计算机上,它就不会将语言更改为泰语,而是保持默认语言。

所以我已将资源文件和 th-TH dll 添加到项目设置中。我仍然遇到同样的问题。

Packaging file 'Lang.Strings.resx'...
Packaging file 'MultiLanguage.resources.dll'...
Packaging file 'MultiLanguage.exe'...
Packaging file 'Lang.Strings.th-TH.resx'...

因为在 Visual Studio 中运行时一切正常。安装后我需要做些什么才能让它运行。我拥有的每个文件的所有属性都保持默认。

非常感谢,

=========

static void Main()
    {
        System.Threading.Thread.CurrentThread.CurrentUICulture = 
new System.Globalization.CultureInfo("th-TH");

        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new Form1());
    }

【问题讨论】:

    标签: c# installation multilingual


    【解决方案1】:

    我找到了答案

    单击解决方案资源管理器中的设置项目,然后单击添加\项目输出\。从对话框中选择要包含本地化(卫星)程序集的项目,然后选择本地化资源。

    在我安装到的文件夹中安装后,我有 th-TH 文件夹,其中包含卫星程序集。

    谢谢,

    【讨论】:

    • 如果可以的话,您最好尽快放弃安装项目并切换到 Windows Installer XML (WiX)。我曾经使用设置项目发布了产品。再也不。永远,永远。
    • 我刚刚快速浏览了一下 WiX,它也未能在安装包中包含本地化资源 dll。似乎任何类型的设置项目中的本地化资源都无法正常工作(我正在处理 VC++ 项目)。
    【解决方案2】:

    尝试在应用启动时添加(如果不存在):

    Thread.CurrentThread.CurrentUICulture = CultureInfo.CurrentCulture;
    

    这里有一个short article 讨论如何使这项工作的一些选项,以及在运行时选择语言环境的选项。


    在 cmets 之后编辑:

    确保您的附属组件位于适当的位置并正确构建。从我引用的那篇文章中:

    “当 .NET 运行时启动应用程序时,它会查找可能的附属程序集文件。附属程序集文件是仅具有 .resources.dll 扩展名而不是 .exe ir .dll 的资源程序集文件(如果主程序集是一个库)。附属程序集文件始终位于应用程序主目录的特定语言子目录中。如果应用程序文件是 Converter.exe,那么日语附属程序集文件是 ja\Converter.resources.dll。"

    您应该在此处检查一些事项。检查程序集的名称。另外,请确保它位于正确的位置。在您的情况下,它应该位于可执行文件下具有适当名称的 th-TH 子目录中。如果它在那里,它应该被找到并正确使用。

    这里是关于这个话题的another good source of information

    【讨论】:

    • 你好。我已经将它添加到我的表单加载事件中。在视觉工作室一切正常。只有当我安装在客户端的计算机上时。 public Form1() { System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("th-TH");初始化组件(); }
    • 在加载表单之前尝试将其移至 Main() 例程。我认为在 form_load 中使用它为时已晚......此时,程序集已经被加载并选择了。
    • 你好。我已将其从 form_load 中删除并将其放入我的 main.xml 文件中。但是,它适用于视觉工作室。但是,一旦我在客户端计算机上安装它,它只会显示默认语言而不是泰语。在我的第一篇文章中,我添加了我的资源文件和 resource.dll。我应该这样做吗?
    • 你说它可以在 VS 中工作 - 如果在 VS 之外运行,它是否可以在你的系统上工作,在发布模式下?
    • 是的,我已经在我的机器和客户端上安装了。我已经在调试和发布模式下进行了编译。我还在我和客户的计算机上都安装了。但是,它始终以默认语言显示。
    猜你喜欢
    • 2011-08-08
    • 2012-04-29
    • 2010-09-15
    • 1970-01-01
    • 1970-01-01
    • 2014-02-12
    • 1970-01-01
    • 2015-01-14
    • 2016-07-31
    相关资源
    最近更新 更多