Dans de nombreux projets traitant de localisation, j’ai du localiser le contenu de WebParts, de User Controls ou d’Application Pages, et SharePoint 2010 au travers des APIs de ASP.NET le permet assez bien.
Mais pour localiser le titre d’une WebPart, là… Il n’y a pas vraiment de solution toute faite.
J’ai donc pris mes petites mains et j’ai écrit une joli classe abstraite, qui flanquée de quelques classes helper me permet de faire ceci; il me suffit tout simplement d’hériter de ma nouvelle classe LocalizableWebPart et le tour est joué !
Une fois la webpart héritée, il suffit de changer l’héritagede ses WebParts customs de WebPart en LocalizableWebPart.
Pour exemple, le code de cette classe:
public abstract class LocalizableTitleWebPart : WebPart
{
[WebPartStorage(Storage = Storage.Shared)]
public string LocalizedTitle { get; set; }
private LangageContainer langContainer = null;
protected string GetLocalizedProperty(LangageContainer container, string content)
{
if (container != null)
{
return container.GetOrInsertLanguage().EncodedLanguageContent;
}
else
{
container = LocalizationHelper.GetLanguagesContent(content);
return container.GetOrInsertLanguage().EncodedLanguageContent;
}
}
protected string SetLocalizedProperty(LangageContainer container, string content, string value)
{
container = LocalizationHelper.GetLanguagesContent(content);
var lang = container.GetOrInsertLanguage();
if (this.Page != null && this.Page.IsPostBack)
{
container.UpdateLanguage(lang.LanguageCode, value);
return LangageContainer.Serialize(container);
}
return content;
}
public override string Title
{
get
{
return GetLocalizedProperty(langContainer, this.LocalizedTitle);
}
set
{
this.LocalizedTitle = SetLocalizedProperty(langContainer, this.LocalizedTitle, value);
}
}
}
Ce que vous pouvez voir dans le code au dessus:
- une propriété WebPart automatiquement persistée qui stocke le contenu des langues du titre en XML,
- deux méthodes pour récupérer et sauvegarder la valeur de la langue courante.
Vous pouvez trouver le code de cette classe avec un exemple de WebPart dans le repo Git suivant:
https://github.com/JaYmZ666/localizableTitleWebPart
Happy coding!