如何获得本地化取消,完成等?

时间:2012-08-29 15:06:33

标签: objective-c ios localization

UIBarButtonItem具有取消,完成和其他一些标识符。它们显示为用户的文本。如果用户更改语言,则例如“取消”按钮将自动翻译。作为开发人员,您不需要为此按钮提供本地化字符串。这意味着取消,完成和其他字符串已经本地化并与OS结合在一起。

这是一种以编程方式获取此字符串的方法吗?

我不想在本地化文件中添加其他字符串。如果可以访问则会非常好。

7 个答案:

答案 0 :(得分:24)

这是我为了获得System UIKit Strings而创建的一个小宏:

#define UIKitLocalizedString(key) [[NSBundle bundleWithIdentifier:@"com.apple.UIKit"] localizedStringForKey:key value:@"" table:nil]

像这样使用:

UIKitLocalizedString(@"Search");
UIKitLocalizedString(@"Done");
UIKitLocalizedString(@"Cancel");
...

答案 1 :(得分:10)

轻松实现这一目标的一种(可以肯定的问题)方法是直接使用Apple的框架捆绑本地化:

要查看他们提供的内容,请通过Finder打开以下目录:

/Applications/Xcode/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator6.1.sdk/System/Library/Frameworks

在您的情况下,您随后将打开./UIKit.framework/English.lproj/Localizable.strings(在TextMate中)。在这里,您可以看到Apple用于“打印”,“确定”,“开启”,“关闭”等各种翻译。真正的神奇之处在于,您可以将大约35种不同的语言翻译复制到您的拥有Localizable.strings文件,免费。

如果您令人难以置信的无耻并且不介意将您的应用程序的未来稳定性问题,您可以跳过整个“复制到您自己的Localizable.strings”过程并直接以编程方式直接访问源代码:

NSBundle *uiKitBundle = [NSBundle bundleWithIdentifier:@"com.apple.UIKit"];
NSString *onText = uiKitBundle ? [uiKitBundle localizedStringForKey:@"Yes" value:nil table:nil] : @"YES";
NSString *offText = uiKitBundle ? [uiKitBundle localizedStringForKey:@"No" value:nil table:nil] : @"NO";

警告:我绝不建议您在要提交到App Store的应用程序中以编程方式实际访问这些本地化资源。我只是说明了一个我见过的特定实现,它解决了你原来的问题。

答案 2 :(得分:3)

虽然可能并不完全是您所寻求的,但Mac App Store中有一个名为“System Strings”的商业应用声称它提供了超过53000个标准本地化字符串的集合。它于2012年11月2日发布。我与此应用程序或作者无关。网址为https://itunes.apple.com/us/app/systemstrings/id570467776

答案 3 :(得分:3)

Answer for this Question鼓励(Stephan Heilner)  和Answer bdunaganiPhone/iOS: How can I get a list of localized strings in all the languages my app is localized in?Swiftify v1.0.6472

功能:

NSString *UIKitLocalizedString(NSString *key) {
    return [[NSBundle bundleForClass:UIApplication.class] localizedStringForKey:key value:nil table:nil];
}

Swift 4.1转换为{{3}}

func UIKitLocalizedString(key: String) -> String {
    return Bundle(for: UIApplication.self).localizedString(forKey: key, value: nil, table: nil)
}

类别:

@implementation NSBundle (Localization)

+ (instancetype)UIKit {
    return [self bundleForClass:UIApplication.class];
}

- (NSArray<NSString *> *)localizationKeys {
    NSString *path = [self pathForResource:@"Localizable" ofType:@"strings"];
    return [NSDictionary dictionaryWithContentsOfFile:path].allKeys;
}

- (NSString *)localizedStringForKey:(NSString *)key {
    return [self localizedStringForKey:key value:nil table:nil];
}

@end

例如,要获取UIKit的本地化字符串的所有键:[[NSBundle UIKit] localizationKeys]

答案 4 :(得分:1)

听起来你问的是Apple是否提供了一种访问预翻译字符串字典的方法。我认为Apple提供的类似内容的任何内容都将位于他们的文档中:Internationalization Programming Topics

要回答您的问题,我不相信他们会提供已知翻译的字典/列表。要么你必须在你的Localizable.strings资源文件中定义它们,要么像其他人在评论中所说的那样定义它们并从UIBarButtonItem中提取标题(我会亲自使用资源文件)。

答案 5 :(得分:0)

为什么不在故事板上使用基本本地化?它将为您本地化。

答案 6 :(得分:-3)

您可以使用

NSLocalizedString(@"Cancel", @"Cancel")