mirror of
https://github.com/node-red/node-red.git
synced 2023-10-10 13:36:53 +02:00
Updated editor ui NLS strings
This commit is contained in:
parent
0017074d38
commit
4a318553f7
@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
|
|
||||||
RED.clipboard = (function() {
|
RED.clipboard = (function() {
|
||||||
|
// TODO: Fix issue where text outside an inner function cannot be NLS-enabled since RED._ is not available yet when that code is run
|
||||||
var dialog = $('<div id="clipboard-dialog" class="hide"><form class="dialog-form form-horizontal"></form></div>')
|
var dialog = $('<div id="clipboard-dialog" class="hide"><form class="dialog-form form-horizontal"></form></div>')
|
||||||
.appendTo("body")
|
.appendTo("body")
|
||||||
.dialog({
|
.dialog({
|
||||||
@ -27,7 +27,7 @@ RED.clipboard = (function() {
|
|||||||
buttons: [
|
buttons: [
|
||||||
{
|
{
|
||||||
id: "clipboard-dialog-ok",
|
id: "clipboard-dialog-ok",
|
||||||
text: "Ok",
|
text: "Ok", //RED._("dialog.ok"),
|
||||||
click: function() {
|
click: function() {
|
||||||
if (/Import/.test(dialog.dialog("option","title"))) {
|
if (/Import/.test(dialog.dialog("option","title"))) {
|
||||||
RED.view.importNodes($("#clipboard-import").val());
|
RED.view.importNodes($("#clipboard-import").val());
|
||||||
@ -37,14 +37,14 @@ RED.clipboard = (function() {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: "clipboard-dialog-cancel",
|
id: "clipboard-dialog-cancel",
|
||||||
text: "Cancel",
|
text: "Cancel", //RED._("dialog.cancel"),
|
||||||
click: function() {
|
click: function() {
|
||||||
$( this ).dialog( "close" );
|
$( this ).dialog( "close" );
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: "clipboard-dialog-close",
|
id: "clipboard-dialog-close",
|
||||||
text: "Close",
|
text: "Close", //RED._("dialog.close"),
|
||||||
click: function() {
|
click: function() {
|
||||||
$( this ).dialog( "close" );
|
$( this ).dialog( "close" );
|
||||||
}
|
}
|
||||||
@ -62,15 +62,16 @@ RED.clipboard = (function() {
|
|||||||
var dialogContainer = dialog.children(".dialog-form");
|
var dialogContainer = dialog.children(".dialog-form");
|
||||||
|
|
||||||
var exportNodesDialog = '<div class="form-row">'+
|
var exportNodesDialog = '<div class="form-row">'+
|
||||||
'<label for="node-input-export" style="display: block; width:100%;"><i class="fa fa-clipboard"></i> Nodes:</label>'+
|
'<label for="node-input-export" style="display: block; width:100%;"><i class="fa fa-clipboard"></i>'+'Nodes:' /*RED._("dialog.nodes")*/+'</label>'+
|
||||||
'<textarea readonly style="resize: none; width: 100%; border-radius: 0px;font-family: monospace; font-size: 12px; background:#eee; padding-left: 0.5em; box-sizing:border-box;" id="clipboard-export" rows="5"></textarea>'+
|
'<textarea readonly style="resize: none; width: 100%; border-radius: 0px;font-family: monospace; font-size: 12px; background:#eee; padding-left: 0.5em; box-sizing:border-box;" id="clipboard-export" rows="5"></textarea>'+
|
||||||
'</div>'+
|
'</div>'+
|
||||||
'<div class="form-tips">'+
|
'<div class="form-tips">'+
|
||||||
'Select the text above and copy to the clipboard with Ctrl-C.'+
|
'Select the text above and copy to the clipboard with Ctrl-C.'+
|
||||||
|
//RED._("dialog.selectToCopy")+
|
||||||
'</div>';
|
'</div>';
|
||||||
|
|
||||||
var importNodesDialog = '<div class="form-row">'+
|
var importNodesDialog = '<div class="form-row">'+
|
||||||
'<textarea style="resize: none; width: 100%; border-radius: 0px;font-family: monospace; font-size: 12px; background:#eee; padding-left: 0.5em; box-sizing:border-box;" id="clipboard-import" rows="5" placeholder="Paste nodes here"></textarea>'+
|
'<textarea style="resize: none; width: 100%; border-radius: 0px;font-family: monospace; font-size: 12px; background:#eee; padding-left: 0.5em; box-sizing:border-box;" id="clipboard-import" rows="5" placeholder="'+'Paste nodes here' /*RED._("dialog.pasteNodesHere")*/+'"></textarea>'+
|
||||||
'</div>';
|
'</div>';
|
||||||
|
|
||||||
function validateImport() {
|
function validateImport() {
|
||||||
@ -98,7 +99,7 @@ RED.clipboard = (function() {
|
|||||||
$("#clipboard-import").keyup(validateImport);
|
$("#clipboard-import").keyup(validateImport);
|
||||||
$("#clipboard-import").on('paste',function() { setTimeout(validateImport,10)});
|
$("#clipboard-import").on('paste',function() { setTimeout(validateImport,10)});
|
||||||
|
|
||||||
dialog.dialog("option","title","Import nodes").dialog("open");
|
dialog.dialog("option","title",RED._("dialog.importNodes")).dialog("open");
|
||||||
}
|
}
|
||||||
|
|
||||||
function exportNodes() {
|
function exportNodes() {
|
||||||
@ -120,7 +121,7 @@ RED.clipboard = (function() {
|
|||||||
return false;
|
return false;
|
||||||
})
|
})
|
||||||
});
|
});
|
||||||
dialog.dialog("option","title","Export nodes to clipboard").dialog( "open" );
|
dialog.dialog("option","title",RED._("dialog.exportNodesClipboard")).dialog( "open" );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -49,18 +49,18 @@ RED.deploy = (function() {
|
|||||||
|
|
||||||
if (type == "default") {
|
if (type == "default") {
|
||||||
$('<li><span class="deploy-button-group button-group">'+
|
$('<li><span class="deploy-button-group button-group">'+
|
||||||
'<a id="btn-deploy" class="deploy-button disabled" href="#"><img id="btn-deploy-icon" src="red/images/deploy-full-o.png"> <span>Deploy</span></a>'+
|
'<a id="btn-deploy" class="deploy-button disabled" href="#"><img id="btn-deploy-icon" src="red/images/deploy-full-o.png"> <span>'+RED._("deploy.deploy")+'</span></a>'+
|
||||||
'<a id="btn-deploy-options" data-toggle="dropdown" class="deploy-button" href="#"><i class="fa fa-caret-down"></i></a>'+
|
'<a id="btn-deploy-options" data-toggle="dropdown" class="deploy-button" href="#"><i class="fa fa-caret-down"></i></a>'+
|
||||||
'</span></li>').prependTo(".header-toolbar");
|
'</span></li>').prependTo(".header-toolbar");
|
||||||
RED.menu.init({id:"btn-deploy-options",
|
RED.menu.init({id:"btn-deploy-options",
|
||||||
options: [
|
options: [
|
||||||
{id:"deploymenu-item-full",toggle:"deploy-type",icon:"red/images/deploy-full.png",label:"Full",sublabel:"Deploys everything in the workspace",selected: true, onselect:function(s) { if(s){changeDeploymentType("full")}}},
|
{id:"deploymenu-item-full",toggle:"deploy-type",icon:"red/images/deploy-full.png",label:RED._("deploy.full"),sublabel:RED._("deploy.fullDesc"),selected: true, onselect:function(s) { if(s){changeDeploymentType("full")}}},
|
||||||
{id:"deploymenu-item-flow",toggle:"deploy-type",icon:"red/images/deploy-flows.png",label:"Modified Flows",sublabel:"Only deploys flows that contain changed nodes", onselect:function(s) {if(s){changeDeploymentType("flows")}}},
|
{id:"deploymenu-item-flow",toggle:"deploy-type",icon:"red/images/deploy-flows.png",label:RED._("deploy.modifiedFlows"),sublabel:RED._("deploy.modifiedFlowsDesc"), onselect:function(s) {if(s){changeDeploymentType("flows")}}},
|
||||||
{id:"deploymenu-item-node",toggle:"deploy-type",icon:"red/images/deploy-nodes.png",label:"Modified Nodes",sublabel:"Only deploys nodes that have changed",onselect:function(s) { if(s){changeDeploymentType("nodes")}}}
|
{id:"deploymenu-item-node",toggle:"deploy-type",icon:"red/images/deploy-nodes.png",label:RED._("deploy.modifiedNodes"),sublabel:RED._("deploy.modifiedNodesDesc"),onselect:function(s) { if(s){changeDeploymentType("nodes")}}}
|
||||||
]
|
]
|
||||||
});
|
});
|
||||||
} else if (type == "simple") {
|
} else if (type == "simple") {
|
||||||
var label = options.label || "Deploy";
|
var label = options.label || RED._("deploy.deploy");
|
||||||
var icon = 'red/images/deploy-full-o.png';
|
var icon = 'red/images/deploy-full-o.png';
|
||||||
if (options.hasOwnProperty('icon')) {
|
if (options.hasOwnProperty('icon')) {
|
||||||
icon = options.icon;
|
icon = options.icon;
|
||||||
@ -83,7 +83,7 @@ RED.deploy = (function() {
|
|||||||
height: "auto",
|
height: "auto",
|
||||||
buttons: [
|
buttons: [
|
||||||
{
|
{
|
||||||
text: "Confirm deploy",
|
text: RED._("deploy.confirmDeploy"),
|
||||||
click: function() {
|
click: function() {
|
||||||
|
|
||||||
var ignoreChecked = $( "#node-dialog-confirm-deploy-hide" ).prop("checked");
|
var ignoreChecked = $( "#node-dialog-confirm-deploy-hide" ).prop("checked");
|
||||||
@ -95,7 +95,7 @@ RED.deploy = (function() {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
text: "Cancel",
|
text: RED._("deploy.cancelDeploy"),
|
||||||
click: function() {
|
click: function() {
|
||||||
$( this ).dialog( "close" );
|
$( this ).dialog( "close" );
|
||||||
}
|
}
|
||||||
@ -114,7 +114,7 @@ RED.deploy = (function() {
|
|||||||
RED.nodes.on('change',function(state) {
|
RED.nodes.on('change',function(state) {
|
||||||
if (state.dirty) {
|
if (state.dirty) {
|
||||||
window.onbeforeunload = function() {
|
window.onbeforeunload = function() {
|
||||||
return "You have undeployed changes.\n\nLeaving this page will lose these changes.";
|
return RED._("deploy.undeployedChanges");
|
||||||
}
|
}
|
||||||
$("#btn-deploy").removeClass("disabled");
|
$("#btn-deploy").removeClass("disabled");
|
||||||
} else {
|
} else {
|
||||||
@ -215,7 +215,7 @@ RED.deploy = (function() {
|
|||||||
"Node-RED-Deployment-Type":deploymentType
|
"Node-RED-Deployment-Type":deploymentType
|
||||||
}
|
}
|
||||||
}).done(function(data,textStatus,xhr) {
|
}).done(function(data,textStatus,xhr) {
|
||||||
RED.notify("Successfully deployed","success");
|
RED.notify(RED._("deploy.successfulDeploy"),"success");
|
||||||
RED.nodes.eachNode(function(node) {
|
RED.nodes.eachNode(function(node) {
|
||||||
if (node.changed) {
|
if (node.changed) {
|
||||||
node.dirty = true;
|
node.dirty = true;
|
||||||
@ -236,9 +236,9 @@ RED.deploy = (function() {
|
|||||||
}).fail(function(xhr,textStatus,err) {
|
}).fail(function(xhr,textStatus,err) {
|
||||||
RED.nodes.dirty(true);
|
RED.nodes.dirty(true);
|
||||||
if (xhr.responseText) {
|
if (xhr.responseText) {
|
||||||
RED.notify("<strong>Error</strong>: "+xhr.responseJSON.message,"error");
|
RED.notify(RED._("deploy.error")+xhr.responseJSON.message,"error");
|
||||||
} else {
|
} else {
|
||||||
RED.notify("<strong>Error</strong>: no response from server","error");
|
RED.notify(RED._("deploy.error")+RED._("deploy.noResponseError"),"error");
|
||||||
}
|
}
|
||||||
}).always(function() {
|
}).always(function() {
|
||||||
$("#btn-deploy-icon").removeClass('spinner');
|
$("#btn-deploy-icon").removeClass('spinner');
|
||||||
|
@ -178,7 +178,7 @@ RED.editor = (function() {
|
|||||||
buttons: [
|
buttons: [
|
||||||
{
|
{
|
||||||
id: "node-dialog-ok",
|
id: "node-dialog-ok",
|
||||||
text: "Ok",
|
text: "Ok", // RED._("dialog.ok"),
|
||||||
click: function() {
|
click: function() {
|
||||||
if (editing_node) {
|
if (editing_node) {
|
||||||
var changes = {};
|
var changes = {};
|
||||||
@ -285,7 +285,7 @@ RED.editor = (function() {
|
|||||||
contentType: "application/json; charset=utf-8"
|
contentType: "application/json; charset=utf-8"
|
||||||
}).done(function() {
|
}).done(function() {
|
||||||
RED.library.loadFlowLibrary();
|
RED.library.loadFlowLibrary();
|
||||||
RED.notify("Saved nodes","success");
|
RED.notify(RED._("editor.savedNodes"),"success");
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -294,7 +294,7 @@ RED.editor = (function() {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: "node-dialog-cancel",
|
id: "node-dialog-cancel",
|
||||||
text: "Cancel",
|
text: "Cancel", // RED._("dialog.cancel"),
|
||||||
click: function() {
|
click: function() {
|
||||||
if (editing_node && editing_node._def) {
|
if (editing_node && editing_node._def) {
|
||||||
if (editing_node._def.oneditcancel) {
|
if (editing_node._def.oneditcancel) {
|
||||||
@ -392,9 +392,9 @@ RED.editor = (function() {
|
|||||||
input.after(button);
|
input.after(button);
|
||||||
|
|
||||||
if (node[property]) {
|
if (node[property]) {
|
||||||
button.text("edit");
|
button.text(RED._("editor.configEdit"));
|
||||||
} else {
|
} else {
|
||||||
button.text("add");
|
button.text(RED._("editor.configAdd"));
|
||||||
}
|
}
|
||||||
|
|
||||||
button.click(function(e) {
|
button.click(function(e) {
|
||||||
@ -565,7 +565,7 @@ RED.editor = (function() {
|
|||||||
var buttons = $( "#dialog" ).dialog("option","buttons");
|
var buttons = $( "#dialog" ).dialog("option","buttons");
|
||||||
buttons.unshift({
|
buttons.unshift({
|
||||||
class: 'leftButton',
|
class: 'leftButton',
|
||||||
text: "Edit flow",
|
text: RED._("editor.editFlow"),
|
||||||
click: function() {
|
click: function() {
|
||||||
RED.workspaces.show(id);
|
RED.workspaces.show(id);
|
||||||
$("#node-dialog-ok").click();
|
$("#node-dialog-ok").click();
|
||||||
@ -652,7 +652,7 @@ RED.editor = (function() {
|
|||||||
if (buttons.length == 2) {
|
if (buttons.length == 2) {
|
||||||
buttons.unshift({
|
buttons.unshift({
|
||||||
class: 'leftButton',
|
class: 'leftButton',
|
||||||
text: "Delete",
|
text: RED._("editor.configDelete"),
|
||||||
click: function() {
|
click: function() {
|
||||||
var configProperty = $(this).dialog('option','node-property');
|
var configProperty = $(this).dialog('option','node-property');
|
||||||
var configId = $(this).dialog('option','node-id');
|
var configId = $(this).dialog('option','node-id');
|
||||||
@ -684,7 +684,7 @@ RED.editor = (function() {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
buttons[1].text = "Update";
|
buttons[1].text = "Update";
|
||||||
$("#node-config-dialog-user-count").html(configNode.users.length+" node"+(configNode.users.length==1?" uses":"s use")+" this config").show();
|
$("#node-config-dialog-user-count").html(RED._("editor.nodesUse", {count:configNode.users.length})).show();
|
||||||
}
|
}
|
||||||
$( "#node-config-dialog" ).dialog("option","buttons",buttons);
|
$( "#node-config-dialog" ).dialog("option","buttons",buttons);
|
||||||
|
|
||||||
@ -695,7 +695,7 @@ RED.editor = (function() {
|
|||||||
.dialog("option","node-property",name)
|
.dialog("option","node-property",name)
|
||||||
.dialog("option","node-id",configNode.id)
|
.dialog("option","node-id",configNode.id)
|
||||||
.dialog("option","node-type",type)
|
.dialog("option","node-type",type)
|
||||||
.dialog("option","title",(adding?"Add new ":"Edit ")+type+" config node")
|
.dialog("option","title",(adding?RED._("editor.addNewConfig", {type:type}):RED._("editor.editConfig", {type:type})))
|
||||||
.dialog( "open" );
|
.dialog( "open" );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -703,9 +703,9 @@ RED.editor = (function() {
|
|||||||
var button = $("#node-input-edit-"+name);
|
var button = $("#node-input-edit-"+name);
|
||||||
if (button.length) {
|
if (button.length) {
|
||||||
if (value) {
|
if (value) {
|
||||||
button.text("edit");
|
button.text(RED._("editor.configEdit"));
|
||||||
} else {
|
} else {
|
||||||
button.text("add");
|
button.text(RED._("editor.configAdd"));
|
||||||
}
|
}
|
||||||
$("#node-input-"+name).val(value);
|
$("#node-input-"+name).val(value);
|
||||||
} else {
|
} else {
|
||||||
@ -724,12 +724,12 @@ RED.editor = (function() {
|
|||||||
select.append('<option value="'+config.id+'"'+(value==config.id?" selected":"")+'>'+label+'</option>');
|
select.append('<option value="'+config.id+'"'+(value==config.id?" selected":"")+'>'+label+'</option>');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
select.append('<option value="_ADD_"'+(value===""?" selected":"")+'>'+RED._("editor.addNewType", {type:type})+'</option>');
|
||||||
select.append('<option value="_ADD_"'+(value===""?" selected":"")+'>Add new '+type+'...</option>');
|
|
||||||
window.setTimeout(function() { select.change();},50);
|
window.setTimeout(function() { select.change();},50);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: Cannot NLS enable until RED._ is exposed
|
||||||
$( "#node-config-dialog" ).dialog({
|
$( "#node-config-dialog" ).dialog({
|
||||||
modal: true,
|
modal: true,
|
||||||
autoOpen: false,
|
autoOpen: false,
|
||||||
@ -740,7 +740,7 @@ RED.editor = (function() {
|
|||||||
buttons: [
|
buttons: [
|
||||||
{
|
{
|
||||||
id: "node-config-dialog-ok",
|
id: "node-config-dialog-ok",
|
||||||
text: "Ok",
|
text: "Ok", // RED._("dialog.ok"),
|
||||||
click: function() {
|
click: function() {
|
||||||
var configProperty = $(this).dialog('option','node-property');
|
var configProperty = $(this).dialog('option','node-property');
|
||||||
var configId = $(this).dialog('option','node-id');
|
var configId = $(this).dialog('option','node-id');
|
||||||
@ -800,7 +800,7 @@ RED.editor = (function() {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: "node-config-dialog-cancel",
|
id: "node-config-dialog-cancel",
|
||||||
text: "Cancel",
|
text: "Cancel", // RED._("dialog.cancel"),
|
||||||
click: function() {
|
click: function() {
|
||||||
var configType = $(this).dialog('option','node-type');
|
var configType = $(this).dialog('option','node-type');
|
||||||
var configId = $(this).dialog('option','node-id');
|
var configId = $(this).dialog('option','node-id');
|
||||||
@ -854,7 +854,7 @@ RED.editor = (function() {
|
|||||||
buttons: [
|
buttons: [
|
||||||
{
|
{
|
||||||
id: "subflow-dialog-ok",
|
id: "subflow-dialog-ok",
|
||||||
text: "Ok",
|
text: "Ok", // RED._("dialog.ok"),
|
||||||
click: function() {
|
click: function() {
|
||||||
if (editing_node) {
|
if (editing_node) {
|
||||||
var i;
|
var i;
|
||||||
@ -868,7 +868,7 @@ RED.editor = (function() {
|
|||||||
changes['name'] = editing_node.name;
|
changes['name'] = editing_node.name;
|
||||||
editing_node.name = newName;
|
editing_node.name = newName;
|
||||||
changed = true;
|
changed = true;
|
||||||
$("#menu-item-workspace-menu-"+editing_node.id.replace(".","-")).text("Subflow: "+newName);
|
$("#menu-item-workspace-menu-"+editing_node.id.replace(".","-")).text(RED._("editor.subflow")+newName);
|
||||||
}
|
}
|
||||||
|
|
||||||
RED.palette.refresh();
|
RED.palette.refresh();
|
||||||
@ -901,7 +901,7 @@ RED.editor = (function() {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: "subflow-dialog-cancel",
|
id: "subflow-dialog-cancel",
|
||||||
text: "Cancel",
|
text: "Cancel", // RED._("dialog.cancel")
|
||||||
click: function() {
|
click: function() {
|
||||||
$( this ).dialog( "close" );
|
$( this ).dialog( "close" );
|
||||||
editing_node = null;
|
editing_node = null;
|
||||||
@ -941,8 +941,8 @@ RED.editor = (function() {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
$("#subflow-dialog-user-count").html("There "+(userCount==1?"is":"are")+" "+userCount+" instance"+(userCount==1?" ":"s")+" of this subflow").show();
|
$("#subflow-dialog-user-count").html(RED._("editor.subflowInstances", {count:userCount})).show();
|
||||||
$("#subflow-dialog").dialog("option","title","Edit flow "+subflow.name).dialog( "open" );
|
$("#subflow-dialog").dialog("option","title",RED._("editor.editFlow")+subflow.name).dialog( "open" );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -69,24 +69,24 @@ RED.keyboard = (function() {
|
|||||||
dialog = $('<div id="keyboard-help-dialog" class="hide">'+
|
dialog = $('<div id="keyboard-help-dialog" class="hide">'+
|
||||||
'<div style="vertical-align: top;display:inline-block; box-sizing: border-box; width:50%; padding: 10px;">'+
|
'<div style="vertical-align: top;display:inline-block; box-sizing: border-box; width:50%; padding: 10px;">'+
|
||||||
'<table class="keyboard-shortcuts">'+
|
'<table class="keyboard-shortcuts">'+
|
||||||
'<tr><td><span class="help-key">Ctrl/⌘</span> + <span class="help-key">a</span></td><td>Select all nodes</td></tr>'+
|
'<tr><td><span class="help-key">Ctrl/⌘</span> + <span class="help-key">a</span></td><td>'+RED._("keyboard.selectAll")+'</td></tr>'+
|
||||||
'<tr><td><span class="help-key">Shift</span> + <span class="help-key">Click</span></td><td>Select all connected nodes</td></tr>'+
|
'<tr><td><span class="help-key">Shift</span> + <span class="help-key">Click</span></td><td>'+RED._("keyboard.selectAllConnected")+'</td></tr>'+
|
||||||
'<tr><td><span class="help-key">Ctrl/⌘</span> + <span class="help-key">Click</span></td><td>Add/remove node from selection</td></tr>'+
|
'<tr><td><span class="help-key">Ctrl/⌘</span> + <span class="help-key">Click</span></td><td>'+RED._("keyboard.addRemoveNode")+'</td></tr>'+
|
||||||
'<tr><td><span class="help-key">Delete</span></td><td>Delete selected nodes or link</td></tr>'+
|
'<tr><td><span class="help-key">Delete</span></td><td>'+RED._("keyboard.deleteSelected")+'</td></tr>'+
|
||||||
'<tr><td> </td><td></td></tr>'+
|
'<tr><td> </td><td></td></tr>'+
|
||||||
'<tr><td><span class="help-key">Ctrl/⌘</span> + <span class="help-key">i</span></td><td>Import nodes</td></tr>'+
|
'<tr><td><span class="help-key">Ctrl/⌘</span> + <span class="help-key">i</span></td><td>'+RED._("keyboard.importNode")+'</td></tr>'+
|
||||||
'<tr><td><span class="help-key">Ctrl/⌘</span> + <span class="help-key">e</span></td><td>Export selected nodes</td></tr>'+
|
'<tr><td><span class="help-key">Ctrl/⌘</span> + <span class="help-key">e</span></td><td>'+RED._("keyboard.exportNode")+'</td></tr>'+
|
||||||
'</table>'+
|
'</table>'+
|
||||||
'</div>'+
|
'</div>'+
|
||||||
'<div style="vertical-align: top;display:inline-block; box-sizing: border-box; width:50%; padding: 10px;">'+
|
'<div style="vertical-align: top;display:inline-block; box-sizing: border-box; width:50%; padding: 10px;">'+
|
||||||
'<table class="keyboard-shortcuts">'+
|
'<table class="keyboard-shortcuts">'+
|
||||||
'<tr><td><span class="help-key">Ctrl/⌘</span> + <span class="help-key">Space</span></td><td>Toggle sidebar</td></tr>'+
|
'<tr><td><span class="help-key">Ctrl/⌘</span> + <span class="help-key">Space</span></td><td>'+RED._("keyboard.toggleSidebar")+'</td></tr>'+
|
||||||
'<tr><td></td><td></td></tr>'+
|
'<tr><td></td><td></td></tr>'+
|
||||||
'<tr><td><span class="help-key">Delete</span></td><td>Delete selected nodes or link</td></tr>'+
|
'<tr><td><span class="help-key">Delete</span></td><td>'+RED._("keyboard.deleteNode")+'</td></tr>'+
|
||||||
'<tr><td></td><td></td></tr>'+
|
'<tr><td></td><td></td></tr>'+
|
||||||
'<tr><td><span class="help-key">Ctrl/⌘</span> + <span class="help-key">c</span></td><td>Copy selected nodes</td></tr>'+
|
'<tr><td><span class="help-key">Ctrl/⌘</span> + <span class="help-key">c</span></td><td>'+RED._("keyboard.copyNode")+'</td></tr>'+
|
||||||
'<tr><td><span class="help-key">Ctrl/⌘</span> + <span class="help-key">x</span></td><td>Cut selected nodes</td></tr>'+
|
'<tr><td><span class="help-key">Ctrl/⌘</span> + <span class="help-key">x</span></td><td>'+RED._("keyboard.cutNode")+'</td></tr>'+
|
||||||
'<tr><td><span class="help-key">Ctrl/⌘</span> + <span class="help-key">v</span></td><td>Paste nodes</td></tr>'+
|
'<tr><td><span class="help-key">Ctrl/⌘</span> + <span class="help-key">v</span></td><td>'+RED._("keyboard.pasteNode")+'</td></tr>'+
|
||||||
'</table>'+
|
'</table>'+
|
||||||
'</div>'+
|
'</div>'+
|
||||||
'</div>')
|
'</div>')
|
||||||
|
@ -146,8 +146,8 @@ RED.library = (function() {
|
|||||||
'<div class="btn-group" style="margin-left: 0px;">'+
|
'<div class="btn-group" style="margin-left: 0px;">'+
|
||||||
'<button id="node-input-'+options.type+'-lookup" class="btn input-append-right" data-toggle="dropdown"><i class="fa fa-book"></i> <i class="fa fa-caret-down"></i></button>'+
|
'<button id="node-input-'+options.type+'-lookup" class="btn input-append-right" data-toggle="dropdown"><i class="fa fa-book"></i> <i class="fa fa-caret-down"></i></button>'+
|
||||||
'<ul class="dropdown-menu pull-right" role="menu">'+
|
'<ul class="dropdown-menu pull-right" role="menu">'+
|
||||||
'<li><a id="node-input-'+options.type+'-menu-open-library" tabindex="-1" href="#">Open Library...</a></li>'+
|
'<li><a id="node-input-'+options.type+'-menu-open-library" tabindex="-1" href="#">'+RED._("library.openLibrary")+'</a></li>'+
|
||||||
'<li><a id="node-input-'+options.type+'-menu-save-library" tabindex="-1" href="#">Save to Library...</a></li>'+
|
'<li><a id="node-input-'+options.type+'-menu-save-library" tabindex="-1" href="#">'+RED._("library.saveToLibrary")+'</a></li>'+
|
||||||
'</ul></div>'
|
'</ul></div>'
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -232,14 +232,14 @@ RED.library = (function() {
|
|||||||
libraryEditor.$blockScrolling = Infinity;
|
libraryEditor.$blockScrolling = Infinity;
|
||||||
|
|
||||||
$( "#node-dialog-library-lookup" ).dialog({
|
$( "#node-dialog-library-lookup" ).dialog({
|
||||||
title: options.type+" library",
|
title: RED._("library.typeLibrary", {type:options.type}),
|
||||||
modal: true,
|
modal: true,
|
||||||
autoOpen: false,
|
autoOpen: false,
|
||||||
width: 800,
|
width: 800,
|
||||||
height: 450,
|
height: 450,
|
||||||
buttons: [
|
buttons: [
|
||||||
{
|
{
|
||||||
text: "Ok",
|
text: RED._("dialog.ok"),
|
||||||
click: function() {
|
click: function() {
|
||||||
if (selectedLibraryItem) {
|
if (selectedLibraryItem) {
|
||||||
for (var i=0;i<options.fields.length;i++) {
|
for (var i=0;i<options.fields.length;i++) {
|
||||||
@ -252,7 +252,7 @@ RED.library = (function() {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
text: "Cancel",
|
text: RED._("dialog.cancel"),
|
||||||
click: function() {
|
click: function() {
|
||||||
$( this ).dialog( "close" );
|
$( this ).dialog( "close" );
|
||||||
}
|
}
|
||||||
@ -274,12 +274,12 @@ RED.library = (function() {
|
|||||||
function saveToLibrary(overwrite) {
|
function saveToLibrary(overwrite) {
|
||||||
var name = $("#node-input-name").val().replace(/(^\s*)|(\s*$)/g,"");
|
var name = $("#node-input-name").val().replace(/(^\s*)|(\s*$)/g,"");
|
||||||
if (name === "") {
|
if (name === "") {
|
||||||
name = "Unnamed "+options.type;
|
name = RED._("library.unnamedType",{type:options.type});
|
||||||
}
|
}
|
||||||
var filename = $("#node-dialog-library-save-filename").val().replace(/(^\s*)|(\s*$)/g,"");
|
var filename = $("#node-dialog-library-save-filename").val().replace(/(^\s*)|(\s*$)/g,"");
|
||||||
var pathname = $("#node-dialog-library-save-folder").val().replace(/(^\s*)|(\s*$)/g,"");
|
var pathname = $("#node-dialog-library-save-folder").val().replace(/(^\s*)|(\s*$)/g,"");
|
||||||
if (filename === "" || !/.+\.js$/.test(filename)) {
|
if (filename === "" || !/.+\.js$/.test(filename)) {
|
||||||
RED.notify("Invalid filename","warning");
|
RED.notify(RED._("notification.invalidFilename"),"warning");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
var fullpath = pathname+(pathname===""?"":"/")+filename;
|
var fullpath = pathname+(pathname===""?"":"/")+filename;
|
||||||
@ -328,27 +328,27 @@ RED.library = (function() {
|
|||||||
data: JSON.stringify(data),
|
data: JSON.stringify(data),
|
||||||
contentType: "application/json; charset=utf-8"
|
contentType: "application/json; charset=utf-8"
|
||||||
}).done(function(data,textStatus,xhr) {
|
}).done(function(data,textStatus,xhr) {
|
||||||
RED.notify("Saved "+options.type,"success");
|
RED.notify(RED._("notification.savedType", {type:options.type}),"success");
|
||||||
}).fail(function(xhr,textStatus,err) {
|
}).fail(function(xhr,textStatus,err) {
|
||||||
RED.notify("Saved failed: "+xhr.responseJSON.message,"error");
|
RED.notify(RED._("notification.saveFailed")+xhr.responseJSON.message,"error");
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
$( "#node-dialog-library-save-confirm" ).dialog({
|
$( "#node-dialog-library-save-confirm" ).dialog({
|
||||||
title: "Save to library",
|
title: RED._("library.saveToLibrary"),
|
||||||
modal: true,
|
modal: true,
|
||||||
autoOpen: false,
|
autoOpen: false,
|
||||||
width: 530,
|
width: 530,
|
||||||
height: 230,
|
height: 230,
|
||||||
buttons: [
|
buttons: [
|
||||||
{
|
{
|
||||||
text: "Ok",
|
text: RED._("dialog.ok"),
|
||||||
click: function() {
|
click: function() {
|
||||||
saveToLibrary(true);
|
saveToLibrary(true);
|
||||||
$( this ).dialog( "close" );
|
$( this ).dialog( "close" );
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
text: "Cancel",
|
text: RED._("dialog.cancel"),
|
||||||
click: function() {
|
click: function() {
|
||||||
$( this ).dialog( "close" );
|
$( this ).dialog( "close" );
|
||||||
}
|
}
|
||||||
@ -356,21 +356,21 @@ RED.library = (function() {
|
|||||||
]
|
]
|
||||||
});
|
});
|
||||||
$( "#node-dialog-library-save" ).dialog({
|
$( "#node-dialog-library-save" ).dialog({
|
||||||
title: "Save to library",
|
title: RED._("library.saveToLibrary"),
|
||||||
modal: true,
|
modal: true,
|
||||||
autoOpen: false,
|
autoOpen: false,
|
||||||
width: 530,
|
width: 530,
|
||||||
height: 230,
|
height: 230,
|
||||||
buttons: [
|
buttons: [
|
||||||
{
|
{
|
||||||
text: "Ok",
|
text: RED._("dialog.ok"),
|
||||||
click: function() {
|
click: function() {
|
||||||
saveToLibrary(false);
|
saveToLibrary(false);
|
||||||
$( this ).dialog( "close" );
|
$( this ).dialog( "close" );
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
text: "Cancel",
|
text: RED._("dialog.cancel"),
|
||||||
click: function() {
|
click: function() {
|
||||||
$( this ).dialog( "close" );
|
$( this ).dialog( "close" );
|
||||||
}
|
}
|
||||||
@ -385,7 +385,7 @@ RED.library = (function() {
|
|||||||
var nns = RED.nodes.createExportableNodeSet(RED.view.selection().nodes);
|
var nns = RED.nodes.createExportableNodeSet(RED.view.selection().nodes);
|
||||||
$("#dialog-form").html($("script[data-template-name='export-library-dialog']").html());
|
$("#dialog-form").html($("script[data-template-name='export-library-dialog']").html());
|
||||||
$("#node-input-filename").attr('nodes',JSON.stringify(nns));
|
$("#node-input-filename").attr('nodes',JSON.stringify(nns));
|
||||||
$( "#dialog" ).dialog("option","title","Export nodes to library").dialog( "open" );
|
$( "#dialog" ).dialog("option","title",RED._("library.exportToLibrary")).dialog( "open" );
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
@ -78,15 +78,15 @@ RED.palette = (function() {
|
|||||||
l = "<p><b>"+label+"</b><br/><i>"+type+"</i></p>";
|
l = "<p><b>"+label+"</b><br/><i>"+type+"</i></p>";
|
||||||
}
|
}
|
||||||
|
|
||||||
popOverContent = $(l+($("script[data-help-name|='"+type+"']").html()||"<p>no information available</p>").trim())
|
popOverContent = $(l+($("script[data-help-name|='"+type+"']").html()||"<p>"+RED._("palette.noInfo")+"</p>").trim())
|
||||||
.filter(function(n) {
|
.filter(function(n) {
|
||||||
return this.nodeType == 1 || (this.nodeType == 3 && this.textContent.trim().length > 0)
|
return this.nodeType == 1 || (this.nodeType == 3 && this.textContent.trim().length > 0)
|
||||||
}).slice(0,2);
|
}).slice(0,2);
|
||||||
} catch(err) {
|
} catch(err) {
|
||||||
// Malformed HTML may cause errors. TODO: need to understand what can break
|
// Malformed HTML may cause errors. TODO: need to understand what can break
|
||||||
console.log("Error generating pop-over label for '"+type+"'.");
|
console.log(RED._("palette.popOverError",{type:type}));
|
||||||
console.log(err.toString());
|
console.log(err.toString());
|
||||||
popOverContent = "<p><b>"+label+"</b></p><p>no information available</p>";
|
popOverContent = "<p><b>"+label+"</b></p><p>"+RED._("palette.noInfo")+"</p>";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -216,7 +216,7 @@ RED.subflow = (function() {
|
|||||||
function convertToSubflow() {
|
function convertToSubflow() {
|
||||||
var selection = RED.view.selection();
|
var selection = RED.view.selection();
|
||||||
if (!selection.nodes) {
|
if (!selection.nodes) {
|
||||||
RED.notify("<strong>Cannot create subflow</strong>: no nodes selected","error");
|
RED.notify(RED._("notification.noNodesSelected"),"error");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
var i;
|
var i;
|
||||||
@ -276,7 +276,7 @@ RED.subflow = (function() {
|
|||||||
candidateOutputs.sort(function(a,b) { return a.source.y-b.source.y});
|
candidateOutputs.sort(function(a,b) { return a.source.y-b.source.y});
|
||||||
|
|
||||||
if (candidateInputs.length > 1) {
|
if (candidateInputs.length > 1) {
|
||||||
RED.notify("<strong>Cannot create subflow</strong>: multiple inputs to selection","error");
|
RED.notify(RED._("notification.multipleInputsToSelection"),"error");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
//if (candidateInputs.length == 0) {
|
//if (candidateInputs.length == 0) {
|
||||||
|
@ -60,12 +60,12 @@ RED.sidebar.info = (function() {
|
|||||||
|
|
||||||
function refresh(node) {
|
function refresh(node) {
|
||||||
var table = '<table class="node-info"><tbody>';
|
var table = '<table class="node-info"><tbody>';
|
||||||
table += '<tr class="blank"><td colspan="2">Node</td></tr>';
|
table += '<tr class="blank"><td colspan="2">'+RED._("tabInfo.node")+'</td></tr>';
|
||||||
if (node.type != "subflow" && node.name) {
|
if (node.type != "subflow" && node.name) {
|
||||||
table += "<tr><td>Name</td><td> "+node.name+"</td></tr>";
|
table += "<tr><td>Name</td><td> "+node.name+"</td></tr>";
|
||||||
}
|
}
|
||||||
table += "<tr><td>Type</td><td> "+node.type+"</td></tr>";
|
table += "<tr><td>"+RED._("tabInfo.type")+"</td><td> "+node.type+"</td></tr>";
|
||||||
table += "<tr><td>ID</td><td> "+node.id+"</td></tr>";
|
table += "<tr><td>"+RED._("tabInfo.id")+"</td><td> "+node.id+"</td></tr>";
|
||||||
|
|
||||||
var m = /^subflow(:(.+))?$/.exec(node.type);
|
var m = /^subflow(:(.+))?$/.exec(node.type);
|
||||||
if (m) {
|
if (m) {
|
||||||
@ -76,7 +76,7 @@ RED.sidebar.info = (function() {
|
|||||||
subflowNode = node;
|
subflowNode = node;
|
||||||
}
|
}
|
||||||
|
|
||||||
table += '<tr class="blank"><td colspan="2">Subflow</td></tr>';
|
table += '<tr class="blank"><td colspan="2">'+RED._("tabInfo.subflow")+'</td></tr>';
|
||||||
|
|
||||||
var userCount = 0;
|
var userCount = 0;
|
||||||
var subflowType = "subflow:"+subflowNode.id;
|
var subflowType = "subflow:"+subflowNode.id;
|
||||||
@ -85,12 +85,12 @@ RED.sidebar.info = (function() {
|
|||||||
userCount++;
|
userCount++;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
table += "<tr><td>name</td><td>"+subflowNode.name+"</td></tr>";
|
table += "<tr><td>"+RED._("tabInfo.name")+"</td><td>"+subflowNode.name+"</td></tr>";
|
||||||
table += "<tr><td>instances</td><td>"+userCount+"</td></tr>";
|
table += "<tr><td>"+RED._("tabInfo.instances")+"</td><td>"+userCount+"</td></tr>";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!m && node.type != "subflow" && node.type != "comment") {
|
if (!m && node.type != "subflow" && node.type != "comment") {
|
||||||
table += '<tr class="blank"><td colspan="2"><a href="#" class="node-info-property-header"><i style="width: 10px; text-align: center;" class="fa fa-caret-'+(propertiesExpanded?"down":"right")+'"></i> Properties</a></td></tr>';
|
table += '<tr class="blank"><td colspan="2"><a href="#" class="node-info-property-header"><i style="width: 10px; text-align: center;" class="fa fa-caret-'+(propertiesExpanded?"down":"right")+'"></i> '+RED._("tabInfo.properties")+'</a></td></tr>';
|
||||||
if (node._def) {
|
if (node._def) {
|
||||||
for (var n in node._def.defaults) {
|
for (var n in node._def.defaults) {
|
||||||
if (n != "name" && node._def.defaults.hasOwnProperty(n)) {
|
if (n != "name" && node._def.defaults.hasOwnProperty(n)) {
|
||||||
@ -98,7 +98,7 @@ RED.sidebar.info = (function() {
|
|||||||
var type = typeof val;
|
var type = typeof val;
|
||||||
if (type === "string") {
|
if (type === "string") {
|
||||||
if (val.length === 0) {
|
if (val.length === 0) {
|
||||||
val += '<span style="font-style: italic; color: #ccc;">blank</span>';
|
val += '<span style="font-style: italic; color: #ccc;">'+RED._("tabInfo.blank")+'</span>';
|
||||||
} else {
|
} else {
|
||||||
if (val.length > 30) {
|
if (val.length > 30) {
|
||||||
val = val.substring(0,30)+" ...";
|
val = val.substring(0,30)+" ...";
|
||||||
|
@ -309,11 +309,11 @@ RED.view = (function() {
|
|||||||
if (activeSubflow && m) {
|
if (activeSubflow && m) {
|
||||||
var subflowId = m[1];
|
var subflowId = m[1];
|
||||||
if (subflowId === activeSubflow.id) {
|
if (subflowId === activeSubflow.id) {
|
||||||
RED.notify("<strong>Error</strong>: Cannot add subflow to itself","error");
|
RED.notify(RED._("notification.cannotAddSubflowToItself"),"error");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (RED.nodes.subflowContains(m[1],activeSubflow.id)) {
|
if (RED.nodes.subflowContains(m[1],activeSubflow.id)) {
|
||||||
RED.notify("<strong>Error</strong>: Cannot add subflow - circular reference detected","error");
|
RED.notify(RED._("notification.cannotAddCircularReference"),"error");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -856,7 +856,7 @@ RED.view = (function() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
clipboard = JSON.stringify(nns);
|
clipboard = JSON.stringify(nns);
|
||||||
RED.notify(nns.length+" node"+(nns.length>1?"s":"")+" copied");
|
RED.notify(RED._("notification.nodeCopied",{count:nns.length}));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1043,9 +1043,9 @@ RED.view = (function() {
|
|||||||
redraw();
|
redraw();
|
||||||
}
|
}
|
||||||
} else if (d.changed) {
|
} else if (d.changed) {
|
||||||
RED.notify("<strong>Warning</strong>: node has undeployed changes","warning");
|
RED.notify(RED._("notification.undeployedChanges"),"warning");
|
||||||
} else {
|
} else {
|
||||||
RED.notify("<strong>Warning</strong>: node actions disabled within subflow","warning");
|
RED.notify(RED._("notification.nodeActionDisabled"),"warning");
|
||||||
}
|
}
|
||||||
d3.event.preventDefault();
|
d3.event.preventDefault();
|
||||||
}
|
}
|
||||||
@ -1754,9 +1754,9 @@ RED.view = (function() {
|
|||||||
} catch(error) {
|
} catch(error) {
|
||||||
if (error.code != "NODE_RED") {
|
if (error.code != "NODE_RED") {
|
||||||
console.log(error.stack);
|
console.log(error.stack);
|
||||||
RED.notify("<strong>Error</strong>: "+error,"error");
|
RED.notify(RED._("notification.error")+error,"error");
|
||||||
} else {
|
} else {
|
||||||
RED.notify("<strong>Error</strong>: "+error.message,"error");
|
RED.notify(RED._("notification.error")+error.message,"error");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -122,11 +122,11 @@ RED.workspaces = (function() {
|
|||||||
modal: true,
|
modal: true,
|
||||||
autoOpen: false,
|
autoOpen: false,
|
||||||
width: 500,
|
width: 500,
|
||||||
title: "Rename sheet",
|
title: "Rename sheet", // RED._("dialog.renameSheet"),
|
||||||
buttons: [
|
buttons: [
|
||||||
{
|
{
|
||||||
class: 'leftButton',
|
class: 'leftButton',
|
||||||
text: "Delete",
|
text: "Delete", // RED._("dialog.delete"),
|
||||||
click: function() {
|
click: function() {
|
||||||
var workspace = $(this).dialog('option','workspace');
|
var workspace = $(this).dialog('option','workspace');
|
||||||
$( this ).dialog( "close" );
|
$( this ).dialog( "close" );
|
||||||
@ -134,7 +134,7 @@ RED.workspaces = (function() {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
text: "Ok",
|
text: "Ok", // RED._("dialog.ok"),
|
||||||
click: function() {
|
click: function() {
|
||||||
var workspace = $(this).dialog('option','workspace');
|
var workspace = $(this).dialog('option','workspace');
|
||||||
var label = $( "#node-input-workspace-name" ).val();
|
var label = $( "#node-input-workspace-name" ).val();
|
||||||
@ -148,7 +148,7 @@ RED.workspaces = (function() {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
text: "Cancel",
|
text: "Cancel", // RED._("dialog.cancel"),
|
||||||
click: function() {
|
click: function() {
|
||||||
$( this ).dialog( "close" );
|
$( this ).dialog( "close" );
|
||||||
}
|
}
|
||||||
@ -165,10 +165,10 @@ RED.workspaces = (function() {
|
|||||||
modal: true,
|
modal: true,
|
||||||
autoOpen: false,
|
autoOpen: false,
|
||||||
width: 500,
|
width: 500,
|
||||||
title: "Confirm delete",
|
title: "Confirm delete", // RED._("dialog.confirmDelete"),
|
||||||
buttons: [
|
buttons: [
|
||||||
{
|
{
|
||||||
text: "Ok",
|
text: "Ok", // RED._("dialog.ok"),
|
||||||
click: function() {
|
click: function() {
|
||||||
var workspace = $(this).dialog('option','workspace');
|
var workspace = $(this).dialog('option','workspace');
|
||||||
deleteWorkspace(workspace,true);
|
deleteWorkspace(workspace,true);
|
||||||
@ -176,7 +176,7 @@ RED.workspaces = (function() {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
text: "Cancel",
|
text: "Cancel", // RED._("dialog.cancel"),
|
||||||
click: function() {
|
click: function() {
|
||||||
$( this ).dialog( "close" );
|
$( this ).dialog( "close" );
|
||||||
}
|
}
|
||||||
@ -251,7 +251,7 @@ RED.workspaces = (function() {
|
|||||||
if (!workspace_tabs.contains(id)) {
|
if (!workspace_tabs.contains(id)) {
|
||||||
var sf = RED.nodes.subflow(id);
|
var sf = RED.nodes.subflow(id);
|
||||||
if (sf) {
|
if (sf) {
|
||||||
addWorkspace({type:"subflow",id:id,label:"Subflow: "+sf.name, closeable: true});
|
addWorkspace({type:"subflow",id:id,label:RED._("workspaces.subflow")+sf.name, closeable: true});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
workspace_tabs.activateTab(id);
|
workspace_tabs.activateTab(id);
|
||||||
@ -259,7 +259,7 @@ RED.workspaces = (function() {
|
|||||||
refresh: function() {
|
refresh: function() {
|
||||||
RED.nodes.eachSubflow(function(sf) {
|
RED.nodes.eachSubflow(function(sf) {
|
||||||
if (workspace_tabs.contains(sf.id)) {
|
if (workspace_tabs.contains(sf.id)) {
|
||||||
workspace_tabs.renameTab(sf.id,"Subflow: "+sf.name);
|
workspace_tabs.renameTab(sf.id,RED._("workspaces.subflow")+sf.name);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
@ -36,7 +36,19 @@
|
|||||||
"nodeDisabled_plural": "Nodes disabled:",
|
"nodeDisabled_plural": "Nodes disabled:",
|
||||||
"lostConnectionError": "<b>Error</b>: Lost connection to server",
|
"lostConnectionError": "<b>Error</b>: Lost connection to server",
|
||||||
"importUnrecognised": "Imported unrecognised ",
|
"importUnrecognised": "Imported unrecognised ",
|
||||||
"loggedInAs": "Logged in as "
|
"loggedInAs": "Logged in as ",
|
||||||
|
"invalidFilename": "Invalid filename",
|
||||||
|
"savedType": "Saved __type__",
|
||||||
|
"saveFailed": "Save failed: ",
|
||||||
|
"noNodesSelected": "<strong>Cannot create subflow</strong>: no nodes selected",
|
||||||
|
"multipleInputsToSelection": "<strong>Cannot create subflow</strong>: multiple inputs to selection",
|
||||||
|
"cannotAddSubflowToItself": "<strong>Error</strong>: Cannot add subflow to itself",
|
||||||
|
"cannotAddCircularReference": "<strong>Error</strong>: Cannot add subflow - circular reference detected",
|
||||||
|
"nodeCopied": "__count__ node copied",
|
||||||
|
"nodeCopied_plural": "__count__ nodes copied",
|
||||||
|
"undeployedChanges": "<strong>Warning</strong>: node has undeployed changes",
|
||||||
|
"nodeActionDisabled": "<strong>Warning</strong>: node actions disabled within subflow",
|
||||||
|
"error": "<strong>Error</strong>: "
|
||||||
},
|
},
|
||||||
"error": {
|
"error": {
|
||||||
"apiSubflowOnly": "this api is subflow only. called with:",
|
"apiSubflowOnly": "this api is subflow only. called with:",
|
||||||
@ -47,6 +59,84 @@
|
|||||||
"dialog": {
|
"dialog": {
|
||||||
"cancel": "Cancel",
|
"cancel": "Cancel",
|
||||||
"login": "Login",
|
"login": "Login",
|
||||||
"loginFailed": "Login failed"
|
"loginFailed": "Login failed",
|
||||||
|
"ok": "Ok",
|
||||||
|
"delete": "Delete",
|
||||||
|
"close": "Close",
|
||||||
|
"nodes": " Nodes:",
|
||||||
|
"selectToCopy": "Select the text above and copy to the clipboard with Ctrl-C.",
|
||||||
|
"pasteNodesHere": "Paste nodes here",
|
||||||
|
"importNodes": "Import nodes",
|
||||||
|
"exportNodesClipboard": "Export nodes to clipboard",
|
||||||
|
"renameSheet": "Rename sheet",
|
||||||
|
"confirmDelete": "Confirm delete"
|
||||||
|
},
|
||||||
|
"deploy": {
|
||||||
|
"deploy": "Deploy",
|
||||||
|
"full": "Full",
|
||||||
|
"modifiedFlows": "Modified Flows",
|
||||||
|
"modifiedNodes": "Modified Nodes",
|
||||||
|
"fullDesc": "Deploys everything in the workspace",
|
||||||
|
"modifiedFlowsDesc": "Only deploys flows that contain changed nodes",
|
||||||
|
"modifiedNodesDesc": "Only deploys nodes that have changed",
|
||||||
|
"confirmDeploy": "Confirm deploy",
|
||||||
|
"cancelDeploy": "Cancel",
|
||||||
|
"undeployedChanges": "You have undeployed changes.\n\nLeaving this page will lose these changes.",
|
||||||
|
"successfulDeploy": "Successfully Deployed",
|
||||||
|
"error": "<strong>Error</strong>: ",
|
||||||
|
"noResponseError": "no response from server"
|
||||||
|
},
|
||||||
|
"editor": {
|
||||||
|
"savedNodes": "Saved nodes",
|
||||||
|
"configEdit": "edit",
|
||||||
|
"configAdd": "add",
|
||||||
|
"configDelete": "Delete",
|
||||||
|
"editFlow": "Edit flow ",
|
||||||
|
"nodesUse": "__count__ node uses this config",
|
||||||
|
"nodesUse_plural": "__count__ nodes use this config",
|
||||||
|
"addNewConfig": "Add new __type__ config node",
|
||||||
|
"editConfig": "Edit __type__ config node",
|
||||||
|
"addNewType": "Add new __type__...",
|
||||||
|
"subflow": "Subflow: ",
|
||||||
|
"subflowInstances": "There is __count__ instance of this subflow",
|
||||||
|
"subflowInstances_plural": "There are __count__ instances of this subflow"
|
||||||
|
},
|
||||||
|
"keyboard": {
|
||||||
|
"selectAll": "Select all nodes",
|
||||||
|
"selectAllConnected": "Select all connected nodes",
|
||||||
|
"addRemoveNode": "Add/remove node from selection",
|
||||||
|
"deleteSelected": "Delete selected nodes or link",
|
||||||
|
"importNode": "Import nodes",
|
||||||
|
"exportNode": "Export selected nodes",
|
||||||
|
"toggleSidebar": "Toggle sidebar",
|
||||||
|
"deleteNode": "Delete selected nodes or link",
|
||||||
|
"copyNode": "Copy selected nodes",
|
||||||
|
"cutNode": "Cut selected nodes",
|
||||||
|
"pasteNode": "Paste nodes"
|
||||||
|
},
|
||||||
|
"library": {
|
||||||
|
"openLibrary": "Open Library...",
|
||||||
|
"saveToLibrary": "Save to Library...",
|
||||||
|
"typeLibrary": "__type__ library",
|
||||||
|
"unnamedType": "Unnamed __type__",
|
||||||
|
"saveToLibrary": "Save to Library",
|
||||||
|
"exportToLibrary": "Export nodes to library"
|
||||||
|
},
|
||||||
|
"palette": {
|
||||||
|
"noInfo": "no information available",
|
||||||
|
"popOverError": "Error generating pop-over label for '__type__'."
|
||||||
|
},
|
||||||
|
"tabInfo": {
|
||||||
|
"node": "Node",
|
||||||
|
"type": "Type",
|
||||||
|
"id": "ID",
|
||||||
|
"subflow": "Subflow",
|
||||||
|
"name": "name",
|
||||||
|
"instances": "instances",
|
||||||
|
"properties": "Properties",
|
||||||
|
"blank": "blank"
|
||||||
|
},
|
||||||
|
"workspaces": {
|
||||||
|
"subflow": "Subflow: "
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
142
locales/zz-ZZ/editor.json
Normal file
142
locales/zz-ZZ/editor.json
Normal file
@ -0,0 +1,142 @@
|
|||||||
|
{
|
||||||
|
"workspace": {
|
||||||
|
"label": {
|
||||||
|
"name": "[G'Nameฏูİı|]"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"menu": {
|
||||||
|
"label": {
|
||||||
|
"sidebar": "[G'Sidebarฏูİı|]",
|
||||||
|
"displayStatus": "[G'Display node statusฏูİı|]",
|
||||||
|
"import": "[G'Importฏูİı|]",
|
||||||
|
"export": "[G'Exportฏูİı|]",
|
||||||
|
"clipboard": "[G'Clipboardฏูİı|]",
|
||||||
|
"library": "[G'Libraryฏูİı|]",
|
||||||
|
"configurationNodes": "[G'Configuration nodesฏูİı|]",
|
||||||
|
"subflows": "[G'Subflowsฏูİı|]",
|
||||||
|
"createSubflow": "[G'Create subflowฏูİı|]",
|
||||||
|
"selectionToSubflow": "[G'Selection to subflowฏูİı|]",
|
||||||
|
"workspaces": "[G'Workspacesฏูİı|]",
|
||||||
|
"add": "[G'Addฏูİı|]",
|
||||||
|
"rename": "[G'Renameฏูİı|]",
|
||||||
|
"delete": "[G'Deleteฏูİı|]",
|
||||||
|
"keyboardShortcuts": "[G'Keyboard Shortcutsฏูİı|]",
|
||||||
|
"login": "[G'Loginฏูİı|]",
|
||||||
|
"logout": "[G'Logoutฏูİı|]"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification": {
|
||||||
|
"nodeAdded": "[G'Node added to palette:ฏูİı|]",
|
||||||
|
"nodeAdded_plural": "[G'Nodes added to paletteฏูİı|]",
|
||||||
|
"nodeRemoved": "[G'Node removed from palette:ฏูİı|]",
|
||||||
|
"nodeRemoved_plural": "[G'Nodes removed from palette:ฏูİı|]",
|
||||||
|
"nodeEnabled": "[G'Node enabled:ฏูİı|]",
|
||||||
|
"nodeEnabled_plural": "[G'Nodes enabled:ฏูİı|]",
|
||||||
|
"nodeDisabled": "[G'Node disabled:ฏูİı|]",
|
||||||
|
"nodeDisabled_plural": "[G'Nodes disabled:ฏูİı|]",
|
||||||
|
"lostConnectionError": "[G'<b>Error</b>: Lost connection to serverฏูİı|]",
|
||||||
|
"importUnrecognised": "[G'Imported unrecognised ฏูİı|]",
|
||||||
|
"loggedInAs": "[G'Logged in as ฏูİı|]",
|
||||||
|
"invalidFilename": "[G'Invalid filenameฏูİı|]",
|
||||||
|
"savedType": "[G'Saved __type__ฏูİı|]",
|
||||||
|
"saveFailed": "[G'Save failed: ฏูİı|]",
|
||||||
|
"noNodesSelected": "[G'<strong>Cannot create subflow</strong>: no nodes selectedฏูİı|]",
|
||||||
|
"multipleInputsToSelection": "[G'<strong>Cannot create subflow</strong>: multiple inputs to selectionฏูİı|]",
|
||||||
|
"cannotAddSubflowToItself": "[G'<strong>Error</strong>: Cannot add subflow to itselfฏูİı|]",
|
||||||
|
"cannotAddCircularReference": "[G'<strong>Error</strong>: Cannot add subflow - circular reference detectedฏูİı|]",
|
||||||
|
"nodeCopied": "[G'__count__ node copiedฏูİı|]",
|
||||||
|
"nodeCopied_plural": "[G'__count__ nodes copiedฏูİı|]",
|
||||||
|
"undeployedChanges": "[G'<strong>Warning</strong>: node has undeployed changesฏูİı|]",
|
||||||
|
"nodeActionDisabled": "[G'<strong>Warning</strong>: node actions disabled within subflowฏูİı|]",
|
||||||
|
"error": "[G'<strong>Error</strong>: ฏูİı|]"
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"apiSubflowOnly": "[G'this api is subflow only. called with:ฏูİı|]",
|
||||||
|
"invalidFlow": "[G'Invalid flow: ฏูİı|]",
|
||||||
|
"cannotAddSubflowToItself": "[G'Cannot add subflow to itselfฏูİı|]",
|
||||||
|
"cannotAddCircularReference": "[G'Cannot add subflow - circular reference detectedฏูİı|]"
|
||||||
|
},
|
||||||
|
"dialog": {
|
||||||
|
"cancel": "[G'Cancelฏูİı|]",
|
||||||
|
"login": "[G'Loginฏูİı|]",
|
||||||
|
"loginFailed": "[G'Login failedฏูİı|]",
|
||||||
|
"ok": "[G'Okฏูİı|]",
|
||||||
|
"delete": "[G'Deleteฏูİı|]",
|
||||||
|
"close": "[G'Closeฏูİı|]",
|
||||||
|
"nodes": "[G' Nodes:ฏูİı|]",
|
||||||
|
"selectToCopy": "[G'Select the text above and copy to the clipboard with Ctrl-C.ฏูİı|]",
|
||||||
|
"pasteNodesHere": "[G'Paste nodes hereฏูİı|]",
|
||||||
|
"importNodes": "[G'Import nodesฏูİı|]",
|
||||||
|
"exportNodesClipboard": "[G'Export nodes to clipboardฏูİı|]",
|
||||||
|
"renameSheet": "[G'Rename sheetฏูİı|]",
|
||||||
|
"confirmDelete": "[G'Confirm deleteฏูİı|]"
|
||||||
|
},
|
||||||
|
"deploy": {
|
||||||
|
"deploy": "[G'Deployฏูİı|]",
|
||||||
|
"full": "[G'Fullฏูİı|]",
|
||||||
|
"modifiedFlows": "[G'Modified Flowsฏูİı|]",
|
||||||
|
"modifiedNodes": "[G'Modified Nodesฏูİı|]",
|
||||||
|
"fullDesc": "[G'Deploys everything in the workspaceฏูİı|]",
|
||||||
|
"modifiedFlowsDesc": "[G'Only deploys flows that contain changed nodesฏูİı|]",
|
||||||
|
"modifiedNodesDesc": "[G'Only deploys nodes that have changedฏูİı|]",
|
||||||
|
"confirmDeploy": "[G'Confirm deployฏูİı|]",
|
||||||
|
"cancelDeploy": "[G'Cancelฏูİı|]",
|
||||||
|
"undeployedChanges": "[G'You have undeployed changes.\n\nLeaving this page will lose these changes.ฏูİı|]",
|
||||||
|
"successfulDeploy": "[G'Successfully Deployedฏูİı|]",
|
||||||
|
"error": "[G'<strong>Error</strong>: ฏูİı|]",
|
||||||
|
"noResponseError": "[G'no response from serverฏูİı|]"
|
||||||
|
},
|
||||||
|
"editor": {
|
||||||
|
"savedNodes": "[G'Saved nodesฏูİı|]",
|
||||||
|
"configEdit": "[G'editฏูİı|]",
|
||||||
|
"configAdd": "[G'addฏูİı|]",
|
||||||
|
"configDelete": "[G'Deleteฏูİı|]",
|
||||||
|
"editFlow": "[G'Edit flow ฏูİı|]",
|
||||||
|
"nodesUse": "[G'__count__ node uses this configฏูİı|]",
|
||||||
|
"nodesUse_plural": "[G'__count__ nodes use this configฏูİı|]",
|
||||||
|
"addNewConfig": "[G'Add new __type__ config nodeฏูİı|]",
|
||||||
|
"editConfig": "[G'Edit __type__ config nodeฏูİı|]",
|
||||||
|
"addNewType": "[G'Add new __type__...ฏูİı|]",
|
||||||
|
"subflow": "[G'Subflow: ฏูİı|]",
|
||||||
|
"subflowInstances": "[G'There is __count__ instance of this subflowฏูİı|]",
|
||||||
|
"subflowInstances_plural": "[G'There are __count__ instances of this subflowฏูİı|]"
|
||||||
|
},
|
||||||
|
"keyboard": {
|
||||||
|
"selectAll": "[G'Select all nodesฏูİı|]",
|
||||||
|
"selectAllConnected": "[G'Select all connected nodesฏูİı|]",
|
||||||
|
"addRemoveNode": "[G'Add/remove node from selectionฏูİı|]",
|
||||||
|
"deleteSelected": "[G'Delete selected nodes or linkฏูİı|]",
|
||||||
|
"importNode": "[G'Import nodesฏูİı|]",
|
||||||
|
"exportNode": "[G'Export selected nodesฏูİı|]",
|
||||||
|
"toggleSidebar": "[G'Toggle sidebarฏูİı|]",
|
||||||
|
"deleteNode": "[G'Delete selected nodes or linkฏูİı|]",
|
||||||
|
"copyNode": "[G'Copy selected nodesฏูİı|]",
|
||||||
|
"cutNode": "[G'Cut selected nodesฏูİı|]",
|
||||||
|
"pasteNode": "[G'Paste nodesฏูİı|]"
|
||||||
|
},
|
||||||
|
"library": {
|
||||||
|
"openLibrary": "[G'Open Library...ฏูİı|]",
|
||||||
|
"saveToLibrary": "[G'Save to Library...ฏูİı|]",
|
||||||
|
"typeLibrary": "[G'__type__ libraryฏูİı|]",
|
||||||
|
"unnamedType": "[G'Unnamed __type__ฏูİı|]",
|
||||||
|
"saveToLibrary": "[G'Save to Libraryฏูİı|]",
|
||||||
|
"exportToLibrary": "[G'Export nodes to libraryฏูİı|]"
|
||||||
|
},
|
||||||
|
"palette": {
|
||||||
|
"noInfo": "[G'no information availableฏูİı|]",
|
||||||
|
"popOverError": "[G'Error generating pop-over label for '__type__'.ฏูİı|]"
|
||||||
|
},
|
||||||
|
"tabInfo": {
|
||||||
|
"node": "[G'Nodeฏูİı|]",
|
||||||
|
"type": "[G'Typeฏูİı|]",
|
||||||
|
"id": "[G'IDฏูİı|]",
|
||||||
|
"subflow": "[G'Subflowฏูİı|]",
|
||||||
|
"name": "[G'nameฏูİı|]",
|
||||||
|
"instances": "[G'instancesฏูİı|]",
|
||||||
|
"properties": "[G'Propertiesฏูİı|]",
|
||||||
|
"blank": "[G'blankฏูİı|]"
|
||||||
|
},
|
||||||
|
"workspaces": {
|
||||||
|
"subflow": "[G'Subflow: ฏูİı|]"
|
||||||
|
}
|
||||||
|
}
|
91
locales/zz-ZZ/runtime.json
Normal file
91
locales/zz-ZZ/runtime.json
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
{
|
||||||
|
"runtime": {
|
||||||
|
"welcome": "[G'Welcome to Node-REDฏูİı|]",
|
||||||
|
"version": "[G'__component__ version: __version__ฏูİı|]",
|
||||||
|
"paths": {
|
||||||
|
"settings": "[G'Settings file : __path__ฏูİı|]"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
"server": {
|
||||||
|
"loading": "[G'Loading palette nodesฏูİı|]",
|
||||||
|
"errors": "[G'Failed to register __count__ node typeฏูİı|]",
|
||||||
|
"errors_plural": "[G'Failed to register __count__ node typesฏูİı|]",
|
||||||
|
"errors-help": "[G'Run with -v for detailsฏูİı|]",
|
||||||
|
"missing-modules": "[G'Missing node modules:ฏูİı|]",
|
||||||
|
"removing-modules": "[G'Removing modules from configฏูİı|]",
|
||||||
|
"added-types": "[G'Added node types:ฏูİı|]",
|
||||||
|
"removed-types": "[G'Removed node types:ฏูİı|]",
|
||||||
|
"install": {
|
||||||
|
"invalid": "[G'Invalid module nameฏูİı|]",
|
||||||
|
"installing": "[G'Installing module: __name__ฏูİı|]",
|
||||||
|
"installed": "[G'Installed module: __name__ฏูİı|]",
|
||||||
|
"install-failed": "[G'Install failedฏูİı|]",
|
||||||
|
"install-failed-long": "[G'Installation of module __name__ failed:ฏูİı|]",
|
||||||
|
"install-failed-not-found": "[G'$t(install-failed-long) module not foundฏูİı|]",
|
||||||
|
|
||||||
|
"uninstalling": "[G'Uninstalling module: __name__ฏูİı|]",
|
||||||
|
"uninstall-failed": "[G'Uninstall failedฏูİı|]",
|
||||||
|
"uninstall-failed-long": "[G'Uninstall of module __name__ failed:ฏูİı|]",
|
||||||
|
"uninstalled": "[G'Uninstalled module: __name__ฏูİı|]"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
"api": {
|
||||||
|
"flows": {
|
||||||
|
"error-save": "[G'Error saving flows: __message__ฏูİı|]"
|
||||||
|
},
|
||||||
|
"library": {
|
||||||
|
"error-load-entry": "[G'Error loading library entry '__path__': __message__ฏูİı|]",
|
||||||
|
"error-save-entry": "[G'Error saving library entry '__path__': __message__ฏูİı|]",
|
||||||
|
"error-load-flow": "[G'Error loading flow '__path__': __message__ฏูİı|]",
|
||||||
|
"error-save-flow": "[G'Error saving flow '__path__': __message__ฏูİı|]"
|
||||||
|
},
|
||||||
|
"nodes": {
|
||||||
|
"enabled": "[G'Enabled node types:ฏูİı|]",
|
||||||
|
"disabled": "[G'Disabled node types:ฏูİı|]",
|
||||||
|
"error-enable": "[G'Failed to enable node:ฏูİı|]"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
"comms": {
|
||||||
|
"error": "[G'Communication channel error: __message__ฏูİı|]",
|
||||||
|
"error-server": "[G'Communication server error: __message__ฏูİı|]",
|
||||||
|
"error-send": "[G'Communication send error: __message__ฏูİı|]"
|
||||||
|
},
|
||||||
|
|
||||||
|
"nodes": {
|
||||||
|
"credentials": {
|
||||||
|
"error":"[G'Error loading credentials: __message__ฏูİı|]",
|
||||||
|
"not-registered": "[G'Credential type '__type__' is not registeredฏูİı|]"
|
||||||
|
},
|
||||||
|
"flows": {
|
||||||
|
"registered-missing": "[G'Missing type registered: __type__ฏูİı|]",
|
||||||
|
"error": "[G'Error loading flows: __message__ฏูİı|]",
|
||||||
|
"starting-modified-nodes": "[G'Starting modified nodesฏูİı|]",
|
||||||
|
"starting-modified-flows": "[G'Starting modified flowsฏูİı|]",
|
||||||
|
"starting-flows": "[G'Starting flowsฏูİı|]",
|
||||||
|
"started-modified-nodes": "[G'Started modified nodesฏูİı|]",
|
||||||
|
"started-modified-flows": "[G'Started modified flowsฏูİı|]",
|
||||||
|
"started-flows": "[G'Started flowsฏูİı|]",
|
||||||
|
"stopping-modified-nodes": "[G'Stopping modified nodesฏูİı|]",
|
||||||
|
"stopping-modified-flows": "[G'Stopping modified flowsฏูİı|]",
|
||||||
|
"stopping-flows": "[G'Stopping flowsฏูİı|]",
|
||||||
|
"stopped-modified-nodes": "[G'Stopped modified nodesฏูİı|]",
|
||||||
|
"stopped-modified-flows": "[G'Stopped modified flowsฏูİı|]",
|
||||||
|
"stopped-flows": "[G'Stopped flowsฏูİı|]",
|
||||||
|
"stopped": "[G'Stoppedฏูİı|]",
|
||||||
|
"missing-types": "[G'Waiting for missing types to be registered:ฏูİı|]"
|
||||||
|
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
"storage": {
|
||||||
|
"localfilesystem": {
|
||||||
|
"user-dir": "[G'User directory : __path__ฏูİı|]",
|
||||||
|
"flows-file": "[G'Flows file : __path__ฏูİı|]",
|
||||||
|
"create": "[G'Creating new flow fileฏูİı|]"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user