Вы можете использовать перегрузку ResourceManager GetString(string, CultureInfo)
для получения строк на правильном языке.
Кстати.global.asax, вероятно, является лучшим местом для установки CurrentCulture и CurrentUICulture.
EDIT Предоставление образца кода для запроса Питера
Globabal.asax
Для начала, Я бы обнаружил и сохранил культуру:
Sub Application_BeginRequest(ByVal sender As Object, ByVal e As EventArgs)
' Fires at the beginning of each request '
Dim culture As CultureInfo
Dim uri As Uri = Request.Url
If uri.ToString().Contains("nederlands") Then
culture = New CultureInfo("nl-NL")
ElseIf uri.ToString().Contains("polski") Then
culture = New CultureInfo("pl-PL")
Else
culture = New CultureInfo("en-US")
End If
Thread.CurrentThread.CurrentCulture = culture
Thread.CurrentThread.CurrentUICulture = culture
End Sub
В зависимости от того, что вы хотите сделать, функция перегрузки может оказаться не самой лучшей, в вашем случае я считаю, что Session_Start
лучше (то есть, если выхочу предоставить пользователям возможность переключать язык).
Другое дело, я не проверял это с доменными именами, я использовал параметры запроса и не проверял их должным образом, но это было только для примера.
Создать App_LocalResources
Вместо того, чтобы создавать экземпляр ResourceManager и компилировать ваши ресурсы вручную, я могу только предложить вам использовать App_LocalResources.Вам просто нужно щелкнуть правой кнопкой мыши свой проект в обозревателе решений, выбрать «Добавить» -> «Добавить папку Asp.Net» -> App_LocalResources.
Создать файлы ресурсов
Создать файлы ресурсов с соответствующими именами: по умолчанию.aspx.resx, Default.aspx.nl.resx и добавьте к ним содержимое, которое вы хотите локализовать.В моем случае это было:
Default.aspx.resx (нейтральный файл ресурсов резервной культуры)
label1 Some label
label2 Some other label
Default.aspx.nl.resx (извините за мой бедный голландский)
label1 Dit is een etiket
label2 Dit is ander etiket
Default.aspx.pl.resx
label1 Jakaś tam labelka
label2 Jakaś inna labelka
Default.aspx.vb (код позади)
В коде позади вы можете программно изменять содержимое вашей веб-страницы следующим образом:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Label2.Text = Me.GetLocalResourceObject("label2")
End Sub
По многим причинам яне рекомендовал бы этот метод (особенно его не следует использовать в обработчике загрузки страницы), однако иногда он необходим.
Default.aspx
Наконец-то мы на высоте (и очень полезны)веб-страница:
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Label ID="Label1" runat="server" Text="<%$ Resources:label1 %>"></asp:Label>
<br />
<asp:Label ID="Label2" runat="server" Text="Label"></asp:Label>
</div>
</form>
</body>
</html>
Как видите, вы можете получить доступ к ресурсам с помощью следующего выражения: <%$ Resources:label1 %>
.Это даст вам строку, связанную с ключом ресурса label1.Важно отметить: runat = "server" не является обязательным.
HTH.Возможно, вы захотите прочитать руководство по локализации Asp.Net .