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

Posted

技术标签:

【中文标题】如何在我的应用程序中使用 UIKit 本地化字符串【英文标题】:How to use UIKit localized string in my app 【发布时间】:2011-08-02 09:28:20 【问题描述】:

我们正在开发一款 ios 游戏,我们公司要求 UIAlertView 中的取消按钮应始终根据用户的设备语言进行本地化。

UIKit框架里好像有这样一个字符串,我自己的app怎么访问?

或者,是否有任何其他方式来创建带有本地化取消按钮的 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。它们应该由代码处理。

【问题讨论】:

【参考方案1】:

UIKit 中已有字符串的简单方法

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

【讨论】:

【参考方案2】:

斯威夫特 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)
    

【讨论】:

【参考方案3】:

您应该使用基础框架中的 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")。当我的设备设置为意大利语时,它返回“取消”。 您必须为每种语言创建 Localizable.strings 文件...仔细查看数字 3。在我为您链接的教程中... 我们只需要“取消”就需要支持所有语言,我认为创建数百个字符串文件并全部翻译它们不是一个好主意 很高兴知道NSLocalizedStringFromTableInBundle 是您的第一个赞。谢谢。 问题是关于使用 UIKit 翻译,省去了自己做的常用词和短语。请参阅我的答案以获得一种简单的方法。

以上是关于如何在我的应用程序中使用 UIKit 本地化字符串的主要内容,如果未能解决你的问题,请参考以下文章

如何在我的应用程序中测试本地化

如何在 UIKit 中调试谁在吃我的触摸?

SwiftUI 小部件中的 UIKit UserDefaults

如何在我的 chrome 扩展中本地保存信息?

如何在不使用uikit组件的情况下在反应js中导入uikit js?

如何在现有 UIKit 类(如 UIColor)的扩展中添加初始化程序?