强制 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'