多语言网站,如何应对?

4
我有一个网站(Coldfusion),想要提供多语言功能,但不知道最佳实现方式。
我有两个计划:
1:
所有内容(文本)都在数据库中。
如果用户需要其他语言,则用户将单击链接/标志,这将将所请求的语言放入会话变量中,例如:session.language =“es”。
在数据库中,我将有2列(每种语言都有1列),然后选择属于“es”的文本。
每个页面将向数据库发送请求,以获取与session.language相关的文本。
优点:相对简单易行。
缺点:对于SEO来说不太好。http://www.domain.com/page.cfm将显示英文文本或西班牙文本(或其他语言)。 Google不会添加重复的URL。
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变量将从数据库中选择正确的语言。
优点:每种语言都有唯一的URL。 对于SEO和Google索引很好。
缺点:实施起来有些困难。(我认为)
还有其他/更好的建议吗?
谢谢!

如果您对语言不是很在意,可以使用谷歌翻译工具。 - Vikas
5个回答

1

http://i18n.riaforge.org/提供了i18n的下载。它可以用来确保所有字符串标签匹配。这样,如果有人想将“保存”更改为“更新”,可以在一个地方完成所有操作。

还要考虑那些将进行翻译的人的技术背景。通常,让翻译团队在记事本中编辑文件比更新数据库更容易。文本文件与版本控制很好地配合使用。


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

我会选择第二个选项。每个翻译都应该有自己的URL。链接到您的网站将已经是预期的翻译。

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

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

翻译表:
- label_id
- value
- country_code
- language_code

其中title_id与label_id匹配

这样,当添加新的翻译时,您就不必更改表结构。这使您可以为任何标签或文本拥有无限的翻译。


1
为了有效地创建一个多语言网站,您需要为自己设定一个规则,即不要将任何文本硬编码到源代码中。它必须来自数据库和/或资源包。 从数据库获取文本 您需要确保存储数据的列是Unicode格式,否则会出现重音字符问题。同时,不要为每种语言设置一列,因为这样不可扩展。像@jan建议的那样,使用一个翻译表,其中项目以引用和语言为键。 资源包

你不需要从数据库中获取每一个小细节的文本,所以对于这些情况,你可以利用资源包。这是一个,诚然有点老旧的链接http://www.sustainablegis.com/blog/cfg11n/index.cfm?mode=entry&entry=FD48909C-50FC-543B-1FE177C1B97E8CC1,来自Paul Hastings的博客,关于一些解决资源包问题的方案。说实话,他的博客在这个主题上是一个很好的资源。

关于如何处理URL,不要选择选项1,因为你正是正确地指出了这将会影响页面的SEO排名,并且意味着用户无法正确地分享或返回到该页面。

有两种方法可以在URL中添加语言代码,就像你在选项1中指出的那样。

优点

  • 配置更简单

缺点

  • 你有一个应用程序,这意味着随着你增加更多的语言,你会在该应用程序的内存上增加更多的复杂性和负担。

或者你可以为每个应用程序使用不同的子域或域名,例如es.yourdomain.com 或 yourdomain.es, 它们都可以使用相同的代码库。

优点

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

缺点

  • 配置需要更多的工作量。

0
我发现最好的方法是使用XML来保存页面语言相关的内容,每个页面都有一个XML文件,您可以根据需要更改语言。当页面加载时,只需从数据库或文件中加载不同的XML即可...有很多方法可以实现这一点。我尝试过的所有其他方法都存在问题,至少这种方法允许您将语言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标记中加入字体应调整为的大小(如果不是正常大小)。这样,当翻译过长时,您可以在那里缩小该字体...等等。

祝您愉快!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接