PageSourceSearch

https://physoom.vercel.app/_next/static/chunks/7663-f42a2b9dd6aa4a95.js?dpl=dpl_7dtEGdjVdth4gNwwc5xsDep6kgZQ

js physoom.vercel.app collected 2026-10-03 07:29:22 UTC 57,541 bytes, 1 lines download raw bytes

1"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[7663],{57663:function(e,o,t){t.d(o,{I18nProvider:function(){return c},Q:function(){return h}});var n=t(57437),a=t(2265);let r={vi:{"lang.switchToEn":"English","lang.switchToVi":"Tiếng Việt","notif.title":"Th\xf4ng b\xe1o","notif.markAll":"Đ\xe1nh dấu đ\xe3 đọc","notif.empty":"Chưa c\xf3 th\xf4ng b\xe1o","notif.enablePush":"Bật th\xf4ng b\xe1o tr\xean m\xe1y t\xednh","notif.pushOn":"Đ\xe3 bật th\xf4ng b\xe1o m\xe1y t\xednh","notif.pushDenied":"Th\xf4ng b\xe1o bị chặn — h\xe3y bật lại trong c\xe0i đặt tr\xecnh duyệt.","nav.home":"Trang chá»§","nav.booking":"Thời kh\xf3a biểu","nav.roomSchedule":"Lịch ph\xf2ng","nav.search":"T\xecm lịch","nav.adminDashboard":"Quản trị","nav.about":"Giới thiệu","nav.apps":"Tiện \xedch","nav.appProfile":"Hồ sÆ¡ khoa học","nav.appTasks":"Nhiệm vụ & định mức","nav.login":"Đăng nhập","nav.logout":"Đăng xuất","nav.openMenu":"Mở menu","nav.closeMenu":"Đ\xf3ng menu","common.save":"Lưu","common.cancel":"Huá»·","common.close":"Đ\xf3ng","course.moveToPending":"Chuyển sang chờ xếp","course.locked":"Đ\xe3 kho\xe1","course.confirmUnschedule":"Xo\xe1 to\xe0n bộ lịch đ\xe3 xếp cá»§a m\xf4n n\xe0y v\xe0 chuyển về trạng th\xe1i chờ xếp? M\xf4n học vẫn được giữ lại.","booking.classroomSchedule":"Lịch ph\xf2ng học","booking.personalSchedule":"Lịch c\xe1 nh\xe2n","booking.classSchedule":"Lịch lớp","booking.lecturerSchedule":"Lịch giảng vi\xean","booking.eventBooking":"Đặt ph\xf2ng sá»± kiện","myev.searchPh":"T\xecm sá»± kiện / ph\xf2ng","myev.all":"Tất cả","myev.approved":"Đ\xe3 duyệt","myev.pending":"Chờ duyệt","myev.rejected":"Từ chối","myev.futureOnly":"Sắp tới","myev.noMatch":"Kh\xf4ng c\xf3 sá»± kiện khớp.","myev.noEvents":"Chưa c\xf3 sá»± kiện.","myev.owner":"Người đặt","myev.host":"Chá»§ tr\xec","myev.attendee":"Tham dá»±","myev.cancelled":"Đ\xe3 huá»·","booking.tabCourses":"M\xf4n học","booking.tabMyEvents":"Sá»± kiện cá»§a t\xf4i","booking.coursesEvents":"M\xf4n học & Sá»± kiện","cal.today":"H\xf4m nay","cal.back":"Trước","cal.next":"Sau","cal.month":"Th\xe1ng","cal.week":"Tuần","cal.day":"Ng\xe0y","cal.agenda":"Lịch biểu","cal.date":"Ng\xe0y","cal.time":"Giờ","cal.event":"Sá»± kiện","cal.noEventsRange":"Kh\xf4ng c\xf3 sá»± kiện trong khoảng n\xe0y.","booking.searchSchedule":"T\xecm lịch","booking.pleaseChoose":"Vui l\xf2ng chọn m\xf4n học","booking.dutyRoster":"Lịch trá»±c","booking.lockedFrozen":"M\xf4n đ\xe3 kho\xe1 — lịch được giữ nguy\xean (mở kho\xe1 để đổi)","booking.selectCourse":"Chọn m\xf4n học","booking.pendingClass":"M\xf4n chờ xếp","booking.plannedClass":"M\xf4n đ\xe3 xếp","booking.noAction":"Kh\xf4ng cần thao t\xe1c","booking.autoJump":"Tá»± nhảy tới ng\xe0y bắt đầu","booking.compactMode":"Chế độ gọn (kh\xf4ng ng\xe0y)","booking.mergeGroups":"Gộp nh\xf3m nhỏ (_A/_B/_C)","booking.term":"Học k\xec","booking.academicYear":"Năm học","booking.sessionCount":"Số buổi","booking.sessionsUnit":"buổi","booking.weeksUnit":"tuần","booking.pickTermHint":"Chọn học k\xec, ng\xe0y bắt đầu v\xe0 ng\xe0y kết th\xfac để xếp lịch.","booking.mergingClasses":"Đang gộp c\xe1c lớp","booking.exactClass":"Chỉ lớp","booking.compactFrom":"Từ ng\xe0y","booking.compactTo":"Đến ng\xe0y","booking.compactRange":"Gọn từ {from} đến {to}","booking.noCoursesInRange":"Kh\xf4ng c\xf3 buổi học n\xe0o trong khoảng n\xe0y","booking.weeks":"{n} tuần","booking.noTeacherTitle":"M\xf4n chưa c\xf3 giảng vi\xean — kh\xf4ng thể xếp lịch","booking.noTeacherDesc":"M\xf4n n\xe0y thiếu giảng vi\xean n\xean kh\xf4ng được chọn ph\xf2ng hay xếp lịch. H\xe3y th\xeam giảng vi\xean cho m\xf4n (sá»­a trong danh s\xe1ch hoặc trang M\xf4n học), sau đ\xf3 mới xếp ph\xf2ng.","room.mscbMismatch":"M\xe3 c\xe1n bộ kh\xf4ng đ\xfang với t\xe0i khoản đang đăng nhập.","event.details":"Th\xf4ng tin sá»± kiện","event.room":"Ph\xf2ng","event.class":"Lớp","event.time":"Thời gian","event.teacher":"Giảng vi\xean","event.host":"Người phụ tr\xe1ch","event.attendees":"Người tham dá»±","event.note":"Ghi ch\xfa","event.restricted":"Bạn kh\xf4ng c\xf3 quyền xem chi tiết. Vui l\xf2ng li\xean hệ quản trị vi\xean.","common.bookingInfo":"Th\xf4ng tin đặt lịch","common.credits":"tiết","common.lock":"Kho\xe1","common.unlock":"Mở kho\xe1","common.search":"T\xecm kiếm","common.typeToSearch":"Nhập để t\xecm...","common.actions":"Thao t\xe1c","common.status":"Trạng th\xe1i","common.export":"Xuất","common.import":"Nhập","common.open":"Mở","common.yes":"C\xf3","common.no":"Kh\xf4ng","common.class":"Lớp","common.noInfo":"Chưa c\xf3","common.cancel":"Huá»·","common.delete":"Xo\xe1","common.edit":"Sá»­a","common.save":"Lưu","common.error":"Lỗi","common.done":"Xong","common.back":"Quay lại","user.title":"Người d\xf9ng","user.total":"{n} t\xe0i khoản","user.add":"Th\xeam người d\xf9ng","user.searchPh":"T\xecm theo t\xean, email hoặc MSCB…","user.colName":"HỌ T\xcaN","user.colEmail":"EMAIL","user.colMscb":"MSCB","user.colDept":"BỘ M\xd4N","user.colAdmin":"QUYỀN","user.colActions":"THAO T\xc1C","user.roleAdmin":"Admin","user.roleUser":"Người d\xf9ng","user.none":"Kh\xf4ng c\xf3 người d\xf9ng.","user.editTitle":"Sá»­a người d\xf9ng","user.addTitle":"Th\xeam người d\xf9ng","user.fName":"Họ t\xean","user.fMscb":"M\xe3 c\xe1n bộ (MSCB)","user.fDept":"Bá»
1™ m\xf4n / Đơn vị","user.fDeptPh":"Chọn hoặc nhập bộ m\xf4n","user.fRank":"Ngạch","user.fDegree":"Học vị","user.fAdmin":"Quyền quản trị","user.emailRequired":"Vui l\xf2ng nhập email","user.saveChanges":"Lưu thay đổi","user.importTitle":"Nhập người d\xf9ng từ CSV / Excel","user.importDesc":"Cột bắt buộc: email. Tuỳ chọn: name, teacher_id, isAdmin (true/false). Người d\xf9ng đ\xe3 c\xf3 sẽ được cập nhật theo email.","user.importing":"Đang nhập…","user.importDone":"Xong — th\xeam {a}, cập nhật {u}.","user.deleteTitle":"Xo\xe1 người d\xf9ng?","user.deleteDesc":"Xo\xe1 {email}? Kh\xf4ng thể ho\xe0n t\xe1c.","share.title":"Quản l\xfd chia sẻ lịch ph\xf2ng (QR)","share.create":"Tạo li\xean kết chia sẻ","share.searchPh":"T\xecm theo ti\xeau đề, m\xe3 hoặc ph\xf2ng...","share.colTitle":"TI\xcaU ĐỀ","share.colRooms":"PH\xd2NG","share.colCode":"M\xc3","share.colLogin":"Y\xcaU CẦU ĐĂNG NHẬP","share.colLink":"LI\xcaN KẾT / QR","share.none":"Chưa c\xf3 li\xean kết chia sẻ.","share.editTitle":"Sá»­a li\xean kết chia sẻ","share.createTitle":"Tạo li\xean kết chia sẻ mới","share.fTitle":"Ti\xeau đề chia sẻ","share.fTitlePh":"VD: M\xe0n h\xecnh sảnh","share.roomsLabel":"Lịch c\xe1c ph\xf2ng","share.roomsPh":"T\xecm v\xe0 th\xeam ph\xf2ng...","share.noRooms":"Chưa chọn ph\xf2ng","share.classesLabel":"Lịch c\xe1c lớp","share.classesPh":"T\xecm v\xe0 th\xeam lớp...","share.noClasses":"Chưa chọn lớp","share.colClasses":"LỚP","share.needRoomOrClass":"Vui l\xf2ng chọn \xedt nhất một ph\xf2ng hoặc một lớp.","share.usersUnit":"{n} chỗ","share.settings":"Thiết lập hiển thị & bảo mật","share.requireLogin":"Y\xeau cầu đăng nhập qua Physoom (chỉ chia sẻ nội bộ)","share.showTeacher":"Hiện giảng vi\xean","share.showClass":"Hiện m\xe3 lớp","share.showCourse":"Hiện t\xean m\xf4n","share.update":"Cập nhật li\xean kết","share.selectAtLeastOne":"Vui l\xf2ng chọn \xedt nhất một ph\xf2ng.","share.confirmDelete":"Bạn c\xf3 chắc muốn thu hồi v\xe0 xo\xe1 li\xean kết chia sẻ n\xe0y?","share.linkCopied":"Đ\xe3 sao ch\xe9p li\xean kết!","share.qrTitle":"M\xe3 QR","share.quickCode":"M\xe3 truy cập nhanh","share.enterAt":"Nhập tại","share.liveTitle":"Lịch ph\xf2ng trá»±c tiếp","share.standardView":"Dạng lịch","share.slotView":"Lưới tiết","share.allRooms":"Tất cả ph\xf2ng ({n})","share.weekPrev":"Tuần trước","share.weekNext":"Tuần sau","share.thisWeek":"Tuần n\xe0y","share.week":"Tuần","share.loginRequired":"Cần đăng nhập","share.loginRequiredDesc":"Lịch ph\xf2ng n\xe0y y\xeau cầu bạn đăng nhập bằng t\xe0i khoản.","share.loginToView":"Đăng nhập để xem","share.errorTitle":"Lỗi tải lịch","share.errorDesc":"Li\xean kết c\xf3 thể kh\xf4ng hợp lệ, đ\xe3 bị xo\xe1 hoặc hết hạn.","nav.help":"Trợ gi\xfap","guide.title":"Hướng dẫn sá»­ dụng","guide.subtitle":"C\xe1ch d\xf9ng Physoom: xem lịch ph\xf2ng, đặt ph\xf2ng, xếp lịch m\xf4n học v\xe0 quản trị.","guide.startTour":"Xem hướng dẫn nhanh","guide.pageTour":"Hướng dẫn trang n\xe0y","guide.toc":"Mục lục","guide.tourError":"Kh\xf4ng mở được hướng dẫn nhanh tr\xean trang n\xe0y.","tour.next":"Tiếp","tour.prev":"Trước","tour.done":"Xong","rb.title":"Quản l\xfd đặt ph\xf2ng","rb.tabPending":"Chờ duyệt","rb.tabAll":"Tất cả sá»± kiện","rb.tabCalendar":"Lịch","rb.tabRooms":"Ph\xf2ng","rb.addBooking":"Th\xeam đặt ph\xf2ng","rb.searchEvents":"T\xecm theo ti\xeau đề, ph\xf2ng hoặc người y\xeau cầu...","rb.filterRoom":"Lọc theo ph\xf2ng","rb.filterStatus":"Lọc theo trạng th\xe1i","rb.allStatuses":"Tất cả trạng th\xe1i","rb.approved":"Đ\xe3 duyệt","rb.rejected":"Từ chối","rb.noEvents":"Kh\xf4ng c\xf3 sá»± kiện","rb.colTitle":"Ti\xeau đề","rb.colRoom":"Ph\xf2ng","rb.colRequestedBy":"Người y\xeau cầu","rb.colStart":"Bắt đầu","rb.colEnd":"Kết th\xfac","rb.searchRooms":"T\xecm theo t\xean, vị tr\xed hoặc quản l\xfd...","rb.publicBo
1oking":"Đặt c\xf4ng khai","rb.public":"C\xf4ng khai","rb.private":"Ri\xeang tư","rb.location":"Vị tr\xed","rb.allLocations":"Tất cả vị tr\xed","rb.noRooms":"Kh\xf4ng c\xf3 ph\xf2ng","rb.colLimit":"Sức chứa","rb.share":"Chia sẻ","rb.copied":"Đ\xe3 ch\xe9p!","rb.selectRoomView":"Chọn ph\xf2ng để xem lịch","rb.classChip":"Lớp học","rb.approve":"Duyệt","rb.reject":"Từ chối","rb.addEvent":"+ Th\xeam sự kiện","rb.capacity":"Sức chứa","rb.createdBy":"Người tạo","rb.course":"M\xf4n học","rb.classOnlyAdmin":"Chỉ quản trị vi\xean mới quản l\xfd lịch m\xf4n học.","rb.manageCourse":"Quản l\xfd lịch m\xf4n","rb.viewInBooking":"Xem trong Đặt ph\xf2ng","rb.legendClass":"Lớp học","rb.slotHasClass":"Khung n\xe0y đ\xe3 c\xf3 lớp","rb.slotHasEvent":"Khung n\xe0y đ\xe3 c\xf3 sự kiện","rb.legendApproved":"Đ\xe3 duyệt","rb.legendPending":"Chờ duyệt","rb.legendRejected":"Từ chối","import.selectTerm":"Chọn học kỳ (bắt buộc)","import.downloadTemplate":"Tải file mẫu","import.termHint":"⚠️ Phải chọn học kỳ trước khi nhập","import.termPrefix":"Học kỳ","import.termPlaceholder":"Chọn học kỳ để đặt ng\xe0y v\xe0 n\xe9 ng\xe0y nghỉ","import.selectFirst":"Vui l\xf2ng chọn học kỳ trước khi nhập.","import.importing":"ĐANG NHẬP...","import.stepRoom":"Ph\xf2ng","import.stepCourse":"M\xf4n học","import.stepBooking":"Xếp lịch","import.csvHeader":"Nhập file CSV / Excel","dz.title":"K\xe9o-thả file Excel / CSV v\xe0o đ\xe2y","dz.browse":"hoặc bấm để chọn","import.importData":"Nhập dữ liệu","search.title":"T\xecm lịch","search.subtitle":"Tra cứu lịch theo giảng vi\xean, ph\xf2ng hoặc lớp — g\xf5 để t\xecm nhanh, xem tr\xean lịch v\xe0 xuất ra file.","search.needLogin":"Bạn cần đăng nhập để t\xecm lịch. Đang chuyển hướng…","search.by":"T\xecm theo","search.teacher":"Giảng vi\xean","search.room":"Ph\xf2ng","search.class":"Lớp","search.byRoom":"T\xecm theo ph\xf2ng","search.byClass":"T\xecm theo m\xe3 lớp","common.somethingWrong":"Đ\xe3 xảy ra lỗi.","common.loginFirst":"Vui l\xf2ng đăng nhập trước.","cbr.noRoom":"Chưa chọn ph\xf2ng","cbr.scheduleErr":"Đ\xe3 xảy ra lỗi khi xếp lịch.","cbr.couldNotSchedule":"Kh\xf4ng thể xếp v\xe0o \xf4 n\xe0y.","cbr.conflictReason":"Tr\xf9ng lịch — kiểm tra ng\xe0y học kỳ v\xe0 c\xe1c lịch đ\xe3 c\xf3.","cbr.scheduled":"Đ\xe3 xếp lịch m\xf4n.","cbr.maxStudent":"Sức chứa tối đa","cbr.chooseRoom":"Vui l\xf2ng chọn ph\xf2ng để xem lịch","dnd.title":"X\xe1c nhận đổi thời gian","dnd.current":"Hiện tại","dnd.reapprove":"Đổi thời gian sẽ cần duyệt lại nếu bạn kh\xf4ng phải admin hoặc quản l\xfd ph\xf2ng.","del.title":"X\xe1c nhận xo\xe1","del.thisOnly":"Chỉ xo\xe1 buổi n\xe0y.","del.thisFuture":"Xo\xe1 buổi n\xe0y v\xe0 c\xe1c buổi sau trong chuỗi.","del.series":"Xo\xe1 to\xe0n bộ chuỗi lặp lại.","del.course":"Xo\xe1 tất cả lịch đ\xe3 xếp của m\xf4n n\xe0y (mọi thứ, mọi ph\xf2ng).","del.permanent":"Thao t\xe1c n\xe0y l\xe0 vĩnh viễn v\xe0 kh\xf4ng thể ho\xe0n t\xe1c.","del.how":"Bạn muốn xo\xe1 lịch n\xe0y như thế n\xe0o?","del.thisOccurrence":"Chỉ buổi n\xe0y","del.fromForward":"Từ đ\xe2y về sau","del.allOccurrences":"Tất cả c\xe1c buổi","del.allCourse":"Tất cả lịch của m\xf4n n\xe0y","del.permanentDetail":"Thao t\xe1c n\xe0y l\xe0 vĩnh viễn v\xe0 kh\xf4ng thể ho\xe0n t\xe1c. To\xe0n bộ dữ liệu li\xean quan theo lựa chọn sẽ bị xo\xe1.","del.confirmDelete":"X\xe1c nhận xo\xe1","cm.population":"Số sinh vi\xean","cm.enterPopulation":"Nhập số sinh vi\xean","cm.startDate":"Ng\xe0y bắt đầu","cm.credit":"Số tiết","cm.enterCredit":"Nhập số tiết","cm.duration":"Số tuần","cm.enterDuration":"Nhập số tuần","cm.location":"Địa điểm","cm.selectLocation":"Chọn địa điểm","cm.term":"Học kỳ","cm.selectTerm":"Chọn học kỳ","cm.category":"Loại ph\xf2ng","cm.selectCategory":"Chọn loại ph\xf2ng","cm.note":"Ghi ch\xfa","cm.enterNote":"Nhập ghi ch\xfa","cm.addEmail":"Th\xeam email","re.editPrefix":"Sửa","re.booking":"Đặt ph\xf2ng","re.addBooking":"Th\xeam đặt ph\xf2ng","re.searchNameEmail"
1:"T\xecm theo t\xean hoặc email","re.title":"Ti\xeau đề","re.start":"Bắt đầu","re.noPast":"Kh\xf4ng thể đặt ph\xf2ng cho thời gian trong qu\xe1 khứ.","re.invalidRange":"Giờ kết th\xfac phải sau giờ bắt đầu.","re.end":"Kết th\xfac","re.durationMin":"Thời lượng (ph\xfat)","re.durationEg":"VD: 90","re.hostBy":"Người phụ tr\xe1ch (tuỳ chọn)","re.members":"Th\xe0nh vi\xean tham dự (tuỳ chọn)","re.reapprovalTitle":"Lưu \xfd về việc duyệt lại","re.reapprovalBody":"Đổi thời gian hoặc ph\xf2ng sẽ đưa lịch về trạng th\xe1i chờ duyệt v\xe0 cần duyệt lại. Chỉ đổi ti\xeau đề, người phụ tr\xe1ch hoặc người tham dự th\xec \xe1p dụng ngay.","re.timeRoomChanged":"⚠ Thời gian hoặc ph\xf2ng đ\xe3 thay đổi — sẽ cần duyệt lại.","re.notPublic":" (kh\xf4ng c\xf4ng khai)","re.willReview":"Y\xeau cầu của bạn sẽ được quản l\xfd hoặc admin xem x\xe9t trước khi duyệt.","re.create":"Tạo","re.editWarn":"Đổi thời gian hoặc ph\xf2ng sẽ cần duyệt lại. Đổi ti\xeau đề v\xe0 người tham dự \xe1p dụng ngay.","re.noEditPerm":"Bạn kh\xf4ng c\xf3 quyền sửa sự kiện n\xe0y.","re.contactHost":"Li\xean hệ người tạo hoặc người phụ tr\xe1ch:","re.createdByLabel":"Người tạo","dash.creditGroups":"nh\xf3m tiết","auth.username":"T\xean đăng nhập","auth.email":"Email","auth.password":"Mật khẩu","auth.passwordAgain":"Nhập lại mật khẩu","auth.register":"Đăng k\xfd","auth.login":"Đăng nhập","auth.haveAccount":"Đ\xe3 c\xf3 t\xe0i khoản?","auth.noAccount":"Chưa c\xf3 t\xe0i khoản?","sched.editDates":"Sửa / dời ng\xe0y lịch","sched.endDate":"Ng\xe0y kết th\xfac","sched.desc":"Đổi ng\xe0y bắt đầu/kết th\xfac sẽ xếp lại to\xe0n bộ lịch của m\xf4n theo khoảng ng\xe0y mới (giữ nguy\xean thứ v\xe0 tiết). C\xf3 thể d\xf9ng để dời lịch hoặc nới rộng/thu ngắn số tuần.","sched.saved":"Đ\xe3 cập nhật lịch.","sched.needDates":"Vui l\xf2ng chọn ng\xe0y bắt đầu v\xe0 kết th\xfac.","sched.weeksInfo":"{n} tuần","admin.nav.meeting":"Lịch họp","admin.nav.search":"T\xecm lịch","admin.nav.classGroups":"Quản l\xfd lớp","cg.title":"Quản l\xfd nh\xf3m lớp","cg.subtitle":"C\xe1c lớp được gộp theo quy tắc: hậu tố chữ c\xe1i cuối (_A/_B/_C) l\xe0 ph\xe2n nh\xf3m nhỏ v\xe0 gộp v\xe0o lớp gốc; c\xf2n 25VLH, _DKD1, _DKD2 l\xe0 c\xe1c lớp kh\xe1c nhau. C\xf3 thể ghi đ\xe8 thủ c\xf4ng b\xean dưới.","cg.courses":"m\xf4n","cg.overrideTitle":"Ghi đ\xe8 nh\xf3m theo từng lớp","cg.colClass":"Lớp","cg.colGroup":"Nh\xf3m hiện tại","cg.colAction":"Ghi đ\xe8 nh\xf3m","cg.overridden":"đ\xe3 ghi đ\xe8","cg.rule":"quy tắc","cg.save":"Lưu","cg.resetToRule":"Đặt lại theo quy tắc","cg.saved":"Đ\xe3 lưu ghi đ\xe8 nh\xf3m.","cg.reset":"Đ\xe3 đặt lại về quy tắc.","cg.saveFailed":"Thao t\xe1c thất bại.","cg.empty":"Kh\xf4ng c\xf3 lớp n\xe0o.","meet.title":"Lịch họp — độ rảnh của khoa","meet.subtitle":"Chọn cơ sở & độ d\xe0i buổi họp để xem mỗi khung giờ c\xf3 bao nhi\xeau giảng vi\xean rảnh. Người đang dạy ở cơ sở kh\xe1c cần thời gian di chuyển n\xean bị t\xednh vướng.","meet.campus":"Cơ sở họp","meet.duration":"Độ d\xe0i","meet.buffer":"Đệm di chuyển","meet.scope":"Nh\xf3m người","meet.allDept":"Cả khoa","meet.pickPeople":"Chọn người","meet.week":"Tuần (chọn 1 ng\xe0y)","meet.byDayTiet":"Số người rảnh theo Thứ \xd7 Tiết","meet.detailTitle":"Chi tiết khung đ\xe3 chọn","meet.free":"Rảnh","meet.teach":"Bận dạy","meet.travel":"Vướng di chuyển","meet.bestSlots":"Khung tốt nhất (nhiều người rảnh)","meet.freeList":"Rảnh","meet.teachList":"Đang dạy c\xf9ng cơ sở","meet.travelList":"Vướng di chuyển","meet.bookMeeting":"Đặt ph\xf2ng họp cho khung n\xe0y","meet.needSlot":"Bấm một \xf4 tr\xean bảng để xem ai rảnh / bận.","meet.legendLess":"\xedt rảnh","meet.legendMore":"nhiều rảnh","meet.tiet":"Tiết","meet.travelReason":"dạy {campus} {from}–{to} \xb7 cần {buffer}′ di chuyển","meet.teachReason":"dạy {from}–{to} \xb7 {campus}","meet.minutes":"{n}′","meet.mins":"ph\xfat","meet.loadingWeek":"Đang tải lịch tuần…","meet.bestInRegion":"Gợi \xfd trong v\xf9ng đ\xe3 chọn","meet.clearRegion":"
1Xo\xe1 v\xf9ng","meet.deptFilter":"Bộ m\xf4n","meet.deptUnit":"bộ m\xf4n","meet.noDept":"Kh\xf4ng c\xf3 bộ m\xf4n","meet.selectAll":"Tất cả","meet.clearAll":"Bỏ chọn","meet.pickMode":"Chọn khung y\xeau th\xedch","meet.pickModeOn":"Đang chọn \xb7 bấm để xong","meet.dragHint":'\uD83D\uDCA1 Bấm "Chọn khung y\xeau th\xedch" rồi k\xe9o-thả (hoặc bấm từng \xf4) để đ\xe1nh dấu khung ưa th\xedch — c\xf3 thể nhiều v\xf9ng rời nhau → chỉ gợi \xfd trong đ\xf3.',"gcal.title":"Google Calendar","gcal.connect":"Kết nối Google Calendar","gcal.connected":"Đ\xe3 kết nối Google","gcal.syncNow":"Đồng bộ ngay","gcal.syncDesc":"Đẩy lịch hiện tại v\xe0o Google Calendar","gcal.disconnect":"Ngắt kết nối","gcal.synced":"Đ\xe3 đồng bộ lịch v\xe0o Google","gcal.syncFailed":"Đồng bộ thất bại","gcal.disconnected":"Đ\xe3 ngắt kết nối Google","gcal.later":"Để sau","gcal.bannerText":"Đồng bộ thời kho\xe1 biểu sang Google Calendar để nhận nhắc tr\xean điện thoại — kết nối một lần, tự cập nhật về sau.","ics.addToCalendar":"Th\xeam v\xe0o lịch","ics.google":"Th\xeam v\xe0o Google Calendar","ics.googleDesc":"Tự đồng bộ. Google c\xf3 thể hiện link l\xe0m t\xean — đổi t\xean trong Settings của lịch.","ics.apple":"Th\xeam v\xe0o Apple Calendar","ics.appleDesc":"Đăng k\xfd tr\xean m\xe1y Mac/iPhone — tự đồng bộ","ics.outlook":"Th\xeam v\xe0o Outlook (cơ quan)","ics.outlookDesc":"T\xe0i khoản tổ chức (office.com) — tự đồng bộ","ics.outlookPersonal":"Th\xeam v\xe0o Outlook (c\xe1 nh\xe2n)","ics.outlookPersonalDesc":"T\xe0i khoản outlook.com / hotmail — tự đồng bộ","ics.download":"Tải file .ics","ics.downloadDesc":"Nhập một lần v\xe0o Google/Outlook/Apple Calendar","ics.subscribe":"Sao ch\xe9p link đồng bộ","ics.subscribeDesc":"D\xe1n v\xe0o 'Th\xeam lịch từ URL' để tự cập nhật","ics.copied":"Đ\xe3 sao ch\xe9p link. D\xe1n v\xe0o Google Calendar → Th\xeam lịch → Từ URL.","ics.copyFailed":"Kh\xf4ng sao ch\xe9p được link.","home.welcomeBack":"Ch\xe0o mừng trở lại,","home.userTagline":"Quản l\xfd đặt ph\xf2ng theo m\xf4n học, xem t\xecnh trạng ph\xf2ng, hoặc đặt ph\xf2ng cho sự kiện tiếp theo của bạn.","home.goToBooking":"Đến trang đặt lịch","home.viewRoomSchedule":"Xem lịch ph\xf2ng","home.badge":"Vật l\xfd - Vật l\xfd Kỹ thuật","home.title":"Hệ thống Đặt ph\xf2ng & Lịch học","home.subtitle":"Đặt ph\xf2ng học cho m\xf4n học, giữ ph\xf2ng cho sự kiện v\xe0 xem t\xecnh trạng ph\xf2ng theo thời gian thực — tất cả ở một nơi.","home.signInGoogle":"Đăng nhập với Google","home.whatYouCanDo":"Bạn c\xf3 thể l\xe0m g\xec","home.open":"Mở","home.loginRequired":"Cần đăng nhập","home.feat.course.title":"Đặt ph\xf2ng m\xf4n học","home.feat.course.desc":"Xếp ph\xf2ng học cho c\xe1c m\xf4n suốt cả học kỳ, c\xf3 ph\xe1t hiện tr\xf9ng lịch.","home.feat.roomSchedule.title":"Lịch ph\xf2ng","home.feat.roomSchedule.desc":"Xem t\xecnh trạng ph\xf2ng theo thời gian thực tr\xean to\xe0n bộ cơ sở.","home.feat.event.title":"Đặt ph\xf2ng sự kiện","home.feat.event.desc":"Giữ ph\xf2ng cho sự kiện, hội thảo hoặc buổi họp ri\xeang lẻ, x\xe1c nhận tức th\xec.","home.feat.manager.title":"Quản l\xfd ph\xf2ng","home.feat.manager.desc":"Quản l\xfd quyền truy cập ph\xf2ng, duyệt y\xeau cầu v\xe0 theo d\xf5i sử dụng c\xe1c ph\xf2ng bạn phụ tr\xe1ch.","home.adminOnly":"Quản trị","home.showcase.title":"Xem ph\xf2ng theo thời gian thực","home.showcase.desc":"Lịch ph\xf2ng trực quan theo tuần: biết ngay ph\xf2ng n\xe0o trống, ph\xf2ng n\xe0o đang c\xf3 lớp — tr\xean to\xe0n bộ cơ sở.","home.showcase.cta":"Xem lịch ph\xf2ng","home.heroImageAlt":"Vật l\xfd & Vật l\xfd Kỹ thuật","about.badge":"Giới thiệu Physoom","about.title":"Xếp lịch cho Khoa Vật l\xfd - Vật l\xfd Kỹ thuật, được l\xe0m mới","about.subt
1itle":"Physoom thay thế quy tr\xecnh d\xf9ng bảng t\xednh chậm v\xe0 dễ sai bằng một hệ thống chung, thời gian thực để sắp xếp lịch giảng dạy v\xe0 đặt ph\xf2ng.","about.whatTitle":"Physoom l\xe0 g\xec?","about.whatBody":"Physoom l\xe0 ứng dụng được ph\xe1t triển để hỗ trợ c\xe1n bộ Khoa Vật l\xfd - Vật l\xfd Kỹ thuật tại VNU-HCMUS sắp xếp lịch giảng dạy hiệu quả hơn. C\xe1ch l\xe0m truyền thống bằng Excel tốn nhiều thời gian v\xe0 c\xf4ng sức để phối hợp giữa c\xe1c giảng vi\xean v\xe0 tối ưu lịch của mọi người. Với Physoom, giảng vi\xean dễ d\xe0ng nhập thời gian rảnh v\xe0 mong muốn, để ứng dụng tạo lịch tối ưu chỉ trong một phần thời gian — đồng thời giảm khả năng tr\xf9ng lịch.","about.whyTitle":"V\xec sao hữu \xedch","about.benefit.conflict.title":"Ph\xe1t hiện tr\xf9ng lịch","about.benefit.conflict.desc":"Tr\xf9ng ph\xf2ng, giảng vi\xean v\xe0 lớp được tự động cảnh b\xe1o trước khi th\xe0nh vấn đề.","about.benefit.fast.title":"Nhanh hơn Excel","about.benefit.fast.desc":"Dựng lịch cả học kỳ chỉ trong một phần thời gian so với c\xe1ch d\xf9ng bảng t\xednh truyền thống.","about.benefit.realtime.title":"Thời gian thực","about.benefit.realtime.desc":"Thấy ch\xednh x\xe1c ph\xf2ng n\xe0o đ\xe3 được đặt tr\xean to\xe0n bộ cơ sở, cập nhật ngay khi c\xf3 thay đổi.","about.benefit.team.title":"Cho cả nh\xf3m","about.benefit.team.desc":"Giảng vi\xean, người quản l\xfd ph\xf2ng v\xe0 quản trị vi\xean đều c\xf3 quy tr\xecnh ph\xf9 hợp với việc m\xecnh cần l\xe0m.","about.createdBy":"Được ph\xe1t triển bởi","about.createdFor":"cho c\xe1n bộ Khoa Vật l\xfd - Vật l\xfd Kỹ thuật tại VNU-HCMUS","room.title":"Lịch ph\xf2ng","room.subtitle":"Xem t\xecnh trạng ph\xf2ng theo thời gian thực tr\xean to\xe0n khoa.","room.quickAccess":"Truy cập nhanh bằng m\xe3 chia sẻ","room.go":"Đi","room.codeHint":"Lấy m\xe3 n\xe0y từ m\xe0n h\xecnh hiển thị, poster QR hoặc quản trị vi\xean của bạn.","room.orMscb":"Hoặc d\xf9ng MSCB b\xean dưới để xem lịch ph\xf2ng","room.loginToView":"Đăng nhập bằng t\xe0i khoản trường để xem lịch ph\xf2ng với MSCB của bạn.","room.enterMscb":"Nhập MSCB của bạn để xem lịch ph\xf2ng","room.selectHint":"Chọn một ph\xf2ng để xem chi tiết v\xe0 lịch.","room.pleaseSelect":"Vui l\xf2ng chọn ph\xf2ng để xem lịch.","room.maxCap":"Sức chứa tối đa:","room.students":"sinh vi\xean","room.submit":"X\xe1c nhận","room.codeLen":"M\xe3 phải gồm 6 k\xfd tự","room.codeNotFound":"Kh\xf4ng t\xecm thấy m\xe3. Vui l\xf2ng kiểm tra lại.","room.codeError":"C\xf3 lỗi xảy ra. Vui l\xf2ng thử lại.","room.roomLabel":"Ph\xf2ng","room.searchByRoom":"T\xecm theo ph\xf2ng","room.idRequired":"Bắt buộc 
1nhập m\xe3","admin.dashboard":"Bảng điều khiển","admin.overview":"Tổng quan ph\xf2ng, m\xf4n học v\xe0 t\xecnh trạng đặt lịch","admin.nav.dashboard":"Tổng quan","admin.grp.booking":"Xếp lịch","admin.grp.catalog":"Danh mục","admin.grp.system":"Hệ thống","admin.nav.course":"M\xf4n học","admin.nav.room":"Ph\xf2ng","admin.nav.courseBooking":"Đặt ph\xf2ng m\xf4n học","admin.nav.roomBooking":"Đặt ph\xf2ng sự kiện","admin.nav.terms":"Học kỳ & Ng\xe0y nghỉ","admin.nav.apiKeys":"Kh\xf3a API","admin.nav.users":"Người d\xf9ng","admin.nav.viewShare":"Chia sẻ lịch","dash.totalRooms":"Tổng số ph\xf2ng","dash.totalCourses":"Tổng số m\xf4n","dash.bookedCourses":"M\xf4n đ\xe3 đặt","dash.eventBookings":"Đặt ph\xf2ng sự kiện","dash.approvalRate":"Tỉ lệ duyệt","dash.locations":"địa điểm","dash.noBookings":"Chưa c\xf3 đặt lịch","dash.noEvents":"Chưa c\xf3 sự kiện","dash.noData":"Chưa c\xf3 dữ liệu","dash.byLocation":"Theo địa điểm","dash.byCredit":"Theo tiết","dash.b
1yStatus":"Theo trạng th\xe1i","dash.bookingStatus":"Trạng th\xe1i đặt lịch","dash.approved":"Đ\xe3 duyệt","dash.pending":"Chờ duyệt","dash.rejected":"Từ chối","dash.notBooked":"Chưa đặt","terms.title":"Học kỳ & Ng\xe0y nghỉ","terms.createNew":"Tạo mới","terms.colTitle":"T\xcaN","terms.colType":"LOẠI","terms.colStart":"NG\xc0Y BẮT ĐẦU","terms.colEnd":"NG\xc0Y KẾT TH\xdaC","terms.colActions":"THAO T\xc1C","terms.empty":"Chưa c\xf3 học kỳ hoặc ng\xe0y nghỉ.","terms.createModal":"Tạo Học kỳ hoặc Ng\xe0y nghỉ","terms.editModal":"Sửa Học kỳ / Ng\xe0y nghỉ","terms.fieldTitle":"T\xean","terms.fieldTitlePh":"VD: HK1 2026 hoặc Nghỉ Tết","terms.fieldType":"Loại","terms.typeTerm":"Học kỳ","terms.typeHoliday":"Ng\xe0y nghỉ / Nghỉ lễ","terms.startDate":"Ng\xe0y bắt đầu","terms.endDate":"Ng\xe0y kết th\xfac","terms.delete":"Xo\xe1","terms.confirmDelete":"Bạn c\xf3 chắc muốn xo\xe1 mục n\xe0y?","terms.colCourses":"Số m\xf4n","terms.deleteBlocked":"C\xf2n {n} m\xf4n — kh\xf4ng thể xo\xe1 học kỳ","terms.rescheduled":"Đ\xe3 dời {n} buổi theo học kỳ mới.","terms.conflictTitle":"Dời học kỳ sẽ g\xe2y tr\xf9ng lịch","terms.conflictCount":"{n} trường hợp tr\xf9ng","terms.conflictBody":"C\xe1c buổi dưới đ\xe2y sẽ đụng ph\xf2ng/giảng vi\xean của lịch kh\xe1c. Huỷ để chỉnh lại, hoặc vẫn \xe1p dụng.","terms.applyAnyway":"Vẫn \xe1p dụng","terms.expandOnGrow":"Nới cả c\xe1c m\xf4n ngắn hơn kỳ l\xean bằng học kỳ","terms.expandHint":"M\xf4n chạy ĐỦ kỳ cũ sẽ tự co/gi\xe3n theo kỳ mới. M\xf4n ngắn hơn kỳ (vd 4 tuần) mặc định giữ nguy\xean (chỉ r\xfat nếu kỳ mới c\xf2n ngắn hơn). Tick để nới cả những m\xf4n ngắn đ\xf3 l\xean bằng học kỳ.","terms.loadNational":"Nạp lễ quốc gia (VN)","terms.year":"Năm","terms.nationalAdded":"Đ\xe3 th\xeam {n} ng\xe0y lễ quốc gia cho năm {y}.","terms.nationalNoneNew":"C\xe1c ng\xe0y lễ quốc gia năm {y} đ\xe3 c\xf3 sẵn.","terms.nationalNoLunar":"Chưa c\xf3 sẵn ng\xe0y Tết/Giỗ tổ cho năm {y} — chỉ th\xeam c\xe1c lễ dương lịch. Vui l\xf2ng kiểm tra v\xe0 th\xeam Tết thủ c\xf4ng.","tbl.search":"T\xecm theo t\xean...","tbl.columns":"Cột","tbl.deleteSelected":"Xo\xe1 đ\xe3 chọn","tbl.addNew":"Th\xeam mới","tbl.rowsPerPage":"Số d\xf2ng mỗi trang:","tbl.selectedOf":"{n} / {total} đ\xe3 chọn","tbl.allSelected":"Đ\xe3 chọn tất cả","tbl.previous":"Trước","tbl.next":"Sau","tbl.actions":"Thao t\xe1c","tbl.edit":"Sửa","tbl.delete":"Xo\xe1","form.title":"T\xean","form.note":"Ghi ch\xfa","form.save":"Lưu","form.cancel":"Huỷ","form.required":"Bắt buộc","room.createRoom":"Tạo ph\xf2ng","room.updateRoom":"Cập nhật ph\xf2ng","room.enterTitle":"Nhập t\xean ph\xf2ng","room.capacity":"Sức chứa","room.enterCapacity":"Nhập sức chứa","room.location":"Địa điểm","room.selectLocation":"Chọn địa điểm","room.category":"Ph\xe2n loại","room.selectCategory":"Chọn ph\xe2n loại","room.enterNote":"Nhập ghi ch\xfa (nếu c\xf3)","room.total":"Tổng {n} ph\xf2ng","course.createData":"Tạo dữ liệu","course.updateData":"Cập nhật dữ liệu","course.courseId":"M\xe3 m\xf4n","course.courseIdExt":"M\xe3 m\xf4n mở rộng","course.classId":"M\xe3 lớp","course.addClassId":"Th\xeam m\xe3 lớp","course.teacherEmails":"Email giảng vi\xean","course.saved":"Đ\xe3 lưu th\xe0nh c\xf4ng!","course.saveFailed":"Lưu thất bại.","course.validationFailed":"Kiểm tra dữ liệu thất bại. Vui l\xf2ng thử lại.","course.unexpectedError":"C\xf3 lỗi xảy ra. Vui l\xf2ng thử lại.","users.title":"Người d\xf9ng","users.totalAccounts":"{n} t\xe0i khoản","users.addUser":"Th\xeam người d\xf9ng","users.editUser":"Sửa người d\xf9ng","users.import":"Nhập từ CSV / Excel","users.name":"T\xean","users.email":"Email","users.admin":"Quản trị vi\xean","users.confirmDelete":"Xo\xe1 người d\xf9ng n\xe0y?"},en:{"lang.switchToEn":"English","lang.switchToVi":"Tiếng Việt","notif.title":"Notifications","notif.markAll":"Mark all read","notif.empty":"No notifications yet","notif.enablePush":"Enable desktop notifications","notif.pushOn":"Desktop notifications on","notif.pushDenied":"Notifications blocked — re-enable in browser settings.","nav.home":"Home","nav.booking":"Timetable","nav.roomSchedule":"Room Schedule","nav.search":"Find schedule","nav.adminDashboard":"Admin Dashboard","nav.about":"About","nav.apps":"Apps","nav.appProfile":"Research profile","nav.appTasks":"Duties & quota","nav.login":"Login","nav.logout":"Logout","nav.openMenu":"Open menu","nav.closeMenu":"Close menu","common.save":"Save","common.cancel":"Cancel","common.close":"Close","course.moveToPending":"Move to pen
1ding","course.locked":"Locked","course.confirmUnschedule":"Remove all scheduled sessions for this course and move it back to pending? The course itself is kept.","booking.classroomSchedule":"Classroom schedule","booking.personalSchedule":"Personal schedule","booking.classSchedule":"Class schedule","booking.lecturerSchedule":"Lecturer schedule","booking.eventBooking":"Event Booking","myev.searchPh":"Search event / room","myev.all":"All","myev.approved":"Approved","myev.pending":"Pending","myev.rejected":"Rejected","myev.futureOnly":"Upcoming","myev.noMatch":"No matching events.","myev.noEvents":"No events yet.","myev.owner":"Owner","myev.host":"Host","myev.attendee":"Attendee","myev.cancelled":"Cancelled","booking.tabCourses":"Courses","booking.tabMyEvents":"My Events","booking.coursesEvents":"Courses & Events","cal.today":"Today","cal.back":"Back","cal.next":"Next","cal.month":"Month","cal.week":"Week","cal.day":"Day","cal.agenda":"Agenda","cal.date":"Date","cal.time":"Time","cal.event":"Event","cal.noEventsRange":"No events in this range.","booking.searchSchedule":"Search Schedule","booking.pleaseChoose":"Please choose course","booking.dutyRoster":"Duty roster","booking.lockedFrozen":"Course is locked — schedule is frozen (unlock to change)","booking.selectCourse":"Select Course","booking.pendingClass":"Pending class","booking.plannedClass":"Planned class","booking.noAction":"No action needed","booking.autoJump":"Auto jump to start day","booking.compactMode":"Compact mode (no dates)","booking.mergeGroups":"Merge sub-sections (_A/_B/_C)","booking.term":"Term","booking.academicYear":"Academic year","booking.sessionCount":"Sessions","booking.sessionsUnit":"sessions","booking.weeksUnit":"weeks","booking.pickTermHint":"Pick a term, start date and end date to schedule.","booking.mergingClasses":"Merging classes","booking.exactClass":"This class only","booking.compactFrom":"From","booking.compactTo":"To","booking.compactRange":"Compact from {from} to {to}","booking.noCoursesInRange":"No sessions in this range","booking.weeks":"{n} weeks","booking.noTeacherTitle":"No lecturer assigned — cannot schedule","booking.noTeacherDesc":"This course has no lecturer, so a room cannot be picked or scheduled. Add a lecturer to the course first (edit it in the list or the Courses page), then schedule.","room.mscbMismatch":"Staff co
1de doesn't match your account.","event.details":"Event details","event.room":"Room","event.class":"Class","event.time":"Time","event.teacher":"Lecturer","event.host":"Host","event.attendees":"Attendees","event.note":"Note","event.restricted":"You don't have permission to view details. Please contact an admin.","common.bookingInfo":"Booking info","common.credits":"periods","common.lock":"Lock","common.unlock":"Unlock","common.search":"Search","common.typeToSearch":"Type to search...","common.actions":"Actions","common.status":"Status","common.export":"Export","common.import":"Import","common.open":"Open","common.yes":"Yes","common.no":"No","common.class":"Class","common.noInfo":"No info","common.cancel":"Cancel","common.delete":"Delete","common.edit":"Edit","common.save":"Save","common.error":"Error","common.done":"Done","common.back":"Back","user.title":"Users","user.total":"{n} total accounts","user.add":"Add User","user.searchPh":"Search by name, email or MSCB…","user.colName":"NAME","user.colEmail":"EMAIL","user.colMscb":"MSCB","user.colDept":"DEPARTMENT","user.colAdmin":"ADMIN","user.colActions":"ACTIONS","user.roleAdmin":"Admin","user.roleUser":"User","user.none":"No users found.","user.editTitle":"Edit User","user.addTitle":"Add User","user.fName":"Name","user.fMscb":"Teacher ID (MSCB)","user.fDept":"Department / Unit","user.fDeptPh":"Pick or type a department","user.fRank":"Rank","user.fDegree":"Degree","user.fAdmin":"Admin privileges","user.emailRequired":"Email is required","user.saveChanges":"Save changes","user.importTitle":"Import Users from CSV / Excel","user.importDesc":"Required column: email. Optional: name, teacher_id, isAdmin (true/false). Existing users are updated by email.","user.importing":"Importing…","user.importDone":"Done — {a} added, {u} updated.","user.deleteTitle":"Delete user?","user.deleteDesc":"Remove {email}? This cannot be undone.","share.title":"QR Room Sharing Management","share.create":"Create Share Link","share.searchPh":"Search by title, code or room...","share.colTitle":"TITLE","share.colRooms":"ROOMS","share.colCode":"CODE","share.colLogin":"LOGIN REQUIRED","share.colLink":"LINK / QR","share.none":"No active shares found.","share.editTitle":"Edit Share Link","share.createTitle":"Create New Share Link","share.fTitle":"Share Title","share.fTitlePh":"e.g. Lobby Screens","share.roomsLabel":"Rooms Schedule","share.roomsPh":"Search and add rooms...","share.noRooms":"No rooms selected","share.classesLabel":"Classes Schedule","share.classesPh":"Search and add classes...","share.noClasses":"No classes selected","share.colClasses":"CLASSES","share.needRoomOrClass":"Please select at least one room or one class.","share.usersUnit":"{n} users","share.settings":"Display & Security Settings","share.requireLogin":"Require Login via Physoom (Internal sharing only)","share.showTeacher":"Show Teacher","share.showClass":"Show Class IDs","share.showCourse":"Show Course Names","share.update":"Update Share Link","share.selectAtLeastOne":"Please select at least one room.","share.confirmDelete":"Are you sure you want to revoke and delete this share link?","share.linkCopied":"Link copied to clipboard!","share.qrTitle":"QR Code","share.quickCode":"Quick access code","share.enterAt":"Enter at","share.liveTitle":"Live Room Schedule","share.standardView":"Standard View","share.slotView":"Tiết Grid","share.allRooms":"All rooms ({n})","share.weekPrev":"Prev week","share.weekNext":"Next week","share.thisWeek":"This week","share.week":"Week","share.loginRequired":"Login Required","share.loginRequiredDesc":"This room schedule requires you to be logged into your account.","share.loginToView":"Login to View","share.errorTitle":"Error Loading Schedule","share.errorDesc":"This link may be invalid, deleted, or expired.","nav.help":"Help","guide.title":"User Guide","guide.subtitle":"How to use Physoom: view room schedules, book rooms, schedule courses, and administer.","guide.startTour":"Take a quick tour","guide.pageTour":"Guide for this page","guide.toc":"Contents","guide.tourError":"Couldn't start the tour on this page.","tour.next":"Next","tour.prev":"Back","tour.done":"Done","rb.title":"Room Booking Management","rb.tabPending":"Pending","rb.tabAll":"All Events","rb.tabCalendar":"Calendar","rb.tabRooms":"Rooms","rb.addBooking":"Add Booking","rb.searchEvents":"Search by title, room or requester...","rb.f
1ilterRoom":"Filter by room","rb.filterStatus":"Filter by status","rb.allStatuses":"All statuses","rb.approved":"Approved","rb.rejected":"Rejected","rb.noEvents":"No events found","rb.colTitle":"Title","rb.colRoom":"Room","rb.colRequestedBy":"Requested By","rb.colStart":"Start","rb.colEnd":"End","rb.searchRooms":"Search by name, location or manager...","rb.publicBooking":"Public booking","rb.public":"Public","rb.private":"Private","rb.location":"Location","rb.allLocations":"All locations","rb.noRooms":"No rooms found","rb.colLimit":"Limit","rb.share":"Share","rb.copied":"Copied!","rb.selectRoomView":"Select a room to view its schedule","rb.classChip":"Class","rb.approve":"Approve","rb.reject":"Reject","rb.addEvent":"+ Add Event","rb.capacity":"Capacity","rb.createdBy":"Created by","rb.course":"Course","rb.classOnlyAdmin":"Only admins can manage course bookings.","rb.manageCourse":"Manage Course Booking","rb.viewInBooking":"View in Room Booking","rb.legendClass":"Class","rb.slotHasClass":"This slot already has a class","rb.slotHasEvent":"This slot already has an event","rb.legendApproved":"Approved","rb.legendPending":"Pending","rb.legendRejected":"Rejected","import.selectTerm":"Select Term (Required)","import.downloadTemplate":"Download template","import.termHint":"⚠️ A term must be selected before importing","import.termPrefix":"Term","import.termPlaceholder":"Choose a term to set dates and avoid holidays","import.selectFirst":"Please select a term before importing.","import.importing":"IMPORTING...","import.stepRoom":"Room","import.stepCourse":"Course","import.stepBooking":"Booking","import.csvHeader":"Import CSV / Excel file","dz.title":"Drag & Drop your Excel / CSV file here","dz.browse":"or click to browse","import.importData":"Import Data","search.title":"Find schedule","search.subtitle":"Look up schedules by teacher, room or class — type to search, view on the calendar, and export.","search.needLogin":"Please sign in to find schedules. Redirecting…","search.by":"Search by","search.teacher":"Teacher","search.room":"Room","search.class":"Class","search.byRoom":"Search by Room","search.byClass":"Search by Class id","common.somethingWrong":"Something went wrong.","common.loginFirst":"Please login first.","cbr.noRoom":"No room selected","cbr.scheduleErr":"Something went wrong while scheduling.","cbr.couldNotSchedule":"C
1ould not schedule this slot.","cbr.conflictReason":"Scheduling conflict — check the term dates and existing bookings.","cbr.scheduled":"Course scheduled.","cbr.maxStudent":"Max student","cbr.chooseRoom":"Please choose room to view schedule","dnd.title":"Confirm Time Change","dnd.current":"Current","dnd.reapprove":"Changing the time will require re-approval if you are not an admin or room manager.","del.title":"Confirm Deletion","del.thisOnly":"Delete only this specific occurrence.","del.thisFuture":"Delete this and all future occurrences in this series.","del.series":"Delete the entire recurring series.","del.course":"Remove all scheduled sessions for this course across all weekdays and rooms.","del.permanent":"This action is permanent and cannot be undone.","del.how":"How would you like to delete this schedule?","del.thisOccurrence":"This occurrence only","del.fromForward":"From this point forward","del.allOccurrences":"All occurrences","del.allCourse":"All schedules for this course","del.permanentDetail":"This action is permanent and cannot be undone. All related data for the selected mode will be removed.","del.confirmDelete":"Confirm Delete","cm.population":"Population","cm.enterPopulation":"Enter population","cm.startDate":"Start Date","cm.credit":"Periods","cm.enterCredit":"Enter periods","cm.duration":"Duration","cm.enterDuration":"Enter duration in weeks","cm.location":"Location","cm.selectLocation":"Select a location","cm.term":"Term","cm.selectTerm":"Select a term","cm.category":"Category","cm.selectCategory":"Select a category","cm.note":"Note","cm.enterNote":"Enter Note","cm.addEmail":"Add Email","re.editPrefix":"Edit","re.booking":"Booking","re.addBooking":"Add Booking","re.searchNameEmail":"Search by name or email","re.title":"Title","re.start":"Start","re.noPast":"Can't book a room for a time in the past.","re.invalidRange":"End time must be after start time.","re.end":"End","re.durationMin":"Duration (minutes)","re.durationEg":"e.g. 90","re.hostBy":"Host by (optional)","re.members":"Members attending (optional)","re.reapprovalTitle":"Note on re-approval","re.reapprovalBody":"Changing time or room will reset this booking to pending and require re-approval. Updating title, host, or attendees only will be applied immediately.","re.timeRoomChanged":"⚠ Time or room has changed — re-approval will be required.","re.notPublic":" (not public)","re.willReview":"Your request will be reviewed by a manager or admin before approval.","re.create":"Create","re.editWarn":"Changing time or room will require re-approval. Title and attendee changes apply immediately.","re.noEditPerm":"You don't have permission to edit this event.","re.contactHost":"Contact the creator or host:","re.createdByLabel":"Created by","dash.creditGroups":"period groups","auth.username":"Username","auth.email":"Email","auth.password":"Password","auth.passwordAgain":"Repeat password","auth.register":"Register","auth.login":"Login","auth.haveAccount":"Have an account?","auth.noAccount":"Don't have an account?","sched.editDates":"Edit / move schedule dates","sched.endDate":"End Date","sched.desc":"Changing the start/end date re-generates the whole schedule for this course over the new range (same weekday and periods). Use it to move the schedule or extend/shorten the number of weeks.","sched.saved":"Schedule updated.","sched.needDates":"Please pick both start and end dates.","sched.weeksInfo":"{n} weeks","admin.nav.meeting":"Meetings","admin.nav.search":"Find schedule","admin.nav.classGroups":"Classes","cg.title":"Class group management","cg.subtitle":"Classes are grouped by rule: a trailing letter suffix (_A/_B/_C) is a sub-section and merges into the base class, while 25VLH, _DKD1, _DKD2 are different classes. Override manually below.","cg.courses":"courses","cg.overrideTitle":"Per-class group override","cg.colClass":"Class","cg.colGroup":"Current group","cg.colAction":"Override group","cg.overridden":"overridden","cg.rule":"rule","cg.save":"Save","cg.resetToRule":"Reset to rule","cg.saved":"Group override saved.","cg.reset":"Reset to rule.","cg.saveFailed":"Operation failed.","cg.empty":"No classes.","meet.title":"Meeting planner — department availability","meet.subtitle":"Pick a campus & meeting length to see how many lecturers are free in each slot. Anyone teaching at the other campus needs travel time and is flagged as unavailable.","meet.campus":"Meeting campus","meet.duration":"Length","meet.buffer":"Travel buffer","meet.scope":"Group","meet.allDept":"Whole department","meet.pickPeople":"Pick people","meet.week":"Week (pick any day)","meet.byDayTiet":"People free by day \xd7 period","meet.detailTitle":"Selected slot","meet.free":"Free","meet.teach":"Teaching","meet.travel":"Travel clash","meet.bestSlots":"Best slots (most people free)","meet.freeList":"Free","meet.teachList":"Teaching at this campus","meet.travelList":"Travel clash","meet.bookMeeting":"Book a meeting room for this slot","meet.needSlot":"Click a cell to see who's free / busy.","meet.legendLess":"fewer free","meet.legendMore":"more free","meet.tiet":"Period","meet.travelReason":"teaches {campus} {from}–{to} \xb7 needs {buffer}′ travel","meet.teachReason":"teaches {from}–{to} \xb7 {campus}","meet.minutes":"{n}′","meet.mins":"min","meet.loadingWeek":"Loading the week…","meet.bestInRegion":"Best slots in your region","meet.clearRegion":"Clear region","meet.deptFilter":"Department","meet.deptUnit":"dept(s)","meet.noDept":"No department","meet.selectAll":"All","meet.clearAll":"Clear","meet.pickMode":"Pick favorite slots","meet.pickModeOn":"Picking \xb7 click to finish","meet.dragHint":'\uD83D\uDCA1 Click "P
1ick favorite slots", then drag (or click cells) to mark preferred windows — several disjoint areas allowed → recommendations stay inside them.',"gcal.title":"Google Calendar","gcal.connect":"Connect Google Calendar","gcal.connected":"Google connected","gcal.syncNow":"Sync now","gcal.syncDesc":"Push your current schedule to Google Calendar","gcal.disconnect":"Disconnect","gcal.synced":"Schedule synced to Google","gcal.syncFailed":"Sync failed","gcal.disconnected":"Google disconnected","gcal.later":"Later","gcal.bannerText":"Sync your timetable to Google Calendar to get reminders on your phone — connect once, it keeps itself updated.","ics.addToCalendar":"Add to calendar","ics.google":"Add to Google Calendar","ics.googleDesc":"Auto-syncs. Google may show the link as the name — rename it in the calendar's Settings.","ics.apple":"Add to Apple Calendar","ics.appleDesc":"Subscribe on Mac/iPhone — auto-syncs","ics.outlook":"Add to Outlook (work)","ics.outlookDesc":"Organization account (office.com) — auto-syncs","ics.outlookPersonal":"Add to Outlook (personal)","ics.outlookPersonalDesc":"outlook.com / hotmail account — auto-syncs","ics.download":"Download .ics file","ics.downloadDesc":"One-time import into Google/Outlook/Apple Calendar","ics.subscribe":"Copy subscribe link","ics.subscribeDesc":"Paste into 'Add calendar from URL' to keep it in sync","ics.copied":"Link copied. Paste into Google Calendar → Add → From URL.","ics.copyFailed":"Could not copy the link.","home.welcomeBack":"Welcome back,","home.userTagline":"Manage course room bookings, browse room availability, or reserve a space for your next event.","home.goToBooking":"Go to Booking","home.viewRoomSchedule":"View Room Schedule","home.badge":"Physics & Engineering Physics","home.title":"Room Booking & Schedule System","home.subtitle":"Book classrooms for courses, reserve rooms for events, and view real-time room availability — all in one place.","home.signInGoogle":"Sign in with Google","home.whatYouCanDo":"What you can do","home.open":"Open","home.loginRequired":"Login required","home.feat.course.title":"Course Booking","home.feat.course.desc":"Schedule classrooms for your courses across the full semester with conflict detection.","home.feat.roomSchedule.title":"Room Schedule","home.feat.roomSchedule.desc":"Browse real-time room availability and see what's happening across all facilities.","home.feat.event.title":"Event Booking","home.feat.event.desc":"Reserve rooms for one-off events, seminars, or meetings with instant confirmation.","home.feat.manager.title":"Room Manager","home.feat.manager.desc":"Manage room access, approve requests, and track usage for your assigned rooms.","home.adminOnly":"Admin","home.showcase.title":"See rooms in real time","home.showcase.desc":"A clear weekly room calendar: instantly see which rooms are free and which are in class — across every facility.","home.showcase.cta":"View room schedule","home.heroImageAlt":"Physics & Engineering Physics","about.badge":"About Physoom","about.title":"Scheduling for Physics & Engineering Physics, reinvented","about.subtitle":"Physoom replaces the slow, error-prone spreadsheet workflow with a shared, real-time system for arranging teaching schedules and room bookings.","about.whatTitle":"What is Physoom?","about.whatBody":"Physoom is an app developed to help the Physics & Engineering Physics staff at VNU-HCMUS arrange teaching schedules more efficiently. The traditional method of using Excel required a lot of time and effort to coordinate between teachers and tighten everyone's schedule and needs. With Physoom, teachers can easily input their availability and preferences, letting the app generate optimized schedules in a fraction of the time — while reducing the likelihood of scheduling conflicts.","about.whyTitle":"Why it helps","about.benefit.conflict.title":"Conflict detection","about.benefit.conflict.desc":"Overlapping rooms, teachers, and classes are flagged automatically before they become a problem.","about.benefit.fast.title":"Faster than Excel","about.benefit.fast.desc":"Build a full semester of schedules in a fraction of the time the traditional spreadsheet workflow took.","about.benefit.realtime.title":"Real-time availability","about.benefit.realtime.desc":"See exactly what's booked across every room and facility, updated live as bookings change.","about.benefit.team.title":"Built for teams","about.benefit.team.desc":"Teachers, room managers, and admins each get a workflow tuned to what they actually need to do.","about.createdBy":"Created by","about.createdFor":"for the Physics & Engineering Physics staff at VNU-HCMUS","room.title":"Room Schedule","room.subtitle":"Browse real-time room availability across the department.","room.quickAccess":"Quick access with a share code","room.go":"Go","room.codeHint":"Get this code from a display screen, QR poster, or your administrator.","room.orMscb":"Or use your MSCB below to view the room schedule","room.loginToView":"Log in with your school account to view the room schedule with your MSCB.","room.enterMscb":"Enter your MSCB to view the room schedule","room.selectHint":"Select a room to see its details and schedule.","room.pleaseSelect":"Please select a room to view its schedule.","room.maxCap":"Max capacity:","room.students":"students","room.submit":"Submit","room.codeLen":"Code must be 6 characters","room.codeNotFound":"Code not found. Please check and try again.","room.codeError":"Something went wrong. Please try again.","room.roomLabel":"Room","room.searchByRoom":"Search by Room","room.idRequired":"ID is required","admin.dashboard":"Dashboard","admin.overview":"Overview of rooms, courses and booking status","admin.nav.dashboard":"Dashboard","admin.grp.booking":"Scheduling","admin.grp.catalog":"Catalog","admin.grp.system":"System","admin.nav.course":"Course","admin.nav.room":"Room","admin.nav.courseBooking":"Course Booking","admin.nav.roomBooking":"Room Booking","admin.nav.terms":"Terms & Holidays","admin.nav.apiKeys":"API Keys","admin.nav.users":"Users","admin.nav.viewShare":"View Share","dash.totalRooms":"Total Rooms","dash.totalCourses":"Total Courses","dash.bookedCourses":"Booked Courses","dash.eventBookings":"Event Bookings","dash.approvalRate":"Approval Rate","dash.locations":"locations","dash.noBookings":"No bookings yet","dash.noEvents":"No events yet","dash.noData":"No data yet","dash.b
1yLocation":"By location","dash.byCredit":"By periods","dash.byStatus":"By status","dash.bookingStatus":"Booking Status","dash.approved":"Approved","dash.pending":"Pending","dash.rejected":"Rejected","dash.notBooked":"Not booked","terms.title":"Terms & Holidays","terms.createNew":"Create New","terms.colTitle":"TITLE","terms.colType":"TYPE","terms.colStart":"START DATE","terms.colEnd":"END DATE","terms.colActions":"ACTIONS","terms.empty":"No terms or holidays found.","terms.createModal":"Create Term or Holiday","terms.editModal":"Edit Term / Holiday","terms.fieldTitle":"Title","terms.fieldTitlePh":"e.g. Fall 2026 or Spring Break","terms.fieldType":"Type","terms.typeTerm":"Academic Term","terms.typeHoliday":"Holiday / Break","terms.startDate":"Start Date","terms.endDate":"End Date","terms.delete":"Delete","terms.confirmDelete":"Are you sure you want to delete this?","terms.colCourses":"Courses","terms.deleteBlocked":"{n} courses linked — can't delete this term","terms.rescheduled":"Rescheduled {n} sessions to the new term dates.","terms.conflictTitle":"Shifting this term would clash with other schedules","terms.conflictCount":"{n} conflicts","terms.conflictBody":"The sessions below would clash with another schedule's room/teacher. Cancel to adjust, or apply anyway.","terms.applyAnyway":"Apply anyway","terms.expandOnGrow":"Also expand shorter-than-term courses to the full term","terms.expandHint":"Courses that ran the FULL old term auto-scale to the new term. Shorter courses (e.g. 4 weeks) keep their length by default (only trimmed if the new term is shorter). Tick to expand those short courses to the full term too.","terms.loadNational":"Load VN national holidays","terms.year":"Year","terms.nationalAdded":"Added {n} national holidays for {y}.","terms.nationalNoneNew":"National holidays for {y} already exist.","terms.nationalNoLunar":"Tết / Hung Kings dates aren't preset for {y} — only fixed-date holidays were added. Please add Tết manually.","tbl.search":"Search by name...","tbl.columns":"Columns","tbl.deleteSelected":"Delete Selected","tbl.addNew":"Add New","tbl.rowsPerPage":"Rows per page:","tbl.selectedOf":"{n} of {total} selected","tbl.allSelected":"All items selected","tbl.previous":"Previous","tbl.next":"Next","tbl.actions":"Actions","tbl.edit":"Edit","tbl.delete":"Delete","form.title":"Title","form.note":"Note","form.save":"Save","form.cancel":"Cancel","form.required":"Required","room.createRoom":"Create Room","room.updateRoom":"Update Room","room.enterTitle":"Enter room title","room.capacity":"Capacity Limit","room.enterCapacity":"Enter capacity limit","room.location":"Location","room.selectLocation":"Select a location","room.category":"Category","room.selectCategory":"Select a category","room.enterNote":"Enter any additional notes","room.total":"Total {n} rooms","course.createData":"Create Data","course.updateData":"Update Data","course.courseId":"Course ID","course.courseIdExt":"Course ID Extend","course.classId":"Class ID","course.addClassId":"Add class ID","course.teacherEmails":"Teacher Emails","course.saved":"Data saved successfully!","course.saveFailed":"Failed to save the data.","course.validationFailed":"Validation failed. Please try again.","course.unexpectedError":"An unexpected error occurred. Please try again.","users.title":"Users","users.totalAccounts":"{n} total accounts","users.addUser":"Add User","users.editUser":"Edit User","users.import":"Import from CSV / Excel","users.name":"Name","users.email":"Email","users.admin":"Admin","users.confirmDelete":"Delete this user?"}},i=(0,a.createContext)({lang:"vi",setLang:()=>{},t:e=>e}),s="physoom-lang";function c(e){let{children:o}=e,[t,c]=(0,a.useState)("vi"),[h,l]=(0,a.useState)(!1);(0,a.useEffect)(()=>
1{l(!0);try{let e=localStorage.getItem(s);("vi"===e||"en"===e)&&c(e)}catch(e){}},[]);let m=(0,a.useCallback)(e=>{c(e);try{localStorage.setItem(s,e)}catch(e){}},[]),d=(0,a.useCallback)((e,o)=>{var n,a;let i=null!==(a=null!==(n=(r[t]||r.en)[e])&&void 0!==n?n:r.en[e])&&void 0!==a?a:e;if(o)for(let[e,t]of Object.entries(o))i=i.replace(RegExp("\\{".concat(e,"\\}"),"g"),String(t));return i},[t]);return(0,n.jsx)(i.Provider,{value:{lang:h?t:"vi",setLang:m,t:d},children:o})}function h(){return(0,a.useContext)(i)}}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.