Каковы различные подходы к многоязычным приложениям JavaScript - PullRequest
8 голосов
/ 14 апреля 2011

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

Thnx!

Ответы [ 4 ]

23 голосов
/ 14 апреля 2011

Вы можете просто создать большое дерево объектов:

var languages = {
   english:{
      Save:"Save"
   },
   german:{
      Save:"Speichern"
   }
};

В вашем приложении:

var l = languages.german;
alert(l.Save); //Alerts "Speicher"

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

4 голосов
/ 18 апреля 2011

Что бы вы ни делали, самое важное - отделить ваш код от текстов .

Если код и тексты смешаны, обслуживание будет невозможно, и выскоро откажитесь от него.

Переводимые тексты должны быть легко отсканированы, чтобы переводчики могли переводить только тексты.Затем вы сможете удобно вставлять переводы.

Мы используем файл JS, который включает в себя карту строк.У нас есть простой скрипт Python, который извлекает из него переводимые строки.Тот же сценарий также создает выходной файл JS, который содержит те же метки с переведенными строками.

В результате:

  • Когда приложение развивается, легко добавлять новые строки.
  • Сценарий автоматически находит новые строки, и мы можем их перевести.
  • Завершенные переводы возвращаются в файл JS без ручной работы.
1 голос
/ 07 августа 2015

Вот функция, которую я собрал для обработки языковых переводов на основе принятого ответа на этот вопрос:

/**
 Core script to handle language translations
 **/
var Language = function() {

    var activeLanguage = 'en';

    var languagePack = {

        'en': {
            'hello-world': 'Hello World',
            'show-variants': 'Show Variants',
            'hide-variants': 'Hide Variants'
        },
        'fr': {
            'hello-world': 'Bonjour World',
            'show-variants': 'représentent des variantes',
            'hide-variants': 'masquer variantes'
        }

    }
    var translate = function(key, language)
    {
        if (typeof languagePack[language] == 'undefined')
        {
            return;
        }else {
            return languagePack[language][key];
        }
    };

    return {
        init: function(language)
        {
            activeLanguage = language;
        },
        getString: function(key, defaultText)
        {
            var text = translate(key, activeLanguage);
            if (typeof(text) === 'undefined' || text.length == 0 ||  text == null)
            {
                text = defaultText;
            }
            return text;
        }


    }


}();

Затем инициализировать его в общем коде страницы, где ${language.language} - это код jsp для установки языка из конфигурации на стороне сервера.

<script type="text/javascript">
jQuery(document).ready(function() {
        Language.init('${language.language}');

    });
</script>

Тогда всякий раз, когда вам нужно сообщение, используйте

Language.getString('hello-world', 'Hi World');

1 голос
/ 14 апреля 2011

Мне нравится использовать "массив словаря языка", который вы можете сделать с помощью JSON или простого массива.

Это легко реализовать:

var lang = 0 //0 = english, 1=french

var phrases=[]
phrases['cancel'] = "cancel,annuler".split(",")

alert(phrases['cancel'][lang])
...