Commit 31c716d9 authored by Yusei Tahara's avatar Yusei Tahara

2008-08-27 yusei

* Improve pot file export.

git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@23197 20353a03-c40f-0410-a6d1-a30d3c3de9de
parent 191f84bd
...@@ -11,7 +11,7 @@ def getPropertySheetAttributeList(name): ...@@ -11,7 +11,7 @@ def getPropertySheetAttributeList(name):
def getActionTitleListFromAllActionProvider(portal): def getActionTitleListFromAllActionProvider(portal):
result = {} result = []
provider_list = [] provider_list = []
for provider_id in portal.portal_actions.listActionProviders(): for provider_id in portal.portal_actions.listActionProviders():
if provider_id in ('portal_types', 'portal_workflow'): if provider_id in ('portal_types', 'portal_workflow'):
...@@ -24,13 +24,16 @@ def getActionTitleListFromAllActionProvider(portal): ...@@ -24,13 +24,16 @@ def getActionTitleListFromAllActionProvider(portal):
for typeinfo in portal.portal_types.objectValues(): for typeinfo in portal.portal_types.objectValues():
provider_list.append(typeinfo) provider_list.append(typeinfo)
for action in provider.listActions(): for provider in provider_list:
result[action.title] = None for action in provider.listActions():
return result.keys() result.append((action.title, provider.getId()))
return result
from StringIO import StringIO from StringIO import StringIO
from TAL.HTMLTALParser import HTMLTALParser from TAL.HTMLTALParser import HTMLTALParser
from TAL.TALParser import TALParser
from TAL.TALGenerator import TALGenerator
def findStaticTranslationText(page_template): def findStaticTranslationText(page_template):
def iterate(node, target_name, function): def iterate(node, target_name, function):
if type(node) is list: if type(node) is list:
...@@ -56,7 +59,12 @@ def findStaticTranslationText(page_template): ...@@ -56,7 +59,12 @@ def findStaticTranslationText(page_template):
if interpreter._i18n_message_id_dict is not None: if interpreter._i18n_message_id_dict is not None:
text_dict.update(interpreter._i18n_message_id_dict) text_dict.update(interpreter._i18n_message_id_dict)
parser = HTMLTALParser() if page_template.html():
generator = TALGenerator(xml=0)
parser = HTMLTALParser(generator)
else:
generator = TALGenerator(xml=1)
parser = TALParser(generator)
parser.parseString(page_template._text) parser.parseString(page_template._text)
iterate(parser.gen.program, 'insertTranslation', addText) iterate(parser.gen.program, 'insertTranslation', addText)
return text_dict.keys() return text_dict.keys()
...@@ -92,4 +100,3 @@ def setGuard(self, guard): ...@@ -92,4 +100,3 @@ def setGuard(self, guard):
self.guard = guard self.guard = guard
else: else:
raise ValueError, "not a TransitionDefinition" raise ValueError, "not a TransitionDefinition"
...@@ -21,6 +21,8 @@ class Visitor(compiler.visitor.ASTVisitor): ...@@ -21,6 +21,8 @@ class Visitor(compiler.visitor.ASTVisitor):
value = concatenate_add_const_value(arg) value = concatenate_add_const_value(arg)
if value is not None: if value is not None:
self.result.append(value) self.result.append(value)
for child_node in node.args:
self.preorder(child_node, self)
def concatenate_add_const_value(node): def concatenate_add_const_value(node):
...@@ -47,3 +49,34 @@ def getFunctionFirstArgumentValue(func_name, source): ...@@ -47,3 +49,34 @@ def getFunctionFirstArgumentValue(func_name, source):
visitor = Visitor(func_name) visitor = Visitor(func_name)
compiler.walk(ast, visitor) compiler.walk(ast, visitor)
return visitor.result return visitor.result
#
# Collect translation message from products
#
import os.path
import Products.ERP5
def findMessageListFromPythonInProduct(function_name_list):
product_dir = os.path.dirname(Products.ERP5.__path__[0])
erp5_product_list = ('CMFActivity', 'CMFCategory',
'ERP5', 'ERP5Banking', 'ERP5Catalog', 'ERP5Configurator',
'ERP5Form', 'ERP5OOo', 'ERP5Security', 'ERP5Subversion',
'ERP5SyncML', 'ERP5Type', 'ERP5Wizard', 'ERP5Workflow',
'HBTreeFolder2', 'MailTemplates', 'TimerService',
'ZMySQLDA', 'ZMySQLDDA', 'ZSQLCatalog',
)
result = []
def findStaticMessage(file_path):
source = open(file_path).read()
for func_name in function_name_list:
call_func_name = '%s(' % func_name
if call_func_name in source:
for m in getFunctionFirstArgumentValue(func_name, source):
result.append((m, file_path))
def visit(arg, dirname, filename_list):
for filename in filename_list:
if filename.endswith('.py'):
findStaticMessage(os.path.join(dirname, filename))
for product_name in erp5_product_list:
os.path.walk(os.path.join(product_dir, product_name), visit, None)
return result
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<tuple>
<global name="ExternalMethod" module="Products.ExternalMethod.ExternalMethod"/>
<tuple/>
</tuple>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>__ac_local_roles__</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>_function</string> </key>
<value> <string>findMessageListFromPythonInProduct</string> </value>
</item>
<item>
<key> <string>_module</string> </key>
<value> <string>PythonScriptParserUtility</string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>Base_findMessageListFromPythonInProduct</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
...@@ -92,12 +92,19 @@ def iterate(obj):\n ...@@ -92,12 +92,19 @@ def iterate(obj):\n
form_list.append(i)\n form_list.append(i)\n
elif i.meta_type==\'ListBox\' or i.id==\'listbox\':\n elif i.meta_type==\'ListBox\' or i.id==\'listbox\':\n
listbox_list.append(i)\n listbox_list.append(i)\n
elif i.meta_type==\'Page Template\' and i.content_type.startswith(\'text/html\'):\n elif i.meta_type in (\'Page Template\',\n
\'ERP5 PDF Template\',\n
\'ERP5 OOo Template\'):\n
page_template_list.append(i)\n page_template_list.append(i)\n
if i.isPrincipiaFolderish:\n if i.isPrincipiaFolderish:\n
iterate(i)\n iterate(i)\n
iterate(context.portal_skins)\n iterate(context.portal_skins)\n
\n \n
# Collect python script from workflow objects.\n
for workflow in context.portal_workflow.objectValues():\n
for i in workflow.scripts.objectValues():\n
if i.meta_type==\'Script (Python)\':\n
python_script_list.append(i)\n
\n \n
#\n #\n
# Python Script\n # Python Script\n
...@@ -116,6 +123,11 @@ for i in python_script_list:\n ...@@ -116,6 +123,11 @@ for i in python_script_list:\n
for m in Base_getFunctionFirstArgumentValue(func_name, source):\n for m in Base_getFunctionFirstArgumentValue(func_name, source):\n
add_message(m, portal_url.getRelativeContentURL(i))\n add_message(m, portal_url.getRelativeContentURL(i))\n
\n \n
#\n
# Python in Products\n
#\n
for message, path in context.Base_findMessageListFromPythonInProduct(FUNC_NAME_LIST):\n
add_message(message, path)\n
\n \n
#\n #\n
# ERP5 Form title\n # ERP5 Form title\n
...@@ -129,9 +141,9 @@ for i in form_list:\n ...@@ -129,9 +141,9 @@ for i in form_list:\n
#\n #\n
for i in listbox_list:\n for i in listbox_list:\n
add_message(i.title(), portal_url.getRelativeContentURL(i))\n add_message(i.title(), portal_url.getRelativeContentURL(i))\n
for value, label in i.get_value(\'columns\'):\n for value, label in i.get_value(\'columns\') or ():\n
add_message(label, portal_url.getRelativeContentURL(i))\n add_message(label, portal_url.getRelativeContentURL(i))\n
for value, label in i.get_value(\'all_columns\'):\n for value, label in i.get_value(\'all_columns\') or ():\n
add_message(label, portal_url.getRelativeContentURL(i))\n add_message(label, portal_url.getRelativeContentURL(i))\n
\n \n
#\n #\n
...@@ -146,6 +158,7 @@ for i in page_template_list:\n ...@@ -146,6 +158,7 @@ for i in page_template_list:\n
# Workflow\n # Workflow\n
#\n #\n
for i in context.portal_workflow.objectValues():\n for i in context.portal_workflow.objectValues():\n
add_message(i.title_or_id(), portal_url.getRelativeContentURL(i))\n
if not i.states:\n if not i.states:\n
continue\n continue\n
for s in i.states.values():\n for s in i.states.values():\n
...@@ -157,6 +170,8 @@ for i in context.portal_workflow.objectValues():\n ...@@ -157,6 +170,8 @@ for i in context.portal_workflow.objectValues():\n
for t in i.transitions.values():\n for t in i.transitions.values():\n
if t.actbox_name:\n if t.actbox_name:\n
add_message(t.actbox_name, portal_url.getRelativeContentURL(t))\n add_message(t.actbox_name, portal_url.getRelativeContentURL(t))\n
for worklist in i.worklists.objectValues():\n
add_message(worklist.actbox_name, portal_url.getRelativeContentURL(worklist))\n
\n \n
\n \n
#\n #\n
...@@ -169,8 +184,8 @@ for i in context.portal_types.objectValues():\n ...@@ -169,8 +184,8 @@ for i in context.portal_types.objectValues():\n
#\n #\n
# Action\n # Action\n
#\n #\n
for action_title in context.Base_getActionTitleListFromAllActionProvider(context.getPortalObject()):\n for action_title, action_provider_id in context.Base_getActionTitleListFromAllActionProvider(context.getPortalObject()):\n
add_message(action_title, \'action\')\n add_message(action_title, action_provider_id)\n
\n \n
\n \n
#\n #\n
...@@ -262,24 +277,28 @@ return printed\n ...@@ -262,24 +277,28 @@ return printed\n
<string>listbox_list</string> <string>listbox_list</string>
<string>page_template_list</string> <string>page_template_list</string>
<string>iterate</string> <string>iterate</string>
<string>FUNC_NAME_LIST</string>
<string>Base_getFunctionFirstArgumentValue</string>
<string>_getiter_</string> <string>_getiter_</string>
<string>workflow</string>
<string>i</string> <string>i</string>
<string>FUNC_NAME_LIST</string>
<string>Base_getFunctionFirstArgumentValue</string>
<string>source</string> <string>source</string>
<string>func_name</string> <string>func_name</string>
<string>call_func_name</string> <string>call_func_name</string>
<string>m</string> <string>m</string>
<string>message</string>
<string>path</string>
<string>value</string> <string>value</string>
<string>label</string> <string>label</string>
<string>Base_findStaticTranslationText</string> <string>Base_findStaticTranslationText</string>
<string>s</string> <string>s</string>
<string>t</string> <string>t</string>
<string>worklist</string>
<string>action_title</string> <string>action_title</string>
<string>action_provider_id</string>
<string>format</string> <string>format</string>
<string>MESSAGE_TEMPLATE</string> <string>MESSAGE_TEMPLATE</string>
<string>message_list</string> <string>message_list</string>
<string>message</string>
<string>_getitem_</string> <string>_getitem_</string>
<string>comment_list</string> <string>comment_list</string>
<string>append</string> <string>append</string>
...@@ -304,6 +323,12 @@ return printed\n ...@@ -304,6 +323,12 @@ return printed\n
<key> <string>id</string> </key> <key> <string>id</string> </key>
<value> <string>ERP5Site_getToBeTranslatedMessageListFromEntireSystemAsPot</string> </value> <value> <string>ERP5Site_getToBeTranslatedMessageListFromEntireSystemAsPot</string> </value>
</item> </item>
<item>
<key> <string>uid</string> </key>
<value>
<none/>
</value>
</item>
<item> <item>
<key> <string>warnings</string> </key> <key> <string>warnings</string> </key>
<value> <value>
......
2008-08-27 yusei
* Improve pot file export.
2008-06-16 Nicolas 2008-06-16 Nicolas
Add external Method to see Security for arbitrary user Add external Method to see Security for arbitrary user
......
320 321
\ No newline at end of file \ No newline at end of file
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment