Я должен реализовать интерфейс 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:
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(''); }