Commit 4472929a authored by Cédric Le Ninivin's avatar Cédric Le Ninivin Committed by Cédric Le Ninivin

Translation: Workflow State can have specific translation by portal_type

parent 8264f0e4
from Products.ERP5Type.Utils import getMessageIdWithContext from Products.ERP5Type.Utils import getTranslatedWorkflowStateWithPortalType
supported_languages = context.Localizer.get_supported_languages() supported_languages = context.Localizer.get_supported_languages()
translated_keys = {} # This dict prevents entering the same key twice translated_keys = {} # This dict prevents entering the same key twice
...@@ -42,18 +42,13 @@ for portal_type in portal_type_list: ...@@ -42,18 +42,13 @@ for portal_type in portal_type_list:
# translate state title as well # translate state title as well
if state.getTitle() is not None and state.getTitle() != '': if state.getTitle() is not None and state.getTitle() != '':
state_var_title = '%s_title' % state_var state_var_title = '%s_title' % state_var
msg_id = getMessageIdWithContext(state.getTitle(), 'state', wf_id) translated_message, msg_id = getTranslatedWorkflowStateWithPortalType(context.Localizer, wf_id, lang, portal_type, state.getTitle())
translated_message = context.Localizer.erp5_ui.gettext(msg_id, default='', lang=lang).encode('utf-8')
if translated_message == '':
msg_id = state.getTitle()
translated_message = context.Localizer.erp5_ui.gettext(state.getTitle().decode('utf-8'), lang=lang).encode('utf-8')
key = (lang, portal_type.getId(), state_var_title, state_reference, msg_id) key = (lang, portal_type.getId(), state_var_title, state_reference, msg_id)
if key not in translated_keys: if key not in translated_keys:
translated_keys[key] = None # mark as translated translated_keys[key] = None # mark as translated
object_list.append(dict(language=lang, message_context=state_var_title, portal_type=portal_type.getId(), original_message=state_reference, object_list.append(dict(language=lang, message_context=state_var_title, portal_type=portal_type.getId(), original_message=state_reference,
translated_message=translated_message)) translated_message=translated_message))
if object_list: if object_list:
catalog_translation_list(object_list) catalog_translation_list(object_list)
......
...@@ -30,6 +30,7 @@ from __future__ import absolute_import ...@@ -30,6 +30,7 @@ from __future__ import absolute_import
from Products.ERP5Type.Utils import unicode2str from Products.ERP5Type.Utils import unicode2str
from Acquisition import aq_base from Acquisition import aq_base
from Products.ERP5Type.PsycoWrapper import psyco from Products.ERP5Type.PsycoWrapper import psyco
from Products.ERP5Type.Utils import getTranslatedWorkflowStateWithPortalType
from .Base import Getter as BaseGetter, Setter as BaseSetter from .Base import Getter as BaseGetter, Setter as BaseSetter
from warnings import warn from warnings import warn
...@@ -113,14 +114,13 @@ class TranslatedTitleGetter(TitleGetter): ...@@ -113,14 +114,13 @@ class TranslatedTitleGetter(TitleGetter):
wf = portal.portal_workflow._getOb(wf_id) wf = portal.portal_workflow._getOb(wf_id)
selected_language = localizer.get_selected_language() selected_language = localizer.get_selected_language()
state_title = wf._getWorkflowStateOf(instance).title state_title = wf._getWorkflowStateOf(instance).title
msg_id = '%s [state in %s]' % (state_title, wf_id) return getTranslatedWorkflowStateWithPortalType(
result = localizer.erp5_ui.gettext(msg_id, localizer,
lang=selected_language, self._key,
default='') selected_language,
if result == '': instance.getPortalType(),
result = localizer.erp5_ui.gettext(state_title, state_title
lang=selected_language) )[0]
return unicode2str(result)
psyco.bind(__call__) psyco.bind(__call__)
......
...@@ -376,6 +376,22 @@ def int2letter(i): ...@@ -376,6 +376,22 @@ def int2letter(i):
def getMessageIdWithContext(msg_id, context, context_id): def getMessageIdWithContext(msg_id, context, context_id):
return '%s [%s in %s]' % (msg_id, context, context_id) return '%s [%s in %s]' % (msg_id, context, context_id)
def getTranslatedWorkflowStateWithPortalType(localizer, workflow_id, lang,
portal_type, state_title):
for msg_id, default in [
(getMessageIdWithContext(state_title, 'state', portal_type), ''),
(getMessageIdWithContext(state_title, 'state', workflow_id), ''),
(state_title.decode('utf-8'), None),
]:
translated_message = localizer.erp5_ui.gettext(
msg_id,
default=default,
lang=lang
).encode('utf-8')
if translated_message:
return translated_message, msg_id
#Get translation of msg id #Get translation of msg id
def getTranslationStringWithContext(self, msg_id, context, context_id): def getTranslationStringWithContext(self, msg_id, context, context_id):
portal = self.getPortalObject() portal = self.getPortalObject()
......
...@@ -187,6 +187,7 @@ ModuleSecurityInfo('Products.ERP5Type.Utils').declarePublic( ...@@ -187,6 +187,7 @@ ModuleSecurityInfo('Products.ERP5Type.Utils').declarePublic(
'sortValueList', 'convertToUpperCase', 'UpperCase', 'sortValueList', 'convertToUpperCase', 'UpperCase',
'convertToMixedCase', 'cartesianProduct', 'sleep', 'getCommonTimeZoneList', 'convertToMixedCase', 'cartesianProduct', 'sleep', 'getCommonTimeZoneList',
'int2letter', 'getMessageIdWithContext', 'getTranslationStringWithContext', 'int2letter', 'getMessageIdWithContext', 'getTranslationStringWithContext',
'getTranslatedWorkflowStateWithPortalType',
'Email_parseAddressHeader', 'guessEncodingFromText', 'Email_parseAddressHeader', 'guessEncodingFromText',
'isValidTALESExpression', 'isValidTALESExpression',
'ensure_list', 'bytes2str', 'str2bytes', 'unicode2str', 'ensure_list', 'bytes2str', 'str2bytes', 'unicode2str',
......
...@@ -36,6 +36,7 @@ else: ...@@ -36,6 +36,7 @@ else:
# BBB keep Products.DCWorkflowGraph patch for a while as it solves a security issue # BBB keep Products.DCWorkflowGraph patch for a while as it solves a security issue
from AccessControl import ClassSecurityInfo from AccessControl import ClassSecurityInfo
from Products.ERP5Type.Globals import InitializeClass from Products.ERP5Type.Globals import InitializeClass
from Products.ERP5Type.Utils import getTranslatedWorkflowStateWithPortalType
from Products.ERP5Type import Permissions from Products.ERP5Type import Permissions
# Products.DCWorkflowGraph.config does not check the return value of # Products.DCWorkflowGraph.config does not check the return value of
...@@ -113,15 +114,9 @@ else: ...@@ -113,15 +114,9 @@ else:
localizer = obj.Localizer localizer = obj.Localizer
original_title = title original_title = title
for lang in localizer.get_supported_languages(): for lang in localizer.get_supported_languages():
msg_id = '%s [state in %s]' % (title, wf_id) translated_message, msg_id = getTranslatedWorkflowStateWithPortalType(
translated_title = localizer.erp5_ui.gettext( localizer, wf_id, lang, obj.getPortalType(), title
msg_id, )
lang=lang,
# Fallback on non-workflow state translation
default=localizer.erp5_ui.gettext(original_title,
lang=lang,
default=None))
if (translated_title is not None and if (translated_title is not None and
translated_title != original_title): translated_title != original_title):
......
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