python

您所在的位置:网站首页 函数实现英文 python

python

2023-01-05 07:57| 来源: 网络整理| 查看: 265

python-i18n / pythonweb国际化

​ 国际化可以方便我们以一种语言(英语)编写程序中的字符串,但是可以向不同国家的人提供对应的语言翻译,那么python语言如何实现国际化呢? python内置模块gettext为python模块和应用提供了国际化(i18n)和本地化支持,它既支持GNU-gettext的消息翻译,又提供了更适合python基于类的程序消息翻译接口。

一、 python-gettext (内置模块) 1.1 gettext生成翻译

GNU-gettext 提供C代码的国际化,GNU-gettext制定了翻译文件的格式,提供一个工具集(一系列命令)来解析文件。Windows用户可以从官网下载压缩包解压,Linux用户通过 yum install xgettext完成安装。完成国际化的一般步骤:

(1) gettext – 从源程序提取消息,生成翻译文件messages.pot (以 msgid/msgstr对组织), 修改msgstr对应的翻译; (2) msgfmt – 将 messages.pot编译成 messages.mo文件(一种格式标准,现在大家都遵守)。 (3) 程序配置时,需要指明mo文件位置,以供程序解析加载(类似字典对)。

​ GNU-gettext只提供C风格字符串(双引号)的识别,对于python特有的三引号和单引号那应该怎么办呢?其实我们要提取和编译也可以不用安装xgettext工具,在python安装目录下 ROOT_PYTHON/Tools/i18n 提供了这两个工具(没有可以在cpython源码中下载 py-i18n-tools),按照GNU-gettext标准, pygettext.py 来扫描python源码生成 pot文件,mgsfmt.py来编译pot文件生成 mo文件(有兴趣的朋友可以阅读了解下mo文件生成格式)。下面我们来使用python-gettext进行一下翻译:

(1) 编写源代码 app.py translation用来解析mo文件, 返回一个标准的GNUTranslations; gettext 用于从解析后的字典里取值,没有翻译值,则保持原样; from gettext import translation import os root_dir = os.path.join(os.path.dirname(__file__), "i18n") t = translation(domain="zh_CN", localedir=root_dir, languages=["zh"]) _ = t.gettext c_str = _("Hello World") py_str = _('Hello World, %s') % "app" (2) 提取源代码消息:

​ 生成的pot文件格式头由一对空msgid/msgstr组成,其后紧跟的一堆为文件的元信息,其中Content-Type用于说明文件格式及编码,中文请改为。

python pygettext.py app.py pot文件格式 / po文件格式: msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "POT-Creation-Date: 2021-11-27 23:37+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: pygettext.py 1.5\n" msgid "Hello World" msgstr "" (3) 编译pot文件: 修改messesges.pot文件的msgstr为对应中文翻译 messages.pot -> messages.po python msgfmt.py messages.po ​ 注意 文件结构 app.py | i18n/zh/LC_MESSAGES/zh_CN.mo | messages.po | messages.mo ​ 1.2 gettext模块详解:

mo文件位置拼接: localedir/languages[x]/LC_MESSAGES/domain.mo

(1) find函数: 功能说明:根据指定参数定位mo翻译文件位置 返回值:列表 [mo文件位置] 参数说明:参数说明domain/localedir翻译文件名称 / 语言文件根目录languages语言列表 不提供则在环境变量找 ‘LANGUAGE’, ‘LC_ALL’, ‘LC_MESSAGES’, ‘LANG’,找不到返回空列表all是否返回全部languages的mo文件位置,默认为False, 返回第一个找到的文件 (2) translation函数: 功能说明:翻译解析 返回值:翻译解析类(解析好的) 参数说明:参数说明domain/localedir/languages同上class_翻译类:默认是GNUTranslationsfallback是否回退,如果找不到mo文件,falllback为真返回NULLTranslations,否则抛出OSError异常 默认fallback为Falsecodeset输出翻译(msgstr)的编码 (3) NULLTranslations 功能:无行为翻译类,默认返回原始消息msgid 成员:成员说明_info/ info()mo文件头信息(元数据),由_parse()解析设置_charset / charset()msgstr编码,由_parse()解析头部content-type设置_output_charset_()调用时对msgstr的再编码,不提供设置,由子类继承设置_fallback / add_fallback()添加自定义NULLTranslations 子类,实现自定义翻译功能(回调预留)parse()mo文件解析,NULLTranslations 不提供实现,返回msgidgettext()/ lgettext()返回解析的msgstr / msgstr再编码(_output_chartset 或者系统默认)ngettext()/ lngettext()暂时未搞清(英语中的复数,对应不同翻译大概)install(names)将 , gettext, ngettext 注册到内置模块builtin,可直接使用而无需导入 默认只将_注册,names可选项列表[“gettext”, “ngettext”] (4) GNUTranslations 功能:标准mo文件解析类, 继承NULLTranslations, 实现_parse函数 成员:成员说明_catalogmsgid/msgstr键值对, 解析后的mo文件数据放在这里面_parse()完成mo文件解析 注意 GNUTranslations使用 NULLTranslations 的初始化函数,自身不提供init入口,重写了gettext相关函数。下节讲述另一个python国际化框架Babel。 本文代码地址:python-i18n.git

Original: https://blog.csdn.net/weixin_39517298/article/details/121593399Author: 没有梦想的咸鱼~Title: python-i18n / python国际化 / python-gettext / – pythonweb(5)

相关阅读 Title: YoloV7——配置YOLOV7(一) yolov7 文章目录 yolov7 前言 一、下载源代码 二、配置环境 * 1.设置虚拟环境 2.配置环境 3.设置权重文件 4.实验现象 总结 前言

yolov7已经发布一段时间了,今天来体验一下yolov7

一、下载源代码

推荐一个好用的工具

python-i18n / python国际化 / python-gettext / - pythonweb(5)steam++,有了它就不用担心进不去github了到github里搜索yolov7python-i18n / python国际化 / python-gettext / - pythonweb(5)

下载第一个,不方便的可以用这个链接:https://pan.baidu.com/s/1eT2dkvYJBxwIER1bGNtGZQ提取码:ytkm下载之后用pycharm打开

python-i18n / python国际化 / python-gettext / - pythonweb(5) ; 二、配置环境 1.设置虚拟环境

设置里有python解释器

python-i18n / python国际化 / python-gettext / - pythonweb(5)不知道怎么设置的可以去b站搜索一下,很简单 ; 2.配置环境

python-i18n / python国际化 / python-gettext / - pythonweb(5)

这个很良心都弄好的,比yolov5好用一些,直接运行这段代码就可以了,下载太慢运行下面这段代码

pip install -r requirements.txt -i https: 3.设置权重文件

python-i18n / python国际化 / python-gettext / - pythonweb(5)代码里需要权重文件,我们必须有这个权重文件才能运行代码。python-i18n / python国际化 / python-gettext / - pythonweb(5)这个在yolov7页面可以下载。然后就可以运行代码了python-i18n / python国际化 / python-gettext / - pythonweb(5)python-i18n / python国际化 / python-gettext / - pythonweb(5) ; 4.实验现象

python-i18n / python国际化 / python-gettext / - pythonweb(5)这就说明我们配置成功了 总结

简单的环境配置成功了,下面我们进行训练自己的数据集。

Original: https://blog.csdn.net/qq_51963216/article/details/125858784Author: 我与nanoTitle: YoloV7——配置YOLOV7(一)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/289579/

转载文章受原作者版权保护。转载请注明原作者出处!



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3