在 Objective C 扩展中使用 IBInspectable setter 进行 StoryBoard 本地化
Posted
技术标签:
【中文标题】在 Objective C 扩展中使用 IBInspectable setter 进行 StoryBoard 本地化【英文标题】:StoryBoard Localization with IBInspectable setter in Objective C Extensions 【发布时间】:2015-09-09 10:12:52 【问题描述】:根据this blog post,您可以使用 IBInspectable 扩展快速本地化故事板。我们可以单独依赖 Localizable.strings 文件,而不用本地化故事板并担心字符串的多个文件。
所以我的问题是如何用目标 c 实现相同的目标?如果答案是不可能的,那么将所有面向 UI 的字符串保存在一个文件中并获取它的最佳方法是什么。
【问题讨论】:
重新表述我的问题:我不想使用两个不同的字符串文件,比如一个用于情节提要,一个用于 .m 文件。那么有没有办法只使用一个字符串文件进行本地化。 .strings 文件的数量无关紧要,因为从技术上讲,您应该通过在 Xcode 中选择项目文件来导出 Xliff 文件(其中包含所有 .strings 文件中的所有内容),然后编辑器 -> 本地化导出 【参考方案1】:您知道您可以像在 Swift 中一样使用来自 Objective-C 的这些扩展,对吗? 无论如何,要在 Objective-C 中做同样的事情,您只需使用 IBInspectable 属性创建类别。
@interface UILabel(LocalizationUtils)
@property (nonatomic, weak) IBInspectable NSString *localizedText;
@end
@implementation UILabel(LocalizationUtils)
- (void)setLocalizedText:(NSString*)localizedText
self.text = NSLocalizedString(localizedText, @"");
- (NSString*)localizedText
return @"";
@end
【讨论】:
以上是关于在 Objective C 扩展中使用 IBInspectable setter 进行 StoryBoard 本地化的主要内容,如果未能解决你的问题,请参考以下文章
Objective C 类扩展 - 如何用 readwrite 方法覆盖只读?
是否可以创建在 Objective C 中手动开发的核心数据实体的快速扩展?
从 Objective C 调用 Swift 中定义的 NSString 扩展