2009-04-28 1 views
0

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

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

+2

Может быть, мне нужно больше кофе, чтобы наконец проснуться, но, какова культура в (!) XSL? –

+0

Интересно, тоже ... – bortzmeyer

+0

Даже если вы передаете параметр (как предложил @Tomalak), как вы планируете загружать чувствительные к культуре данные в XSL-файле? – Cerebrus

ответ

2

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

As для использования какой-либо формы локальности в среде 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> 
+0

+1 за хороший ответ! –

2

Внести его как параметр.

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

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

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

+0

Невозможно передать параметры. Существует один xml и один xsl; это оно. –

+0

А что такое ваш XSLT-процессор? – Tomalak

+1

Один xml и один xsl могут принимать параметры. Я не могу думать ни о каком сценарии, в котором не было бы «никакого способа передать параметры» в XSL. – Cerebrus

Смежные вопросы