Mor*_*eng 5 javascript php internationalization
在开发AJAX程序时,我遇到了在JavaScript.code中创建字符串I18N的设计决策.某些字符串仅供JavaScript使用.例如.
$('#submit').click(function() {
$(#target).html('Please wait while submitting...').load(someURI);
}
Run Code Online (Sandbox Code Playgroud)
我想要I18N字符串'请等待提交......'.我不确定最好的方法是什么.目前,我只是在服务器中使用字符串I18N-ed并在页面中呈现为javascript变量(我正在使用PHP/wordpress).
<script>strSubmit = <?php _e('Please wait while submitting...'); ?></script>
Run Code Online (Sandbox Code Playgroud)
然后,在javascript中,我只使用varialble
$('#submit').click(function() {
$(#target).html(strSubmit).load(someURI);
}
Run Code Online (Sandbox Code Playgroud)
这有效,但看起来很混乱.有没有更好的方法来实现这一目标?
Fab*_*ger 10
您应该使用JSON将服务器端l10n字符串转换为JSON对象:
// In the <head> tag :
<script type="text/javascript" src="locales.php"></script>
Run Code Online (Sandbox Code Playgroud)
这在locales.php中:
var l10n = <?php echo json_encode($l10n); ?>;
Run Code Online (Sandbox Code Playgroud)
其中$ l10n是一个包含所有语言环境的数组,如下所示:
$l10n = array(
'Please wait while submitting...' => 'Veuillez patienter durant le traitement...',
'bah' => 'bih'
);
Run Code Online (Sandbox Code Playgroud)
您现在可以在JS中使用这样的字符串:
function $T(s){
return l10n[s] || s;
}
alert($T('Please wait while submitting...'));
Run Code Online (Sandbox Code Playgroud)
您还可以通过使用 javascript 的 php“预处理器”来自动执行此操作
<script src="script.php?file=blah.js">
Run Code Online (Sandbox Code Playgroud)
其中 script.php 类似于
function _repl($x) { return '"' . _e($x[1]) . '"'; }
$js = file_get_contents($_GET['file']);
$js = preg_replace_callback('~_e\("(.+?)"\)~', '_repl', $js);
echo $js;
Run Code Online (Sandbox Code Playgroud)
这将透明地_e(something)用实际字符串替换 JavaScript 代码