Lingara Lingara Belge Rêbername API Pirtûkxane Sepan Avakirin Sepana webê
Ziman: Kurdî

Çarçove û razîbûn

Ev rûpel ji Îngilîzî hatiye wergerandin. Heke her du ji hev cuda bin, rûpela Îngilîzî rast e. Rûpela Îngilîzî bixwîne

Sepana te tenê bi rêya perçeyên çarçoveyê li ser xwendekarekî fêr dibe. Her perçe tomareke piçûk e bi qadên sabît. Manifestê te perçeyên ku dixwaze rêz dike, xwendekar dema ku sepana te saz dike bi her yekê razî dibe, û Lingara perçeyekê tenê heta ku herdu jî hîn derbasdar bin dişîne.

Perçe

PerçeQadÇi dihewîne
languagessource_langZimanê ku xwendekar jê dixwîne, wek etîketeke zimên mîna en.
target_langZimanê ku ew fêr dibe.
levelAsta wî di wî zimanî de, ji 1 heta 9, dema ku wî astek danîbe.
plan_summaryplan_idId-ya plana wî ya dersê ya dawî, ku planekê ji ya din cuda dike. Sepana te nikare planê bi wê bîne, ji ber ku tokena sepana te hesabê te bi xwe dixwîne, ne yê xwendekar.
titleSernavê planê yê hatî çêkirin, herî zêde 120 tîp, dema ku hebe.
target_langZimanê ku plan hîn dike.
set_countPlan çend setan dihewîne, herî zêde 200.
sets_completedXwendekar çend ji wan setan qedandine.
review_duedueNiha çend kartên fêrbûnê li bendê ne, herî zêde 100000.
learnedWî çend peyv fêr bûne, herî zêde 100000.
tutor_topictopicAxaftina wî ya dawî ya bi mamoste re li ser çi ye, ji 1 heta 120 tîpan. Ew ji sernavê planekê an ji ekrana ku ew li ser e tê, qet ji gotinên wî bi xwe nayê.

Tiştê ku tu perçe hilnagire

Tu perçe navnîşaneke e-nameyê, navekî, id-ya bikarhêner an tiştekî ku xwendekar nivîsandiye hilnagire. Sepana te ji subject a daxwazê fêr dibe ka xwendekar kî ye, nirxekî domdar ku ji bo her sepanê cuda ye. Tokena sepana te hesabê te bi xwe dixwîne, qet ne yê xwendekar, ji ber vê yekê perçe her tiştê ku sepana te li ser wî dizane ne.

Razîbûn

  • Xwendekar dema ku sepana te saz dike bi her perçeyekê razî dibe. Ji bo guhertina tiştê ku pê razî bûye, ew sepana te radike û dîsa saz dike.
  • Heke tu manifestê xwe biguherînî da ku kêmtir perçeyan bixwaze, perçeyên ku te avêtin yekser radiwestin.
  • Heke tu wî biguherînî da ku bêtir bixwaze, perçeyên nû nagihîjin tu xwendekarî heta ku ew ji nû ve saz neke.
  • Lingara li ser her daxwazê dîsa razîbûnê kontrol dike, û her perçeyê ku xwendekar pê razî nebûye an manifestê te êdî naxwaze davêje. Perçeyek ku li tomara xwe nayê jî tê avêtin, qet ne tevahiya daxwazê.

Nimûneya li jêr rêza xwe ji perçeyên ku jê re hatine dayîn ava dike û tu API-yê bang nake.

Zimanê mînaka kodê

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

Herwiha binêre