4

ローカライズ可能な値を持つ属性を持つコアデータのエンティティを作成したい場合、最も効率的な方法がどのように見えるか疑問に思っていますか?コアデータエンティティのローカライズ可能な属性値のモデルですか?

例としてのは、次のような構造を想定してみましょう:

Book 
    name (localizable) 
    description (localizable) 
    author 

ローカライズ帳エントリは次のようになります。SQL/SQLiteの実装では

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" 

を、私は2つのテーブルを使用します。ブック情報(作成者、英語/国際的な名前と説明)と対応する本の主キーを使用して関連するローカライゼーションブックテーブルを含むテーブルの書籍テーブル。この2番目の表には、ローカライズされた名前と説明の値、およびlanguageCodeが含まれています。これにより、拡張可能な数のローカリゼーションが可能になります。私は与えられた言語コードの実際の値を取得するために

SELECT COALESCE(localizationBooks.name, books.name) 

を使用することになり、データをフェッチする

。これにより、サポートされていない言語の代替として国際的な英語の値を使用することができます。

これには、書籍と関係のあるコアデータ(BookLocalizationなど)とは別のエンティティが必要ですか、これを行う別の推奨方法がありますか?

答えて

0

まあ、この話題が3歳であるにもかかわらず...私はちょうど私の自己に元のポスターと同じように尋ねた。私は答えがある別のスレッドを見つけました。

他の誰かがこのスレッド(ゴードン・ヒューズからの回答を)ヒットの場合には、私はちょうどここでそれを繰り返すだろう:

Good practices for multiple language data in Core Data

要約すると: を、あなたがエンティティブックを持っているとしましょう。次に、たとえばLocalizedbookという追加のものを作成する必要があります。書籍には「title」という属性があり、LocalizedBookには「en_US」などの国際的な文字列には「localizedTitle」と「locale」があります。

タイトル - >ローカライズされたタイトル(1つのオリジナルタイトルが複数の翻訳を持つことができるため、1対多の関係)を設定する必要があります。

したがって、「タイトル」を取得するたびに、関係が正しく設定されていると特定のロケールに「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 

あなたも、さらに一歩それを取るだけのプロパティを追加することができます適切なローカライズされた値をフェッチするBooksエンティティ上のlocalizedName,localizedDescriptionエンティティのようになります。

関連する問題