Finally I did not revert, see my comment in related Jira: OFBIZ-5453 Heading to bed, speak to you....
Jacques On Thursday, January 02, 2014 1:01 AM jacques.le.r...@les7arts.com wrote > Mmm, yes indeed I see the problem with minilang. I must say I botched it, > following widgets changes. > I will revert this part for now. Reverting will only impair the > editGeoLocation part (only in Party profile) when used with > another language than English. > For the rest I think it's better to wait a better data model, there will not > be any side effects, since the scope is only the > widget set operation. > While working on this, I also thought that changing the data model could be > better. Because all parts (screen and form widgets + > minilang) were affected which was a clue... > > Jacques > > On Wednesday, January 01, 2014 11:25 PM adrian.c...@sandglass-software.com > wrote >> Please revert this. The changes to Mini-language are a bad idea. >> Changing the locale in MethodContext changes it for ALL <set> elements >> (and other elements that need a locale). >> >> Plus, the modifications in general look like hacks. >> >> I understand what you are trying to accomplish, and I have been thinking >> about a solution. I will share it with you when I feel confident it is >> the best design. Meanwhile, please don't do this. >> >> Adrian Crum >> Sandglass Software >> www.sandglass-software.com >> >> On 1/1/2014 4:30 PM, jler...@apache.org wrote: >>> Author: jleroux >>> Date: Wed Jan 1 21:30:12 2014 >>> New Revision: 1554681 >>> >>> URL: http://svn.apache.org/r1554681 >>> Log: >>> This closes "Set field in (at least) widget screen does not take into >>> account a locale for (at least) the Float type" >>> https://issues.apache.org/jira/browse/OFBIZ-5453 >>> And definitively fixes issues with i18n of geolocation >>> >>> It introduces a "locale" attribute to the "set" operation in widget (I only >>> tested screen, form is quite similar, should be ok) >>> and minilang. >>> >>> Modified: >>> >>> ofbiz/trunk/applications/party/script/org/ofbiz/party/party/PartySimpleEvents.xml >>> >>> ofbiz/trunk/applications/party/webapp/partymgr/WEB-INF/actions/party/GetGeoLocation.groovy >>> >>> ofbiz/trunk/applications/party/webapp/partymgr/party/editGeoLocation.ftl >>> ofbiz/trunk/framework/minilang/dtd/simple-methods-v2.xsd >>> >>> ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/MethodContext.java >>> >>> ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/envops/SetOperation.java >>> ofbiz/trunk/framework/widget/dtd/widget-form.xsd >>> ofbiz/trunk/framework/widget/dtd/widget-screen.xsd >>> >>> ofbiz/trunk/framework/widget/src/org/ofbiz/widget/ModelWidgetAction.java >>> >>> ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/ModelFormAction.java >>> ofbiz/trunk/specialpurpose/example/widget/example/ExampleScreens.xml >>> >>> Modified: >>> ofbiz/trunk/applications/party/script/org/ofbiz/party/party/PartySimpleEvents.xml >>> URL: >>> http://svn.apache.org/viewvc/ofbiz/trunk/applications/party/script/org/ofbiz/party/party/PartySimpleEvents.xml?rev=1554681&r1=1554680&r2=1554681&view=diff >>> ============================================================================== >>> --- >>> ofbiz/trunk/applications/party/script/org/ofbiz/party/party/PartySimpleEvents.xml >>> (original) +++ >>> ofbiz/trunk/applications/party/script/org/ofbiz/party/party/PartySimpleEvents.xml >>> Wed Jan 1 21:30:12 2014 @@ -128,8 +128,8 @@ >>> under the License. <simple-method method-name="editGeoLocation" >>> short-description="Edit GeoLocation"> >>> <if-empty field="parameters.geoPointId"> >>> <set field="createGeoPointMap.dataSourceId" >>> value="GEOPT_GOOGLE"/> >>> - <set field="createGeoPointMap.latitude" >>> from-field="parameters.lat"/> >>> - <set field="createGeoPointMap.longitude" >>> from-field="parameters.lng"/> >>> + <set field="createGeoPointMap.latitude" >>> from-field="parameters.lat" locale="en"/> >>> + <set field="createGeoPointMap.longitude" >>> from-field="parameters.lng" locale="en"/> >>> <call-service service-name="createGeoPoint" >>> in-map-name="createGeoPointMap"> >>> <result-to-field result-name="geoPointId" >>> field="geoPointId"/> >>> </call-service> >>> @@ -143,8 +143,8 @@ under the License. >>> <else> >>> <set field="updateGeoPointMap.geoPointId" >>> from-field="parameters.geoPointId"/> >>> <set field="updateGeoPointMap.dataSourceId" >>> value="GEOPT_GOOGLE"/> >>> - <set field="updateGeoPointMap.latitude" >>> from-field="parameters.lat"/> >>> - <set field="updateGeoPointMap.longitude" >>> from-field="parameters.lng"/> >>> + <set field="updateGeoPointMap.latitude" >>> from-field="parameters.lat" locale="en"/> >>> + <set field="updateGeoPointMap.longitude" >>> from-field="parameters.lng" locale="en"/> >>> <call-service service-name="updateGeoPoint" >>> in-map-name="updateGeoPointMap"/> >>> </else> >>> </if-empty> >>> >>> Modified: >>> ofbiz/trunk/applications/party/webapp/partymgr/WEB-INF/actions/party/GetGeoLocation.groovy >>> URL: >>> http://svn.apache.org/viewvc/ofbiz/trunk/applications/party/webapp/partymgr/WEB-INF/actions/party/GetGeoLocation.groovy?rev=1554681&r1=1554680&r2=1554681&view=diff >>> ============================================================================== >>> --- >>> ofbiz/trunk/applications/party/webapp/partymgr/WEB-INF/actions/party/GetGeoLocation.groovy >>> (original) +++ >>> ofbiz/trunk/applications/party/webapp/partymgr/WEB-INF/actions/party/GetGeoLocation.groovy >>> Wed Jan 1 21:30:12 2014 @@ -23,14 >>> +23,18 @@ import org.ofbiz.base.util.*; import >>> org.ofbiz.base.util.string.*; >>> import org.ofbiz.party.contact.ContactHelper; >>> import org.ofbiz.common.geo.*; >>> +import java.text.NumberFormat; >>> >>> if (partyId) { >>> context.partyId = partyId; >>> latestGeoPoint = GeoWorker.findLatestGeoPoint(delegator, >>> "PartyAndGeoPoint", "partyId", partyId, null, null); >>> if (latestGeoPoint) { >>> context.geoPointId = latestGeoPoint.geoPointId; >>> - context.latitude = latestGeoPoint.latitude; >>> - context.longitude = latestGeoPoint.longitude; >>> + NumberFormat nf = NumberFormat.getInstance(Locale.ENGLISH); >>> + nf.setMinimumFractionDigits(5); >>> + nf.setMaximumFractionDigits(10); >>> + context.latitude = nf.format(latestGeoPoint.latitude); >>> + context.longitude = nf.format(latestGeoPoint.longitude); >>> } else { >>> context.latitude = 0; >>> context.longitude = 0; >>> >>> Modified: >>> ofbiz/trunk/applications/party/webapp/partymgr/party/editGeoLocation.ftl >>> URL: >>> http://svn.apache.org/viewvc/ofbiz/trunk/applications/party/webapp/partymgr/party/editGeoLocation.ftl?rev=1554681&r1=1554680&r2=1554681&view=diff >>> ============================================================================== >>> --- >>> ofbiz/trunk/applications/party/webapp/partymgr/party/editGeoLocation.ftl >>> (original) +++ >>> ofbiz/trunk/applications/party/webapp/partymgr/party/editGeoLocation.ftl >>> Wed Jan 1 21:30:12 2014 @@ -121,7 +121,7 @@ under the >>> License. <div align="center" id="map" style="border:1px solid >>> #979797; background-color:#e5e3df; width:500px; >>> height:450px; margin:2em auto;"><br/></div> <form action="#" >>> onsubmit="showAddress(this.address.value); return false"> >>> <input type="text" size="50" name="address"/> >>> - <input type="submit" value="Search"/> >>> + <input type="submit" value="${uiLabelMap.CommonSearch}"/> >>> </form> >>> <br/><br/> >>> <form id="updateMapForm" method="post" >>> action="<@ofbizUrl>editGeoLocation</@ofbizUrl>"> >>> >>> Modified: ofbiz/trunk/framework/minilang/dtd/simple-methods-v2.xsd >>> URL: >>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/minilang/dtd/simple-methods-v2.xsd?rev=1554681&r1=1554680&r2=1554681&view=diff >>> ============================================================================== >>> --- >>> ofbiz/trunk/framework/minilang/dtd/simple-methods-v2.xsd (original) +++ >>> ofbiz/trunk/framework/minilang/dtd/simple-methods-v2.xsd >>> Wed Jan 1 21:30:12 2014 @@ -1218,6 +1218,16 @@ under the License. >>> </xs:documentation> >>> </xs:annotation> >>> </xs:attribute> >>> + <xs:attribute type="xs:string" name="locale"> >>> + <xs:annotation> >>> + <xs:documentation> >>> + A locale value (eg: en). The locale allows to pass >>> values whose types are locale dependent (like Float, >>> etc.). + Defaults to the environment locale. >>> + >>> + Optional. Attribute types: constant, ${expression}. >>> + </xs:documentation> >>> + </xs:annotation> >>> + </xs:attribute> >>> <xs:attribute name="set-if-null" type="booleanConst"> >>> <xs:annotation> >>> <xs:documentation> >>> >>> Modified: >>> ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/MethodContext.java >>> URL: >>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/MethodContext.java?rev=1554681&r1=1554680&r2=1554681&view=diff >>> ============================================================================== >>> --- >>> ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/MethodContext.java >>> (original) +++ >>> ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/MethodContext.java >>> Wed Jan 1 21:30:12 2014 @@ -183,6 +183,10 @@ >>> public final class MethodContext { return this.locale; >>> } >>> >>> + public void setLocale(Locale locale) { >>> + this.locale = locale; >>> + } >>> + >>> public int getMethodType() { >>> return this.methodType; >>> } >>> >>> Modified: >>> ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/envops/SetOperation.java >>> URL: >>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/envops/SetOperation.java?rev=1554681&r1=1554680&r2=1554681&view=diff >>> ============================================================================== >>> --- >>> ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/envops/SetOperation.java >>> (original) +++ >>> ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/envops/SetOperation.java >>> Wed Jan 1 21:30:12 2014 @@ -20,6 +20,7 @@ >>> package org.ofbiz.minilang.method.envops >>> >>> import java.util.HashMap; >>> import java.util.LinkedList; >>> +import java.util.Locale; >>> >>> import org.ofbiz.base.util.Debug; >>> import org.ofbiz.base.util.ObjectType; >>> @@ -76,6 +77,7 @@ public final class SetOperation extends >>> >>> private final FlexibleStringExpander defaultFse; >>> private final FlexibleStringExpander formatFse; >>> + private final FlexibleStringExpander localeFse; >>> private final FlexibleMapAccessor<Object> fieldFma; >>> private final FlexibleMapAccessor<Object> fromFma; >>> private final Scriptlet scriptlet; >>> @@ -90,7 +92,7 @@ public final class SetOperation extends >>> if (MiniLangValidate.validationOn()) { >>> MiniLangValidate.deprecatedAttribute(simpleMethod, element, >>> "from-field", "replace with \"from\""); >>> MiniLangValidate.deprecatedAttribute(simpleMethod, element, >>> "default-value", "replace with \"default\""); >>> - MiniLangValidate.attributeNames(simpleMethod, element, >>> "field", "from-field", "from", "value", "default-value", >>> "default", "format", "type", "set-if-null", "set-if-empty"); + >>> MiniLangValidate.attributeNames(simpleMethod, element, >>> "field", "from-field", "from", "value", "default-value", >>> "default", "format", "type", "set-if-null", >>> "set-if-empty", "locale"); >>> MiniLangValidate.requiredAttributes(simpleMethod, element, "field"); >>> MiniLangValidate.requireAnyAttribute(simpleMethod, element, >>> "from-field", "from", "value"); >>> MiniLangValidate.constantPlusExpressionAttributes(simpleMethod, element, >>> "value"); @@ -114,6 +116,7 @@ public final class >>> SetOperation extends this.valueFse = >>> FlexibleStringExpander.getInstance(element.getAttribute("value")); >>> this.defaultFse = >>> FlexibleStringExpander.getInstance(element.getAttribute("default")); >>> this.formatFse = >>> FlexibleStringExpander.getInstance(element.getAttribute("format")); >>> + this.localeFse = >>> FlexibleStringExpander.getInstance(element.getAttribute("locale")); >>> this.type = element.getAttribute("type"); >>> Class<?> targetClass = null; >>> if (!this.type.isEmpty() && !"NewList".equals(this.type) && >>> !"NewMap".equals(this.type)) { >>> @@ -141,6 +144,10 @@ public final class SetOperation extends >>> Debug.logWarning(exc, "Error evaluating scriptlet [" + >>> this.scriptlet + "]: " + exc, module); >>> } >>> } else if (!this.fromFma.isEmpty()) { >>> + Locale locale = methodContext.getLocale(); >>> + if (!this.localeFse.isEmpty()) { >>> + methodContext.setLocale(new >>> Locale(this.localeFse.expandString(methodContext.getEnvMap()))); >>> + } >>> newValue = this.fromFma.get(methodContext.getEnvMap()); >>> if (Debug.verboseOn()) >>> Debug.logVerbose("In screen getting value for field from >>> [" + this.fromFma.toString() + "]: " + newValue, >>> module); >>> >>> Modified: ofbiz/trunk/framework/widget/dtd/widget-form.xsd >>> URL: >>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/dtd/widget-form.xsd?rev=1554681&r1=1554680&r2=1554681&view=diff >>> ============================================================================== >>> --- ofbiz/trunk/framework/widget/dtd/widget-form.xsd (original) >>> +++ ofbiz/trunk/framework/widget/dtd/widget-form.xsd Wed Jan 1 21:30:12 >>> 2014 >>> @@ -1908,6 +1908,16 @@ under the License. >>> </xs:restriction> >>> </xs:simpleType> >>> </xs:attribute> >>> + <xs:attribute type="xs:string" name="locale"> >>> + <xs:annotation> >>> + <xs:documentation> >>> + A locale value (eg: en). The locale allows to pass >>> values with types which are locale dependent (like >>> Float, etc.). + Defaults to the environment locale. >>> Works only if a type which makes sense is also >>> passed. + >>> + Optional. Attribute types: constant, ${expression}. >>> + </xs:documentation> >>> + </xs:annotation> >>> + </xs:attribute> >>> </xs:complexType> >>> </xs:element> >>> >>> >>> Modified: ofbiz/trunk/framework/widget/dtd/widget-screen.xsd >>> URL: >>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/dtd/widget-screen.xsd?rev=1554681&r1=1554680&r2=1554681&view=diff >>> ============================================================================== >>> --- ofbiz/trunk/framework/widget/dtd/widget-screen.xsd (original) >>> +++ ofbiz/trunk/framework/widget/dtd/widget-screen.xsd Wed Jan 1 21:30:12 >>> 2014 >>> @@ -346,6 +346,16 @@ under the License. >>> </xs:restriction> >>> </xs:simpleType> >>> </xs:attribute> >>> + <xs:attribute type="xs:string" name="locale"> >>> + <xs:annotation> >>> + <xs:documentation> >>> + A locale value (eg: en). The locale allows to pass >>> values with types which are locale dependent (like >>> Float, etc.). + Defaults to the environment locale. >>> Works only if a type which makes sense is also >>> passed. + >>> + Optional. Attribute types: constant, ${expression}. >>> + </xs:documentation> >>> + </xs:annotation> >>> + </xs:attribute> >>> </xs:complexType> >>> </xs:element> >>> <xs:element name="property-map" substitutionGroup="AllActions"> >>> >>> Modified: >>> ofbiz/trunk/framework/widget/src/org/ofbiz/widget/ModelWidgetAction.java >>> URL: >>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/org/ofbiz/widget/ModelWidgetAction.java?rev=1554681&r1=1554680&r2=1554681&view=diff >>> ============================================================================== >>> --- >>> ofbiz/trunk/framework/widget/src/org/ofbiz/widget/ModelWidgetAction.java >>> (original) +++ >>> ofbiz/trunk/framework/widget/src/org/ofbiz/widget/ModelWidgetAction.java >>> Wed Jan 1 21:30:12 2014 @@ -33,7 +33,6 @@ import >>> javax.servlet.http.HttpSession; import javolution.util.FastList; >>> import javolution.util.FastMap; >>> >>> -import org.w3c.dom.Element; >>> import org.ofbiz.base.util.Debug; >>> import org.ofbiz.base.util.GeneralException; >>> import org.ofbiz.base.util.ObjectType; >>> @@ -59,6 +58,7 @@ import org.ofbiz.minilang.method.MethodC >>> import org.ofbiz.service.DispatchContext; >>> import org.ofbiz.service.GenericServiceException; >>> import org.ofbiz.service.ModelService; >>> +import org.w3c.dom.Element; >>> >>> @SuppressWarnings("serial") >>> public abstract class ModelWidgetAction implements Serializable { >>> @@ -121,6 +121,7 @@ public abstract class ModelWidgetAction >>> protected FlexibleStringExpander valueExdr; >>> protected FlexibleStringExpander defaultExdr; >>> protected FlexibleStringExpander globalExdr; >>> + protected FlexibleStringExpander localeExdr; >>> protected String type; >>> protected String toScope; >>> protected String fromScope; >>> @@ -132,6 +133,7 @@ public abstract class ModelWidgetAction >>> this.valueExdr = >>> FlexibleStringExpander.getInstance(setElement.getAttribute("value")); >>> this.defaultExdr = >>> FlexibleStringExpander.getInstance(setElement.getAttribute("default-value")); >>> this.globalExdr = >>> FlexibleStringExpander.getInstance(setElement.getAttribute("global")); >>> + this.localeExdr = >>> FlexibleStringExpander.getInstance(setElement.getAttribute("locale")); >>> this.type = setElement.getAttribute("type"); >>> this.toScope = setElement.getAttribute("to-scope"); >>> this.fromScope = setElement.getAttribute("from-scope"); >>> @@ -184,7 +186,11 @@ public abstract class ModelWidgetAction >>> newValue = FastList.newInstance(); >>> } else { >>> try { >>> - newValue = ObjectType.simpleTypeConvert(newValue, >>> this.type, null, (TimeZone) context.get("timeZone"), >>> (Locale) context.get("locale"), true); + Locale >>> locale = (Locale) context.get("locale"); >>> + if (!this.localeExdr.isEmpty()) { >>> + locale = new >>> Locale(this.globalExdr.expandString(context)); >>> + } >>> + newValue = ObjectType.simpleTypeConvert(newValue, >>> this.type, null, (TimeZone) context.get("timeZone"), >>> locale, true); } catch (GeneralException e) { >>> String errMsg = "Could not convert field value >>> for the field: [" + this.field.getOriginalName() + "] >>> to the [" + this.type + "] type for the value [" >>> + newValue + "]: " + e.toString(); Debug.logError(e, >>> errMsg, module); >>> >>> Modified: >>> ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/ModelFormAction.java >>> URL: >>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/ModelFormAction.java?rev=1554681&r1=1554680&r2=1554681&view=diff >>> ============================================================================== >>> --- >>> ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/ModelFormAction.java >>> (original) +++ >>> ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/ModelFormAction.java >>> Wed Jan 1 21:30:12 2014 @@ -116,6 +116,7 @@ public >>> abstract class ModelFormAction { protected FlexibleStringExpander >>> valueExdr; >>> protected FlexibleStringExpander defaultExdr; >>> protected FlexibleStringExpander globalExdr; >>> + protected FlexibleStringExpander localeExdr; >>> protected String type; >>> >>> public SetField(ModelForm modelForm, Element setElement) { >>> @@ -125,6 +126,7 @@ public abstract class ModelFormAction { >>> this.valueExdr = >>> FlexibleStringExpander.getInstance(setElement.getAttribute("value")); >>> this.defaultExdr = >>> FlexibleStringExpander.getInstance(setElement.getAttribute("default-value")); >>> this.globalExdr = >>> FlexibleStringExpander.getInstance(setElement.getAttribute("global")); >>> + this.localeExdr = >>> FlexibleStringExpander.getInstance(setElement.getAttribute("locale")); >>> this.type = setElement.getAttribute("type"); >>> if (!this.fromField.isEmpty() && !this.valueExdr.isEmpty()) { >>> throw new IllegalArgumentException("Cannot specify a >>> from-field [" + setElement.getAttribute("from-field") + >>> "] and a value [" + setElement.getAttribute("value") + "] on the set action >>> in a screen widget"); @@ -157,7 +159,11 @@ public >>> abstract class ModelFormAction { newValue = >>> FastList.newInstance(); >>> } else { >>> try { >>> - newValue = ObjectType.simpleTypeConvert(newValue, >>> this.type, null, (TimeZone) context.get("timeZone"), >>> (Locale) context.get("locale"), true); + Locale >>> locale = (Locale) context.get("locale"); >>> + if (!this.localeExdr.isEmpty()) { >>> + locale = new >>> Locale(this.globalExdr.expandString(context)); >>> + } >>> + newValue = ObjectType.simpleTypeConvert(newValue, >>> this.type, null, (TimeZone) context.get("timeZone"), >>> locale, true); } catch (GeneralException e) { >>> String errMsg = "Could not convert field value >>> for the field: [" + this.field.getOriginalName() + "] >>> to the [" + this.type + "] type for the value [" >>> + newValue + "]: " + e.toString(); Debug.logError(e, >>> errMsg, module); >>> >>> Modified: >>> ofbiz/trunk/specialpurpose/example/widget/example/ExampleScreens.xml >>> URL: >>> http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/example/widget/example/ExampleScreens.xml?rev=1554681&r1=1554680&r2=1554681&view=diff >>> ============================================================================== >>> --- >>> ofbiz/trunk/specialpurpose/example/widget/example/ExampleScreens.xml >>> (original) +++ >>> ofbiz/trunk/specialpurpose/example/widget/example/ExampleScreens.xml Wed >>> Jan 1 21:30:12 2014 @@ -165,14 +165,14 @@ under the >>> License. <section> >>> <actions> >>> <set field="tabButtonItem" >>> value="ExampleGeoLocationPointSet1"/> >>> - <set field="geoPoints[+0].lat" value="37.4419" >>> type="Float"/> >>> - <set field="geoPoints[0].lon" value="-122.1419" >>> type="Float"/> >>> - <set field="geoPoints[+1].lat" value="37.4819" >>> type="Float"/> >>> - <set field="geoPoints[1].lon" value="-122.1519" >>> type="Float"/> >>> - <set field="geoPoints[+2].lat" value="37.4719" >>> type="Float"/> >>> - <set field="geoPoints[2].lon" value="-122.1319" >>> type="Float"/> >>> - <set field="geoCenter.lat" value="37.4419" type="Float"/> >>> - <set field="geoCenter.lon" value="-122.1419" type="Float"/> >>> + <set field="geoPoints[+0].lat" value="37.4419" >>> type="Float" locale="en"/> >>> + <set field="geoPoints[0].lon" value="-122.1419" >>> type="Float" locale="en"/> >>> + <set field="geoPoints[+1].lat" value="37.4819" >>> type="Float" locale="en"/> >>> + <set field="geoPoints[1].lon" value="-122.1519" >>> type="Float" locale="en"/> >>> + <set field="geoPoints[+2].lat" value="37.4719" >>> type="Float" locale="en"/> >>> + <set field="geoPoints[2].lon" value="-122.1319" >>> type="Float" locale="en"/> >>> + <set field="geoCenter.lat" value="37.4419" type="Float" >>> locale="en"/> >>> + <set field="geoCenter.lon" value="-122.1419" type="Float" >>> locale="en"/> >>> <set field="geoCenter.zoom" value="13"/> >>> </actions> >>> <widgets> >>> @@ -184,14 +184,14 @@ under the License. >>> <section> >>> <actions> >>> <set field="tabButtonItem" >>> value="ExampleGeoLocationPointSet2"/> >>> - <set field="geoPoints[+0].lat" value="37.4459" >>> type="Float"/> >>> - <set field="geoPoints[0].lon" value="-122.1489" >>> type="Float"/> >>> - <set field="geoPoints[+1].lat" value="37.4829" >>> type="Float"/> >>> - <set field="geoPoints[1].lon" value="-122.1599" >>> type="Float"/> >>> - <set field="geoPoints[+2].lat" value="37.4769" >>> type="Float"/> >>> - <set field="geoPoints[2].lon" value="-122.1219" >>> type="Float"/> >>> - <set field="geoCenter.lat" value="37.4419" type="Float"/> >>> - <set field="geoCenter.lon" value="-122.1419" type="Float"/> >>> + <set field="geoPoints[+0].lat" value="37.4459" >>> type="Float" locale="en"/> >>> + <set field="geoPoints[0].lon" value="-122.1489" >>> type="Float" locale="en"/> >>> + <set field="geoPoints[+1].lat" value="37.4829" >>> type="Float" locale="en"/> >>> + <set field="geoPoints[1].lon" value="-122.1599" >>> type="Float" locale="en"/> >>> + <set field="geoPoints[+2].lat" value="37.4769" >>> type="Float" locale="en"/> >>> + <set field="geoPoints[2].lon" value="-122.1219" >>> type="Float" locale="en"/> >>> + <set field="geoCenter.lat" value="37.4419" type="Float" >>> locale="en"/> >>> + <set field="geoCenter.lon" value="-122.1419" type="Float" >>> locale="en"/> >>> <set field="geoCenter.zoom" value="12"/> >>> </actions> >>> <widgets> >>> @@ -203,14 +203,14 @@ under the License. >>> <section> >>> <actions> >>> <set field="tabButtonItem" >>> value="ExampleGeoLocationPointSet3"/> >>> - <set field="geoPoints[+0].lat" value="37.4379" >>> type="Float"/> >>> - <set field="geoPoints[0].lon" value="-122.1119" >>> type="Float"/> >>> - <set field="geoPoints[+1].lat" value="37.4819" >>> type="Float"/> >>> - <set field="geoPoints[1].lon" value="-122.1519" >>> type="Float"/> >>> - <set field="geoPoints[+2].lat" value="37.4229" >>> type="Float"/> >>> - <set field="geoPoints[2].lon" value="-122.1369" >>> type="Float"/> >>> - <set field="geoCenter.lat" value="37.4419" type="Float"/> >>> - <set field="geoCenter.lon" value="-122.1419" type="Float"/> >>> + <set field="geoPoints[+0].lat" value="37.4379" >>> type="Float" locale="en"/> >>> + <set field="geoPoints[0].lon" value="-122.1119" >>> type="Float" locale="en"/> >>> + <set field="geoPoints[+1].lat" value="37.4819" >>> type="Float" locale="en"/> >>> + <set field="geoPoints[1].lon" value="-122.1519" >>> type="Float" locale="en"/> >>> + <set field="geoPoints[+2].lat" value="37.4229" >>> type="Float" locale="en"/> >>> + <set field="geoPoints[2].lon" value="-122.1369" >>> type="Float" locale="en"/> >>> + <set field="geoCenter.lat" value="37.4419" type="Float" >>> locale="en"/> >>> + <set field="geoCenter.lon" value="-122.1419" type="Float" >>> locale="en"/> >>> <set field="geoCenter.zoom" value="11"/> >>> </actions> >>> <widgets> >>> @@ -239,14 +239,14 @@ under the License. >>> <widgets> >>> <section> >>> <actions> >>> - <set field="geoPoints[+0].lat" >>> value="37.4459" type="Float"/> >>> - <set field="geoPoints[0].lon" >>> value="-122.1489" type="Float"/> >>> - <set field="geoPoints[+1].lat" >>> value="37.4829" type="Float"/> >>> - <set field="geoPoints[1].lon" >>> value="-122.1599" type="Float"/> >>> - <set field="geoPoints[+2].lat" >>> value="37.4769" type="Float"/> >>> - <set field="geoPoints[2].lon" >>> value="-122.1219" type="Float"/> >>> - <set field="geoCenter.lat" >>> value="37.4419" type="Float"/> >>> - <set field="geoCenter.lon" >>> value="-122.1419" type="Float"/> >>> + <set field="geoPoints[+0].lat" >>> value="37.4459" type="Float" locale="en"/> >>> + <set field="geoPoints[0].lon" >>> value="-122.1489" type="Float" locale="en"/> >>> + <set field="geoPoints[+1].lat" >>> value="37.4829" type="Float" locale="en"/> >>> + <set field="geoPoints[1].lon" >>> value="-122.1599" type="Float" locale="en"/> >>> + <set field="geoPoints[+2].lat" >>> value="37.4769" type="Float" locale="en"/> >>> + <set field="geoPoints[2].lon" >>> value="-122.1219" type="Float" locale="en"/> >>> + <set field="geoCenter.lat" >>> value="37.4419" type="Float" locale="en"/> >>> + <set field="geoCenter.lon" >>> value="-122.1419" type="Float" locale="en"/> >>> <set field="geoCenter.zoom" >>> value="12"/> >>> <set field="geoChart.id" >>> value="chart1"/> >>> <set >>> field="geoChart.dataSourceId" value="GEOPT_GOOGLE"/> >>> @@ -263,14 +263,14 @@ under the License. >>> <section> >>> <actions> >>> <set field="geoPoints" value=""/> >>> - <set field="geoPoints[+0].lat" >>> value="37.4379" type="Float"/> >>> - <set field="geoPoints[0].lon" >>> value="-122.1119" type="Float"/> >>> - <set field="geoPoints[+1].lat" >>> value="37.4819" type="Float"/> >>> - <set field="geoPoints[1].lon" >>> value="-122.1519" type="Float"/> >>> - <set field="geoPoints[+2].lat" >>> value="37.4229" type="Float"/> >>> - <set field="geoPoints[2].lon" >>> value="-122.1369" type="Float"/> >>> - <set field="geoCenter.lat" >>> value="37.4419" type="Float"/> >>> - <set field="geoCenter.lon" >>> value="-122.1419" type="Float"/> >>> + <set field="geoPoints[+0].lat" >>> value="37.4379" type="Float" locale="en"/> >>> + <set field="geoPoints[0].lon" >>> value="-122.1119" type="Float" locale="en"/> >>> + <set field="geoPoints[+1].lat" >>> value="37.4819" type="Float" locale="en"/> >>> + <set field="geoPoints[1].lon" >>> value="-122.1519" type="Float" locale="en"/> >>> + <set field="geoPoints[+2].lat" >>> value="37.4229" type="Float" locale="en"/> >>> + <set field="geoPoints[2].lon" >>> value="-122.1369" type="Float" locale="en"/> >>> + <set field="geoCenter.lat" >>> value="37.4419" type="Float" locale="en"/> >>> + <set field="geoCenter.lon" >>> value="-122.1419" type="Float" locale="en"/> >>> <set field="geoCenter.zoom" >>> value="11"/> >>> <set field="geoChart.id" >>> value="chart2"/> >>> <set >>> field="geoChart.dataSourceId" value="GEOPT_GOOGLE"/> >>> @@ -353,14 +353,14 @@ under the License. >>> <section> >>> <actions> >>> <set field="tabButtonItem" >>> value="ExampleOsmGeoLocationPointSet1"/> >>> - <set field="geoPoints[+0].lat" value="37.4419" >>> type="Float"/> >>> - <set field="geoPoints[0].lon" value="-122.1419" >>> type="Float"/> >>> - <set field="geoPoints[+1].lat" value="37.4819" >>> type="Float"/> >>> - <set field="geoPoints[1].lon" value="-122.1519" >>> type="Float"/> >>> - <set field="geoPoints[+2].lat" value="37.4719" >>> type="Float"/> >>> - <set field="geoPoints[2].lon" value="-122.1319" >>> type="Float"/> >>> - <set field="geoCenter.lat" value="37.4419" type="Float"/> >>> - <set field="geoCenter.lon" value="-122.1419" type="Float"/> >>> + <set field="geoPoints[+0].lat" value="37.4419" >>> type="Float" locale="en"/> >>> + <set field="geoPoints[0].lon" value="-122.1419" >>> type="Float" locale="en"/> >>> + <set field="geoPoints[+1].lat" value="37.4819" >>> type="Float" locale="en"/> >>> + <set field="geoPoints[1].lon" value="-122.1519" >>> type="Float" locale="en"/> >>> + <set field="geoPoints[+2].lat" value="37.4719" >>> type="Float" locale="en"/> >>> + <set field="geoPoints[2].lon" value="-122.1319" >>> type="Float" locale="en"/> >>> + <set field="geoCenter.lat" value="37.4419" type="Float" >>> locale="en"/> >>> + <set field="geoCenter.lon" value="-122.1419" type="Float" >>> locale="en"/> >>> <set field="geoCenter.zoom" value="13"/> >>> </actions> >>> <widgets> >>> @@ -372,14 +372,14 @@ under the License. >>> <section> >>> <actions> >>> <set field="tabButtonItem" >>> value="ExampleOsmGeoLocationPointSet2"/> >>> - <set field="geoPoints[+0].lat" value="37.4459" >>> type="Float"/> >>> - <set field="geoPoints[0].lon" value="-122.1489" >>> type="Float"/> >>> - <set field="geoPoints[+1].lat" value="37.4829" >>> type="Float"/> >>> - <set field="geoPoints[1].lon" value="-122.1599" >>> type="Float"/> >>> - <set field="geoPoints[+2].lat" value="37.4769" >>> type="Float"/> >>> - <set field="geoPoints[2].lon" value="-122.1219" >>> type="Float"/> >>> - <set field="geoCenter.lat" value="37.4419" type="Float"/> >>> - <set field="geoCenter.lon" value="-122.1419" type="Float"/> >>> + <set field="geoPoints[+0].lat" value="37.4459" >>> type="Float" locale="en"/> >>> + <set field="geoPoints[0].lon" value="-122.1489" >>> type="Float" locale="en"/> >>> + <set field="geoPoints[+1].lat" value="37.4829" >>> type="Float" locale="en"/> >>> + <set field="geoPoints[1].lon" value="-122.1599" >>> type="Float" locale="en"/> >>> + <set field="geoPoints[+2].lat" value="37.4769" >>> type="Float" locale="en"/> >>> + <set field="geoPoints[2].lon" value="-122.1219" >>> type="Float" locale="en"/> >>> + <set field="geoCenter.lat" value="37.4419" type="Float" >>> locale="en"/> >>> + <set field="geoCenter.lon" value="-122.1419" type="Float" >>> locale="en"/> >>> <set field="geoCenter.zoom" value="12"/> >>> </actions> >>> <widgets> >>> @@ -391,14 +391,14 @@ under the License. >>> <section> >>> <actions> >>> <set field="tabButtonItem" >>> value="ExampleOsmGeoLocationPointSet3"/> >>> - <set field="geoPoints[+0].lat" value="37.4379" >>> type="Float"/> >>> - <set field="geoPoints[0].lon" value="-122.1119" >>> type="Float"/> >>> - <set field="geoPoints[+1].lat" value="37.4819" >>> type="Float"/> >>> - <set field="geoPoints[1].lon" value="-122.1519" >>> type="Float"/> >>> - <set field="geoPoints[+2].lat" value="37.4229" >>> type="Float"/> >>> - <set field="geoPoints[2].lon" value="-122.1369" >>> type="Float"/> >>> - <set field="geoCenter.lat" value="37.4419" type="Float"/> >>> - <set field="geoCenter.lon" value="-122.1419" type="Float"/> >>> + <set field="geoPoints[+0].lat" value="37.4379" >>> type="Float" locale="en"/> >>> + <set field="geoPoints[0].lon" value="-122.1119" >>> type="Float" locale="en"/> >>> + <set field="geoPoints[+1].lat" value="37.4819" >>> type="Float" locale="en"/> >>> + <set field="geoPoints[1].lon" value="-122.1519" >>> type="Float" locale="en"/> >>> + <set field="geoPoints[+2].lat" value="37.4229" >>> type="Float" locale="en"/> >>> + <set field="geoPoints[2].lon" value="-122.1369" >>> type="Float" locale="en"/> >>> + <set field="geoCenter.lat" value="37.4419" type="Float" >>> locale="en"/> >>> + <set field="geoCenter.lon" value="-122.1419" type="Float" >>> locale="en"/> >>> <set field="geoCenter.zoom" value="11"/> >>> </actions> >>> <widgets> >>> @@ -427,14 +427,14 @@ under the License. >>> <widgets> >>> <section> >>> <actions> >>> - <set field="geoPoints[+0].lat" >>> value="37.4459" type="Float"/> >>> - <set field="geoPoints[0].lon" >>> value="-122.1489" type="Float"/> >>> - <set field="geoPoints[+1].lat" >>> value="37.4829" type="Float"/> >>> - <set field="geoPoints[1].lon" >>> value="-122.1599" type="Float"/> >>> - <set field="geoPoints[+2].lat" >>> value="37.4769" type="Float"/> >>> - <set field="geoPoints[2].lon" >>> value="-122.1219" type="Float"/> >>> - <set field="geoCenter.lat" >>> value="37.4419" type="Float"/> >>> - <set field="geoCenter.lon" >>> value="-122.1419" type="Float"/> >>> + <set field="geoPoints[+0].lat" >>> value="37.4459" type="Float" locale="en"/> >>> + <set field="geoPoints[0].lon" >>> value="-122.1489" type="Float" locale="en"/> >>> + <set field="geoPoints[+1].lat" >>> value="37.4829" type="Float" locale="en"/> >>> + <set field="geoPoints[1].lon" >>> value="-122.1599" type="Float" locale="en"/> >>> + <set field="geoPoints[+2].lat" >>> value="37.4769" type="Float" locale="en"/> >>> + <set field="geoPoints[2].lon" >>> value="-122.1219" type="Float" locale="en"/> >>> + <set field="geoCenter.lat" >>> value="37.4419" type="Float" locale="en"/> >>> + <set field="geoCenter.lon" >>> value="-122.1419" type="Float" locale="en"/> >>> <set field="geoCenter.zoom" >>> value="12"/> >>> <set field="geoChart.id" >>> value="chart1"/> >>> <set >>> field="geoChart.dataSourceId" value="GEOPT_OSM"/> >>> @@ -451,14 +451,14 @@ under the License. >>> <section> >>> <actions> >>> <set field="geoPoints" value=""/> >>> - <set field="geoPoints[+0].lat" >>> value="37.4379" type="Float"/> >>> - <set field="geoPoints[0].lon" >>> value="-122.1119" type="Float"/> >>> - <set field="geoPoints[+1].lat" >>> value="37.4819" type="Float"/> >>> - <set field="geoPoints[1].lon" >>> value="-122.1519" type="Float"/> >>> - <set field="geoPoints[+2].lat" >>> value="37.4229" type="Float"/> >>> - <set field="geoPoints[2].lon" >>> value="-122.1369" type="Float"/> >>> - <set field="geoCenter.lat" >>> value="37.4419" type="Float"/> >>> - <set field="geoCenter.lon" >>> value="-122.1419" type="Float"/> >>> + <set field="geoPoints[+0].lat" >>> value="37.4379" type="Float" locale="en"/> >>> + <set field="geoPoints[0].lon" >>> value="-122.1119" type="Float" locale="en"/> >>> + <set field="geoPoints[+1].lat" >>> value="37.4819" type="Float" locale="en"/> >>> + <set field="geoPoints[1].lon" >>> value="-122.1519" type="Float" locale="en"/> >>> + <set field="geoPoints[+2].lat" >>> value="37.4229" type="Float" locale="en"/> >>> + <set field="geoPoints[2].lon" >>> value="-122.1369" type="Float" locale="en"/> >>> + <set field="geoCenter.lat" >>> value="37.4419" type="Float" locale="en"/> >>> + <set field="geoCenter.lon" >>> value="-122.1419" type="Float" locale="en"/> >>> <set field="geoCenter.zoom" >>> value="11"/> >>> <set field="geoChart.id" >>> value="chart2"/> >>> <set >>> field="geoChart.dataSourceId" value="GEOPT_OSM"/>