i18n图书馆和应用服务
morphi的Python项目详细描述
形态
应用程序和库的可翻译文本。
什么是莫菲?
morphi 的诞生是因为需要创建一个内部本地化的可分发库 文本。尽管有几个处理可翻译文本的现有包,但它们都是 似乎专注于独立的应用程序;似乎很少有可用的 与打包的库一起分发的消息。
基础
morphi 是建立在从下面收集到的想法之上的:
< Buff行情>- 内置的gettext模块
- 巴贝尔
翻译
morphi 模块提供加载与gettext兼容的实用程序 来自本地文件系统或直接来自包的转换器。默认值 finder将首先尝试在本地文件系统中定位消息文件(允许 要在特定系统上重写的消息),但是,如果给定包名称, 然后将自动搜索包中的邮件文件。这允许一个库 将默认翻译消息存储在库包本身中,并且仍然具有 这些消息将在运行时成功加载。
morphi 模块主要围绕 babel 包,带有 speaklater 用于延迟查找。
消息管理
由于 morphi 模块是基于 babel 构建的,因此标准的 distutils 命令 由巴别塔提供,可供下游使用。这样, 标准 提取信息 , 初始目录 , 更新目录 ,以及 编译目录 所有命令都存在,并按照 babel文档中的说明工作
除了标准的 babel distutils 命令之外,还有一个 编译json 命令已添加。compile-json命令将把消息编译成 与 gettext.js javascript库。
在库中使用翻译
使用翻译的最简单方法是使用 管理器类 封装查找和gettext方法,并提供一种加载方法 实例化后的新消息文件(允许在 初始化)。
例如,假设您正在创建一个名为"mylib"的支持翻译的库。 以下内容可用于初始化和加载要使用的翻译。细节 关于"locales注册表",可在下面找到。
# import the translation libraryfrommorphi.messagesimportManagerfrommorphi.registryimportdefault_registry# instantiate the translations managertranslation_manager=Manager(package_name='mylib')# register the manager with the default locales registrydefault_registry.subscribe(translation_manager)# initialize shorter names for the gettext functionsgettext=translation_manager.gettextlazy_gettext=translation_manager.lazy_gettextlazy_ngettext=translation_manager.lazy_ngettextngettext=translation_manager.ngettext
注意,一般来说,对于给定的 包裹。建议将此代码添加到 extensions.py 或类似的 文件,从中可以将getText函数作为单例加载。
frommylib.extensionsimportgettextas_print(_('My translatable text'))
格式变量
getText函数都允许在 正在格式化转换的字符串。库当前支持新样式 。格式 键入格式。
print(_('Hello, {name}!',name='World'))
区域设置注册表
尤其是在与特定于包的翻译一起使用时, 当应用程序的语言 设置(特别是区域设置)被更改,以便正确的消息 可以加载和显示。为了简化此通知, 变形注册表默认的单例注册表 可以使用名为 的默认注册表。然后可以订阅或 取消订阅注册表,注册表将在 区域设置信息已更改。
frommorphi.registryimportdefault_registryaslocales_registrylocales_registry.locales='es'
通常,管理者应该在 它已被实例化。
如果使用jinja模板,则应该初始化jinja环境以添加 翻译功能。
frommorphi.helpers.jinjaimportconfigure_jinja_environmentconfigure_jinja_environment(app.jinja_env,manager)
{{_('Hello, world!')}}
javascript翻译
如上所述,库中添加了一个 compile-json distutils 命令, 它将把消息编译成与 messages.js 兼容的json文件。图书馆 可以按如下方式初始化和使用
<scriptsrc="{{url_for('mylib.static', filename='gettext.min.js')}}"></script><script>vari18n=window.i18n({});window._=function(msgid,domain){returni18n.dcnpgettext.apply(i18n,[domain,undefined,msgid,undefined,undefined].concat(Array.prototype.slice.call(arguments,1)));};{%setjson_filename=find_mo_filename(package_name='mylib',extension='json',localedir='static/i18n')%}{%ifjson_filename%}{#stripofftheleading'static/'portionofthefilename#}{%setjson_filename=json_filename[7:]%}$.getJSON('{{ url_for("mylib.static", filename=json_filename) }}').then(function(result){i18n.loadJSON(result,'mylib');});{%endif%}</script> . . . <p>_('Hello, world!', 'mylib')</p>
注意存在 find_mo_filename 函数;此函数可用 通过调用如上所述的配置jinja环境管理器方法。
安装
morphi 可以通过 pip安装:
pip install morphi
要安装以进行开发,只需添加 development 标记:
pip install morphi[develop]