<div>[cc es-discuss, it may be beneficial to others too]</div><div><br></div>Hi Rich,<div> the initial strawman (including December version, which wasn&#39;t much different from original) was just a proposal that we put out there to get people to think about it. Only at the last (January) meeting we managed to get some consensus on what is feasible for most platforms. The current version has less features but we feel that it achieves the following:</div>
<div><br></div><div>1. All involved parties can implement it with current data/APIs they have available (Windows OS, ICU...)</div><div>2. Using LocaleInfo object on top avoids pollution of global namespace and makes passing locale methods/data around easier</div>
<div>3. It still implements necessary i18n methods so that the API is usefull</div><div><br></div><div>We are planning on extending the API after this draft gets accepted and implemented. We feel it&#39;s going to be easier extending it in the future once we have a solid base to build upon.</div>
<div><br></div><div>I am sorry you started the implementation already, I wasn&#39;t aware anybody was trying to do that (Addison didn&#39;t mention it in the last teleconference call). I too have partial implementation of the old spec in Chrome (at least the locale part). I would wait with further implementations at least till March 21st, when we&#39;ll have our next i18n meeting.<br>
<br></div><div>If you run top of the tree Chromium (or maybe even dev channel Chromium) with enable-javascript-i18n-api flag you can actually test it. I&#39;ll be updating the implementation once we settle on details.</div>
<div><br></div><div>Regards,</div><div> Nebojša</div><div><br><div class="gmail_quote">17. фебруар 2011. 11.44, Gillam, Richard <span dir="ltr">&lt;<a href="mailto:gillam@lab126.com">gillam@lab126.com</a>&gt;</span> је написао/ла:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"><div style="word-wrap:break-word">Forgive me, but would somebody mind (offline if you don&#39;t want to waste everybody else&#39;s time) bringing me up to speed on how we got here?  I started implementing based on the strawman from early December (if memory serves), where there was no LocaleInfo, and by the time I was done with my implementation, the spec had changed completely and my code doesn&#39;t match it anymore.  What problem does the LocaleInfo object solve?<div>
<br></div><div>--Rich Gillam</div><div>  Lab126<div><div></div><div class="h5"><br><div><br><div><div>On Feb 15, 2011, at 1:53 PM, Nebojša Ćirić wrote:</div><br><blockquote type="cite">Sorry it took me some time to get back to the document. I actually tried implementing the API just to see how it feels and I found a couple of problems with the implementation (see the latest at <a href="http://wiki.ecmascript.org/doku.php?id=strawman:i18n_api" target="_blank">http://wiki.ecmascript.org/doku.php?id=strawman:i18n_api</a>).<div>

<br></div><div>Just to reiterate what we are aiming to do:</div><div><br></div><div>1. There is a global LocaleInfo object that would hold the rest (collators, formatters...).</div><div>2. Once we have LocaleInfo instance we shouldn&#39;t have to pass that into constructors (simplifies call sites, and allows us to pass locale around).</div>

<div><br></div><div>So this didn&#39;t work for me:</div><div><br></div><div>LocaleInfo = function(options) {...};</div><div>LocaleInfo.prototype.Collator = function(options) {...}; </div><div><br></div><div>var locale = new LocaleInfo();</div>

<div>var collator = new LocaleInfo.Collator();<br><br></div><div>At the point where we call Collator() method <b>this</b> is already set to a new object and we have no access to the LocaleInfo data.</div><div><br></div><div>

So I changed the design a little bit:</div><div><br></div><div>LocaleInfo = function(options) {...}; // same as before.</div><div><br></div><div>LocaleInfo.Collator = function(options, LocaleInfo locInfo) { does the real work here }; // new static on LocaleInfo class.</div>

<div>LocaleInfo.Collator.prototype.derive = function ()...</div><div><br></div><div>LocaleInfo.prototype.collator = function(options) { return new LocaleInfo.Collator(options, this) }; // Here <b>this</b> refers to LocaleInfo and we just hide the complexity from the user.</div>

<div><br></div><div>If you all agree with this approach I would go ahead and write some samples on how to use this, and maybe a mock library to play with.</div><div><br><div class="gmail_quote">28. јануар 2011. 17.31, Shawn Steele <span dir="ltr">&lt;<a href="mailto:Shawn.Steele@microsoft.com" target="_blank">Shawn.Steele@microsoft.com</a>&gt;</span> је написао/ла:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">





<div lang="EN-US" link="blue" vlink="purple">
<div><p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D">I found that confusing to read.  I know what you mean ‘cause I was on the call, but could you show and example for Creating LocaleInfo without inferred region?</span></p>
<div><span style="font-size:11.0pt;color:#1F497D"> </span><br></div><p class="MsoNormal"><b><span style="font-size:10.0pt">From:</span></b><span style="font-size:10.0pt"> Nebojša Ćirić [mailto:<a href="mailto:cira@google.com" target="_blank">cira@google.com</a>]
<br>
<b>Sent:</b> Friday, January 28, 2011 4:18 PM<br>
<b>To:</b> Mark Davis </span><span style="font-size:10.0pt">☕</span><span style="font-size:10.0pt"><br>
<b>Cc:</b> Shawn Steele; Phillips, Addison; Gillam, Richard; <a href="mailto:es-discuss@mozilla.org" target="_blank">es-discuss@mozilla.org</a><br>
<b>Subject:</b> Re: i18n objects</span></p><div><div></div><div><div> <br></div><p class="MsoNormal">Shawn, Richard, Mark, Jungshik, Addison and I had a teleconference call today about this issue and we managed to resolve the differences.</p>

<div><div> <br></div>
</div>
<div><p class="MsoNormal">LocaleInfo object won&#39;t have special infer flag, but we will let user of the library specify which values shouldn&#39;t be inferred, by listing them at the construction time.</p>
</div>
<div><div> <br></div>
</div>
<div><p class="MsoNormal">There are 3 cases (2 and 3 are the same except for the value passed to currency):</p>
</div>
<div><div> <br></div>
</div>
<div><p class="MsoNormal">1. Create LocaleInfo with locale only (en-US), currency and region are inferred to USD and US respectively.</p>
</div>
<div><p class="MsoNormal">2. Create LocaleInfo with locale (en-US), currency:&quot;XXX&quot; -&gt; Currency won&#39;t be inferred but region will.</p>
</div>
<div><p class="MsoNormal">3. Create LocaleInfo with locale (en-US), currency:&quot;EUR&quot; -&gt; Currency is set by user to EUR and region is inferred.</p>
</div>
<div><div> <br></div>
</div>
<div><p class="MsoNormal">We would use standard undefined values for parameters (xx for region, und for language, XXX for currency). See
<a href="http://www.unicode.org/reports/tr35/#Unknown_or_Invalid_Identifiers" target="_blank">LDML document</a> for details.</p>
</div>
<div><div> <br></div>
</div>
<div><p class="MsoNormal">I will update strawman with new proposal.</p>
</div>
<div><div> <br></div>
<div><p class="MsoNormal">26. јануар 2011. 17.37, Mark Davis <span>
☕</span> &lt;<a href="mailto:mark@macchiato.com" target="_blank">mark@macchiato.com</a>&gt; је написао/ла:</p>
<div><p class="MsoNormal"><span style="font-family:&quot;Georgia&quot;,&quot;serif&quot;">More explicitly, does anyone who wants to be in on this conversation
<b>not</b> make Friday at 3:00 PT?</span></p>
</div>
<div>
<div><p class="MsoNormal" style="margin-bottom:12.0pt"><span style="font-family:&quot;Georgia&quot;,&quot;serif&quot;"><br clear="all">
Mark<br>
<br>
<i>— Il meglio è l’inimico del bene —</i></span><br>
<br>
</p>
</div>
<div>
<div>
<div><p class="MsoNormal">On Wed, Jan 26, 2011 at 17:06, Nebojša Ćirić &lt;<a href="mailto:cira@google.com" target="_blank">cira@google.com</a>&gt; wrote:</p><p class="MsoNormal">Ok, here are the teleconference details:</p>

<div><div> <br></div>
</div>
<div>
<div align="center">
<table border="0" cellspacing="0" cellpadding="0" width="580" style="width:435.0pt">
<tbody>
<tr>
<td width="200" valign="top" style="width:150.0pt;padding:3.75pt 11.25pt 0in 0in"><p class="MsoNormal" style="margin-right:11.25pt"><span style="font-size:10.0pt;color:#666666">Name:</span></p>
</td>
<td width="325" valign="top" style="width:243.75pt;padding:3.75pt 0in 0in 0in"><p class="MsoNormal"><strong><span style="font-size:10.0pt;color:#666666">Nebojsa Ciric</span></strong><span style="font-size:10.0pt;color:#666666"></span></p>

</td>
</tr>
<tr>
<td width="200" valign="top" style="width:150.0pt;padding:3.75pt 11.25pt 0in 0in"><p class="MsoNormal" style="margin-right:11.25pt"><span style="font-size:10.0pt;color:#666666">International direct:</span></p>
</td>
<td width="425" valign="top" style="width:318.75pt;padding:3.75pt 0in 0in 0in"><p class="MsoNormal"><strong><span style="font-size:10.0pt;color:#666666"><a href="tel:+16172244646" target="_blank"></a><a href="tel:%2B1%20617%20224.4646" target="_blank"></a><a href="tel:%2B1%20617%20224.4646" target="_blank">+1 617 224.4646</a></span></strong><span style="font-size:10.0pt;color:#666666"></span></p>


</td>
</tr>
<tr>
<td width="200" valign="top" style="width:150.0pt;padding:3.75pt 11.25pt 0in 0in"><p class="MsoNormal" style="margin-right:11.25pt"><span style="font-size:10.0pt;color:#666666">US Toll free:</span></p>
</td>
<td width="425" valign="top" style="width:318.75pt;padding:3.75pt 0in 0in 0in"><p class="MsoNormal"><strong><span style="font-size:10.0pt;color:#666666"><a href="tel:+18664574646" target="_blank"></a><a href="tel:1%20866%20457.4646" target="_blank"></a><a href="tel:1%20866%20457.4646" target="_blank">1 866 457.4646</a></span></strong><span style="font-size:10.0pt;color:#666666"></span></p>


</td>
</tr>
<tr>
<td width="200" valign="top" style="width:150.0pt;padding:3.75pt 11.25pt 0in 0in">
</td>
<td width="325" valign="top" style="width:243.75pt;padding:3.75pt 0in 0in 0in"></td>
</tr>
<tr>
<td width="200" valign="top" style="width:150.0pt;padding:3.75pt 11.25pt 0in 0in"><p class="MsoNormal" style="margin-right:11.25pt"><span style="font-size:10.0pt;color:#666666">Participant passcode:</span></p>
</td>
<td width="325" valign="top" style="width:243.75pt;padding:3.75pt 0in 0in 0in"><p class="MsoNormal"><strong><span style="font-size:10.0pt;color:#666666">15242605 then #</span></strong><span style="font-size:10.0pt;color:#666666"></span></p>

</td>
</tr>
</tbody>
</table>
</div>
<div><div> <br></div>
</div>
<div><p class="MsoNormal">26. јануар 2011. 16.57, Nebojša Ćirić &lt;<a href="mailto:cira@google.com" target="_blank">cira@google.com</a>&gt; је написао/ла:</p>
<div>
<div>
<blockquote style="border:none;border-left:solid #CCCCCC 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-right:0in"><div> <br></div><p class="MsoNormal">I&#39;ve removed the old content. It needs more work - like comments, some properties, return values, but the API is there as proposed in the last meeting.</p>

<div><div> <br></div>
</div>
<div><p class="MsoNormal">Please edit if you find errors.</p>
</div>
<div><div> <br></div>
</div>
<div><p class="MsoNormal" style="margin-bottom:12.0pt">Shall we meet Friday, 3pm? I&#39;ll send details (bridge and pin) tomorrow.</p>
<div><p class="MsoNormal">26. јануар 2011. 16.17, Shawn Steele &lt;<a href="mailto:Shawn.Steele@microsoft.com" target="_blank">Shawn.Steele@microsoft.com</a>&gt; је написао/ла:</p>
<div>
<div>
<blockquote style="border:none;border-left:solid #CCCCCC 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-right:0in"><div> <br></div>
<div>
<div><p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D">Well, that seems to cover that issue, but the document in general is very divergent from the minimal surface area discussed last time. 
 Also the LocaleInfo is missing, and it’s missing .derive (however we implement it).</span></p><div><span style="font-size:11.0pt;color:#1F497D"> </span><br></div><p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D">-Shawn</span></p>
<div><span style="font-size:11.0pt;color:#1F497D"> </span><br></div><p class="MsoNormal"><b><span style="font-size:10.0pt">From:</span></b><span style="font-size:10.0pt"> Nebojša Ćirić [mailto:<a href="mailto:cira@google.com" target="_blank">cira@google.com</a>]
<br>
<b>Sent:</b> Wednesday, January 26, 2011 4:13 PM<br>
<b>To:</b> Shawn Steele<br>
<b>Cc:</b> Mark Davis </span><span style="font-size:10.0pt">☕</span><span style="font-size:10.0pt">; Phillips, Addison; Gillam, Richard;
<a href="mailto:es-discuss@mozilla.org" target="_blank">es-discuss@mozilla.org</a><br>
<b>Subject:</b> Re: i18n objects</span></p>
<div>
<div><div> <br></div><p class="MsoNormal">I made quick update - could you take a look if I captured the essentials (there are 2 proposals)?</p>
<div><div> <br></div>
</div>
<div><p class="MsoNormal"><a href="http://wiki.ecmascript.org/doku.php?id=strawman:i18n_api#proposal_1_shawns" target="_blank">http://wiki.ecmascript.org/doku.php?id=strawman:i18n_api#proposal_1_shawns</a></p>
</div>
<div><div> <br></div>
</div>
<div><p class="MsoNormal" style="margin-bottom:12.0pt">I tried to get examples to show best and worst cases for both approaches - update if you can do worse :).</p>
<div><p class="MsoNormal">26. јануар 2011. 13.54, Shawn Steele &lt;<a href="mailto:Shawn.Steele@microsoft.com" target="_blank">Shawn.Steele@microsoft.com</a>&gt; је написао/ла:</p>
<div>
<div><p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D">Ah, well. Hmmm.  I was sort of assuming the caller would care if the data was valid and that the callee wouldn’t be making that kind
 of decision.</span></p><div><span style="font-size:11.0pt;color:#1F497D"> </span><br></div><p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D">If we went with “infer-by-default”, then your scenario wouldn’t happen (S) unless the app really didn’t want inferring.  In which case
 your workaround is the wrong thing to do (I’d think).</span></p><div><span style="font-size:11.0pt;color:#1F497D"> </span><br></div><p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D">I really don’t want to double the surface, but I see your point about changing from uninferred to inferred.</span></p>
<div><span style="font-size:11.0pt;color:#1F497D"> </span><br></div><p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D">-Shawn</span></p><div><span style="font-size:11.0pt;color:#1F497D"> </span><br></div><p class="MsoNormal">
<b><span style="font-size:10.0pt">From:</span></b><span style="font-size:10.0pt">
<a href="mailto:mark.edward.davis@gmail.com" target="_blank">mark.edward.davis@gmail.com</a> [mailto:<a href="mailto:mark.edward.davis@gmail.com" target="_blank">mark.edward.davis@gmail.com</a>]
<b>On Behalf Of </b>Mark Davis ?<br>
<b>Sent:</b> Wednesday, January 26, 2011 1:51 PM<br>
<b>To:</b> Shawn Steele<br>
<b>Cc:</b> Nebojša Ćirić; Phillips, Addison; Gillam, Richard; <a href="mailto:es-discuss@mozilla.org" target="_blank">
es-discuss@mozilla.org</a><br>
<b>Subject:</b> Re: i18n objects</span></p>
<div>
<div><div> <br></div><p class="MsoNormal"><span style="font-family:&quot;Georgia&quot;,&quot;serif&quot;">Your last message was illustrative.</span></p>
<div><div> <br></div>
</div>
<div><p class="MsoNormal"><span style="font-family:&quot;Georgia&quot;,&quot;serif&quot;">From our perspective, the mainline service APIs (currency formatting, collation, etc.) should always return the best possible answer,
 with some way to determine whether or not the data was inferred or not in case someone cares (which is important, but definitely the lower-runner case). So writing from the point of view of implementing a service, we&#39;ll need to get the the best currency from
 a LocaleInfo. What your proposal forces us to do is something like Alternative S below, instead of Alternative M:</span></p>
<div><div> <br></div>
</div>
<div><p class="MsoNormal"><b><span style="font-family:&quot;Georgia&quot;,&quot;serif&quot;">Alternative S:</span></b></p>
</div>
<div><div> <br></div>
</div>
<div><p class="MsoNormal"><span style="font-family:&quot;Georgia&quot;,&quot;serif&quot;">theCurrency = inputLocaleInfo.region;</span></p>
</div>
<div><p class="MsoNormal"><span style="font-family:&quot;Georgia&quot;,&quot;serif&quot;">// if we didn&#39;t get one, then the creator of the inputLocaleInfo set infer:false, so we have to work around that</span></p>
</div>
<div><p class="MsoNormal"><span style="font-family:&quot;Georgia&quot;,&quot;serif&quot;">if (theCurrency == null) {</span></p>
</div>
<div><p class="MsoNormal"><span style="font-family:&quot;Georgia&quot;,&quot;serif&quot;">  myInputLocaleInfo = new LocalInfo({localeInfo:inputLocaleInfo, infer:true);</span></p>
</div>
<div><p class="MsoNormal"><span style="font-family:&quot;Georgia&quot;,&quot;serif&quot;">  theCurrency = myInputLocaleInfo.region;<br>
  inferredCurrency = true;</span></p>
</div>
<div><p class="MsoNormal"><span style="font-family:&quot;Georgia&quot;,&quot;serif&quot;">} else {</span></p>
</div>
<div><p class="MsoNormal"><span style="font-family:&quot;Georgia&quot;,&quot;serif&quot;">  inferredCurrency = false;</span></p>
</div>
<div><p class="MsoNormal"><span style="font-family:&quot;Georgia&quot;,&quot;serif&quot;">}</span></p>
</div>
<div><div> <br></div>
</div>
<div><div> <br></div>
</div>
<div><p class="MsoNormal"><b><span style="font-family:&quot;Georgia&quot;,&quot;serif&quot;">Alternative M:</span></b></p>
</div>
<div><div> <br></div>
</div>
<div>
<div><p class="MsoNormal"><span style="font-family:&quot;Georgia&quot;,&quot;serif&quot;">theCurrency = inputLocaleInfo.inferCurrency;</span></p>
</div>
<div>
<div><p class="MsoNormal"><span style="font-family:&quot;Georgia&quot;,&quot;serif&quot;">inferredCurrency = inputLocaleInfo.region != null;</span></p>
</div>
<div><div> <br></div>
</div>
</div>
<div><div><span style="font-family:&quot;Georgia&quot;,&quot;serif&quot;"> </span><br></div>
</div>
<div><p class="MsoNormal"><span style="font-family:&quot;Georgia&quot;,&quot;serif&quot;">I think having a phone call will help to understand all the perspectives on the issue.</span></p>
</div>
</div>
<div><div> <br></div>
</div>
<div><p class="MsoNormal" style="margin-bottom:12.0pt"><span style="font-family:&quot;Georgia&quot;,&quot;serif&quot;">Mark<br>
<br>
<i>— Il meglio è l’inimico del bene —</i></span></p>
<div><p class="MsoNormal">On Wed, Jan 26, 2011 at 13:27, Shawn Steele &lt;<a href="mailto:Shawn.Steele@microsoft.com" target="_blank">Shawn.Steele@microsoft.com</a>&gt; wrote:</p>
<div>
<div><p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D">I’m sorry, I missed part of the thread.  I’d be happy if Nebojša would update the doc, and I’d be happy to participate in a call.  (I
 can’t update it that fast).</span></p><div><span style="font-size:11.0pt;color:#1F497D"> </span><br></div><p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D">Anytime is OK for me.</span></p><div><span style="font-size:11.0pt;color:#1F497D"> </span><br>
</div><p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D">-Shawn</span></p><div><span style="font-size:11.0pt;color:#1F497D"> </span><br></div><p class="MsoNormal"><b><span style="font-size:10.0pt">From:</span></b><span style="font-size:10.0pt">
<a href="mailto:es-discuss-bounces@mozilla.org" target="_blank">es-discuss-bounces@mozilla.org</a> [mailto:<a href="mailto:es-discuss-bounces@mozilla.org" target="_blank">es-discuss-bounces@mozilla.org</a>]
<b>On Behalf Of </b>Nebojša Ciric</span></p>
<div><p class="MsoNormal"><br>
<b>Sent:</b> Wednesday, January 26, 2011 1:07 PM<br>
<b>To:</b> Phillips, Addison</p>
</div><p class="MsoNormal"><b>Cc:</b> Gillam, Richard; Shawn Steele;
<a href="mailto:es-discuss@mozilla.org" target="_blank">es-discuss@mozilla.org</a><br>
<b>Subject:</b> Re: i18n objects</p>
<div>
<div><div> <br></div><p class="MsoNormal" style="margin-bottom:12.0pt">The es strawman was not updated with the recent discussion. I can do that before the call, and put both versions there. Shawn could check if my representation matches his proposal...</p>


<div><p class="MsoNormal">26. јануар 2011. 13.03, Phillips, Addison &lt;<a href="mailto:addison@lab126.com" target="_blank">addison@lab126.com</a>&gt; је написао/ла:</p>
<div>
<div><p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D">Sure.</span></p><div><span style="font-size:11.0pt;color:#1F497D"> </span><br></div><p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D">Did someone update the docs? Where can we get at them?</span></p>
<div><span style="font-size:11.0pt;color:#1F497D"> </span><br></div><p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D">Thanks,</span></p>
<div><div><span style="font-size:11.0pt;color:#1F497D"> </span><br></div><p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D">Addison</span></p><div><span style="font-size:11.0pt;color:#1F497D"> </span><br></div>
<p class="MsoNormal"><span style="font-size:9.0pt;color:#1F497D">Addison Phillips</span></p><p class="MsoNormal"><span style="font-size:9.0pt;color:#1F497D">Globalization Architect (Lab126)</span></p><p class="MsoNormal">
<span style="font-size:9.0pt;color:#1F497D">Chair (W3C I18N, IETF IRI WGs)</span></p><div><span style="font-size:9.0pt;color:#1F497D"> </span><br></div><p class="MsoNormal"><span style="font-size:9.0pt;color:#1F497D">Internationalization is not a feature.</span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;color:#1F497D">It is an architecture.</span></p><div><span style="font-size:11.0pt;color:#1F497D"> </span><br></div>
</div>
<div style="border:none;border-left:solid blue 1.5pt;padding:0in 0in 0in 4.0pt">
<div>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in"><p class="MsoNormal"><b><span style="font-size:10.0pt">From:</span></b><span style="font-size:10.0pt"> Nebojša Ćirić [mailto:<a href="mailto:cira@google.com" target="_blank">cira@google.com</a>]
<br>
<b>Sent:</b> Wednesday, January 26, 2011 1:02 PM<br>
<b>To:</b> Shawn Steele<br>
<b>Cc:</b> Phillips, Addison; Mark Davis </span><span style="font-size:10.0pt">☕</span><span style="font-size:10.0pt">; Gillam, Richard;
<a href="mailto:es-discuss@mozilla.org" target="_blank">es-discuss@mozilla.org</a><br>
<b>Subject:</b> Re: i18n objects</span></p>
</div>
</div>
<div>
<div><div> <br></div><p class="MsoNormal">Would people be interested in a teleconference call, say Friday to discuss this further (in case posting to the list doesn&#39;t resolve conflicts soon)?</p>
<div><p class="MsoNormal" style="margin-bottom:12.0pt">I can make the arrangements...</p>
<div><p class="MsoNormal">26. јануар 2011. 01.35, Shawn Steele &lt;<a href="mailto:Shawn.Steele@microsoft.com" target="_blank">Shawn.Steele@microsoft.com</a>&gt; је написао/ла:</p>
<div>
<div><p><span style="font-size:10.0pt;color:black">A &quot;common&quot; pattern is to require some sort of data (like date format), even if you don&#39;t have enough information.  The missing-data-so-end-up-at-root is a similar sort of scenario.  &quot;Many&quot; applications have the
 information they provide.  If we can&#39;t get a value from that, they&#39;re sunk because they cannot get more specific.</span></p><div><span style="font-size:10.0pt;color:black"> </span><br></div><p><span style="font-size:10.0pt;color:black">I&#39;m not saying that&#39;s the best thing for all apps, or even that all apps use it right, but we find far more developer errors when we&#39;re not &quot;helpful&quot; enough than from cases where we were over-helpful. 
</span></p><div><span style="font-size:10.0pt;color:black"> </span><br></div><p><span style="font-size:10.0pt;color:black">My problems with the inferred/not inferred pattern are:</span></p><div><span style="font-size:10.0pt;color:black"> </span><br>
</div><p><span style="font-size:10.0pt;color:black">1) that the function actually doing the work may not be the function that &quot;knows&quot; if the data should be inferred or not.  That may be the caller.  So then all worker functions have to use the inferred form, which
 seems awkward.  Yes, I&#39;m presuming the caller knows what they&#39;re doing, but I think that&#39;s pretty safe. </span></p><div><span style="font-size:10.0pt;color:black"> </span><br></div><p><span style="font-size:10.0pt;color:black">2) Ok, so we have &quot;both&quot; forms.  Then I call the base form, and it fails because it had bogus data.  That&#39;s WAY too late, if this scenario concerns me, then I need to test up-front so that I don&#39;t have to do heavy
 error checking on every call.  Or else the non-inferred functions need to throw. </span></p><div><span style="font-size:10.0pt;color:black"> </span><br></div><p><span style="font-size:10.0pt;color:black">3) My other problem is that it seems to unnecessarily duplicate the surface that has to be tested.</span></p>
<div><span style="font-size:10.0pt;color:black"> </span><br></div><p><span style="font-size:10.0pt;color:black">var loc = new LocaleInfo({localeName:&quot;en&quot;});</span></p><p><span style="font-size:10.0pt;color:black">var dtf = new DateTimeFormat({locale:loc});</span></p>
<p><span style="font-size:10.0pt;color:black">dtf.Format(); //  Should this require a &quot;inferredFormat&quot; ?  That seems really heavy, but en-US and en-anywhere else have different default values.</span></p>
<div><div><span style="font-size:10.0pt;color:black"> </span><br></div><p><span style="font-size:10.0pt;color:black">It&#39;s trivial for the caller (or the callee) to see if scary stuff is being inferred, so I don&#39;t see how multiple APIs help.  It&#39;s much better to validate inputs BEFORE calling the format, than to cross your fingers
 that Format will find problems for you.</span></p><div><span style="font-size:10.0pt;color:black"> </span><br></div>
<div><p class="MsoNormal"><span style="color:black">-Shawn</span></p>
<div><div><span style="color:black"> </span><br></div><p class="MsoNormal"><span lang="ZH-TW" style="font-family:Code2000;color:black"> </span></p><p class="MsoNormal"><span style="color:black"><a href="http://blogs.msdn.com/shawnste" target="_blank">http://blogs.msdn.com/shawnste</a></span></p>
<div><span style="color:black"> </span><br></div>
</div>
</div>
</div>
<div>
<div class="MsoNormal" align="center" style="text-align:center"><span style="color:black">
<hr size="2" width="100%" align="center">
</span></div>
<div><p class="MsoNormal" style="margin-bottom:12.0pt"><b><span style="font-size:10.0pt;color:black">From:</span></b><span style="font-size:10.0pt;color:black"> Phillips, Addison [<a href="mailto:addison@lab126.com" target="_blank">addison@lab126.com</a>]<br>


<b>Sent:</b> Tuesday, January 25, 2011 10:09 PM<br>
<b>To:</b> Shawn Steele; Mark Davis </span><span style="font-size:10.0pt;color:black">☕</span><span style="font-size:10.0pt;color:black"><br>
<b>Cc:</b> <a href="mailto:es-discuss@mozilla.org" target="_blank">es-discuss@mozilla.org</a>; Gillam, Richard<br>
<b>Subject:</b> RE: i18n objects</span></p>
</div>
<div>
<div>
<div>
<div><p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D">Hi,</span></p><div><span style="color:black"> </span><br></div><p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D">I’ve been following this thread carefully this week, thinking to chime in here or there (but not needing to so far).</span></p>
<div><span style="color:black"> </span><br></div><p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D">Is there a place where updated docs are accumulating? We’re nearly done with our squirrelfish implementation and I’m getting the feeling
 that it’s becoming non-standard ;-). Also, we’re noticing some gaps in the earlier docs. I want to see if they’ve been addressed or if I should comment instead.</span></p><div><span style="color:black"> </span><br></div>
<p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D">WRT the current discussion, I think the problem for me falls between “explicit BCP47 fields” (what I’ve tended to call the “gross locale
 identifier”), which I’m pretty sure I don’t want automagically populated, and “implicit fields” (i.e. the ones you’d specify using the extension). The implicit fields I kind of expect to have a default setting—if I give you “de”, there should be a default
 collation, currency, calendar, and such. And maybe the Latin script (Suppress-Script says so). But inferring “de-DE” seems ambitious. Maybe for German it’s not so bad, but many times I don’t want inferences about region to be foisted upon me.</span></p>
<div><span style="color:black"> </span><br></div><p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D">As a result, I’m more in favor of Mark’s solution (you can get an inferred value, but you have to call for it; in most cases, you get
 null for unset fields). But would that be for all fields? I’d rather that not be the case.</span></p><div><span style="color:black"> </span><br></div><p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D">Just a thought.</span></p>
<div><span style="color:black"> </span><br></div><p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D">Addison</span></p><div><span style="color:black"> </span><br></div>
<div><p class="MsoNormal"><span style="font-size:9.0pt;color:#1F497D">Addison Phillips</span></p><p class="MsoNormal"><span style="font-size:9.0pt;color:#1F497D">Globalization Architect (Lab126)</span></p><p class="MsoNormal">
<span style="font-size:9.0pt;color:#1F497D">Chair (W3C I18N, IETF IRI WGs)</span></p><div><span style="color:black"> </span><br></div><p class="MsoNormal"><span style="font-size:9.0pt;color:#1F497D">Internationalization is not a feature.</span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;color:#1F497D">It is an architecture.</span></p>
</div><div><span style="color:black"> </span><br></div>
<div style="border:none;border-left:solid blue 1.5pt;padding:0in 0in 0in 4.0pt">
<div>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in"><p class="MsoNormal"><b><span style="font-size:10.0pt;color:black">From:</span></b><span style="font-size:10.0pt;color:black"> Shawn Steele [mailto:<a href="mailto:Shawn.Steele@microsoft.com" target="_blank">Shawn.Steele@microsoft.com</a>]
<br>
<b>Sent:</b> Monday, January 24, 2011 3:53 PM<br>
<b>To:</b> Mark Davis </span><span style="font-size:10.0pt;color:black">☕</span><span style="font-size:10.0pt;color:black"><br>
<b>Cc:</b> <a href="mailto:es-discuss@mozilla.org" target="_blank">es-discuss@mozilla.org</a><br>
<b>Subject:</b> RE: i18n objects</span></p>
</div>
</div><div><span style="color:black"> </span><br></div><p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D">But assume I have a “black-box” API that prints a report or something.</span></p><div><span style="color:black"> </span><br>
</div><p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D">If the caller correctly sets the LocaleInfo() for inferred or not inferred, it can call BlackBox(myLocale).  However now myLocale has
 to call either .region or .inferredRegion, depending on whether or not it’s inferred.  But the “black box” may not have a clue whether inferred is correct (or not). 
</span></p><div><span style="color:black"> </span><br></div><p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D">IMO it’s better to let the LocaleInfo object behave however the caller wants it to behave and let BlackBox assume that the caller’s
 using it right.  IF the blackbox really cares, it can still check, but, IMO, that’s very uncommon.</span></p><p class="MsoNormal"><a name="12e35279371d2454_12dcf655cb32bb71_12dc51eaf46e4320_12dc5025f51332f8_12dc4f"></a><span style="color:black"> </span></p>
<p class="MsoNormal"><b><span style="font-size:10.0pt;color:black">From:</span></b><span style="font-size:10.0pt;color:black">
<a href="mailto:mark.edward.davis@gmail.com" target="_blank">mark.edward.davis@gmail.com</a> [mailto:<a href="mailto:mark.edward.davis@gmail.com" target="_blank">mark.edward.davis@gmail.com</a>]
<b>On Behalf Of </b>Mark Davis ?<br>
<b>Sent:</b> Monday, January 24, 2011 3:41 PM<br>
<b>To:</b> Shawn Steele<br>
<b>Cc:</b> <a href="mailto:es-discuss@mozilla.org" target="_blank">es-discuss@mozilla.org</a><br>
<b>Subject:</b> Re: i18n objects</span></p><div><span style="color:black"> </span><br></div><p class="MsoNormal"><span style="font-family:&quot;Georgia&quot;,&quot;serif&quot;;color:black">As stated before, I think that this approach is more error prone; that it would be better to explicitly call the other function.
 Here would be the difference between the two alternatives for the API: A and B, under the two common scenarios:</span></p>
<div><div><span style="color:black"> </span><br></div>
</div>
<div><p class="MsoNormal"><b><span lang="IT" style="font-family:&quot;Georgia&quot;,&quot;serif&quot;;color:black">Scenario 1 &quot;I don&#39;t care&quot;</span></b></p>
</div>
<div><div><span style="color:black"> </span><br></div>
</div>
<div><p class="MsoNormal"><span lang="IT" style="font-family:&quot;Georgia&quot;,&quot;serif&quot;;color:black">A. </span></p>
</div>
<div><p class="MsoNormal"><span lang="IT" style="font-family:&quot;Georgia&quot;,&quot;serif&quot;;color:black">x = myLocaleInfo.region;</span></p>
</div>
<div><div><span style="color:black"> </span><br></div>
</div>
<div><p class="MsoNormal"><span lang="IT" style="font-family:&quot;Georgia&quot;,&quot;serif&quot;;color:black">B. </span></p>
</div>
<div><p class="MsoNormal"><span lang="IT" style="font-family:&quot;Georgia&quot;,&quot;serif&quot;;color:black">x = myLocaleInfo.inferRegion();</span></p>
</div>
<div><div><span style="color:black"> </span><br></div>
</div>
<div><p class="MsoNormal"><b><span lang="IT" style="font-family:&quot;Georgia&quot;,&quot;serif&quot;;color:black">Scenario 2.
</span></b><b><span style="font-family:&quot;Georgia&quot;,&quot;serif&quot;;color:black">&quot;I only want explicit region&quot;</span></b></p>
</div>
<div><div><span style="color:black"> </span><br></div>
</div>
<div>
<div><p class="MsoNormal"><span style="font-family:&quot;Georgia&quot;,&quot;serif&quot;;color:black">A. </span></p>
</div>
<div><p class="MsoNormal"><span style="font-family:&quot;Georgia&quot;,&quot;serif&quot;;color:black">x = myLocaleInfo.hasInferredRegion ? undefined : myLocaleInfo.region;</span></p>
</div>
<div><div><span style="color:black"> </span><br></div>
</div>
<div><p class="MsoNormal"><span style="font-family:&quot;Georgia&quot;,&quot;serif&quot;;color:black">B. </span></p>
</div>
<div><p class="MsoNormal"><span style="font-family:&quot;Georgia&quot;,&quot;serif&quot;;color:black">x = myLocaleInfo.region();</span></p>
</div>
<div><div><span style="color:black"> </span><br></div>
</div>
<div><p class="MsoNormal"><span style="font-family:&quot;Georgia&quot;,&quot;serif&quot;;color:black">I find the B approach simpler and clearer, and we don&#39;t have to have an extra input parameter.</span></p>
</div>
<div><div><span style="color:black"> </span><br></div>
</div>
<div><p class="MsoNormal" style="margin-bottom:12.0pt"><span style="font-family:&quot;Georgia&quot;,&quot;serif&quot;;color:black"><br clear="all">
</span><span lang="IT" style="font-family:&quot;Georgia&quot;,&quot;serif&quot;;color:black">Mark<br>
<br>
<i>— Il meglio è l’inimico del bene —</i></span></p>
<div><p class="MsoNormal"><span style="color:black">On Mon, Jan 24, 2011 at 10:25, Shawn Steele &lt;<a href="mailto:Shawn.Steele@microsoft.com" target="_blank">Shawn.Steele@microsoft.com</a>&gt; wrote:</span></p>
<div>
<div><p class="MsoNormal"><span style="color:black">Considering last week’s discussion on the i18n objects, I think I’ll follow this pattern:</span></p><div><span style="color:black"> </span><br></div><p><span style="font-family:Symbol;color:black">·</span><span style="font-size:7.0pt;color:black">        
</span><span style="color:black">Constructor takes options, as specified</span></p><p><span style="font-family:Symbol;color:black">·</span><span style="font-size:7.0pt;color:black">        
</span><span style="color:black">LocaleInfo takes an option to enable inferring.</span></p><p style="margin-left:1.0in"><span style="font-family:&quot;Courier New&quot;;color:black">o</span><span style="font-size:7.0pt;color:black">  
</span><span style="color:black">Default to infer or not is an open question.</span></p><p><span style="font-family:Symbol;color:black">·</span><span style="font-size:7.0pt;color:black">        
</span><span style="color:black">Have an isInferred() function to test if a property was inferred.</span></p><p><span style="font-family:Symbol;color:black">·</span><span style="font-size:7.0pt;color:black">        
</span><span style="color:black">NO options property</span></p><p><span style="font-family:Symbol;color:black">·</span><span style="font-size:7.0pt;color:black">        
</span><span style="color:black">Instead individual properties for each value.</span></p><p><span style="font-family:Symbol;color:black">·</span><span style="font-size:7.0pt;color:black">        
</span><span style="color:black">Using the .derive method to derive a similar object.</span></p><div><span style="color:black"> </span><br></div><p class="MsoNormal"><span style="color:black">Discussion of each of these should probably have individual threads unless they directly impact each other; last week’s thread wandered between topics
 without really resolving them.</span></p><div><span style="color:black"> </span><br></div><p class="MsoNormal"><span style="color:black">My reasoning:</span></p><p><span style="font-family:Symbol;color:black">·</span><span style="font-size:7.0pt;color:black">        
</span><span style="color:black">I didn’t use the options property because an options property is controversial, and leads to other “hard” questions, like:</span></p><p style="margin-left:1.0in"><span style="font-family:&quot;Courier New&quot;;color:black">o</span><span style="font-size:7.0pt;color:black">  
</span><span style="color:black">Would options represent only the state when constructed?  Or the current state?  (Can they differ?)</span></p><p style="margin-left:1.0in"><span style="font-family:&quot;Courier New&quot;;color:black">o</span><span style="font-size:7.0pt;color:black">  
</span><span style="color:black">Would options be read-only?  (And then how would you use it).</span></p><p style="margin-left:1.0in"><span style="font-family:&quot;Courier New&quot;;color:black">o</span><span style="font-size:7.0pt;color:black">  
</span><span style="color:black">Would options be a writable copy (which sounds expensive to me)?</span></p><p style="margin-left:1.0in"><span style="font-family:&quot;Courier New&quot;;color:black">o</span><span style="font-size:7.0pt;color:black">  
</span><span style="color:black">Would options be mutable?</span></p><p><span style="font-family:Symbol;color:black">·</span><span style="font-size:7.0pt;color:black">        
</span><span style="color:black">It’s clear that we want to be able to infer or not.  If find the ability to set it in the constructor much simple.  A disadvantage is that a library would have to figure out if inputs were inferred by using isInferred().  An
 advantage is that when a worker doesn’t really care if data is inferred or not, then the caller can pass a correctly inferred (or not) object to the worker.</span></p><p><span style="font-family:Symbol;color:black">·</span><span style="font-size:7.0pt;color:black">        
</span><span style="color:black">If there isn’t an options property, then there are fewer mechanisms to create a similar derived object.  The suggested .derive() function seemed simplest.</span></p><div><span style="color:black"> </span><br>
</div><p class="MsoNormal"><span style="color:black">-Shawn
</span></p><div><span style="color:black"> </span><br></div><div><span style="color:black"> </span><br></div><p class="MsoNormal"><span style="font-size:10.0pt;color:black">- Shawn</span></p><div><span style="color:black"> </span><br>
</div><p class="MsoNormal"><span lang="JA" style="font-size:10.0pt;font-family:Code2000;color:black"> </span></p><p class="MsoNormal"><span style="color:black"><a href="http://blogs.msdn.com/shawnste" target="_blank">http://blogs.msdn.com/shawnste</a></span></p>
<p class="MsoNormal"><span style="color:black">(Selfhost 7908)</span></p><div><span style="color:black"> </span><br></div>
</div>
</div><p class="MsoNormal" style="margin-bottom:12.0pt"><span style="color:black"><br>
_______________________________________________<br>
es-discuss mailing list<br>
<a href="mailto:es-discuss@mozilla.org" target="_blank">es-discuss@mozilla.org</a><br>
<a href="https://mail.mozilla.org/listinfo/es-discuss" target="_blank">https://mail.mozilla.org/listinfo/es-discuss</a></span></p>
</div><div><span style="color:black"> </span><br></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div><p class="MsoNormal" style="margin-bottom:12.0pt"><br>
_______________________________________________<br>
es-discuss mailing list<br>
<a href="mailto:es-discuss@mozilla.org" target="_blank">es-discuss@mozilla.org</a><br>
<a href="https://mail.mozilla.org/listinfo/es-discuss" target="_blank">https://mail.mozilla.org/listinfo/es-discuss</a></p>
</div><p class="MsoNormal"><br>
<br clear="all">
<br>
-- <br>
Nebojša Ćirić</p>
</div>
</div>
</div>
</div>
</div>
</div>
</div><p class="MsoNormal"><br>
<br clear="all">
<br>
-- <br>
Nebojša Ćirić</p>
</div>
</div>
</div>
</div><p class="MsoNormal" style="margin-bottom:12.0pt"><br>
_______________________________________________<br>
es-discuss mailing list<br>
<a href="mailto:es-discuss@mozilla.org" target="_blank">es-discuss@mozilla.org</a><br>
<a href="https://mail.mozilla.org/listinfo/es-discuss" target="_blank">https://mail.mozilla.org/listinfo/es-discuss</a></p>
</div><div> <br></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div><p class="MsoNormal"><br>
<br clear="all">
<br>
-- <br>
Nebojša Ćirić</p>
</div>
</div>
</div>
</div>
</div>
</blockquote>
</div>
</div>
</div><p class="MsoNormal"><br>
<br clear="all">
<br>
-- <br>
Nebojša Ćirić</p>
</div>
</blockquote>
</div>
</div>
</div><p class="MsoNormal"><br>
<br clear="all">
<br>
-- <br>
Nebojša Ćirić</p>
</div>
</div><div> <br></div>
</div>
</div>
</div>
</div><p class="MsoNormal"><br>
<br clear="all">
<br>
-- <br>
Nebojša Ćirić</p>
</div>
</div></div></div>
</div>

</blockquote></div><br><br clear="all"><br>-- <br>Nebojša Ćirić<br>
</div>
</blockquote></div><br></div></div></div></div></div></blockquote></div><br><br clear="all"><br>-- <br>Nebojša Ćirić<br>
</div>