我应该如何在多个语言的全球使用网站上存储(和呈现)文本?内容主要是500多篇文章的形式,虽然我也需要在每个页面上翻译小文本片段(例如“打印本文”或“返回菜单”)。
我知道有多个CMS软件包可以处理多种语言,但我也必须与现有的ASP系统集成,所以我忽略了这些解决方案。
我的一个问题是Google应该能够找到这些页面,即使对于外国用户也是如此。我不太关心处理日期和货币的问题。
我担心,留给我自己的设备,我会发明一种方法来做到这一点,但最终导致灾难!我想知道你在实际项目中实际使用的专业解决方案,而不是未经验证的想法!非常感谢。
我查看了RESX文件,但觉得它们不适用于除了最简单的翻译解决方案之外的所有文件(我会详细说明是否有人想知道)。
Google会帮助我翻译文本,但不会存储/展示文字。
有没有人参与过依赖自己的代码进行演示的多语言项目?
有关以下列方式提供内容的任何想法,哪种方式最好?
(这些不是真正的网址,我只是展示了示例)
答案 0 :(得分:5)
首先将所有语言的所有代码放在一个域名下 - 这将有助于您的google-rank。
我们有一个完全多语言的系统,本地化存储在数据库中,但是与Web应用程序一起缓存。
无论我们想要在哪里展示本地化,我们都会使用:
<%$ Resources: LanguageProvider, Path/To/Localisation %>
然后在我们的web.config中:
<globalization resourceProviderFactoryType="FactoryClassName, AssemblyName"/>
FactoryClassName
然后实现ResourceProviderFactory
以提供实际的动态功能。使用字符串键“Path / To / Localization”
缓存本地化值非常重要 - 您不希望每个页面都有大量的数据库查找,并且我们会缓存数千个本地化字符串而不会出现性能问题。
使用用户当前的浏览器本地化来选择要提供的语言。
答案 1 :(得分:2)
您可能想要检查GNU Gettext项目 - 至少要开始。
已编辑以添加有关项目的信息:
我使用不同技术的Gettext技术开展了多个多语言项目,包括C ++ / MFC和J2EE / JSP,并且它运行良好。但是,您需要编写/查找自己的代码来显示本地化数据。
答案 2 :(得分:1)
如果您使用.Net,我建议您使用一个或多个资源文件(.resx)。在MSDN上有很多关于此的文档。
答案 3 :(得分:1)
与大多数一般编程问题一样,这取决于您的需求。
对于静态文本,我会使用RESX文件。对我来说,作为.Net程序员,它们易于使用,而.Net Framework对它们有很好的支持。
对于任何动态文本,我倾向于将这些信息存储在数据库中,特别是如果站点维护者将成为非开发人员。在过去,我使用了两种方法,添加语言列并为不同语言创建不同的条目,或创建单独的表来存储特定于语言的文本。
第一种方法的表可能如下所示:
文章ID |语言标识|语言特定文章文本|创建者|创建日期
这适用于您可以为给定文章创建不同条目的情况,并且您不需要保持与这些不同条目关联的任何数据同步(例如更新的时间戳)。
另一种方法是有两个单独的表,一个用于非语言特定文本(id,创建日期,创建用户,更新日期等),另一个表包含特定于语言的文本。因此表格可能如下所示:
第一张表:文章标识|创建者|创建日期|更新者|更新日期
第二表:文章标识|语言标识|语言特定文章文本
对我来说,问题归结为更新非语言相关数据。如果你正在更新那些数据,那么我会倾向于第二种方法,否则我会采用第一种方法,因为我认为这更简单(不能忘记KISS原则)。
答案 4 :(得分:0)
如果您只是担心正在翻译的文章内容,并且不需要完全集成的选项,那么我过去使用过google translation并且它在较小的范围内效果很好。
答案 5 :(得分:0)
精彩的问题。
我为自己制作的网站(我的个人资料中的链接)解决了这个问题,该网站使用自制的Python 3脚本,可以动态翻译通用模板,并从所请求的语言中插入特定的内容页面(或者从接受的Apache中猜出 - 式语言)。
因为我学习Python并编写自己的迷你库来创建内容页面,所以很有趣。一个缺点是我们的托管没有Python 3,但我让我的脚本生成静态HTML(原始的是检查用户代理),然后将其上传到服务器。到目前为止,该网站的新语言版本现在变得轻而易举:)
这种方法最大的缺点是从头开始编写东西很费时间。所以,如果你愿意,请放弃我的行,我会帮助你使用我的脚本:)
答案 6 :(得分:0)
对于URL格式,我使用site.com/content/example.fr
,因为这允许Apache执行语言协商,以防有人要求/content/example
并且浏览器告诉它喜欢法语。当你这样做时,Apache还会添加.html
或其他任何奖励。
因此,当请求是example
并且我有文件
example.fr
example.en
example.vi
对于具有越南语配置浏览器的人,Apache将自动继续example.vi
,对于具有德语配置浏览器的人,将自动继续example.en
。非常有用。