将 JSON 从 PHP 传递到 JavaScript

4

我希望将我的Web应用本地化。由于仅通过JavaScript进行本地化不被推荐,因此我认为使用PHP可能是一种替代方法。

因此,使用PHP,我读取了一个名为messages.json的文件,该文件存储了所有本地化数据。

$json = file_get_contents("_locales/en/messages.json");

在我的Web应用程序头部,我使用PHP根据用户的浏览器语言生成一些JavaScript代码。
echo "var localeObj = " . $json . ";";

那么这只是一个包含来自messages.json文件的所有数据的变量,它看起来像这样:

{
    "extTitle": {
        "message": "Test1"
    },
    "extName":{
        "message": "Test2"
    }
}

现在我希望能够像这样访问json中的每个项目:
var title = getItem("extTitle");

它返回Test1。有任何想法如何做到这一点吗?

我不太熟悉json,但如果我只是警报localeObj,它只会给我一个[object Object]。

4个回答

4
var getItem = function(item) {
   return localObj[item].message;
};

你可以始终封装你的i18n字符串...
(function() {

   var localObj = { ... };

   window.getItem = function(item) {
       return localObj[item].message;
   };

})();

这样,就不会有其他变量可能破坏你的localObj

我遇到了一个错误:在语句 window.getItem(item) { } 前缺少分号。 - DarkLeafyGreen
应该将localObj定义为字符串吗?因为它从PHP方法中作为字符串传递。 - DarkLeafyGreen
@ArtWorkAD 不应该是这样的。如果是,你需要将其解析为JSON。 - alex
@ArtWorkAD 你是直接复制代码吗?JavaScript有ASI,所以不应该出现这种情况(除非你的IDE报错)。你是在PHP中运行这段代码吗? - alex

1
你可以使用数组语法[]或点语法.来访问JavaScript对象属性。
示例:
localeObj["extTitle"];
localeObj.extTitle;

我建议阅读类似 this 的东西以更熟悉 JSON。

1

你可以像这样初始化JavaScript变量。

var json = eval(<? echo $json ?>);   
alert(json.extTitle.message+ '  '+json.extName.message);

非常感谢您的最后一次提交,因为它使我能够在Google地图上放置我的标记。非常高效。 - Fred FLECHE
你有没有任何提示如何使用Coffeescript完成相同的任务? - user299791

0

messages.php 文件内:

<?php
header('Content-type:application/javascript');
$messages = array(
 "yes"=>"hai",
 "no"=>"iie"
);
$messages = json_encode($messages);
echo "window.messages = $messages";
?>

index.html 文件内:

<html>
 <body>
 <script type="text/javascript" src="messages.php"></script>
 <script type="text/javascript">
  console.log(window.messages)
 </script>
 </body>
</html>

只要您告诉浏览器将php文件解释为javascript文件,您就可以输出任何想要的内容。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接