Discuss Scratch
- Discussion Forums
- » 日本語
- » Scratch 3.0 をハック(動作や構造を解析すること)しよう!
- Ryb-cham
-
Scratcher
74 posts
Scratch 3.0 をハック(動作や構造を解析すること)しよう!
scratchの翻訳データを見ていたのですが、
英語の場合 “SENSING_ONLINE”: “is online?”
日本語の場合 “SENSING_ONLINE”: “はオンライン?”
とあるのですが、実際上のようにonline?と表示されています。
“is online?”や“はオンライン?”と表示されていないあたり、この辺の翻訳データが反映されてなかったりするのでしょうか。
また、そうだった場合なぜ“online?”となっているのでしょうか。
有識者の方お願いします。
<online? :: sensing>のブロック、
英語の場合 “SENSING_ONLINE”: “is online?”
日本語の場合 “SENSING_ONLINE”: “はオンライン?”
とあるのですが、実際上のようにonline?と表示されています。
“is online?”や“はオンライン?”と表示されていないあたり、この辺の翻訳データが反映されてなかったりするのでしょうか。
また、そうだった場合なぜ“online?”となっているのでしょうか。
有識者の方お願いします。
- inoking
-
Scratcher
1000+ posts
Scratch 3.0 をハック(動作や構造を解析すること)しよう!
scratchの翻訳データを見ていたのですが、まず、どこの情報を見ているのかを明示お願いします。<online? :: sensing>のブロック、
英語の場合 “SENSING_ONLINE”: “is online?”
日本語の場合 “SENSING_ONLINE”: “はオンライン?”
とあるのですが、
〜略〜
- TNTSuperMan
-
Scratcher
100+ posts
Scratch 3.0 をハック(動作や構造を解析すること)しよう!
実際にブロックに表示される翻訳はscratch-blocks/msg/scratch_msgs.jsにあるようで、
まだそのscratch-l10nの新しい翻訳は反映されていませんでした。
要するにまだ反映されてないから“online?”になるってことです
まだそのscratch-l10nの新しい翻訳は反映されていませんでした。
要するにまだ反映されてないから“online?”になるってことです
- inoking
-
Scratcher
1000+ posts
Scratch 3.0 をハック(動作や構造を解析すること)しよう!
実際にブロックに表示される翻訳はscratch-blocks/msg/scratch_msgs.jsにあるようで、その辺の構造は、最近のソースコード一新により大きく変わっています。
まだそのscratch-l10nの新しい翻訳は反映されていませんでした。
要するにまだ反映されてないから“online?”になるってことです
オンラインに関係する処理をユーザー名との対比で調べましたが、
調べた限りではユーザー名だけが翻訳される理由は見つけられませんでした。
以下、関係処理を載せておきます。
VM側:
https://github.com/scratchfoundation/scratch-editor/blob/develop/packages/scratch-vm/src/blocks/scratch3_sensing.js
getOnline (args, util) { const status = window.navigator.onLine; if (typeof status === 'boolean') { return status; } // an empty string will evaluate as false in a Boolean context, // but it allows distinguishing between "false" and "unknown" if needed return ''; } getUsername (args, util) { return util.ioQuery('userData', 'getUsername'); }
GUI 側(ブロック定義 XML を生成?):
https://github.com/scratchfoundation/scratch-editor/blob/develop/packages/scratch-gui/src/lib/make-toolbox-xml.js
<block id="online" type="sensing_online" /> <block type="sensing_username"/> sensing_online: { defaultMessage: 'online', description: 'Label for the online status monitor when shown on the stage', id: 'gui.opcodeLabels.online' }, sensing_username: { defaultMessage: 'username', description: 'Label for the username monitor when shown on the stage', id: 'gui.opcodeLabels.username' },
GUI 側(ラベルの設定):
https://github.com/scratchfoundation/scratch-editor/blob/develop/packages/scratch-gui/src/lib/opcode-labels.js
this._translator = message => message.defaultMessage; this._opcodeMap.sensing_online.labelFn = () => this._translator(messages.sensing_online); this._opcodeMap.sensing_username.labelFn = () => this._translator(messages.sensing_username);
ブロック側(現在は使われていない?):
https://github.com/scratchfoundation/scratch-blocks/blob/develop/msg/messages.js
Blockly.Msg.SENSING_ONLINE = 'online?' Blockly.Msg.SENSING_USERNAME = 'username'
Last edited by inoking (June 28, 2026 03:27:49)
- llIlllIl
-
Scratcher
20 posts
Scratch 3.0 をハック(動作や構造を解析すること)しよう!
scratchのユーザー情報(参加日、ユーザーIDなど)は https://api.scratch.mit.edu/users/ユーザー名 から閲覧できますが、ユーザー名から情報を閲覧するのではなくユーザーIDから閲覧できるAPIは実際用意できるのでしょうか?
追記:また、削除されたコメントをapiで見ることはできるのでしょうか?そして、書こうとしたコメントが悪い言葉検知器に引っかからないかということをAPIで見ることはできますか?
追記:また、削除されたコメントをapiで見ることはできるのでしょうか?そして、書こうとしたコメントが悪い言葉検知器に引っかからないかということをAPIで見ることはできますか?
Last edited by llIlllIl (July 3, 2026 06:54:26)
- abee
-
Scratcher
1000+ posts
Scratch 3.0 をハック(動作や構造を解析すること)しよう!
バグ報告コーナー2 #3411から移動してきました。
変数やリストの情報がprojects.jsonのvariables, listsとmonitorsに重複して記録されているという話です。
Scratch 2.0ではどうだったのかと思って、sb2を見てみました。
monitorsはありません。プロジェクトを開くときに、常にモニターが最新の値を参照するのであれば、この方が合理的です。
キャッシュとして使うなら、意味があるかもと思いましたが、それもなさそうです。
変数やリストの情報がprojects.jsonのvariables, listsとmonitorsに重複して記録されているという話です。
Scratch 2.0ではどうだったのかと思って、sb2を見てみました。
"variables": [{
"name": "foo",
"value": 3,
"isPersistent": false
}],
"lists": [{
"listName": "bar",
"contents": ["a", "b", "c"],
"isPersistent": false,
"x": 5,
"y": 32,
"width": 102,
"height": 202,
"visible": true
}],キャッシュとして使うなら、意味があるかもと思いましたが、それもなさそうです。
Last edited by abee (Aug. 8, 2026 12:45:38)
- yukku
-
Scratcher
1000+ posts
Scratch 3.0 をハック(動作や構造を解析すること)しよう!
まずステージモニターの仕組みとして, 実際にブロックを繰り返し呼び出すことで表示すべき値を調べるようになっています. (ソースコード上の具体的な箇所を示そうとしたが, 複数のファイルに跨って記述されていて面倒なため断念. この辺りから探ってみてください)
そして, このmonitorsのvalueの値は, プロジェクトを開始してから最初のブロックの呼び出しで値が返ってくるまでの間に仮に入っている値のようです.
例として, JSON Hackで翻訳のブロックをステージモニターとして表示してみました. 翻訳が得られるまでの間, このvalueに設定した値が表示されていることが分かると思います.
そして, このmonitorsのvalueの値は, プロジェクトを開始してから最初のブロックの呼び出しで値が返ってくるまでの間に仮に入っている値のようです.
例として, JSON Hackで翻訳のブロックをステージモニターとして表示してみました. 翻訳が得られるまでの間, このvalueに設定した値が表示されていることが分かると思います.
- tuneninemuihito
-
Scratcher
87 posts
Scratch 3.0 をハック(動作や構造を解析すること)しよう!
このトピ初投稿です。
この分野についてあまりよく知らないので、何かが間違っているかもしれません。
vm.runtime.ioDevices.userData._usernameの値が影響を及ぼすのは、プロジェクトのどのオブジェクトまでですか?
この分野についてあまりよく知らないので、何かが間違っているかもしれません。
vm.runtime.ioDevices.userData._usernameの値が影響を及ぼすのは、プロジェクトのどのオブジェクトまでですか?
username意外に影響する場所はないのでしょうか?
- inoking
-
Scratcher
1000+ posts
Scratch 3.0 をハック(動作や構造を解析すること)しよう!
vm.runtime.ioDevices.userData._usernameの値が影響を及ぼすのは、プロジェクトのどのオブジェクトまでですか?少し古いソースコードですが、username意外に影響する場所はないのでしょうか?
scratch-vm 内の *.js で _username を grep すると以下のようになりました。
...\scratch-vm\src\blocks\scratch3_sensing.js(74,20) [SJIS]: sensing_username: this.getUsername,
...\scratch-vm\src\io\userData.js(3,14) [SJIS]: this._username = '';
...\scratch-vm\src\io\userData.js(12,14) [SJIS]: this._username = data.username;
...\scratch-vm\src\io\userData.js(20,21) [SJIS]: return this._username;
...\scratch-vm\src\serialization\sb2_specmap.js(1163,25) [SJIS]: opcode: 'sensing_username',
usernameだけだと思われます。