编写 babel 消息解析器和文件扩展名
Writing a babel message parser and file extension
我想让 babel 解析文件并找出以以下内容开头的翻译字符串:
(_
并结束于:
)
所以 file.myext
中的翻译部分可以是:
(_ "message")
字符串文字始终以双引号 (") 开头和结尾。
有一些参考:http://babel.pocoo.org/en/latest/messages.html?highlight=parser
但这似乎是一件极其复杂的事情。有人可以提供一个简单的例子来为具有上述约束的 babel 实现自己的消息提取器吗?
我可以从以下位置找到 Jinja2 解析器:https://github.com/pallets/jinja/blob/99498320871a290f5799d4f96a7774fc8a34381e/jinja2/ext.py
但是啊?!
Django 项目也有自己的提取器:https://github.com/python-babel/django-babel/blob/master/django_babel/extract.py
这些看起来很复杂的原因是因为它们使用 lexical analysis(又名 "lexers")来解析输入并找到字符串。这可能看起来过于复杂,但它是计算机科学的一个非常成熟的领域,也是完成这项工作的正确工具。大多数初学者从此类任务的正则表达式和自定义代码开始,如果他们坚持并从可用的内容中学习,最终会得到词法分析器和解析器。
对于您自己的定义,您正在寻找:
- 左括号
(
- 一个下划线
_
- 零个或多个白色space 字符(space、换行符、制表符等)
- 一个双引号
"
- 您要提取的一些文本
- 结束语
"
- 零个或多个白色space 个字符
- 一个结束括号
)
这对 many lexing / parsing libraries in Python 来说是个大问题,也是介绍这项技术的完美方式。
您还需要考虑其他一些情况:
(_ 'single quotes')
(_ '''multi
line
quotes''')
(_ "strings with \"escaped quotes\".")
(_ "strings with 'mixed quotes'")
(_ "strings that are just wrong')
我想让 babel 解析文件并找出以以下内容开头的翻译字符串:
(_
并结束于:
)
所以 file.myext
中的翻译部分可以是:
(_ "message")
字符串文字始终以双引号 (") 开头和结尾。
有一些参考:http://babel.pocoo.org/en/latest/messages.html?highlight=parser
但这似乎是一件极其复杂的事情。有人可以提供一个简单的例子来为具有上述约束的 babel 实现自己的消息提取器吗?
我可以从以下位置找到 Jinja2 解析器:https://github.com/pallets/jinja/blob/99498320871a290f5799d4f96a7774fc8a34381e/jinja2/ext.py
但是啊?!
Django 项目也有自己的提取器:https://github.com/python-babel/django-babel/blob/master/django_babel/extract.py
这些看起来很复杂的原因是因为它们使用 lexical analysis(又名 "lexers")来解析输入并找到字符串。这可能看起来过于复杂,但它是计算机科学的一个非常成熟的领域,也是完成这项工作的正确工具。大多数初学者从此类任务的正则表达式和自定义代码开始,如果他们坚持并从可用的内容中学习,最终会得到词法分析器和解析器。
对于您自己的定义,您正在寻找:
- 左括号
(
- 一个下划线
_
- 零个或多个白色space 字符(space、换行符、制表符等)
- 一个双引号
"
- 您要提取的一些文本
- 结束语
"
- 零个或多个白色space 个字符
- 一个结束括号
)
这对 many lexing / parsing libraries in Python 来说是个大问题,也是介绍这项技术的完美方式。
您还需要考虑其他一些情况:
(_ 'single quotes')
(_ '''multi
line
quotes''')
(_ "strings with \"escaped quotes\".")
(_ "strings with 'mixed quotes'")
(_ "strings that are just wrong')