Translations simplified
This commit is contained in:
parent
9447df5a0f
commit
306c20b215
File diff suppressed because it is too large
Load Diff
@ -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'
|
||||||
);
|
);
|
||||||
|
|||||||
@ -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;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -247,32 +247,51 @@ 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.page_id DESC)
|
WHEN 'CZ' THEN MIN(t.value_cz) 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 'SK' THEN MIN(t.value_sk) 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 'PL' THEN MIN(t.value_pl) 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)
|
WHEN 'HU' THEN MIN(t.value_hu) KEEP (DENSE_RANK FIRST ORDER BY t.item_name DESC)
|
||||||
ELSE MIN(t.value_en) KEEP (DENSE_RANK FIRST ORDER BY t.page_id DESC) END
|
ELSE MIN(t.value_en) KEEP (DENSE_RANK FIRST ORDER BY t.item_name DESC) END
|
||||||
INTO out_value
|
INTO out_value
|
||||||
FROM translation_items t
|
FROM translated_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.page_id IN (0, COALESCE(in_page_id, app.get_page_id()))
|
AND t.item_name IN (
|
||||||
AND t.name = in_name;
|
in_name,
|
||||||
|
REGEXP_REPLACE(in_name, '^([A-Z]+)[_]', '\1' || COALESCE(in_page_id, app.get_page_id()) || '_'),
|
||||||
|
REGEXP_REPLACE(in_name, '^([A-Z]+)[_]', '\1' || '0_')
|
||||||
|
);
|
||||||
|
--
|
||||||
|
RETURN out_value;
|
||||||
EXCEPTION
|
EXCEPTION
|
||||||
WHEN NO_DATA_FOUND THEN
|
WHEN NO_DATA_FOUND THEN
|
||||||
|
RETURN NULL;
|
||||||
|
END;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
FUNCTION get_translated_message (
|
||||||
|
in_name VARCHAR2,
|
||||||
|
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
|
SELECT
|
||||||
CASE COALESCE(in_lang, app.get_user_lang(), 'EN')
|
CASE COALESCE(in_lang, app.get_user_lang(), 'EN')
|
||||||
WHEN 'CZ' THEN t.value_cz
|
WHEN 'CZ' THEN t.value_cz
|
||||||
@ -281,16 +300,13 @@ CREATE OR REPLACE PACKAGE BODY app AS
|
|||||||
WHEN 'HU' THEN t.value_hu
|
WHEN 'HU' THEN t.value_hu
|
||||||
ELSE t.value_en END
|
ELSE t.value_en END
|
||||||
INTO out_value
|
INTO out_value
|
||||||
FROM translations t
|
FROM translated_messages 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.name = in_name;
|
AND t.message = in_name;
|
||||||
END;
|
|
||||||
--
|
--
|
||||||
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
|
||||||
/*
|
/*
|
||||||
|
|||||||
@ -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;
|
||||||
|
|||||||
@ -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
|
||||||
app.log_success();
|
|
||||||
RETURN;
|
|
||||||
END IF;
|
|
||||||
--
|
|
||||||
UPDATE translation_items t
|
|
||||||
SET ROW = rec
|
SET ROW = rec
|
||||||
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;
|
|
||||||
--
|
--
|
||||||
IF SQL%ROWCOUNT = 0 THEN
|
IF SQL%ROWCOUNT = 0 THEN
|
||||||
INSERT INTO translation_items
|
INSERT INTO translated_items
|
||||||
VALUES rec;
|
VALUES rec;
|
||||||
END IF;
|
END IF;
|
||||||
|
END IF;
|
||||||
--
|
--
|
||||||
app.log_success();
|
out_item_name := rec.item_name;
|
||||||
|
--
|
||||||
|
app.log_success(v_log_id);
|
||||||
|
EXCEPTION
|
||||||
|
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;
|
||||||
|
--
|
||||||
|
out_message := rec.message;
|
||||||
|
--
|
||||||
|
app.log_success(v_log_id);
|
||||||
EXCEPTION
|
EXCEPTION
|
||||||
WHEN app.app_exception THEN
|
WHEN app.app_exception THEN
|
||||||
RAISE;
|
RAISE;
|
||||||
|
|||||||
@ -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;
|
||||||
|
|
||||||
|
|||||||
33
tables/translated_items.sql
Normal file
33
tables/translated_items.sql
Normal 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';
|
||||||
|
|
||||||
30
tables/translated_messages.sql
Normal file
30
tables/translated_messages.sql
Normal 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';
|
||||||
|
|
||||||
@ -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';
|
|
||||||
|
|
||||||
@ -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';
|
|
||||||
|
|
||||||
53
views/translated_items_overview.sql
Normal file
53
views/translated_items_overview.sql
Normal 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';
|
||||||
|
|
||||||
21
views/translated_messages_overview.sql
Normal file
21
views/translated_messages_overview.sql
Normal 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';
|
||||||
|
|
||||||
@ -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';
|
|
||||||
|
|
||||||
@ -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';
|
|
||||||
|
|
||||||
@ -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';
|
|
||||||
|
|
||||||
Loading…
x
Reference in New Issue
Block a user