2010-06-22 66 views
1

我使用XSL文件做一個ASP.NET的WebPart,我做的渲染,但現在我要本地化該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(); 

親切的問候,

的Jeroen

回答

0

XSLT是「資源文件」 incognizant。

它可以使用包含必要的本土化的一個或多個XML文件,並使用document()功能和key()功能「做翻譯」轉型過程中訪問它們。

我有很多次回答過類似的問題和給出的例子,但現在找不到它們。因此,這裏是另外一個例子:http://www.dpawson.co.uk/xsl/sect2/N4852.html#d6180e1251

+0

我真的只想使用一個XSL文件來避免不必要的開銷+這是一切在SharePoint中工作的方式。 示例SharePoint XML(我想實現的,其中所有$ Resources:xxx;將被其各自的翻譯所替換): <?xml version =「1.0」encoding =「utf-8」?> < Project Title =「$ Resources:onet_TeamWebSite;」 Revision =「2」ListDir =「$ Resources:core,lists_Folder;」 xmlns:ows =「Microsoft SharePoint」> 唯一的方法是用正則表達式進行某種搜索,然後替換它? – 2010-06-22 13:44:14

+0

很可能這可以做得很好,但你需要在你的問題中提供一個更完整的例子(格式)。請說明什麼是主要問題 - 是否組織術語的定義以及翻譯爲多種語言?或者是構建適當的文件名?請儘可能具體。 – 2010-06-22 14:33:21

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,關鍵)。 之前執行XSL轉換有通過反射來調用一個標準SharePoint函數的對象Microsoft.SharePoint.SPXmlDocCacheGetLocalizedXmlDocument,這將交回已通過「定位濾波器」解析如下的對象的可能性,使用12-hive /資源內的標準資源。 感謝Tom Nys幫助我解決這個問題。

0

XSLT中的文本可以通過從XML文檔中讀取翻譯後的字符串進行本地化。數字也可能是本地化的。

對於每種語言,XML文檔可能包含一種語言和一個XML文檔,或者也可能包含具有所有語言的單個XML文檔。以下示例中的XML格式遵循所有語言的Microsoft .NET資源(.resx)文件(每種語言一個文件)或單個TMX(翻譯存儲器交換)文檔。但是,只要用於讀取文本的XPath是一致的,就可以使用任何格式。

這兩個選項都使用XPath'document'函數來讀取帶有已翻譯字符串的XML。爲XSLT中使用的每個字符串定義參數。使用參數而不是變量允許在XSLT轉換時重寫值。使用xsl:value-of來顯示翻譯文本。處理轉換時,將語言代碼(例如「fr」)和URL傳遞給所需語言的資源XML文檔。

請參閱我的博客「How to localize XSLT」,獲取完整的功能樣本http://www.codeproject.com/Articles/338731/LocalizeXSLT