# 时间显示文字问题的修正 #
该问题早就有了,最新的一个版本里也没得到解决。主要问题是 显示时间的文字是随Forum运行的服务器的地域信息而定,不能随用户设置的语言来更改。
Edit Memo by Chaozi :
如何解决问题,其实很简单,在时间字符串化的方法中提供了根据地域信息显示语言文字的参数 DateTime.ToString(string format,System.IFormatProvider provider); 根据用户选择的语言向ToString方法提供这个 provider就可以显示相应语言的时间了。
Step1:/Components/Components/User.cs 加入Culture属性
Step2: 修改所有时间ToString方法,加入Cultureinfo信息,这是个细致的工作,不要丢哦。
Formatter.cs 中有很多方法对Date对象进行字串化,为了方便定义一个静态属性
在相应的方法中添加该属性就可以了。
EditProfile.cs ,UserProfile.cs ,UserAttribute.cs 文件中也有需要修改的方法。
在修改中超子觉得需要注意的一个问题是,要站在论坛使用者的角度来修改,比如 UserAttribute.cs
注释掉的是原有的,下面的是超子改的,区别很明显 user 为要查看的用户,Users.GetUser()为当前用户 , 我们显示时间格式,以及调整相对时区都要针对当前用户,而不是要查看的这个用户,如果不修改的话显示的时间应该是混乱的,日期的格式当然也是啥样的都有了。这种问题比较多,慢慢的一个个的摘。
Step3:在上述的修改都完成后,需要修改语言设置变更时时间格式不更新的bug
Click here
Edit Memo by Chaozi :
如何解决问题,其实很简单,在时间字符串化的方法中提供了根据地域信息显示语言文字的参数 DateTime.ToString(string format,System.IFormatProvider provider); 根据用户选择的语言向ToString方法提供这个 provider就可以显示相应语言的时间了。
Step1:/Components/Components/User.cs 加入Culture属性
public CultureInfo Culture
{
get{ return new CultureInfo(this.Language); }
}
{
get{ return new CultureInfo(this.Language); }
}
实现 IFormatProvider 的类(MSDN)
类 | 说明 |
---|---|
CultureInfo | 表示有关特定区域性的信息,包括区域性的名称、书写体系和使用的日历,以及有关对常用操作(如格式化日期和排序字符串)提供信息的区域性特定对象的访问。 |
DateTimeFormatInfo | 定义如何根据区域性设置 DateTime 值的格式并显示这些值。 |
NumberFormatInfo | 根据区域性定义如何设置数值格式以及如何显示数值。 |
Step2: 修改所有时间ToString方法,加入Cultureinfo信息,这是个细致的工作,不要丢哦。
Formatter.cs 中有很多方法对Date对象进行字串化,为了方便定义一个静态属性
public static CultureInfo Cul
{
get{
return Users.GetUser().Culture;
}
}
{
get{
return Users.GetUser().Culture;
}
}
在相应的方法中添加该属性就可以了。
EditProfile.cs ,UserProfile.cs ,UserAttribute.cs 文件中也有需要修改的方法。
在修改中超子觉得需要注意的一个问题是,要站在论坛使用者的角度来修改,比如 UserAttribute.cs
case UserAttributes.Joined:
string format = user.DateFormat;
// l.Text = String.Format(text, ResourceManager.GetString("PostFlatView_Joined_chaozi"),user.GetTimezone(user.DateCreated).ToString(format,Users.GetUser().Culture));
l.Text = String.Format(text, ResourceManager.GetString("PostFlatView_Joined_chaozi"),Users.GetUser().GetTimezone(user.DateCreated).ToString(Users.GetUser().DateFormat,Users.GetUser().Culture));
break;
string format = user.DateFormat;
// l.Text = String.Format(text, ResourceManager.GetString("PostFlatView_Joined_chaozi"),user.GetTimezone(user.DateCreated).ToString(format,Users.GetUser().Culture));
l.Text = String.Format(text, ResourceManager.GetString("PostFlatView_Joined_chaozi"),Users.GetUser().GetTimezone(user.DateCreated).ToString(Users.GetUser().DateFormat,Users.GetUser().Culture));
break;
Step3:在上述的修改都完成后,需要修改语言设置变更时时间格式不更新的bug
Click here