在多语言应用程序中使用的类库中表示性别的最佳方法

时间:2010-04-27 14:53:38

标签: c# oop class-design

我正在创建类库,其中包含一些常用的类,如人员,地址等。这个库将用于多语言应用程序,我正在寻找最方便的方式来表示人的性别。

理想情况下,我希望能够像这样编码:

Person person = new Person { Gender = Genders.Male, 
                             FirstName = "Nice", 
                             LastName = "Dude" }

if (person.Gender == Genders.Male)
  Console.WriteLine("person is Male");

Console.WriteLine(person.Gender); //Should output: Male

Console.WriteLine(person.Gender.ToString("da-DK")); 
//Should output the name of the gender in the language provided

List<Gender> genders = Genders.GetAll();
foreach(Gender gender in genders)
{
  Console.WriteLine(gender.ToString());
  Console.WriteLine(gender.ToString("da-DK"));
}
你会做什么?枚举和专门的Gender类?但那么本地化又如何呢?


编辑:我想指出这个问题至少与如何编写一些能够编写上述代码的类一样,我没有性别类或性别枚举,我正在尝试弄清楚如何编写能够实现上述代码的代码。 Genders课程会是什么样子?你会为Genders使用枚举吗?

问候
Jesper Hauge

4 个答案:

答案 0 :(得分:4)

您可以使用资源字符串解决本地化问题。 您可以为每个Gender-value创建一个资源字符串,并为您支持的每种文化进行翻译。

答案 1 :(得分:2)

我不会使用枚举,可能会选择使用内部构造函数和Gender静态类创建Genders类,以将可用选项包含为属性。这基本上与.NET中使用的方法相同,例如System.Drawing.Color及其关联的Colors类。

如果你认为我有一个班级而不是一个枚举,那么处理全球化会更容易。

答案 2 :(得分:1)

您的业务和数据类不应该关心您正在进行本地化这一事实,因为本地化(应该)是一个完全显示端操作。正确使用您拥有的内容,因为它具有可读性和可维护性。

为了本地化值,.NET已经有一个内置的资源管理器,它根据CurrentUICulture值自动选择适当的资源值。对于此特定方案,您可以使用枚举中的ToString()值作为资源文件中的键。这将允许您为不同的文化创建不同的文件(按照惯例和资源管理器期望的那样),每个文件都具有"Male""Female"的不同值。

http://msdn.microsoft.com/en-us/magazine/cc163609.aspx

http://msdn.microsoft.com/en-us/library/aa309421%28VS.71%29.aspx

答案 3 :(得分:-1)

另一种选择是在枚举类型上创建扩展方法。例如:

public static class GenderExtensions
{
    public static string ToLocalizedText(this Gender gender)
    {
         // Lookup Localized content based on state of 'gender'
         return "This person is male";
    }
}

然后你可以简单地写

gender.ToLocalizedText()

而不是

gender.ToString()