- From: Yves Savourel <ysavourel@enlaso.com>
- Date: Mon, 6 Aug 2012 14:18:39 -0600
- To: "'Felix Sasaki'" <fsasaki@w3.org>, "'Shaun McCance'" <shaunm@gnome.org>
- CC: <public-multilingualweb-lt@w3.org>
- Message-ID: <assp.0565425713.assp.0565a2962e.008601cd7410$aa8dc950$ffa95bf0$@com>
+1. I’ve tried to code the extended filtering and I think it’s working. It’s certainly more involved than the basic filtering, but doable. I can’t think of a good reason to keep localeFilterType either. ‘include’ should be enough to express all cases. -ys From: Felix Sasaki [mailto:fsasaki@w3.org] Sent: Friday, August 03, 2012 11:34 AM To: Shaun McCance Cc: public-multilingualweb-lt@w3.org Subject: Re: [ACTION-107] Locale Filter +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 Monday, 6 August 2012 20:19:09 UTC