A
A friend of mine told me he use DeepL translation service for his translations. So naturally I implemented it into my app. Here is how I did it.
You have to create account on DeepL, free account is enough, at least for me. Then you need to get your auth key and use it in code below.
FUNCTION get_live_translation (
in_text VARCHAR2,
in_lang VARCHAR2
)
RETURN VARCHAR2
AS
l_secret CONSTANT VARCHAR2(64) := 'YOUR_AUTH_KEY';
--
r VARCHAR2(4000);
BEGIN
r := APEX_WEB_SERVICE.MAKE_REST_REQUEST (
p_url => 'https://api-free.deepl.com/v2/translate?auth_key=' || l_secret || '&'
|| 'text=' || UTL_URL.ESCAPE(in_text) || '&'
|| 'target_lang=' || in_lang || '&'
|| 'source_lang=' || 'EN',
p_http_method => 'GET'
);
RETURN JSON_VALUE(JSON_QUERY(r, '$.translations[0]' RETURNING VARCHAR2(4000) PRETTY), '$.text');
END;
Lets check the before and after Auto translate button was pressed:
That's it. Simple yet powerful.
You should check short sentences (specially single words) to make sure the meaning is what you intended.
And you might need to setup ACL:
DECLARE
in_schema VARCHAR2(30) := USER;
--
PROCEDURE create_acl (
in_acl_name VARCHAR2,
in_url VARCHAR2,
in_port_lower NUMBER := NULL,
in_port_upper NUMBER := NULL
)
AS
BEGIN
BEGIN
DBMS_NETWORK_ACL_ADMIN.DROP_ACL(in_acl_name || '.xml');
EXCEPTION
WHEN OTHERS THEN
NULL;
END;
--
DBMS_NETWORK_ACL_ADMIN.CREATE_ACL (
acl => in_acl_name || '.xml',
description => '',
principal => in_schema,
is_grant => true,
privilege => 'connect'
);
--
DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL (
acl => in_acl_name || '.xml',
host => in_url,
lower_port => in_port_lower,
upper_port => in_port_upper
);
END;
BEGIN
create_acl('DEEPL', 'api-free.deepl.com', NULL, NULL);
END;
/
Comments
Post a Comment