Как интернационализировать строку, используемую в коде JavaScript? - PullRequest
5 голосов
/ 12 октября 2009

При разработке программы AJAX я встретил проектное решение сделать строку I18N в JavaScript.code. Некоторая строка используется только JavaScript. Например.

$('#submit').click(function() {
    $(#target).html('Please wait while submitting...').load(someURI);
}

Я бы хотел I18N строку «Пожалуйста, подождите при отправке ...». Я не уверен, что это лучший способ сделать это. В настоящее время у меня просто есть строка I18N-ed на сервере и она преобразована в переменную javascript на странице (я использую PHP / wordpress).

<script>strSubmit = <?php  _e('Please wait while submitting...'); ?></script>

Тогда в javascript я просто использую переменную

$('#submit').click(function() {
    $(#target).html(strSubmit).load(someURI);
}

Это работает, но выглядит грязно. Есть ли лучший способ добиться этого?

Ответы [ 4 ]

10 голосов
/ 12 октября 2009

Для преобразования строк l10n на стороне сервера в объект JSON следует использовать JSON:

// In the <head> tag :
<script type="text/javascript" src="locales.php"></script> 

и это в locales.php:

var l10n = <?php echo json_encode($l10n); ?>;

где $ l10n - массив, содержащий все локали, например:

$l10n = array(
  'Please wait while submitting...' => 'Veuillez patienter durant le traitement...',
  'bah' => 'bih'
);

Теперь вы можете использовать эти строки в JS:

function $T(s){
  return l10n[s] || s;
}

alert($T('Please wait while submitting...'));
2 голосов
/ 12 октября 2009

Вы также можете автоматизировать это, используя php "препроцессор" для javascript

<script src="script.php?file=blah.js">

где script.php - что-то вроде

    function _repl($x) { return '"' . _e($x[1]) . '"'; }

    $js = file_get_contents($_GET['file']);
    $js = preg_replace_callback('~_e\("(.+?)"\)~', '_repl', $js);
    echo $js;

это прозрачно заменит _e(something) в коде javascript фактическими строками

0 голосов
/ 12 октября 2009

вы можете создать своего рода REST-приложение, в котором вы будете заполнять элементы строк javascript при загрузке документа из службы:

$(function(){
   var handleResponse = function.....; // fill your string elements from response
   var lang = "fr"; // language of localized document

   $.ajax(
       type: "GET",
       url: "/i18n.php?lang=" + lang + "&names=someName+someName1+someName2",
       success: handleResponse
   ); 
});
0 голосов
/ 12 октября 2009

Вы можете сгенерировать текст в самом оригинальном скрипте.

$('#submit').click(function() {
    $(#target).html('<?php  _e('Please wait while submitting...'); ?>').load(someURI);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...