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

1。アプリバンドルLocalizable.stringsのディレクトリでファイルに名前を付ける必要があります。<LANGUAGENAME>.lproj

二。NSLocalizedStringマクロを使用します。

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

三。何も機能しない場合は、strings ファイルを使用して NSDictionary を初期化できます。strings ファイルは特殊なタイプの 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);

ここでの問題は、2 番目のパラメータ "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 に答える