On 21.02.2011, at 11:54, Bernhard Schussek wrote:
> Hi all,
>
> I would like to propose changing the best practices for translations.
> Right now, we use English texts as originals and refer to these texts
> in translation files, for example:
>
> {{ trans "This field is required" }}
> "This field is required": "Dieses Feld muss ausgefüllt werden"
>
> This approach has various advantages and drawbacks. A post by
> Christian summed them up very nicely[1]:
>
> + No abstract thinking involved when creating templates, the
> additional effort is almost zero.
> + The templates are understandable by all developers and designers
> + If you i18n:extract your translation files they will be easy to
> translate without visiting the application
> + Your application will work even without translation files
>
> - Can very easy mislead you to maintain the texts within your
> templates rather than the translation files
> - Can be confusing to find the source of a text as both keys and
> translations are very similar
> - Ugly escaping when quotes are part of your keys
> - Missing translations are not immediately recognisable and so keys
> can “go live” instead of the correct translations
>
> One more drawback, added by me:
>
> - Long term maintenance becomes difficult. Even making small changes
> to original texts (typos, wording) breaks all translation files.
>
> Apart from that, I see a major drawback from the framework-developer
> POV: We can't change the default translations provided with the
> framework. Imagine that at some point we realize that we want to be
> nice and change the default message to "Please fill out this field".
> It's impossible, because it breaks BC.
>
> I would like to change this practice to using message keys by default.
> The above example would become:
>
> {{ trans field.required }}
> field.required: "This field is required"
>
> Again, Christian's pros and cons:
>
> + Easily groupable (Separation of Concerns again) to focus on buttons,
> captures, titles etc..
> + Easy to spot missing translations as these kind of key on a website
> stick out visually
> + Easy to grep in both templates and i18n files
> + Translations are always in the appropriate files
>
> - Needs a well documented convention how to define the keys
> - Too abstract, it can be hard to understand what a key “says” when
> your convention is not good enough
> - Hard to maintain translation files without looking at the rendered
> templates to get a sense of context
>
> Another benefit I see:
>
> + Copywriters can change texts independently of template designers
>
> To quote his conclusion:
>
> "In the short run using abstract keys might be a little more effort.
> On the long tail however you separated your transaltions (wordings)
> from your templates which makes it easy to maintain."
>
> I understand that using real language keys the framework is easier to
> learn for beginners. The problem is that once people realize the
> imposed maintenance problems, it's impossible or very difficult to
> gracefully change to using message keys. Doing that late requires that
> your developers, designers, copywriters AND translators learn
> completely new practices, which is a lot of effort.
>
> I also understand that by using message keys in the framework, all
> components with internationalization support (e.g. Validator) would
> require the Translator as dependency. On the other hand, this is a
> very philosophical drawback that IMO doesn't outweigh the advantages
> of message keys at all.
>
> What are your thoughts on this?
>
> Bernhard
>
>
> [1] http://test.ical.ly/2010/04/13/i18n-best-practices-for-symfony-templates/
I am looking at fixing http://trac.symfony-project.org/ticket/9523 sometime
this week.
At this point you will know what messages are safe to be shown to the user, but
it will still be a nightmare for users to determine the actual possible strings
they will need to provide translation for. If we would use translation keys
with a specific format one could at least grep for this.
Then again all Security Exceptions extend from a common class, one could of
course just list the possible strings as class constants.
Not really sure what the best approach is, but for my own projects I certainly
favor message keys. One solution could of course be to set both an english text
and a message key. Dunno what is really feasible.
regards,
Lukas Kahwe Smith
[email protected]
--
If you want to report a vulnerability issue on symfony, please send it to
security at symfony-project.com
You received this message because you are subscribed to the Google
Groups "symfony developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/symfony-devs?hl=en