Лучшие практики для хранения строк в одном месте - PullRequest
0 голосов
/ 27 мая 2019

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

Я пытался использовать struct, чтобы сохранить мои строки раньше, но мне интересно, если это хорошая практика. Использование Localizable.strings также будет хорошо работать с библиотекой R.swift, еще одна причина, по которой я пытаюсь выбрать стратегию.

1 Ответ

1 голос
/ 27 мая 2019

В этом случае нет «наилучшей практики». Есть практики, и некоторые могут быть немного более подходящими для вашего случая, чем другие.

Вы говорите, что не планируете добавлять поддержку других языков, но кажется, что вы хотите быть готовым к этому, если передумаете. Итак, прежде всего, спросите себя, какова реальная проблема, решение которой вы ищете. Я бы сказал, что проблема заключается в накладных расходах, которые вы получаете, когда приложение уже вышло, и вам нужно найти все строки, которые вы использовали в своем приложении, и обернуть их в NSLocalizedString. Обычно это включает в себя бесконечное тестирование, и вы все равно, в конце концов, скорее всего забудете локализовать хотя бы несколько строк.

Вы можете с самого начала начать упаковывать вещи в NSLocalizedString, что в итоге поможет вам извлечь все строки, используя встроенные инструменты из вашего кода. Проблема тогда - все еще Раскадровки; не столько извлечение строк из раскадровки, сколько удаление тех текстов по умолчанию, которые вы не планируете переводить (например, «Имя» на самом деле будет некоторым именем и не должно переводиться) Так что по моему опыту это половина решения.

Для решения проблемы раскадровки должен быть инструмент (я не могу вспомнить, какой, может быть, какой-то другой CocoaPod), который позволяет игнорировать представления, которые не следует переводить. Так что в этом случае вам нужно использовать 2 вещи; NSLocalizedString и игнорирование непереводимых предметов в IB.

Как вы уже сказали, вы можете использовать R.Swift для получения строк непосредственно из файла strings. Это очень аккуратно, но и отвлекает по мере вашего развития. При этом вы заставляете разработчика сначала ввести текст в файл strings, прежде чем он сможет его использовать. Лично я ненавижу это. Также это может быть проблемой, когда несколько разработчиков находятся в конфликте. Не говоря уже о том, что это почти не устранило вашу проблему с раскадровками.

Создание отдельной системы структур для хранения всех строк работает довольно хорошо. Вам не нужно выискивать все строки в вашем коде, и вам не нужно переходить к файлу strings (переход к другому источнику гораздо приятнее при разработке, поскольку вы можете легко переходить к нему). Вы также сохраняете хорошую структуру, предполагая, что вы поддерживаете ее как label.text = Strings.Settings.User.firstNamePlaceholder, которая помогает вам легко находить нужные вам строки или устаревшие. Вы можете удалить целые экраны с большой легкостью. Но это все еще непроизводительно для разработчика, и у вас все еще есть проблема, связанная с тем, что теперь вам нужно перетянуть все выходы из раскадровки, чтобы установить для них локализованные строки.

Выполнив эту процедуру, вы можете в итоге выбрать NSLocalizedString напрямую или R.Swift. На самом деле вы можете просто ничего не использовать, и у вас по-прежнему не будет много сверхурочных переключений на любое из двух (опять же, при условии, что поиск этих строк в коде занимает большую часть времени).

Лично я бы вообще ничего не делал или занимался бы созданием системы пользовательских структур, которая затем ничего не использует, а просто возвращает необработанные строки. Но все это на самом деле зависит от того, какого размера ваш проект, какого типа проект, сколько вещей находится в раскадровке ... Это также зависит от того, когда вы ожидаете, что у вас будет больше ресурсов, поэтому вы либо тратите больше времени сейчас и не беспокойтесь позже, или вы просто делаете это проще всего, теперь готовьтесь к большой работе, когда локализация действительно необходима (надеюсь, когда это произойдет, это одна из "сладких" проблем, потому что это означает, что у вас есть тонны пользователей).

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