本地化简化。

localize-p的Python项目详细描述


本地化py

>>> _ = Translator('eng')
>>> _('about', why='Because it's simple')
'Localization module that requires no more than JSON files of fields.
- Why is it good?
- Because it's simple'

安装

^{pr2}$

注意

此模块滥用f字符串,因此有几个要求:

  • >;=Python 3.6
  • 对用户输入的极端意识-我个人不会将用户输入添加到变量中,除非我检查过。在
  • 有些符号需要JSON转义,例如:
    • \n->;\\n
    • {->;{
    • \->;\\
    • 以及类似的

下面是转义的例子。在

怎么做

--如何创建它们?在

--JSON文件,每种语言都有字典,不多不少。在

# /eng_file.json
{
    "Button1": "Return",
    "Button2": "Hello, {username}"
}
# /esp_file.json
{
    "Button1": "Volver",
    "Button2": "Hola, {username}"
}

--如何使用它们?在

--嗯,不比创造难多少。让我们考虑一个虚构的web应用程序:

from localize_py import Translator
def app_start():
    Translator.load_translations(eng='/eng_file.json', esp='/esp_file.json')

def handle_client_request(request):
    lang = get_client_lang_from_database(request)
    _ = Translator(lang)
    return _('Button1'), _('Button2', username=request.client.name)

这里有两个^{str1}$无意义函数-app_start和{}。 最好在应用程序开始时加载翻译文件,这就是app_start的原因。 load_translation是一个静态函数,它的名称完全符合您的期望。您可以将数据库中语言的短名称作为参数名传递给它,并将文件的路径作为值传递给它。 当您需要最终翻译文本时,只需使用正确的短名称初始化Translator的实例,然后更简单地将其作为函数调用并为目标字符串提供一个标记(key)。在

--那{username}那是什么意思?在

--您可以通过将变量作为键参数传递给__call__,就在字符串标记之后,将它们从代码替换为翻译。在

# /eng_file.json
{ "Button1": "Hello, {username}" }

# program.py
from localize_py import Translator
Translator.load_translations(eng='/eng_file.json')
_ = Translator('eng')
_('Button1', username='Alex')

# Output: "Hello, Alex"

俄语复数形式的附加功能

为了使俄语中的复数形式正确,可以在翻译中使用ru_plural函数:

/rus_file.json
{
  "some_plural": "Доступно {amount} {['акция', 'акции', 'акций'][self.ru_plural(amount)]}:\\n"
}

# program.py
from localize_py import Translator
Translator.load_translations(eng='/rus_file.json')
_ = Translator('rus')
_('some_plural', amount=25)

# Output: "Доступно 25 акций"

普通的API文档很快就会出现,但是,它已经在源代码中提供了,所以您的IDE将显示它。在

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

推荐PyPI第三方库


热门话题
具有未知数量条件的java If语句   java如何在Spark中使用两个“条件”进行过滤?   雅加达ee为ColdFusion提供的最佳Java ee服务器   java如何在jersey的MessageBodyWriter方法中获取writeTo中的anotations值?   java从脚本文件调用jar文件中的函数   java在执行insert语句后,如何获得id值为的语句?   在OS X上设置OpenCV Java绑定   java使用for循环遍历数组x。以字符串形式返回x的元素,其中每个元素由一个空格分隔   ApacheiClientBuilder为Algolia Java创建的APIClient是线程安全的吗?   java在DFS/BFS算法中获取邻居时避免内存分配?   java使用AES/CBC/PKCS5P加密大文件(2GB)   允许保存/加载列布局的Java DB网格组件   队列大小为1的java Spring调度   跑步带有Java参数的exe   java正则表达式将所有“<”和“>”标记替换为“&lt;”及“&gt;”在<<![CDATA]>标签?   java何时同步变量?