【发布时间】:2015-07-09 12:41:23
【问题描述】:
我必须开发一个多语言网站。它在数据库中同时使用超过 4 种语言。它始终遵循方案: field_%lang%
例如。编号 |标题_zh |标题_de |描述_zh |描述_de
由于它非常简单,我正在考虑编写一个可以在控制器和视图(全局实体?)中使用的函数,以保持我的代码 DRY。
//function
public function __($field, $language = null){
if( $language === null ){
list( $language ) = split('_', I18n::Locale());
}
$newField = $field . '_' . strtolower( $language );
if( $this->has( $newField ) ){
return $this->{ $newField };
}else{
throw new NotFoundException('Could not find "' . $newField . '" field');
}
}
//usage
$result->__('title'); //returns title_en depending on Locale
$result->__('title', 'de'); //always returns title_de
问题是我不知道在没有制动约定的情况下在哪里实施它。我在考虑实体,但据我所知,没有适用于所有模型的“全局”实体?
欢迎所有想法和建议!
迈克
【问题讨论】:
-
为什么不把它放在你所有实体的某种超类中呢?我不明白为什么它会打破惯例。
-
是的,但是是否存在所有实体的超类?在哪里?
标签: cakephp internationalization translation locale cakephp-3.0