Posted in: Comments

Give your editors the possibility to select a country from a drop down list.

This is a really simple custom property but shows how easy it is to extend EPiServer.

First we create the property...

namespace DV.CustomProperties
{
    using System;
    using EPiServer.Core;
    using EPiServer.PlugIn;

    [Serializable]
    [PageDefinitionTypePlugIn(
        DisplayName = "Country",
        Description = "Country")]
    public class PropertyCountry : PropertyString
    {
        public override IPropertyControl CreatePropertyControl()
        {
            return new PropertyCountryControl();
        }
    }
}

And then the control

namespace DV.CustomProperties
{
    using System;
    using System.Collections.Generic;
    using System.Globalization;
    using System.Web.UI.WebControls;
    using EPiServer.Web.PropertyControls;

    class PropertyCountryControl : PropertySelectControlBase
    {
        protected override void SetupEditControls()
        {
            SortedDictionary<string, string> countries = new SortedDictionary<string, string>();

            foreach (CultureInfo cultureInfo in CultureInfo.GetCultures(CultureTypes.SpecificCultures))
            {
                RegionInfo regionInfo = new RegionInfo(cultureInfo.Name);

                if (!countries.ContainsKey(regionInfo.EnglishName))
                {
                    countries.Add(regionInfo.EnglishName, regionInfo.TwoLetterISORegionName.ToLower());
                }
            }

            foreach (var country in countries)
            {
                ListItem item = new ListItem(country.Key, country.Value);

                item.Selected = item.Value.Equals(this.ToString(), StringComparison.OrdinalIgnoreCase);

                base.EditControl.Items.Add(item);
            }
        }

        protected override bool AutoGenerateEmptyValue
        {
            get
            {
                return true;
            }
            set
            {
                base.AutoGenerateEmptyValue = value;
            }
        }
    }
}

When we want to display the value we can take advantage of the translation function.

<%= Translate(string.Concat("/countries/", CurrentPage["Country"])) %>
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<languages>
  <language name="svenska" id="sv">
    <countries>
      <ad>Andorra</ad>
      <ae>Förenade Arabemiraten</ae>
      <af>Afghanistan</af>
      <ag>Antigua och Barbuda</ag>
      <ai>Anguilla</ai>
      <al>Albanien</al>
      <am>Armenien</am>
      <an>Nederländska Antillerna</an>
      <ao>Angola</ao>
      <aq>Antarktis</aq>
      <ar>Argentina</ar>
      <as>Amerikanska Samoa</as>
      <at>Österrike</at>
      <au>Australien</au>
      <aw>Aruba</aw>
      <ax>Åland</ax>
      <az>Azerbajdzjan</az>
      <ba>Bosnien och Hercegovina</ba>
      <bb>Barbados</bb>
      <bd>Bangladesh</bd>
      <be>Belgien</be>
      <bf>Burkina Faso</bf>
      <bg>Bulgarien</bg>
      <bh>Bahrain</bh>
      <bi>Burundi</bi>
      <bj>Benin</bj>
      <bm>Bermuda</bm>
      <bn>Brunei</bn>
      <bo>Bolivia</bo>
      <br>Brasilien</br>
      <bs>Bahamas</bs>
      <bt>Bhutan</bt>
      <bv>Bouvetön</bv>
      <bw>Botswana</bw>
      <by>Vitryssland</by>
      <bz>Belize</bz>
      <ca>Kanada</ca>
      <cc>Kokosöarna</cc>
      <cf>Centralafrikanska republiken</cf>
      <cg>Kongo-Brazzaville</cg>
      <ch>Schweiz</ch>
      <ci>Elfenbenskusten</ci>
      <ck>Cooköarna</ck>
      <cl>Chile</cl>
      <cm>Kamerun</cm>
      <cn>Kina</cn>
      <co>Colombia</co>
      <cr>Costa Rica</cr>
      <cu>Kuba</cu>
      <cv>Kap Verde</cv>
      <cx>Julön</cx>
      <cy>Cypern</cy>
      <cz>Tjeckien</cz>
      <de>Tyskland</de>
      <dj>Djibouti</dj>
      <dk>Danmark</dk>
      <dm>Dominica</dm>
      <do>Dominikanska republiken</do>
      <dz>Algeriet</dz>
      <ec>Ecuador</ec>
      <ee>Estland</ee>
      <eg>Egypten</eg>
      <eh>Västsahara</eh>
      <er>Eritrea</er>
      <es>Spanien</es>
      <et>Etiopien</et>
      <fi>Finland</fi>
      <fj>Fiji</fj>
      <fk>Falklandsöarna</fk>
      <fm>Mikronesiska federationen</fm>
      <fo>Färöarna</fo>
      <fr>Frankrike</fr>
      <fx>France métropolitaine (Frankrike, europeiska delen)</fx>
      <ga>Gabon</ga>
      <gb>Storbritannien</gb>
      <gd>Grenada</gd>
      <ge>Georgien</ge>
      <gf>Franska Guyana</gf>
      <gh>Ghana</gh>
      <gi>Gibraltar</gi>
      <gl>Grönland</gl>
      <gm>Gambia</gm>
      <gn>Guinea</gn>
      <gp>Guadeloupe</gp>
      <gq>Ekvatorialguinea</gq>
      <gr>Grekland</gr>
      <gt>Guatemala</gt>
      <gu>Guam</gu>
      <gw>Guinea Bissau</gw>
      <gy>Guyana</gy>
      <hk>Hongkong</hk>
      <hm>Heard- och McDonaldsöarna</hm>
      <hn>Honduras</hn>
      <hr>Kroatien</hr>
      <ht>Haiti</ht>
      <hu>Ungern</hu>
      <id>Indonesien</id>
      <ie>Irland</ie>
      <il>Israel</il>
      <in>Indien</in>
      <io>Brittiska territoriet i Indiska Oceanen</io>
      <iq>Irak</iq>
      <ir>Iran</ir>
      <is>Island</is>
      <it>Italien</it>
      <jm>Jamaica</jm>
      <jo>Jordanien</jo>
      <jp>Japan</jp>
      <ke>Kenya</ke>
      <kg>Kirgizistan</kg>
      <kh>Kambodja</kh>
      <ki>Kiribati</ki>
      <km>Komorerna</km>
      <kn>Saint Kitts och Nevis</kn>
      <kp>Nordkorea</kp>
      <kr>Sydkorea</kr>
      <kw>Kuwait</kw>
      <ky>Caymanöarna</ky>
      <kz>Kazakstan</kz>
      <la>Laos</la>
      <lb>Libanon</lb>
      <lc>Saint Lucia</lc>
      <li>Liechtenstein</li>
      <lk>Sri Lanka</lk>
      <lr>Liberia</lr>
      <ls>Lesotho</ls>
      <lt>Litauen</lt>
      <lu>Luxemburg</lu>
      <lv>Lettland</lv>
      <ly>Libyen</ly>
      <ma>Marocko</ma>
      <mc>Monaco</mc>
      <md>Moldavien</md>
      <me>Montenegro</me>
      <mg>Madagaskar</mg>
      <mh>Marshallöarna</mh>
      <mk>Makedonien</mk>
      <ml>Mali</ml>
      <mm>Burma</mm>
      <mn>Mongoliet</mn>
      <mo>Macau</mo>
      <mp>Nordmarianerna</mp>
      <mq>Martinique</mq>
      <mr>Mauretanien</mr>
      <ms>Montserrat</ms>
      <mt>Malta</mt>
      <mu>Mauritius</mu>
      <mv>Maldiverna</mv>
      <mw>Malawi</mw>
      <mx>Mexiko</mx>
      <my>Malaysia</my>
      <mz>Moçambique</mz>
      <na>Namibia</na>
      <nc>Nya Kaledonien</nc>
      <ne>Niger</ne>
      <nf>Norfolkön</nf>
      <ng>Nigeria</ng>
      <ni>Nicaragua</ni>
      <nl>Nederländerna</nl>
      <no>Norge</no>
      <np>Nepal</np>
      <nr>Nauru</nr>
      <nu>Niue</nu>
      <nz>Nya Zeeland</nz>
      <om>Oman</om>
      <pa>Panama</pa>
      <pe>Peru</pe>
      <pf>Franska Polynesien</pf>
      <pg>Papua Nya Guinea</pg>
      <ph>Filippinerna</ph>
      <pk>Pakistan</pk>
      <pl>Polen</pl>
      <pm>Saint-Pierre och Miquelon</pm>
      <pn>Pitcairnöarna</pn>
      <pr>Puerto Rico</pr>
      <pt>Portugal</pt>
      <pw>Palau</pw>
      <py>Paraguay</py>
      <qa>Qatar</qa>
      <re>Réunion</re>
      <ro>Rumänien</ro>
      <rs>Serbien</rs>
      <ru>Ryssland</ru>
      <rw>Rwanda</rw>
      <sa>Saudiarabien</sa>
      <sb>Salomonöarna</sb>
      <sc>Seychellerna</sc>
      <sd>Sudan</sd>
      <se>Sverige</se>
      <sg>Singapore</sg>
      <sh>Sankta Helena</sh>
      <si>Slovenien</si>
      <sj>Svalbard och Jan Mayen</sj>
      <sk>Slovakien</sk>
      <sl>Sierra Leone</sl>
      <sm>San Marino</sm>
      <sn>Senegal</sn>
      <so>Somalia</so>
      <sr>Surinam</sr>
      <st>São Tomé och Príncipe</st>
      <sv>El Salvador</sv>
      <sy>Syrien</sy>
      <sz>Swaziland</sz>
      <tc>Turks- och Caicosöarna</tc>
      <td>Tchad</td>
      <tf>Franska södra territorierna</tf>
      <tg>Togo</tg>
      <th>Thailand</th>
      <tj>Tadzjikistan</tj>
      <tk>Tokelauöarna</tk>
      <tm>Turkmenistan</tm>
      <tn>Tunisien</tn>
      <to>Tonga</to>
      <tp>Östtimor</tp>
      <tr>Turkiet</tr>
      <tt>Trinidad och Tobago</tt>
      <tv>Tuvalu</tv>
      <tw>Taiwan</tw>
      <tz>Tanzania</tz>
      <ua>Ukraina</ua>
      <ug>Uganda</ug>
      <um>USA:s yttre öar</um>
      <us>USA</us>
      <uy>Uruguay</uy>
      <uz>Uzbekistan</uz>
      <va>Vatikanstaten</va>
      <vc>Saint Vincent och Grenadinerna</vc>
      <ve>Venezuela</ve>
      <vg>Brittiska Jungfruöarna</vg>
      <vi>Amerikanska Jungfruöarna</vi>
      <vn>Vietnam</vn>
      <vu>Vanuatu</vu>
      <wf>Wallis- och Futunaöarna</wf>
      <ws>Samoa</ws>
      <ye>Jemen</ye>
      <yt>Mayotte</yt>
      <za>Sydafrika</za>
      <zm>Zambia</zm>
      <zw>Zimbabwe</zw>
    </countries>
  </language>
</languages>