Progettazione di database per memorizzare nomi di paesi e nomi di lingua localizzati

2

Sto lavorando su swift / iOS con un backend di parse.com ma questa domanda potrebbe essere applicata a qualsiasi lingua ed è una domanda concettuale generale. Userò un esempio specifico a scopo illustrativo.

Ho un tipo di contenuto, diciamo "utente" che viene salvato in un database. Ogni utente è classificato per paesi. L'app è localizzata. Qualsiasi utente deve essere in grado di filtrare gli elenchi degli utenti in base al paese. Ed ecco il problema:

Nel campo "Paesi" della tabella utente del database, ogni utente ha inserito il proprio paese da un elenco a discesa di paesi, ma questi nomi di paese sono localizzati. Quindi, per esempio, un utente americano ha scelto "Stati Uniti d'America" come il suo paese, e quella è la stringa nella tabella degli utenti "Paesi", ma un utente francese che cerca di filtrare tutti gli utenti dagli Stati Uniti, lancerà una ricerca per corrispondente "Etats-Unis d'Ameriques" localizzato che non corrisponderà agli utenti "Stati Uniti d'America".

Per evitare questo problema di categorizzazione della localizzazione, stavo pensando di astrarre i nomi dei paesi associando ognuno con un ID numerico, in una tupla o array, quindi memorizziamo nel database quell'ID. Quindi, quando mi riferisco ad esso, cercherò l'ID dell'array e farò riferimento alla stringa localizzata, un altro membro dell'array.

Questo è un modo corretto per gestire questo scenario? Immagino che ci sia un modo "giusto" per gestire questo.

    
posta Robert Brax 10.03.2015 - 11:04
fonte

2 risposte

3

Crea una tabella COUNTRY con il codice ISO di ogni paese. Una tabella LINGUA con il codice ISO di ogni lingua.

Quindi una tabella di join COUNTRY_LANGUAGE con il nome di ciascun paese in ciascuna lingua e un'altra tabella di join LANGUAGE_LANGUAGE con il nome di ciascuna lingua in ciascuna lingua.

Puoi popolare tali tabelle dagli elenchi ISO disponibili in Internet.

Gli utenti selezioneranno i paesi nelle proprie lingue, ma i join e le query saranno donde utilizzando il codice ISO.

Un PNG vale 1024 parole:

    
risposta data 01.08.2016 - 23:26
fonte
0

Un'applicazione aziendale su cui lavoro fa ciò che rende le query disordinate ma consente tutte le lingue che vuoi. Di seguito è riportata una panoramica non destinata a essere eseguita su un database conforme ANSI

Table Locale
ID number primary key  
VALUE  string: examples, English, French, German....

Table Countries
ID number primary key
Date_created
Date_last_modified
...

Table Countries_Locale
ID number part 1 of primary key, foreign key to Countries
LOCALE_ID part 2 of primary key, foreign key to Locale
VALUE string: examples United States, Les Etats Unis.....

Quindi una lista a tendina sarebbe questa query:

Select Countries_locale.VALUE, Countries_locale.ID
From Countries_locale
where Countries_locale.LOCALE_ID = 2  --all English names for countries
    
risposta data 10.03.2015 - 14:04
fonte

Leggi altre domande sui tag