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]

开发

测试

测试当前使用的是pytest

# 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
0

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java实现双锁并发队列   java如何更改SpringWS 2.4.4版或更高版本中maxOccurs的默认限制?   java Selenium RC如何处理动态行?   java何时引入Javac StringBuilder/StringBuffer优化?   java mediaplayer在R.raw Android上失败   java JPA2:不区分大小写,就像在任何地方匹配一样   如何从JDK15中提取java预览类文件?   java与mySQL删除查询不一致   从Shutdownow()返回的java列表<Runnable>无法转换为提交的Runnable   java如何从回调接口获取对象值?   java如何获得视图的高度,在xml中可见性和高度定义为wrap_内容?   postgresql Mybatis在启动时遇到“由以下原因引起:java.net.UnknownHostException:localhost”,为什么?   带有实例调用的方法调用的java intellij格式化程序换行   由于特定的第三方库,java Proguard产生运行时错误   动画JAVA JPanel同时滑出和滑入