мне нужно добавить Языки поддержки существующего классического сайт осиныКлассический ASP - Сайт локализация
«Лучшее» Решение, которое я нашел, чтобы инкапсулировать каждый текст функции, создать таблицу базы данных, где хранить, для каждого страницы, переводы и использовать объект словаря для получения правильного значения.
пример:
<div>Welcome to xy website</div>
<button class="btn green">Login</button>
становится
<div><%=TL("Welcome to xy website")%></div>
<button class="btn" ><%=TL("Login")%></button>
тогда функция TL должна быть, как это
Function TL(strInput)
Dim strTargetLanguage, strPageURL,objDict,strTmp1,strTmp2
if strInput<>"" then
' First check if customer has set language.. else uses browser language
if request.cookies("culture")="" then
strTargetLanguage=lcase(left(request.servervariables("HTTP_ACCEPT_LANGUAGE"),2))
else
strTargetLanguage=lcase(left(request.cookies("culture"),2))
end if
' if User's Language is not supported....
if instr(strAcceptedLanguages,strTargetLanguage)= 0 then
strTargetlanguage="en"
end if
strPageURL=Request.ServerVariables("URL")
Set objDict=Server.CreateObject("Scripting.Dictionary")
objDict.Add "strPageUrl",strPageUrl
'Stored Procedure to load translation in the required language and for the target Page
cmd.CommandText="spDictionaryRead"
cmd.CommandType=4
cmd.Parameters("@LanguageID")=strTargetLanguage
cmd.Parameters("@PageUrl")=strPageURL
set rst=cmd.Execute()
if not rst.eof then
while not rst.eof
objDict.Add rst("txt"),rst(strTargetLanguage)
rst.movenext()
wend
end if
rst.close
if objDict.Exists(strInput)=true then
TL=objDict.Item(strInput)
else
' Custom Function to translate using google
TL=Translate(strInput,"en",strTargetLanguage)
TL=Replace(TL,"'","''")
strInput=replace(strInput,"'","''")
'Add new Sentence to Dictionary
cmd.CommandText="spDictionaryWrite"
cmd.CommandType=4
cmd.Parameters("@PageUrl")=strPageURL
cmd.Parameters("@TXT")=strInput
cmd.Parameters("@TargetLanguage")= strTargetLanguage
cmd.Parameters("@TargetText")=TL
cmd.Execute()
set objDict=nothing
end if
else
TL=""
end if
End Function
Функция не готова, так как в настоящее время каждый раз, когда он назвал ее доступ DB и загрузить все переводы страницы и создать словарь: в этой ситуации было бы лучше избегать Словаря и напрямую Запросить БД для требуемого предложения.
Мне нужно «ТОЛЬКО», чтобы найти мудрый способ хранения словаря «где-то», чтобы избежать его перестройки.
Но что выбрать? Приложение, Сессия, objVariable в страницу, ???
прибегая к помощи немного я понимаю, что применение не является мудрым решением по многим причинам,
Session: Я стараюсь держать сессию очень тонкий: Я никогда бы не сохранить объект с 30-50-Кис, если я могу избежать .... если я не удалю его в конце самой страницы (если это стоит)?
Кто-то предлагает загрузить переводы в приложение как «простой массив», а затем построить словарь каждый раз, когда это требуется, но при загрузке предложений в словарь я могу проверить, является ли текущее предложение целевым предложением и извлекает перевод без использования словаря .. поэтому ни это не является мудрым решением
Я прочитал также о
Уточняющий компонент от Microsoft
, но не удалось найти какие-либо документы
Возможно, вы можете использовать некоторые компоненты .NET, такие как HashTable?
Так как я полагаю, что переводы являются общей проблемой, я ожидаю, что должны быть лучшим решением, и что мой подход неправилен:
Может Pls предложить лучший подход или некоторые намеки?
В прошлом я использовал аналогичный подход с одним отличием, функция удваивается как режим администратора, который позволяет функции удваивать в качестве интерфейса администратора, который принимает ввод из текстового поля. Этот подход позволяет обновлять базу данных, но вы также можете создать локальный файл кеша, я использовал файлы XML. Это очень гибко, потому что если вы не загружаете страницу в режиме администратора, функция просто извлекает данные из файлов кеша. – Lankymart
Привет, Интересно, что решение TextBox: для этого сайта я использовал другой подход, поскольку частые пользователи: поскольку машинный перевод плох, я добавил модальный фрейм, где каждый пользователь, если не принимает автоматический перевод, может настраивать каждое предложение и иметь собственный словарь , Но как использовать XML-файл в качестве файла кеша? может дать мне пару советов? Спасибо! – Joe
Если я получу время сегодня, я попытаюсь оставить более полный ответ, но подход действительно работает, и компании используют это в дикой природе уже более 15 лет. – Lankymart