我是一个使用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#中设置语言环境目录? (也许是问题)
我玩了好几天,但我找不到任何东西。
答案 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());
});