多语言网站的设计模式?

时间:2010-10-06 19:35:32

标签: design-patterns localization web internationalization spoken-language

让我们说我正在设计一个网站,我们有英语,法语,西班牙语,德语和韩语(我不是,但我们假装是)。

我不能依赖谷歌翻译等服务,因为网站的性质不是娱乐而是商业。让我们说我可以访问专业的翻译人员,他们可以将某些内容翻译成另一种语言并给我这些文字。

使用网站为多种语言提供内容有哪些已知且简单的方法?

有很多选项,例如单独的页面,使用数据库等等......但我无法真正决定什么是最好的,概念如何扩展,需要考虑什么,以及如何处理缺少翻译?

有没有完善的做法?

4 个答案:

答案 0 :(得分:14)

您所询问的主题称为“国际化和本地化”(简称I18N和L10N)。要记住的重要一点是,只是关于翻译消息。国际化网站还有很多其他的东西。

您需要的更明显的事情是:

  • 适用于所有语言中的字符的字符编码,而不仅仅是英语(这意味着数据库中的所有内容都应使用UTF编码)
  • 表示用户Locale的某种方式(即:Java的Locale类)
  • 在该用户的语言环境中生成消息的常见模式(即:Spring的MessageSource

您需要考虑的其他事项:

  • 根据区域设置
  • 正确排序字符串
  • 根据区域设置格式化日期
  • 始终在用户的时区显示时间
  • 显示用户区域设置的距离测量值(即:Miles与公里数?)
  • 按照从右到左的方式为希伯来语
  • 等语言布置网站
  • 考虑一下如何复制邮件。 String message = "Please fix the following error" + (errors.size() > 1 ? "s" : "");只是在国际化计划中不起作用。
  • 考虑如何在文本长度变化很大的情况下布置网页......并且永远不要假设某个字符或多或少是某个宽度(汉字中的单个字符可能比一个字符宽8倍)小写'我')

我能找到的最好的资源是ICU library's User guide。如果您使用Java,那么这就是要使用的库。

希望这个答案是一个有用的开始!

答案 1 :(得分:3)

查看Google对Multi-regional and multilingual sites的建议。希望信息派上用场。祝你好运。

答案 2 :(得分:2)

完全赞同@Michael D和其他发布答案的开发人员。虽然这个问题已被接受,但我认为一个小的选项,如:lang()伪类也可以帮助创建多语言网站。 :lang()伪类允许确定各种文档中的语言。

CSS代码:



    q:lang(fr) {     /* Quotations for French */ 
     quotes: "\00AB" "\00BB"; 
    }

    q:lang(en) {
     quotes: "\201C" "\201D";    /* Quotations for English */ 
    }


HTML code:

 <html>
 <body>
 <pre>
     <p>Quote in French: <q lang="fr">То être ou ne pas être</q>.</p>
     <p>Quote in English: <q lang="en">То be or not to be</q>.</p>
 </pre>
 </body>
 </html>

输出将是这样的:

Quote in French language: << То être ou ne pas être >>.

Quote in English language: "То be or not to be".

请注意,我们正在讨论文档,而不是文本,因为它们执行复杂的格式化。

答案 3 :(得分:1)

我们在磁盘上有一组文件,其中包含给定小部件/模块/中的所有字符串,以及每种语言的单独文件,即:

foo.strings == generic (happens to be US english)
foo.fr.strings == french
foo.fr-CA.strings == canadian french 
foo.en-CA.strings == canadian english

根据客户的Accept-Language标题,我们确定他想要的语言。

当首次请求给定语言时,我们点击文件系统以构建该语言的大字符串映射,然后将其缓存在内存中。如果在fr-CA中没有定义给定的字符串,我们将把堆栈跳到fr,然后最终到通用

页面是动态生成的,每个网址的生成版本都会根据用户的语言标题(以及其他内容)进行缓存。

希望有所帮助