Как доставить многоязычный FAQ в приложении? - PullRequest
1 голос
/ 12 августа 2011

Я хочу отправить свое приложение со встроенным FAQ на странице настроек.FAQ прост:

1) У нас есть табличное представление, в котором перечислены все вопросы.Один на ячейку.

2) Когда пользователь нажимает на один из этих вопросов, мы перемещаемся к контроллеру подробного представления, который показывает вопрос жирным шрифтом, а затем ответ.Очень просто.

Сложная часть: Каков оптимальный способ снабдить контроллер представления таблицы и представления подробностями строками?

Плохие идеи (с моей точки зрения):

  • Жестко закодируйте все строки и работайте с гигантскими if или switch монстрами.

  • Положитесь на NSLocalizedString(), чтобы получить локализованную версиюответ.Эти файлы строк не выглядят так, как будто они предназначены для очень больших строк.Просто для нескольких предложений или слов в строке.С тоннами текста часто задаваемых вопросов эти строковые файлы стали бы ужасающими.

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

Решение 1)

  • Создайте файл JSON, в котором сущности имеют три поля: ID, Вопрос и Ответ.ID поможет нам отследить, какой ответ мы должны загрузить после того, как пользователь коснулся ячейки.

  • Локализовать этот файл JSON.

  • Когдазагружается табличное представление, считывается в память и анализируется, просто чтобы прочитать вопросы и идентификаторы (да, не идеально, верно?)

  • Когда пользователь касается ячейки, либопередайте идентификатор только для повторного извлечения всего, или, может быть, лучше: передайте строки идентификатора, вопроса и ответа в контроллер представления сведений.

Решение 2)

Как 1, но вместо этого используйте Core Data.Вероятно, лучше для памяти и производительности, но, вероятно, труднее поддерживать (нужно возиться с файлом SQLite3 для построения FAQ, нужна по крайней мере хорошая IDE, чтобы не сойти с ума).Предостережение: Нельзя легко передать это переводчикам.Тонны ручной работы только для создания этого файла SQLite3.Файлы, локализованные в папках локализации.

Решение 4)

Два разделенных файла JSON: один со всеми идентификаторами и вопросами.Другой со всеми идентификаторами и ответами.Файлы, локализованные в папках локализации.

Решение 5)

Файл JSON со всеми идентификаторами и вопросами.Для каждого идентификатора есть соответствующий текстовый файл ответа.Таким образом, мы не заканчиваем тем, что загружаем тонны данных в память только для того, чтобы извлечь небольшую их часть.

Решение 6)

Использовать то, что уже существует, илидругой подход.Предложения?

1 Ответ

2 голосов
/ 12 августа 2011

Обычно вы бы локализовали localizedStrings -файл, чтобы они могли переводиться при запуске NSLocalizedString. Возможно, вы не знаете, что это в основном работает для всех типов файлов, поэтому plist s также:

  1. Создать локализованный файл faq plist.
  2. Запрос (из приложения) с [NSArray arrayWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"faq" ofType:@"plist"]];
  3. Реализуйте это в своем UITableView. (- (NSInteger)numberOf... => return [faq count];).

О, и я использую plist -файл вместо JSON или XML, поскольку Apple его использует, поскольку его действительно легко реализовать (встроен NSArray - arrayWithContentsOfFile), и вы можете легко поддерживать его в Xcode. *

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