[errai-dev] ErraiUI and i18n

Eric Wittmann eric.wittmann at redhat.com
Mon Mar 4 16:20:18 EST 2013


Thanks for the write-up, Jonathan.

I've put this on my to-do list and will get on it as soon as I can.

Will report back once I have something worth you guys tearing apart. :)

-Eric

On 03/01/2013 06:33 PM, Jonathan Fuerth wrote:
> Hi all,
>
> Eric Wittmann has volunteered to implement proof-of-concept
> internationalization features in ErraiUI. To get things going, he asked
> me to sum up the conversation we had on a GitHub pull request[1]. Here's
> my summary, as I understand it.
>
> Goals:
>   * Must not compromise on 'designer templates:' the template must be
> 100% valid HTML5 and render properly in a browser as-is.
>   * Aim for least possible amount of boilerplate in the common case: if
> I18N is invisible on 80% of the fields it affects (both Java side and
> HTML side) then we're winning.
>   * At compile time, we'll generate reports on the state of each
> translation: for each language, which translations are missing and which
> are orphaned? If this is summarized numerically in a .properties file,
> it's trivially easy to track in Jenkins with the Plot plugin[2].
>   * Must be able to substitute different images based on user's language
>   * Ability to translate both text within an element as well as
> attribute values in tags
>   * Should accommodate simple HTML markup within messages (eg. anything
> SafeHtml would allow)
>   * Support user selection of language independent of what the
> accept-language header says
>
> Non-Goals:
>   * We're not attempting to define something that works outside of Errai
> UI templates and @Templated classes
>   * We're not considering the ability to define structurally different
> page layouts based on locale (Android can do this with its resources system)
>   * We're not talking about reacting to anything except the user's
> language preference (again, Android's resource system supports varying
> resources based on screen size, resolution, language, country, and lots
> more besides)
>
> Open Questions:
>   * Should we use GWT's message resource file format?
>   * When/if we specify a key, should it be in the template file (eg, as
> a data-i18n="message.key" attrbute) or in the Java class (as an
> @I18n("message.key") annotation on the @DataField)? ewittmann originally
> proposed the attribute-in-template approach, and okrasz and w0mbat
> expressed a preference for that too.
>   * How will we handle interpolation into messages (for example Hello
> {name}. Pleased to meet you!)? Most importantly, where do the values
> come from?
>   * (How) do we handle special numeric formatting like $0.00 in the USA
> vs. 0,00€ in Europe? It seems we may need a mechanism to call out to
> GWT's number formatting classes
>
>
> Based on all that, here's a strawman proposal to get us started (lifted
> from Eric's comment):
>
> Java:
>
> @Templated
> public class MyPage extends Composite {
>    @Inject @DataField("field1")
>    private Label contentBecomesKey;
>    @Inject @DataField("field2") @I18n("mypage.description")
>    private Label keySpecifiedInAnnotation;
>
> @Inject @DataField("field3") @I18n(value="mypage.input", attributes={"placeholder", "title"})
>    private Text inputBoxWithTranslatedTooltipAndPlaceholder;
>
>    // I don't think this will actually work well. It's just here for the
> sake of argument.
>    @I18nParams
>    private Map<String, SafeHtml> messageKeys;
> }
>
> Template:
>
> <div data-field="templateId">
>    <div data-field="field1">MyHeader</div>
>    <div data-field="field2">This is a lengthy description that I don't
> want becoming an i18n key.</div>
>
> <input data-field="field3" type="text" name="field3" placeholder="Enter
> a value here" title="Use this data entry field to enter a valid value..." />
>    <div>Innocent Bystander</div>
>    <div data-field="field3">{name}, you owe {amountOwing}.</div>
> </div>
>
> Bundle for Piglatin translation:
>
> MyHeader=yHeaderMay
> mypage.description=Lorem ipsum dolor sit amet, consectetur adipiscing elit.
> mypage.input.placeholder=Value here, you must enter
> mypage.input.title=This data entry field, use you must...
> Innocent\ Bystander=Innocentay Ystanderbay
>
> So, thoughts?
>
> -Jonathan
>
> [1]: https://github.com/errai/errai/pull/24
> [2]: https://wiki.jenkins-ci.org/display/JENKINS/Plot+Plugin
>
>
> _______________________________________________
> errai-dev mailing list
> errai-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/errai-dev
>


More information about the errai-dev mailing list