У меня есть мой целевой язык в сеансе ["lang"], который является либо «en», либо «it». Я добавил это к Site.Master:asp.net MVC: локализация
<script runat="server">
void Page_Load(object sender, EventArgs e) {
string lang = Session["lang"].ToString();
System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.CreateSpecificCulture(lang);
System.Threading.Thread.CurrentThread.CurrentUICulture = System.Globalization.CultureInfo.CreateSpecificCulture(lang);
}
</script>
Тогда я хотел бы, чтобы вызвать строку ресурса, как это:
<asp:Label ID="Label1" runat="server" Text="<%$ Resources:Global, test %>"></asp:Label>
У меня есть два файла в App_GlobalResources, названные Global.resx и Global.en.resx.
проблема в том, что независимо от того, что находится в переменной LANG, я всегда получает результаты от основного Global.resx, и я никогда не получить английскую версию от Global.en.resx
Я делаю это неправильно?
Я попытался поместить часть System.Threading ... в метод Application_PreRequestHandlerExecute в Global.asax.cs, но результат был тот же.
Благодаря
PS: Я спрашиваю о пути, чтобы сделать эту работу простым способом. Если бы я использовал сложный способ, я бы пошел с этим: http://helios.ca/2009/05/27/aspnet-mvc-and-localization/
Не полезно, извините: все, что он говорит, это то, что «Если вам нужно установить культуру в соответствии с предпочтением пользователя или параметром URL, лучше всего написать собственный HTTP-модуль или фильтр действий ». Возможно, тогда нет способа сделать это таким образом? – Palantir
, конечно, есть способ установить культуру .. если пользователь предпочитает ваш сайт, то вы храните его в файле cookie, и вы создаете контроллер, который при создании экземпляра (конструктор) вы читаете cookie и устанавливаете CultureUI/Culture. Тогда все ваши контроллеры должны выйти из этого контроллера. – Konstantinos
, когда вы прочтете свой язык и хотите его установить, вы делаете это так: System.Threading.Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo («en-US»); System.Threading.Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo («en-US»); – Konstantinos