LoginSignup
5
3

More than 5 years have passed since last update.

【Swift】ローカライズのコードをちょっとだけスマートに

Posted at

1.はじめに

 アプリのローカライズは文字列の直書きが多くなりがち(個人的な感想)。

 例えば、、、

Localizable.strings(Base)
 "language" = "English";
Localizable.strings(Japanese)
"language" = "日本語";
Hoge.swift
print(NSLocalizedString("language", comment: ""))  // 日本語設定なら「日本語」、それ以外なら「English」

language という文字列を1回しか使わないならいいが、何回も使う場合はやはり文字列の直書きは避けたいもの。

2.列挙体にする

 ローカライズのキーとなる文字列を列挙体にまとめましょう。
 また、この列挙体に、自分の値に応じてローカライズされた文字列を返すメソッドを作ります。
 それだけです。

LocalizeKey.swift
enum LocalizeKey: String {
    case language

    // selfの値をローカライズして返す
    func localizedString() -> String {
        return NSLocalizedString(self.rawValue, comment: "")
    }
}

3.使い方

 Localizable.strings(Base), Localizable.strings(Japanese) 項番1と同じです。

Localizable.strings(Base)
 "language" = "English";
Localizable.strings(Japanese)
"language" = "日本語";
LocalizeKey.swift
enum LocalizeKey: String {
    case language

    // selfの値をローカライズして返す
    func localizedString() -> String {
        return NSLocalizedString(self.rawValue, comment: "")
    }
}
Hoge.swift
print(LocalizeKey.language.localizedString())  // 日本語設定なら「日本語」、それ以外なら「English」

ポイントはLocalizable.strings(Base), Localizable.strings(Japanese) のキーと同じ値を列挙体(LocalizeKey)で持つことです。

これだけでも文字列の直書きを随分と減らすことができました。

他にもいい方法ないかな。。。

5
3
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3