ProjectForStudy

 ลืมรหัสผ่าน
 ลงทะเบียน
ค้นหา
ดู: 1561|ตอบกลับ: 27

[แบ่งปัน] C# การสร้างฟอร์ม 2 ภาษา (ฺฺBilingual language)

[คัดลอกลิงก์]
  • อารมณ์วันนี้
    แฮปปี้
    10 ชั่วโมงที่แล้ว
  • เช็คชื่อแล้ว: 626 วัน

    [LV.9]ConquerorII

    47

    กระทู้

    1086

    โพสต์

    7506

    เครดิต

    KingUnicorn

    Rank: 6Rank: 6

    เครดิต
    7506
    Ticket
    4172
    จิตพิสัย
    3334

    Merciful MemberInstructor

    สวัสดีทุกท่าน
    อ้างอิงจากกระทู้เดิมของผม
    การสร้างเมนูฟอร์มในระดับ Advance ด้วย Treeview
    http://www.projectforstudy.com/thread-1701-1-1.html

    จะเห็นได้ว่าผมใส่ทั้งภาษาไทยและภาษาอังกฤษไปพร้อมกัน ผลที่ตามมาคือฟอร์มดูรกมากเนื่องจากความยาวของข้อความ
    วันนี้ผมจึงขอนำเสนอวิธีการสร้างฟอร์มให้สามารถสลับเปลี่ยนภาษาได้ (ไทย / อังกฤษ)
    เนื่องจากผมอยากลองหัดทำใช้งานดู โดยได้แรงบันดาลใจการโปรแกรมสำเร็จรูปที่เค้าทำขายกันยังมีให้เปลี่ยนภาษา
    เลยอยากหัดทำกับเค้าบ้าง

    โดยวิธีการหลัก ๆ คือผมเก็บ
    1. การเปลี่ยนภาษาไว้ที่ Settings (EN/TH)
    2. ให้อ่านไฟล์แสดงข้อความตามที่ตั้งค่าภาษาไว้จาก Resource ของแต่ละฟอร์มอีกที

    ตัวอย่างฟอร์ม ไทย / อังกฤษ



    แม้แต่ Popup ก็เปลี่ยนตามภาษาที่เลือก


    ตัวอย่างการตั้งค่าเปลี่ยนภาษา
    Messagebox ก็เปลี่ยนตามภาษาที่เลือกด้วย


    ตัวอย่างไฟล์ Resources ที่เก็บการตั้งค่าภาษาสำหรับฟอร์ม ผมใช้ Resources ไฟล์เดียวสำหรับจัดการทั้ง 2 ภาษา ไม่อยากแยกไฟล์
    แค่นี้ก็มีไฟล์เยอะพอแล้ว 555 และผมก็ตั้งใจทำแค่เพียง 2 ภาษาเท่านั้น


    ตัวอย่างฟอร์มหลัก
    เมนูฟอร์มแบบ Treeview
    สำหรับเมนูผมใช้วิธีโหลดมาจาก Database ตามภาษาที่เลือก ไม่ได้กำหนดใน Resources




    มาดูส่วนโค้ดกัน เป็นภาษา C# ผมกำลังฝึกเขียนโค้ดแบบ OOP อยู่
    ก่อนอื่นต้องขอบอกก่อนว่าผมจบสายบริหารไม่ได้จบสายคอม
    หากเห็นโค้ดผมแล้วขัดหลักการสายตรงก็ขออภัยด้วยและขอคำปรึกษาสำหรับเพิ่มพูนความรู้ด้วยครับ

    โค้ดโหลดฟอร์ม
    ผู้เข้าชมเนื้อหาถูกซ่อนไว้ คุณจะต้องแสดงความคิดเห็นก่อนจึงจะสามารถมองเห็นเนื้อหาส่วนที่ถูกซ่อนนี้ได้

    ทุกอย่างเรียกผ่าน Class ที่สร้างไว้ทั้งหมด ส่วนสาเหตุที่ผมไม่ได้ลง Class ที่ผมสร้างขึ้นมาก็เพราะผมไม่อยากให้ท่านยึดติดกับวิธีเขียนของผมผมเพียงเสนอแนวคิด และการเรียกใช้งานโค้ดผ่าน Class เป็นหลัก เพราะง่ายต่อการปรับหรือแก้ไขโปรแกรม





    ขออภัย! โพสต์นี้มีไฟล์แนบหรือรูปภาพที่ไม่ได้รับอนุญาตให้คุณเข้าถึง

    คุณจำเป็นต้อง ลงชื่อเข้าใช้ เพื่อดาวน์โหลดหรือดูไฟล์แนบนี้ คุณยังไม่มีบัญชีใช่ไหม? ลงทะเบียน

    x
  • อารมณ์วันนี้
    แฮปปี้
    เมื่อวาน 00:23
  • เช็คชื่อแล้ว: 409 วัน

    [LV.9]ConquerorII

    47

    กระทู้

    512

    โพสต์

    850

    เครดิต

    TeenLion

    Rank: 3Rank: 3

    เครดิต
    850
    Ticket
    76
    จิตพิสัย
    774
    MMee007 โพสต์ 2018-10-24 09:58:41 | ดูโพสต์ทั้งหมด
    ขอบคุณคับ
  • อารมณ์วันนี้
    ง่วง
    2020-2-6 01:39
  • เช็คชื่อแล้ว: 68 วัน

    [LV.6]JuniorII

    4

    กระทู้

    131

    โพสต์

    428

    เครดิต

    CodeDragon

    Rank: 2

    เครดิต
    428
    Ticket
    327
    จิตพิสัย
    101
    opekzaa โพสต์ 2018-10-24 12:46:43 | ดูโพสต์ทั้งหมด
    ขอบคุณคับ
  • อารมณ์วันนี้
    แฮปปี้
    2019-7-11 13:16
  • เช็คชื่อแล้ว: 4 วัน

    [LV.2]BeginnerI

    0

    กระทู้

    15

    โพสต์

    19

    เครดิต

    BabyGhost

    Rank: 1

    เครดิต
    19
    Ticket
    11
    จิตพิสัย
    8
    art616 โพสต์ 2018-10-24 13:57:55 | ดูโพสต์ทั้งหมด
    สุดยอดเลยคับ
  • อารมณ์วันนี้
    แฮปปี้
    10 ชั่วโมงที่แล้ว
  • เช็คชื่อแล้ว: 626 วัน

    [LV.9]ConquerorII

    47

    กระทู้

    1086

    โพสต์

    7506

    เครดิต

    KingUnicorn

    Rank: 6Rank: 6

    เครดิต
    7506
    Ticket
    4172
    จิตพิสัย
    3334

    Merciful MemberInstructor

     เจ้าของ| puklit โพสต์ 2018-11-8 08:37:03 | ดูโพสต์ทั้งหมด

    มาเผยเทคนิควิธีที่ผมใช้เพิ่มเติมดังนี้

    1. Class จัดการกับภาษา (ClsLanguage) อ่านค่า ตั้งค่าภาษาจาก Setting แล้วไปเลือกไฟล์อ่านค่า Resource ดังนี้
    1.1 PathResources { get; set; } // ระบุที่เก็บ Resoruces
    1.2 ResourceName { get; set; } // ชื่อ Resoruces
    1.3 แล้วเข้าถึง Value ใน Resource ด้วยฟังก์ชั่น Form_Value(string ResourceValue) สำหรับการตั้งค่า text หรือ Caption ในฟอร์มและคอนโทรล์อื่น ๆ
    1. using System;
    2. using System.Collections.Generic;
    3. using System.Linq;
    4. using System.Text;
    5. using System.Threading.Tasks;
    6. using System.Reflection;
    7. using System.Resources;
    8. using System.Windows.Forms;
    9. using DevExpress.XtraEditors;

    10. namespace PMS
    11. {
    12.     class ClsLanguage
    13.     {

    14.         public string PathResources { get; set; } // ระบุที่เก็บ Resoruces
    15.         public string ResourceName { get; set; } // ชื่อ Resoruces

    16.         public enum Language
    17.         {
    18.             English,
    19.             Thai
    20.         }

    21.         // เลือกภาษาสำหรับโปรแกรม
    22.         private string Choose_Language(Language _Language)
    23.         {

    24.             string _Lang = "";
    25.             switch (_Language)
    26.             {
    27.                 case Language.English: _Lang = "EN"; break;
    28.                 case Language.Thai: _Lang = "TH"; break;
    29.                 default: break;
    30.             }

    31.             return _Lang;

    32.         }

    33.         // ตั้งค่าภาษาให้กับโปรกแกรม
    34.         public void Set_Language(Language _Language)
    35.         {

    36.             string _GetLang = Choose_Language(_Language);

    37.             try
    38.             {

    39.                 PMS.Properties.Settings.Default.App_Language = _GetLang; // กำหนดภาษาที่เลือก
    40.                 PMS.Properties.Settings.Default.Save(); // บันทึก
    41.                 Application.Restart(); // สั้งให้ Restart Application

    42.             }
    43.             catch (Exception ex)
    44.             {
    45.                 XtraMessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
    46.             }

    47.         }

    48.         #region(Form controls)

    49.         // ตั้งค่าภาษาให้กับฟอร์มที่ดึงมาจาก Resoruce โดยใช้ ResourceManager ในการอ่าน Value ในไฟล์ Resources
    50.         public string Form_Value(string ResourceValue)
    51.         {

    52.             string _L = PMS.Properties.Settings.Default.App_Language; // เก็บ EN / TH จาก Setting

    53.             Assembly asm = Assembly.GetExecutingAssembly();
    54.             string resourceName = asm.GetName().Name + PathResources + ResourceName;
    55.             var rm = new ResourceManager(resourceName, asm);

    56.             return rm.GetString(ResourceValue + _L);

    57.         }

    58.         #endregion

    59.     }
    60. }
    คัดลอกไปที่คลิปบอร์ด


    2. Class จัดการอ่านไฟล์ Resource (ClsResources) เนื่องจากระบบที่ผมเขียนมีหลายโมดูล ได้แก่
    MAN,MAC,MAT,MET,MAP,REP,INF,HEL,SYS และได้จัดเก็บไฟล์ Resource ออกเป็นในแต่ละ Folder ตามที่แยกไว้ เช่น
    \Resources\Language\Form\MAN\
    \Resources\Language\Form\MAC\ เป็นต้น
    ผมจึงได้สร้าง enum เพื่อให้สามารถเข้าถึงที่อยู่ของ Resoruces ตามโค้ดข้างล่างนี้
    หากท่านไดไม่แยกโฟล์เดอร์ในการจัดเก็บ Resources ก็ไม่ต้องใช้โค้ดคลาสนี้ ใช้เฉพาะ ClsLanguage ก็พอครับ
    1. using System;
    2. using System.Collections.Generic;
    3. using System.Linq;
    4. using System.Text;
    5. using System.Threading.Tasks;

    6. namespace PMS
    7. {
    8.     class ClsResources
    9.     {

    10.         // ประเภทของฟอร์มแบ่งตาม Modules
    11.         public enum Form_Module
    12.         {
    13.             MAN,
    14.             MAC,
    15.             MAT,
    16.             MET,
    17.             MAP,
    18.             REP,
    19.             INF,
    20.             HEL,
    21.             SYS
    22.         }

    23.         #region(Form)

    24.         // เลือกที่อยู่ Path ของ Resources ของฟอร์ม
    25.         public string Choose_FrmModule(Form_Module Form_Modules)
    26.         {

    27.             string frmMdl = "";

    28.             switch (Form_Modules)
    29.             {

    30.                 case Form_Module.MAN: frmMdl = ".Resources.Language.Form.MAN."; break;
    31.                 case Form_Module.MAC: frmMdl = ".Resources.Language.Form.MAC."; break;
    32.                 case Form_Module.MAT: frmMdl = ".Resources.Language.Form.MAT."; break;
    33.                 case Form_Module.MET: frmMdl = ".Resources.Language.Form.MET."; break;
    34.                 case Form_Module.MAP: frmMdl = ".Resources.Language.Form.MAP."; break;
    35.                 case Form_Module.REP: frmMdl = ".Resources.Language.Form.REP."; break;
    36.                 case Form_Module.INF: frmMdl = ".Resources.Language.Form.INF."; break;
    37.                 case Form_Module.HEL: frmMdl = ".Resources.Language.Form.HEL."; break;
    38.                 case Form_Module.SYS: frmMdl = ".Resources.Language.Form.SYS."; break;
    39.                 default: break;

    40.             }

    41.             return frmMdl;

    42.         }

    43.         #endregion

    44.     }
    45. }
    คัดลอกไปที่คลิปบอร์ด


  • อารมณ์วันนี้
    ไร้อารมณ์
    2019-10-2 15:55
  • เช็คชื่อแล้ว: 68 วัน

    [LV.6]JuniorII

    0

    กระทู้

    84

    โพสต์

    156

    เครดิต

    CodeDragon

    Rank: 2

    เครดิต
    156
    Ticket
    110
    จิตพิสัย
    46
    maphone12 โพสต์ 2018-11-17 08:10:38 | ดูโพสต์ทั้งหมด
    ขอบคุณ
  • อารมณ์วันนี้
    สู้
    2020-2-4 11:20
  • เช็คชื่อแล้ว: 196 วัน

    [LV.7]JuniorIII

    1

    กระทู้

    165

    โพสต์

    356

    เครดิต

    CodeDragon

    Rank: 2

    เครดิต
    356
    Ticket
    93
    จิตพิสัย
    263
    nudyesterday โพสต์ 2018-11-18 10:26:12 | ดูโพสต์ทั้งหมด
    ทดสอบการใช้งานค่ะ
  • อารมณ์วันนี้
    แฮปปี้
    12 ชั่วโมงที่แล้ว
  • เช็คชื่อแล้ว: 642 วัน

    [LV.9]ConquerorII

    38

    กระทู้

    739

    โพสต์

    2345

    เครดิต

    RapterClaw

    Rank: 5Rank: 5

    เครดิต
    2345
    Ticket
    654
    จิตพิสัย
    1691

    Expert Online

    artxyy14 โพสต์ 2018-11-20 07:27:14 | ดูโพสต์ทั้งหมด
    thank you.
  • อารมณ์วันนี้
    ขี้เกียจ
    2020-1-27 15:00
  • เช็คชื่อแล้ว: 61 วัน

    [LV.6]JuniorII

    1

    กระทู้

    75

    โพสต์

    36

    เครดิต

    BabyGhost

    Rank: 1

    เครดิต
    36
    Ticket
    23
    จิตพิสัย
    13
    johnnckr โพสต์ 2019-1-15 09:42:07 | ดูโพสต์ทั้งหมด
    thanks you
  • อารมณ์วันนี้
    ขี้เกียจ
    2019-9-3 20:06
  • เช็คชื่อแล้ว: 235 วัน

    [LV.7]JuniorIII

    15

    กระทู้

    418

    โพสต์

    1142

    เครดิต

    HawkBrain

    Rank: 4

    เครดิต
    1142
    Ticket
    368
    จิตพิสัย
    774
    anuyutza1995 โพสต์ 2019-1-16 16:05:07 | ดูโพสต์ทั้งหมด
    ครับ
    ขออภัย! คุณไม่ได้รับสิทธิ์ในการดำเนินการในส่วนนี้ กรุณาเลือกอย่างใดอย่างหนึ่ง ลงชื่อเข้าใช้ | ลงทะเบียน

    รายละเอียดเครดิต

    ข้อความล้วน|อุปกรณ์พกพา|ประวัติการแบน|ProjectForStudy  

    GMT+7, 2020-7-10 20:17 , Processed in 0.071468 second(s), 26 queries .

    Powered by Discuz! X3.2 R20150609, Rev.38

    © 2001-2013 Comsenz Inc.

    ตอบกระทู้ ขึ้นไปด้านบน ไปที่หน้ารายการกระทู้