强制 Storyboard 呈现特定的基础本地化

Posted

技术标签:

【中文标题】强制 Storyboard 呈现特定的基础本地化【英文标题】:Force Storyboard to present specific base localization 【发布时间】:2014-06-26 13:56:15 【问题描述】:

我有一个基本本地化的故事板(故事板本身没有本地化) 我希望使用基本定位来本地化应用程序,并且仍然能够从应用程序本身更改本地化。

现在我很喜欢这种方法 -

+(NSString*)localizedStringForKey:(NSString*) key

    NSBundle* languageBundle = [self localizationBundle];
    NSString* str=[languageBundle localizedStringForKey:key value:@"" table:nil];
    return str;

但是这仅适用于我在代码中分配的动态字符串。 有什么方法可以强制故事板使用特定的基础本地化,还是我应该放弃使用此选项并在代码中创建所有字符串?

谢谢 沙尼

【问题讨论】:

【参考方案1】:

您可以为情节提要实现与字符串相同的方法:

// Utils class...
+ (NSString *)localizedStoryboardForName:(NSString *)key

    NSBundle *languageBundle = [self localizationBundle];
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:key bundle:languageBundle];
    return storyboard;

如果您在项目的 plist 中定义了主故事板,请删除该记录并在 AppDelegate 中显式创建。

// AppDelegate class...
UIStoryboard *storyboard = [Utils localizedStoryboardForName:@"Main"];
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
[self.window setRootViewController:[storyboard instantiateInitialViewController]];
[self.window makeKeyAndVisible];

然后创建内部包含不同语言的故事板。它们应该以与 Localizable.strings 文件相同的方式进行本地化。

【讨论】:

@Artel Stepanenko 如果您为 Storyboard 启用了 Size Classes 并且您在 Storyboard 翻译中使用了可本地化的字符串,这将不起作用。在这种情况下会引发异常(“路径上似乎没有有效的编译故事板......”)。任何想法如何处理这个问题?

以上是关于强制 Storyboard 呈现特定的基础本地化的主要内容,如果未能解决你的问题,请参考以下文章

如何使用非基础本地化在 Xcode 中预览 Storyboard

基本本地化 + Storyboard + .strings -> 没有本地化

通过点击本地通知呈现特定视图

在 Objective C 扩展中使用 IBInspectable setter 进行 StoryBoard 本地化

IOS:程序化 rootViewController 以不同的方式呈现视图到 Storyboard 'isInitialView'

如何强制 IntelliJ 中的 Maven 从本地 .m2 存储库中提取特定依赖项