Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка под ASP.NET > Локализация usercontrol в umbraco


Автор: Stifler 5.8.2010, 11:40
Приветствую! 
Есть пользовательский контрол MyControl.ascx, который используется на странице umbraco. 
Пробовал локализовывать контрол методами .NET: 

В разметке контрола:
Код

<asp:Localize meta:resourcekey="Title" runat="server"/>


В behindCode:
Код

protected void Page_Load(object sender, EventArgs e)
{
      var language = page.Request.QueryString.Get(GeneralResources.LanguageParam);
            

            // if no 'lang' param in request then try to get it from session
            if (String.IsNullOrEmpty(language))
            {
                language = (string)page.Session[GeneralResources.LanguageParam];
            }

            CultureInfo culture;
            string cultureString;
            switch (language)
            {
                case GeneralResources.DeValue:
                    culture = CultureInfo.CreateSpecificCulture("de-DE");
                    cultureString = "de-DE";
                    break;
                case GeneralResources.DaValue:
                    culture = CultureInfo.CreateSpecificCulture("da-DK");
                    cultureString = "da-DK";
                    break;
                default:
                    culture = CultureInfo.CreateSpecificCulture("en-US");
                    cultureString = "en-US";
                    break;
            }
            Thread.CurrentThread.CurrentCulture = culture;
            Thread.CurrentThread.CurrentUICulture = culture;
            page.Culture = cultureString;
            page.UICulture = cultureString;
      ...
}


В папке App_LocalResources лежат файлы MyControl.ascx.resx, MyControl.ascx.de-DE.resx, MyControl.asxc.en-US.resx и MyControl.ascx.da-DK.resx.

Смотрим страницу с контролом и видим (сделал label для отображения текущей культуры Page.Culture и Page.CultureUI), что культура установлена верно, но ресурсы подгружаются из MyControl.ascx.resx. Удаляем этот ресурс - и локализованные значения из других ресурсов не подгружаются вовсе.

Подскажите, пожалуйста, где может быть ошибка в варианте .NET локализации! 
Или есть вариант использовать локализацию силами umbraco. Тогда как локализовать user control в таком случае?

Автор: Stifler 5.8.2010, 16:38
Посоветовали переопределить метод InitializeCulture() и нём задать Culture. Учитывая, что UserControl в отличие от Page не обладает таким методом, то решено было засунуть задание Culture в Global.asax:
Код

public void Application_AcquireRequestState(object sender, EventArgs e)
        {
            var language = Request.QueryString.Get("lang");


            // if no 'lang' param in request then try to get it from session
            if (String.IsNullOrEmpty(language))
            {
                language = (string)Session["lang"];
            }

            string cultureString;
            switch (language)
            {
                case GeneralResources.DeValue:
                    cultureString = "de-DE";
                    break;
                case GeneralResources.DaValue:
                    cultureString = "da-DK";
                    break;
                default:
                    cultureString = "en-US";
                    break;
            }
            CultureInfo culture = System.Globalization.CultureInfo.CreateSpecificCulture(cultureString);

            System.Threading.Thread.CurrentThread.CurrentCulture = culture;
            System.Threading.Thread.CurrentThread.CurrentUICulture = culture;
        }


После чего ресурсы подхватились! Насколько это гуд с точки зрения стиля не знаю, но пока больше ничего не нашёл. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)