Personal tools
You are here: Home Forums Plone Captchas MessageFactory problem
Document Actions

MessageFactory problem

Up to Plone Captchas

MessageFactory problem

Posted by David Mudrak at April 09. 2007

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")


 


Powered by Ploneboard