12345GG
12345GG

Reputation: 3

How to access object array using javascript with variable

var dict = {
  "configMigratedTo": {
        "message": "Migrated configuration to configurator: $1"
    }
}
var parametersForTranslation = {};
function __tr(src, params) {
  parametersForTranslation[src] = params;
  return buildMessage(src);
}

function buildMessage(src){
    var message=dict[src] ? dict[src].message : src
    console.log(message);
    var messageArray = message.split("$");
    var output = "";
    messageArray.forEach(function(elem, index){
        if(index === 0){
            output += elem;
        }else{
            // get variable and index
            var paramIndex = configMigratedTo.substring(0, 1);
            var paramValue = parametersForTranslation[src][paramIndex-1];
            output += paramValue;
            output += configMigratedTo.substring(1);
        }
    });
    return output;
}
__tr("configMigratedTo", [2]);
console.log(buildMessage("configMigratedTo"));

i want get result like __tr("configMigratedTo", [2]); then it will give me

Migrated configuration to configurator: 2

i do not know where is wrong in my code

Upvotes: 1

Views: 78

Answers (3)

baao
baao

Reputation: 73251

You are overcomplicating this, it's much easier using a regex and passing a function as replacer

var dict = {
  "configMigratedTo": {
    "message": "Migrated configuration to configurator: $1"
  }
}
function __tr(src, params) {
  if (! dict[src]) return src;
  if (! /\$0/.test(dict[src].message)) params.unshift('');
  return dict[src].message.replace(/\$(\d)+/g, (orig, match) => params[match] || orig);
}

console.log(__tr("configMigratedTo", [2]));

Upvotes: 1

Cuneyt Celebican
Cuneyt Celebican

Reputation: 46

Try this one. Hope it helps!

var dict = {
  "configMigratedTo": {
        "message": "Migrated configuration to configurator: $1"
    }
}

function __tr(src, params) 
{
    for (var key in dict)
  {
    if (key === src)
    {
        var message = dict[key].message;
        return message.substring(0, message.length - 2) + params[0];
    }
  }
  return;
}


console.log(__tr("configMigratedTo", [2]))

https://jsfiddle.net/eLd9u2pq/

Upvotes: 1

Louys Patrice Bessette
Louys Patrice Bessette

Reputation: 33933

Would that be enought?

var dict = {
  "configMigratedTo": {
        "message": "Migrated configuration to configurator: "
    }
}

function buildMessage(src,param){
    var output = dict[src].message + param;
    return output;
}

console.log(buildMessage("configMigratedTo",2));

Upvotes: 1

Related Questions