在Win7 32位上使用Gtk#进行国际化

时间:2015-04-29 10:09:18

标签: c# localization internationalization gtk gtk#

我是一个使用Gtk#和.NET(没有Mono)的C#应用​​程序。我试着在这个应用程序中翻译Gtk.Label,但它没有用。

mo文件位于:

  

C:\区域设置\去\ LC_MESSAGES \ aboutbox.mo

我可以通过以下方式访问文件和字符串:

// Does not work and results 'Product'
            Mono.Posix.Catalog.Init("aboutbox", @"c:\locale");
            var proPosix = Mono.Unix.Catalog.GetString("Product");
// Works and shows translated string
            Mono.Unix.Catalog.Init("aboutbox", @"c:\locale");
            var proUnix = Mono.Unix.Catalog.GetString("Product");

作为结论我认为,mo文件是正确的。 主要问题是,在Gtk#中,这也不起作用:

GtkBuilder已初具成效:

    _aboutBuilder = new Gtk.Builder();
    _aboutBuilder.TranslationDomain = "aboutbox";
    //_aboutBuilder.AddFromString(System.IO.File.ReadAllText(deviceGladePath));
    var result = _aboutBuilder.AddFromFile(deviceGladePath);

语言设置为' de'在线程,UiThread,LANG,LANGUAGE。所以没想到这就是问题所在。

问题: 1)为什么Gtk#翻译不起作用? 2)为什么Posix.Catalog不工作,但是Mono.Catalog? 3)如何在gtk#中设置语言环境目录? (也许是问题)

我玩了好几天,但我找不到任何东西。

1 个答案:

答案 0 :(得分:0)

我不知道这是否会对你有所帮助,但我在项目中成功使用了翻译。我正在使用Xamarin Studio,但我想它应该可以使用任何其他工具。

首先,我在我的解决方案中设置了一个翻译项目。它的名字是i18n。

然后我使用Catalog.Init(" i18n"," ./ locale")初始化目录。构建项目时,locale文件夹包含我的.mo文件。

然后每当我需要翻译时:Catalog.GetString(" foo")(或者我已经使用过的Catalog.GetPluralString)。

这里有一些代码:

 $('#close').click(function () {
     var objs = $(".SlectBox option:selected").map(function () {
         return this.value;
     }).get();
     $('#list').html(objs.join(", "));

     $("#selctObjs").html($(".SlectBox option:selected").clone());
 });
相关问题