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字符串中获取RATE的值   java ANT在哪里输出编译器错误?   在java中,while循环在何处启动对象   javacom。谷歌。格森。内部的LinkedTreeMap无法强制转换到我的类   java单选按钮。isSelected()方法未返回正确的响应   嵌入式系统中applet中的java相对码基字段   如何在eclipse中将Java应用程序附加到jvm探查器?   java为什么Android应用程序崩溃?   在java中拖放上传后保持文件夹结构   爪哇多领导人选举问题   java Springs RestTemplate如何处理postForEntity()中的错误响应   Java如何用前导零递增整数字符串?   java Android将文本作为图像共享给其他应用程序   Java搜索替换   java isDirectory()不适用于UNIX目录   java我们可以得到显示测试类是否通过或失败的TestNG报告吗   Java类对象排序和分组   简单Java幂递归   java在处理MethodArgumentNotValidException时如何访问请求对象?