Localization swift xcode

Localization គឺជាប្រើភាសាជាច្រើននៅក្នុង app របស់យើង ដោយយើងប្រើវិធីបកប្រែ។ មុនដំបូងយើងបង្កើត projcet មួយ ដោយខ្ញុំប្រើភាសាពីរគឺ ភាសាខ្មែរ និង ភាសាអង់គ្លេស

បន្ទាបពីយើងបង្កើត project មួយ ហើយវាលូតផ្ទាំងមួយដូចទៅនឹងរូបភាពខាងលើ។ សូមចុចលើឈ្មោះ project របស់យើងដូចដែលខ្ញុំបានគួសគំនួសក្រហម បន្ទាបមកយើងមើលមកក្រោមដោយយើងឃើញពាក្យថា Localization គឺជាកន្លែងបន្ថែមភាសា ដោយយើងចុចសញ្ញាបូក។ នៅក្នុងនេះខ្ញុំបានបន្ថែមភាសាខ្មែរដែលវាមានកូដថា (km)។

យើងទៅបង្កើត file string ដើម្បីផ្ទុកភាសាសម្រាប់យកមកបកប្រែ។

បន្ទាបមកយើងដាក់ឈ្មោះឲ្យវាថា Localizable ប្រសិនបើដាក់ឈ្មោះមិនដូចនេះទេ វាមិនដើរទេ អញ្ចឹងយើងត្រូវដាក់ឈ្មោះឲ្យដូចនេះ

បន្ទាមកយើងចុច add ភាសានៅកន្លែង Localizable ដោយយើងអាចយកភាសាណាមួយក៏បានដែលវាមានពីរគឺ អង់គ្លេស រឺខ្មែរ ដែលយើងបានបង្កើតតាំងពីដំបូង។

ធីកយកទាំងពីរ

វាបានបង្កើត file ពីរឲ្យយើងសម្រាប់ផ្ទុកពាក្យមកបកប្រែ។ នៅក្នុងបកប្រែនៅក្នុង file string នេះយើងតែដាក់សញ្ញាក្បៀស semiconlon (;) ទើបវាដើរ ។ file ទាំងពីរនេះដែលវាមានមានឈ្មោះ folder របស់វាដូចខាងរូបខាងក្រោម ដោយវាមាន extention ឈ្មោះ .lproj

នេះគឺជាទំរងការផ្ទុកពាក្យដែលយើងសំរាប់បកប្រែ "key"="Value";

ខ្ញុំបង្កើត label និង button មួយសម្រាប់បកប្រែ

បង្កើត file swift មួយ សំរាប់ទាញមកបកប្រែ យើងដាក់ឈ្មោះ LanguageManager

import Foundation
class LanguageManager{
    
}

យើងបង្កើត property ចេញពី class មួយសំរាប់ហៅមកប្រើ

import Foundation
class LanguageManager{
    static let shared = LanguageManager()
}

បន្ទាបមកយើងបង្កើត Computed property សម្រាប់ set និង get ទិន្ន័យ

import Foundation
class LanguageManager{
    static let shared = LanguageManager()
    
    var language: String{
        get{
            //get មកពីណា
            //App មានភាសាអ្វី
            if let lang = UserDefaults.standard.string(forKey: "LanguageCode"){
                //key នឹងយើងដាក់ឈ្មោះអ្វីក៏បានខ្ញុំដាក់ថា LanguageCode
                return lang
            }else{
                return self.language
            }
        }
        set{
            UserDefaults.standard.set(newValue, forKey: "LanguageCode")
        }
    }
}

យើងសរសេរកូដមកការទាញពាក្យមកបកប្រែ ប៉ុន្តែយើងកូដរបស់យើងកុំឲ្យរញ៉េរញ៉ៃសូម extention code

// cutomize នៃ Key របស់ welcome របស់ label.text = "welcome".localized
extension String{
    //ជាអ្នកបកប្រែ
    var localized: String{
        // ទៅរកទីតាំងនៃ file string ផ្ទុកភាសា
        let part = Bundle.main.path(forResource: LanguageManager.shared.language, ofType: "lproj")
        //LanguageManager.shared.language គឺស្មើនឹង km រឺ en នៃឈ្មោះ file
        //lproj គឺជា extention នៃ folder ភាសារបស់យើង
        let bundle = Bundle(path: part!)
        
        let translated = bundle?.localizedString(forKey: self, value: nil, table: nil)
        return translated!
    }
}

យើងមកសរសេរកូននៅក្នុង ViewController របស់យើងវិញ។ ដោយយើងបោះតំលៃទៅឲ្យ text label និង text button>

 import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var label: UILabel!
    @IBOutlet weak var btnLabel: UIButton!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        label.text = "welcome".localized
        btnLabel.setTitle("language".localized, for: .normal)
    } 

label.text = "welcome".localized នៅក្នុង "welcome" គឺជា key នៃ ពាក្យរបស់យើង ។ ចំណែក localized គឺអាចជា km រឺ en ដែលយើងបានទាញចេញពី class LanguageManager

យើងបានប៉ុន្នឹងហើយ ប៉ុន្តែ app របស់យើងបើកដំណើរដំបូងចង់ឲ្យដំណើរការភាសាអ្វីមុនគេ ដោយយើងទៅកំណតនៅក្នុង AppDelegate

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        //យើងកំណត់ថាដំណើរមុនដំបូង ដើរដោយភាសា ខ្មែរ
        if UserDefaults.standard.string(forKey: "LanguageCode") == nil{
            LanguageManager.shared.language = "km"
        }
        return true
    }

យើងប្តូរភាសារតាម button

@IBAction func btn(_ sender: Any) {
        if LanguageManager.shared.language == "km"{
            LanguageManager.shared.language = "en"
        }else{
            LanguageManager.shared.language = "km"
        }
        //NotificationCenter សំរាប់បង្កើត addObserver
        NotificationCenter.default.post(name: NSNotification.Name("languageChange"), object: nil)
        //languageChange យើងដាក់ហៅមកប្រើ
    }

បន្ទាបមកយើងបង្កើត addObserver នៅក្នុង viewDidLoad method របស់យើង

NotificationCenter.default.addObserver(self, selector: #selector(changeLanguage), name: NSNotification.Name("languageChange"), object: nil)

កូននេះវាជា objcetive c ដូចនេះយើងបង្កើត function ចេញពី objcetive ។ និង copy text label និង button label ដាក់នៅក្នុង function នេះ

 @objc func changeLanguage(){
        label.text = "welcome".localized
        btnLabel.setTitle("language".localized, for: .normal)
    }
import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var label: UILabel!
    @IBOutlet weak var btnLabel: UIButton!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        NotificationCenter.default.addObserver(self, selector: #selector(changeLanguage), name: NSNotification.Name("languageChange"), object: nil)
        
        changeLanguage()
    }
    @objc func changeLanguage(){
        label.text = "welcome".localized
        btnLabel.setTitle("language".localized, for: .normal)
    }
    
    @IBAction func btn(_ sender: Any) {
        if LanguageManager.shared.language == "km"{
            LanguageManager.shared.language = "en"
        }else{
            LanguageManager.shared.language = "km"
        }
        //NotificationCenter សំរាប់បង្កើត addObserver
        NotificationCenter.default.post(name: NSNotification.Name("languageChange"), object: nil)
        //languageChange យើងដាក់ហៅមកប្រើ
    }
    
}

យើងបោះទិន្ន័យទៅ screen ផ្សេង ។ ដោយខ្ញុំបង្កើត button មួយទៀតគឺ register ហើយបង្កើត viewController ថ្មីមួយទៀតដោយដាក់ឈ្នោះថា AddViewController

យើងឲ្យវាបើក screen មួយទៀតតាមរយៈ button register

@IBAction func registerBtn(_ sender: UIButton) { let addVC = storyboard?.instantiateViewController(withIdentifier: "screenTwo") self.navigationController?.pushViewController(addVC!, animated: true) }

យើងមកសរសេរកូដនៅក្នុង AddViewController ។ ដោយយើងសរសេរ function c ដូចទៅនឹងនៅ ViewController

import UIKit

class AddViewController: UIViewController {

    @IBOutlet weak var nameLabel: UITextField!
    @IBOutlet weak var phoneLabel: UITextField!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        changeLanguage()
       
    }
    
    @objc func changeLanguage(){
        nameLabel.placeholder = "name".localized
        phoneLabel.placeholder = "phone".localized
    }

}


download projcet

Post a Comment

0 Comments