Re: i18n-translation depending on document language

Samuel Schluep <[email protected]>
Newsgroups gmane.comp.web.zope.silva.devel
Message-ID <[email protected]>
Hi altogether

> Is it possible to translate specific strings by the help of the Five 
> machinery depending on the document's language setting. The standard 
> i18n procedure for Silva is targeted mainly at the translation of the 
> SMI. In my case, I would like to translate the label of a forms button 
> in a Silva extension which shows up on public pages. In this case it 
> makes more sense to set the language to the document's language rather 
> than the user preferences (set in either Silva's user settings or the 
> user's browser setting). This translation might be performed in a 
> Python Script.

I have just found a solution on my own. In case someone is interested, 
here it is:

In my helpers.py module I created the following function (the functions 
in helpers.py are enabled to be used in Python Scripts):

def translate_to_doc_lang(msgid, model):
    """Translate a messageid to the language of the document

    Translates a string to the language of the Silva object being rendered
    using the dlcms domain.
    Arguments:
    msgid -- a MessageId object containing the string and the domain
    model -- the Silva object being rendered
    """
    from zope.i18n import translate
    # get language setting of Silva object being rendered
    try:
        binding = model.service_metadata.getMetadata(model)
        lang = binding.get('silva-extra', 'language')
    except:
        # No binding found..
        lang = 'en'
    lang = lang.lower()  # silva-extra uses upper-case codes which do 
not translate
    return translate(msgid, target_language=lang)


In the script I then use something like the following (note I use this 
in the SilvaDLCMS extension product):

from Products.SilvaDLCMS.i18n import translate as _
from Products.SilvaDLCMS.helpers import translate_to_doc_lang
model = context.REQUEST.model
return '<input type="button" onClick="doSomething(this.form)" value=" ' +  \
           translate_to_doc_lang(_('press the button'), model) + \
           '" />'


Et voilà, the message is shown in the language specified by the language 
metadata setting, provided there is a translation somewhere.

Regards
Sam
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.