#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 не требует, чтобы этот параметр работал, но для меня это нормально 🙂