# 时间显示文字问题的修正 #

该问题早就有了,最新的一个版本里也没得到解决。主要问题是 显示时间的文字是随Forum运行的服务器的地域信息而定,不能随用户设置的语言来更改。

Edit Memo by Chaozi :

如何解决问题,其实很简单,在时间字符串化的方法中提供了根据地域信息显示语言文字的参数 DateTime.ToString(string format,System.IFormatProvider provider); 根据用户选择的语言向ToString方法提供这个 provider就可以显示相应语言的时间了。

Step1:/Components/Components/User.cs  加入Culture属性
public CultureInfo Culture
{
 
getreturn 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;
    }

}

在相应的方法中添加该属性就可以了。

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;
注释掉的是原有的,下面的是超子改的,区别很明显 user 为要查看的用户,Users.GetUser()为当前用户 , 我们显示时间格式,以及调整相对时区都要针对当前用户,而不是要查看的这个用户,如果不修改的话显示的时间应该是混乱的,日期的格式当然也是啥样的都有了。这种问题比较多,慢慢的一个个的摘。

Step3:在上述的修改都完成后,需要修改语言设置变更时时间格式不更新的bug
       
Click here

posted on 2004-12-02 17:08  超子  阅读(706)  评论(0编辑  收藏  举报

导航