bs多语言设计

 1调用多语言相关程序的方法写在Glabal.asax中的Application_Start()方法中
public  class  Global  : System.Web. HttpApplication
    {
         protected  void  Application_Start(  object  sender,  EventArgs  e)
        {
             MultiLanguage_Helper .WriteUILanguageData2JS( HttpRuntime  .AppDomainAppPath);
             if  (  MultiLanguage_Helper .MultiLanguage ==  null  )
            {
                 string  _dbPath =  HttpRuntime .AppDomainAppPath +  @"MultiLanguage\MultiLanguage.db"  ;
                 MultiLanguage_Helper .SetWCFMultiLanguageData(_dbPath);
            }
        }
。。。。。。。
}

多语言的程序
  ///  <summary>
     ///  SQLite辅助类
     ///  </summary>
     public  class  MultiLanguage_Helper
    {
         ///  <summary>
         ///  多语言数据集
         ///  </summary>
         public  static  DataTable  MultiLanguage =  null ;

         ///  <summary>
         ///  设置WCF多语言数据
         ///  </summary>
         ///  <returns></returns>
         public  static  void  SetWCFMultiLanguageData(  string  _dbPath)
        {          
             try
            {
                 string  _sql =  @"select  error_code,language_code,value from error_multilanguageInfo;" ;
                 string  _connectionString =  string .Format(  "Data Source={0};Pooling=true;FailIfMissing=false" ,_dbPath);
                 using  (  SQLiteConnection  _conn =  new  SQLiteConnection (_connectionString))
                {
                     SQLiteCommand  _command =  new  SQLiteCommand  (_conn);
                    _command.CommandText = _sql;
                     SQLiteDataAdapter  _adapter =  new  SQLiteDataAdapter (_command);                   
                    _conn.Open();
                    MultiLanguage =  new  DataTable ();                 
                    _adapter.Fill(MultiLanguage);
                }               
            }
             catch  (  Exception  ex)
            {               
                 throw  new  Exception (  "error" ,ex);
            }
        }

         ///  <summary>
         ///  写入多语言JS文件
         ///  </summary>
         ///  <param name="_webPath"></param>
         public  static  void  WriteUILanguageData2JS(  string  _webPath)
        {
             try
            {
                 string  _dbPath = _webPath +  @"MultiLanguage\MultiLanguage.db"  ;
                 string  _dbVersion =  "" ;
                 ///  检查是否需要更新JS文件
                 bool  _isUpdate = IsUpdate2JS(_dbPath,  ref  _dbVersion);
                 if  (!_isUpdate)  return ;
                 ///  获取web多语言类型
                 DataTable  _dtLangType = GetUILanguageType(_dbPath);
                 ///  获取web多语言数据
                 DataTable  _dtLangData =GetUIMultiLanguageData(_dbPath);             
                 foreach  (  DataRow  _drLangType  in  _dtLangType.Rows)
                {
                     string  _strUILang =  "SYS_LANGUAGE.UI_LANGUAGE_JSON = {\r\n" ;              
                     DataRow [] _drLangData = _dtLangData.Select( "LANGUAGE_CODE='"  + _drLangType[ "LANGUAGE_CODE"  ].ToString() +  "'" );
                     foreach  (  DataRow  item  in  _drLangData)
                    {
                        _strUILang +=  "\"" +item[ "INFO_CODE"  ].ToString().Trim() +  "\" : \""  + item[ "VALUE"  ].ToString().Trim() +  "\",\r\n" ;                                                                       
                    }
                    _strUILang = _strUILang.Substring(0, _strUILang.Length - 3);
                    _strUILang +=  "\r\n}" ;
                     ///  写入语言JS文件
                     string  _filePath = _webPath +  @"MultiLanguage\UI-Lang-"  + _drLangType[ "LANGUAGE_CODE"  ].ToString() +  ".js" ;
                     StreamWriter  _sw =  new  StreamWriter (_filePath,  false );
                    _sw.Write(_strUILang);
                    _sw.Close();               
                }
                 ///  更新web.config中记录的版本,与SQLite中一致
                 Configuration  config =  WebConfigurationManager .OpenWebConfiguration( "/"  );
                 AppSettingsSection  app = config.AppSettings;
                app.Settings[  "UIMultiLanguageVersion" ].Value = _dbVersion;
                config.Save(  ConfigurationSaveMode .Modified);
            }
             catch  (  Exception  ex)
            {               
                 throw  new  Exception (  "error" ,ex);
            }
        }

         ///  <summary>
         ///  获取webUI多语言数据
         ///  </summary>
         ///  <returns></returns>
         private  static  DataTable  GetUIMultiLanguageData(  string  _dbPath)
        {
             try
            {
                 DataTable  _dt =  new  DataTable ();
                 string  _sql =  @"select LANGUAGE_CODE,INFO_CODE,VALUE from ui_multilanguageInfo" ;
                 string  _connectionString =  string .Format(  "Data Source={0};Pooling=true;FailIfMissing=false" , _dbPath);
                 using  (  SQLiteConnection  _conn =  new  SQLiteConnection (_connectionString))
                {
                     SQLiteCommand  _command =  new  SQLiteCommand  (_conn);
                    _command.CommandText = _sql;
                     SQLiteDataAdapter  _adapter =  new  SQLiteDataAdapter (_command);
                    _conn.Open();                   
                    _adapter.Fill(_dt);
                }
                 return  _dt;
            }
             catch  (  Exception  ex)
            {
                 throw  new  Exception (  "error" , ex);
            }
        }

         ///  <summary>
         ///  获取webUI多语言的类型
         ///  </summary>
         ///  <param name="_dbPath"></param>
         ///  <returns></returns>
         private  static  DataTable  GetUILanguageType(  string  _dbPath)
        {
             try
            {
                 DataTable  _dt =  new  DataTable ();
                 string  _sql =  "select distinct language_code  from ui_multilanguageInfo;" ;
                 string  _connectionString =  string .Format(  "Data Source={0};Pooling=true;FailIfMissing=false" , _dbPath);
                 using  (  SQLiteConnection  _conn =  new  SQLiteConnection (_connectionString))
                {
                     SQLiteCommand  _command =  new  SQLiteCommand  (_conn);
                    _command.CommandText = _sql;
                     SQLiteDataAdapter  _adapter =  new  SQLiteDataAdapter (_command);
                    _conn.Open();                   
                    _adapter.Fill(_dt);
                }
                 return  _dt;
            }
             catch  (  Exception  ex)
            {               
                 throw  new  Exception (  "error" ,ex);
            }
        }

         ///  <summary>
         ///  获取UI多语言版本
         ///  </summary>
         ///  <param name="_dbPath"></param>
         ///  <returns></returns>
         private  static  string  GetUIMultiLanguageVersion(  string  _dbPath)
        {
             try
            {
                 string  _sql =  "select version from version where id='UI_MultiLanguageInfo'" ;
                 string  _connectionString =  string .Format(  "Data Source={0};Pooling=true;FailIfMissing=false" , _dbPath);
                 using  (  SQLiteConnection  _conn =  new  SQLiteConnection (_connectionString))
                {
                     SQLiteCommand  _comm =  new  SQLiteCommand  (_conn);
                    _comm.CommandText = _sql;
                    _conn.Open();
                     object  _version = _comm.ExecuteScalar();
                     return  _version.ToString();
                }
            }
             catch  (  Exception  ex)
            {               
                 throw  new  Exception (  "error" ,ex);
            }
        }

         ///  <summary>
         ///  SQLite中的UI多语言信息是否需要更新到JS文件
         ///  </summary>
         ///  <param name="_dbPath"></param>
         ///  <returns></returns>
         private  static  bool  IsUpdate2JS(  string  _dbPath,  ref  string  ref_dbVersion)
        {
             try
            {
                 string  _dbVersion =GetUIMultiLanguageVersion(_dbPath);
                 string  _serverVersion = System.Configuration. ConfigurationManager  .AppSettings[ "UIMultiLanguageVersion" ];
                 if  (_dbVersion == _serverVersion)
                {
                     return  false ;
                }
                 else
                {
                    ref_dbVersion = _dbVersion;
                     return  true ;
                }
            }
             catch  (  Exception  ex)
            {
               
                 throw  new  Exception (  "error" ,ex);
            }
        }
    }
}



利用XML文件作的多语言DEMO程序 ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '' '' '' 多語系設置類 '' '' Create: Bunny_Young 2010-03-12 '' email:yangmeiwen@163.com '' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '' Modification history: '' '' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Imports System.Xml Imports System.Data Imports System.Web Imports System.Web.UI Imports System.Web.UI.WebControls Imports System.IO Public Class MutiLanguage Const _LANGUAGE_NAME = "language" Const _PAGE_NAME = "pageName" Const _CONTROL_NAME = "controlName" Const _CONTROL_TYPE = "controlType" Const _CONTROL_VALUE = "controlValue" Private _PageName As String ''resource讀取路徑 Private _languageType As String '' Private _xmlDoc As XmlDocument Private _savePath As String Private ds As DataSet Sub New(ByVal strLanguage As String, ByVal aspxPage As String) 'savePath = "~/Resource/" + strLanguage _PageName = "~/Resource/" + strLanguage + "/" + aspxPage + ".xml" _savePath = "~/Resource/" + strLanguage _savePath = HttpContext.Current.Server.MapPath(_savePath) _PageName = HttpContext.Current.Server.MapPath(_PageName) _languageType = strLanguage End Sub Public Sub GetDataSet() ds = New DataSet() ds.ReadXml(_PageName, XmlReadMode.Auto) End Sub Public Function UpdateLanguage(ByVal _controlName As String, ByVal _controlType As String, ByVal _controlValue As String) As Boolean GetDataSet() For Each dr As DataRow In ds.Tables(0).Rows If dr("controlName") = _controlName And dr("controlType") = _controlType Then dr("controlValue") = _controlValue End If Next ds.WriteXml(_PageName, XmlWriteMode.IgnoreSchema) ds.ReadXml(_PageName) End Function Public Function GetControlsList() As List(Of UIControl) GetDataSet() Dim dt As DataTable = ds.Tables(0) Dim ResultList As New List(Of UIControl) For Each dr As DataRow In dt.Rows Dim MyControl As New UIControl MyControl.ControlName = dr("controlName") MyControl.ControlType = dr("controlType") MyControl.ControlValue = dr("controlValue") ResultList.Add(MyControl) Next Return ResultList End Function ''' <summary> ''' 主動生成資源文件 ''' </summary> ''' <param name="strLanguage">語言類別</param> ''' <param name="Page">WEB PAGE</param> ''' <remarks></remarks> Public Sub WriteResourceFile(ByVal Page As UI.Page) Try If Not Directory.Exists(_savePath) Then Directory.CreateDirectory(_savePath) End If Dim writer As New XmlTextWriter(_PageName, Nothing) writer.Formatting = Formatting.Indented ''語言類別 writer.WriteStartElement(_LANGUAGE_NAME, _languageType) LoopAllControls(Page, writer) ''語言類別結束 writer.WriteEndElement() writer.Close() Catch ex As Exception End Try End Sub Private Sub LoopAllControls(ByVal oCtrl As Control, ByVal writer As XmlWriter) For Each _Ctrl As Control In oCtrl.Controls Dim _strName As String = _Ctrl.GetType.Name.ToUpper If _strName = "LABEL" Or _strName = "BUTTON" Then Dim strValue As String Dim strComment As String If _strName = "LABEL" Then strValue = CType(_Ctrl, Label).Text strComment = "label control" Else strValue = CType(_Ctrl, Button).Text strComment = "button control" End If writer.WriteComment(strComment) writer.WriteStartElement("Control") writer.WriteAttributeString(_CONTROL_VALUE, strValue) writer.WriteAttributeString(_CONTROL_NAME, _Ctrl.ID) writer.WriteAttributeString(_CONTROL_TYPE, _Ctrl.GetType.Name) writer.WriteEndElement() End If If _Ctrl.GetType.Name.ToUpper() = "GRIDVIEW" Then Continue For End If If _Ctrl.HasControls Then LoopAllControls(_Ctrl, writer) End If Next End Sub Public Sub ApplylanguageResource(ByVal _aspxPage As System.Web.UI.Page) GetDataSet() LoopApply(_aspxPage) End Sub Private Sub LoopApply(ByVal _control As Control) For Each ct As Control In _control.Controls Dim controlName As String = ct.ID Dim dr() As System.Data.DataRow = ds.Tables(0).Select("controlName='" + controlName + "'", "controlName DESC") If dr.Count > 0 Then If ct.GetType.Name.ToUpper = "LABEL" Then CType(ct, Label).Text = dr(0)("controlValue") End If If ct.GetType.Name.ToUpper = "BUTTON" Then CType(ct, Button).Text = dr(0)("controlValue") End If End If If ct.HasControls Then LoopApply(ct) End If Next End Sub End Class
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值