如何国际化javascript代码中使用的字符串?

时间:2009-10-12 09:22:41

标签: php javascript internationalization

在开发AJAX程序时,我遇到了在JavaScript.code中创建字符串I18N的设计决策。某些字符串仅供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中,我只使用varialble

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

这样可行,但看起来很乱。有没有更好的方法来实现这个目标?

4 个答案:

答案 0 :(得分:10)

您应该使用JSON将服务器端l10n字符串转换为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...'));

答案 1 :(得分:2)

你也可以使用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;

这将透明地用实际字符串

替换javascript代码中的_e(something)

答案 2 :(得分:0)

您可以将文本生成原始脚本本身。

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

答案 3 :(得分:0)

你可以创建一些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
   ); 
});