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

Bağlam ve onay

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

Uygulamanız bir öğrenci hakkında yalnızca bağlam dilimleri aracılığıyla bilgi edinir. Her dilim, sabit alanlara sahip küçük bir kayıttır. Manifestonuz istediği dilimleri listeler, öğrenci uygulamanızı kurarken her birine onay verir ve Lingara bir dilimi yalnızca ikisi de hâlâ geçerli olduğu sürece gönderir.

Dilimler

DilimAlanNe içerir
languagessource_langÖğrencinin üzerinden çalıştığı dil, en gibi bir dil etiketi olarak.
target_langÖğrendiği dil.
levelO dildeki seviyesi, 1 ile 9 arasında, bir seviye belirlemişse.
plan_summaryplan_idEn son ders planının kimliği; bir planı diğerinden ayırt eder. Uygulamanız planı bununla alamaz, çünkü uygulamanızın token’ı öğrencinin değil, sizin kendi hesabınızı okur.
titlePlanın üretilmiş başlığı, en fazla 120 karakter, varsa.
target_langPlanın öğrettiği dil.
set_countPlanın kaç seti olduğu, en fazla 200.
sets_completedÖğrencinin bu setlerden kaçını bitirdiği.
review_duedueŞu anda kaç flashcard’ın tekrarı beklediği, en fazla 100000.
learnedKaç kelime öğrendiği, en fazla 100000.
tutor_topictopicEn son öğretmen sohbetinin konusu, 1 ile 120 karakter arasında. Bir planın başlığından ya da bulunduğu ekrandan gelir, asla kendi sözlerinden gelmez.

Hiçbir dilimin taşımadıkları

Hiçbir dilim bir e-posta adresi, bir ad, bir kullanıcı kimliği ya da öğrencinin yazdığı herhangi bir şeyi taşımaz. Uygulamanız öğrencinin kim olduğunu, isteğin subject alanından öğrenir; bu, her uygulama için farklı olan sabit bir değerdir. Uygulamanızın token’ı asla öğrencinin hesabını değil, sizin kendi hesabınızı okur; bu yüzden uygulamanızın öğrenci hakkında bildiği her şey dilimlerden ibarettir.

Onay

  • Öğrenci, uygulamanızı kurarken her dilime onay verir. Onay verdiği şeyi değiştirmek için uygulamanızı kaldırır ve yeniden kurar.
  • Manifestonuzu daha az dilim isteyecek şekilde düzenlerseniz, çıkardığınız dilimler hemen durur.
  • Daha fazla dilim isteyecek şekilde düzenlerseniz, yeni dilimler yeniden kurana kadar hiçbir öğrenciye ulaşmaz.
  • Lingara her istekte onayı yeniden kontrol eder ve öğrencinin onay vermediği ya da manifestonuzun artık istemediği her dilimi atar. Kaydına uymayan bir dilim de atılır; isteğin tamamı asla atılmaz.

Aşağıdaki örnek satırını kendisine verilen dilimlerden oluşturur ve hiçbir API çağırmaz.

Kod örneğinin dili

TypeScript

// The app's own client reads its owner's account, never the learner's. The
// slices are all a render knows about the learner.
function planLine(request: AppRenderRequest): string {
  let line = "";
  for (const slice of request.context) {
    // A slice is present only when the learner agreed to share it.
    if (slice.kind === "languages") line += `${slice.source_lang} → ${slice.target_lang}. `;
    if (slice.kind === "plan_summary") line += `${slice.sets_completed}/${slice.set_count} sets.`;
  }
  return line;
}

Rust

// The app's own client reads its owner's account, never the learner's. The
// slices are all a render knows about the learner.
/// The learner's target language and, when they shared their plan, its
/// `(sets_completed, set_count)`.
fn shared_plan(request: &AppRenderRequest) -> (String, Option<(u32, u32)>) {
    let (mut target_lang, mut progress) = (String::from("zh"), None);
    for slice in &request.context {
        match slice {
            ContextSlice::Languages(languages) => target_lang = languages.target_lang.clone(),
            ContextSlice::PlanSummary(summary) => progress = Some((summary.sets_completed, summary.set_count)),
            _ => {}
        }
    }
    (target_lang, progress)
}

Go

// The app's own client reads its owner's account, never the learner's.
// The slices are all a render knows about the learner.
//
// Each slice is present only when the learner agreed to share it.
card := lingaraapps.NewCard().Heading("Your plan", 1)
for _, slice := range req.Context {
	switch s := slice.(type) {
	case lingaraapps.ContextSliceLanguages:
		card.Text(fmt.Sprintf("Learning %s from %s", s.TargetLang, s.SourceLang))
	case lingaraapps.ContextSlicePlanSummary:
		card.Text(fmt.Sprintf("%d of %d sets done", s.SetsCompleted, s.SetCount))
	}
}

Java

import com.getlingara.apps.Card;
import com.getlingara.apps.Reply;
import com.getlingara.apps.model.AppRenderRequest;
import com.getlingara.apps.model.ContextSlice;
import com.getlingara.apps.model.ContextSliceLanguages;
import com.getlingara.apps.model.ContextSlicePlanSummary;

// The app's own client reads its owner's account, never the learner's. The slices are all a
// render knows about the learner.
static Reply render(AppRenderRequest request) {
  Card.Builder card = Card.card();
  // A slice is present only when the learner agreed to share it; the context is read-only.
  for (ContextSlice slice : request.getContext()) {
    if (slice instanceof ContextSliceLanguages languages) {
      card.heading("Learning " + languages.targetLang(), 1);
    } else if (slice instanceof ContextSlicePlanSummary summary) {
      card.text(summary.setsCompleted() + " of " + summary.setCount() + " sets done");
    }
  }
  return card.heading("Today", 2).build();
}

Kotlin

import com.getlingara.apps.kotlin.Reply
import com.getlingara.apps.kotlin.card
import com.getlingara.apps.kotlin.model.AppRenderRequest
import com.getlingara.apps.kotlin.model.ContextSliceLanguages
import com.getlingara.apps.kotlin.model.ContextSlicePlanSummary

// The app's own client reads its owner's account, never the learner's. The slices are all a
// render knows about the learner.
fun renderWithContext(request: AppRenderRequest): Reply {
    // A slice is present only when the learner agreed to share it; the context is read-only.
    val languages = request.context.filterIsInstance<ContextSliceLanguages>().firstOrNull()
    val summary = request.context.filterIsInstance<ContextSlicePlanSummary>().firstOrNull()
    return card {
        heading("Learning ${languages?.targetLang ?: "today"}", 1)
        if (summary != null) {
            text("${summary.setsCompleted} of ${summary.setCount} sets done")
        }
    }
}

Ruby

# The app's own client reads its owner's account, never the learner's. The
# slices are all a render knows about the learner.
#
# A slice is present only when the learner agreed to share it.
request.context.filter_map do |slice|
  case slice
  in Lingara::Apps::ContextSliceLanguages(source_lang:, target_lang:)
    "#{source_lang} → #{target_lang}."
  in Lingara::Apps::ContextSlicePlanSummary(sets_completed:, set_count:)
    "#{sets_completed}/#{set_count} sets."
  else nil
  end
end.join(" ")

PHP

use Lingara\Apps\Generated\ContextSliceLanguages;
use Lingara\Apps\Generated\ContextSlicePlanSummary;

function planLine(AppRenderRequest $request): string
{
    // The app's own client reads its owner's account, never the learner's. The
    // slices are all a render knows about the learner.
    $line = '';
    // A slice is present only when the learner agreed to share it.
    foreach ($request->getContext() as $slice) {
        if ($slice instanceof ContextSliceLanguages) {
            $line .= "{$slice->sourceLang} → {$slice->targetLang}. ";
        } elseif ($slice instanceof ContextSlicePlanSummary) {
            $line .= "{$slice->setsCompleted}/{$slice->setCount} sets.";
        }
    }
    return $line;
}

Ayrıca bakınız