Как локализовать файлы .resx, как разрешить клиенту просматривать весь сайт на своем языке? - PullRequest
0 голосов
/ 23 января 2012

Большинство моих файлов .resx находятся в App_GlobalResources (явные), а главные страницы находятся в App_LocalResources в своих каталогах (неявных). На всех моих страницах должна быть верхняя строка, установленная на culture / uiculture - auto .

Теперь, когда мои языки настроены, Nuux объяснил мне, как создать раскрывающийся список и перевести эту конкретную страницу, и это здорово - намного больше, чем я имел.

Но что, если я хочу, чтобы конечный пользователь увидел массив флагов на домашней странице, чтобы они могли вручную выбрать просмотр всего сайта на этом языке ? Это намного сложнее, чем то, что я уже сделал, или это просто копирование и вставка? Собирается ли создавать каталог для каждого языка? Будем весьма благодарны за любые предложения или рекомендации!

1 Ответ

1 голос
/ 23 января 2012

Взгляните на этот код Разработка страницы ASP.NET с MasterPage и локализацией .Сделайте так, чтобы оно соответствовало вашим потребностям.Если вы не можете настроить его.Я постараюсь вам помочь.

Обновление : Хорошо, давайте попробуем это: Добавить новый класс в ваш проект: и перезаписать его содержимое этим

 Imports Microsoft.VisualBasic
 Imports System.Globalization
 Imports System.Threading

Public Class BasePage
    Inherits System.Web.UI.Page
    Protected Overrides Sub InitializeCulture()
    'MyBase.InitializeCulture()
    If Session("culture") Is Nothing Then
        Session("culture") = "en-US" 'Set default language
    End If
    Dim cult As String = Session("culture")
    Culture = cult
    UICulture = cult

    MyBase.InitializeCulture()
 End Sub
End Class

Теперь перейдите к кодовой части каждой имеющейся у вас страницы и измените предложение Inherits:

 Partial Class _Default
          Inherits BasePage

После этого вам необходимо реализовать языковой интерфейс на главной странице

  <asp:DropDownList ID="ddlCulture" DataTextField="Name" DataValueField="Name"
         runat="server" >
        <asp:ListItem Value="es-MX">Spanish</asp:ListItem>
        <asp:ListItem Value="en-US">English</asp:ListItem>
    </asp:DropDownList>
    <asp:Button ID="btnSelect" Text="Select" runat="server" OnClick="btnSelect_Click" />
    <asp:ContentPlaceHolder id="ContentPlaceHolder1" runat="server">        
    </asp:ContentPlaceHolder>

остается событие в файле codebehind главной страницы:

Protected Sub btnSelect_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnSelect.Click
    Session("culture") = ddlCulture.SelectedValue
    Response.Redirect(Request.Path)
End Sub

Теперь ваш веб-сайт готов только к настройке элемента управления, который я использовал для ваших предпочтений.

Осталось только то, что мы использовали Session для хранения пользователяоднако после выбора сеанса пользователю предоставляется язык по умолчанию, поэтому вы можете заменить сеанс постоянным файлом cookie.Прежде всего позвольте этой идее работать, я надеюсь, что переход на cookie не будет проблемой.Я просто хотел, чтобы вы помнили эту концепцию.

...