- From: Shaun McCance <shaunm@gnome.org>
- Date: Fri, 03 Aug 2012 13:10:27 -0400
- To: public-multilingualweb-lt@w3.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>
Received on Friday, 3 August 2012 17:10:51 UTC