From 0fd5d896f221d393551beebaed2f5730aa800cd5 Mon Sep 17 00:00:00 2001 From: miker Date: Thu, 6 Dec 2007 22:11:22 +0000 Subject: [PATCH] fixing i18n infrastructure in the DB git-svn-id: svn://svn.open-ils.org/ILS/trunk@8164 dcc99617-32d9-48b4-a31d-7c20da2025e4 --- Open-ILS/src/c-apps/oils_cstore.c | 6 +++--- Open-ILS/src/sql/Pg/002.functions.config.sql | 12 ++++++++++-- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/Open-ILS/src/c-apps/oils_cstore.c b/Open-ILS/src/c-apps/oils_cstore.c index 8c5dc65de5..ac33abbd51 100644 --- a/Open-ILS/src/c-apps/oils_cstore.c +++ b/Open-ILS/src/c-apps/oils_cstore.c @@ -1809,7 +1809,7 @@ static char* SELECT ( char* pkey = osrfHashGet(idlClass, "primarykey"); char* tname = osrfHashGet(idlClass, "tablename"); - buffer_fadd(select_buf, " oils_i18n_xlate('%s.%s', \"%s\".%s::TEXT, '%s') AS \"%s\"", tname, __column, cname, pkey, locale, __column); + buffer_fadd(select_buf, " oils_i18n_xlate('%s', '%s', '%s', \"%s\".%s::TEXT, '%s') AS \"%s\"", tname, __column, pkey, cname, pkey, locale, __column); } else { buffer_fadd(select_buf, " \"%s\".%s AS \"%s\"", cname, __column, __column); } @@ -1853,7 +1853,7 @@ static char* SELECT ( char* pkey = osrfHashGet(idlClass, "primarykey"); char* tname = osrfHashGet(idlClass, "tablename"); - buffer_fadd(select_buf, " oils_i18n_xlate('%s.%s', \"%s\".%s::TEXT, '%s') AS \"%s\"", tname, fname, cname, pkey, locale, __alias); + buffer_fadd(select_buf, " oils_i18n_xlate('%s', '%s', '%s', \"%s\".%s::TEXT, '%s') AS \"%s\"", tname, fname, pkey, cname, pkey, locale, __alias); } else { buffer_fadd(select_buf, " \"%s\".%s AS \"%s\"", cname, fname, __alias); } @@ -2214,7 +2214,7 @@ static char* buildSELECT ( jsonObject* search_hash, jsonObject* order_hash, osrf char* pkey = osrfHashGet(idlClass, "primarykey"); char* tname = osrfHashGet(idlClass, "tablename"); - buffer_fadd(select_buf, " oils_i18n_xlate('%s.%s', \"%s\".%s::TEXT, '%s') AS \"%s\"", tname, fname, cname, pkey, locale, fname); + buffer_fadd(select_buf, " oils_i18n_xlate('%s', '%s', '%s', \"%s\".%s::TEXT, '%s') AS \"%s\"", tname, fname, pkey, cname, pkey, locale, fname); } else { buffer_fadd(select_buf, " \"%s\".%s", cname, fname); } diff --git a/Open-ILS/src/sql/Pg/002.functions.config.sql b/Open-ILS/src/sql/Pg/002.functions.config.sql index 95ad2ac56e..d13a4f56e7 100644 --- a/Open-ILS/src/sql/Pg/002.functions.config.sql +++ b/Open-ILS/src/sql/Pg/002.functions.config.sql @@ -40,11 +40,13 @@ $_$ LANGUAGE SQL; */ -CREATE OR REPLACE FUNCTION oils_i18n_xlate ( keyfield TEXT, keyvalue TEXT, raw_locale TEXT ) RETURNS TEXT AS $func$ +CREATE OR REPLACE FUNCTION oils_i18n_xlate ( keytable TEXT, keycol TEXT, identcol TEXT, keyvalue TEXT, raw_locale TEXT ) RETURNS TEXT AS $func$ DECLARE locale TEXT := LOWER( REGEXP_REPLACE( REGEXP_REPLACE( raw_locale, E'[;, ].+$', '' ), E'-', '_', 'g' ) ); language TEXT := REGEXP_REPLACE( locale, E'_.+$', '' ); result config.i18n_core%ROWTYPE; + fallback TEXT; + keyfield TEXT := keytable || '.' || keycol; BEGIN -- Try the full locale @@ -65,7 +67,13 @@ BEGIN -- Fall back to the string we passed in in the first place IF NOT FOUND THEN - RETURN keyvalue; + EXECUTE + 'SELECT ' || + keycol || + ' FROM ' || keytable || + ' WHERE ' || identcol || ' = ' || quote_literal(keyvalue) + INTO fallback; + RETURN fallback; END IF; RETURN result.string; -- 2.43.2