Как получить текущий код страны / локали в XSL? - PullRequest
0 голосов
/ 28 апреля 2009

Я использую XSL-преобразование в XML. Некоторая часть преобразования зависит от текущей локали . Есть ли способ найти текущую локаль из XSL?

Например, видимая пользователем сериализация числа с плавающей запятой может варьироваться в зависимости от локали («1.0» на английском означает «1,0» на немецком языке), и мое преобразование должно принимать во внимание подобные различия.

Ответы [ 2 ]

2 голосов
/ 28 апреля 2009

Локальные переменные не поддерживаются в XSLT 1.0, но есть способы работать с ними, но вам нужно передать их в качестве параметра вашему процессору XSLT или полагаться на расширения. Некоторые процессоры предоставляют вам доступ к информации о локали, но стандартного способа сделать это не существует, и мы должны знать вашу среду, чтобы узнать, возможно ли это. Однако в XSLT 2.0 некоторые функции форматирования даты, времени и чисел будут иметь (иногда ограниченную) поддержку локалей и будут обрабатываться процессором, а не вами (поэтому есть следующие функции:)

Что касается использования некоторой формы локальности в среде XSLT 1.0 и частично как Good Thing (TM) независимо от версии XSLT, я бы настроил несколько базовых шаблонов для типа данных, с которыми вы работаете, и передать локальный параметр в (как объяснено ранее). Для чисел, посмотрите, например, xsl: format-number .

Что касается других локальных вещей, я бы создал еще один XML-файл и позволил параметру работать в качестве средства выбора информации, которую вы ищете. XML может выглядеть так:

<locals>
   <config id="de">
     <currency notation="&#8352;" format-number="###.###,##" />
     <text id="welcome">Wilcommen!</text>
   </config>
   <config id="en">
     <currency notation="&#163;" format-number="### ###.##" />
     <text id="welcome">Welcome!</text>
   </config>
   <config id="no">
     <currency notation="NOK" format-number="###.###,##" />
     <text id="welcome">Velkommen!</text>
   </config>
</locals>

Из этого откройте его как;

<xsl:variable name="locale" select="document('locale.xml')/locals/config[@id=$parameter.for.locale]" />

И вы можете использовать его как таковой для текста приветствия;

<xsl:value-of select="$locale/text[@id='welcome']" />

Для форматирования чисел и тому подобного это немного сложнее, но сначала убедитесь, что это правильный путь, и я его расширю, но в основном вам нужно создать несколько ключей для XML-файла локали и использовать поиск ключей для значений. Для чисел и тому подобного (нужно рассказать мне больше о том, что вы хотите поддержать), я бы написал пару шаблонов, которые с этим справились, и использовал бы;

<xsl:call-template name="my-template">
   <xsl:with-param name="this" select="'some_number'" />
</xsl:call-template>
2 голосов
/ 28 апреля 2009

Передайте его как параметр.

<xsl:param name="CultureInfo" select="'default'" />

Поместите параметр XSL на верхний уровень таблицы стилей и установите его "снаружи", прежде чем вызывать таблицу стилей.

Другим (проприетарным) способом будет регистрация функций расширения и запрос из таблицы стилей.

...