ASP.NET много веб-сайт языка?

Вы можете создать alias целей в third_party/sdl/BUILD:

alias(
    name = "sdl",
    actual = "//third_party/sdl/2_0_9:sdl",
)

Затем вы можете называть эту цель //third_party/sdl или //third_party/sdl:sdl.

6
задан Patrick Desjardins 27 October 2008 в 20:20
поделиться

6 ответов

Неявная локализация (в меню Visual Studio - Tools - Генерируют Локальные Ресурсы) почти так легка, как это может быть. Запишите свои страницы на Вашем языке по умолчанию, выберите пункт меню, и Ваши файлы ресурсов создаются и могут быть отправлены кому-то для перевода.

resx файл просто xml, поэтому если переводческая компания хочет Вас, может преобразовать его в (и из) электронные таблицы легко.

Используя базы данных вместо resx, поскольку Ваше запоминающее устройство не является трудным. У Rick Strahl есть хорошее объяснение и пример кода для управляемого базой данных поставщика локализации здесь - существует хорошее, созданное в редакторе локализации также с интерфейсом к переводам Google и Babelfish.

9
ответ дан 8 December 2019 в 13:03
поделиться

Мы храним ресурсы для многоязычных сайтов в базе данных. Мы создали несколько инструментов, чтобы помочь создать и получить доступ к ним. Существует пользовательский ExpressionBuilder, который позволяет нам использовать этот синтаксис:

 <asp:linkbutton runat='server' text='<%$ LanguageStrings:ClickMe%>' />

И пользовательская маркировка, которая содержит текст по умолчанию и добавляет строку к базе данных, если уже нет один.

 <r:languagelabel runat="server" name="AboutUs">About Us</r:languagelabel>

Таблица, содержащая строки, имеет один столбец за язык. Это делает очень легким создать сайт на английском языке (или независимо от того, что язык по умолчанию), затем вручите от таблицы (который заполняет себя) к переводчику. Также очень легко видеть, для каких языков у Вас должен быть материал, переведенный. С ресурсами, каждый раз, когда необходимо добавить новую строку, необходимо остановить то, что Вы делаете, и затем переходите к файлу ресурсов для каждого языка и добавляете ресурс.

Вот код для маркировки языка:

''' <summary>
''' Retrieves a language-specific string.
''' </summary>
Public Class LanguageLabel
    Inherits Label

    Private _Name As String
    Public Property Name() As String
        Get
            Return _Name
        End Get
        Set(ByVal value As String)
            _Name = value
        End Set
    End Property

    Private Sub Populate()
        If Len(Me.Name) > 0 Then
            Dim LanguageString As String = GetLanguageString(Me.Name, Me.Text)
            If Len(LanguageString) > 0 Then Me.Text = LanguageString
        End If
    End Sub

    Private Sub LanguageLabel_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.PreRender
        Populate()
    End Sub

    Protected Overrides Sub Render(ByVal writer As System.Web.UI.HtmlTextWriter)
        ' By default a label wraps the text in a <span>, which we don't want in some situations
        writer.Write(Me.Text)
    End Sub

End Class

и служебная функция:

    Public Function GetLanguageString(ByVal Name As String, Optional ByVal DefaultText As String = "") As String
        Dim DefaultLanguage As Language = Languages.GetById(1)
        Name = StripPunctuation(Name).Trim.Replace(" ", "") ' Remove punctuation, spaces from name
        Dim SelectSql As String = String.Format("Select {0},{1} from LanguageStrings where Name=@Name", Languages.CurrentLanguage.Code, DefaultLanguage.Code)
        Dim LanguageStringTable As DataTable = ExecuteDataset(cs, CommandType.Text, SelectSql, New SqlParameter("@Name", Name)).Tables(0)
        If LanguageStringTable IsNot Nothing AndAlso LanguageStringTable.Rows.Count > 0 Then
            Dim LanguageText As String = LanguageStringTable.Rows(0)(Languages.CurrentLanguage.Code).ToString
            Dim DefaultLanguageText As String = LanguageStringTable.Rows(0)(DefaultLanguage.Code).ToString
            If Len(LanguageText) > 0 Then
                ' We have a string in this language
                Return LanguageText
            Else
                ' Nothing in this language - return default language value
                Return DefaultLanguageText
            End If
        Else
            ' No record with this name - create a dummy one
            If DefaultText = "" Then DefaultText = Name
            Dim InsertSql As String = String.Format("Insert into LanguageStrings (Name, {0}) values (@Name, @Text)", DefaultLanguage.Code)
            ExecuteNonQuery(cs, CommandType.Text, InsertSql, New SqlParameter("@Name", Name), New SqlParameter("@Text", DefaultText))
            Return Name
        End If
    End Function
6
ответ дан 8 December 2019 в 13:03
поделиться

Файлы ресурсов являются способом пойти. Мы поставляем наш продукт на 12 языках. Мы дергаем за все ниточки в файлы ресурсов и поставляем их в переводческую компанию. Это время от времени - боль, но это - defacto способ сделать это.

Это также получает забаву, когда английские слова с 4 буквами переводятся во фразы с 17 буквами, и необходимо настроить UI.

2
ответ дан 8 December 2019 в 13:03
поделиться

Как поздно в процессе проектирования Вы? Если не слишком поздно, и если бюджет позволяет, рассматривают портирование на многоязычный CMS как CMS300.net Ektron (который имеет встроенные инструментальные средства для перевода). В противном случае затем у Вас есть огромная задача перед Вами.

1
ответ дан 8 December 2019 в 13:03
поделиться

Другое решение, которое я использую, состоит в том, чтобы создать папки языка, которые содержат aspx страницы, содержащие весь обязательный текст на том конкретном языке.

Единственная проблема здесь состоит в том, как можно ввести как можно меньше код в тех, которые копируют страницы. Я использую шаблон контроллера здесь, чтобы сделать это и затем источник данных объектов, чтобы получить данные и связать их со средствами управления на всех страницах.

Таким образом я достиг цели избавления от файлов ресурсов, и я могу сохранить код позади в одном месте, не копируя его (если необходимый).

Править: Я рекомендовал бы хорошую платформу CMS также.

0
ответ дан 8 December 2019 в 13:03
поделиться

Одно из веб-приложений, которые я разрабатываю, имеет это требование NLS также.

Я нашел, что существует по крайней мере 3 места, где Вы локализовали тексты:

  • пользовательский интерфейс
  • таблицы базы данных ("каталоги" или независимо от того, что Вы хотите назвать их),
  • код бэкенда (сервисы и т.д.)

Мое решение имеет одну таблицу для страниц, таблицы, и т.д. ("Контейнер"), одна таблица для каждого объекта в том контейнере (например, маркировки, кнопки идентификатором, идентификаторами записи), и одна таблица для переведенных объектов (плюс идентификатор языка).

Приложение для перевода помогает мне усовершенствовать переводы и экспортирует все переводы в XML.

Поставки продукта с переводами, но клиенты могут скорректировать переводы, изменения, вступающие в силу сразу.

0
ответ дан 8 December 2019 в 13:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: