Не удается получить локализованные строки из файла Localizable.strings

Я не могу получить правильные локализованные немецкие строки из файла Localizable.strings. Мои настройки приложения выглядят так

  • Main.storyboard

    • Main.storyboard (Base)
    • Main.strings (немецкий) -> эти строки переведены правильно
  • Localizable.strings

    • Localizable.strings (English)
    • Localizable.strings (немецкий) -> не могу получить эти строки

Внутри приложения я пытаюсь получить такую ​​строку

NSString *item = NSLocalizedString(@"Group expenses", @"Menu item");

Файл Localizable.strings (немецкий) выглядит так

/* Menu item */
"Group expenses" = "Gruppenausgaben";

Когда я устанавливаю точку останова после item, я всегда получаю обратно английскую строку, однако путь к ресурсу кажется правильным NSString *path = [[NSBundle mainBundle] pathForResource:[[NSLocale preferredLanguages] objectAtIndex:0] ofType:@"lproj"]; дает мне: /data/Containers/Bundle/Application/5E3ED6BF-71E1-4C60-9EDA-610C9A32B8EF/MyApp.app/de.lproj

Я также локализовал строковый файл

введите описание изображения здесь

введите описание изображения здесь

Он также включен в Ресурсы Copy Bundle

введите описание изображения здесь

Я попробовал несколько ответов на разные вопросы здесь, в stackoverflow, например, удалить приложение и выполнить чистку (shift + cmd + k), установив язык приложения в Edit Scheme, ...


person gpichler    schedule 17.08.2015    source источник
comment
не могли бы вы поделиться исходным кодом? Если вы не можете поделиться исходным приложением, можете ли вы попробовать создать новое фиктивное приложение, которое будет содержать идентичные настройки локализации и которое также не будет работать должным образом? Преимущество этого (в дополнение к тому, что другие пользователи могут тестировать ваш код) заключается в том, что вы можете определить причину, по которой он не работает самостоятельно.   -  person Andriy Gordiychuk    schedule 19.08.2015
comment
проверьте мой ответ. У вас неправильное имя для файла Localisable.strings   -  person Andriy Gordiychuk    schedule 19.08.2015


Ответы (3)


Хорошо, я думаю, что знаю причину твоей ошибки. У Parse возникла проблема с добавлением Localizable.strings, как описано здесь. Это было исправлено в версии 1.8.1 их фреймворка:

V1.8.1 - 19 АВГУСТА 2015

...

Исправлено: перезаписываемые локализации при использовании через CocoaPods и интеграции в качестве статической библиотеки.

...

Вы также можете проверить этот вопрос.

Итак, просто убедитесь, что вы используете последнюю версию фреймворка, и все должно работать :)

person Andriy Gordiychuk    schedule 19.08.2015
comment
@ user1463853 Ага, я думал, что это возможно. Однако вам следует изменить пример проекта так, чтобы он имитировал те же условия, что и исходный, и по-прежнему вызывал ошибку. Когда вы это сделаете, вы либо сами обнаружите ошибку, либо другие смогут вам помочь. На данный момент кажется, что все ДОЛЖНО работать, поэтому предложить решение чрезвычайно сложно. - person Andriy Gordiychuk; 19.08.2015
comment
@ user1463853 Я обновил свой ответ другим предложением. И это то, что Localisable.string может не входить в ваши этапы сборки - person Andriy Gordiychuk; 19.08.2015
comment
@ user1463853 становится все интереснее. Что если поменять локализацию на английскую? Например, Групповые расходы = Групповые расходы2. Это так работает? Кроме того, почему у вас есть 3 файла, локализованные на английский язык и только 2 на немецкий (это на вашем скриншоте)? - person Andriy Gordiychuk; 19.08.2015
comment
@ user1463853 Давайте продолжим обсуждение в чате. - person Andriy Gordiychuk; 19.08.2015

Раньше я сталкивался с такой же проблемой, вы можете попробовать какой-нибудь подход:

  • Убедитесь, что вы установили немецкий язык в качестве системного языка устройства iOS.

  • Запустите это приложение в Xcode и остановитесь. Запустите приложение с устройства iOS вручную. (При первом запуске с Xcode будет использоваться базовый язык, я не знаю почему)

  • Посмотрите, работает ли это

person zy.liu    schedule 17.08.2015
comment
К сожалению, все тот же - person gpichler; 17.08.2015

Просто была похожая проблема, ломала мне голову, выполните поиск в файле xx.strings. У меня была старая копия кровавого файла, которая меня испортила.

find ./ -name "xx.strings" -print

дважды проверьте правильность вашего строкового файла

plutil -lint  xx.strings
person becker    schedule 01.06.2020