Локализуемые.строки, скомпилированные дважды?

#iphone #cocoa #ios #xcode4

#iPhone #cocoa #iOS #xcode4

Вопрос:

когда я переключаюсь с xcode3 на xode4, я обнаружил, что для нескольких строк в приложении мне приходится компилировать его дважды, чтобы сделать его локализованным … У кого-нибудь когда-нибудь была такая же проблема?

Ответ №1:

Я видел, как это происходило, когда на файл strings дважды ссылались на этапе сборки «Ресурсы». Xcode не предупредит вас, когда это произойдет, и это может вызвать странное или неопределенное поведение. Просмотрите все этапы сборки и убедитесь, что файл находится только в одном месте.

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

1. На мой файл localizable.strings есть ссылка только один раз, но другой файл localizable.strings из фреймворка sharekit, который есть у меня в проекте, также содержит файл localizable.strings. Не удается их удалить

2. Вы могли бы попробовать переименовать один из файлов Localizable.strings во что-то другое.

Ответ №2:

Если у вас, как и у меня, есть два локализуемых файла.strings (поскольку вы используете некоторые дополнительные фреймворки (например, ShareKit), которые сами используют файлы Localizable.strings), то вы также можете выполнить следующее:

  1. Переименуйте дополнительные Localizable.strings файлы в sth. как RenamedFile.strings чтобы в итоге был <= 1 файл Localizable.strings.

  2. Найдите и замените все вхождения NSLocalizedString(key, description);
    связано с переименованным файлом.строки с
    NSLocalizedStringFromTable(key, @"RenamedFile", description);

Пример:
Допустим, у вас есть
(A) ваш собственный файл Localizable.strings
(B) и файл Localizable.strings, потому что вы используете ShareKit, который также имеет собственные локализации.

  1. Переименовать Localizable.strings ShareKit в ShareKit.strings
    (при использовании Git и Xcode 4 у меня возникли некоторые проблемы с переименованием файлов, но это было решаемо).

  2. Найдите все вхождения NSLocalizedString в папке ShareKit (должно быть 3) и замените их:

    • NSLocalizedString(key, key);
      -> NSLocalizedStringFromTable(key, @"ShareKit", key);
    • NSLocalizedString(@"Disconnect from Facebook", @"Accessibility label");
      -> NSLocalizedStringFromTable(@"Disconnect from Facebook", @"ShareKit", @"Accessibility label");
    • NSLocalizedString(@"Connect to Facebook", @"Accessibility label");
      -> NSLocalizedStringFromTable(@"Connect to Facebook", @"ShareKit", @"Accessibility label");