Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 7 của 7
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    Đa ngôn ngữ cho ứng dụng trong lập trình C#

    Xây dựng một ứng dụng, đôi lúc bạn muốn thiết lập giao diện với nhiều ngôn ngữ. Thường thì với chúng ta sẽ xây dựng là tiếng Anh và tiếng Việt. Ở đây tớ có bài hướng dẫn thiết lập và chuyển đổi giữa 2 ngôn ngữ là tiếng Anh và tiếng Việt. Ai chơi tiếng Trung, Nhật hay Thái thì cho tớ vài cái font và bộ gõ để chơi vui hen.

    Đầu tiên bạn tạo một project đặt tên gì đó thì tùy, sau đó cho vào một menu hay vài button, label gì đó để xử lý là được. Ở đây tớ cho vào 2 button 1 button là btnEnglish (đổi sang tiếng anh), 1 button là btnVietNam (đổi sang tiếng việt). Và mặc định tớ sẽ xây dựng ứng dụng là tiếng Anh nhé.


    Với cách xử lý này chúng ta chú ý đến 2 thuộc tính là Language Localizable nhìn vào hình dưới: (Nhớ thay đổi giá trị cho thuộc tính Localizable True nha).


    Nhìn vào cái khung solution Explorer --> mở file Settings.settings và bạn đặt giá trị như hình sau:


    Giải thích: Thiết lập giá trị trong setting để gán ngôn ngữ mặc định cho ứng dụng lúc đầu. Trong thuộc tính Language của form bạn sẽ thấy các ngôn ngữ cho bạn lựa chọn. Trong đó English (United State)value en-US (chú ý cái value này nha) với Vietnamesevi-VN. Trong file settings vừa rồi bạn thiết lập là để xác định cái giá trị Default của thuộc tính Language English (United State).

    Và ban đầu ứng dụng thực thi nó sẽ xác định ngôn ngử mặc định trước đó yêu cầu là gì. Tức là nếu lần sau chúng ta muốn thay đổi dạng ngôn ngữ thì phải khởi động lại chương trình nó mới chuyển ngôn ngữ và lúc mà ta xác định ngôn ngữ ứng dụng sẽ lưu giá trị lại và lúc khởi động dựa vào đó để xác định. Bởi vậy trong class Programs.cs có sẵn của ứng dụng chúng ta phải thêm vào câu lệnh để xác định ngôn ngữ sau khi khởi động là gì.


    Mã:
            [STAThread]        static void Main()        {            //thêm câu lệnh sau vào            System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(Properties.Settings.Default.Language);             Application.EnableVisualStyles();            Application.SetCompatibleTextRenderingDefault(false);            Application.Run(new Form1());        }
    Giải thích chút xíu: Câu lệnh sẽ lấy giá trị ta đã gán cho value của cái node Language mà ta tạo ra trong file settings để xác định ngôn ngữ là gì. Giá trị này sẽ lưu ở file app.config mà lúc ta mở file settings.settings nó tự động tạo ra đó. (Mở lên coi nó có gì [IMG]images/smilies/biggrin.png[/IMG])

    Bây giờ chúng ta chọn thuộc tính Language của form mà tớ kêu chú ý như lúc đầu đó (nhớ lúc này thì giá trị của Localizable = True rồi đó nha). Ban đầu bạn thấy nó là Default tức là en-US mà ta xác định ban đầu đó. Bạn sẽ thay đổi nó sang Vietnamese (kéo xuống gần dưới cùng là thấy àh). Bạn sẽ thấy cái form sẽ mất đi chút xíu rồi xuất hiện lại (vẫn thấy i xì ko có gì thay đổi). Thực ra nó đã thay đổi rồi đó, giống như nó copy một form mới y xì vậy (không phải copy đâu nha). Giờ thì bạn đổi text của các button hay label, form gì đó sang tiếng Việt thôi. Ví dụ tớ type lại như sau:


    Mọi chuyện đã gần như hoàn thành rùi đó. Giờ bạn code cho các button xác định chuyển đổi ngôn ngữ thôi. (Nhớ là nó chỉ chuyển đôi sau khi bạn xác định dạng ngôn ngữ và khởi động lại chương trình, nhấp vào để nó vẫn thấy y xì đừng trách tớ không nhắc trước nha [IMG]images/smilies/biggrin.png[/IMG]).

    ở button btnEnglish code như sau:

    Mã:
            private void btnEnglish_Click(object sender, EventArgs e)        {            //xác định ngôn ngữ cho ứng dụng là tiếng Anh            Properties.Settings.Default.Language = "en-US";            //Lưu xác định đó lại            Properties.Settings.Default.Save();        }
    ở button btnVietNam code như sau:

    Mã:
            private void btnVietNam_Click(object sender, EventArgs e)        {            Properties.Settings.Default.Language = "vi-VN";            Properties.Settings.Default.Save();        }
    Vậy là xong rồi đó. Giải thích tí nha: câu lệnh trên sẽ xác định giá trị cho cái node Language mà tớ kêu tạo ra như lúc đầu đó. Câu thứ 2 chỉ là lưu xác định đó lại. Giờ thì hiểu vì sao phải khởi động lại chương trình rùi chứ (trong cái class programs chạy lúc khởi động chương trình sẽ xác định ngôn ngữ đó).

    Ok! Vậy là mọi chuyện tạm ổn, nếu muốn code luôn việc khởi động lại chương trình thì bạn phải dùng đến thread (tạo thread mới của ứng dụng, kill thread củ đi [IMG]images/smilies/biggrin.png[/IMG]) (tự mò nhé...[IMG]images/smilies/waiting.gif[/IMG])

    Demo

    http://www.fileden.com/files/2008/5/...7/Language.rar
    ============================================
    Chú ý: Vẫn có thể xài theo kiểu khác là chơi file resource của chương trình, tạo ra các string rồi lấy giá trị của các string này truyền vào.

    Trong quá trình xây dựng ứng dụng, bạn làm gì cũng được, nhưng nhớ tốt nhất nên thao tác chính ở trên mặc định (cái Language là Default như lúc đâu đó).

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    hjx, khi debug trên Visual Studio thì OK nhưng tạo thành file cài đặt trên máy lại ko được là sao ? Ai giúp mình giải quyết vấn đề này với !

  3. #3
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    cho mình hỏi cái này 1 chút,
    mình làm 2 ngôn ngữ eng và vn, mặc định để default và àm giống như bạn nói.
    tuy nhiên gặp phải vấn đề là nếu chuyển từ Eng sang VN lần đầu tiên thì sau khi chuyển vẫn là Eng
    còn ngược lại chuyển lần đầu tiên từ VN sang eng thì tốt, các lần sau chuyển đều tốt cả, chỉ bị lần đầu tiên.
    ko biết là mắc lỗi ở đâu?
    có phải do mình dung application.restart() để kill threat sai ko?

    File ở trên ko download được

  4. #4
    Nhưng nếu mình dùng cách này thì chỉ thay đổi được ngôn ngữ trên giao diện thôi phải không bạn.
    Có cách nào có thể thay đổi toàn bộ ngôn ngữ, ví dụ cả nhưng thông báo trên MessingBox và mình đã code trong app không

  5. #5
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Mình có ý tưởng về ngôn ngữ thế này chỉ là ý tưởng thôi nhé nên k có code demo hihi

    Đầu tiên tạo ra 1 file XML gồm các node và childnode ghi tiếng việt
    Sau đó mình đọc từ file XML đó gán vào các button label và cả lưới hehe.như vậy thì rất nhẹ vì XML là dang text..dưới đây là code lóad file XML lên lable và button trong panel Eqauipment..
    Mã:
                  foreach (Control c in this.pnlEquipment.Controls)
                {
                    if (c is System.Windows.Forms.Label)
                    {
                        Label myLabel = (Label)c;
                        db.XMLLabel(myLabel);
                    }
                    if (c is DevExpress.XtraEditors.SimpleButton)
                    {
                        SimpleButton myButton = (SimpleButton)c;
                        db.XMLButton(myButton);
                    }
                }
    Chỉ là ý tưởng vậy thui ai có ý kiến nào hay hơn thì cho mình tham khảo nhá

  6. #6
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi khanhnd88
    Nhưng nếu mình dùng cách này thì chỉ thay đổi được ngôn ngữ trên giao diện thôi phải không bạn.
    Có cách nào có thể thay đổi toàn bộ ngôn ngữ, ví dụ cả nhưng thông báo trên MessingBox và mình đã code trong app không
    Để có thể chuyển đổi ngôn ngữ đối với các thông báo dùng MessageBox, các xâu ký tự cần phải được đặt trong các tệp tài nguyên.

    * Thêm vào dự án một Resources File và đặt tên là Resources.vi.resx.
    * Kéo tệp vừa thêm và thả vào mục Properties của dự án.



    Tệp Resources.resx dùng để chứa các xâu ký tự trên ngôn ngữ ngầm định, tệp Resources.vi.resx dùng để chứa các xâu ký tự theo ngôn ngữ Tiếng Việt.

    Thêm vào các tệp Resources các xâu ký tự, ở cả hai ngôn ngữ:

    Các xâu ký tự trên ngôn ngữ ngầm định



    Các xâu ký tự Tiếng Việt



    Khi đưa ra thông báo, truy cập các xâu ký tự thông qua lớp Properties.Resources.

    Ví dụ, để thông báo yêu cầu khởi động lại chương trình sau khi chuyển ngôn ngữ, sửa đổi các phương thức xử lý sự kiện như sau:

  7. #7
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    hihi. Bạn ơi bạn giúp luôn cái việc tạo thread mới của ứng dụng, kill thread củ đi. nha nha..... hihi. Cảm ơn nhiều nhiều. bây giờ mới tự học C#, mà đồ án thì phải động đến, Bạn giúp tớ nha.

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •