Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/298.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读取json_Php_Arrays_Json_Multilingual - Fatal编程技术网

用php读取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" :

我想保持我的网站多语言。因此,我有以下用于标签等的json文件示例:

fruits.json:

{
    "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()