Lingara Lingara Belgeler Rehberler API Kütüphaneler Uygulamalar Oluştur Web uygulaması
Dil: Türkçe

Kartlar

Bu sayfa İngilizceden çevrilmiştir. İkisi arasında fark varsa İngilizce sayfa doğrudur. İngilizce sayfayı oku

Bir kart, Lingara’nın kendi stiliyle çizdiği kısa bir öğe listesidir. Giriş alanları, görseller, betikler veya işaretleme yoktur. Bir uygulama öğrencinin ekranına kendi kodunu ya da kendi görünümünü koyamaz; bu yüzden her kart Lingara’nın geri kalanı gibi okunur. Yanıtınız JSON’dur: içinde öğeleri olan bir card (bu öğeler elements altında durur) ve isteğe bağlı olarak bir tutor_note (bkz. Öğretmen notu).

Öğeler

Her öğenin bir type alanı vardır ve bu şu sekiz türden biridir:

ÖğeAlanlarNe gösterir
headingtext, levelBir başlık. level 1 veya 2’dir ve başka herhangi bir değer 2 olur. Metni en fazla 80 karakterdir.
texttext, langEn fazla 600 karakterlik bir paragraf. Satır sonunun korunduğu tek yer burasıdır.
termword, reading, gloss, langÖğrenilecek bir kelime. Yalnızca word zorunludur. Kelime en fazla 60 karakter, okunuş 120 ve açıklama 160 karakterdir.
listitemsEn fazla 20 madde. Her madde bir text veya bir term olup o adı taşıyan öğeyle aynı alanlara sahiptir.
progressvalue, labelBir ilerleme çubuğu. value 0 ile 1 arasındadır ve etiket en fazla 60 karakterdir.
dividerKartın bölümleri arasında bir çizgi.
buttonlabel, action, styleaction değerini sunucunuza gönderen bir düğme. style ya primary ya da secondary olur ve etiket en fazla 32 karakterdir.
linklabel, urlÖğrencinin, Lingara ona sorduktan sonra tarayıcısında açtığı bir bağlantı. Etiket en fazla 60 karakterdir.

Bir lang, Lingara’nın doğru yazı sistemini çizmesi için ja gibi bir dil etiketidir. Dil etiketi olmayan bir değer kaldırılır.

Sınırlar

  • Bir kart en fazla 24 öğe içerir. 24. öğeden sonraki öğeler atılır.
  • Bir liste en fazla 20 madde içerir. 20. maddeden sonraki maddeler atılır ve boş bir liste de atılır.
  • Bir kart en fazla 4 düğme içerir. 4. düğmeden sonraki düğmeler atılır.
  • Sınırından uzun metin sığacak şekilde kısaltılır ve … ile biter. Karakterler Unicode skaler değerleri olarak sayılır.
  • Denetim karakterleri ve yön geçersiz kılmaları her dizeden kaldırılır.
  • Adresi HTTPS olmayan, bir kullanıcı adı taşıyan veya bir IP adresine işaret eden bağlantı atılır.
  • action değeri 64 karakterden uzun olan ya da harfler, rakamlar, _, ., : ve - dışında bir şey kullanan düğme atılır.
  • Bu kurallardan sonra hiç metni kalmayan öğe atılır.

Bu kurallar hoşgörülüdür: Lingara sığmayanı kısaltır veya atar ve geri kalanını çizer. Kitler siz yanıt vermeden önce aynı kuralları uygular; böylece neyin değişeceğini görebilirsiniz.

Katı ayrıştırma

Sözcük dağarcığı kapalıdır. Bilinmeyen bir öğe türü, bir öğenin sahip olmadığı bir alan, yanlış JSON türünde bir değer ya da hiç JSON olmayan bir yanıt, yanıtın tamamını yedek karta dönüştürür. Lingara, okuyamadığı bir kartın bir kısmını asla çizmez.

Boyut ve süre

Bir yanıt en fazla 32 KiB olabilir. Lingara sunucunuza bir render isteğini yanıtlamak için 3 saniye, bir eylemi yanıtlamak için 5 saniye verir ve hiçbirini yeniden denemez. Bir yanıtın durumu 200 ve içerik türü JSON olmalıdır. Yönlendirmeler izlenmez.

Düğmeler ve eylemler

Öğrenci bir düğmeye bastığında Lingara sunucunuza o düğmenin action değerini taşıyan bir eylem isteği gönderir. Sunucunuz, eskisinin yerini alan yeni bir kartla yanıt verir. Aynı basış iki kez gelebilir; bu yüzden her eylemi tekrarlanması güvenli olacak şekilde tasarlayın.

Bir kart başarısız olduğunda

Lingara çizebileceği bir kart alamadığında öğrenci, kendi dilinde Lingara’nın kendi “Bu uygulama yanıt vermedi” kartını ya da güncel değil olarak işaretlenmiş son geçerli kartınızı görür. Öğrenciye nedeni asla söylenmez. Nedeni yalnızca siz, uygulamanın sahibi olarak görürsünüz:

  • Yanıtınız: invalid (Lingara’nın okuyabileceği bir kart değil), empty (sınırlardan sonra gösterilecek bir şey kalmadı) veya too_large (32 KiB’den fazla).
  • Sunucunuza ulaşmak: timeout, http_error (200 dışındaki herhangi bir durum), transport (süresi dolmuş bir sertifika gibi bir bağlantı veya TLS hatası) veya blocked (özel ya da doğrudan IP olarak yazılmış bir adrese giden bir render_url).
  • Lingara tarafı: unavailable (Lingara isteği imzalayamadı) veya busy (zaten işlenmekte olan çok fazla istek var).
Kod örneğinin dili

TypeScript

function todayCard(streak: number): Card {
  return card()
    .heading("Today's five", 1)
    .term({ word: "雨", reading: "yǔ", gloss: "rain", lang: "zh" })
    .list([item.text("Review 3 words"), item.term({ word: "二", reading: "èr" })])
    .button(`Done (${streak})`, "done")
    .build(); // Throws CardLimitError naming the rule the relay would clamp.
}

Rust

fn today_card(title: &str, lang: &str) -> Result<lingara_apps::Card, BoxError> {
    Ok(card()
        .heading(title, 1)
        .term(Term::new("雨").reading("yǔ").gloss("rain").lang(lang))
        .list([item::text("Say it aloud"), item::term(Term::new("下雨").gloss("to rain"))])
        .button("Next word", "next")
        .build()?)
}

Go

card, err := lingaraapps.NewCard().
	Heading("Today", 1).
	Term(lingaraapps.Term{Word: "雨", Reading: "yǔ", Gloss: "rain", Lang: "zh"}).
	List(
		lingaraapps.Item.Text("Say it aloud three times."),
		lingaraapps.Item.Term(lingaraapps.Term{Word: "雨天", Gloss: "rainy day", Lang: "zh"}),
	).
	Button("Next", "next").
	Build()
if err != nil {
	// A *lingaraapps.CardLimitError names the rule the card breaks,
	// such as text_length or list_items. Nothing is cut for you.
	return lingaraapps.Card{}, err
}

Java

import com.getlingara.apps.Card;
import com.getlingara.apps.Item;

Card card =
    Card.card()
        .heading("Today's five", 1)
        .term("雨", "yǔ", "rain", "zh")
        .list(Item.text("Say it aloud"), Item.term("二", "èr", "two", "zh"))
        .button("Next", "next")
        .build(); // a CardLimitException names the first rule the card breaks

Kotlin

import com.getlingara.apps.kotlin.Card
import com.getlingara.apps.kotlin.card

val c =
    card {
        heading("Today's five", 1)
        term("雨", reading = "yǔ", gloss = "rain", lang = "zh")
        list(item.text("Say it aloud"), item.term("二", reading = "èr", gloss = "two", lang = "zh"))
        button("Next", "next")
    } // a CardLimitException names the first rule the card breaks

Ruby

def self.today_card(streak)
  Lingara::Apps.card
    .heading("Today's five", 1)
    .term(word: "雨", reading: "yǔ", gloss: "rain", lang: "zh")
    .list([Lingara::Apps.item.text("Review 3 words"), Lingara::Apps.item.term(word: "二", reading: "èr")])
    .button("Done (#{streak})", "done")
    .build # Raises Lingara::Apps::CardLimitError naming the rule Lingara would clamp.
end

PHP

use Lingara\Apps\Card;
use Lingara\Apps\Generated\Card as CardModel;
use Lingara\Apps\Item;

function todayCard(int $streak): CardModel
{
    return Card::create()
        ->heading("Today's five", 1)
        ->term('雨', reading: 'yǔ', gloss: 'rain', lang: 'zh')
        ->list([Item::text('Review 3 words'), Item::term('二', reading: 'èr')])
        ->button("Done ({$streak})", 'done')
        ->build(); // Throws CardLimitException naming the rule the relay would clamp.
}