[Swift]NSLocalizedString ローカライズ対応を読みやすい関数にする

2019年5月5日ITSwift

ローカライズ対応する際に使用するNSLocalizedStringですが、コメントが冗長かと思ったので、省略して可読性の高い関数を追加しました。

// 変数なし
NSLocalizedString("キー", comment: "")

// 変数あり
String(format: NSLocalizedString("キー", comment: ""), 変数1, 変数2, ...)

そのまま使用すると、このようになります

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var helloWordLabel: UILabel!
    @IBOutlet weak var goodMorningLabel: UILabel!
    @IBOutlet weak var goodEveningLabel: UILabel!
    @IBOutlet weak var goodNightLabel: UILabel!
    @IBOutlet weak var goodByeLabel: UILabel!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        helloWordLabel.text   = NSLocalizedString("hello_world", comment: "Hello World!")
        goodMorningLabel.text = NSLocalizedString("good_morning", comment: "Good Morning")
        goodEveningLabel.text = NSLocalizedString("good_evening", comment: "Good Evening")
        goodNightLabel.text   = NSLocalizedString("good_night", comment: "Good Night")
        goodByeLabel.text     = NSLocalizedString("good_bye", comment: "Good Bye")
    }
}

LocalizeUtils.swift ファイルを新規作成し、グローバル関数を追加しました

LocalizeUtils.swift追加

LocalizeUtils.swift

import Foundation

func localize(_ key: String?)-> String? {
    guard let key = key else {
        return nil
    }
    return NSLocalizedString(key, comment: "localize for \(key)")
}

関数追加後

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var helloWordLabel: UILabel!
    @IBOutlet weak var goodMorningLabel: UILabel!
    @IBOutlet weak var goodEveningLabel: UILabel!
    @IBOutlet weak var goodNightLabel: UILabel!
    @IBOutlet weak var goodByeLabel: UILabel!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        helloWordLabel.text   = localize("hello_world")
        goodMorningLabel.text = localize("good_morning")
        goodEveningLabel.text = localize("good_evening")
        goodNightLabel.text   = localize("good_night")
        goodByeLabel.text     = localize("good_bye")
    }
}

Stringを拡張してこのようにも書けます。

import Foundation

extension String {
    
    var localized: String {
        
        return NSLocalizedString(self, comment: "")
        
    }
    
}

こうすると文字列キーの後ろにlocalizedを付ければ、ローカライズ対応できます。
例:

"hello_world".localized
"good_morning".localized

ローカライズ対応に関してはこちらの記事がわかりやすかったです。

参考:
[iOS] ゼロから始める!簡単!多言語対応!

以上になります。

スポンサーリンク

Posted by nobuhiro harada