Транслитерация в XSLT
Кодинг
→
HostCMS
Транслитерация в xsl, совместима с HostCMS.
1. Помещаем в XSL шаблон следующий код:
<!-- KAD: Транслитерация -->
<xsl:variable name="l-rus" select="'абвгдеёзийклмнопрстуфхьыъэАБВГДЕЁЗИЙКЛМНОПРСТУФХЬЫЪЭ'"/>
<xsl:variable name="l-trans" select="'abvgdeеzijklmnoprstufh`y`eABVGDEEZIJKLMNOPRSTUFH`Y`E'"/>
<xsl:template name="translit" match="text()">
<xsl:param name="str"/>
<xsl:variable name="q1" select="$str"/>
<xsl:variable name="q2" select="normalize-space(translate($q1,$l-rus,$l-trans))"/>
<xsl:variable name="q3">
<xsl:call-template name="replace">
<xsl:with-param name="str" select="$q2"/>
<xsl:with-param name="search-for" select="'ж'"/>
<xsl:with-param name="replace-to" select="'zh'"/>
</xsl:call-template>
</xsl:variable>
<xsl:variable name="q4">
<xsl:call-template name="replace">
<xsl:with-param name="str" select="$q3"/>
<xsl:with-param name="search-for" select="'ш'"/>
<xsl:with-param name="replace-to" select="'sh'"/>
</xsl:call-template>
</xsl:variable>
<xsl:variable name="q5">
<xsl:call-template name="replace">
<xsl:with-param name="str" select="$q4"/>
<xsl:with-param name="search-for" select="'ю'"/>
<xsl:with-param name="replace-to" select="'yu'"/>
</xsl:call-template>
</xsl:variable>
<xsl:variable name="q6">
<xsl:call-template name="replace">
<xsl:with-param name="str" select="$q5"/>
<xsl:with-param name="search-for" select="'я'"/>
<xsl:with-param name="replace-to" select="'ya'"/>
</xsl:call-template>
</xsl:variable>
<xsl:variable name="q7">
<xsl:call-template name="replace">
<xsl:with-param name="str" select="$q6"/>
<xsl:with-param name="search-for" select="'ц'"/>
<xsl:with-param name="replace-to" select="'ts'"/>
</xsl:call-template>
</xsl:variable>
<xsl:variable name="q8">
<xsl:call-template name="replace">
<xsl:with-param name="str" select="$q7"/>
<xsl:with-param name="search-for" select="'ч'"/>
<xsl:with-param name="replace-to" select="'ch'"/>
</xsl:call-template>
</xsl:variable>
<xsl:value-of select="$q8"/>
</xsl:template>
<xsl:template name="replace" match="text()">
<xsl:param name="str"/>
<xsl:param name="search-for"/>
<xsl:param name="replace-to"/>
<xsl:choose>
<xsl:when test="contains($str, $search-for)">
<xsl:value-of select="substring-before($str, $search-for)"/>
<xsl:copy-of select="$replace-to"/>
<xsl:call-template name="replace">
<xsl:with-param name="str" select="substring-after($str, $search-for)"/>
<xsl:with-param name="search-for" select="$search-for"/>
<xsl:with-param name="replace-to" select="$replace-to"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$str"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<!-- /KAD: Транслитерация -->
2. Там, где необходимо вывести транслитерированный текст пишем, например для тега "name", так
<xsl:call-template name="translit"><xsl:with-param name="str" select="name"/></xsl:call-template>
UPD 2-10-13: Добавлены буквы "х", "ц", "ч"
16.09.2013, 4360 просмотров.
Комментарии
Добавить комментарий
Вероятно, нужно нужно добавить еще буквы в верхнем регистре.