3

我应该如何在一个供全球使用的网站上使用多种语言存储(和呈现)文本?内容主要是 500 多字文章的形式,尽管我也需要翻译每一页上的小段文字(例如“打印这篇文章”或“返回菜单”)。

我知道有几个 CMS 包可以处理多种语言,但我也必须与我们现有的 ASP 系统集成,所以我忽略了这些解决方案。

我担心的一个问题是谷歌应该能够找到这些页面,即使对于外国用户也是如此。我不太关心处理日期和货币的问题。

我担心,如果任凭我自己的设备,我会发明一种可行的方法,但最终会导致灾难!我想知道您在实际项目中实际使用了哪些专业解决方案,而不是未尝试过的想法!非常感谢。


我查看了 RESX 文件,但觉得它们不适用于除了最琐碎的翻译解决方案之外的所有解决方案(如果有人想知道,我会详细说明)。

Google 将帮助我翻译文本,但不会存储/呈现它。

有没有人参与过依赖自己的代码进行演示的多语言项目?


关于通过以下方式提供内容的任何想法,哪种方式最好?

(这些不是真实的 URL,我只是展示示例)

4

7 回答 7

5

首先将所有语言的所有代码放在一个域下 - 这将有助于您的谷歌排名。

我们有一个完全多语言的系统,本地化存储在数据库中,但与 Web 应用程序一起缓存。

无论我们希望在哪里出现本地化,我们都使用:

<%$ Resources: LanguageProvider, Path/To/Localisation %>

然后在我们的 web.config 中:

<globalization resourceProviderFactoryType="FactoryClassName, AssemblyName"/>

FactoryClassName然后实现ResourceProviderFactory以提供实际的动态功能。本地化存储在数据库中,带有字符串键“Path/To/Localisation”

缓存本地化的值很重要——您不希望在每个页面上都有大量的数据库查找,我们缓存了数千个本地化字符串而没有性能问题。

使用用户当前的浏览器本地化选择要提供的语言。

于 2008-09-23T11:12:42.440 回答
2

您可能想检查GNU Gettext项目 - 至少可以开始。

编辑添加有关项目的信息:

我曾在多个不同技术中使用 Gettext 技术(包括 C++/MFC 和 J2EE/JSP)参与过多个多语言项目,并且一切正常。但是,您当然需要编写/查找自己的代码来显示本地化数据。

于 2008-09-16T13:53:07.413 回答
1

如果您使用的是 .Net,我建议您使用一个或多个资源文件 (.resx)。MSDN 上有很多关于此的文档。

于 2008-09-16T13:52:14.887 回答
1

与大多数一般编程问题一样,这取决于您的需求。

对于静态文本,我会使用 RESX 文件。对我来说,作为 .Net 程序员,它们很容易使用,并且 .Net 框架对它们有很好的支持。

对于任何动态文本,我倾向于将此类信息存储在数据库中,特别是如果站点维护者将成为非开发人员。在过去,我使用了两种方法,添加语言列并为不同的语言创建不同的条目,或者创建一个单独的表来存储特定于语言的文本。

第一种方法的表格可能如下所示:

文章编号 | 语言 ID | 特定语言文章文本 | 创建者 | 创建日期

这适用于您可以为给定文章创建不同条目并且不需要保持与这些不同条目关联的任何数据同步的情况(例如更新的时间戳)。

另一种方法是有两个单独的表,一个用于非语言特定文本(id、创建日期、创建用户、更新日期等),另一个表包含语言特定文本。所以表格可能看起来像这样:

第一个表:文章 ID | 创建者 | 创建日期 | 更新者 | 更新日期

第二个表:文章 ID | 语言 ID | 特定语言的文章文本

对我来说,问题归结为更新非语言相关数据。如果您要更新该数据,那么我会倾向于第二种方法,否则我会采用第一种方法,因为我认为它更简单(不能忘记 KISS 原则)。

于 2008-09-16T15:12:50.733 回答
0

如果您只是担心文章内容被翻译,并且不需要完全集成的选项,我过去使用过谷歌翻译,它在较小的规模上效果很好。

于 2008-09-16T13:56:24.190 回答
0

奇妙的问题。

我使用自制的 Python 3 脚本为我创建的网站(我的个人资料中的链接)解决了这个问题,该脚本即时翻译通用模板并插入来自请求的语言(或由 Apache 从 Accept-Language 猜测)的特定内容页面。

这很有趣,因为我学习了 Python 并编写了自己的迷你库来创建内容页面。一个缺点是我们的主机没有 Python 3,但我让我的脚本生成静态 HTML(原来的脚本是检查 User-agent),然后将其上传到服务器。到目前为止,这很有效,制作网站的新语言版本现在轻而易举:)

这种方法最大的缺点是从头开始写东西很耗时。因此,如果您愿意,请给我留言,我会帮助您使用我的脚本 :)

于 2009-05-31T23:37:07.873 回答
0

至于 URL 格式,我使用它,site.com/content/example.fr因为这允许 Apache 执行语言协商,以防有人要求/content/example并让浏览器告诉它喜欢法语。当您这样做时,Apache 还会添加.html或其他任何奖励。

因此,当有请求example并且我有文件时

example.fr
example.en
example.vi

example.vi对于使用越南语配置浏览器或example.en使用德语配置浏览器的人, Apache 将自动继续。挺有用的。

于 2009-05-31T23:45:52.707 回答