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