在 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 扩展

在我的 WatchKit 扩展中引用一个 Objective c 类(swift)

在objective-c中检查文件扩展名

扩展现有协议以修改 Objective C 中的委托参数