Nano Hash - криптовалюты, майнинг, программирование

Абстрагирование строк в Objective-C (iPhone)

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

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

Спасибо! МГА


Ответы:


1

обычно вы взаимодействуете с 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();

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

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

удачи

10.05.2011
  • Я обнаружил, что ‹сильная›локализация не увеличила доход‹/сильная›. Это бесполезный ответ, поэтому вот что я сделал для локализации: в итоге я написал собственные программы на Java, чтобы делать следующие вещи: 1. Исправить строки без окружения макроса NSLocalizedString 2. Запустить программу, которая сканирует ваш исходный код на наличие NSLocalizedString и выдает файл .strings 3. Извлеките строки пользовательского интерфейса из файлов XIB и добавьте их в файл .strings 5. Запустите другую программу, чтобы перезаписать файлы XIB на основе перевода .strings 10.05.2011
  • очень круто. очень сложно добавить локализацию постфактум, это бы очень помогло. 10.05.2011
  • Спасибо - Джастин, как вы используете локализацию XIB, если вообще используете? Был ли какой-то инструмент, который я пропустил, или у переводчиков должен быть интерфейсный конструктор? 10.05.2011
  • лично я большую часть времени строю представления программно. в Xc3: 1) создайте XIB 2) выберите его в Groups and Files 3) Get Info/cmd+I 4) нажмите Make File Localizable — это переместит xib в локализованный каталог и создаст метассылку для ресурса. 5) щелкните ссылку на метаресурс и выберите «Получить информацию». 6) «Общие» -> «Добавить локализацию». это создает новый XIB (да, это более или менее реализация копирования и вставки). (продолжение) 10.05.2011
  • обычным способом передачи строк переводчикам является предоставление им файлов строк. как только вы настроите перья, вы можете использовать ibtool для экспорта/импорта локализованных строковых файлов. в этом случае им не понадобится IB или ibtool. 10.05.2011
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..