- From: Felix Sasaki <fsasaki@w3.org>
- Date: Fri, 3 Aug 2012 19:33:48 +0200
- To: Shaun McCance <shaunm@gnome.org>
- Cc: public-multilingualweb-lt@w3.org
- Message-ID: <CAL58czrocmUEGTdAj3wajYPs+tY4+rps9KEMt3921HzNO03R=w@mail.gmail.com>
+1 - I think you can change the spec text http://www.w3.org/International/multilingualweb/lt/drafts/its20/its20.odd#LocaleFilter http://www.w3.org/International/multilingualweb/lt/drafts/its20/its20.html#LocaleFilter right away. The "canadian locales" only, independent of the language, is a compelling example. Best, Felix 2012/8/3 Shaun McCance <shaunm@gnome.org> > On Fri, 2012-08-03 at 11:59 -0400, Shaun McCance wrote: > > On Fri, 2012-08-03 at 11:56 +0200, Felix Sasaki wrote: > > > Hi Shaun, all, > > > > > > > > > one more aspect about the locale filter data category. Currently we > > > specify basic filtering > > > http://tools.ietf.org/html/rfc4647#section-3.3.1 > > > as the method to match locales in the localeFilter rule and in the > > > content. Would it make sense to use extended filtering > > > http://tools.ietf.org/html/rfc4647#section-3.3.2 > > > and extended language ranges > > > http://tools.ietf.org/html/rfc4647#section-2.2 > > > instead? > > > > > > > > > This allows you to specify a language range like de-*-DE , which > > > matches e.g. de-latn-DE. > > > > > > > > > I have an action item from the i18n core working group to check this. > > > > > http://lists.w3.org/Archives/Public/public-multilingualweb-lt/2012Jul/0184.html > > > > I chose basic filtering because I think the algorithm for > > extended filtering is tricky (but not impossible) to do in > > XSLT 1.0, at least without EXSLT. Basic filtering is easy. > > If anybody feels strongly that we should use extended > > filtering, speak up. I'm not really opposed. > > > > I can implement the extended filtering algorithm easily in > > Python for itstool. I was just trying to keep things easy > > for others. I'd like input from other implementers. > > Actually turned out to not be as difficult as I'd thought to > implement in XSLT 1.0. Implementation is below. Tested on the > examples in RFC 4647, but not fully QA'd. No guarantees. Free > to use, modify, and redistribute without restriction. > > Given the ease of implementation, I'm inclined to switch to > extended filtering. The current examples use "en-CA,fr-CA" > to restrict to Canadian locales. With extended filtering, > this is just "*-CA". I suspect restricting to a region will > be common. Objections? > > <xsl:template name="extended-range-filter"> > <xsl:param name="range"/> > <xsl:param name="language"/> > <xsl:variable name="range_l" > select="translate($range, > 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', > 'abcdefghijklmnopqrstuvwxyz')"/> > <xsl:variable name="language_l" > select="translate($language, > 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', > 'abcdefghijklmnopqrstuvwxyz')"/> > <xsl:variable name="subrange"> > <xsl:choose> > <xsl:when test="contains($range_l, '-')"> > <xsl:value-of select="substring-before($range_l, '-')"/> > </xsl:when> > <xsl:otherwise> > <xsl:value-of select="$range_l"/> > </xsl:otherwise> > </xsl:choose> > </xsl:variable> > <xsl:variable name="sublanguage"> > <xsl:choose> > <xsl:when test="contains($language_l, '-')"> > <xsl:value-of select="substring-before($language_l, '-')"/> > </xsl:when> > <xsl:otherwise> > <xsl:value-of select="$language_l"/> > </xsl:otherwise> > </xsl:choose> > </xsl:variable> > <xsl:choose> > <xsl:when test="$subrange != $sublanguage and $subrange != '*'"> > <xsl:text>0</xsl:text> > </xsl:when> > <xsl:otherwise> > <xsl:call-template name="extended-range-filter-sub"> > <xsl:with-param name="range" select="$range_l"/> > <xsl:with-param name="language" select="$language_l"/> > </xsl:call-template> > </xsl:otherwise> > </xsl:choose> > </xsl:template> > <xsl:template name="extended-range-filter-sub"> > <xsl:param name="range"/> > <xsl:param name="language"/> > <xsl:variable name="subrange"> > <xsl:choose> > <xsl:when test="contains($range, '-')"> > <xsl:value-of select="substring-before($range, '-')"/> > </xsl:when> > <xsl:otherwise> > <xsl:value-of select="$range"/> > </xsl:otherwise> > </xsl:choose> > </xsl:variable> > <xsl:variable name="sublanguage"> > <xsl:choose> > <xsl:when test="contains($language, '-')"> > <xsl:value-of select="substring-before($language, '-')"/> > </xsl:when> > <xsl:otherwise> > <xsl:value-of select="$language"/> > </xsl:otherwise> > </xsl:choose> > </xsl:variable> > <xsl:choose> > <xsl:when test="$subrange = ''"> > <xsl:text>1</xsl:text> > </xsl:when> > <xsl:when test="$subrange = '*'"> > <xsl:call-template name="extended-range-filter-sub"> > <xsl:with-param name="range" > select="substring-after($range, '-')"/> > <xsl:with-param name="language" select="$language"/> > </xsl:call-template> > </xsl:when> > <xsl:when test="$sublanguage = ''"> > <xsl:text>0</xsl:text> > </xsl:when> > <xsl:when test="$subrange = $sublanguage"> > <xsl:call-template name="extended-range-filter-sub"> > <xsl:with-param name="range" > select="substring-after($range, '-')"/> > <xsl:with-param name="language" > select="substring-after($language, '-')"/> > </xsl:call-template> > </xsl:when> > <xsl:when test="string-length($sublanguage) = 1"> > <xsl:text>0</xsl:text> > </xsl:when> > <xsl:otherwise> > <xsl:call-template name="extended-range-filter-sub"> > <xsl:with-param name="range" select="$range"/> > <xsl:with-param name="language" > select="substring-after($language, '-')"/> > </xsl:call-template> > </xsl:otherwise> > </xsl:choose> > </xsl:template> > > > > -- Felix Sasaki DFKI / W3C Fellow
Received on Friday, 3 August 2012 17:34:14 UTC