Translations simplified

This commit is contained in:
Jan Kvetina 2022-02-15 19:50:39 +01:00
parent 9447df5a0f
commit 306c20b215
16 changed files with 731 additions and 773 deletions

File diff suppressed because it is too large Load Diff

View File

@ -20,10 +20,10 @@ wwv_flow_api.create_flow_process(
,p_process_sql_clob=>wwv_flow_string.join(wwv_flow_t_varchar2( ,p_process_sql_clob=>wwv_flow_string.join(wwv_flow_t_varchar2(
'-- load translations', '-- load translations',
'FOR c IN (', 'FOR c IN (',
' SELECT t.name, t.item_name', ' SELECT t.item_name',
' FROM translations_mapped t', ' FROM translated_items t',
') LOOP', ') LOOP',
' app.set_item(c.item_name, app.get_translation(c.name), in_raise => FALSE);', ' app.set_item(c.item_name, app.get_translated_item(c.item_name), in_raise => FALSE);',
'END LOOP;')) 'END LOOP;'))
,p_process_clob_language=>'PLSQL' ,p_process_clob_language=>'PLSQL'
); );

View File

@ -209,15 +209,27 @@ CREATE OR REPLACE PACKAGE app AS
-- --
-- Translate page item -- Translate page/app item
-- --
FUNCTION get_translation ( FUNCTION get_translated_item (
in_name translation_items.name%TYPE, in_name VARCHAR2,
in_page_id translation_items.page_id%TYPE := NULL, in_page_id navigation.page_id%TYPE := NULL,
in_app_id translation_items.app_id%TYPE := NULL, in_app_id navigation.app_id%TYPE := NULL,
in_lang users.lang_id%TYPE := NULL in_lang users.lang_id%TYPE := NULL
) )
RETURN translations.value_en%TYPE; RETURN VARCHAR2;
--
-- Translate message
--
FUNCTION get_translated_message (
in_name VARCHAR2,
in_app_id navigation.app_id%TYPE := NULL,
in_lang users.lang_id%TYPE := NULL
)
RETURN VARCHAR2;

View File

@ -247,50 +247,66 @@ CREATE OR REPLACE PACKAGE BODY app AS
FUNCTION get_translation ( FUNCTION get_translated_item (
in_name translation_items.name%TYPE, in_name VARCHAR2,
in_page_id translation_items.page_id%TYPE := NULL, in_page_id navigation.page_id%TYPE := NULL,
in_app_id translation_items.app_id%TYPE := NULL, in_app_id navigation.app_id%TYPE := NULL,
in_lang users.lang_id%TYPE := NULL in_lang users.lang_id%TYPE := NULL
) )
RETURN translations.value_en%TYPE RETURN VARCHAR2
AS AS
out_value translation_items.value_en%TYPE; out_value translated_items.value_en%TYPE;
BEGIN BEGIN
-- how often do you add new languages? -- how often do you add new languages?
BEGIN SELECT
SELECT CASE COALESCE(in_lang, app.get_user_lang(), 'EN')
CASE COALESCE(in_lang, app.get_user_lang(), 'EN') WHEN 'CZ' THEN MIN(t.value_cz) KEEP (DENSE_RANK FIRST ORDER BY t.item_name DESC)
WHEN 'CZ' THEN MIN(t.value_cz) KEEP (DENSE_RANK FIRST ORDER BY t.page_id DESC) WHEN 'SK' THEN MIN(t.value_sk) KEEP (DENSE_RANK FIRST ORDER BY t.item_name DESC)
WHEN 'SK' THEN MIN(t.value_sk) KEEP (DENSE_RANK FIRST ORDER BY t.page_id DESC) WHEN 'PL' THEN MIN(t.value_pl) KEEP (DENSE_RANK FIRST ORDER BY t.item_name DESC)
WHEN 'PL' THEN MIN(t.value_pl) KEEP (DENSE_RANK FIRST ORDER BY t.page_id DESC) WHEN 'HU' THEN MIN(t.value_hu) KEEP (DENSE_RANK FIRST ORDER BY t.item_name DESC)
WHEN 'HU' THEN MIN(t.value_hu) KEEP (DENSE_RANK FIRST ORDER BY t.page_id DESC) ELSE MIN(t.value_en) KEEP (DENSE_RANK FIRST ORDER BY t.item_name DESC) END
ELSE MIN(t.value_en) KEEP (DENSE_RANK FIRST ORDER BY t.page_id DESC) END INTO out_value
INTO out_value FROM translated_items t
FROM translation_items t WHERE t.app_id = COALESCE(in_app_id, app.get_app_id())
WHERE t.app_id = COALESCE(in_app_id, app.get_app_id()) AND t.item_name IN (
AND t.page_id IN (0, COALESCE(in_page_id, app.get_page_id())) in_name,
AND t.name = in_name; REGEXP_REPLACE(in_name, '^([A-Z]+)[_]', '\1' || COALESCE(in_page_id, app.get_page_id()) || '_'),
EXCEPTION REGEXP_REPLACE(in_name, '^([A-Z]+)[_]', '\1' || '0_')
WHEN NO_DATA_FOUND THEN );
SELECT --
CASE COALESCE(in_lang, app.get_user_lang(), 'EN') RETURN out_value;
WHEN 'CZ' THEN t.value_cz EXCEPTION
WHEN 'SK' THEN t.value_sk WHEN NO_DATA_FOUND THEN
WHEN 'PL' THEN t.value_pl RETURN NULL;
WHEN 'HU' THEN t.value_hu END;
ELSE t.value_en END
INTO out_value
FROM translations t
WHERE t.app_id = COALESCE(in_app_id, app.get_app_id()) FUNCTION get_translated_message (
AND t.name = in_name; in_name VARCHAR2,
END; in_app_id navigation.app_id%TYPE := NULL,
in_lang users.lang_id%TYPE := NULL
)
RETURN VARCHAR2
AS
out_value translated_messages.value_en%TYPE;
BEGIN
-- how often do you add new languages?
SELECT
CASE COALESCE(in_lang, app.get_user_lang(), 'EN')
WHEN 'CZ' THEN t.value_cz
WHEN 'SK' THEN t.value_sk
WHEN 'PL' THEN t.value_pl
WHEN 'HU' THEN t.value_hu
ELSE t.value_en END
INTO out_value
FROM translated_messages t
WHERE t.app_id = COALESCE(in_app_id, app.get_app_id())
AND t.message = in_name;
-- --
RETURN out_value; RETURN out_value;
EXCEPTION EXCEPTION
WHEN NO_DATA_FOUND THEN WHEN NO_DATA_FOUND THEN
-- app.log_warning() ?
-- create translation ?
RETURN NULL; RETURN NULL;
END; END;
@ -2897,7 +2913,7 @@ CREATE OR REPLACE PACKAGE BODY app AS
END IF; END IF;
-- translate message -- translate message
out_result.message := NVL(app.get_translation(out_result.message), out_result.message); out_result.message := NVL(app.get_translated_message(out_result.message), out_result.message);
-- show only the latest error message to common users -- show only the latest error message to common users
/* /*

View File

@ -365,18 +365,31 @@ CREATE OR REPLACE PACKAGE app_actions AS
-- --
-- Update translations -- Update translations
-- --
PROCEDURE save_translations_overview ( PROCEDURE save_translated_items (
in_action CHAR, in_action CHAR,
in_app_id translations_overview.app_id%TYPE, out_item_name IN OUT translated_items_overview.out_item_name%TYPE,
in_old_name translations_overview.old_name%TYPE, in_item_name translated_items_overview.item_name%TYPE,
in_old_page_id translations_overview.old_page_id%TYPE, in_value_en translated_items_overview.value_en%TYPE,
in_name translations_overview.name%TYPE, in_value_cz translated_items_overview.value_cz%TYPE,
in_page_id translations_overview.page_id%TYPE, in_value_sk translated_items_overview.value_sk%TYPE,
in_value_en translations_overview.value_en%TYPE := NULL, in_value_pl translated_items_overview.value_pl%TYPE,
in_value_cz translations_overview.value_cz%TYPE := NULL, in_value_hu translated_items_overview.value_hu%TYPE
in_value_sk translations_overview.value_sk%TYPE := NULL, );
in_value_pl translations_overview.value_pl%TYPE := NULL,
in_value_hu translations_overview.value_hu%TYPE := NULL
--
-- Update translations
--
PROCEDURE save_translated_messages (
in_action CHAR,
out_message IN OUT translated_messages_overview.out_message%TYPE,
in_message translated_messages_overview.message%TYPE,
in_value_en translated_messages_overview.value_en%TYPE,
in_value_cz translated_messages_overview.value_cz%TYPE,
in_value_sk translated_messages_overview.value_sk%TYPE,
in_value_pl translated_messages_overview.value_pl%TYPE,
in_value_hu translated_messages_overview.value_hu%TYPE
); );
END; END;

View File

@ -279,8 +279,7 @@ CREATE OR REPLACE PACKAGE BODY app_actions AS
WHEN app.app_exception THEN WHEN app.app_exception THEN
RAISE; RAISE;
WHEN OTHERS THEN WHEN OTHERS THEN
app.log_error(); app.raise_error();
RAISE;
END; END;
@ -353,8 +352,7 @@ CREATE OR REPLACE PACKAGE BODY app_actions AS
WHEN app.app_exception THEN WHEN app.app_exception THEN
RAISE; RAISE;
WHEN OTHERS THEN WHEN OTHERS THEN
app.log_error(); app.raise_error();
RAISE;
END; END;
@ -625,8 +623,7 @@ CREATE OR REPLACE PACKAGE BODY app_actions AS
WHEN app.app_exception THEN WHEN app.app_exception THEN
RAISE; RAISE;
WHEN OTHERS THEN WHEN OTHERS THEN
app.log_error(); app.raise_error();
RAISE;
END; END;
@ -1141,54 +1138,111 @@ CREATE OR REPLACE PACKAGE BODY app_actions AS
PROCEDURE save_translations_overview ( PROCEDURE save_translated_items (
in_action CHAR, in_action CHAR,
in_app_id translations_overview.app_id%TYPE, out_item_name IN OUT translated_items_overview.out_item_name%TYPE,
in_old_name translations_overview.old_name%TYPE, in_item_name translated_items_overview.item_name%TYPE,
in_old_page_id translations_overview.old_page_id%TYPE, in_value_en translated_items_overview.value_en%TYPE,
in_name translations_overview.name%TYPE, in_value_cz translated_items_overview.value_cz%TYPE,
in_page_id translations_overview.page_id%TYPE, in_value_sk translated_items_overview.value_sk%TYPE,
in_value_en translations_overview.value_en%TYPE := NULL, in_value_pl translated_items_overview.value_pl%TYPE,
in_value_cz translations_overview.value_cz%TYPE := NULL, in_value_hu translated_items_overview.value_hu%TYPE
in_value_sk translations_overview.value_sk%TYPE := NULL,
in_value_pl translations_overview.value_pl%TYPE := NULL,
in_value_hu translations_overview.value_hu%TYPE := NULL
) AS ) AS
rec translation_items%ROWTYPE; rec translated_items%ROWTYPE;
v_log_id logs.log_id%TYPE;
BEGIN BEGIN
app.log_module(in_action, in_old_page_id, in_page_id, in_old_name, in_name); v_log_id := app.log_module_json (
'action', in_action,
'old_item_name', out_item_name,
'item_name', in_item_name
);
-- --
rec.app_id := in_app_id; rec.app_id := app.get_app_id();
rec.page_id := NVL(in_page_id, 0); rec.item_name := in_item_name;
rec.name := in_name; rec.value_en := in_value_en;
rec.value_en := in_value_en; rec.value_cz := in_value_cz;
rec.value_cz := in_value_cz; rec.value_sk := in_value_sk;
rec.value_sk := in_value_sk; rec.value_pl := in_value_pl;
rec.value_pl := in_value_pl; rec.value_hu := in_value_hu;
rec.value_hu := in_value_hu; rec.updated_by := app.get_user_id();
rec.updated_at := SYSDATE;
-- --
IF in_action = 'D' THEN IF in_action = 'D' THEN
DELETE FROM translation_items t DELETE FROM translated_items t
WHERE t.app_id = in_app_id WHERE t.app_id = rec.app_id
AND t.page_id = in_old_page_id AND t.item_name = out_item_name;
AND t.name = in_old_name; ELSE
UPDATE translated_items t
SET ROW = rec
WHERE t.app_id = rec.app_id
AND t.item_name = out_item_name;
-- --
app.log_success(); IF SQL%ROWCOUNT = 0 THEN
RETURN; INSERT INTO translated_items
VALUES rec;
END IF;
END IF; END IF;
-- --
UPDATE translation_items t out_item_name := rec.item_name;
SET ROW = rec
WHERE t.app_id = in_app_id
AND t.page_id = in_old_page_id
AND t.name = in_old_name;
-- --
IF SQL%ROWCOUNT = 0 THEN app.log_success(v_log_id);
INSERT INTO translation_items EXCEPTION
VALUES rec; WHEN app.app_exception THEN
RAISE;
WHEN OTHERS THEN
app.raise_error();
END;
PROCEDURE save_translated_messages (
in_action CHAR,
out_message IN OUT translated_messages_overview.out_message%TYPE,
in_message translated_messages_overview.message%TYPE,
in_value_en translated_messages_overview.value_en%TYPE,
in_value_cz translated_messages_overview.value_cz%TYPE,
in_value_sk translated_messages_overview.value_sk%TYPE,
in_value_pl translated_messages_overview.value_pl%TYPE,
in_value_hu translated_messages_overview.value_hu%TYPE
) AS
rec translated_messages%ROWTYPE;
v_log_id logs.log_id%TYPE;
BEGIN
v_log_id := app.log_module_json (
'action', in_action,
'old_message', out_message,
'message', in_message
);
--
rec.app_id := app.get_app_id();
rec.message := in_message;
rec.value_en := in_value_en;
rec.value_cz := in_value_cz;
rec.value_sk := in_value_sk;
rec.value_pl := in_value_pl;
rec.value_hu := in_value_hu;
rec.updated_by := app.get_user_id();
rec.updated_at := SYSDATE;
--
IF in_action = 'D' THEN
DELETE FROM translated_messages t
WHERE t.app_id = rec.app_id
AND t.message = out_message;
ELSE
UPDATE translated_messages t
SET ROW = rec
WHERE t.app_id = rec.app_id
AND t.message = out_message;
--
IF SQL%ROWCOUNT = 0 THEN
INSERT INTO translated_messages
VALUES rec;
END IF;
END IF; END IF;
-- --
app.log_success(); out_message := rec.message;
--
app.log_success(v_log_id);
EXCEPTION EXCEPTION
WHEN app.app_exception THEN WHEN app.app_exception THEN
RAISE; RAISE;

View File

@ -327,8 +327,7 @@ CREATE OR REPLACE PACKAGE BODY gen AS
DBMS_OUTPUT.PUT_LINE(' WHEN app.app_exception THEN'); DBMS_OUTPUT.PUT_LINE(' WHEN app.app_exception THEN');
DBMS_OUTPUT.PUT_LINE(' RAISE;'); DBMS_OUTPUT.PUT_LINE(' RAISE;');
DBMS_OUTPUT.PUT_LINE(' WHEN OTHERS THEN'); DBMS_OUTPUT.PUT_LINE(' WHEN OTHERS THEN');
DBMS_OUTPUT.PUT_LINE(' app.log_error();'); DBMS_OUTPUT.PUT_LINE(' app.raise_error();');
DBMS_OUTPUT.PUT_LINE(' RAISE;');
DBMS_OUTPUT.PUT_LINE(' END;'); DBMS_OUTPUT.PUT_LINE(' END;');
END; END;

View File

@ -0,0 +1,33 @@
--DROP TABLE translated_items PURGE;
CREATE TABLE translated_items (
app_id NUMBER(4) CONSTRAINT nn_translated_items_app_id NOT NULL,
item_name VARCHAR2(64) CONSTRAINT nn_translated_items_name NOT NULL,
--
value_en VARCHAR2(256),
value_cz VARCHAR2(256),
value_sk VARCHAR2(256),
value_pl VARCHAR2(256),
value_hu VARCHAR2(256),
--
updated_by VARCHAR2(30),
updated_at DATE,
--
CONSTRAINT pk_translated_items
PRIMARY KEY (app_id, item_name),
--
CONSTRAINT fk_translated_items_app_id
FOREIGN KEY (app_id)
REFERENCES apps (app_id)
)
STORAGE (BUFFER_POOL KEEP);
--
COMMENT ON TABLE translated_items IS '[CORE] Translations for page/app items';
--
COMMENT ON COLUMN translated_items.app_id IS 'APEX application ID';
COMMENT ON COLUMN translated_items.item_name IS 'Item name (preferrably) to translate';
COMMENT ON COLUMN translated_items.value_en IS 'Translated value';
COMMENT ON COLUMN translated_items.value_cz IS 'Translated value';
COMMENT ON COLUMN translated_items.value_sk IS 'Translated value';
COMMENT ON COLUMN translated_items.value_pl IS 'Translated value';
COMMENT ON COLUMN translated_items.value_hu IS 'Translated value';

View File

@ -0,0 +1,30 @@
--DROP TABLE translated_messages PURGE;
CREATE TABLE translated_messages (
app_id NUMBER(4) CONSTRAINT nn_translated_messages_app_id NOT NULL,
message VARCHAR2(64) CONSTRAINT nn_translated_messages_message NOT NULL,
--
value_en VARCHAR2(256),
value_cz VARCHAR2(256),
value_sk VARCHAR2(256),
value_pl VARCHAR2(256),
value_hu VARCHAR2(256),
--
updated_by VARCHAR2(30),
updated_at DATE,
--
CONSTRAINT pk_translated_messages
PRIMARY KEY (app_id, message)
)
STORAGE (BUFFER_POOL KEEP);
--
COMMENT ON TABLE translated_messages IS '[CORE] List of translated messages/notifications';
--
COMMENT ON COLUMN translated_messages.app_id IS 'APEX application ID';
COMMENT ON COLUMN translated_messages.message IS 'Message to translate';
--
COMMENT ON COLUMN translated_messages.value_en IS 'Translated value';
COMMENT ON COLUMN translated_messages.value_cz IS 'Translated value';
COMMENT ON COLUMN translated_messages.value_sk IS 'Translated value';
COMMENT ON COLUMN translated_messages.value_pl IS 'Translated value';
COMMENT ON COLUMN translated_messages.value_hu IS 'Translated value';

View File

@ -1,36 +0,0 @@
--DROP TABLE translation_items PURGE;
CREATE TABLE translation_items (
app_id NUMBER(4) CONSTRAINT nn_translation_items_app_id NOT NULL,
page_id NUMBER(6) CONSTRAINT nn_translation_items_page_id NOT NULL,
name VARCHAR2(64) CONSTRAINT nn_translation_items_name NOT NULL,
--
value_en VARCHAR2(256),
value_cz VARCHAR2(256),
value_sk VARCHAR2(256),
value_pl VARCHAR2(256),
value_hu VARCHAR2(256),
--
updated_by VARCHAR2(30),
updated_at DATE,
--
CONSTRAINT pk_translation_items
PRIMARY KEY (app_id, page_id, name),
--
CONSTRAINT fk_translation_items_page_id
FOREIGN KEY (app_id, page_id)
REFERENCES navigation (app_id, page_id)
)
STORAGE (BUFFER_POOL KEEP);
--
COMMENT ON TABLE translation_items IS '[CORE] List of translation_items';
--
COMMENT ON COLUMN translation_items.app_id IS 'APEX application ID';
COMMENT ON COLUMN translation_items.page_id IS 'APEX page ID, 0 for fallback, otherwise priority on page';
COMMENT ON COLUMN translation_items.name IS 'Item name (preferrably) to translate';
--
COMMENT ON COLUMN translation_items.value_en IS 'Translated value';
COMMENT ON COLUMN translation_items.value_cz IS 'Translated value';
COMMENT ON COLUMN translation_items.value_sk IS 'Translated value';
COMMENT ON COLUMN translation_items.value_pl IS 'Translated value';
COMMENT ON COLUMN translation_items.value_hu IS 'Translated value';

View File

@ -1,30 +0,0 @@
--DROP TABLE translations PURGE;
CREATE TABLE translations (
app_id NUMBER(4) CONSTRAINT nn_translations_app_id NOT NULL,
name VARCHAR2(64) CONSTRAINT nn_translations_name NOT NULL,
--
value_en VARCHAR2(256),
value_cz VARCHAR2(256),
value_sk VARCHAR2(256),
value_pl VARCHAR2(256),
value_hu VARCHAR2(256),
--
updated_by VARCHAR2(30),
updated_at DATE,
--
CONSTRAINT pk_translations
PRIMARY KEY (app_id, name)
)
STORAGE (BUFFER_POOL KEEP);
--
COMMENT ON TABLE translations IS '[CORE] List of translations';
--
COMMENT ON COLUMN translations.app_id IS 'APEX application ID';
COMMENT ON COLUMN translations.name IS 'Message to translate';
--
COMMENT ON COLUMN translations.value_en IS 'Translated value';
COMMENT ON COLUMN translations.value_cz IS 'Translated value';
COMMENT ON COLUMN translations.value_sk IS 'Translated value';
COMMENT ON COLUMN translations.value_pl IS 'Translated value';
COMMENT ON COLUMN translations.value_hu IS 'Translated value';

View File

@ -0,0 +1,53 @@
CREATE OR REPLACE VIEW translated_items_overview AS
WITH x AS (
SELECT /*+ MATERIALIZE */
app.get_app_id() AS app_id,
app.get_translation_prefix() AS item_prefix
FROM DUAL
),
t AS (
SELECT t.*
FROM translated_items t
JOIN x
ON x.app_id = t.app_id
),
p AS (
SELECT t.item_name
FROM t
JOIN apex_application_page_items i
ON i.application_id = t.app_id
AND i.page_id = TO_NUMBER(REGEXP_SUBSTR(t.item_name, '\d+'))
AND i.item_name = t.item_name
),
a AS (
SELECT t.item_name
FROM t
JOIN apex_application_items a
ON a.application_id = t.app_id
AND a.item_name = t.item_name
)
SELECT
t.item_name AS out_item_name,
t.item_name,
--
CASE SUBSTR(t.item_name, 1, 1)
WHEN 'H' THEN 'HEADER'
WHEN 'B' THEN 'BUTTON'
WHEN 'C' THEN 'COLUMN'
WHEN 'L' THEN 'LABEL'
END AS item_type,
--
CASE WHEN p.item_name IS NOT NULL THEN 'Y' END AS is_page_item,
CASE WHEN a.item_name IS NOT NULL THEN 'Y' END AS is_app_item,
--
t.value_en,
t.value_cz,
t.value_sk,
t.value_pl,
t.value_hu
FROM t
LEFT JOIN p ON p.item_name = t.item_name
LEFT JOIN a ON a.item_name = t.item_name;
--
COMMENT ON TABLE translated_items_overview IS '[CORE - DASHBOARD] Use page/app items to translate application';

View File

@ -0,0 +1,21 @@
CREATE OR REPLACE VIEW translated_messages_overview AS
WITH x AS (
SELECT /*+ MATERIALIZE */
app.get_app_id() AS app_id
FROM DUAL
)
SELECT
t.message AS out_message,
t.message,
--
t.value_en,
t.value_cz,
t.value_sk,
t.value_pl,
t.value_hu
FROM translated_messages t
JOIN x
ON x.app_id = t.app_id;
--
COMMENT ON TABLE translated_messages_overview IS '[CORE - DASHBOARD] Translate messages/notifications';

View File

@ -1,35 +0,0 @@
CREATE OR REPLACE VIEW translations_mapped AS
WITH x AS (
SELECT /*+ MATERIALIZE */
app.get_app_id() AS app_id,
app.get_page_id() AS page_id,
app.get_user_lang() AS lang_id,
app.get_translation_prefix() AS item_prefix
FROM DUAL
)
SELECT t.name, i.item_name
FROM translation_items t
JOIN x
ON x.app_id = t.app_id
AND x.page_id IN (0, x.page_id)
JOIN apex_application_page_items i
ON i.application_id = x.app_id
AND i.page_id = x.page_id
AND (
(i.page_id > 0 AND i.item_name = x.item_prefix || i.page_id || '_' || t.name)
OR (i.page_id = 0 AND i.item_name = x.item_prefix || '_' || t.name)
)
GROUP BY t.name, i.item_name
UNION
--
SELECT t.name, i.item_name
FROM translation_items t
JOIN x
ON x.app_id = t.app_id
JOIN apex_application_items i
ON i.application_id = t.app_id
AND i.item_name = x.item_prefix || '_' || t.name
GROUP BY t.name, i.item_name;
--
COMMENT ON TABLE translations_mapped IS '[CORE - DASHBOARD] Translations for startup process';

View File

@ -1,22 +0,0 @@
CREATE OR REPLACE VIEW translations_notifications AS
WITH x AS (
SELECT /*+ MATERIALIZE */
app.get_app_id() AS app_id
FROM DUAL
)
SELECT
t.app_id,
t.name,
t.name AS name_old,
--
t.value_en,
t.value_cz,
t.value_sk,
t.value_pl,
t.value_hu
FROM translations t
JOIN x
ON x.app_id = t.app_id;
--
COMMENT ON TABLE translations_notifications IS '[CORE - DASHBOARD] Translate messages/notifications';

View File

@ -1,109 +0,0 @@
CREATE OR REPLACE VIEW translations_overview AS
WITH x AS (
SELECT /*+ MATERIALIZE */
app.get_app_id() AS app_id,
app.get_translation_prefix() AS item_prefix
FROM DUAL
),
m AS (
SELECT
t.app_id,
t.page_id,
t.name,
--
NVL(i.item_name, a.item_name) AS item_name,
--
t.value_en,
t.value_cz,
t.value_sk,
t.value_pl,
t.value_hu,
--
t.name AS old_name,
t.page_id AS old_page_id
FROM translation_items t
JOIN x
ON x.app_id = t.app_id
LEFT JOIN apex_application_page_items i
ON i.application_id = t.app_id
AND i.page_id = t.page_id
AND (
(i.page_id > 0 AND i.item_name = x.item_prefix || i.page_id || '_' || t.name)
OR (i.page_id = 0 AND i.item_name = x.item_prefix || '_' || t.name)
)
LEFT JOIN apex_application_items a
ON a.application_id = t.app_id
AND a.item_name = x.item_prefix || '_' || t.name
AND i.item_name IS NULL
)
SELECT
m.app_id,
m.page_id,
m.name,
m.item_name,
--
m.value_en,
m.value_cz,
m.value_sk,
m.value_pl,
m.value_hu,
--
m.old_name,
m.old_page_id
FROM m
UNION ALL
--
SELECT
i.application_id,
i.page_id,
--
REGEXP_REPLACE(i.item_name, '^' || x.item_prefix || '\d*_', '') AS name,
i.item_name,
--
NULL, -- 5 languages
NULL,
NULL,
NULL,
NULL,
--
REGEXP_REPLACE(i.item_name, '^' || x.item_prefix || '\d*_', '') AS old_name,
i.page_id AS old_page_id
FROM apex_application_page_items i
JOIN x
ON x.app_id = i.application_id
AND i.item_name LIKE x.item_prefix || i.page_id || '%'
LEFT JOIN m
ON m.app_id = i.application_id
AND m.page_id = i.page_id
AND m.item_name = i.item_name
WHERE m.name IS NULL
AND i.item_name NOT LIKE x.item_prefix || '0\_%' ESCAPE '\'
UNION ALL
--
SELECT
i.application_id,
0 AS page_id,
--
REGEXP_REPLACE(i.item_name, '^' || x.item_prefix || '\d*_', '') AS name,
i.item_name,
--
NULL, -- 5 languages
NULL,
NULL,
NULL,
NULL,
--
REGEXP_REPLACE(i.item_name, '^' || x.item_prefix || '\d*_', '') AS old_name,
0 AS old_page_id
FROM apex_application_items i
JOIN x
ON x.app_id = i.application_id
AND i.item_name LIKE x.item_prefix || '\_%' ESCAPE '\'
LEFT JOIN m
ON m.app_id = i.application_id
AND m.page_id = 0
AND m.item_name = i.item_name
WHERE m.name IS NULL;
--
COMMENT ON TABLE translations_overview IS '[CORE - DASHBOARD] Use page/app items to translate application';