研究了一下 openstack中的本地化;主要使用gettext模块;
其中本地化包括对一般字符串的本地化和log的本地化;
 
(1)
_localedir = os.environ.get('essential'.upper() + '_LOCALEDIR')
_t = gettext.translation('essential', localedir=_localedir, fallback=True)
def _(msg):
    if USE_LAZY:
        return Message(msg, domain='essential')
    else:
         if six.PY3:
             return _t.gettext(msg)
         return _t.ugettext(msg)
这个就是字符串本地化函数 _(),只不过openstack中有多一了一个USE_LAZY变量;是延迟翻译的意思;如果延迟翻译,返回的是Message类;
Message 是一个继承于six.text_type的类,是一个unicode object。可以调用Message中的translate()方法他进行翻译;
 
 
(2)
下面是对log的本地化
_t_log_levels = dict(
(level, gettext.translation('essential' + '-log-' + level,
    localedir=_localedir,
    fallback=True))
for level in ['info', 'warning', 'error', 'critical']
)
每一个级别的log都有自己的domain
_log_translation(msg, level):
    """Build a single translation of a log message
    """
    if USE_LAZY:
         return Message(msg, domain='essential' + '-log-' + level)
    else:
        translator = _t_log_levels[level]
        if six.PY3:
            return translator.gettext(msg)
        return translator.ugettext(msg)
 
为了方便使用,封装了下面的方法:
_LI = functools.partial(_log_translation, level='info')
_LW = functools.partial(_log_translation, level='warning')
_LE = functools.partial(_log_translation, level='error')
_LC = functools.partial(_log_translation, level='critical')
 
(3)
还有一个install()方法,
if lazy:
 
    def _lazy_gettext(msg):
        """Create and return a Message object.
        return Message(msg, domain=domain)
 
    from six import moves
    moves.builtins.__dict__['_'] = _lazy_gettext
else:
    localedir = '%s_LOCALEDIR' % domain.upper()
    if six.PY3:
        gettext.install(domain,
        localedir=os.environ.get(localedir))
    else:
        gettext.install(domain,
        localedir=os.environ.get(localedir),
        unicode=True)
 
其作用是在__builtins__中加入_(),这样你的应用中的各个模块都可以使用到_()方法。不过这样影响比较大,局部的模块最好别使用install()方法,而是用类似下面的方式来做
import gettext
t = gettext.translation('mymodule', ...)
_ = t.gettext
 
(4) 
在这个模块中还有一个translateHandler,是为log准备的。可以在打log的时候,对log进行翻译;

openstack 本地化的更多相关文章

  1. 理解 OpenStack 高可用(HA)(5):RabbitMQ HA

    本系列会分析OpenStack 的高可用性(HA)概念和解决方案: (1)OpenStack 高可用方案概述 (2)Neutron L3 Agent HA - VRRP (虚拟路由冗余协议) (3)N ...

  2. Openstack的nova-network的vlan模式扩展2

    接上一篇,上一篇我们使用的是nova-manage命令来创建的网络,这里就有一些知识需要了解 遇到的问题 控制节点的前面的BUG已经按官方解决BUG方式解决了,但是在开发dashboard,使用nov ...

  3. (转)如何阅读OpenStack源码

    1 关于该项目 本项目使用在线绘图工具web sequencediagrams完成,目标是图形化OpenStack的所有操作流程,通过操作序列图能快速学习Openstack的工作原理,理清各个组件的关 ...

  4. 零基础学习openstack【完整中级篇】及openstack资源汇总

    1.你是如何学习openstack的?2.你对openstack的组件了解多少?3.你认为openstack该如何学习? 一直想写关于openstack的方面的内容,今天终于整理完成.算是完成一桩心事 ...

  5. OpenStack Queens版本Horizon定制化开发

    工具环境 1.VMware workstation 12+: 2.Ubuntu系统+Linux Pycharm: 3.OpenStack Queens版本Horizon代码: 问题及解决 1.项目代码 ...

  6. OpenStack 2014.1(Icehouse) 更新说明

    OpenStack 2014.1(Icehouse) 更新说明 1.综合升级说明 Ÿ   Windows安装包应使用PBR 0.8版本,以避免发生bug1294246 Ÿ   log-config选项 ...

  7. ABP文档 - 本地化

    文档目录 本节内容: 简介 应用语言 本地化源 XML文件 注册XML本地化源 JSOn文件 注册JSON本地化源 资源文件 自定义源 获取一个本地文本 在服务端 在MVc控制器里 在MVC视图里 在 ...

  8. 视频 - 在 VirtualBox 中部署 OpenStack

    大家新年好,CloudMan 今天给大家带来一件新年礼物. 一直以来大家都反馈 OpenStack 学习有两大障碍:1. 实验环境难搭2. 体系复杂,难道大今天我就先帮大家解决环境问题.前两天我抽空在 ...

  9. 启用 Open vSwitch - 每天5分钟玩转 OpenStack(127)

    Linux Bridge 和 Open vSwitch 是目前 OpenStack 中使用最广泛的两种虚机交换机技术. 前面各章节我们已经学习了如何用 Linux Bridge 作为 ML2 mech ...

随机推荐

  1. 2.2 利用项目模板创建ASP.NET MVC项目

    1.启动VS2012,点击“文件|新建|项目”. 2.在新建项目的窗口中,选择ASP.NET MVC 4应用程序. 3.在新ASP.NET MVC 4项目窗口中的“选择模板”列表中选择“基本”模板,在 ...

  2. jQuery 2.0.3 源码分析 bind/live/delegate/on

    传统的时间处理: 给某一个元素绑定一个点击事件,传入一个回调句柄处理 element.addEventListener('click',doSomething,false); 这样的绑定如果页面上面有 ...

  3. mysql jdbc连接

    public class JDBCTest { public static void main(String[] args) { String sql = "SELECT * FROM us ...

  4. java.lang.IllegalArgumentException: addChild: Child name '/SSHE' is not unique

    错误信息: Caused by: java.lang.IllegalArgumentException: addChild:  Child name '/SSHE' is not unique     ...

  5. jQuery Easing动画效果扩展(转)

    jQuery API提供了简单的动画效果如淡入淡出以及自定义动画效果,而今天我给大家分享的是一款jQuery动画效果扩展增强插件jquery.easing.js,使用该插件可以实现直线匀速运功.变加速 ...

  6. 转:mysql 创建一个用户,指定一个数据库

    转自:http://blog.sina.com.cn/s/blog_8c2525390101h0dv.html mysql 创建一个用户 hail,密码 hail,指定一个数据库 haildb 给 h ...

  7. 个人收集的一些网页上一键云DDOS攻击的网站、IP地址测试,服务器压力测试

    http://bbs.itzmx.com/thread-9018-1-1.html #1 - Network Stresser - http://networkstresser.com#2 - Lif ...

  8. redhat enterprixe 5.0 NFS服务配置与管理

    一.了解NFS Samba 是主要用于实现Linux和Windows操作系统之间文件共享的协议,而NFS则是实现UNIX和Linux操作系统之间文件共享的协议. NFS可以把网络上远程的文件挂载到本机 ...

  9. Linux常用的一些命令

    linux 关闭防火墙命令 servers iptables stop  关闭 servers  iptables status  状态 servers  iptables restart 重启 关闭 ...

  10. 克隆机器后eth1变为eth0问题

    1. 清空该文件 2.进入网络配置文件把HADDR 和UUID注释掉,并重启 3.成功修改eth0 4. 4.可以结合这篇帖子来看   http://www.cnblogs.com/zydev/p/4 ...