<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">Blog posts by Jens Qvist blog</title><link href="https://world.optimizely.com/blogs/Jens-Qvist-blog/" /><updated>2011-12-19T19:29:17.2470000Z</updated><id>https://world.optimizely.com/blogs/Jens-Qvist-blog/</id><generator uri="https://world.optimizely.com/blogs/Jens-Qvist-blog/" version="2.0">Optimizely World</generator><entry><title>Creating a BrowserLanguageCriteria for Visitor groups.</title><link href="https://world.optimizely.com/blogs/Jens-Qvist-blog/Dates/2011/12/Creating-a-BrowserLanguageCriteria-for-Visitor-groups/" /><id>https://world.optimizely.com/blogs/Jens-Qvist-blog/Dates/2011/12/Creating-a-BrowserLanguageCriteria-for-Visitor-groups/</id><published>2011-12-19T19:11:43.0000000Z</published><updated>2011-12-19T19:29:17.2470000Z</updated><author><name>jens.qvist@consid.se</name></author><category term="Blog post" /><summary type="html">&lt;p&gt;&lt;font size="1"&gt;This is my first blog post ever, on any site I think! So I’m a bit nervous, but I hope that someone will find it interesting. So here goes!&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1"&gt;This morning I decided that I should learn how to create custom criterias for Visitor groups. I started out by reading an &lt;/font&gt;&lt;a href="http://tedgustaf.com/en/blog/2011/10/create-new-visitor-group-criterion-in-episerver/"&gt;&lt;font size="1"&gt;article&lt;/font&gt;&lt;/a&gt;&lt;font size="1"&gt; by Ted Nyberg, to get an idea on how it worked.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1"&gt;But I was short on ideas on what to build. Until I stumbled on &lt;/font&gt;&lt;a title="http://criteriapack.codeplex.com/" href="http://criteriapack.codeplex.com/"&gt;&lt;font size="1"&gt;http://criteriapack.codeplex.com/&lt;/font&gt;&lt;/a&gt;&lt;font size="1"&gt;, where they had a list on planned criterias. Perfect I thought, and choose to create the BrowserLanguageCriterion. I used BrowserOSCriterion as a template for my own code, and started working. &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="/link/f829fb7afc0744e28aa468c74de7f27a.jpg"&gt;&lt;font size="1"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="language" border="0" alt="language" src="/link/bce40b64089a4fe2915112720ebd3c7a.jpg" width="565" height="432" /&gt;&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1"&gt;So first I needed a settings class as mentioned in Teds article. I decided that the editor would want to choose a language from a dropdownlist and every culture/language in the browser should be availible. It was easy figuring out how to get all cultures. The problem for me was to get all cultures into an enum, since I started out using EnumSelectionFactory. Which I guess require an enum?&lt;/font&gt;&lt;/p&gt;  &lt;table border="1" cellspacing="0" cellpadding="2" width="553"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="551"&gt;         &lt;pre class="language-csharp"&gt;&lt;code&gt;&lt;font size="1" face="Arial"&gt;[DojoWidget(SelectionFactoryType = &lt;span class="kwrd"&gt;typeof&lt;/span&gt;(EnumSelectionFactory), 
        AdditionalOptions = &lt;span class="str"&gt;&amp;quot;{ selectOnClick: true }&amp;quot;&lt;/span&gt;)]
&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; BrowserLanguage { get; set; }&lt;/font&gt;&lt;/code&gt;&lt;/pre&gt;
        &lt;style type="text/css"&gt;




.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;&lt;/table&gt;
&lt;style type="text/css"&gt;











.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;&lt;font size="1"&gt;To be honest, I haven’t used Enums much and had to google if there was a possibility to convert a list/array of languages to an enum. Apparently not, according to some forum post. &lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;font size="1"&gt;My solution was kinda easy once I figured out how to do it. I created my own SelectionFactoryType.&lt;/font&gt;&lt;/p&gt;

&lt;table border="1" cellspacing="0" cellpadding="1" width="551"&gt;&lt;tbody&gt;
    &lt;tr&gt;
      &lt;td valign="top" width="549"&gt;
        &lt;pre class="language-csharp"&gt;&lt;code&gt;&lt;font face="Arial"&gt;&lt;font size="1"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; LanguageFactory : ISelectionFactory
{
    &lt;span class="kwrd"&gt;public&lt;/span&gt; IEnumerable&amp;lt;SelectListItem&amp;gt; GetSelectListItems(Type property)
    {
        &lt;span class="rem"&gt;//For each culture availible&lt;/span&gt;
        &lt;span class="kwrd"&gt;foreach&lt;/span&gt;(CultureInfo ci &lt;span class="kwrd"&gt;in&lt;/span&gt; CultureInfo.GetCultures(CultureTypes.AllCultures)) {
            &lt;span class="kwrd"&gt;yield&lt;/span&gt; &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; SelectListItem() { Text = ci.EnglishName, Value = ci.EnglishName };
        }  
    }
}&lt;/font&gt;&lt;/font&gt;&lt;/code&gt;&lt;/pre&gt;
        &lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;&lt;/table&gt;
&lt;style type="text/css"&gt;











.csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;font size="1"&gt;and changed my SelectionFactoryType to my newly created one; &lt;/font&gt;

&lt;table border="1" cellspacing="0" cellpadding="2" width="550"&gt;&lt;tbody&gt;
    &lt;tr&gt;
      &lt;td valign="top" width="548"&gt;
        &lt;pre class="language-csharp"&gt;&lt;code&gt;&lt;font size="1" face="Arial"&gt;[Required]
[DojoWidget(SelectionFactoryType = &lt;span class="kwrd"&gt;typeof&lt;/span&gt;(LanguageFactory))]
&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; BrowserLanguage { get; set; }&lt;/font&gt;&lt;/code&gt;&lt;/pre&gt;
      &lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;&lt;/table&gt;

&lt;div align="left"&gt;&lt;font size="1"&gt;Finished with my settings class, I started working on the criterion class. Basically what I needed was to compare the
    &lt;br /&gt;browserlanguage with the language choosen in the criteria for the visitorgroup.

    &lt;br /&gt;This was done easily by matching the two. &lt;/font&gt;

  &lt;table border="1" cellspacing="0" cellpadding="2" width="556"&gt;&lt;tbody&gt;
      &lt;tr&gt;
        &lt;td valign="top" width="554"&gt;
          &lt;pre class="language-csharp"&gt;&lt;code&gt;&lt;font size="1" face="Arial"&gt;[VisitorGroupCriterion(
    Category = &lt;span class="str"&gt;&amp;quot;Technical Criteria&amp;quot;&lt;/span&gt;,
    Description = &lt;span class="str"&gt;&amp;quot;Match Browser language with specified value&amp;quot;&lt;/span&gt;,
    DisplayName = &lt;span class="str"&gt;&amp;quot;Browser language&amp;quot;&lt;/span&gt;)]
&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; BrowserLanguageCriterion : CriterionBase&amp;lt;BrowserLanguageModel&amp;gt;
{
    &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; _browserlang;
    &lt;span class="rem"&gt;//matches the browserlanguage with the criterion set language.&lt;/span&gt;
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; IsMatch(System.Security.Principal.IPrincipal principal, &lt;/font&gt;&lt;/code&gt;&lt;/pre&gt;

          &lt;pre class="language-csharp"&gt;&lt;code&gt;&lt;font size="1" face="Arial"&gt;System.Web.HttpContextBase httpContext)
    {
        &lt;span class="kwrd"&gt;return&lt;/span&gt; ((String.IsNullOrEmpty(&lt;span class="kwrd"&gt;base&lt;/span&gt;.Model.BrowserLanguage) ? &lt;span class="kwrd"&gt;true&lt;/span&gt; : &lt;/font&gt;&lt;/code&gt;&lt;/pre&gt;

          &lt;pre class="language-csharp"&gt;&lt;code&gt;&lt;font size="1" face="Arial"&gt;        StringMatchHelper.IsMatch(_browserlang, &lt;span class="kwrd"&gt;base&lt;/span&gt;.Model.BrowserLanguage, &lt;/font&gt;&lt;/code&gt;&lt;/pre&gt;

          &lt;pre class="language-csharp"&gt;&lt;code&gt;&lt;font face="Arial"&gt;&lt;font size="1"&gt;&lt;span class="kwrd"&gt;        base&lt;/span&gt;.Model.BrowserLanguageMatchType)));             
    }

    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Subscribe(ICriterionEvents criterionEvents)
    {
        &lt;span class="kwrd"&gt;base&lt;/span&gt;.Subscribe(criterionEvents);
        criterionEvents.StartRequest += criterionEvents_StartRequest;
    }

    &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; criterionEvents_StartRequest(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, CriterionEventArgs e)
    {
        &lt;span class="rem"&gt;//Get the browserlanguage&lt;/span&gt;
        &lt;span class="kwrd"&gt;string&lt;/span&gt; browserLanguage = e.HttpContext.Request.UserLanguages[0];
        Thread.CurrentThread.CurrentCulture = &lt;/font&gt;&lt;/font&gt;&lt;/code&gt;&lt;/pre&gt;

          &lt;pre class="language-csharp"&gt;&lt;code&gt;&lt;font size="1" face="Arial"&gt;        System.Globalization.CultureInfo.CreateSpecificCulture(browserLanguage);
        _browserlang = Thread.CurrentThread.CurrentCulture.EnglishName;
    }

    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Unsubscribe(ICriterionEvents criterionEvents)
    {
        criterionEvents.StartRequest -= criterionEvents_StartRequest;
        &lt;span class="kwrd"&gt;base&lt;/span&gt;.Unsubscribe(criterionEvents);
    }
}&lt;/font&gt;&lt;/code&gt;&lt;/pre&gt;
          &lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;/td&gt;
      &lt;/tr&gt;
    &lt;/tbody&gt;&lt;/table&gt;

  &lt;br /&gt;&lt;font size="1"&gt;It was a great experience getting this to work and it made me write my first blog!
    &lt;br /&gt;I’m quite pleased how this day turned out and hope that someone will find my 

    &lt;br /&gt;blogpost interesting!

    &lt;br /&gt;/Jens Qvist Here is the full source;

    &lt;br /&gt;

    &lt;br /&gt;&lt;/font&gt;

  &lt;table border="1" cellspacing="0" cellpadding="2" width="565"&gt;&lt;tbody&gt;
      &lt;tr&gt;
        &lt;td valign="top" width="563"&gt;
          &lt;pre class="language-csharp"&gt;&lt;code&gt;&lt;font face="Arial"&gt;&lt;font size="1"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; EPiServer.Personalization.VisitorGroups;
&lt;span class="kwrd"&gt;using&lt;/span&gt; EPiServer.Data;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Threading;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Globalization;
&lt;span class="kwrd"&gt;using&lt;/span&gt; EPiServer.Web.Mvc.VisitorGroups;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Collections.Generic;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.ComponentModel.DataAnnotations;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Web.Mvc;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System;

&lt;span class="kwrd"&gt;namespace&lt;/span&gt; EPiServer.Classes
{
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; BrowserLanguageModel : CriterionModelBase
    {
        &lt;span class="kwrd"&gt;private&lt;/span&gt; MatchStringType _browserLanguageMatchType;
    
        [DojoWidget(SelectionFactoryType = &lt;span class="kwrd"&gt;typeof&lt;/span&gt;(EnumSelectionFactory), &lt;/font&gt;&lt;/font&gt;&lt;/code&gt;&lt;/pre&gt;

          &lt;pre class="language-csharp"&gt;&lt;code&gt;&lt;font size="1" face="Arial"&gt;             AdditionalOptions = &lt;span class="str"&gt;&amp;quot;{ selectOnClick: true }&amp;quot;&lt;/span&gt;)]
        &lt;span class="kwrd"&gt;public&lt;/span&gt; MatchStringType BrowserLanguageMatchType
        {
            get
            {
                &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;this&lt;/span&gt;._browserLanguageMatchType;
            }
            set
            {
                &lt;span class="kwrd"&gt;this&lt;/span&gt;._browserLanguageMatchType = &lt;span class="kwrd"&gt;value&lt;/span&gt;;
            }
        }
        [Required]
        [DojoWidget(SelectionFactoryType = &lt;span class="kwrd"&gt;typeof&lt;/span&gt;(LanguageFactory))]
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; BrowserLanguage { get; set; }

        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; ICriterionModel Copy()
        {
            &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;base&lt;/span&gt;.ShallowCopy();
        }
    }

    [VisitorGroupCriterion(
        Category = &lt;span class="str"&gt;&amp;quot;Technical Criteria&amp;quot;&lt;/span&gt;,
        Description = &lt;span class="str"&gt;&amp;quot;Match Browser language with specified value&amp;quot;&lt;/span&gt;,
        DisplayName = &lt;span class="str"&gt;&amp;quot;Browser language&amp;quot;&lt;/span&gt;)]
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; BrowserLanguageCriterion : CriterionBase&amp;lt;BrowserLanguageModel&amp;gt;
    {
        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; _browserlang;
        &lt;span class="rem"&gt;//matches the browserlanguage with the criterion set language.&lt;/span&gt;
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; IsMatch(System.Security.Principal.IPrincipal principal, &lt;/font&gt;&lt;/code&gt;&lt;/pre&gt;

          &lt;pre class="language-csharp"&gt;&lt;code&gt;&lt;font size="1" face="Arial"&gt;        System.Web.HttpContextBase httpContext)
        {
            &lt;span class="kwrd"&gt;return&lt;/span&gt; ((String.IsNullOrEmpty(&lt;span class="kwrd"&gt;base&lt;/span&gt;.Model.BrowserLanguage) ? &lt;span class="kwrd"&gt;true&lt;/span&gt; : &lt;/font&gt;&lt;/code&gt;&lt;/pre&gt;

          &lt;pre class="language-csharp"&gt;&lt;code&gt;&lt;font size="1" face="Arial"&gt;            StringMatchHelper.IsMatch(_browserlang, &lt;span class="kwrd"&gt;base&lt;/span&gt;.Model.BrowserLanguage, &lt;/font&gt;&lt;/code&gt;&lt;/pre&gt;

          &lt;pre class="language-csharp"&gt;&lt;code&gt;&lt;font size="1" face="Arial"&gt;            &lt;span class="kwrd"&gt;base&lt;/span&gt;.Model.BrowserLanguageMatchType)));             
        }
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Subscribe(ICriterionEvents criterionEvents)
        {
            &lt;span class="kwrd"&gt;base&lt;/span&gt;.Subscribe(criterionEvents);
            criterionEvents.StartRequest += criterionEvents_StartRequest;
        }
        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; criterionEvents_StartRequest(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, CriterionEventArgs e)
        {
            &lt;span class="rem"&gt;//Get the browserlanguage&lt;/span&gt;
            &lt;span class="kwrd"&gt;string&lt;/span&gt; browserLanguage = e.HttpContext.Request.UserLanguages[0];
            Thread.CurrentThread.CurrentCulture = &lt;/font&gt;&lt;/code&gt;&lt;/pre&gt;

          &lt;pre class="language-csharp"&gt;&lt;code&gt;&lt;font size="1" face="Arial"&gt;            System.Globalization.CultureInfo.CreateSpecificCulture(browserLanguage);
            _browserlang = Thread.CurrentThread.CurrentCulture.EnglishName;
        }
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Unsubscribe(ICriterionEvents criterionEvents)
        {
            criterionEvents.StartRequest -= criterionEvents_StartRequest;
            &lt;span class="kwrd"&gt;base&lt;/span&gt;.Unsubscribe(criterionEvents);
        }
    }
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; LanguageFactory : ISelectionFactory
    {
        &lt;span class="kwrd"&gt;public&lt;/span&gt; IEnumerable&amp;lt;SelectListItem&amp;gt; GetSelectListItems(Type property)
        {
            &lt;span class="rem"&gt;//For each culture availible&lt;/span&gt;
            &lt;span class="kwrd"&gt;foreach&lt;/span&gt;(CultureInfo ci &lt;span class="kwrd"&gt;in&lt;/span&gt; CultureInfo.GetCultures(CultureTypes.AllCultures)) {
                &lt;span class="kwrd"&gt;yield&lt;/span&gt; &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; SelectListItem() { Text = ci.EnglishName, Value = ci.EnglishName };
            }  
        }
    }
}&lt;/font&gt;&lt;/code&gt;&lt;/pre&gt;
          &lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;/td&gt;
      &lt;/tr&gt;
    &lt;/tbody&gt;&lt;/table&gt;

  &lt;br /&gt;&lt;style type="text/css"&gt;










table {background: #fff; }
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;/div&gt;</summary></entry></feed>