From 097ca9482ff2e9e85c0bfa4140d24dc22946cab6 Mon Sep 17 00:00:00 2001 From: Kevin Deldycke <kevin@nexedi.com> Date: Thu, 19 Jan 2006 15:13:15 +0000 Subject: [PATCH] Use Localizer instead of Translation Service git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@5177 20353a03-c40f-0410-a6d1-a30d3c3de9de --- product/ERP5Form/ListBox.py | 45 ++++++++++++++++------ product/ERP5Form/MultiRelationField.py | 19 +++++---- product/ERP5Form/RelationField.py | 17 ++++---- product/ERP5Type/Accessor/WorkflowState.py | 10 ++--- product/ERP5Type/Base.py | 41 ++++++++++---------- 5 files changed, 77 insertions(+), 55 deletions(-) diff --git a/product/ERP5Form/ListBox.py b/product/ERP5Form/ListBox.py index 8042b946b7..e3f84844be 100755 --- a/product/ERP5Form/ListBox.py +++ b/product/ERP5Form/ListBox.py @@ -545,7 +545,30 @@ class ListBoxWidget(Widget.Widget): else: list_action += '&reset=1' object_list = [] - translate = portal_object.translation_service.translate + + #translate = portal_object.translation_service.translate + # This translate() method has the same prototype as the one defined in Translation Service + global localizer, msg_catalog_binding + localizer = portal_object.Localizer + msg_catalog_binding = { "ui" : "erp5_ui" + , "content": "erp5_content" + } + def translate(domain, msgid, mapping=None, context=None, target_language=None, default=None): + global localizer, msg_catalog_binding + localizer_cat_id = None + if domain in msg_catalog_binding.keys(): + localizer_cat_id = msg_catalog_binding[domain] + else: + localizer_cat_id = domain + if localizer_cat_id not in localizer.objectIds(): + return msgid + localizer_cat = localizer[localizer_cat_id] + if default == None: + default = [] + return localizer_cat.gettext( message = msgid + , lang = None + , default = default + ) # Make sure list_result_item is defined list_result_item = [] @@ -885,7 +908,7 @@ class ListBoxWidget(Widget.Widget): select_expression = '' if show_stat: stats = here.portal_selections.getSelectionStats( - selection_name, + selection_name, REQUEST=REQUEST) index = 0 @@ -899,7 +922,7 @@ class ListBoxWidget(Widget.Widget): if (column is not None) and (column[0] == column[1]): try: if stats[index] != ' ': - select_expression += '%s(%s) AS %s,' % (stats[index], sql, + select_expression += '%s(%s) AS %s,' % (stats[index], sql, alias) else: select_expression += '\' \' AS %s,' % alias @@ -1185,7 +1208,7 @@ class ListBoxWidget(Widget.Widget): <td nowrap valign="middle" align="center"> <select name="list_start" title="%s" size="1" onChange="submitAction(this.form,'%s/portal_selections/setPage')"> -""" % (portal_url_string, translate('ui', 'Previous Page', default='Previous Page'), +""" % (portal_url_string, translate('ui', 'Previous Page', default='Previous Page'), translate('ui', 'Change Page', default='Change Page'), REQUEST.URL1)) for p in range(0, total_pages): if p == current_page: @@ -1225,18 +1248,18 @@ class ListBoxWidget(Widget.Widget): 'selection_name' : selection_name, 'field_title' : translate('ui', field_title, default = field_title), 'pages' : pages, - 'record_number' : translate('ui', '${number} record(s)', + 'record_number' : translate('ui', '${number} record(s)', default = '%s record(s)' % total_size, mapping = { 'number' : str(total_size) }), - 'item_number' : translate('ui', '${number} item(s) selected', + 'item_number' : translate('ui', '${number} item(s) selected', default = '%s item(s) selected' % \ len(checked_uids), mapping = { 'number' : \ str(len(checked_uids)) }), 'flat_list_title': translate('ui', 'Flat List', default='Flat List'), - 'report_tree_title': translate('ui', 'Report Tree', + 'report_tree_title': translate('ui', 'Report Tree', default = 'Report Tree'), - 'domain_tree_title': translate('ui', 'Domain Tree', + 'domain_tree_title': translate('ui', 'Domain Tree', default = 'Domain Tree'), } header_list = [] @@ -1796,7 +1819,7 @@ onChange="submitAction(this.form,'%s/portal_selections/setReportRoot')"> ######################################################################### object_url = None # Try to get a link - # Check if url_columns defines a method + # Check if url_columns defines a method # to retrieve the URL. url_method = None for column in url_columns: @@ -1810,7 +1833,7 @@ onChange="submitAction(this.form,'%s/portal_selections/setReportRoot')"> except (ConflictError, RuntimeError): raise except: - LOG('ListBox', 0, + LOG('ListBox', 0, 'Could not evaluate url_method %s' % \ column[1], error=sys.exc_info()) pass @@ -1955,7 +1978,7 @@ onChange="submitAction(this.form,'%s/portal_selections/setReportRoot')"> if render_format == 'list': - #listboxline_list.append(current_listboxline) + #listboxline_list.append(current_listboxline) #LOG('ListBox', 0, 'listboxline_list: %s' % str(listboxline_list) ) return listboxline_list diff --git a/product/ERP5Form/MultiRelationField.py b/product/ERP5Form/MultiRelationField.py index 24d8b299ad..68b4c2cd38 100755 --- a/product/ERP5Form/MultiRelationField.py +++ b/product/ERP5Form/MultiRelationField.py @@ -439,20 +439,19 @@ class MultiRelationStringFieldValidator(Validator.LinesValidator, RelationField # Get the query results relation_list = portal_catalog(**kw) relation_uid_list = map(lambda x: x.uid, relation_list) - translation_service = getToolByName(field, - 'translation_service', - None) + localizer = getToolByName( field + , 'Localizer' + , None + ) + N_ = localizer.erp5_ui.gettext # Prepare a menu - if translation_service is not None: - N_ = translation_service.translate - else : - N_ = lambda catalog, msg, **kw:msg menu_item_list = [('', '')] new_object_menu_item_list = [] for p in portal_type: - new_object_menu_item_list += [(N_('ui', 'New ${portal_type}', - mapping={'portal_type':N_('ui', p)}), - '%s%s' % (new_content_prefix,p))] + new_object_menu_item_list += [ ( N_('New %s') % (N_(p)) + , '%s%s' % (new_content_prefix,p) + ) + ] if len(relation_list) >= MAX_SELECT: # If the length is long, raise an error diff --git a/product/ERP5Form/RelationField.py b/product/ERP5Form/RelationField.py index 991bb5c945..f455b9c7aa 100755 --- a/product/ERP5Form/RelationField.py +++ b/product/ERP5Form/RelationField.py @@ -321,11 +321,11 @@ class RelationStringFieldValidator(Validator.StringValidator): # If the value is different, build a query portal_selections = getToolByName(field, 'portal_selections') portal_catalog = getToolByName(field, 'portal_catalog') - translation_service = getToolByName(field, 'translation_service', None) - if translation_service is not None: - N_ = translation_service.translate - else : - N_ = lambda catalog, msg, **kw:msg + localizer = getToolByName( field + , 'Localizer' + , None + ) + N_ = localizer.erp5_ui.gettext # Get the current value value = Validator.StringValidator.validate(self, field, key, REQUEST) # If the value is the same as the current field value, do nothing @@ -384,9 +384,10 @@ class RelationStringFieldValidator(Validator.StringValidator): menu_item_list = [('', '')] new_object_menu_item_list = [] for p in portal_type: - new_object_menu_item_list += [(N_('ui', 'New ${portal_type}', - mapping={'portal_type':N_('ui', p)}), - '%s%s' % (new_content_prefix,p))] + new_object_menu_item_list += [ ( N_('New %s') % (N_(p)) + , '%s%s' % (new_content_prefix,p) + ) + ] # If the length is 1, return uid if len(relation_list) == 1: relation_uid = relation_uid_list[0] diff --git a/product/ERP5Type/Accessor/WorkflowState.py b/product/ERP5Type/Accessor/WorkflowState.py index 4ef0547c33..e8fbb9a2ac 100755 --- a/product/ERP5Type/Accessor/WorkflowState.py +++ b/product/ERP5Type/Accessor/WorkflowState.py @@ -62,7 +62,7 @@ class Getter(Method): class TitleGetter(Method): """ Gets the title of the current state - """ + """ _need__name__=1 # Generic Definition of Method Object @@ -92,10 +92,10 @@ class TranslatedGetter(Getter): def __call__(self, instance): portal_workflow = getToolByName(instance, 'portal_workflow') - translation_service = getToolByName(instance, 'translation_service') + localizer = getToolByName(instance, 'Localizer') wf = portal_workflow.getWorkflowById(self._key) state_id = wf._getWorkflowStateOf(instance, id_only=1) - return translation_service.translate('ui', state_id).encode('utf8') + return localizer.erp5_ui.gettext(state_id).encode('utf8') psyco.bind(__call__) @@ -106,9 +106,9 @@ class TranslatedTitleGetter(TitleGetter): def __call__(self, instance): portal_workflow = getToolByName(instance, 'portal_workflow') - translation_service = getToolByName(instance, 'translation_service') + localizer = getToolByName(instance, 'Localizer') wf = portal_workflow.getWorkflowById(self._key) state_title = wf._getWorkflowStateOf(instance).title - return translation_service.translate('ui', state_title).encode('utf8') + return localizer.erp5_ui.gettext(state_title).encode('utf8') psyco.bind(__call__) diff --git a/product/ERP5Type/Base.py b/product/ERP5Type/Base.py index 297ffd9ce5..f80c07d8df 100755 --- a/product/ERP5Type/Base.py +++ b/product/ERP5Type/Base.py @@ -160,7 +160,7 @@ def initializePortalTypeDynamicProperties(self, klass, ptype): if getattr(parent_klass, 'isRADContent', 0) and \ (ptype != parent_type or klass != parent_klass) and \ not Base.aq_portal_type.has_key(parent_type): - initializePortalTypeDynamicProperties(parent_object, parent_klass, + initializePortalTypeDynamicProperties(parent_object, parent_klass, parent_type) # Initiatise portal_type properties (XXX) ptype_object = getattr(aq_base(self.portal_types), ptype, None) @@ -170,7 +170,7 @@ def initializePortalTypeDynamicProperties(self, klass, ptype): if (ptype_object is not None) and \ (ptype_object.meta_type == 'ERP5 Type Information'): # Make sure this is an ERP5Type object - ps_list = map(lambda p: getattr(PropertySheet, p, None), + ps_list = map(lambda p: getattr(PropertySheet, p, None), ptype_object.property_sheet_list) ps_list = filter(lambda p: p is not None, ps_list) # Always append the klass.property_sheets to this list (for compatibility) @@ -184,7 +184,7 @@ def initializePortalTypeDynamicProperties(self, klass, ptype): property_sheet_definition_dict = { '_properties': prop_list, '_categories': cat_list, - '_constraints': constraint_list + '_constraints': constraint_list } for ps_property_name, current_list in \ property_sheet_definition_dict.items(): @@ -193,7 +193,7 @@ def initializePortalTypeDynamicProperties(self, klass, ptype): if type(ps_property) in (type(()), type([])): current_list += ps_property else : - raise ValueError, "%s is not a list for %s" % (ps_property_name, + raise ValueError, "%s is not a list for %s" % (ps_property_name, base) if (ptype_object is not None) and \ @@ -339,7 +339,7 @@ class Base( CopyContainer, PortalContent, ActiveObject, ERP5PropertyManager ): isDelivery = 0 # isIndexable = 1 # If set to 0, reindexing will not happen (useful for optimization) isPredicate = 0 # - + # Dynamic method acquisition system (code generation) aq_method_generated = {} aq_portal_type = {} @@ -481,7 +481,7 @@ class Base( CopyContainer, PortalContent, ActiveObject, ERP5PropertyManager ): # Utils def _getCategoryTool(self): return aq_inner(self.getPortalObject().portal_categories) - + def _getTypesTool(self): return aq_inner(self.getPortalObject().portal_types) @@ -1164,12 +1164,12 @@ class Base( CopyContainer, PortalContent, ActiveObject, ERP5PropertyManager ): return cache[key] except KeyError: pass - + result = self.portal_url.getPortalObject() - + if cache is not None: cache[key] = result - + return result security.declareProtected(Permissions.AccessContentsInformation, 'getWorkflowIds') @@ -1351,11 +1351,11 @@ class Base( CopyContainer, PortalContent, ActiveObject, ERP5PropertyManager ): spec=spec, filter=filter, portal_type=portal_type, strict_membership=strict_membership) - + security.declareProtected( Permissions.AccessContentsInformation, 'getRelatedPropertyList' ) getRelatedPropertyList = _getRelatedPropertyList - + security.declareProtected( Permissions.View, 'getValueUids' ) def getValueUids(self, id, spec=(), filter=None, portal_type=()): uid_list = [] @@ -1590,9 +1590,8 @@ class Base( CopyContainer, PortalContent, ActiveObject, ERP5PropertyManager ): security.declareProtected(Permissions.View, 'getTranslatedTitle') def getTranslatedTitle(self): """Returns the translated title. """ - translation_service = getToolByName(self, 'translation_service') - return translation_service.translate('content', - unicode(self.getTitle(), 'utf8')).encode('utf8') + localizer = getToolByName(self, 'Localizer') + return localizer.erp5_content.gettext(unicode(self.getTitle(), 'utf8')).encode('utf8') # This method allows to sort objects in list is a more reasonable way security.declareProtected(Permissions.View, 'getIntId') @@ -1637,8 +1636,8 @@ class Base( CopyContainer, PortalContent, ActiveObject, ERP5PropertyManager ): This returns the translated portal_type """ portal_type = self.portal_type - translation_service = getToolByName(self, 'translation_service') - return translation_service.translate('ui', portal_type).encode('utf8') + localizer = getToolByName(self, 'Localizer') + return localizer.erp5_ui.gettext(portal_type).encode('utf8') security.declareProtected(Permissions.ModifyPortalContent, 'setPortalType') def setPortalType(self, portal_type = None): @@ -1819,8 +1818,8 @@ class Base( CopyContainer, PortalContent, ActiveObject, ERP5PropertyManager ): Reindexes an object args / kw required since we must follow API """ - self._reindexObject(*args, **kw) - + self._reindexObject(*args, **kw) + def _reindexObject(self, *args, **kw): # When the activity supports group methods, portal_catalog/catalogObjectList is called instead of # immediateReindexObject. @@ -1986,18 +1985,18 @@ class Base( CopyContainer, PortalContent, ActiveObject, ERP5PropertyManager ): if script is not None: return script() return None - + def _getAcquireLocalRoles(self): """ This methods the value of acquire_local_roles of the object's portal_type True means, local roles are acquired, which is the standard behavior of Zope objects. False means that the role acquisition chain is cut. - + The code to support this is in the user folder. """ def cashed_getAcquireLocalRoles(portal_type): return self._getTypesTool()[self.getPortalType()].acquire_local_roles - + cashed_getAcquireLocalRoles = CachingMethod(cashed_getAcquireLocalRoles, id='Base__getAcquireLocalRoles') return cashed_getAcquireLocalRoles(portal_type=self.getPortalType()) -- 2.30.9