【问题标题】:Internationalisation with Gtk# on Win7 32 Bit在 Win7 32 位上使用 Gtk# 进行国际化
【发布时间】:2015-07-08 13:16:52
【问题描述】:

我有一个使用 Gtk# 和 .NET(没有 Mono)的 C# 应用程序。我尝试翻译此应用程序中的 Gtk.Label,但没有成功。

mo 文件位于:

C:\locale\de\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);

Thread、UiThread、LANG、LANGUAGE 上的语言设置为“de”。所以没想到会是这个问题。

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

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

【问题讨论】:

    标签: c# localization internationalization gtk gtk#


    【解决方案1】:

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

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

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

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

    这里有一些代码:

    using Mono.Unix;
    ...
    
        // At startup
        Catalog.Init("i18n", "./locale");
    
        ...
    
        // Some code
        Console.WriteLine(Catalog.GetString("Hello, world!"));
    

    【讨论】:

      猜你喜欢
      • 2023-03-13
      • 1970-01-01
      • 2018-02-05
      • 2019-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多