11

我正在创建一个 Mac 应用程序,我想本地化我的标签。我认为.strings文件会是更好的选择。.strings但我在 Objective-C 中读取文件时遇到问题。我正在寻找一种更简单的方法。

这是我的.string文件内容:

"LABEL_001" = "Start MyApp";
"LABEL_002" = "Stop MyApp";
"LABEL_003" = "My AppFolder";
...

我已经看过http://developer.apple.com/library/mac/#documentation/cocoa/conceptual/LoadingResources/Strings/Strings.html

这是我的代码:

NSBundle *bundle = [NSBundle mainBundle];
NSString *strFilePath = [[NSBundle mainBundle] pathForResource:@"Labels" ofType:@"strings"];
NSString *tt =NSLocalizedStringFromTableInBundle(@"LABEL_001",strFilePath,bundle, nil);
NSLog(@"STRING ::: %@",tt);

但是 tt 给出的字符串"LABEL_001",我想要"Start MyApp"

我究竟做错了什么?

4

4 回答 4

29

一。您必须在应用程序包Localizable.strings的目录中命名您的文件。<LANGUAGENAME>.lproj

二。使用NSLocalizedString宏:

NSString *loc = NSLocalizedString(@"LABEL_001", nil);

三。如果没有任何效果,您可以使用字符串文件初始化 NSDictionary,因为字符串文件是 plist 的一种特殊类型:

NSString *fname = [[NSBundle mainBundle] pathForResource:@"whatever" ofType:@"strings"];
NSDictionary *d = [NSDictionary dictionaryWithContentsOfFile:fname];
NSString *loc = [d objectForKey:@"LABEL_001"];
于 2012-08-17T10:58:49.807 回答
2
    NSString *path = [[NSBundle mainBundle] pathForResource:@"Labels" ofType:@"strings"];
    NSData *plistData = [NSData dataWithContentsOfFile:path];
    NSString *error; NSPropertyListFormat format;

    NSDictionary *dictionary = [NSPropertyListSerialization propertyListFromData:plistData
                                                          mutabilityOption:NSPropertyListImmutable
                                                                    format:&format
                                                          errorDescription:&error];
    NSString *stringname = [dictionary objectForKey:@"LABEL_001"];

我想这会对你有所帮助。

于 2012-08-17T11:12:38.973 回答
1

这里是你的代码

NSBundle *bundle = [NSBundle mainBundle];
NSString *strFilePath = [[NSBundle mainBundle] pathForResource:@"Labels" ofType:@"strings"];
NSString *tt =NSLocalizedStringFromTableInBundle(@"LABEL_001",strFilePath,bundle, nil);
NSLog(@"STRING ::: %@",tt);

这里的问题是第二个参数“strFilePath”,把它改成@“Labels”这样上面的代码就变成了,

NSString *tt =NSLocalizedStringFromTableInBundle(@"LABEL_001",@"Labels",bundle, nil);

作为参考,从 Apple Docs 复制的有关表名的以下行,“指定此参数的值时,包括不带 .strings 扩展名的文件名。”

希望这可以帮助。

于 2012-11-17T06:01:48.243 回答
0

简单代码

只需创建一个方法如下

- (void)localisationStrings
{
    NSString* path = [[NSBundle mainBundle] pathForResource:@"localisation" ofType:@"strings"];
    NSDictionary *localisationDict = [NSDictionary dictionaryWithContentsOfFile:path];
    NSLog(@"\n %@",[localisationDict objectForKey:@"hello"]);
}
于 2015-09-15T10:15:43.517 回答