我正在创建类库,其中包含一些常用的类,如人员,地址等。这个库将用于多语言应用程序,我正在寻找最方便的方式来表示人的性别。
理想情况下,我希望能够像这样编码:
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
答案 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()