Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 24 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
24
Dung lượng
1,45 MB
Nội dung
T Hc C# và .NET Framework VI-893 28. Giao din ng th h tr đa ng Các bn đã đc hng dn đ thit lp lp đi tng BienDich chng 16 đ h tr cho nhng phn mm đa ngôn ng. Trong chng này, các bn s đc hng dn đ thit k và phát trin k thut h tr đa ngôn ng có th áp dng cho nhng phn mm có giao din Windows, và nhng phn mm mng ASP.NET dùng web-forms. VS cng h tr đa ngôn ng cho các trình án vi phng pháp dùng nhng tp tin tài nguyên (resource file) có ni tip ng mc đnh là *.resx. Nhng tp tin này đc biên lp và đa vào linh kin, tr thành mt phn ca lý lch d liu (metadata). Ngoài ra, khi mun dùng nhng d liu đc lu gi trong tp tin tài nguyên, các bn phi quy chiu nhng không gian tên nh System.Globalization, System.Resource, System.Reflection, và dùng nhng lp đi tng thuc nhng không gian tên trên đ có th ly v nhng chui ký t có ngôn ng mun dùng. Tuy nhiên, chng sách này không hng dn các bn v phng thc h tr đa ngôn ng phc tp ca VS. Các bn s đc hng dn đ dùng mt tp tin XML duy nht đ h tr k thut đa ngôn ng. Li đim ca phng thc này, là tp tin XML có th đc thay đi sau khi phn mm đã đc phát hành. Do đó, nhng ngôn ng mi có th đc đa thêm vào tp tin XML bt c lúc nào. Thí d nh, các bn có mt phn mm ng dng đã đc phát trin đ h tr Anh ng và Vit ng. Sau khi phn mm đã đc phát hành, các bn có yêu cu h tr cho Pháp ng. Các bn ch cn gi gi mt tp tin XML có h tr Pháp ng ti khách hàng, thì lp tc, phn mm ca các bn s có th hin th Pháp ng trên nhng giao din ng th. Tìm hiu v lp đi tng Control Nh các bn đã đc hng dn, tt c nhng lp đi tng .NET Framework đu tha k trc tip hoc gián tip t lp đi tng nn System.Object. Lp đi tng Control, thuc không gian tên System.Windows.Forms, là mt lp đi tng trong .NET Framework. Do đó, lp Control cng đc tha k gián tip t lp đi tng System.Object nh bt c mt lp đi tng nào khác. Lp đi tng Control h tr 2 chc nng kéo và th. Do đó, tt c nhng lp đi tng có giao din ng th thuc không gian tên System.Windows.Forms có th kéo và th xung mt lp đi tng Form khung thit kt đu đc thà k t lp Control. Ngc li, tt c nhng lp đi tng thuc không gian tên System.Windows.Form không th kéo và th xung khung thit k, là nhng lp đi tng không đc tha k t lp Control. Thí d nh lp đi tng System.Windows.Forms.ToolStripMenuItem, tuy có giao din ng th, nhng không thuc v lp đi tng Control. Do đó, các bn không th kéo và th mt đi tng ca lp System.Windows.Forms.ToolStripMenuItem xung khung thit k. Mc dù th, sau khi kéo và th mt đi tng MenuStrip xung khung thit k, các bn có th to nhng thuc đn, là nhng đi tng lp ToolStripMenuItem. Dng lp đi tng Control có trên 100 thành viên. Nhng trong phm vi h tr k thut đa ngôn ng, chúng ta ch lu ý ti 2 thành viên ca dng lp này: đó là thuc tính Controls, và thuc tính Text Thuc Bn tho, copyrights 2010, Quang t VI-894 Lp trình vi giao din Windows | Quang-t tính Text đc dùng đ lu gi mt chui ký t cho nhng đi tng lp Control thuc v mt khung trình (Form). Do đó, trng tâm ca k thut h tr đa ngôn ng, là làm sao có th phiên dch chui ký t đc lu gi trong thuc tính Text, và cp nht chui ký t này vi mt chui ký t đã đc phiên dch. Tìm hiu v thành viên Controls trong lp đi tng Form Lp đi tng Form đc thà k gián tip t lp đi tng Control (do đó, đc tha hng thành viên Controls và Text). Thành viên Controls thuc dng ControlCollection, đc dùng đ lu tr mt tp hp nhng đi tng lp Control. im quan trng nht, là tt c nhng đi tng lp Control đc lu gi trong thành viên Controls đu đc hin th trên khung trình, ngoi tr nhng đi tng đã đc du đi bng cách gi hàm Control.Hide() tng đi tng lp. Do đó, trên phng din k thut ng th, mt khung trình thuc lp đi tng Form, là mt đi tng lp Control gm có nhng đi tng lp Control có nhng đi tng lp Control/Object , nh minh ha di đây: Minh-ha 28-1: Cu trúc cn bn ca mt khung trình (Form) Da theo cu trúc trên, các bn có th vit mã ngun đ duyt qua tt c nhng đi tng có giao din ng th trong mt khung trình rt d dàng, bt đu t thành viên ca Controls ca khung trình, nh sau: private static void DuyetForm() { frmQLDoanhNghiep frmDN = new frmQLDoanhNghiep(); DuyetControls((Control) frmDN); } private static void DuyetControls(Control ctrl) { if (null != ctrl.Controls && ctrl.Controls.Count > 0) { foreach (Control childCtrl in ctrl.Controls) { DuyetControls(childCtrl); } } } Bn tho, copyrights 2010, Quang t T Hc C# và .NET Framework VI-895 2 hàm mu trên đc vit đ duyt qua tt c nhng đi tng lp Control. Hàm DuyetForm() khi to mt đi tng lp Form có dng frmQLDoanhNghiep. Sau đó gi hàm DuyetControls() vi tham s là đi tng lp Form đc ép dng qua dng lp Control. Hàm DuyetControls() là mt hàm lp (recursive method), đc dùng đ duyt qua tt c nhng đi tng thuc dng Control đc lu gi trong thành viên Controls. Mã ngun đã đc vit rt đn gin, nhng vô cùng hiu qu. Và, nu các bn có th duyt qua tt c các đi tng có giao din ng th thuc dng lp Control nh đã thc hin trong hàm mu DuyetControls() trên, d nhiên các bn có th gi hàm BienDich.Translate() đã đc phát trin trong linh kin UtilCommon.dll đ phiên dch nhng chui ký t lu tr trong thuc tính Text. Tuy nhiên, vn còn có nhng giao din ng th thuc nhng dng lp đi tng không đc tha k t dng lp Control cn phi đc x lý thích hp. Trong nhng phn k tip, các bn s đc hng dn đ áp dng k thut đa ngôn ng cho trình án QLDoanhNghiep. Ni rng lp đi tng Form Trong chng 13, các bn đã đc hng dn v phng pháp vit nhng hàm ni rng cho mt lp đi tng đã đc phát trin bi mt mt “thành phn th 3”, mà không cn phi có mã ngun ca lp đi tng đó (hàm ni rng đc h tr k t phiên bn .NET 3.5). Mc dù có ít nht là 3 phng án đ phát trin k thut đa ngôn ng, nhng phng án dùng hàm ni rng có th gi là mt phng án tuyt cú nht. Các bn hãy to mt lp đi tng mi có dng tnh, có tên là FormExt. Lp FormExt s có 3 hàm ni rng cho lp đi tng Form, đc vit nh sau: public static class FormExt { public static BienDich bienDich = new BienDich(); public static void LoadDictionary(this Form frm, string xmlDictionaryFile, string language) { bienDich.LoađDictionary(xmlDictionaryFile, language); } public static void SaveDictionary(this Form frm,string xmlDictionaryFile) { bienDich.SaveDictionary(xmlDictionaryFile); } public static void Translate(this Form frm) { string formName = frm.Name.Substring(1 + frm.Name.LastIndexOf('.', 0)); Translate(formName,(Control)frm); // Phi ép dng, nu không s lp ti hàm này. } } Dng lp FormExt đnh ngha thành viên bienDich, thuc dng lp BienDich. Thành viên này đc khi to khi mt đi tng lp Form đu tiên ca mt phn mm đc khi to. Thí d nh, nu các bn khi Bn tho, copyrights 2010, Quang t VI-896 Lp trình vi giao din Windows | Quang-t đng phn mm QLDoanhNghiep, khung trình đu tiên đc khi to thuc v dng lp frmQLDoanhNghiep. Khi đi tng lp frmQLDoanhNghiep đc khi to, thành viên bienDich cng s đc khi to. im quan trng cn lu ý là, cho dù phn mm QLDoanhNghiep có rt nhiu khung trình khác nhau, nhng ch có mt đi tng lp BienDich đc khi to, vì thành viên bienDich thuc v dng tnh. Hàm ni rng LoadDictionary() có 3 tham s. Vì là hàm ni rng cho dng lp Form, nên tham s đu tiên bt buc phi là mt tham s this thuc dng Form. Tham s th hai là tên ca tp tin XML vi khuôn mu đã đc n đnh (xin tham kho chng 16). Tham s cui cùng là ký s ca ngôn ng th hai, cng là ngôn ng s đc biên dch qua t ngôn ng chính, và đc hin th trong nhng giao din ng th. Phn mm h tr đa ngôn ng ch nên gi hàm LoadDictionary() mt ln duy nht khi khung trình đu tiên đc khi to. Tuy nhiên, nu hàm này đc gi ln th hai, không có chuyn gì s xy ra, và giòng vn hành s lp tc quay v hàm gi, vì hàm LoadDictionary() trong lp đi tng BienDich ch ti tp tin XML lên b nh mt ln duy nht nh sau: public void LoadDictionary(string xmlDictionaryFile, string Language) { try { if (xmlDic == null) { xmlDic = new XmlDocument(); xmlDic.Load(xmlDictionaryFile); CurrentLanguage = Language; isFileChanged = false; } } catch (System.Xml.XmlException xmlError) { string msg = String.Format("Could not load file {0}", xmlDictionaryFile); throw new Exception(msg, xmlError); } } Nh đã thy trên, hàm LoadDictionary() thm tra trng xmlDic trc khi tip ni vi nhng cú pháp dùng đ ti tp tin XML lên b nh. Nu xmlDic không có giá tr = null, có ngha là tp tin XML đã đc ti lên b nh, giòng vn hành s lp tc quay tr v hàm gi. Hàm ni rng th 2 là hàm SaveDictionary(). Hàm này đc gi đ ni tip hóa ngun d liu XML t b nh xung tp tin đc ch đnh qua tham s. Các bn s đc hng dn tham kho v công dng và mc đích ca hàm này trong nhng phn k tip. Hàm ni rng th 3 là hàm Translate(). ây là hàm ch yu dùng cho vic phiên dch. Hàm này ch nên gi mt ln duy nht cho mt khung trình. a đim thích hp nht đ gi hàm này nm trong phm vi ca s tác Form.Load(). S tác Form.Load() đc kích hot 1 ln duy nht khi mt khung trình đc Bn tho, copyrights 2010, Quang t T Hc C# và .NET Framework VI-897 hin th ln đu tiên. Khi s tác Form.Load() đc kích hot, đi tng dng lp Form đã qua giai đon khi to, tt c nhng đi tng dng Control thuc v khung trình đu đã đc thit lp. Hàm ni rng Form.Translate() duyt qua tt c nhng đi tng lp Control thuc v khung trình, và gi hàm BienDich.Translate() đ phiên dch tt c nhng chui ký t đc hin th trên khung trình. D nhiên, hàm này tuyt đi không phiên dch nhng chui ký t thuc quyn s hu ca ngi x dng (chng hn nh nhng chui ký t trong thuc tính Text ca đi tng lp TextBox), vì đó là nhng chui ký t thuc v d liu. FormExt.Translate() cng là mt chng hàm gm có 4 hàm, vi mt hàm ni rng duy nht có dng chung. 3 hàm còn li đc phong kín vi dng t. Nh các bn đã thy phn trên, hàm ni rng FormExt.Translate() ch đn gin có 2 giòng mã ngun nh sau: string formName = frm.Name.Substring(1 + frm.Name.LastIndexOf('.', 0)); Translate(formName,(Control)frm); // Phi ép dng, nu không s lp ti hàm này. Giòng mã ngun th nht to mt chui ký t đ lu gi tên ca dng lp thuc v khung trình. Thí d nh, nu hàm Translate() đc gi t đi tng lp frmQLDoanhNghiep, chui ký t s có giá tr = ”frmQLDoanhNghiep”. Nu các bn còn nh nhng gì đã đc trong chng 16, thì tên dng lp ca mt khung trình s đc dùng làm th XML đ có th giúp cho vic tìm kim d liu trong ngun d liu XML đc mau chóng hn. Giòng mã ngun th hai gi hàm Translate() có tham s thuc dng lp Control. Do đó, khi đa đi tng lp Form vào tham s, đi tng này đc ép qua dng Control. Chng hàm Translate() Nh đã đ cp đn phn trên, chng hàm Translate() gm có 4 hàm, gm có 1 hàm ni rng và 3 hàm đc phong kín di dng t. Hàm Translate() ni rng đã đc tham kho phn trên. 3 hàm còn li đc vit nh sau: Hàm Translate(string,Control) /// <summary> /// Hàm lp x lý biên dch cho dng Control /// </summary> /// <param name="ctrl"></param> private static void Translate(string formName,Control ctrl) { if (null != ctrl.Controls && ctrl.Controls.Count > 0) { foreach (Control childCtrl in ctrl.Controls) { Translate(formName, childCtrl); } } if (ctrl is MenuStrip) { Bn tho, copyrights 2010, Quang t VI-898 Lp trình vi giao din Windows | Quang-t foreach (ToolStripItem mnuItem in ((MenuStrip)ctrl).Items) { Translate(mnuItem); } } else if (ctrl is DataGridView) { foreach (DataGridViewColumn dtaColumn in ((DataGridView)ctrl).Columns) { Translate(formName, (Object)dtaColumn); } } Translate(formName, (Object)ctrl); } Hàm Translate() có tham s thuc dng Control trên, là khi đim ca nhng thao tác x lý cho chc nng phiên dch ca mt khung trình. ây là mt hàm lp đc dùng đ duyt qua tt c nhng đi tng thuc dng Control trong mt khung trình. Lu ý là khi mt đi tng Control thuc dng MenuStrip hoc DataGridView, là nhng dng có lu gi nhng giao din ng th không thuc dng lp Control, nên phi có nhng x lý khác bit. Khi mã ngun trong phm vi x lý cho DataGridView ch yu dành cho vic biên dch nhng chui ký t lu tr trong thuc tính ColumnHeader ca nhng đi tng dng DataGridViewColumn. Nhng chui ký t này cng có th đc phiên dch trc tip khi nhng đi tng DataGridViewColumn đc khi to. Do đó, khi mã ngun này đc vit đây nhm mc đích hng dn các bn tham kho v nhng phng cách duyt xung nhng đi tng dng Object đc lu gi trong mt đi tng dng Control, thay vì có mc đích thc dng. Riêng khi mã ngun trong phm vi x lý cho MenuStrip là mt trng hp x lý đc bit. MenuStrip là mt trình đn thuc dng Control có th kéo và th xung mt khung trình. i tng MenuStrip lu gi mt tp hp nhng đi tng có dng lp ToolStripItem trong thuc tính Items. Và nhng đi tng thuc dng ToolStripItem này có thuc tính DropDownItems, đc dùng đ lu gi mt tp hp nhng đi tng cng thuc dng lp ToolStripItem. Do đó, khi duyt qua nhng đi tng lp ToolStripItem trong đi tng lp MenuStrip, thao tác x lý gi hàm Translate(ToolStripItem), là mt hàm lp, đc dùng đ duyt xung tt c nhng thuc đn thuc v mt trình đn. Hàm Translate(ToolStripItem) /// <summary> /// Hàm lp x lý biên dch cho ToolStripItem /// </summary> /// <param name="mnu"></param> private static void Translate(ToolStripItem mnu) { if (mnu is ToolStripMenuItem) { foreach (ToolStripItem mnuChild in ((ToolStripMenuItem)mnu).DropDownItems) { Translate(mnuChild); } } Bn tho, copyrights 2010, Quang t T Hc C# và .NET Framework VI-899 mnu.Text = BienDich.Translate("Menu",mnu.Text); } Hàm Translate(ToolStripItem), nh đã đ cp đn phn trên, đc dùng đ x lý phiên dch cho nhng thuc đn thuc v mt trình đn. ây là mt hàm lp có mã ngun rt đn gin vi vòng lp foreach() đc dùng đ duyt qua nhng thuc đn trong DropDownItems. im đc bit là giòng mã ngun cui cùng, thay vì gi hàm Translate(Object) đ phiên dch chui ký t cho thuc đn, hàm này trc tip gi hàm BiênDich.Translate() đ tc đ có th đc mau chóng hn. Hàm Translate(string, Object) private static void Translate(string formName,Object doiTuong) { switch (DangDuLieu(doiTuong)) { //Nhng dng lp tha k t Control case ClassType.System_Windows_Forms_Button: case ClassType.System_Windows_Forms_CheckBox: case ClassType.System_Windows_Forms_Form: case ClassType.System_Windows_Forms_Label: case ClassType.System_Windows_Forms_RadioButton: case ClassType.System_Windows_Forms_TabPage: ((Control)doiTuong).Text = BienDich.Translate(formName, ((Control)doiTuong).Text); break; //Nhng dng lp tha k t ToolStripItem case ClassType.System_Windows_Forms_ToolStripItem: case ClassType.System_Windows_Forms_ToolStripMenuItem: ((ToolStripItem)doiTuong).Text = BienDich.Translate("Menu", ((ToolStripItem)doiTuong).Text); break; //Nhng dng lp tha k t ColumnHeader case ClassType.System_Windows_Forms_ColumnHeader: ((ColumnHeader)doiTuong).Text = BienDich.Translate("CSDL", ((ColumnHeader)doiTuong).Text); break; case ClassType.System_Windows_Forms_DataGridViewColumn: ((DataGridViewColumn)doiTuong).HeaderText = BienDich.Translate(formName, ((DataGridViewColumn)doiTuong).HeaderText); break; } } Hàm Translate( string,Object) là hàm cui cùng trong chng hàm Translate(). Hàm này nhn tham s có dng Object, và gi hàm DangDuLieu() đ xác đnh dng lp đi tng ca tham s đoiTuong. Sau khi đã xác đnh đc dng lp ca tham s, t khóa switch{}đc dùng đ x lý vic phiên dch da theo nhng dng lp khác nhau. Chú thích và cú pháp vit trong hàm tha đ đ chú gii rt rõ ràng nhng thao tác x lý cho vic phiên dch cho đi tng nhn đc qua tham s. Toàn b lp đi tng FormExt, vi nhng hàm ni rng cho dng lp System.Windows.Forms.Form, đc vit nh sau: using System; using System.Collections.Generic; Bn tho, copyrights 2010, Quang t VI-900 Lp trình vi giao din Windows | Quang-t using System.Windows.Forms; namespace PhuongDong.UtilCommon { public enum ClassType { NotHandle, System_Windows_Forms_Button, System_Windows_Forms_CheckBox, System_Windows_Forms_ColumnHeader, System_Windows_Forms_DataGridViewColumn, System_Windows_Forms_Form, System_Windows_Forms_Label, System_Windows_Forms_RadioButton, System_Windows_Forms_TabPage, System_Windows_Forms_ToolStripMenuItem, System_Windows_Forms_ToolStripItem } public static class FormExt { public static BienDich bienDich = new BienDich(); public static void LoadDictionary(this Form frm, string xmlDictionaryFile, string language) { bienDich.LoadDictionary(xmlDictionaryFile, language); } public static void SaveDictionary(this Form frm, string xmlDictionaryFile) { bienDich.SaveDictionary(xmlDictionaryFile); } public static void Translate(this Form frm) { string formName = frm.Name.Substring(1 + frm.Name.LastIndexOf('.', 0)); Translate(formName, (Control)frm); // Phi ép dng, nu không s lp ti hàm này. } /// <summary> /// Hàm lp x lý biên dch cho dng Control /// </summary> /// <param name="ctrl"></param> private static void Translate(string formName, Control ctrl) { if (null != ctrl.Controls && ctrl.Controls.Count > 0) { foreach (Control childCtrl in ctrl.Controls) { Translate(formName, childCtrl); } } if (ctrl is MenuStrip) { foreach (ToolStripItem mnuItem in ((MenuStrip)ctrl).Items) { Translate(mnuItem); } } Bn tho, copyrights 2010, Quang t T Hc C# và .NET Framework VI-901 else if (ctrl is DataGridView) { foreach (DataGridViewColumn dtaColumn in ((DataGridView)ctrl).Columns) { Translate(formName, (Object)dtaColumn); } } Translate(formName, (Object)ctrl); } /// <summary> /// Hàm lp x lý biên dch cho ToolStripItem /// </summary> /// <param name="mnu"></param> private static void Translate(ToolStripItem mnu) { if (mnu is ToolStripMenuItem) { foreach (ToolStripItem mnuChild in ((ToolStripMenuItem)mnu).DropDownItems) { Translate(mnuChild); } } mnu.Text = BienDich.Translate("Menu", mnu.Text); } private static void Translate(string formName, Object doiTuong) { switch (DangDuLieu(doiTuong)) { //Nhng dng lp tha k t Control case ClassType.System_Windows_Forms_Button: case ClassType.System_Windows_Forms_CheckBox: case ClassType.System_Windows_Forms_Form: case ClassType.System_Windows_Forms_Label: case ClassType.System_Windows_Forms_RadioButton: case ClassType.System_Windows_Forms_TabPage: ((Control)doiTuong).Text = BienDich.Translate(formName, ((Control)doiTuong).Text); break; //Nhng dng lp tha k t ToolStripItem case ClassType.System_Windows_Forms_ToolStripItem: case ClassType.System_Windows_Forms_ToolStripMenuItem: ((ToolStripItem)doiTuong).Text = BienDich.Translate("Menu", ((ToolStripItem)doiTuong).Text); break; //Nhng dng lp tha k t ColumnHeader case ClassType.System_Windows_Forms_ColumnHeader: ((ColumnHeader)doiTuong).Text = BienDich.Translate("CSDL", ((ColumnHeader)doiTuong).Text); break; case ClassType.System_Windows_Forms_DataGridViewColumn: ((DataGridViewColumn)doiTuong).HeaderText = BienDich.Translate(formName, ((DataGridViewColumn)doiTuong).HeaderText); break; Bn tho, copyrights 2010, Quang t VI-902 Lp trình vi giao din Windows | Quang-t } } private static ClassType DangDuLieu(Object ctrl) { ClassType dangDuLieu; if (ctrl is Button) dangDuLieu = ClassType.System_Windows_Forms_Button; else if (ctrl is System.Windows.Forms.CheckBox) dangDuLieu = ClassType.System_Windows_Forms_CheckBox; else if (ctrl is System.Windows.Forms.ColumnHeader) dangDuLieu = ClassType.System_Windows_Forms_ColumnHeader; else if (ctrl is System.Windows.Forms.DataGridViewColumn) dangDuLieu = ClassType.System_Windows_Forms_DataGridViewColumn; else if (ctrl is System.Windows.Forms.Form) dangDuLieu = ClassType.System_Windows_Forms_Form; else if (ctrl is System.Windows.Forms.Label) dangDuLieu = ClassType.System_Windows_Forms_Label; else if (ctrl is System.Windows.Forms.RadioButton) dangDuLieu = ClassType.System_Windows_Forms_RadioButton; else if (ctrl is System.Windows.Forms.TabPage) dangDuLieu = ClassType.System_Windows_Forms_TabPage; else if (ctrl is System.Windows.Forms.ToolStripItem) dangDuLieu = ClassType.System_Windows_Forms_ToolStripItem; else if (ctrl is System.Windows.Forms.ToolStripMenuItem) dangDuLieu = ClassType.System_Windows_Forms_ToolStripMenuItem; else dangDuLieu = ClassType.NotHandle; return dangDuLieu; } } } Toàn b lp FormExt đc phát trin cha đy 3 trang giy, cho 3 hàm ni rng rt có nng lc trong chc nng phiên dch. Phát trin lp đi tng BienDich Lp đi tng BienDich là thành phn ch yu h tr chc nng đa ngôn ng cho mt phn mm. Nhng hàm ni rng cho dng lp Form, khi tìm thy mt giao din ng th, đu gi hàm BienDich.Translate() đ phiên dch mt chui ký t t Anh ng qua mt ngôn ng ch đnh. Mi khi cn phi hin th mt thông tin qua hàm MessageBox.Show(), hoc khi cn phi phiên dch bt c mt chui ký t nào, hàm BienDich.Translate() cng có th đc gi trc tip t bt c mt đa đim nào trong mã ngun. Dng lp BienDich đnh ngha 3 thuc tính sau đây: static XmlDocument xmlDic = null; static bool isFileChanged = false; static string CurrentLanguage = string.Empty; Thuc tính xmlDic thuc dng XmlDocument, đc dùng đ lu gi ngun d liu XML đc ti lên t mt tp tin XML có khuôn mu n đnh, và có nhng th <English> đc lng trong nhng th Cha. Mi th <English> có thuc tính Text đc dùng đ lu gi mt chui ký t Anh ng. Lng trong th <English> là mt hay nhiu th con. Mi th con lu gi mt chui ký t đã đc phiên dch cho mt ngôn ng khác, và tên ca nhng th con này ch đnh ngôn ng đã đc phiên dch. Thuc tính xmlDic Bn tho, copyrights 2010, Quang t [...]... VI-915 t T H c C# và NET Framework L p trình v i giao di n Windows | Quang- B VI-916 nt h o, c op yri gh ts 20 10 ,Q ua ng t t Tái x d ng T p tin XML, và linh ki n utilcommon.dll có th tái x d ng cho b t c m t ph n m m nào, k c nh ng ph n m m WPF, và nh ng web-forms ASP.NET n gi n và d áp d ng V i v n v n 3 hàm n i r ng, vi c áp d ng k thu t h tr a ngôn ng cho m t ph n m m th t n gi n và d dàng Ch dùng... Anh ng c n c d ch thu t vào m t th < English> Hàm này h i ph c t p (và thông minh) vì ph i cho thêm c th Cha c a th < English> vào ngu n d li u XML, n u th Cha không t n t i trong ngu n d li u Sau khi th < English> cho câu v n c n c d ch thu t c a vào ngu n d li u, thu c tính isFileChanged c gán cho giá tr = true, khi hàm SaveDictionary() c g i, ngu n d li u XML s c l u nh p vào t p tin XML namespace... n ch c n ánh x s tác Load n m t hàm u nhi m, và g i hàm n i r ng Translate(), thí d nh v i l p i t ng frmCaNhan, nh sau: op yri gh ts n ây các b n có th biên l p và ch y th ph n m m QLDoanhNghiep.exe Khung trình chính c a ph n m m này có hi n th (thu nh ) nh sau: Minh-h a 28-3: Ph n m m qldoanhnghiep.exe hi n th v Si m t vài thu c n Vi t ng L u ý là ch có vài thu c c phiên d ch sang ti ng Vi t trong... ti ng Anh c biên d ch, và t t c nh ng câu v n ch a c biên d ch Ph i nói là tuy t cú mèo! Tuy t i không phí công s c c a th i gian b ra vi t hàm ThemCauDichThuat() T p tin XML trên có th c dùng nh kèm vào m t i n th g i qua cho m t nhân viên chuyên v ngo i ng và d ch thu t Các b n ch c n b ra 30 giây gi i thích v khuôn m u c a th < English> cho nhân viên chuyên v d ch thu t, và trong m t th i gian ng... Software"> An Bình K Toán Thoát khung trình và b t t c nh ng gì thay i? Thoát b và ng ch ng trình? t T H c C# và NET Framework Tu b cho nh ng khung trình d ng l p Form khác B nt h Cho nh ng khung trình thu c d ng l p form... n Hàm này cg n i ti p hóa ngu n d li u l u gi trong thu c tính xmlDic vào m t t p tin XML ch nh Hàm này h tr cho vi c ng b hoá m ch trình (v i lock()) Cho nên, m t ph n m m a m ch can có th g i hàm này an toàn mà không s nh ng m ch trình có th xung t v i nhau t o lên nh ng l i ngo i l Hàm SaveDictionary() c vi t nh sau: T H c C# và NET Framework t XmlNode childNode = xmlDic.SelectSingleNode(xPath);... tay ph i, và n m ch ng nên m t i t ng giao di n khác (nh TextBox ch ng h n) i u th hai, là khi thi t k nh ng giao di n ng th nh Label, CheckBox, RadioButton, Button, v.v , các b n nên luôn luôn chu n b và phòng ng a cho tr ng h p kích th c c a nh ng i t ng giao di n này có th b dãn ra vì chu i ký t phiên d ch quá dài Tóm l c K thu t h tr o, c Trong các b n, b n nào t ng dùng t p tin *.resx và theo nh... text="&About " /> t T H c C# và NET Framework VI-913 t ua ng 20 10 ,Q op yri gh ts y là m t ph n m m h tr a ngôn ng An Bình K Toán Thoát khung trình và b t t c nh ng gì thay i? . && ctrl.Controls.Count > 0) { foreach (Control childCtrl in ctrl.Controls) { DuyetControls(childCtrl); } } } Bn tho, copyrights 2010, Quang t T H c C# và .NET Framework. nhiu th con. Mi th con lu gi mt chui ký t đã đ c phiên dch cho mt ngôn ng kh c, và tên c a nhng th con này ch đnh ngôn ng đã đ c phiên dch. Thu c tính xmlDic Bn tho, copyrights. ng và Vit ng. Sau khi phn mm đã đ c phát hành, c c bn c yêu c u h tr cho Pháp ng. C c bn ch c n gi gi mt tp tin XML c h tr Pháp ng ti khách hàng, thì lp t c, phn mm c a