Абстрагирование строк в target-c (iPhone) - PullRequest
7 голосов
/ 10 мая 2011

Я работаю над приложением для iphone, и мне интересно, как правильно абстрагировать строки. Я привык создавать файл с постоянными строками и ссылаться на них в своем приложении (например, URL-адреса, номера портов или даже метки кнопок). Мне интересно, считается ли это хорошей практикой в ​​Obj-C, и если да, то какой лучший способ это сделать? Должен ли я сделать класс со строками? Или использовать файл ".strings"?

p.s Я могу локализовать свое приложение позже. Я не изучал, как это сделать, но я полагаю, что абстрагирование моих строк - хорошая идея, пока я развиваюсь.

Спасибо! MGA

1 Ответ

5 голосов
/ 10 мая 2011

обычно вы взаимодействуете с NSBundle. Вы используете строку для чтения локализованной версии строки (которая загружается из файла локализованных строк).

есть также некоторые макросы, которые некоторые люди используют для облегчения синтаксиса, с префиксом NSLocalizedString. NSLocalizedString реализации используют NSBundle.

imo, вы должны использовать строковые константы, чтобы идентифицировать локализованную строку, которую вы читаете (как вы должны делать со словарями и ключами объекта).

Вы можете объявить свои константы, используя эту форму (предполагается, что objc):

extern NSString* const MONAppString_Download;

и определите так:

NSString* const MONAppString_Download = @"Download";

затем получите к нему доступ:

NSString * tableName = nil; // << using the default
NSString * localized =
  [[NSBundle mainBundle]
    localizedStringForKey:MONAppString_Download
     value:MONAppString_Download // << return the string using the default localization if not found
      table:tableName];

иногда это помогает создавать функции-обертки для уменьшения шума, особенно когда вы используете их во многих местах:

// @return what's set to the above variable named  'localized'.
NSString * MONLocalized_Download();

затем вы настраиваете свои строковые файлы как карту, по одному для каждой локализации, которую вы поддерживаете.

поэтому, когда вам нужно прочитать строку, которая видна пользователю, вы используете вышеуказанную форму. Также учтите, что существуют другие ресурсы для локализации (перья, изображения, PDF и т. д.), которые вы можете связать с вашим приложением. большая часть работы здесь также абстрагирована NSBundle из CFBundle, если вы предпочитаете.

удачи

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...