Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/427.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何国际化javascript代码中使用的字符串?_Php_Javascript_Internationalization - Fatal编程技术网

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

Php 如何国际化javascript代码中使用的字符串?,php,javascript,internationalization,Php,Javascript,Internationalization,在开发AJAX程序时,我遇到了在JavaScript.code中生成字符串I18N的设计决策。某些字符串仅由JavaScript使用。比如说 $('#submit').click(function() { $(#target).html('Please wait while submitting...').load(someURI); } 我想输入字符串“提交时请稍候…”。我不知道最好的方法是什么。目前,我只是在服务器中编辑了字符串I18N,并在页面中呈现为javascript变量(我

在开发AJAX程序时,我遇到了在JavaScript.code中生成字符串I18N的设计决策。某些字符串仅由JavaScript使用。比如说

$('#submit').click(function() {
    $(#target).html('Please wait while submitting...').load(someURI);
}
我想输入字符串“提交时请稍候…”。我不知道最好的方法是什么。目前,我只是在服务器中编辑了字符串I18N,并在页面中呈现为javascript变量(我使用的是PHP/wordpress)


这是可行的,但看起来很混乱。有没有更好的方法来实现这一点?

您可以将文本生成到原始脚本中

$('#submit').click(function() {
    $(#target).html('<?php  _e('Please wait while submitting...'); ?>').load(someURI);
}
$(“#提交”)。单击(函数(){
$(#target).html(“”).load(someURI);
}

您还可以通过对javascript使用php“预处理器”来实现自动化

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

这将透明地将javascript代码中的
\e(something)
替换为实际字符串

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

应使用JSON将服务器端l10n字符串转换为JSON对象:

// In the <head> tag :
<script type="text/javascript" src="locales.php"></script> 
现在可以在JS中使用如下字符串:

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

alert($T('Please wait while submitting...'));

是的。这与我们的做法非常相似:)在这种方法中,所有的I18N字符串都会被下载,即使只使用了很少的字符串。是的,但是文件是由浏览器缓存的,所以只下载一次。Fabien,非常感谢这个简单而强大的解决方案!:)stereofrog的解决方案将避免使用wordpress的i18n解决方案和该解决方案。WP还有
WP\u本地化\u脚本()
这基本上实现了上述功能,但如果没有全文字符串,可读性较差。您是否建议为每个需要本地化的字符串生成HTTP请求?它看起来更像是在php中生成脚本本身,然后生成语言标记。您可以在此处阅读更多有关Wordpress计划在中支持I18n的方式的信息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
   ); 
});
// In the <head> tag :
<script type="text/javascript" src="locales.php"></script> 
var l10n = <?php echo json_encode($l10n); ?>;
$l10n = array(
  'Please wait while submitting...' => 'Veuillez patienter durant le traitement...',
  'bah' => 'bih'
);
function $T(s){
  return l10n[s] || s;
}

alert($T('Please wait while submitting...'));