2010-06-22 5 views
1

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

<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(); 

Уважением,

Йерун

ответ

0

XSLT является несведущий в «файлы ресурсов».

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

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

+0

Я действительно хочу использовать только один файл XSL, чтобы избежать ненужных накладных расходов +, так как все работает в SharePoint. Пример SharePoint XML (что-то, чего я хотел бы достичь, где все $ Resources: xxx; заменяются их соответствующим переводом): < Название проекта = "$ Ресурсы: onet_TeamWebSite;" Revision = "2" ListDir = "$ Ресурсы: core, lists_Folder;" xmlns: ows = "Microsoft SharePoint"> Можно ли сделать какой-либо поиск с регулярным выражением, а затем заменить его? –

+0

Скорее всего, это можно сделать красиво, но вам нужно поставить более полный пример (отформатированный) в ваш вопрос. Пожалуйста, укажите, что является основной проблемой - организует ли определение терминов и их перевод на несколько языков? Или это построение соответствующего имени файла? Пожалуйста, будьте как можно более конкретными. –

0

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 ($ Ресурсы: ResourceFile, Key;). Перед выполнением преобразования XSL существует возможность того, чтобы вызвать стандартную функцию SharePoint GetLocalizedXmlDocument объекта Microsoft.SharePoint.SPXmlDocCache посредством отражения, это будет передать обратно объект XmlDocument, который был проанализирован с помощью «локализации фильтра», используя стандартные ресурсы внутри 12-уев/ресурсов. Благодаря Tom Nys за помощь в этом.

0

Текст в 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 ресурса для нужного языка.

Смотрите мой блог "How to localize XSLT" для полного функционального образца в http://www.codeproject.com/Articles/338731/LocalizeXSLT.