.NET Локализованная карта сайта из базы данных?
У меня есть пользовательский sitemapprovider, который загружает страницы из базы данных.
Pages (pageid, fk_pageid (parent), title, url, show_in_menu)
Я хотел бы глобализировать / локализовать title
страницы. Какой самый лучший метод?
1 ответ
При создании объектов SiteMapNode используйте конструктор, который позволяет указывать неявные / явные ключи ресурсов. Я бы порекомендовал идти с явными ключами ресурса.
http://msdn.microsoft.com/en-us/library/ms150104.aspx
"Чтобы программно указать ресурсы для локализации, либо задайте для значения implicitResourceKey уникальное имя, которое будет использоваться для идентификации локализованных ресурсов для узла, либо установите для visibleResourceKeys коллекцию пар" имя / значение "NameValueCollection, где name - это свойство узла или пользовательский атрибут. to localize и value содержит значения локализации для свойства узла или пользовательского атрибута. Локализованные значения можно затем установить в соответствующих файлах.resx. Для получения дополнительной информации о том, как локализовать Title, Description и любые пользовательские свойства объекта SiteMapNode, см. Практическое руководство. Локализация данных карты сайта. Требования к синтаксису коллекции clearResourceKeys см. в разделе NameValueCollection. "
Обычно для локализации статической карты сайта вы используете выражение ресурса, подобное следующему: "$Resources:<ClassName>,<KeyName>,<DefaultValue>"
,
Вместо этого добавьте <ClassName>
, <KeyName>
, а также <DefaultValue>
Значения в поле visibleResourceKey NameValueCollection в порядке их появления в выражении, все добавляются с использованием одного и того же ключа.
Так что если бы ваше выражение было бы "$Resources:SiteMapResourceFileOrClass,RootNode.Title,My Root Node"
вместо этого сделайте следующее:
explicitResourceKeys.Add("Title", "SiteMapResourceFileOrClass")
explicitResourceKeys.Add("Title", "RootNode.Title")
explicitResourceKeys.Add("Title", "My Root Node")
Вы можете сделать то же самое для описания.