Substitute the built in LanguageBar control in the web.config with this custom one:
/// <summary>
/// This class inherits from LanguageList to extend it and add ImageUrls to the hyperlinks.
/// It is used by LanguageBar to render the contents of the language selector control.
/// </summary>
public class CustomLanguageBar : LanguageBar
{
protected override void CreateChildControls()
{
this.Controls.Clear();
this.container = new Container(this);
string name = String.IsNullOrEmpty(this.ProviderName)
? ConfigHelper.Handler.DefaultProvider : this.ProviderName;
if (this.provider == null || this.provider.Name != name)
if (!LocalizationManager.Providers.TryGetValue(name, out this.provider))
throw new InvalidOperationException(Messages.InvalidProviderName);
if (this.template == null)
this.template = new DefaultTemplate();
this.template.InstantiateIn(this.container);
CultureInfo currNeu = LocalizationManager.GetNeutralCulture(CultureInfo.CurrentUICulture);
this.container.LanguageList.AutoPostBack = false;
if (this.container.LanguageList is LanguageList)
((LanguageList)this.container.LanguageList).SelectedLanguages = this.SelectedLanguages;
int i = 0;
foreach (CultureInfo info in LocalizationManager.Cultures.Values)
{
ListItem item = new ListItem(UppercaseFirst(info.NativeName), LocalizationManager.GetMappingKey(info.Name));
if (info.Equals(currNeu) || info.Equals(CultureInfo.CurrentUICulture))
this.selectedIndex = i;
this.container.LanguageList.Items.Add(item);
i++;
}
this.Controls.Add(this.container);
}
protected override void OnPreRender(EventArgs e)
{
base.OnPreRender(e);
this.container.LanguageList.SelectedIndex = this.selectedIndex;
}
private string UppercaseFirst(string s)
{
// Check for empty string.
if (string.IsNullOrEmpty(s))
{
return string.Empty;
}
// Return char and concat substring.
return char.ToUpper(s[0]) + s.Substring(1);
}
#region Containers
private class Container : GenericContainer<CustomLanguageBar>
{
public Container(CustomLanguageBar owner)
: base(owner)
{
}
public ListControl LanguageList
{
get
{
if (this.languageList == null)
this.languageList = base.FindRequiredControl<ListControl>("languageList");
return this.languageList;
}
}
private ListControl languageList;
}
#endregion
#region Private Fields
private ITemplate template;
private Container container;
private LocalizationProvider provider;
private int selectedIndex;
#endregion
#region Templates
private class DefaultTemplate : ITemplate
{
public void InstantiateIn(Control container)
{
DropDownList list = new DropDownList();
list.CssClass = "cmsLangDropDown";
list.ID = "languageList";
container.Controls.Add(list);
}
}
#endregion
}