【问题标题】:Design patterns for multiple language website?多语言网站的设计模式?
【发布时间】:2011-04-22 00:44:54
【问题描述】:

假设我正在设计一个网站,其中包含英语、法语、西班牙语、德语和韩语(我不是,但我们假装我是)。

我不能依赖谷歌翻译等服务,因为网站的性质不是娱乐而是商业。假设我可以使用专业的翻译人员,他们可以将上下文中的某些内容翻译成另一种语言并给我那个文本。

有哪些已知且简单的方法可以通过网站以多种语言提供内容?

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

这方面有什么行之有效的做法吗?

【问题讨论】:

  • 取决于您使用的编程语言

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


【解决方案1】:

您询问的广泛主题称为“国际化和本地化”(或简称 I18N 和 L10N)。要记住的重要一点是,它不仅仅是翻译消息。网站国际化还有很多其他因素。

你需要的更明显的东西是:

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

您需要考虑的其他事项:

  • 根据区域设置正确排序字符串
  • 根据区域设置格式化日期
  • 始终以用户的时区显示时间
  • 显示用户区域的距离测量值(即:英里与公里?)
  • 针对希伯来语等语言以从右到左的方式布局网站
  • 想想你是如何使你的信息多元化的。 String message = "Please fix the following error" + (errors.size() > 1 ? "s" : ""); 在国际化程序中不起作用。
  • 考虑在文本长度可能变化很大的情况下如何布置网页。永远不要假设一个字符或多或少具有一定的宽度(汉字中的单个字符可能比一个字符宽 8 倍)小写'i')

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      CSS 代码:

      q:lang(fr) { /* 法语引用 */ 引号:“\00AB”“\00BB”; } q:lang(en) { 引号:“\201C”“\201D”; /* 英文报价 */ }

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

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

      【讨论】:

        【解决方案4】:

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

        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 的生成版本会根据用户的语言标题(以及其他内容)进行缓存。

        希望有帮助

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-11-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-01-27
          • 1970-01-01
          相关资源
          最近更新 更多