4

Wenn ich eine Entität in Core Data erstellen möchte, die Attribute mit Werten hat, die lokalisierbar sein sollten, frage ich mich, wie der effizienteste Weg aussehen würde?Modell für lokalisierbare Attributwerte in Core Data Entity?

Als Beispiel wollen wir die folgende Struktur annehmen:

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" 

In einer SQL/SQLite Implementierung ich zwei Tabellen verwenden würde:

Book 
    name (localizable) 
    description (localizable) 
    author 

Eine lokalisierte Bucheintrag würde wie folgt aussehen. A Bücher Tabelle mit den Buchinformationen (Autor, der englische/internationale Name und Beschreibung) und locationBooks Tabelle, die mit dem Primärschlüssel des entsprechenden Buches verwandt ist. Diese zweite Tabelle enthält die lokalisierten Namen und Beschreibungen sowie den Sprachcode. Dies würde eine skalierbare Anzahl von Lokalisierungen ermöglichen.

Für das Abrufen von Daten würde ich ein

SELECT COALESCE(localizationBooks.name, books.name) 

verwenden, um die tatsächlichen Werte für den jeweiligen Sprachcode zu erhalten. Dies ermöglicht die Verwendung des internationalen englischen Werts als Fallback für nicht unterstützte Sprachen.

Benötigt dies eine separate Entität in Core Data (z. B. BookLocalization), die eine Beziehung zum Buch hat, oder gibt es eine andere empfohlene Vorgehensweise?

Antwort

0

Naja, trotzdem ist dieses Thema 3 Jahre alt ... Ich bin gerade darüber gestolpert und habe mich genauso gefragt wie das Originalplakat. Ich habe einen anderen Thread mit einer Antwort gefunden.

Ich werde es nur wiederholen hier, wenn jemand trifft sonst diesen Thread (Antwort von Gordon Hughes):

Good practices for multiple language data in Core Data

zusammenfassen zu: Angenommen, Sie Entity Bücher haben. Dann müssen Sie eine weitere hinzufügen, zum Beispiel Localizedbook. In Büchern haben Sie das Attribut "title" und in LocalizedBook haben Sie "localizedTitle" und "locale" für internationale Strings wie "en_US".

Sie müssen nun die Beziehung zwischen title -> localizedTitle (eins zu viele, da ein Originaltitel mehrere Übersetzungen haben kann).

Also, jedes Mal, wenn Sie "title" holen erhalten Sie das "lokalisierteTitel" gegeben zu einem bestimmten Gebietsschema, wenn die Beziehungen richtig eingestellt sind.

+0

Antworten, die nur Links enthalten, gelten als [schlechte Praxis] (http://meta.stackexchange.com/questions/8231/are-answers-that-just-contain-links-elsewhere-really- good-answers). Bitte fassen Sie den Inhalt hier zusammen (nicht kopieren/einfügen), damit die Antwort für sich alleine stehen kann. Wenn Sie nicht Gefahr laufen, dass Ihre Antwort entfernt wird, besonders wenn die Verbindung jemals stirbt. –

+0

Sie haben Recht. Ich habe die Zusammenfassung hinzugefügt. –

2

Die Strategie, die Sie erwähnen, ist normalerweise die beste. Wie Sie vorschlagen, erfordert dies eine zusätzliche Entität für die lokalisierten Eigenschaften.

Sie können dann eine Hilfsmethode auf Ihre Books Entität schreiben das entsprechende Lokalisierung Objekt für eine bestimmte Sprache zu erhalten und es wie folgt verwenden:

[book bookLocalizationForLanguage:@"de"].name 

Man könnte es sogar noch einen Schritt weiter und nur Eigenschaften hinzufügen wie localizedName, localizedDescription auf der Books Einheit, die den entsprechenden lokalisierten Wert abrufen wird.