A-A+

giix工具扩展——自动生成model的属性翻译

2015年11月25日 站长资讯 暂无评论

giix是gii的扩展,方便实用。

GiixModel Generator用来生成model,和gii的Model Generator相比,giix把类拆分成两部分,base类和继承的model类。

base是用工具生成的,方便反复替换,而不会修改具体实现。

继承的类方便大家添加具体实现函数,而不用担心被工具重新替换掉。

好了,这下方便了,但是yii支持本地化操作,数据库的属性每次都需要手工翻译,略显麻烦,那我们就来改下giix的相关代码,让它自动生成对应的语言文件。

修改GiixModelCode.php里generateLabelsEx函数

添加在

return $labels;

前添加

  1. // 保存语言文件  
  2. $langDir = Yii::getPathOfAlias('application.messages').DIRECTORY_SEPARATOR.Yii::app()->getLanguage().DIRECTORY_SEPARATOR;  
  3. if(!file_exists($langDir))  
  4.     mkdir($langDir);  
  5. $messageFile = $langDir.'db.php';  
  6. if(file_exists($messageFile))  
  7. {  
  8.     $messages=include($messageFile);  
  9.     if(!is_array($messages))  
  10.         $messages=array();  
  11. }else{  
  12.     $messages=array();  
  13. }  
  14. foreach ($table->columns as $column)  
  15. {  
  16.     if($column->comment)  
  17.         $label=$column->comment;  
  18.     else{  
  19.         $label = ucwords(trim(strtolower(str_replace(array('-', '_'), ' ', preg_replace('/(?<![A-Z])[A-Z]/', ' \0', $column->name)))));  
  20.         $label = preg_replace('/\s+/', ' ', $label);  
  21.   
  22.   
  23.         if (strcasecmp(substr($label, -3), ' id') === 0)  
  24.             $label = substr($label, 0, -3);  
  25.         if ($label === 'Id')  
  26.             $label = 'ID';  
  27.     }  
  28.     $key = $table->name.'.'.$column->name;  
  29.     if(!array_key_exists($key, $messages))  
  30.         $messages[$key]=$label;  
  31. }  
  32. // 更新数据库翻译文件  
  33. $messageFileContent="<?php\n// 数据库数据字典\n\n\n\n";  
  34. $messageFileContent.="return array(\n";  
  35. foreach ($messages as $key => $value) {  
  36.     $messageFileContent.="    '$key' => '$value',\n";  
  37. }  
  38. $messageFileContent.=');';  
  39. file_put_contents($messageFile, $messageFileContent);  
  40. 修改  
  41.   
  42. } else {  
  43.     $label = ucwords(trim(strtolower(str_replace(array('-', '_'), ' ', preg_replace('/(?<![A-Z])[A-Z]/', ' \0', $column->name)))));  
  44.     $label = preg_replace('/\s+/', ' ', $label);  
  45.     if (strcasecmp(substr($label, -3), ' id') === 0)  
  46.         $label = substr($label, 0, -3);  
  47.     if ($label === 'Id')  
  48.         $label = 'ID';  
  49.     $label = "Yii::t('app', '{$label}')";  
  50. }  
  51. 修改为:  
  52.   
  53.             } else {  
  54. //              $label = ucwords(trim(strtolower(str_replace(array('-', '_'), ' ', preg_replace('/(?<![A-Z])[A-Z]/', ' \0', $column->name)))));  
  55. //              $label = preg_replace('/\s+/', ' ', $label);  
  56. //              if (strcasecmp(substr($label, -3), ' id') === 0)  
  57. //                  $label = substr($label, 0, -3);  
  58. //              if ($label === 'Id')  
  59. //                  $label = 'ID';  
  60. //              $label = "Yii::t('app', '{$label}')";  
  61.   
  62.   
  63.                 $label = $table->name.'.'.$column->name;  
  64.                 $label = "Yii::t('db', '{$label}')";  
  65.             }  

注意:记得保证/protected/messages目录可写。

效果,正常执行giix model Generator。然后就可以在messages下面的对应语言里面找到db.php,里面默认生成了对应的内容。

修改对应的文字即可。

和giix之前生成的_basemodel的差别。

标签:

给我留言