Lingara Lingara ឯកសារ មគ្គុទ្ទេសក៍សិក្សា API បណ្ណាល័យ កម្មវិធី បង្កើត កម្មវិធីលើបណ្ដាញ
ភាសា: ខ្មែរ

បរិបទ និងការយល់ព្រម

ទំព័រនេះត្រូវបានបកប្រែពីភាសាអង់គ្លេស។ ប្រសិនបើទាំងពីរខុសគ្នា ទំព័រភាសាអង់គ្លេសគឺត្រឹមត្រូវ។ អានទំព័រភាសាអង់គ្លេស

កម្មវិធីរបស់អ្នកដឹងអំពីអ្នករៀនតែតាមរយៈចំណែកបរិបទ (context slice) ប៉ុណ្ណោះ។ ចំណែកនីមួយៗគឺជាកំណត់ត្រាតូចមួយដែលមានវាលថេរ។ ម៉ានីហ្វេស្តរបស់អ្នករាយបញ្ជីចំណែកដែលវាសុំ អ្នករៀនយល់ព្រមលើចំណែកនីមួយៗនៅពេលពួកគេដំឡើងកម្មវិធីរបស់អ្នក ហើយ 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;
}

មើលផងដែរ