繁体   English   中英

如何将本地化的plist读取为Dictionary?

[英]How to read a localized plist as Dictionary?

我如何阅读本地化的plist作为字典? 感觉很有希望...

if let path = NSBundle.mainBundle().pathForResource("LocalizedDictionary", ofType: "plist", inDirectory: ???, forLocalization: "en") {
        localizedDictionary = NSDictionary(contentsOfFile: path)
        return localizedDictionary
}

但显然我在为inDirectory参数获取正确路径时遇到了问题。 这是正确的方法吗?

如何将plist文件的本地化版本作为Dictionary?

注意:我没有使用NSLocalizedString,因为在应用程序运行时遇到了一些问题,没有切换语言。

这应该有所帮助。

像这样创建一个NSDictionary类扩展。 可以对其进行调整并适应您的需要(例如加载“字符串”字典,或在参数中传递语言环境……)

@implementation NSDictionary (NSDictionary_Extras)

+(NSDictionary*)dictionaryWithName:(NSString*)name
{
    NSDictionary    *dict = NULL;
    NSURL           *dictURL = [[NSBundle mainBundle] URLForResource:name withExtension:@"plist"];

    if (dictURL) {
        dict = [NSDictionary dictionaryWithContentsOfURL:dictURL];
    }

    return dict;
}

+(NSDictionary*)localizedDictionaryWithName:(NSString*)name
{
    NSDictionary    *localizedDict = NULL;
    NSString        *localizationName = [[NSLocale preferredLanguages] objectAtIndex:0];
    NSURL           *localizedDictURL = [[NSBundle mainBundle] URLForResource:name withExtension:@"plist" subdirectory:[NSString stringWithFormat:@"%@.lproj",localizationName]];
    // If resource doe not exist, we try at root ( resource must have a 'base' localization, or not being localized )
    if (!localizedDictURL) {
        localizedDictURL = [[NSBundle mainBundle] URLForResource:name withExtension:@"plist"];
    }

    if (localizedDictURL) {
        localizedDict = [NSDictionary dictionaryWithContentsOfURL:localizedDictURL];
    } 

    return localizedDict;
}

@end

然后,您只需使用以下命令加载plist:

NSDictionary* myDict = [NSDictionary dictionaryWithName:@"myDict"]

或一个本地化的plist

NSDictionary* myDict = [NSDictionary localizedDictionaryWithName:@"myDict"].

我在所有项目中都导入了此额外内容。

您无需更改任何代码。

xCode的资源本地化很整洁,并且经常对您完全透明。 您只需要向主捆绑包索取正常的资源网址,然后从它们中加载即可。 NSBundle执行为您提供本地化资源所需的任何映射。

有一个教程在这里让我去说。 它有点过时了,但是重要的细节都没有改变。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM