patch suggested by Dan Scott to simplify the in-database translation logic
authormiker <miker@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Mon, 3 Dec 2007 19:19:19 +0000 (19:19 +0000)
committermiker <miker@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Mon, 3 Dec 2007 19:19:19 +0000 (19:19 +0000)
git-svn-id: svn://svn.open-ils.org/ILS/trunk@8130 dcc99617-32d9-48b4-a31d-7c20da2025e4

Open-ILS/src/c-apps/oils_cstore.c
Open-ILS/src/sql/Pg/002.functions.config.sql

index 11d2c91..8c5dc65 100644 (file)
@@ -1809,7 +1809,7 @@ static char* SELECT (
                            char* pkey = osrfHashGet(idlClass, "primarykey");
                            char* tname = osrfHashGet(idlClass, "tablename");
 
-                           buffer_fadd(select_buf, " COALESCE( oils_i18n_xlate('%s.%s', \"%s\".%s::TEXT, '%s'), \"%s\".%s ) AS %s", tname, __column, cname, pkey, locale, cname, __column, __column);
+                           buffer_fadd(select_buf, " oils_i18n_xlate('%s.%s', \"%s\".%s::TEXT, '%s') AS \"%s\"", tname, __column, 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, " COALESCE( oils_i18n_xlate('%s.%s', \"%s\".%s::TEXT, '%s'), \"%s\".%s ) AS \"%s\"", tname, fname, cname, pkey, locale, cname, fname, __alias);
+                               buffer_fadd(select_buf, " oils_i18n_xlate('%s.%s', \"%s\".%s::TEXT, '%s') AS \"%s\"", tname, fname, 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, " COALESCE( oils_i18n_xlate('%s.%s', \"%s\".%s::TEXT, '%s'), \"%s\".%s ) AS %s", tname, fname, cname, pkey, locale, cname, fname, fname);
+                           buffer_fadd(select_buf, " oils_i18n_xlate('%s.%s', \"%s\".%s::TEXT, '%s') AS \"%s\"", tname, fname, cname, pkey, locale, fname);
                 } else {
                                buffer_fadd(select_buf, " \"%s\".%s", cname, fname);
                 }
index 777f483..95ad2ac 100644 (file)
@@ -47,12 +47,14 @@ DECLARE
     result      config.i18n_core%ROWTYPE;
 BEGIN
 
+    -- Try the full locale
     SELECT  * INTO result
       FROM  config.i18n_core
       WHERE fq_field = keyfield
             AND identity_value = keyvalue
             AND translation = locale;
 
+    -- Try just the language
     IF NOT FOUND THEN
         SELECT  * INTO result
           FROM  config.i18n_core
@@ -61,10 +63,19 @@ BEGIN
                 AND translation = language;
     END IF;
 
+    -- Fall back to the string we passed in in the first place
+    IF NOT FOUND THEN
+        RETURN keyvalue;
+    END IF;
+
     RETURN result.string;
 END;
 $func$ LANGUAGE PLPGSQL;
 
+-- Function for marking translatable strings in SQL statements
+CREATE OR REPLACE FUNCTION oils_i18n_gettext( TEXT ) RETURNS TEXT AS $$
+    SELECT $1;
+$$ LANGUAGE SQL;
 
 COMMIT;