用于对字符串和po文件执行伪本地化的类和函数。
pseudol10nutil的Python项目详细描述
用于对字符串执行伪本地化的python模块。测试了python 2、python3、pypy和pypy3。
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文件。