feat: HLS streaming, transcripts, agent course generation & landing-page course previews (#663)

New features:
- HLS video encoding/streaming (hls routes, hls-encoder) and a media
  transcripts pipeline (transcripts route + media-transcript queries)
- AI assistant chat vs. run model: agent-course-generation worker/queue,
  run-monitor pane, chat-changes card, content ask-ai bar
- Per-theme course-page previews across org landing-page themes (bold,
  classic, corporate, editorial, etc.) with a shared course token/component set
- View-as-student mode and login-link / link-invite invite flows

Refactor:
- Extract packages/core consolidating config (env, storage, dashboard-url),
  services and utils previously duplicated under apps/api/src/config
- Remove legacy agent service modules (chat-tools, chat-context,
  context-window, document, fetch-url, lesson-content)
- Relax Cross-Origin-Resource-Policy to allow cross-origin media embedding
- Add format script to tenant-router so turbo run format covers it
This commit is contained in:
Rotimi Best
2026-06-07 18:43:05 +01:00
committed by GitHub
parent a2e70779a0
commit d5b07d356e
496 changed files with 19050 additions and 8312 deletions
+2 -1
View File
@@ -37,7 +37,8 @@ const saasDefaults = {
'https://*.senja.io',
'https://*.ytimg.com',
'https://noembed.com',
'https://www.googleapis.com'
'https://www.googleapis.com',
'https://o476906.ingest.us.sentry.io'
],
frameSrc: [
'https://www.youtube.com',
@@ -4,15 +4,19 @@ import { initUmami } from '$lib/utils/services/umami';
import { initUserJot } from '$lib/utils/services/userjot';
import { licenseApi } from '$features/license/api/license.svelte';
let isInitialized = false;
let isTrackingInitialized = false;
export function setupAnalytics(user?: PosthogBootstrapUser) {
if (isInitialized) return;
isInitialized = true;
function setupTracking(user?: PosthogBootstrapUser) {
if (isTrackingInitialized) return;
isTrackingInitialized = true;
initPosthog(user);
initUmami();
}
export function setupAnalytics(user?: PosthogBootstrapUser) {
initUserJot();
setupTracking(user);
}
/** Checks if this is cloud deployment and initializes analytics */
@@ -23,9 +27,11 @@ export function setupCloudAnalytics(user?: PosthogBootstrapUser) {
}
export function setupAnalyticsBasedOnLicense(user?: PosthogBootstrapUser) {
initUserJot();
if (licenseApi.hasAccess('no-tracking')) {
return;
}
setupAnalytics(user);
setupTracking(user);
}
@@ -2,6 +2,7 @@ import { appInitApi } from '$features/app/init.svelte';
import { authClient } from '$lib/utils/services/auth/client';
import { capturePosthogEvent } from '$lib/utils/services/posthog';
import { clearSentryUser } from '$lib/utils/services/sentry';
import { clearUserJotUser } from '$lib/utils/services/userjot';
import { goto } from '$app/navigation';
import posthog from 'posthog-js';
import { resolve } from '$app/paths';
@@ -18,6 +19,7 @@ export async function logout(redirect = true) {
capturePosthogEvent('user_logged_out');
posthog.reset();
clearSentryUser();
clearUserJotUser();
if (redirect) {
goto(resolve('/login', {}));
@@ -5,10 +5,10 @@ import { env } from '$env/dynamic/public';
const isSelfHosted = PUBLIC_IS_SELFHOSTED === 'true';
const DEFAULT_TITLE = 'ClassroomIO | The Open Source Learning Management System for Companies';
const DEFAULT_TITLE = 'ClassroomIO | The Most Customizable Platform for Customer, Partner, and Employee Education';
const DEFAULT_DESCRIPTION =
'A flexible, user-friendly platform for creating, managing, and delivering courses for companies and training organisations';
const CLOUD_OG_IMAGE = 'https://brand.cdn.clsrio.com/og/classroomio-og.png';
'One platform for customer academies, partner certification, and employee training. Build courses with AI, publish under your domain, and track completions.';
const CLOUD_OG_IMAGE = 'https://brand.cdn.clsrio.com/og/classroomio-opengraph.png';
function resolveOgImageUrl(url: URL, orgSiteInfo: OrgSiteInfo): string {
const envUrl = env.PUBLIC_OG_IMAGE_URL?.trim();
@@ -64,7 +64,7 @@ export function getBaseMetaTags(url: URL, orgSiteInfo: OrgSiteInfo): MetaTagsPro
images: [
{
url: ogImageUrl,
alt: `${siteName} OG Image`,
alt: `${siteName} platform for customer, partner, and employee education`,
width: 1920,
height: 1080,
secureUrl: ogImageUrl,
@@ -79,7 +79,7 @@ export function getBaseMetaTags(url: URL, orgSiteInfo: OrgSiteInfo): MetaTagsPro
title,
description,
image: ogImageUrl,
imageAlt: `${siteName} OG Image`
imageAlt: `${siteName} platform for customer, partner, and employee education`
}
});
}
@@ -28,7 +28,7 @@ function resolveApiUpstreamPath(pathname: string): string {
}
function resolveApiUpstreamBase(): string | null {
const base = process.env.PRIVATE_SERVER_URL || process.env.PUBLIC_SERVER_URL;
const base = process.env.PRIVATE_SERVER_URL;
if (!base) return null;
return base.replace(/\/$/, '');
@@ -43,7 +43,7 @@ export async function proxyRequestToApi(request: Request): Promise<Response> {
const apiBase = resolveApiUpstreamBase();
if (!apiBase) {
console.error('proxyRequestToApi: missing PRIVATE_SERVER_URL / PUBLIC_SERVER_URL');
console.error('proxyRequestToApi: missing PRIVATE_SERVER_URL');
return new Response('API upstream not configured', { status: 502 });
}
@@ -15,19 +15,20 @@ export const getRequestBaseUrl = () => {
if (typeof window === 'undefined') {
// When on the server, we want to hit the private url which is the docker container of `api` or the private network url of `api`.
// if that isn't set then it will fallback to the public url of the `api`
// this doesn't need proxy because on the server we are using our api key to make queries.
return process.env.PRIVATE_SERVER_URL || env.PUBLIC_SERVER_URL;
}
// Self-hosted: dashboard and API are on different subdomains of the
// operator's apex. Browser calls go straight to PUBLIC_SERVER_URL;
// cookies cross subdomains via AUTH_COOKIE_DOMAIN. No Worker proxy.
if (env.PUBLIC_IS_SELFHOSTED === 'true' || dev) {
// Local dev keeps the direct API path so existing Vite/API workflows do not
// depend on the SvelteKit proxy.
if (dev) {
return env.PUBLIC_SERVER_URL ?? '';
}
// Cloud (multi-tenant): same-origin via the Cloudflare Worker `/proxy`
// prefix so auth cookies stay host-only on whichever tenant or BYOD
// domain the user is currently visiting. The Worker strips `/proxy` before forwarding to the API
// Browser calls are same-origin in production. For self-hosted Node builds,
// hooks.server.ts proxies `/proxy/*` to PRIVATE_SERVER_URL.
// For cloud multi-tenant builds, the Cloudflare Worker handles the same
// prefix. In both cases auth cookies stay first-party on the dashboard host.
return `${window.location.origin}/proxy`;
};
@@ -5,9 +5,9 @@ import { dev } from '$app/environment';
// Browser baseURL depends on deployment shape:
//
// - Self-hosted: dashboard and API are on different subdomains under
// one apex. Browser calls go straight to PUBLIC_SERVER_URL; cookies
// cross subdomains via AUTH_COOKIE_DOMAIN. No Worker proxy.
// - Self-hosted: browser auth calls stay on the dashboard origin at
// `/api/auth/*`; hooks.server.ts forwards them to the API over
// PRIVATE_SERVER_URL.
//
// - Cloud (multi-tenant): same-origin via the Cloudflare Worker so
// auth cookies stay host-only on whichever tenant/BYOD domain the
@@ -23,9 +23,12 @@ function resolveBaseURL() {
if (typeof window === 'undefined') {
return env.PUBLIC_SERVER_URL || 'http://localhost:3002';
}
if (env.PUBLIC_IS_SELFHOSTED === 'true' || dev) {
if (dev) {
return env.PUBLIC_SERVER_URL || `${window.location.origin}/api/auth`;
}
if (env.PUBLIC_IS_SELFHOSTED === 'true') {
return `${window.location.origin}/api/auth`;
}
return `${window.location.origin}/proxy/api/auth`;
}
@@ -7,6 +7,7 @@ import { getRequestBaseUrl } from '$lib/utils/services/api';
export const getSessionData = async (cookies: Cookies): Promise<App.Locals | null> => {
try {
const cioCookies = getCioCookieString(cookies);
console.log('cioCookies', cioCookies);
if (!cioCookies) return null;
@@ -39,6 +40,7 @@ export async function getThroughTrpc(allCookies: string) {
export async function getThroughAuthClient(allCookies: string) {
const baseURL = getRequestBaseUrl();
console.log('baseURL', baseURL);
console.log('allCookies', allCookies);
const session = await authServerClient.getSession({
fetchOptions: {
headers: {
@@ -38,7 +38,10 @@ export const initPosthog = (user?: PosthogBootstrapUser): void => {
if (dev || hasNoTracking()) return;
posthog.init('phc_JfdHOZ6v0cVlGELBYx1Tmoen2nxNOrAzvgvrPA6Ksov', {
api_host: 'https://eu.posthog.com',
// Route PostHog through our own domain via the tenant-router Worker so the
// cookie is first-party and doesn't trigger the Lighthouse "third-party cookie" deduction.
api_host: `${window.location.origin}/ingest`,
ui_host: 'https://eu.posthog.com',
...(user && {
bootstrap: { distinctID: user.id, isIdentifiedID: true }
})
@@ -1,7 +1,6 @@
import { dev } from '$app/environment';
import { get } from 'svelte/store';
import { globalStore } from '$lib/utils/store/app';
import { licenseApi } from '$features/license/api/license.svelte';
const USERJOT_APP_ID = 'cm4a6vcmp00jpmdb5n66rmkzz';
@@ -9,7 +8,6 @@ let isInitialized = false;
function isWidgetAllowed(): boolean {
if (dev) return false;
if (licenseApi.hasAccess('no-tracking')) return false;
if (get(globalStore).isOrgSite) return false;
return true;
@@ -44,7 +42,7 @@ export function initUserJot(): void {
ensureSdkLoaded();
window.uj.init(USERJOT_APP_ID, {
widget: true,
trigger: 'custom',
position: 'right',
theme: 'auto'
});
@@ -75,3 +73,21 @@ export function identifyUserJotUser({ id, email, fullname, avatarUrl }: UserJotI
avatar: avatarUrl ?? undefined
});
}
export function clearUserJotUser(): void {
if (!isWidgetAllowed()) return;
ensureSdkLoaded();
window.uj.identify(null);
}
export type UserJotWidgetSection = 'feedback' | 'roadmap' | 'updates';
export function showUserJotWidget(section: UserJotWidgetSection): void {
if (!isWidgetAllowed()) return;
ensureSdkLoaded();
window.uj.showWidget({ section });
}
+4 -1
View File
@@ -10,7 +10,10 @@ declare global {
theme?: 'auto' | 'light' | 'dark';
}
) => void;
identify: (user: { id: string; email?: string; firstName?: string; lastName?: string; avatar?: string }) => void;
identify: (
user: { id: string; email?: string; firstName?: string; lastName?: string; avatar?: string } | null
) => void;
showWidget: (options: { section: 'feedback' | 'roadmap' | 'updates' }) => void;
[method: string]: (...args: unknown[]) => void;
};
}
@@ -21,6 +21,7 @@ export const isOrgStudent = derived(currentOrg, ($currentOrg) => {
});
/**
* The goal of this store is to determine whether we should display the app in student or admin/teacher mode.
* Cloud: orgSite is always student (a teacher on an org subdomain sees the student view).
* Self-hosted: derived from isOrgStudent (role-based).
*/
@@ -350,7 +350,9 @@
"thumbnail_updated": "Miniaturebilledet er opdateret",
"thumbnail_update_failed": "Kunne ikke opdatere thumbnail",
"thumbnail_regen_started": "Regenererer thumbnails...",
"thumbnail_regen_failed": "Kunne ikke genskabe miniaturebilleder"
"thumbnail_regen_failed": "Kunne ikke genskabe miniaturebilleder",
"transcript_saved": "Udskrift opdateret",
"transcript_save_failed": "Kunne ikke gemme transskription"
},
"tags": {
"group_created": "Taggruppe oprettet",
@@ -420,6 +422,18 @@
"workspace_is_primary": "Du kan ikke slette det primære arbejdsområde.",
"workspace_not_found": "Arbejdsområdet blev ikke fundet.",
"not_primary_workspace": "Skift til dit primære arbejdsområde for at administrere kontoarbejdsområder."
},
"link_invite": {
"generated": "Linkinvitation genereret",
"enabled": "Linkinvitation aktiveret",
"disabled": "Linkinvitation deaktiveret"
},
"view_as_student": {
"failed": "Elevvisningen kunne ikke åbnes. Prøv venligst igen."
},
"lesson_video": {
"generate_1080_completed": "1080p gengivelse tilføjet",
"generate_1080_failed": "Kunne ikke generere 1080p gengivelse"
}
},
"explore": {
@@ -905,7 +919,9 @@
"short_video": "Kort video",
"replace_cover": "Udskift forsidebillede",
"replace": "Udskift",
"helper": "Indtast et link til en youtube-video"
"helper": "Indtast et link til en youtube-video",
"remove": "Fjern",
"no_cover": "Intet forsidebillede indstillet"
},
"title": {
"header": "Overskrift",
@@ -1030,7 +1046,17 @@
"members": "Medlemmer",
"invite_sent": "Invitation sendt",
"you": "Dig",
"remove": "Fjern"
"remove": "Fjern",
"link_invite": {
"heading": "Link invitation",
"description": "Alle med dette link kan tilslutte sig din organisation.",
"generate": "Generer link",
"copy": "Kopiér",
"copied": "Kopieret!",
"toggle_label": "Linkinvitation aktiv",
"disabled_notice": "Dette link er deaktiveret. Aktiver det for at tillade nye medlemmer at deltage via link.",
"select_role": "Vælg en rolle"
}
},
"roles": {
"admin": "Admin",
@@ -1879,7 +1905,11 @@
"language": "Language: {language}",
"empty": "No transcript yet. You can generate one from this card’s menu after the video is uploaded.",
"loading": "Loading transcript…",
"open_side_panel": "Åbn transskriptionspanelet"
"open_side_panel": "Åbn transskriptionspanelet",
"edit": "Rediger udskrift",
"save": "Gem",
"cancel": "Annuller",
"segment_label": "Segmenter kl. {timestamp}"
},
"simple_card": {
"kind_youtube": "YouTube",
@@ -1889,7 +1919,13 @@
"course_fallback": "Kursus",
"menu_aria": "Video muligheder"
},
"view_transcript": "Se transskription"
"view_transcript": "Se transskription",
"playback_error": "Indlæsningen af denne video mislykkedes.",
"playback_reload": "Genindlæs video",
"generate_1080": "Generer 1080p",
"generate_1080_in_progress": "Genererer 1080p...",
"generate_1080_ready": "1080p tilgængelig",
"generate_1080_unavailable": "1080p ikke tilgængelig for denne kildevideo"
},
"slide": {
"title": "Slide",
@@ -2085,7 +2121,8 @@
},
"header": {
"preview": "Preview course",
"preview_missing_slug": "Generate and save a course slug before previewing."
"preview_missing_slug": "Generate and save a course slug before previewing.",
"view_as_student": "Se som studerende"
},
"sidebar": {
"back_to_course": "Tilbage til kurset",
@@ -2105,12 +2142,12 @@
"nav_attendance": "Fremmøde",
"nav_submissions": "Indsendelser",
"nav_marks": "Mærker",
"nav_compliance": "Overholdelse",
"nav_people": "Mennesker",
"nav_analytics": "Analytics",
"nav_certificates": "Certifikater",
"nav_landing_page": "Landingsside",
"nav_settings": "Indstillinger",
"nav_compliance": "Overholdelse",
"nav_ai_assistant": "Assistent",
"nav_ai_tutor": "AI underviser"
},
@@ -2202,6 +2239,12 @@
"form_title": "Fortæl os om dit produkt"
}
}
},
"view_as_student": {
"title": "Dette vil omdirigere dig til Student LMS.",
"description": "Du er ved at se, hvad en studerende vil se, når de tilmelder sig dette kursus",
"copy_link": "Kopiér link",
"go_to_lms": "Gå til LMS"
}
},
"courses": {
@@ -3069,6 +3112,11 @@
"field_nav_count_other": "{count} links",
"hero_empty": "—",
"customize": "Tilpas landingsside"
},
"preview_tabs": {
"label": "Forhåndsvisningsside",
"home": "Hjem",
"course": "Kursus"
}
},
"organization": {
@@ -3322,7 +3370,10 @@
"tic_tac": "Tictac tå",
"see_more": "Se mere",
"whats_new": "Hvad er nyt",
"launch_week": "Lanceringsuge"
"launch_week": "Lanceringsuge",
"feedback": "Feedback",
"documentation": "Dokumentation",
"need_help": "Har du brug for hjælp?"
},
"login": {
"welcome": "Velkommen tilbage",
@@ -3567,6 +3618,18 @@
"joined": "Tilsluttet organisation",
"join_failed": "Kunne ikke deltage i organisationen"
}
},
"link": {
"page_title": "Tilmeld dig {orgName} på ClassroomIO",
"invitation_student": "Du er blevet inviteret til at deltage i {orgName} som elev.",
"invitation_teacher": "Du er blevet inviteret til at deltage i {orgName} som lærer.",
"invitation_admin": "Du er blevet inviteret til at deltage i {orgName} som administrator.",
"invitation_fallback": "Du er blevet inviteret til at deltage i {orgName} som {role}.",
"accept_button": "Deltag i organisationen",
"go_to_dashboard": "Gå til Dashboard",
"disabled": "Dette invitationslink er blevet deaktiveret af organisationen.",
"join_failed": "Kunne ikke deltage i organisationen",
"joined": "Tilsluttet organisation"
}
},
"automation": {
@@ -3889,7 +3952,7 @@
"resume": "Genoptag",
"stopped_content_kept": "Stoppet. Oprettet indhold er blevet bevaret.",
"mention_lesson": "Lektion",
"mention_exercise": "Motion",
"mention_exercise": "Øvelse",
"mention_section": "Sektion",
"mention_no_results": "Intet matchende indhold",
"uploading_document": "Uploader dokument...",
@@ -4053,7 +4116,11 @@
"title": "Arbejder reagerer ikke",
"body": "Denne kørsel har ventet i mere end 30 sekunder uden nogen afhentning af arbejderen. Baggrundsarbejderen er muligvis nede eller genstarter."
}
}
},
"ask_ai": "Spørg AI",
"content_input_placeholder": "Spørg om dette indhold...",
"ask_ai_expand_aria": "Åbn Spørg AI-input",
"ask_ai_input_aria": "Spørg AI om dette indhold"
},
"widgets": {
"heading": "Widgets",
@@ -350,7 +350,9 @@
"thumbnail_updated": "Miniaturbild aktualisiert",
"thumbnail_update_failed": "Miniaturansicht konnte nicht aktualisiert werden",
"thumbnail_regen_started": "Miniaturansichten werden neu generiert…",
"thumbnail_regen_failed": "Die Miniaturansichten konnten nicht neu generiert werden"
"thumbnail_regen_failed": "Die Miniaturansichten konnten nicht neu generiert werden",
"transcript_saved": "Transkript aktualisiert",
"transcript_save_failed": "Das Transkript konnte nicht gespeichert werden"
},
"tags": {
"group_created": "Tag-Gruppe erstellt",
@@ -420,6 +422,18 @@
"workspace_is_primary": "Sie können den primären Arbeitsbereich nicht löschen.",
"workspace_not_found": "Arbeitsbereich nicht gefunden.",
"not_primary_workspace": "Wechseln Sie zu Ihrem primären Arbeitsbereich, um Kontoarbeitsbereiche zu verwalten."
},
"link_invite": {
"generated": "Link-Einladung generiert",
"enabled": "Link-Einladung aktiviert",
"disabled": "Linkeinladung deaktiviert"
},
"view_as_student": {
"failed": "Die Studentenansicht konnte nicht geöffnet werden. Bitte versuchen Sie es erneut."
},
"lesson_video": {
"generate_1080_completed": "1080p-Wiedergabe hinzugefügt",
"generate_1080_failed": "Die 1080p-Wiedergabe konnte nicht generiert werden"
}
},
"explore": {
@@ -905,7 +919,9 @@
"short_video": "Kurzes Video",
"replace_cover": "Titelbild ersetzen",
"replace": "Ersetzen",
"helper": "Geben Sie einen Link zu einem YouTube-Video ein"
"helper": "Geben Sie einen Link zu einem YouTube-Video ein",
"remove": "Entfernen",
"no_cover": "Kein Titelbild festgelegt"
},
"title": {
"header": "Kopfzeile",
@@ -1030,7 +1046,17 @@
"members": "Mitglieder",
"invite_sent": "Einladung gesendet",
"you": "Du",
"remove": "Entfernen"
"remove": "Entfernen",
"link_invite": {
"heading": "Link-Einladung",
"description": "Jeder mit diesem Link kann Ihrer Organisation beitreten.",
"generate": "Link generieren",
"copy": "Kopieren",
"copied": "Kopiert!",
"toggle_label": "Linkeinladung aktiv",
"disabled_notice": "Dieser Link ist deaktiviert. Aktivieren Sie es, um neuen Mitgliedern den Beitritt über einen Link zu ermöglichen.",
"select_role": "Wählen Sie eine Rolle aus"
}
},
"roles": {
"admin": "Admin",
@@ -1879,7 +1905,11 @@
"language": "Language: {language}",
"empty": "No transcript yet. You can generate one from this card’s menu after the video is uploaded.",
"loading": "Loading transcript…",
"open_side_panel": "Öffnen Sie das Transkriptfenster"
"open_side_panel": "Öffnen Sie das Transkriptfenster",
"edit": "Transkript bearbeiten",
"save": "Speichern",
"cancel": "Abbrechen",
"segment_label": "Segmentieren um {timestamp}"
},
"simple_card": {
"kind_youtube": "YouTube",
@@ -1889,7 +1919,13 @@
"course_fallback": "Kurs",
"menu_aria": "Videooptionen"
},
"view_transcript": "Transkription ansehen"
"view_transcript": "Transkription ansehen",
"playback_error": "Das Laden dieses Videos ist fehlgeschlagen.",
"playback_reload": "Video neu laden",
"generate_1080": "Generieren Sie 1080p",
"generate_1080_in_progress": "Generiert 1080p…",
"generate_1080_ready": "1080p verfügbar",
"generate_1080_unavailable": "1080p ist für dieses Quellvideo nicht verfügbar"
},
"slide": {
"title": "Rutsche",
@@ -2085,7 +2121,8 @@
},
"header": {
"preview": "Preview course",
"preview_missing_slug": "Generate and save a course slug before previewing."
"preview_missing_slug": "Generate and save a course slug before previewing.",
"view_as_student": "Als Student anzeigen"
},
"sidebar": {
"back_to_course": "Zurück zum Kurs",
@@ -2105,12 +2142,12 @@
"nav_attendance": "Anwesenheit",
"nav_submissions": "Einsendungen",
"nav_marks": "Markierungen",
"nav_compliance": "Compliance",
"nav_people": "Menschen",
"nav_analytics": "Analytik",
"nav_certificates": "Zertifikate",
"nav_landing_page": "Landingpage",
"nav_settings": "Einstellungen",
"nav_compliance": "Compliance",
"nav_ai_assistant": "Assistent",
"nav_ai_tutor": "KI-Tutor"
},
@@ -2202,6 +2239,12 @@
"form_title": "Erzählen Sie uns von Ihrem Produkt"
}
}
},
"view_as_student": {
"title": "Dadurch werden Sie zum Student LMS weitergeleitet.",
"description": "Sie werden gleich sehen, was ein Student sehen wird, wenn er sich für diesen Kurs anmeldet",
"copy_link": "Link kopieren",
"go_to_lms": "Gehen Sie zu LMS"
}
},
"courses": {
@@ -3069,6 +3112,11 @@
"field_nav_count_other": "{count} Links",
"hero_empty": "—",
"customize": "Landingpage anpassen"
},
"preview_tabs": {
"label": "Vorschauseite",
"home": "Startseite",
"course": "Kurs"
}
},
"organization": {
@@ -3322,7 +3370,10 @@
"tic_tac": "Tictac-Zehe",
"see_more": "Mehr sehen",
"whats_new": "Was ist neu?",
"launch_week": "Startwoche"
"launch_week": "Startwoche",
"feedback": "Rückmeldung",
"documentation": "Dokumentation",
"need_help": "Brauchen Sie Hilfe?"
},
"login": {
"welcome": "Willkommen zurück",
@@ -3567,6 +3618,18 @@
"joined": "Der Organisation beigetreten",
"join_failed": "Der Beitritt zur Organisation ist fehlgeschlagen"
}
},
"link": {
"page_title": "Treten Sie {orgName} auf ClassroomIO bei",
"invitation_student": "Sie wurden eingeladen, sich {orgName} als Student anzuschließen.",
"invitation_teacher": "Sie wurden eingeladen, sich {orgName} als Lehrer anzuschließen.",
"invitation_admin": "Sie wurden eingeladen, {orgName} als Administrator beizutreten.",
"invitation_fallback": "Sie wurden eingeladen, {orgName} als {role} beizutreten.",
"accept_button": "Treten Sie der Organisation bei",
"go_to_dashboard": "Gehen Sie zum Dashboard",
"disabled": "Dieser Einladungslink wurde von der Organisation deaktiviert.",
"join_failed": "Der Beitritt zur Organisation ist fehlgeschlagen",
"joined": "Der Organisation beigetreten"
}
},
"automation": {
@@ -3886,7 +3949,7 @@
"new_chat": "Neuer Chat",
"tokens_label": "Token",
"implementing_course_plan": "Kursplan umsetzen",
"resume": "Lebenslauf",
"resume": "Fortsetzen",
"stopped_content_kept": "Angehalten. Erstellte Inhalte wurden beibehalten.",
"mention_lesson": "Lektion",
"mention_exercise": "Übung",
@@ -4053,7 +4116,11 @@
"title": "Arbeiter reagiert nicht",
"body": "Dieser Lauf hat mehr als 30 Sekunden gewartet, ohne dass ein Arbeiter abgeholt wurde. Der Hintergrund-Worker ist möglicherweise nicht verfügbar oder wird neu gestartet."
}
}
},
"ask_ai": "Fragen Sie die KI",
"content_input_placeholder": "Fragen Sie nach diesem Inhalt…",
"ask_ai_expand_aria": "Öffnen Sie „Ask AI Input“.",
"ask_ai_input_aria": "Fragen Sie AI nach diesem Inhalt"
},
"widgets": {
"heading": "Widgets",
@@ -386,7 +386,9 @@
"tic_tac": "Tictac toe",
"see_more": "See more",
"whats_new": "What's new",
"launch_week": "Launch week"
"feedback": "Feedback",
"documentation": "Documentation",
"need_help": "Need help?"
},
"settings": {
"heading": "Settings",
@@ -670,6 +672,11 @@
"preview": "Preview",
"card_menu_label": "Theme options"
},
"preview_tabs": {
"label": "Preview page",
"home": "Home",
"course": "Course"
},
"editor": {
"save": "Save",
"close": "Close",
@@ -986,8 +993,8 @@
"hls_upload": {
"stage": {
"probing": "Reading video…",
"encoding": "Encoding {rung} ({percent}%)",
"uploading": "Uploading segments ({uploaded}/{total})",
"encoding": "Encoding video…",
"uploading": "Uploading…",
"thumbnail": "Generating thumbnail…",
"finalizing": "Saving…",
"done": "Ready",
@@ -2125,7 +2132,14 @@
},
"header": {
"preview": "Preview course",
"preview_missing_slug": "Generate and save a course slug before previewing."
"preview_missing_slug": "Generate and save a course slug before previewing.",
"view_as_student": "View as student"
},
"view_as_student": {
"title": "This will redirect you to the Student LMS.",
"description": "You are about to see what a student will see when they enroll in this course",
"copy_link": "Copy link",
"go_to_lms": "Go to LMS"
},
"navItem": {
"news_feed": {
@@ -2336,6 +2350,12 @@
"generate_transcript": "Generate transcription",
"generate_transcript_in_progress": "Transcribing…",
"view_transcript": "View transcription",
"generate_1080": "Generate 1080p",
"generate_1080_in_progress": "Generating 1080p…",
"generate_1080_ready": "1080p available",
"generate_1080_unavailable": "1080p unavailable for this source video",
"playback_error": "Loading this video failed.",
"playback_reload": "Reload video",
"simple_card": {
"kind_youtube": "YouTube",
"kind_upload": "Upload",
@@ -2350,7 +2370,11 @@
"captions_label": "Captions",
"language": "Language: {language}",
"empty": "No transcript yet. You can generate one from this card’s menu after the video is uploaded.",
"loading": "Loading transcript…"
"loading": "Loading transcript…",
"edit": "Edit transcript",
"save": "Save",
"cancel": "Cancel",
"segment_label": "Segment at {timestamp}"
}
},
"document": {
@@ -3195,7 +3219,17 @@
"members": "Members",
"invite_sent": "Invite Sent",
"you": "You",
"remove": "Remove"
"remove": "Remove",
"link_invite": {
"heading": "Link Invite",
"description": "Anyone with this link can join your organization.",
"generate": "Generate Link",
"copy": "Copy",
"copied": "Copied!",
"toggle_label": "Link invite active",
"disabled_notice": "This link is disabled. Enable it to allow new members to join via link.",
"select_role": "Select a role"
}
}
},
"certificates": {
@@ -3307,8 +3341,10 @@
"title": "Title",
"description": "Description",
"short_video": "Short Video",
"replace_cover": "Replace cover image",
"replace_cover": "Cover image",
"replace": "Replace",
"remove": "Remove",
"no_cover": "No cover image set",
"helper": "Enter a link to a youtube video"
},
"reviews_form": {
@@ -3915,6 +3951,9 @@
"url_copied": "Course URL copied",
"url_copy_failed": "Could not copy URL"
},
"view_as_student": {
"failed": "Couldn't open the student view. Please try again."
},
"something": "Something went wrong - Please try later",
"update": "Update",
"update_failed": "Update failed",
@@ -3940,7 +3979,13 @@
"transcription_started": "Transcription started",
"transcription_start_failed": "Could not start transcription",
"transcription_completed": "Transcription finished",
"transcript_fetch_failed": "Could not load transcript"
"transcript_fetch_failed": "Could not load transcript",
"transcript_saved": "Transcript updated",
"transcript_save_failed": "Could not save transcript"
},
"lesson_video": {
"generate_1080_completed": "1080p rendition added",
"generate_1080_failed": "Could not generate 1080p rendition"
},
"poll": {
"error": {
@@ -4032,6 +4077,11 @@
"remove_fail": "Failed to remove user, please try again",
"remove_success": "Member removed successfully"
},
"link_invite": {
"generated": "Link invite generated",
"enabled": "Link invite enabled",
"disabled": "Link invite disabled"
},
"tags": {
"group_created": "Tag group created",
"group_updated": "Tag group updated",
@@ -4177,6 +4227,18 @@
"joined": "Joined organization",
"join_failed": "Failed to join organization"
}
},
"link": {
"page_title": "Join {orgName} on ClassroomIO",
"invitation_student": "You've been invited to join {orgName} as a student.",
"invitation_teacher": "You've been invited to join {orgName} as a teacher.",
"invitation_admin": "You've been invited to join {orgName} as an admin.",
"invitation_fallback": "You've been invited to join {orgName} as {role}.",
"accept_button": "Join organization",
"go_to_dashboard": "Go to Dashboard",
"disabled": "This invite link has been disabled by the organization.",
"join_failed": "Failed to join organization",
"joined": "Joined organization"
}
},
"content": {
@@ -4339,7 +4401,7 @@
"run_completed": "Course generation complete",
"run_failed": "Course generation failed",
"run_canceled": "Course generation canceled",
"run_waiting_for_worker": "Waiting for the background worker",
"run_waiting_for_worker": "Getting things ready…",
"run_checkpoint": "Saving progress checkpoint",
"plan_implement": "Implement Plan",
"plan_ask_changes_placeholder": "Tell me what to change about the plan…",
@@ -4350,6 +4412,10 @@
"resize_panel_aria_label": "Resize AI assistant panel",
"generic_working": "Working",
"input_placeholder": "Ask the AI assistant...",
"ask_ai": "Ask AI",
"content_input_placeholder": "Ask about this content…",
"ask_ai_expand_aria": "Open Ask AI input",
"ask_ai_input_aria": "Ask AI about this content",
"quote_lesson_note": "Quote in assistant",
"attach_document": "Attach a document (PDF, DOCX, PPTX)",
"upgrade_to_upload": "Upgrade to upload documents",
@@ -350,7 +350,9 @@
"thumbnail_updated": "Miniatura actualizada",
"thumbnail_update_failed": "No se pudo actualizar la miniatura",
"thumbnail_regen_started": "Regenerando miniaturas…",
"thumbnail_regen_failed": "No se pudieron regenerar las miniaturas"
"thumbnail_regen_failed": "No se pudieron regenerar las miniaturas",
"transcript_saved": "Transcripción actualizada",
"transcript_save_failed": "No se pudo guardar la transcripción"
},
"tags": {
"group_created": "Grupo de etiquetas creado",
@@ -420,6 +422,18 @@
"workspace_is_primary": "No puede eliminar el espacio de trabajo principal.",
"workspace_not_found": "Espacio de trabajo no encontrado.",
"not_primary_workspace": "Cambie a su espacio de trabajo principal para administrar los espacios de trabajo de la cuenta."
},
"link_invite": {
"generated": "Invitación de enlace generada",
"enabled": "Invitación de enlace habilitada",
"disabled": "Invitación a enlace inhabilitada"
},
"view_as_student": {
"failed": "No se pudo abrir la vista de estudiantes. Por favor inténtalo de nuevo."
},
"lesson_video": {
"generate_1080_completed": "Se agregó una reproducción de 1080p",
"generate_1080_failed": "No se pudo generar una reproducción de 1080p"
}
},
"explore": {
@@ -905,7 +919,9 @@
"short_video": "Vídeo corto",
"replace_cover": "Reemplazar imagen de portada",
"replace": "Reemplazar",
"helper": "Introduce un enlace a un vídeo de youtube."
"helper": "Introduce un enlace a un vídeo de youtube.",
"remove": "Quitar",
"no_cover": "No hay imagen de portada establecida"
},
"title": {
"header": "encabezado",
@@ -1030,7 +1046,17 @@
"members": "Miembros",
"invite_sent": "Invitación enviada",
"you": "tu",
"remove": "Quitar"
"remove": "Quitar",
"link_invite": {
"heading": "Invitación de enlace",
"description": "Cualquiera que tenga este enlace puede unirse a su organización.",
"generate": "Generar enlace",
"copy": "Copiar",
"copied": "¡Copiado!",
"toggle_label": "Invitación de enlace activa",
"disabled_notice": "Este enlace está deshabilitado. Habilítelo para permitir que nuevos miembros se unan a través de un enlace.",
"select_role": "Seleccione un rol"
}
},
"roles": {
"admin": "administrador",
@@ -1879,7 +1905,11 @@
"language": "Language: {language}",
"empty": "No transcript yet. You can generate one from this card’s menu after the video is uploaded.",
"loading": "Loading transcript…",
"open_side_panel": "Abrir panel de transcripción"
"open_side_panel": "Abrir panel de transcripción",
"edit": "Editar transcripción",
"save": "Guardar",
"cancel": "Cancelar",
"segment_label": "Segmentar en {timestamp}"
},
"simple_card": {
"kind_youtube": "youtube",
@@ -1889,7 +1919,13 @@
"course_fallback": "Curso",
"menu_aria": "Opciones de vídeo"
},
"view_transcript": "Ver transcripción"
"view_transcript": "Ver transcripción",
"playback_error": "Error al cargar este vídeo.",
"playback_reload": "Recargar vídeo",
"generate_1080": "Generar 1080p",
"generate_1080_in_progress": "Generando 1080p…",
"generate_1080_ready": "1080p disponible",
"generate_1080_unavailable": "1080p no disponible para este vídeo fuente"
},
"slide": {
"title": "diapositiva",
@@ -2085,7 +2121,8 @@
},
"header": {
"preview": "Preview course",
"preview_missing_slug": "Generate and save a course slug before previewing."
"preview_missing_slug": "Generate and save a course slug before previewing.",
"view_as_student": "Ver como estudiante"
},
"sidebar": {
"back_to_course": "volver al curso",
@@ -2105,12 +2142,12 @@
"nav_attendance": "Asistencia",
"nav_submissions": "Envíos",
"nav_marks": "marcas",
"nav_compliance": "Cumplimiento",
"nav_people": "gente",
"nav_analytics": "Analítica",
"nav_certificates": "Certificados",
"nav_landing_page": "Página de destino",
"nav_settings": "Configuración",
"nav_compliance": "Cumplimiento",
"nav_ai_assistant": "Asistente",
"nav_ai_tutor": "Tutor de IA"
},
@@ -2202,6 +2239,12 @@
"form_title": "Cuéntanos sobre tu producto"
}
}
},
"view_as_student": {
"title": "Esto lo redireccionará al Student LMS.",
"description": "Estás a punto de ver lo que verá un estudiante cuando se inscriba en este curso.",
"copy_link": "Copiar enlace",
"go_to_lms": "Ir a LMS"
}
},
"courses": {
@@ -3069,6 +3112,11 @@
"field_nav_count_other": "{count} enlaces",
"hero_empty": "—",
"customize": "Personalizar la página de destino"
},
"preview_tabs": {
"label": "Página de vista previa",
"home": "Inicio",
"course": "Curso"
}
},
"organization": {
@@ -3322,7 +3370,10 @@
"tic_tac": "dedo del pie tres en raya",
"see_more": "Ver más",
"whats_new": "¿Qué hay de nuevo?",
"launch_week": "Semana de lanzamiento"
"launch_week": "Semana de lanzamiento",
"feedback": "Comentarios",
"documentation": "Documentación",
"need_help": "¿Necesitas ayuda?"
},
"login": {
"welcome": "Bienvenido de nuevo",
@@ -3567,6 +3618,18 @@
"joined": "Organización unida",
"join_failed": "No se pudo unir a la organización"
}
},
"link": {
"page_title": "Únase a {orgName} en ClassroomIO",
"invitation_student": "Te invitaron a unirte a {orgName} como estudiante.",
"invitation_teacher": "Te han invitado a unirte a {orgName} como profesor.",
"invitation_admin": "Le invitaron a unirse a {orgName} como administrador.",
"invitation_fallback": "Te invitaron a unirte a {orgName} como {role}.",
"accept_button": "Unirse a la organización",
"go_to_dashboard": "Ir al panel",
"disabled": "Este enlace de invitación ha sido deshabilitado por la organización.",
"join_failed": "No se pudo unir a la organización",
"joined": "Organización unida"
}
},
"automation": {
@@ -3886,7 +3949,7 @@
"new_chat": "Nuevo chat",
"tokens_label": "fichas",
"implementing_course_plan": "Implementación del plan del curso",
"resume": "Currículum",
"resume": "Reanudar",
"stopped_content_kept": "Detenido. El contenido creado se ha mantenido.",
"mention_lesson": "Lección",
"mention_exercise": "ejercicio",
@@ -3995,7 +4058,7 @@
"context_compacted_badge": "Conversación compactada ({count} mensajes anteriores)",
"student_quick_action": {
"explain_lesson": "Explica esta lección",
"quiz_me": "Pregúntame sobre esto",
"quiz_me": "Ponme a prueba",
"summarize_section": "Resumir esta sección",
"what_to_review": "¿Qué debo revisar a continuación?"
},
@@ -4053,7 +4116,11 @@
"title": "trabajador no responde",
"body": "Esta ejecución ha estado esperando más de 30 segundos sin que ningún trabajador haya sido recogido. Es posible que el trabajador en segundo plano esté inactivo o reiniciándose."
}
}
},
"ask_ai": "Pregúntale a la IA",
"content_input_placeholder": "Pregunta por este contenido...",
"ask_ai_expand_aria": "Abrir Preguntar entrada a AI",
"ask_ai_input_aria": "Pregúntale a AI sobre este contenido"
},
"widgets": {
"heading": "widgets",
@@ -350,7 +350,9 @@
"thumbnail_updated": "Miniature mise à jour",
"thumbnail_update_failed": "Échec de la mise à jour de la vignette",
"thumbnail_regen_started": "Régénération des vignettes…",
"thumbnail_regen_failed": "Échec de la régénération des miniatures"
"thumbnail_regen_failed": "Échec de la régénération des miniatures",
"transcript_saved": "Transcription mise à jour",
"transcript_save_failed": "Impossible d'enregistrer la transcription"
},
"tags": {
"group_created": "Groupe de balises créé",
@@ -420,6 +422,18 @@
"workspace_is_primary": "Vous ne pouvez pas supprimer l'espace de travail principal.",
"workspace_not_found": "Espace de travail introuvable.",
"not_primary_workspace": "Basculez vers votre espace de travail principal pour gérer les espaces de travail de compte."
},
"link_invite": {
"generated": "Invitation de lien générée",
"enabled": "Invitation de lien activée",
"disabled": "Invitation au lien désactivée"
},
"view_as_student": {
"failed": "Impossible d'ouvrir la vue étudiant. Veuillez réessayer."
},
"lesson_video": {
"generate_1080_completed": "Rendu 1080p ajouté",
"generate_1080_failed": "Impossible de générer un rendu 1080p"
}
},
"explore": {
@@ -905,7 +919,9 @@
"short_video": "Courte vidéo",
"replace_cover": "Remplacer l'image de couverture",
"replace": "Remplacer",
"helper": "Entrez un lien vers une vidéo YouTube"
"helper": "Entrez un lien vers une vidéo YouTube",
"remove": "Supprimer",
"no_cover": "Aucune image de couverture définie"
},
"title": {
"header": "En-tête",
@@ -1030,7 +1046,17 @@
"members": "Membres",
"invite_sent": "Invitation envoyée",
"you": "Vous",
"remove": "Supprimer"
"remove": "Supprimer",
"link_invite": {
"heading": "Inviter un lien",
"description": "Toute personne disposant de ce lien peut rejoindre votre organisation.",
"generate": "Générer un lien",
"copy": "Copier",
"copied": "Copié!",
"toggle_label": "Invitation de lien active",
"disabled_notice": "Ce lien est désactivé. Activez-le pour permettre aux nouveaux membres de rejoindre via un lien.",
"select_role": "Sélectionnez un rôle"
}
},
"roles": {
"admin": "Administrateur",
@@ -1879,7 +1905,11 @@
"language": "Language: {language}",
"empty": "No transcript yet. You can generate one from this card’s menu after the video is uploaded.",
"loading": "Loading transcript…",
"open_side_panel": "Ouvrir le panneau de transcription"
"open_side_panel": "Ouvrir le panneau de transcription",
"edit": "Modifier la transcription",
"save": "Enregistrer",
"cancel": "Annuler",
"segment_label": "Segment à {timestamp}"
},
"simple_card": {
"kind_youtube": "YouTube",
@@ -1889,7 +1919,13 @@
"course_fallback": "Cours",
"menu_aria": "Options vidéo"
},
"view_transcript": "Voir la transcription"
"view_transcript": "Voir la transcription",
"playback_error": "Le chargement de cette vidéo a échoué.",
"playback_reload": "Recharger la vidéo",
"generate_1080": "Générer 1080p",
"generate_1080_in_progress": "Génération de 1080p…",
"generate_1080_ready": "1080p disponible",
"generate_1080_unavailable": "1080p indisponible pour cette vidéo source"
},
"slide": {
"title": "Diapositive",
@@ -2085,7 +2121,8 @@
},
"header": {
"preview": "Preview course",
"preview_missing_slug": "Generate and save a course slug before previewing."
"preview_missing_slug": "Generate and save a course slug before previewing.",
"view_as_student": "Afficher en tant qu'étudiant"
},
"sidebar": {
"back_to_course": "Retour au cours",
@@ -2105,12 +2142,12 @@
"nav_attendance": "Participation",
"nav_submissions": "Soumissions",
"nav_marks": "Marques",
"nav_compliance": "Conformité",
"nav_people": "Les gens",
"nav_analytics": "Analyse",
"nav_certificates": "Certificats",
"nav_landing_page": "Page de destination",
"nav_settings": "Paramètres",
"nav_compliance": "Conformité",
"nav_ai_assistant": "Assistante",
"nav_ai_tutor": "Tuteur IA"
},
@@ -2202,6 +2239,12 @@
"form_title": "Parlez-nous de votre produit"
}
}
},
"view_as_student": {
"title": "Cela vous redirigera vers le LMS Étudiant.",
"description": "Vous êtes sur le point de voir ce qu'un étudiant verra lorsqu'il s'inscrira à ce cours",
"copy_link": "Copier le lien",
"go_to_lms": "Aller au LMS"
}
},
"courses": {
@@ -3069,6 +3112,11 @@
"field_nav_count_other": "{count} liens",
"hero_empty": "—",
"customize": "Personnaliser la page de destination"
},
"preview_tabs": {
"label": "Page d'aperçu",
"home": "Accueil",
"course": "Cours"
}
},
"organization": {
@@ -3322,7 +3370,10 @@
"tic_tac": "Tic-tac",
"see_more": "Voir plus",
"whats_new": "Quoi de neuf",
"launch_week": "Semaine de lancement"
"launch_week": "Semaine de lancement",
"feedback": "Commentaires",
"documentation": "Documentation",
"need_help": "Besoin d'aide ?"
},
"login": {
"welcome": "Bon retour",
@@ -3567,6 +3618,18 @@
"joined": "Organisation rejointe",
"join_failed": "Impossible de rejoindre l'organisation"
}
},
"link": {
"page_title": "Rejoignez {orgName} sur ClassroomIO",
"invitation_student": "Vous avez été invité à rejoindre {orgName} en tant qu'étudiant.",
"invitation_teacher": "Vous avez été invité à rejoindre {orgName} en tant qu'enseignant.",
"invitation_admin": "Vous avez été invité à rejoindre {orgName} en tant qu'administrateur.",
"invitation_fallback": "Vous avez été invité à rejoindre {orgName} en tant que {role}.",
"accept_button": "Rejoindre l'organisation",
"go_to_dashboard": "Aller au tableau de bord",
"disabled": "Ce lien d'invitation a été désactivé par l'organisation.",
"join_failed": "Impossible de rejoindre l'organisation",
"joined": "Organisation rejointe"
}
},
"automation": {
@@ -3886,7 +3949,7 @@
"new_chat": "Nouvelle discussion",
"tokens_label": "jetons",
"implementing_course_plan": "Mise en œuvre du plan de cours",
"resume": "CV",
"resume": "Reprendre",
"stopped_content_kept": "Arrêté. Le contenu créé a été conservé.",
"mention_lesson": "Leçon",
"mention_exercise": "Exercice",
@@ -4053,7 +4116,11 @@
"title": "Le travailleur ne répond pas",
"body": "Cette exécution attend depuis plus de 30 secondes sans qu'aucun travailleur ne soit récupéré. Le travailleur en arrière-plan est peut-être en panne ou redémarre."
}
}
},
"ask_ai": "Demandez à l'IA",
"content_input_placeholder": "Renseignez-vous sur ce contenu…",
"ask_ai_expand_aria": "Ouvrir la saisie de Ask AI",
"ask_ai_input_aria": "Interrogez AI à propos de ce contenu"
},
"widgets": {
"heading": "Widgets",
@@ -350,7 +350,9 @@
"thumbnail_updated": "थंबनेल अपडेट किया गया",
"thumbnail_update_failed": "थंबनेल अपडेट करने में विफल",
"thumbnail_regen_started": "थंबनेल पुनर्जीवित हो रहे हैं…",
"thumbnail_regen_failed": "थंबनेल पुन: उत्पन्न करने में विफल"
"thumbnail_regen_failed": "थंबनेल पुन: उत्पन्न करने में विफल",
"transcript_saved": "प्रतिलेख अद्यतन किया गया",
"transcript_save_failed": "प्रतिलेख सहेजा नहीं जा सका"
},
"tags": {
"group_created": "टैग समूह बनाया गया",
@@ -420,6 +422,18 @@
"workspace_is_primary": "आप प्राथमिक कार्यस्थान को हटा नहीं सकते.",
"workspace_not_found": "कार्यस्थल नहीं मिला.",
"not_primary_workspace": "खाता कार्यस्थान प्रबंधित करने के लिए अपने प्राथमिक कार्यस्थान पर स्विच करें।"
},
"link_invite": {
"generated": "लिंक आमंत्रण जनरेट हुआ",
"enabled": "लिंक आमंत्रण सक्षम किया गया",
"disabled": "लिंक आमंत्रण अक्षम किया गया"
},
"view_as_student": {
"failed": "विद्यार्थी दृश्य नहीं खुल सका. कृपया पुन: प्रयास करें।"
},
"lesson_video": {
"generate_1080_completed": "1080p प्रस्तुतिकरण जोड़ा गया",
"generate_1080_failed": "1080p प्रस्तुतिकरण उत्पन्न नहीं हो सका"
}
},
"explore": {
@@ -905,7 +919,9 @@
"short_video": "लघु वीडियो",
"replace_cover": "कवर छवि बदलें",
"replace": "बदलें",
"helper": "किसी यूट्यूब वीडियो का लिंक दर्ज करें"
"helper": "किसी यूट्यूब वीडियो का लिंक दर्ज करें",
"remove": "हटाओ",
"no_cover": "कोई कवर छवि सेट नहीं"
},
"title": {
"header": "शीर्ष लेख",
@@ -1030,7 +1046,17 @@
"members": "सदस्य",
"invite_sent": "आमंत्रण भेजा गया",
"you": "आप",
"remove": "हटाओ"
"remove": "हटाओ",
"link_invite": {
"heading": "लिंक आमंत्रण",
"description": "इस लिंक वाला कोई भी व्यक्ति आपके संगठन में शामिल हो सकता है।",
"generate": "लिंक जनरेट करें",
"copy": "प्रतिलिपि",
"copied": "नकल की गई!",
"toggle_label": "लिंक आमंत्रण सक्रिय",
"disabled_notice": "यह लिंक अक्षम है. नए सदस्यों को लिंक के माध्यम से जुड़ने की अनुमति देने के लिए इसे सक्षम करें।",
"select_role": "एक भूमिका चुनें"
}
},
"roles": {
"admin": "व्यवस्थापक",
@@ -1879,7 +1905,11 @@
"language": "Language: {language}",
"empty": "No transcript yet. You can generate one from this card’s menu after the video is uploaded.",
"loading": "Loading transcript…",
"open_side_panel": "ट्रांस्क्रिप्ट पैनल खोलें"
"open_side_panel": "ट्रांस्क्रिप्ट पैनल खोलें",
"edit": "प्रतिलेख संपादित करें",
"save": "सहेजें",
"cancel": "रद्द करें",
"segment_label": "{timestamp} पर खंड"
},
"simple_card": {
"kind_youtube": "यूट्यूब",
@@ -1889,7 +1919,13 @@
"course_fallback": "पाठ्यक्रम",
"menu_aria": "वीडियो विकल्प"
},
"view_transcript": "प्रतिलेखन देखें"
"view_transcript": "प्रतिलेखन देखें",
"playback_error": "इस वीडियो को लोड करना विफल रहा.",
"playback_reload": "वीडियो पुनः लोड करें",
"generate_1080": "1080p जनरेट करें",
"generate_1080_in_progress": "1080p जेनरेट हो रहा है...",
"generate_1080_ready": "1080p उपलब्ध",
"generate_1080_unavailable": "इस स्रोत वीडियो के लिए 1080p अनुपलब्ध है"
},
"slide": {
"title": "फिसल पट्टी",
@@ -2085,7 +2121,8 @@
},
"header": {
"preview": "Preview course",
"preview_missing_slug": "Generate and save a course slug before previewing."
"preview_missing_slug": "Generate and save a course slug before previewing.",
"view_as_student": "विद्यार्थी के रूप में देखें"
},
"sidebar": {
"back_to_course": "पाठ्यक्रम पर वापस जाएँ",
@@ -2105,12 +2142,12 @@
"nav_attendance": "उपस्थिति",
"nav_submissions": "प्रस्तुतियाँ",
"nav_marks": "निशान",
"nav_compliance": "अनुपालन",
"nav_people": "लोग",
"nav_analytics": "विश्लेषिकी",
"nav_certificates": "प्रमाणपत्र",
"nav_landing_page": "लैंडिंग पृष्ठ",
"nav_settings": "सेटिंग्स",
"nav_compliance": "अनुपालन",
"nav_ai_assistant": "सहायक",
"nav_ai_tutor": "एआई ट्यूटर"
},
@@ -2202,6 +2239,12 @@
"form_title": "हमें अपने उत्पाद के बारे में बताएं"
}
}
},
"view_as_student": {
"title": "यह आपको स्टूडेंट एलएमएस पर रीडायरेक्ट करेगा।",
"description": "आप यह देखने वाले हैं कि इस पाठ्यक्रम में दाखिला लेने पर एक छात्र क्या देखेगा",
"copy_link": "लिंक कॉपी करें",
"go_to_lms": "एलएमएस पर जाएं"
}
},
"courses": {
@@ -3069,6 +3112,11 @@
"field_nav_count_other": "{count} लिंक",
"hero_empty": "—",
"customize": "लैंडिंग पृष्ठ अनुकूलित करें"
},
"preview_tabs": {
"label": "पूर्वावलोकन पृष्ठ",
"home": "घर",
"course": "पाठ्यक्रम"
}
},
"organization": {
@@ -3322,7 +3370,10 @@
"tic_tac": "टिकटैक पैर की अंगुली",
"see_more": "और देखें",
"whats_new": "नया क्या है",
"launch_week": "लॉन्च सप्ताह"
"launch_week": "लॉन्च सप्ताह",
"feedback": "प्रतिक्रिया",
"documentation": "दस्तावेज़ीकरण",
"need_help": "मदद चाहिए?"
},
"login": {
"welcome": "पुनः स्वागत है",
@@ -3567,6 +3618,18 @@
"joined": "संगठन से जुड़े",
"join_failed": "संगठन में शामिल होने में विफल"
}
},
"link": {
"page_title": "ClassroomIO पर {orgName} से जुड़ें",
"invitation_student": "आपको एक छात्र के रूप में {orgName} में शामिल होने के लिए आमंत्रित किया गया है।",
"invitation_teacher": "आपको एक शिक्षक के रूप में {orgName} में शामिल होने के लिए आमंत्रित किया गया है।",
"invitation_admin": "आपको एक व्यवस्थापक के रूप में {orgName} से जुड़ने के लिए आमंत्रित किया गया है।",
"invitation_fallback": "आपको {orgName} में {role} के रूप में शामिल होने के लिए आमंत्रित किया गया है।",
"accept_button": "संगठन से जुड़ें",
"go_to_dashboard": "डैशबोर्ड पर जाएँ",
"disabled": "यह आमंत्रण लिंक संगठन द्वारा अक्षम कर दिया गया है.",
"join_failed": "संगठन में शामिल होने में विफल",
"joined": "संगठन से जुड़े"
}
},
"automation": {
@@ -3886,10 +3949,10 @@
"new_chat": "नई चैट",
"tokens_label": "टोकन",
"implementing_course_plan": "पाठ्यक्रम योजना का कार्यान्वयन",
"resume": "बायोडाटा",
"resume": "जारी रखें",
"stopped_content_kept": "रुक गया. निर्मित सामग्री रखी गई है.",
"mention_lesson": "पाठ",
"mention_exercise": "व्यायाम",
"mention_exercise": "अभ्यास",
"mention_section": "धारा",
"mention_no_results": "कोई मेल खाती सामग्री नहीं",
"uploading_document": "दस्तावेज़ अपलोड हो रहा है...",
@@ -4053,7 +4116,11 @@
"title": "कर्मी जवाब नहीं दे रहा है",
"body": "इस रन के लिए 30 सेकंड से अधिक समय से प्रतीक्षा की जा रही है और कोई कर्मचारी पिकअप नहीं कर रहा है। बैकग्राउंड वर्कर डाउन या रीस्टार्ट हो सकता है।"
}
}
},
"ask_ai": "एआई से पूछें",
"content_input_placeholder": "इस सामग्री के बारे में पूछें...",
"ask_ai_expand_aria": "एआई इनपुट पूछें खोलें",
"ask_ai_input_aria": "इस सामग्री के बारे में AI से पूछें"
},
"widgets": {
"heading": "विजेट्स",
@@ -350,7 +350,9 @@
"thumbnail_updated": "Miniatura zaktualizowana",
"thumbnail_update_failed": "Nie udało się zaktualizować miniatury",
"thumbnail_regen_started": "Regeneruję miniatury…",
"thumbnail_regen_failed": "Nie udało się ponownie wygenerować miniatur"
"thumbnail_regen_failed": "Nie udało się ponownie wygenerować miniatur",
"transcript_saved": "Transkrypcja zaktualizowana",
"transcript_save_failed": "Nie udało się zapisać transkrypcji"
},
"tags": {
"group_created": "Utworzono grupę tagów",
@@ -420,6 +422,18 @@
"workspace_is_primary": "Nie można usunąć podstawowego obszaru roboczego.",
"workspace_not_found": "Nie znaleziono obszaru roboczego.",
"not_primary_workspace": "Przejdź do podstawowego obszaru roboczego, aby zarządzać obszarami roboczymi konta."
},
"link_invite": {
"generated": "Wygenerowano zaproszenie do linku",
"enabled": "Zaproszenie do połączenia włączone",
"disabled": "Zaproszenie do połączenia wyłączone"
},
"view_as_student": {
"failed": "Nie można otworzyć widoku ucznia. Spróbuj ponownie."
},
"lesson_video": {
"generate_1080_completed": "Dodano wersję 1080p",
"generate_1080_failed": "Nie można wygenerować wersji 1080p"
}
},
"explore": {
@@ -905,7 +919,9 @@
"short_video": "Krótki film",
"replace_cover": "Zamień zdjęcie na okładce",
"replace": "Wymień",
"helper": "Wprowadź link do filmu na YouTube"
"helper": "Wprowadź link do filmu na YouTube",
"remove": "Usuń",
"no_cover": "Nie ustawiono obrazu na okładce"
},
"title": {
"header": "Nagłówek",
@@ -1030,7 +1046,17 @@
"members": "Członkowie",
"invite_sent": "Zaproszenie wysłane",
"you": "Ty",
"remove": "Usuń"
"remove": "Usuń",
"link_invite": {
"heading": "Zaproszenie do linku",
"description": "Każda osoba mająca ten link może dołączyć do Twojej organizacji.",
"generate": "Wygeneruj łącze",
"copy": "Kopiuj",
"copied": "Skopiowano!",
"toggle_label": "Zaproszenie do linku aktywne",
"disabled_notice": "To łącze jest wyłączone. Włącz tę opcję, aby umożliwić nowym członkom dołączanie za pośrednictwem łącza.",
"select_role": "Wybierz rolę"
}
},
"roles": {
"admin": "Administrator",
@@ -1879,7 +1905,11 @@
"language": "Language: {language}",
"empty": "No transcript yet. You can generate one from this card’s menu after the video is uploaded.",
"loading": "Loading transcript…",
"open_side_panel": "Otwórz panel transkrypcji"
"open_side_panel": "Otwórz panel transkrypcji",
"edit": "Edytuj transkrypcję",
"save": "Zapisz",
"cancel": "Anuluj",
"segment_label": "Segment o {timestamp}"
},
"simple_card": {
"kind_youtube": "YouTube",
@@ -1889,7 +1919,13 @@
"course_fallback": "Kurs",
"menu_aria": "Opcje wideo"
},
"view_transcript": "Zobacz transkrypcję"
"view_transcript": "Zobacz transkrypcję",
"playback_error": "Ładowanie tego filmu nie powiodło się.",
"playback_reload": "Załaduj ponownie wideo",
"generate_1080": "Wygeneruj 1080p",
"generate_1080_in_progress": "Generowanie 1080p…",
"generate_1080_ready": "Dostępna rozdzielczość 1080p",
"generate_1080_unavailable": "Rozdzielczość 1080p jest niedostępna dla tego wideo źródłowego"
},
"slide": {
"title": "Przesuń",
@@ -2085,7 +2121,8 @@
},
"header": {
"preview": "Preview course",
"preview_missing_slug": "Generate and save a course slug before previewing."
"preview_missing_slug": "Generate and save a course slug before previewing.",
"view_as_student": "Wyświetl jako student"
},
"sidebar": {
"back_to_course": "Powrót na kurs",
@@ -2105,12 +2142,12 @@
"nav_attendance": "Obecność",
"nav_submissions": "Zgłoszenia",
"nav_marks": "Znaki",
"nav_compliance": "Zgodność",
"nav_people": "Ludzie",
"nav_analytics": "Analityka",
"nav_certificates": "Certyfikaty",
"nav_landing_page": "Strona docelowa",
"nav_settings": "Ustawienia",
"nav_compliance": "Zgodność",
"nav_ai_assistant": "Asystent",
"nav_ai_tutor": "Nauczyciel AI"
},
@@ -2202,6 +2239,12 @@
"form_title": "Opowiedz nam o swoim produkcie"
}
}
},
"view_as_student": {
"title": "Spowoduje to przekierowanie do Student LMS.",
"description": "Zaraz zobaczysz, co zobaczy student, który zapisze się na ten kurs",
"copy_link": "Skopiuj link",
"go_to_lms": "Przejdź do LMS-a"
}
},
"courses": {
@@ -3069,6 +3112,11 @@
"field_nav_count_other": "{count} linków",
"hero_empty": "—",
"customize": "Dostosuj stronę docelową"
},
"preview_tabs": {
"label": "Strona podglądu",
"home": "Dom",
"course": "Kurs"
}
},
"organization": {
@@ -3322,7 +3370,10 @@
"tic_tac": "Palec kleszczowy",
"see_more": "Zobacz więcej",
"whats_new": "Co nowego",
"launch_week": "Tydzień uruchomienia"
"launch_week": "Tydzień uruchomienia",
"feedback": "Informacje zwrotne",
"documentation": "Dokumentacja",
"need_help": "Potrzebujesz pomocy?"
},
"login": {
"welcome": "Witamy z powrotem",
@@ -3567,6 +3618,18 @@
"joined": "Dołączył do organizacji",
"join_failed": "Nie udało się dołączyć do organizacji"
}
},
"link": {
"page_title": "Dołącz do organizacji {orgName} w ClassroomIO",
"invitation_student": "Zaproszono Cię do dołączenia do organizacji {orgName} jako student.",
"invitation_teacher": "Zaproszono Cię do dołączenia do organizacji {orgName} jako nauczyciel.",
"invitation_admin": "Zostałeś zaproszony do dołączenia do organizacji {orgName} jako administrator.",
"invitation_fallback": "Zostałeś zaproszony do dołączenia do organizacji {orgName} jako {role}.",
"accept_button": "Dołącz do organizacji",
"go_to_dashboard": "Przejdź do Panelu",
"disabled": "Ten link z zaproszeniem został wyłączony przez organizację.",
"join_failed": "Nie udało się dołączyć do organizacji",
"joined": "Dołączył do organizacji"
}
},
"automation": {
@@ -4053,7 +4116,11 @@
"title": "Pracownik nie odpowiada",
"body": "Ten przebieg czekał ponad 30 sekund bez odbioru pracownika. Proces roboczy działający w tle może być wyłączony lub uruchamiany ponownie."
}
}
},
"ask_ai": "Zapytaj AI",
"content_input_placeholder": "Zapytaj o tę treść…",
"ask_ai_expand_aria": "Otwórz wejście Zapytaj AI",
"ask_ai_input_aria": "Zapytaj AI o tę treść"
},
"widgets": {
"heading": "Widżety",
@@ -350,7 +350,9 @@
"thumbnail_updated": "Miniatura atualizada",
"thumbnail_update_failed": "Falha ao atualizar a miniatura",
"thumbnail_regen_started": "Regenerando miniaturas…",
"thumbnail_regen_failed": "Falha ao regenerar miniaturas"
"thumbnail_regen_failed": "Falha ao regenerar miniaturas",
"transcript_saved": "Transcrição atualizada",
"transcript_save_failed": "Não foi possível salvar a transcrição"
},
"tags": {
"group_created": "Grupo de tags criado",
@@ -420,6 +422,18 @@
"workspace_is_primary": "Você não pode excluir o espaço de trabalho principal.",
"workspace_not_found": "Espaço de trabalho não encontrado.",
"not_primary_workspace": "Mude para seu espaço de trabalho principal para gerenciar os espaços de trabalho da conta."
},
"link_invite": {
"generated": "Convite de link gerado",
"enabled": "Convite de link ativado",
"disabled": "Convite de link desativado"
},
"view_as_student": {
"failed": "Não foi possível abrir a visualização do aluno. Por favor, tente novamente."
},
"lesson_video": {
"generate_1080_completed": "Versão 1080p adicionada",
"generate_1080_failed": "Não foi possível gerar a renderização em 1080p"
}
},
"explore": {
@@ -905,7 +919,9 @@
"short_video": "Vídeo curto",
"replace_cover": "Substituir imagem da capa",
"replace": "Substituir",
"helper": "Insira um link para um vídeo do YouTube"
"helper": "Insira um link para um vídeo do YouTube",
"remove": "Remover",
"no_cover": "Nenhuma imagem de capa definida"
},
"title": {
"header": "Cabeçalho",
@@ -1030,7 +1046,17 @@
"members": "Membros",
"invite_sent": "Convite enviado",
"you": "Você",
"remove": "Remover"
"remove": "Remover",
"link_invite": {
"heading": "Convite de link",
"description": "Qualquer pessoa com este link pode ingressar na sua organização.",
"generate": "Gerar link",
"copy": "Copiar",
"copied": "Copiado!",
"toggle_label": "Link de convite ativo",
"disabled_notice": "Este link está desativado. Habilite-o para permitir que novos membros participem via link.",
"select_role": "Selecione uma função"
}
},
"roles": {
"admin": "Administrador",
@@ -1879,7 +1905,11 @@
"language": "Language: {language}",
"empty": "No transcript yet. You can generate one from this card’s menu after the video is uploaded.",
"loading": "Loading transcript…",
"open_side_panel": "Abrir painel de transcrição"
"open_side_panel": "Abrir painel de transcrição",
"edit": "Editar transcrição",
"save": "Salvar",
"cancel": "Cancelar",
"segment_label": "Segmentar em {timestamp}"
},
"simple_card": {
"kind_youtube": "YouTube",
@@ -1889,7 +1919,13 @@
"course_fallback": "Curso",
"menu_aria": "Opções de vídeo"
},
"view_transcript": "Ver transcrição"
"view_transcript": "Ver transcrição",
"playback_error": "Falha ao carregar este vídeo.",
"playback_reload": "Recarregar vídeo",
"generate_1080": "Gerar 1080p",
"generate_1080_in_progress": "Gerando 1080p…",
"generate_1080_ready": "1080p disponível",
"generate_1080_unavailable": "1080p indisponível para este vídeo de origem"
},
"slide": {
"title": "Deslizar",
@@ -2085,7 +2121,8 @@
},
"header": {
"preview": "Preview course",
"preview_missing_slug": "Generate and save a course slug before previewing."
"preview_missing_slug": "Generate and save a course slug before previewing.",
"view_as_student": "Ver como aluno"
},
"sidebar": {
"back_to_course": "De volta ao curso",
@@ -2105,12 +2142,12 @@
"nav_attendance": "Presença",
"nav_submissions": "Envios",
"nav_marks": "Marcas",
"nav_compliance": "Conformidade",
"nav_people": "Pessoas",
"nav_analytics": "Análise",
"nav_certificates": "Certificados",
"nav_landing_page": "Página inicial",
"nav_settings": "Configurações",
"nav_compliance": "Conformidade",
"nav_ai_assistant": "Assistente",
"nav_ai_tutor": "Tutor de IA"
},
@@ -2202,6 +2239,12 @@
"form_title": "Conte-nos sobre seu produto"
}
}
},
"view_as_student": {
"title": "Isso irá redirecioná-lo para o Student LMS.",
"description": "Você está prestes a ver o que um aluno verá ao se inscrever neste curso",
"copy_link": "Copiar link",
"go_to_lms": "Acesse o LMS"
}
},
"courses": {
@@ -3069,6 +3112,11 @@
"field_nav_count_other": "{count} links",
"hero_empty": "-",
"customize": "Personalize a página de destino"
},
"preview_tabs": {
"label": "Página de visualização",
"home": "Página inicial",
"course": "Curso"
}
},
"organization": {
@@ -3322,7 +3370,10 @@
"tic_tac": "Dedo do jogo",
"see_more": "Ver mais",
"whats_new": "O que há de novo",
"launch_week": "Semana de lançamento"
"launch_week": "Semana de lançamento",
"feedback": "Comentários",
"documentation": "Documentação",
"need_help": "Precisa de ajuda?"
},
"login": {
"welcome": "Bem vindo de volta",
@@ -3567,6 +3618,18 @@
"joined": "Organização aderida",
"join_failed": "Falha ao ingressar na organização"
}
},
"link": {
"page_title": "Junte-se a {orgName} no ClassroomIO",
"invitation_student": "Você foi convidado para ingressar em {orgName} como estudante.",
"invitation_teacher": "Você foi convidado para ingressar em {orgName} como professor.",
"invitation_admin": "Você foi convidado para ingressar em {orgName} como administrador.",
"invitation_fallback": "Você foi convidado para participar de {orgName} como {role}.",
"accept_button": "Junte-se à organização",
"go_to_dashboard": "Vá para o painel",
"disabled": "Este link de convite foi desativado pela organização.",
"join_failed": "Falha ao ingressar na organização",
"joined": "Organização aderida"
}
},
"automation": {
@@ -3886,7 +3949,7 @@
"new_chat": "Novo bate-papo",
"tokens_label": "fichas",
"implementing_course_plan": "Implementando Plano de Curso",
"resume": "Currículo",
"resume": "Continuar",
"stopped_content_kept": "Parado. O conteúdo criado foi mantido.",
"mention_lesson": "Lição",
"mention_exercise": "Exercício",
@@ -4053,7 +4116,11 @@
"title": "O trabalhador não responde",
"body": "Esta execução está aguardando há mais de 30 segundos sem nenhuma coleta de trabalhador. O trabalhador em segundo plano pode estar inativo ou reiniciando."
}
}
},
"ask_ai": "Pergunte à IA",
"content_input_placeholder": "Pergunte sobre este conteúdo…",
"ask_ai_expand_aria": "Abra a entrada Ask AI",
"ask_ai_input_aria": "Pergunte à IA sobre este conteúdo"
},
"widgets": {
"heading": "Widgets",
@@ -350,7 +350,9 @@
"thumbnail_updated": "Значок обновлен.",
"thumbnail_update_failed": "Не удалось обновить миниатюру.",
"thumbnail_regen_started": "Восстановление миниатюр…",
"thumbnail_regen_failed": "Не удалось восстановить миниатюры."
"thumbnail_regen_failed": "Не удалось восстановить миниатюры.",
"transcript_saved": "Стенограмма обновлена",
"transcript_save_failed": "Не удалось сохранить расшифровку"
},
"tags": {
"group_created": "Группа тегов создана.",
@@ -420,6 +422,18 @@
"workspace_is_primary": "Вы не можете удалить основное рабочее пространство.",
"workspace_not_found": "Рабочее пространство не найдено.",
"not_primary_workspace": "Переключитесь на основное рабочее пространство, чтобы управлять рабочими пространствами учетной записи."
},
"link_invite": {
"generated": "Приглашение по ссылке создано",
"enabled": "Приглашение по ссылке включено",
"disabled": "Приглашение по ссылке отключено"
},
"view_as_student": {
"failed": "Не удалось открыть представление учащихся. Пожалуйста, попробуйте еще раз."
},
"lesson_video": {
"generate_1080_completed": "добавлено воспроизведение 1080p",
"generate_1080_failed": "Не удалось создать воспроизведение 1080p."
}
},
"explore": {
@@ -905,7 +919,9 @@
"short_video": "Короткое видео",
"replace_cover": "Заменить изображение обложки",
"replace": "Заменить",
"helper": "Введите ссылку на видео на YouTube"
"helper": "Введите ссылку на видео на YouTube",
"remove": "Удалить",
"no_cover": "Обложка не установлена."
},
"title": {
"header": "Заголовок",
@@ -1030,7 +1046,17 @@
"members": "Члены",
"invite_sent": "Приглашение отправлено",
"you": "ты",
"remove": "Удалить"
"remove": "Удалить",
"link_invite": {
"heading": "Ссылка Пригласить",
"description": "Любой, у кого есть эта ссылка, может присоединиться к вашей организации.",
"generate": "Создать ссылку",
"copy": "Копировать",
"copied": "Скопировано!",
"toggle_label": "Приглашение по ссылке активно",
"disabled_notice": "Эта ссылка отключена. Включите его, чтобы позволить новым участникам присоединяться по ссылке.",
"select_role": "Выберите роль"
}
},
"roles": {
"admin": "Админ",
@@ -1879,7 +1905,11 @@
"language": "Language: {language}",
"empty": "No transcript yet. You can generate one from this card’s menu after the video is uploaded.",
"loading": "Loading transcript…",
"open_side_panel": "Открыть панель стенограммы"
"open_side_panel": "Открыть панель стенограммы",
"edit": "Изменить стенограмму",
"save": "Сохранить",
"cancel": "Отмена",
"segment_label": "Сегмент в {timestamp}"
},
"simple_card": {
"kind_youtube": "Ютуб",
@@ -1889,7 +1919,13 @@
"course_fallback": "Курс",
"menu_aria": "Параметры видео"
},
"view_transcript": "Посмотреть транскрипцию"
"view_transcript": "Посмотреть транскрипцию",
"playback_error": "Не удалось загрузить это видео.",
"playback_reload": "Перезагрузить видео",
"generate_1080": "Создать 1080p",
"generate_1080_in_progress": "Генерация 1080p…",
"generate_1080_ready": "доступно 1080p",
"generate_1080_unavailable": "Разрешение 1080p недоступно для этого исходного видео."
},
"slide": {
"title": "Слайд",
@@ -2085,7 +2121,8 @@
},
"header": {
"preview": "Preview course",
"preview_missing_slug": "Generate and save a course slug before previewing."
"preview_missing_slug": "Generate and save a course slug before previewing.",
"view_as_student": "Посмотреть как студент"
},
"sidebar": {
"back_to_course": "Вернуться к курсу",
@@ -2105,12 +2142,12 @@
"nav_attendance": "посещаемость",
"nav_submissions": "Материалы",
"nav_marks": "Знаки",
"nav_compliance": "Соответствие",
"nav_people": "Люди",
"nav_analytics": "Аналитика",
"nav_certificates": "Сертификаты",
"nav_landing_page": "Целевая страница",
"nav_settings": "Настройки",
"nav_compliance": "Соответствие",
"nav_ai_assistant": "Ассистент",
"nav_ai_tutor": "Репетитор по искусственному интеллекту"
},
@@ -2202,6 +2239,12 @@
"form_title": "Расскажите нам о своем продукте"
}
}
},
"view_as_student": {
"title": "Вы будете перенаправлены в Student LMS.",
"description": "Вы скоро увидите, что увидит студент, записавшись на этот курс.",
"copy_link": "Копировать ссылку",
"go_to_lms": "Перейти в СДО"
}
},
"courses": {
@@ -3069,6 +3112,11 @@
"field_nav_count_other": "{count} ссылок",
"hero_empty": "—",
"customize": "Настройте целевую страницу"
},
"preview_tabs": {
"label": "Страница предварительного просмотра",
"home": "Главная",
"course": "Курс"
}
},
"organization": {
@@ -3322,7 +3370,10 @@
"tic_tac": "Крестики-палочки",
"see_more": "Посмотреть больше",
"whats_new": "Что нового",
"launch_week": "Неделя запуска"
"launch_week": "Неделя запуска",
"feedback": "Обратная связь",
"documentation": "Документация",
"need_help": "Нужна помощь?"
},
"login": {
"welcome": "С возвращением",
@@ -3567,6 +3618,18 @@
"joined": "Присоединившаяся организация",
"join_failed": "Не удалось присоединиться к организации"
}
},
"link": {
"page_title": "Присоединяйтесь к {orgName} в ClassroomIO.",
"invitation_student": "Вас пригласили присоединиться к {orgName} в качестве студента.",
"invitation_teacher": "Вас пригласили присоединиться к {orgName} в качестве преподавателя.",
"invitation_admin": "Вас пригласили присоединиться к {orgName} в качестве администратора.",
"invitation_fallback": "Вас пригласили присоединиться к {orgName} в качестве {role}.",
"accept_button": "Присоединиться к организации",
"go_to_dashboard": "Перейти на панель управления",
"disabled": "Эта ссылка для приглашения отключена организацией.",
"join_failed": "Не удалось присоединиться к организации",
"joined": "Присоединившаяся организация"
}
},
"automation": {
@@ -3886,7 +3949,7 @@
"new_chat": "Новый чат",
"tokens_label": "жетоны",
"implementing_course_plan": "Реализация плана курса",
"resume": "Резюме",
"resume": "Продолжить",
"stopped_content_kept": "Остановился. Созданный контент сохранен.",
"mention_lesson": "Урок",
"mention_exercise": "Упражнение",
@@ -3995,7 +4058,7 @@
"context_compacted_badge": "Разговор сжат (предыдущие сообщения: {count})",
"student_quick_action": {
"explain_lesson": "Объясните этот урок",
"quiz_me": "спроси меня об этом",
"quiz_me": "Протестируй меня",
"summarize_section": "Подведите итоги этого раздела",
"what_to_review": "Что мне следует проверить дальше?"
},
@@ -4043,7 +4106,7 @@
},
"run_monitor": {
"cancel": "Отменить запуск",
"dismiss": "Уволить",
"dismiss": "Отклонить",
"now_doing": "Сейчас",
"input_disabled_hint": "Чат приостановлен, пока агент завершает создание курса. Отмените или дождитесь завершения.",
"dismiss_confirm": "Уйти",
@@ -4053,7 +4116,11 @@
"title": "Работник не отвечает",
"body": "Этот запуск ожидает более 30 секунд, а работник не подъезжает. Фоновый рабочий процесс может быть отключен или перезапущен."
}
}
},
"ask_ai": "Спросите ИИ",
"content_input_placeholder": "Спросите об этом контенте…",
"ask_ai_expand_aria": "Открыть вход Ask AI",
"ask_ai_input_aria": "Спросите ИИ об этом контенте"
},
"widgets": {
"heading": "Виджеты",
@@ -350,7 +350,9 @@
"thumbnail_updated": "Đã cập nhật hình thu nhỏ",
"thumbnail_update_failed": "Không cập nhật được hình thu nhỏ",
"thumbnail_regen_started": "Đang tạo lại hình thu nhỏ…",
"thumbnail_regen_failed": "Không thể tạo lại hình thu nhỏ"
"thumbnail_regen_failed": "Không thể tạo lại hình thu nhỏ",
"transcript_saved": "Đã cập nhật bản ghi",
"transcript_save_failed": "Không thể lưu bản ghi"
},
"tags": {
"group_created": "Đã tạo nhóm thẻ",
@@ -420,6 +422,18 @@
"workspace_is_primary": "Bạn không thể xóa không gian làm việc chính.",
"workspace_not_found": "Không tìm thấy không gian làm việc.",
"not_primary_workspace": "Chuyển sang không gian làm việc chính của bạn để quản lý không gian làm việc của tài khoản."
},
"link_invite": {
"generated": "Đã tạo liên kết lời mời",
"enabled": "Đã bật lời mời liên kết",
"disabled": "Lời mời liên kết đã bị vô hiệu hóa"
},
"view_as_student": {
"failed": "Không thể mở chế độ xem sinh viên. Vui lòng thử lại."
},
"lesson_video": {
"generate_1080_completed": "Đã thêm phiên bản 1080p",
"generate_1080_failed": "Không thể tạo phiên bản 1080p"
}
},
"explore": {
@@ -905,7 +919,9 @@
"short_video": "Video ngắn",
"replace_cover": "Thay thế ảnh bìa",
"replace": "Thay thế",
"helper": "Nhập liên kết tới video youtube"
"helper": "Nhập liên kết tới video youtube",
"remove": "Xóa",
"no_cover": "Chưa đặt ảnh bìa"
},
"title": {
"header": "tiêu đề",
@@ -1030,7 +1046,17 @@
"members": "Thành viên",
"invite_sent": "Lời mời đã gửi",
"you": "bạn",
"remove": "Xóa"
"remove": "Xóa",
"link_invite": {
"heading": "Liên kết mời",
"description": "Bất kỳ ai có liên kết này đều có thể tham gia tổ chức của bạn.",
"generate": "Tạo liên kết",
"copy": "Sao chép",
"copied": "Đã sao chép!",
"toggle_label": "Liên kết lời mời đang hoạt động",
"disabled_notice": "Liên kết này bị vô hiệu hóa. Kích hoạt nó để cho phép thành viên mới tham gia thông qua liên kết.",
"select_role": "Chọn một vai trò"
}
},
"roles": {
"admin": "Quản trị viên",
@@ -1879,7 +1905,11 @@
"language": "Language: {language}",
"empty": "No transcript yet. You can generate one from this card’s menu after the video is uploaded.",
"loading": "Loading transcript…",
"open_side_panel": "Mở bảng chép lời"
"open_side_panel": "Mở bảng chép lời",
"edit": "Chỉnh sửa bản ghi",
"save": "Lưu",
"cancel": "Hủy bỏ",
"segment_label": "Đoạn tại {timestamp}"
},
"simple_card": {
"kind_youtube": "YouTube",
@@ -1889,7 +1919,13 @@
"course_fallback": "Khóa học",
"menu_aria": "Tùy chọn video"
},
"view_transcript": "Xem bản chép lời"
"view_transcript": "Xem bản chép lời",
"playback_error": "Tải video này không thành công.",
"playback_reload": "Tải lại video",
"generate_1080": "Tạo 1080p",
"generate_1080_in_progress": "Đang tạo 1080p…",
"generate_1080_ready": "1080p có sẵn",
"generate_1080_unavailable": "1080p không có sẵn cho video nguồn này"
},
"slide": {
"title": "Trượt",
@@ -2085,7 +2121,8 @@
},
"header": {
"preview": "Preview course",
"preview_missing_slug": "Generate and save a course slug before previewing."
"preview_missing_slug": "Generate and save a course slug before previewing.",
"view_as_student": "Xem với tư cách sinh viên"
},
"sidebar": {
"back_to_course": "Quay lại khóa học",
@@ -2105,12 +2142,12 @@
"nav_attendance": "Tham dự",
"nav_submissions": "bài nộp",
"nav_marks": "Điểm",
"nav_compliance": "Tuân thủ",
"nav_people": "mọi người",
"nav_analytics": "Phân tích",
"nav_certificates": "Chứng chỉ",
"nav_landing_page": "Trang đích",
"nav_settings": "Cài đặt",
"nav_compliance": "Tuân thủ",
"nav_ai_assistant": "Trợ lý",
"nav_ai_tutor": "Gia sư AI"
},
@@ -2202,6 +2239,12 @@
"form_title": "Hãy cho chúng tôi biết về sản phẩm của bạn"
}
}
},
"view_as_student": {
"title": "Thao tác này sẽ chuyển hướng bạn đến LMS dành cho sinh viên.",
"description": "Bạn sắp biết học viên sẽ thấy gì khi họ đăng ký khóa học này",
"copy_link": "Sao chép liên kết",
"go_to_lms": "Đi tới LMS"
}
},
"courses": {
@@ -3069,6 +3112,11 @@
"field_nav_count_other": "{count} liên kết",
"hero_empty": "—",
"customize": "Tùy chỉnh trang đích"
},
"preview_tabs": {
"label": "Trang xem trước",
"home": "Trang chủ",
"course": "Khóa học"
}
},
"organization": {
@@ -3322,7 +3370,10 @@
"tic_tac": "ngón chân tictac",
"see_more": "Xem thêm",
"whats_new": "Có gì mới",
"launch_week": "Tuần ra mắt"
"launch_week": "Tuần ra mắt",
"feedback": "Phản hồi",
"documentation": "Tài liệu",
"need_help": "Cần giúp đỡ?"
},
"login": {
"welcome": "Chào mừng trở lại",
@@ -3567,6 +3618,18 @@
"joined": "Đã tham gia tổ chức",
"join_failed": "Không thể tham gia tổ chức"
}
},
"link": {
"page_title": "Tham gia cùng {orgName} trên ClassroomIO",
"invitation_student": "Bạn đã được mời tham gia {orgName} với tư cách là sinh viên.",
"invitation_teacher": "Bạn đã được mời tham gia {orgName} với tư cách là giáo viên.",
"invitation_admin": "Bạn đã được mời tham gia {orgName} với tư cách quản trị viên.",
"invitation_fallback": "Bạn đã được mời tham gia {orgName} với tư cách là {role}.",
"accept_button": "Tham gia tổ chức",
"go_to_dashboard": "Đi tới Trang tổng quan",
"disabled": "Liên kết mời này đã bị tổ chức vô hiệu hóa.",
"join_failed": "Không thể tham gia tổ chức",
"joined": "Đã tham gia tổ chức"
}
},
"automation": {
@@ -3889,7 +3952,7 @@
"resume": "Tiếp tục",
"stopped_content_kept": "Đã dừng lại. Nội dung được tạo đã được giữ lại.",
"mention_lesson": "Bài học",
"mention_exercise": "tập thể dục",
"mention_exercise": "bài tập",
"mention_section": "Phần",
"mention_no_results": "Không có nội dung phù hợp",
"uploading_document": "Đang tải tài liệu lên...",
@@ -4053,7 +4116,11 @@
"title": "Công nhân không phản hồi",
"body": "Lần chạy này đã chờ hơn 30 giây mà không có công nhân đón. Nhân viên chạy nền có thể không hoạt động hoặc đang khởi động lại."
}
}
},
"ask_ai": "Hỏi AI",
"content_input_placeholder": "Hỏi về nội dung này…",
"ask_ai_expand_aria": "Mở đầu vào Hỏi AI",
"ask_ai_input_aria": "Hỏi AI về nội dung này"
},
"widgets": {
"heading": "Widget",