Bu belgede, bloğunuzdaki girişleri, alanları (etiketler dahil) ve bağlantıları tanımlamak için JSON'un nasıl kullanılacağı açıklanmaktadır. Bu terimlere aşina değilseniz devam etmeden önce Bir blokun yapısı başlıklı makaleyi inceleyin.
Girişlerinizi, alanlarınızı ve bağlantılarınızı JavaScript'te de tanımlayabilirsiniz.
Genel Bakış
JSON'da bir bloğun yapısını bir veya daha fazla mesaj dizesi (message0
, message1
, ...) ve bunlara karşılık gelen bağımsız değişken dizileriyle (args0
, args1
, ...) tanımlarsınız. Mesaj dizeleri, etiketlere dönüştürülen metinlerden ve bağlantıların ve etiket olmayan alanların konumlarını işaretleyen interpolasyon jetonlarından (%1
, %2
, ...) oluşur. Bağımsız değişken dizileri, enterpolasyon jetonlarının nasıl işleneceğini açıklar.
Örneğin, şu blok:
aşağıdaki JSON ile tanımlanır:
JSON
{
"message0": "set %1 to %2",
"args0": [
{
"type": "field_variable",
"name": "VAR",
"variable": "item",
"variableTypes": [""]
},
{
"type": "input_value",
"name": "VALUE"
}
]
}
İlk enterpolasyon jetonu (%1
), değişken bir alanı (type: "field_variable"
) temsil eder. args0
dizisindeki ilk nesneyle tanımlanır. İkinci jeton (%2
), değer girişinin (type: "input_value"
) sonundaki giriş bağlantısını temsil eder. args0
dizisindeki ikinci nesneyle tanımlanır.
Mesajlar ve girişler
Bir bağlantıyı işaretleyen bir enterpolasyon jetonu, aslında bağlantıyı içeren girişin sonunu işaretler. Bunun nedeni, değer ve ifade girişlerindeki bağlantıların girişin sonunda oluşturulmasıdır. Giriş, önceki girişten sonraki ve geçerli jetona kadar olan tüm alanları (etiketler dahil) içerir. Aşağıdaki bölümlerde örnek mesajlar ve bunlardan oluşturulan girişler gösterilmektedir.
1. Örnek
JSON
{
"message0": "set %1 to %2",
"args0": [
{"type": "field_variable", ...} // token %1
{"type": "input_value", ...} // token %2
],
}
Bu işlem, üç alanlı tek bir değer girişi oluşturur: bir etiket ("set"
), bir değişken alanı ve başka bir etiket ("to"
).
2. Örnek
JSON
{
"message0": "%1 + %2",
"args0": [
{"type": "input_value", ...} // token %1
{"type": "input_value", ...} // token %2
],
}
Bu işlemle iki değer girişi oluşturulur. Birincisinde alan yok, ikincisinde ise bir alan ("+"
) var.
3. Örnek
JSON
{
"message0": "%1 + %2 %3",
"args0": [
{"type": "input_value", ...} // token %1
{"type": "input_end_row", ...} // token %2
{"type": "input_value", ...} // token %3
],
}
Bu işlem sonucunda:
- Alan içermeyen bir değer girişi,
- Bir etiket alanına (
"+"
) sahip satır sonu girişi (bu giriş, aşağıdaki değer girişinin yeni bir satırda oluşturulmasına neden olur) ve - Alan içermeyen bir değer girişi.
İletinin sonundaki sahte giriş
message
dizeniz metin veya alanlarla bitiyorsa bunları içeren sahte giriş için bir enterpolasyon jetonu eklemeniz gerekmez. Blockly bunu sizin için ekler. Örneğin, lists_isEmpty
bloğunu şu şekilde tanımlamak yerine:
JSON
{
"message0": "%1 is empty %2",
"args0": [
{"type": "input_value", ...} // token %1
{"type": "input_dummy", ...} // token %2
],
}
Blockly'nin sahte girişi eklemesine izin verebilir ve bunu şu şekilde tanımlayabilirsiniz:
JSON
{
"message0": "%1 is empty",
"args0": [
{"type": "input_value", ...} // token %1
],
}
Sona eklenen sahte girişin otomatik olarak eklenmesi, çevirmenlerin message
karakterini, enterpolasyon jetonlarını açıklayan bağımsız değişkenleri değiştirmesine gerek kalmadan değiştirmesine olanak tanır. Daha fazla bilgi için Yerleştirme jetonu sırası başlıklı makaleyi inceleyin.
implicitAlign
Nadir durumlarda, otomatik olarak oluşturulan sondaki sahte girişin "RIGHT"
veya "CENTRE"
ile hizalanması gerekir. Belirtilmezse varsayılan değer "LEFT"
olur.
Aşağıdaki örnekte message0
, "send email to %1 subject %2 secure %3"
'dir ve Blockly, üçüncü satır için otomatik olarak sahte bir giriş ekler. implicitAlign0
ayarını "RIGHT"
olarak ayarlamak bu satırın sağa hizalanmasını zorunlu kılar.
implicitAlign
JSON blok tanımında açıkça tanımlanmayan tüm girişler için geçerlidir. Buna yeni satır karakterlerinin ('\n'
) yerine geçen satır sonu girişleri de dahildir. implicitAlign0
ile aynı davranışa sahip olan, kullanımdan kaldırılmış lastDummyAlign0
özelliği de vardır.
RTL (Arapça ve İbranice) için blok tasarlarken sol ve sağ tersine çevrilir.
Bu nedenle "RIGHT"
, alanları sola hizalar.
Birden fazla mesaj
Bazı bloklar doğal olarak iki veya daha fazla ayrı parçaya bölünür. İki satırı olan aşağıdaki tekrar bloğunu ele alalım:
Bu blok tek bir mesajla açıklanacak olsaydı message0
özelliği "repeat %1 times %2 do %3"
olurdu. Burada %2
, satır sonu girişini temsil eder. Bu dize, %2
yerine koyma işleminin ne anlama geldiğini açıklamak zor olduğundan çevirmen için tuhaftır. %2
Satır sonu girişi bazı dillerde istenmeyebilir. Ayrıca, ikinci satırın metnini paylaşmak isteyen birden fazla blok olabilir. Daha iyi bir yaklaşım, birden fazla message
ve args
özelliği kullanmaktır:
JSON
{
"message0": "repeat %1 times",
"args0": [
{"type": "input_value", ...} // token %1 in message0
],
"message1": "do %1",
"args1": [
{"type": "input_statement", ...} // token %1 in message1
],
}
JSON biçiminde 0'dan başlayıp sırayla artan şekilde herhangi bir sayıda message
, args
ve implicitAlign
özelliği tanımlanabilir. Blok Fabrikası'nın iletileri birden fazla parçaya bölemediğini ancak bunu manuel olarak yapmanın kolay olduğunu unutmayın.
Enterpolasyon jetonu sırası
Blokları yerelleştirirken bir iletideki interpolasyon jetonlarının sırasını değiştirmeniz gerekebilir. Bu, özellikle İngilizce'den farklı kelime sırasına sahip dillerde önemlidir. Örneğin, "set %1 to %2"
mesajıyla tanımlanan bir blokla başladık:
Şimdi de "set %1 to %2"
ifadesinin "put %2 in %1"
olarak söylenmesi için ters çevrilmesi gereken varsayımsal bir dili ele alalım. İletiyi (enterpolasyon jetonlarının sırası dahil) değiştirip bağımsız değişkenler dizisini değiştirmeden bırakmak aşağıdaki bloğa neden olur:
Blockly, alanların sırasını otomatik olarak değiştirdi, sahte bir giriş oluşturdu ve harici girişlerden dahili girişlere geçti.
Bir iletideki enterpolasyon jetonlarının sırasını değiştirme özelliği, yerelleştirmeyi kolaylaştırır. Daha fazla bilgi için JSON mesajı enterpolasyonu konusuna bakın.
Metin işleme
Bir enterpolasyon jetonunun her iki tarafındaki metin, boşluklar kaldırılacak şekilde kırpılır.
%
karakterinin kullanıldığı metinlerde (ör.bir yüzdeye atıfta bulunulurken) %%
karakteri kullanılmalıdır. Aksi takdirde, metin bir enterpolasyon jetonu olarak yorumlanır.
Blockly, mesaj dizesindeki tüm yeni satır karakterlerini (\n
) de otomatik olarak satır sonu girişiyle değiştirir.
JSON
{
"message0": "set %1\nto %2",
"args0": [
{"type": "field_variable", ...}, // token %1
{"type": "input_value", ...}, // token %2
]
}
Bağımsız değişken dizileri
Her mesaj dizesi, aynı sayıdaki args
dizisiyle eşleştirilir. Örneğin, message0
, args0
ile birlikte kullanılır. Yerleştirme jetonları (%1
, %2
, ...), args
dizisinin öğelerini ifade eder ve args0
dizisiyle tamamen eşleşmelidir: yinelenen veya eksik öğe olmamalıdır. Jeton numaraları, bağımsız değişkenler dizisindeki öğelerin sırasını ifade eder. Bir mesaj dizesinde sırayla yer almaları gerekmez.
arguments dizisindeki her nesne bir type
dizesine sahiptir. Parametrelerin geri kalanı türe göre değişir:
Ayrıca kendi özel alanlarınızı ve özel girişlerinizi tanımlayıp bunları args olarak iletebilirsiniz.
alt alanlar
Her nesne, alt
alanına da sahip olabilir. Blockly, nesnenin type
özelliğini tanımadığında bunun yerine alt
nesnesi kullanılır. Örneğin, Blockly'ye field_time
adlı yeni bir alan eklenirse bu alanı kullanan bloklar, Blockly'nin eski sürümleri için field_input
yedek değerini tanımlamak üzere alt
kullanabilir:
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"
}
}
]
}
Bir alt
nesnesi kendi alt
nesnesine sahip olabilir ve bu sayede zincirleme oluşturulabilir.
Sonuç olarak, Blockly args0
dizisinde bir nesne oluşturamazsa (alt
nesneleri denedikten sonra) bu nesne atlanır.