如何在我的应用程序中使用UIKit本地化字符串

9
我们正在开发一款iOS游戏,我们的公司要求UIAlertView中的取消按钮应该根据用户设备语言本地化显示。
看起来UIKit框架中有这样一个字符串,那么我怎样才能在自己的应用程序中访问它呢?
或者,还有其他方法可以创建带有本地化取消按钮的UIAlertView吗?
谢谢!
通过以下代码解决了问题:
NSBundle* uikitBundle = [NSBundle bundleForClass:[UIButton class]];
NSString *language = [[[NSUserDefaults standardUserDefaults] objectForKey:@"AppleLanguages"] objectAtIndex:0];
NSBundle *languageBundle = [NSBundle bundleWithPath:[uikitBundle pathForResource:language ofType:@"lproj"]];
NSLog(@"%@: %@", language, NSLocalizedStringFromTableInBundle(@"Cancel", @"Localizable", languageBundle, nil));

这段代码从/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.3.sdk/System/Library/Frameworks/UIKit.framework读取字符串文件。

NSUserDefaultUIKit.framework文件夹中以下语言名称不同:fr en zh-Hans it de ja nl es pt-PT nb zh-Hant en-GB,需要通过代码进行处理。

3个回答

4

使用已在 UIKit 中的字符串的简便方法

NSBundle* uikitBundle = [NSBundle bundleForClass:[UIButton class]];
NSString *cancel = [uikitBundle localizedStringForKey:@"Cancel" value:nil table:nil];

2

Swift 4:

    let bundle = Bundle.init(for: UIButton.self)
    let doneTitle = bundle.localizedString(forKey: "Done", value: nil, table: nil)
    for state: UIControlState in [.normal, .highlighted, .disabled, .selected, .focused, .application, .reserved] {
        buttonDone.setTitle(doneTitle, for: state)
    }

-1
你应该使用基础框架中的 NSLocalizedString: http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Miscellaneous/Foundation_Functions/Reference/reference.html
这里有一个很好的教程:http://www.icanlocalize.com/site/tutorials/iphone-applications-localization-guide/
那些预定义的按钮名称将被操作系统自动翻译(在选项卡栏中完成),并且在 uialertview 中,你可以设置取消按钮标题为任何你想要的...
     UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"title",@"titleKey") 
message:NSLocalizedString(@"message",@"messageKey") 
delegate:self 
cancelButtonTitle:NSLocalizedString(@"cancel",@"cancelKey") 
otherButtonTitles:nil];

我的问题关键是如何获取NSLocalizedString(@"cancel",@"cancelKey")。当我的设备设置为意大利语时,它返回“cancel”。 - Zhao Xiang
你需要为每种语言创建Localizable.strings文件……请仔细查看我为你提供的教程中的第3点。 - kviksilver
我们需要支持所有语言的“取消”功能,我认为创建数百个字符串文件并翻译它们并不是一个好主意。 - Zhao Xiang
很高兴从你的第一行代码中了解到 NSLocalizedStringFromTableInBundle。谢谢。 - Zhao Xiang
问题是关于使用UIKit翻译,节省自己处理常见单词和短语的时间。请看我的回答,其中提供了一种简单易行的方法。 - Daniel Broad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接