Author: [email protected]
Date: Mon Jun 15 19:57:26 2009
New Revision: 5562
Modified:
wiki/DefaultLocaleBinding.wiki
Log:
Edited wiki page through web user interface.
Modified: wiki/DefaultLocaleBinding.wiki
==============================================================================
--- wiki/DefaultLocaleBinding.wiki (original)
+++ wiki/DefaultLocaleBinding.wiki Mon Jun 15 19:57:26 2009
@@ -13,7 +13,7 @@
= Usage Specification =
-I propose adding configuration property to I18N.gwt.xml, for
default.locale. It's a configuration property because it isn't used for
permutations; indeed, it shouldn't ever have multiple values. This would
be set to "default" by I18N.gwt.xml, but should be reset by user modules to
whatever locale they want to have as their default.
+I propose adding a new XML element, `<set-property-fallback
name="_propname_" value="_fallbackvalue_"/>`. I18N.gwt.xml would set the
fallback for `locale` to "default" by I18N.gwt.xml, but should be reset by
user modules to whatever locale they want to have as their default.
So, I18N.gwt.xml would contain:
{{{
@@ -21,27 +21,37 @@
<!-- 'default' is always defined, but might not be set if -->
<!-- default.locale is used to specify an actual locale as default. -->
<define-property name="locale" values="default" />
- <define-configuration-property name="default.locale"
is-multi-valued="false"/>
- <set-configuration-property name="default.locale" value="default"/>
+ <set-property-fallback name="locale" value="default"/>
}}}
And my hypothetical app's .gwt.xml would contain:
{{{
<extend-property name="locale" values="fr_CA,de" />
- <set-configuration-property name="default.locale" value="fr_CA" />
+ <set-property-fallback name="locale" value="fr_CA" />
}}}
= Implementation Requirements =
-The `AbstractLocalizableImpleCreator` code has to recognize generators
that operate only on "default," and decide based on whether
`default.locale` is or is not set and whether "default" is or is not in the
locales list whether and when to run a given generator; in this example,
the "fr_CA" permutation would run generators that run on all locales,
on "fr_CA" _or_ on "default". This requires access not to the defined
values (from `define-property` and `extend-property`), but to the set
values, which is currently inaccessible.
+The fallback value would be stored in a new filed of `BindingProperty`,
with a public getter, default setter, and default value of "". The
interesting changes happen in the property provider, which would use a
template syntax in the property provider !JavaScript and
`getPropertyProvider()` would do template substitution, so that a property
provider of
-More interesting changes happen in the property provider, which today can
access only selection properties _with multiple values_. The default
locale should not be multiple, which is one reason I suggest it as a
configuration property. I propose giving property providers access to
configuration properties as well, using a template syntax in the property
provider !JavaScript and token substitution in `SelectionScriptLinker`,
something like this fragment from I18n.gwt.xml:
+{{{
+ while (!__gwt_isKnownPropertyValue("locale", locale)) {
+ var lastIndex = locale.lastIndexOf("_");
+ if (lastIndex == -1) {
+ locale = "/*-FALLBACK*/";
+ break;
+ } else {
+ locale = locale.substring(0,lastIndex);
+ }
+ }
+}}}
+Would become, for my hypothetical app,
{{{
while (!__gwt_isKnownPropertyValue("locale", locale)) {
var lastIndex = locale.lastIndexOf("_");
if (lastIndex == -1) {
- locale = "/*-GWTCONFIGPROPERTY(default.locale)-*/";
+ locale = "fa_CA";
break;
} else {
locale = locale.substring(0,lastIndex);
@@ -49,6 +59,8 @@
}
}}}
-Note that this is a static substitution, because configuration properties
have fixed value, unlike selection properties. The substitution is used in
generated the selection script, so a request for locale "jp" will fail to
match known property values and be assigned "fr_CA" instead, as the
requested `default.locale`.
+Note that this is a static substitution, at compile time. The
substitution is used in generated the selection script, so a request for
locale "jp" will fail to match known property values and be
assigned "fr_CA" instead, as the requested fallback.
+
+Also note that the substitution token is, if somehow seen by
naive !JavaScript, merely a comment (much as JSNI is for Java code). In
this particular example, moreover, the token is inside a string literal, so
a naive interpreter would merely see a very odd-looking (and in fact
invalid) locale string.
-Also note that the substitution token is, if seen by naive !JavaScript,
merely a comment (much as JSNI is for Java code). In this particular
example, moreover, the token is inside a string literal, so a naive
interpreter would merely see a very odd-looking (and in fact invalid)
locale string.
\ No newline at end of file
+Other uses might include setting a "default" logging configuration, which
user modules could modify. Not allowed by this scheme would be having a
fallback that depended on any other input. The fallback value _could_ be
arbitrary !JavaScript, if the property provider were written to execute the
extracted value (whether as a string or as non-quoted code). I see few
uses for that, but perhaps the "default" logging might depend on the
client's subnet, or on a combination of query inputs for different logging
areas.
\ No newline at end of file
--~--~---------~--~----~------------~-------~--~----~
http://groups.google.com/group/Google-Web-Toolkit-Contributors
-~----------~----~----~----~------~----~------~--~---