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

هەروەها ببینە