From d62343a699117a23721cea474567c3a33a17db14 Mon Sep 17 00:00:00 2001 From: Katarzyna Kwiatkowska <kkwiatkowska@pl.sii.eu> Date: Tue, 4 Jul 2017 01:12:01 +0200 Subject: [PATCH] 16465: Plural forms handling added to buildUpLang function; minor fixes and improvements --- .gitignore | 3 + js/dss/dss-components/dss-action-selector.js | 6 +- .../dss-components/dss-condition-selector.js | 6 +- js/dss/dss-datamodel.js | 107 +++++++++++------- 4 files changed, 73 insertions(+), 49 deletions(-) diff --git a/.gitignore b/.gitignore index aea2b7dc..c64a0449 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,6 @@ thumbs.db .DS_Store /.project + +responsive-ui/node_modules/* +responsive-ui/bower_components/* diff --git a/js/dss/dss-components/dss-action-selector.js b/js/dss/dss-components/dss-action-selector.js index 7843c971..06ef3583 100644 --- a/js/dss/dss-components/dss-action-selector.js +++ b/js/dss/dss-components/dss-action-selector.js @@ -1591,10 +1591,8 @@ Ext.define('DSS.component.ActionConfigurator', { }, listeners : { datachanged : function(store, eOpts) { - if (store.getCount()==1) - me.lblSelectorAnzeige.setText(Ext.String.format2(_('{count} activity'), {count:''+store.getCount()}), false); - else - me.lblSelectorAnzeige.setText(Ext.String.format2(_('{count} activites'), {count:''+store.getCount()}), false); + var ct = store.getCount(); + me.lblSelectorAnzeige.setText(Ext.String.format2(_('{count} activity', '{count} activites', ct), { count: '' + ct }), false); } } }); diff --git a/js/dss/dss-components/dss-condition-selector.js b/js/dss/dss-components/dss-condition-selector.js index db940e91..8769d74c 100644 --- a/js/dss/dss-components/dss-condition-selector.js +++ b/js/dss/dss-components/dss-condition-selector.js @@ -701,7 +701,8 @@ Ext.define('DSS.component.ConditionConfigurator', { }, listeners : { datachanged : function(store, eOpts) { - me.lblSelectorAnzeige.setText(Ext.String.format2(_('{count} condition', '{count} conditions', store.getCount()), {count:''+store.getCount()}), false); + var ct = store.getCount(); + me.lblSelectorAnzeige.setText(Ext.String.format2(_('{count} condition', '{count} conditions', ct), { count: '' + ct }), false); }, clear : function(store, eOpts) { me.lblSelectorAnzeige.setText(_('no condition'), false); @@ -3579,7 +3580,8 @@ Ext.define('DSS.component.ConditionConfigurator', { mThis.oButtonDelete.setDisabled(true); mThis.oButtonUp.setDisabled(true); mThis.oButtonDown.setDisabled(true); - mThis.lblSelectorAnzeige.setText(Ext.String.format2(_('{count} condition', '{count} conditions', view.store.getCount(), {count:''+view.store.getCount()})), false); + var ct = view.store.getCount(); + mThis.lblSelectorAnzeige.setText(Ext.String.format2(_('{count} condition', '{count} conditions', ct), { count: '' + ct }), false); } if ( mThis.macPanel.collapsed) { //mThis.oActualValue = mThis.getSelectedMainRecord(); diff --git a/js/dss/dss-datamodel.js b/js/dss/dss-datamodel.js index 502d3d35..4cbdd583 100644 --- a/js/dss/dss-datamodel.js +++ b/js/dss/dss-datamodel.js @@ -4331,13 +4331,13 @@ dss.buildUpLang = function(oLangDefinitions, languageSuffix) { */ var params = { - domain : "dss-addon-framework", - locale_data : {} + domain: 'dss-addon-framework', + locale_data: {} }; if (languageSuffix == null) { var oLang = Ext.JSON.decode(dss.ajaxSyncRequest('/json/property/query', { - query : '/system/language(locale)' + query: '/system/language(locale)' })); if (oLang != null) if (oLang.ok && (oLang.result.language[0] !== undefined)) { @@ -4346,70 +4346,91 @@ dss.buildUpLang = function(oLangDefinitions, languageSuffix) { languageSuffix = "en_US"; } } - if (languageSuffix == null) + if (languageSuffix == null) { languageSuffix = 'de_DE'; + } dss.staticDataModel.activeLanguage = languageSuffix; - if (oLangDefinitions == null) + if (oLangDefinitions == null) { oLangDefinitions = []; + } oLangDefinitions.splice(0, 0, '/framework/locale/{languageSuffix}/dss-addon-framework.po'); - locale_ = {}; - for (var lIndex = 0; lIndex < oLangDefinitions.length; lIndex++) { + for (var l = 0, langLen = oLangDefinitions.length; l < langLen; l++) { var sDomain = params.domain; - var sURL = Ext.String.format2(oLangDefinitions[lIndex], { - 'languageSuffix' : dss.staticDataModel.activeLanguage + var sURL = Ext.String.format2(oLangDefinitions[l], { + 'languageSuffix': dss.staticDataModel.activeLanguage }, false); - if (params.locale_data[sDomain] == null) + if (params.locale_data[sDomain] == null) { params.locale_data[sDomain] = {}; + } var sString = dss.ajaxSyncRequest(sURL, {}); var oArray = sString.split('\n'); + var sTempString; var iState = 0; - var sMSGID = null; var msgid; - var msgstr; + var msgidPlural; + var msgstr; // array: [ msgidPlural, msgstr, msgstrPlural, msgstrPluralN ] + var match; + var pluralIndex; function ltrim(sString) { return sString.replace(/^\s+/, ''); } - for (var iIndex = 0; iIndex < oArray.length; iIndex++) { - if (oArray[iIndex][0] == '#') { + for (var i = 0, len = oArray.length; i < len; i++) { + if (oArray[i][0] === '#') { iState = 0; - } else if (oArray[iIndex].indexOf("msgid") > -1) { + msgidPlural = null; + msgstr = []; + pluralIndex = null; + } else if (oArray[i].indexOf("msgid_plural") > -1) { + iState = 2; + msgidPlural = oArray[i].substr(oArray[i].indexOf('"') + 1); + msgidPlural = msgidPlural.substr(0, msgidPlural.lastIndexOf('"')); + } else if (oArray[i].indexOf("msgid") > -1) { iState = 1; - msgid = oArray[iIndex].substr(oArray[iIndex].indexOf('"') + 1); + msgid = oArray[i].substr(oArray[i].indexOf('"') + 1); msgid = msgid.substr(0, msgid.lastIndexOf('"')); - } else if (oArray[iIndex].indexOf("msgstr") > -1) { - if (iState == 1) { - iState = 2; - msgstr = oArray[iIndex].substr(oArray[iIndex].indexOf('"') + 1); - msgstr = msgstr.substr(0, msgstr.lastIndexOf('"')); - params.locale_data[sDomain][msgid] = [ null, msgstr ]; + } else if (iState >= 2 && oArray[i].indexOf("msgstr[") > -1) { + iState = 3; + match = oArray[i].match(/^msgstr\[(\d+)\]/g); + pluralIndex = parseInt(match[0].slice(7, -1), 10); + sTempString = oArray[i].substr(oArray[i].indexOf('"') + 1); + sTempString = sTempString.substr(0, sTempString.lastIndexOf('"')); + msgstr[0] = msgidPlural; + msgstr[pluralIndex + 1] = sTempString; + params.locale_data[sDomain][msgid] = msgstr; + } else if (oArray[i].indexOf("msgstr") > -1) { + if (iState >= 0) { + iState = 3; + pluralIndex = 0; + sTempString = oArray[i].substr(oArray[i].indexOf('"') + 1); + msgstr[0] = msgidPlural; + msgstr[pluralIndex + 1] = sTempString.substr(0, sTempString.lastIndexOf('"')); + params.locale_data[sDomain][msgid] = msgstr; } } else { - if (iState == 1) { - var sTempString = oArray[iIndex]; - sTempString = ltrim(sTempString); - if (sTempString[0] == '"') { - sTempString = sTempString.substr(1); - sTempString = sTempString.substr(0, sTempString.lastIndexOf('"')); - msgid += sTempString; - } - } - if (iState == 2) { - var sTempString = oArray[iIndex]; - sTempString = ltrim(sTempString); - if (sTempString[0] == '"') { - sTempString = sTempString.substr(1); - sTempString = sTempString.substr(0, sTempString.lastIndexOf('"')); - msgstr += sTempString; - params.locale_data[sDomain][msgid] = [ null, msgstr ]; - } else { - oState = 0; - } - } + sTempString = ltrim(oArray[i]); + if (sTempString[0] === '"') { + sTempString = sTempString.substr(1); + sTempString = sTempString.substr(0, sTempString.lastIndexOf('"')); + + if (iState === 1) { // msgid continues for more than one line + msgid += sTempString; + } else if (iState === 2) { // msgid_plural continues for more than one line + msgidPlural += sTempString; + } else if (iState === 3) { // msgstr continues for more than one line + msgstr[pluralIndex + 1] += sTempString; + params.locale_data[sDomain][msgid] = msgstr; + } + } else { + iState = 0; + msgidPlural = null; + msgstr = []; + pluralIndex = null; + } } } } -- GitLab