Динамически создавать javascript в php или делать ajax для многоязыкового интерфейса?

Я должен реализовать интерфейс webapp на нескольких разных иностранных языках. Я нахожу, что функции jquery, которые я пишу, зависят от того, какой язык выполняется. Например:

<?php require 'nl.php'; /* if(isset($_SESSION['lang'])){ $lang = $_SESSION['lang']; if(!empty($lang)){ if($lang == 'en'){ require 'en.php'; }else if($lang = 'nl'){ require 'nl.php'; } } } */ ?> <html> <head> </head> <body> <textarea id = "notes"><?php echo $string_lib['ENTER_NOTES'];?></textarea> <script type="text/javascript" src= "js/jquery.js"></script> <script type="text/javascript" src= "js/clicknotes.js"></script> </body> </html> 

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

nl.php:

 <?php $string_lib = array( 'ENTER_NOTES' => 'Vul hier uw notities.', 'ENTER_PASSWORD' => 'Vul hier uw wachtwoord in.', ); 

и en.php

 <?php $string_lib = array( 'ENTER_NOTES' => 'Enter your notes here.', 'ENTER_PASSWORD' => 'Enter your password here.', ); ?> 

Итак, теперь возникают проблемы, когда я начинаю делать определенные вещи в javascript, вот так, clicknotes.js:

 $(window).load(function(){ $(document).ready(function(){ $('#notes').focusin(function(){ if($(this).text() == 'Enter your notes here.'){ $(this).text(''); } //alert($(this).text()); }); }); }); 

Поэтому я либо должен динамически генерировать javascript с php, используя тот же метод, который я использовал для html, например:

 <?php header('Content-type: text/javascript'); ?> $(window).load(function(){ $(document).ready(function(){ $('#notes').focusin(function(){ if($(this).text() == '<?php echo $string_lib['ENTER_NOTES'];?>'){ $(this).text(''); } //alert($(this).text()); }); }); }); 

или мне нужно отправить эквивалентные массивы в javascript и вызвать эти переменные в javascript, то есть if ($ (this)). text () == string_lib ['nl'] ['ENTER_NOTES']). Или я думал, что могу выполнить запрос ajax, чтобы получить нужные мне массивы.

Итак, какой из этих методов, по вашему мнению, лучше всего подходит для удобства и простоты модификации?

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

В файле En.php

 return array( "id1"=>"translation 1", "id2"=>"translation 2" ); 

HTML

 ... $trans = require("en.php"); ... <input type="hidden" id="trans" data-trans='<?php echo json_encode($trans); ?>' /> ... 

JS

 $(document).ready(function() { var id1 = $("#trans").data("trans")["id1"]; // contains the 'id1' string }); 

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

Вы также можете загрузить дополнительный JavaScript (через <script> или RequireJS) или JSON (через AJAX) файл, например text_en.js или text_fr.json , который определит хэш переводов; то вы можете просто использовать TEXT.enter_your_notes_here или аналогичные в своем JS-коде. Это похоже на ваше решение PHP, но не связано с динамической генерацией JS.

PRO:

  • Ваш JS-код остается чистым
  • Все тексты могут быть легко переведены, поскольку все они находятся в одном месте
  • Тесно параллель с методом gettext используемым на других языках

ПРОТИВ:

  • дополнительный запрос для файла перевода

Как насчет использования параметра данных в html-элементах

 <textarea id = "notes" data-placeholder="<?php echo $string_lib['ENTER_NOTES'];?>"><?php echo $string_lib['ENTER_NOTES'];?></textarea> 

затем измените js:

  if($(this).text() == $(this).data('placeholder')){ $(this).text(''); }