в XSLT локализации

у меня есть следующий xml-файл: -

<?xml version="1.0" encoding="UTF-8"?> 
<directory> 
   <employee> 
      <name>Joe Smith</name> 
      <phone>4-0192</phone> 
   </employee> 
   <employee> 
      <name>Sally Jones</name> 
      <phone>4-2831</phone> 
   </employee> 
</directory>

и после xslt : -

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <xsl:output method="html"/>
   <xsl:template match="directory">
      <div>List of Employee<xsl:value-of select="@directory"/>
      </div>
      <br/>
      <table>
        <tr>
          <td>Employee Name</td>
          <td>Contact Details</td>
        </tr>
        <xsl:apply-templates select="employee"></xsl:apply-templates>
      </table>

    </xsl:template>

    <xsl:template match="employee">
      <tr>
        <td>
           <xsl:value-of select="@name"/>
        </td>
        <td>
           <xsl:value-of select="@phone"/>
        </td>
      </tr>
    </xsl:template>

</xsl:stylesheet>

Я хотел бы локализовать текст xslt: список сотрудников, имя сотрудника и контактные данные

как локализовать текст xslt?

3 ответов


Я вижу три способа сделать это, какой из них лучше (или если любой из них является альтернативой) зависит от того, когда и как вам нужен окончательный xml:

построить xsl программно

создайте xsl, используя, например,XmlDocument - затем вы можете использовать обычные строковые ресурсы для заполнения ярлыков, и, возможно, использовать настройки приложения.

Embedd перевод в язык xsl

использовать <xsl:param> чтобы сказать преобразование, какой язык использовать, затем поместите <xsl:choose> на каждую строку:

<xsl:choose>
    <xsl:when test="$language='en'">Contact Details</xsl:when>
    <xsl:when test="$language='sv'">Kontaktuppgifter</xsl:when>
    <xsl:otherwise>Unknown language <xsl:value-of select="$language"/></xsl:otherwise>
</xsl:choose>

посмотрите переводы как часть преобразования

поместите переводы в xml-документы самостоятельно translation.xml:

<strings>
    <string language="en" key="ContactDetails">Contact Details</string>
    <string language="sv" key="ContactDetails">Kontaktuppgifter</string>
    [...]
</strings>   

затем загрузите его содержимое с помощью:

<xsl:variable name="strings" select="document('translation.xml')/strings"/>

...и доступ к ним с:

<xsl:value-of select="$strings/string[@key='ContactDetails' and @language=$language]"/>

см. мой ответ на это так вопрос, подробно описывая, как эффективно использовать таблицу поиска, хранящуюся как отдельный, экстеранальный XML-документ, через <xsl:key> и key() функции.


текст в XSLT может быть локализован путем чтения переведенных строк из XML-документа. Номера также могут быть локализованы.

XML-документ может содержать либо один язык с одним XML-документом для каждого языка,либо один XML-документ со всеми языками. Форматы XML в следующем примере следуют за ресурсом Microsoft .NET (.resx) файлы (по одному файлу на каждый язык) или один документ TMX (translation memory exchange) со всеми языками. Любой формат, однако может использоваться до тех пор, пока XPath, используемый для чтения текста, непротиворечив.

оба варианта используют XPath'document' функция для чтения XML с переведенными строками. Определите параметры для каждой строки, используемой в XSLT. Использование параметров, а не переменных позволяет переопределять значения при преобразовании XSLT. Использовать xsl:value-of для отображения переведенного текста. При обработке преобразования передайте код языка, например "fr", и URL-адрес в XML-код ресурса документ для нужного языка.

см. мою статью "как локализовать XSLT " для полного, функционального образца на http://www.codeproject.com/Articles/338731/LocalizeXSLT.