Learn More





DNN Community Blog

The Community Blog is a personal opinion of community members and by no means the official standpoint of DNN Corp or DNN Platform. This is a place to express personal thoughts about DNNPlatform, the community and its ecosystem. Do you have useful information that you would like to share with the DNN Community in a featured article or blog? If so, please contact .

The use of the Community Blog is covered by our Community Blog Guidelines - please read before commenting or posting.

The Language SkinObject explained

This blog is long overdue. In DotNetNuke 04.06.00 the language skinobject was beefed up to be much more versatile. Apart from just a dropdown menu, it can also display links to languages. Even though Lorraine blogged about the new appearance, there is much more to the skinobject than meets the eyes!

The skinobject supports 2 display modes: dropdown menu and template based repeater (you can even use both at the same time). Apart from that, there is a common header and a common footer available (both templatable).

All templates of the skinobject use the DNN core TokenReplace functionality as template engine. This means that you can control visible appearance of the language skin object to a great extent.

First, let us look at all attributes of the skinobject:

Attribute Name


Allowed values

Default Value


String attribute, used to style the language dropdown list

Any valid CSS Class name



Boolean attribute, used to either display or hide the dropdown menu

Tue, False



Boolean attribute, used to either display or hide the language links repeater

True, False



String attribute for template to be used as common header

Any valid string



String attribute for template to be used as repeater header

Any valid string



String attribute for template to be used as repeater item

Any valid string

<a href="[URL]" class="Language" title="[CULTURE:NATIVENAME]"><img src="[I][FLAGSRC]" alt="[CULTURE:NATIVENAME]" border="0" /></a>


String attribute for template to be used as alternate repeater item

Any valid string



String attribute for template to be used as repeater separator item

Any valid string



String attribute for template to be used as repeater footer item

Any valid string



String attribute for template to be used as common footer

Any valid string


In order to facilitate the display of cultures, a CulturePropertyAccess class was created, which is used to render the name of a culture based on the different display attributes of the .NET CultureInfo  class. Inside the different template you can use the following CULTURE token properties to display the name of a culture:


Gets the culture name in the format "<languagefull> (<country/regionfull>)" in the language of the localized version of .NET Framework.


Gets the culture name in the format "<languagefull> (<country/regionfull>)" in English.


Gets the culture identifier for the current CultureInfo


Gets the culture name in the format "<languagecode2>-<country/regioncode2>".


Gets the culture name, consisting of the language, the country/region, and the optional script, that the culture is set to display.


Gets the ISO 639-2 three-letter code for the language of the current CultureInfo


Gets the ISO 639-1 two-letter code for the language of the current CultureInfo

(Descriptions copied from

By the way: the CULTURE token is available throughout DotNetNuke in every module that supports TokenReplace

The following tokens are also supported inside the Language skinobject template:


This will generate the correct URL for the current page in a specific culture


The name of a flag image (.gif only) for a specific culture, in the format "<languagecode2>-<country/regioncode2>.gif".


Returns “True” if a specific culture  is the current culture.


Inserts the Label text from the resource file.


Returns the directory that holds the core country flag images (/images/Flags)


Returns the portal directory


Returns the directory of the current skin


Returns the global (host) skin folder


Some samples:


Code (ascx)


Sample 1

<dnn:LANGUAGE runat="server" ID="dnnLANGUAGE" ShowMenu="False" ShowLinks="True" />

Default configuration in default DotNetNuke skin.

Sample 2

<dnn:LANGUAGE runat="server" ID="dnnLANGUAGE" ShowLinks="False" ShowMenu="True" />

Displays only dropdownlist

Sample 3

<dnn:LANGUAGE runat="server" ID="dnnLANGUAGE" ShowLinks="False" ShowMenu="True" CommonFooterTemplate=' <img src="[I][FLAGSRC]" alt="[CULTURE:NATIVENAME]" border="0" />' />

Displays dropdownlist and flag of currently selected language

Sample 4

<dnn:LANGUAGE runat="server" ID="dnnLANGUAGE" ShowLinks="True" ShowMenu="False" ItemTemplate='<a href="[URL]" class="Language" title="[CULTURE:NATIVENAME]"><span class="Language[SELECTED]">[CULTURE:NAME]</span></a>'/>

Displays text links for languages. Selected language has different classname




Michael Tobisch
I want the names of the language without the region/culture, e.g. "Deutsch", "English", "Français" etc. How can I achieve this?

Best wishes
Michael Tobisch Wednesday, July 24, 2013 10:29 AM (link)
Tobias Wiklund
This list has not the attribute SelectedItemTemplate. Without it, a flag is always displayed if you enter a template in ItemTemplate. Set this to replace the flags with text:

Tobias Wiklund Tuesday, February 18, 2014 3:40 AM (link)
Yes, I don't understand why is there no SelectedItemTemplate? I am trying to turn the languages into an unordered list and it would work great...except for the selected is always a span mixed in with my list items. It's really making something that should be simple rather difficult.
L P Friday, March 07, 2014 9:50 AM (link)
Kamran Shahid
I want's same as micahel
Kamran Shahid Thursday, May 08, 2014 1:28 PM (link)
Tom Van Wynen
Like Michael in the first comment, I also want only the " without the ()
but I don't see an option for this in the CULTURE: token properties above.
Tom Van Wynen Wednesday, October 01, 2014 9:39 AM (link)
Tom Van Wynen
sorry, the form stripped out the content I had between the quotes and parentheses.
languagefull without (country/regionfull)
Actually, I want the language name in the local script but don't know if that is even possible. I am getting that now on my current site with the old Apollo Multilingual system.
Tom Van Wynen Thursday, October 02, 2014 10:25 AM (link)
abdullah tahan
who are asking how to show only test of the language i've searched alot but i found away by my self , when i change the ItemTemplate changed only for the new localized language and didn't for the defualt one so go to admin/skins/app_localizedresources select
and change
AlternateTemplate.Default (this is for other language ) i made it like :
ItemTemplate.Default (this is for default ) i made it like :

abdullah tahan Thursday, April 30, 2015 9:19 AM (link)

Comment Form

Only registered users may post comments.


2sic Daniel Mettler (124)
Aderson Oliveira (15)
Alec Whittington (11)
Alex Shirley (10)
Andrew Nurse (30)
Anthony Glenwright (5)
Antonio Chagoury (28)
Ash Prasad (21)
Ben Schmidt (1)
Benjamin Hermann (25)
Benoit Sarton (9)
Beth Firebaugh (12)
Bill Walker (36)
Bob Kruger (5)
Brian Dukes (2)
Brice Snow (1)
Bruce Chapman (20)
Bryan Andrews (1)
cathal connolly (55)
Charles Nurse (163)
Chris Hammond (203)
Chris Paterra (55)
Clinton Patterson (28)
Cuong Dang (21)
Daniel Bartholomew (2)
Dave Buckner (2)
David Poindexter (3)
David Rodriguez (2)
Doug Howell (11)
Erik van Ballegoij (30)
Ernst Peter Tamminga (74)
Geoff Barlow (6)
Gifford Watkins (3)
Gilles Le Pigocher (3)
Ian Robinson (7)
Israel Martinez (17)
Jan Blomquist (2)
Jan Jonas (3)
Jaspreet Bhatia (1)
Jenni Merrifield (6)
Joe Brinkman (268)
John Mitchell (1)
Jon Henning (14)
Jonathan Sheely (4)
Jordan Coopersmith (1)
Joseph Craig (2)
Kan Ma (1)
Keivan Beigi (3)
Ken Grierson (10)
Kevin Schreiner (6)
Leigh Pointer (31)
Lorraine Young (60)
Malik Khan (1)
Matthias Schlomann (15)
Mauricio Márquez (5)
Michael Doxsey (7)
Michael Tobisch (3)
Michael Washington (202)
Mike Horton (19)
Mitchel Sellers (28)
Nathan Rover (3)
Navin V Nagiah (14)
Néstor Sánchez (31)
Nik Kalyani (14)
Peter Donker (52)
Philip Beadle (135)
Philipp Becker (4)
Richard Dumas (22)
Robert J Collins (5)
Roger Selwyn (8)
Ruben Lopez (1)
Ryan Martinez (1)
Salar Golestanian (4)
Sanjay Mehrotra (9)
Scott McCulloch (1)
Scott S (11)
Scott Wilkinson (3)
Scott Willhite (97)
Sebastian Leupold (80)
Shaun Walker (237)
Shawn Mehaffie (17)
Stefan Cullmann (12)
Stefan Kamphuis (12)
Steve Fabian (31)
Timo Breumelhof (24)
Tony Henrich (3)
Torsten Weggen (2)
Vicenç Masanas (27)
Vincent Nguyen (3)
Vitaly Kozadayev (6)
Will Morgenweck (37)
Will Strohl (163)
William Severance (5)
Try Evoq
For Free
Start Free Trial
a Demo
See Evoq Live
Need More Information?