我想过使用pygettext3 -d
,但是您必须在cmd中运行它。我不知道如何在代码中运行它。
而且我还需要操纵字符串,例如用_()
包围字符串以进行本地化(这就是gettext库的工作方式。
我的问题是:
def b (foo, bar):
if foo:
print ('FOOBAR')
elif bar:
print ('FOObar')
else:
print ('foobar')
raise ValueError ('fooBAR')
所以我很好奇如何提取类似'FOOBAR' 'FOObar' 'foobar' 'fooBAR'
的字符串。要保存它们的列表并对原始字符串进行处理,例如用_()包围它们。因此'FOObar'
变为_('FOObar' )
使用os模块将目录更改为文件夹。然后从中导入本地字符串文件。
import os
sys.chdir(directory_name)
from filename.locals import *
如果所有变量都是字符串,这将很有用。告诉这个技巧是否有效。
[我在this tutorial,reddit上的tutorial和r/kellyjonbrazil的帮助下找到了答案:
import ast
class MyTransformer (ast.NodeTransformer):
def visit_Str (self, node):
return ast.Str (node.s)
with open ('text.py', encoding = 'utf-8-sig') as f:
parsed = ast.parse (f.read ())
MyVisitor ().visit (parsed)
如果要列出其他基本类型的变量:
def visit_Import(self,node):
ast.NodeVisitor.generic_visit(self, node)
def visit_ImportFrom(self,node):
ast.NodeVisitor.generic_visit(self, node)
def visit_Assign(self,node):
print('Node type: Assign and fields: ', node._fields)
ast.NodeVisitor.generic_visit(self, node)
def visit_BinOp(self, node):
print('Node type: BinOp and fields: ', node._fields)
ast.NodeVisitor.generic_visit(self, node)
def visit_Expr(self, node):
print('Node type: Expr and fields: ', node._fields)
ast.NodeVisitor.generic_visit(self, node)
def visit_Num(self,node):
print('Node type: Num and fields: ', node._fields)
def visit_Name(self,node):
print('Node type: Name and fields: ', node._fields)
ast.NodeVisitor.generic_visit(self, node)
def visit_Str(self, node):
print('Node type: Str and fields: ', node._fields)