用于对字符串和po文件执行伪本地化的类和函数。

pseudol10nutil的Python项目详细描述


用于对字符串执行伪本地化的python模块。测试了python 2、python3、pypy和pypy3。

安装

该模块位于PyPI上,可通过pip

安装

pip install pseudol10nutil

依赖关系

此包具有以下外部依赖项:

  • six-对于python 2到3的兼容性

PseudoL10nUtil

类的伪本地化字符串。该类当前有以下成员:

  • transforms-包含要应用于字符串的转换列表的字段。转换将按顺序应用。默认值是[transliterate_diacritic, pad_length, square_brackets]
  • pseudolocalize(s)-返回一个新字符串的方法,其中已应用到输入字符串s的转换。

pseudol10nutil.transforms模块

以下转换当前可用:

  • transliterate_diacritic-获取输入字符串并返回添加了变音符号的副本,例如Hello->;Ȟêĺĺø
  • transliterate_circled-获取输入字符串并返回一个带圆圈的字母副本,例如Hello->;Ⓗⓔⓛⓛⓞ
  • transliterate_fullwidth-获取输入字符串并返回一个副本,其中的字母转换为全宽对应的字母,例如Hello->;Hello
  • pad_length-在输入字符串的末尾追加一系列字符,以增加每个IBM Globalization Design Guideline A3: UI Expansion的字符串长度。
  • angle_brackets-用“《和》”字符包围输入字符串。
  • curly_brackets-用“”和“”字符包围输入字符串。
  • square_brackets-用“”和“”字符包围输入字符串。

格式字符串支持

对字符串执行伪本地化时,进程将跳过对格式字符串执行伪本地化。支持python样式的格式字符串(例如{foo})和printf样式的格式字符串(例如%s)。例如:

Input [1]: Source {source1} returned 0 rows.
Output [1]: '⟦Șøüȓċê {source1} ȓêťüȓñêđ 0 ȓøẁš.﹎ЍאdžᾏⅧ㈴㋹퓛ﺏ??﹎ЍאdžᾏⅧ㈴㋹⟧

Input [2]: Source %(source2)s returned 1 row.
Output [2]: ⟦Șøüȓċê %(source2)s ȓêťüȓñêđ 1 ȓøẁ.﹎ЍאdžᾏⅧ㈴㋹퓛ﺏ??﹎ЍאdžᾏⅧ㈴㋹퓛⟧

Input [3]: Source %s returned %d rows.
Output [3]: ⟦Șøüȓċê %s ȓêťüȓñêđ %d ȓøẁš.﹎ЍאdžᾏⅧ㈴㋹퓛ﺏ??﹎ЍאdžᾏⅧ㈴㋹퓛ﺏ⟧

示例用法

python 3示例:

>>> from pseudol10nutil import PseudoL10nUtil
>>> util = PseudoL10nUtil()
>>> s = u"The quick brown fox jumps over the lazy dog."
>>> util.pseudolocalize(s)
'⟦Ťȟê ʠüıċǩ ƀȓøẁñ ƒøẋ ǰüɱƥš øṽêȓ ťȟê ĺàźÿ đøğ.﹎ЍאdžᾏⅧ㈴㋹퓛ﺏ??﹎ЍאdžᾏⅧ㈴㋹퓛ﺏ??﹎Ѝא⟧'
>>> import pseudolocalize.transforms
>>> util.transforms = [pseudol10nutil.transforms.transliterate_fullwidth, pseudol10nutil.transforms.curly_brackets]
>>> util.pseudolocalize(s)
'❴The quick brown fox jumps over the lazy dog.❵'
>>> util.transforms = [pseudol10nutil.transforms.transliterate_circled, pseudol10nutil.transforms.pad_length, pseudol10nutil.transforms.angle_brackets]
>>> util.pseudolocalize(s)
'《Ⓣⓗⓔ ⓠⓤⓘⓒⓚ ⓑⓡⓞⓦⓝ ⓕⓞⓧ ⓙⓤⓜⓟⓢ ⓞⓥⓔⓡ ⓣⓗⓔ ⓛⓐⓩⓨ ⓓⓞⓖ.﹎ЍאdžᾏⅧ㈴㋹퓛ﺏ??﹎ЍאdžᾏⅧ㈴㋹퓛ﺏ??﹎Ѝא》'

示例Web应用程序

examples/webapp/目录中有一个示例web应用程序,它为伪本地化字符串提供了web ui和rest端点。这个例子也可以在Docker hub上找到。

Docker容器运行后,可以通过以下URL访问Web用户界面:

http://localhost:8080/pseudol10nutil/

可以按如下方式访问rest端点:

>>> import pprint
>>> import requests
>>> strings = { "s1": "The quick brown {0} jumps over the lazy {1}.", }
>>> data = { "strings": strings }
>>> headers = { "Accept": "application/json", "Content-Type": "application/json" }
>>> api_url = "http://localhost:8080/pseudol10nutil/api/v1.0/pseudo"
>>> resp = requests.post(api_url, headers=headers, json=data)
>>> resp.status_code
200
>>> pprint.pprint(resp.json())
{'strings': {'s1': '⟦Ťȟê ʠüıċǩ ƀȓøẁñ {0} ǰüɱƥš øṽêȓ ťȟê ĺàźÿ '
                   '{1}.﹎ЍאdžᾏⅧ㈴㋹퓛ﺏ??﹎ЍאdžᾏⅧ㈴㋹퓛ﺏ??﹎Ѝא⟧'}}

POFileUtil

类对.po(可移植对象)消息目录执行伪本地化。目前这个类只有一个方法,pseudolocalizefile(input_file, output_file, input_encoding='UTF-8',output_encoding='UTF-8', overwrite_existing=True)

默认转换将应用于输入文件中的字符串。要重写此行为,请使用所需的行为创建PseudoL10nUtil类的实例,并在调用pseudolocalizefile()方法之前将其分配给l10nutil字段。

示例用法

使用pypy3:

>>>> from pseudol10nutil import POFileUtil
>>>> pofileutil = POFileUtil()
>>>> input_file = "./testdata/locales/helloworld.pot"
>>>> output_file = "./testdata/locales/eo/LC_MESSAGES/helloworld_pseudo.po"
>>>> pofileutil.pseudolocalizefile(input_file, output_file)
>>>> with open(input_file, mode="r") as fileobj:
....     for line in fileobj:
....         if line.startswith("msgstr"):
....             print(line)
....
msgstr ""

msgstr ""

msgstr ""

>>>> with open(output_file, mode="r") as fileobj:
....     for line in fileobj:
....         if line.startswith("msgstr"):
....             print(line)
....
msgstr ""

msgstr "⟦Ẃȟàť ıš ÿøüȓ ñàɱê?: ﹎ЍאdžᾏⅧ㈴㋹퓛ﺏ??﹎ЍאdžᾏⅧ㈴㋹⟧"

msgstr "⟦Ȟêĺĺø {0}!﹎ЍאdžᾏⅧ㈴㋹퓛ﺏ??﹎ЍאdžᾏⅧ㈴㋹⟧"

>>>> from pseudol10nutil import PseudoL10nUtil
>>>> util = PseudoL10nUtil()
>>>> import pseudol10nutil.transforms
>>>> util.transforms = [pseudol10nutil.transforms.transliterate_circled, pseudol10nutil.transforms.pad_length]
>>>> pofileutil.l10nutil = util
>>>> pofileutil.pseudolocalizefile(input_file, output_file)
>>>> with open(output_file, mode="r") as fileobj:
....     for line in fileobj:
....         if line.startswith("msgstr"):
....             print(line)
....
msgstr ""

msgstr "Ⓦⓗⓐⓣ ⓘⓢ ⓨⓞⓤⓡ ⓝⓐⓜⓔ?: ﹎ЍאdžᾏⅧ㈴㋹퓛ﺏ??﹎ЍאdžᾏⅧ㈴㋹"

msgstr "Ⓗⓔⓛⓛⓞ {0}!﹎ЍאdžᾏⅧ㈴㋹퓛ﺏ??﹎ЍאdžᾏⅧ㈴㋹"

>>>>

许可证

这是根据麻省理工学院的许可证发布的。有关详细信息,请参阅此存储库中的LICENSE文件。

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

推荐PyPI第三方库


热门话题
java jogl列出所有图形设备   Java调度任务。保持重新启动   wsdl JAXB XmlID和XmlIDREF注释(从模式到Java)   java我可以使用带有LEMP的DigitalOcean上的JSP页面吗?   互操作如何将类型化集合从clojure传递到java?   java MinMax算法工作不正常   返回“未找到匹配索引”的java Google云数据存储   spring设计从一个平面文件中读取100K记录,并用Java将其处理到DB   java如何使用arraylist中先前定义的类   java我们如何为从internet下载的项目构建jar   我正在用java编写一个程序,它可以打印从1到x的数字(x是用户输入值)。这是使用for循环和方法语句   安卓中java代码的语法错误   泛型Java方法接受vararg并返回arraylist?