Read .strings file in Objective-C?

前端 未结 4 1036
孤城傲影
孤城傲影 2021-02-08 10:14

I\'m creating a Mac app and I want to localize my Labels. I thought a .strings file would be a better choice. But I have trouble reading .strings file

相关标签:
4条回答
  • 2021-02-08 10:37

    One. You have to name your file Localizable.strings in the <LANGUAGENAME>.lproj directory in the app bundle.

    Two. Use the NSLocalizedString macro:

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

    Three. If nothing works, you can initialize an NSDictionary using a strings file, as a strings file is a special type of plist:

    NSString *fname = [[NSBundle mainBundle] pathForResource:@"whatever" ofType:@"strings"];
    NSDictionary *d = [NSDictionary dictionaryWithContentsOfFile:fname];
    NSString *loc = [d objectForKey:@"LABEL_001"];
    
    0 讨论(0)
  • 2021-02-08 10:37

    Simple Code

    Just create a method as follows

    - (void)localisationStrings
    {
        NSString* path = [[NSBundle mainBundle] pathForResource:@"localisation" ofType:@"strings"];
        NSDictionary *localisationDict = [NSDictionary dictionaryWithContentsOfFile:path];
        NSLog(@"\n %@",[localisationDict objectForKey:@"hello"]);
    }
    
    0 讨论(0)
  • 2021-02-08 10:39
        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"];
    

    I think it will be helpful to you.

    0 讨论(0)
  • 2021-02-08 10:45

    Here the your code

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

    The problem here is the 2nd Param "strFilePath", change it to @"Labels" so the above code would become,

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

    For reference, the following line copied from Apple Docs regarding table name, "When specifying a value for this parameter, include the filename without the .strings extension."

    hope this helps.

    0 讨论(0)
提交回复
热议问题