c# - Mono C# 设置 CultureInfo 在 Windows 上不起作用

标签 c# windows mono gettext gtk#

我目前遇到一个错误,即我的应用程序的语言无法设置为不同于系统默认语言的语言。我使用以下代码来设置 CultureInfo:

Catalog.Init("AudioCuesheetEditor", Path.GetFullPath(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + MainClass.CONST_STR_LOCALE_PATH));
[...]
//Set the locale
log.debug("CultureInfo.CurrentCulture = " + CultureInfo.CurrentCulture);
if (Program.getInstance().getObjOption().getStrSelectedLanguage() != null)
{
    log.debug("Program.getInstance().getObjOption().getStrSelectedLanguage() = " + Program.getInstance().getObjOption().getStrSelectedLanguage());
    Thread.CurrentThread.CurrentCulture = new CultureInfo(Program.getInstance().getObjOption().getStrSelectedLanguage());
    if (Environment.OSVersion.Platform == PlatformID.Unix)
    {
        //Mono Linux hack
        Environment.SetEnvironmentVariable("LANGUAGE", Program.getInstance().getObjOption().getStrSelectedLanguage().Replace("-", "_"));
    }
}
Application.Init();
[...]
Application.Run();

这在 Linux 上完美运行,但在 Windows 上不适用于 gtk#。 CultureInfo 已更改,但语言未更改。有什么想法吗?

我用这样的代码得到字符串:

Catalog.GetString("general ready")

我不确定如何找到错误以及出了什么问题。任何可以提供帮助的人,提前致谢;)。

完整代码可以在这里找到:http://sourceforge.net/p/audiocuesheet/code/HEAD/tree/trunk/src/AudioCuesheetEditor/MainClass.cs

斯文

最佳答案

由于国际化基于 GNU gettext,我的假设是 Windows 实现与 unix 略有不同,因此在启动时在执行任何代码之前读取 LANGUAGE 变量。我能想到的唯一解决方法是使用设置 LANGUAGE 变量的脚本来调用您的程序。

关于c# - Mono C# 设置 CultureInfo 在 Windows 上不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29152289/

相关文章:

Linux 中使用 Mono 的 C# List<string>

C# - 如何检测 Windows 关闭/注销并取消该操作(询问用户后)

c# - 如何使用 entityframework 6 with mono 和 sqlite 进行 C# 跨平台开发?

c# - WPF C# 4.5 ListBox 更新非常慢

c# - 无法为此文件显示设计器,因为无法设计其中的任何类

C# 使用 schema.ini 导入 CSV 文件创建表但不加载数据

ruby - windows下的rmagick

windows - vagrant 插件安装在哪里?

c# - linux 位置下的 Mono 共享库

linux - 如何在嵌入式 Linux 上使用 Mono 从 C++ 访问 C# 库?