Правильный способ инициализации gettext во время выполнения в asp.net / monodevelop - PullRequest
1 голос
/ 24 сентября 2011

Я пытаюсь заставить локализацию работать в проекте asp.net mvc, используя monodevelop на mac. Я добавил переводческий проект и перевел текст «Welcome» на датский.

public class HomeController : Controller
{
    public ActionResult Index ()
    {
        var culture = CultureInfo.CreateSpecificCulture("da");      
        System.Threading.Thread.CurrentThread.CurrentUICulture = culture;
        System.Threading.Thread.CurrentThread.CurrentCulture = culture;
        Mono.Unix.Catalog.Init("i8n1", "./locale");
        ViewData ["Message"] = Mono.Unix.Catalog.GetString("Welcome");
        return View ();
    }
}

Но текст не переводится. Есть идеи?

Ответы [ 3 ]

0 голосов
/ 02 апреля 2013

Mono.Unix.Catalog не подходит для ASP.NET. Он использует подход «на среду», тогда как для ASP.NET вам нужен подход «на поток».

Эта библиотека определенно заслуживает внимания как альтернатива http://sourceforge.net/p/gettextnet/

Для справки: http://lists.ximian.com/pipermail/mono-devel-list/2008-March/027174.html

0 голосов
/ 20 декабря 2015

Ответ здесь: http://mono.1490590.n4.nabble.com/Mono-Unix-Catalog-Init-where-does-it-get-the-locale-from-td1532586.html

public static void Main (string[] args)
    {
        var culture = CultureInfo.CreateSpecificCulture ("de");
        Thread.CurrentThread.CurrentCulture = culture;
        Environment.SetEnvironmentVariable ("LANGUAGE", "de_DE"); 
        Catalog.Init ("i8n1", "./locale");

        Console.WriteLine (Catalog.GetString("Hello World!"));
    }

И у меня это работает в Ubuntu / Mono.Спасибо Владимиру за хороший вопрос и Джонатану за отличный ответ.

0 голосов
/ 23 ноября 2011

Вам понадобится полный путь к папке locale .

MonoDevelop делает что-то вроде этого (отредактировано для краткости)

string location = System.Reflection.Assembly.GetExecutingAssembly().Location;
location = Path.GetDirectoryName(location);

string catalogPath = Path.Combine (location, "locale");

Catalog.Init ("monodevelop", catalogPath);
...