The multilingual duck
I would group all of your properties together. Right now you have Code separated from the other properties by the ctors.
When overriding Equals, it's important to be sure that it can't throw an exception. The current implementation can throw an InvalidCastException.


    public override bool Equals(object obj)
    {
        var other = (DisplayLanguageSetting) obj;
        return Code.Equals(other.Code);
    }



A proper implementation would look something more like this.

public override bool Equals(object obj)
{
    var other = obj as DisplayLanguageSetting;

    if (other == null)
        return false;

    return Code.Equals(other.Code);
}

I don't much care for the control either.


 public partial class GeneralSettingsControl : UserControl



That's more or less all I need to see to know I don't care for it. How's that? Because that's all I need to know about the class to know that business logic is being put into the code behind instead of a presenter class. We've got a "smart" form on our hands here. Invert the control. This should be implementing an interface that exposes properties for the different view elements.

public interface IGeneralSettingsView
{
    DisplayLanguageSetting CurrentSetting {get; set;}
    IList&lt;DisplayLanguageSetting&gt; {get; set;}
}


Note that once you do this, the class no longer needs a Configuration Service at all. (The presenter will still need it though).