2010-06-22 5 views
1

J'utilise un fichier XSL pour faire le rendu d'un webpart ASP.NET que je fait, mais maintenant je veux localiser les chaînes à l'intérieur de ce fichier XSL:Ajout localisation à 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> 

Dans le ci-dessus exemple je veux localiser "Nom du projet". La langue dans laquelle je travaille est C# et c'est l'extrait que je l'utilise pour transformer:

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

Est-il possible de faire la localisation via des fichiers de ressources (.resx) dans ce fichier XSL? Dans le reste de mon projet, je suis en utilisant la ligne suivante pour insérer des chaînes localisées:

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

Meilleures salutations,

Jeroen

Répondre

0

XSLT est incognizant de « fichiers de ressources ».

Il est possible d'utiliser un ou plusieurs fichiers XML qui contiennent la localisation nécessaire et d'y accéder lors de la transformation en utilisant la fonction document() et la fonction key() à « faire la traduction ».

J'ai souvent répondu à des questions similaires et donné des exemples, mais je ne les trouve pas immédiatement. Ainsi, voici un autre exemple: http://www.dpawson.co.uk/xsl/sect2/N4852.html#d6180e1251

+0

Je veux vraiment utiliser un seul fichier XSL pour éviter les frais inutiles + c'est comme ça que tout fonctionne dans SharePoint. Exemple de XML SharePoint (quelque chose que je voudrais réaliser, où toutes les ressources $: xxx; sont remplacées par leur traduction respective): < Titre du projet = "$ Resources: onet_TeamWebSite;" Revision = "2" ListDir = "$ Ressources: core, lists_Folder;" xmlns: ows = "Microsoft SharePoint"> Est-ce que le seul moyen serait de faire une sorte de recherche avec regex, puis de le remplacer? –

+0

Très probablement, cela peut être fait bien, mais vous devez mettre un exemple plus complet (formaté) dans votre question. Veuillez indiquer quel est le principal problème: organise-t-il les définitions des termes et leurs traductions dans plusieurs langues? Ou est-ce la construction du nom de fichier approprié? S'il vous plaît soyez aussi précis que possible. –

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> 

Les ressources ont été faites par la méthode standard de SharePoint pour gérer les ressources en XML (ressources $: RESOURCEFILE, clés;). Avant d'effectuer la transformation XSL il y a la possibilité d'invoquer une fonction standard de SharePoint GetLocalizedXmlDocument de l'objet Microsoft.SharePoint.SPXmlDocCache par la réflexion, ce restitueront un objet XmlDocument qui a été analysé par le « filtre de localisation », en utilisant les ressources standard à l'intérieur du 12-ruche/ressources. Merci à Tom Nys pour m'aider à ce sujet.

0

Le texte dans un fichier XSLT peut être localisé en lisant les chaînes traduites à partir d'un document XML. Les nombres peuvent également être localisés.

Le document XML peut contenir soit une langue avec un document XML pour chaque langue, soit un document XML unique avec toutes les langues. Les formats XML dans l'exemple suivant suivent les fichiers de ressources Microsoft .NET (.resx) (un fichier par langue) ou un seul document TMX (échange de mémoire de traduction) avec toutes les langues. Cependant, n'importe quel format peut être utilisé aussi longtemps que le XPath utilisé pour lire le texte est cohérent.

Les deux options utilisent la fonction XPath 'document' pour lire le XML avec les chaînes traduites. Définir les paramètres pour chaque chaîne utilisée dans le XSLT. L'utilisation de paramètres plutôt que de variables permet de remplacer les valeurs lors de la transformation de XSLT. Utilisez xsl:value-of pour afficher le texte traduit. Lorsque la transformation est traitée, transmettez le code de langue, par exemple, «fr» et l'URL du document XML de ressource pour la langue souhaitée.

Voir mon blog "How to localize XSLT" pour un échantillon complet et fonctionnel à http://www.codeproject.com/Articles/338731/LocalizeXSLT.