是否以多种语言存储内容?例如。英文,法文,德文

时间:2020-03-05 18:55:59  来源:igfitidea点击:

我应该如何在几种语言供全球使用的网站上存储(和显示)文本?内容主要以500多个词的形式出现,尽管我也需要翻译每页上的小片段文本(例如"打印本文"或者"返回菜单")。

我知道有几种处理多种语言的CMS软件包,但是我也必须与我们现有的ASP系统集成,因此我忽略了此类解决方案。

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

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

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

Google会帮助我翻译文本,但不存储/显示文本。

是否有人在依靠自己的代码进行演示的多语言项目中工作?

关于通过以下方式提供内容有什么想法,哪个是最好的?

  • http://www.website.com/text/view.asp?id=12345&lang=fr
  • http://www.website.com/text/12345/bonjour_mes_amis.htm
  • http://fr.website.com/text/12345

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

解决方案

回答

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

回答

我们可能要至少检查一下GNU Gettext项目。

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

我已经在多个使用Gettext技术的多语言项目中使用了不同的技术,包括C ++ / MFC和J2EE / JSP,并且一切正常。但是,我们需要编写/查找自己的代码以显示本地化数据。

回答

如果我们只是担心要翻译的文章内容,而又不需要完全集成的选项,那么我过去曾经使用过google翻译,并且在较小的范围内效果很好。

回答

与大多数常规编程问题一样,这取决于需求。

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

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

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

文章ID |语言ID |语言特定的文章文字|创建者|创建日期

这适用于以下情况:我们可以为给定文章创建不同的条目,而无需与这些不同的条目关联的任何数据保持同步(例如,更新的时间戳记)。

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

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

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

对我而言,问题归结为更新非语言相关的数据。如果我们要更新数据,那么我会倾向于第二种方法,否则,我会选择第一种方法,因为我认为这比较简单(不能忘记KISS原理)。

回答

首先将所有语言的所有代码放在一个域下,这将对Google排名产生帮助。

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

每当我们希望出现本地化的地方,我们都使用:

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

然后在我们的web.config中:

<globalization resourceProviderFactoryType="FactoryClassName, AssemblyName"/>

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

重要的是,缓存不想在每个页面上进行大量数据库查找的本地化值,并且我们缓存了数千个本地化字符串,而没有性能问题。

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

回答

很好的问题。

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

自从我开始学习Python并编写了自己的迷你库来创建内容页面以来,这很有趣。缺点是我们的托管服务器没有Python 3,但我让我的脚本生成了静态HTML(原始脚本正在检查User-agent),然后将其上传到服务器。到目前为止,该方法仍然有效,并且使网站的新语言版本变得轻而易举:)

这种方法的最大缺点是从头开始编写东西很费时。因此,如果我们愿意,请给我下一行,我会使用我的脚本:)

回答

至于URL格式,我使用site.com / content / example.fr,因为这允许Apache在有人要求`/ content / example'并且让浏览器告诉它喜欢法语的情况下进行语言协商。执行此操作时,Apache还添加了.html或者其他任何奖励。

因此,当请求是"示例"并且我有文件时

example.fr
example.en
example.vi

对于使用越南语配置的浏览器的人,Apache会自动执行" example.vi";对于使用德语配置的浏览器的人,Apache将自动继续执行" example.en"。很有用。