Attention! Translated article might be found on my English blog.

2017年10月16日月曜日

自作.frameworkでの文字列のローカライズ

通常文字列のローカライズする(Localizable.stringsに書かれた文字列を使う)には、

NSLocalizedString(@"Stop", @"");

を使いますが、このマクロの定義は

#define NSLocalizedString(key, comment) \
    [NSBundle.mainBundle localizedStringForKey:(key) value:@"" table:nil]

となっています。
結果、これを自作.frameworkで使うと利用プログラム側のbundleが参照されることになり、.framework側が参照されません。

解決策としては

NSLocalizedStringFromTableInBundle(@"Stop", nil, [NSBundle bundleForClass:self.class], @"");

てな感じでNSLocalizedStringFromTableInBundle()というマクロを使い、
クラスが属するバンドルを参照するのが良さそうです。