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
)で持つことです。
これだけでも文字列の直書きを随分と減らすことができました。
他にもいい方法ないかな。。。