JSON'da blok yapısı

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:

Değişken ayarlayıcı blok. "Ayarla" etiketi, değişken seçmek için bir açılır liste, "şuna" etiketi ve bir değer girişi içerir.

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").

"%1 değerini %2 olarak ayarla" mesajını üç alanlı bir değer girişine eşleyin.

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.

"%1 + %2" mesajını iki değer girişine eşleyin.

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.

"%1 + %2 %3" mesajını iki değer girişi ve bir satır sonu girişiyle eşleyin.

İ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
  ],
}

"%1 boş" mesajını bir değer girişine ve otomatik olarak oluşturulan bir sahte girişe eşleyin.

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
  ],
}

"%1 boş" mesajını bir değer girişine ve otomatik olarak oluşturulan bir sahte girişe eşleyin.

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.

E-posta gönderme engeli. İlk satırda "send email to" (e-posta gönderilecek adres) etiketi ve bir değer girişi bulunur. İkinci satırda "subject" etiketi ve bir değer girişi bulunur. Üçüncü satırda "güvenli" etiketi ve bir onay kutusu bulunur. Bu satır sağa hizalıdır.

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:

İki satırlı tekrarlanan blok. İlk satırda "repeat" etiketi, bir değer girişi ve "times" etiketi bulunur. İkinci satırda "do" etiketi ve bir giriş ifadesi var.

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
  ],
}

"%1 kez tekrarla" mesajını bir değer girişine ve otomatik olarak oluşturulan bir sahte girişe, "%1 yap" mesajını ise bir ifade girişine eşleyin.

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:

"set" etiketli bir değişken ayarlayıcı blok, değişken için bir açılır liste alanı, "to" etiketi ve harici bir değer girişi.

Ş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:

"put" etiketli bir değişken ayarlayıcı blok, satır içi değer girişi, "to" etiketi ve değişken için bir açılır liste alanı.

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
  ]
}

"set %1\nto %2" içindeki yeni satır karakterini satır sonu girişine eşleyin.

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.