2014-11-07 2 views
0

У меня есть многоязычное веб-приложение, в котором я использую файлы ресурсов и класс BasePage, который устанавливает культуру на основе QueryString, которая была включена в страницу, которая наследуется от этого класса. Это все работает хорошо, если немного неуклюжий, как я того, чтобы сделать такие вещи для каждой кнопки, которая принимает пользователя на другую страницу, чтобы сохранить культуру:Как поддерживать культуру через переменную сеанса

if (Thread.CurrentThread.CurrentCulture.ToString() == "cy-GB") 
{ 
    return "~/Secure/Details.aspx?lang=cy-GB&PersonId=" + currentPersonId; 
} 
else 
{ 
    return "~/Secure/Details.aspx?PersonId=" + currentPersonId; 
} 

Я знал, что, вероятно, лучше способ сделать это, но будучи новичком, поскольку он работал, я просто сделал.

Это было до тех пор, пока мне не пришлось реализовать управление asp:SiteMapPath. Сначала я предположил, что я мог бы просто создать запись ресурса для url собственности, как я сделал для title:

<siteMapNode 
    title="$resources:SiteMapLocalizations,HomePageTitle" 
    description="Home" 
    url="~$resources:SiteMapLocalizations,HomePageUrl"> 

Однако это привело к ошибке сервера:

A potentially dangerous Request.Path value was detected from the client (:).

я сделал некоторые чтение, и я считаю, что мне нужно каким-то образом сохранить текущую культуру в переменной сеанса, которая будет следовать за пользователем, поэтому, когда они нажимают «Главная» на палитре, она будет соответствовать культуре и захватывает соответствующий текст из файлов ресурсов, я Я также надеюсь, что это позволит мне удалить все IF ELSE я должен был писать, чтобы поддерживать текущий язык во всем приложении.

Мой вопрос, однако, где я начинаю с этого, я не могу найти какое-либо руководство шаг за шагом, чтобы следовать, чтобы достичь этого, может ли кто-нибудь предоставить некоторые инструкции?

+0

Посмотрите на документацию для Page.InitializeCulture, и "Как" статьи, связанные с этой страницы: http://msdn.microsoft. com/en-us/library/system.web.ui.page.initializeculture (v = vs.110) .aspx – Joe

ответ

0

Убедитесь, что кнопка какой-то, который вызывает изменение языка. В моем случае у меня есть два варианта заголовка, один с английской ссылкой, которая будет добавлять строки запроса на английский язык и один на валлийском языке, что-то вроде:

ASP

<a id="languagelink" runat="server" title="Cymraeg">Cymraeg</a> 

C#

if (Thread.CurrentThread.CurrentCulture.ToString() == "en-GB") 
    { 
     Uri uri = new Uri(currentPage); 
     languagelink.HRef = String.Format(uri.GetLeftPart(UriPartial.Path)+"?lang=cy-GB");   
    } 

Каждая страница, которая требует переключение языка должен наследовать от моего обычая BasePage так:

Наследование

public partial class Secure_CustomerSummary : BasePage 

Base_Page

public partial class BasePage : System.Web.UI.Page 
    { 
     protected override void InitializeCulture() 
     { 
      if (Session["language"] == null) 
      { 
       Session["language"] = "en-GB"; 
      } 

      else 
      { 
       if (Request.QueryString["lang"] == null) 
       { 
        SetSessionCulture(); 
       } 

       if (Request.QueryString["lang"] != null) 
       { 
        string qs = Request.QueryString["lang"]; 
        Session["language"] = qs; 
       } 

       SetSessionCulture(); 
      } 

      SetSessionCulture();   
     } 

     private void SetSessionCulture() 
     { 
      Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(Session["language"].ToString()); 
      Thread.CurrentThread.CurrentUICulture = new CultureInfo(Session["language"].ToString()); 
      base.InitializeCulture(); 
     } 
    } 
0

Посмотрите на эту ссылку. Он объясняет, чего вы хотите достичь.

http://adamyan.blogspot.se/2010/02/aspnet-mvc-2-localization-complete.html

+0

Имеет ли значение, чем im, используя веб-формы? – JsonStatham

+0

Некоторые изменения необходимы, но концепция будет работать.У вас может быть usercontrol на главной странице, где у вас есть событие click, которое устанавливает культуру в потоке и сохраняет значение в сеансе (или cookie) вместо того, чтобы использовать его как метод action – martenolofsson

Смежные вопросы