Локализация CFBundleDisplayName не работает, что бы я ни пытался - PullRequest
2 голосов
/ 08 декабря 2010

Может кто-нибудь дать мне представление, как найти проблему. У меня есть приложение под названием «MyApp». Я хотел бы локализовать название приложения на немецкий язык. У меня есть каталог de.lproj в главной директории проекта. Он содержит файл Localizable.strings и отлично работает. Я добавил файл InfoPlist.strings и добавил туда:

CFBundleDisplayName = "Applikationsname";

Но оно не отображает переведенное имя, оно остается в «MyApp». Вот что я попробовал до сих пор:

  • Тройная проверка орфографии и заглавных букв
  • очистить все
  • удалить приложение с устройства и в Тренажер
  • удалить каталог пользователя в симуляторе
  • изменил английское имя приложения в MyApp-Info.plist - это работает.
  • перечитайте все, что я мог найти в Яблочная документация и много гуглят, подтверждая, что это должно работать.

Что бы я ни пытался, это имя приложения из MyApp-Info.plist. Я также регистрирую это в приложении делегат:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSArray *languages = [defaults objectForKey:@"AppleLanguages"];
NSString *currentLanguage = [languages objectAtIndex:0];
NSBundle *bundle = [NSBundle mainBundle];
NSDictionary *info = [bundle infoDictionary];
NSString *prodName = [info objectForKey:@"CFBundleDisplayName"];
NSLog(@"Product Name:%@",prodName);
NSLog(@"Current Locale: %@", [[NSLocale currentLocale] localeIdentifier]);
NSLog(@"Current language: %@", currentLanguage);

Вывод:

2010-12-08 12:51:00.886 MyApp[25148:207] Product Name:MyApp
2010-12-08 12:51:00.946 MyApp[25148:207] Current Locale: de_DE
2010-12-08 12:51:00.946 MyApp[25148:207] Current language: de

То есть языковые настройки верны, но приложение не будет читать файл InfoPlist.strings? Есть идеи как продолжить отсюда?

Заранее спасибо за любой ответ.

Ответы [ 3 ]

4 голосов
/ 30 ноября 2016

В моем случае мой проект Xcode имел только локализации для:

  • Английский (Язык разработки)
  • Японский

(и "Использовать базовую интернационализацию" проверено)

... но мой файл InfoPlist.strings имел только локализации для:

  • Base
  • Японский

Как только я добавил английскую версию файла, он начал работать. До этого значок приложения отображал имя цели (название продукта) независимо от того, что я пробовал.

Я предполагал, что по умолчанию используется «Base» (т. Е. «Все языки не поддерживаются явно»), но кажется, что реальное поведение более сложное ...

Надеюсь, это кому-нибудь поможет.

1 голос
/ 05 декабря 2011

Я решил эту проблему сегодня.Вы должны использовать NSBundle -localizedInfoDictionary метод для получения словаря, поэтому вы можете получить локализованную строку для CFBundleDislplayName

1 голос
/ 08 декабря 2010

Хорошо, похоже, наконец-то работает.Я думаю, что создал InfoPlist.strings неправильно: выбрав файл строк на вкладке Ресурсы и указав de.lproj в качестве папки назначения.

После удаления файла и создания нового в корневом каталоге проектасоздание локализуемых версий сделало свое дело.Если кто-то наткнулся на это, учтите, что вам также необходимо отредактировать соответствующий файл в en.lproj.

...