网站要做成一个中英文的,数据也要是中英文的,要怎么搞?
下面是我的一些想法:
建个模块,网站默认是中文,英文就放到英文的那个模块里,是英文的时候就调用英文的数据?
中文一套模板,英文一套模板?
'modules' => [
'en' => ['class' => '\app\modules\english\Module'],
]
那数据要怎么存呢?给每条数据都加一个字段,lang = 'en' / lang = 'zh'
这样?
还是个数据多加几个字段, 像下面这样,title
存中文, title_en
存英文?
CREATE TABLE `courses` (
`id` int(11) unsigned NOT NULL auto_increment,
`title` varchar(255) NOT NULL default '',
`title_en` varchar(255) NOT NULL default '',
`cover` varchar(255) NOT NULL default '' comment '封面',
`text` text,
`text_en` text,
`start_date` int(11) unsigned NOT NULL default 0 comment '开始日期',
`end_date` int(11) unsigned NOT NULL default 0 comment '结束日期',
`days` int(11) unsigned NOT NULL default 0 comment '有效天数',
`maxnum` int(11) unsigned NOT NULL default 0 comment '最多报名人数',
`has_num` int(11) unsigned NOT NULL default 0 comment '已报名人数',
`price` decimal(10,2) comment '课程费',
`created_at` int(11) unsigned default '0',
`updated_at` int(11) unsigned default '0',
`status` varchar(16) default 'on' comment 'on开启 off关闭 expire到期',
`extra` text comment '额外的一些数据 可以使用序列化数据 serialize',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
求比较好的解决方法,像 苹果官网
的多语言是如何做的,数据是怎么存的?
1、英语翻译成别的语言比较方便,Yii配置文件里可以配置sourceLanguage=>‘en-US',lanaguae=>'zh-CN',同时Yii::$app->language是一个可读可写的全局变量。
补充一下Yii::t('app', 'This is a string to translate!',"zh-CN")这个方法可以传入目标语言参数。
2、数据库的内容,建议考虑多张表保存不同语言的那部分。如果每个语言一张表的话,扩展性较差;可以在表里加入language字段,根据Yii::$app->language和外键配置好关联也是很方便的。
数据库考虑可以创建结构完全一致的2个表:article_en、article_zn
使用同一个model,用url参数或者其他方法判断当前语言,在model中使用如下方法,切换对应的数据表:
那要是支持10个国家的语言呢?都用数据库太浪费了。
可以借鉴tp框架的多语言,它是把不同的语言放入文件中。根据cookie或者session来区分语言,加载相应的语言文件。不过局限性也在于它好像只能做静态页面。
现在的骚年们使用框架前都不过一遍文档的吗?
Yii是支持多语言机制的。
赶紧戳这里看看吧。