локализация xslt - PullRequest
       1

локализация xslt

9 голосов
/ 15 мая 2011

У меня следующий 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 ]

6 голосов
/ 15 мая 2011

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

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

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

Встроить перевод в 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]"/>
0 голосов
/ 29 января 2012

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

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

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

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

0 голосов
/ 15 мая 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...