From cbd96fd8f240fec1ab86c22b1f61eafbb3db1f15 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sedat=20=C3=96ZT=C3=9CRK?= <76204082+iamsedatozturk@users.noreply.github.com> Date: Fri, 8 May 2026 11:38:57 +0300 Subject: [PATCH] =?UTF-8?q?Video=20Rooms=20d=C3=BCzenlemesi?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Seeds/LanguagesData.json | 312 ++++++++++- .../Seeds/MenusData.json | 26 +- .../listForm/wizard/WizardFileManager.tsx | 15 +- ui/src/views/admin/videoroom/Dashboard.tsx | 28 +- ui/src/views/admin/videoroom/RoomList.tsx | 518 ++++++++++-------- ui/src/views/intranet/widgets/EventModal.tsx | 11 +- ui/src/views/intranet/widgets/SurveyModal.tsx | 14 +- 7 files changed, 667 insertions(+), 257 deletions(-) diff --git a/api/src/Sozsoft.Platform.DbMigrator/Seeds/LanguagesData.json b/api/src/Sozsoft.Platform.DbMigrator/Seeds/LanguagesData.json index 7acc7df..30e40ef 100644 --- a/api/src/Sozsoft.Platform.DbMigrator/Seeds/LanguagesData.json +++ b/api/src/Sozsoft.Platform.DbMigrator/Seeds/LanguagesData.json @@ -3636,6 +3636,48 @@ "en": "Audit Logs", "tr": "Audit Günlükleri" }, + { + "resourceName": "Platform", + "key": "App.Videoroom.RoleSelector", + "en": "Please select your role", + "tr": "Lütfen rolünüzü seçin" + }, + { + "resourceName": "Platform", + "key": "App.Videoroom.Host", + "en": "Host", + "tr": "Oda Sahibi" + }, + { + "resourceName": "Platform", + "key": "App.Videoroom.HostDescription", + "en": "The host creates the room, starts the session, manages participants and views reports.", + "tr": "Odayı oluşturur, oturumu başlatır, katılımcıları yönetir ve raporları görüntüler." + }, + { + "resourceName": "Platform", + "key": "App.Videoroom.Participant", + "en": "Participant", + "tr": "Katılımcı" + }, + { + "resourceName": "Platform", + "key": "App.Videoroom.ParticipantDescription", + "en": "Joins active rooms and interacts with the host and other participants.", + "tr": "Aktif odalara katılır, oda sahibi ve diğer katılımcılarla etkileşim kurar." + }, + { + "resourceName": "Platform", + "key": "App.Videoroom.Observer", + "en": "Observer", + "tr": "İzleyici" + }, + { + "resourceName": "Platform", + "key": "App.Videoroom.ObserverDescription", + "en": "Joins active rooms and observes without interacting.", + "tr": "Aktif odalara katılır, ancak etkileşimde bulunmaz." + }, { "resourceName": "Platform", "key": "App.Videoroom", @@ -3663,8 +3705,230 @@ { "resourceName": "Platform", "key": "App.Videoroom.Planning", - "en": "Video Room Planning", - "tr": "Video Oda Planlama" + "en": "Planning", + "tr": "Planlama" + }, + { + "resourceName": "Platform", + "key": "App.Videoroom.NewRoom", + "en": "New Room", + "tr": "Yeni Oda Oluştur" + }, + { + "resourceName": "Platform", + "key": "App.Videoroom.TotalRooms", + "en": "Total Rooms", + "tr": "Toplam Oda" + }, + { + "resourceName": "Platform", + "key": "App.Videoroom.ActiveRooms", + "en": "Active Rooms", + "tr": "Aktif Oda" + }, + { + "resourceName": "Platform", + "key": "App.Videoroom.OpenRooms", + "en": "Open Rooms", + "tr": "Katılıma Açık" + }, + { + "resourceName": "Platform", + "key": "App.Videoroom.PassiveRooms", + "en": "Passive Rooms", + "tr": "Pasif Oda" + }, + { + "resourceName": "Platform", + "key": "App.Videoroom.TotalParticipants", + "en": "Total Participants", + "tr": "Toplam Katılımcı" + }, + { + "resourceName": "Platform", + "key": "App.Videoroom.RoomSettings", + "en": "Room Settings", + "tr": "Oda Ayarları" + }, + { + "resourceName": "Platform", + "key": "App.Videoroom.ParticipantPermissions", + "en": "Participant Permissions", + "tr": "Katılımcı İzinleri" + }, + { + "resourceName": "Platform", + "key": "App.Videoroom.AllowHandRaise", + "en": "Allow Hand Raise", + "tr": "Parmak Kaldırma İzni" + }, + { + "resourceName": "Platform", + "key": "App.Videoroom.AllowStudentChat", + "en": "Allow Student Chat", + "tr": "Öğrenci Sohbet İzni" + }, + { + "resourceName": "Platform", + "key": "App.Videoroom.AllowPrivateMessages", + "en": "Allow Private Messages", + "tr": "Özel Mesaj İzni" + }, + { + "resourceName": "Platform", + "key": "App.Videoroom.DefaultSettings", + "en": "Default Settings", + "tr": "Varsayılan Ayarlar" + }, + { + "resourceName": "Platform", + "key": "App.Videoroom.AllowStudentScreenShare", + "en": "Allow Student Screen Share", + "tr": "Öğrenci Ekran Paylaşımı" + }, + { + "resourceName": "Platform", + "key": "App.Videoroom.MicrophoneMuted", + "en": "Microphone Muted", + "tr": "Mikrofon Kapalı" + }, + { + "resourceName": "Platform", + "key": "App.Videoroom.MicrophoneUnmuted", + "en": "Microphone Unmuted", + "tr": "Mikrofon Açık" + }, + { + "resourceName": "Platform", + "key": "App.Videoroom.DefaultMicrophoneState", + "en": "Microphone State", + "tr": "Mikrofon Durumu" + }, + { + "resourceName": "Platform", + "key": "App.Videoroom.DefaultCameraState", + "en": "Camera State", + "tr": "Kamera Durumu" + }, + { + "resourceName": "Platform", + "key": "App.Videoroom.CameraOn", + "en": "Camera On", + "tr": "Kamera Açık" + }, + { + "resourceName": "Platform", + "key": "App.Videoroom.DefaultLayout", + "en": "Default Layout", + "tr": "Varsayılan Layout" + }, + { + "resourceName": "Platform", + "key": "App.Videoroom.LayoutGridView", + "en": "Grid View", + "tr": "Izgara Görünümü" + }, + { + "resourceName": "Platform", + "key": "App.Videoroom.LayoutTeacherFocus", + "en": "Teacher Focus", + "tr": "Öğretmen Odaklı" + }, + { + "resourceName": "Platform", + "key": "App.Videoroom.LayoutPresentation", + "en": "Presentation", + "tr": "Sunum Modu" + }, + { + "resourceName": "Platform", + "key": "App.Videoroom.LayoutSidebar", + "en": "Sidebar", + "tr": "Yan Panel" + }, + { + "resourceName": "Platform", + "key": "App.Videoroom.DeleteRoom", + "en": "Delete Room", + "tr": "Odayı Sil" + }, + { + "resourceName": "Platform", + "key": "App.Videoroom.DeleteRoomWarning", + "en": "This action cannot be undone", + "tr": "Bu işlem geri alınamaz" + }, + { + "resourceName": "Platform", + "key": "App.Videoroom.AutomaticallyMuteNewParticipants", + "en": "Automatically Mute New Participants", + "tr": "Yeni katılımcıları otomatik sustur" + }, + { + "resourceName": "Platform", + "key": "App.Videoroom.Start", + "en": "Start", + "tr": "Başlat" + }, + { + "resourceName": "Platform", + "key": "App.Videoroom.Join", + "en": "Join", + "tr": "Katıl" + }, + { + "resourceName": "Platform", + "key": "App.Videoroom.CreateRoom", + "en": "Create Room", + "tr": "Oda Oluştur" + }, + { + "resourceName": "Platform", + "key": "App.Videoroom.EditRoom", + "en": "Edit Room", + "tr": "Odayı Düzenle" + }, + { + "resourceName": "Platform", + "key": "App.Videoroom.SaveChanges", + "en": "Save Changes", + "tr": "Değişiklikleri Kaydet" + }, + { + "resourceName": "Platform", + "key": "App.Videoroom.CameraOff", + "en": "Camera Off", + "tr": "Kamera Kapalı" + }, + { + "resourceName": "Platform", + "key": "App.Listform.ListformField.RoomName", + "en": "Room Name", + "tr": "Oda Adı" + }, + { + "resourceName": "Platform", + "key": "App.Listform.ListformField.RoomNamePlaceholder", + "en": "E.g. Math 101 - Differential Equations", + "tr": "Örn: Matematik 101 - Diferansiyel Denklemler" + }, + { + "resourceName": "Platform", + "key": "App.Listform.ListformField.DescriptionPlaceholder", + "en": "E.g. Brief description about the class...", + "tr": "Örn: Ders hakkında kısa açıklama..." + }, + { + "resourceName": "Platform", + "key": "App.Listform.ListformField.SubjectPlaceholder", + "en": "E.g. Math, Physics, Chemistry", + "tr": "Örn: Matematik, Fizik, Kimya" + }, + { + "resourceName": "Platform", + "key": "App.Videoroom.NoScheduledRooms", + "en": "No Scheduled Rooms", + "tr": "Henüz programlanmış oda bulunmamaktadır." }, { "resourceName": "Platform", @@ -6156,6 +6420,24 @@ "tr": "Anketler", "en": "Surveys" }, + { + "resourceName": "Platform", + "key": "App.Intranet.Events.EventComment", + "tr": "Henüz yorum yok. İlk yorumu sen yap!", + "en": "No comments yet. Be the first to comment!" + }, + { + "resourceName": "Platform", + "key": "App.Intranet.Events.Comments", + "tr": "Yorumlar", + "en": "Comments" + }, + { + "resourceName": "Platform", + "key": "App.Intranet.Events.EventAttendance", + "tr": "Bir yorum yaz...", + "en": "Write a comment..." + }, { "resourceName": "Platform", "key": "App.Intranet.Events", @@ -11958,6 +12240,18 @@ "tr": "Çalışıyor...", "en": "Running..." }, + { + "resourceName": "Platform", + "key": "App.Platform.Intranet.SurveyModal.RequiredUserName", + "tr": "Bu anket isim belirtilerek doldurulmaktadır. Yanıtlarınız kaydedilecektir.", + "en": "This survey requires your name. Your responses will be recorded." + }, + { + "resourceName": "Platform", + "key": "App.Platform.Intranet.SurveyModal.AnonymousNotice", + "tr": "Bu anket anonimdir. Kimlik bilgileriniz kaydedilmeyecektir.", + "en": "This survey is anonymous. Your identity will not be recorded." + }, { "resourceName": "Platform", "key": "App.Platform.Intranet.SurveyModal.RequiredField", @@ -13706,6 +14000,12 @@ "en": "Duration", "tr": "Süre" }, + { + "resourceName": "Platform", + "key": "App.Listform.ListformField.Minutes", + "en": "Minutes", + "tr": "Dakika" + }, { "resourceName": "Platform", "key": "App.Listform.ListformField.ElementId", @@ -15758,6 +16058,12 @@ "en": "Subject", "tr": "Konu" }, + { + "resourceName": "Platform", + "key": "App.Listform.ListformField.StartDateTime", + "en": "Start Date and Time", + "tr": "Başlangıç Tarihi ve Saati" + }, { "resourceName": "Platform", "key": "App.Listform.ListformField.SubmissionTime", @@ -18033,4 +18339,4 @@ "tr": "Başarıyla Kaydedildi" } ] -} \ No newline at end of file +} diff --git a/api/src/Sozsoft.Platform.DbMigrator/Seeds/MenusData.json b/api/src/Sozsoft.Platform.DbMigrator/Seeds/MenusData.json index 8d76fd1..0899400 100644 --- a/api/src/Sozsoft.Platform.DbMigrator/Seeds/MenusData.json +++ b/api/src/Sozsoft.Platform.DbMigrator/Seeds/MenusData.json @@ -1123,21 +1123,11 @@ "RequiredPermissionName": "App.Intranet.Events.Event", "IsDisabled": false }, - { - "ParentCode": "App.Administration", - "Code": "App.Videoroom.Dashboard", - "DisplayName": "App.Videoroom.Dashboard", - "Order": 4, - "Url": "/admin/videoroom/dashboard", - "Icon": "FcVideoCall", - "RequiredPermissionName": "App.Videoroom.Dashboard", - "IsDisabled": false - }, { "ParentCode": "App.Administration", "Code": "App.Administration.Restrictions", "DisplayName": "App.Restrictions", - "Order": 5, + "Order": 4, "Url": null, "Icon": "FaLock", "RequiredPermissionName": null, @@ -1167,7 +1157,7 @@ "ParentCode": "App.Administration", "Code": "Abp.Identity", "DisplayName": "Abp.Identity", - "Order": 6, + "Order": 5, "Url": null, "Icon": "FcConferenceCall", "RequiredPermissionName": null, @@ -1257,7 +1247,7 @@ "ParentCode": "App.Administration", "Code": "App.Reports.Management", "DisplayName": "App.Reports.Management", - "Order": 7, + "Order": 6, "Url": null, "Icon": "FcDocument", "RequiredPermissionName": null, @@ -1283,6 +1273,16 @@ "RequiredPermissionName": "App.Reports.ReportTemplates", "IsDisabled": false }, + { + "ParentCode": "App.Administration", + "Code": "App.Videoroom.Dashboard", + "DisplayName": "App.Videoroom.Dashboard", + "Order": 7, + "Url": "/admin/videoroom/dashboard", + "Icon": "FcVideoCall", + "RequiredPermissionName": "App.Videoroom.Dashboard", + "IsDisabled": false + }, { "ParentCode": "App.Administration", "Code": "App.Files", diff --git a/ui/src/views/admin/listForm/wizard/WizardFileManager.tsx b/ui/src/views/admin/listForm/wizard/WizardFileManager.tsx index 061865c..8b5e213 100644 --- a/ui/src/views/admin/listForm/wizard/WizardFileManager.tsx +++ b/ui/src/views/admin/listForm/wizard/WizardFileManager.tsx @@ -12,7 +12,7 @@ import { FaExclamationTriangle, FaSearch, FaEdit, - FaUser, + FaCalendarAlt, } from 'react-icons/fa' import { FcAcceptDatabase } from 'react-icons/fc' import { deleteWizardFile, getWizardFiles } from '@/services/wizard.service' @@ -161,9 +161,12 @@ const WizardFileManager = () => {
{filteredFiles.length === 0 && !loading && ( -

- {translate('::App.Listforms.WizardNoFiles') || 'No wizard files found.'} -

+
+ +

+ {translate('::App.Listforms.WizardNoFiles') || 'No wizard files found.'} +

+
)} {loading && ( @@ -187,7 +190,9 @@ const WizardFileManager = () => { {f.wizardName || f.fileName}
- {f.fileName} - {f.listFormCode} + + {f.fileName} - {f.listFormCode} +
diff --git a/ui/src/views/admin/videoroom/Dashboard.tsx b/ui/src/views/admin/videoroom/Dashboard.tsx index 3b58369..6eb4fb5 100644 --- a/ui/src/views/admin/videoroom/Dashboard.tsx +++ b/ui/src/views/admin/videoroom/Dashboard.tsx @@ -1,6 +1,6 @@ import React from 'react' import { motion } from 'framer-motion' -import { FaGraduationCap, FaUserCheck, FaEye } from 'react-icons/fa' +import { FaEye, FaUsers, FaCrown } from 'react-icons/fa' import { useStoreActions, useStoreState } from '@/store/store' import { useNavigate } from 'react-router-dom' import { ROUTES_ENUM } from '@/routes/route.constant' @@ -36,7 +36,9 @@ const Dashboard: React.FC = () => { animate={{ opacity: 1, y: 0 }} className="text-center w-full max-w-4xl" > -

Lütfen rolünüzü seçin

+

+ {translate('::' + 'App.Videoroom.RoleSelector')} +

{ onClick={() => handleRoleSelect('teacher')} className="bg-white rounded-lg shadow-lg p-6 sm:p-8 hover:shadow-xl transition-all duration-300 border-2 border-transparent hover:border-blue-500" > - -

Öğretmen

+ +

+ {translate('::' + 'App.Videoroom.Host')} +

- Ders başlatın, öğrencilerle iletişim kurun ve katılım raporlarını görün + {translate('::' + 'App.Videoroom.HostDescription')}

@@ -58,10 +62,12 @@ const Dashboard: React.FC = () => { onClick={() => handleRoleSelect('student')} className="bg-white rounded-lg shadow-lg p-6 sm:p-8 hover:shadow-xl transition-all duration-300 border-2 border-transparent hover:border-green-500" > - -

Öğrenci

+ +

+ {translate('::' + 'App.Videoroom.Participant')} +

- Aktif derslere katılın, öğretmeniniz ve diğer öğrencilerle etkileşim kurun + {translate('::' + 'App.Videoroom.ParticipantDescription')}

@@ -72,9 +78,11 @@ const Dashboard: React.FC = () => { className="bg-white rounded-lg shadow-lg p-6 sm:p-8 hover:shadow-xl transition-all duration-300 border-2 border-transparent hover:border-purple-500 md:col-span-2 lg:col-span-1" > -

Gözlemci

+

+ {translate('::' + 'App.Videoroom.Observer')} +

- Sınıfı gözlemleyin, eğitim sürecini takip edin (ses/video paylaşımı yok) + {translate('::' + 'App.Videoroom.ObserverDescription')}

diff --git a/ui/src/views/admin/videoroom/RoomList.tsx b/ui/src/views/admin/videoroom/RoomList.tsx index dba89be..a53f74c 100644 --- a/ui/src/views/admin/videoroom/RoomList.tsx +++ b/ui/src/views/admin/videoroom/RoomList.tsx @@ -14,7 +14,6 @@ import { FaHourglassEnd, FaDoorOpen, FaSearch, - FaFilter, } from 'react-icons/fa' import { useStoreState } from '@/store/store' @@ -30,6 +29,9 @@ import { import { Helmet } from 'react-helmet' import { useLocalization } from '@/utils/hooks/useLocalization' import { VideoroomDto } from '@/proxy/videoroom/models' +import classNames from 'classnames' +import { Button, Input } from '@/components/ui' +import { FcVideoCall } from 'react-icons/fc' export interface RoomProps { status: string @@ -70,6 +72,7 @@ const RoomList: React.FC = () => { } const [videoList, setVideoist] = useState([]) const [videoroom, setVideoroom] = useState(newClassEntity) + const mode = useStoreState((state) => state.theme.mode) const [showCreateModal, setShowCreateModal] = useState(false) const [showEditModal, setShowEditModal] = useState(false) @@ -77,7 +80,6 @@ const RoomList: React.FC = () => { // Filter/search state const [searchTerm, setSearchTerm] = useState('') - const [statusFilter, setStatusFilter] = useState('') const getVideoroomList = async ( skipCount = 0, @@ -110,8 +112,8 @@ const RoomList: React.FC = () => { } useEffect(() => { - getVideoroomList(0, 1000, '', searchTerm, statusFilter) - }, [searchTerm, statusFilter]) + getVideoroomList(0, 1000, '', searchTerm) + }, [searchTerm]) const handleCreateClass = async (e: React.FormEvent) => { e.preventDefault() @@ -208,7 +210,9 @@ const RoomList: React.FC = () => { className: 'bg-blue-100 text-blue-800', showButtons: true, title: - user.role === 'teacher' && classSession.teacherId === user.id ? 'Dersi Başlat' : 'Katıl', + user.role === 'teacher' && classSession.teacherId === user.id + ? translate('::App.Videoroom.Start') + : translate('::App.Videoroom.Join'), classes: user.role === 'teacher' && classSession.teacherId === user.id ? 'bg-green-600 text-white hover:bg-green-700' @@ -232,7 +236,9 @@ const RoomList: React.FC = () => { className: 'bg-yellow-100 text-yellow-800', showButtons: true, title: - user.role === 'teacher' && classSession.teacherId === user.id ? 'Sınıfa Git' : 'Katıl', + user.role === 'teacher' && classSession.teacherId === user.id + ? translate('::App.Videoroom.Start') + : translate('::App.Videoroom.Join'), classes: user.role === 'teacher' && classSession.teacherId === user.id ? 'bg-green-600 text-white hover:bg-green-700' @@ -258,12 +264,50 @@ const RoomList: React.FC = () => { <> + + {/* ── Header ─────────────────────────────────────────────── */} +
+ +

{translate('::App.Videoroom.List')}

+ +
+
+ + setSearchTerm(e.target.value)} + /> +
+ + {user.role === 'teacher' && ( + + )} +
+
+ {/* Stats Cards */} -
+
{
-

Toplam Sınıf

+

+ {translate('::App.Videoroom.TotalRooms')} +

{widgets().totalCount}{' '}

@@ -294,7 +340,9 @@ const RoomList: React.FC = () => {
-

Aktif Sınıf

+

+ {translate('::App.Videoroom.ActiveRooms')} +

{widgets().activeCount}

@@ -314,7 +362,9 @@ const RoomList: React.FC = () => {
-

Katılıma Açık

+

+ {translate('::App.Videoroom.OpenRooms')} +

{widgets().openCount}

@@ -332,7 +382,9 @@ const RoomList: React.FC = () => {
-

Pasif Sınıf

+

+ {translate('::App.Videoroom.PassiveRooms')} +

{widgets().passiveCount}

@@ -352,7 +404,9 @@ const RoomList: React.FC = () => {
-

Toplam Katılımcı

+

+ {translate('::App.Videoroom.TotalParticipants')} +

{videoList.reduce((sum, c) => sum + c.participantCount, 0)}

@@ -361,188 +415,158 @@ const RoomList: React.FC = () => {
- {/* Filter Bar */} -
-
-
- - setSearchTerm(e.target.value)} - /> -
-
- - -
-
-
- {/* Scheduled Classes */}
-
-

Programlı Sınıflar

- {user.role === 'teacher' && ( - - )} -
-
- {videoList.length === 0 ? ( -
- -

Henüz programlanmış sınıf bulunmamaktadır.

-
- ) : ( -
- {videoList.map((classSession, index) => { - const { status, className, showButtons, title, classes, event } = - getClassProps(classSession) - return ( - -
-
-

+ {videoList.length === 0 ? ( +
+ +

+ {translate('::App.Videoroom.NoScheduledRooms') || + 'No scheduled classes found. Please create a new class.'} +

+
+ ) : ( +
+ {videoList.map((classSession, index) => { + const { status, className, showButtons, title, classes, event } = + getClassProps(classSession) + const isActive = !classSession.actualStartTime && !classSession.actualEndTime + const isOpen = classSession.actualStartTime && !classSession.actualEndTime + const accentColor = isOpen + ? 'border-l-yellow-400' + : isActive + ? 'border-l-blue-500' + : 'border-l-gray-300' + return ( + + {/* Card Header */} +
+
+
+

{classSession.name}

{status}
- - {/* Sağ kısım: buton */} - {showButtons && ( -
- {/* {user.role === 'teacher' && classSession.teacherId === user.id && ( */} - {user.role === 'teacher' && ( - <> - - - - - - + {(classSession.subject || classSession.description) && ( +
+ {classSession.subject && ( + + {classSession.subject} + + )} + {classSession.description && ( +

+ {classSession.description} +

)} - -
)}
-
-

{classSession.subject}

-
- -
- - {classSession.description} - -
- -
-
-
- - - {showDbDateAsIs(classSession.scheduledStartTime)} - -
- -
- - {classSession.duration} dakika -
- -
- {classSession.scheduledEndTime && ( - <> - - - {showDbDateAsIs(classSession.scheduledEndTime!)} + {/* Action Buttons */} + {showButtons && ( +
+ {user.role === 'teacher' && ( + <> +
+ -
- - - {classSession.participantCount}/{classSession.maxParticipants} - -
+ + + + + )} + +
-
- - ) - })} -
- )} -
+ )} +
+ + {/* Card Footer — Meta Info */} +
+ + + {showDbDateAsIs(classSession.scheduledStartTime)} + + + + {classSession.duration} dk + + {classSession.scheduledEndTime && ( + + + {showDbDateAsIs(classSession.scheduledEndTime!)} + + )} + + + {classSession.participantCount}/{classSession.maxParticipants} + +
+
+ ) + })} +
+ )}

{/* Class Modal (Create/Edit) */} @@ -555,7 +579,9 @@ const RoomList: React.FC = () => { >

- {showCreateModal ? 'Yeni Sınıf Oluştur' : 'Sınıfı Düzenle'} + {showCreateModal + ? translate('::App.Videoroom.CreateRoom') || 'Yeni Sınıf Oluştur' + : translate('::App.Videoroom.EditRoom') || 'Sınıfı Düzenle'}

@@ -565,7 +591,7 @@ const RoomList: React.FC = () => { >
{ value={videoroom.name} onChange={(e) => setVideoroom({ ...videoroom, name: e.target.value })} className="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-transparent" - placeholder="Örn: Matematik 101 - Diferansiyel Denklemler" + placeholder={ + translate('::App.Listform.ListformField.RoomNamePlaceholder') || + 'Enter room name...' + } />
- +