Статьи

Локализация строк JavaScript в PHP MVC Framework

Сегодня я собираюсь показать вам, как эффективно локализовать строки Javascript в вашей PHP Framework. Вы можете скачать рабочую реализацию этого руководства здесь .

На самом деле существует несколько способов локализации строк Javascript в среде PHP. Технически говоря, можно продублировать ваш файл Javascript, назвать его после целевого языка и загрузить нужную версию каждый раз, когда пользователь выбирает новый язык на сайте. Но это, безусловно, представляет собой метод, который вряд ли можно назвать хорошей практикой, даже если он будет «работать».

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

Существует также возможность непосредственного вызова ваших литеральных строк с помощью переменных PHP, встроенных в ваш код JavaScript, но в зависимости от вашей архитектуры фреймворка это не всегда доступно.

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

Помните, вы можете скачать рабочий пример прямо здесь .

Итак, начнем…

В примере, прилагаемом к этому уроку, я настроил кнопку, которая запускает функцию Javascript с именем trigger_msg()

 echo '<input type="button" value="'.$t_launch_message.'" class="trigger" onclick="return trigger_msg();" />';

Функция trigger_msg()

 function trigger_msg(){
    return alert(translate(LOCALIZATION.here_is_how_it_works));
    }

— Мы вызываем функцию translate()
— Мы используем синтаксический перевод (name_of_language_array.name_of_element, extra_parameter1, extra_paramater2 и т. Д.), Таким образом, используя запятые только для разделения дополнительных параметров.
— Параметры могут быть литералами, если они заключены в кавычки

Прежде чем мы более подробно рассмотрим функцию translate()

 var LOCALIZATION = {
    here_is_how_it_works :  'Voici comment cela fonctionne.\nAppuyez sur le bouton suivant afin de voir comment ça se passe avec des paramètres.',
    who_does_not_know_are_and_that_the_sky_is :  'Qui ne sait pas que %s x %s font %s,\net que le ciel est %s?',
    blue : 'bleu'
  };

В наших определениях элементов массива вы можете видеть, что используется «% s», то есть выражение, которое мы используем для хранения наших дополнительных параметров. Мы вернемся к этому чуть позже.
Обратите внимание, что вы можете вставить теги в стиле HTML, например. <b> и т. д. в определениях элементов массива, если вы используете настраиваемое диалоговое окно, и оно будет работать хорошо.

Теперь пришло время сосредоточиться на нашей функции translate()

 (function () {
    
    if (!window.translate){
               
      window.translate = function(){
        var html = [ ]; 
        var arguments = arguments;
        var string = arguments[0];

        var objIndex = 0;
        var reg = /%s/;
        var parts = [ ];

        for ( var m = reg.exec(string); m; m = reg.exec(string) ) {  
          // m[0][0] gives undefined in IE
          parts.push(string.substr(0, m[0][0] === "%" ? m.index : m.index));
          parts.push("%s");
          string = string.substr( m.index+m[0].length );
        }
        parts.push(string);

        for (var i = 0; i &lt; parts.length; ++i){
            var part = parts[i];
            if (part &amp;&amp; part == "%s"){
              var object = arguments[++objIndex];
              if (object == undefined) {
                html.push("%s");
              }else{
                html.push(object);
              };
            }else{
              html.push(part);
            }            
        }

        return html.join('');
      }
    };
  })();

Эта функция ниже составляет ядро ​​нашей схемы локализации JavaScript.

По сути, в переменной с именем stringtrigger_msg()regparts[] Затем мы собираем эти части в массив с именем html[]

Переменная с именем reg

Функция trigger_msg_with_params() Действительно, в системе бывают ситуации, когда литеральная строка, которая должна быть переведена, может содержать значения, которые будут зависеть от пользовательского ввода, и эта функция пригодится, если вам не нужно будет многократно использовать наш код:

 function trigger_msg_with_params(){
    var param1 = 5382;
    var param2 = 9408;
    var param3 = param1 * param2;
    var param4 = translate(LOCALIZATION.blue);
    
    return alert(translate(LOCALIZATION.who_does_not_know_are_and_that_the_sky_is, param1, param2, param3, param4));
    }

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

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

Вы можете оставить свои комментарии или вопросы. Оставайтесь с нами для получения дополнительных уроков.