Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.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 yii语言将mysql表数据本地化为视图_Php_Mysql_Yii_Localization - Fatal编程技术网

Php yii语言将mysql表数据本地化为视图

Php yii语言将mysql表数据本地化为视图,php,mysql,yii,localization,Php,Mysql,Yii,Localization,我已经打开了yii语言本地化,所以我在配置中使用了'language'=>'en', 编写类似于Yii::t('layouts\u main','Home')的内容,并将Home的翻译存储在php文件中。 但除此之外,我还有表格,里面有不同语言的数据。 例如,我有一个必须以不同语言存储在mysql表中的国家列表。 表结构非常简单:id、name\u en、name\u de、name\u es等等。。。 我是这样做的,所以如果语言发生变化,这两个字母必须控制从哪一个sell读取名称 在我的控制器

我已经打开了yii语言本地化,所以我在配置中使用了
'language'=>'en',
编写类似于
Yii::t('layouts\u main','Home')
的内容,并将
Home
的翻译存储在php文件中。 但除此之外,我还有表格,里面有不同语言的数据。 例如,我有一个必须以不同语言存储在mysql表中的国家列表。 表结构非常简单:
id、name\u en、name\u de、name\u es
等等。。。 我是这样做的,所以如果语言发生变化,这两个字母必须控制从哪一个sell读取名称

在我的控制器中,我从表到数组获取数据

$tableCountry = Country::model()->findAll();
然后我制作这样一个变量,它将包含
“name+”
语言变量,在config中是
'en'
$name_lang=“name_.”Yii::app()->语言

所以现在我制作了变量
$name\u lang
,它包含
name\u en

然后我使用
$name\u lang
变量选择正确的销售

$list=CHtml::listData($modelCountry,'id',$name_lang);
使用$name\u lang时,只有name\u en数据才会进入列表。所以,稍后我可以将配置文件中的语言设置切换到“de”,并且只有name_de data将fgo添加到列表中

所以这里一切都很好。 但如果我有一个复杂的表,它包含国家、城市、地区等等

要将这些数据放入列表中,我必须生成3个或更多变量

$country\u name\u lang=“country\u name”。Yii::app()->语言

$city\u name\u lang=“city\u name”。Yii::app()->语言

$region\u name\u lang=“region\u name”。Yii::app()->语言


所以我想知道还有其他更好的方法来做这些事情吗?

选项1:您可以在模型中定义另一个名为country\u name(无任何后缀)的变量。您可以在模型中执行此操作,而不必在数据库中创建字段。此变量不需要验证或任何操作。 然后在模型的find方法中,您可以执行以下操作

public function afterFind()
{
    $this->country_name = $this->{"country_name_".Yii::app()->Language};
}
请随意在这里添加所有内容

现在,无论在哪里,您都可以使用$model->country\u name,而不必关心语言是什么

选择2是使用神奇的方法。您可以在此处阅读更多内容: 为您的模型定义这样一种方法:

public function __call($name, $arguments)
{
    if(isset($this->{$name. "_".Yii::app()->Language})) 
        return $this->{$name. "_".Yii::app()->Language}
    elseif(isset($this->$name))
        return $this->{$name}
    else 
        throw new Exception(xxx, 'We couldn\'t find the variable');
}

现在,您应该能够使用$model->country_name(),并且可以再次获得正确语言的变量。您还可以使用$model->id(),您也可以获得正确的id,因为如果没有id字段,它会有一个回退。

选项1:您可以在模型中定义另一个名为country\u name(无任何后缀)的变量。您可以在模型中执行此操作,而不必在数据库中创建字段。此变量不需要验证或任何操作。 然后在模型的find方法中,您可以执行以下操作

public function afterFind()
{
    $this->country_name = $this->{"country_name_".Yii::app()->Language};
}
请随意在这里添加所有内容

现在,无论在哪里,您都可以使用$model->country\u name,而不必关心语言是什么

选择2是使用神奇的方法。您可以在此处阅读更多内容: 为您的模型定义这样一种方法:

public function __call($name, $arguments)
{
    if(isset($this->{$name. "_".Yii::app()->Language})) 
        return $this->{$name. "_".Yii::app()->Language}
    elseif(isset($this->$name))
        return $this->{$name}
    else 
        throw new Exception(xxx, 'We couldn\'t find the variable');
}

现在,您应该能够使用$model->country_name(),并且可以再次获得正确语言的变量。您还可以使用$model->id(),您也可以获得正确的id,因为如果没有id字段,它会有一个回退。

选项1:您可以在模型中定义另一个名为country\u name(无任何后缀)的变量。您可以在模型中执行此操作,而不必在数据库中创建字段。此变量不需要验证或任何操作。 然后在模型的find方法中,您可以执行以下操作

public function afterFind()
{
    $this->country_name = $this->{"country_name_".Yii::app()->Language};
}
请随意在这里添加所有内容

现在,无论在哪里,您都可以使用$model->country\u name,而不必关心语言是什么

选择2是使用神奇的方法。您可以在此处阅读更多内容: 为您的模型定义这样一种方法:

public function __call($name, $arguments)
{
    if(isset($this->{$name. "_".Yii::app()->Language})) 
        return $this->{$name. "_".Yii::app()->Language}
    elseif(isset($this->$name))
        return $this->{$name}
    else 
        throw new Exception(xxx, 'We couldn\'t find the variable');
}

现在,您应该能够使用$model->country_name(),并且可以再次获得正确语言的变量。您还可以使用$model->id(),您也可以获得正确的id,因为如果没有id字段,它会有一个回退。

选项1:您可以在模型中定义另一个名为country\u name(无任何后缀)的变量。您可以在模型中执行此操作,而不必在数据库中创建字段。此变量不需要验证或任何操作。 然后在模型的find方法中,您可以执行以下操作

public function afterFind()
{
    $this->country_name = $this->{"country_name_".Yii::app()->Language};
}
请随意在这里添加所有内容

现在,无论在哪里,您都可以使用$model->country\u name,而不必关心语言是什么

选择2是使用神奇的方法。您可以在此处阅读更多内容: 为您的模型定义这样一种方法:

public function __call($name, $arguments)
{
    if(isset($this->{$name. "_".Yii::app()->Language})) 
        return $this->{$name. "_".Yii::app()->Language}
    elseif(isset($this->$name))
        return $this->{$name}
    else 
        throw new Exception(xxx, 'We couldn\'t find the variable');
}

现在,您应该能够使用$model->country_name(),并且可以再次获得正确语言的变量。您还可以使用$model->id(),您也可以获得正确的id,因为如果没有id字段,它会有一个回退。

如果您的所有表列都有语言后缀,您可以将其放在模型的默认范围中。不幸的是,并非所有表列都有后缀。我的意思是有像“id”、“dateCreated”之类的列,它们没有后缀。顺便说一句,这个后缀也是我关于如何做的想法,我的意思是,如果有另一种方法,也许即使没有它也可以做?我只是不知道怎么做。这是我唯一想到的方法。这是可行的,但我认为会有更好的方法。如果所有表列都有语言后缀,您可以将其放在模型的默认范围中。不幸的是,并非所有表列都有后缀。我的意思是有像“id”、“dateCreated”之类的列,它们没有后缀。顺便说一句,这个后缀也是我关于如何做的想法,我的意思是,如果有另一种方法,也许即使没有它也可以做?我只是不知道怎么做。这是我唯一想到的方法。它正在工作,但我认为会有更好的方法来完成它。如果您的所有表列都有语言后缀,您可以将其放入