Swift не возвращает локализованную версию для URLResourceKey.localizedNameKey

#swift

#swift

Вопрос:

Я в Италии, и следующий код должен вернуть локализованное имя для Preview.app, но оно возвращает Preview.app

 let url = URL(fileURLWithPath:"/Applications/Preview.app")
let v = try! url.resourceValues(forKeys: [.localizedNameKey])
print(v.localizedName!)
  

Я проверил возвращенный язык, и он правильный

 let language = NSLocale.preferredLanguages[0]
print(language)
  

Версия Objective-C работает нормально и возвращает Anteprima итальянскую локализацию для /Applications/Preview.app

 NSString* displayName = nil;
NSURL* u = [NSURL fileURLWithPath:@"/Applications/Preview.app"];
[u getResourceValue:amp;displayName forKey:NSURLLocalizedNameKey error:nil];
NSLog(@"%@", displayName);
  

Где ошибка?

Комментарии:

1. Просто чтобы сгустить сюжет, попробуйте использовать just "/Applications/" . Я получаю правильную Applicazioni .

2. Если я запускаю голый проект Mac OS X в Xcode 8 / Swift 3 и устанавливаю для «Localization native development region» значение «it», это работает. Если я использую вместо этого: UserDefaults.standard.set(["it"], forKey: "AppleLanguages") он не работает, даже если NSLocale.preferredLanguages[0] возвращает it . То CFBundleDevelopmentRegion же самое делает нечто большее, чем AppleBundle.

Ответ №1:

Код в порядке.

Держу пари, у вас есть отдельный проект Swift, и вы просто забыли установить CFBundleLocalizations Info.plist :

 <key>CFBundleLocalizations</key>
<array>
  <string>en</string>
  <string>it</string>
</array>
  

Все, что не входит в этот массив, не будет работать должным образом.

Комментарии:

1. Спасибо, это работает!! Я не понимаю, почему проект Objective-C не требует, чтобы этот параметр работал, но для меня это нормально 🙂