4

Если я хочу создать объект в Core Data, который имеет атрибуты со значениями, которые должны быть локализуемыми, мне интересно, как будет выглядеть наиболее эффективный способ?Модель для локализуемых значений атрибутов в объекте Core Data Entity?

В качестве примера давайте рассмотрим следующую структуру:

Book 
    name (localizable) 
    description (localizable) 
    author 

локализованы запись книга будет выглядеть следующим образом:

name: "A great novel" (en/international), 
     "Ein großartiger Roman" (de), 
     "Un grand roman" (fr) 

description: 
     "Great!" (en/international), 
     "Großartig!" (de), 
     "Grand!" (fr) 

author: "John Smith" 

В реализации SQL/SQLite Я хотел бы использовать две таблицы. A books стол, содержащий информацию о книге (автор, английское/международное название и описание) и таблицу локализации , которая связана с использованием первичного ключа соответствующей книги. Эта вторая таблица содержит локализованные значения имени и описания, а также язык. Это позволит иметь масштабируемое количество локализаций.

Для извлечения данных я бы использовать

SELECT COALESCE(localizationBooks.name, books.name) 

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

Для этого требуется отдельный объект в основных данных (например, BookLocalization), который имеет отношение к Книге или есть ли другой рекомендуемый способ сделать это?

ответ

0

Ну, несмотря на то, что этой теме 3 года ... Я просто наткнулся на нее, прося себя сам так же, как оригинальный плакат. Я нашел еще один ответ с ответом.

Я просто повторить его здесь, в случае кто-то другой бьет эту тему (ответ от Gordon Hughes):

Good practices for multiple language data in Core Data

Чтобы подвести итоги: Допустим, у вас есть Entity книги. Тогда вам придется сделать дополнительный, например, Localizedbook. В книге у вас есть атрибут «title», а в LocalizedBook у вас есть «localizedTitle» и «locale» для международных строк, таких как «en_US».

Теперь вам нужно установить связь между заголовком -> localizedTitle (один для многих, поскольку одно оригинальное название может иметь несколько переводов).

Итак, каждый раз, когда вы получаете «название», вы получите «localizedTitle», заданный для определенного языка, если отношения установлены правильно.

+0

Ответы, которые содержат ссылки, считаются плохой практикой (http://meta.stackexchange.com/questions/8231/are-answers-that-just-contain-links-elsewhere-really-good-answers). Пожалуйста, суммируйте содержание здесь (не копируйте/вставляйте), поэтому ответ может стоять сам по себе. Если вы этого не сделаете, вы рискуете удалить свой ответ, особенно если связь когда-либо умирает. –

+0

Вы правы. Я добавил обобщение. –

2

Стратегия, которую вы упомянули, как правило, самая лучшая. По вашему мнению, для этого требуется дополнительный объект для локализованных свойств.

Вы можете написать вспомогательный метод на вашем Books лица, чтобы получить соответствующий объект локализации для данного языка и использовать его как это:

[book bookLocalizationForLanguage:@"de"].name 

Можно даже сделать шаг вперед и просто добавить свойства как localizedName, localizedDescription на объекте Books, который получит соответствующее локализованное значение.