Je dois saisir du texte i18n à partir d'une base de données. La langue par défaut est l'anglais, il a le texte pour tout. Mais les langues non-anglais n'ont pas nécessairement toutes les traductions désirées. Si une traduction non-anglaise pour une certaine entité/clé n'est pas disponible dans la base de données, alors je voudrais l'avoir pour renvoyer le texte anglais à la place. Donc, l'anglais est le langue de secours ici.Récupération de données i18n avec un langage de repli
Le tableau texte i18n ressemble donc (dialecte PostgreSQL):
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)
)
Les données ressemblent à ceci:
INSERT INTO translation
(language_code, key, value)
VALUES
('en', 'foo', 'foo in English'),
('nl', 'foo', 'foo in Nederlands (Dutch)'),
('en', 'bar', 'bar in English')
Je voudrais essentiellement faire le ci-dessous pseudo requête SQL:
SELECT key, value
FROM translation
WHERE (language_code = 'nl' OR IF value IS NULL THEN language_code = 'en')
(en fait, la valeur 'nl'
doit être paramétrée)
Alors qu'il renvoie les éléments suivants:
+-----+---------------------------+ | key | value | +-----+---------------------------+ | foo | foo in Nederlands (Dutch) | | bar | bar in English | +-----+---------------------------+
Comment puis-je obtenir cela dans une seule requête SQL?
La base de données en question est PostgreSQL, mais une méthode agnostique RDMBS serait bien.
Works dans oracle aussi. Merci! –