多语言网站,如何处理这个?

时间:2012-04-12 11:15:20

标签: coldfusion web multilingual

我有一个网站(Coldfusion),我想提供多语言,但不知道最好的方法是什么。

我有2个计划:

1:

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

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

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

然后,每个页面都会向数据库发出请求,以获取与session.language相关的文本。

PROS:实施相对简单

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

2:

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

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

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

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

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

或者有没有其他/更好的想法?

谢谢!

5 个答案:

答案 0 :(得分:1)

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

在数据库中执行此操作似乎不太标准。假设您想使用MVC架构(模型 - 视图 - 控制器)。大多数软件使用表示层(视图)中的键(例如.html),并且与表示层一起,您有语言文件(在Java中,这通常是属性文件),它们仅通过文件名映射,并且可以通过普通用户,没有任何特殊技能,如没有计算机技能的专业翻译。当然你可以将它放在一个数据库中,但它只是更多的工作,并将信息移出表示层。

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

要查找,您可以查找术语“国际化”,即“i18n”或“本地化”。 (这些术语并不代表相同的东西,但很少使用它们,所以要么有效。http://www.w3.org/International/questions/qa-i18n

答案 1 :(得分:1)

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

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

表格帖子:
- id
- title_id
- ......

表格翻译:
- label_id
- 价值
- country_code
- language_code

title_id匹配label_id

这样,添加新翻译时无需更改表格结构。这允许您对任何标签或文本进行无限翻译。

答案 2 :(得分:1)

要有效地进行多语言网站,您需要为自己设置一条规则, NO TEXT 将作为硬编码放入源中。它需要来自数据库和/或资源包。

数据库中的文字

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

资源包

您不希望从数据库中获取最后一点文本,以便您可以使用资源包。这是Paul Hastings博客关于资源包的一些解决方案的http://www.sustainablegis.com/blog/cfg11n/index.cfm?mode=entry&entry=FD48909C-50FC-543B-1FE177C1B97E8CC1链接{{3}}。说实话,他的博客是这个主题的优秀资源。

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

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

<强>赞成

  • 配置简单

<强>缺点

  • 您有一个应用程序,这意味着当您添加更多语言时,您会在该应用程序的内存中添加更多复杂性和重量

或者您可以为每个应用程序设置不同的子域或域,例如es.yourdomain.com或yourdomain.es他们都可以是相同的代码库

<强>赞成

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

<强>缺点

  • 更多配置工作

答案 3 :(得分:1)

http://i18n.riaforge.org/可以下载i18n。它可用于确保所有字符串标签匹配。这样,如果有人想要将“保存”改为“更新”,那么一切都可以在一个地方完成。

考虑那些正在进行翻译的技术背景也很重要。与更新数据库相比,让翻译团队更容易编辑记事本中的文件。文本文件适用于版本控制。

答案 4 :(得分:0)

我找到的最好的方法是使用XML来保存那些页面语言的东西,一个xml来覆盖每个页面,然后你可以改变它的语言。当页面加载时,只需从数据库或文件中加载不同的XML ......许多方法都可以执行此操作。我尝试过的所有其他方法都存在问题,至少这个方法允许您使用语言XML,将其交给将要复制它的人,然后更改框...您将其放入数据库中进行服务。

也可以为文本执行此操作,并让DB通过使用要包含在页面的XML中的项列表来仅为该页面的文本生成XML。

一旦你明白了,剩下的就变得很容易...... 并给出CF通过点符号访问这些数据的方法,很容易让我们感到不舒服

说你有“加载图片”

in english xml it may be <LoadIMGS>Load Images</LoadIMGS> 
in chinese it may be <LoadIMGS>加载图像</LoadIMGS>
or <LoadIMGS>Jiā zǎi túxiàng</LoadIMGS>

无论如何,在您的CFM代码中,您只需将#variablename.LoadIMGS#放在该位置...我还建议在loadimages标签中放入字体应调整到的大小(如果不是正常大小)。这样,当翻译太大时,你可以缩小那个字体......等等。

享受!!!