Devo prendere il testo i18n da un database. La lingua predefinita è l'inglese, ha il testo per tutto. Ma le lingue non inglesi non hanno necessariamente tutte le traduzioni desiderate. Se una traduzione non inglese per una determinata entità/chiave non è disponibile nel DB, mi piacerebbe averlo per restituire il testo inglese invece. Quindi, l'inglese è la lingua di riserva di riserva qui.Recupero dei dati i18n con linguaggio di fallback
La tabella di testo i18n sembrare così (PostgreSQL in dialetto):
CREATE TABLE translation (
id SERIAL PRIMARY KEY,
language_code CHAR(2) NOT NULL,
key VARCHAR(20) NOT NULL,
value TEXT NOT NULL,
CONSTRAINT translation_unique UNIQUE (language_code, key)
)
I dati simile a questa:
INSERT INTO translation
(language_code, key, value)
VALUES
('en', 'foo', 'foo in English'),
('nl', 'foo', 'foo in Nederlands (Dutch)'),
('en', 'bar', 'bar in English')
Mi piacerebbe fare fondamentalmente la sottostante query SQL pseudo:
SELECT key, value
FROM translation
WHERE (language_code = 'nl' OR IF value IS NULL THEN language_code = 'en')
(in realtà, il valore 'nl'
deve essere parametrizzato)
in modo che restituisca il seguente:
+-----+---------------------------+ | key | value | +-----+---------------------------+ | foo | foo in Nederlands (Dutch) | | bar | bar in English | +-----+---------------------------+
Come posso raggiungere questo obiettivo in una singola query SQL?
Il DB in questione è PostgreSQL, ma un modo agnostico RDMBS sarebbe bello.
Lavori in Oracle troppo. Grazie! –