Адаптация веб-страниц для поддержки иностранных языков - PullRequest
2 голосов
/ 08 ноября 2011

Я создал набор из 13 шаблонов HTML / CSS / JS для интеграции CMS на английском языке.

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

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

Может кто-нибудь указать мне некоторые надежные ресурсы для выполнения этого в соответствии со стандартами? Все шаблоны должны соответствовать требованиям WCAG 2.0 AA.

Ответы [ 2 ]

8 голосов
/ 25 апреля 2012

Шаг 1

Для начала предположим, что у нас есть следующий HTML:

<div>Hello there, how are you?</div>

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

<div class="title">Hello there, how are you?</div>
<ч />

Шаг 2

Когда все будет готово, мы всего в двух шагах. Прежде всего, мы собираемся создать файл XML, который включает наши переводы. В этом XML-файле мы можем хранить переводы для нескольких фраз, и мы можем легко добавить больше языков на более позднем этапе. Мы сохраним этот файл как languages.xml и сохраним его в той же папке, что и наш HTML-файл.

<?xml version="1.0" encoding="UTF-8"?>
<translations>
    <translation id="title">
        <english>Hello there, how are you?</english>
        <italian>Ciao, come stai?</italian>
    </translation>
</translations>

Вы будете хранить все фразы, которые хотите перевести, между тегами <translations></translations>. Вы будете хранить каждую фразу в теге <translation></translation>. Чтобы определить, какая фраза переводится, нам нужно добавить id=”title”. Имя должно совпадать с именем класса CSS, назначенного вами в HTML. Наконец, мы можем поместить переводы внутри и окружить их тегами, определяющими язык. Например, нам нужно поместить текст на итальянском языке между тегами <italian></italian>. Имейте в виду, что вы можете легко изменить названия этих тегов - например, вы можете использовать <eng></eng> и <ita></ita> вместо.

<ч />

Шаг 3

После этого вам просто нужно добавить jQuery , чтобы прочитать файл XML и заменить содержимое ваших DIV в зависимости от выбранного языка. Вот, пожалуйста:

<script src="path/to/jquery.min.js"></script>
<script type="text/javascript" language="javascript">

$(function() {
    var language = 'italian';
    $.ajax({
        url: 'language.xml',
        success: function(xml) {
            $(xml).find('translation').each(function(){
                var id = $(this).attr('id');
                var text = $(this).find(language).text();
                $("." + id).html(text);
            });
        }
    });
});
</script>

Вот и весь необходимый код - на этот раз еще раз посмотрите на него с комментариями:

// Include jQuery script
<script src="path/to/jquery.min.js"></script>

<script type="text/javascript" language="javascript">

//  $(function() { should be used
// each time you use jQuery

$(function() {

    // Here we set the language
    // we want to display:

    var language = 'italian';

    // In order to get the translations,
    // we must use Ajax to load the XML
    // file and replace the contents
    // of the DIVs that need translating

    $.ajax({

        // Here, we specify the file that
        // contains our translations

        url: 'language.xml',

        // The following code is run when
        // the file is successfully read

        success: function(xml) {

            // jQuery will find all <translation>
            // tags and loop through each of them

            $(xml).find('translation').each(function(){

                // We fetch the id we set in the XML
                // file and set a var 'id'

                var id = $(this).attr('id');

                // This is the most important step.
                // Based on the language we can set,
                // jQuery will search for a matching
                // tag and return the text inside it

                var text = $(this).find(language).text();

                // Last, but not least, we set the
                // contents of the DIV with a
                // class name matching the id in the
                // XML file to the text we just
                // fetched

                $("." + id).html(text);
            });
        }
    });
});

</script>

И это все! Обновите страницу, и итальянская версия должна загрузиться, заменив английскую по умолчанию. В приведенном выше примере мы установили язык вручную:

var language = 'italian';

Мы могли бы так же легко установить это через PHP:

var language = '<?php echo $sLanguage; ?>';

Или, прочитав его по URL - вы можете использовать этот плагин jQuery , чтобы сделать это.

<ч />

Бонусный трюк

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

div.title { font-size:30px; }

Что если бы мы хотели, чтобы у итальянца был шрифт меньшего размера? Легко! Нам нужно сделать небольшое изменение в нашем jQuery:

$(function() {
    var language = 'italian';
    $.ajax({
        url: 'language.xml',
        success: function(xml) {
            $(xml).find('translation').each(function(){
                var id = $(this).attr('id');
                var text = $(this).find(language).text();
                $("." + id).html(text);

                // Here's the new line we're adding.
                // We are assigned the DIV a new class
                // which includes the old class name
                // plus a "_language" - In this case,
                // loading Italian would assign the DIV
                // a "title_italian" class

                $("." + id).addClass(id + '_' + language);
            });
        }
    });
});

Теперь, когда мы добавили эту строку, мы можем просто добавить следующий CSS:

div.title { font-size:30px; }
div.title_italian { font-size:20px; }

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

1 голос
/ 03 октября 2013

Извините за поздний ответ, но лучше поздно, чем никогда ...: -)

Ответ Франсуа - хорошее решение для простого и быстрого решения.

Чтобы получить более полное и гибкое решение (например, с обработкой множественных форм ...), просмотрите: i18next . Они обеспечивают:

  • поддержка переменных
  • поддержка вложенности
  • поддержка контекста
  • поддержка нескольких множественных форм
  • поддержка gettext
  • поддерживается sprintf
  • определить язык
  • Изящный перевод поиска
  • Функция jquery
  • получить строку или дерево объектов
  • получить файлы ресурсов с сервера
  • кеширование ресурсов в браузере
  • отправлять недостающие ресурсы на сервер
  • настраиваемый
  • пользовательская постобработка
  • перевод интерфейса

Я сам использую решение i18next, хотя лично я предпочел бы решение на стороне сервера, чтобы избежать дополнительной нагрузки на стороне клиента ...: -)

N.B. Я не имею никакого отношения к i18next.com ...: -)

...