1
0
mirror of https://github.com/node-red/node-red-nodes.git synced 2023-10-10 13:36:58 +02:00

Add Japanese translations for daemon Node (#843)

* Separate language resources

* Add Japanese translations for daemon Node
This commit is contained in:
Wataru Sato 2021-10-19 05:12:00 +09:00 committed by GitHub
parent e6b9da52aa
commit eec57351d0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 128 additions and 32 deletions

View File

@ -2,51 +2,50 @@
<script type="text/html" data-template-name="daemon">
<div class="form-row">
<label for="node-input-command"><i class="fa fa-file"></i> Command</label>
<input type="text" id="node-input-command" placeholder="command">
<label for="node-input-command"><i class="fa fa-file"></i><span data-i18n="daemon.label.command"></span></label>
<input type="text" id="node-input-command" data-i18n="[placeholder]daemon.label.command">
</div>
<div class="form-row">
<label for="node-input-args"><i class="fa fa-list"></i> Arguments</label>
<input type="text" id="node-input-args" placeholder="space separated arguments">
<label for="node-input-args"><i class="fa fa-list"></i><span data-i18n="daemon.label.arguments"></span></label>
<input type="text" id="node-input-args" data-i18n="[placeholder]daemon.placeholder.arguments">
</div>
<div class="form-row">
<label>&nbsp;</label>
<input type="checkbox" id="node-input-autorun" style="display:inline-block; width: auto; vertical-align:baseline;">
<label for="node-input-autorun" style="width: 70%;">Auto-start daemon on deploy ?</label>
<label for="node-input-autorun" style="width: 70%;"><span data-i18n="daemon.label.autostart"></span></label>
</div>
<div class="form-row">
<label>&nbsp;</label>
<input type="checkbox" id="node-input-cr" style="display:inline-block; width:auto; vertical-align:baseline;">
<label for="node-input-cr" style="width: 70%;">Add [enter] to every message sent ?</label>
<label for="node-input-cr" style="width: 70%;"><span data-i18n="daemon.label.addenter"></span></label>
</div>
<div class="form-row">
<label>&nbsp;</label>
<input type="checkbox" id="node-input-redo" style="display:inline-block; width:auto; vertical-align:baseline;">
<label for="node-input-redo" style="width: 70%;">Relaunch command on exit or error ?</label>
<label for="node-input-redo" style="width: 70%;"><span data-i18n="daemon.label.relaunch"></span></label>
</div>
<div class="form-row">
<label for="node-input-op"> and</label>
<label for="node-input-op"><span data-i18n="daemon.label.reply"></span></label>
<select id="node-input-op" style='width:70%'>
<option value="buffer">leave reply as a buffer</option>
<option value="string">format reply as a string</option>
<option value="lines">output lines of text</option>
<option value="number">try to convert reply to a number</option>
<option value="buffer" data-i18n="[label]daemon.option.reply.buffer"></option>
<option value="string" data-i18n="[label]daemon.option.reply.string"></option>
<option value="lines" data-i18n="[label]daemon.option.reply.lines"></option>
<option value="number" data-i18n="[label]daemon.option.reply.number"></option>
</select>
</div>
<div class="form-row">
<label for="node-input-closer"> on close</label>
<label for="node-input-closer"><span data-i18n="daemon.label.onclose"></span></label>
<select id="node-input-closer" style='width:70%'>
<option value="SIGKILL">kill process immediately</option>
<option value="SIGTERM">try to terminate process</option>
<option value="SIGINT">try to interrupt process</option>
<option value="SIGKILL" data-i18n="[label]daemon.option.onclose.sigkill"></option>
<option value="SIGTERM" data-i18n="[label]daemon.option.onclose.sigterm"></option>
<option value="SIGINT" data-i18n="[label]daemon.option.onclose.sigint"></option>
</select>
</div>
<div class="form-row">
<label for="node-input-name"><i class="fa fa-tag"></i> Name</label>
<input type="text" id="node-input-name" placeholder="Name">
<label for="node-input-name"><i class="fa fa-tag"></i><span data-i18n="node-red:common.label.name"></span></label>
<input type="text" id="node-input-name" data-i18n="[placeholder]node-red:common.label.name">
</div>
<div class="form-tips"><b>Note:</b> The command should just be the actual command.
All parameters should be passed in as arguments.</div>
<div class="form-tips"><span data-i18n="[html]daemon.tip"></span></div>
</script>
<script type="text/javascript">

View File

@ -18,7 +18,7 @@ module.exports = function(RED) {
if (this.args.match(/^\[.*\]$/)) {
try { this.args = JSON.parse(this.args); }
catch(e) {
node.warn("Bad parameters - should be a JSON array or space separated")
node.warn(RED._("daemon.errors.badparams"))
}
}
else { this.args = this.args.match(/("[^"]*")|[^ ]+/g); }
@ -42,7 +42,7 @@ module.exports = function(RED) {
}
if (RED.settings.verbose) { node.log("inp: "+msg.payload); }
if (node.child !== null && node.running) { node.child.stdin.write(msg.payload); }
else { node.warn("Command not running"); }
else { node.warn(RED._("daemon.errors.notrunning")); }
lastmsg = msg;
}
}
@ -51,13 +51,13 @@ module.exports = function(RED) {
function runit() {
var line = "";
if (!node.cmd || (typeof node.cmd !== "string") || (node.cmd.length < 1)) {
node.status({fill:"grey",shape:"ring",text:"no command"});
node.status({fill:"grey",shape:"ring",text:RED._("daemon.status.nocommand")});
return;
}
try {
node.child = spawn(node.cmd, node.args);
if (RED.settings.verbose) { node.log(node.cmd+" "+JSON.stringify(node.args)); }
node.status({fill:"green",shape:"dot",text:"running"});
node.status({fill:"green",shape:"dot",text:RED._("daemon.status.running")});
node.running = true;
node.child.stdout.on('data', function (data) {
@ -97,21 +97,21 @@ module.exports = function(RED) {
var rc = code;
if (code === null) { rc = signal; }
node.send([null,null,{payload:rc}]);
node.status({fill:"red",shape:"ring",text:"stopped"});
node.status({fill:"red",shape:"ring",text:RED._("daemon.status.stopped")});
});
node.child.on('error', function (err) {
if (err.errno === "ENOENT") { node.warn('Command not found'); }
else if (err.errno === "EACCES") { node.warn('Command not executable'); }
if (err.errno === "ENOENT") { node.warn(RED._("daemon.errors.notfound")); }
else if (err.errno === "EACCES") { node.warn(RED._("daemon.errors.notexecutable")); }
else { node.log('error: ' + err); }
node.status({fill:"red",shape:"ring",text:"error"});
node.status({fill:"red",shape:"ring",text:RED._("daemon.status.error")});
});
}
catch(e) {
if (e.errno === "ENOENT") { node.warn('Command not found'); }
else if (e.errno === "EACCES") { node.warn('Command not executable'); }
if (e.errno === "ENOENT") { node.warn(RED._("daemon.errors.notfound")); }
else if (e.errno === "EACCES") { node.warn(RED._("daemon.errors.notexecutable")); }
else { node.error(e); }
node.status({fill:"red",shape:"ring",text:"error"});
node.status({fill:"red",shape:"ring",text:RED._("daemon.status.error")});
node.running = false;
}
}
@ -119,7 +119,7 @@ module.exports = function(RED) {
if (node.redo === true) {
var loop = setInterval( function() {
if (!node.running) {
node.warn("Restarting : " + node.cmd);
node.warn(RED._("daemon.errors.restarting") + " : " + node.cmd);
runit();
}
}, 10000); // Restart after 10 secs if required

View File

@ -0,0 +1,43 @@
{
"daemon": {
"label": {
"command": "Command",
"arguments": "Arguments",
"autostart": "Auto-start daemon on deploy ?",
"addenter": "Add [enter] to every message sent ?",
"relaunch": "Relaunch command on exit or error ?",
"reply": "and",
"onclose": "on close"
},
"placeholder": {
"arguments": "space separated arguments"
},
"option": {
"reply": {
"buffer": "leave reply as a buffer",
"string": "format reply as a string",
"lines": "output lines of text",
"number": "try to convert reply to a number"
},
"onclose": {
"sigkill": "kill process immediately",
"sigterm": "try to terminate process",
"sigint": "try to interrupt process"
}
},
"tip": "<b>Note:</b> The command should just be the actual command. All parameters should be passed in as arguments.",
"status": {
"nocommand": "no command",
"running": "running",
"stopped": "stopped",
"error": "error"
},
"errors": {
"badparams": "Bad parameters - should be a JSON array or space separated",
"notrunning": "Command not running",
"notfound": "Command not found",
"notexecutable": "Command not executable",
"restarting": "Restarting"
}
}
}

View File

@ -0,0 +1,11 @@
<script type="text/html" data-help-name="daemon">
<p>長時間実行されるシステムコマンドを呼び出します。<code>msg.payload</code>をプロセスのstdinに送信します。</p>
<p>実行中のコマンドから3つの出力stdout, stderr, リターンコード)を提供します。</p>
<p>パラメータは、スペース区切り、引用符付きスペース区切り、もしくはJavaScript配列のいずれかです。例えば、`aa bb`、`"cc dd"`、もしくは`["aa","bb cc""]`です。</p>
<p>呼び出したプログラムが停止した場合(つまり、リターンコードが生成された場合)、本ノードはコマンドの再実行を試みます。</p>
<p><code>msg.kill</code>にシグナル名SIGINT, SIGHUPを設定するとプロセスが停止しますが、リスタートフラグを設定すると自動的に再起動します。
<code>msg.start</code>を送信してもプロセスを再起動します。</p>
<p><b>注意:</b> アプリケーションによっては自動的に出力行をバッファリングするものもあります。この動作を無効化することをお勧めします。
例えば、Pythonアプリを実行する場合、<code>-u</code>パラメータは出力のバッファリングを抑制します。</p>
</script>

View File

@ -0,0 +1,43 @@
{
"daemon": {
"label": {
"command": "コマンド",
"arguments": "引数",
"autostart": "デプロイ時にデーモンを自動起動する",
"addenter": "全てのメッセージ送信に[enter]を追加する",
"relaunch": "終了またはエラー時にコマンドを再実行する",
"reply": "応答",
"onclose": "クローズ時"
},
"placeholder": {
"arguments": "スペースで区切られた引数"
},
"option": {
"reply": {
"buffer": "応答をバッファのままにする",
"string": "応答を文字列にフォーマットする",
"lines": "テキスト出力する",
"number": "応答を数字に変換するよう試みる"
},
"onclose": {
"sigkill": "プロセスを即時強制終了(kill)する",
"sigterm": "プロセスの終了(terminate)を試みる",
"sigint": "プロセスの中断(interrupt)を試みる"
}
},
"tip": "<b>注意:</b> コマンドは実際のコマンドのみとしてください。全てのパラメータは引数として渡す必要があります。",
"status": {
"nocommand": "コマンド未設定",
"running": "実行中",
"stopped": "停止",
"error": "エラー"
},
"errors": {
"badparams": "パラメータ不正 - JSON配列またはスペースで区切る必要があります",
"notrunning": "コマンドは実行されていません",
"notfound": "コマンドが見つかりません",
"notexecutable": "コマンドが実行できません",
"restarting": "再起動中"
}
}
}