天天看点

云客Drupal源码分析之国际化Internationalization:核心翻译系统

各位《云客drupal源码分析》系列的读者:

本系列一直以每周一篇的速度进行博客原创更新,希望帮助大家理解drupal底层原理,并缩短学习时间,但自《插件系统(上)》主题开始博客仅发布前言和目录,这是因为云客在思考一个问题:drupal在国外如此流行但在国内却很小众,一个重要原因应该是中文资料的缺乏,我们是否能够找到一种方式来激发中文资料的出产?此时同是积极推动者的晴空提出能否用付费阅读的方式来鼓励更多作者?并建立了一个付费阅读drupal资料的网站,个人觉得也许这能激发高质量原创内容的出产,学习者支付很少费用可以节省大量学习时间是划算的,作者也能分配精力去开发高质量内容而得到报酬,drupal普及开了对大家都有益处,为了支持晴空的这个项目,云客决定将从《插件系统(上)》主题开始后续内容全部放在这个网站上收费阅读,读者只需要付很少费用即可,云客在这里承诺该系列得到的所有订阅费用全部捐献给drupal深圳社区,用以组织活动等等,发展社区需要大家贡献力量,该网站已于2017年3月29日上线,请移步:http://nowicode.com/ 阅读本篇完整版

我是云客,【云游天下,做客四方】,联系方式见主页,欢迎转载,但须注明出处

****************************************以下为前言和目录,请移步:http://nowicode.com/ 阅读本篇完整版*******************************

前言:

在开始新系统的学习前,建议先闭上眼睛想一下如果是自己来设计,会怎么实现呢,这会很有趣,而且对后面的学习大有帮助,也可避免出现填鸭式教育学习的饱腹感导致的情绪上的波动甚至厌烦,比如翻译系统我们就可以这样思考:网站中有许多文本,短的如菜单文本、长的有整篇文章、中长的有功能提示说明等,各文本属性又不同,有的属于系统界面,有的属于内容,而且来源也不同,有的是系统自带,有的是用户提交,怎么储存翻译结果呢?又怎么识别不同翻译指的是同一文本内容呢?当用户首选语言没有对应的翻译时如果能提供次选语言总比什么都不提供好,这就需要用户给出语言偏好排序的设置,有些文本是带数字的,文本本身不会变化,只是数字会变化,不可能每一个数字都去储存一次,那么数字应该作为参数传递给翻译系统,在英语中由数字原因还出现了名词的单复数形式需要进一步判断,有些内容是不需要翻译的,比如人名,如何应对?有些语言是从左到右书写阅读的,有些则相反,如果要求完美甚至还出现单位转换,比如英寸转化为米等等,我们带着这些问题来看看drupal是如何实现的。

在drupal中,通常以英语作为基础语言,这也导致通常所讲的“源字符串”是指英语,(源字符串是指t($str)函数的参数),但系统并未限制源字符串必须是英语,它可以是任意语言,但通常我们假设它是英语。翻译系统由翻译管理器掌管,它提供统一的使用接口,在内部它调用翻译器来进行翻译,可以向它注册多个不同优先级的翻译器,有许多概念如下:

语言代码:

每种语言都有唯一对应的语言代码,比如英语:en、简体中文:zh-hans、繁体中文:zh-hant,语言代码由标准化组织定义,见rfc5646文档和https://www.w

翻译上下文:

翻译的核心:翻译管理器TranslationManager:

T函数:

单复数的翻译:

翻译器Translators:

核心提供的翻译器string_translator.custom_strings:

系统主要翻译器string_translator.locale.lookup:

字符串翻译特征StringTranslationTrait:

可选翻译模块:

补充:

继续阅读