I haven't tested the code, but something along those lines should work. I
agree it doesn't give special status to the @lang attribute, so there
might be a better approach where the browser/implementation does the work.
While certainly conforming to standard, this approach is much more
verbose than the one proposed in original e-mail. I remember discussion,
that XForms schema allows <xforms:label> several times inside control
exactly for this reason - to allow labels, help texts and alerts in
multiple languages. Do future versions of XForms specifications address
this issue? Does any of the implementations already support xml:lang
attribute for labels?
Thanks in advance,
Swithun Crowe wrote:
> KB> What I want: one document containing data, layout and translations.
> KB> Splitting into several documents is no option.
> I don't know if the naive approach will work, though it would be nice if
> it did.
> What you could do is have three extra instances. One will hold a list of
> possible languages. Another will hold the selected language. And the third
> will hold all your I18N strings. Something like:
> <xf:instance id="langs">
> <langs xmlns="">
> <lang id="en_US">American English</lang>
> <lang id="de_DE">Deutsch</lang>
> <xf:instance id="lang">
> <lang xmlns="">en_US</lang>
> <xf:instance id="strings">
> <strings xmlns="">
> <string lang="en_US" name="label">Label</string>
> <string lang="de_DE" name="label">Aufkleber</string>
> And then have a select1 control where the user selects their preferred
> <xf:select1 ref="instance('lang')">
> <xf:label>Select language</xf:label>
> <xf:itemset nodeset="instance('langs')/lang">
> <xf:label ref="."/>
> <xf:value ref="@id"/>
> and then for your internationalised controls, have something like:
> <xf:select1 ref="/my/model/some_value">
> <xf:label ref="instance('strings')/string[@lang=instance('lang')][@name='label']"/>
> I haven't tested the code, but something along those lines should work. I
> agree it doesn't give special status to the @lang attribute, so there
> might be a better approach where the browser/implementation does the work.