Lingara Lingara مستندات راهنماها API کتابخانه‌ها برنامه‌ها ساخت نسخهٔ وب
زبان: فارسی

زمینه و رضایت

این صفحه از انگلیسی ترجمه شده است. اگر این دو با هم تفاوت داشته باشند، صفحهٔ انگلیسی درست است. خواندن صفحهٔ انگلیسی

برنامهٔ شما فقط از راه برش‌های زمینه چیزی دربارهٔ زبان‌آموز می‌فهمد. هر برش یک رکورد کوچک با فیلدهای ثابت است. مانیفست شما برش‌هایی را که درخواست می‌کند فهرست می‌کند، زبان‌آموز هنگام نصب برنامهٔ شما با هر کدام موافقت می‌کند، و Lingara یک برش را فقط تا وقتی هر دو برقرار باشند می‌فرستد.

برش‌ها

برشفیلدآنچه در بر دارد
languagessource_langزبانی که زبان‌آموز از آن یاد می‌گیرد، به‌صورت برچسب زبانی مانند en.
target_langزبانی که در حال یادگیری آن است.
levelسطح او در آن زبان، از 1 تا 9، اگر سطحی تعیین کرده باشد.
plan_summaryplan_idشناسهٔ تازه‌ترین برنامهٔ درسی او، که یک برنامهٔ درسی را از دیگری متمایز می‌کند. برنامهٔ شما نمی‌تواند با آن برنامهٔ درسی را بگیرد، چون توکن برنامهٔ شما حساب خود شما را می‌خواند، نه حساب زبان‌آموز را.
titleعنوان تولیدشدهٔ برنامه، حداکثر 120 نویسه، اگر عنوانی داشته باشد.
target_langزبانی که برنامه آموزش می‌دهد.
set_countتعداد مجموعه‌های برنامه، حداکثر 200.
sets_completedتعداد مجموعه‌هایی از آن‌ها که زبان‌آموز تمام کرده است.
review_duedueتعداد فلش‌کارت‌هایی که اکنون موعدشان رسیده، حداکثر 100000.
learnedتعداد واژه‌هایی که یاد گرفته، حداکثر 100000.
tutor_topictopicموضوع تازه‌ترین گفت‌وگوی او با معلم، از 1 تا 120 نویسه. از عنوان یک برنامه یا صفحه‌ای که در آن است می‌آید، هرگز از کلمات خود او.

آنچه هیچ برشی حمل نمی‌کند

هیچ برشی نشانی ایمیل، نام، شناسهٔ کاربر یا هر چیزی که زبان‌آموز تایپ کرده باشد را حمل نمی‌کند. برنامهٔ شما هویت زبان‌آموز را از subject درخواست می‌فهمد؛ مقداری پایدار که برای هر برنامه متفاوت است. توکن برنامهٔ شما حساب خود شما را می‌خواند، هرگز حساب زبان‌آموز را، پس برش‌ها همهٔ چیزی است که برنامهٔ شما دربارهٔ او می‌داند.

رضایت

  • زبان‌آموز هنگام نصب برنامهٔ شما با هر برش موافقت می‌کند. برای تغییر آنچه با آن موافقت کرده، برنامهٔ شما را حذف نصب می‌کند و دوباره نصب می‌کند.
  • اگر مانیفست خود را ویرایش کنید تا برش‌های کمتری بخواهد، برش‌هایی که حذف کرده‌اید فوراً متوقف می‌شوند.
  • اگر آن را ویرایش کنید تا برش‌های بیشتری بخواهد، برش‌های تازه تا وقتی زبان‌آموز دوباره نصب نکند به هیچ زبان‌آموزی نمی‌رسند.
  • Lingara در هر درخواست دوباره رضایت را بررسی می‌کند و هر برشی را که زبان‌آموز با آن موافقت نکرده یا مانیفست شما دیگر آن را نمی‌خواهد کنار می‌گذارد. برشی که با رکوردش جور نباشد هم کنار گذاشته می‌شود، هرگز کل درخواست.

نمونهٔ پایین سطر خود را از برش‌هایی که به آن داده شده می‌سازد و هیچ API‌ای را فراخوانی نمی‌کند.

زبان نمونه‌کد

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

همچنین ببینید