多语言网站,如何解决这个问题?

我有一个网站(Coldfusion),我想提供多种语言,但不知道什么是最好的方式来做到这一点。

我有两个计划:

1:

当然,所有内容(文本)都在数据库中。

如果用户想要一种不同的语言,用户将点击一个链接/标志,这会将请求的语言放入会话变量中,例如:session.language =“es”

在数据库中我会有2列(每种语言都有1列),然后选择属于'es'的文本

然后,每个页面都会向数据库发出一个请求,让文本记录到session.language中。

优点:实施起来相对简单

缺点:SEO明智我不认为这可能是非常好的。 http:// www.domain.com/page.cfm会提供英文文本或西班牙文本(或其他语言)。 Google不会添加重复的网址

2:

使用http:// www.domain.com/en/page.cfm英语和http:// www.domain.com/es/page.cfm英语做一些事情。

使用URL重写规则,URL http:// www.domain.com/en/page.cfm中的语言值实际上是页面http:// www.domain.com/page.cfm?language=en

url.language变量将从数据库中选择正确的语言。

优点:每种语言的唯一网址。 适合搜索引擎优化和谷歌索引。

缺点:实施起来有点困难。 (我认为)

还是有人有其他/更好的想法?

谢谢!!


您应该首先检查默认语言(正确的标准方式)的浏览器标题“Accept-Language”,并提供链接(直观看似正确的方式)作为替代方案。

在数据库中做它看起来不是很标准。 假设您想使用MVC体系结构(模型 - 视图 - 控制器)。 大多数软件都使用表示层(视图)中的键(例如html),并且与表示层一起,您有语言文件(在Java中,这通常是属性文件),它们仅由它们的文件名映射,并且可以通过没有任何特殊技能的常规用户,如没有计算机技能的专业翻译人员。 当然,你可以把它放在数据库中,但是这只是更多的工作,并将信息从表示层移出。

有这样做的各种库。 你应该为你的应用程序找到正常的。 请编辑您的问题,以包括您用来开发应用程序的内容。 (例如,JSP,Tapestry,Wicket,ASP,PHP等)例如,如果您想使用JSP,那么我会建议您使用JSTL标记库的语言支持。 或者,如果您使用的是Tapestry,我会将您指向http://tapestry.apache.org/localization.html或http://tapestry.apache.org/tapestry4.1/UsersGuide/localization.html

要查找它,您可以查找术语“国际化”,即“i18n”或“本地化”。 (这些术语并不意味着同样的东西,但很少有正确的使用它们,所以它们都可以工作。http://www.w3.org/International/questions/qa-i18n)


我会选择2.每个翻译应该有自己的网址。 链接到您的网站将已经在预期的翻译。

为了将翻译存储在数据库中,我不会将每个翻译都放在一个单独的列中,而是将它们放在一个单独的表中:

表帖子:
- ID
- title_id
- ...

表翻译:
- label_id
- 价值
- 国家代码
- language_code

其中title_id与label_id匹配

这样,当添加新的翻译时,您不必改变您的表格结构。 这使您可以对任何标签或文本进行无限翻译。


要有效地做一个多语言的网站,那么你需要为自己设定一个规则,即没有文字被放在源代码中作为硬编码。 它需要来自数据库和/或资源包。

来自数据库的文本

您需要确保您存储数据的列是unicode,否则您将遇到重音字符问题。 也不要每种语言都有一个列,因为这是不可扩展的,按照@jan的建议做,并且有一个翻译表,其中的项目被键入一个参考以及一种语言。

资源包

您不希望从数据库中获取每一小段文本,以便那些可以使用资源包的人。 这是Paul Hastings的博客中关于资源包的一些解决方案的链接http://www.sustainablegis.com/blog/cfg11n/index.cfm?mode=entry&entry=FD48909C-50FC-543B-1FE177C1B97E8CC1。 说实话,他的博客在这个话题上是一个很好的资源。

关于你如何处理网址,不要做选项1,因为你正确地认定你会导致页面的SEO排名问题,这将意味着用户无法正确分享或返回到页面。

如您在选项1中确定的,两种方法在URL中具有语言代码。

优点

  • 配置更简单
  • 缺点

  • 你有一个应用程序,这意味着当你添加更多的语言时,你会在该应用程序的内存中增加更多的复杂性和权重
  • 或者,您可以为每个应用程序创建不同的子域或域,例如es.yourdomain.com或yourdomain.es,它们都可以是相同的代码库

    优点

  • 每种语言都是独立的应用程序,这意味着它拥有自己的内存
  • 缺点

  • 更多的配置努力
  • 链接地址: http://www.djcxy.com/p/37485.html

    上一篇: Multi language website, how to approach this?

    下一篇: Yii: Multi