12/08/2018, 14:03

Đa ngôn ngữ trong lập trình iOS

Internationalization là một khái niệm không hề mới nhưng tầm quan trọng của nó trong việc tạo nên một ứng dụng mang tầm quốc tế là không hề nhỏ. Internationalization là gì? Về cơ bản mà nói thì đây chính giai đoạn thiết kế app với khả năng tương thích quốc tế. Vậy công việc của 1 developer chính ...

Internationalization là một khái niệm không hề mới nhưng tầm quan trọng của nó trong việc tạo nên một ứng dụng mang tầm quốc tế là không hề nhỏ.

Internationalization là gì? Về cơ bản mà nói thì đây chính giai đoạn thiết kế app với khả năng tương thích quốc tế. Vậy công việc của 1 developer chính là thực hiện giai đoạn trên bằng cách sử dụng các API đã được cung cấp, tạo ra các ứng dụng bằng các ngôn ngữ mong muốn. Bao gồm các giai đoạn cơ bản sau:

  • Xử lý text input, output bằng ngôn ngữ native của người dùng
  • Xử lý sự khác nhau cơ bản trong định dạng số hoặc ngày tháng năm
  • Sử dụng calendar hoặc time zone phù hợp trong việc xử lý dữ liệu

Thực hiện:

  • Việc đầu tiên bạn kéo thả để tạo 1 giao diện như hình dưới đây :

Screen Shot 2016-10-25 at 1.18.55 PM.png

  • Để thuận tiện cho việc theo dõi, chúng ta sẽ thực hiện việc thay đổi ngôn ngữ của App ngay trong app. Để set Locale, chúng ta sử dụng 2 câu lệnh:

    NSUserDefaults.standardUserDefaults().setObject([languageCode], forKey: "AppleLanguages")
    NSUserDefaults.standardUserDefaults().synchronize()
    
  • Bây giờ chỉ cần click vào button English hoặc button Viet Nam là sẽ thay đổi được ngôn ngữ của app:

    @IBAction func ChooseEnglish(sender: AnyObject) {
        LanguageManager.shareInstance.setLocalse("en")
        bundle = LanguageManager.shareInstance.getCurrentBundle()
        }
    
    @IBAction func chooseVietNam(sender: AnyObject) {
        LanguageManager.shareInstance.setLocalse("vi")
        bundle = LanguageManager.shareInstance.getCurrentBundle()
        }
    
  • Xcode sử dụng file “.strings” để lưu trữ và gọi tất cả các string được sử dụng trong app cho mỗi ngôn ngữ Chọn File -> New ->Resource. Chọn “Strings File” và đặt tên file là Localizable

Screen Shot 2016-10-13 at 10.22.41 AM.png

  • Thêm file Vietnamese Localization

Screen Shot 2016-10-21 at 8.41.19 AM copy.png

  • Màn hình tiếp theo sẽ hiển thị các file bạn muốn localize

Screen Shot 2016-10-21 at 9.21.10 AM.png

  • Sau đó ta sẽ mở File Inspector và click vào button Localize

Screen Shot 2016-10-24 at 2.36.59 PM copy.png

  • Tiếp theo thêm checkbox cho Tiếng Việt

Screen Shot 2016-10-24 at 2.54.22 PM.png

  • Và lúc này Localizable.strings sẽ có 2 version: tiếng anh và tiếng việt

Screen Shot 2016-10-24 at 2.54.33 PM.png

  • Để tạo ra thay đổi giữa tiếng Anh và tiếng Việt, ta chỉ cần tạo nội dung cho Localizable.strings (English) như sau:

      kUserName = "UserName";
      kPassword ="Password";
      kName = "Name:";
      kPwd = "Pwd:";
      kLogin = "Log In";
      kEnglish = "English";
      kVietNam = "Vietnamese";
    
  • và Localizable.strings (Vietnamese) như sau:

      kUserName = "Tên";
      kPassword ="Mật khẩu";
      kName = "Tên:";
      kPwd = "Mật khẩu:";
      kLogin = "Đăng nhập";
      kEnglish = "Tiếng Anh" ;
      kVietNam = "Tiếng Việt" ;
    
  • Sau đó ta sử dụng hàm NSLocalizedString để lấy về localized string.Và set title cho các views.Ví dụ muốn set text cho button English:

    englishBtn.setTitle(NSLocalizedString("kEnglish", bundle: bundle, comment: "hello"), forState: UIControlState.Normal)
    
  • Lúc này chỉ việc build và run app, click vào button English hoặc VietNamese, ban sẽ được kết quả mong muốn :

Screen Shot 2016-10-25 at 1.18.55 PM.png

Screen Shot 2016-10-25 at 1.19.05 PM.png

Các bạn có thể tham khảo code mình đã viết theo đường dẫn dưới đây https://github.com/TuInh/Report

0