Многоязычная поддержка Classic ASP - PullRequest
3 голосов
/ 05 октября 2011

У меня есть клиент, который звонил мне сегодня утром, чтобы переоборудовать сайт для многоязычной поддержки. Сайт является классическим приложением ASP, и у клиента нет желания / бюджета переписывать как ASP.NET (или что-то еще ...).

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

Если бы это был не классический ASP, я бы использовал решение на основе GNU gettext (). Однако мне не удалось найти эквивалент для Classic ASP.

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

Я мог бы также создать свое собственное решение для плоских файлов, которое, вероятно, основано на Scripting.Dictionary , но я бы действительно предпочел не использовать здесь свое собственное.

Есть ли здесь альтернативные решения? Спасибо.

Ответы [ 2 ]

7 голосов
/ 06 октября 2011

Мы используем решение на основе XML, у нас есть файлы XML со следующей структурой:

<?xml version="1.0" encoding="Windows-1252"?>
<resource>
    <language LCID="1043" name="nederlands">
        <label id="pageheader"><![CDATA[Over deze applicatie]]></label>
        <label id="warning"><![CDATA[]]></label>
    </language>
    <language LCID="2067" name="vlaams">
        <label id="pageheader">Over deze applicatie</label>
        <label id="warning"><![CDATA[]]></label>
    </language>
    <language LCID="2057" name="english (uk)">
        <label id="pageheader"><![CDATA[About this software]]></label>
        <label id="warning"><![CDATA[]]></label>
        <label id=""><![CDATA[]]></label>
    </language>
</resource>

Мы решили, что каждый каталог должен иметь свой собственный файл XML, но если в нем не так много переводовНа вашем сайте вы можете иметь один большой XML в корне.Это повлияет на вашу производительность, хотя.Мы написали WSC для обработки переводов, чтобы мы могли просто открыть перевод WSC вверху каждой страницы ASP и использовать метод для перевода следующим образом:

В начале каждой страницы:

dim translate
set translate = GetObject("script:"&Server.MapPath("/~components/DLL/Translation.wsc"))
call translate.OpenWithLCID(session.LCID)

В HTML:

<%= translate.label("systemerror") %>

В конце страницы:

call translate.close()
set translate = nothing

Влияние на производительность минимально;просто убедитесь, что в вашей функции для получения перевода, чтобы выйти из цикла и вернуть значение, как только вы найдете соответствующий узел XML.Вначале мы допустили эту ошибку, в результате чего весь XML-файл обрабатывался, когда мы вызывали Translate.label ().

Мое решение, вероятно, означает, что вам придется узнать об использовании WSC в ASP, но один развы начнете использовать их, вы никогда не захотите возвращаться.Он полностью решает спагетти-код в ASp и обеспечивает разделение проблем и повторное использование кода.

HTH, Эрик Хоуп, это помогает

0 голосов
/ 05 октября 2011

возможно что-то вроде бабочки

http://babelfish.yahoo.com/free_trans_service

...