Procedura: localizzare i dati della mappa del sito
Aggiornamento: novembre 2007
In una mappa del sito è possibile localizzare le seguenti proprietà:
Proprietà personalizzate contenute nell'insieme Attributes
Queste proprietà vengono localizzate utilizzando come valore un'espressione esplicita o implicita. Per ulteriori informazioni sulle espressioni, vedere Cenni preliminari sulle espressioni ASP.NET. Per informazioni sui file di risorse, vedere Risorse nelle applicazioni ASP.NET.
Per localizzare la proprietà Title o Description di un nodo della mappa del sito utilizzando un'espressione esplicita
Nella mappa del sito impostare la proprietà EnableLocalization su true. Ad esempio, in un file Web.sitemap modificare il nodo <siteMap> per renderlo simile al seguente codice:
<siteMap enableLocalization="true">
Nella mappa del sito modificare il valore della proprietà da localizzare in una stringa di risorsa, come la riga di codice con distinzione maiuscole/minuscole riportata di seguito:
$resources:ClassName,KeyName,DefaultValue
Ad esempio, in un file Web.sitemap il nodo della mappa del sito può essere simile all'esempio di codice riportato di seguito.
<siteMapNode url="~/Home.aspx" title="$resources:SiteMapLocalizations,HomePageTitle" description="$resources:SiteMapLocalizations,HomePageDescription,Default description" myCustomAttribute="$resources: CustomLocalizations,MyCustomAttribute" />
Il titolo e la descrizione localizzati vengono ottenuti da un file denominato SiteMapLocalizations.resx, utilizzando le chiavi di risorsa HomePageTitle e HomePageDescription. L'attributo personalizzato localizzato viene invece ottenuto dal file CustomLocalizations.resx. Per ulteriori informazioni sulle stringhe di risorsa, vedere Cenni preliminari sulle espressioni ASP.NET.
Creare i file .resx in una cartella denominata App_GlobalResources nella radice dell'applicazione. Nel file .resx i singoli valori delle proprietà vengono indicizzati in base al valore del nome chiave. Nell'esempio precedente il file SiteMapLocalizations.resx potrebbe essere simile al seguente.
<?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>
Se occorre localizzare delle stringhe per più lingue, è possibile creare altri file .resx con informazioni relative alle impostazioni internazionali incluse nel nome file. La versione francese del file di risorsa, ad esempio, sarebbe SiteMapLocalizations.fr.resx.
Per localizzare la proprietà Title o Description di un nodo della mappa del sito utilizzando un'espressione implicita
Nella mappa del sito impostare la proprietà EnableLocalization su true. Ad esempio, in un file Web.sitemap modificare il nodo <siteMap> per renderlo simile al seguente codice:
<siteMap enableLocalization="true">
Nella mappa del sito aggiungere un attributo resourceKey al nodo della mappa del sito che si desidera localizzare utilizzando la riga di codice con distinzione maiuscole/minuscole riportata di seguito:
resourceKey="HomePage"
Ad esempio, in un file Web.sitemap il nodo <siteMap> potrebbe essere simile al seguente codice:
<siteMapNode url="~/Home.aspx" resourceKey="HomePage" title = "Default Title" description = "Default Description" />
Il titolo e la descrizione localizzati vengono ottenuti da un file denominato Web.sitemap.resx utilizzando le chiavi di risorsa HomePage.title e HomePage.description.
Creare il file .resx in una cartella denominata App_GlobalResources nella radice dell'applicazione. Nel file .resx i singoli valori delle proprietà vengono indicizzati in base al nome. Nell'esempio precedente il file Web.sitemap.resx potrebbe essere simile al seguente:
Nota: I nomi delle chiavi nei file di risorse globali non devono includere punti (.). I punti sono tuttavia necessari nelle risorse globali a cui viene fatto riferimento nei file di mappa del sito quando si utilizzano espressioni implicite, a causa della sintassi resourceKey. In alcuni ambienti di modifica, come Visual Web Developer, potrebbe essere generato un errore di progettazione se si utilizza un punto nel nome della chiave. Tale errore non dovrebbe tuttavia influire sulla capacità di modificare o salvare il file e può pertanto essere ignorato.
<?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>
Se occorre localizzare delle stringhe per più lingue, è possibile creare altri file .resx con informazioni relative alle impostazioni internazionali incluse nel nome file. La versione francese del file di risorsa, ad esempio, sarebbe Web.sitemap.fr.resx.
Localizzazione della proprietà URL in una mappa del sito
La proprietà Url non può essere localizzata in una mappa del sito come avviene per le proprietà Title e Description.
Per definire differenti strutture di spostamento in base alle impostazioni internazionali di un utente
Definire un file di mappa del sito differente per ciascuna lingua.
Aggiungere ciascuna mappa del sito al file Web.config. Per ulteriori informazioni, vedere Procedura: configurare più mappe del sito e provider di mappa del sito.
Passare al provider Provider appropriato a livello di codice in fase di esecuzione. Per eseguire questa operazione, impostare la proprietà SiteMapProvider dell'oggetto SiteMapDataSource o la proprietà SiteMapProvider dell'oggetto SiteMapPath sul nome del provider. Per ulteriori informazioni, vedere Procedura: modificare a livello di codice i nodi della mappa del sito in memoria.
Programmazione efficiente
Nello stesso file di mappa del sito non è possibile utilizzare espressioni esplicite e implicite.
Vedere anche
Attività
Procedura: configurare più mappe del sito e provider di mappa del sito
Procedura: modificare a livello di codice i nodi della mappa del sito in memoria
Concetti
Risorse nelle applicazioni ASP.NET
Cenni preliminari sulle espressioni ASP.NET
Protezione del sistema di spostamento all'interno dei siti ASP.NET
Protezione dell'accesso ai dati