簡體   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