From fedd5ba9fc4e8a76b2b4e4226b0febde810810ee Mon Sep 17 00:00:00 2001 From: Alexey Melnichuk Date: Mon, 30 Nov 2015 10:22:55 +0300 Subject: [PATCH] Add. Text class to manage translate texts. --- .../scripts/app/voicemail/app_languages.lua | 3 +- .../resources/functions/send_email.lua | 13 ++-- .../scripts/resources/functions/text.lua | 71 +++++++++++++++++++ 3 files changed, 78 insertions(+), 9 deletions(-) create mode 100644 resources/install/scripts/resources/functions/text.lua diff --git a/resources/install/scripts/app/voicemail/app_languages.lua b/resources/install/scripts/app/voicemail/app_languages.lua index 0c2daed73b..57dc356a16 100644 --- a/resources/install/scripts/app/voicemail/app_languages.lua +++ b/resources/install/scripts/app/voicemail/app_languages.lua @@ -1,4 +1,4 @@ -text = {}; +text = text or {}; text['label-download'] = {}; text['label-download']['en-us'] = "Download"; @@ -24,3 +24,4 @@ text['label-attached']['fr-fr'] = "Attaché"; text['label-attached']['de-de'] = "im Anhang"; text['label-attached']['de-at'] = "im Anhang"; +return text \ No newline at end of file diff --git a/resources/install/scripts/app/voicemail/resources/functions/send_email.lua b/resources/install/scripts/app/voicemail/resources/functions/send_email.lua index 0cb437c19e..0480f8c9dd 100644 --- a/resources/install/scripts/app/voicemail/resources/functions/send_email.lua +++ b/resources/install/scripts/app/voicemail/resources/functions/send_email.lua @@ -25,10 +25,6 @@ local send_mail = require 'resources.functions.send_mail' - local function T(str) - return text[str][default_language..'-'..default_dialect] or text[str]['en-us'] - end - --define a function to send email function send_email(id, uuid) --get voicemail message details @@ -58,7 +54,8 @@ --require the email address to send the email if (string.len(voicemail_mail_to) > 2) then --include languages file - require "app.voicemail.app_languages"; + local Text = require "resources.functions.text" + local text = Text.new("app.voicemail.app_languages") --get voicemail message details sql = [[SELECT * FROM v_voicemail_messages @@ -142,11 +139,11 @@ body = body:gsub("${sip_to_user}", id); body = body:gsub("${dialed_user}", id); if (voicemail_file == "attach") then - body = body:gsub("${message}", T'label-attached'); + body = body:gsub("${message}", text['label-attached']); elseif (voicemail_file == "link") then - body = body:gsub("${message}", ""..T'label-download'..""); + body = body:gsub("${message}", ""..text['label-download']..""); else - body = body:gsub("${message}", ""..T'label-listen'..""); + body = body:gsub("${message}", ""..text['label-listen']..""); end body = body:gsub(" ", " "); body = body:gsub("%s+", ""); diff --git a/resources/install/scripts/resources/functions/text.lua b/resources/install/scripts/resources/functions/text.lua new file mode 100644 index 0000000000..11bf0933a2 --- /dev/null +++ b/resources/install/scripts/resources/functions/text.lua @@ -0,0 +1,71 @@ +--- +-- @tparam table dict Dictionary +-- @tparam[opt='en'] string language default language +-- @tparam[opt='us'] string dialect default language +-- @return[1] nil if key is unknown +-- @return[2] empty string if language/dialect unknown or there no appropriate value for default language/dialect +-- @return[3] translated value accordint dictionary/language/dialect +-- +-- @usage +-- local dict = { +-- ['label-text'] = { +-- ['en-us'] = 'text'; +-- ['ru-ru'] = 'текст'; +-- } +-- } +-- local text = Text.new(dict) +-- -- use global `default_language` and `default_dialect` to resolve language +-- var = text['label-attached'] +-- -- use prefix form +-- var = text'label-attached' +-- -- Implicit specify language +-- var = text('label-attached', 'ru', 'ru') +-- -- set global variables(you can set them even after ctor call) +-- default_language, default_dialect = 'ru', 'ru' +-- var = text['label-attached'] +local function make_text(dict, language, dialect) + if not (language and dialect) then + language, dialect = 'en', 'us' + end + + if type(dict) == 'string' then + dict = require(dict) + end + + local default = (language .. '-' .. dialect):lower() + + local function index(_, k) + local t = dict[k] + if not t then return end + + local lang + if default_language and default_dialect then + lang = (default_language .. '-' .. default_dialect):lower() + end + if not lang then lang = default end + return t[lang] or t[default] or '' + end + + local function call(self, k, language, dialect) + if language and dialect then + local t = dict[k] + if not t then return end + local lang = (language .. '-' .. dialect):lower() + local v = t[lang] + if v then return v end + end + return self[k] + end + + return setmetatable({},{ + __newindex = function() + error('Can not add field to proxy') + end; + __index = index; + __call = call; + }) +end + +return { + new = make_text; +} \ No newline at end of file