系统设计-大家对于网站多语言版本是什么解决方案
可能重复的问题
在PHP项目中如何简易、高效的实现网站多语言
1.解决方案1。傻瓜式, 两套程序两套数据库或者一个数据库里面通过表名标识英文版表
2.解决方案2. 一套程序(通过配置文件) 一个数据库 中英文版同一个数据库表(字段会超级多)
3.解决方案3. 二套程序,一个数据库 中英文版同一个数据库表(字段会超级多)
方案1,不太利于全局搜索。
方案2,字段会超级多,逻辑处理也会超级多,速度不太清楚
方案3,数据库处理方面也挺麻烦的
大家是采用什么方法去解决的,讨论学习下。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
界面还是内容呢
界面的好解决
内容的 就要好好设计下 表结构 我之前实现的时候 是按着 类似多用户博客系统那样来设计的 不同的语言 就当成是不同的用户
这样 只需要顶层一个 sid 可以自由在内容之间做切换 缺点就是 不同版本之间难共享数据
这应该是最简单的方式
如果只是涉及国际化(i18n)而不考虑本地化(l12n),所谓的多语言应该首先分成两部分
界面级别的多语言
内容级别的多语言
界面级别的多语言,即是处理页面上的标签,静态文本等不经常变更或者不会被用户编辑的内容。
常见的解决方案是构建翻译库,每个库按语种不同分别存放。
翻译库可以用数据库储存,但建议用gettext或者Tmx这些成熟的方案。
然后在模板里加入翻译函数,查询翻译库并显示翻译结果即可,这里可以辅助缓存提高效率。
只是可能会遇到我提出的混写html/模板函数的问题
内容级别的多语言,即用户输入的内容、文章,根据用户使用语言不同,需要标记语种。
一般需要根据实际情况选择方案,比如Blog系统,可以在Blog表中增加一个字段标记语种,然后按语种分表或者分区,@刘同虎 所担心的不利于全局搜索的问题实际上基本不会有影响,一般来说英文用户是不会去搜索中文内容的。
我们做php多语言是把语言库文件分成不同的目录,但是文件名是一样的,在客户端调用时传过来语种,我们根据语种在。
if(trim($language) == 'English'){
$this->includeLocaleFiles('eng');
$this->includeLocaleFiles('eng','/locale.php');
}else{
$this->includeLocaleFiles('chi');
$this->includeLocaleFiles('chi','/locale.php');
}
加载 文件
这样就动态显示