用php读取json
我想保持我的网站多语言。因此,我有以下用于标签等的json文件示例: fruits.json:用php读取json,php,arrays,json,multilingual,Php,Arrays,Json,Multilingual,我想保持我的网站多语言。因此,我有以下用于标签等的json文件示例: fruits.json: { "apple" : { "en" : "apple", "de" : "apfel" }, "banana" : { "en" : "banana", "de" : "banane" }, "cherry" : { "en" : "cherry", "de" :
{
"apple" : {
"en" : "apple",
"de" : "apfel"
},
"banana" : {
"en" : "banana",
"de" : "banane"
},
"cherry" : {
"en" : "cherry",
"de" : "kirsche"
}
}
$lang = json_decode(file_get_contents("fruits.json"), true);
页面控制器从中创建一个数组:
PHP:
{
"apple" : {
"en" : "apple",
"de" : "apfel"
},
"banana" : {
"en" : "banana",
"de" : "banane"
},
"cherry" : {
"en" : "cherry",
"de" : "kirsche"
}
}
$lang = json_decode(file_get_contents("fruits.json"), true);
目前,我使用以下代码在页面视图中访问所需的标签:
$lang['apple']['de'];
有没有更简单的方法来达到最终的结果?最好从页面视图中删除语言索引,这样最后的代码看起来像“$lang['apple']”
但总的问题是:这是一个多语言网站的好方法吗?或者我应该以不同的方式构造文件 在我看来,你的方法有一半是好的。将i18n存储在类似于json的文件中是可以的。但我认为最好为每种语言提供单独的文件。因此,您将有一个单独的文件用于英语和德语json翻译。因此,您必须:
{
"apple" : "apfel",
"banana" : "banane",
"cherry" : "kirsche"
}
德国队。如果您有多种语言,维护这样的文件会更容易,因为您不需要编辑一个巨大的文件。而是添加一个文件
您可以有一个i18n目录,用于存储i18n文件:
i18n/
en.json
de.json
您将创建一个类,该类读取扩展名为.json的所有文件,并提供一个带有2个参数的i18n函数:
fun translate(lang, key)
{
// access your i18n data here
}
此功能将直接从视图层(MVC)访问
另一种方法是将i18n存储在数据库中,如果您希望它可以轻松编辑的话。这取决于您的业务需求。我认为您的方法有一半是好的。将i18n存储在类似于json的文件中是可以的。但我认为最好为每种语言提供单独的文件。因此,您将有一个单独的文件用于英语和德语json翻译。因此,您必须:
{
"apple" : "apfel",
"banana" : "banane",
"cherry" : "kirsche"
}
{
"de" : {
"apple" : "apfel",
"banana" : "banane",
"cherry" : kirsche
}
}
德国队。如果您有多种语言,维护这样的文件会更容易,因为您不需要编辑一个巨大的文件。而是添加一个文件
您可以有一个i18n目录,用于存储i18n文件:
i18n/
en.json
de.json
您将创建一个类,该类读取扩展名为.json的所有文件,并提供一个带有2个参数的i18n函数:
fun translate(lang, key)
{
// access your i18n data here
}
此功能将直接从视图层(MVC)访问
另一种方法是将i18n存储在数据库中,如果您希望它可以轻松编辑的话。这取决于您的业务需求。我认为您的方法有一半是好的。将i18n存储在类似于json的文件中是可以的。但我认为最好为每种语言提供单独的文件。因此,您将有一个单独的文件用于英语和德语json翻译。因此,您必须:
{
"apple" : "apfel",
"banana" : "banane",
"cherry" : "kirsche"
}
{
"de" : {
"apple" : "apfel",
"banana" : "banane",
"cherry" : kirsche
}
}
德国队。如果您有多种语言,维护这样的文件会更容易,因为您不需要编辑一个巨大的文件。而是添加一个文件
您可以有一个i18n目录,用于存储i18n文件:
i18n/
en.json
de.json
您将创建一个类,该类读取扩展名为.json的所有文件,并提供一个带有2个参数的i18n函数:
fun translate(lang, key)
{
// access your i18n data here
}
此功能将直接从视图层(MVC)访问
另一种方法是将i18n存储在数据库中,如果您希望它可以轻松编辑的话。这取决于您的业务需求。我认为您的方法有一半是好的。将i18n存储在类似于json的文件中是可以的。但我认为最好为每种语言提供单独的文件。因此,您将有一个单独的文件用于英语和德语json翻译。因此,您必须:
{
"apple" : "apfel",
"banana" : "banane",
"cherry" : "kirsche"
}
{
"de" : {
"apple" : "apfel",
"banana" : "banane",
"cherry" : kirsche
}
}
德国队。如果您有多种语言,维护这样的文件会更容易,因为您不需要编辑一个巨大的文件。而是添加一个文件
您可以有一个i18n目录,用于存储i18n文件:
i18n/
en.json
de.json
您将创建一个类,该类读取扩展名为.json的所有文件,并提供一个带有2个参数的i18n函数:
fun translate(lang, key)
{
// access your i18n data here
}
此功能将直接从视图层(MVC)访问
另一种方法是将i18n存储在数据库中,如果您希望它可以轻松编辑的话。这取决于您的业务需求
{
"de" : {
"apple" : "apfel",
"banana" : "banane",
"cherry" : kirsche
}
}
我认为使用语言作为顶级维度可以解决这个问题。
然后,一旦您解码了json文件,您只需要获得该语言的数组,它将包含您需要的所有内容
$lang_all = json_decode(file_get_contents("fruits.json"), true);
$lang=$lang_all['de'];
然后可以使用$lang['apple']访问
我认为使用语言作为顶级维度可以解决这个问题。
然后,一旦您解码了json文件,您只需要获得该语言的数组,它将包含您需要的所有内容
$lang_all = json_decode(file_get_contents("fruits.json"), true);
$lang=$lang_all['de'];
然后可以使用$lang['apple']访问
我认为使用语言作为顶级维度可以解决这个问题。
然后,一旦您解码了json文件,您只需要获得该语言的数组,它将包含您需要的所有内容
$lang_all = json_decode(file_get_contents("fruits.json"), true);
$lang=$lang_all['de'];
然后可以使用$lang['apple']访问
我认为使用语言作为顶级维度可以解决这个问题。
然后,一旦您解码了json文件,您只需要获得该语言的数组,它将包含您需要的所有内容
$lang_all = json_decode(file_get_contents("fruits.json"), true);
$lang=$lang_all['de'];
然后您可以使用$lang['apple']进行访问。将JSON读入
$lang
后,您可以创建一个包含当前语言的新数组:
$words = array_map(function($word) use ($curlang) { return $word[$curlang]; }, $lang);
然后您可以访问
$words['apple']
将JSON读入$lang
后,您可以创建一个包含当前语言的新数组:
$words = array_map(function($word) use ($curlang) { return $word[$curlang]; }, $lang);
然后您可以访问
$words['apple']
将JSON读入$lang
后,您可以创建一个包含当前语言的新数组:
$words = array_map(function($word) use ($curlang) { return $word[$curlang]; }, $lang);
然后您可以访问
$words['apple']
将JSON读入$lang
后,您可以创建一个包含当前语言的新数组:
$words = array_map(function($word) use ($curlang) { return $word[$curlang]; }, $lang);
然后您可以访问
$words['apple']
JSON实际上不是一种人类可读的格式
如前所述,我还建议对每种语言使用单独的文件,此外,我建议您使用lang的单独文件夹,并按主题/插件/库/功能使用文件(但您的应用程序是插件大小的)
许多框架可以帮助您使用良好的体系结构和一些工具(已经编码)
您还可以看到PO/MO文件、i18n和gettext()