2

我最大的问题之一是实现 javascript 的语言选项。到目前为止,每当检测到该语言的 cookie 时,我已经设法加载语言文件。尽管 PHP 端一切正常,但该站点的 javacript 部分仍然是英文的;警报和自定义函数等。我应该做的,就像我在 PHP 方面所做的那样:使用自定义字符串创建一个语言文件:

//EN file
$lang["TEST"] = " You have % order(s) waiting in your queue ";
//FR file
$lang["TEST"] = " Vous avez %s commande(s) dans votre file d'attente ";

这样做的好处是我可以sprintf($lang["TEST"], 4);在每一页上随意使用。然而,如果能够将这样的字符串存储在一个 js 文件中,该文件可以根据函数想要输出的内容以相同的方式格式化,那就太好了。

我怎样才能做到这一点?

4

3 回答 3

3

我们在我工作的地方做类似的事情。

构建您的 PHP 数组,然后将其作为 Javascript 对象导出到您的主文档中。

var resourceStrings = <?php json_encode($lang) ?>;

(我现在没有运行 PHP,所以您应该检查此页面以获取您可能需要的任何选项,以确保它以您需要的方式转义:)

http://php.net/manual/en/function.json-encode.php

本讨论将为您提供一个良好的字符串格式化例程,以便您可以填写所需的参数。

JavaScript 等价于 printf/string.format

于 2013-06-10T02:48:27.610 回答
1

我会研究像mustache这样的模板库

然后您可以在每种语言的 json 文件中构建您的语言模板

// en.json
{ 
    "test":  " You have {{num_orders}} order(s) waiting in your queue "
}

// fr.json
{ 
    "test":  " Vous avez {{num_orders}} commande(s) dans votre file d'attente "
}

然后,您可以根据所选语言从 php 设置文件。

<script type='text/javascript'>
     var allertTemplates = <?= file_get_contents($lang.".json"); ?>;
</script>

或通过 ajax 请求将其拉入

然后,当您想要模板文本时...

 var data = Mustache.render(lang.test, {num_orders:6});
于 2013-06-10T02:54:15.873 回答
0

您可以为每种语言创建一个本地化 js 文件

lang.en.js
lang.fr.js

然后使用条件导入这些文件

<script src="lang.<?php echo $lang;?>.js"></script>

或者自己用js写一个js加载器

PS:在js JavaScript中实现.format函数相当于printf/string.format

于 2013-06-10T02:55:53.020 回答