MessageFactory problem
Up to Plone Captchas
I was working with http://svn.quintagroup.com/products/qPloneCaptchas/tags/1.1.0 checkout today and noticed some problems with recently added i18n support. Plone-2.1.3 ships with PTS 1.3.1 which doesn't contain the module MessageID anymore. Inspired by eCampaigning product, I have adopted more general MessageFactory mechanism. Here is the diff against 1.1.0 SVN tag:
Index: __init__.py
===================================================================
--- __init__.py (revision 838)
+++ __init__.py (working copy)
@@ -1,6 +1,8 @@
+import logging
+from App.version_txt import getZopeVersion
from Products.CMFCore.DirectoryView import registerDirectory
from Products.CMFCore.utils import ToolInit
-from AccessControl import allow_module
+from AccessControl import allow_module,ModuleSecurityInfo
import config
import CaptchaTool
@@ -14,3 +16,21 @@
tools=tools,
product_name=config.PRODUCT_NAME,
icon=config.TOOL_ICON,).initialize(context)
+
+def MessageFactory(projectname):
+ "Get a i18n message factory"
+ vmajor, vminor, vmicro, vstatus, vrelease = getZopeVersion()
+ MessageFactory = lambda : "no message factory found"
+ if (vmajor > 2) or ((vmajor, vminor) == (2,9)):
+ from zope.i18nmessageid import MessageFactory
+ elif (vmajor, vminor) == (2,8):
+ from zope.i18nmessageid import MessageIDFactory as MessageFactory
+ else:
+ try:
+ from Products.PlacelessTranslationService.MessageID import MessageIDFactory as MessageFactory
+ except:
+ logging.info("[qPloneCaptchas] No i18n Message Factory found -> cannot provide translations!")
+ return MessageFactory(projectname.lower())
+
+ProductMessageFactory = MessageFactory('%s' % config.PRODUCT_NAME)
+ModuleSecurityInfo('Products.%s' % config.PRODUCT_NAME).declarePublic("ProductMessageFactory")
Index: skins/plone_captchas/dynamic/captcha_validator.vpy
===================================================================
--- skins/plone_captchas/dynamic/captcha_validator.vpy (revision 838)
+++ skins/plone_captchas/dynamic/captcha_validator.vpy (working copy)
@@ -1,3 +1,4 @@
+from Products.qPloneCaptchas import ProductMessageFactory
from Products.qPloneCaptchas.utils import decrypt, parseKey, \
encrypt1, getWord
from DateTime import DateTime
@@ -2,8 +3,2 @@
from Products.CMFCore.utils import getToolByName
-try:
- from Products.CMFPlone import MessageFactory
- _ = MessageFactory('qplonecaptchas')
-except ImportError:
- from Products.PlacelessTranslationService.MessageID import MassageIDFactory
- _ = MessageIDFactory('qplonecaptchas')
@@ -26,8 +21,8 @@
captcha_tool = getToolByName(context, 'portal_captchas')
if (enc != solution) or (captcha_tool.has_key(decrypted_key)) \
or (DateTime().timeTime() - float(date)>3600):
- state.setError('key', _("Please re-enter validation code."), 'key_required')
- return state.set(status="failure", portal_status_message = _("Please re-enter validation code."))
+ state.setError('key', ProductMessageFactory("Please re-enter validation code."), 'key_required')
+ return state.set(status="failure", portal_status_message = ProductMessageFactory("Please re-enter validation code."))
else:
captcha_tool.addExpiredKey(decrypted_key)
return state.set(status="success")
Index: skins/plone_captchas/static/captcha_validator.vpy
===================================================================
--- skins/plone_captchas/static/captcha_validator.vpy (revision 838)
+++ skins/plone_captchas/static/captcha_validator.vpy (working copy)
@@ -1,3 +1,4 @@
+from Products.qPloneCaptchas import ProductMessageFactory
from Products.CMFCore.utils import getToolByName
from Products.qPloneCaptchas.utils import decrypt, parseKey, \
encrypt1, getWord
@@ -2,8 +3,2 @@
from DateTime import DateTime
-try:
- from Products.CMFPlone import MessageFactory
- _ = MessageFactory('qplonecaptchas')
-except ImportError:
- from Products.PlacelessTranslationService.MessageID import MessageIDFactory
- _ = MessageIDFactory('qplonecaptchas')
@@ -28,8 +23,8 @@
captcha_tool = getToolByName(context, 'portal_captchas')
if (enc != solution) or (captcha_tool.has_key(decrypted_key)) \
or (DateTime().timeTime() - float(date)>3600):
- state.setError('key', _("Please re-enter validation code."), 'key_required')
- return state.set(status="failure", portal_status_message = _("Please re-enter validation code."))
+ state.setError('key', ProductMessageFactory("Please re-enter validation code."), 'key_required')
+ return state.set(status="failure", portal_status_message = ProductMessageFactory("Please re-enter validation code."))
else:
captcha_tool.addExpiredKey(decrypted_key)
return state.set(status="success")
