Dalam dokumen ini, kita akan membahas cara menggunakan JSON untuk menentukan input, kolom (termasuk label), dan koneksi di blok Anda. Jika Anda belum memahami istilah-istilah ini, lihat Anatomi blok sebelum melanjutkan.
Anda juga dapat menentukan input, kolom, dan koneksi di JavaScript.
Ringkasan
Dalam JSON, Anda menjelaskan struktur blok dengan satu atau beberapa string pesan
(message0
, message1
, ...) dan array argumen yang sesuai (args0
,
args1
, ...). String pesan terdiri dari teks, yang dikonversi menjadi label,
dan token interpolasi (%1
, %2
, ...), yang menandai lokasi
koneksi dan kolom non-label. Array argumen menjelaskan cara menangani token interpolasi.
Misalnya, blok ini:
ditentukan oleh JSON berikut:
JSON
{
"message0": "set %1 to %2",
"args0": [
{
"type": "field_variable",
"name": "VAR",
"variable": "item",
"variableTypes": [""]
},
{
"type": "input_value",
"name": "VALUE"
}
]
}
Token interpolasi pertama (%1
) merepresentasikan kolom
variabel
(type: "field_variable"
). Kolom ini dijelaskan oleh objek pertama dalam array args0
. Token kedua (%2
) merepresentasikan koneksi input di akhir
input nilai
(type: "input_value"
). Token ini dijelaskan oleh objek kedua dalam array args0
.
Pesan dan input
Saat menandai koneksi, token interpolasi sebenarnya menandai akhir input yang berisi koneksi. Hal ini karena koneksi dalam input nilai dan pernyataan dirender di akhir input. Input berisi semua kolom (termasuk label) setelah input sebelumnya dan hingga token saat ini. Bagian berikut menunjukkan contoh pesan dan input yang dibuat dari pesan tersebut.
Contoh 1
JSON
{
"message0": "set %1 to %2",
"args0": [
{"type": "field_variable", ...} // token %1
{"type": "input_value", ...} // token %2
],
}
Tindakan ini akan membuat input nilai tunggal dengan tiga kolom: label ("set"
), kolom variabel, dan label lainnya ("to"
).
Contoh 2
JSON
{
"message0": "%1 + %2",
"args0": [
{"type": "input_value", ...} // token %1
{"type": "input_value", ...} // token %2
],
}
Tindakan ini akan membuat dua input nilai. Yang pertama tidak memiliki kolom dan yang kedua memiliki satu
kolom ("+"
).
Contoh 3
JSON
{
"message0": "%1 + %2 %3",
"args0": [
{"type": "input_value", ...} // token %1
{"type": "input_end_row", ...} // token %2
{"type": "input_value", ...} // token %3
],
}
Tindakan ini akan membuat:
- Input nilai tanpa kolom,
- Input akhir baris
dengan kolom label (
"+"
), yang menyebabkan input nilai berikutnya dirender pada baris baru, dan - Input nilai tanpa kolom.
Input dummy di akhir pesan
Jika string message
Anda diakhiri dengan teks atau kolom, Anda tidak perlu menambahkan token interpolasi untuk input dummy yang memuatnya -- Blockly akan menambahkannya untuk Anda. Misalnya, daripada menentukan blok lists_isEmpty
seperti ini:
JSON
{
"message0": "%1 is empty %2",
"args0": [
{"type": "input_value", ...} // token %1
{"type": "input_dummy", ...} // token %2
],
}
Anda dapat membiarkan Blockly menambahkan input dummy dan menentukannya seperti ini:
JSON
{
"message0": "%1 is empty",
"args0": [
{"type": "input_value", ...} // token %1
],
}
Penambahan otomatis input dummy di akhir memungkinkan penerjemah mengubah
message
tanpa perlu mengubah argumen yang menjelaskan token
interpolasi. Untuk mengetahui informasi selengkapnya, lihat Urutan token interpolasi.
implicitAlign
Dalam kasus yang jarang terjadi, input dummy di akhir yang dibuat secara otomatis harus disejajarkan
dengan "RIGHT"
atau "CENTRE"
. Default jika tidak ditentukan adalah "LEFT"
.
Dalam contoh di bawah, message0
adalah "send email to %1 subject %2 secure %3"
dan Blockly otomatis menambahkan input dummy untuk baris ketiga. Menetapkan
implicitAlign0
ke "RIGHT"
akan memaksa baris ini diratakan ke kanan.
implicitAlign
berlaku untuk semua input yang tidak ditentukan secara eksplisit dalam definisi
blok JSON, termasuk input akhir baris yang menggantikan karakter newline
('\n'
). Ada juga properti yang tidak digunakan lagi
lastDummyAlign0
yang memiliki perilaku yang sama dengan implicitAlign0
.
Saat mendesain blok untuk RTL (Arab dan Ibrani), kiri dan kanan dibalik.
Dengan demikian, "RIGHT"
akan menyelaraskan kolom ke kiri.
Beberapa pesan
Beberapa blok secara alami dibagi menjadi dua atau lebih bagian terpisah. Pertimbangkan blok pengulangan ini yang memiliki dua baris:
Jika blok ini dijelaskan dengan satu pesan, properti message0
akan menjadi "repeat %1 times %2 do %3"
, dengan %2
merepresentasikan input akhir baris. String ini sulit diterjemahkan karena
sulit untuk menjelaskan arti penggantian %2
. Input %2
akhir baris
mungkin juga tidak diinginkan dalam beberapa bahasa. Mungkin ada beberapa blok yang ingin membagikan teks baris kedua. Pendekatan yang lebih baik
adalah menggunakan lebih dari satu properti message
dan args
:
JSON
{
"message0": "repeat %1 times",
"args0": [
{"type": "input_value", ...} // token %1 in message0
],
"message1": "do %1",
"args1": [
{"type": "input_statement", ...} // token %1 in message1
],
}
Sejumlah properti message
, args
, dan implicitAlign
dapat ditentukan
dalam format JSON, dimulai dengan 0 dan diurutkan secara berurutan. Perhatikan bahwa
Block Factory tidak dapat membagi pesan menjadi beberapa bagian, tetapi
Anda dapat melakukannya secara manual dengan mudah.
Urutan token interpolasi
Saat melokalkan blok, Anda mungkin perlu mengubah urutan token interpolasi dalam pesan. Hal ini sangat penting dalam bahasa yang memiliki urutan kata yang berbeda dengan bahasa Inggris. Misalnya, kita mulai dengan blok yang ditentukan
oleh pesan "set %1 to %2"
:
Sekarang pertimbangkan bahasa hipotetis di mana "set %1 to %2"
perlu dibalik
untuk mengatakan "put %2 in %1"
. Mengubah pesan (termasuk urutan token interpolasi) dan membiarkan array argumen tidak berubah akan menghasilkan blok berikut:
Blockly otomatis mengubah urutan kolom, membuat input dummy, dan beralih dari input eksternal ke internal.
Kemampuan untuk mengubah urutan token interpolasi dalam pesan mempermudah pelokalan. Untuk mengetahui informasi selengkapnya, lihat interpolasi pesan JSON.
Penanganan teks
Teks di kedua sisi token interpolasi dipangkas spasi kosongnya.
Teks yang menggunakan karakter %
(misalnya, saat merujuk ke persentase) harus menggunakan
%%
agar tidak ditafsirkan sebagai token interpolasi.
Blockly juga otomatis mengganti karakter baris baru (\n
) dalam string pesan dengan input akhir baris.
JSON
{
"message0": "set %1\nto %2",
"args0": [
{"type": "field_variable", ...}, // token %1
{"type": "input_value", ...}, // token %2
]
}
Array argumen
Setiap string pesan dipasangkan dengan array args
dengan jumlah yang sama. Misalnya, message0
cocok dengan args0
. Token interpolasi
(%1
, %2
, ...) merujuk ke item array args
dan harus cocok dengan
array args0
sepenuhnya: tidak ada duplikat, tidak ada penghilangan. Nomor token merujuk pada
urutan item dalam array argumen; nomor tersebut tidak harus muncul
secara berurutan dalam string pesan.
Setiap objek dalam array argumen memiliki string
type
. Parameter lainnya bervariasi, bergantung pada jenisnya:
Anda juga dapat menentukan kolom kustom dan input kustom sendiri serta meneruskannya sebagai argumen.
Kolom alternatif
Setiap objek juga dapat memiliki kolom alt
. Jika Blockly tidak
mengenali type
objek, maka objek alt
akan digunakan sebagai gantinya. Misalnya, jika kolom baru bernama field_time
ditambahkan ke Blockly, blok yang menggunakan kolom ini dapat menggunakan alt
untuk menentukan penggantian field_input
untuk Blockly versi lama:
JSON
{
"message0": "sound alarm at %1",
"args0": [
{
"type": "field_time",
"name": "TEMPO",
"hour": 9,
"minutes": 0,
"alt":
{
"type": "field_input",
"name": "TEMPOTEXT",
"text": "9:00"
}
}
]
}
Objek alt
dapat memiliki objek alt
-nya sendiri, sehingga memungkinkan penggabungan.
Pada akhirnya, jika Blockly tidak dapat membuat objek dalam array args0
(setelah mencoba objek alt
apa pun), objek tersebut akan dilewati.