Mono C#设置CultureInfo在Windows上不工作

Mono C#设置CultureInfo在Windows上不工作,c#,windows,mono,gettext,gtk#,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("Cul

我目前面临一个错误,即我的应用程序的语言不能设置为与系统默认值不同的语言。我使用以下代码设置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。文化信息已更改,但语言不变。你知道为什么吗

我得到的字符串代码如下:

Catalog.GetString("general ready")
我不是舒尔,如何发现缺陷以及问题所在。任何能帮忙的人,提前谢谢;)

整个代码可在此处找到:


Sven

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

我发现,在windows上更改环境变量“LANG”是可行的。因此,如果我设置“LANG=en”,应用程序将从英语翻译开始。

Catalog.GetString的作用是什么?你能制作一个简短但完整的程序来演示这个问题吗?(顺便说一句,这些方法名看起来像是在用独特的Java口音编写C#。了解属性和.NET命名约定。)IIRC
setenv()
是进程范围,当然
Thread.CurrentThread.CurrentCulture
是线程范围。字符串是否可以在另一个线程中确定?Catalog.GetString()是Mono上获取可翻译字符串的标准方法。更多信息可以在这里找到:@FrédéricHamidi我了解到,这是在.NET中设置CultureInfo的标准方法(取自此处:)没人知道吗?我有点困惑,为什么它不起作用。这是gtk还是mono的bug?