4

我有一个网站(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 变量将从数据库中选择正确的语言。

优点:每种语言的唯一 URL。适合 SEO 和 Google 索引。

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

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

谢谢!!

4

5 回答 5

1

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

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

于 2012-11-28T01:16:21.627 回答
1

为了有效地创建一个多语言站点,您需要为自己设置一个规则,即任何文本都不会以硬编码的形式放入源代码中。它要么需要来自数据库和/或资源包。

来自数据库的文本

您需要确保存储数据的列是 unicode,否则您将遇到重音字符问题。也没有每种语言的列,因为这是不可扩展的,请按照@jan 的建议进行操作,并有一个翻译表,其中项目在参考和语言上键入。

资源包

您不会希望从数据库中获取每一个文本,因此您可以使用资源包。诚然,这是一个来自 Paul Hastings 博客的关于资源包的一些解决方案的链接http://www.sustainablegis.com/blog/cfg11n/index.cfm?mode=entry&entry=FD48909C-50FC-543B-1FE177C1B97E8CC1 。老实说,他的博客是关于这个主题的极好资源。

关于您如何处理 URL,请不要执行选项 1,因为您非常正确地确定您将导致页面的 SEO 排名出现问题,这意味着用户无法正确共享或返回页面。

两种方法是在 URL 中使用您在选项 1 中确定的语言代码。

优点

  • 配置更简单

缺点

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

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

优点

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

缺点

  • 更努力地配置
于 2012-04-12T15:00:04.327 回答
1

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

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

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

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

title_id 与 label_id 匹配的位置

这样您就不必在添加新翻译时更改表结构。这使您可以对任何标签或文本进行无限翻译。

于 2012-04-12T11:32:34.140 回答
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

于 2012-04-12T11:30:44.427 回答
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 标记中放入字体大小(如果不是正常大小)应调整到的大小。这样,当翻译太大时,你可以缩小那个字体……等等。

请享用!!!

于 2017-02-15T21:59:14.653 回答