HOW TO:當地語系化網站導覽資料
更新:2007 年 11 月
您可以當地語系化網站導覽中的下列屬性 (Property):
Attributes 集合中包含的自訂屬性
這些屬性是使用明確或隱含的運算式做為屬性值來當地語系化。如需運算式的詳細資訊,請參閱 ASP.NET 運算式概觀。如需資源檔案的詳細資訊,請參閱 ASP.NET 應用程式中的資源。
若要使用明確運算式當地語系化網站導覽節點的 Title 或 Description 屬性
在您的網站導覽中,將 EnableLocalization 屬性設定為 true。例如,在 Web.sitemap 檔中,變更 <siteMap> 節點,讓它看起來像是下列程式碼:
<siteMap enableLocalization="true">
在您的網站導覽中,將想要當地語系化的屬性值變更為資源字串,如下行區分大小寫的程式碼所示:
$resources:ClassName,KeyName,DefaultValue
例如,在 Web.sitemap 檔中,您的網站導覽節點可能看起來像是下列範例程式碼。
<siteMapNode url="~/Home.aspx" title="$resources:SiteMapLocalizations,HomePageTitle" description="$resources:SiteMapLocalizations,HomePageDescription,Default description" myCustomAttribute="$resources: CustomLocalizations,MyCustomAttribute" />
已當地語系化的標題和描述是從名為 SiteMapLocalizations.resx 的檔案使用 HomePageTitle 和 HomePageDescription 資源索引鍵取得。已當地語系化的自訂屬性 (Attribute) 則是從名為 CustomLocalizations.resx 的個別檔案取得。如需資源字串的詳細資訊,請參閱 ASP.NET 運算式概觀。
在應用程式根目錄內名為 App_GlobalResources 的資料夾中,建立您的 .resx 檔案。在 .resx 檔案內,個別屬性值是依機碼名稱值來製成索引。對於上述範例而言,SiteMapLocalizations.resx 檔案可能看起來像是下面這個樣子。
<?xml version="1.0" encoding="utf-8"?> <root> <xsd:schema id="root" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> <xsd:element name="root" msdata:IsDataSet="true"> <xsd:complexType> <xsd:choice maxOccurs="unbounded"> <xsd:element name="metadata"> <xsd:complexType> <xsd:sequence> <xsd:element name="value" type="xsd:string" minOccurs="0" /> </xsd:sequence> <xsd:attribute name="name" type="xsd:string" /> <xsd:attribute name="type" type="xsd:string" /> <xsd:attribute name="mimetype" type="xsd:string" /> </xsd:complexType> </xsd:element> <xsd:element name="assembly"> <xsd:complexType> <xsd:attribute name="alias" type="xsd:string" /> <xsd:attribute name="name" type="xsd:string" /> </xsd:complexType> </xsd:element> <xsd:element name="data"> <xsd:complexType> <xsd:sequence> <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> </xsd:sequence> <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" /> <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> </xsd:complexType> </xsd:element> <xsd:element name="resheader"> <xsd:complexType> <xsd:sequence> <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> </xsd:sequence> <xsd:attribute name="name" type="xsd:string" use="required" /> </xsd:complexType> </xsd:element> </xsd:choice> </xsd:complexType> </xsd:element> </xsd:schema> <resheader name="resmimetype"> <value>text/microsoft-resx</value> </resheader> <resheader name="version"> <value>2.0</value> </resheader> <resheader name="reader"> <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> </resheader> <resheader name="writer"> <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> </resheader> <data name="HomePageTitle"> <value xml:space="preserve">Home Page</value> </data> <data name="HomePageDescription"> <value xml:space="preserve">Home page of site</value> </data> </root>
如果您需要將字串當地語系化為多種語言,則可以建立其他 .resc 檔案,並在檔案名稱中加入地區設定資訊。例如,您可以將法文版的資源檔命名為 SiteMapLocalizations.fr.resx。
若要使用隱含運算式當地語系化網站導覽節點的 Title 或 Description 屬性
在您的網站導覽中,將 EnableLocalization 屬性設定為 true。例如,在 Web.sitemap 檔中,變更 <siteMap> 節點,讓它看起來像是下列程式碼:
<siteMap enableLocalization="true">
在您的網站導覽中,使用下列會區分大小寫的程式碼行,將名為 resourceKey 的屬性加入至想要當地語系化的網站導覽節點:
resourceKey="HomePage"
例如,在 Web.sitemap 檔中,您的 <siteMap> 節點可能看起來像是下列範例程式碼:
<siteMapNode url="~/Home.aspx" resourceKey="HomePage" title = "Default Title" description = "Default Description" />
已當地語系化的標題和描述是從名為 Web.sitemap.resx 的檔案使用 HomePage.title 和 HomePage.description 資源索引鍵而取得。
在應用程式根目錄內名為 App_GlobalResources 的資料夾中,建立您的 .resx 檔案。在 .resx 檔案內,個別屬性值是依名稱來製成索引。對於上述範例而言,Web.sitemap.resx 檔案可能看起來像是下面這個樣子:
注意事項:
全域資源檔中的機碼名稱不得包含句號 (.)。但是,使用隱含運算式時,網站導覽檔案中參考的全域資源中必須有句號。這是基於 resourceKey 語法的緣故。在某些編輯環境中 (如 Visual Web Developer),如果您在機碼名稱中使用句號,則可能會發生設計階段的錯誤。不過,這應該不會影響到編輯或儲存檔案的能力,而且是可省略的。
<?xml version="1.0" encoding="utf-8"?> <root> <xsd:schema id="root" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> <xsd:element name="root" msdata:IsDataSet="true"> <xsd:complexType> <xsd:choice maxOccurs="unbounded"> <xsd:element name="metadata"> <xsd:complexType> <xsd:sequence> <xsd:element name="value" type="xsd:string" minOccurs="0" /> </xsd:sequence> <xsd:attribute name="name" type="xsd:string" /> <xsd:attribute name="type" type="xsd:string" /> <xsd:attribute name="mimetype" type="xsd:string" /> </xsd:complexType> </xsd:element> <xsd:element name="assembly"> <xsd:complexType> <xsd:attribute name="alias" type="xsd:string" /> <xsd:attribute name="name" type="xsd:string" /> </xsd:complexType> </xsd:element> <xsd:element name="data"> <xsd:complexType> <xsd:sequence> <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> </xsd:sequence> <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" /> <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> </xsd:complexType> </xsd:element> <xsd:element name="resheader"> <xsd:complexType> <xsd:sequence> <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> </xsd:sequence> <xsd:attribute name="name" type="xsd:string" use="required" /> </xsd:complexType> </xsd:element> </xsd:choice> </xsd:complexType> </xsd:element> </xsd:schema> <resheader name="resmimetype"> <value>text/microsoft-resx</value> </resheader> <resheader name="version"> <value>2.0</value> </resheader> <resheader name="reader"> <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> </resheader> <resheader name="writer"> <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> </resheader> <data name="HomePage.description"> <value xml:space="preserve">Home Page Description</value> </data> <data name="HomePage.Text"> <value xml:space="preserve">Home Page Text from Resource File</value> </data> <data name="HomePage.title"> <value xml:space="preserve">Home Page Title from Resource File</value> </data> <assembly alias="mscorlib" name="mscorlib, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> <data name="LabelResource1.Visible" type="System.Boolean, mscorlib"> <value>True</value> </data> </root>
如果您需要將字串當地語系化為多種語言,則可以建立其他 .resc 檔案,並在檔案名稱中加入地區設定資訊。例如,您可以將法文版的資源檔命名為 Web.sitemap.fr.resx。
當地語系化網站導覽中的 URL 屬性
在網站導覽中,Url 屬性無法和 Title 和 Description 屬性一樣被當地語系化。
若要定義根據使用者的地區設定定義不同的巡覽結構
為每一個地區設定 (Locale) 定義不同的網站導覽檔。
將每一個網站導覽加入至 Web.config 檔案。如需詳細資訊,請參閱 HOW TO:設定多個網站導覽和網站導覽提供者。
在執行階段以程式設計方式切換至適當的 Provider。做法是將 SiteMapDataSource 物件的 SiteMapProvider 屬性 (或是將 SiteMapPath 物件的 SiteMapProvider 屬性) 設定為提供者名稱。如需詳細資訊,請參閱 HOW TO:在記憶體中以程式設計方式修改網站導覽節點。
穩固程式設計
明確和隱含運算式都不可以用於相同的網站導覽檔案中。