<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:pf="http://www.daisy.org/ns/pipeline/functions" xmlns:d="http://www.daisy.org/ns/pipeline/data" xmlns:NormalizeLang="org.daisy.pipeline.common.NormalizeLang" version="3.0" exclude-result-prefixes="#all">
    
    <xsl:function name="pf:i18n-translate" as="xs:string">
        
        
        
        <xsl:param name="string" as="xs:string"/>
        
        <xsl:param name="language" as="xs:string"/>
        
        <xsl:param name="maps" as="element()*"/>
        <xsl:variable name="generic-language-code" select="tokenize(lower-case(pf:normalize-lang($language)),'-')[1]"/>
        <xsl:variable name="exact-language" select="(for $map in ($maps) return $map//d:translation[@string=$string]/d:text[@xml:lang=$language])[1]"/>
        <xsl:variable name="generic-language" select="if ($exact-language) then () else (for $map in ($maps) return $map//d:translation[@string=$string]/d:text[starts-with(@xml:lang,$generic-language-code)])[1]"/>
        <xsl:variable name="any-language" select="if ($exact-language or $generic-language) then () else (for $map in ($maps) return $map//d:translation[@string=$string]/d:text[1])[1]"/>
        <xsl:value-of select="($exact-language, $generic-language, $any-language)[1]"/>
        
    </xsl:function>
    <doc xmlns="http://www.oxygenxml.com/ns/doc/xsl">
        <desc>
            <p>Normalizes a RFC 5646 language tag.</p>
            <p>The primary language subtag is converted to a two-letter language code from ISO 639-1
            when possible.</p>
        </desc>
    </doc>
    <xsl:function name="pf:normalize-lang" as="xs:string">
        <xsl:param name="language" as="xs:string"/>
        <xsl:try>
            <xsl:sequence select="NormalizeLang:normalize($language)">
                
            </xsl:sequence>
            <xsl:catch>
                <xsl:sequence select="$language"/>
            </xsl:catch>
        </xsl:try>
    </xsl:function>
</xsl:stylesheet>