gpt4 book ai didi

php - yii语言本地化mysql表数据进入 View

转载 作者:太空宇宙 更新时间:2023-11-03 12:16:07 25 4
gpt4 key购买 nike

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

在我的 Controller 中,我将数据从表获取到数组

$tableCountry = Country::model()->findAll();

然后我正在制作这样的变量,它将包含 "name+" 语言变量,它在配置中是 'en'$name_lang ="name_".Yii::app()->语言;

所以现在我创建了包含 name_en 的变量 $name_lang

然后我使用 $name_lang 变量选择正确的销售

$list=CHtml::listData($modelCountry,'id',$name_lang);

仅使用 $name_lang name_en 数据将进入列表。所以稍后我可以将配置文件中的语言设置切换为“de”,只有 name_de 数据会 fgo 到列表。

所以这里一切都很好。但是如果我有包含 country_name_en、city_name_en、region_name_en 等的复杂表怎么办...

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

$country_name_lang ="country_name_".Yii::app()->语言;

$city_name_lang ="city_name_".Yii::app()->语言;

$region_name_lang ="region_name_".Yii::app()->语言;

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

最佳答案

选项 1:您可以在模型中定义另一个名为 country_name 的变量(没有任何后缀)。您可以在模型中执行此操作,而不必在数据库中也创建一个字段。这个变量不需要验证或任何东西。然后在您可以执行的模型查找方法之后

public function afterFind()
{
$this->country_name = $this->{"country_name_".Yii::app()->Language};
}

请随意在此处添加所有内容。

现在你应该可以在任何地方使用 $model->country_name 而无需关心语言是什么。

选项 2 是使用魔术方法。您可以在这里阅读更多内容:http://www.php.net/manual/en/language.oop5.magic.php为您的模型定义这样一个方法:

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_en 字段,它有一个后备。

关于php - yii语言本地化mysql表数据进入 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22078268/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com