如何将本地化的plist作为字典阅读?这感觉很有希望......
if let path = NSBundle.mainBundle().pathForResource("LocalizedDictionary", ofType: "plist", inDirectory: ???, forLocalization: "en") {
localizedDictionary = NSDictionary(contentsOfFile: path)
return localizedDictionary
}
但是我显然遇到了 inDirectory 参数的正确路径问题。这是正确的做法吗?
如何将plist文件的本地化版本作为Dictionary?
注意:我没有使用NSLocalizedString,因为我在应用程序运行时没有切换语言时出现问题。
答案 0 :(得分:0)
这里应该有所帮助。
像这样创建一个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"]
或带
的本地化plistNSDictionary* myDict = [NSDictionary localizedDictionaryWithName:@"myDict"].
我在所有项目中导入了这个额外的内容。
答案 1 :(得分:0)
您无需更改任何代码。
xCode的资源本地化很整洁,对您来说经常是完全透明的。您只需要将主数据包的资源URL视为正常并从中加载。 NSBundle
执行为您提供本地化资源所需的任何映射。
有一个教程here让我走了。它有点过时了,但重要的细节都没有改变。