node-red-contrib-line-messaging-api 0.4.1 → 0.4.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/.claude/settings.local.json +12 -0
  2. package/CLAUDE.md +193 -0
  3. package/README.ja.md +171 -0
  4. package/README.md +94 -61
  5. package/nodes/_new/push/push.js +1 -1
  6. package/nodes/_new/reply/reply.html +6 -7
  7. package/nodes/_new/reply/reply.js +1 -1
  8. package/nodes/bloadcast/bloadcast.html +4 -4
  9. package/nodes/bloadcast/locales/ja/bloadcast.json +9 -0
  10. package/nodes/config/config.html +105 -31
  11. package/nodes/config/config.js +2 -2
  12. package/nodes/config/locales/en-US/config.json +14 -0
  13. package/nodes/config/locales/ja/config.json +14 -0
  14. package/nodes/getBotInfo/getBotInfo.html +11 -8
  15. package/nodes/getBotInfo/locales/en-US/getBotInfo.json +9 -0
  16. package/nodes/getBotInfo/locales/ja/getBotInfo.json +9 -0
  17. package/nodes/getProfile/getProfile.html +6 -6
  18. package/nodes/getProfile/locales/en-US/getProfile.json +8 -0
  19. package/nodes/getProfile/locales/ja/getProfile.json +8 -0
  20. package/nodes/limit/limit.html +3 -3
  21. package/nodes/limit/locales/ja/limit.json +8 -0
  22. package/nodes/loading/loading.html +7 -10
  23. package/nodes/loading/locales/ja/loading.json +10 -0
  24. package/nodes/push/locales/ja/push.json +10 -0
  25. package/nodes/push/push.html +4 -5
  26. package/nodes/reply/locales/ja/reply.json +7 -0
  27. package/nodes/reply/reply.html +5 -5
  28. package/nodes/webhook/locales/en-US/Webhook.json +8 -0
  29. package/nodes/webhook/locales/ja/Webhook.json +8 -0
  30. package/nodes/webhook/webhook.html +2 -2
  31. package/package.json +11 -7
  32. package/nodes/_new/notify/notify.html +0 -39
  33. package/nodes/_new/notify/notify.js +0 -57
  34. package/nodes/notify/notify.html +0 -42
  35. package/nodes/notify/notify.js +0 -38
@@ -25,22 +25,22 @@
25
25
  <script type="text/x-red" data-template-name="BloadcastMessage">
26
26
 
27
27
  <div class="form-row">
28
- <label for="node-input-name"><i class="icon-tag"></i> Name</label>
28
+ <label for="node-input-name"><i class="icon-tag"></i> <span data-i18n="bloadcast.label.name">名前</span></label>
29
29
  <input type="text" id="node-input-name" placeholder="Name">
30
30
  </div>
31
31
 
32
32
  <div class="form-row">
33
- <label for="node-input-channelSecret"><i class="icon-tag"></i> Secret</label>
33
+ <label for="node-input-channelSecret"><i class="icon-tag"></i> <span data-i18n="bloadcast.label.channelSecret">チャンネルシークレット</span></label>
34
34
  <input type="password" id="node-input-channelSecret" placeholder="ChannelSecret">
35
35
  </div>
36
36
 
37
37
  <div class="form-row">
38
- <label for="node-input-channelAccessToken"><i class="icon-tag"></i> AccessToken</label>
38
+ <label for="node-input-channelAccessToken"><i class="icon-tag"></i> <span data-i18n="bloadcast.label.channelAccessToken">チャンネルアクセストークン</span></label>
39
39
  <input type="password" id="node-input-channelAccessToken" placeholder="ChannelAccessToken">
40
40
  </div>
41
41
 
42
42
  </script>
43
43
 
44
44
  <script type="text/x-red" data-help-name="BloadcastMessage">
45
- <p>Send a push message to all your BOT friends.</p>
45
+ <p>Broadcasts messages to all LINE Bot friends.</p>
46
46
  </script>
@@ -0,0 +1,9 @@
1
+ {
2
+ "bloadcast": {
3
+ "label": {
4
+ "name": "名前",
5
+ "channelSecret": "チャンネルシークレット",
6
+ "channelAccessToken": "チャンネルアクセストークン"
7
+ }
8
+ }
9
+ }
@@ -3,9 +3,7 @@
3
3
  category: 'config',
4
4
  color: '#00afd5',
5
5
  defaults: {
6
- // botName は既存のまま
7
6
  botName: { value: "" },
8
- // botIconUrl を追加
9
7
  botIconUrl: { value: "" }
10
8
  },
11
9
  credentials: {
@@ -19,61 +17,133 @@
19
17
  oneditprepare: function () {
20
18
  const node = this;
21
19
 
22
- // すでに保存されている botIconUrl があれば表示する
20
+ // --- バリデーションのための設定 ---
21
+ const validationTip = $("#node-config-validation-tip");
22
+
23
+ function validate() {
24
+ let errorMessages = [];
25
+ const hasWhitespace = /\s/;
26
+ const hasFullWidth = /[^\x00-\x7F]/;
27
+
28
+ // 1. Bot Name のチェック
29
+ if ($("#node-config-input-botName").val() === "") {
30
+ let message = node._("lineConfig.validation.botNameRequired");
31
+ if (!message || message === "lineConfig.validation.botNameRequired") {
32
+ message = "Bot名は必須です。";
33
+ }
34
+ errorMessages.push("・" + message);
35
+ }
36
+
37
+ // 2. Channel Secret のチェック
38
+ const secret = $("#node-config-input-LineChannelSecret").val();
39
+ if (secret === "") {
40
+ let message = node._("lineConfig.validation.channelSecretRequired");
41
+ if (!message || message === "lineConfig.validation.channelSecretRequired") {
42
+ message = "Channel Secret は必須です。";
43
+ }
44
+ errorMessages.push("・" + message);
45
+ } else if (hasWhitespace.test(secret)) {
46
+ errorMessages.push("・Channel Secret にスペースや改行は含められません。");
47
+ } else if (hasFullWidth.test(secret)) {
48
+ errorMessages.push("・Channel Secret に全角文字は含められません。");
49
+ } else if (secret.length !== 32) {
50
+ errorMessages.push("・Channel Secret は32文字で入力してください。");
51
+ }
52
+
53
+ // 3. Channel Access Token のチェック
54
+ const token = $("#node-config-input-LineChannelAccessToken").val();
55
+ if (token === "") {
56
+ let message = node._("lineConfig.validation.channelAccessTokenRequired");
57
+ if (!message || message === "lineConfig.validation.channelAccessTokenRequired") {
58
+ message = "Channel Access Token は必須です。";
59
+ }
60
+ errorMessages.push("・" + message);
61
+ } else if (hasWhitespace.test(token)) {
62
+ errorMessages.push("・Channel Access Token にスペースや改行は含められません。");
63
+ } else if (hasFullWidth.test(token)) {
64
+ errorMessages.push("・Channel Access Token に全角文字は含められません。");
65
+ } else if (token.length < 150) {
66
+ errorMessages.push("・Channel Access Token が短すぎます。正しい値を貼り付けてください。");
67
+ }
68
+
69
+ if (errorMessages.length > 0) {
70
+ $("#node-config-dialog-ok").prop("disabled", true);
71
+ validationTip.html(errorMessages.join('<br/>'));
72
+ validationTip.show();
73
+ } else {
74
+ $("#node-config-dialog-ok").prop("disabled", false);
75
+ validationTip.hide();
76
+ }
77
+ }
78
+
79
+ $("#node-config-input-botName, #node-config-input-LineChannelSecret, #node-config-input-LineChannelAccessToken")
80
+ .on('keyup input change', validate);
81
+
82
+ validate(); // 初期チェック
83
+
84
+ // --- アイコン取得機能(復元) ---
85
+
86
+ // 起動時に保存済みのアイコンがあれば表示
23
87
  if (node.botIconUrl) {
24
- const botIconImg = document.getElementById("node-config-botIcon");
25
- botIconImg.src = node.botIconUrl;
26
- botIconImg.style.display = "block";
88
+ $("#node-config-botIcon").attr("src", node.botIconUrl).show();
27
89
  }
28
90
 
29
- // 「Bot名&アイコンを取得」ボタンイベント
30
- const btnFetch = document.getElementById("node-config-fetch-info");
31
- btnFetch.addEventListener("click", async () => {
32
- const channelSecret = document.getElementById("node-config-input-LineChannelSecret").value;
33
- const channelAccessToken = document.getElementById("node-config-input-LineChannelAccessToken").value;
91
+ // 「Bot名&アイコンを取得」ボタンのクリックイベント
92
+ $("#node-config-fetch-info").on("click", async () => {
93
+ const channelSecret = $("#node-config-input-LineChannelSecret").val();
94
+ const channelAccessToken = $("#node-config-input-LineChannelAccessToken").val();
34
95
 
35
96
  if (!channelSecret || !channelAccessToken) {
36
- alert("Channel Secret と Access Token を入力してください。");
97
+ RED.notify(node._("message.fetchingBotInfo"), "warning");
37
98
  return;
38
99
  }
39
100
 
101
+ // ★★★ ここからがAPIに問い合わせる復元部分です ★★★
40
102
  try {
41
103
  const response = await fetch("line-config/bot-info", {
42
104
  method: "POST",
43
105
  headers: { "Content-Type": "application/json" },
44
106
  body: JSON.stringify({ channelSecret, channelAccessToken })
45
107
  });
108
+
46
109
  if (!response.ok) {
47
- throw new Error(await response.text());
110
+ const errorText = await response.text();
111
+ throw new Error("API Error: " + errorText);
48
112
  }
49
113
 
50
114
  const botInfo = await response.json();
51
115
 
52
- // Bot Name をテキストボックスに反映
116
+ // Bot Name をテキストボックスに反映し、バリデーションを再実行
53
117
  if (botInfo.displayName) {
54
- document.getElementById("node-config-input-botName").value = botInfo.displayName;
118
+ $("#node-config-input-botName").val(botInfo.displayName).trigger('change');
55
119
  }
56
120
 
57
121
  // Icon URL を hidden input にセット + 実際に表示
58
122
  if (botInfo.pictureUrl) {
59
- const botIconImg = document.getElementById("node-config-botIcon");
60
- botIconImg.src = botInfo.pictureUrl;
61
- botIconImg.style.display = "block";
62
-
63
- document.getElementById("node-config-input-botIconUrl").value = botInfo.pictureUrl;
123
+ $("#node-config-botIcon").attr("src", botInfo.pictureUrl).show();
124
+ $("#node-config-input-botIconUrl").val(botInfo.pictureUrl);
64
125
  } else {
65
- // pictureUrl がない or 取得失敗時
66
- document.getElementById("node-config-input-botIconUrl").value = "";
126
+ $("#node-config-input-botIconUrl").val("");
127
+ $("#node-config-botIcon").hide();
67
128
  }
129
+ RED.notify(node._("message.fetchSuccess"), "success");
68
130
  } catch (err) {
69
- alert("Bot情報を取得できませんでした: " + err.message);
131
+ RED.notify(node._("message.fetchError") + ": " + err.message, "error");
70
132
  }
133
+ // ★★★ ここまでが復元部分です ★★★
71
134
  });
72
135
  },
73
136
 
74
137
  oneditsave: function() {
75
- // Save 時に hidden input から this.botIconUrl に反映
76
- this.botIconUrl = document.getElementById("node-config-input-botIconUrl").value;
138
+ // alert() を削除し、console.log のみ残しました
139
+ if (this.isNew) {
140
+ console.log("新しい設定が追加されました。");
141
+ } else {
142
+ console.log("既存の設定が更新されました。");
143
+ }
144
+
145
+ // ★ アイコンURLを保存する処理を有効にしました
146
+ this.botIconUrl = $("#node-config-input-botIconUrl").val();
77
147
  }
78
148
  });
79
149
  </script>
@@ -85,24 +155,24 @@
85
155
 
86
156
  <div class="form-row">
87
157
  <label for="node-config-input-botName">
88
- <i class="fa fa-tag fa-fw"></i> Bot Name
158
+ <i class="fa fa-tag fa-fw"></i> <span data-i18n="label.botName">Bot名</span>
89
159
  </label>
90
160
  <input type="text" id="node-config-input-botName" placeholder="BOT Name">
91
161
  </div>
92
162
 
93
163
  <div class="form-row">
94
- <label for="node-config-input-LineChannelSecret">Channel Secret</label>
164
+ <label for="node-config-input-LineChannelSecret"><span data-i18n="label.channelSecret">Channel Secret</span></label>
95
165
  <input type="text" id="node-config-input-LineChannelSecret" placeholder="LINE Channel Secret">
96
166
  </div>
97
167
 
98
168
  <div class="form-row">
99
- <label for="node-config-input-LineChannelAccessToken">Channel Access Token</label>
169
+ <label for="node-config-input-LineChannelAccessToken"><span data-i18n="label.channelAccessToken">Channel Access Token</span></label>
100
170
  <input type="text" id="node-config-input-LineChannelAccessToken" placeholder="LINE Channel Access Token">
101
171
  </div>
102
172
 
103
173
  <!-- Bot Icon 表示エリア -->
104
174
  <div class="form-row">
105
- <label>Bot Icon</label><br/>
175
+ <label><span data-i18n="label.botIcon">Bot Icon</span></label><br/>
106
176
  <img id="node-config-botIcon" src=""
107
177
  style="display:none; max-width: 100px; border-radius: 10%;" />
108
178
  </div>
@@ -111,7 +181,11 @@
111
181
  <input type="hidden" id="node-config-input-botIconUrl" />
112
182
 
113
183
  <div class="form-row">
114
- <button type="button" id="node-config-fetch-info">Bot名&アイコンを取得</button>
184
+ <div id="node-config-validation-tip" class="form-tips" style="display: none; color: #a94442;"></div>
185
+ </div>
186
+
187
+ <div class="form-row">
188
+ <button type="button" id="node-config-fetch-info"><span data-i18n="label.fetchBotInfo">Bot名&アイコンを取得</span></button>
115
189
  </div>
116
190
  </div>
117
191
 
@@ -123,4 +197,4 @@
123
197
  color: white;
124
198
  }
125
199
  </style>
126
- </script>
200
+ </script>
@@ -22,7 +22,7 @@ module.exports = function(RED) {
22
22
  const channelSecret = req.body.channelSecret;
23
23
  const channelAccessToken = req.body.channelAccessToken;
24
24
  if (!channelSecret || !channelAccessToken) {
25
- return res.status(400).send("No channelSecret or channelAccessToken");
25
+ return res.status(400).send(RED._("validation.channelSecretRequired") || "No channelSecret or channelAccessToken");
26
26
  }
27
27
 
28
28
  const clientConfig = {
@@ -37,7 +37,7 @@ module.exports = function(RED) {
37
37
 
38
38
  } catch (err) {
39
39
  console.error("Failed to getBotInfo:", err);
40
- res.status(500).send(err.message || "Failed to get botInfo");
40
+ res.status(500).send(err.message || RED._("message.fetchError") || "Failed to get botInfo");
41
41
  }
42
42
  });
43
43
  }
@@ -0,0 +1,14 @@
1
+ {
2
+ "validation": {
3
+ "botNameRequired": "Bot Name is required!",
4
+ "channelSecretRequired": "Channel Secret is required!",
5
+ "channelAccessTokenRequired": "Channel Access Token is required!"
6
+ },
7
+ "label": {
8
+ "botName": "Bot Name",
9
+ "channelSecret": "Channel Secret",
10
+ "channelAccessToken": "Channel Access Token",
11
+ "botIcon": "Bot Icon",
12
+ "fetchBotInfo": "Fetch Bot Name & Icon"
13
+ }
14
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ "validation": {
3
+ "botNameRequired": "ボット名は必須です!",
4
+ "channelSecretRequired": "チャンネルシークレットは必須です!",
5
+ "channelAccessTokenRequired": "チャンネルアクセストークンは必須です!"
6
+ },
7
+ "label": {
8
+ "botName": "ボット名",
9
+ "channelSecret": "チャンネルシークレット",
10
+ "channelAccessToken": "チャンネルアクセストークン",
11
+ "botIcon": "ボットアイコン",
12
+ "fetchBotInfo": "Bot名&アイコンを取得"
13
+ }
14
+ }
@@ -21,24 +21,27 @@
21
21
  <div class="form-row">
22
22
  <label for="node-input-name">
23
23
  <i class="fa fa-tag"></i>
24
- <span data-i18n="node-red:common.label.name"></span>
24
+ <span data-i18n="getBotInfo.label.name">名前</span>
25
25
  </label>
26
- <input type="text" id="node-input-name" data-i18n="[placeholder]node-red:common.label.name">
26
+ <input type="text" id="node-input-name" placeholder="Name">
27
27
  </div>
28
28
 
29
29
  <!-- LINE Config -->
30
30
  <div class="form-row">
31
31
  <label for="node-input-lineConfig">
32
32
  <i class="fa fa-tag"></i>
33
- LINE Bot
34
- <span data-i18n="getBotInfo.label.lineConfig"></span>
35
- </label> <input type="text" id="node-input-lineConfig" data-i18n="[placeholder]getBotInfo.desc.lineConfig">
33
+ <span data-i18n="getBotInfo.label.lineConfig">LINE Bot設定</span>
34
+ </label>
35
+ <input type="text" id="node-input-lineConfig">
36
+ </div>
37
+
38
+ <!-- Bot情報取得ボタン -->
39
+ <div class="form-row">
40
+ <button type="button" id="node-getbotinfo-fetch"><span data-i18n="getBotInfo.label.fetchBotInfo">Bot情報を取得</span></button>
36
41
  </div>
37
42
 
38
43
  </script>
39
44
 
40
45
  <script type="text/html" data-help-name="getBotInfo">
41
- <p>BOTの情報を取得します。</p>
46
+ <p>Gets the BOT information!</p>
42
47
  </script>
43
-
44
-
@@ -0,0 +1,9 @@
1
+ {
2
+ "getBotInfo": {
3
+ "label": {
4
+ "name": "Name",
5
+ "lineConfig": "LINE Bot Configuration",
6
+ "fetchBotInfo": "Fetch Bot Info"
7
+ }
8
+ }
9
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "getBotInfo": {
3
+ "label": {
4
+ "name": "名前",
5
+ "lineConfig": "LINE Bot設定",
6
+ "fetchBotInfo": "Bot情報を取得"
7
+ }
8
+ }
9
+ }
@@ -21,24 +21,24 @@
21
21
  <div class="form-row">
22
22
  <label for="node-input-name">
23
23
  <i class="fa fa-tag"></i>
24
- <span data-i18n="node-red:common.label.name"></span>
24
+ <span data-i18n="getProfile.label.name">名前</span>
25
25
  </label>
26
- <input type="text" id="node-input-name" data-i18n="[placeholder]node-red:common.label.name">
26
+ <input type="text" id="node-input-name" placeholder="Name">
27
27
  </div>
28
28
 
29
29
  <!-- LINE Config -->
30
30
  <div class="form-row">
31
31
  <label for="node-input-lineConfig">
32
32
  <i class="fa fa-tag"></i>
33
- LINE Bot
34
- <span data-i18n="getProfile.label.lineConfig"></span>
35
- </label> <input type="text" id="node-input-lineConfig" data-i18n="[placeholder]getProfile.desc.lineConfig">
33
+ <span data-i18n="getProfile.label.lineConfig">LINE Bot設定</span>
34
+ </label>
35
+ <input type="text" id="node-input-lineConfig">
36
36
  </div>
37
37
 
38
38
  </script>
39
39
 
40
40
  <script type="text/html" data-help-name="getProfile">
41
- <p>プロフィールを取得します。</p>
41
+ <p>Gets the user profile information.</p>
42
42
  </script>
43
43
 
44
44
 
@@ -0,0 +1,8 @@
1
+ {
2
+ "getProfile": {
3
+ "label": {
4
+ "name": "Name",
5
+ "lineConfig": "Bot Configuration"
6
+ }
7
+ }
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "getProfile": {
3
+ "label": {
4
+ "name": "名前",
5
+ "lineConfig": "LINE Bot設定"
6
+ }
7
+ }
8
+ }
@@ -21,19 +21,19 @@
21
21
  <script type="text/html" data-template-name="Limit">
22
22
  <!-- 名前 -->
23
23
  <div class="form-row">
24
- <label for="node-input-name"><i class="icon-tag"></i> Name</label>
24
+ <label for="node-input-name"><i class="icon-tag"></i> <span data-i18n="limit.label.name">名前</span></label>
25
25
  <input type="text" id="node-input-name" placeholder="Name">
26
26
  </div>
27
27
 
28
28
  <div class="form-row">
29
29
  <label for="node-input-AccessToken">
30
30
  <i class="icon-tag"></i>
31
- Channel Access Token
31
+ <span data-i18n="limit.label.accessToken">チャンネルアクセストークン</span>
32
32
  </label>
33
33
  <input type="password" id="node-input-AccessToken" placeholder="LINE Limit AccessToken">
34
34
  </div>
35
35
  </script>
36
36
 
37
37
  <script type="text/x-red" data-help-name="Limit">
38
- <p>当月の送信メッセージのリミットを教えてくれます。</p>
38
+ <p>Returns the current month's message quota limits.</p>
39
39
  </script>
@@ -0,0 +1,8 @@
1
+ {
2
+ "limit": {
3
+ "label": {
4
+ "name": "名前",
5
+ "accessToken": "チャンネルアクセストークン"
6
+ }
7
+ }
8
+ }
@@ -20,7 +20,7 @@
20
20
 
21
21
  <script type="text/html" data-template-name="Loading">
22
22
  <div class="form-row">
23
- <label for="node-input-name"><i class="icon-tag"></i> Name</label>
23
+ <label for="node-input-name"><i class="icon-tag"></i> <span data-i18n="loading.label.name">名前</span></label>
24
24
  <input type="text" id="node-input-name" placeholder="Name">
25
25
  </div>
26
26
 
@@ -28,20 +28,19 @@
28
28
  <div class="form-row">
29
29
  <label for="node-input-lineConfig">
30
30
  <i class="fa fa-tag"></i>
31
- LINE Bot
32
- <span data-i18n="getProfile.label.lineConfig"></span>
31
+ <span data-i18n="loading.label.lineConfig">LINE Bot設定</span>
33
32
  </label> <input type="text" id="node-input-lineConfig" data-i18n="[placeholder]getProfile.desc.lineConfig">
34
33
  </div>
35
34
 
36
35
  <!-- chat ID / User ID -->
37
36
  <div class="form-row">
38
- <label for="node-input-targetId"><i class="icon-tag"></i> User Id</label>
37
+ <label for="node-input-targetId"><i class="icon-tag"></i> <span data-i18n="loading.label.targetId">ユーザーID</span></label>
39
38
  <input type="text" id="node-input-targetId" placeholder="User Id">
40
39
  </div>
41
40
 
42
41
  <div class="form-row">
43
42
  <label for="node-input-loadingSeconds">
44
- <i class="icon-timer"></i> Loading Seconds
43
+ <i class="icon-timer"></i> <span data-i18n="loading.label.loadingSeconds">ローディング秒数</span>
45
44
  </label>
46
45
  <select id="node-input-loadingSeconds">
47
46
  <option value="5">5</option>
@@ -60,13 +59,11 @@
60
59
  </div>
61
60
 
62
61
  <p>
63
- このノードは、指定した秒数だけローディングアニメーションを表示させます。<br>
64
- 現状(2024年12月に記載)、グループには対応してなく<br>
65
- UからはじまるユーザーIDのみ(個別チャット)です。
66
- 詳細は<a href="https://developers.line.biz/ja/reference/messaging-api/#display-a-loading-indicator" target="_blank">公式ドキュメント</a>を参照下さい。
62
+ Displays a loading indicator for the specified duration. Currently supports individual chats only (user IDs starting with 'U').
63
+ See <a href="https://developers.line.biz/ja/reference/messaging-api/#display-a-loading-indicator" target="_blank">official documentation</a> for details.
67
64
  </p>
68
65
  </script>
69
66
 
70
67
  <script type="text/html" data-help-name="Loading">
71
- <p>ローディングアニメーションを流します。</p>
68
+ <p>Displays a loading indicator animation to LINE users.</p>
72
69
  </script>
@@ -0,0 +1,10 @@
1
+ {
2
+ "loading": {
3
+ "label": {
4
+ "name": "名前",
5
+ "lineConfig": "LINE Bot設定",
6
+ "targetId": "ユーザーID",
7
+ "loadingSeconds": "ローディング秒数"
8
+ }
9
+ }
10
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "push": {
3
+ "label": {
4
+ "name": "名前",
5
+ "channelSecret": "チャンネルシークレット",
6
+ "channelAccessToken": "チャンネルアクセストークン",
7
+ "targetId": "ユーザーIDまたはグループID"
8
+ }
9
+ }
10
+ }
@@ -23,26 +23,25 @@
23
23
 
24
24
  <script type="text/x-red" data-template-name="PushMessage">
25
25
  <div class="form-row">
26
- <label for="node-input-name"><i class="icon-tag"></i> Name</label>
26
+ <label for="node-input-name"><i class="icon-tag"></i> <span data-i18n="push.label.name">名前</span></label>
27
27
  <input type="text" id="node-input-name" placeholder="Name">
28
28
  </div>
29
29
 
30
30
  <div class="form-row">
31
- <label for="node-input-channelSecret"><i class="icon-tag"></i> Secret</label>
31
+ <label for="node-input-channelSecret"><i class="icon-tag"></i> <span data-i18n="push.label.channelSecret">チャンネルシークレット</span></label>
32
32
  <input type="password" id="node-input-channelSecret" placeholder="ChannelSecret">
33
33
  </div>
34
34
 
35
35
  <div class="form-row">
36
- <label for="node-input-channelAccessToken"><i class="icon-tag"></i> AccessToken</label>
36
+ <label for="node-input-channelAccessToken"><i class="icon-tag"></i> <span data-i18n="push.label.channelAccessToken">チャンネルアクセストークン</span></label>
37
37
  <input type="password" id="node-input-channelAccessToken" placeholder="ChannelAccessToken">
38
38
  </div>
39
39
 
40
40
  <div class="form-row">
41
- <label for="node-input-targetId"><i class="icon-tag"></i> User Id or Group ID</label>
41
+ <label for="node-input-targetId"><i class="icon-tag"></i> <span data-i18n="push.label.targetId">ユーザーIDまたはグループID</span></label>
42
42
  <input type="text" id="node-input-targetId" placeholder="User Id or Group ID">
43
43
  </div>
44
44
 
45
- <p>こちらのノードは旧バージョンになります。Newバージョンの利用を検討してください。</p>
46
45
  <p>This node is the old version, please consider using the New version.</p>
47
46
  </script>
48
47
 
@@ -0,0 +1,7 @@
1
+ {
2
+ "reply": {
3
+ "label": {
4
+ "message": "返信メッセージ"
5
+ }
6
+ }
7
+ }
@@ -23,26 +23,26 @@
23
23
 
24
24
  <script type="text/x-red" data-template-name="ReplyMessage">
25
25
  <div class="form-row">
26
- <label for="node-input-name"><i class="icon-tag"></i> Name</label>
26
+ <label for="node-input-name"><i class="icon-tag"></i> <span data-i18n="common.label.name">Name</span></label>
27
27
  <input type="text" id="node-input-name" placeholder="Name">
28
28
  </div>
29
29
 
30
30
  <div class="form-row">
31
- <label for="node-input-channelSecret"><i class="icon-tag"></i> Secret</label>
31
+ <label for="node-input-channelSecret"><i class="icon-tag"></i> <span data-i18n="lineConfig.label.channelSecret">Secret</span></label>
32
32
  <input type="password" id="node-input-channelSecret" placeholder="ChannelSecret">
33
33
  </div>
34
34
 
35
35
  <div class="form-row">
36
- <label for="node-input-channelAccessToken"><i class="icon-tag"></i> AccessToken</label>
36
+ <label for="node-input-channelAccessToken"><i class="icon-tag"></i> <span data-i18n="lineConfig.label.channelAccessToken">AccessToken</span></label>
37
37
  <input type="password" id="node-input-channelAccessToken" placeholder="ChannelAccessToken">
38
38
  </div>
39
39
 
40
40
  <div class="form-row">
41
- <label for="node-input-replyMessage"><i class="icon-tag"></i> ReplyMessage</label>
41
+ <label for="node-input-replyMessage"><i class="icon-tag"></i> <span data-i18n="reply.label.message">ReplyMessage</span></label>
42
42
  <input type="text" id="node-input-replyMessage" placeholder="static text message here">
43
43
  </div>
44
44
  </script>
45
45
 
46
46
  <script type="text/x-red" data-help-name="ReplyMessage">
47
- <p>A simple node that converts the message payloads into all ReplyMessage characters</p>
47
+ <p>Sends reply messages to LINE users using reply tokens.</p>
48
48
  </script>
@@ -0,0 +1,8 @@
1
+ {
2
+ "Webhook": {
3
+ "label": {
4
+ "path": "Path",
5
+ "name": "Name"
6
+ }
7
+ }
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "Webhook": {
3
+ "label": {
4
+ "path": "パス",
5
+ "name": "名前"
6
+ }
7
+ }
8
+ }
@@ -45,11 +45,11 @@
45
45
 
46
46
  <script type="text/x-red" data-template-name="Webhook">
47
47
  <div class="form-row">
48
- <label for="node-input-url"><i class="fa fa-globe"></i> Path</label>
48
+ <label for="node-input-url"><i class="fa fa-globe"></i> <span data-i18n="Webhook.label.path">パス</span></label>
49
49
  <input id="node-input-url" type="text" placeholder="/webhook">
50
50
  </div>
51
51
  <div class="form-row">
52
- <label for="node-input-name"><i class="fa fa-tag"></i> Name</label>
52
+ <label for="node-input-name"><i class="fa fa-tag"></i> <span data-i18n="Webhook.label.name">名前</span></label>
53
53
  <input id="node-input-name" type="text" placeholder="Name">
54
54
  </div>
55
55
  </script>