[Pki-devel] [PATCH] 184 I18n for ProfileList.template.
Ade Lee
alee at redhat.com
Mon Dec 3 16:38:42 UTC 2012
Great explanation. thanks!
Lets use the latest jquery -- and find out a little more about any
license requirements.
ACK.
Ade
On Fri, 2012-11-30 at 23:44 -0600, Endi Sukma Dewata wrote:
> On 11/14/2012 8:23 AM, Endi Sukma Dewata wrote:
> > The messages in ProfileList.template in CA EE has been extracted
> > into a properties file which can be translated separately.
> >
> > The original messages in the template have been marked as follows:
> > <span class="message" name="...key...">...message...</span>
> >
> > When the page is loaded into the browser, the original message will
> > be replaced with the translated message.
> >
> > Ticket #406
>
> Just to clarify, this patch demonstrates how message customization could
> be done. A full solution will require many incremental patches due to
> the number of messages to be customized. Here is how it works.
>
> Previously a theme consist of HTML/Velocity templates, JS files, images
> and CSS files. The HTML/Velocity templates contain HTML code, JS code,
> paths to images/CSS files, and text messages.
>
> To create a custom theme we had to clone the default Dogtag theme, then
> customize the files as needed. Most of the time we'll only be changing
> the images, CSS, and messages, but we still have to duplicate everything
> in the theme. This becomes a maintenance issue because if we change
> anything in the default theme, the custom theme will not be updated
> automatically, and it could be hard to merge the changes.
>
> Recently we've been moving the templates and JS files out of the theme
> packages into the core packages because they are less likely to be
> changed, leaving just the images and CSS files in the theme. However,
> the messages are still part of the templates. To support customization
> we need to separate the messages from the templates.
>
> JQuery and jquery-i18n-properties are tools that we can use to load
> custom messages from a separate properties file and then replace the
> original messages in the template.
>
> Suppose we have a template which contains the following HTML code:
>
> <tr>
> <td>Dogtag</td>
> <td>
> The Dogtag Certificate System is an enterprise-class open
> source Certificate Authority.
> </td>
> </tr>
>
> To make the messages customizable we need to mark them. Here we are
> using a <span> which shouldn't be visible in the browser:
>
> <tr>
> <td>
> <span class="message" name="title">Dogtag</span>
> </td>
> <td>
> <span class="message" name="description">The Dogtag Certificate
> System is an enterprise-class open source Certificate
> Authority.</span>
> </td>
> </tr>
>
> The <span> element is assigned a class "message" which will be used to
> locate all messages. The element is also assigned a name which will be
> used as message key. The original message itself is left intact within
> the <span> to help visualize the page. Then we create a
> Messages.properties that maps the message keys to the actual messages:
>
> title = Dogtag
> description = The Dogtag Certificate System is an enterprise-class\
> open source Certificate Authority.
>
> The messages in the properties file can be customized as needed. Then
> we'll use the tools to load the custom messages and replace the original
> messages in the template:
>
> $.i18n.properties({
> name: 'Messages',
> ...
> callback: function() {
> var key;
> for (key in $.i18n.map) {
> var message = $.i18n.prop(key);
> $('span.message[name='+key+']').html(message);
> }
> }
> });
>
> After the browser finishes loading the page the $.i18n.properties() will
> run to load the custom messages from Messages.properties. Once they are
> loaded the callback() will run to replace all marked messages with the
> custom messages.
>
> There are 2 different purposes for message customization which require
> different strategies: branding and translation.
>
> If we're doing branding only, like the current implementation, we need
> to use separate properties for each theme, for example:
>
> Messages.properties - Dogtag theme
> Messages.properties - Other theme
>
> If we're doing translation only we need to use separate properties file
> for each language, for example:
>
> Messages.properties - Dogtag theme in English
> Messages_es.properties - Dogtag theme in Spanish
> Messages_fr.properties - Dogtag theme in French
>
> If we're doing both branding and translation the number of files will be
> multiplied:
>
> Messages.properties - Dogtag theme in English
> Messages_es.properties - Dogtag theme in Spanish
> Messages_fr.properties - Dogtag theme in French
>
> Messages.properties - Other theme in English
> Messages_es.properties - Other theme in Spanish
> Messages_fr.properties - Other theme in French
>
> One possible solution is to do the translation and branding separately
> using different message markers:
>
> <tr>
> <td>
> <span class="product" name="title">Dogtag</span>
> </td>
> <td>
> <span class="message" name="description">The <span
> class="product" name="long_title">Dogtag Certificate
> System</span> is an enterprise-class open source Certificate
> Authority.</span>
> </td>
> </tr>
>
> Here we can load the translated "message" first, then load the
> untranslated "product" after that. This solution doesn't require as many
> properties files:
>
> Messages.properties - English messages
> Messages_es.properties - Spanish messages
> Messages_fr.properties - French messages
>
> Product.properties - Dogtag theme
> Product.properties - Other theme
>
> If we can assume the messages are fixed, we can actually include the
> messages in the core packages and leave the branding in the theme packages.
>
> We could also stack the theme files, similar to the sections in the
> configuration file, so the custom theme only needs to store the files
> that are different from the default theme. This will require the ability
> to install multiple themes and deploy the custom theme on top of the
> default theme.
>
More information about the Pki-devel
mailing list