设为首页
收藏本站
Archiver
用户
登录
入住
用户名
Email
自动登录
找回密码
密码
登录
入住 CI 中国社区
首页
返回 CodeIgniter 中国首页
论坛
BBS
导读
Guide
个人主页
Space
中文手册
搜索
CodeIgniter 搜索引擎
视频教程
案例
任务
搜索
搜索
本版
帖子
用户
设为首页
收藏本站
Archiver
开启辅助访问
切换到宽版
日志
相册
分享
记录
CodeIgniter4
CodeIgniter3
CodeIgniter2
帖子
好友
道具
勋章
收藏
任务
记录
留言板
设置
我的收藏
退出
腾讯QQ
微信登录
CodeIgniter 中国开发者社区
»
论坛
›
CodeIgniter 开发
›
CodeIgniter 进阶讨论
›
关于多语言的表的设计问题
返回列表
查看:
6805
|
回复:
8
[Others]
关于多语言的表的设计问题
[复制链接]
zhouli520
zhouli520
当前离线
积分
818
IP卡
狗仔卡
发表于 2010-7-15 02:30:43
|
显示全部楼层
|
阅读模式
本帖最后由 zhouli520 于 2010-7-15 02:32 编辑
相信大家也经常给在中国的老外开发网站,这就肯定会涉及到多语言的问题了
前台的一些固定的东西可以直接用ci给的多语言类解决,但是往往有很多后台添加的东西也需要多语言
这时候就需要设计一个多语言的数据表了,我们公司经常会给一些外国的酒吧什么的开发网站,有时候要求的语言种类达到了4种
什么中文繁体 英语土耳其语
此时,我建表的时候就会把那些有多语言的字段建成cname(Chinese).tcname(traditional chinese),name(english),tname(turkish),
不过这样有个缺点就是如果一张表里,里面有多个字段都涉及到了多语言的话,那么这张表的字段肯定会翻番的增长,一张表里字段太多了让我看着很不爽
同事却建议我用另一种办法,就是把多语言的字段都拿出来额外建张表,里面属性是关联的表id,字段名,和一个语言id,这样的好处是方便以后可以继续扩展
语言,但是每次查询又要多查询1张表,也感觉有点麻烦
想问下各位大大,你们平常是怎么解决关于多语言的建表问题的???
有什么好方案和大家分享下吧,打了这么多废话,希望没有看瞎你们的眼睛
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
显身卡
Hex
Hex
当前离线
积分
50179
IP卡
狗仔卡
发表于 2010-7-15 10:01:17
|
显示全部楼层
放一个表里肯定不合适。
多查询一个表不麻烦,关键要看你如何封装代码,这是重点。很多代码都可以简化到一行代码,这样就不麻烦了,呵呵
回复
支持
反对
使用道具
举报
显身卡
yanrikun
yanrikun
当前离线
积分
100
IP卡
狗仔卡
发表于 2010-7-15 18:04:58
|
显示全部楼层
同意楼上的关键要看你如何封装代码
回复
支持
反对
使用道具
举报
显身卡
zhouli520
zhouli520
当前离线
积分
818
IP卡
狗仔卡
楼主
|
发表于 2010-7-15 20:04:49
|
显示全部楼层
需要怎么封装呢???
我处理多语言的时候一般都是将用户选择的语言种类放入session
当在control输出信息到前台时,先拿到session根据session判断从数据库中拿哪个语言字段比如
$lang = $this->session->userdata('language');
if($lang=='english'){
foreach($example as $e){
$name = $e['name'];
}
}
if($lang=='chinese'){
foreach($example as $e){
$name = $e[c'name'];
}
}
else{
foreach($example as $e){
$name = $e[c'name'];
}
}
这样取值很麻烦,而且产生和夺重复代码,请hex帮我看看有什么好的封装方法呢?
回复
支持
反对
使用道具
举报
显身卡
Hex
Hex
当前离线
积分
50179
IP卡
狗仔卡
发表于 2010-7-16 00:34:28
|
显示全部楼层
封装代码要通盘考虑,只这几个代码当然没什么可封装的了,呵呵
这个就只能靠你自己总结+提炼了。
回复
支持
反对
使用道具
举报
显身卡
mengjian
mengjian
当前离线
积分
12
IP卡
狗仔卡
发表于 2010-8-24 01:02:40
|
显示全部楼层
那有什么好方法处理多语呢,我准备要做一个,在这找参考呢...
回复
支持
反对
使用道具
举报
显身卡
黄叶
黄叶
当前离线
积分
8
IP卡
狗仔卡
发表于 2010-9-7 09:14:43
|
显示全部楼层
我有一种方式,不知道适不适合你
我在做FAQ时,需要牵涉到两个版本,英文与泰文,但英文是我的基础版本,我这里随便写几个字段表示一下
如有h_id,h_title,h_content三个字段
当只有一个英文版本时,这就可以了,但如果这时我要扩展另一个版本怎么办呢,我加三个字段
h_language,h_transstatus,h_relationid
第一个字段代表的意思是当前这条记录是英文版本,还是什么版本,可以用相应的标记位来实现,第二个就是当前这条记录是否已经翻译,如果未翻译,它的状态位是也是用标记位来实现,同时,这条记录会原始的数据就是英文的,第三个字段最重要,表示的是当前这条记录关联的原始记录是哪条,也就是英文记录,至此就可以实现你要的功能了
总结:其实你之前说不同的语言,增相应的字段,会翻倍的增加字段数量,觉得不合适,其实我这里只是把你的字段改成增加记录了,如你有两个版本时,你在录入原始记录时,就会生成相对应语言版本数量的记录,然后再根据那三个字段来管理相应多语言版本记录的关系.
回复
支持
反对
使用道具
举报
显身卡
okool
okool
当前离线
积分
77
IP卡
狗仔卡
发表于 2014-11-20 00:07:57
|
显示全部楼层
许多人软件都是配置文件的方式,语言和内容没关系,任何人都可以使用任何语言,内容可以同时包含多种语言。
选择配置就行了,默认英文。
语言配置文件单独目录,
zh_cn,en,jp
目录里面再分应用
zh_cn/admin/menu.lang.php
zh_cn/home/menu.lang.php
zh_cn/public/deault.lang.php
array(
'hello_wolrd'=>'Hello world !',
...
)
调用时静态类或者函数
许多企业网站的做法直接多个表,cn_xx,en_xx,然后一些公共表
回复
支持
反对
使用道具
举报
显身卡
tx_chenjian
tx_chenjian
当前离线
积分
61
IP卡
狗仔卡
发表于 2015-6-12 10:24:39
|
显示全部楼层
楼上的大神们,我现在设计一个多语言的网站,有什么设计思路,我想做个语言版本自己可以切换,怎么设计?如果写死了$config['language'] = 'english' 那么不能自动装载其他目录下的语言包。只能自动装载english目录下的,怎么解决?
回复
支持
反对
使用道具
举报
显身卡
返回列表
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
入住 CI 中国社区
本版积分规则
发表回复
回帖后跳转到最后一页