Модель для локализуемых значений атрибутов в Core Data Entity?

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

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

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 я бы использовал две таблицы. Таблица books, содержащая информацию о книге (автор, английское / международное название и описание), и таблица localizationBooks, связанная с использованием первичного ключа соответствующей книги. Эта вторая таблица содержит локализованные значения имени и описания, а также languageCode. Это позволило бы иметь масштабируемое количество локализаций.

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

SELECT COALESCE(localizationBooks.name, books.name)

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

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


person ck.    schedule 15.08.2009    source источник


Ответы (2)


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

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

[book bookLocalizationForLanguage:@"de"].name

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

person Mike Weller    schedule 31.05.2012

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

Я просто повторю это здесь, на случай, если кто-то еще попадет в эту ветку (ответ Гордона Хьюза):

Передовые методы работы с данными на нескольких языках в Core Data

Подводя итог: допустим, у вас есть Entity Books. Затем вам нужно будет создать еще один, например, Localizedbook. В Книгах у вас есть атрибут «title», а в LocalizedBook у вас есть «localizedTitle» и «locale» для международных строк, таких как «en_US».

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

Таким образом, каждый раз, когда вы выбираете "title", вы будете получать "localizedTitle", присвоенный определенному языку, если отношения установлены правильно.

person Andreas Fischer    schedule 31.05.2012