Добавление локализации в XSLT - PullRequest
1 голос
/ 22 июня 2010

Я использую XSL-файл для визуализации созданной мной веб-части ASP.NET, но теперь я хочу локализовать строки внутри этого XSL-файла:

<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:siteInfo="urn:siteInfo" version="1.0">
  <xsl:output method="html" omit-xml-declaration="no"/>
  <xsl:template match="*|/">
    <p>
     Project name: <xsl:value-of select="siteInfo:GetProjectName()"/>
    </p>

В приведенном выше примереЯ хочу локализовать «Название проекта».Язык, на котором я работаю, - это C #, и это фрагмент, который я использую для преобразования:

XslCompiledTransform transformationEngine = new XslCompiledTransform();
XmlUrlResolver resolver = new XmlUrlResolver();
resolver.Credentials = CredentialCache.DefaultNetworkCredentials;
transformationEngine.Load(XslUrl, new XsltSettings(true, true), resolver);
XsltArgumentList args = new XsltArgumentList();
args.AddExtensionObject("urn:siteInfo", siteInfo);
transformationEngine.Transform(xmlDocument, args, ms);

Можно ли выполнить локализацию с помощью файлов ресурсов (resx) в этом файле XSL?В остальной части моего проекта я использую следующую строку для вставки локализованных строк:

HttpContext.GetGlobalResourceObject(resourceName, resourceKey).ToString();

С уважением,

Jeroen

Ответы [ 3 ]

0 голосов
/ 24 июня 2010

XSL:

    <xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
               xmlns:siteInfo="urn:siteInfo"
               version="1.0">
  <xsl:output method="html" omit-xml-declaration="no"/>
  <xsl:template match="*|/">
    <style type="text/css">
      .siteInfoHeader {
       font-weight: bold;
       font-size: 10pt;
       margin-bottom: 6pt;
      }
      #siteInfo p {
       margin-top: 0;
       margin-bottom: 6pt; 
      }
    </style>
    <div id="siteInfo">
      <h3 class="siteInfoHeader">$Resources:GWOSXmlWebPartResources,Objectives;:</h3>
      <p>
        <xsl:value-of select="siteInfo:GetObjectives()"/>
      </p>
      <h3 class="siteInfoHeader">$Resources:GWOSXmlWebPartResources,Audience;:</h3>

Ресурсы были созданы стандартным способом SharePoint для обработки ресурсов в XML ($ Resources: ResourceFile, Key;). Перед выполнением XSL-преобразования есть возможность вызвать стандартную функцию SharePoint GetLocalizedXmlDocument объекта Microsoft.SharePoint.SPXmlDocCache посредством отражения, это вернет объект XmlDocument, который был проанализирован через «фильтр локализации», используя стандартные ресурсы внутри 12-hive / resources. Спасибо Tom Nys за помощь в этом.

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 голосов
/ 22 июня 2010

XSLT не распознает "файлы ресурсов".

Можно использовать один или несколько файлов XML, которые содержат необходимую локализацию, и обращаться к ним во время преобразования, используя функцию document () и key () функция "сделать перевод".

Я много раз отвечал на подобные вопросы и приводил примеры, но сейчас не могу их найти. Таким образом, вот еще один пример: http://www.dpawson.co.uk/xsl/sect2/N4852.html#d6180e1251

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