9

假设我正在设计一个我们有英语,法语,西班牙语,德语和韩国的网站(我不是,但让我们假装自己是)。多语言网站的设计模式?

我不能依靠服务,如谷歌翻译,因为网站的性质不是娱乐而是商业。假设我可以访问专业翻译人员,他们可以将上下文中的某些内容翻译成另一种语言,并为我提供该文本。

什么是一些已知和简单的方法来提供多种语言与网站上的内容?

有很多选择,比如单独的页面,使用数据库等......但我不能确定什么是最好的,这个概念如何扩展,需要考虑什么以及如何处理缺少翻译?

这是否有任何行之有效的做法?

+0

当然,你不能依靠谷歌翻译,它设法很好地屠杀日本人,我希望它对韩国人的待遇也会类似。 – 2010-10-06 19:46:51

+0

也取决于您使用的编程语言 – Wil 2010-10-06 19:54:31

回答

13

您提到的广泛的主题叫做“国际化和本地化”(简称I18N和L10N)。重要的是要记住的是,它不是而是只是翻译消息。还有很多其他的事情将会使网站国际化。

,你将需要更明显的事情是:

  • 字符编码,对所有语言文字工作的,不只是英语(这意味着一切下推到数据库应该使用UTF编码)
  • 一些表示用户的Locale的方式(即:Java的类Locale
  • 用于该用户的区域产生一个消息(即一个常见的模式:Spring的MessageSource
你需要分

其他的事情要考虑:

  • 正确排序的字符串根据区域设置
  • 格式化日期基于区域
  • 始终显示为用户的
  • 显示距离测量用户的时区时间区域(即:数与公里)
  • 在摆出网站从右到左的语言,如希伯来语
  • 想想你如何PLURA消除你的信息。 String message = "Please fix the following error" + (errors.size() > 1 ? "s" : "");在国际化程序中不起作用。
  • 想想如何布局你的网页时,文本的长度可能会大大变化..并且从来没有假设一个字符是或多或少的一定的宽度(汉字中的单个字符可能是8倍小写'i')

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

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

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,然后跳转到通用模式

动态生成页面,并根据用户的语言缓存每个URL的生成版本标题(除其他外)。

希望帮助

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代码:

<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". 

请注意,我们正在谈论的文件,而不是一块文本,因为它们执行复杂的格式。