private:koding:hostcms:modules:xsl:declension

This is an old revision of the document!


Склонение числительных

Для склонения числительных обычно применяется подшаблон следующего вида, для использования в него необходимо вставить варианты требуемого для склонения слова:

<xsl:template name="declension1">
	<xsl:param name="number" />
 
	<xsl:variable name="nominative">
		<xsl:text>слово</xsl:text>
	</xsl:variable>
 
	<xsl:variable name="genitive_singular">
		<xsl:text>слова</xsl:text>
	</xsl:variable>
 
	<xsl:variable name="genitive_plural">
		<xsl:text>слов</xsl:text>
	</xsl:variable>
 
	<xsl:variable name="last_digit">
		<xsl:value-of select="$number mod 10"/>
	</xsl:variable>
 
	<xsl:variable name="last_two_digits">
		<xsl:value-of select="$number mod 100"/>
	</xsl:variable>
 
	<xsl:choose>
		<xsl:when test="$last_digit = 1 and $last_two_digits != 11">
			<xsl:value-of select="$nominative"/>
		</xsl:when>
		<xsl:when test="$last_digit = 2 and $last_two_digits != 12 or $last_digit = 3 and $last_two_digits != 13 or $last_digit = 4 and $last_two_digits != 14">
			<xsl:value-of select="$genitive_singular"/>
		</xsl:when>
		<xsl:otherwise>
			<xsl:value-of select="$genitive_plural"/>
		</xsl:otherwise>
	</xsl:choose>
</xsl:template>

Как использовать:

<xsl:variable name="count" select="2" />
 
<!-- Выводим  -->
<xsl:value-of select="$count" />
<xsl:text> </xsl:text>
<xsl:call-template name="declension1">
	<xsl:with-param name="number" select="$count"/>
</xsl:call-template>

Результат:

2 слова

Страницу создал Максим Засорин 27.09.16 в 15:23

Discussion

Артем Куц, 04.10.16 в 17:45
Под заголовком PS не понял смысл. Опиши чуть подробнее.
Максим Засорин, 05.10.16 в 12:54
Добавил пояснение, имел ввиду, что неплохо иметь функцию, которая сразу возвращает фразу «2 яблока» целиком, а не функцию, которая возвращает только слово «яблока», так как по отдельности от числа это слово, как правило, не используется.
Артем Куц, 05.10.16 в 13:01
То есть такой функции нет, но её не помешало бы сделать на будущее?
Максим Засорин, 20.10.16 в 18:05
Я привел пример для код, как это можно реализовать.
Enter your comment:
 
private/koding/hostcms/modules/xsl/declension.1474979245.txt.gz · Last modified: 27.09.16 в 15:27 by maximzasorin_gmail.com