Товар успешно добавлен в корзину!
Блог Кодинг Портфолио Я

Транслитерация в 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, 3837 просмотров.

Комментарии

Спасибо!
Вероятно, нужно нужно добавить еще буквы в верхнем регистре.

vvi 11.01.2015 02:20:39 ответить #

Имя
E-mail
Комментарий
Пожалуйста. Они уже есть!

Артем 12.01.2015 12:35:00 ответить #

Имя
E-mail
Комментарий

Добавить комментарий

Имя
E-mail
Комментарий