diff --git a/app/controllers/components/course/achievements_component.rb b/app/controllers/components/course/achievements_component.rb index d3324cb9de9..9bf3f8d4e17 100644 --- a/app/controllers/components/course/achievements_component.rb +++ b/app/controllers/components/course/achievements_component.rb @@ -2,10 +2,6 @@ class Course::AchievementsComponent < SimpleDelegator include Course::ControllerComponentHost::Component - def self.display_name - I18n.t('components.achievements.name') - end - def self.gamified? true end @@ -15,7 +11,6 @@ def sidebar_items { key: :achievements, icon: :achievement, - title: I18n.t('course.achievement.achievements.sidebar_title'), weight: 4, path: course_achievements_path(current_course) } diff --git a/app/controllers/components/course/announcements_component.rb b/app/controllers/components/course/announcements_component.rb index f60c22a9af8..a53e5d80d85 100644 --- a/app/controllers/components/course/announcements_component.rb +++ b/app/controllers/components/course/announcements_component.rb @@ -3,10 +3,6 @@ class Course::AnnouncementsComponent < SimpleDelegator include Course::ControllerComponentHost::Component include Course::UnreadCountsConcern - def self.display_name - I18n.t('components.announcements.name') - end - def sidebar_items main_sidebar_items + settings_sidebar_items end @@ -18,7 +14,7 @@ def main_sidebar_items { key: :announcements, icon: :announcement, - title: settings.title || t('course.announcements.sidebar_title'), + title: settings.title, weight: 1, path: course_announcements_path(current_course), unread: unread_announcements_count @@ -29,7 +25,8 @@ def main_sidebar_items def settings_sidebar_items [ { - title: settings.title || t('layouts.course_admin.announcement_settings.title'), + key: self.class.key, + title: settings.title, type: :settings, weight: 4, path: course_admin_announcements_path(current_course) diff --git a/app/controllers/components/course/assessments_component.rb b/app/controllers/components/course/assessments_component.rb index 2b48e765682..29f0cdee937 100644 --- a/app/controllers/components/course/assessments_component.rb +++ b/app/controllers/components/course/assessments_component.rb @@ -3,10 +3,6 @@ class Course::AssessmentsComponent < SimpleDelegator include Course::ControllerComponentHost::Component include Course::UnreadCountsConcern - def self.display_name - I18n.t('components.assessments.name') - end - def self.lesson_plan_item_actable_names [Course::Assessment.name] end @@ -38,7 +34,6 @@ def assessment_submissions { key: :assessments_submissions, icon: :submission, - title: t('course.assessment.submissions.sidebar_title'), weight: 3, path: course_submissions_path(current_course), unread: pending_assessment_submissions_count @@ -51,9 +46,8 @@ def admin_sidebar_items [ { - key: :assessments_skills, + key: :sidebar_assessments_skills, icon: :skills, - title: t('course.assessment.skills.sidebar_title'), type: :admin, weight: 8, path: course_assessments_skills_path(current_course) @@ -64,7 +58,7 @@ def admin_sidebar_items def admin_settings_items [ { - title: t('course.assessment.assessments.sidebar_title'), + key: self.class.key, type: :settings, weight: 5, path: course_admin_assessments_path(current_course) diff --git a/app/controllers/components/course/codaveri_component.rb b/app/controllers/components/course/codaveri_component.rb index dca973a0943..ec33b11e0af 100644 --- a/app/controllers/components/course/codaveri_component.rb +++ b/app/controllers/components/course/codaveri_component.rb @@ -2,10 +2,6 @@ class Course::CodaveriComponent < SimpleDelegator include Course::ControllerComponentHost::Component - def self.display_name - I18n.t('components.codaveri.name') - end - def sidebar_items settings_sidebar_items end @@ -15,7 +11,7 @@ def sidebar_items def settings_sidebar_items [ { - title: t('layouts.course_admin.codaveri.title'), + key: self.class.key, type: :settings, weight: 6, path: course_admin_codaveri_path(current_course) diff --git a/app/controllers/components/course/discussion/topics_component.rb b/app/controllers/components/course/discussion/topics_component.rb index 56573daf04f..af6136acd68 100644 --- a/app/controllers/components/course/discussion/topics_component.rb +++ b/app/controllers/components/course/discussion/topics_component.rb @@ -3,10 +3,6 @@ class Course::Discussion::TopicsComponent < SimpleDelegator include Course::ControllerComponentHost::Component include Course::UnreadCountsConcern - def self.display_name - I18n.t('components.discussion.topics.name') - end - def sidebar_items main_sidebar_items + settings_sidebar_items end @@ -18,7 +14,7 @@ def main_sidebar_items { key: :discussion_topics, icon: :comments, - title: settings.title || t('course.discussion.topics.sidebar_title'), + title: settings.title, weight: 5, path: course_topics_path(current_course), unread: unread_comments_count @@ -29,7 +25,8 @@ def main_sidebar_items def settings_sidebar_items [ { - title: settings.title || t('course.discussion.topics.sidebar_title'), + key: :sidebar_discussion_topics, + title: settings.title, type: :settings, weight: 7, path: course_admin_topics_path(current_course) diff --git a/app/controllers/components/course/duplication_component.rb b/app/controllers/components/course/duplication_component.rb index c9d1c7b3c81..77edfe8aad1 100644 --- a/app/controllers/components/course/duplication_component.rb +++ b/app/controllers/components/course/duplication_component.rb @@ -2,18 +2,13 @@ class Course::DuplicationComponent < SimpleDelegator include Course::ControllerComponentHost::Component - def self.display_name - I18n.t('components.duplication.name') - end - def sidebar_items return [] unless can?(:duplicate_from, current_course) [ { - key: :duplication, + key: :admin_duplication, icon: :duplication, - title: t('layouts.duplication.title'), type: :admin, weight: 5, path: course_duplication_path(current_course) diff --git a/app/controllers/components/course/experience_points_component.rb b/app/controllers/components/course/experience_points_component.rb index bcadf81126c..50db16a8b14 100644 --- a/app/controllers/components/course/experience_points_component.rb +++ b/app/controllers/components/course/experience_points_component.rb @@ -6,18 +6,13 @@ def self.gamified? true end - def self.display_name - I18n.t('components.experience_points.name') - end - def sidebar_items return [] unless can_create_experience_points_record? [ { - key: :experience_points, + key: :sidebar_experience_points, icon: :experience, - title: t('course.experience_points.disbursement.sidebar_title'), type: :admin, weight: 4, path: course_experience_points_records_path(current_course) diff --git a/app/controllers/components/course/forums_component.rb b/app/controllers/components/course/forums_component.rb index 9aee44a2c93..df1d2d8156b 100644 --- a/app/controllers/components/course/forums_component.rb +++ b/app/controllers/components/course/forums_component.rb @@ -3,10 +3,6 @@ class Course::ForumsComponent < SimpleDelegator include Course::ControllerComponentHost::Component include Course::UnreadCountsConcern - def self.display_name - I18n.t('components.forums.name') - end - def sidebar_items main_sidebar_items + settings_sidebar_items end @@ -18,7 +14,7 @@ def main_sidebar_items { key: :forums, icon: :forum, - title: settings.title || t('course.forum.forums.sidebar_title'), + title: settings.title, weight: 10, path: course_forums_path(current_course), unread: unread_forum_topics_count @@ -29,7 +25,8 @@ def main_sidebar_items def settings_sidebar_items [ { - title: settings.title || t('course.forum.forums.sidebar_title'), + key: self.class.key, + title: settings.title, type: :settings, weight: 11, path: course_admin_forums_path(current_course) diff --git a/app/controllers/components/course/groups_component.rb b/app/controllers/components/course/groups_component.rb index ec5c42b0360..0e9b9026152 100644 --- a/app/controllers/components/course/groups_component.rb +++ b/app/controllers/components/course/groups_component.rb @@ -3,18 +3,13 @@ class Course::GroupsComponent < SimpleDelegator include Course::ControllerComponentHost::Component include Course::Group::GroupManagerConcern - def self.display_name - I18n.t('components.groups.name') - end - def sidebar_items return [] unless show_group_sidebar_item? [ { - key: :groups, + key: self.class.key, icon: :groups, - title: I18n.t('course.groups.sidebar_title'), type: :admin, weight: 7, path: group_category_url diff --git a/app/controllers/components/course/koditsu_platform_component.rb b/app/controllers/components/course/koditsu_platform_component.rb index 23d73a08a4c..898d9cf858a 100644 --- a/app/controllers/components/course/koditsu_platform_component.rb +++ b/app/controllers/components/course/koditsu_platform_component.rb @@ -2,10 +2,6 @@ class Course::KoditsuPlatformComponent < SimpleDelegator include Course::ControllerComponentHost::Component - def self.display_name - I18n.t('components.koditsu_platform.name') - end - def self.enabled_by_default? false end diff --git a/app/controllers/components/course/leaderboard_component.rb b/app/controllers/components/course/leaderboard_component.rb index ba618f1ee06..6bcdc89d054 100644 --- a/app/controllers/components/course/leaderboard_component.rb +++ b/app/controllers/components/course/leaderboard_component.rb @@ -2,10 +2,6 @@ class Course::LeaderboardComponent < SimpleDelegator include Course::ControllerComponentHost::Component - def self.display_name - I18n.t('components.leaderboard.name') - end - def self.gamified? true end @@ -21,7 +17,7 @@ def main_sidebar_items { key: :leaderboard, icon: :leaderboard, - title: settings.title || t('course.leaderboards.sidebar_title'), + title: settings.title, weight: 6, path: course_leaderboard_path(current_course) } @@ -31,7 +27,8 @@ def main_sidebar_items def settings_sidebar_items [ { - title: settings.title || t('course.leaderboards.title'), + key: self.class.key, + title: settings.title, type: :settings, weight: 8, path: course_admin_leaderboard_path(current_course) diff --git a/app/controllers/components/course/learning_map_component.rb b/app/controllers/components/course/learning_map_component.rb index d22e7661645..0764f564142 100644 --- a/app/controllers/components/course/learning_map_component.rb +++ b/app/controllers/components/course/learning_map_component.rb @@ -6,16 +6,11 @@ def self.enabled_by_default? false end - def self.display_name - I18n.t('components.learning_map.name') - end - def sidebar_items [ { key: :learning_map, icon: :map, - title: t('layouts.learning_map.title'), weight: 5, path: course_learning_map_path(current_course) } diff --git a/app/controllers/components/course/lesson_plan_component.rb b/app/controllers/components/course/lesson_plan_component.rb index 043e44e5979..089c9088002 100644 --- a/app/controllers/components/course/lesson_plan_component.rb +++ b/app/controllers/components/course/lesson_plan_component.rb @@ -2,10 +2,6 @@ class Course::LessonPlanComponent < SimpleDelegator include Course::ControllerComponentHost::Component - def self.display_name - I18n.t('components.lesson_plan.name') - end - def self.lesson_plan_item_actable_names [Course::LessonPlan::Event.name] end @@ -21,7 +17,6 @@ def main_sidebar_items { key: :lesson_plan, icon: :lessonPlan, - title: I18n.t('course.lesson_plan.items.sidebar_title'), weight: 8, path: course_lesson_plan_path(current_course) } @@ -31,7 +26,7 @@ def main_sidebar_items def settings_sidebar_items [ { - title: t('layouts.course_admin.lesson_plan.title'), + key: self.class.key, type: :settings, weight: 9, path: course_admin_lesson_plan_path(current_course) diff --git a/app/controllers/components/course/levels_component.rb b/app/controllers/components/course/levels_component.rb index d2d75d04100..b964b9d1834 100644 --- a/app/controllers/components/course/levels_component.rb +++ b/app/controllers/components/course/levels_component.rb @@ -2,10 +2,6 @@ class Course::LevelsComponent < SimpleDelegator include Course::ControllerComponentHost::Component - def self.display_name - I18n.t('components.levels.name') - end - def self.gamified? true end @@ -15,9 +11,8 @@ def sidebar_items [ { - key: :levels, + key: self.class.key, icon: :levels, - title: I18n.t('course.levels.sidebar_title'), type: :admin, weight: 6, path: course_levels_path(current_course) diff --git a/app/controllers/components/course/materials_component.rb b/app/controllers/components/course/materials_component.rb index 10e0f2722e9..75e14c188ca 100644 --- a/app/controllers/components/course/materials_component.rb +++ b/app/controllers/components/course/materials_component.rb @@ -2,10 +2,6 @@ class Course::MaterialsComponent < SimpleDelegator include Course::ControllerComponentHost::Component - def self.display_name - I18n.t('components.materials.name') - end - def sidebar_items main_sidebar_items + settings_sidebar_items end @@ -17,7 +13,7 @@ def main_sidebar_items { key: :materials, icon: :material, - title: settings.title || t('course.material.sidebar_title'), + title: settings.title, weight: 9, path: course_material_folders_path(current_course) } @@ -27,7 +23,8 @@ def main_sidebar_items def settings_sidebar_items [ { - title: settings.title || t('course.material.sidebar_title'), + key: self.class.key, + title: settings.title, type: :settings, weight: 10, path: course_admin_materials_path(current_course) diff --git a/app/controllers/components/course/monitoring_component.rb b/app/controllers/components/course/monitoring_component.rb index bfc03f6c97e..769f010762a 100644 --- a/app/controllers/components/course/monitoring_component.rb +++ b/app/controllers/components/course/monitoring_component.rb @@ -2,10 +2,6 @@ class Course::MonitoringComponent < SimpleDelegator include Course::ControllerComponentHost::Component - def self.display_name - I18n.t('components.monitoring.name') - end - def self.enabled_by_default? false end diff --git a/app/controllers/components/course/multiple_reference_timelines_component.rb b/app/controllers/components/course/multiple_reference_timelines_component.rb index bb5514ec2f9..f19a7e54e51 100644 --- a/app/controllers/components/course/multiple_reference_timelines_component.rb +++ b/app/controllers/components/course/multiple_reference_timelines_component.rb @@ -2,10 +2,6 @@ class Course::MultipleReferenceTimelinesComponent < SimpleDelegator include Course::ControllerComponentHost::Component - def self.display_name - I18n.t('components.multiple_reference_timelines.name') - end - def self.enabled_by_default? false end @@ -15,11 +11,10 @@ def sidebar_items [ { - key: :reference_timelines, + key: :admin_multiple_reference_timelines, icon: :timelines, type: :admin, weight: 9, - title: t('layouts.multiple_reference_timelines.timeline_designer'), path: course_reference_timelines_path(current_course) } ] diff --git a/app/controllers/components/course/plagiarism_component.rb b/app/controllers/components/course/plagiarism_component.rb index 0f9d8fab8c8..57a98f64fdc 100644 --- a/app/controllers/components/course/plagiarism_component.rb +++ b/app/controllers/components/course/plagiarism_component.rb @@ -2,10 +2,6 @@ class Course::PlagiarismComponent < SimpleDelegator include Course::ControllerComponentHost::Component - def self.display_name - I18n.t('components.plagiarism.name') - end - def self.enabled_by_default? false end @@ -15,9 +11,8 @@ def sidebar_items [ { - key: :plagiarism, + key: :admin_plagiarism, icon: :plagiarism, - title: t('course.plagiarism.header'), type: :admin, weight: 3, path: course_plagiarism_assessments_path(current_course) diff --git a/app/controllers/components/course/rag_wise_component.rb b/app/controllers/components/course/rag_wise_component.rb index caaf96c9d53..2457ff968ea 100644 --- a/app/controllers/components/course/rag_wise_component.rb +++ b/app/controllers/components/course/rag_wise_component.rb @@ -2,10 +2,6 @@ class Course::RagWiseComponent < SimpleDelegator include Course::ControllerComponentHost::Component - def self.display_name - I18n.t('components.rag_wise.name') - end - def self.enabled_by_default? false end @@ -19,7 +15,7 @@ def sidebar_items def settings_sidebar_items [ { - title: t('layouts.course_admin.rag_wise.title'), + key: self.class.key, type: :settings, weight: 6, path: course_admin_rag_wise_path(current_course) diff --git a/app/controllers/components/course/scholaistic_component.rb b/app/controllers/components/course/scholaistic_component.rb index e1fec99e0b1..5a6ac861495 100644 --- a/app/controllers/components/course/scholaistic_component.rb +++ b/app/controllers/components/course/scholaistic_component.rb @@ -3,10 +3,6 @@ class Course::ScholaisticComponent < SimpleDelegator include Course::ControllerComponentHost::Component include Course::Scholaistic::Concern - def self.display_name - I18n.t('components.scholaistic.name') - end - def self.enabled_by_default? false end @@ -28,7 +24,7 @@ def student_sidebar_items { key: :scholaistic_assessments, icon: :chatbot, - title: settings.assessments_title || I18n.t('course.scholaistic.assessments'), + title: settings.assessments_title, weight: 4, path: course_scholaistic_assessments_path(current_course) } @@ -57,10 +53,9 @@ def admin_sidebar_items [ { - key: :scholaistic_assistants, + key: :admin_scholaistic_assistants, type: :admin, icon: :chatbot, - title: I18n.t('components.scholaistic.manage_assistants'), weight: 9, path: course_scholaistic_assistants_path(current_course), exact: true @@ -72,7 +67,7 @@ def settings_sidebar_items [ { type: :settings, - title: I18n.t('components.scholaistic.name'), + key: self.class.key, weight: 5, path: course_admin_scholaistic_path(current_course) } diff --git a/app/controllers/components/course/settings_component.rb b/app/controllers/components/course/settings_component.rb index 49caf3c994d..1688e0259f7 100644 --- a/app/controllers/components/course/settings_component.rb +++ b/app/controllers/components/course/settings_component.rb @@ -7,10 +7,6 @@ def self.can_be_disabled_for_course? false end - def self.display_name - I18n.t('components.settings.name') - end - def sidebar_items admin_sidebar_items + settings_sidebar_items end @@ -22,9 +18,8 @@ def admin_sidebar_items [ { - key: :admin, + key: :admin_settings, icon: :settings, - title: t('layouts.course_admin.title'), type: :admin, weight: 100, path: course_admin_path(current_course) @@ -43,7 +38,7 @@ def settings_sidebar_items def settings_index_item { - title: t('layouts.course_admin.course_settings.title'), + key: :admin_settings_general, type: :settings, weight: 1, path: course_admin_path(current_course) @@ -52,7 +47,7 @@ def settings_index_item def settings_components_item { - title: t('layouts.course_admin.component_settings.title'), + key: :admin_settings_component_settings, type: :settings, weight: 2, path: course_admin_components_path(current_course) @@ -61,7 +56,7 @@ def settings_components_item def settings_sidebar_item { - title: t('layouts.course_admin.sidebar_settings.title'), + key: :admin_settings_sidebar_settings, type: :settings, weight: 3, path: course_admin_sidebar_path(current_course) @@ -70,7 +65,7 @@ def settings_sidebar_item def settings_notifications { - title: t('layouts.course_admin.notifications.title'), + key: :admin_settings_notifications, type: :settings, weight: 12, path: course_admin_notifications_path(current_course) diff --git a/app/controllers/components/course/statistics_component.rb b/app/controllers/components/course/statistics_component.rb index 874b3e310cf..80f0ae78897 100644 --- a/app/controllers/components/course/statistics_component.rb +++ b/app/controllers/components/course/statistics_component.rb @@ -2,18 +2,13 @@ class Course::StatisticsComponent < SimpleDelegator include Course::ControllerComponentHost::Component - def self.display_name - I18n.t('components.statistics.name') - end - def sidebar_items return [] unless can?(:read_statistics, current_course) [ { - key: :statistics, + key: self.class.key, icon: :statistics, - title: t('course.statistics.header'), type: :admin, weight: 3, path: course_statistics_students_path(current_course) diff --git a/app/controllers/components/course/stories_component.rb b/app/controllers/components/course/stories_component.rb index d231b4ac9db..e46044ad91c 100644 --- a/app/controllers/components/course/stories_component.rb +++ b/app/controllers/components/course/stories_component.rb @@ -2,10 +2,6 @@ class Course::StoriesComponent < SimpleDelegator include Course::ControllerComponentHost::Component - def self.display_name - I18n.t('components.stories.name') - end - def self.enabled_by_default? false end @@ -30,7 +26,7 @@ def student_sidebar_items { key: :learn, icon: :learn, - title: settings.title || I18n.t('course.stories.learn'), + title: settings.title, weight: 0, path: course_learn_path(current_course) } @@ -42,10 +38,9 @@ def staff_sidebar_items [ { - key: :mission_control, + key: :sidebar_stories_mission_control, icon: :mission_control, type: :admin, - title: I18n.t('course.stories.mission_control'), weight: 1, path: course_mission_control_path(current_course) } @@ -55,7 +50,7 @@ def staff_sidebar_items def settings_sidebar_items [ { - title: I18n.t('components.stories.name'), + key: self.class.key, type: :settings, weight: 5, path: course_admin_stories_path(current_course) diff --git a/app/controllers/components/course/survey_component.rb b/app/controllers/components/course/survey_component.rb index 1adcf2e71c0..04da2214595 100644 --- a/app/controllers/components/course/survey_component.rb +++ b/app/controllers/components/course/survey_component.rb @@ -2,10 +2,6 @@ class Course::SurveyComponent < SimpleDelegator include Course::ControllerComponentHost::Component - def self.display_name - I18n.t('components.surveys.name') - end - def self.lesson_plan_item_actable_names [Course::Survey.name] end @@ -15,7 +11,6 @@ def sidebar_items { key: :surveys, icon: :survey, - title: I18n.t('course.surveys.sidebar_title'), weight: 11, path: course_surveys_path(current_course) } diff --git a/app/controllers/components/course/users_component.rb b/app/controllers/components/course/users_component.rb index f0fc90addee..d619dee2966 100644 --- a/app/controllers/components/course/users_component.rb +++ b/app/controllers/components/course/users_component.rb @@ -7,9 +7,6 @@ def self.can_be_disabled_for_course? false end - def self.display_name - I18n.t('components.users.name') - end def sidebar_items main_sidebar_items + admin_sidebar_items @@ -22,7 +19,6 @@ def main_sidebar_items { key: :users, icon: :users, - title: t('course.users.sidebar_title'), weight: 7, path: course_users_path(current_course) } @@ -40,9 +36,8 @@ def admin_sidebar_items [ { - key: :manage_users, + key: :admin_users_manage_users, icon: :manageUsers, - title: t('layouts.course_users.title'), type: :admin, weight: 2, path: diff --git a/app/controllers/components/course/videos_component.rb b/app/controllers/components/course/videos_component.rb index f56675ed13b..3edd5477cfb 100644 --- a/app/controllers/components/course/videos_component.rb +++ b/app/controllers/components/course/videos_component.rb @@ -3,10 +3,6 @@ class Course::VideosComponent < SimpleDelegator include Course::ControllerComponentHost::Component include Course::UnreadCountsConcern - def self.display_name - I18n.t('components.video.name') - end - def self.lesson_plan_item_actable_names [Course::Video.name] end @@ -22,7 +18,7 @@ def main_sidebar_items { key: :videos, icon: :video, - title: settings.title || t('course.video.videos.sidebar_title'), + title: settings.title, weight: 12, path: course_videos_path(current_course, tab: current_course.default_video_tab), unread: unwatched_videos_count @@ -33,7 +29,8 @@ def main_sidebar_items def settings_sidebar_items [ { - title: settings.title || t('course.video.videos.sidebar_title'), + key: self.class.key, + title: settings.title, type: :settings, weight: 13, path: course_admin_videos_path(current_course) diff --git a/app/controllers/course/assessment/submission/submissions_controller.rb b/app/controllers/course/assessment/submission/submissions_controller.rb index 166bcf86c42..f8c99772e4b 100644 --- a/app/controllers/course/assessment/submission/submissions_controller.rb +++ b/app/controllers/course/assessment/submission/submissions_controller.rb @@ -250,7 +250,7 @@ def download_statistics submission_ids = @assessment.submissions.by_users(course_user_ids).pluck(:id) if submission_ids.empty? return render json: { - error: I18n.t('course.assessment.submission.submissions.download_statistics.no_submission_statistics') + error: I18n.t('errors.course.assessment.submission.download_statistics.no_submissions') }, status: :bad_request end diff --git a/app/controllers/course/controller.rb b/app/controllers/course/controller.rb index a6f7eebe4d3..670d0e81f86 100644 --- a/app/controllers/course/controller.rb +++ b/app/controllers/course/controller.rb @@ -14,8 +14,8 @@ def sidebar_items(type: nil) items = sidebar_items_of_type(type) items.sort do |a, b| - weight_a = weights_hash[a[:key]] || a[:weight] - weight_b = weights_hash[b[:key]] || b[:weight] + weight_a = weights_hash[a[:type]][a[:key]] || a[:weight] + weight_b = weights_hash[b[:type]][b[:key]] || b[:weight] (weight_a <=> weight_b).nonzero? || a[:key].to_s <=> b[:key].to_s end end @@ -66,14 +66,20 @@ def sidebar_items_of_type(type) type ? sidebar_items.select { |item| item.fetch(:type, :normal) == type } : sidebar_items end - # Computes a hash containing the key of each sidebar item, and its defined weight as the value. + # Computes a hash to store the weights of sidebar items, including manually overridden weights. # - # @return [Hash{Symbol=>Integer}] - def sidebar_items_weights + # @return [Hash{Symbol=>Hash{Symbol=>Integer}}] A nested hash mapping item types and item keys to + # the associated sidebar item's weight. + + def sidebar_items_weights(type: nil) sidebar_settings = Course::Settings::Sidebar.new(current_course.settings, current_component_host.sidebar_items) - defined_sidebar_settings = sidebar_settings.sidebar_items.select { |item| item.id.present? } - defined_sidebar_settings.to_h { |item| [item.id, item.weight] } + defined_sidebar_settings = sidebar_settings.sidebar_items.select do |item| + item.id.present? && (type.nil? || item.type == type) + end + defined_sidebar_settings.group_by(&:type).transform_values do |items| + items.to_h { |item| [item.id, item.weight] } + end end def set_last_active_at diff --git a/app/controllers/course/lesson_plan/items_controller.rb b/app/controllers/course/lesson_plan/items_controller.rb index 95904a0c5d5..4a5e60b574e 100644 --- a/app/controllers/course/lesson_plan/items_controller.rb +++ b/app/controllers/course/lesson_plan/items_controller.rb @@ -74,7 +74,7 @@ def assessment_tabs_visibility_hash # @return [Hash{Array => Boolean}] def component_visibility_hash @component_visibility_hash = component_item_settings.to_h do |setting| - [[setting[:component_title]], setting[:visible]] + [[setting[:component]], setting[:visible]] end end diff --git a/app/controllers/course/material/controller.rb b/app/controllers/course/material/controller.rb index 638d4aad7c1..41cfbd5fea7 100644 --- a/app/controllers/course/material/controller.rb +++ b/app/controllers/course/material/controller.rb @@ -46,6 +46,6 @@ def component helper_method :component def root_folder_name - component.settings.title || t('course.material.sidebar_title') + component.settings.title || current_course.title end end diff --git a/app/controllers/course/survey/responses_controller.rb b/app/controllers/course/survey/responses_controller.rb index 02f85de2f34..bbc0fbda3f6 100644 --- a/app/controllers/course/survey/responses_controller.rb +++ b/app/controllers/course/survey/responses_controller.rb @@ -14,7 +14,7 @@ def create @response.save! render_response_json else - render json: { error: t('course.survey.responses.no_course_user') }, status: :bad_request + render json: { error: t('errors.course.survey.responses.no_course_user') }, status: :bad_request end rescue ActiveRecord::RecordInvalid => e handle_create_error(e) diff --git a/app/controllers/course/user_invitations_controller.rb b/app/controllers/course/user_invitations_controller.rb index 4c889c1b0f6..5cc79d1a66a 100644 --- a/app/controllers/course/user_invitations_controller.rb +++ b/app/controllers/course/user_invitations_controller.rb @@ -159,7 +159,7 @@ def aggregate_errors def invalid_course_user_errors invalid_course_users.map do |course_user| user = self.class.helpers.display_course_user(course_user) - t('course.user_invitations.errors.duplicate_user', user: user) + t('errors.course.user_invitations.duplicate_user', user: user) end end @@ -176,7 +176,7 @@ def invalid_course_users def invalid_invitation_email_errors invalid_invitations.map do |invitation| message = invitation.errors.full_messages.to_sentence - t('course.user_invitations.errors.invalid_email', email: invitation.email, message: message) + t('errors.course.user_invitations.invalid_email', email: invitation.email, message: message) end end diff --git a/app/controllers/course/user_registrations_controller.rb b/app/controllers/course/user_registrations_controller.rb index 3bd6b52a8e5..c460ff6f6ca 100644 --- a/app/controllers/course/user_registrations_controller.rb +++ b/app/controllers/course/user_registrations_controller.rb @@ -23,8 +23,8 @@ def registration_params def ensure_unregistered_user return unless current_course.course_users.exists?(user: current_user) - role = t("course.users.role.#{current_course_user.role}") - message = t('course.users.new.already_registered', role: role) + role = t("errors.course.users.role.#{current_course_user.role}") + message = t('errors.course.users.already_registered', role: role) render json: { errors: message }, status: :conflict end diff --git a/app/controllers/user/emails_controller.rb b/app/controllers/user/emails_controller.rb index e2a125bded2..c476f1f12ee 100644 --- a/app/controllers/user/emails_controller.rb +++ b/app/controllers/user/emails_controller.rb @@ -33,7 +33,7 @@ def set_primary def send_confirmation if @email.confirmed? - render json: { errors: t('.already_confirmed', email: @email.email) }, status: :bad_request + render json: { errors: t('errors.user.emails.already_confirmed', email: @email.email) }, status: :bad_request else @email.send_confirmation_instructions head :ok diff --git a/app/controllers/user/registrations_controller.rb b/app/controllers/user/registrations_controller.rb index 9e5b2722bb4..d256d94bf8e 100644 --- a/app/controllers/user/registrations_controller.rb +++ b/app/controllers/user/registrations_controller.rb @@ -7,7 +7,11 @@ class User::RegistrationsController < Devise::RegistrationsController # GET /resource/sign_up def new if @invitation&.confirmed? - message = @invitation.confirmer ? t('.used_with_email', email: @invitation.confirmer.email) : t('.used') + message = if @invitation.confirmer + t('errors.user.registrations.used_with_email', email: @invitation.confirmer.email) + else + t('errors.user.registrations.used') + end render json: { message: message }, status: :conflict and return elsif @invitation.is_a?(Course::UserInvitation) course = @invitation.course @@ -34,7 +38,7 @@ def new def create unless verify_recaptcha build_resource(sign_up_params) - render json: { errors: { recaptcha: t('user.registrations.create.verify_recaptcha_alert') } }, + render json: { errors: { recaptcha: t('errors.user.registrations.verify_recaptcha_alert') } }, status: :unprocessable_entity return end diff --git a/app/helpers/application_html_formatters_helper.rb b/app/helpers/application_html_formatters_helper.rb index 80c7110c978..9545e766aa9 100644 --- a/app/helpers/application_html_formatters_helper.rb +++ b/app/helpers/application_html_formatters_helper.rb @@ -41,7 +41,7 @@ def sanitize_ckeditor_rich_text(text) def format_code_block(code, language = nil, start_line = 1) if code_size_exceeds_limit?(code) content_tag(:div, class: 'alert alert-warning') do - I18n.t('layouts.code_formatter.size_too_big') + I18n.t('errors.code_formatter.size_too_big') end else sanitize_and_format_code(code, language, start_line) diff --git a/app/helpers/application_jobs_helper.rb b/app/helpers/application_jobs_helper.rb index c8c9a736b67..4841d89f7ad 100644 --- a/app/helpers/application_jobs_helper.rb +++ b/app/helpers/application_jobs_helper.rb @@ -6,13 +6,13 @@ def job_error_message(error) case error['class'] when Docker::Error::ConflictError.name - I18n.t('course.assessment.answer.programming_auto_grading.job.failure.time_limit_breached') + I18n.t('errors.course.assessment.answer.programming_auto_grading.job.failure.time_limit_breached') when Timeout::Error.name - I18n.t('course.assessment.answer.programming_auto_grading.job.failure.timeout_error') + I18n.t('errors.course.assessment.answer.programming_auto_grading.job.failure.timeout_error') when Docker::Error::TimeoutError - I18n.t('course.assessment.answer.programming_auto_grading.job.failure.container_unreachable') + I18n.t('errors.course.assessment.answer.programming_auto_grading.job.failure.container_unreachable') else - I18n.t('course.assessment.answer.programming_auto_grading.job.failure.generic_error', error: error['message']) + I18n.t('errors.course.assessment.answer.programming_auto_grading.job.failure.generic_error', error: error['message']) end end end diff --git a/app/helpers/application_mailer_helper.rb b/app/helpers/application_mailer_helper.rb index 3eb6c7c90c1..882ac261284 100644 --- a/app/helpers/application_mailer_helper.rb +++ b/app/helpers/application_mailer_helper.rb @@ -6,6 +6,6 @@ module ApplicationMailerHelper # @param [string] text The text to display # @param [string] url The URL to link to def plain_link_to(text, url) - t('common.plain_text_link', text: text, url: url) + t('common.mailers.plain_text_link', text: text, url: url) end end diff --git a/app/models/concerns/component_settings_concern.rb b/app/models/concerns/component_settings_concern.rb index a37d22211ba..04c00759687 100644 --- a/app/models/concerns/component_settings_concern.rb +++ b/app/models/concerns/component_settings_concern.rb @@ -4,7 +4,7 @@ module ComponentSettingsConcern # This is used when generating checkboxes for each of the components def disableable_component_collection - @settable.disableable_components.map { |c| [c.display_name, c.key.to_s] }.sort + @settable.disableable_components.map { |c| c.key.to_s } end # Returns the ids of enabled components that can be disabled diff --git a/app/models/course/assessment/live_feedback/thread.rb b/app/models/course/assessment/live_feedback/thread.rb index 2daa3cdb4fa..1666c3466ac 100644 --- a/app/models/course/assessment/live_feedback/thread.rb +++ b/app/models/course/assessment/live_feedback/thread.rb @@ -22,7 +22,7 @@ def validate_at_most_one_active_thread_per_submission_question return if active_thread_count <= 1 - errors.add(:base, I18n.t('course.assessment.live_feedback.thread.only_one_active_thread')) + errors.add(:base, I18n.t('errors.course.assessment.live_feedback.thread.only_one_active_thread')) end def sent_user_messages(user_id) diff --git a/app/models/course/settings/sidebar_item.rb b/app/models/course/settings/sidebar_item.rb index 9826d092016..687d04254ba 100644 --- a/app/models/course/settings/sidebar_item.rb +++ b/app/models/course/settings/sidebar_item.rb @@ -22,6 +22,11 @@ def title @sidebar_item[:title] end + # @return [Symbol | nil] The type of the item. + def type + @sidebar_item[:type] + end + # @return [Integer] The weight of the item. def weight result = @settings.settings(id).weight if id diff --git a/app/models/course/settings/survey_component.rb b/app/models/course/settings/survey_component.rb index e24fbbf5b5d..8eacc7a69a6 100644 --- a/app/models/course/settings/survey_component.rb +++ b/app/models/course/settings/survey_component.rb @@ -3,7 +3,7 @@ class Course::Settings::SurveyComponent < Course::Settings::Component include Course::Settings::LessonPlanSettingsConcern def lesson_plan_item_settings - super.merge(component_title: I18n.t('components.surveys.name')) + super end def showable_in_lesson_plan? diff --git a/app/models/course/settings/videos_component.rb b/app/models/course/settings/videos_component.rb index 633688da464..e73799dcfc4 100644 --- a/app/models/course/settings/videos_component.rb +++ b/app/models/course/settings/videos_component.rb @@ -8,7 +8,7 @@ def self.component_class end def lesson_plan_item_settings - super.merge(component_title: I18n.t('course.video.videos.index.header')) + super.merge(component_title: title) end def showable_in_lesson_plan? diff --git a/app/models/user/email.rb b/app/models/user/email.rb index 976699266f3..855ee3062aa 100644 --- a/app/models/user/email.rb +++ b/app/models/user/email.rb @@ -44,7 +44,7 @@ def set_new_user_primary_email return if user.set_next_email_as_primary - errors.add(:base, I18n.t('user.emails.set_primary.no_confirmed_emails')) + errors.add(:base, I18n.t('errors.user.emails.no_confirmed_emails')) raise ActiveRecord::Rollback end diff --git a/app/services/course/assessment/answer/programming_codaveri_auto_grading_service.rb b/app/services/course/assessment/answer/programming_codaveri_auto_grading_service.rb index a418b7e65de..4e2f6e99047 100644 --- a/app/services/course/assessment/answer/programming_codaveri_auto_grading_service.rb +++ b/app/services/course/assessment/answer/programming_codaveri_auto_grading_service.rb @@ -151,7 +151,7 @@ def build_test_case_records_from_test_results(question, auto_grading, evaluation # @return [Array] def build_failed_test_case_records(question, auto_grading) messages = { - error: I18n.t('course.assessment.answer.programming_auto_grading.grade.evaluation_failed_syntax') + error: I18n.t('errors.course.assessment.answer.programming_auto_grading.grade.evaluation_failed_syntax') } remaining_test_cases = question.test_cases - auto_grading.test_results.map(&:test_case) remaining_test_cases.map do |test_case| diff --git a/app/services/course/assessment/authentication_service.rb b/app/services/course/assessment/authentication_service.rb index fbee1e625b8..e4936f6e1e1 100644 --- a/app/services/course/assessment/authentication_service.rb +++ b/app/services/course/assessment/authentication_service.rb @@ -22,7 +22,7 @@ def authenticate(password_input) set_session_token! true else - @assessment.errors.add(:password, I18n.t('helpers.password.wrong_password')) + @assessment.errors.add(:password, I18n.t('errors.authentication.wrong_password')) false end end diff --git a/app/services/course/assessment/programming_codaveri_evaluation_service.rb b/app/services/course/assessment/programming_codaveri_evaluation_service.rb index 71b29f5d1e5..7a185ef7a40 100644 --- a/app/services/course/assessment/programming_codaveri_evaluation_service.rb +++ b/app/services/course/assessment/programming_codaveri_evaluation_service.rb @@ -220,13 +220,13 @@ def process_evaluation_results def status_error_messages { CODAVERI_STATUS_RUNTIME_ERROR => - I18n.t('course.assessment.answer.programming_auto_grading.grade.evaluation_failed_syntax'), + I18n.t('errors.course.assessment.answer.programming_auto_grading.grade.evaluation_failed_syntax'), CODAVERI_STATUS_TIMEOUT => - I18n.t('course.assessment.answer.programming_auto_grading.grade.time_limit_error'), + I18n.t('errors.course.assessment.answer.programming_auto_grading.grade.time_limit_error'), CODAVERI_STATUS_STDOUT_TOO_LONG => - I18n.t('course.assessment.answer.programming_auto_grading.grade.stdout_too_long'), + I18n.t('errors.course.assessment.answer.programming_auto_grading.grade.stdout_too_long'), CODAVERI_STATUS_STDERR_TOO_LONG => - I18n.t('course.assessment.answer.programming_auto_grading.grade.stderr_too_long') + I18n.t('errors.course.assessment.answer.programming_auto_grading.grade.stderr_too_long') } end @@ -240,13 +240,13 @@ def build_codaveri_error_message(result) if [CODAVERI_STATUS_EXIT_SIGNAL, CODAVERI_STATUS_INTERNAL_ERROR].include?(compile_status) compile_message = result.dig('compile', 'message') - return I18n.t('course.assessment.answer.programming_auto_grading.job.failure.generic_error', + return I18n.t('errors.course.assessment.answer.programming_auto_grading.job.failure.generic_error', error: "Codaveri transaction id: #{@codaveri_evaluation_transaction_id}, #{compile_message}") end if [CODAVERI_STATUS_EXIT_SIGNAL, CODAVERI_STATUS_INTERNAL_ERROR].include?(run_status) run_message = result.dig('run', 'message') - return I18n.t('course.assessment.answer.programming_auto_grading.job.failure.generic_error', + return I18n.t('errors.course.assessment.answer.programming_auto_grading.job.failure.generic_error', error: "Codaveri transaction id: #{@codaveri_evaluation_transaction_id}, #{run_message}") end diff --git a/app/services/course/assessment/programming_evaluation_service.rb b/app/services/course/assessment/programming_evaluation_service.rb index 06af2705f73..bb1f9b179ed 100644 --- a/app/services/course/assessment/programming_evaluation_service.rb +++ b/app/services/course/assessment/programming_evaluation_service.rb @@ -50,7 +50,7 @@ class Error < StandardError attr_reader :stdout, :stderr def initialize(message, stdout = nil, stderr = nil) - message ||= I18n.t('course.assessment.answer.programming_auto_grading.grade.evaluation_failed_syntax') + message ||= I18n.t('errors.course.assessment.answer.programming_auto_grading.grade.evaluation_failed_syntax') super(message) @stdout = stdout @stderr = stderr @@ -71,14 +71,14 @@ def to_h # Represents a Time or Docker Memory Limit Exceeded error while evaluating the package. class TimeOrMemoryLimitExceededError < Error def initialize(message, stdout = nil, stderr = nil) - message ||= I18n.t('course.assessment.answer.programming_auto_grading.grade.evaluation_failed_time_or_memory') + message ||= I18n.t('errors.course.assessment.answer.programming_auto_grading.grade.evaluation_failed_time_or_memory') super(message, stdout, stderr) end end class TimeLimitExceededError < Error def initialize(message, stdout = nil, stderr = nil) - message ||= I18n.t('course.assessment.answer.programming_auto_grading.grade.time_limit_error') + message ||= I18n.t('errors.course.assessment.answer.programming_auto_grading.grade.time_limit_error') super(message, stdout, stderr) end end @@ -86,7 +86,7 @@ def initialize(message, stdout = nil, stderr = nil) # Represents a Time Limit Exceeded error while evaluating the package. class MemoryLimitExceededError < Error def initialize(message, stdout = nil, stderr = nil) - message ||= I18n.t('course.assessment.answer.programming_auto_grading.grade.memory_limit_error') + message ||= I18n.t('errors.course.assessment.answer.programming_auto_grading.grade.memory_limit_error') super(message, stdout, stderr) end end diff --git a/app/services/course/assessment/session_authentication_service.rb b/app/services/course/assessment/session_authentication_service.rb index 14066bdf285..42db63ec5ce 100644 --- a/app/services/course/assessment/session_authentication_service.rb +++ b/app/services/course/assessment/session_authentication_service.rb @@ -24,7 +24,7 @@ def authenticate(password) create_new_token if @submission true else - @assessment.errors.add(:password, I18n.t('helpers.password.wrong_password')) + @assessment.errors.add(:password, I18n.t('errors.authentication.wrong_password')) false end end diff --git a/app/services/course/assessment/submission/csv_download_service.rb b/app/services/course/assessment/submission/csv_download_service.rb index aed5ace04f3..406b40725c6 100644 --- a/app/services/course/assessment/submission/csv_download_service.rb +++ b/app/services/course/assessment/submission/csv_download_service.rb @@ -62,8 +62,8 @@ def cleanup_entries def submissions_csv_header(csv) # Question Title - question_title = [I18n.t('course.assessment.submission.submissions.csv_download_service.note'), '', '', '', - I18n.t('course.assessment.submission.submissions.csv_download_service.question_title'), + question_title = [I18n.t('csv.assessment_submissions.note'), '', '', '', + I18n.t('csv.assessment_submissions.headers.question_title'), *@question_assessments.map(&:display_title)] # Remove note if there is no N/A answer question_title[0] = '' if @questions_downloadable.values.all? @@ -71,15 +71,15 @@ def submissions_csv_header(csv) # Question Type csv << ['', '', '', '', - I18n.t('course.assessment.submission.submissions.csv_download_service.question_type'), + I18n.t('csv.assessment_submissions.headers.question_type'), *@question_assessments.map { |x| x.question.question_type_readable }] # Column Header - csv << [I18n.t('course.assessment.submission.submissions.csv_download_service.name'), - I18n.t('course.assessment.submission.submissions.csv_download_service.email'), - I18n.t('course.assessment.submission.submissions.csv_download_service.role'), - I18n.t('course.assessment.submission.submissions.csv_download_service.user_type'), - I18n.t('course.assessment.submission.submissions.csv_download_service.status')] + csv << [I18n.t('csv.assessment_submissions.headers.name'), + I18n.t('csv.assessment_submissions.headers.email'), + I18n.t('csv.assessment_submissions.headers.role'), + I18n.t('csv.assessment_submissions.headers.user_type'), + I18n.t('csv.assessment_submissions.headers.status')] end def submissions_csv_row(csv, submission, course_user) # rubocop:disable Metrics/AbcSize @@ -87,9 +87,9 @@ def submissions_csv_row(csv, submission, course_user) # rubocop:disable Metrics/ course_user.user.email, course_user.role, if course_user.phantom? - I18n.t('course.assessment.submission.submissions.csv_download_service.phantom') + I18n.t('csv.assessment_submissions.values.phantom') else - I18n.t('course.assessment.submission.submissions.csv_download_service.normal') + I18n.t('csv.assessment_submissions.values.normal') end] if submission @@ -100,7 +100,7 @@ def submissions_csv_row(csv, submission, course_user) # rubocop:disable Metrics/ end row_array.concat([submission.workflow_state, *answer_row]) else - row_array.append(I18n.t('course.assessment.submission.submissions.csv_download_service.unstarted')) + row_array.append(I18n.t('csv.assessment_submissions.values.unstarted')) end csv << row_array @@ -108,7 +108,7 @@ def submissions_csv_row(csv, submission, course_user) # rubocop:disable Metrics/ def generate_answer_row(question, answer) return 'N/A' unless @questions_downloadable[question.id] - return I18n.t('course.assessment.submission.submissions.csv_download_service.no_answer') if answer.nil? + return I18n.t('csv.assessment_submissions.values.no_answer') if answer.nil? answer.specific.csv_download end diff --git a/app/services/course/assessment/submission/statistics_download_service.rb b/app/services/course/assessment/submission/statistics_download_service.rb index a3c0a62e522..2cff8ca390c 100644 --- a/app/services/course/assessment/submission/statistics_download_service.rb +++ b/app/services/course/assessment/submission/statistics_download_service.rb @@ -48,19 +48,19 @@ def cleanup_entries end def download_statistics_header(csv) - csv << [I18n.t('course.assessment.submission.submissions.statistics_download_service.name'), - I18n.t('course.assessment.submission.submissions.statistics_download_service.phantom'), - I18n.t('course.assessment.submission.submissions.statistics_download_service.status'), - I18n.t('course.assessment.submission.submissions.statistics_download_service.start_date_time'), - I18n.t('course.assessment.submission.submissions.statistics_download_service.submitted_date_time'), - I18n.t('course.assessment.submission.submissions.statistics_download_service.time_taken'), - I18n.t('course.assessment.submission.submissions.statistics_download_service.graded_date_time'), - I18n.t('course.assessment.submission.submissions.statistics_download_service.grading_time'), - I18n.t('course.assessment.submission.submissions.statistics_download_service.grader'), - I18n.t('course.assessment.submission.submissions.statistics_download_service.publisher'), - I18n.t('course.assessment.submission.submissions.statistics_download_service.exp_points'), - I18n.t('course.assessment.submission.submissions.statistics_download_service.grade'), - I18n.t('course.assessment.submission.submissions.statistics_download_service.max_grade'), + csv << [I18n.t('csv.assessment_statistics.headers.name'), + I18n.t('csv.assessment_statistics.headers.phantom'), + I18n.t('csv.assessment_statistics.headers.status'), + I18n.t('csv.assessment_statistics.headers.start_date_time'), + I18n.t('csv.assessment_statistics.headers.submitted_date_time'), + I18n.t('csv.assessment_statistics.headers.time_taken'), + I18n.t('csv.assessment_statistics.headers.graded_date_time'), + I18n.t('csv.assessment_statistics.headers.grading_time'), + I18n.t('csv.assessment_statistics.headers.grader'), + I18n.t('csv.assessment_statistics.headers.publisher'), + I18n.t('csv.assessment_statistics.headers.exp_points'), + I18n.t('csv.assessment_statistics.headers.grade'), + I18n.t('csv.assessment_statistics.headers.max_grade'), *csv_header_question_grade] end @@ -90,7 +90,7 @@ def download_statistics(csv, submission, assessment) end def csv_empty - I18n.t('course.assessment.submission.submissions.statistics_download_service.csv_empty') + I18n.t('csv.assessment_statistics.values.empty') end def csv_time_taken(submission) diff --git a/app/services/course/experience_points_download_service.rb b/app/services/course/experience_points_download_service.rb index 74f6e269e93..12aac647e46 100644 --- a/app/services/course/experience_points_download_service.rb +++ b/app/services/course/experience_points_download_service.rb @@ -50,11 +50,11 @@ def load_exp_record_updater_service(exp_points_records) end def download_exp_points_header(csv) - csv << [I18n.t('course.experience_points_records.download.updated_at'), - I18n.t('course.experience_points_records.download.name'), - I18n.t('course.experience_points_records.download.updater'), - I18n.t('course.experience_points_records.download.reason'), - I18n.t('course.experience_points_records.download.exp_points')] + csv << [I18n.t('csv.experience_points.headers.updated_at'), + I18n.t('csv.experience_points.headers.name'), + I18n.t('csv.experience_points.headers.updater'), + I18n.t('csv.experience_points.headers.reason'), + I18n.t('csv.experience_points.headers.exp_points')] end def download_exp_points(csv, record) diff --git a/app/services/course/statistics/assessments_score_summary_download_service.rb b/app/services/course/statistics/assessments_score_summary_download_service.rb index a15db180413..c42f4812517 100644 --- a/app/services/course/statistics/assessments_score_summary_download_service.rb +++ b/app/services/course/statistics/assessments_score_summary_download_service.rb @@ -63,8 +63,12 @@ def assessments def download_score_summary(csv) # header - csv << [I18n.t('course.statistics.name'), I18n.t('course.statistics.email'), I18n.t('course.statistics.type'), - *@assessments.map(&:title)] + csv << [ + I18n.t('csv.score_summary.headers.name'), + I18n.t('csv.score_summary.headers.email'), + I18n.t('csv.score_summary.headers.type'), + *@assessments.map(&:title) + ] # content @all_students.each do |student| diff --git a/app/services/course/survey/survey_download_service.rb b/app/services/course/survey/survey_download_service.rb index a3f8c83d6b9..ea9bb005623 100644 --- a/app/services/course/survey/survey_download_service.rb +++ b/app/services/course/survey/survey_download_service.rb @@ -53,11 +53,11 @@ def generate_csv def generate_header(questions) [ - I18n.t('course.surveys.survey_download_service.created_at'), - I18n.t('course.surveys.survey_download_service.updated_at'), - I18n.t('course.surveys.survey_download_service.course_user_id'), - I18n.t('course.surveys.survey_download_service.name'), - I18n.t('course.surveys.survey_download_service.role') + I18n.t('csv.survey.headers.created_at'), + I18n.t('csv.survey.headers.updated_at'), + I18n.t('csv.survey.headers.course_user_id'), + I18n.t('csv.survey.headers.name'), + I18n.t('csv.survey.headers.role') ] + questions.map { |q| format_rich_text_for_csv(q.description) } end @@ -88,7 +88,7 @@ def generate_value(answer) return generate_mcq_mrq_value(answer) if question.multiple_choice? || question.multiple_response? - I18n.t('course.surveys.survey_download_service.unknown_question_type') + I18n.t('csv.survey.values.unknown_question_type') end def generate_mcq_mrq_value(answer) diff --git a/app/services/course/user_registration_service.rb b/app/services/course/user_registration_service.rb index 8e2bd17b23a..c397c19f025 100644 --- a/app/services/course/user_registration_service.rb +++ b/app/services/course/user_registration_service.rb @@ -119,7 +119,7 @@ def claim_course_invitation_code(registration) # parameters. # @return [nil] def invalid_code(registration) - registration.errors.add(:code, I18n.t('course.user_registrations.create.invalid_code')) + registration.errors.add(:code, I18n.t('errors.course.user_registrations.invalid_code')) nil end @@ -127,9 +127,9 @@ def code_taken(registration, invitation) confirmed_by = invitation.confirmer if confirmed_by registration.errors. - add(:code, I18n.t('course.user_registrations.create.code_taken_with_email', email: confirmed_by.email)) + add(:code, I18n.t('errors.course.user_registrations.code_taken_with_email', email: confirmed_by.email)) else - registration.errors.add(:code, I18n.t('course.user_registrations.create.code_taken')) + registration.errors.add(:code, I18n.t('errors.course.user_registrations.code_taken')) end nil end diff --git a/app/views/course/admin/component_settings/edit.json.jbuilder b/app/views/course/admin/component_settings/edit.json.jbuilder index 1bd583cad0e..0fc3b15905c 100644 --- a/app/views/course/admin/component_settings/edit.json.jbuilder +++ b/app/views/course/admin/component_settings/edit.json.jbuilder @@ -2,9 +2,7 @@ components = @settings.disableable_component_collection enabled_components = @settings.enabled_component_ids.to_set -json.array! components do |component| - id = component[1] +json.array! components do |id| json.id id - json.displayName component[0] json.enabled enabled_components.include?(id) end diff --git a/app/views/course/admin/sidebar_settings/show.json.jbuilder b/app/views/course/admin/sidebar_settings/show.json.jbuilder index b135268d61c..e676a72fa47 100644 --- a/app/views/course/admin/sidebar_settings/show.json.jbuilder +++ b/app/views/course/admin/sidebar_settings/show.json.jbuilder @@ -1,6 +1,7 @@ # frozen_string_literal: true json.array! controller.sidebar_items(type: :settings) do |option| json.title option[:title] + json.id option[:key] json.weight option[:weight] json.path option[:path] end diff --git a/app/views/course/mailer/course_duplicated_email.html.slim b/app/views/course/mailer/course_duplicated_email.html.slim index b53b6b057c4..cf02d7bf1c8 100644 --- a/app/views/course/mailer/course_duplicated_email.html.slim +++ b/app/views/course/mailer/course_duplicated_email.html.slim @@ -1,3 +1,3 @@ = simple_format(t('.message', original_course: @original_course.title, new_course: @new_course.title, - click_here: plain_link_to(t('.click_here'), course_url(@new_course, host: @new_course.instance.host)))) + click_here: plain_link_to(t('common.mailers.click_here'), course_url(@new_course, host: @new_course.instance.host)))) diff --git a/app/views/course/mailer/course_duplicated_email.text.erb b/app/views/course/mailer/course_duplicated_email.text.erb index b2378511c83..a47a765200e 100644 --- a/app/views/course/mailer/course_duplicated_email.text.erb +++ b/app/views/course/mailer/course_duplicated_email.text.erb @@ -1,3 +1,3 @@ <%= t('.message', original_course: @original_course.title, new_course: @new_course.title, - click_here: plain_link_to(t('.click_here'), course_url(@new_course, host: @new_course.instance.host))) %> + click_here: plain_link_to(t('common.mailers.click_here'), course_url(@new_course, host: @new_course.instance.host))) %> diff --git a/app/views/course/mailer/user_added_email.html.slim b/app/views/course/mailer/user_added_email.html.slim index a267bce95c1..4b6772e0d28 100644 --- a/app/views/course/mailer/user_added_email.html.slim +++ b/app/views/course/mailer/user_added_email.html.slim @@ -1,6 +1,6 @@ = simple_format(\ t('.message', course: link_to(@course.title, course_url(@course, host: @course.instance.host)), - coursemology: link_to(t('layout.coursemology'), @course.instance.host), + coursemology: link_to(t('common.mailers.coursemology'), @course.instance.host), email: @recipient.email\ )\ ) diff --git a/app/views/course/mailer/user_added_email.text.erb b/app/views/course/mailer/user_added_email.text.erb index 7bf1685b82b..9807247e9c5 100644 --- a/app/views/course/mailer/user_added_email.text.erb +++ b/app/views/course/mailer/user_added_email.text.erb @@ -1,3 +1,3 @@ <%= t('.message', course: plain_link_to(@course.title, course_url(@course, host: @course.instance.host)), - coursemology: plain_link_to(t('layout.coursemology'), @course.instance.host), + coursemology: plain_link_to(t('common.mailers.coursemology'), @course.instance.host), email: @recipient.email) %> diff --git a/app/views/course/mailer/user_enrol_requested_email.html.slim b/app/views/course/mailer/user_enrol_requested_email.html.slim index 25c8bde2995..1022c3ba4ec 100644 --- a/app/views/course/mailer/user_enrol_requested_email.html.slim +++ b/app/views/course/mailer/user_enrol_requested_email.html.slim @@ -1,4 +1,4 @@ -- course_requests_page = link_to(t('course.enrol_requests.index.header'), course_enrol_requests_url(@course, host: @course.instance.host)) +- course_requests_page = link_to(t('.user_requests_header'), course_enrol_requests_url(@course, host: @course.instance.host)) = simple_format(t('.message', user: link_to(@enrol_request.user.name, format('mailto: %s', @enrol_request.user.email)), course: link_to(@course.title, course_url(@course, host: @course.instance.host)), course_requests_page: course_requests_page)) diff --git a/app/views/course/mailer/user_enrol_requested_email.text.erb b/app/views/course/mailer/user_enrol_requested_email.text.erb index 1e3e45e448d..27469674318 100644 --- a/app/views/course/mailer/user_enrol_requested_email.text.erb +++ b/app/views/course/mailer/user_enrol_requested_email.text.erb @@ -1,4 +1,4 @@ -<% course_requests_page = plain_link_to(t('course.enrol_requests.index.header'), course_enrol_requests_url(@course, host: @course.instance.host)) %> +<% course_requests_page = plain_link_to(t('.user_requests_header'), course_enrol_requests_url(@course, host: @course.instance.host)) %> <%= t('.message', user: plain_link_to(@enrol_request.user.name, @enrol_request.user.email), course: plain_link_to(@course.title, course_url(@course, host: @course.instance.host)), course_requests_page: course_requests_page) %> diff --git a/app/views/course/mailer/user_invitation_email.html.slim b/app/views/course/mailer/user_invitation_email.html.slim index 3852c78f4b2..1aad935590e 100644 --- a/app/views/course/mailer/user_invitation_email.html.slim +++ b/app/views/course/mailer/user_invitation_email.html.slim @@ -1,7 +1,7 @@ = simple_format(t('.message', course: link_to(@course.title, course_url(@course, host: @course.instance.host)), - coursemology: link_to(t('layout.coursemology'), @course.instance.host), + coursemology: link_to(t('common.mailers.coursemology'), @course.instance.host), email: @invitation.email, - click_here: link_to(t('.click_here'), new_user_registration_url(invitation: @invitation.invitation_key, + click_here: link_to(t('common.mailers.click_here'), new_user_registration_url(invitation: @invitation.invitation_key, host: @course.instance.host)))) pre diff --git a/app/views/course/mailer/user_invitation_email.text.erb b/app/views/course/mailer/user_invitation_email.text.erb index 1b95729b08b..3faaa522b86 100644 --- a/app/views/course/mailer/user_invitation_email.text.erb +++ b/app/views/course/mailer/user_invitation_email.text.erb @@ -1,7 +1,7 @@ <%= t('.message', course: plain_link_to(@course.title, course_url(@course, host: @course.instance.host)), - coursemology: plain_link_to(t('layout.coursemology'), @course.instance.host), + coursemology: plain_link_to(t('common.mailers.coursemology'), @course.instance.host), email: @invitation.email, - click_here: plain_link_to(t('.click_here'), new_user_registration_url(invitation: @invitation.invitation_key, + click_here: plain_link_to(t('common.mailers.click_here'), new_user_registration_url(invitation: @invitation.invitation_key, host: @course.instance.host))) %> <%= @invitation.invitation_key %> diff --git a/app/views/course/mailer/user_rejected_email.html.slim b/app/views/course/mailer/user_rejected_email.html.slim index 07819116875..fcb97c68e68 100644 --- a/app/views/course/mailer/user_rejected_email.html.slim +++ b/app/views/course/mailer/user_rejected_email.html.slim @@ -1,5 +1,5 @@ = simple_format(\ t('.message', course: link_to(@course.title, course_url(@course, host: @course.instance.host)), - coursemology: link_to(t('layout.coursemology'), @course.instance.host)\ + coursemology: link_to(t('common.mailers.coursemology'), @course.instance.host)\ )\ ) diff --git a/app/views/course/mailer/user_rejected_email.text.erb b/app/views/course/mailer/user_rejected_email.text.erb index 3d0f00a4fee..9f0e7d7b22c 100644 --- a/app/views/course/mailer/user_rejected_email.text.erb +++ b/app/views/course/mailer/user_rejected_email.text.erb @@ -1,2 +1,2 @@ <%= t('.message', course: plain_link_to(@course.title, course_url(@course, host: @course.instance.host)), - coursemology: plain_link_to(t('layout.coursemology'), @course.instance.host)) %> + coursemology: plain_link_to(t('common.mailers.coursemology'), @course.instance.host)) %> diff --git a/app/views/course/material/folders/breadcrumbs.json.jbuilder b/app/views/course/material/folders/breadcrumbs.json.jbuilder index 93b5aec1254..70514c00415 100644 --- a/app/views/course/material/folders/breadcrumbs.json.jbuilder +++ b/app/views/course/material/folders/breadcrumbs.json.jbuilder @@ -2,5 +2,5 @@ json.breadcrumbs @folder.ancestors.reverse << @folder do |folder| json.id folder.id - json.name folder.parent_id.nil? ? @settings.title || t('course.material.sidebar_title') : folder.name + json.name folder.parent_id.nil? ? @settings.title : folder.name end diff --git a/app/views/course/reference_timelines/_reference_timeline.json.jbuilder b/app/views/course/reference_timelines/_reference_timeline.json.jbuilder index c7d64c36233..fe11336c55d 100644 --- a/app/views/course/reference_timelines/_reference_timeline.json.jbuilder +++ b/app/views/course/reference_timelines/_reference_timeline.json.jbuilder @@ -1,6 +1,6 @@ # frozen_string_literal: true json.id timeline.id -json.title timeline.title || t('.default_title') +json.title timeline.title json.timesCount timeline.reference_times.size json.weight timeline.weight if timeline.weight.present? diff --git a/app/views/course/surveys/_survey_lesson_plan_item.json.jbuilder b/app/views/course/surveys/_survey_lesson_plan_item.json.jbuilder index 75e00d09b95..a5bb0bdffbc 100644 --- a/app/views/course/surveys/_survey_lesson_plan_item.json.jbuilder +++ b/app/views/course/surveys/_survey_lesson_plan_item.json.jbuilder @@ -1,4 +1,4 @@ # frozen_string_literal: true json.partial! 'course/lesson_plan/items/item', item: item -json.lesson_plan_item_type [t('components.surveys.name')] +json.lesson_plan_item_type :course_surveys_component json.item_path course_survey_path(current_course, item) diff --git a/app/views/course/video/videos/_video_lesson_plan_item.json.jbuilder b/app/views/course/video/videos/_video_lesson_plan_item.json.jbuilder index 0753e17aeb1..118fb3d906d 100644 --- a/app/views/course/video/videos/_video_lesson_plan_item.json.jbuilder +++ b/app/views/course/video/videos/_video_lesson_plan_item.json.jbuilder @@ -3,5 +3,5 @@ json.partial! 'course/lesson_plan/items/item', item: item json.item_path course_video_path(current_course, item) json.description format_ckeditor_rich_text(item.description) -type = current_component_host[:course_videos_component]&.settings&.title || t('components.video.name') +type = current_component_host[:course_videos_component]&.settings&.title || :course_videos_component json.lesson_plan_item_type [type] diff --git a/app/views/instance/mailer/user_added_email.html.slim b/app/views/instance/mailer/user_added_email.html.slim index 81398ec2a4f..943cee935ac 100644 --- a/app/views/instance/mailer/user_added_email.html.slim +++ b/app/views/instance/mailer/user_added_email.html.slim @@ -1,6 +1,6 @@ = simple_format(\ t('.message', instance: link_to(@instance.name, @instance.host), - coursemology: link_to(t('layout.coursemology'), @instance.host), + coursemology: link_to(t('common.mailers.coursemology'), @instance.host), email: @recipient.email\ )\ ) diff --git a/app/views/instance/mailer/user_added_email.text.erb b/app/views/instance/mailer/user_added_email.text.erb index a580698f4d6..a665a1319fd 100644 --- a/app/views/instance/mailer/user_added_email.text.erb +++ b/app/views/instance/mailer/user_added_email.text.erb @@ -1,3 +1,3 @@ <%= t('.message', instance: plain_link_to(@instance.name, @instance.host), - coursemology: plain_link_to(t('layout.coursemology'), @instance.host), + coursemology: plain_link_to(t('common.mailers.coursemology'), @instance.host), email: @recipient.email) %> diff --git a/app/views/instance/mailer/user_invitation_email.html.slim b/app/views/instance/mailer/user_invitation_email.html.slim index c1645782975..308d0ba57c7 100644 --- a/app/views/instance/mailer/user_invitation_email.html.slim +++ b/app/views/instance/mailer/user_invitation_email.html.slim @@ -1,5 +1,5 @@ = simple_format(t('.message', instance: link_to(@instance.name, @instance.host), - coursemology: link_to(t('layout.coursemology'), @instance.host), + coursemology: link_to(t('common.mailers.coursemology'), @instance.host), email: @invitation.email, - click_here: link_to(t('.click_here'), new_user_registration_url(invitation: @invitation.invitation_key, + click_here: link_to(t('common.mailers.click_here'), new_user_registration_url(invitation: @invitation.invitation_key, host: @instance.host)))) diff --git a/app/views/instance/mailer/user_invitation_email.text.erb b/app/views/instance/mailer/user_invitation_email.text.erb index 65a0ea04883..292fefb86fb 100644 --- a/app/views/instance/mailer/user_invitation_email.text.erb +++ b/app/views/instance/mailer/user_invitation_email.text.erb @@ -1,5 +1,5 @@ <%= t('.message', instance: plain_link_to(@instance.name, @instance.host), - coursemology: plain_link_to(t('layout.coursemology'), @instance.host), + coursemology: plain_link_to(t('common.mailers.coursemology'), @instance.host), email: @invitation.email, - click_here: plain_link_to(t('.click_here'), new_user_registration_url(invitation: @invitation.invitation_key, + click_here: plain_link_to(t('common.mailers.click_here'), new_user_registration_url(invitation: @invitation.invitation_key, host: @instance.host))) %> diff --git a/app/views/instance_user_role_request_mailer/new_role_request.html.slim b/app/views/instance_user_role_request_mailer/new_role_request.html.slim index 4ed7589e382..48060a65446 100644 --- a/app/views/instance_user_role_request_mailer/new_role_request.html.slim +++ b/app/views/instance_user_role_request_mailer/new_role_request.html.slim @@ -9,7 +9,7 @@ organization: @request.organization || t('.empty'), designation: @request.designation || t('.empty'), reason: @request.reason || t('.empty'), - click_here: link_to(t('common.click_here'), + click_here: link_to(t('common.mailers.click_here'), instance_user_role_requests_url(host: instance.host))\ )\ ) diff --git a/app/views/instance_user_role_request_mailer/new_role_request.text.erb b/app/views/instance_user_role_request_mailer/new_role_request.text.erb index 56280d67d3a..7b8a35cf377 100644 --- a/app/views/instance_user_role_request_mailer/new_role_request.text.erb +++ b/app/views/instance_user_role_request_mailer/new_role_request.text.erb @@ -10,6 +10,6 @@ organization: @request.organization || t('.empty'), designation: @request.designation || t('.empty'), reason: @request.reason || t('.empty'), - click_here: plain_link_to(t('common.click_here'), instance_user_role_requests_url(host: instance.host)) + click_here: plain_link_to(t('common.mailers.click_here'), instance_user_role_requests_url(host: instance.host)) ) %> diff --git a/app/views/instance_user_role_request_mailer/role_request_approved.html.slim b/app/views/instance_user_role_request_mailer/role_request_approved.html.slim index 8aa29311dd9..bd03b42b31e 100644 --- a/app/views/instance_user_role_request_mailer/role_request_approved.html.slim +++ b/app/views/instance_user_role_request_mailer/role_request_approved.html.slim @@ -1,6 +1,6 @@ = simple_format(\ t('.message', role: @instance_user.role, - click_here: link_to(t('common.click_here'), courses_url(host: @instance.host))\ + click_here: link_to(t('common.mailers.click_here'), courses_url(host: @instance.host))\ )\ ) diff --git a/app/views/instance_user_role_request_mailer/role_request_approved.text.erb b/app/views/instance_user_role_request_mailer/role_request_approved.text.erb index 97392b25298..a7986247610 100644 --- a/app/views/instance_user_role_request_mailer/role_request_approved.text.erb +++ b/app/views/instance_user_role_request_mailer/role_request_approved.text.erb @@ -2,6 +2,6 @@ t( '.message', role: @instance_user.role, - click_here: plain_link_to(t('common.click_here'), courses_url(host: @instance.host)) + click_here: plain_link_to(t('common.mailers.click_here'), courses_url(host: @instance.host)) ) %> diff --git a/app/views/layouts/_manage_email_subscription.html.slim b/app/views/layouts/_manage_email_subscription.html.slim index 8808061aabf..1ea23c3ce75 100644 --- a/app/views/layouts/_manage_email_subscription.html.slim +++ b/app/views/layouts/_manage_email_subscription.html.slim @@ -7,4 +7,4 @@ component: component, category_id: category_id, setting: setting) -= simple_format(t('.message', manage_email_subscription_link: link_to(t('.tag'), manage_email_subscription_url))) += simple_format(t('common.mailers.manage_email_subscription.message', manage_email_subscription_link: link_to(t('common.mailers.manage_email_subscription.tag'), manage_email_subscription_url))) diff --git a/app/views/layouts/_manage_email_subscription.text.erb b/app/views/layouts/_manage_email_subscription.text.erb index 51fbead70f1..f56c7c2eeee 100644 --- a/app/views/layouts/_manage_email_subscription.text.erb +++ b/app/views/layouts/_manage_email_subscription.text.erb @@ -7,4 +7,4 @@ component: component, category_id: category_id, setting: setting) %> -<%= simple_format(t('.message', manage_email_subscription_link: link_to(t('.tag'), manage_email_subscription_url))) %> +<%= simple_format(t('common.mailers.manage_email_subscription.message', manage_email_subscription_link: link_to(t('common.mailers.manage_email_subscription.tag'), manage_email_subscription_url))) %> diff --git a/app/views/layouts/mailer.html.slim b/app/views/layouts/mailer.html.slim index 832d5bab90c..bc192526009 100644 --- a/app/views/layouts/mailer.html.slim +++ b/app/views/layouts/mailer.html.slim @@ -7,6 +7,6 @@ html body p - = t('.greeting', user: @recipient.name) + = t('common.mailers.greeting', user: @recipient.name) = yield diff --git a/app/views/layouts/mailer.text.erb b/app/views/layouts/mailer.text.erb index cf106b45aaf..d7e36a1a96f 100644 --- a/app/views/layouts/mailer.text.erb +++ b/app/views/layouts/mailer.text.erb @@ -1,3 +1,3 @@ -<%= t('.greeting', user: @recipient.name) %> +<%= t('common.mailers.greeting', user: @recipient.name) %> <%= yield %> diff --git a/app/views/notifiers/course/forum/post_notifier/replied/user_notifications/email.html.slim b/app/views/notifiers/course/forum/post_notifier/replied/user_notifications/email.html.slim index bb5623fea6f..4f505e1cae2 100644 --- a/app/views/notifiers/course/forum/post_notifier/replied/user_notifications/email.html.slim +++ b/app/views/notifiers/course/forum/post_notifier/replied/user_notifications/email.html.slim @@ -7,10 +7,10 @@ - course_title = format_inline_text(course.title) - topic_title = format_inline_text(topic.title) -- post_author = post.is_anonymous ? t('notifiers.course.anonymous_user') : format_inline_text(post.author_name) +- post_author = post.is_anonymous ? t('common.mailers.anonymous_course_user') : format_inline_text(post.author_name) - message.subject = t('.subject', course: course_title, topic: topic_title) -- message.subject += ' ' + t('notifiers.course.phantom') if course_user&.phantom? +- message.subject += ' ' + t('common.mailers.phantom_course_user') if course_user&.phantom? = format_html(t('.message', topic: link_to(topic_title, diff --git a/app/views/system/admin/instance/components/index.json.jbuilder b/app/views/system/admin/instance/components/index.json.jbuilder index 1facefe6169..cbf50cfa22f 100644 --- a/app/views/system/admin/instance/components/index.json.jbuilder +++ b/app/views/system/admin/instance/components/index.json.jbuilder @@ -4,8 +4,7 @@ enabled_components = @settings.enabled_component_ids.to_set json.components do json.array! components do |component| - json.key component[1] - json.displayName component[0] - json.enabled enabled_components.include?(component[1]) + json.key component + json.enabled enabled_components.include?(component) end end diff --git a/client/app/bundles/course/admin/components/SettingsNavigation.tsx b/client/app/bundles/course/admin/components/SettingsNavigation.tsx index d9af55245f6..0db2582ed90 100644 --- a/client/app/bundles/course/admin/components/SettingsNavigation.tsx +++ b/client/app/bundles/course/admin/components/SettingsNavigation.tsx @@ -14,6 +14,12 @@ import CourseAPI from 'api/course'; import Page from 'lib/components/core/layouts/Page'; import LoadingIndicator from 'lib/components/core/LoadingIndicator'; import { DataHandle } from 'lib/hooks/router/dynamicNest'; +import useTranslation from 'lib/hooks/useTranslation'; + +import { + getComponentTitle, + getComponentTranslationKey, +} from '../../translations'; const translations = defineMessages({ courseSettings: { @@ -34,6 +40,7 @@ export const useItemsReloader = (): (() => void) => const SettingsNavigation = (): JSX.Element => { const data = useLoaderData() as CourseAdminItems; + const { t } = useTranslation(); const [items, setItems] = useState(data); @@ -51,14 +58,14 @@ const SettingsNavigation = (): JSX.Element => {
- {items.map(({ title, path }) => ( + {items.map((item) => ( navigate(path)} - variant={path === pathname ? 'filled' : 'outlined'} + key={item.path} + className={`m-2 ${item.path === pathname && 'p-[1px]'}`} + clickable={item.path !== pathname} + label={getComponentTitle(t, item.id, item.title)} + onClick={(): void => navigate(item.path)} + variant={item.path === pathname ? 'filled' : 'outlined'} /> ))}
@@ -84,7 +91,8 @@ const handle: DataHandle = (match, location) => { title: translations.courseSettings, }, { - title: currentItem?.title, + title: + currentItem?.title ?? getComponentTranslationKey(currentItem?.id), url: currentItem?.path, }, ], diff --git a/client/app/bundles/course/admin/pages/ComponentSettings/ComponentSettingsForm.tsx b/client/app/bundles/course/admin/pages/ComponentSettings/ComponentSettingsForm.tsx index 23435782fb7..075d6126a51 100644 --- a/client/app/bundles/course/admin/pages/ComponentSettings/ComponentSettingsForm.tsx +++ b/client/app/bundles/course/admin/pages/ComponentSettings/ComponentSettingsForm.tsx @@ -3,6 +3,7 @@ import { FormControlLabel, Switch } from '@mui/material'; import { produce } from 'immer'; import { CourseComponents } from 'types/course/admin/components'; +import { getComponentTitle } from 'course/translations'; import Section from 'lib/components/core/layouts/Section'; import useTranslation from 'lib/hooks/useTranslation'; @@ -47,7 +48,8 @@ const ComponentSettingsForm = ( className="mb-0" control={} disabled={props.disabled} - label={component.displayName} + id={`component_${component.id}`} + label={getComponentTitle(t, component.id)} onChange={(_, checked): void => toggleComponent(index, checked)} /> ))} diff --git a/client/app/bundles/course/admin/pages/LessonPlanSettings/index.jsx b/client/app/bundles/course/admin/pages/LessonPlanSettings/index.jsx index 365ba663448..451a3b2271b 100644 --- a/client/app/bundles/course/admin/pages/LessonPlanSettings/index.jsx +++ b/client/app/bundles/course/admin/pages/LessonPlanSettings/index.jsx @@ -14,6 +14,7 @@ import { } from '@mui/material'; import PropTypes from 'prop-types'; +import { getComponentTranslationKey } from 'course/translations'; import Section from 'lib/components/core/layouts/Section'; import Subsection from 'lib/components/core/layouts/Subsection'; import LoadingIndicator from 'lib/components/core/LoadingIndicator'; @@ -56,7 +57,11 @@ class LessonPlanSettings extends Component { options, }, }; - const values = { setting: tab_title || component_title }; + const values = { + setting: tab_title || component_title || ( + + ), + }; const successMessage = ( ); @@ -84,7 +89,11 @@ class LessonPlanSettings extends Component { options, }, }; - const values = { setting: tab_title || component_title }; + const values = { + setting: tab_title || component_title || ( + + ), + }; const successMessage = ( ); @@ -126,7 +135,9 @@ class LessonPlanSettings extends Component { } renderComponentSettingRow(setting) { - const componentTitle = setting.component_title || setting.component; + const componentTitle = setting.component_title || ( + + ); return ( diff --git a/client/app/bundles/course/admin/pages/NotificationSettings/index.jsx b/client/app/bundles/course/admin/pages/NotificationSettings/index.jsx index d9fe9d13bb8..cc1a44d90bf 100644 --- a/client/app/bundles/course/admin/pages/NotificationSettings/index.jsx +++ b/client/app/bundles/course/admin/pages/NotificationSettings/index.jsx @@ -12,7 +12,6 @@ import { } from '@mui/material'; import PropTypes from 'prop-types'; -import adminTranslations from 'course/translations.intl'; import Section from 'lib/components/core/layouts/Section'; import LoadingIndicator from 'lib/components/core/LoadingIndicator'; import messagesTranslations from 'lib/translations/messages'; @@ -106,7 +105,7 @@ class NotificationSettings extends Component { - + diff --git a/client/app/bundles/course/admin/pages/NotificationSettings/translations.intl.js b/client/app/bundles/course/admin/pages/NotificationSettings/translations.intl.js index 81865edc3f9..5eecfd858fc 100644 --- a/client/app/bundles/course/admin/pages/NotificationSettings/translations.intl.js +++ b/client/app/bundles/course/admin/pages/NotificationSettings/translations.intl.js @@ -1,6 +1,10 @@ import { defineMessages } from 'react-intl'; const translations = defineMessages({ + component: { + id: 'course.admin.NotificationSettings.component', + defaultMessage: 'Component', + }, setting: { id: 'course.admin.NotificationSettings.setting', defaultMessage: 'Setting', diff --git a/client/app/bundles/course/admin/pages/SidebarSettings/SidebarSettingsForm.tsx b/client/app/bundles/course/admin/pages/SidebarSettings/SidebarSettingsForm.tsx index 3f7124d2569..02c3b12f170 100644 --- a/client/app/bundles/course/admin/pages/SidebarSettings/SidebarSettingsForm.tsx +++ b/client/app/bundles/course/admin/pages/SidebarSettings/SidebarSettingsForm.tsx @@ -18,6 +18,7 @@ import { import { produce } from 'immer'; import { SidebarItem, SidebarItems } from 'types/course/admin/sidebar'; +import { getComponentTitle } from 'course/translations'; import Section from 'lib/components/core/layouts/Section'; import { defensivelyGetIcon } from 'lib/constants/icons'; import useTranslation from 'lib/hooks/useTranslation'; @@ -131,7 +132,7 @@ const SidebarSettingsForm = (props: SidebarSettingsFormProps): JSX.Element => { color={props.disabled ? 'text.disabled' : 'text.primary'} variant="body2" > - {item.title} + {getComponentTitle(t, item.id, item.title)} diff --git a/client/app/bundles/course/container/Sidebar/SidebarItem.tsx b/client/app/bundles/course/container/Sidebar/SidebarItem.tsx index ea8edc51deb..2c96ac40899 100644 --- a/client/app/bundles/course/container/Sidebar/SidebarItem.tsx +++ b/client/app/bundles/course/container/Sidebar/SidebarItem.tsx @@ -1,5 +1,4 @@ import { useLayoutEffect, useRef } from 'react'; -import { defineMessages } from 'react-intl'; import { Link, useLocation } from 'react-router-dom'; import { Badge, Typography } from '@mui/material'; import { SidebarItemData } from 'types/course/courses'; @@ -8,6 +7,8 @@ import { defensivelyGetIcon } from 'lib/constants/icons'; import { useUnreadCountForItem } from 'lib/hooks/unread'; import useTranslation from 'lib/hooks/useTranslation'; +import { getComponentTitle } from '../../translations'; + interface SidebarItemProps { of: SidebarItemData; square?: boolean; @@ -18,6 +19,8 @@ interface SidebarItemProps { const SidebarItem = (props: SidebarItemProps): JSX.Element => { const { of: item, square, exact, activePath } = props; + const { t } = useTranslation(); + const location = useLocation(); const activeUrl = activePath ?? location.pathname + location.search; @@ -42,6 +45,7 @@ const SidebarItem = (props: SidebarItemProps): JSX.Element => {
{ className="overflow-hidden text-ellipsis whitespace-nowrap font-medium" variant="body2" > - {item.label} + {getComponentTitle(t, item.key, item.label)}
); }; -const translations = defineMessages({ - home: { - id: 'course.courses.SidebarItem.home', - defaultMessage: 'Home', - }, -}); - const HomeSidebarItem = (props: { to: string }): JSX.Element => { - const { t } = useTranslation(); - return ( diff --git a/client/app/bundles/course/duplication/pages/Duplication/DuplicateItemsConfirmation/AchievementsListing.jsx b/client/app/bundles/course/duplication/pages/Duplication/DuplicateItemsConfirmation/AchievementsListing.jsx index f8ead04dd96..0ca46922721 100644 --- a/client/app/bundles/course/duplication/pages/Duplication/DuplicateItemsConfirmation/AchievementsListing.jsx +++ b/client/app/bundles/course/duplication/pages/Duplication/DuplicateItemsConfirmation/AchievementsListing.jsx @@ -15,7 +15,7 @@ import UnpublishedIcon from 'course/duplication/components/UnpublishedIcon'; import { duplicableItemTypes } from 'course/duplication/constants'; import { achievementShape } from 'course/duplication/propTypes'; import { getAchievementBadgeUrl } from 'course/helper/achievements'; -import { defaultComponentTitles } from 'course/translations.intl'; +import componentTranslations from 'course/translations'; const styles = { badge: { @@ -73,7 +73,7 @@ class AchievementsListing extends Component { <> diff --git a/client/app/bundles/course/duplication/pages/Duplication/DuplicateItemsConfirmation/AssessmentsListing.jsx b/client/app/bundles/course/duplication/pages/Duplication/DuplicateItemsConfirmation/AssessmentsListing.jsx index b62ccda9ae6..d649864dfa8 100644 --- a/client/app/bundles/course/duplication/pages/Duplication/DuplicateItemsConfirmation/AssessmentsListing.jsx +++ b/client/app/bundles/course/duplication/pages/Duplication/DuplicateItemsConfirmation/AssessmentsListing.jsx @@ -9,7 +9,7 @@ import TypeBadge from 'course/duplication/components/TypeBadge'; import UnpublishedIcon from 'course/duplication/components/UnpublishedIcon'; import { duplicableItemTypes } from 'course/duplication/constants'; import { categoryShape } from 'course/duplication/propTypes'; -import { defaultComponentTitles } from 'course/translations.intl'; +import componentTranslations from 'course/translations'; const { TAB, ASSESSMENT, CATEGORY } = duplicableItemTypes; @@ -177,7 +177,7 @@ class AssessmentsListing extends Component { <> {categoriesTrees.map((category) => diff --git a/client/app/bundles/course/duplication/pages/Duplication/DuplicateItemsConfirmation/MaterialsListing.jsx b/client/app/bundles/course/duplication/pages/Duplication/DuplicateItemsConfirmation/MaterialsListing.jsx index 8b14b8fb434..557f29e94a2 100644 --- a/client/app/bundles/course/duplication/pages/Duplication/DuplicateItemsConfirmation/MaterialsListing.jsx +++ b/client/app/bundles/course/duplication/pages/Duplication/DuplicateItemsConfirmation/MaterialsListing.jsx @@ -8,7 +8,7 @@ import IndentedCheckbox from 'course/duplication/components/IndentedCheckbox'; import TypeBadge from 'course/duplication/components/TypeBadge'; import { duplicableItemTypes } from 'course/duplication/constants'; import { folderShape } from 'course/duplication/propTypes'; -import { defaultComponentTitles } from 'course/translations.intl'; +import componentTranslations from 'course/translations'; const { FOLDER, MATERIAL } = duplicableItemTypes; const ROOT_CHILDREN_LEVEL = 1; @@ -112,7 +112,7 @@ class MaterialsListing extends Component {
diff --git a/client/app/bundles/course/duplication/pages/Duplication/DuplicateItemsConfirmation/SurveyListing.jsx b/client/app/bundles/course/duplication/pages/Duplication/DuplicateItemsConfirmation/SurveyListing.jsx index d0ba5976d35..d41acd77c26 100644 --- a/client/app/bundles/course/duplication/pages/Duplication/DuplicateItemsConfirmation/SurveyListing.jsx +++ b/client/app/bundles/course/duplication/pages/Duplication/DuplicateItemsConfirmation/SurveyListing.jsx @@ -14,7 +14,7 @@ import TypeBadge from 'course/duplication/components/TypeBadge'; import UnpublishedIcon from 'course/duplication/components/UnpublishedIcon'; import { duplicableItemTypes } from 'course/duplication/constants'; import { surveyShape } from 'course/duplication/propTypes'; -import { defaultComponentTitles } from 'course/translations.intl'; +import componentTranslations from 'course/translations'; const styles = { row: { @@ -61,7 +61,7 @@ class SurveyListing extends Component { <> diff --git a/client/app/bundles/course/duplication/pages/Duplication/DuplicateItemsConfirmation/VideosListing.jsx b/client/app/bundles/course/duplication/pages/Duplication/DuplicateItemsConfirmation/VideosListing.jsx index ca4ded31899..5963a9a04ee 100644 --- a/client/app/bundles/course/duplication/pages/Duplication/DuplicateItemsConfirmation/VideosListing.jsx +++ b/client/app/bundles/course/duplication/pages/Duplication/DuplicateItemsConfirmation/VideosListing.jsx @@ -9,7 +9,7 @@ import TypeBadge from 'course/duplication/components/TypeBadge'; import UnpublishedIcon from 'course/duplication/components/UnpublishedIcon'; import { duplicableItemTypes } from 'course/duplication/constants'; import { videoTabShape } from 'course/duplication/propTypes'; -import { defaultComponentTitles } from 'course/translations.intl'; +import componentTranslations from 'course/translations'; const { VIDEO_TAB, VIDEO } = duplicableItemTypes; @@ -102,7 +102,7 @@ class VideoListing extends Component { <> diff --git a/client/app/bundles/course/duplication/pages/Duplication/ItemsSelector/AchievementsSelector.jsx b/client/app/bundles/course/duplication/pages/Duplication/ItemsSelector/AchievementsSelector.jsx index 749a7e1c45b..977e1394dc0 100644 --- a/client/app/bundles/course/duplication/pages/Duplication/ItemsSelector/AchievementsSelector.jsx +++ b/client/app/bundles/course/duplication/pages/Duplication/ItemsSelector/AchievementsSelector.jsx @@ -12,7 +12,7 @@ import { duplicableItemTypes } from 'course/duplication/constants'; import { achievementShape } from 'course/duplication/propTypes'; import { actions } from 'course/duplication/store'; import { getAchievementBadgeUrl } from 'course/helper/achievements'; -import { defaultComponentTitles } from 'course/translations.intl'; +import componentTranslations from 'course/translations'; import Thumbnail from 'lib/components/core/Thumbnail'; const translations = defineMessages({ @@ -118,7 +118,7 @@ class AchievementsSelector extends Component { <> {this.renderBody()} diff --git a/client/app/bundles/course/duplication/pages/Duplication/ItemsSelector/AssessmentsSelector.jsx b/client/app/bundles/course/duplication/pages/Duplication/ItemsSelector/AssessmentsSelector.jsx index 88569dd5bcd..fb5c7afed50 100644 --- a/client/app/bundles/course/duplication/pages/Duplication/ItemsSelector/AssessmentsSelector.jsx +++ b/client/app/bundles/course/duplication/pages/Duplication/ItemsSelector/AssessmentsSelector.jsx @@ -12,7 +12,7 @@ import { duplicableItemTypes } from 'course/duplication/constants'; import { categoryShape } from 'course/duplication/propTypes'; import destinationCourseSelector from 'course/duplication/selectors/destinationCourse'; import { actions } from 'course/duplication/store'; -import { defaultComponentTitles } from 'course/translations.intl'; +import componentTranslations from 'course/translations'; const { TAB, ASSESSMENT, CATEGORY } = duplicableItemTypes; @@ -134,7 +134,7 @@ class AssessmentsSelector extends Component { <> {categories.length > 0 ? ( diff --git a/client/app/bundles/course/duplication/pages/Duplication/ItemsSelector/MaterialsSelector.jsx b/client/app/bundles/course/duplication/pages/Duplication/ItemsSelector/MaterialsSelector.jsx index 9102d109235..227a946ca80 100644 --- a/client/app/bundles/course/duplication/pages/Duplication/ItemsSelector/MaterialsSelector.jsx +++ b/client/app/bundles/course/duplication/pages/Duplication/ItemsSelector/MaterialsSelector.jsx @@ -10,7 +10,7 @@ import TypeBadge from 'course/duplication/components/TypeBadge'; import { duplicableItemTypes } from 'course/duplication/constants'; import { folderShape } from 'course/duplication/propTypes'; import { actions } from 'course/duplication/store'; -import { defaultComponentTitles } from 'course/translations.intl'; +import componentTranslations from 'course/translations'; const { FOLDER, MATERIAL } = duplicableItemTypes; @@ -101,7 +101,7 @@ class MaterialsSelector extends Component { <> {folders.length > 0 ? ( diff --git a/client/app/bundles/course/duplication/pages/Duplication/ItemsSelector/SurveysSelector.jsx b/client/app/bundles/course/duplication/pages/Duplication/ItemsSelector/SurveysSelector.jsx index 13bfa68588d..0127124c92d 100644 --- a/client/app/bundles/course/duplication/pages/Duplication/ItemsSelector/SurveysSelector.jsx +++ b/client/app/bundles/course/duplication/pages/Duplication/ItemsSelector/SurveysSelector.jsx @@ -11,7 +11,7 @@ import UnpublishedIcon from 'course/duplication/components/UnpublishedIcon'; import { duplicableItemTypes } from 'course/duplication/constants'; import { surveyShape } from 'course/duplication/propTypes'; import { actions } from 'course/duplication/store'; -import { defaultComponentTitles } from 'course/translations.intl'; +import componentTranslations from 'course/translations'; const translations = defineMessages({ noItems: { @@ -98,7 +98,7 @@ class SurveysSelector extends Component { <> {this.renderBody()} diff --git a/client/app/bundles/course/duplication/pages/Duplication/ItemsSelector/VideosSelector.jsx b/client/app/bundles/course/duplication/pages/Duplication/ItemsSelector/VideosSelector.jsx index 2434498444a..c18fdc34637 100644 --- a/client/app/bundles/course/duplication/pages/Duplication/ItemsSelector/VideosSelector.jsx +++ b/client/app/bundles/course/duplication/pages/Duplication/ItemsSelector/VideosSelector.jsx @@ -11,7 +11,7 @@ import UnpublishedIcon from 'course/duplication/components/UnpublishedIcon'; import { duplicableItemTypes } from 'course/duplication/constants'; import { videoTabShape } from 'course/duplication/propTypes'; import { actions } from 'course/duplication/store'; -import { defaultComponentTitles } from 'course/translations.intl'; +import componentTranslations from 'course/translations'; const { VIDEO_TAB, VIDEO } = duplicableItemTypes; @@ -120,7 +120,7 @@ class VideosSelector extends Component { <> {this.renderBody()} diff --git a/client/app/bundles/course/duplication/pages/Duplication/ItemsSelectorMenu/index.jsx b/client/app/bundles/course/duplication/pages/Duplication/ItemsSelectorMenu/index.jsx index 278ea18b68a..a91172df79c 100644 --- a/client/app/bundles/course/duplication/pages/Duplication/ItemsSelectorMenu/index.jsx +++ b/client/app/bundles/course/duplication/pages/Duplication/ItemsSelectorMenu/index.jsx @@ -17,7 +17,7 @@ import { } from 'course/duplication/constants'; import { courseShape } from 'course/duplication/propTypes'; import { actions } from 'course/duplication/store'; -import { defaultComponentTitles } from 'course/translations.intl'; +import componentTranslations from 'course/translations'; import DuplicateButton from '../DuplicateButton'; @@ -72,7 +72,7 @@ class ItemsSelectorMenu extends Component { - + ); diff --git a/client/app/bundles/course/lesson-plan/containers/LessonPlanFilter/index.jsx b/client/app/bundles/course/lesson-plan/containers/LessonPlanFilter/index.jsx index 059998aabaa..61431219d76 100644 --- a/client/app/bundles/course/lesson-plan/containers/LessonPlanFilter/index.jsx +++ b/client/app/bundles/course/lesson-plan/containers/LessonPlanFilter/index.jsx @@ -7,6 +7,7 @@ import { Button, MenuItem, MenuList, Popover } from '@mui/material'; import PropTypes from 'prop-types'; import { actions } from '../../store'; +import TranslatedItemType from '../TranslatedItemType'; const translations = defineMessages({ filter: { @@ -78,7 +79,7 @@ class LessonPlanFilter extends Component { } style={{ display: 'flex', justifyContent: 'space-between' }} > - {itemType} + {isVisible && } ); diff --git a/client/app/bundles/course/lesson-plan/containers/TranslatedItemType.tsx b/client/app/bundles/course/lesson-plan/containers/TranslatedItemType.tsx new file mode 100644 index 00000000000..6b1be4947dd --- /dev/null +++ b/client/app/bundles/course/lesson-plan/containers/TranslatedItemType.tsx @@ -0,0 +1,22 @@ +import { FC } from 'react'; + +import { getComponentTitle } from 'course/translations'; +import useTranslation from 'lib/hooks/useTranslation'; + +// TODO: properly handle this by separating raw strings & component keys. +const TranslatedItemType: FC<{ type: string }> = ({ type }) => { + const { t } = useTranslation(); + const isTypeComponentKey = [ + 'course_surveys_component', + 'course_videos_component', + ].includes(type); + + return ( + <> + {isTypeComponentKey && getComponentTitle(t, type)} + {!isTypeComponentKey && type} + + ); +}; + +export default TranslatedItemType; diff --git a/client/app/bundles/course/lesson-plan/pages/LessonPlanEdit/ItemRow/index.jsx b/client/app/bundles/course/lesson-plan/pages/LessonPlanEdit/ItemRow/index.jsx index 30e61a95bfc..c8e764e108d 100644 --- a/client/app/bundles/course/lesson-plan/pages/LessonPlanEdit/ItemRow/index.jsx +++ b/client/app/bundles/course/lesson-plan/pages/LessonPlanEdit/ItemRow/index.jsx @@ -6,6 +6,7 @@ import PropTypes from 'prop-types'; import Link from 'lib/components/core/Link'; import { fields } from '../../../constants'; +import TranslatedItemType from '../../../containers/TranslatedItemType'; import { updateItem } from '../../../operations'; import DateCell from './DateCell'; @@ -68,7 +69,11 @@ class ItemRow extends Component { return ( - {columnsVisible[fields.ITEM_TYPE] ? {type} : null} + {columnsVisible[fields.ITEM_TYPE] ? ( + + + + ) : null} {title} diff --git a/client/app/bundles/course/lesson-plan/pages/LessonPlanShow/LessonPlanItem/Details/Chips.jsx b/client/app/bundles/course/lesson-plan/pages/LessonPlanShow/LessonPlanItem/Details/Chips.jsx index 64f69595180..bf859481e0e 100644 --- a/client/app/bundles/course/lesson-plan/pages/LessonPlanShow/LessonPlanItem/Details/Chips.jsx +++ b/client/app/bundles/course/lesson-plan/pages/LessonPlanShow/LessonPlanItem/Details/Chips.jsx @@ -10,6 +10,8 @@ import PropTypes from 'prop-types'; import moment, { formatShortDateTime, formatShortTime } from 'lib/moment'; +import TranslatedItemType from '../../../../containers/TranslatedItemType'; + const translations = defineMessages({ notPublished: { id: 'course.lessonPlan.LessonPlanShow.LessonPlanItem.Details.Chip.notPublished', @@ -127,7 +129,7 @@ class Chips extends Component { } - label={itemType} + label={} style={styles.chip} /> ); diff --git a/client/app/bundles/course/level/pages/LevelsIndex/index.tsx b/client/app/bundles/course/level/pages/LevelsIndex/index.tsx index 0863cddcc87..0b6280039b7 100644 --- a/client/app/bundles/course/level/pages/LevelsIndex/index.tsx +++ b/client/app/bundles/course/level/pages/LevelsIndex/index.tsx @@ -1,7 +1,7 @@ import { defineMessages } from 'react-intl'; import { Skeleton, Stack, Typography } from '@mui/material'; -import { defaultComponentTitles } from 'course/translations.intl'; +import componentTranslations from 'course/translations'; import Page from 'lib/components/core/layouts/Page'; import Preload from 'lib/components/wrappers/Preload'; import { useAppDispatch } from 'lib/hooks/store'; @@ -37,7 +37,7 @@ const LevelsIndex = (): JSX.Element => { - {t(defaultComponentTitles.course_levels_component)} + {t(componentTranslations.course_levels_component)} } > diff --git a/client/app/bundles/course/material/folders/handles.ts b/client/app/bundles/course/material/folders/handles.ts index aa21b2dac08..b7c4e7f4599 100644 --- a/client/app/bundles/course/material/folders/handles.ts +++ b/client/app/bundles/course/material/folders/handles.ts @@ -4,6 +4,7 @@ import { FolderData } from 'types/course/material/folders'; import { getIdFromUnknown } from 'utilities'; import CourseAPI from 'api/course'; +import componentTranslations from 'course/translations'; import { CrumbPath, DataHandle } from 'lib/hooks/router/dynamicNest'; const translations = defineMessages({ @@ -25,13 +26,25 @@ const translations = defineMessages({ */ const buildCrumbPath = ( courseUrl: string, - breadcrumbs: { id: number; name: string }[], + breadcrumbs: { id: number; name?: string }[], ): CrumbPath => ({ activePath: `${courseUrl}/materials/folders/${breadcrumbs[0].id}`, - content: breadcrumbs.map((crumb) => ({ - title: crumb.id < 0 ? translations.error : crumb.name, - url: `materials/folders/${crumb.id < 0 ? '' : crumb.id}`, - })), + content: breadcrumbs.map((crumb) => { + if (crumb.id < 0) { + return { + title: translations.error, + url: `materials/folders/`, + }; + } + + return { + title: + crumb.name && crumb.name.length > 0 + ? crumb.name + : componentTranslations.course_materials_component, + url: `materials/folders/${crumb.id}`, + }; + }), }); /** diff --git a/client/app/bundles/course/reference-timelines/components/CreateRenameTimelinePrompt.tsx b/client/app/bundles/course/reference-timelines/components/CreateRenameTimelinePrompt.tsx index 29633a34fe8..71aa825a0ea 100644 --- a/client/app/bundles/course/reference-timelines/components/CreateRenameTimelinePrompt.tsx +++ b/client/app/bundles/course/reference-timelines/components/CreateRenameTimelinePrompt.tsx @@ -116,7 +116,7 @@ const CreateRenameTimelinePrompt = ( } title={ timeline - ? t(translations.renameTimelineTitle, { title: timeline.title }) + ? t(translations.renameTimelineTitle, { title: timeline.title ?? '' }) : t(translations.newTimeline) } > diff --git a/client/app/bundles/course/reference-timelines/components/DeleteTimelinePrompt.tsx b/client/app/bundles/course/reference-timelines/components/DeleteTimelinePrompt.tsx index afc5a595a32..ed99202d4bd 100644 --- a/client/app/bundles/course/reference-timelines/components/DeleteTimelinePrompt.tsx +++ b/client/app/bundles/course/reference-timelines/components/DeleteTimelinePrompt.tsx @@ -46,7 +46,9 @@ const DeleteTimelinePrompt = ( ? t(translations.confirmRevertAndDeleteTimeline) : t(translations.confirmDeleteTimeline) } - title={t(translations.sureDeletingTimeline, { title: timeline.title })} + title={t(translations.sureDeletingTimeline, { + title: timeline.title ?? '', + })} > {Boolean(timeline.timesCount) && ( diff --git a/client/app/bundles/course/reference-timelines/components/TimelinesOverview/TimelinesOverviewItem.tsx b/client/app/bundles/course/reference-timelines/components/TimelinesOverview/TimelinesOverviewItem.tsx index 974d74e2b46..ff3c719a084 100644 --- a/client/app/bundles/course/reference-timelines/components/TimelinesOverview/TimelinesOverviewItem.tsx +++ b/client/app/bundles/course/reference-timelines/components/TimelinesOverview/TimelinesOverviewItem.tsx @@ -46,7 +46,9 @@ const TimelinesOverviewItem = ( toast.error( error ?? - t(translations.errorDeletingTimeline, { title: timeline.title }), + t(translations.errorDeletingTimeline, { + title: timeline.title ?? '', + }), ); }); }; @@ -62,7 +64,7 @@ const TimelinesOverviewItem = ( } descriptionVariant="caption" disabled={timeline.default ?? status === 'loading'} - label={timeline.title} + label={timeline.title ?? t(translations.defaultTimeline)} labelClassName="!-mb-2 line-clamp-1 max-w-[20rem]" onChange={(_, checked): void => props.onChangeCheck?.(checked)} variant="body2" diff --git a/client/app/bundles/course/reference-timelines/translations.ts b/client/app/bundles/course/reference-timelines/translations.ts index eaaf61c76fc..6afe68d3c85 100644 --- a/client/app/bundles/course/reference-timelines/translations.ts +++ b/client/app/bundles/course/reference-timelines/translations.ts @@ -158,7 +158,7 @@ export default defineMessages({ }, defaultTimeline: { id: 'course.timelines.defaultTimeline', - defaultMessage: 'Default', + defaultMessage: 'Default Timeline', }, deleteTime: { id: 'course.timelines.deleteTime', diff --git a/client/app/bundles/course/reference-timelines/views/DayView/ItemsSidebar.tsx b/client/app/bundles/course/reference-timelines/views/DayView/ItemsSidebar.tsx index 12081c2be64..a995904f7eb 100644 --- a/client/app/bundles/course/reference-timelines/views/DayView/ItemsSidebar.tsx +++ b/client/app/bundles/course/reference-timelines/views/DayView/ItemsSidebar.tsx @@ -4,8 +4,10 @@ import { TimelineData, } from 'types/course/referenceTimelines'; +import useTranslation from 'lib/hooks/useTranslation'; import moment from 'lib/moment'; +import translations from '../../translations'; import { getDaysFromSeconds } from '../../utils'; import TimelineSidebarItem from './TimelineSidebarItem'; @@ -19,6 +21,7 @@ interface ItemsSidebarProps { const ItemsSidebar = (props: ItemsSidebarProps): JSX.Element => { const { for: items, within: timelines } = props; + const { t } = useTranslation(); return (
diff --git a/client/app/bundles/course/reference-timelines/views/DayView/TimelineSidebarItem.tsx b/client/app/bundles/course/reference-timelines/views/DayView/TimelineSidebarItem.tsx index 7df66bcf5ee..4083efa39bf 100644 --- a/client/app/bundles/course/reference-timelines/views/DayView/TimelineSidebarItem.tsx +++ b/client/app/bundles/course/reference-timelines/views/DayView/TimelineSidebarItem.tsx @@ -30,7 +30,7 @@ const TimelineSidebarItem = (props: TimelineSidebarItemProps): JSX.Element => { })} > - {timeline.title} + {timeline.title ?? t(translations.defaultTimeline)} {assigned ? ( diff --git a/client/app/bundles/course/translations.intl.js b/client/app/bundles/course/translations.intl.js deleted file mode 100644 index 43b42246b84..00000000000 --- a/client/app/bundles/course/translations.intl.js +++ /dev/null @@ -1,49 +0,0 @@ -import { defineMessages } from 'react-intl'; - -const translations = defineMessages({ - component: { - id: 'course.component', - defaultMessage: 'Component', - }, -}); - -export const defaultComponentTitles = defineMessages({ - course_achievements_component: { - id: 'course.componentTitles.course_achievements_component', - defaultMessage: 'Achievements', - }, - course_assessments_component: { - id: 'course.componentTitles.course_assessments_component', - defaultMessage: 'Assessments', - }, - course_announcements_component: { - id: 'course.componentTitles.course_announcements_component', - defaultMessage: 'Announcements', - }, - course_survey_component: { - id: 'course.componentTitles.course_survey_component', - defaultMessage: 'Surveys', - }, - course_users_component: { - id: 'course.componentTitles.course_users_component', - defaultMessage: 'Users', - }, - course_forums_component: { - id: 'course.componentTitles.course_forums_component', - defaultMessage: 'Forums', - }, - course_videos_component: { - id: 'course.componentTitles.course_videos_component', - defaultMessage: 'Videos', - }, - course_materials_component: { - id: 'course.componentTitles.course_materials_component', - defaultMessage: 'Materials', - }, - course_levels_component: { - id: 'course.componentTitles.course_levels_component', - defaultMessage: 'Levels', - }, -}); - -export default translations; diff --git a/client/app/bundles/course/translations.ts b/client/app/bundles/course/translations.ts new file mode 100644 index 00000000000..74ee28e438f --- /dev/null +++ b/client/app/bundles/course/translations.ts @@ -0,0 +1,219 @@ +import { defineMessages, MessageDescriptor } from 'react-intl'; + +import { MessageTranslator } from 'lib/hooks/useTranslation'; + +const translations = defineMessages({ + admin_duplication: { + id: 'course.courses.SidebarItem.admin.duplication', + defaultMessage: 'Duplicate Data', + }, + admin_multiple_reference_timelines: { + id: 'course.courses.SidebarItem.admin.multipleReferenceTimelines', + defaultMessage: 'Timeline Designer', + }, + admin_plagiarism: { + id: 'course.courses.SidebarItem.admin.plagiarism', + defaultMessage: 'Plagiarism Check', + }, + admin_scholaistic_assistants: { + id: 'course.courses.SidebarItem.admin.scholaistic.assistants', + defaultMessage: 'Assistants', + }, + admin_settings: { + id: 'course.courses.SidebarItem.admin.settings', + defaultMessage: 'Course Settings', + }, + admin_settings_component_settings: { + id: 'course.courses.SidebarItem.admin.settings.components', + defaultMessage: 'Components', + }, + admin_settings_general: { + id: 'course.courses.SidebarItem.admin.settings.general', + defaultMessage: 'General', + }, + admin_settings_notifications: { + id: 'course.courses.SidebarItem.admin.settings.notifications', + defaultMessage: 'Email', + }, + admin_settings_sidebar_settings: { + id: 'course.courses.SidebarItem.admin.settings.sidebar', + defaultMessage: 'Sidebar', + }, + admin_users_manage_users: { + id: 'course.courses.SidebarItem.admin.users.manageUsers', + defaultMessage: 'Manage Users', + }, + course_achievements_component: { + id: 'course.componentTitles.course_achievements_component', + defaultMessage: 'Achievements', + }, + course_announcements_component: { + id: 'course.componentTitles.course_announcements_component', + defaultMessage: 'Announcements', + }, + course_assessments_component: { + id: 'course.componentTitles.course_assessments_component', + defaultMessage: 'Assessments', + }, + course_codaveri_component: { + id: 'course.componentTitles.course_codaveri_component', + defaultMessage: 'Codaveri Evaluation and Feedback', + }, + course_discussion_topics_component: { + id: 'course.componentTitles.course_discussion_topics_component', + defaultMessage: 'Comments Center', + }, + course_duplication_component: { + id: 'course.componentTitles.course_duplication_component', + defaultMessage: 'Duplication', + }, + course_experience_points_component: { + id: 'course.componentTitles.course_experience_points_component', + defaultMessage: 'Experience Points', + }, + course_forums_component: { + id: 'course.componentTitles.course_forums_component', + defaultMessage: 'Forums', + }, + course_groups_component: { + id: 'course.componentTitles.course_groups_component', + defaultMessage: 'Groups', + }, + course_koditsu_platform_component: { + id: 'course.componentTitles.course_koditsu_platform_component', + defaultMessage: 'Koditsu Exam', + }, + course_leaderboard_component: { + id: 'course.componentTitles.course_leaderboard_component', + defaultMessage: 'Leaderboard', + }, + course_learning_map_component: { + id: 'course.componentTitles.course_learning_map_component', + defaultMessage: 'Learning Map', + }, + course_lesson_plan_component: { + id: 'course.componentTitles.course_lesson_plan_component', + defaultMessage: 'Lesson Plan', + }, + course_levels_component: { + id: 'course.componentTitles.course_levels_component', + defaultMessage: 'Levels', + }, + course_materials_component: { + id: 'course.componentTitles.course_materials_component', + defaultMessage: 'Materials', + }, + course_monitoring_component: { + id: 'course.componentTitles.course_monitoring_component', + defaultMessage: 'Heartbeat Monitoring for Exams', + }, + course_multiple_reference_timelines_component: { + id: 'course.componentTitles.course_multiple_reference_timelines_component', + defaultMessage: 'Multiple Reference Timelines', + }, + course_plagiarism_component: { + id: 'course.componentTitles.course_plagiarism_component', + defaultMessage: 'SSID Plagiarism Check', + }, + course_rag_wise_component: { + id: 'course.componentTitles.course_rag_wise_component', + defaultMessage: 'RagWise Auto Forum Response', + }, + course_scholaistic_component: { + id: 'course.componentTitles.course_scholaistic_component', + defaultMessage: 'Role-Playing Chatbots & Assessments', + }, + course_settings_component: { + id: 'course.componentTitles.course_settings_component', + defaultMessage: 'Settings', + }, + course_statistics_component: { + id: 'course.componentTitles.course_statistics_component', + defaultMessage: 'Statistics', + }, + course_stories_component: { + id: 'course.componentTitles.course_stories_component', + defaultMessage: 'Stories', + }, + course_survey_component: { + id: 'course.componentTitles.course_survey_component', + defaultMessage: 'Surveys', + }, + course_users_component: { + id: 'course.componentTitles.course_users_component', + defaultMessage: 'Users', + }, + course_videos_component: { + id: 'course.componentTitles.course_videos_component', + defaultMessage: 'Videos', + }, + sidebar_assessments_skills: { + id: 'course.courses.SidebarItem.assessmentSkills', + defaultMessage: 'Skills', + }, + sidebar_assessments_submissions: { + id: 'course.courses.SidebarItem.assessmentSubmissions', + defaultMessage: 'Submissions', + }, + sidebar_discussion_topics: { + id: 'course.courses.SidebarItem.discussionTopics', + defaultMessage: 'Comments', + }, + sidebar_experience_points: { + id: 'course.courses.SidebarItem.experiencePoints', + defaultMessage: 'Experience Points', + }, + sidebar_home: { + id: 'course.courses.SidebarItem.home', + defaultMessage: 'Home', + }, + sidebar_stories_learn: { + id: 'course.courses.SidebarItem.stories.learn', + defaultMessage: 'Learn', + }, + sidebar_stories_mission_control: { + id: 'course.courses.SidebarItem.stories.missionControl', + defaultMessage: 'Mission Control', + }, +}); + +// Keys for main sidebar items (the ones students can see) cannot be changed, +// because the ordering of sidebar items for each course is saved in DB using these names. +const LegacySidebarItemKeyMapper: Record = { + announcements: translations.course_announcements_component, + achievements: translations.course_achievements_component, + assessments_submissions: translations.sidebar_assessments_submissions, + discussion_topics: translations.sidebar_discussion_topics, + forums: translations.course_forums_component, + leaderboard: translations.course_leaderboard_component, + learning_map: translations.course_learning_map_component, + lesson_plan: translations.course_lesson_plan_component, + materials: translations.course_materials_component, + learn: translations.sidebar_stories_learn, + surveys: translations.course_survey_component, + users: translations.course_users_component, + videos: translations.course_videos_component, +}; + +export const getComponentTranslationKey = ( + key?: string, +): MessageDescriptor | undefined => { + if (!key) return undefined; + if (translations[key]) return translations[key]; + if (LegacySidebarItemKeyMapper[key]) return LegacySidebarItemKeyMapper[key]; + return undefined; +}; + +export const getComponentTitle = ( + t: MessageTranslator, + key?: string, + definedTitle?: string, +): string | undefined => { + if (definedTitle && definedTitle.length > 0) return definedTitle; + + const translationKey = getComponentTranslationKey(key); + if (translationKey) return t(translationKey); + return key; +}; + +export default translations; diff --git a/client/app/bundles/system/admin/instance/instance/pages/InstanceComponentsIndex.tsx b/client/app/bundles/system/admin/instance/instance/pages/InstanceComponentsIndex.tsx index 6c1c65c2b7e..f16b84b5e29 100644 --- a/client/app/bundles/system/admin/instance/instance/pages/InstanceComponentsIndex.tsx +++ b/client/app/bundles/system/admin/instance/instance/pages/InstanceComponentsIndex.tsx @@ -1,5 +1,5 @@ import { FC, useEffect, useState } from 'react'; -import { defineMessages, injectIntl, WrappedComponentProps } from 'react-intl'; +import { defineMessages } from 'react-intl'; import { Switch, Table, @@ -10,16 +10,16 @@ import { } from '@mui/material'; import { ComponentData } from 'types/system/instance/components'; +import { getComponentTitle } from 'course/translations'; import LoadingIndicator from 'lib/components/core/LoadingIndicator'; import { useAppDispatch } from 'lib/hooks/store'; import toast from 'lib/hooks/toast'; +import useTranslation from 'lib/hooks/useTranslation'; import tableTranslations from 'lib/translations/table'; import { indexComponents, updateComponents } from '../operations'; import { actions } from '../store'; -type Props = WrappedComponentProps; - const translations = defineMessages({ fetchComponentsFailure: { id: 'system.admin.instance.instance.InstanceComponentsForm.fetchComponentsFailure', @@ -35,8 +35,8 @@ const translations = defineMessages({ }, }); -const InstanceComponentsIndex: FC = (props) => { - const { intl } = props; +const InstanceComponentsIndex: FC = () => { + const { t } = useTranslation(); const dispatch = useAppDispatch(); const [isLoading, setIsLoading] = useState(false); const [isUpdating, setIsUpdating] = useState(false); @@ -49,9 +49,7 @@ const InstanceComponentsIndex: FC = (props) => { setComponents(data); dispatch(actions.initComponentList(data)); }) - .catch(() => - toast.error(intl.formatMessage(translations.fetchComponentsFailure)), - ) + .catch(() => toast.error(t(translations.fetchComponentsFailure))) .finally(() => { setIsLoading(false); }); @@ -63,11 +61,9 @@ const InstanceComponentsIndex: FC = (props) => { .then((data) => { setComponents(data); dispatch(actions.initComponentList(data)); - toast.success(intl.formatMessage(translations.updateComponentsSuccess)); + toast.success(t(translations.updateComponentsSuccess)); }) - .catch(() => - toast.error(intl.formatMessage(translations.updateComponentsFailed)), - ) + .catch(() => toast.error(t(translations.updateComponentsFailed))) .finally(() => setIsUpdating(false)); }; @@ -77,18 +73,14 @@ const InstanceComponentsIndex: FC = (props) => { - - {intl.formatMessage(tableTranslations.component)} - - - {intl.formatMessage(tableTranslations.isEnabled)} - + {t(tableTranslations.component)} + {t(tableTranslations.isEnabled)} {components.map((component) => ( - {component.displayName} + {getComponentTitle(t, component.key)} = (props) => { ); }; -export default injectIntl(InstanceComponentsIndex); +export default InstanceComponentsIndex; diff --git a/client/app/types/course/admin/components.ts b/client/app/types/course/admin/components.ts index 443ec6289c8..8b31bc8da91 100644 --- a/client/app/types/course/admin/components.ts +++ b/client/app/types/course/admin/components.ts @@ -1,6 +1,5 @@ export interface CourseComponent { id: string; - displayName: string; enabled: boolean; } diff --git a/client/app/types/course/admin/course.ts b/client/app/types/course/admin/course.ts index 6a6babb2f39..6990c234018 100644 --- a/client/app/types/course/admin/course.ts +++ b/client/app/types/course/admin/course.ts @@ -15,7 +15,8 @@ export interface CourseInfo { } export interface CourseAdminItem { - title: string; + id: string; + title?: string; weight: number; path: string; } diff --git a/client/app/types/course/admin/sidebar.ts b/client/app/types/course/admin/sidebar.ts index e39479d4ecc..0d1aa8711cd 100644 --- a/client/app/types/course/admin/sidebar.ts +++ b/client/app/types/course/admin/sidebar.ts @@ -2,7 +2,7 @@ import { CourseComponentIconName } from 'lib/constants/icons'; export interface SidebarItem { id: string; - title: string; + title?: string; weight: number; icon: CourseComponentIconName; } diff --git a/client/app/types/course/courses.ts b/client/app/types/course/courses.ts index 25503a9fc8b..083add24cc3 100644 --- a/client/app/types/course/courses.ts +++ b/client/app/types/course/courses.ts @@ -77,7 +77,7 @@ export interface NewCourseFormData { export interface SidebarItemData { key: string; - label: string; + label?: string; path: string; icon: CourseComponentIconName; unread?: number; diff --git a/client/app/types/course/material/folders.ts b/client/app/types/course/material/folders.ts index 0276fc0462d..98e726f2302 100644 --- a/client/app/types/course/material/folders.ts +++ b/client/app/types/course/material/folders.ts @@ -94,7 +94,7 @@ export interface FolderData { export interface BreadcrumbData { breadcrumbs: { id: number; - name: string; + name?: string; }[]; } diff --git a/client/app/types/course/referenceTimelines.ts b/client/app/types/course/referenceTimelines.ts index 106026b5684..85ee0a43652 100644 --- a/client/app/types/course/referenceTimelines.ts +++ b/client/app/types/course/referenceTimelines.ts @@ -8,7 +8,7 @@ export interface TimeData { export interface TimelineData { id: number; timesCount: number; - title: string; + title?: string; default?: boolean; weight?: number; assignees?: number; diff --git a/client/app/types/system/instance/components.ts b/client/app/types/system/instance/components.ts index 874feb716d7..041024d9094 100644 --- a/client/app/types/system/instance/components.ts +++ b/client/app/types/system/instance/components.ts @@ -1,5 +1,4 @@ export interface ComponentData { key: string; - displayName: string; enabled: boolean; } diff --git a/client/locales/en.json b/client/locales/en.json index 52b28396ce6..a7185a5aaa7 100644 --- a/client/locales/en.json +++ b/client/locales/en.json @@ -4026,7 +4026,7 @@ "course.asssessment.submission.submitNoQuestionExplain": { "defaultMessage": "Mark as completed?" }, - "course.component": { + "course.admin.NotificationSettings.component": { "defaultMessage": "Component" }, "course.componentTitles.course_achievements_component": { @@ -4038,15 +4038,66 @@ "course.componentTitles.course_assessments_component": { "defaultMessage": "Assessments" }, + "course.componentTitles.course_codaveri_component": { + "defaultMessage": "Codaveri Evaluation and Feedback" + }, + "course.componentTitles.course_discussion_topics_component": { + "defaultMessage": "Comments Center" + }, + "course.componentTitles.course_duplication_component": { + "defaultMessage": "Duplication" + }, + "course.componentTitles.course_experience_points_component": { + "defaultMessage": "Experience Points" + }, "course.componentTitles.course_forums_component": { "defaultMessage": "Forums" }, + "course.componentTitles.course_groups_component": { + "defaultMessage": "Groups" + }, + "course.componentTitles.course_koditsu_platform_component": { + "defaultMessage": "Koditsu Exam" + }, + "course.componentTitles.course_leaderboard_component": { + "defaultMessage": "Leaderboard" + }, + "course.componentTitles.course_learning_map_component": { + "defaultMessage": "Learning Map" + }, + "course.componentTitles.course_lesson_plan_component": { + "defaultMessage": "Lesson Plan" + }, "course.componentTitles.course_levels_component": { "defaultMessage": "Levels" }, "course.componentTitles.course_materials_component": { "defaultMessage": "Materials" }, + "course.componentTitles.course_monitoring_component": { + "defaultMessage": "Heartbeat Monitoring for Exams" + }, + "course.componentTitles.course_multiple_reference_timelines_component": { + "defaultMessage": "Multiple Reference Timelines" + }, + "course.componentTitles.course_plagiarism_component": { + "defaultMessage": "SSID Plagiarism Check" + }, + "course.componentTitles.course_rag_wise_component": { + "defaultMessage": "RagWise Auto Forum Response" + }, + "course.componentTitles.course_scholaistic_component": { + "defaultMessage": "Role-Playing Chatbots & Assessments" + }, + "course.componentTitles.course_settings_component": { + "defaultMessage": "Settings" + }, + "course.componentTitles.course_statistics_component": { + "defaultMessage": "Statistics" + }, + "course.componentTitles.course_stories_component": { + "defaultMessage": "Stories" + }, "course.componentTitles.course_survey_component": { "defaultMessage": "Surveys" }, @@ -4227,9 +4278,57 @@ "course.courses.Sidebar.administration": { "defaultMessage": "Administration" }, + "course.courses.SidebarItem.admin.duplication": { + "defaultMessage": "Duplicate Data" + }, + "course.courses.SidebarItem.admin.multipleReferenceTimelines": { + "defaultMessage": "Timeline Designer" + }, + "course.courses.SidebarItem.admin.plagiarism": { + "defaultMessage": "Plagiarism Check" + }, + "course.courses.SidebarItem.admin.scholaistic.assistants": { + "defaultMessage": "Assistants" + }, + "course.courses.SidebarItem.admin.settings": { + "defaultMessage": "Course Settings" + }, + "course.courses.SidebarItem.admin.settings.components": { + "defaultMessage": "Components" + }, + "course.courses.SidebarItem.admin.settings.general": { + "defaultMessage": "General" + }, + "course.courses.SidebarItem.admin.settings.notifications": { + "defaultMessage": "Email" + }, + "course.courses.SidebarItem.admin.settings.sidebar": { + "defaultMessage": "Sidebar" + }, + "course.courses.SidebarItem.admin.users.manageUsers": { + "defaultMessage": "Manage Users" + }, + "course.courses.SidebarItem.assessmentSkills": { + "defaultMessage": "Skills" + }, + "course.courses.SidebarItem.assessmentSubmissions": { + "defaultMessage": "Submissions" + }, + "course.courses.SidebarItem.discussionTopics": { + "defaultMessage": "Comments" + }, + "course.courses.SidebarItem.experiencePoints": { + "defaultMessage": "Experience Points" + }, "course.courses.SidebarItem.home": { "defaultMessage": "Home" }, + "course.courses.SidebarItem.stories.learn": { + "defaultMessage": "Learn" + }, + "course.courses.SidebarItem.stories.missionControl": { + "defaultMessage": "Mission Control" + }, "course.courses.TodoIgnoreButton.ignore.ignoreButtonText": { "defaultMessage": "Ignore" }, diff --git a/client/locales/ko.json b/client/locales/ko.json index e2c59931ba1..88bbe031e26 100644 --- a/client/locales/ko.json +++ b/client/locales/ko.json @@ -4007,7 +4007,7 @@ "course.asssessment.submission.submitNoQuestionExplain": { "defaultMessage": "완료로 표시하시겠습니까?" }, - "course.component": { + "course.admin.NotificationSettings.component": { "defaultMessage": "구성 요소" }, "course.componentTitles.course_achievements_component": { @@ -4019,15 +4019,66 @@ "course.componentTitles.course_assessments_component": { "defaultMessage": "평가" }, + "course.componentTitles.course_codaveri_component": { + "defaultMessage": "Codaveri 평가 및 피드백" + }, + "course.componentTitles.course_discussion_topics_component": { + "defaultMessage": "댓글 센터" + }, + "course.componentTitles.course_duplication_component": { + "defaultMessage": "복제" + }, + "course.componentTitles.course_experience_points_component": { + "defaultMessage": "경험치" + }, "course.componentTitles.course_forums_component": { "defaultMessage": "포럼" }, + "course.componentTitles.course_groups_component": { + "defaultMessage": "그룹" + }, + "course.componentTitles.course_koditsu_platform_component": { + "defaultMessage": "Koditsu 시험" + }, + "course.componentTitles.course_leaderboard_component": { + "defaultMessage": "리더보드" + }, + "course.componentTitles.course_learning_map_component": { + "defaultMessage": "학습 지도" + }, + "course.componentTitles.course_lesson_plan_component": { + "defaultMessage": "수업 계획" + }, "course.componentTitles.course_levels_component": { "defaultMessage": "레벨" }, "course.componentTitles.course_materials_component": { "defaultMessage": "자료" }, + "course.componentTitles.course_monitoring_component": { + "defaultMessage": "시험 모니터링" + }, + "course.componentTitles.course_multiple_reference_timelines_component": { + "defaultMessage": "다중 참조 타임라인" + }, + "course.componentTitles.course_plagiarism_component": { + "defaultMessage": "SSID 표절 검사" + }, + "course.componentTitles.course_rag_wise_component": { + "defaultMessage": "RagWise 자동 포럼 응답" + }, + "course.componentTitles.course_scholaistic_component": { + "defaultMessage": "롤플레잉 챗봇 및 평가" + }, + "course.componentTitles.course_settings_component": { + "defaultMessage": "설정" + }, + "course.componentTitles.course_statistics_component": { + "defaultMessage": "통계" + }, + "course.componentTitles.course_stories_component": { + "defaultMessage": "이야기" + }, "course.componentTitles.course_survey_component": { "defaultMessage": "설문조사" }, @@ -4208,9 +4259,57 @@ "course.courses.Sidebar.administration": { "defaultMessage": "관리" }, + "course.courses.SidebarItem.admin.duplication": { + "defaultMessage": "데이터 복제" + }, + "course.courses.SidebarItem.admin.multipleReferenceTimelines": { + "defaultMessage": "타임라인 디자이너" + }, + "course.courses.SidebarItem.admin.plagiarism": { + "defaultMessage": "SSID 표절 검사" + }, + "course.courses.SidebarItem.admin.scholaistic.assistants": { + "defaultMessage": "학습 조수" + }, + "course.courses.SidebarItem.admin.settings": { + "defaultMessage": "코스 설정" + }, + "course.courses.SidebarItem.admin.settings.components": { + "defaultMessage": "구성 요소" + }, + "course.courses.SidebarItem.admin.settings.general": { + "defaultMessage": "일반" + }, + "course.courses.SidebarItem.admin.settings.notifications": { + "defaultMessage": "이메일" + }, + "course.courses.SidebarItem.admin.settings.sidebar": { + "defaultMessage": "사이드바" + }, + "course.courses.SidebarItem.admin.users.manageUsers": { + "defaultMessage": "사용자 관리" + }, + "course.courses.SidebarItem.assessmentSkills": { + "defaultMessage": "기술" + }, + "course.courses.SidebarItem.assessmentSubmissions": { + "defaultMessage": "제출물" + }, + "course.courses.SidebarItem.discussionTopics": { + "defaultMessage": "댓글 센터" + }, + "course.courses.SidebarItem.experiencePoints": { + "defaultMessage": "경험치" + }, "course.courses.SidebarItem.home": { "defaultMessage": "홈" }, + "course.courses.SidebarItem.stories.learn": { + "defaultMessage": "배우기" + }, + "course.courses.SidebarItem.stories.missionControl": { + "defaultMessage": "미션 컨트롤" + }, "course.courses.TodoIgnoreButton.ignore.ignoreButtonText": { "defaultMessage": "무시" }, diff --git a/client/locales/zh.json b/client/locales/zh.json index 08846a7363e..064501d8acd 100644 --- a/client/locales/zh.json +++ b/client/locales/zh.json @@ -4001,7 +4001,7 @@ "course.asssessment.submission.submitNoQuestionExplain": { "defaultMessage": "标记为完成?" }, - "course.component": { + "course.admin.NotificationSettings.component": { "defaultMessage": "组件" }, "course.componentTitles.course_achievements_component": { @@ -4013,15 +4013,66 @@ "course.componentTitles.course_assessments_component": { "defaultMessage": "测验" }, + "course.componentTitles.course_codaveri_component": { + "defaultMessage": "Codaveri 评估和反馈" + }, + "course.componentTitles.course_discussion_topics_component": { + "defaultMessage": "评论中心" + }, + "course.componentTitles.course_duplication_component": { + "defaultMessage": "复制" + }, + "course.componentTitles.course_experience_points_component": { + "defaultMessage": "经验值" + }, "course.componentTitles.course_forums_component": { "defaultMessage": "论坛" }, + "course.componentTitles.course_groups_component": { + "defaultMessage": "组" + }, + "course.componentTitles.course_koditsu_platform_component": { + "defaultMessage": "Koditsu 考试" + }, + "course.componentTitles.course_leaderboard_component": { + "defaultMessage": "排行榜" + }, + "course.componentTitles.course_learning_map_component": { + "defaultMessage": "学习路线" + }, + "course.componentTitles.course_lesson_plan_component": { + "defaultMessage": "课程计划" + }, "course.componentTitles.course_levels_component": { "defaultMessage": "等级" }, "course.componentTitles.course_materials_component": { "defaultMessage": "材料" }, + "course.componentTitles.course_monitoring_component": { + "defaultMessage": "监听" + }, + "course.componentTitles.course_multiple_reference_timelines_component": { + "defaultMessage": "多重参考时间线" + }, + "course.componentTitles.course_plagiarism_component": { + "defaultMessage": "SSID 抄袭检查" + }, + "course.componentTitles.course_rag_wise_component": { + "defaultMessage": "RagWise 自动论坛回复" + }, + "course.componentTitles.course_scholaistic_component": { + "defaultMessage": "角色扮演聊天机器人和评估" + }, + "course.componentTitles.course_settings_component": { + "defaultMessage": "设置" + }, + "course.componentTitles.course_statistics_component": { + "defaultMessage": "统计" + }, + "course.componentTitles.course_stories_component": { + "defaultMessage": "故事" + }, "course.componentTitles.course_survey_component": { "defaultMessage": "调查" }, @@ -4202,9 +4253,57 @@ "course.courses.Sidebar.administration": { "defaultMessage": "课程管理" }, + "course.courses.SidebarItem.admin.duplication": { + "defaultMessage": "复制数据" + }, + "course.courses.SidebarItem.admin.multipleReferenceTimelines": { + "defaultMessage": "时间线设计工具" + }, + "course.courses.SidebarItem.admin.plagiarism": { + "defaultMessage": "SSID 抄袭检查" + }, + "course.courses.SidebarItem.admin.scholaistic.assistants": { + "defaultMessage": "学习助手" + }, + "course.courses.SidebarItem.admin.settings": { + "defaultMessage": "课程设置" + }, + "course.courses.SidebarItem.admin.settings.components": { + "defaultMessage": "功能组件" + }, + "course.courses.SidebarItem.admin.settings.general": { + "defaultMessage": "通用" + }, + "course.courses.SidebarItem.admin.settings.notifications": { + "defaultMessage": "邮箱" + }, + "course.courses.SidebarItem.admin.settings.sidebar": { + "defaultMessage": "侧边栏" + }, + "course.courses.SidebarItem.admin.users.manageUsers": { + "defaultMessage": "管理用户" + }, + "course.courses.SidebarItem.assessmentSkills": { + "defaultMessage": "技能" + }, + "course.courses.SidebarItem.assessmentSubmissions": { + "defaultMessage": "提交" + }, + "course.courses.SidebarItem.discussionTopics": { + "defaultMessage": "评论中心" + }, + "course.courses.SidebarItem.experiencePoints": { + "defaultMessage": "经验值" + }, "course.courses.SidebarItem.home": { "defaultMessage": "主页" }, + "course.courses.SidebarItem.stories.learn": { + "defaultMessage": "学习" + }, + "course.courses.SidebarItem.stories.missionControl": { + "defaultMessage": "任务控制" + }, "course.courses.TodoIgnoreButton.ignore.ignoreButtonText": { "defaultMessage": "忽视" }, diff --git a/config/locales/en/activerecord/attributes.yml b/config/locales/en/activerecord/attributes.yml new file mode 100644 index 00000000000..f5586333528 --- /dev/null +++ b/config/locales/en/activerecord/attributes.yml @@ -0,0 +1,71 @@ +en: + activerecord: + course/assessment/question: + question_number: 'Question %{index}' + question_with_title: '%{question_number}: %{title}' + attributes: + course: + reference_timelines: 'Reference timelines' + course/assessment/answer: + submitted_at: 'Submitted At' + grade: 'Grade' + grader: 'Grader' + graded_at: 'Graded At' + course/assessment/category: + weight: 'Order' + course/assessment/category/title: + default: 'Assessments' + course/assessment/question: + weight: 'Order' + course/assessment/submission: + grade: 'Total Grade' + status: 'Status' + submitted_at: :'activerecord.attributes.course/assessment/answer.submitted_at' + grader: :'activerecord.attributes.course/assessment/answer.grader' + graded_at: :'activerecord.attributes.course/assessment/answer.graded_at' + attempting: 'Attempting' + submitted: 'Submitted' + graded: 'Graded, unpublished' + published: 'Graded' + course/assessment/tab: + weight: 'Order' + course/assessment/tab/title: + default: 'Default' + course/condition/assessment/title: + minimum_score: 'Score at least %{minimum_grade_percentage} for %{assessment_title}' + complete: 'Complete %{assessment_title}' + course/condition/level/title: + title: 'Level %{value}' + course/condition/scholaistic_assessment/title: + complete: 'Complete %{title}' + course/condition/survey/title: + complete: 'Complete %{survey_title}' + course/condition/video/title: + complete: 'Watch %{video_title}' + course/discussion/post: + title_reply_template: 'Re: %{title}' + course/experience_points_record: + points_awarded: 'EXP Awarded' + course/forum/topic/topic_type: + normal: 'Normal' + announcement: 'Announcement' + question: 'Question' + sticky: 'Sticky' + course/group_user: + manager: 'Tutor' + course/lesson_plan/item: + base_exp: 'Experience Points' + time_bonus_exp: 'Bonus Experience Points' + reference_times: 'Reference times' + course/video/tab: + weight: 'Order' + course/video/tab/title: + default: 'Default' + models: + course/assessment/question/rubric_based_response: + rubric_based_response: 'Rubric Based Response Question' + course/assessment/question/text_response: + text_response: 'Text Response Question' + file_upload: 'File Upload Question' + comprehension: 'Comprehension Question' + diff --git a/config/locales/en/activerecord/course.yml b/config/locales/en/activerecord/course.yml deleted file mode 100644 index de59c22b12f..00000000000 --- a/config/locales/en/activerecord/course.yml +++ /dev/null @@ -1,11 +0,0 @@ -en: - activerecord: - attributes: - course: - reference_timelines: 'Reference timelines' - errors: - models: - course: - attributes: - reference_timelines: - must_have_at_most_one_default: 'must have at most one default' diff --git a/config/locales/en/activerecord/course/announcement.yml b/config/locales/en/activerecord/course/announcement.yml deleted file mode 100644 index 9e7e5d69876..00000000000 --- a/config/locales/en/activerecord/course/announcement.yml +++ /dev/null @@ -1,8 +0,0 @@ -en: - activerecord: - errors: - models: - course/announcement: - attributes: - end_at: - cannot_be_before_start_at: 'cannot be before start at' diff --git a/config/locales/en/activerecord/course/assessment.yml b/config/locales/en/activerecord/course/assessment.yml deleted file mode 100644 index b0a580617a3..00000000000 --- a/config/locales/en/activerecord/course/assessment.yml +++ /dev/null @@ -1,11 +0,0 @@ -en: - activerecord: - errors: - models: - course/assessment: - attributes: - tab: - not_in_same_course: > - The tab that you have selected is not in the same course as the assessment - no_test_type_chosen: > - At least one type of test case must be selected for grade and exp calculation diff --git a/config/locales/en/activerecord/course/assessment/answer.yml b/config/locales/en/activerecord/course/assessment/answer.yml deleted file mode 100644 index fcff7a422b6..00000000000 --- a/config/locales/en/activerecord/course/assessment/answer.yml +++ /dev/null @@ -1,20 +0,0 @@ -en: - activerecord: - attributes: - course/assessment/answer: - submitted_at: 'Submitted At' - grade: 'Grade' - grader: 'Grader' - graded_at: 'Graded At' - errors: - models: - course/assessment/answer: - attributes: - question: - consistent_assessment: 'must belong to the same assessment' - submission: - attemptable_state: 'must be in the attempting state' - grade: - no_blank_grade: 'Grade must not be empty if it is already graded' - consistent_grade: 'must be less than question maximum grade' - non_negative_grade: 'cannot be negative' diff --git a/config/locales/en/activerecord/course/assessment/answer/programming.yml b/config/locales/en/activerecord/course/assessment/answer/programming.yml deleted file mode 100644 index db5c897bad2..00000000000 --- a/config/locales/en/activerecord/course/assessment/answer/programming.yml +++ /dev/null @@ -1,8 +0,0 @@ -en: - activerecord: - errors: - models: - course/assessment/answer/programming: - attributes: - files: - exceed_size_limit: 'Your answer (%{total_size_mb} MB) must be less than 2 MB.' diff --git a/config/locales/en/activerecord/course/assessment/answer/text_response.yml b/config/locales/en/activerecord/course/assessment/answer/text_response.yml deleted file mode 100644 index b894a672e4c..00000000000 --- a/config/locales/en/activerecord/course/assessment/answer/text_response.yml +++ /dev/null @@ -1,8 +0,0 @@ -en: - activerecord: - errors: - models: - course/assessment/answer/text_response: - attributes: - attachments: - unique: 'File names must be unique' diff --git a/config/locales/en/activerecord/course/assessment/category.yml b/config/locales/en/activerecord/course/assessment/category.yml deleted file mode 100644 index 31179088ab5..00000000000 --- a/config/locales/en/activerecord/course/assessment/category.yml +++ /dev/null @@ -1,11 +0,0 @@ -en: - activerecord: - attributes: - course/assessment/category/title: - default: :'course.assessment.assessments.index.header' - course/assessment/category: - weight: 'Order' - errors: - models: - course/assessment/category: - deletion: 'the last category cannot be deleted' diff --git a/config/locales/en/activerecord/course/assessment/question.yml b/config/locales/en/activerecord/course/assessment/question.yml deleted file mode 100644 index 738c29bf627..00000000000 --- a/config/locales/en/activerecord/course/assessment/question.yml +++ /dev/null @@ -1,8 +0,0 @@ -en: - activerecord: - course/assessment/question: - question_number: 'Question %{index}' - question_with_title: '%{question_number}: %{title}' - attributes: - course/assessment/question: - weight: 'Order' diff --git a/config/locales/en/activerecord/course/assessment/question/multiple_response.yml b/config/locales/en/activerecord/course/assessment/question/multiple_response.yml deleted file mode 100644 index 59b4106b199..00000000000 --- a/config/locales/en/activerecord/course/assessment/question/multiple_response.yml +++ /dev/null @@ -1,9 +0,0 @@ -en: - activerecord: - errors: - models: - course/assessment/question/multiple_response: - attributes: - options: - no_option: 'must contain at least one option.' - no_correct_option: 'must contain at least one correct option.' diff --git a/config/locales/en/activerecord/course/assessment/question/rubric_based_response.yml b/config/locales/en/activerecord/course/assessment/question/rubric_based_response.yml deleted file mode 100644 index d756d478d6d..00000000000 --- a/config/locales/en/activerecord/course/assessment/question/rubric_based_response.yml +++ /dev/null @@ -1,21 +0,0 @@ -en: - activerecord: - attributes: - models: - course/assessment/question/rubric_based_response: - rubric_based_response: 'Rubric Based Response Question' - errors: - models: - 'course/assessment/question/rubric_based_response': - attributes: - categories: - reserved_category_name: 'Moderation is a reserved category name, and hence cannot be used' - duplicate_category_names: 'Category names must be unique within the question rubric' - at_least_one_category: 'At least one rubric category is required' - 'course/assessment/question/rubric_based_response_category': - attributes: - criterions: - duplicate_grades_within_category: 'Grade must be unique within the category' - at_least_one_grade: 'At least one grade is required within each category' - grade_zero_missing: 'Grade 0 must be present for each category' - grade_higher_than_maximum_grade: 'Grade must be less than or equal to the maximum grade' diff --git a/config/locales/en/activerecord/course/assessment/question/text_response.yml b/config/locales/en/activerecord/course/assessment/question/text_response.yml deleted file mode 100644 index ff944b5a542..00000000000 --- a/config/locales/en/activerecord/course/assessment/question/text_response.yml +++ /dev/null @@ -1,15 +0,0 @@ -en: - activerecord: - attributes: - models: - course/assessment/question/text_response: - text_response: 'Text Response Question' - file_upload: 'File Upload Question' - comprehension: 'Comprehension Question' - errors: - models: - course/assessment/question/text_response: - attributes: - maximum_grade: - invalid_grade: 'must be no less than the grade of any solution' - diff --git a/config/locales/en/activerecord/course/assessment/question/text_response_comprehension_group.yml b/config/locales/en/activerecord/course/assessment/question/text_response_comprehension_group.yml deleted file mode 100644 index cdb8dc49103..00000000000 --- a/config/locales/en/activerecord/course/assessment/question/text_response_comprehension_group.yml +++ /dev/null @@ -1,8 +0,0 @@ -en: - activerecord: - errors: - models: - course/assessment/question/text_response_comprehension_group: - attributes: - maximum_group_grade: - invalid_group_grade: 'must be no more than the maximum grade of the question' diff --git a/config/locales/en/activerecord/course/assessment/question/text_response_comprehension_point.yml b/config/locales/en/activerecord/course/assessment/question/text_response_comprehension_point.yml deleted file mode 100644 index 98e2c17b5ac..00000000000 --- a/config/locales/en/activerecord/course/assessment/question/text_response_comprehension_point.yml +++ /dev/null @@ -1,10 +0,0 @@ -en: - activerecord: - errors: - models: - course/assessment/question/text_response_comprehension_point: - attributes: - point_grade: - invalid_point_grade: 'must be no more than the maximum grade of the group' - solutions: - more_than_one_compre_lifted_word_solution: 'all lifted words for a same point are to be placed together in one row' diff --git a/config/locales/en/activerecord/course/assessment/question/text_response_comprehension_solution.yml b/config/locales/en/activerecord/course/assessment/question/text_response_comprehension_solution.yml deleted file mode 100644 index 7efae8fe781..00000000000 --- a/config/locales/en/activerecord/course/assessment/question/text_response_comprehension_solution.yml +++ /dev/null @@ -1,10 +0,0 @@ -en: - activerecord: - errors: - models: - course/assessment/question/text_response_comprehension_solution: - attributes: - solution_lemma: - solution_lemma_empty: "couldn't generate any lemma form: please check your spelling" - information: - information_empty: "can't be blank for keyword solution" diff --git a/config/locales/en/activerecord/course/assessment/question/text_response_solution.yml b/config/locales/en/activerecord/course/assessment/question/text_response_solution.yml deleted file mode 100644 index ff20e1f2a9b..00000000000 --- a/config/locales/en/activerecord/course/assessment/question/text_response_solution.yml +++ /dev/null @@ -1,8 +0,0 @@ -en: - activerecord: - errors: - models: - course/assessment/question/text_response_solution: - attributes: - grade: - invalid_grade: 'must be no more than the maximum grade of the question' diff --git a/config/locales/en/activerecord/course/assessment/question_bundle_assignment.yml b/config/locales/en/activerecord/course/assessment/question_bundle_assignment.yml deleted file mode 100644 index c32f609a92a..00000000000 --- a/config/locales/en/activerecord/course/assessment/question_bundle_assignment.yml +++ /dev/null @@ -1,8 +0,0 @@ -en: - activerecord: - errors: - models: - course/assessment/question_bundle_assignment: - attributes: - submission: - must_belong_to_assessment_and_user: 'must belong to assessment and user' diff --git a/config/locales/en/activerecord/course/assessment/skill.yml b/config/locales/en/activerecord/course/assessment/skill.yml deleted file mode 100644 index 0fd907b9664..00000000000 --- a/config/locales/en/activerecord/course/assessment/skill.yml +++ /dev/null @@ -1,8 +0,0 @@ -en: - activerecord: - errors: - models: - course/assessment/skill: - attributes: - course: - consistent_course: 'must belong to the same course' diff --git a/config/locales/en/activerecord/course/assessment/submission.yml b/config/locales/en/activerecord/course/assessment/submission.yml deleted file mode 100644 index d87b7df1afb..00000000000 --- a/config/locales/en/activerecord/course/assessment/submission.yml +++ /dev/null @@ -1,27 +0,0 @@ -en: - activerecord: - attributes: - course/assessment/submission: - grade: 'Total Grade' - status: 'Status' - submitted_at: :'activerecord.attributes.course/assessment/answer.submitted_at' - grader: :'activerecord.attributes.course/assessment/answer.grader' - graded_at: :'activerecord.attributes.course/assessment/answer.graded_at' - attempting: 'Attempting' - submitted: 'Submitted' - graded: 'Graded, unpublished' - published: 'Graded' - errors: - models: - course/assessment/submission: - attributes: - experience_points_record: - inconsistent_user: 'creator must be the same as the course user record' - absent_award_attributes: > - there is no award attributes for your submission, please try again - or contact the Coursemology team - submission_already_exists: 'Looks like you have already created a submission. Try again?' - no_bundles_assigned: 'There are no question bundles assigned for you. Contact your instructor for assistance.' - autograded_no_partial_answer: 'There are updated answers which have not been re-submitted yet. Please re-submit all answers before finalising your submission.' - course/assessment/category: - deletion: 'the last category cannot be deleted' diff --git a/config/locales/en/activerecord/course/assessment/tab.yml b/config/locales/en/activerecord/course/assessment/tab.yml deleted file mode 100644 index 22201d41240..00000000000 --- a/config/locales/en/activerecord/course/assessment/tab.yml +++ /dev/null @@ -1,11 +0,0 @@ -en: - activerecord: - attributes: - course/assessment/tab/title: - default: 'Default' - course/assessment/tab: - weight: 'Order' - errors: - models: - course/assessment/tab: - deletion: 'the last tab cannot be deleted' diff --git a/config/locales/en/activerecord/course/condition/achievement.yml b/config/locales/en/activerecord/course/condition/achievement.yml deleted file mode 100644 index 4f7000d9af2..00000000000 --- a/config/locales/en/activerecord/course/condition/achievement.yml +++ /dev/null @@ -1,10 +0,0 @@ -en: - activerecord: - errors: - models: - course/condition/achievement: - attributes: - achievement: - unique_dependency: 'cannot have duplicate conditions' - references_self: 'cannot have itself as a condition' - cyclic_dependency: 'cannot have cyclic dependency' diff --git a/config/locales/en/activerecord/course/condition/assessment.yml b/config/locales/en/activerecord/course/condition/assessment.yml deleted file mode 100644 index 301aa1370e9..00000000000 --- a/config/locales/en/activerecord/course/condition/assessment.yml +++ /dev/null @@ -1,14 +0,0 @@ -en: - activerecord: - attributes: - course/condition/assessment/title: - minimum_score: 'Score at least %{minimum_grade_percentage} for %{assessment_title}' - complete: 'Complete %{assessment_title}' - errors: - models: - course/condition/assessment: - attributes: - assessment: - unique_dependency: 'cannot have duplicate conditions' - references_self: 'cannot have itself as condition' - cyclic_dependency: 'cannot have cyclic dependency' diff --git a/config/locales/en/activerecord/course/condition/condition.yml b/config/locales/en/activerecord/course/condition/condition.yml deleted file mode 100644 index bd8128b4049..00000000000 --- a/config/locales/en/activerecord/course/condition/condition.yml +++ /dev/null @@ -1,9 +0,0 @@ -en: - activerecord: - errors: - models: - course/condition: - attributes: - conditional: - not_in_same_course: > - The conditional that you have selected is not in the same course as the current condition diff --git a/config/locales/en/activerecord/course/condition/level.yml b/config/locales/en/activerecord/course/condition/level.yml deleted file mode 100644 index e4116a61cb5..00000000000 --- a/config/locales/en/activerecord/course/condition/level.yml +++ /dev/null @@ -1,5 +0,0 @@ -en: - activerecord: - attributes: - course/condition/level/title: - title: 'Level %{value}' diff --git a/config/locales/en/activerecord/course/condition/scholaistic_assessment.yml b/config/locales/en/activerecord/course/condition/scholaistic_assessment.yml deleted file mode 100644 index 5fcfcfb4e04..00000000000 --- a/config/locales/en/activerecord/course/condition/scholaistic_assessment.yml +++ /dev/null @@ -1,12 +0,0 @@ -en: - activerecord: - attributes: - course/condition/scholaistic_assessment/title: - complete: 'Complete %{title}' - errors: - models: - course/condition/scholaistic_assessment: - attributes: - scholaistic_assessment: - unique_dependency: 'cannot have duplicate conditions' - references_self: 'cannot have itself as condition' diff --git a/config/locales/en/activerecord/course/condition/survey.yml b/config/locales/en/activerecord/course/condition/survey.yml deleted file mode 100644 index 7a79cfc4e44..00000000000 --- a/config/locales/en/activerecord/course/condition/survey.yml +++ /dev/null @@ -1,13 +0,0 @@ -en: - activerecord: - attributes: - course/condition/survey/title: - complete: 'Complete %{survey_title}' - errors: - models: - course/condition/survey: - attributes: - survey: - unique_dependency: 'cannot have duplicate conditions' - references_self: 'cannot have itself as condition' - cyclic_dependency: 'cannot have cyclic dependency' diff --git a/config/locales/en/activerecord/course/condition/video.yml b/config/locales/en/activerecord/course/condition/video.yml deleted file mode 100644 index a7365c5409b..00000000000 --- a/config/locales/en/activerecord/course/condition/video.yml +++ /dev/null @@ -1,13 +0,0 @@ -en: - activerecord: - attributes: - course/condition/video/title: - complete: 'Watch %{video_title}' - errors: - models: - course/condition/video: - attributes: - video: - unique_dependency: 'cannot have duplicate conditions' - references_self: 'cannot have itself as condition' - cyclic_dependency: 'cannot have cyclic dependency' diff --git a/config/locales/en/activerecord/course/discussion/post.yml b/config/locales/en/activerecord/course/discussion/post.yml deleted file mode 100644 index a2f3d2fe8ce..00000000000 --- a/config/locales/en/activerecord/course/discussion/post.yml +++ /dev/null @@ -1,11 +0,0 @@ -en: - activerecord: - attributes: - course/discussion/post: - title_reply_template: 'Re: %{title}' - errors: - models: - course/discussion/post: - attributes: - post: - topic_inconsistent: 'The post and its parent post reference a different topic.' diff --git a/config/locales/en/activerecord/course/enrol_request.yml b/config/locales/en/activerecord/course/enrol_request.yml deleted file mode 100644 index 21c8a1138ce..00000000000 --- a/config/locales/en/activerecord/course/enrol_request.yml +++ /dev/null @@ -1,14 +0,0 @@ -en: - activerecord: - errors: - models: - course/enrol_request: - user_in_course: > - It seems like you are already enrolled in the course. - Please try refreshing the page? - existing_pending_request: > - It seems like you have already submitted an enrolment request. - attributes: - base: - deletion: > - Unable to cancel your enrolment request as it has been processed. diff --git a/config/locales/en/activerecord/course/experience_points_record.yml b/config/locales/en/activerecord/course/experience_points_record.yml deleted file mode 100644 index 302b6560690..00000000000 --- a/config/locales/en/activerecord/course/experience_points_record.yml +++ /dev/null @@ -1,5 +0,0 @@ -en: - activerecord: - attributes: - course/experience_points_record: - points_awarded: 'EXP Awarded' diff --git a/config/locales/en/activerecord/course/forum/topic.yml b/config/locales/en/activerecord/course/forum/topic.yml deleted file mode 100644 index 3051e2c033a..00000000000 --- a/config/locales/en/activerecord/course/forum/topic.yml +++ /dev/null @@ -1,8 +0,0 @@ -en: - activerecord: - attributes: - course/forum/topic/topic_type: - normal: 'Normal' - announcement: 'Announcement' - question: 'Question' - sticky: 'Sticky' diff --git a/config/locales/en/activerecord/course/group_user.yml b/config/locales/en/activerecord/course/group_user.yml deleted file mode 100644 index d8ba2bb9b0c..00000000000 --- a/config/locales/en/activerecord/course/group_user.yml +++ /dev/null @@ -1,9 +0,0 @@ -en: - activerecord: - errors: - models: - course/group_user: - not_enrolled: 'must be enrolled in same course as group' - attributes: - course/group_user: - manager: 'Tutor' diff --git a/config/locales/en/activerecord/course/learning_rate_record.yml b/config/locales/en/activerecord/course/learning_rate_record.yml deleted file mode 100644 index 315067b7d7b..00000000000 --- a/config/locales/en/activerecord/course/learning_rate_record.yml +++ /dev/null @@ -1,9 +0,0 @@ -en: - activerecord: - errors: - models: - course/learning_rate_record: - attributes: - learning_rate: - less_than_min: 'is not >= effective_min' - greater_than_max: 'is not <= effective_max' diff --git a/config/locales/en/activerecord/course/lesson_plan.yml b/config/locales/en/activerecord/course/lesson_plan.yml deleted file mode 100644 index 9dbaa132e65..00000000000 --- a/config/locales/en/activerecord/course/lesson_plan.yml +++ /dev/null @@ -1,12 +0,0 @@ -en: - activerecord: - errors: - models: - course/lesson_plan/item: - attributes: - bonus_end_at: - required: 'cannot be blank if time bonus exp is set' - attributes: - course/lesson_plan/item: - base_exp: 'Experience Points' - time_bonus_exp: 'Bonus Experience Points' diff --git a/config/locales/en/activerecord/course/monitoring/heartbeat.yml b/config/locales/en/activerecord/course/monitoring/heartbeat.yml deleted file mode 100644 index 6d82cb59cbe..00000000000 --- a/config/locales/en/activerecord/course/monitoring/heartbeat.yml +++ /dev/null @@ -1,8 +0,0 @@ -en: - activerecord: - errors: - models: - course/monitoring/heartbeat: - attributes: - seb_payload: - invalid_seb_payload: 'seb payload must be either blank or a valid json object' diff --git a/config/locales/en/activerecord/course/monitoring/monitor.yml b/config/locales/en/activerecord/course/monitoring/monitor.yml deleted file mode 100644 index cfac223ccd7..00000000000 --- a/config/locales/en/activerecord/course/monitoring/monitor.yml +++ /dev/null @@ -1,14 +0,0 @@ -en: - activerecord: - errors: - models: - course/monitoring/monitor: - attributes: - enabled: - must_be_password_protected: 'assessment must be password protected to enable' - max_interval_ms: - greater_than_min_interval: 'must be greater than min interval' - blocks: - must_have_browser_authorization_and_session_protection: 'must have browser authorization and session protection enabled' - seb_config_key: - required_if_using_seb_config_key_browser_authorization: 'must have seb config key if using seb config key browser authorization method' diff --git a/config/locales/en/activerecord/course/personal_time.yml b/config/locales/en/activerecord/course/personal_time.yml deleted file mode 100644 index 8053925078c..00000000000 --- a/config/locales/en/activerecord/course/personal_time.yml +++ /dev/null @@ -1,8 +0,0 @@ -en: - activerecord: - errors: - models: - course/personal_time: - attributes: - start_at: - cannot_be_after_end_at: 'cannot be after end at' diff --git a/config/locales/en/activerecord/course/reference_time.yml b/config/locales/en/activerecord/course/reference_time.yml deleted file mode 100644 index 8a37008e908..00000000000 --- a/config/locales/en/activerecord/course/reference_time.yml +++ /dev/null @@ -1,12 +0,0 @@ -en: - activerecord: - errors: - models: - course/reference_time: - attributes: - reference_timeline: - cannot_destroy_in_default_timeline: 'cannot delete times in default reference timeline' - start_at: - cannot_be_after_end_at: 'cannot be after end at' - lesson_plan_item: - must_be_in_same_course: 'must be in the same course as the reference timeline' diff --git a/config/locales/en/activerecord/course/reference_timeline.yml b/config/locales/en/activerecord/course/reference_timeline.yml deleted file mode 100644 index b93c00a20db..00000000000 --- a/config/locales/en/activerecord/course/reference_timeline.yml +++ /dev/null @@ -1,9 +0,0 @@ -en: - activerecord: - errors: - models: - course/reference_timeline: - attributes: - default: - taken: 'can only have one default reference timeline' - cannot_destroy: 'cannot delete default reference timeline' diff --git a/config/locales/en/activerecord/course/scholaistic_assessment.yml b/config/locales/en/activerecord/course/scholaistic_assessment.yml deleted file mode 100644 index b7094211428..00000000000 --- a/config/locales/en/activerecord/course/scholaistic_assessment.yml +++ /dev/null @@ -1,8 +0,0 @@ -en: - activerecord: - errors: - models: - course/scholaistic_assessment: - attributes: - time_bonus_exp: - bonus_attributes_not_allowed: 'bonus attributes are not allowed' diff --git a/config/locales/en/activerecord/course/survey/answer.yml b/config/locales/en/activerecord/course/survey/answer.yml deleted file mode 100644 index c1550a39fba..00000000000 --- a/config/locales/en/activerecord/course/survey/answer.yml +++ /dev/null @@ -1,6 +0,0 @@ -en: - activerecord: - errors: - models: - course/survey/answer: - cannot_be_empty: 'The answer to this question must not be empty.' diff --git a/config/locales/en/activerecord/course/user_achievement.yml b/config/locales/en/activerecord/course/user_achievement.yml deleted file mode 100644 index cdfb66cf459..00000000000 --- a/config/locales/en/activerecord/course/user_achievement.yml +++ /dev/null @@ -1,8 +0,0 @@ -en: - activerecord: - errors: - models: - course/user_achievement: - attributes: - course_user: - not_in_course: 'Selected user is not in specified course' diff --git a/config/locales/en/activerecord/course/user_invitation.yml b/config/locales/en/activerecord/course/user_invitation.yml deleted file mode 100644 index 0a5023db5d5..00000000000 --- a/config/locales/en/activerecord/course/user_invitation.yml +++ /dev/null @@ -1,6 +0,0 @@ -en: - activerecord: - errors: - models: - course/user_invitation: - existing_invitation: 'an open invitation exists for this email address' diff --git a/config/locales/en/activerecord/course/video.yml b/config/locales/en/activerecord/course/video.yml deleted file mode 100644 index a05a87b73a6..00000000000 --- a/config/locales/en/activerecord/course/video.yml +++ /dev/null @@ -1,9 +0,0 @@ -en: - activerecord: - errors: - models: - course/video: - attributes: - url: - invalid_url: > - The URL you entered is not of the correct format, please try again. diff --git a/config/locales/en/activerecord/course/video/session.yml b/config/locales/en/activerecord/course/video/session.yml deleted file mode 100644 index 387a82a246f..00000000000 --- a/config/locales/en/activerecord/course/video/session.yml +++ /dev/null @@ -1,8 +0,0 @@ -en: - activerecord: - errors: - models: - course/video/session: - attributes: - session_start: - cannot_be_after_session_end: 'Session cannot start after ending' diff --git a/config/locales/en/activerecord/course/video/submission.yml b/config/locales/en/activerecord/course/video/submission.yml deleted file mode 100644 index afcbb1722e5..00000000000 --- a/config/locales/en/activerecord/course/video/submission.yml +++ /dev/null @@ -1,9 +0,0 @@ -en: - activerecord: - errors: - models: - course/video/submission: - attributes: - experience_points_record: - inconsistent_user: 'creator must be the same as the course user record' - submission_already_exists: 'Looks like you have already created a submission. Try again?' diff --git a/config/locales/en/activerecord/course/video/tab.yml b/config/locales/en/activerecord/course/video/tab.yml deleted file mode 100644 index 343b90a7820..00000000000 --- a/config/locales/en/activerecord/course/video/tab.yml +++ /dev/null @@ -1,11 +0,0 @@ -en: - activerecord: - attributes: - course/video/tab/title: - default: 'Default' - course/video/tab: - weight: 'Order' - errors: - models: - course/video/tab: - deletion: 'The last tab cannot be deleted' diff --git a/config/locales/en/activerecord/course_user.yml b/config/locales/en/activerecord/course_user.yml deleted file mode 100644 index bb6af74a5e6..00000000000 --- a/config/locales/en/activerecord/course_user.yml +++ /dev/null @@ -1,8 +0,0 @@ -en: - activerecord: - errors: - models: - course_user: - attributes: - reference_timeline: - belongs_to_course: 'must belong to course' diff --git a/config/locales/en/activerecord/duplication_traceable.yml b/config/locales/en/activerecord/duplication_traceable.yml deleted file mode 100644 index 32ac131a646..00000000000 --- a/config/locales/en/activerecord/duplication_traceable.yml +++ /dev/null @@ -1,8 +0,0 @@ -en: - activerecord: - errors: - models: - duplication_traceable: - attributes: - source_id: - must_exist: 'the source must exist and be an instance of the dependent_class' diff --git a/config/locales/en/activerecord/errors.yml b/config/locales/en/activerecord/errors.yml new file mode 100644 index 00000000000..cb30644cca7 --- /dev/null +++ b/config/locales/en/activerecord/errors.yml @@ -0,0 +1,237 @@ +en: + activerecord: + errors: + models: + course: + attributes: + reference_timelines: + must_have_at_most_one_default: 'must have at most one default' + course/announcement: + attributes: + end_at: + cannot_be_before_start_at: 'cannot be before start at' + course/assessment: + attributes: + no_test_type_chosen: 'At least one type of test case must be selected for grade and exp calculation' + tab: + not_in_same_course: 'The tab that you have selected is not in the same course as the assessment' + course/assessment/answer: + attributes: + question: + consistent_assessment: 'must belong to the same assessment' + submission: + attemptable_state: 'must be in the attempting state' + grade: + no_blank_grade: 'Grade must not be empty if it is already graded' + consistent_grade: 'must be less than question maximum grade' + non_negative_grade: 'cannot be negative' + course/assessment/answer/programming: + attributes: + files: + exceed_size_limit: 'Your answer (%{total_size_mb} MB) must be less than 2 MB.' + course/assessment/answer/text_response: + attributes: + attachments: + unique: 'File names must be unique' + course/assessment/category: + deletion: 'the last category cannot be deleted' + course/assessment/question/multiple_response: + attributes: + options: + no_option: 'must contain at least one option.' + no_correct_option: 'must contain at least one correct option.' + course/assessment/question/rubric_based_response: + attributes: + categories: + reserved_category_name: 'Moderation is a reserved category name, and hence cannot be used' + duplicate_category_names: 'Category names must be unique within the question rubric' + at_least_one_category: 'At least one rubric category is required' + course/assessment/question/rubric_based_response_category: + attributes: + criterions: + duplicate_grades_within_category: 'Grade must be unique within the category' + at_least_one_grade: 'At least one grade is required within each category' + grade_zero_missing: 'Grade 0 must be present for each category' + grade_higher_than_maximum_grade: 'Grade must be less than or equal to the maximum grade' + course/assessment/question/text_response: + attributes: + maximum_grade: + invalid_grade: 'must be no less than the grade of any solution' + course/assessment/question/text_response_comprehension_group: + attributes: + maximum_group_grade: + invalid_group_grade: 'must be no more than the maximum grade of the question' + course/assessment/question/text_response_comprehension_point: + attributes: + point_grade: + invalid_point_grade: 'must be no more than the maximum grade of the group' + solutions: + more_than_one_compre_lifted_word_solution: 'all lifted words for a same point are to be placed together in one row' + course/assessment/question/text_response_comprehension_solution: + attributes: + solution_lemma: + solution_lemma_empty: "couldn't generate any lemma form: please check your spelling" + information: + information_empty: "can't be blank for keyword solution" + course/assessment/question/text_response_solution: + attributes: + grade: + invalid_grade: 'must be no more than the maximum grade of the question' + course/assessment/question_bundle_assignment: + attributes: + submission: + must_belong_to_assessment_and_user: 'must belong to assessment and user' + course/assessment/skill: + attributes: + course: + consistent_course: 'must belong to the same course' + course/assessment/submission: + attributes: + experience_points_record: + inconsistent_user: 'creator must be the same as the course user record' + absent_award_attributes: > + there is no award attributes for your submission, please try again + or contact the Coursemology team + submission_already_exists: 'Looks like you have already created a submission. Try again?' + no_bundles_assigned: 'There are no question bundles assigned for you. Contact your instructor for assistance.' + autograded_no_partial_answer: 'There are updated answers which have not been re-submitted yet. Please re-submit all answers before finalising your submission.' + course/assessment/tab: + deletion: 'the last tab cannot be deleted' + course/condition: + attributes: + conditional: + not_in_same_course: 'The conditional that you have selected is not in the same course as the current condition' + course/condition/achievement: + attributes: + achievement: + unique_dependency: 'cannot have duplicate conditions' + references_self: 'cannot have itself as a condition' + cyclic_dependency: 'cannot have cyclic dependency' + course/condition/assessment: + attributes: + assessment: + unique_dependency: 'cannot have duplicate conditions' + references_self: 'cannot have itself as condition' + cyclic_dependency: 'cannot have cyclic dependency' + course/condition/scholaistic_assessment: + attributes: + scholaistic_assessment: + unique_dependency: 'cannot have duplicate conditions' + references_self: 'cannot have itself as condition' + course/condition/survey: + attributes: + survey: + unique_dependency: 'cannot have duplicate conditions' + references_self: 'cannot have itself as condition' + cyclic_dependency: 'cannot have cyclic dependency' + course/condition/video: + attributes: + video: + unique_dependency: 'cannot have duplicate conditions' + references_self: 'cannot have itself as condition' + cyclic_dependency: 'cannot have cyclic dependency' + course/discussion/post: + attributes: + post: + topic_inconsistent: 'The post and its parent post reference a different topic.' + course/enrol_request: + user_in_course: 'It seems like you are already enrolled in the course. Please try refreshing the page?' + existing_pending_request: 'It seems like you have already submitted an enrolment request.' + attributes: + base: + deletion: 'Unable to cancel your enrolment request as it has been processed.' + course/group_user: + not_enrolled: 'must be enrolled in same course as group' + course/learning_rate_record: + attributes: + learning_rate: + less_than_min: 'is not >= effective_min' + greater_than_max: 'is not <= effective_max' + course/lesson_plan/item: + attributes: + bonus_end_at: + required: 'cannot be blank if time bonus exp is set' + reference_times: + must_have_at_most_one_default: 'must have at most one default' + course/monitoring/heartbeat: + attributes: + seb_payload: + invalid_seb_payload: 'seb payload must be either blank or a valid json object' + course/monitoring/monitor: + attributes: + enabled: + must_be_password_protected: 'assessment must be password protected to enable' + max_interval_ms: + greater_than_min_interval: 'must be greater than min interval' + blocks: + must_have_browser_authorization_and_session_protection: 'must have browser authorization and session protection enabled' + seb_config_key: + required_if_using_seb_config_key_browser_authorization: 'must have seb config key if using seb config key browser authorization method' + course/personal_time: + attributes: + start_at: + cannot_be_after_end_at: 'cannot be after end at' + course/reference_time: + attributes: + reference_timeline: + cannot_destroy_in_default_timeline: 'cannot delete times in default reference timeline' + start_at: + cannot_be_after_end_at: 'cannot be after end at' + lesson_plan_item: + must_be_in_same_course: 'must be in the same course as the reference timeline' + course/reference_timeline: + attributes: + default: + taken: 'can only have one default reference timeline' + cannot_destroy: 'cannot delete default reference timeline' + course/scholaistic_assessment: + attributes: + time_bonus_exp: + bonus_attributes_not_allowed: 'bonus attributes are not allowed' + course/survey/answer: + cannot_be_empty: 'The answer to this question must not be empty.' + course/user_achievement: + attributes: + course_user: + not_in_course: 'Selected user is not in specified course' + course/user_invitation: + existing_invitation: 'an open invitation exists for this email address' + course/video: + attributes: + url: + invalid_url: 'The URL you entered is not of the correct format, please try again.' + course/video/session: + attributes: + session_start: + cannot_be_after_session_end: 'Session cannot start after ending' + course/video/submission: + attributes: + experience_points_record: + inconsistent_user: 'creator must be the same as the course user record' + submission_already_exists: 'Looks like you have already created a submission. Try again?' + course/video/tab: + deletion: 'The last tab cannot be deleted' + course_user: + attributes: + reference_timeline: + belongs_to_course: 'must belong to course' + duplication_traceable: + attributes: + source_id: + must_exist: 'the source must exist and be an instance of the dependent_class' + generic_announcement: + attributes: + end_at: + cannot_be_before_start_at: 'cannot be before start at' + instance/user_role_request: + attributes: + base: + existing_pending_request: > + 'You have an existing role request. Please refresh the page.' + messages: + filename_validator: + invalid_characters: '%{characters} are not allowed.' + tailing_dots: 'tailing dots are not allowed.' + whitespaces: 'leading or tailing whitespaces are not allowed.' + time_zone_validator: + invalid_time_zone: 'The time zone is invalid.' diff --git a/config/locales/en/activerecord/filename_validator.yml b/config/locales/en/activerecord/filename_validator.yml deleted file mode 100644 index 0168da71833..00000000000 --- a/config/locales/en/activerecord/filename_validator.yml +++ /dev/null @@ -1,8 +0,0 @@ -en: - activerecord: - errors: - messages: - filename_validator: - invalid_characters: '%{characters} are not allowed.' - tailing_dots: 'tailing dots are not allowed.' - whitespaces: 'leading or tailing whitespaces are not allowed.' diff --git a/config/locales/en/activerecord/generic_announcement.yml b/config/locales/en/activerecord/generic_announcement.yml deleted file mode 100644 index f410d310d1e..00000000000 --- a/config/locales/en/activerecord/generic_announcement.yml +++ /dev/null @@ -1,8 +0,0 @@ -en: - activerecord: - errors: - models: - generic_announcement: - attributes: - end_at: - cannot_be_before_start_at: 'cannot be before start at' diff --git a/config/locales/en/activerecord/instance.yml b/config/locales/en/activerecord/instance.yml deleted file mode 100644 index 0560cebaee0..00000000000 --- a/config/locales/en/activerecord/instance.yml +++ /dev/null @@ -1,9 +0,0 @@ -en: - activerecord: - errors: - models: - instance/user_role_request: - attributes: - base: - existing_pending_request: > - 'You have an existing role request. Please refresh the page.' diff --git a/config/locales/en/activerecord/time_zone_validator.yml b/config/locales/en/activerecord/time_zone_validator.yml deleted file mode 100644 index 4fd3955b3b0..00000000000 --- a/config/locales/en/activerecord/time_zone_validator.yml +++ /dev/null @@ -1,6 +0,0 @@ -en: - activerecord: - errors: - messages: - time_zone_validator: - invalid_time_zone: 'The time zone is invalid.' diff --git a/config/locales/en/common.yml b/config/locales/en/common.yml deleted file mode 100644 index 15ae976143c..00000000000 --- a/config/locales/en/common.yml +++ /dev/null @@ -1,7 +0,0 @@ -en: - common: - plain_text_link: '%{text} (%{url})' - click_here: 'Click here' - helpers: - password: - wrong_password: 'Wrong password' diff --git a/config/locales/en/components.yml b/config/locales/en/components.yml deleted file mode 100644 index 2e917ff39ba..00000000000 --- a/config/locales/en/components.yml +++ /dev/null @@ -1,56 +0,0 @@ -en: - components: - announcements: - name: :'course.announcements.index.header' - achievements: - name: :'course.achievement.achievements.index.header' - lesson_plan: - name: :'course.lesson_plan.items.index.header' - assessments: - name: 'Assessments' - forums: - name: :'course.forum.forums.index.header' - groups: - name: :'course.groups.index.header' - levels: - name: :'course.levels.index.header' - leaderboard: - name: :'course.leaderboards.index.header' - materials: - name: :'course.material.sidebar_title' - discussion: - topics: - name: 'Comments Center' - statistics: - name: 'Statistics' - experience_points: - name: 'Experience Points' - duplication: - name: 'Duplication' - video: - name: :'course.video.videos.index.header' - settings: - name: 'Settings' - users: - name: 'Users' - surveys: - name: 'Surveys' - learning_map: - name: 'Learning Map' - codaveri: - name: 'Codaveri Evaluation and Feedback' - multiple_reference_timelines: - name: 'Multiple Reference Timelines' - monitoring: - name: 'Heartbeat Monitoring for Exams' - scholaistic: - name: 'Role-Playing Chatbots & Assessments' - manage_assistants: 'Assistants' - stories: - name: 'Stories' - koditsu_platform: - name: 'Koditsu Exam' - rag_wise: - name: 'RagWise Auto Forum Response' - plagiarism: - name: 'SSID Plagiarism Check' \ No newline at end of file diff --git a/config/locales/en/course/achievement/achievements.yml b/config/locales/en/course/achievement/achievements.yml deleted file mode 100644 index 0234a01f54e..00000000000 --- a/config/locales/en/course/achievement/achievements.yml +++ /dev/null @@ -1,7 +0,0 @@ -en: - course: - achievement: - achievements: - sidebar_title: :'course.achievement.achievements.index.header' - index: - header: 'Achievements' diff --git a/config/locales/en/course/announcements.yml b/config/locales/en/course/announcements.yml deleted file mode 100644 index e26e30d9058..00000000000 --- a/config/locales/en/course/announcements.yml +++ /dev/null @@ -1,6 +0,0 @@ -en: - course: - announcements: - sidebar_title: :'course.announcements.index.header' - index: - header: 'Announcements' diff --git a/config/locales/en/course/assessment/answer/programming_auto_grading.yml b/config/locales/en/course/assessment/answer/programming_auto_grading.yml deleted file mode 100644 index eac8d1a3611..00000000000 --- a/config/locales/en/course/assessment/answer/programming_auto_grading.yml +++ /dev/null @@ -1,41 +0,0 @@ -en: - course: - assessment: - answer: - programming_auto_grading: - grade: - evaluation_failed_syntax: > - Your code failed to evaluate correctly. There might be a syntax error - or unsupported libraries are used, please check your code again. - evaluation_failed_time_or_memory: > - Your code failed to complete within the allocated time or memory limits. - stdout_too_long: > - Your code's execution was terminated because it generated too much output in stdout. - Please exclude unnecessary output and try again. - stderr_too_long: > - Your code's execution was terminated because it generated too much output in stderr. - Please exclude unnecessary output and try again. - time_limit_error: > - Time Limit Exceeded (TLE) Error - memory_limit_error: > - Memory Limit Exceeded (MLE) Error - job: - failure: - time_limit_breached: > - The evaluator has been killed while it is still running. - This could be caused by the time limit set for this question exceeds - the allowable evaluator time limit in coursemology. - Please contact your course instructor to check this and if the problem persists, - please contact coursemology admin. - timeout_error: > - There is a timeout error as it takes a longer time to run the job. Please try again in a few minutes. - If the problem persists, please contact your course instructor or coursemology admin. - container_unreachable: > - There is an error creating a docker for the evaluator. - This could be due to high server workload. Please try again in a few minutes. - If the problem persists, please contact your course instructor or coursemology admin. - generic_error: > - Encountered an error. The server may be busy now and - you may want to try again in a few minutes. If the same issue persists, - please contact coursemology admin, provide the URL of this page and - quote the following error: "%{error}" diff --git a/config/locales/en/course/assessment/assessments.yml b/config/locales/en/course/assessment/assessments.yml index 2bd714b9bf6..5af72a174a2 100644 --- a/config/locales/en/course/assessment/assessments.yml +++ b/config/locales/en/course/assessment/assessments.yml @@ -3,9 +3,6 @@ en: assessment: assessments: invalid_questions_order: 'Invalid ordering for assessment questions' - sidebar_title: :'course.assessment.assessments.index.header' - index: - header: 'Assessments' show: public_test: 'Public' private_test: 'Private' diff --git a/config/locales/en/course/assessment/live_feedback/thread.yml b/config/locales/en/course/assessment/live_feedback/thread.yml deleted file mode 100644 index 6424de885f6..00000000000 --- a/config/locales/en/course/assessment/live_feedback/thread.yml +++ /dev/null @@ -1,6 +0,0 @@ -en: - course: - assessment: - live_feedback: - thread: - only_one_active_thread: 'There can be only one active thread per submission question' diff --git a/config/locales/en/course/assessment/skills.yml b/config/locales/en/course/assessment/skills.yml deleted file mode 100644 index f6419ccd5d4..00000000000 --- a/config/locales/en/course/assessment/skills.yml +++ /dev/null @@ -1,7 +0,0 @@ -en: - course: - assessment: - skills: - sidebar_title: 'Skills' - index: - header: 'Skills' diff --git a/config/locales/en/course/assessment/submission/submissions.yml b/config/locales/en/course/assessment/submission/submissions.yml deleted file mode 100644 index 880b2468509..00000000000 --- a/config/locales/en/course/assessment/submission/submissions.yml +++ /dev/null @@ -1,36 +0,0 @@ -en: - course: - assessment: - submission: - submissions: - download_statistics: - no_submission_statistics: 'No submission fulfilled your requirements for downloading' - statistics_download_service: - name: 'Name' - phantom: 'Phantom User' - status: 'Status' - grade: 'Grade' - max_grade: 'Maximum Grade' - exp_points: 'Experience Points' - start_date_time: 'Start Date/Time' - submitted_date_time: 'Submitted Date/Time' - time_taken: 'Time Taken' - graded_date_time: 'Graded Date/Time' - grading_time: 'Grading Time' - grader: 'Grader(s)' - publisher: 'Publisher' - csv_empty: '-' - csv_download_service: - note: 'N/A: The answer format cannot fit in a single cell.' - name: 'Name' - email: 'Email' - role: 'Role' - user_type: 'User Type' - status: 'Status' - question_title: 'Question Title' - question_type: 'Question Type' - normal: 'Normal' - phantom: 'Phantom' - unstarted: 'Unstarted' - no_answer: 'No answer' - diff --git a/config/locales/en/course/assessment/submissions.yml b/config/locales/en/course/assessment/submissions.yml deleted file mode 100644 index b8a6f41a726..00000000000 --- a/config/locales/en/course/assessment/submissions.yml +++ /dev/null @@ -1,9 +0,0 @@ -en: - course: - assessment: - submissions: - sidebar_title: :'course.assessment.submissions.index.header' - index: - header: 'Submissions' - pending: - header: 'Pending Submissions' diff --git a/config/locales/en/course/discussion/topics.yml b/config/locales/en/course/discussion/topics.yml deleted file mode 100644 index c85701604da..00000000000 --- a/config/locales/en/course/discussion/topics.yml +++ /dev/null @@ -1,13 +0,0 @@ -en: - course: - discussion: - topics: - sidebar_title: :'course.discussion.topics.index.header' - index: - header: 'Comments' - pending: - header: :'course.discussion.topics.index.header' - my_students: - header: :'course.discussion.topics.index.header' - my_students_pending: - header: :'course.discussion.topics.index.header' diff --git a/config/locales/en/course/enrol_requests.yml b/config/locales/en/course/enrol_requests.yml deleted file mode 100644 index b8074b958b4..00000000000 --- a/config/locales/en/course/enrol_requests.yml +++ /dev/null @@ -1,5 +0,0 @@ -en: - course: - enrol_requests: - index: - header: 'User Requests' diff --git a/config/locales/en/course/experience_points/disbursement.yml b/config/locales/en/course/experience_points/disbursement.yml deleted file mode 100644 index 8728af2331d..00000000000 --- a/config/locales/en/course/experience_points/disbursement.yml +++ /dev/null @@ -1,7 +0,0 @@ -en: - course: - experience_points: - disbursement: - sidebar_title: 'Experience Points' - new: - header: 'Disburse Experience Points' diff --git a/config/locales/en/course/experience_points/forum_disbursement.yml b/config/locales/en/course/experience_points/forum_disbursement.yml deleted file mode 100644 index 44aa7ba5a79..00000000000 --- a/config/locales/en/course/experience_points/forum_disbursement.yml +++ /dev/null @@ -1,6 +0,0 @@ -en: - course: - experience_points: - forum_disbursement: - new: - header: :'course.experience_points.disbursement.new.header' diff --git a/config/locales/en/course/experience_points_records.yml b/config/locales/en/course/experience_points_records.yml deleted file mode 100644 index 0f784bdb066..00000000000 --- a/config/locales/en/course/experience_points_records.yml +++ /dev/null @@ -1,11 +0,0 @@ -en: - course: - experience_points_records: - index: - header: 'Experience Points History for %{name}' - download: - name: 'Name' - updated_at: 'Updated At' - updater: 'Updater' - reason: 'Reason' - exp_points: 'EXP Awarded' diff --git a/config/locales/en/course/forum/forums.yml b/config/locales/en/course/forum/forums.yml deleted file mode 100644 index dc5536cdc59..00000000000 --- a/config/locales/en/course/forum/forums.yml +++ /dev/null @@ -1,7 +0,0 @@ -en: - course: - forum: - forums: - sidebar_title: 'Forums' - index: - header: 'Forums' diff --git a/config/locales/en/course/groups.yml b/config/locales/en/course/groups.yml deleted file mode 100644 index 345d16d1c5a..00000000000 --- a/config/locales/en/course/groups.yml +++ /dev/null @@ -1,12 +0,0 @@ -en: - course: - groups: - sidebar_title: :'course.group.group_categories.index.header' - index: - header: :'course.group.group_categories.index.header' - group: - group_categories: - index: - header: 'Groups' - show: - header: 'Groups' diff --git a/config/locales/en/course/leaderboards.yml b/config/locales/en/course/leaderboards.yml deleted file mode 100644 index b8ff2d85753..00000000000 --- a/config/locales/en/course/leaderboards.yml +++ /dev/null @@ -1,7 +0,0 @@ -en: - course: - leaderboards: - sidebar_title: :'course.leaderboards.index.header' - title: :'course.leaderboards.index.header' - index: - header: 'Leaderboard' diff --git a/config/locales/en/course/learning_map.yml b/config/locales/en/course/learning_map.yml deleted file mode 100644 index 3e6474871cf..00000000000 --- a/config/locales/en/course/learning_map.yml +++ /dev/null @@ -1,5 +0,0 @@ -en: - course: - learning_map: - index: - header: 'Learning Map' diff --git a/config/locales/en/course/lesson_plan/items.yml b/config/locales/en/course/lesson_plan/items.yml deleted file mode 100644 index 3e4ce95a8f9..00000000000 --- a/config/locales/en/course/lesson_plan/items.yml +++ /dev/null @@ -1,17 +0,0 @@ -en: - course: - lesson_plan: - items: - sidebar_title: :'course.lesson_plan.items.index.header' - index: - header: 'Lesson Plan' - activerecord: - attributes: - course/lesson_plan/item: - reference_times: 'Reference times' - errors: - models: - course/lesson_plan/item: - attributes: - reference_times: - must_have_at_most_one_default: 'must have at most one default' diff --git a/config/locales/en/course/levels.yml b/config/locales/en/course/levels.yml deleted file mode 100644 index eced2270c7e..00000000000 --- a/config/locales/en/course/levels.yml +++ /dev/null @@ -1,6 +0,0 @@ -en: - course: - levels: - sidebar_title: :'course.levels.index.header' - index: - header: 'Levels' diff --git a/config/locales/en/course/mailer/assessment_closing_reminder_email.yml b/config/locales/en/course/mailer/assessment_closing_reminder_email.yml deleted file mode 100644 index 991a551878e..00000000000 --- a/config/locales/en/course/mailer/assessment_closing_reminder_email.yml +++ /dev/null @@ -1,9 +0,0 @@ -en: - course: - mailer: - assessment_closing_reminder_email: - subject: '%{course}: Reminder about %{assessment}' - message: > - Please be reminded that %{assessment} is due on %{time}. - message_no_time: > - Please be reminded to attempt and submit the assessment - %{assessment}. diff --git a/config/locales/en/course/mailer/assessment_closing_summary_email.yml b/config/locales/en/course/mailer/assessment_closing_summary_email.yml deleted file mode 100644 index 6f6761db7f2..00000000000 --- a/config/locales/en/course/mailer/assessment_closing_summary_email.yml +++ /dev/null @@ -1,13 +0,0 @@ -en: - course: - mailer: - assessment_closing_summary_email: - subject: '%{course}: Reminder about %{assessment}' - message: > - Emails were sent to the following students to remind them that %{assessment} is due on %{time}: - - %{students} - message_no_time: > - Emails were sent to the following students to remind them to attempt and submit the assessment - %{assessment}: - - %{students} diff --git a/config/locales/en/course/mailer/course_duplicate_failed_email.yml b/config/locales/en/course/mailer/course_duplicate_failed_email.yml deleted file mode 100644 index 195a629842f..00000000000 --- a/config/locales/en/course/mailer/course_duplicate_failed_email.yml +++ /dev/null @@ -1,8 +0,0 @@ -en: - course: - mailer: - course_duplicate_failed_email: - subject: 'Course Duplication Failed: %{original_course}' - message: > - Duplication of %{original_course} has failed. - Please try again later or contact support if the problem persists. diff --git a/config/locales/en/course/mailer/course_duplicated_email.yml b/config/locales/en/course/mailer/course_duplicated_email.yml deleted file mode 100644 index 1a55d63cbee..00000000000 --- a/config/locales/en/course/mailer/course_duplicated_email.yml +++ /dev/null @@ -1,10 +0,0 @@ -en: - course: - mailer: - course_duplicated_email: - subject: 'Course Duplication Completed: %{new_course}' - click_here: 'Click here' - message: > - Duplication of %{original_course} to %{new_course} has completed. - - %{click_here} to view the duplicated course. diff --git a/config/locales/en/course/mailer/course_user_deletion_failed_email.yml b/config/locales/en/course/mailer/course_user_deletion_failed_email.yml deleted file mode 100644 index 9d5a84761d0..00000000000 --- a/config/locales/en/course/mailer/course_user_deletion_failed_email.yml +++ /dev/null @@ -1,8 +0,0 @@ -en: - course: - mailer: - course_user_deletion_failed_email: - subject: 'User %{course_user_name} Failed to be Deleted from %{course_name}' - message: > - Deletion of %{course_user_name} from the Course %{course_name} has failed. - Please try again later or contact support if the problem persists. diff --git a/config/locales/en/course/mailer/submission_graded_email.yml b/config/locales/en/course/mailer/submission_graded_email.yml deleted file mode 100644 index 3aa8116cd31..00000000000 --- a/config/locales/en/course/mailer/submission_graded_email.yml +++ /dev/null @@ -1,7 +0,0 @@ -en: - course: - mailer: - submission_graded_email: - subject: '%{course}: Your submission for %{assessment} has been graded' - message: > - Click %{submission} to view your grade. diff --git a/config/locales/en/course/mailer/survey_closing_reminder_email.yml b/config/locales/en/course/mailer/survey_closing_reminder_email.yml deleted file mode 100644 index 878cf0fffcf..00000000000 --- a/config/locales/en/course/mailer/survey_closing_reminder_email.yml +++ /dev/null @@ -1,7 +0,0 @@ -en: - course: - mailer: - survey_closing_reminder_email: - subject: '%{course}: Reminder about %{survey}' - message: > - Please be reminded that %{survey} will expire on %{time}. diff --git a/config/locales/en/course/mailer/survey_closing_summary_reminder.yml b/config/locales/en/course/mailer/survey_closing_summary_reminder.yml deleted file mode 100644 index b2f86dee2c5..00000000000 --- a/config/locales/en/course/mailer/survey_closing_summary_reminder.yml +++ /dev/null @@ -1,9 +0,0 @@ -en: - course: - mailer: - survey_closing_summary_email: - subject: '%{course}: Reminder about %{survey}' - message: > - Emails were sent to the following students to remind them that %{survey} will expire on %{time}: - - %{student_list} diff --git a/config/locales/en/course/mailer/user_added_email.yml b/config/locales/en/course/mailer/user_added_email.yml deleted file mode 100644 index 5ee1f798513..00000000000 --- a/config/locales/en/course/mailer/user_added_email.yml +++ /dev/null @@ -1,9 +0,0 @@ -en: - course: - mailer: - user_added_email: - subject: 'Added to Course %{course}' - message: > - You have been added to the course %{course} on %{coursemology}. - - To view the course, please log in with %{email}. diff --git a/config/locales/en/course/mailer/user_enrol_requested_email.yml b/config/locales/en/course/mailer/user_enrol_requested_email.yml deleted file mode 100644 index 149dfb2c1dd..00000000000 --- a/config/locales/en/course/mailer/user_enrol_requested_email.yml +++ /dev/null @@ -1,11 +0,0 @@ -en: - course: - mailer: - user_enrol_requested_email: - subject: 'Enrol Request for %{course}' - recipients: 'Course Managers' - message: > - %{user} has requested to enrol in %{course} - - - You can visit the %{course_requests_page} to view and approve requests. diff --git a/config/locales/en/course/mailer/user_invitation_email.yml b/config/locales/en/course/mailer/user_invitation_email.yml deleted file mode 100644 index 5737fb8e86b..00000000000 --- a/config/locales/en/course/mailer/user_invitation_email.yml +++ /dev/null @@ -1,17 +0,0 @@ -en: - course: - mailer: - user_invitation_email: - subject: 'Invitation to Register for %{course}' - click_here: 'Click here' - message: > - You are invited to register for %{course} on %{coursemology}. - - - You do not seem to have an account registered at this email address (%{email}); - - %{click_here} to create an account and accept the invitation. - - - If you have an existing Coursemology account registered under a different email, - visit %{course} and enrol with the following non-transferable registration code: diff --git a/config/locales/en/course/mailer/user_rejected_email.yml b/config/locales/en/course/mailer/user_rejected_email.yml deleted file mode 100644 index f192fd2b7a6..00000000000 --- a/config/locales/en/course/mailer/user_rejected_email.yml +++ /dev/null @@ -1,8 +0,0 @@ -en: - course: - mailer: - user_rejected_email: - subject: 'Course enrolment request rejected - %{course}' - message: > - Your request to be enrolled in the course - %{course} on %{coursemology} has been rejected! - diff --git a/config/locales/en/course/material/materials.yml b/config/locales/en/course/material/materials.yml deleted file mode 100644 index ece74dc36cf..00000000000 --- a/config/locales/en/course/material/materials.yml +++ /dev/null @@ -1,4 +0,0 @@ -en: - course: - material: - sidebar_title: 'Materials' diff --git a/config/locales/en/course/plagiarism.yml b/config/locales/en/course/plagiarism.yml deleted file mode 100644 index 637a71cfe3c..00000000000 --- a/config/locales/en/course/plagiarism.yml +++ /dev/null @@ -1,4 +0,0 @@ -en: - course: - plagiarism: - header: 'Plagiarism Check' diff --git a/config/locales/en/course/reference_timelines.yml b/config/locales/en/course/reference_timelines.yml deleted file mode 100644 index bf0d3d1674d..00000000000 --- a/config/locales/en/course/reference_timelines.yml +++ /dev/null @@ -1,5 +0,0 @@ -en: - course: - reference_timelines: - reference_timeline: - default_title: 'Default Timeline' diff --git a/config/locales/en/course/scholaistic.yml b/config/locales/en/course/scholaistic.yml deleted file mode 100644 index 877fae00575..00000000000 --- a/config/locales/en/course/scholaistic.yml +++ /dev/null @@ -1,4 +0,0 @@ -en: - course: - scholaistic: - assessments: "Role-Playing Assessments" diff --git a/config/locales/en/course/statistics.yml b/config/locales/en/course/statistics.yml deleted file mode 100644 index d272dd56479..00000000000 --- a/config/locales/en/course/statistics.yml +++ /dev/null @@ -1,7 +0,0 @@ -en: - course: - statistics: - name: 'Name' - type: 'Student Type' - email: 'Email' - header: 'Statistics' diff --git a/config/locales/en/course/stories.yml b/config/locales/en/course/stories.yml deleted file mode 100644 index a49bf74c46c..00000000000 --- a/config/locales/en/course/stories.yml +++ /dev/null @@ -1,5 +0,0 @@ -en: - course: - stories: - learn: 'Learn' - mission_control: 'Mission Control' diff --git a/config/locales/en/course/survey/responses.yml b/config/locales/en/course/survey/responses.yml deleted file mode 100644 index de05a552064..00000000000 --- a/config/locales/en/course/survey/responses.yml +++ /dev/null @@ -1,5 +0,0 @@ -en: - course: - survey: - responses: - no_course_user: 'You must be a member of this course to start the survey.' diff --git a/config/locales/en/course/survey/surveys.yml b/config/locales/en/course/survey/surveys.yml deleted file mode 100644 index 2f8016a621c..00000000000 --- a/config/locales/en/course/survey/surveys.yml +++ /dev/null @@ -1,10 +0,0 @@ -en: - course: - surveys: - survey_download_service: - created_at: 'Create Timestamp' - updated_at: 'Last Update Timestamp' - course_user_id: 'Course User ID' - name: 'Name' - role: 'Role' - unknown_question_type: 'UNKNOWN QUESTION TYPE' diff --git a/config/locales/en/course/surveys.yml b/config/locales/en/course/surveys.yml deleted file mode 100644 index 5bbc34e115a..00000000000 --- a/config/locales/en/course/surveys.yml +++ /dev/null @@ -1,4 +0,0 @@ -en: - course: - surveys: - sidebar_title: 'Surveys' diff --git a/config/locales/en/course/user_invitations.yml b/config/locales/en/course/user_invitations.yml deleted file mode 100644 index a74406e1e97..00000000000 --- a/config/locales/en/course/user_invitations.yml +++ /dev/null @@ -1,6 +0,0 @@ -en: - course: - user_invitations: - errors: - duplicate_user: '%{user} appears more than once in the submission.' - invalid_email: '%{email} is invalid: %{message}.' diff --git a/config/locales/en/course/user_registrations.yml b/config/locales/en/course/user_registrations.yml deleted file mode 100644 index a7a722d3ab6..00000000000 --- a/config/locales/en/course/user_registrations.yml +++ /dev/null @@ -1,11 +0,0 @@ -en: - course: - user_registrations: - create: - invalid_code: 'You have entered an invalid invitation code.' - code_taken: > - The provided invitation code has been claimed by another account, - please use that account the to access the course instead. - code_taken_with_email: > - The provided invitation code has been claimed by %{email}, - please use that account to access the course instead. diff --git a/config/locales/en/course/users.yml b/config/locales/en/course/users.yml deleted file mode 100644 index cde94ce90c5..00000000000 --- a/config/locales/en/course/users.yml +++ /dev/null @@ -1,19 +0,0 @@ -en: - course: - users: - sidebar_title: :'course.users.index.header' - role: - student: 'Student' - teaching_assistant: 'Teaching Assistant' - observer: 'Observer' - manager: 'Manager' - owner: 'Owner' - phantom: 'Phantom' - new: - already_registered: 'You are already registered as a %{role}.' - students: - header: 'Students' - staff: - header: 'Staff' - index: - header: 'Students' diff --git a/config/locales/en/course/video/videos.yml b/config/locales/en/course/video/videos.yml deleted file mode 100644 index 03e436b3911..00000000000 --- a/config/locales/en/course/video/videos.yml +++ /dev/null @@ -1,7 +0,0 @@ -en: - course: - video: - videos: - sidebar_title: :'course.video.videos.index.header' - index: - header: 'Videos' diff --git a/config/locales/en/csv.yml b/config/locales/en/csv.yml new file mode 100644 index 00000000000..020efec3c82 --- /dev/null +++ b/config/locales/en/csv.yml @@ -0,0 +1,64 @@ +en: + csv: + # Assessment submissions - detailed answers export + assessment_submissions: + headers: + name: 'Name' + email: 'Email' + role: 'Role' + user_type: 'User Type' + status: 'Status' + question_title: 'Question Title' + question_type: 'Question Type' + values: + normal: 'Normal' + phantom: 'Phantom' + unstarted: 'Unstarted' + no_answer: 'No answer' + note: 'N/A: The answer format cannot fit in a single cell.' + + # Assessment statistics - summary export + assessment_statistics: + headers: + name: 'Name' + phantom: 'Phantom User' + status: 'Status' + grade: 'Grade' + max_grade: 'Maximum Grade' + exp_points: 'Experience Points' + start_date_time: 'Start Date/Time' + submitted_date_time: 'Submitted Date/Time' + time_taken: 'Time Taken' + graded_date_time: 'Graded Date/Time' + grading_time: 'Grading Time' + grader: 'Grader(s)' + publisher: 'Publisher' + values: + empty: '-' + + # Experience points records export + experience_points: + headers: + name: 'Name' + updated_at: 'Updated At' + updater: 'Updater' + reason: 'Reason' + exp_points: 'EXP Awarded' + + # Survey responses export + survey: + headers: + created_at: 'Create Timestamp' + updated_at: 'Last Update Timestamp' + course_user_id: 'Course User ID' + name: 'Name' + role: 'Role' + values: + unknown_question_type: 'UNKNOWN QUESTION TYPE' + + # Assessment score summary statistics export + score_summary: + headers: + name: 'Name' + type: 'Student Type' + email: 'Email' diff --git a/config/locales/en/errors.yml b/config/locales/en/errors.yml new file mode 100644 index 00000000000..e85b2b8f03f --- /dev/null +++ b/config/locales/en/errors.yml @@ -0,0 +1,85 @@ +en: + errors: + authentication: + wrong_password: 'Wrong password' + code_formatter: + size_too_big: 'The file is too big and cannot be displayed.' + course: + users: + already_registered: 'You are already registered as a %{role}.' + role: + student: 'Student' + teaching_assistant: 'Teaching Assistant' + observer: 'Observer' + manager: 'Manager' + owner: 'Owner' + phantom: 'Phantom' + user_invitations: + duplicate_user: '%{user} appears more than once in the submission.' + invalid_email: '%{email} is invalid: %{message}.' + user_registrations: + invalid_code: 'You have entered an invalid invitation code.' + code_taken: > + The provided invitation code has been claimed by another account, + please use that account the to access the course instead. + code_taken_with_email: > + The provided invitation code has been claimed by %{email}, + please use that account to access the course instead. + assessment: + answer: + programming_auto_grading: + grade: + evaluation_failed_syntax: > + Your code failed to evaluate correctly. There might be a syntax error + or unsupported libraries are used, please check your code again. + evaluation_failed_time_or_memory: > + Your code failed to complete within the allocated time or memory limits. + stdout_too_long: > + Your code's execution was terminated because it generated too much output in stdout. + Please exclude unnecessary output and try again. + stderr_too_long: > + Your code's execution was terminated because it generated too much output in stderr. + Please exclude unnecessary output and try again. + time_limit_error: > + Time Limit Exceeded (TLE) Error + memory_limit_error: > + Memory Limit Exceeded (MLE) Error + job: + failure: + time_limit_breached: > + The evaluator has been killed while it is still running. + This could be caused by the time limit set for this question exceeds + the allowable evaluator time limit in coursemology. + Please contact your course instructor to check this and if the problem persists, + please contact coursemology admin. + timeout_error: > + There is a timeout error as it takes a longer time to run the job. Please try again in a few minutes. + If the problem persists, please contact your course instructor or coursemology admin. + container_unreachable: > + There is an error creating a docker for the evaluator. + This could be due to high server workload. Please try again in a few minutes. + If the problem persists, please contact your course instructor or coursemology admin. + generic_error: > + Encountered an error. The server may be busy now and + you may want to try again in a few minutes. If the same issue persists, + please contact coursemology admin, provide the URL of this page and + quote the following error: "%{error}" + live_feedback: + thread: + only_one_active_thread: 'There can be only one active thread per submission question' + submission: + download_statistics: + no_submissions: 'No submission fulfilled your requirements for downloading' + survey: + responses: + no_course_user: 'You must be a member of this course to start the survey.' + user: + emails: + no_confirmed_emails: 'There are no confirmed emails to set as the primary email.' + already_confirmed: '%{email} was already confirmed.' + registrations: + used: > + The provided invitation code has been claimed by another account, please use that account to log in instead. + used_with_email: > + The provided invitation code has been claimed by %{email}, please use that account to log in instead. + verify_recaptcha_alert: There was an error with the reCAPTCHA below, please try again. diff --git a/config/locales/en/instance/mailer/user_added_email.yml b/config/locales/en/instance/mailer/user_added_email.yml deleted file mode 100644 index eba9d4abfc0..00000000000 --- a/config/locales/en/instance/mailer/user_added_email.yml +++ /dev/null @@ -1,9 +0,0 @@ -en: - instance: - mailer: - user_added_email: - subject: 'Added to Instance %{instance}' - message: > - You have been added to the instance %{instance} on %{coursemology}. - - To view the instance, please log in with %{email}. diff --git a/config/locales/en/instance/mailer/user_invitation_email.yml b/config/locales/en/instance/mailer/user_invitation_email.yml deleted file mode 100644 index 78a181459d4..00000000000 --- a/config/locales/en/instance/mailer/user_invitation_email.yml +++ /dev/null @@ -1,13 +0,0 @@ -en: - instance: - mailer: - user_invitation_email: - subject: 'Invitation to %{instance} instance with %{role} role' - click_here: 'Click here' - message: > - You are invited to register for the %{instance} instance on %{coursemology}. - - - You do not seem to have an account registered at this email address (%{email}); - - %{click_here} to create an account and accept the invitation. diff --git a/config/locales/en/instance_user_role_request_mailer.yml b/config/locales/en/instance_user_role_request_mailer.yml deleted file mode 100644 index de801aa8a06..00000000000 --- a/config/locales/en/instance_user_role_request_mailer.yml +++ /dev/null @@ -1,40 +0,0 @@ -en: - instance_user_role_request_mailer: - new_role_request: - subject: 'New role request!' - empty: '(Not specified)' - message_html: > - %{user} (%{email}) requests to become an %{role} in the %{instance} instance. - - Organization - - %{organization} - - - Designation - - %{designation} - - - Reason - - %{reason} - - - %{click_here} to review the request. - - role_request_approved: - subject: 'Your role request has been approved!' - message: > - You have been approved to be an %{role} on Coursemology! - - %{click_here} to create a new course and get started! - - role_request_rejected: - subject: 'Your role request has been rejected!' - message_empty: > - Your role request to be an %{role} on Coursemology has been rejected! - message: > - Your role request to be an %{role} on Coursemology has been rejected! - Please refer to the message below: - %{message} diff --git a/config/locales/en/layout.yml b/config/locales/en/layout.yml deleted file mode 100644 index 6a2e019256e..00000000000 --- a/config/locales/en/layout.yml +++ /dev/null @@ -1,37 +0,0 @@ -en: - layout: - coursemology: 'Coursemology' - layouts: - course_admin: - title: 'Course Settings' - course_settings: - title: 'General' - announcement_settings: - title: :'course.announcements.index.header' - component_settings: - title: 'Components' - sidebar_settings: - title: 'Sidebar' - notifications: - title: 'Email' - lesson_plan: - title: 'Lesson Plan' - codaveri: - title: 'Codaveri Evaluation and Feedback' - rag_wise: - title: 'RagWise Auto Forum Response' - course_users: - title: 'Manage Users' - duplication: - title: 'Duplicate Data' - mailer: - greeting: 'Hello, %{user}:' - code_formatter: - size_too_big: 'The file is too big and cannot be displayed.' - learning_map: - title: 'Learning Map' - multiple_reference_timelines: - timeline_designer: 'Timeline Designer' - manage_email_subscription: - tag: 'Unsubscribe' - message: '%{manage_email_subscription_link} from this email topic.' diff --git a/config/locales/en/mailers.yml b/config/locales/en/mailers.yml new file mode 100644 index 00000000000..1584735fc62 --- /dev/null +++ b/config/locales/en/mailers.yml @@ -0,0 +1,246 @@ +en: + common: + # Shared keys used across course mailers, instance mailers, and notifiers + mailers: + anonymous_course_user: An anonymous user + click_here: 'Click here' + coursemology: 'Coursemology' + greeting: 'Hello, %{user}:' + manage_email_subscription: + tag: 'Unsubscribe' + message: '%{manage_email_subscription_link} from this email topic.' + plain_text_link: '%{text} (%{url})' + phantom_course_user: '(Phantom)' + course: + mailer: + assessment_closing_reminder_email: + subject: '%{course}: Reminder about %{assessment}' + message: > + Please be reminded that %{assessment} is due on %{time}. + message_no_time: > + Please be reminded to attempt and submit the assessment - %{assessment}. + assessment_closing_summary_email: + subject: '%{course}: Reminder about %{assessment}' + message: > + Emails were sent to the following students to remind them that %{assessment} is due on %{time}: + + %{students} + message_no_time: > + Emails were sent to the following students to remind them to attempt and submit the assessment - %{assessment}: + + %{students} + course_duplicate_failed_email: + subject: 'Course Duplication Failed: %{original_course}' + message: > + Duplication of %{original_course} has failed. + Please try again later or contact support if the problem persists. + course_duplicated_email: + subject: 'Course Duplication Completed: %{new_course}' + message: > + Duplication of %{original_course} to %{new_course} has completed. + + %{click_here} to view the duplicated course. + course_user_deletion_failed_email: + subject: 'User %{course_user_name} Failed to be Deleted from %{course_name}' + message: > + Deletion of %{course_user_name} from the Course %{course_name} has failed. + Please try again later or contact support if the problem persists. + submission_graded_email: + subject: '%{course}: Your submission for %{assessment} has been graded' + message: > + Click %{submission} to view your grade. + survey_closing_reminder_email: + subject: '%{course}: Reminder about %{survey}' + message: > + Please be reminded that %{survey} will expire on %{time}. + survey_closing_summary_email: + subject: '%{course}: Reminder about %{survey}' + message: > + Emails were sent to the following students to remind them that %{survey} will expire on %{time}: + + %{student_list} + user_added_email: + subject: 'Added to Course %{course}' + message: > + You have been added to the course %{course} on %{coursemology}. + + To view the course, please log in with %{email}. + user_enrol_requested_email: + subject: 'Enrol Request for %{course}' + recipients: 'Course Managers' + user_requests_header: 'User Requests' + message: > + %{user} has requested to enrol in %{course} + + + You can visit the %{course_requests_page} to view and approve requests. + user_invitation_email: + subject: 'Invitation to Register for %{course}' + message: > + You are invited to register for %{course} on %{coursemology}. + + + You do not seem to have an account registered at this email address (%{email}); + + %{click_here} to create an account and accept the invitation. + + + If you have an existing Coursemology account registered under a different email, + visit %{course} and enrol with the following non-transferable registration code: + user_rejected_email: + subject: 'Course enrolment request rejected - %{course}' + message: > + Your request to be enrolled in the course - %{course} on %{coursemology} has been rejected! + instance: + mailer: + user_added_email: + subject: 'Added to Instance %{instance}' + message: > + You have been added to the instance %{instance} on %{coursemology}. + + To view the instance, please log in with %{email}. + + user_invitation_email: + subject: 'Invitation to %{instance} instance with %{role} role' + message: > + You are invited to register for the %{instance} instance on %{coursemology}. + + + You do not seem to have an account registered at this email address (%{email}); + + %{click_here} to create an account and accept the invitation. + instance_user_role_request_mailer: + new_role_request: + subject: 'New role request!' + empty: '(Not specified)' + message_html: > + %{user} (%{email}) requests to become an %{role} in the %{instance} instance. + + Organization + + %{organization} + + + Designation + + %{designation} + + + Reason + + %{reason} + + + %{click_here} to review the request. + role_request_approved: + subject: 'Your role request has been approved!' + message: > + You have been approved to be an %{role} on Coursemology! + + %{click_here} to create a new course and get started! + role_request_rejected: + subject: 'Your role request has been rejected!' + message_empty: > + Your role request to be an %{role} on Coursemology has been rejected! + message: > + Your role request to be an %{role} on Coursemology has been rejected! + Please refer to the message below: + %{message} + notifiers: + course: + announcement_notifier: + new: + course_notifications: + email: + subject: '%{course} New Announcement: %{announcement}' + message: > +

%{creator} posted a new %{announcement} from course: %{course}

+ %{content} + assessment_notifier: + opening: + course_notifications: + email: + subject: '%{course} New Assessment Available' + message: > + New Assessment Available : %{assessment} + submitted: + user_notifications: + email: + subject: '%{course} New Submission on: %{assessment}' + message: > + There is a new submission by %{user} + + Please review and grade the %{submission}. + assessment: + answer: + comment_notifier: + annotated: + user_notifications: + email: + subject: '%{course}: New annotation on %{topic}' + message: > +

%{post_author} added an annotation, %{post}

+ +

You can reply here:

+ %{topic} + submission_question: + comment_notifier: + replied: + user_notifications: + email: + subject: '%{course}: New comment on %{topic}' + message: > +

%{post_author} commented, %{post}

+ +

You can reply here:

+ %{topic} + consolidated_opening_reminder_notifier: + opening_reminder: + course_notifications: + email: + subject: 'Opening Reminders for %{course}' + message: 'The following items are opening in the next 24 hours.' + course: + assessment: + section_header: 'New Assessments Available:' + survey: + section_header: 'New Surveys Available:' + video: + section_header: 'New Videos Available:' + forum: + post_notifier: + replied: + user_notifications: + email: + subject: '%{course} New reply for forum topic: %{topic}' + message: > +

%{post_author} replied,

+ %{post} +

You can respond here: %{topic}


+ unsubscribe: + tag: 'Unsubscribe' + message: '%{unsubscribe_link} from email notifications for this forum topic.' + topic_notifier: + created: + user_notifications: + email: + subject: '%{course} New topic created in forum: %{forum}' + message: > +

%{topic_author} has created a new topic in the forum: %{topic}


+ %{post} + unsubscribe: + tag: 'Unsubscribe' + message: '%{unsubscribe_link} from email notification for this forum.' + video_notifier: + opening: + course_notifications: + email: + subject: '%{course} New Video Available' + message: > + New Video Available : %{video} + closing: + user_notifications: + email: + subject: '%{course} Reminder for %{video}' + message: > + Please be reminded that %{video} is due on %{time} diff --git a/config/locales/en/notifiers.yml b/config/locales/en/notifiers.yml deleted file mode 100644 index f004ee9aa5d..00000000000 --- a/config/locales/en/notifiers.yml +++ /dev/null @@ -1,5 +0,0 @@ -en: - notifiers: - course: - phantom: '(Phantom)' - anonymous_user: 'An anonymous user' diff --git a/config/locales/en/notifiers/course/announcement_notifier/new/course_notifications/email.yml b/config/locales/en/notifiers/course/announcement_notifier/new/course_notifications/email.yml deleted file mode 100644 index 21bdbf584fd..00000000000 --- a/config/locales/en/notifiers/course/announcement_notifier/new/course_notifications/email.yml +++ /dev/null @@ -1,11 +0,0 @@ -en: - notifiers: - course: - announcement_notifier: - new: - course_notifications: - email: - subject: '%{course} New Announcement: %{announcement}' - message: > -

%{creator} posted a new %{announcement} from course: %{course}

- %{content} diff --git a/config/locales/en/notifiers/course/assessment/answer/comment_notifier/annotated/user_notifications/email.yml b/config/locales/en/notifiers/course/assessment/answer/comment_notifier/annotated/user_notifications/email.yml deleted file mode 100644 index 380bafd21f9..00000000000 --- a/config/locales/en/notifiers/course/assessment/answer/comment_notifier/annotated/user_notifications/email.yml +++ /dev/null @@ -1,15 +0,0 @@ -en: - notifiers: - course: - assessment: - answer: - comment_notifier: - annotated: - user_notifications: - email: - subject: '%{course}: New annotation on %{topic}' - message: > -

%{post_author} added an annotation, %{post}

- -

You can reply here:

- %{topic} diff --git a/config/locales/en/notifiers/course/assessment/submission_question/comment_notifier/replied/user_notifications/email.yml b/config/locales/en/notifiers/course/assessment/submission_question/comment_notifier/replied/user_notifications/email.yml deleted file mode 100644 index f447a17c4ce..00000000000 --- a/config/locales/en/notifiers/course/assessment/submission_question/comment_notifier/replied/user_notifications/email.yml +++ /dev/null @@ -1,15 +0,0 @@ -en: - notifiers: - course: - assessment: - submission_question: - comment_notifier: - replied: - user_notifications: - email: - subject: '%{course}: New comment on %{topic}' - message: > -

%{post_author} commented, %{post}

- -

You can reply here:

- %{topic} diff --git a/config/locales/en/notifiers/course/assessment_notifier/opening/course_notifications/email.yml b/config/locales/en/notifiers/course/assessment_notifier/opening/course_notifications/email.yml deleted file mode 100644 index 7724afe9443..00000000000 --- a/config/locales/en/notifiers/course/assessment_notifier/opening/course_notifications/email.yml +++ /dev/null @@ -1,10 +0,0 @@ -en: - notifiers: - course: - assessment_notifier: - opening: - course_notifications: - email: - subject: '%{course} New Assessment Available' - message: > - New Assessment Available : %{assessment} diff --git a/config/locales/en/notifiers/course/assessment_notifier/submitted/user_notifications/email.yml b/config/locales/en/notifiers/course/assessment_notifier/submitted/user_notifications/email.yml deleted file mode 100644 index 52dbecc845f..00000000000 --- a/config/locales/en/notifiers/course/assessment_notifier/submitted/user_notifications/email.yml +++ /dev/null @@ -1,12 +0,0 @@ -en: - notifiers: - course: - assessment_notifier: - submitted: - user_notifications: - email: - subject: '%{course} New Submission on: %{assessment}' - message: > - There is a new submission by %{user} - - Please review and grade the %{submission}. diff --git a/config/locales/en/notifiers/course/consolidated_opening_reminder_notifier/opening_reminder/course_notifications/email.yml b/config/locales/en/notifiers/course/consolidated_opening_reminder_notifier/opening_reminder/course_notifications/email.yml deleted file mode 100644 index cf64d16723e..00000000000 --- a/config/locales/en/notifiers/course/consolidated_opening_reminder_notifier/opening_reminder/course_notifications/email.yml +++ /dev/null @@ -1,16 +0,0 @@ -en: - notifiers: - course: - consolidated_opening_reminder_notifier: - opening_reminder: - course_notifications: - email: - subject: 'Opening Reminders for %{course}' - message: 'The following items are opening in the next 24 hours.' - course: - assessment: - section_header: 'New Assessments Available:' - survey: - section_header: 'New Surveys Available:' - video: - section_header: 'New Videos Available:' diff --git a/config/locales/en/notifiers/course/forum/post_notifier/replied/user_notifications/email.yml b/config/locales/en/notifiers/course/forum/post_notifier/replied/user_notifications/email.yml deleted file mode 100644 index 6785355cf1a..00000000000 --- a/config/locales/en/notifiers/course/forum/post_notifier/replied/user_notifications/email.yml +++ /dev/null @@ -1,16 +0,0 @@ -en: - notifiers: - course: - forum: - post_notifier: - replied: - user_notifications: - email: - subject: '%{course} New reply for forum topic: %{topic}' - message: > -

%{post_author} replied,

- %{post} -

You can respond here: %{topic}


- unsubscribe: - tag: 'Unsubscribe' - message: '%{unsubscribe_link} from email notifications for this forum topic.' diff --git a/config/locales/en/notifiers/course/forum/topic_notifier/created/user_notifications/email.yml b/config/locales/en/notifiers/course/forum/topic_notifier/created/user_notifications/email.yml deleted file mode 100644 index 3b0f15d7f9e..00000000000 --- a/config/locales/en/notifiers/course/forum/topic_notifier/created/user_notifications/email.yml +++ /dev/null @@ -1,15 +0,0 @@ -en: - notifiers: - course: - forum: - topic_notifier: - created: - user_notifications: - email: - subject: '%{course} New topic created in forum: %{forum}' - message: > -

%{topic_author} has created a new topic in the forum: %{topic}


- %{post} - unsubscribe: - tag: 'Unsubscribe' - message: '%{unsubscribe_link} from email notification for this forum.' diff --git a/config/locales/en/notifiers/course/video_notifier/video_notifier.yml b/config/locales/en/notifiers/course/video_notifier/video_notifier.yml deleted file mode 100644 index 3898289a4bb..00000000000 --- a/config/locales/en/notifiers/course/video_notifier/video_notifier.yml +++ /dev/null @@ -1,16 +0,0 @@ -en: - notifiers: - course: - video_notifier: - opening: - course_notifications: - email: - subject: '%{course} New Video Available' - message: > - New Video Available : %{video} - closing: - user_notifications: - email: - subject: '%{course} Reminder for %{video}' - message: > - Please be reminded that %{video} is due on %{time} diff --git a/config/locales/en/user/emails.yml b/config/locales/en/user/emails.yml deleted file mode 100644 index 5e7a2469847..00000000000 --- a/config/locales/en/user/emails.yml +++ /dev/null @@ -1,9 +0,0 @@ -en: - user: - emails: - index: - header: 'Emails' - set_primary: - no_confirmed_emails: 'There are no confirmed emails to set as the primary email.' - send_confirmation: - already_confirmed: '%{email} was already confirmed.' diff --git a/config/locales/en/user/registrations.yml b/config/locales/en/user/registrations.yml deleted file mode 100644 index 795b1cf6958..00000000000 --- a/config/locales/en/user/registrations.yml +++ /dev/null @@ -1,10 +0,0 @@ -en: - user: - registrations: - new: - used: > - The provided invitation code has been claimed by another account, please use that account to log in instead. - used_with_email: > - The provided invitation code has been claimed by %{email}, please use that account to log in instead. - create: - verify_recaptcha_alert: There was an error with the reCAPTCHA below, please try again. diff --git a/config/locales/ko/activerecord/attributes.yml b/config/locales/ko/activerecord/attributes.yml new file mode 100644 index 00000000000..6696c1e3611 --- /dev/null +++ b/config/locales/ko/activerecord/attributes.yml @@ -0,0 +1,70 @@ +ko: + activerecord: + course/assessment/question: + question_number: '질문 %{index}' + question_with_title: '%{question_number}: %{title}' + attributes: + course: + reference_timelines: '참조 타임라인' + course/assessment/answer: + submitted_at: '제출 시각' + grade: '점수' + grader: '채점자' + graded_at: '채점 시각' + course/assessment/category: + weight: '순서' + course/assessment/category/title: + default: '평가' + course/assessment/question: + weight: '순서' + course/assessment/submission: + grade: '총점' + status: '상태' + submitted_at: :'activerecord.attributes.course/assessment/answer.submitted_at' + grader: :'activerecord.attributes.course/assessment/answer.grader' + graded_at: :'activerecord.attributes.course/assessment/answer.graded_at' + attempting: '시도 중' + submitted: '제출됨' + graded: '채점 완료, 미공개' + published: '채점 완료' + course/assessment/tab: + weight: '순서' + course/assessment/tab/title: + default: '기본값' + course/condition/assessment/title: + minimum_score: '%{assessment_title}에서 최소 %{minimum_grade_percentage} 점수를 획득하세요' + complete: '%{assessment_title} 완료' + course/condition/level/title: + title: '레벨 %{value}' + course/condition/scholaistic_assessment/title: + complete: '%{title} 완료' + course/condition/survey/title: + complete: '%{survey_title} 완료' + course/condition/video/title: + complete: '%{video_title} 시청' + course/discussion/post: + title_reply_template: '답글: %{title}' + course/experience_points_record: + points_awarded: '경험치 부여됨' + course/forum/topic/topic_type: + normal: '일반' + announcement: '공지' + question: '질문' + sticky: '고정' + course/group_user: + manager: '교사' + course/lesson_plan/item: + base_exp: '경험치' + time_bonus_exp: '보너스 경험치' + reference_times: '참조 시간' + course/video/tab: + weight: '순서' + course/video/tab/title: + default: '기본값' + models: + course/assessment/question/rubric_based_response: + rubric_based_response: '루브릭 기반 응답 질문' + course/assessment/question/text_response: + text_response: '서술형 질문' + file_upload: '파일 업로드 질문' + comprehension: '이해력 질문' diff --git a/config/locales/ko/activerecord/course.yml b/config/locales/ko/activerecord/course.yml deleted file mode 100644 index 512383ef69a..00000000000 --- a/config/locales/ko/activerecord/course.yml +++ /dev/null @@ -1,11 +0,0 @@ -ko: - activerecord: - attributes: - course: - reference_timelines: '참조 타임라인' - errors: - models: - course: - attributes: - reference_timelines: - must_have_at_most_one_default: '최대 하나의 기본값만 있어야 합니다' diff --git a/config/locales/ko/activerecord/course/announcement.yml b/config/locales/ko/activerecord/course/announcement.yml deleted file mode 100644 index dd887ac81f7..00000000000 --- a/config/locales/ko/activerecord/course/announcement.yml +++ /dev/null @@ -1,8 +0,0 @@ -ko: - activerecord: - errors: - models: - course/announcement: - attributes: - end_at: - cannot_be_before_start_at: '시작 시각보다 이를 수 없습니다' diff --git a/config/locales/ko/activerecord/course/assessment.yml b/config/locales/ko/activerecord/course/assessment.yml deleted file mode 100644 index 6ec7c16d6a1..00000000000 --- a/config/locales/ko/activerecord/course/assessment.yml +++ /dev/null @@ -1,11 +0,0 @@ -ko: - activerecord: - errors: - models: - course/assessment: - attributes: - tab: - not_in_same_course: > - 선택한 탭이 평가와 동일한 코스에 있지 않습니다 - no_test_type_chosen: > - 점수 및 경험치 계산을 위해 적어도 하나의 테스트 유형을 선택해야 합니다 diff --git a/config/locales/ko/activerecord/course/assessment/answer.yml b/config/locales/ko/activerecord/course/assessment/answer.yml deleted file mode 100644 index 1dac9652c53..00000000000 --- a/config/locales/ko/activerecord/course/assessment/answer.yml +++ /dev/null @@ -1,20 +0,0 @@ -ko: - activerecord: - attributes: - course/assessment/answer: - submitted_at: '제출 시각' - grade: '점수' - grader: '채점자' - graded_at: '채점 시각' - errors: - models: - course/assessment/answer: - attributes: - question: - consistent_assessment: '동일한 평가에 속해야 합니다' - submission: - attemptable_state: '시도 상태여야 합니다' - grade: - no_blank_grade: '이미 채점된 경우 점수는 비워둘 수 없습니다' - consistent_grade: '문제의 최대 점수보다 작아야 합니다' - non_negative_grade: '음수일 수 없습니다' diff --git a/config/locales/ko/activerecord/course/assessment/answer/programming.yml b/config/locales/ko/activerecord/course/assessment/answer/programming.yml deleted file mode 100644 index 3e6a59a2e72..00000000000 --- a/config/locales/ko/activerecord/course/assessment/answer/programming.yml +++ /dev/null @@ -1,8 +0,0 @@ -ko: - activerecord: - errors: - models: - course/assessment/answer/programming: - attributes: - files: - exceed_size_limit: '제출한 답변(%{total_size_mb} MB)은 2MB 미만이어야 합니다.' diff --git a/config/locales/ko/activerecord/course/assessment/answer/text_response.yml b/config/locales/ko/activerecord/course/assessment/answer/text_response.yml deleted file mode 100644 index 7cdc9a31ff7..00000000000 --- a/config/locales/ko/activerecord/course/assessment/answer/text_response.yml +++ /dev/null @@ -1,8 +0,0 @@ -ko: - activerecord: - errors: - models: - course/assessment/answer/text_response: - attributes: - attachments: - unique: '파일 이름은 중복되어선 안 됩니다' diff --git a/config/locales/ko/activerecord/course/assessment/category.yml b/config/locales/ko/activerecord/course/assessment/category.yml deleted file mode 100644 index 60ece1b0ac0..00000000000 --- a/config/locales/ko/activerecord/course/assessment/category.yml +++ /dev/null @@ -1,11 +0,0 @@ -ko: - activerecord: - attributes: - course/assessment/category/title: - default: :'course.assessment.assessments.index.header' - course/assessment/category: - weight: '순서' - errors: - models: - course/assessment/category: - deletion: '마지막 카테고리는 삭제할 수 없습니다' diff --git a/config/locales/ko/activerecord/course/assessment/question.yml b/config/locales/ko/activerecord/course/assessment/question.yml deleted file mode 100644 index 19126b48c2e..00000000000 --- a/config/locales/ko/activerecord/course/assessment/question.yml +++ /dev/null @@ -1,8 +0,0 @@ -ko: - activerecord: - course/assessment/question: - question_number: '질문 %{index}' - question_with_title: '%{question_number}: %{title}' - attributes: - course/assessment/question: - weight: '순서' diff --git a/config/locales/ko/activerecord/course/assessment/question/multiple_response.yml b/config/locales/ko/activerecord/course/assessment/question/multiple_response.yml deleted file mode 100644 index e2f06775e44..00000000000 --- a/config/locales/ko/activerecord/course/assessment/question/multiple_response.yml +++ /dev/null @@ -1,9 +0,0 @@ -ko: - activerecord: - errors: - models: - course/assessment/question/multiple_response: - attributes: - options: - no_option: '최소한 하나의 옵션을 포함해야 합니다.' - no_correct_option: '최소한 하나의 정답 옵션을 포함해야 합니다.' diff --git a/config/locales/ko/activerecord/course/assessment/question/rubric_based_response.yml b/config/locales/ko/activerecord/course/assessment/question/rubric_based_response.yml deleted file mode 100644 index 1cab308ae87..00000000000 --- a/config/locales/ko/activerecord/course/assessment/question/rubric_based_response.yml +++ /dev/null @@ -1,21 +0,0 @@ -ko: - activerecord: - attributes: - models: - course/assessment/question/rubric_based_response: - rubric_based_response: '루브릭 기반 응답 질문' - errors: - models: - 'course/assessment/question/rubric_based_response': - attributes: - categories: - reserved_category_name: '조정은 예약된 카테고리 이름이므로 사용할 수 없습니다' - duplicate_category_names: '카테고리 이름은 질문 루브릭 내에서 고유해야 합니다' - at_least_one_category: '최소한 하나의 루브릭 카테고리가 필요합니다' - 'course/assessment/question/rubric_based_response_category': - attributes: - criterions: - duplicate_grades_within_category: '카테고리 내의 점수는 중복될 수 없습니다' - at_least_one_grade: '각 카테고리에는 최소 하나의 점수가 필요합니다' - grade_zero_missing: '각 카테고리에는 0점 가 포함되어야 합니다' - grade_higher_than_maximum_grade: '점수는 최대 점수보다 작거나 같아야 합니다' diff --git a/config/locales/ko/activerecord/course/assessment/question/text_response.yml b/config/locales/ko/activerecord/course/assessment/question/text_response.yml deleted file mode 100644 index bf6bc370e75..00000000000 --- a/config/locales/ko/activerecord/course/assessment/question/text_response.yml +++ /dev/null @@ -1,14 +0,0 @@ -ko: - activerecord: - attributes: - models: - course/assessment/question/text_response: - text_response: '서술형 질문' - file_upload: '파일 업로드 질문' - comprehension: '이해력 질문' - errors: - models: - course/assessment/question/text_response: - attributes: - maximum_grade: - invalid_grade: '해답의 점수보다 낮을 수 없습니다' diff --git a/config/locales/ko/activerecord/course/assessment/question/text_response_comprehension_group.yml b/config/locales/ko/activerecord/course/assessment/question/text_response_comprehension_group.yml deleted file mode 100644 index ddd8591e9bf..00000000000 --- a/config/locales/ko/activerecord/course/assessment/question/text_response_comprehension_group.yml +++ /dev/null @@ -1,8 +0,0 @@ -ko: - activerecord: - errors: - models: - course/assessment/question/text_response_comprehension_group: - attributes: - maximum_group_grade: - invalid_group_grade: '질문의 최대 점수를 초과할 수 없습니다' diff --git a/config/locales/ko/activerecord/course/assessment/question/text_response_comprehension_point.yml b/config/locales/ko/activerecord/course/assessment/question/text_response_comprehension_point.yml deleted file mode 100644 index 3509d689076..00000000000 --- a/config/locales/ko/activerecord/course/assessment/question/text_response_comprehension_point.yml +++ /dev/null @@ -1,10 +0,0 @@ -ko: - activerecord: - errors: - models: - course/assessment/question/text_response_comprehension_point: - attributes: - point_grade: - invalid_point_grade: '그룹의 최대 점수를 초과할 수 없습니다' - solutions: - more_than_one_compre_lifted_word_solution: '같은 점수에 대한 모든 선택된 단어는 한 줄에 함께 배치되어야 합니다' diff --git a/config/locales/ko/activerecord/course/assessment/question/text_response_comprehension_solution.yml b/config/locales/ko/activerecord/course/assessment/question/text_response_comprehension_solution.yml deleted file mode 100644 index b308ec7383e..00000000000 --- a/config/locales/ko/activerecord/course/assessment/question/text_response_comprehension_solution.yml +++ /dev/null @@ -1,10 +0,0 @@ -ko: - activerecord: - errors: - models: - course/assessment/question/text_response_comprehension_solution: - attributes: - solution_lemma: - solution_lemma_empty: '어떤 어휘 형태도 생성할 수 없습니다: 철자를 확인해 주세요' - information: - information_empty: '키워드 솔루션은 비워둘 수 없습니다' diff --git a/config/locales/ko/activerecord/course/assessment/question/text_response_solution.yml b/config/locales/ko/activerecord/course/assessment/question/text_response_solution.yml deleted file mode 100644 index 5173e888b8d..00000000000 --- a/config/locales/ko/activerecord/course/assessment/question/text_response_solution.yml +++ /dev/null @@ -1,8 +0,0 @@ -ko: - activerecord: - errors: - models: - course/assessment/question/text_response_solution: - attributes: - grade: - invalid_grade: '질문의 최대 점수를 초과할 수 없습니다' diff --git a/config/locales/ko/activerecord/course/assessment/question_bundle_assignment.yml b/config/locales/ko/activerecord/course/assessment/question_bundle_assignment.yml deleted file mode 100644 index 9f4ba89e35a..00000000000 --- a/config/locales/ko/activerecord/course/assessment/question_bundle_assignment.yml +++ /dev/null @@ -1,8 +0,0 @@ -ko: - activerecord: - errors: - models: - course/assessment/question_bundle_assignment: - attributes: - submission: - must_belong_to_assessment_and_user: '평가와 사용자에 속해야 합니다' diff --git a/config/locales/ko/activerecord/course/assessment/skill.yml b/config/locales/ko/activerecord/course/assessment/skill.yml deleted file mode 100644 index c8900967e36..00000000000 --- a/config/locales/ko/activerecord/course/assessment/skill.yml +++ /dev/null @@ -1,8 +0,0 @@ -ko: - activerecord: - errors: - models: - course/assessment/skill: - attributes: - course: - consistent_course: '동일한 과정에 속해야 합니다' diff --git a/config/locales/ko/activerecord/course/assessment/submission.yml b/config/locales/ko/activerecord/course/assessment/submission.yml deleted file mode 100644 index 9569581c1a9..00000000000 --- a/config/locales/ko/activerecord/course/assessment/submission.yml +++ /dev/null @@ -1,27 +0,0 @@ -ko: - activerecord: - attributes: - course/assessment/submission: - grade: '총점' - status: '상태' - submitted_at: :'activerecord.attributes.course/assessment/answer.submitted_at' - grader: :'activerecord.attributes.course/assessment/answer.grader' - graded_at: :'activerecord.attributes.course/assessment/answer.graded_at' - attempting: '시도 중' - submitted: '제출됨' - graded: '채점 완료, 미공개' - published: '채점 완료' - errors: - models: - course/assessment/submission: - attributes: - experience_points_record: - inconsistent_user: '생성자는 코스 사용자 기록과 동일해야 합니다' - absent_award_attributes: > - 제출물에 대한 보상 속성이 없습니다. 다시 시도하거나 Coursemology - 팀에 문의하세요. - submission_already_exists: '이미 제출물을 생성한 것 같습니다. 다시 시도하시겠습니까?' - no_bundles_assigned: '할당된 문제 묶음이 없습니다. 도움을 받으려면 강사에게 문의하세요.' - autograded_no_partial_answer: '업데이트된 답변이 아직 다시 제출되지 않았습니다. 제출을 완료하기 전에 모든 답변을 다시 제출하세요.' - course/assessment/category: - deletion: '마지막 카테고리는 삭제할 수 없습니다' diff --git a/config/locales/ko/activerecord/course/assessment/tab.yml b/config/locales/ko/activerecord/course/assessment/tab.yml deleted file mode 100644 index 025b149c47a..00000000000 --- a/config/locales/ko/activerecord/course/assessment/tab.yml +++ /dev/null @@ -1,11 +0,0 @@ -ko: - activerecord: - attributes: - course/assessment/tab/title: - default: '기본값' - course/assessment/tab: - weight: '순서' - errors: - models: - course/assessment/tab: - deletion: '마지막 탭은 삭제할 수 없습니다' diff --git a/config/locales/ko/activerecord/course/condition/achievement.yml b/config/locales/ko/activerecord/course/condition/achievement.yml deleted file mode 100644 index 5a8ec694ad1..00000000000 --- a/config/locales/ko/activerecord/course/condition/achievement.yml +++ /dev/null @@ -1,10 +0,0 @@ -ko: - activerecord: - errors: - models: - course/condition/achievement: - attributes: - achievement: - unique_dependency: '중복 조건을 가질 수 없습니다' - references_self: '자기 자신을 조건으로 가질 수 없습니다' - cyclic_dependency: '순환 의존성을 가질 수 없습니다' diff --git a/config/locales/ko/activerecord/course/condition/assessment.yml b/config/locales/ko/activerecord/course/condition/assessment.yml deleted file mode 100644 index 20ca886c1cc..00000000000 --- a/config/locales/ko/activerecord/course/condition/assessment.yml +++ /dev/null @@ -1,14 +0,0 @@ -ko: - activerecord: - attributes: - course/condition/assessment/title: - minimum_score: '%{assessment_title}에서 최소 %{minimum_grade_percentage} 점수를 획득하세요' - complete: '%{assessment_title} 완료' - errors: - models: - course/condition/assessment: - attributes: - assessment: - unique_dependency: '중복 조건을 가질 수 없습니다' - references_self: '자신 자신을 조건으로 가질 수 없습니다' - cyclic_dependency: '순환 의존성을 가질 수 없습니다' diff --git a/config/locales/ko/activerecord/course/condition/condition.yml b/config/locales/ko/activerecord/course/condition/condition.yml deleted file mode 100644 index 5fdf0d1d199..00000000000 --- a/config/locales/ko/activerecord/course/condition/condition.yml +++ /dev/null @@ -1,8 +0,0 @@ -ko: - activerecord: - errors: - models: - course/condition: - attributes: - conditional: - not_in_same_course: '선택한 조건이 현재 조건과 동일한 코스에 있지 않습니다' diff --git a/config/locales/ko/activerecord/course/condition/level.yml b/config/locales/ko/activerecord/course/condition/level.yml deleted file mode 100644 index eee0f5855c2..00000000000 --- a/config/locales/ko/activerecord/course/condition/level.yml +++ /dev/null @@ -1,5 +0,0 @@ -ko: - activerecord: - attributes: - course/condition/level/title: - title: '레벨 %{value}' diff --git a/config/locales/ko/activerecord/course/condition/scholaistic_assessment.yml b/config/locales/ko/activerecord/course/condition/scholaistic_assessment.yml deleted file mode 100644 index b7426ebbfa3..00000000000 --- a/config/locales/ko/activerecord/course/condition/scholaistic_assessment.yml +++ /dev/null @@ -1,12 +0,0 @@ -ko: - activerecord: - attributes: - course/condition/scholaistic_assessment/title: - complete: '%{title} 완료' - errors: - models: - course/condition/scholaistic_assessment: - attributes: - scholaistic_assessment: - unique_dependency: '중복 조건을 가질 수 없습니다' - references_self: '자신 자신을 조건으로 가질 수 없습니다' diff --git a/config/locales/ko/activerecord/course/condition/survey.yml b/config/locales/ko/activerecord/course/condition/survey.yml deleted file mode 100644 index a758bfe8f60..00000000000 --- a/config/locales/ko/activerecord/course/condition/survey.yml +++ /dev/null @@ -1,13 +0,0 @@ -ko: - activerecord: - attributes: - course/condition/survey/title: - complete: '%{survey_title} 완료' - errors: - models: - course/condition/survey: - attributes: - survey: - unique_dependency: '중복 조건을 가질 수 없습니다' - references_self: '자기 자신을 조건으로 가질 수 없습니다' - cyclic_dependency: '순환 의존성을 가질 수 없습니다' diff --git a/config/locales/ko/activerecord/course/condition/video.yml b/config/locales/ko/activerecord/course/condition/video.yml deleted file mode 100644 index 5fecdfc1ed0..00000000000 --- a/config/locales/ko/activerecord/course/condition/video.yml +++ /dev/null @@ -1,13 +0,0 @@ -ko: - activerecord: - attributes: - course/condition/video/title: - complete: '%{video_title} 시청' - errors: - models: - course/condition/video: - attributes: - video: - unique_dependency: '중복 조건을 가질 수 없습니다' - references_self: '자기 자신을 조건으로 가질 수 없습니다' - cyclic_dependency: '순환 의존성을 가질 수 없습니다' diff --git a/config/locales/ko/activerecord/course/discussion/post.yml b/config/locales/ko/activerecord/course/discussion/post.yml deleted file mode 100644 index 4d0c8c42be2..00000000000 --- a/config/locales/ko/activerecord/course/discussion/post.yml +++ /dev/null @@ -1,11 +0,0 @@ -ko: - activerecord: - attributes: - course/discussion/post: - title_reply_template: '답글: %{title}' - errors: - models: - course/discussion/post: - attributes: - post: - topic_inconsistent: '게시물과 부모 게시물이 다른 주제를 참조하고 있습니다.' diff --git a/config/locales/ko/activerecord/course/enrol_request.yml b/config/locales/ko/activerecord/course/enrol_request.yml deleted file mode 100644 index 932266e17a8..00000000000 --- a/config/locales/ko/activerecord/course/enrol_request.yml +++ /dev/null @@ -1,13 +0,0 @@ -ko: - activerecord: - errors: - models: - course/enrol_request: - user_in_course: > - 이미 이 과정에 등록된 것 같습니다. 페이지를 새로고침해 보시겠습니까? - existing_pending_request: > - 이미 등록 요청을 제출한 것 같습니다. - attributes: - base: - deletion: > - 가입 신청이 처리되었으므로 취소할 수 없습니다. diff --git a/config/locales/ko/activerecord/course/experience_points_record.yml b/config/locales/ko/activerecord/course/experience_points_record.yml deleted file mode 100644 index c3c59f1e4fa..00000000000 --- a/config/locales/ko/activerecord/course/experience_points_record.yml +++ /dev/null @@ -1,5 +0,0 @@ -ko: - activerecord: - attributes: - course/experience_points_record: - points_awarded: '경험치 부여됨' diff --git a/config/locales/ko/activerecord/course/forum/topic.yml b/config/locales/ko/activerecord/course/forum/topic.yml deleted file mode 100644 index 244599f79db..00000000000 --- a/config/locales/ko/activerecord/course/forum/topic.yml +++ /dev/null @@ -1,8 +0,0 @@ -ko: - activerecord: - attributes: - course/forum/topic/topic_type: - normal: '일반' - announcement: '공지' - question: '질문' - sticky: '고정' diff --git a/config/locales/ko/activerecord/course/group_user.yml b/config/locales/ko/activerecord/course/group_user.yml deleted file mode 100644 index 5530c4546c1..00000000000 --- a/config/locales/ko/activerecord/course/group_user.yml +++ /dev/null @@ -1,9 +0,0 @@ -ko: - activerecord: - errors: - models: - course/group_user: - not_enrolled: '그룹과 동일한 과정에 등록되어 있어야 합니다' - attributes: - course/group_user: - manager: '교사' diff --git a/config/locales/ko/activerecord/course/learning_rate_record.yml b/config/locales/ko/activerecord/course/learning_rate_record.yml deleted file mode 100644 index 64eabb3ab68..00000000000 --- a/config/locales/ko/activerecord/course/learning_rate_record.yml +++ /dev/null @@ -1,9 +0,0 @@ -ko: - activerecord: - errors: - models: - course/learning_rate_record: - attributes: - learning_rate: - less_than_min: '유효한 최소값 이상이어야 합니다' - greater_than_max: '유효한 최대값 이하여야 합니다' diff --git a/config/locales/ko/activerecord/course/lesson_plan.yml b/config/locales/ko/activerecord/course/lesson_plan.yml deleted file mode 100644 index 00d7fbc675f..00000000000 --- a/config/locales/ko/activerecord/course/lesson_plan.yml +++ /dev/null @@ -1,12 +0,0 @@ -ko: - activerecord: - errors: - models: - course/lesson_plan/item: - attributes: - bonus_end_at: - required: '시간 보너스 경험치가 설정된 경우 비워 둘 수 없습니다' - attributes: - course/lesson_plan/item: - base_exp: '경험치' - time_bonus_exp: '보너스 경험치' diff --git a/config/locales/ko/activerecord/course/monitoring/heartbeat.yml b/config/locales/ko/activerecord/course/monitoring/heartbeat.yml deleted file mode 100644 index e312fb14729..00000000000 --- a/config/locales/ko/activerecord/course/monitoring/heartbeat.yml +++ /dev/null @@ -1,8 +0,0 @@ -ko: - activerecord: - errors: - models: - course/monitoring/heartbeat: - attributes: - seb_payload: - invalid_seb_payload: 'seb payload는 비어 있거나 유효한 JSON 객체여야 합니다' diff --git a/config/locales/ko/activerecord/course/monitoring/monitor.yml b/config/locales/ko/activerecord/course/monitoring/monitor.yml deleted file mode 100644 index 1f68f5a1e39..00000000000 --- a/config/locales/ko/activerecord/course/monitoring/monitor.yml +++ /dev/null @@ -1,14 +0,0 @@ -ko: - activerecord: - errors: - models: - course/monitoring/monitor: - attributes: - enabled: - must_be_password_protected: '평가는 활성화를 위해 비밀번호로 보호되어야 합니다' - max_interval_ms: - greater_than_min_interval: '최소 간격보다 커야 합니다' - blocks: - must_have_browser_authorization_and_session_protection: '브라우저 인증 및 세션 보호가 활성화되어 있어야 합니다' - seb_config_key: - required_if_using_seb_config_key_browser_authorization: 'seb 구성 키 브라우저 인증 방법을 사용하는 경우 seb 구성 키가 필요합니다' diff --git a/config/locales/ko/activerecord/course/personal_time.yml b/config/locales/ko/activerecord/course/personal_time.yml deleted file mode 100644 index 46eff61532e..00000000000 --- a/config/locales/ko/activerecord/course/personal_time.yml +++ /dev/null @@ -1,8 +0,0 @@ -ko: - activerecord: - errors: - models: - course/personal_time: - attributes: - start_at: - cannot_be_after_end_at: '종료 시각 이후일 수 없습니다' diff --git a/config/locales/ko/activerecord/course/reference_time.yml b/config/locales/ko/activerecord/course/reference_time.yml deleted file mode 100644 index 3590de59d42..00000000000 --- a/config/locales/ko/activerecord/course/reference_time.yml +++ /dev/null @@ -1,12 +0,0 @@ -ko: - activerecord: - errors: - models: - course/reference_time: - attributes: - reference_timeline: - cannot_destroy_in_default_timeline: '기본 참조 타임라인에서 시간을 삭제할 수 없습니다' - start_at: - cannot_be_after_end_at: '종료 시각 이후일 수 없습니다' - lesson_plan_item: - must_be_in_same_course: '참조 타임라인과 동일한 과정에 있어야 합니다' diff --git a/config/locales/ko/activerecord/course/reference_timeline.yml b/config/locales/ko/activerecord/course/reference_timeline.yml deleted file mode 100644 index 3ca5fea8e80..00000000000 --- a/config/locales/ko/activerecord/course/reference_timeline.yml +++ /dev/null @@ -1,9 +0,0 @@ -ko: - activerecord: - errors: - models: - course/reference_timeline: - attributes: - default: - taken: '기본 참조 타임라인은 하나만 가질 수 있습니다' - cannot_destroy: '기본 참조 타임라인을 삭제할 수 없습니다' diff --git a/config/locales/ko/activerecord/course/scholaistic_assessment.yml b/config/locales/ko/activerecord/course/scholaistic_assessment.yml deleted file mode 100644 index d6a44c65a60..00000000000 --- a/config/locales/ko/activerecord/course/scholaistic_assessment.yml +++ /dev/null @@ -1,8 +0,0 @@ -ko: - activerecord: - errors: - models: - course/scholaistic_assessment: - attributes: - time_bonus_exp: - bonus_attributes_not_allowed: '보너스 속성은 허용되지 않습니다' diff --git a/config/locales/ko/activerecord/course/survey/answer.yml b/config/locales/ko/activerecord/course/survey/answer.yml deleted file mode 100644 index d58b69ac542..00000000000 --- a/config/locales/ko/activerecord/course/survey/answer.yml +++ /dev/null @@ -1,6 +0,0 @@ -ko: - activerecord: - errors: - models: - course/survey/answer: - cannot_be_empty: '이 질문의 답변은 비워둘 수 없습니다.' diff --git a/config/locales/ko/activerecord/course/user_achievement.yml b/config/locales/ko/activerecord/course/user_achievement.yml deleted file mode 100644 index 52f338e787e..00000000000 --- a/config/locales/ko/activerecord/course/user_achievement.yml +++ /dev/null @@ -1,8 +0,0 @@ -ko: - activerecord: - errors: - models: - course/user_achievement: - attributes: - course_user: - not_in_course: '선택한 사용자가 지정된 코스에 없습니다' diff --git a/config/locales/ko/activerecord/course/user_invitation.yml b/config/locales/ko/activerecord/course/user_invitation.yml deleted file mode 100644 index 685a9164aa0..00000000000 --- a/config/locales/ko/activerecord/course/user_invitation.yml +++ /dev/null @@ -1,6 +0,0 @@ -ko: - activerecord: - errors: - models: - course/user_invitation: - existing_invitation: '이 이메일 주소에는 아직 완료되지 않은 초대장이 있습니다' diff --git a/config/locales/ko/activerecord/course/video.yml b/config/locales/ko/activerecord/course/video.yml deleted file mode 100644 index 8578d8eaa3d..00000000000 --- a/config/locales/ko/activerecord/course/video.yml +++ /dev/null @@ -1,9 +0,0 @@ -ko: - activerecord: - errors: - models: - course/video: - attributes: - url: - invalid_url: > - 입력하신 URL의 형식이 올바르지 않습니다. 다시 시도해 주세요. diff --git a/config/locales/ko/activerecord/course/video/session.yml b/config/locales/ko/activerecord/course/video/session.yml deleted file mode 100644 index e88cd2f9e44..00000000000 --- a/config/locales/ko/activerecord/course/video/session.yml +++ /dev/null @@ -1,8 +0,0 @@ -ko: - activerecord: - errors: - models: - course/video/session: - attributes: - session_start: - cannot_be_after_session_end: '세션은 종료 후에 시작할 수 없습니다' diff --git a/config/locales/ko/activerecord/course/video/submission.yml b/config/locales/ko/activerecord/course/video/submission.yml deleted file mode 100644 index 6602eacfedb..00000000000 --- a/config/locales/ko/activerecord/course/video/submission.yml +++ /dev/null @@ -1,9 +0,0 @@ -ko: - activerecord: - errors: - models: - course/video/submission: - attributes: - experience_points_record: - inconsistent_user: '생성자는 코스 사용자 기록과 동일해야 합니다' - submission_already_exists: '이미 제출을 생성한 것 같습니다. 다시 시도하시겠습니까?' diff --git a/config/locales/ko/activerecord/course/video/tab.yml b/config/locales/ko/activerecord/course/video/tab.yml deleted file mode 100644 index d28136ab315..00000000000 --- a/config/locales/ko/activerecord/course/video/tab.yml +++ /dev/null @@ -1,11 +0,0 @@ -ko: - activerecord: - attributes: - course/video/tab/title: - default: '기본값' - course/video/tab: - weight: '순서' - errors: - models: - course/video/tab: - deletion: '마지막 탭은 삭제할 수 없습니다' diff --git a/config/locales/ko/activerecord/course_user.yml b/config/locales/ko/activerecord/course_user.yml deleted file mode 100644 index 630fd32d737..00000000000 --- a/config/locales/ko/activerecord/course_user.yml +++ /dev/null @@ -1,8 +0,0 @@ -ko: - activerecord: - errors: - models: - course_user: - attributes: - reference_timeline: - belongs_to_course: '코스에 속해야 합니다' diff --git a/config/locales/ko/activerecord/duplication_traceable.yml b/config/locales/ko/activerecord/duplication_traceable.yml deleted file mode 100644 index 280506702c4..00000000000 --- a/config/locales/ko/activerecord/duplication_traceable.yml +++ /dev/null @@ -1,8 +0,0 @@ -ko: - activerecord: - errors: - models: - duplication_traceable: - attributes: - source_id: - must_exist: '소스는 존재해야 하며 dependent_class의 인스턴스여야 합니다.' diff --git a/config/locales/ko/activerecord/errors.yml b/config/locales/ko/activerecord/errors.yml new file mode 100644 index 00000000000..30288fc645f --- /dev/null +++ b/config/locales/ko/activerecord/errors.yml @@ -0,0 +1,232 @@ +ko: + activerecord: + errors: + models: + course: + attributes: + reference_timelines: + must_have_at_most_one_default: '최대 하나의 기본값만 있어야 합니다' + course/announcement: + attributes: + end_at: + cannot_be_before_start_at: '시작 시각보다 이를 수 없습니다' + course/assessment: + attributes: + tab: + not_in_same_course: '선택한 탭이 평가와 동일한 코스에 있지 않습니다' + no_test_type_chosen: '점수 및 경험치 계산을 위해 적어도 하나의 테스트 유형을 선택해야 합니다' + course/assessment/answer: + attributes: + question: + consistent_assessment: '동일한 평가에 속해야 합니다' + submission: + attemptable_state: '시도 상태여야 합니다' + grade: + no_blank_grade: '이미 채점된 경우 점수는 비워둘 수 없습니다' + consistent_grade: '문제의 최대 점수보다 작아야 합니다' + non_negative_grade: '음수일 수 없습니다' + course/assessment/answer/programming: + attributes: + files: + exceed_size_limit: '제출한 답변(%{total_size_mb} MB)은 2MB 미만이어야 합니다.' + course/assessment/answer/text_response: + attributes: + attachments: + unique: '파일 이름은 중복되어선 안 됩니다' + course/assessment/category: + deletion: '마지막 카테고리는 삭제할 수 없습니다' + course/assessment/question/multiple_response: + attributes: + options: + no_option: '최소한 하나의 옵션을 포함해야 합니다.' + no_correct_option: '최소한 하나의 정답 옵션을 포함해야 합니다.' + course/assessment/question/rubric_based_response: + attributes: + categories: + reserved_category_name: '조정은 예약된 카테고리 이름이므로 사용할 수 없습니다' + duplicate_category_names: '카테고리 이름은 질문 루브릭 내에서 고유해야 합니다' + at_least_one_category: '최소한 하나의 루브릭 카테고리가 필요합니다' + course/assessment/question/rubric_based_response_category: + attributes: + criterions: + duplicate_grades_within_category: '카테고리 내의 점수는 중복될 수 없습니다' + at_least_one_grade: '각 카테고리에는 최소 하나의 점수가 필요합니다' + grade_zero_missing: '각 카테고리에는 0점 가 포함되어야 합니다' + grade_higher_than_maximum_grade: '점수는 최대 점수보다 작거나 같아야 합니다' + course/assessment/question/text_response: + attributes: + maximum_grade: + invalid_grade: '해답의 점수보다 낮을 수 없습니다' + course/assessment/question/text_response_comprehension_group: + attributes: + maximum_group_grade: + invalid_group_grade: '질문의 최대 점수를 초과할 수 없습니다' + course/assessment/question/text_response_comprehension_point: + attributes: + point_grade: + invalid_point_grade: '그룹의 최대 점수를 초과할 수 없습니다' + solutions: + more_than_one_compre_lifted_word_solution: '같은 점수에 대한 모든 선택된 단어는 한 줄에 함께 배치되어야 합니다' + course/assessment/question/text_response_comprehension_solution: + attributes: + solution_lemma: + solution_lemma_empty: '어떤 어휘 형태도 생성할 수 없습니다: 철자를 확인해 주세요' + information: + information_empty: '키워드 솔루션은 비워둘 수 없습니다' + course/assessment/question/text_response_solution: + attributes: + grade: + invalid_grade: '질문의 최대 점수를 초과할 수 없습니다' + course/assessment/question_bundle_assignment: + attributes: + submission: + must_belong_to_assessment_and_user: '평가와 사용자에 속해야 합니다' + course/assessment/skill: + attributes: + course: + consistent_course: '동일한 과정에 속해야 합니다' + course/assessment/submission: + attributes: + experience_points_record: + inconsistent_user: '생성자는 코스 사용자 기록과 동일해야 합니다' + absent_award_attributes: '제출물에 대한 보상 속성이 없습니다. 다시 시도하거나 Coursemology팀에 문의하세요.' + submission_already_exists: '이미 제출물을 생성한 것 같습니다. 다시 시도하시겠습니까?' + no_bundles_assigned: '할당된 문제 묶음이 없습니다. 도움을 받으려면 강사에게 문의하세요.' + autograded_no_partial_answer: '업데이트된 답변이 아직 다시 제출되지 않았습니다. 제출을 완료하기 전에 모든 답변을 다시 제출하세요.' + course/assessment/tab: + deletion: '마지막 탭은 삭제할 수 없습니다' + course/condition: + attributes: + conditional: + not_in_same_course: '선택한 조건이 현재 조건과 동일한 코스에 있지 않습니다' + course/condition/achievement: + attributes: + achievement: + unique_dependency: '중복 조건을 가질 수 없습니다' + references_self: '자기 자신을 조건으로 가질 수 없습니다' + cyclic_dependency: '순환 의존성을 가질 수 없습니다' + course/condition/assessment: + attributes: + assessment: + unique_dependency: '중복 조건을 가질 수 없습니다' + references_self: '자신 자신을 조건으로 가질 수 없습니다' + cyclic_dependency: '순환 의존성을 가질 수 없습니다' + course/condition/scholaistic_assessment: + attributes: + scholaistic_assessment: + unique_dependency: '중복 조건을 가질 수 없습니다' + references_self: '자신 자신을 조건으로 가질 수 없습니다' + course/condition/survey: + attributes: + survey: + unique_dependency: '중복 조건을 가질 수 없습니다' + references_self: '자기 자신을 조건으로 가질 수 없습니다' + cyclic_dependency: '순환 의존성을 가질 수 없습니다' + course/condition/video: + attributes: + video: + unique_dependency: '중복 조건을 가질 수 없습니다' + references_self: '자기 자신을 조건으로 가질 수 없습니다' + cyclic_dependency: '순환 의존성을 가질 수 없습니다' + course/discussion/post: + attributes: + post: + topic_inconsistent: '게시물과 부모 게시물이 다른 주제를 참조하고 있습니다.' + course/enrol_request: + user_in_course: '이미 이 과정에 등록된 것 같습니다. 페이지를 새로고침해 보시겠습니까?' + existing_pending_request: '이미 등록 요청을 제출한 것 같습니다.' + attributes: + base: + deletion: '가입 신청이 처리되었으므로 취소할 수 없습니다.' + course/group_user: + not_enrolled: '그룹과 동일한 과정에 등록되어 있어야 합니다' + course/learning_rate_record: + attributes: + learning_rate: + less_than_min: '유효한 최소값 이상이어야 합니다' + greater_than_max: '유효한 최대값 이하여야 합니다' + course/lesson_plan/item: + attributes: + bonus_end_at: + required: '시간 보너스 경험치가 설정된 경우 비워 둘 수 없습니다' + reference_times: + must_have_at_most_one_default: '기본값은 최대 하나여야 합니다' + course/monitoring/heartbeat: + attributes: + seb_payload: + invalid_seb_payload: 'seb payload는 비어 있거나 유효한 JSON 객체여야 합니다' + course/monitoring/monitor: + attributes: + enabled: + must_be_password_protected: '평가는 활성화를 위해 비밀번호로 보호되어야 합니다' + max_interval_ms: + greater_than_min_interval: '최소 간격보다 커야 합니다' + blocks: + must_have_browser_authorization_and_session_protection: '브라우저 인증 및 세션 보호가 활성화되어 있어야 합니다' + seb_config_key: + required_if_using_seb_config_key_browser_authorization: 'seb 구성 키 브라우저 인증 방법을 사용하는 경우 seb 구성 키가 필요합니다' + course/personal_time: + attributes: + start_at: + cannot_be_after_end_at: '종료 시각 이후일 수 없습니다' + course/reference_time: + attributes: + reference_timeline: + cannot_destroy_in_default_timeline: '기본 참조 타임라인에서 시간을 삭제할 수 없습니다' + start_at: + cannot_be_after_end_at: '종료 시각 이후일 수 없습니다' + lesson_plan_item: + must_be_in_same_course: '참조 타임라인과 동일한 과정에 있어야 합니다' + course/reference_timeline: + attributes: + default: + taken: '기본 참조 타임라인은 하나만 가질 수 있습니다' + cannot_destroy: '기본 참조 타임라인을 삭제할 수 없습니다' + course/scholaistic_assessment: + attributes: + time_bonus_exp: + bonus_attributes_not_allowed: '보너스 속성은 허용되지 않습니다' + course/survey/answer: '이 질문의 답변은 비워둘 수 없습니다.' + course/user_achievement: + attributes: + course_user: + not_in_course: '선택한 사용자가 지정된 코스에 없습니다' + course/user_invitation: '이 이메일 주소에는 아직 완료되지 않은 초대장이 있습니다' + course/video: + attributes: + url: + invalid_url: '입력하신 URL의 형식이 올바르지 않습니다. 다시 시도해 주세요.' + course/video/session: + attributes: + session_start: + cannot_be_after_session_end: '세션은 종료 후에 시작할 수 없습니다' + course/video/submission: + attributes: + experience_points_record: + inconsistent_user: '생성자는 코스 사용자 기록과 동일해야 합니다' + submission_already_exists: '이미 제출을 생성한 것 같습니다. 다시 시도하시겠습니까?' + course/video/tab: + deletion: '마지막 탭은 삭제할 수 없습니다' + course_user: + attributes: + reference_timeline: + belongs_to_course: '코스에 속해야 합니다' + duplication_traceable: + attributes: + source_id: + must_exist: '소스는 존재해야 하며 dependent_class의 인스턴스여야 합니다.' + generic_announcement: + attributes: + end_at: + cannot_be_before_start_at: '시작 시각보다 이를 수 없습니다' + instance/user_role_request: + attributes: + base: + existing_pending_request: '이미 존재하는 역할 요청이 있습니다. 페이지를 새로고침 해주세요.' + messages: + filename_validator: + invalid_characters: '%{characters}는 허용되지 않습니다.' + tailing_dots: '끝에 점이 올 수 없습니다.' + whitespaces: '앞이나 뒤에 공백이 올 수 없습니다.' + time_zone_validator: + invalid_time_zone: '시간대가 유효하지 않습니다.' diff --git a/config/locales/ko/activerecord/filename_validator.yml b/config/locales/ko/activerecord/filename_validator.yml deleted file mode 100644 index dffbcc667ea..00000000000 --- a/config/locales/ko/activerecord/filename_validator.yml +++ /dev/null @@ -1,8 +0,0 @@ -ko: - activerecord: - errors: - messages: - filename_validator: - invalid_characters: '%{characters}는 허용되지 않습니다.' - tailing_dots: '끝에 점이 올 수 없습니다.' - whitespaces: '앞이나 뒤에 공백이 올 수 없습니다.' diff --git a/config/locales/ko/activerecord/generic_announcement.yml b/config/locales/ko/activerecord/generic_announcement.yml deleted file mode 100644 index 11d4e888419..00000000000 --- a/config/locales/ko/activerecord/generic_announcement.yml +++ /dev/null @@ -1,8 +0,0 @@ -ko: - activerecord: - errors: - models: - generic_announcement: - attributes: - end_at: - cannot_be_before_start_at: '시작 시각보다 이를 수 없습니다' diff --git a/config/locales/ko/activerecord/instance.yml b/config/locales/ko/activerecord/instance.yml deleted file mode 100644 index ecbedb1e136..00000000000 --- a/config/locales/ko/activerecord/instance.yml +++ /dev/null @@ -1,9 +0,0 @@ -ko: - activerecord: - errors: - models: - instance/user_role_request: - attributes: - base: - existing_pending_request: > - '이미 존재하는 역할 요청이 있습니다. 페이지를 새로고침 해주세요.' diff --git a/config/locales/ko/activerecord/time_zone_validator.yml b/config/locales/ko/activerecord/time_zone_validator.yml deleted file mode 100644 index f33a36e174b..00000000000 --- a/config/locales/ko/activerecord/time_zone_validator.yml +++ /dev/null @@ -1,6 +0,0 @@ -ko: - activerecord: - errors: - messages: - time_zone_validator: - invalid_time_zone: '시간대가 유효하지 않습니다.' diff --git a/config/locales/ko/common.yml b/config/locales/ko/common.yml deleted file mode 100644 index 15105b55019..00000000000 --- a/config/locales/ko/common.yml +++ /dev/null @@ -1,7 +0,0 @@ -ko: - common: - plain_text_link: '%{text} (%{url})' - click_here: '여기를 클릭하세요' - helpers: - password: - wrong_password: '잘못된 비밀번호' diff --git a/config/locales/ko/components.yml b/config/locales/ko/components.yml deleted file mode 100644 index 4a11a0e74bd..00000000000 --- a/config/locales/ko/components.yml +++ /dev/null @@ -1,56 +0,0 @@ -ko: - components: - announcements: - name: :'course.announcements.index.header' - achievements: - name: :'course.achievement.achievements.index.header' - lesson_plan: - name: :'course.lesson_plan.items.index.header' - assessments: - name: '평가' - forums: - name: :'course.forum.forums.index.header' - groups: - name: :'course.groups.index.header' - levels: - name: :'course.levels.index.header' - leaderboard: - name: :'course.leaderboards.index.header' - materials: - name: :'course.material.sidebar_title' - discussion: - topics: - name: '댓글 센터' - statistics: - name: '통계' - experience_points: - name: '경험치' - duplication: - name: '복제' - video: - name: :'course.video.videos.index.header' - settings: - name: '설정' - users: - name: '사용자' - surveys: - name: '설문' - learning_map: - name: '학습 지도' - codaveri: - name: 'Codaveri 평가 및 피드백' - multiple_reference_timelines: - name: '다중 참조 타임라인' - monitoring: - name: '시험 모니터링' - scholaistic: - name: '롤플레잉 챗봇 및 평가' - manage_assistants: '학습 조수' - stories: - name: '이야기' - koditsu_platform: - name: 'Koditsu 시험' - rag_wise: - name: 'RagWise 자동 포럼 응답' - plagiarism: - name: 'SSID 표절 검사' diff --git a/config/locales/ko/course/achievement/achievements.yml b/config/locales/ko/course/achievement/achievements.yml deleted file mode 100644 index e8d821eb276..00000000000 --- a/config/locales/ko/course/achievement/achievements.yml +++ /dev/null @@ -1,7 +0,0 @@ -ko: - course: - achievement: - achievements: - sidebar_title: :'course.achievement.achievements.index.header' - index: - header: '성과' diff --git a/config/locales/ko/course/announcements.yml b/config/locales/ko/course/announcements.yml deleted file mode 100644 index 1d9a1aeec95..00000000000 --- a/config/locales/ko/course/announcements.yml +++ /dev/null @@ -1,6 +0,0 @@ -ko: - course: - announcements: - sidebar_title: :'course.announcements.index.header' - index: - header: '공지사항' diff --git a/config/locales/ko/course/assessment/answer/programming_auto_grading.yml b/config/locales/ko/course/assessment/answer/programming_auto_grading.yml deleted file mode 100644 index 6d18b8ed864..00000000000 --- a/config/locales/ko/course/assessment/answer/programming_auto_grading.yml +++ /dev/null @@ -1,36 +0,0 @@ -ko: - course: - assessment: - answer: - programming_auto_grading: - grade: - evaluation_failed_syntax: > - 코드가 올바르게 평가되지 않았습니다. 구문 오류가 있거나 지원되지 않는 라이브러리가 - 사용되었을 수 있습니다. 코드를 다시 확인해 주세요. - evaluation_failed_time_or_memory: > - 코드가 할당된 시간 또는 메모리 제한 내에 완료되지 않았습니다. - stdout_too_long: > - 코드 실행이 너무 많은 stdout 출력을 생성하여 중단되었습니다. - 불필요한 출력을 제거하고 다시 시도해주세요. - stderr_too_long: > - 코드 실행이 너무 많은 stderr 출력을 생성하여 중단되었습니다. - 불필요한 출력을 제거하고 다시 시도해주세요. - time_limit_error: > - 시간 제한 초과 (TLE) 오류 - memory_limit_error: > - 메모리 제한 초과 (MLE) 오류 - job: - failure: - time_limit_breached: > - 평가기가 실행 중에 종료되었습니다. 이 문제의 시간 제한이 coursemology에서 - 허용되는 평가기 시간 제한을 초과했을 수 있습니다. 이 문제에 대해 강사에게 문의하시고, 문제가 계속되면 coursemology - 관리자에게 문의하세요. - timeout_error: > - 작업 실행 시간이 길어져 타임아웃 오류가 발생했습니다. 몇 분 후에 다시 시도해 주세요. 문제가 - 계속되면 강사나 coursemology 관리자에게 문의하세요. - container_unreachable: > - 평가기를 위한 도커 생성 중 오류가 발생했습니다. 서버 작업 부하가 높기 때문일 - 수 있습니다. 몇 분 후에 다시 시도해 주세요. 문제가 계속되면 강사나 coursemology 관리자에게 문의하세요. - generic_error: > - 오류가 발생했습니다. 서버가 바쁠 수 있으니 몇 분 후에 다시 시도해 보세요. 동일한 문제가 - 계속되면, coursemology 관리자에게 문의하고 이 페이지의 URL을 제공하며 다음 오류를 함께 제공해주세요: '"%{error}" diff --git a/config/locales/ko/course/assessment/assessments.yml b/config/locales/ko/course/assessment/assessments.yml index 1551ed9c468..aec245e5ec3 100644 --- a/config/locales/ko/course/assessment/assessments.yml +++ b/config/locales/ko/course/assessment/assessments.yml @@ -3,9 +3,6 @@ ko: assessment: assessments: invalid_questions_order: '평가 질문의 순서가 잘못되었습니다' - sidebar_title: :'course.assessment.assessments.index.header' - index: - header: '평가' show: public_test: '공개' private_test: '비공개' diff --git a/config/locales/ko/course/assessment/live_feedback/thread.yml b/config/locales/ko/course/assessment/live_feedback/thread.yml deleted file mode 100644 index 53fa01be691..00000000000 --- a/config/locales/ko/course/assessment/live_feedback/thread.yml +++ /dev/null @@ -1,6 +0,0 @@ -ko: - course: - assessment: - live_feedback: - thread: - only_one_active_thread: '제출 질문당 활성화된 스레드는 하나만 존재할 수 있습니다' diff --git a/config/locales/ko/course/assessment/skills.yml b/config/locales/ko/course/assessment/skills.yml deleted file mode 100644 index 3674ea608e9..00000000000 --- a/config/locales/ko/course/assessment/skills.yml +++ /dev/null @@ -1,7 +0,0 @@ -ko: - course: - assessment: - skills: - sidebar_title: '기술' - index: - header: '기술' diff --git a/config/locales/ko/course/assessment/submission/submissions.yml b/config/locales/ko/course/assessment/submission/submissions.yml deleted file mode 100644 index 3efb9e7809b..00000000000 --- a/config/locales/ko/course/assessment/submission/submissions.yml +++ /dev/null @@ -1,35 +0,0 @@ -ko: - course: - assessment: - submission: - submissions: - download_statistics: - no_submission_statistics: '다운로드 요구 사항을 충족하는 제출물이 없습니다' - statistics_download_service: - name: '이름' - phantom: '팬텀 사용자' - status: '상태' - grade: '점수' - max_grade: '최고 점수' - exp_points: '경험치' - start_date_time: '시작 날짜/시간' - submitted_date_time: '제출 날짜/시간' - time_taken: '소요 시간' - graded_date_time: '채점 날짜/시간' - grading_time: '채점 시간' - grader: '채점자' - publisher: '발행자' - csv_empty: '-' - csv_download_service: - note: 'N/A: 답변 형식을 하나의 셀에 맞출 수 없습니다.' - name: '이름' - email: '이메일' - role: '역할' - user_type: '사용자 유형' - status: '상태' - question_title: '질문 제목' - question_type: '질문 유형' - normal: '일반' - phantom: '팬텀' - unstarted: '시작되지 않음' - no_answer: '답변 없음' diff --git a/config/locales/ko/course/assessment/submissions.yml b/config/locales/ko/course/assessment/submissions.yml deleted file mode 100644 index f970f6cac56..00000000000 --- a/config/locales/ko/course/assessment/submissions.yml +++ /dev/null @@ -1,9 +0,0 @@ -ko: - course: - assessment: - submissions: - sidebar_title: :'course.assessment.submissions.index.header' - index: - header: '제출물' - pending: - header: '대기 중인 제출물' diff --git a/config/locales/ko/course/discussion/topics.yml b/config/locales/ko/course/discussion/topics.yml deleted file mode 100644 index 229d62d0668..00000000000 --- a/config/locales/ko/course/discussion/topics.yml +++ /dev/null @@ -1,13 +0,0 @@ -ko: - course: - discussion: - topics: - sidebar_title: :'course.discussion.topics.index.header' - index: - header: '댓글' - pending: - header: :'course.discussion.topics.index.header' - my_students: - header: :'course.discussion.topics.index.header' - my_students_pending: - header: :'course.discussion.topics.index.header' diff --git a/config/locales/ko/course/experience_points/disbursement.yml b/config/locales/ko/course/experience_points/disbursement.yml deleted file mode 100644 index d54b5a4ae68..00000000000 --- a/config/locales/ko/course/experience_points/disbursement.yml +++ /dev/null @@ -1,7 +0,0 @@ -ko: - course: - experience_points: - disbursement: - sidebar_title: '경험치' - new: - header: '경험 포인트 지급' diff --git a/config/locales/ko/course/experience_points/forum_disbursement.yml b/config/locales/ko/course/experience_points/forum_disbursement.yml deleted file mode 100644 index a61a94d5a41..00000000000 --- a/config/locales/ko/course/experience_points/forum_disbursement.yml +++ /dev/null @@ -1,6 +0,0 @@ -ko: - course: - experience_points: - forum_disbursement: - new: - header: :'course.experience_points.disbursement.new.header' diff --git a/config/locales/ko/course/experience_points_records.yml b/config/locales/ko/course/experience_points_records.yml deleted file mode 100644 index 98189707dcc..00000000000 --- a/config/locales/ko/course/experience_points_records.yml +++ /dev/null @@ -1,11 +0,0 @@ -ko: - course: - experience_points_records: - index: - header: '%{name}의 경험치 기록' - download: - name: '이름' - updated_at: '업데이트 날짜' - updater: '업데이트한 사람' - reason: '이유' - exp_points: '경험치 획득' diff --git a/config/locales/ko/course/forum/forums.yml b/config/locales/ko/course/forum/forums.yml deleted file mode 100644 index f132a3df945..00000000000 --- a/config/locales/ko/course/forum/forums.yml +++ /dev/null @@ -1,7 +0,0 @@ -ko: - course: - forum: - forums: - sidebar_title: '포럼' - index: - header: '포럼' diff --git a/config/locales/ko/course/groups.yml b/config/locales/ko/course/groups.yml deleted file mode 100644 index 2b7717755d3..00000000000 --- a/config/locales/ko/course/groups.yml +++ /dev/null @@ -1,12 +0,0 @@ -ko: - course: - groups: - sidebar_title: :'course.group.group_categories.index.header' - index: - header: :'course.group.group_categories.index.header' - group: - group_categories: - index: - header: '그룹' - show: - header: '그룹' diff --git a/config/locales/ko/course/leaderboards.yml b/config/locales/ko/course/leaderboards.yml deleted file mode 100644 index 89fd1afe361..00000000000 --- a/config/locales/ko/course/leaderboards.yml +++ /dev/null @@ -1,7 +0,0 @@ -ko: - course: - leaderboards: - sidebar_title: :'course.leaderboards.index.header' - title: :'course.leaderboards.index.header' - index: - header: '리더보드' diff --git a/config/locales/ko/course/learning_map.yml b/config/locales/ko/course/learning_map.yml deleted file mode 100644 index 6cb94f48062..00000000000 --- a/config/locales/ko/course/learning_map.yml +++ /dev/null @@ -1,5 +0,0 @@ -ko: - course: - learning_map: - index: - header: '학습 지도' diff --git a/config/locales/ko/course/lesson_plan/items.yml b/config/locales/ko/course/lesson_plan/items.yml deleted file mode 100644 index 76019621143..00000000000 --- a/config/locales/ko/course/lesson_plan/items.yml +++ /dev/null @@ -1,17 +0,0 @@ -ko: - course: - lesson_plan: - items: - sidebar_title: :'course.lesson_plan.items.index.header' - index: - header: '수업 계획' - activerecord: - attributes: - course/lesson_plan/item: - reference_times: '참조 시간' - errors: - models: - course/lesson_plan/item: - attributes: - reference_times: - must_have_at_most_one_default: '기본값은 최대 하나여야 합니다' diff --git a/config/locales/ko/course/levels.yml b/config/locales/ko/course/levels.yml deleted file mode 100644 index 5e2478e7435..00000000000 --- a/config/locales/ko/course/levels.yml +++ /dev/null @@ -1,6 +0,0 @@ -ko: - course: - levels: - sidebar_title: :'course.levels.index.header' - index: - header: '레벨' diff --git a/config/locales/ko/course/mailer/assessment_closing_reminder_email.yml b/config/locales/ko/course/mailer/assessment_closing_reminder_email.yml deleted file mode 100644 index 86cb628c28e..00000000000 --- a/config/locales/ko/course/mailer/assessment_closing_reminder_email.yml +++ /dev/null @@ -1,9 +0,0 @@ -ko: - course: - mailer: - assessment_closing_reminder_email: - subject: '%{course}: %{assessment}에 대한 알림' - message: > - %{assessment}의 마감일이 %{time}임을 알려드립니다. - message_no_time: > - 평가 - %{assessment}을(를) 시도하고 제출하시기 바랍니다. diff --git a/config/locales/ko/course/mailer/assessment_closing_summary_email.yml b/config/locales/ko/course/mailer/assessment_closing_summary_email.yml deleted file mode 100644 index 1b7dc77a482..00000000000 --- a/config/locales/ko/course/mailer/assessment_closing_summary_email.yml +++ /dev/null @@ -1,13 +0,0 @@ -ko: - course: - mailer: - assessment_closing_summary_email: - subject: '%{course}: %{assessment}에 대한 알림' - message: > - 다음 학생들에게 %{assessment}이(가) %{time}에 마감된다는 알림 이메일이 발송되었습니다: - - %{students} - message_no_time: > - 다음 학생들에게 평가 - %{assessment}을(를) 시도하고 제출하라는 알림 이메일이 발송되었습니다: - - %{students} diff --git a/config/locales/ko/course/mailer/course_duplicate_failed_email.yml b/config/locales/ko/course/mailer/course_duplicate_failed_email.yml deleted file mode 100644 index f6932534d5d..00000000000 --- a/config/locales/ko/course/mailer/course_duplicate_failed_email.yml +++ /dev/null @@ -1,7 +0,0 @@ -ko: - course: - mailer: - course_duplicate_failed_email: - subject: '코스 복제 실패: %{original_course}' - message: > - %{original_course} 복제가 실패했습니다. 나중에 다시 시도하거나 문제가 지속되면 지원팀에 문의하세요. diff --git a/config/locales/ko/course/mailer/course_duplicated_email.yml b/config/locales/ko/course/mailer/course_duplicated_email.yml deleted file mode 100644 index c8d8c06b4d3..00000000000 --- a/config/locales/ko/course/mailer/course_duplicated_email.yml +++ /dev/null @@ -1,10 +0,0 @@ -ko: - course: - mailer: - course_duplicated_email: - subject: '코스 복제 완료: %{new_course}' - click_here: '여기를 클릭하세요' - message: > - %{original_course}의 복제가 %{new_course}로 완료되었습니다. - - 복제된 코스를 보려면 %{click_here}. diff --git a/config/locales/ko/course/mailer/course_user_deletion_failed_email.yml b/config/locales/ko/course/mailer/course_user_deletion_failed_email.yml deleted file mode 100644 index e35a88538ce..00000000000 --- a/config/locales/ko/course/mailer/course_user_deletion_failed_email.yml +++ /dev/null @@ -1,8 +0,0 @@ -ko: - course: - mailer: - course_user_deletion_failed_email: - subject: '사용자 %{course_user_name}을(를) %{course_name}에서 삭제하지 못했습니다' - message: > - 사용자 %{course_user_name}을(를) %{course_name} 강좌에서 삭제하지 못했습니다. - 나중에 다시 시도하거나 문제가 지속되면 지원팀에 문의하십시오. diff --git a/config/locales/ko/course/mailer/submission_graded_email.yml b/config/locales/ko/course/mailer/submission_graded_email.yml deleted file mode 100644 index 2f25701eaea..00000000000 --- a/config/locales/ko/course/mailer/submission_graded_email.yml +++ /dev/null @@ -1,7 +0,0 @@ -ko: - course: - mailer: - submission_graded_email: - subject: '%{course}: %{assessment} 제출물이 채점되었습니다' - message: > - 성적을 보려면 %{submission}을 클릭하세요. diff --git a/config/locales/ko/course/mailer/survey_closing_reminder_email.yml b/config/locales/ko/course/mailer/survey_closing_reminder_email.yml deleted file mode 100644 index b52f4e37605..00000000000 --- a/config/locales/ko/course/mailer/survey_closing_reminder_email.yml +++ /dev/null @@ -1,7 +0,0 @@ -ko: - course: - mailer: - survey_closing_reminder_email: - subject: '%{course}: %{survey}에 대한 알림' - message: > - %{survey}가 %{time}에 만료될 예정이니 참고하시기 바랍니다. diff --git a/config/locales/ko/course/mailer/survey_closing_summary_reminder.yml b/config/locales/ko/course/mailer/survey_closing_summary_reminder.yml deleted file mode 100644 index 7195e7db395..00000000000 --- a/config/locales/ko/course/mailer/survey_closing_summary_reminder.yml +++ /dev/null @@ -1,9 +0,0 @@ -ko: - course: - mailer: - survey_closing_summary_email: - subject: '%{course}: %{survey}에 대한 알림' - message: > - %{survey}가 %{time}에 만료될 것임을 알리기 위해 다음 학생들에게 이메일이 발송되었습니다: - - %{student_list} diff --git a/config/locales/ko/course/mailer/user_added_email.yml b/config/locales/ko/course/mailer/user_added_email.yml deleted file mode 100644 index ddd36c6beaa..00000000000 --- a/config/locales/ko/course/mailer/user_added_email.yml +++ /dev/null @@ -1,9 +0,0 @@ -ko: - course: - mailer: - user_added_email: - subject: '%{course} 과정에 추가됨' - message: > - %{coursemology}의 %{course} 과정에 추가되었습니다. - - 과정을 보려면 %{email}로 로그인하세요. diff --git a/config/locales/ko/course/mailer/user_enrol_requested_email.yml b/config/locales/ko/course/mailer/user_enrol_requested_email.yml deleted file mode 100644 index f84f8a379a3..00000000000 --- a/config/locales/ko/course/mailer/user_enrol_requested_email.yml +++ /dev/null @@ -1,11 +0,0 @@ -ko: - course: - mailer: - user_enrol_requested_email: - subject: '%{course} 등록 요청' - recipients: '코스 관리자' - message: > - %{user}님이 %{course}에 등록을 요청했습니다. - - - 요청을 확인하고 승인하려면 %{course_requests_page}를 방문하세요. diff --git a/config/locales/ko/course/mailer/user_invitation_email.yml b/config/locales/ko/course/mailer/user_invitation_email.yml deleted file mode 100644 index 900166935e3..00000000000 --- a/config/locales/ko/course/mailer/user_invitation_email.yml +++ /dev/null @@ -1,17 +0,0 @@ -ko: - course: - mailer: - user_invitation_email: - subject: '%{course} 등록 초대' - click_here: '여기를 클릭하세요' - message: > - %{coursemology}의 %{course}에 등록하도록 초대되었습니다. - - - 이 이메일 주소(%{email})로 등록된 계정이 없는 것 같습니다; - - 계정을 생성하고 초대를 수락하려면 %{click_here}. - - - 다른 이메일로 등록된 Coursemology 계정이 있는 경우, %{course}를 방문하여 다음의 양도 불가능한 등록 코드를 사용하여 - 등록하세요: diff --git a/config/locales/ko/course/mailer/user_rejected_email.yml b/config/locales/ko/course/mailer/user_rejected_email.yml deleted file mode 100644 index ffaf60a9152..00000000000 --- a/config/locales/ko/course/mailer/user_rejected_email.yml +++ /dev/null @@ -1,7 +0,0 @@ -ko: - course: - mailer: - user_rejected_email: - subject: '강좌 등록 요청이 거부되었습니다 - %{course}' - message: > - %{coursemology}에서 %{course} 강좌에 대한 귀하의 등록 요청이 거부되었습니다! diff --git a/config/locales/ko/course/material/materials.yml b/config/locales/ko/course/material/materials.yml deleted file mode 100644 index b8b3ba64d30..00000000000 --- a/config/locales/ko/course/material/materials.yml +++ /dev/null @@ -1,4 +0,0 @@ -ko: - course: - material: - sidebar_title: '자료' diff --git a/config/locales/ko/course/plagiarism.yml b/config/locales/ko/course/plagiarism.yml deleted file mode 100644 index 96579cc8630..00000000000 --- a/config/locales/ko/course/plagiarism.yml +++ /dev/null @@ -1,4 +0,0 @@ -ko: - course: - plagiarism: - header: '표절 검사' diff --git a/config/locales/ko/course/reference_timelines.yml b/config/locales/ko/course/reference_timelines.yml deleted file mode 100644 index 035af096296..00000000000 --- a/config/locales/ko/course/reference_timelines.yml +++ /dev/null @@ -1,5 +0,0 @@ -ko: - course: - reference_timelines: - reference_timeline: - default_title: '기본 타임라인' diff --git a/config/locales/ko/course/scholaistic.yml b/config/locales/ko/course/scholaistic.yml deleted file mode 100644 index 8271e0ed60f..00000000000 --- a/config/locales/ko/course/scholaistic.yml +++ /dev/null @@ -1,4 +0,0 @@ -ko: - course: - scholaistic: - assessments: "롤플레잉 평가" diff --git a/config/locales/ko/course/statistics.yml b/config/locales/ko/course/statistics.yml deleted file mode 100644 index 15bd20b2412..00000000000 --- a/config/locales/ko/course/statistics.yml +++ /dev/null @@ -1,7 +0,0 @@ -ko: - course: - statistics: - name: '이름' - type: '학생 유형' - email: '이메일' - header: '통계' diff --git a/config/locales/ko/course/stories.yml b/config/locales/ko/course/stories.yml deleted file mode 100644 index c459eb1ce09..00000000000 --- a/config/locales/ko/course/stories.yml +++ /dev/null @@ -1,5 +0,0 @@ -ko: - course: - stories: - learn: '배우다' - mission_control: '미션 컨트롤' diff --git a/config/locales/ko/course/survey/responses.yml b/config/locales/ko/course/survey/responses.yml deleted file mode 100644 index 3b73e00e5d9..00000000000 --- a/config/locales/ko/course/survey/responses.yml +++ /dev/null @@ -1,5 +0,0 @@ -ko: - course: - survey: - responses: - no_course_user: '설문 조사를 시작하려면 이 과정의 멤버가 되어야 합니다.' diff --git a/config/locales/ko/course/survey/surveys.yml b/config/locales/ko/course/survey/surveys.yml deleted file mode 100644 index 59631e77696..00000000000 --- a/config/locales/ko/course/survey/surveys.yml +++ /dev/null @@ -1,10 +0,0 @@ -ko: - course: - surveys: - survey_download_service: - created_at: '타임스탬프 생성' - updated_at: '마지막으로 업데이트된 타임스탬프' - course_user_id: '코스 사용자 ID' - name: '이름' - role: '역할' - unknown_question_type: '알 수 없는 질문 유형' diff --git a/config/locales/ko/course/surveys.yml b/config/locales/ko/course/surveys.yml deleted file mode 100644 index be73b742ba1..00000000000 --- a/config/locales/ko/course/surveys.yml +++ /dev/null @@ -1,4 +0,0 @@ -ko: - course: - surveys: - sidebar_title: '설문' diff --git a/config/locales/ko/course/user_invitations.yml b/config/locales/ko/course/user_invitations.yml deleted file mode 100644 index a3b34de9535..00000000000 --- a/config/locales/ko/course/user_invitations.yml +++ /dev/null @@ -1,6 +0,0 @@ -ko: - course: - user_invitations: - errors: - duplicate_user: '%{user}가 제출물에 여러 번 나타납니다.' - invalid_email: '%{email}이(가) 유효하지 않습니다: %{message}.' diff --git a/config/locales/ko/course/user_registrations.yml b/config/locales/ko/course/user_registrations.yml deleted file mode 100644 index f58d88cfebb..00000000000 --- a/config/locales/ko/course/user_registrations.yml +++ /dev/null @@ -1,10 +0,0 @@ -ko: - course: - user_registrations: - create: - invalid_code: '잘못된 초대 코드를 입력하셨습니다.' - code_taken: > - 제공된 초대 코드는 다른 계정에서 사용되었습니다. 해당 계정을 사용하여 코스에 접근해 주세요. - code_taken_with_email: > - 제공된 초대 코드는 %{email}에서 사용되었습니다. 해당 계정을 사용하여 코스에 접근해 - 주세요. diff --git a/config/locales/ko/course/users.yml b/config/locales/ko/course/users.yml deleted file mode 100644 index 9da568388a0..00000000000 --- a/config/locales/ko/course/users.yml +++ /dev/null @@ -1,19 +0,0 @@ -ko: - course: - users: - sidebar_title: :'course.users.index.header' - role: - student: '학생' - teaching_assistant: '조교' - observer: '관찰자' - manager: '관리자' - owner: '소유자' - phantom: '팬텀' - new: - already_registered: '당신은 이미 %{role}(으)로 등록되어 있습니다.' - students: - header: '학생들' - staff: - header: '직원' - index: - header: '학생들' diff --git a/config/locales/ko/course/video/videos.yml b/config/locales/ko/course/video/videos.yml deleted file mode 100644 index 3d68aa0f1c1..00000000000 --- a/config/locales/ko/course/video/videos.yml +++ /dev/null @@ -1,7 +0,0 @@ -ko: - course: - video: - videos: - sidebar_title: :'course.video.videos.index.header' - index: - header: '비디오' diff --git a/config/locales/ko/csv.yml b/config/locales/ko/csv.yml new file mode 100644 index 00000000000..6a1a238665c --- /dev/null +++ b/config/locales/ko/csv.yml @@ -0,0 +1,64 @@ +ko: + csv: + # Assessment submissions - detailed answers export + assessment_submissions: + headers: + name: '이름' + email: '이메일' + role: '역할' + user_type: '사용자 유형' + status: '상태' + question_title: '질문 제목' + question_type: '질문 유형' + values: + normal: '일반' + phantom: '팬텀' + unstarted: '시작되지 않음' + no_answer: '답변 없음' + note: 'N/A: 답변 형식을 하나의 셀에 맞출 수 없습니다.' + + # Assessment statistics - summary export + assessment_statistics: + headers: + name: '이름' + phantom: '팬텀 사용자' + status: '상태' + grade: '점수' + max_grade: '최고 점수' + exp_points: '경험치' + start_date_time: '시작 날짜/시간' + submitted_date_time: '제출 날짜/시간' + time_taken: '소요 시간' + graded_date_time: '채점 날짜/시간' + grading_time: '채점 시간' + grader: '채점자' + publisher: '발행자' + values: + empty: '-' + + # Experience points records export + experience_points: + headers: + name: '이름' + updated_at: '업데이트 날짜' + updater: '업데이트한 사람' + reason: '이유' + exp_points: '경험치 획득' + + # Survey responses export + survey: + headers: + created_at: '타임스탬프 생성' + updated_at: '마지막으로 업데이트된 타임스탬프' + course_user_id: '코스 사용자 ID' + name: '이름' + role: '역할' + values: + unknown_question_type: '알 수 없는 질문 유형' + + # Assessment score summary statistics export + score_summary: + headers: + name: '이름' + type: '학생 유형' + email: '이메일' diff --git a/config/locales/ko/errors.yml b/config/locales/ko/errors.yml new file mode 100644 index 00000000000..f57ad1ceb02 --- /dev/null +++ b/config/locales/ko/errors.yml @@ -0,0 +1,79 @@ +ko: + errors: + authentication: + wrong_password: '잘못된 비밀번호' + code_formatter: + size_too_big: '파일이 너무 커서 표시할 수 없습니다.' + course: + users: + already_registered: '당신은 이미 %{role}(으)로 등록되어 있습니다.' + role: + student: '학생' + teaching_assistant: '조교' + observer: '관찰자' + manager: '관리자' + owner: '소유자' + phantom: '팬텀' + user_invitations: + duplicate_user: '%{user}가 제출물에 여러 번 나타납니다.' + invalid_email: '%{email}이(가) 유효하지 않습니다: %{message}.' + user_registrations: + invalid_code: '잘못된 초대 코드를 입력하셨습니다.' + code_taken: > + 제공된 초대 코드는 다른 계정에서 사용되었습니다. 해당 계정을 사용하여 코스에 접근해 주세요. + code_taken_with_email: > + 제공된 초대 코드는 %{email}에서 사용되었습니다. 해당 계정을 사용하여 코스에 접근해 + 주세요. + assessment: + answer: + programming_auto_grading: + grade: + evaluation_failed_syntax: > + 코드가 올바르게 평가되지 않았습니다. 구문 오류가 있거나 지원되지 않는 라이브러리가 + 사용되었을 수 있습니다. 코드를 다시 확인해 주세요. + evaluation_failed_time_or_memory: > + 코드가 할당된 시간 또는 메모리 제한 내에 완료되지 않았습니다. + stdout_too_long: > + 코드 실행이 너무 많은 stdout 출력을 생성하여 중단되었습니다. + 불필요한 출력을 제거하고 다시 시도해주세요. + stderr_too_long: > + 코드 실행이 너무 많은 stderr 출력을 생성하여 중단되었습니다. + 불필요한 출력을 제거하고 다시 시도해주세요. + time_limit_error: > + 시간 제한 초과 (TLE) 오류 + memory_limit_error: > + 메모리 제한 초과 (MLE) 오류 + job: + failure: + time_limit_breached: > + 평가기가 실행 중에 종료되었습니다. 이 문제의 시간 제한이 coursemology에서 + 허용되는 평가기 시간 제한을 초과했을 수 있습니다. 이 문제에 대해 강사에게 문의하시고, 문제가 계속되면 coursemology + 관리자에게 문의하세요. + timeout_error: > + 작업 실행 시간이 길어져 타임아웃 오류가 발생했습니다. 몇 분 후에 다시 시도해 주세요. 문제가 + 계속되면 강사나 coursemology 관리자에게 문의하세요. + container_unreachable: > + 평가기를 위한 도커 생성 중 오류가 발생했습니다. 서버 작업 부하가 높기 때문일 + 수 있습니다. 몇 분 후에 다시 시도해 주세요. 문제가 계속되면 강사나 coursemology 관리자에게 문의하세요. + generic_error: > + 오류가 발생했습니다. 서버가 바쁠 수 있으니 몇 분 후에 다시 시도해 보세요. 동일한 문제가 + 계속되면, coursemology 관리자에게 문의하고 이 페이지의 URL을 제공하며 다음 오류를 함께 제공해주세요: '"%{error}" + live_feedback: + thread: + only_one_active_thread: '제출 질문당 활성화된 스레드는 하나만 존재할 수 있습니다' + submission: + download_statistics: + no_submissions: '다운로드 요구 사항을 충족하는 제출물이 없습니다' + survey: + responses: + no_course_user: '설문 조사를 시작하려면 이 과정의 멤버가 되어야 합니다.' + user: + emails: + no_confirmed_emails: '기본 이메일로 설정할 수 있는 확인된 이메일 주소가 없습니다.' + already_confirmed: '%{email}은(는) 이미 확인되었습니다.' + registrations: + used: > + 제공된 초대 코드는 다른 계정에서 사용되었습니다. 해당 계정으로 로그인해 주세요. + used_with_email: > + 제공된 초대 코드는 %{email}에서 사용되었습니다. 해당 계정으로 로그인해 주세요. + verify_recaptcha_alert: '아래 reCAPTCHA에 오류가 발생했습니다. 다시 시도해 주세요.' diff --git a/config/locales/ko/instance/mailer/user_added_email.yml b/config/locales/ko/instance/mailer/user_added_email.yml deleted file mode 100644 index c472f67b058..00000000000 --- a/config/locales/ko/instance/mailer/user_added_email.yml +++ /dev/null @@ -1,9 +0,0 @@ -ko: - instance: - mailer: - user_added_email: - subject: '인스턴스 %{instance}에 추가됨' - message: > - 당신은 %{coursemology}의 인스턴스 %{instance}에 추가되었습니다. - - 인스턴스를 보려면 %{email}로 로그인하세요. diff --git a/config/locales/ko/instance/mailer/user_invitation_email.yml b/config/locales/ko/instance/mailer/user_invitation_email.yml deleted file mode 100644 index fb2ad6e792a..00000000000 --- a/config/locales/ko/instance/mailer/user_invitation_email.yml +++ /dev/null @@ -1,13 +0,0 @@ -ko: - instance: - mailer: - user_invitation_email: - subject: '%{instance} 인스턴스에 %{role} 역할로 초대합니다' - click_here: '여기를 클릭하세요' - message: > - %{coursemology}의 %{instance} 인스턴스에 등록하도록 초대되었습니다. - - - 이 이메일 주소(%{email})로 등록된 계정이 없는 것 같습니다; - - 계정을 생성하고 초대를 수락하려면 %{click_here} 하세요. diff --git a/config/locales/ko/layout.yml b/config/locales/ko/layout.yml deleted file mode 100644 index 7ab47d14021..00000000000 --- a/config/locales/ko/layout.yml +++ /dev/null @@ -1,37 +0,0 @@ -ko: - layout: - coursemology: 'Coursemology' - layouts: - course_admin: - title: '코스 설정' - course_settings: - title: '일반' - announcement_settings: - title: :'course.announcements.index.header' - component_settings: - title: '구성 요소' - sidebar_settings: - title: '사이드바' - notifications: - title: '이메일' - lesson_plan: - title: '수업 계획' - codaveri: - title: 'Codaveri 평가 및 피드백' - rag_wise: - title: 'RagWise 자동 포럼 응답' - course_users: - title: '사용자 관리' - duplication: - title: '데이터 복제' - mailer: - greeting: '안녕하세요, %{user}:' - code_formatter: - size_too_big: '파일이 너무 커서 표시할 수 없습니다.' - learning_map: - title: '학습 지도' - multiple_reference_timelines: - timeline_designer: '타임라인 디자이너' - manage_email_subscription: - tag: '구독 취소' - message: '%{manage_email_subscription_link} 이 이메일 주제에서 구독을 취소합니다.' diff --git a/config/locales/ko/mailers.yml b/config/locales/ko/mailers.yml new file mode 100644 index 00000000000..4b359d55d13 --- /dev/null +++ b/config/locales/ko/mailers.yml @@ -0,0 +1,243 @@ +ko: + common: + # Shared keys used across course mailers, instance mailers, and notifiers + mailers: + anonymous_course_user: 익명 사용자 + click_here: '여기를 클릭하세요' + coursemology: 'Coursemology' + greeting: '안녕하세요, %{user}:' + manage_email_subscription: + tag: '구독 취소' + message: '%{manage_email_subscription_link} 이 이메일 주제에서 구독을 취소합니다.' + plain_text_link: '%{text} (%{url})' + phantom_course_user: '(유령)' + course: + mailer: + assessment_closing_reminder_email: + subject: '%{course}: %{assessment}에 대한 알림' + message: > + %{assessment}의 마감일이 %{time}임을 알려드립니다. + message_no_time: > + 평가 - %{assessment}을(를) 시도하고 제출하시기 바랍니다. + assessment_closing_summary_email: + subject: '%{course}: %{assessment}에 대한 알림' + message: > + 다음 학생들에게 %{assessment}이(가) %{time}에 마감된다는 알림 이메일이 발송되었습니다: + + %{students} + message_no_time: > + 다음 학생들에게 평가 - %{assessment}을(를) 시도하고 제출하라는 알림 이메일이 발송되었습니다: + + %{students} + course_duplicate_failed_email: + subject: '코스 복제 실패: %{original_course}' + message: > + %{original_course} 복제가 실패했습니다. 나중에 다시 시도하거나 문제가 지속되면 지원팀에 문의하세요. + course_duplicated_email: + subject: '코스 복제 완료: %{new_course}' + message: > + %{original_course}의 복제가 %{new_course}로 완료되었습니다. + + 복제된 코스를 보려면 %{click_here}. + course_user_deletion_failed_email: + subject: '사용자 %{course_user_name}을(를) %{course_name}에서 삭제하지 못했습니다' + message: > + 사용자 %{course_user_name}을(를) %{course_name} 강좌에서 삭제하지 못했습니다. + 나중에 다시 시도하거나 문제가 지속되면 지원팀에 문의하십시오. + submission_graded_email: + subject: '%{course}: %{assessment} 제출물이 채점되었습니다' + message: > + 성적을 보려면 %{submission}을 클릭하세요. + survey_closing_reminder_email: + subject: '%{course}: %{survey}에 대한 알림' + message: > + %{survey}가 %{time}에 만료될 예정이니 참고하시기 바랍니다. + survey_closing_summary_email: + subject: '%{course}: %{survey}에 대한 알림' + message: > + %{survey}가 %{time}에 만료될 것임을 알리기 위해 다음 학생들에게 이메일이 발송되었습니다: + + %{student_list} + user_added_email: + subject: '%{course} 과정에 추가됨' + message: > + %{coursemology}의 %{course} 과정에 추가되었습니다. + + 과정을 보려면 %{email}로 로그인하세요. + user_enrol_requested_email: + subject: '%{course} 등록 요청' + recipients: '코스 관리자' + user_requests_header: '사용자 요청' + message: > + %{user}님이 %{course}에 등록을 요청했습니다. + + + 요청을 확인하고 승인하려면 %{course_requests_page}를 방문하세요. + user_invitation_email: + subject: '%{course} 등록 초대' + message: > + %{coursemology}의 %{course}에 등록하도록 초대되었습니다. + + + 이 이메일 주소(%{email})로 등록된 계정이 없는 것 같습니다; + + 계정을 생성하고 초대를 수락하려면 %{click_here}. + + + 다른 이메일로 등록된 Coursemology 계정이 있는 경우, %{course}를 방문하여 다음의 양도 불가능한 등록 코드를 사용하여 + 등록하세요: + user_rejected_email: + subject: '강좌 등록 요청이 거부되었습니다 - %{course}' + message: > + %{coursemology}에서 %{course} 강좌에 대한 귀하의 등록 요청이 거부되었습니다! + instance: + mailer: + user_added_email: + subject: '인스턴스 %{instance}에 추가됨' + message: > + 당신은 %{coursemology}의 인스턴스 %{instance}에 추가되었습니다. + + 인스턴스를 보려면 %{email}로 로그인하세요. + + user_invitation_email: + subject: '%{instance} 인스턴스에 %{role} 역할로 초대합니다' + message: > + %{coursemology}의 %{instance} 인스턴스에 등록하도록 초대되었습니다. + + + 이 이메일 주소(%{email})로 등록된 계정이 없는 것 같습니다; + + 계정을 생성하고 초대를 수락하려면 %{click_here} 하세요. + instance_user_role_request_mailer: + new_role_request: + subject: '새로운 역할 요청!' + empty: '(지정되지 않음)' + message_html: > + %{user} (%{email})님이 %{instance} 인스턴스에서 %{role} 역할을 요청했습니다. + + 조직 + + %{organization} + + + 직함 + + %{designation} + + + 이유 + + %{reason} + + + 요청을 검토하려면 %{click_here}를 클릭하세요. + role_request_approved: + subject: '역할 요청이 승인되었습니다!' + message: > + Coursemology에서 %{role}로 승인되었습니다! + + 새 강좌를 만들고 시작하려면 %{click_here}를 클릭하세요! + role_request_rejected: + subject: '역할 요청이 거부되었습니다!' + message_empty: > + Coursemology에서 %{role}로의 역할 요청이 거부되었습니다! + message: > + Coursemology에서 %{role}로의 역할 요청이 거부되었습니다! 아래 메시지를 참조하세요: %{message} + notifiers: + course: + announcement_notifier: + new: + course_notifications: + email: + subject: '%{course} 새 공지: %{announcement}' + message: > +

%{creator}님이 %{course} 강좌에 새 공지 %{announcement}을(를) 게시했습니다

+ %{content} + assessment_notifier: + opening: + course_notifications: + email: + subject: '%{course} 새로운 평가 가능' + message: > + 새로운 평가 가능 : %{assessment} + submitted: + user_notifications: + email: + subject: '%{course} 새 제출물: %{assessment}' + message: > + %{user} 님이 새 제출물을 올렸습니다. + + %{submission}을(를) 검토하고 점수를 매겨주세요. + assessment: + answer: + comment_notifier: + annotated: + user_notifications: + email: + subject: '%{course}: %{topic}에 대한 새 주석' + message: > +

%{post_author}님이 주석을 추가했습니다: %{post}

+ +

여기에서 답장할 수 있습니다:

+ %{topic} + submission_question: + comment_notifier: + replied: + user_notifications: + email: + subject: '%{course}: %{topic}에 대한 새 댓글' + message: > +

%{post_author}님이 댓글을 남겼습니다: %{post}

+ +

여기에서 답장할 수 있습니다:

+ %{topic} + consolidated_opening_reminder_notifier: + opening_reminder: + course_notifications: + email: + subject: '%{course} 개강 알림' + message: '다음 항목이 24시간 내에 열립니다.' + course: + assessment: + section_header: '새로운 평가 가능:' + survey: + section_header: '새로운 설문조사 가능:' + video: + section_header: '새로운 비디오 가능:' + forum: + post_notifier: + replied: + user_notifications: + email: + subject: '%{course} 포럼 주제에 대한 새 답글: %{topic}' + message: > +

%{post_author}님이 답글을 남겼습니다,

+ %{post} +

여기에서 응답할 수 있습니다: '%{topic}


+ unsubscribe: + tag: '구독 취소' + message: '이 포럼 주제의 이메일 알림에서 %{unsubscribe_link}' + topic_notifier: + created: + user_notifications: + email: + subject: '%{course} 포럼에서 새 주제 생성: %{forum}' + message: > +

%{topic_author}님이 포럼에 새 주제를 생성했습니다: %{topic}


+ %{post} + unsubscribe: + tag: '구독 취소' + message: '이 포럼의 이메일 알림에서 %{unsubscribe_link}' + video_notifier: + opening: + course_notifications: + email: + subject: '%{course} 새 비디오 이용 가능' + message: > + 새 비디오 이용 가능: %{video} + closing: + user_notifications: + email: + subject: '%{course} %{video} 알림' + message: > + %{video}가 %{time}에 마감될 예정이니 참고하시기 바랍니다 diff --git a/config/locales/ko/notifiers/course/announcement_notifier/new/course_notifications/email.yml b/config/locales/ko/notifiers/course/announcement_notifier/new/course_notifications/email.yml deleted file mode 100644 index 062ded15c17..00000000000 --- a/config/locales/ko/notifiers/course/announcement_notifier/new/course_notifications/email.yml +++ /dev/null @@ -1,11 +0,0 @@ -ko: - notifiers: - course: - announcement_notifier: - new: - course_notifications: - email: - subject: '%{course} 새 공지: %{announcement}' - message: > -

%{creator}님이 %{course} 강좌에 새 공지 %{announcement}을(를) 게시했습니다

- %{content} diff --git a/config/locales/ko/notifiers/course/assessment/answer/comment_notifier/annotated/user_notifications/email.yml b/config/locales/ko/notifiers/course/assessment/answer/comment_notifier/annotated/user_notifications/email.yml deleted file mode 100644 index a2ca62bd358..00000000000 --- a/config/locales/ko/notifiers/course/assessment/answer/comment_notifier/annotated/user_notifications/email.yml +++ /dev/null @@ -1,15 +0,0 @@ -ko: - notifiers: - course: - assessment: - answer: - comment_notifier: - annotated: - user_notifications: - email: - subject: '%{course}: %{topic}에 대한 새 주석' - message: > -

%{post_author}님이 주석을 추가했습니다: %{post}

- -

여기에서 답장할 수 있습니다:

- %{topic} diff --git a/config/locales/ko/notifiers/course/assessment/submission_question/comment_notifier/replied/user_notifications/email.yml b/config/locales/ko/notifiers/course/assessment/submission_question/comment_notifier/replied/user_notifications/email.yml deleted file mode 100644 index ef6d9cf0f65..00000000000 --- a/config/locales/ko/notifiers/course/assessment/submission_question/comment_notifier/replied/user_notifications/email.yml +++ /dev/null @@ -1,15 +0,0 @@ -ko: - notifiers: - course: - assessment: - submission_question: - comment_notifier: - replied: - user_notifications: - email: - subject: '%{course}: %{topic}에 대한 새 댓글' - message: > -

%{post_author}님이 댓글을 남겼습니다: %{post}

- -

여기에서 답장할 수 있습니다:

- %{topic} diff --git a/config/locales/ko/notifiers/course/assessment_notifier/opening/course_notifications/email.yml b/config/locales/ko/notifiers/course/assessment_notifier/opening/course_notifications/email.yml deleted file mode 100644 index 22b92dd3779..00000000000 --- a/config/locales/ko/notifiers/course/assessment_notifier/opening/course_notifications/email.yml +++ /dev/null @@ -1,10 +0,0 @@ -ko: - notifiers: - course: - assessment_notifier: - opening: - course_notifications: - email: - subject: '%{course} 새로운 평가 가능' - message: > - 새로운 평가 가능 : %{assessment} diff --git a/config/locales/ko/notifiers/course/assessment_notifier/submitted/user_notifications/email.yml b/config/locales/ko/notifiers/course/assessment_notifier/submitted/user_notifications/email.yml deleted file mode 100644 index 7fbe1880286..00000000000 --- a/config/locales/ko/notifiers/course/assessment_notifier/submitted/user_notifications/email.yml +++ /dev/null @@ -1,12 +0,0 @@ -ko: - notifiers: - course: - assessment_notifier: - submitted: - user_notifications: - email: - subject: '%{course} 새 제출물: %{assessment}' - message: > - %{user} 님이 새 제출물을 올렸습니다. - - %{submission}을(를) 검토하고 점수를 매겨주세요. diff --git a/config/locales/ko/notifiers/course/consolidated_opening_reminder_notifier/opening_reminder/course_notifications/email.yml b/config/locales/ko/notifiers/course/consolidated_opening_reminder_notifier/opening_reminder/course_notifications/email.yml deleted file mode 100644 index e9fc7b30aa0..00000000000 --- a/config/locales/ko/notifiers/course/consolidated_opening_reminder_notifier/opening_reminder/course_notifications/email.yml +++ /dev/null @@ -1,16 +0,0 @@ -ko: - notifiers: - course: - consolidated_opening_reminder_notifier: - opening_reminder: - course_notifications: - email: - subject: '%{course} 개강 알림' - message: '다음 항목이 24시간 내에 열립니다.' - course: - assessment: - section_header: '새로운 평가 가능:' - survey: - section_header: '새로운 설문조사 가능:' - video: - section_header: '새로운 비디오 가능:' diff --git a/config/locales/ko/notifiers/course/forum/post_notifier/replied/user_notifications/email.yml b/config/locales/ko/notifiers/course/forum/post_notifier/replied/user_notifications/email.yml deleted file mode 100644 index c9f339b4aa1..00000000000 --- a/config/locales/ko/notifiers/course/forum/post_notifier/replied/user_notifications/email.yml +++ /dev/null @@ -1,16 +0,0 @@ -ko: - notifiers: - course: - forum: - post_notifier: - replied: - user_notifications: - email: - subject: '%{course} 포럼 주제에 대한 새 답글: %{topic}' - message: > -

%{post_author}님이 답글을 남겼습니다,

- %{post} -

여기에서 응답할 수 있습니다: '%{topic}


- unsubscribe: - tag: '구독 취소' - message: '이 포럼 주제의 이메일 알림에서 %{unsubscribe_link}' diff --git a/config/locales/ko/notifiers/course/forum/topic_notifier/created/user_notifications/email.yml b/config/locales/ko/notifiers/course/forum/topic_notifier/created/user_notifications/email.yml deleted file mode 100644 index d41af866d23..00000000000 --- a/config/locales/ko/notifiers/course/forum/topic_notifier/created/user_notifications/email.yml +++ /dev/null @@ -1,15 +0,0 @@ -ko: - notifiers: - course: - forum: - topic_notifier: - created: - user_notifications: - email: - subject: '%{course} 포럼에서 새 주제 생성: %{forum}' - message: > -

%{topic_author}님이 포럼에 새 주제를 생성했습니다: %{topic}


- %{post} - unsubscribe: - tag: '구독 취소' - message: '이 포럼의 이메일 알림에서 %{unsubscribe_link}' diff --git a/config/locales/ko/notifiers/course/video_notifier/video_notifier.yml b/config/locales/ko/notifiers/course/video_notifier/video_notifier.yml deleted file mode 100644 index d93d20d6bcf..00000000000 --- a/config/locales/ko/notifiers/course/video_notifier/video_notifier.yml +++ /dev/null @@ -1,16 +0,0 @@ -ko: - notifiers: - course: - video_notifier: - opening: - course_notifications: - email: - subject: '%{course} 새 비디오 이용 가능' - message: > - 새 비디오 이용 가능: %{video} - closing: - user_notifications: - email: - subject: '%{course} %{video} 알림' - message: > - %{video}가 %{time}에 마감될 예정이니 참고하시기 바랍니다 diff --git a/config/locales/ko/user/emails.yml b/config/locales/ko/user/emails.yml deleted file mode 100644 index 7dab3b9c37a..00000000000 --- a/config/locales/ko/user/emails.yml +++ /dev/null @@ -1,9 +0,0 @@ -ko: - user: - emails: - index: - header: '이메일' - set_primary: - no_confirmed_emails: '기본 이메일로 설정할 수 있는 확인된 이메일 주소가 없습니다.' - send_confirmation: - already_confirmed: '%{email}은(는) 이미 확인되었습니다.' diff --git a/config/locales/ko/user/registrations.yml b/config/locales/ko/user/registrations.yml deleted file mode 100644 index 7de63924fad..00000000000 --- a/config/locales/ko/user/registrations.yml +++ /dev/null @@ -1,10 +0,0 @@ -ko: - user: - registrations: - new: - used: > - 제공된 초대 코드는 다른 계정에서 사용되었습니다. 해당 계정으로 로그인해 주세요. - used_with_email: > - 제공된 초대 코드는 %{email}에서 사용되었습니다. 해당 계정으로 로그인해 주세요. - create: - verify_recaptcha_alert: '아래 reCAPTCHA에 오류가 발생했습니다. 다시 시도해 주세요.' diff --git a/config/locales/zh/activerecord/attributes.yml b/config/locales/zh/activerecord/attributes.yml new file mode 100644 index 00000000000..ab0470c80aa --- /dev/null +++ b/config/locales/zh/activerecord/attributes.yml @@ -0,0 +1,70 @@ +zh: + activerecord: + course/assessment/question: + question_number: '问题 %{index}' + question_with_title: '%{question_number}: %{title}' + attributes: + course: + reference_timelines: '引用时间线' + course/assessment/answer: + submitted_at: '提交于' + grade: '评分' + grader: '评分人' + graded_at: '批改于' + course/assessment/category: + weight: '权重' + course/assessment/category/title: + default: '评估' + course/assessment/question: + weight: '权重' + course/assessment/submission: + grade: '总分' + status: '状态' + submitted_at: :'activerecord.attributes.course/assessment/answer.submitted_at' + grader: :'activerecord.attributes.course/assessment/answer.grader' + graded_at: :'activerecord.attributes.course/assessment/answer.graded_at' + attempting: '练习' + submitted: '已提交' + graded: '已评分,未公布' + published: '已评分' + course/assessment/tab: + weight: '权重' + course/assessment/tab/title: + default: '默认值' + course/condition/assessment/title: + minimum_score: '至少取得%{minimum_grade_percentage}以完成%{assessment_title}' + complete: '已完成%{assessment_title}' + course/condition/level/title: + title: '等级 %{value}' + course/condition/scholaistic_assessment/title: + complete: '已完成%{title}' + course/condition/survey/title: + complete: '已完成 %{survey_title}' + course/condition/video/title: + complete: '观看 %{video_title}' + course/discussion/post: + title_reply_template: '回复 %{title}' + course/experience_points_record: + points_awarded: '经验值奖励已获取' + course/forum/topic/topic_type: + normal: '常规' + announcement: '公告' + question: '提问' + sticky: '便签' + course/group_user: + manager: '讲师' + course/lesson_plan/item: + base_exp: '经验值' + time_bonus_exp: '奖励经验值' + reference_times: '引用时间' + course/video/tab: + weight: '权重' + course/video/tab/title: + default: '默认' + models: + course/assessment/question/rubric_based_response: + rubric_based_response: '评分标准问题' + course/assessment/question/text_response: + text_response: '简答题' + file_upload: '上传答案文件题' + comprehension: '理解题' diff --git a/config/locales/zh/activerecord/course.yml b/config/locales/zh/activerecord/course.yml deleted file mode 100644 index 8fbdb5e86d9..00000000000 --- a/config/locales/zh/activerecord/course.yml +++ /dev/null @@ -1,11 +0,0 @@ -zh: - activerecord: - attributes: - course: - reference_timelines: '引用时间线' - errors: - models: - course: - attributes: - reference_timelines: - must_have_at_most_one_default: '至少要包含一个默认值' diff --git a/config/locales/zh/activerecord/course/announcement.yml b/config/locales/zh/activerecord/course/announcement.yml deleted file mode 100644 index d0424a34e44..00000000000 --- a/config/locales/zh/activerecord/course/announcement.yml +++ /dev/null @@ -1,8 +0,0 @@ -zh: - activerecord: - errors: - models: - course/announcement: - attributes: - end_at: - cannot_be_before_start_at: '不能早于起始时间' diff --git a/config/locales/zh/activerecord/course/assessment.yml b/config/locales/zh/activerecord/course/assessment.yml deleted file mode 100644 index e3dbb7dfd30..00000000000 --- a/config/locales/zh/activerecord/course/assessment.yml +++ /dev/null @@ -1,11 +0,0 @@ -zh: - activerecord: - errors: - models: - course/assessment: - attributes: - tab: - not_in_same_course: > - 您选择的项目与测验不在同一课程中 - no_test_type_chosen: > - 至少要选择一种测试案例进行评分和经验值计算 diff --git a/config/locales/zh/activerecord/course/assessment/answer.yml b/config/locales/zh/activerecord/course/assessment/answer.yml deleted file mode 100644 index 0912969a05e..00000000000 --- a/config/locales/zh/activerecord/course/assessment/answer.yml +++ /dev/null @@ -1,20 +0,0 @@ -zh: - activerecord: - attributes: - course/assessment/answer: - submitted_at: '提交于' - grade: '评分' - grader: '评分人' - graded_at: '批改于' - errors: - models: - course/assessment/answer: - attributes: - question: - consistent_assessment: '必须隶属于同一测验' - submission: - attemptable_state: '必须处于练习状态' - grade: - no_blank_grade: '如果之前已评分,则成绩不能为空' - consistent_grade: '不能超过问题分数上限' - non_negative_grade: '不能为负' diff --git a/config/locales/zh/activerecord/course/assessment/answer/programming.yml b/config/locales/zh/activerecord/course/assessment/answer/programming.yml deleted file mode 100644 index dfcafb50180..00000000000 --- a/config/locales/zh/activerecord/course/assessment/answer/programming.yml +++ /dev/null @@ -1,8 +0,0 @@ -zh: - activerecord: - errors: - models: - course/assessment/answer/programming: - attributes: - files: - exceed_size_limit: '您的答案 (%{total_size_mb} MB) 必须小于 2 MB。' diff --git a/config/locales/zh/activerecord/course/assessment/answer/text_response.yml b/config/locales/zh/activerecord/course/assessment/answer/text_response.yml deleted file mode 100644 index 758bdc1632c..00000000000 --- a/config/locales/zh/activerecord/course/assessment/answer/text_response.yml +++ /dev/null @@ -1,8 +0,0 @@ -zh: - activerecord: - errors: - models: - course/assessment/answer/text_response: - attributes: - attachments: - unique: '文件名不能重复。' diff --git a/config/locales/zh/activerecord/course/assessment/category.yml b/config/locales/zh/activerecord/course/assessment/category.yml deleted file mode 100644 index e3196d57181..00000000000 --- a/config/locales/zh/activerecord/course/assessment/category.yml +++ /dev/null @@ -1,11 +0,0 @@ -zh: - activerecord: - attributes: - course/assessment/category/title: - default: :'course.assessment.assessments.index.header' - course/assessment/category: - weight: '权重' - errors: - models: - course/assessment/category: - deletion: '最后一类不能删除' diff --git a/config/locales/zh/activerecord/course/assessment/question.yml b/config/locales/zh/activerecord/course/assessment/question.yml deleted file mode 100644 index 33f87a480e6..00000000000 --- a/config/locales/zh/activerecord/course/assessment/question.yml +++ /dev/null @@ -1,8 +0,0 @@ -zh: - activerecord: - course/assessment/question: - question_number: '问题 %{index}' - question_with_title: '%{question_number}: %{title}' - attributes: - course/assessment/question: - weight: '权重' diff --git a/config/locales/zh/activerecord/course/assessment/question/multiple_response.yml b/config/locales/zh/activerecord/course/assessment/question/multiple_response.yml deleted file mode 100644 index ddc85386b97..00000000000 --- a/config/locales/zh/activerecord/course/assessment/question/multiple_response.yml +++ /dev/null @@ -1,9 +0,0 @@ -zh: - activerecord: - errors: - models: - course/assessment/question/multiple_response: - attributes: - options: - no_option: '至少要包含一个选项。' - no_correct_option: '至少要包含一个正确选项。' diff --git a/config/locales/zh/activerecord/course/assessment/question/rubric_based_response.yml b/config/locales/zh/activerecord/course/assessment/question/rubric_based_response.yml deleted file mode 100644 index 76157370945..00000000000 --- a/config/locales/zh/activerecord/course/assessment/question/rubric_based_response.yml +++ /dev/null @@ -1,21 +0,0 @@ -zh: - activerecord: - attributes: - models: - course/assessment/question/rubric_based_response: - rubric_based_response: '评分标准问题' - errors: - models: - 'course/assessment/question/rubric_based_response': - attributes: - categories: - reserved_category_name: '“调整”是一个保留的类别名称,因此无法使用' - duplicate_category_names: '类别名称必须在问题评分标准中唯一' - at_least_one_category: '至少需要一个评分标准类别' - 'course/assessment/question/rubric_based_response_category': - attributes: - criterions: - duplicate_grades_within_category: '每个类别中的分数必须唯一' - at_least_one_grade: '每个类别至少需要一个分数' - grade_zero_missing: '每个类别必须包含0分等级' - grade_higher_than_maximum_grade: '分数必须小于或等于最大分数' diff --git a/config/locales/zh/activerecord/course/assessment/question/text_response.yml b/config/locales/zh/activerecord/course/assessment/question/text_response.yml deleted file mode 100644 index c77bc82f39c..00000000000 --- a/config/locales/zh/activerecord/course/assessment/question/text_response.yml +++ /dev/null @@ -1,14 +0,0 @@ -zh: - activerecord: - attributes: - models: - course/assessment/question/text_response: - text_response: '简答题' - file_upload: '上传答案文件题' - comprehension: '理解题' - errors: - models: - course/assessment/question/text_response: - attributes: - maximum_grade: - invalid_grade: '不能低于答案的最低分数' diff --git a/config/locales/zh/activerecord/course/assessment/question/text_response_comprehension_group.yml b/config/locales/zh/activerecord/course/assessment/question/text_response_comprehension_group.yml deleted file mode 100644 index d88c525c3b7..00000000000 --- a/config/locales/zh/activerecord/course/assessment/question/text_response_comprehension_group.yml +++ /dev/null @@ -1,8 +0,0 @@ -zh: - activerecord: - errors: - models: - course/assessment/question/text_response_comprehension_group: - attributes: - maximum_group_grade: - invalid_group_grade: '不能超过该问题的分数上限' diff --git a/config/locales/zh/activerecord/course/assessment/question/text_response_comprehension_point.yml b/config/locales/zh/activerecord/course/assessment/question/text_response_comprehension_point.yml deleted file mode 100644 index b87dd43112c..00000000000 --- a/config/locales/zh/activerecord/course/assessment/question/text_response_comprehension_point.yml +++ /dev/null @@ -1,10 +0,0 @@ -zh: - activerecord: - errors: - models: - course/assessment/question/text_response_comprehension_point: - attributes: - point_grade: - invalid_point_grade: '不能超过该组分数的上限' - solutions: - more_than_one_compre_lifted_word_solution: '同一点被选中的词必须放在同一行' diff --git a/config/locales/zh/activerecord/course/assessment/question/text_response_comprehension_solution.yml b/config/locales/zh/activerecord/course/assessment/question/text_response_comprehension_solution.yml deleted file mode 100644 index d599843a5d9..00000000000 --- a/config/locales/zh/activerecord/course/assessment/question/text_response_comprehension_solution.yml +++ /dev/null @@ -1,11 +0,0 @@ -zh: - activerecord: - errors: - models: - course/assessment/question/text_response_comprehension_solution: - attributes: - solution_lemma: - solution_lemma_empty: '无法生成任何词条形式:请检查你的拼写。' - information: - information_empty: '关键字不能为空' - diff --git a/config/locales/zh/activerecord/course/assessment/question/text_response_solution.yml b/config/locales/zh/activerecord/course/assessment/question/text_response_solution.yml deleted file mode 100644 index c8067c3a9c6..00000000000 --- a/config/locales/zh/activerecord/course/assessment/question/text_response_solution.yml +++ /dev/null @@ -1,8 +0,0 @@ -zh: - activerecord: - errors: - models: - course/assessment/question/text_response_solution: - attributes: - grade: - invalid_grade: '不能超过该问题的分数上限' diff --git a/config/locales/zh/activerecord/course/assessment/question_bundle_assignment.yml b/config/locales/zh/activerecord/course/assessment/question_bundle_assignment.yml deleted file mode 100644 index 03cd5e20c10..00000000000 --- a/config/locales/zh/activerecord/course/assessment/question_bundle_assignment.yml +++ /dev/null @@ -1,9 +0,0 @@ -zh: - activerecord: - errors: - models: - course/assessment/question_bundle_assignment: - attributes: - submission: - must_belong_to_assessment_and_user: '必须属于某个测验和某个用户' - diff --git a/config/locales/zh/activerecord/course/assessment/skill.yml b/config/locales/zh/activerecord/course/assessment/skill.yml deleted file mode 100644 index dfcb5b376aa..00000000000 --- a/config/locales/zh/activerecord/course/assessment/skill.yml +++ /dev/null @@ -1,9 +0,0 @@ -zh: - activerecord: - errors: - models: - course/assessment/skill: - attributes: - course: - consistent_course: '必须属于同一课程' - diff --git a/config/locales/zh/activerecord/course/assessment/submission.yml b/config/locales/zh/activerecord/course/assessment/submission.yml deleted file mode 100644 index 5b088d3ab24..00000000000 --- a/config/locales/zh/activerecord/course/assessment/submission.yml +++ /dev/null @@ -1,26 +0,0 @@ -zh: - activerecord: - attributes: - course/assessment/submission: - grade: '总分' - status: '状态' - submitted_at: :'activerecord.attributes.course/assessment/answer.submitted_at' - grader: :'activerecord.attributes.course/assessment/answer.grader' - graded_at: :'activerecord.attributes.course/assessment/answer.graded_at' - attempting: '练习' - submitted: '已提交' - graded: '已评分,未公布' - published: '已评分' - errors: - models: - course/assessment/submission: - attributes: - experience_points_record: - inconsistent_user: '创建者必须与课程使用者记录一致' - absent_award_attributes: > - 您提交的材料没有奖励属性,请再试一次或联系开发团队 - submission_already_exists: '您可能已经创建过一个提交了,要覆盖吗?' - no_bundles_assigned: '当前没有问题分配给你,请联系你的老师寻求帮助。' - autograded_no_partial_answer: '有一些更新的答案还没有重新提交。请在最后提交前重新提交所有答案。' - course/assessment/category: - deletion: '最后一类无法删除' diff --git a/config/locales/zh/activerecord/course/assessment/tab.yml b/config/locales/zh/activerecord/course/assessment/tab.yml deleted file mode 100644 index 33842f1d862..00000000000 --- a/config/locales/zh/activerecord/course/assessment/tab.yml +++ /dev/null @@ -1,11 +0,0 @@ -zh: - activerecord: - attributes: - course/assessment/tab/title: - default: '默认值' - course/assessment/tab: - weight: '权重' - errors: - models: - course/assessment/tab: - deletion: '最后一项无法被删除' diff --git a/config/locales/zh/activerecord/course/condition/achievement.yml b/config/locales/zh/activerecord/course/condition/achievement.yml deleted file mode 100644 index fbfc6055f1e..00000000000 --- a/config/locales/zh/activerecord/course/condition/achievement.yml +++ /dev/null @@ -1,10 +0,0 @@ -zh: - activerecord: - errors: - models: - course/condition/achievement: - attributes: - achievement: - unique_dependency: '不能包含重复的解锁条件' - references_self: '不能将它自己作为解锁条件' - cyclic_dependency: '不能包含循环的依赖' diff --git a/config/locales/zh/activerecord/course/condition/assessment.yml b/config/locales/zh/activerecord/course/condition/assessment.yml deleted file mode 100644 index cbd8455a10a..00000000000 --- a/config/locales/zh/activerecord/course/condition/assessment.yml +++ /dev/null @@ -1,14 +0,0 @@ -zh: - activerecord: - attributes: - course/condition/assessment/title: - minimum_score: '至少取得%{minimum_grade_percentage}以完成%{assessment_title}' - complete: '已完成%{assessment_title}' - errors: - models: - course/condition/assessment: - attributes: - assessment: - unique_dependency: '不能包含重复的解锁条件' - references_self: '不能将它自己作为解锁条件' - cyclic_dependency: '不能包含循环的依赖' diff --git a/config/locales/zh/activerecord/course/condition/condition.yml b/config/locales/zh/activerecord/course/condition/condition.yml deleted file mode 100644 index 8a545e6df17..00000000000 --- a/config/locales/zh/activerecord/course/condition/condition.yml +++ /dev/null @@ -1,8 +0,0 @@ -zh: - activerecord: - errors: - models: - course/condition: - attributes: - conditional: - not_in_same_course: '您选择的条件与当前条件不在同一课程中' diff --git a/config/locales/zh/activerecord/course/condition/level.yml b/config/locales/zh/activerecord/course/condition/level.yml deleted file mode 100644 index e5a16a476c3..00000000000 --- a/config/locales/zh/activerecord/course/condition/level.yml +++ /dev/null @@ -1,5 +0,0 @@ -zh: - activerecord: - attributes: - course/condition/level/title: - title: '等级 %{value}' diff --git a/config/locales/zh/activerecord/course/condition/scholaistic_assessment.yml b/config/locales/zh/activerecord/course/condition/scholaistic_assessment.yml deleted file mode 100644 index 743c6320ac7..00000000000 --- a/config/locales/zh/activerecord/course/condition/scholaistic_assessment.yml +++ /dev/null @@ -1,12 +0,0 @@ -zh: - activerecord: - attributes: - course/condition/scholaistic_assessment/title: - complete: '已完成%{title}' - errors: - models: - course/condition/scholaistic_assessment: - attributes: - scholaistic_assessment: - unique_dependency: '不能包含重复的解锁条件' - references_self: '不能将它自己作为解锁条件' diff --git a/config/locales/zh/activerecord/course/condition/survey.yml b/config/locales/zh/activerecord/course/condition/survey.yml deleted file mode 100644 index 66a90979498..00000000000 --- a/config/locales/zh/activerecord/course/condition/survey.yml +++ /dev/null @@ -1,14 +0,0 @@ -zh: - activerecord: - attributes: - course/condition/survey/title: - complete: '已完成 %{survey_title}' - errors: - models: - course/condition/survey: - attributes: - survey: - unique_dependency: '不能包含重复的解锁条件' - references_self: '不能将它自己作为解锁条件' - cyclic_dependency: '不能包含循环的依赖' - diff --git a/config/locales/zh/activerecord/course/condition/video.yml b/config/locales/zh/activerecord/course/condition/video.yml deleted file mode 100644 index c5de37dc8e1..00000000000 --- a/config/locales/zh/activerecord/course/condition/video.yml +++ /dev/null @@ -1,13 +0,0 @@ -zh: - activerecord: - attributes: - course/condition/video/title: - complete: '观看 %{video_title}' - errors: - models: - course/condition/video: - attributes: - video: - unique_dependency: '不能包含重复的解锁条件' - references_self: '不能将它自己作为解锁条件' - cyclic_dependency: '不能包含循环的依赖' diff --git a/config/locales/zh/activerecord/course/discussion/post.yml b/config/locales/zh/activerecord/course/discussion/post.yml deleted file mode 100644 index 104030b1b83..00000000000 --- a/config/locales/zh/activerecord/course/discussion/post.yml +++ /dev/null @@ -1,11 +0,0 @@ -zh: - activerecord: - attributes: - course/discussion/post: - title_reply_template: '回复 %{title}' - errors: - models: - course/discussion/post: - attributes: - post: - topic_inconsistent: '当前帖子和它的父帖子引用了不同的主题。' diff --git a/config/locales/zh/activerecord/course/enrol_request.yml b/config/locales/zh/activerecord/course/enrol_request.yml deleted file mode 100644 index 587b4c63cc9..00000000000 --- a/config/locales/zh/activerecord/course/enrol_request.yml +++ /dev/null @@ -1,13 +0,0 @@ -zh: - activerecord: - errors: - models: - course/enrol_request: - user_in_course: > - 你可能已经参加这个课程了,要刷新页面吗? - existing_pending_request: > - 你可能已经提交过加入课程申请了。 - attributes: - base: - deletion: > - 由于加入课程申请已被处理,无法撤回。 diff --git a/config/locales/zh/activerecord/course/experience_points_record.yml b/config/locales/zh/activerecord/course/experience_points_record.yml deleted file mode 100644 index 9c40281cbc5..00000000000 --- a/config/locales/zh/activerecord/course/experience_points_record.yml +++ /dev/null @@ -1,5 +0,0 @@ -zh: - activerecord: - attributes: - course/experience_points_record: - points_awarded: '经验值奖励已获取' diff --git a/config/locales/zh/activerecord/course/forum/topic.yml b/config/locales/zh/activerecord/course/forum/topic.yml deleted file mode 100644 index 56679122c12..00000000000 --- a/config/locales/zh/activerecord/course/forum/topic.yml +++ /dev/null @@ -1,8 +0,0 @@ -zh: - activerecord: - attributes: - course/forum/topic/topic_type: - normal: '常规' - announcement: '公告' - question: '提问' - sticky: '便签' diff --git a/config/locales/zh/activerecord/course/group_user.yml b/config/locales/zh/activerecord/course/group_user.yml deleted file mode 100644 index bfa09bab4b3..00000000000 --- a/config/locales/zh/activerecord/course/group_user.yml +++ /dev/null @@ -1,9 +0,0 @@ -zh: - activerecord: - errors: - models: - course/group_user: - not_enrolled: '必须与小组成员加入在同一课程' - attributes: - course/group_user: - manager: '讲师' diff --git a/config/locales/zh/activerecord/course/learning_rate_record.yml b/config/locales/zh/activerecord/course/learning_rate_record.yml deleted file mode 100644 index f96c335cbe8..00000000000 --- a/config/locales/zh/activerecord/course/learning_rate_record.yml +++ /dev/null @@ -1,9 +0,0 @@ -zh: - activerecord: - errors: - models: - course/learning_rate_record: - attributes: - learning_rate: - less_than_min: '必须大于有效最小值' - greater_than_max: '必须小于有效最小值' diff --git a/config/locales/zh/activerecord/course/lesson_plan.yml b/config/locales/zh/activerecord/course/lesson_plan.yml deleted file mode 100644 index 3de29169841..00000000000 --- a/config/locales/zh/activerecord/course/lesson_plan.yml +++ /dev/null @@ -1,12 +0,0 @@ -zh: - activerecord: - errors: - models: - course/lesson_plan/item: - attributes: - bonus_end_at: - required: '如果设置了时间奖励经验,则不能为空' - attributes: - course/lesson_plan/item: - base_exp: '经验值' - time_bonus_exp: '奖励经验值' diff --git a/config/locales/zh/activerecord/course/monitoring/heartbeat.yml b/config/locales/zh/activerecord/course/monitoring/heartbeat.yml deleted file mode 100644 index a47c9b5d524..00000000000 --- a/config/locales/zh/activerecord/course/monitoring/heartbeat.yml +++ /dev/null @@ -1,8 +0,0 @@ -zh: - activerecord: - errors: - models: - course/monitoring/heartbeat: - attributes: - seb_payload: - invalid_seb_payload: 'seb payload 必须为空或为有效的 JSON 对象' diff --git a/config/locales/zh/activerecord/course/monitoring/monitor.yml b/config/locales/zh/activerecord/course/monitoring/monitor.yml deleted file mode 100644 index 63a58d888d1..00000000000 --- a/config/locales/zh/activerecord/course/monitoring/monitor.yml +++ /dev/null @@ -1,14 +0,0 @@ -zh: - activerecord: - errors: - models: - course/monitoring/monitor: - attributes: - enabled: - must_be_password_protected: '评估必须受密码保护才能启用' - max_interval_ms: - greater_than_min_interval: '必须大于最小间隔' - blocks: - must_have_browser_authorization_and_session_protection: '必须启用浏览器授权和会话保护' - seb_config_key: - required_if_using_seb_config_key_browser_authorization: '使用 seb 配置密钥浏览器授权方法时必须提供 seb 配置密钥' diff --git a/config/locales/zh/activerecord/course/personal_time.yml b/config/locales/zh/activerecord/course/personal_time.yml deleted file mode 100644 index ec4d2a4169f..00000000000 --- a/config/locales/zh/activerecord/course/personal_time.yml +++ /dev/null @@ -1,8 +0,0 @@ -zh: - activerecord: - errors: - models: - course/personal_time: - attributes: - start_at: - cannot_be_after_end_at: '不能晚于结束时间' diff --git a/config/locales/zh/activerecord/course/reference_time.yml b/config/locales/zh/activerecord/course/reference_time.yml deleted file mode 100644 index ec78b88ad86..00000000000 --- a/config/locales/zh/activerecord/course/reference_time.yml +++ /dev/null @@ -1,12 +0,0 @@ -zh: - activerecord: - errors: - models: - course/reference_time: - attributes: - reference_timeline: - cannot_destroy_in_default_timeline: '无法修改默认参考时间线' - start_at: - cannot_be_after_end_at: '不能晚于结束时间' - lesson_plan_item: - must_be_in_same_course: '必须与参考时间线在同一课程中' diff --git a/config/locales/zh/activerecord/course/reference_timeline.yml b/config/locales/zh/activerecord/course/reference_timeline.yml deleted file mode 100644 index c4d317464b7..00000000000 --- a/config/locales/zh/activerecord/course/reference_timeline.yml +++ /dev/null @@ -1,9 +0,0 @@ -zh: - activerecord: - errors: - models: - course/reference_timeline: - attributes: - default: - taken: '只能有一个默认参考时间轴' - cannot_destroy: '无法删除默认参考时间轴' diff --git a/config/locales/zh/activerecord/course/scholaistic_assessment.yml b/config/locales/zh/activerecord/course/scholaistic_assessment.yml deleted file mode 100644 index bbb2bddc78b..00000000000 --- a/config/locales/zh/activerecord/course/scholaistic_assessment.yml +++ /dev/null @@ -1,8 +0,0 @@ -zh: - activerecord: - errors: - models: - course/scholaistic_assessment: - attributes: - time_bonus_exp: - bonus_attributes_not_allowed: '不允许使用奖励属性' diff --git a/config/locales/zh/activerecord/course/survey/answer.yml b/config/locales/zh/activerecord/course/survey/answer.yml deleted file mode 100644 index 6e952401e44..00000000000 --- a/config/locales/zh/activerecord/course/survey/answer.yml +++ /dev/null @@ -1,6 +0,0 @@ -zh: - activerecord: - errors: - models: - course/survey/answer: - cannot_be_empty: '这个问题的答案不能为空。' diff --git a/config/locales/zh/activerecord/course/user_achievement.yml b/config/locales/zh/activerecord/course/user_achievement.yml deleted file mode 100644 index 035f2bc8192..00000000000 --- a/config/locales/zh/activerecord/course/user_achievement.yml +++ /dev/null @@ -1,8 +0,0 @@ -zh: - activerecord: - errors: - models: - course/user_achievement: - attributes: - course_user: - not_in_course: '选中的用户不在指定课程中' diff --git a/config/locales/zh/activerecord/course/user_invitation.yml b/config/locales/zh/activerecord/course/user_invitation.yml deleted file mode 100644 index ba433b34ab6..00000000000 --- a/config/locales/zh/activerecord/course/user_invitation.yml +++ /dev/null @@ -1,6 +0,0 @@ -zh: - activerecord: - errors: - models: - course/user_invitation: - existing_invitation: '此电子邮件地址已存在一个未完成的邀请' diff --git a/config/locales/zh/activerecord/course/video.yml b/config/locales/zh/activerecord/course/video.yml deleted file mode 100644 index e7333d832fe..00000000000 --- a/config/locales/zh/activerecord/course/video.yml +++ /dev/null @@ -1,9 +0,0 @@ -zh: - activerecord: - errors: - models: - course/video: - attributes: - url: - invalid_url: > - 您输入的URL格式不正确,请重试。 diff --git a/config/locales/zh/activerecord/course/video/session.yml b/config/locales/zh/activerecord/course/video/session.yml deleted file mode 100644 index fd5deae18e7..00000000000 --- a/config/locales/zh/activerecord/course/video/session.yml +++ /dev/null @@ -1,8 +0,0 @@ -zh: - activerecord: - errors: - models: - course/video/session: - attributes: - session_start: - cannot_be_after_session_end: '课时开始时间不能晚于结束时间' diff --git a/config/locales/zh/activerecord/course/video/submission.yml b/config/locales/zh/activerecord/course/video/submission.yml deleted file mode 100644 index fa9d3e0e484..00000000000 --- a/config/locales/zh/activerecord/course/video/submission.yml +++ /dev/null @@ -1,9 +0,0 @@ -zh: - activerecord: - errors: - models: - course/video/submission: - attributes: - experience_points_record: - inconsistent_user: '创建者必须与课程使用者记录一致' - submission_already_exists: '您可能已经创建过一个提交了,要覆盖吗?' diff --git a/config/locales/zh/activerecord/course/video/tab.yml b/config/locales/zh/activerecord/course/video/tab.yml deleted file mode 100644 index a719df449d0..00000000000 --- a/config/locales/zh/activerecord/course/video/tab.yml +++ /dev/null @@ -1,11 +0,0 @@ -zh: - activerecord: - attributes: - course/video/tab/title: - default: '默认' - course/video/tab: - weight: '权重' - errors: - models: - course/video/tab: - deletion: '最后一项无法被删除' diff --git a/config/locales/zh/activerecord/course_user.yml b/config/locales/zh/activerecord/course_user.yml deleted file mode 100644 index 5093ea8f989..00000000000 --- a/config/locales/zh/activerecord/course_user.yml +++ /dev/null @@ -1,8 +0,0 @@ -zh: - activerecord: - errors: - models: - course_user: - attributes: - reference_timeline: - belongs_to_course: '必须隶属于课程' diff --git a/config/locales/zh/activerecord/duplication_traceable.yml b/config/locales/zh/activerecord/duplication_traceable.yml deleted file mode 100644 index 61b51db82f0..00000000000 --- a/config/locales/zh/activerecord/duplication_traceable.yml +++ /dev/null @@ -1,8 +0,0 @@ -zh: - activerecord: - errors: - models: - duplication_traceable: - attributes: - source_id: - must_exist: '源必须存在并且是dependent_class的一个实例。' diff --git a/config/locales/zh/activerecord/errors.yml b/config/locales/zh/activerecord/errors.yml new file mode 100644 index 00000000000..8e13ec80442 --- /dev/null +++ b/config/locales/zh/activerecord/errors.yml @@ -0,0 +1,231 @@ +zh: + activerecord: + errors: + models: + course: + attributes: + reference_timelines: + must_have_at_most_one_default: '至少要包含一个默认值' + course/announcement: + attributes: + end_at: + cannot_be_before_start_at: '不能早于起始时间' + course/assessment: + attributes: + tab: + not_in_same_course: '您选择的项目与测验不在同一课程中' + no_test_type_chosen: '至少要选择一种测试案例进行评分和经验值计算' + course/assessment/answer: + attributes: + question: + consistent_assessment: '必须隶属于同一测验' + submission: + attemptable_state: '必须处于练习状态' + grade: + no_blank_grade: '如果之前已评分,则成绩不能为空' + consistent_grade: '不能超过问题分数上限' + non_negative_grade: '不能为负' + course/assessment/answer/programming: + attributes: + files: + exceed_size_limit: '您的答案 (%{total_size_mb} MB) 必须小于 2 MB。' + course/assessment/answer/text_response: + attributes: + attachments: + unique: '文件名不能重复。' + course/assessment/category: + deletion: '最后一类不能删除' + course/assessment/question/multiple_response: + attributes: + options: + no_option: '至少要包含一个选项。' + no_correct_option: '至少要包含一个正确选项。' + course/assessment/question/rubric_based_response: + attributes: + categories: + reserved_category_name: '"调整"是一个保留的类别名称,因此无法使用' + duplicate_category_names: '类别名称必须在问题评分标准中唯一' + at_least_one_category: '至少需要一个评分标准类别' + course/assessment/question/rubric_based_response_category: + attributes: + criterions: + duplicate_grades_within_category: '每个类别中的分数必须唯一' + at_least_one_grade: '每个类别至少需要一个分数' + grade_zero_missing: '每个类别必须包含0分等级' + grade_higher_than_maximum_grade: '分数必须小于或等于最大分数' + course/assessment/question/text_response: + attributes: + maximum_grade: + invalid_grade: '不能低于答案的最低分数' + course/assessment/question/text_response_comprehension_group: + attributes: + maximum_group_grade: + invalid_group_grade: '不能超过该问题的分数上限' + course/assessment/question/text_response_comprehension_point: + attributes: + point_grade: + invalid_point_grade: '不能超过该组分数的上限' + solutions: + more_than_one_compre_lifted_word_solution: '同一点被选中的词必须放在同一行' + course/assessment/question/text_response_comprehension_solution: + attributes: + solution_lemma: + solution_lemma_empty: '无法生成任何词条形式:请检查你的拼写。' + information: + information_empty: '关键字不能为空' + course/assessment/question/text_response_solution: + attributes: + grade: + invalid_grade: '不能超过该问题的分数上限' + course/assessment/question_bundle_assignment: + attributes: + submission: + must_belong_to_assessment_and_user: '必须属于某个测验和某个用户' + course/assessment/skill: + attributes: + course: + consistent_course: '必须属于同一课程' + course/assessment/submission: + attributes: + experience_points_record: + inconsistent_user: '创建者必须与课程使用者记录一致' + absent_award_attributes: '您提交的材料没有奖励属性,请再试一次或联系开发团队' + submission_already_exists: '您可能已经创建过一个提交了,要覆盖吗?' + no_bundles_assigned: '当前没有问题分配给你,请联系你的老师寻求帮助。' + autograded_no_partial_answer: '有一些更新的答案还没有重新提交。请在最后提交前重新提交所有答案。' + course/assessment/tab: + deletion: '最后一项无法被删除' + course/condition: + attributes: + conditional: + not_in_same_course: '您选择的条件与当前条件不在同一课程中' + course/condition/achievement: + attributes: + achievement: + unique_dependency: '不能包含重复的解锁条件' + references_self: '不能将它自己作为解锁条件' + cyclic_dependency: '不能包含循环的依赖' + course/condition/assessment: + attributes: + assessment: + unique_dependency: '不能包含重复的解锁条件' + references_self: '不能将它自己作为解锁条件' + cyclic_dependency: '不能包含循环的依赖' + course/condition/scholaistic_assessment: + attributes: + scholaistic_assessment: + unique_dependency: '不能包含重复的解锁条件' + references_self: '不能将它自己作为解锁条件' + course/condition/survey: + attributes: + survey: + unique_dependency: '不能包含重复的解锁条件' + references_self: '不能将它自己作为解锁条件' + cyclic_dependency: '不能包含循环的依赖' + course/condition/video: + attributes: + video: + unique_dependency: '不能包含重复的解锁条件' + references_self: '不能将它自己作为解锁条件' + cyclic_dependency: '不能包含循环的依赖' + course/discussion/post: + attributes: + post: + topic_inconsistent: '当前帖子和它的父帖子引用了不同的主题。' + course/enrol_request: + user_in_course: '你可能已经参加这个课程了,要刷新页面吗?' + existing_pending_request: '你可能已经提交过加入课程申请了。' + attributes: + base: + deletion: '由于加入课程申请已被处理,无法撤回。' + course/learning_rate_record: + attributes: + learning_rate: + less_than_min: '必须大于有效最小值' + greater_than_max: '必须小于有效最小值' + course/lesson_plan/item: + attributes: + bonus_end_at: + required: '如果设置了时间奖励经验,则不能为空' + reference_times: + must_have_at_most_one_default: '至少要有一个默认值' + course/monitoring/heartbeat: + attributes: + seb_payload: + invalid_seb_payload: 'seb payload 必须为空或为有效的 JSON 对象' + course/monitoring/monitor: + attributes: + enabled: + must_be_password_protected: '评估必须受密码保护才能启用' + max_interval_ms: + greater_than_min_interval: '必须大于最小间隔' + blocks: + must_have_browser_authorization_and_session_protection: '必须启用浏览器授权和会话保护' + seb_config_key: + required_if_using_seb_config_key_browser_authorization: '使用 seb 配置密钥浏览器授权方法时必须提供 seb 配置密钥' + course/personal_time: + attributes: + start_at: + cannot_be_after_end_at: '不能晚于结束时间' + course/reference_time: + attributes: + reference_timeline: + cannot_destroy_in_default_timeline: '无法修改默认参考时间线' + start_at: + cannot_be_after_end_at: '不能晚于结束时间' + lesson_plan_item: + must_be_in_same_course: '必须与参考时间线在同一课程中' + course/reference_timeline: + attributes: + default: + taken: '只能有一个默认参考时间轴' + cannot_destroy: '无法删除默认参考时间轴' + course/scholaistic_assessment: + attributes: + time_bonus_exp: + bonus_attributes_not_allowed: '不允许使用奖励属性' + course/survey/answer: '这个问题的答案不能为空。' + course/user_achievement: + attributes: + course_user: + not_in_course: '选中的用户不在指定课程中' + course/user_invitation: '此电子邮件地址已存在一个未完成的邀请' + course/video: + attributes: + url: + invalid_url: '您输入的URL格式不正确,请重试。' + course/video/session: + attributes: + session_start: + cannot_be_after_session_end: '课时开始时间不能晚于结束时间' + course/video/submission: + attributes: + experience_points_record: + inconsistent_user: '创建者必须与课程使用者记录一致' + submission_already_exists: '您可能已经创建过一个提交了,要覆盖吗?' + course/video/tab: + deletion: '最后一项无法被删除' + course_user: + attributes: + reference_timeline: + belongs_to_course: '必须隶属于课程' + duplication_traceable: + attributes: + source_id: + must_exist: '源必须存在并且是dependent_class的一个实例。' + generic_announcement: + attributes: + end_at: + cannot_be_before_start_at: '不能早于起始时间' + instance/user_role_request: + attributes: + base: + existing_pending_request: > + '你有一个已存在的身份变更请求,请刷新页面。' + messages: + filename_validator: + invalid_characters: '%{characters}不合法。' + tailing_dots: '点号不能出现在文件名末尾。' + whitespaces: '空格不能出现在文件名开头或末尾。' + time_zone_validator: + invalid_time_zone: '时区不可用。' diff --git a/config/locales/zh/activerecord/filename_validator.yml b/config/locales/zh/activerecord/filename_validator.yml deleted file mode 100644 index 5d61bdbc6a8..00000000000 --- a/config/locales/zh/activerecord/filename_validator.yml +++ /dev/null @@ -1,8 +0,0 @@ -zh: - activerecord: - errors: - messages: - filename_validator: - invalid_characters: '%{characters}不合法。' - tailing_dots: '点号不能出现在文件名末尾。' - whitespaces: '空格不能出现在文件名开头或末尾。' diff --git a/config/locales/zh/activerecord/generic_announcement.yml b/config/locales/zh/activerecord/generic_announcement.yml deleted file mode 100644 index 34c4a6d0e23..00000000000 --- a/config/locales/zh/activerecord/generic_announcement.yml +++ /dev/null @@ -1,8 +0,0 @@ -zh: - activerecord: - errors: - models: - generic_announcement: - attributes: - end_at: - cannot_be_before_start_at: '不能早于起始时间' diff --git a/config/locales/zh/activerecord/instance.yml b/config/locales/zh/activerecord/instance.yml deleted file mode 100644 index a82bac0934e..00000000000 --- a/config/locales/zh/activerecord/instance.yml +++ /dev/null @@ -1,9 +0,0 @@ -zh: - activerecord: - errors: - models: - instance/user_role_request: - attributes: - base: - existing_pending_request: > - '你有一个已存在的身份变更请求,请刷新页面。' diff --git a/config/locales/zh/activerecord/time_zone_validator.yml b/config/locales/zh/activerecord/time_zone_validator.yml deleted file mode 100644 index cddba7c4a7f..00000000000 --- a/config/locales/zh/activerecord/time_zone_validator.yml +++ /dev/null @@ -1,6 +0,0 @@ -zh: - activerecord: - errors: - messages: - time_zone_validator: - invalid_time_zone: '时区不可用。' diff --git a/config/locales/zh/common.yml b/config/locales/zh/common.yml deleted file mode 100644 index 5ccd2aeb84e..00000000000 --- a/config/locales/zh/common.yml +++ /dev/null @@ -1,7 +0,0 @@ -zh: - common: - plain_text_link: '%{text} (%{url})' - click_here: '点击此处' - helpers: - password: - wrong_password: '密码错误' diff --git a/config/locales/zh/components.yml b/config/locales/zh/components.yml deleted file mode 100644 index 8defcf8e84a..00000000000 --- a/config/locales/zh/components.yml +++ /dev/null @@ -1,56 +0,0 @@ -zh: - components: - announcements: - name: :'course.announcements.index.header' - achievements: - name: :'course.achievement.achievements.index.header' - lesson_plan: - name: :'course.lesson_plan.items.index.header' - assessments: - name: '测验' - forums: - name: :'course.forum.forums.index.header' - groups: - name: :'course.groups.index.header' - levels: - name: :'course.levels.index.header' - leaderboard: - name: :'course.leaderboards.index.header' - materials: - name: :'course.material.sidebar_title' - discussion: - topics: - name: '评论中心' - statistics: - name: '统计' - experience_points: - name: '经验值' - duplication: - name: '复制' - video: - name: :'course.video.videos.index.header' - settings: - name: '设置' - users: - name: '用户' - surveys: - name: '调查' - learning_map: - name: '学习路线' - codaveri: - name: 'Codaveri 评估和反馈' - multiple_reference_timelines: - name: '多重参考时间线' - monitoring: - name: '监听' - scholaistic: - name: '角色扮演聊天机器人和评估' - manage_assistants: '学习助手' - stories: - name: '故事' - koditsu_platform: - name: 'Koditsu 考试' - rag_wise: - name: 'RagWise 自动论坛回复' - plagiarism: - name: 'SSID 抄袭检查' diff --git a/config/locales/zh/course/achievement/achievements.yml b/config/locales/zh/course/achievement/achievements.yml deleted file mode 100644 index 7ed290a7070..00000000000 --- a/config/locales/zh/course/achievement/achievements.yml +++ /dev/null @@ -1,7 +0,0 @@ -zh: - course: - achievement: - achievements: - sidebar_title: :'course.achievement.achievements.index.header' - index: - header: '成就' diff --git a/config/locales/zh/course/announcements.yml b/config/locales/zh/course/announcements.yml deleted file mode 100644 index 8883fe20eb8..00000000000 --- a/config/locales/zh/course/announcements.yml +++ /dev/null @@ -1,6 +0,0 @@ -zh: - course: - announcements: - sidebar_title: :'course.announcements.index.header' - index: - header: '公告' diff --git a/config/locales/zh/course/assessment/answer/programming_auto_grading.yml b/config/locales/zh/course/assessment/answer/programming_auto_grading.yml deleted file mode 100644 index f999b3444b1..00000000000 --- a/config/locales/zh/course/assessment/answer/programming_auto_grading.yml +++ /dev/null @@ -1,35 +0,0 @@ -zh: - course: - assessment: - answer: - programming_auto_grading: - grade: - evaluation_failed_syntax: > - 你的代码无法运行,可能存在语法错误或者使用了不支持的库,请再次检查代码。 - evaluation_failed_time_or_memory: > - 你的代码未能在指定的时间/内存限制内完成。 - stdout_too_long: > - 由于代码执行时在 stdout 生成了过多输出,因此被终止。 - 请排除不必要的输出后重试。 - stderr_too_long: > - 由于代码执行时在 stderr 生成了过多输出,因此被终止。 - 请排除不必要的输出后重试。 - time_limit_error: > - 错误:超过时间限制 (TLE) - memory_limit_error: > - 错误:超过内存限制 (MLE) - job: - failure: - time_limit_breached: > - 判题机在运行时已被终止,可能是由于该问题的时间限制,超出了 coursemology 中允许的值。 - 请联系你的讲师检查课程设置,如果问题仍然存在,请联系 coursemology 管理员。 - timeout_error: > - 判题任务运行时间过长导致超时错误。 - 请在几分钟后重试。如果问题仍然存在,请联系您的课程讲师或 coursemology 管理员。 - container_unreachable: > - 创建判题机docker时出错。 可能是由于服务器工作负载过高。 - 请在几分钟后重试。如果问题仍然存在,请联系您的课程讲师或 coursemology 管理员。 - generic_error: > - 发生错误。可能是由于服务器繁忙,请在几分钟后重试。如果问题仍然存在,请联系 coursemology 管理员, - 并提供此页面的 URL,引用以下错误:"%{error}" - diff --git a/config/locales/zh/course/assessment/assessments.yml b/config/locales/zh/course/assessment/assessments.yml index 3a7f5e78c53..de0b696d652 100644 --- a/config/locales/zh/course/assessment/assessments.yml +++ b/config/locales/zh/course/assessment/assessments.yml @@ -3,9 +3,6 @@ zh: assessment: assessments: invalid_questions_order: '测验问题的权重无效' - sidebar_title: :'course.assessment.assessments.index.header' - index: - header: '测验' show: public_test: '公开' private_test: '私有' diff --git a/config/locales/zh/course/assessment/live_feedback/thread.yml b/config/locales/zh/course/assessment/live_feedback/thread.yml deleted file mode 100644 index 4a5a520ff54..00000000000 --- a/config/locales/zh/course/assessment/live_feedback/thread.yml +++ /dev/null @@ -1,6 +0,0 @@ -zh: - course: - assessment: - live_feedback: - thread: - only_one_active_thread: '每个提交问题只能有一个活动线程' diff --git a/config/locales/zh/course/assessment/skills.yml b/config/locales/zh/course/assessment/skills.yml deleted file mode 100644 index 0cef45bd036..00000000000 --- a/config/locales/zh/course/assessment/skills.yml +++ /dev/null @@ -1,7 +0,0 @@ -zh: - course: - assessment: - skills: - sidebar_title: '技能' - index: - header: '技能' diff --git a/config/locales/zh/course/assessment/submission/submissions.yml b/config/locales/zh/course/assessment/submission/submissions.yml deleted file mode 100644 index d47de422bf7..00000000000 --- a/config/locales/zh/course/assessment/submission/submissions.yml +++ /dev/null @@ -1,36 +0,0 @@ -zh: - course: - assessment: - submission: - submissions: - download_statistics: - no_submission_statistics: '没有提交满足您的下载要求' - statistics_download_service: - name: '姓名' - phantom: '虚拟用户' - status: '状态' - grade: '评分' - max_grade: '最高分' - exp_points: '经验值' - start_date_time: '开始日期/时间' - submitted_date_time: '提交日期/时间' - time_taken: '耗时' - graded_date_time: '评分日期/时间' - grading_time: '评分耗时' - grader: '评分人' - publisher: '发布人' - csv_empty: '-' - csv_download_service: - note: 'N/A: 该答案的格式不能放在一个单元格中。' - name: '姓名' - email: 'Email' - role: '身份变更' - user_type: '用户类型' - status: '状态' - question_title: '问题标题' - question_type: '问题类型' - normal: '常规' - phantom: '虚拟' - unstarted: '未开始' - no_answer: '无答案' - diff --git a/config/locales/zh/course/assessment/submissions.yml b/config/locales/zh/course/assessment/submissions.yml deleted file mode 100644 index 263cd77dc6a..00000000000 --- a/config/locales/zh/course/assessment/submissions.yml +++ /dev/null @@ -1,9 +0,0 @@ -zh: - course: - assessment: - submissions: - sidebar_title: :'course.assessment.submissions.index.header' - index: - header: '提交' - pending: - header: '等待中的提交' diff --git a/config/locales/zh/course/discussion/topics.yml b/config/locales/zh/course/discussion/topics.yml deleted file mode 100644 index b1ef7136386..00000000000 --- a/config/locales/zh/course/discussion/topics.yml +++ /dev/null @@ -1,13 +0,0 @@ -zh: - course: - discussion: - topics: - sidebar_title: :'course.discussion.topics.index.header' - index: - header: '评论' - pending: - header: :'course.discussion.topics.index.header' - my_students: - header: :'course.discussion.topics.index.header' - my_students_pending: - header: :'course.discussion.topics.index.header' diff --git a/config/locales/zh/course/experience_points/disbursement.yml b/config/locales/zh/course/experience_points/disbursement.yml deleted file mode 100644 index 21e50b7d1d1..00000000000 --- a/config/locales/zh/course/experience_points/disbursement.yml +++ /dev/null @@ -1,7 +0,0 @@ -zh: - course: - experience_points: - disbursement: - sidebar_title: '经验值发放' - new: - header: '发放经验值' diff --git a/config/locales/zh/course/experience_points/forum_disbursement.yml b/config/locales/zh/course/experience_points/forum_disbursement.yml deleted file mode 100644 index c14a0713005..00000000000 --- a/config/locales/zh/course/experience_points/forum_disbursement.yml +++ /dev/null @@ -1,6 +0,0 @@ -zh: - course: - experience_points: - forum_disbursement: - new: - header: :'course.experience_points.disbursement.new.header' diff --git a/config/locales/zh/course/experience_points_records.yml b/config/locales/zh/course/experience_points_records.yml deleted file mode 100644 index b718f7de0d3..00000000000 --- a/config/locales/zh/course/experience_points_records.yml +++ /dev/null @@ -1,11 +0,0 @@ -zh: - course: - experience_points_records: - index: - header: '用户%{name}:经验值历史记录' - download: - name: '姓名' - updated_at: '更新于' - updater: '更新者' - reason: '理由' - exp_points: '经验值奖励已获取' diff --git a/config/locales/zh/course/forum/forums.yml b/config/locales/zh/course/forum/forums.yml deleted file mode 100644 index 26c1698a4ac..00000000000 --- a/config/locales/zh/course/forum/forums.yml +++ /dev/null @@ -1,7 +0,0 @@ -zh: - course: - forum: - forums: - sidebar_title: '论坛' - index: - header: '论坛' diff --git a/config/locales/zh/course/groups.yml b/config/locales/zh/course/groups.yml deleted file mode 100644 index 2b3a564304f..00000000000 --- a/config/locales/zh/course/groups.yml +++ /dev/null @@ -1,12 +0,0 @@ -zh: - course: - groups: - sidebar_title: :'course.group.group_categories.index.header' - index: - header: :'course.group.group_categories.index.header' - group: - group_categories: - index: - header: '分组' - show: - header: '分组' diff --git a/config/locales/zh/course/leaderboards.yml b/config/locales/zh/course/leaderboards.yml deleted file mode 100644 index a6b473b0d9f..00000000000 --- a/config/locales/zh/course/leaderboards.yml +++ /dev/null @@ -1,7 +0,0 @@ -zh: - course: - leaderboards: - sidebar_title: :'course.leaderboards.index.header' - title: :'course.leaderboards.index.header' - index: - header: '排行榜' diff --git a/config/locales/zh/course/learning_map.yml b/config/locales/zh/course/learning_map.yml deleted file mode 100644 index df827ce7bb4..00000000000 --- a/config/locales/zh/course/learning_map.yml +++ /dev/null @@ -1,6 +0,0 @@ -zh: - course: - learning_map: - index: - header: '学习路线' - diff --git a/config/locales/zh/course/lesson_plan/items.yml b/config/locales/zh/course/lesson_plan/items.yml deleted file mode 100644 index 27e7d218ea7..00000000000 --- a/config/locales/zh/course/lesson_plan/items.yml +++ /dev/null @@ -1,17 +0,0 @@ -zh: - course: - lesson_plan: - items: - sidebar_title: :'course.lesson_plan.items.index.header' - index: - header: '课程计划' - activerecord: - attributes: - course/lesson_plan/item: - reference_times: '引用时间' - errors: - models: - course/lesson_plan/item: - attributes: - reference_times: - must_have_at_most_one_default: '至少要有一个默认值' diff --git a/config/locales/zh/course/levels.yml b/config/locales/zh/course/levels.yml deleted file mode 100644 index 27fa0d579f8..00000000000 --- a/config/locales/zh/course/levels.yml +++ /dev/null @@ -1,7 +0,0 @@ -zh: - course: - levels: - sidebar_title: :'course.levels.index.header' - index: - header: '等级' - diff --git a/config/locales/zh/course/mailer/assessment_closing_reminder_email.yml b/config/locales/zh/course/mailer/assessment_closing_reminder_email.yml deleted file mode 100644 index b7660c1e3b4..00000000000 --- a/config/locales/zh/course/mailer/assessment_closing_reminder_email.yml +++ /dev/null @@ -1,9 +0,0 @@ -zh: - course: - mailer: - assessment_closing_reminder_email: - subject: '%{course}: 相关提醒 %{assessment}' - message: > - 请注意 %{assessment} 将截止于 %{time}。 - message_no_time: > - 请注意练习并提交 - %{assessment}。 diff --git a/config/locales/zh/course/mailer/assessment_closing_summary_email.yml b/config/locales/zh/course/mailer/assessment_closing_summary_email.yml deleted file mode 100644 index bde3f2f7b75..00000000000 --- a/config/locales/zh/course/mailer/assessment_closing_summary_email.yml +++ /dev/null @@ -1,13 +0,0 @@ -zh: - course: - mailer: - assessment_closing_summary_email: - subject: '%{course}: 相关提醒 %{assessment}' - message: > - 向以下学生发送了电子邮件,提醒他们%{assessment}将于%{time}截止: - - %{students} - message_no_time: > - 向以下学生发送了电子邮件,提醒他们练习并提交评估测验 %{assessment}: - - %{students} diff --git a/config/locales/zh/course/mailer/course_duplicate_failed_email.yml b/config/locales/zh/course/mailer/course_duplicate_failed_email.yml deleted file mode 100644 index 6ee7eb93b5e..00000000000 --- a/config/locales/zh/course/mailer/course_duplicate_failed_email.yml +++ /dev/null @@ -1,8 +0,0 @@ -zh: - course: - mailer: - course_duplicate_failed_email: - subject: '课程复制失败: %{original_course}' - message: > - 复制%{original_course}失败。 - 请稍后再试,如果问题仍然存在,请联系开发人员。 diff --git a/config/locales/zh/course/mailer/course_duplicated_email.yml b/config/locales/zh/course/mailer/course_duplicated_email.yml deleted file mode 100644 index 5a2514fee56..00000000000 --- a/config/locales/zh/course/mailer/course_duplicated_email.yml +++ /dev/null @@ -1,11 +0,0 @@ -zh: - course: - mailer: - course_duplicated_email: - - subject: '课程复制完成: %{new_course}' - click_here: '点击此处' - message: > - 将%{original_course}复制到%{new_course}的工作已经完成。 - - %{click_here}查看复制的课程。 diff --git a/config/locales/zh/course/mailer/course_user_deletion_failed_email.yml b/config/locales/zh/course/mailer/course_user_deletion_failed_email.yml deleted file mode 100644 index e8796eddecf..00000000000 --- a/config/locales/zh/course/mailer/course_user_deletion_failed_email.yml +++ /dev/null @@ -1,8 +0,0 @@ -zh: - course: - mailer: - course_user_deletion_failed_email: - subject: '无法将用户 %{course_user_name} 从 %{course_name} 中删除' - message: > - 无法将用户 %{course_user_name} 从课程 %{course_name} 中删除。 - 请稍后再试,或者如果问题持续,请联系支持团队。 diff --git a/config/locales/zh/course/mailer/submission_graded_email.yml b/config/locales/zh/course/mailer/submission_graded_email.yml deleted file mode 100644 index a1f8c6c0cd8..00000000000 --- a/config/locales/zh/course/mailer/submission_graded_email.yml +++ /dev/null @@ -1,7 +0,0 @@ -zh: - course: - mailer: - submission_graded_email: - subject: '%{course}: 你%{assessment}的提交已被批改' - message: > - 点击%{submission}查看你的评分。 diff --git a/config/locales/zh/course/mailer/survey_closing_reminder_email.yml b/config/locales/zh/course/mailer/survey_closing_reminder_email.yml deleted file mode 100644 index d61d85cb7af..00000000000 --- a/config/locales/zh/course/mailer/survey_closing_reminder_email.yml +++ /dev/null @@ -1,7 +0,0 @@ -zh: - course: - mailer: - survey_closing_reminder_email: - subject: '%{course}: 相关提醒 %{survey}' - message: > - 请注意%{survey}将于%{time}过期。 diff --git a/config/locales/zh/course/mailer/survey_closing_summary_reminder.yml b/config/locales/zh/course/mailer/survey_closing_summary_reminder.yml deleted file mode 100644 index 4d7279e9e4b..00000000000 --- a/config/locales/zh/course/mailer/survey_closing_summary_reminder.yml +++ /dev/null @@ -1,10 +0,0 @@ -zh: - course: - mailer: - survey_closing_summary_email: - - subject: '%{course}:相关提醒%{survey}' - message: > - 我们向以下学生发送了电子邮件,提醒他们%{survey}将于%{time}过期: - - %{student_list} diff --git a/config/locales/zh/course/mailer/user_added_email.yml b/config/locales/zh/course/mailer/user_added_email.yml deleted file mode 100644 index 912a25b0632..00000000000 --- a/config/locales/zh/course/mailer/user_added_email.yml +++ /dev/null @@ -1,10 +0,0 @@ -zh: - course: - mailer: - user_added_email: - - subject: '添加至课程%{course}' - message: > - 您已被加入%{coursemology}的课程%{course}。 - - 要查看该课程,请使用%{email}登录。 diff --git a/config/locales/zh/course/mailer/user_enrol_requested_email.yml b/config/locales/zh/course/mailer/user_enrol_requested_email.yml deleted file mode 100644 index 17d9d12616a..00000000000 --- a/config/locales/zh/course/mailer/user_enrol_requested_email.yml +++ /dev/null @@ -1,11 +0,0 @@ -zh: - course: - mailer: - user_enrol_requested_email: - subject: '%{course}加入申请' - recipients: '课程管理员' - message: > - %{user}申请加入课程%{course} - - - 你可以进入%{course_requests_page}来查看和处理申请。 diff --git a/config/locales/zh/course/mailer/user_invitation_email.yml b/config/locales/zh/course/mailer/user_invitation_email.yml deleted file mode 100644 index 11d760ea49a..00000000000 --- a/config/locales/zh/course/mailer/user_invitation_email.yml +++ /dev/null @@ -1,21 +0,0 @@ -zh: - course: - mailer: - user_invitation_email: - - - - - - subject: '邀请报名参加%{course}' - click_here: '点击此处' - message: > - 你被邀请加入%{coursemology}的课程%{course}。 - - - 你似乎没有在这个电子邮件地址注册的账户 (%{email}); - - %{click_here} 来创建一个账户并接受邀请。 - - 如果你已经使用另一个电子邮箱地址创建了Coursemology账户, - 查看%{course}并使用以下不可转让的注册码进行注册: diff --git a/config/locales/zh/course/mailer/user_rejected_email.yml b/config/locales/zh/course/mailer/user_rejected_email.yml deleted file mode 100644 index f34eb667157..00000000000 --- a/config/locales/zh/course/mailer/user_rejected_email.yml +++ /dev/null @@ -1,8 +0,0 @@ -zh: - course: - mailer: - user_rejected_email: - subject: '课程注册请求被拒绝 - %{course}' - message: > - 你在%{coursemology}上关于%{course}的课程申请已被拒绝! - diff --git a/config/locales/zh/course/material/materials.yml b/config/locales/zh/course/material/materials.yml deleted file mode 100644 index b7133916321..00000000000 --- a/config/locales/zh/course/material/materials.yml +++ /dev/null @@ -1,4 +0,0 @@ -zh: - course: - material: - sidebar_title: '材料' diff --git a/config/locales/zh/course/plagiarism.yml b/config/locales/zh/course/plagiarism.yml deleted file mode 100644 index 6cca8befdb1..00000000000 --- a/config/locales/zh/course/plagiarism.yml +++ /dev/null @@ -1,4 +0,0 @@ -zh: - course: - plagiarism: - header: '抄袭检查' diff --git a/config/locales/zh/course/reference_timelines.yml b/config/locales/zh/course/reference_timelines.yml deleted file mode 100644 index adb0f7175ce..00000000000 --- a/config/locales/zh/course/reference_timelines.yml +++ /dev/null @@ -1,5 +0,0 @@ -zh: - course: - reference_timelines: - reference_timeline: - default_title: '默认时间线' diff --git a/config/locales/zh/course/scholaistic.yml b/config/locales/zh/course/scholaistic.yml deleted file mode 100644 index 28af39c13d6..00000000000 --- a/config/locales/zh/course/scholaistic.yml +++ /dev/null @@ -1,4 +0,0 @@ -zh: - course: - scholaistic: - assessments: "角色扮演评估" diff --git a/config/locales/zh/course/statistics.yml b/config/locales/zh/course/statistics.yml deleted file mode 100644 index 2e6650691e1..00000000000 --- a/config/locales/zh/course/statistics.yml +++ /dev/null @@ -1,7 +0,0 @@ -zh: - course: - statistics: - name: '用户名' - type: '学生类型' - email: 'Email' - header: '数据' diff --git a/config/locales/zh/course/stories.yml b/config/locales/zh/course/stories.yml deleted file mode 100644 index ea465a8c0db..00000000000 --- a/config/locales/zh/course/stories.yml +++ /dev/null @@ -1,5 +0,0 @@ -zh: - course: - stories: - learn: '学' - mission_control: '任务控制' diff --git a/config/locales/zh/course/survey/responses.yml b/config/locales/zh/course/survey/responses.yml deleted file mode 100644 index 3b83c8d9047..00000000000 --- a/config/locales/zh/course/survey/responses.yml +++ /dev/null @@ -1,5 +0,0 @@ -zh: - course: - survey: - responses: - no_course_user: '你必须是本课程的成员才能开始调研。' diff --git a/config/locales/zh/course/survey/surveys.yml b/config/locales/zh/course/survey/surveys.yml deleted file mode 100644 index d1901ae6afa..00000000000 --- a/config/locales/zh/course/survey/surveys.yml +++ /dev/null @@ -1,10 +0,0 @@ -zh: - course: - surveys: - survey_download_service: - created_at: '创建时间戳' - updated_at: '上一次更新时间戳' - course_user_id: '课程用户ID' - name: '姓名' - role: '身份变更' - unknown_question_type: '未知问题类型' diff --git a/config/locales/zh/course/surveys.yml b/config/locales/zh/course/surveys.yml deleted file mode 100644 index c83f978f32e..00000000000 --- a/config/locales/zh/course/surveys.yml +++ /dev/null @@ -1,4 +0,0 @@ -zh: - course: - surveys: - sidebar_title: '调查' diff --git a/config/locales/zh/course/user_invitations.yml b/config/locales/zh/course/user_invitations.yml deleted file mode 100644 index 27a8a1ca6c2..00000000000 --- a/config/locales/zh/course/user_invitations.yml +++ /dev/null @@ -1,7 +0,0 @@ -zh: - course: - user_invitations: - errors: - duplicate_user: '%{user}在提交中出现了多次。' - invalid_email: '%{email}无效:%{message}。' - diff --git a/config/locales/zh/course/user_registrations.yml b/config/locales/zh/course/user_registrations.yml deleted file mode 100644 index 9a377ff2216..00000000000 --- a/config/locales/zh/course/user_registrations.yml +++ /dev/null @@ -1,11 +0,0 @@ -zh: - course: - user_registrations: - create: - invalid_code: '你输入了一个无效的邀请码。' - code_taken: > - 所提供的邀请码已被另一个账户所使用, - 请使用该账户来访问该课程。 - code_taken_with_email: > - 所提供的邀请码已被%{email}使用, - 请使用该账户访问该课程。 diff --git a/config/locales/zh/course/users.yml b/config/locales/zh/course/users.yml deleted file mode 100644 index fd211889430..00000000000 --- a/config/locales/zh/course/users.yml +++ /dev/null @@ -1,19 +0,0 @@ -zh: - course: - users: - sidebar_title: :'course.users.index.header' - role: - student: '学生' - teaching_assistant: '助教' - observer: '观察者' - manager: '管理员' - owner: '拥有者' - phantom: '虚拟用户' - new: - already_registered: '你已注册为%{role}。' - students: - header: '学生' - staff: - header: '员工' - index: - header: '学生' diff --git a/config/locales/zh/course/video/videos.yml b/config/locales/zh/course/video/videos.yml deleted file mode 100644 index df39ff22abb..00000000000 --- a/config/locales/zh/course/video/videos.yml +++ /dev/null @@ -1,7 +0,0 @@ -zh: - course: - video: - videos: - sidebar_title: :'course.video.videos.index.header' - index: - header: '视频' diff --git a/config/locales/zh/csv.yml b/config/locales/zh/csv.yml new file mode 100644 index 00000000000..ac239e862fe --- /dev/null +++ b/config/locales/zh/csv.yml @@ -0,0 +1,64 @@ +zh: + csv: + # Assessment submissions - detailed answers export + assessment_submissions: + headers: + name: '姓名' + email: 'Email' + role: '身份变更' + user_type: '用户类型' + status: '状态' + question_title: '问题标题' + question_type: '问题类型' + values: + normal: '常规' + phantom: '虚拟' + unstarted: '未开始' + no_answer: '无答案' + note: 'N/A: 该答案的格式不能放在一个单元格中。' + + # Assessment statistics - summary export + assessment_statistics: + headers: + name: '姓名' + phantom: '虚拟用户' + status: '状态' + grade: '评分' + max_grade: '最高分' + exp_points: '经验值' + start_date_time: '开始日期/时间' + submitted_date_time: '提交日期/时间' + time_taken: '耗时' + graded_date_time: '评分日期/时间' + grading_time: '评分耗时' + grader: '评分人' + publisher: '发布人' + values: + empty: '-' + + # Experience points records export + experience_points: + headers: + name: '姓名' + updated_at: '更新于' + updater: '更新者' + reason: '理由' + exp_points: '经验值奖励已获取' + + # Survey responses export + survey: + headers: + created_at: '创建时间戳' + updated_at: '上一次更新时间戳' + course_user_id: '课程用户ID' + name: '姓名' + role: '身份变更' + values: + unknown_question_type: '未知问题类型' + + # Assessment score summary statistics export + score_summary: + headers: + name: '用户名' + type: '学生类型' + email: 'Email' diff --git a/config/locales/zh/errors.yml b/config/locales/zh/errors.yml new file mode 100644 index 00000000000..cb4b14af578 --- /dev/null +++ b/config/locales/zh/errors.yml @@ -0,0 +1,79 @@ +zh: + errors: + authentication: + wrong_password: '密码错误' + code_formatter: + size_too_big: '文件过大,无法显示。' + course: + users: + already_registered: '你已注册为%{role}。' + role: + student: '学生' + teaching_assistant: '助教' + observer: '观察者' + manager: '管理员' + owner: '拥有者' + phantom: '虚拟用户' + user_invitations: + duplicate_user: '%{user}在提交中出现了多次。' + invalid_email: '%{email}无效:%{message}。' + user_registrations: + invalid_code: '你输入了一个无效的邀请码。' + code_taken: > + 所提供的邀请码已被另一个账户所使用, + 请使用该账户来访问该课程。 + code_taken_with_email: > + 所提供的邀请码已被%{email}使用, + 请使用该账户访问该课程。 + assessment: + answer: + programming_auto_grading: + grade: + evaluation_failed_syntax: > + 你的代码无法运行,可能存在语法错误或者使用了不支持的库,请再次检查代码。 + evaluation_failed_time_or_memory: > + 你的代码未能在指定的时间/内存限制内完成。 + stdout_too_long: > + 由于代码执行时在 stdout 生成了过多输出,因此被终止。 + 请排除不必要的输出后重试。 + stderr_too_long: > + 由于代码执行时在 stderr 生成了过多输出,因此被终止。 + 请排除不必要的输出后重试。 + time_limit_error: > + 错误:超过时间限制 (TLE) + memory_limit_error: > + 错误:超过内存限制 (MLE) + job: + failure: + time_limit_breached: > + 判题机在运行时已被终止,可能是由于该问题的时间限制,超出了 coursemology 中允许的值。 + 请联系你的讲师检查课程设置,如果问题仍然存在,请联系 coursemology 管理员。 + timeout_error: > + 判题任务运行时间过长导致超时错误。 + 请在几分钟后重试。如果问题仍然存在,请联系您的课程讲师或 coursemology 管理员。 + container_unreachable: > + 创建判题机docker时出错。 可能是由于服务器工作负载过高。 + 请在几分钟后重试。如果问题仍然存在,请联系您的课程讲师或 coursemology 管理员。 + generic_error: > + 发生错误。可能是由于服务器繁忙,请在几分钟后重试。如果问题仍然存在,请联系 coursemology 管理员, + 并提供此页面的 URL,引用以下错误:"%{error}" + live_feedback: + thread: + only_one_active_thread: '每个提交问题只能有一个活动线程' + submission: + download_statistics: + no_submissions: '没有提交满足您的下载要求' + survey: + responses: + no_course_user: '你必须是本课程的成员才能开始调研。' + user: + emails: + no_confirmed_emails: '没有已验证的邮箱地址可以设置为主要邮箱。' + already_confirmed: '%{email}已验证。' + registrations: + used: > + 所提供的邀请码已被另一个账户所使用,请使用该账户登录。 + used_with_email: > + 所提供的邀请码已被%{email}使用, + 请使用该账户访问该课程。 + verify_recaptcha_alert: 下方 reCAPTCHA 验证出现错误,请重试。 diff --git a/config/locales/zh/instance/mailer/user_added_email.yml b/config/locales/zh/instance/mailer/user_added_email.yml deleted file mode 100644 index 61cdf6281e4..00000000000 --- a/config/locales/zh/instance/mailer/user_added_email.yml +++ /dev/null @@ -1,10 +0,0 @@ -zh: - instance: - mailer: - user_added_email: - - subject: '已加入实例%{instance}' - message: > - 你已被加入%{coursemology}的实例%{instance}。 - - 要查看该实例,请用以下方式登录%{email}. diff --git a/config/locales/zh/instance/mailer/user_invitation_email.yml b/config/locales/zh/instance/mailer/user_invitation_email.yml deleted file mode 100644 index a57de46ac61..00000000000 --- a/config/locales/zh/instance/mailer/user_invitation_email.yml +++ /dev/null @@ -1,13 +0,0 @@ -zh: - instance: - mailer: - user_invitation_email: - - - - subject: '邀请以%{role}加入%{instance}实例' - click_here: '点击此处' - message: > - 你被邀请加入%{coursemology}上的实例%{instance} - 你似乎没有以这个电子邮件地址注册的账户(%{email}); - %{click_here}来创建账户并接受邀请。 diff --git a/config/locales/zh/layout.yml b/config/locales/zh/layout.yml deleted file mode 100644 index a32e0a663ed..00000000000 --- a/config/locales/zh/layout.yml +++ /dev/null @@ -1,37 +0,0 @@ -zh: - layout: - coursemology: 'Coursemology' - layouts: - course_admin: - title: '课程设置' - course_settings: - title: '通用' - announcement_settings: - title: :'course.announcements.index.header' - component_settings: - title: '功能组件' - sidebar_settings: - title: '侧边栏' - notifications: - title: '邮箱' - lesson_plan: - title: '课程计划' - codaveri: - title: 'Codaveri评估和反馈' - rag_wise: - title: 'RagWise 自动论坛回复' - course_users: - title: '管理用户' - duplication: - title: '复制数据' - mailer: - greeting: '你好, %{user}:' - code_formatter: - size_too_big: '该文件太大,无法显示。' - learning_map: - title: '学习计划' - multiple_reference_timelines: - timeline_designer: '时间线设计工具' - manage_email_subscription: - tag: '取消订阅' - message: '%{manage_email_subscription_link} 以不再关注该电子邮件主题。' diff --git a/config/locales/zh/mailers.yml b/config/locales/zh/mailers.yml new file mode 100644 index 00000000000..cbae983002a --- /dev/null +++ b/config/locales/zh/mailers.yml @@ -0,0 +1,246 @@ +zh: + common: + # Shared keys used across course mailers, instance mailers, and notifiers + mailers: + anonymous_course_user: 匿名用户 + click_here: '点击此处' + coursemology: 'Coursemology' + greeting: '您好,%{user}:' + manage_email_subscription: + tag: '取消订阅' + message: '%{manage_email_subscription_link} 从此电子邮件主题取消订阅。' + plain_text_link: '%{text} (%{url})' + phantom_course_user: '(幽灵)' + course: + mailer: + assessment_closing_reminder_email: + subject: '%{course}: 相关提醒 %{assessment}' + message: > + 请注意 %{assessment} 将截止于 %{time}。 + message_no_time: > + 请注意练习并提交 - %{assessment}。 + assessment_closing_summary_email: + subject: '%{course}: 相关提醒 %{assessment}' + message: > + 向以下学生发送了电子邮件,提醒他们%{assessment}将于%{time}截止: + + %{students} + message_no_time: > + 向以下学生发送了电子邮件,提醒他们练习并提交评估测验 %{assessment}: + + %{students} + course_duplicate_failed_email: + subject: '课程复制失败: %{original_course}' + message: > + 复制%{original_course}失败。 + 请稍后再试,如果问题仍然存在,请联系开发人员。 + course_duplicated_email: + subject: '课程复制完成: %{new_course}' + message: > + 将%{original_course}复制到%{new_course}的工作已经完成。 + + %{click_here}查看复制的课程。 + course_user_deletion_failed_email: + subject: '无法将用户 %{course_user_name} 从 %{course_name} 中删除' + message: > + 无法将用户 %{course_user_name} 从课程 %{course_name} 中删除。 + 请稍后再试,或者如果问题持续,请联系支持团队。 + submission_graded_email: + subject: '%{course}: 你%{assessment}的提交已被批改' + message: > + 点击%{submission}查看你的评分。 + survey_closing_reminder_email: + subject: '%{course}: 相关提醒 %{survey}' + message: > + 请注意%{survey}将于%{time}过期。 + survey_closing_summary_email: + subject: '%{course}:相关提醒%{survey}' + message: > + 我们向以下学生发送了电子邮件,提醒他们%{survey}将于%{time}过期: + + %{student_list} + user_added_email: + subject: '添加至课程%{course}' + message: > + 您已被加入%{coursemology}的课程%{course}。 + + 要查看该课程,请使用%{email}登录。 + user_enrol_requested_email: + subject: '%{course}加入申请' + recipients: '课程管理员' + user_requests_header: '用户请求' + message: > + %{user}申请加入课程%{course} + + + 你可以进入%{course_requests_page}来查看和处理申请。 + user_invitation_email: + subject: '邀请报名参加%{course}' + message: > + 你被邀请加入%{coursemology}的课程%{course}。 + + + 你似乎没有在这个电子邮件地址注册的账户 (%{email}); + + %{click_here} 来创建一个账户并接受邀请。 + + 如果你已经使用另一个电子邮箱地址创建了Coursemology账户, + 查看%{course}并使用以下不可转让的注册码进行注册: + user_rejected_email: + subject: '课程注册请求被拒绝 - %{course}' + message: > + 你在%{coursemology}上关于%{course}的课程申请已被拒绝! + + instance: + mailer: + user_added_email: + subject: '已加入实例%{instance}' + message: > + 你已被加入%{coursemology}的实例%{instance}。 + + 要查看该实例,请用以下方式登录%{email}. + + user_invitation_email: + subject: '邀请以%{role}加入%{instance}实例' + message: > + 你被邀请加入%{coursemology}上的实例%{instance} + 你似乎没有以这个电子邮件地址注册的账户(%{email}); + %{click_here}来创建账户并接受邀请。 + instance_user_role_request_mailer: + new_role_request: + subject: '新的身份变更申请!' + empty: '(未指明)' + message_html: > + %{user} (%{email})申请在%{instance}中变更身份为%{role}。 + + 组织 + + %{organization} + + + 名称 + + %{designation} + + + 理由 + + %{reason} + + + %{click_here}来查看该申请. + + role_request_approved: + subject: '你的身份变更申请已通过!' + message: > + 你已被确认为Coursemology中的%{role}! + + %{click_here}来创建一门课程并开始授课吧! + + role_request_rejected: + subject: '你的身份变更申请已被拒绝!' + message_empty: > + 您成为Coursemology上的%{role}的请求已被拒绝! + message: > + 您成为Coursemology上的%{role}的请求已被拒绝! + 请查阅以下信息: + %{message} + notifiers: + course: + announcement_notifier: + new: + course_notifications: + email: + subject: '%{course}新公告:%{announcement}' + message: > +

%{creator}在课程%{course}发布了新公告%{announcement}:

+ %{content} + assessment_notifier: + opening: + course_notifications: + email: + subject: '%{course}新的可用测验' + message: > + 新的可用测验 : %{assessment} + submitted: + user_notifications: + email: + subject: '%{course} 新提交于 : %{assessment}' + message: > + %{user} 有一个新的提交 + + 请审阅并评分 %{submission}. + assessment: + answer: + comment_notifier: + annotated: + user_notifications: + email: + subject: '%{course}:新批注%{topic}' + message: > +

%{post_author}添加了一条批注,%{post}

+ +

你可以在此处回复:

+ %{topic} + submission_question: + comment_notifier: + replied: + user_notifications: + email: + subject: '%{course}:新批注%{topic}' + message: > +

%{post_author}添加了一条批注,%{post}

+ +

你可以在此处回复:

+ %{topic} + + consolidated_opening_reminder_notifier: + opening_reminder: + course_notifications: + email: + subject: '%{course}课程提醒' + message: '以下项目将在未来24小时内开放。' + course: + assessment: + section_header: '新的可用测验:' + survey: + section_header: '新的可用调研:' + video: + section_header: '新的可用视频:' + forum: + post_notifier: + replied: + user_notifications: + email: + subject: '%{course} 对论坛主题%{topic}的新回复' + message: > +

%{post_author}回复了,

+ %{post} +

你可以在此处回复:%{topic}


+ unsubscribe: + tag: '取消订阅' + message: '%从这个论坛主题的电子邮件通知中{unsubscribe_link}' + topic_notifier: + created: + user_notifications: + email: + subject: '%{course} 在论坛%{forum}上创建的新话题' + message: > +

%{topic_author}在论坛中创建了新话题:%{topic}


+ %{post} + unsubscribe: + tag: '取消订阅' + message: '%从这个论坛主题的电子邮件通知中{unsubscribe_link}' + video_notifier: + opening: + course_notifications: + email: + subject: '%{course} 新的可用视频' + message: > + 新的可用视频 : %{video} + closing: + user_notifications: + email: + subject: '%{course} %{video} 视频提醒 ' + message: > + 请注意%{video}将于%{time}截止 diff --git a/config/locales/zh/notifiers/course/announcement_notifier/new/course_notifications/email.yml b/config/locales/zh/notifiers/course/announcement_notifier/new/course_notifications/email.yml deleted file mode 100644 index 29ed5791ced..00000000000 --- a/config/locales/zh/notifiers/course/announcement_notifier/new/course_notifications/email.yml +++ /dev/null @@ -1,11 +0,0 @@ -zh: - notifiers: - course: - announcement_notifier: - new: - course_notifications: - email: - subject: '%{course}新公告:%{announcement}' - message: > -

%{creator}在课程%{course}发布了新公告%{announcement}:

- %{content} diff --git a/config/locales/zh/notifiers/course/assessment/answer/comment_notifier/annotated/user_notifications/email.yml b/config/locales/zh/notifiers/course/assessment/answer/comment_notifier/annotated/user_notifications/email.yml deleted file mode 100644 index a308229fe9d..00000000000 --- a/config/locales/zh/notifiers/course/assessment/answer/comment_notifier/annotated/user_notifications/email.yml +++ /dev/null @@ -1,16 +0,0 @@ -zh: - notifiers: - course: - assessment: - answer: - comment_notifier: - annotated: - user_notifications: - email: - - subject: '%{course}:新批注%{topic}' - message: > -

%{post_author}添加了一条批注,%{post}

- -

你可以在此处回复:

- %{topic} diff --git a/config/locales/zh/notifiers/course/assessment/submission_question/comment_notifier/replied/user_notifications/email.yml b/config/locales/zh/notifiers/course/assessment/submission_question/comment_notifier/replied/user_notifications/email.yml deleted file mode 100644 index e5eeb6a9f36..00000000000 --- a/config/locales/zh/notifiers/course/assessment/submission_question/comment_notifier/replied/user_notifications/email.yml +++ /dev/null @@ -1,17 +0,0 @@ -zh: - notifiers: - course: - assessment: - submission_question: - comment_notifier: - replied: - user_notifications: - email: - - subject: '%{course}:新批注%{topic}' - message: > -

%{post_author}添加了一条批注,%{post}

- -

你可以在此处回复:

- %{topic} - diff --git a/config/locales/zh/notifiers/course/assessment_notifier/opening/course_notifications/email.yml b/config/locales/zh/notifiers/course/assessment_notifier/opening/course_notifications/email.yml deleted file mode 100644 index 538a42424fb..00000000000 --- a/config/locales/zh/notifiers/course/assessment_notifier/opening/course_notifications/email.yml +++ /dev/null @@ -1,10 +0,0 @@ -zh: - notifiers: - course: - assessment_notifier: - opening: - course_notifications: - email: - subject: '%{course}新的可用测验' - message: > - 新的可用测验 : %{assessment} diff --git a/config/locales/zh/notifiers/course/assessment_notifier/submitted/user_notifications/email.yml b/config/locales/zh/notifiers/course/assessment_notifier/submitted/user_notifications/email.yml deleted file mode 100644 index 4d51c0de9f4..00000000000 --- a/config/locales/zh/notifiers/course/assessment_notifier/submitted/user_notifications/email.yml +++ /dev/null @@ -1,12 +0,0 @@ -zh: - notifiers: - course: - assessment_notifier: - submitted: - user_notifications: - email: - subject: '%{course} 新提交于 : %{assessment}' - message: > - %{user} 有一个新的提交 - - 请审阅并评分 %{submission}. diff --git a/config/locales/zh/notifiers/course/consolidated_opening_reminder_notifier/opening_reminder/course_notifications/email.yml b/config/locales/zh/notifiers/course/consolidated_opening_reminder_notifier/opening_reminder/course_notifications/email.yml deleted file mode 100644 index c400a06317f..00000000000 --- a/config/locales/zh/notifiers/course/consolidated_opening_reminder_notifier/opening_reminder/course_notifications/email.yml +++ /dev/null @@ -1,16 +0,0 @@ -zh: - notifiers: - course: - consolidated_opening_reminder_notifier: - opening_reminder: - course_notifications: - email: - subject: '%{course}课程提醒' - message: '以下项目将在未来24小时内开放。' - course: - assessment: - section_header: '新的可用测验:' - survey: - section_header: '新的可用调研:' - video: - section_header: '新的可用视频:' diff --git a/config/locales/zh/notifiers/course/forum/post_notifier/replied/user_notifications/email.yml b/config/locales/zh/notifiers/course/forum/post_notifier/replied/user_notifications/email.yml deleted file mode 100644 index d35ca2fe98e..00000000000 --- a/config/locales/zh/notifiers/course/forum/post_notifier/replied/user_notifications/email.yml +++ /dev/null @@ -1,16 +0,0 @@ -zh: - notifiers: - course: - forum: - post_notifier: - replied: - user_notifications: - email: - subject: '%{course} 对论坛主题%{topic}的新回复' - message: > -

%{post_author}回复了,

- %{post} -

你可以在此处回复:%{topic}


- unsubscribe: - tag: '取消订阅' - message: '%从这个论坛主题的电子邮件通知中{unsubscribe_link}' diff --git a/config/locales/zh/notifiers/course/forum/topic_notifier/created/user_notifications/email.yml b/config/locales/zh/notifiers/course/forum/topic_notifier/created/user_notifications/email.yml deleted file mode 100644 index d8cf40936bd..00000000000 --- a/config/locales/zh/notifiers/course/forum/topic_notifier/created/user_notifications/email.yml +++ /dev/null @@ -1,15 +0,0 @@ -zh: - notifiers: - course: - forum: - topic_notifier: - created: - user_notifications: - email: - subject: '%{course} 在论坛%{forum}上创建的新话题' - message: > -

%{topic_author}在论坛中创建了新话题:%{topic}


- %{post} - unsubscribe: - tag: '取消订阅' - message: '%从这个论坛主题的电子邮件通知中{unsubscribe_link}' diff --git a/config/locales/zh/notifiers/course/video_notifier/video_notifier.yml b/config/locales/zh/notifiers/course/video_notifier/video_notifier.yml deleted file mode 100644 index 56f57a9fd72..00000000000 --- a/config/locales/zh/notifiers/course/video_notifier/video_notifier.yml +++ /dev/null @@ -1,16 +0,0 @@ -zh: - notifiers: - course: - video_notifier: - opening: - course_notifications: - email: - subject: '%{course} 新的可用视频' - message: > - 新的可用视频 : %{video} - closing: - user_notifications: - email: - subject: '%{course} %{video} 视频提醒 ' - message: > - 请注意%{video}将于%{time}截止 diff --git a/config/locales/zh/user/emails.yml b/config/locales/zh/user/emails.yml deleted file mode 100644 index 5f774cabe34..00000000000 --- a/config/locales/zh/user/emails.yml +++ /dev/null @@ -1,9 +0,0 @@ -zh: - user: - emails: - index: - header: '邮箱' - set_primary: - no_confirmed_emails: '没有已验证的邮箱地址可以设置为主要邮箱。' - send_confirmation: - already_confirmed: '%{email}已验证。' diff --git a/config/locales/zh/user/registrations.yml b/config/locales/zh/user/registrations.yml deleted file mode 100644 index f2bed7b84d1..00000000000 --- a/config/locales/zh/user/registrations.yml +++ /dev/null @@ -1,11 +0,0 @@ -zh: - user: - registrations: - new: - used: > - 所提供的邀请码已被另一个账户所使用,请使用该账户登录。 - used_with_email: > - 所提供的邀请码已被%{email}使用, - 请使用该账户访问该课程。 - create: - verify_recaptcha_alert: 下方 reCAPTCHA 验证出现错误,请重试。 diff --git a/spec/controllers/course/admin/sidebar_settings_controller_spec.rb b/spec/controllers/course/admin/sidebar_settings_controller_spec.rb index fd59fe19e96..402f9635599 100644 --- a/spec/controllers/course/admin/sidebar_settings_controller_spec.rb +++ b/spec/controllers/course/admin/sidebar_settings_controller_spec.rb @@ -18,7 +18,6 @@ let(:sample_item) { controller.sidebar_items(type: :normal).sample } let(:weight) { 10 } let(:sidebar_item_attributes) do - id = generate(:nested_attribute_new_id) sidebar_item_attributes = [{ id: sample_item[:key], weight: weight }] { sidebar_items_attributes: sidebar_item_attributes } end diff --git a/spec/controllers/course/controller_spec.rb b/spec/controllers/course/controller_spec.rb index 65c36bdc376..c19a682bf7a 100644 --- a/spec/controllers/course/controller_spec.rb +++ b/spec/controllers/course/controller_spec.rb @@ -71,11 +71,11 @@ def publicly_accessible? end it 'orders sidebar items with the same weight by ascending key' do - allow(controller).to receive(:sidebar_items_weights).and_return(Hash.new(1)) - - keys = controller.sidebar_items.map { |item| item[:key] } - expect(keys.length).not_to eq(0) - expect(keys.each_cons(2).all? { |a, b| a.to_s <= b.to_s }).to be_truthy + key_sets = controller.sidebar_items.group_by { |item| item[:weight] } + expect(key_sets.length).not_to eq(0) + expect( + key_sets.map { |_, set| set.each_cons(2).all? { |a, b| a[:key].to_s <= b[:key].to_s } } + ).to all(be_truthy) end context 'when no type is specified' do diff --git a/spec/controllers/course/lesson_plan/items_controller_spec.rb b/spec/controllers/course/lesson_plan/items_controller_spec.rb index b998bc16840..5cf7ffcd7bf 100644 --- a/spec/controllers/course/lesson_plan/items_controller_spec.rb +++ b/spec/controllers/course/lesson_plan/items_controller_spec.rb @@ -66,7 +66,7 @@ subject expect(json_response['items'].map { |i| i['lesson_plan_item_type'][0] }). - to include(I18n.t('components.video.name')) + to include(Course::VideosComponent.key.to_s) end end @@ -113,7 +113,7 @@ expect(json_response['items']).not_to be_empty expect(json_response['items'].map { |i| i['lesson_plan_item_type'][0] }). - not_to include(I18n.t('components.video.name')) + not_to include(Course::VideosComponent.key.to_s) end end end diff --git a/spec/features/course/achievement_listing_spec.rb b/spec/features/course/achievement_listing_spec.rb index 98eac3f5b8c..80472c71294 100644 --- a/spec/features/course/achievement_listing_spec.rb +++ b/spec/features/course/achievement_listing_spec.rb @@ -62,7 +62,7 @@ scenario 'I can view the Achievement Sidebar item' do visit course_path(course) - expect(find_sidebar).to have_text(I18n.t('course.achievement.achievements.sidebar_title')) + expect(find_sidebar).to have_selector('#sidebar_item_achievements') end scenario 'I can view all users who have obtained an achievement' do diff --git a/spec/features/course/admin/admin_spec.rb b/spec/features/course/admin/admin_spec.rb index 15d52370420..93775eb2f7b 100644 --- a/spec/features/course/admin/admin_spec.rb +++ b/spec/features/course/admin/admin_spec.rb @@ -16,7 +16,7 @@ scenario 'I can view the Course Admin Sidebar item' do visit course_path(course) - expect(find_sidebar).to have_text(I18n.t('layouts.course_admin.title')) + expect(find_sidebar).to have_selector('#sidebar_item_admin_settings') end scenario 'I can change the course attributes' do @@ -97,7 +97,7 @@ scenario 'I can view the Course Admin Sidebar item' do visit course_path(course) - expect(find_sidebar).to have_text(I18n.t('layouts.course_admin.title')) + expect(find_sidebar).to have_selector('#sidebar_item_admin_settings') end scenario 'I cannot delete the course' do @@ -113,7 +113,7 @@ scenario 'I cannot view the Course Admin Sidebar item' do visit course_path(course) - expect(find_sidebar).not_to have_text(I18n.t('layouts.course_admin.title')) + expect(find_sidebar).not_to have_selector('#sidebar_item_admin_settings') end end @@ -123,7 +123,7 @@ scenario 'I cannot view the Course Admin Sidebar item' do visit course_path(course) - expect(find_sidebar).not_to have_text(I18n.t('layouts.course_admin.title')) + expect(find_sidebar).not_to have_selector('#sidebar_item_admin_settings') end end end diff --git a/spec/features/course/admin/announcement_settings_spec.rb b/spec/features/course/admin/announcement_settings_spec.rb index 3ee176f3d85..020fcebb864 100644 --- a/spec/features/course/admin/announcement_settings_spec.rb +++ b/spec/features/course/admin/announcement_settings_spec.rb @@ -27,7 +27,7 @@ # Refresh page to update sidebar visit current_path - expect(find_sidebar).to have_text(new_title) + expect(find_sidebar).to have_selector('#sidebar_item_announcements', text: new_title) fill_in title_field, with: empty_title click_button 'Save changes' @@ -35,7 +35,7 @@ # Refresh page to update sidebar visit current_path - expect(find_sidebar).to have_text(I18n.t('course.announcements.sidebar_title')) + expect(find_sidebar).to have_selector('#sidebar_item_announcements') end end end diff --git a/spec/features/course/admin/component_settings_spec.rb b/spec/features/course/admin/component_settings_spec.rb index 3461b198508..ada46c87180 100644 --- a/spec/features/course/admin/component_settings_spec.rb +++ b/spec/features/course/admin/component_settings_spec.rb @@ -27,10 +27,11 @@ scenario 'I can view the list of enabled/disabled components' do visit course_admin_components_path(course) + sleep 300 components.each do |component| - expect(page).to have_selector('label', text: component.display_name) - within find('label', text: component.display_name) do + expect(page).to have_selector("label#component_#{component.key}") + within find("label#component_#{component.key}") do if enabled_components.include?(component) expect(page).to have_field(type: 'checkbox', checked: true, visible: false) else @@ -44,7 +45,7 @@ visit course_admin_components_path(course) sample_component = components.intersection(enabled_components).sample - control = find('label', text: sample_component.display_name) + control = find("label#component_#{sample_component.key}") control.click expect_toastify('Your changes have been saved. Refresh to see the new changes.', dismiss: true) diff --git a/spec/features/course/admin/discussion/topic_settings_spec.rb b/spec/features/course/admin/discussion/topic_settings_spec.rb index 26684a88561..7632206aa6b 100644 --- a/spec/features/course/admin/discussion/topic_settings_spec.rb +++ b/spec/features/course/admin/discussion/topic_settings_spec.rb @@ -42,13 +42,13 @@ expect(page).to have_field(title_field, with: new_title) visit current_path - expect(find_sidebar).to have_text(new_title) + expect(find_sidebar).to have_selector('#sidebar_item_discussion_topics', text: new_title) fill_in title_field, with: empty_title click_button 'Save changes' expect_toastify('Your changes have been saved.') visit current_path - expect(find_sidebar).to have_text(I18n.t('course.discussion.topics.sidebar_title')) + expect(find_sidebar).to have_selector('#sidebar_item_discussion_topics') end end end diff --git a/spec/features/course/admin/forum_settings_spec.rb b/spec/features/course/admin/forum_settings_spec.rb index d6ebea74e69..4763b9b8814 100644 --- a/spec/features/course/admin/forum_settings_spec.rb +++ b/spec/features/course/admin/forum_settings_spec.rb @@ -25,7 +25,7 @@ expect(course.reload.settings(:course_forums_component).title).to eq(new_title) visit current_path - expect(find_sidebar).to have_text(new_title) + expect(find_sidebar).to have_selector('#sidebar_item_forums', text: new_title) fill_in title_field, with: empty_title click_button 'Save changes' @@ -33,7 +33,7 @@ expect(course.reload.settings(:course_forums_component).title).to eq(nil) visit current_path - expect(find_sidebar).to have_text(I18n.t('course.forum.forums.sidebar_title')) + expect(find_sidebar).to have_selector('#sidebar_item_forums') end scenario 'I can change the forum pagination settings' do diff --git a/spec/features/course/admin/leaderboard_settings_spec.rb b/spec/features/course/admin/leaderboard_settings_spec.rb index e06550d8cd4..e5490d5aa81 100644 --- a/spec/features/course/admin/leaderboard_settings_spec.rb +++ b/spec/features/course/admin/leaderboard_settings_spec.rb @@ -44,14 +44,14 @@ expect(page).to have_field(title_field, with: new_title) visit current_path - expect(find_sidebar).to have_text(new_title) + expect(find_sidebar).to have_selector('#sidebar_item_leaderboard', text: new_title) fill_in title_field, with: empty_title click_button 'Save changes' expect_toastify('Your changes have been saved.') visit current_path - expect(find_sidebar).to have_text(I18n.t('course.leaderboards.sidebar_title')) + expect(find_sidebar).to have_selector('#sidebar_item_leaderboard') end scenario 'I can enable and disable the group leaderboard' do diff --git a/spec/features/course/admin/material_settings_spec.rb b/spec/features/course/admin/material_settings_spec.rb index 46102972b02..46feca0fafd 100644 --- a/spec/features/course/admin/material_settings_spec.rb +++ b/spec/features/course/admin/material_settings_spec.rb @@ -31,7 +31,7 @@ expect_toastify('Your changes have been saved.') visit current_path - expect(find_sidebar).to have_text(I18n.t('course.material.sidebar_title')) + expect(find_sidebar).to have_selector('#sidebar_item_materials') end end end diff --git a/spec/features/course/admin/video_settings_spec.rb b/spec/features/course/admin/video_settings_spec.rb index 890c9a4393a..476c37acbbb 100644 --- a/spec/features/course/admin/video_settings_spec.rb +++ b/spec/features/course/admin/video_settings_spec.rb @@ -24,14 +24,14 @@ expect(page).to have_field(title_field, with: new_title) visit current_path - expect(find_sidebar).to have_text(new_title) + expect(find_sidebar).to have_selector('#sidebar_item_videos', text: new_title) fill_in title_field, with: empty_title click_button 'Save changes' expect_toastify('Your changes have been saved.') visit current_path - expect(find_sidebar).to have_text(I18n.t('course.video.videos.sidebar_title')) + expect(find_sidebar).to have_selector('#sidebar_item_videos') end end end diff --git a/spec/features/course/announcement_management_spec.rb b/spec/features/course/announcement_management_spec.rb index ffcae142e7a..fe28a216e1f 100644 --- a/spec/features/course/announcement_management_spec.rb +++ b/spec/features/course/announcement_management_spec.rb @@ -86,7 +86,7 @@ scenario 'I can view the Announcement Sidebar item' do visit course_path(course) - expect(find_sidebar).to have_text(I18n.t('course.announcements.sidebar_title')) + expect(find_sidebar).to have_selector('#sidebar_item_announcements') end scenario 'I can see the started announcements' do diff --git a/spec/features/course/assessment/submissions_viewing_spec.rb b/spec/features/course/assessment/submissions_viewing_spec.rb index 9587326d989..0b153ea8d54 100644 --- a/spec/features/course/assessment/submissions_viewing_spec.rb +++ b/spec/features/course/assessment/submissions_viewing_spec.rb @@ -87,8 +87,7 @@ expect(page).to have_no_content_tag_for(published_submission) expect(find_sidebar). - to have_link(I18n.t('course.assessment.submissions.sidebar_title'), - href: course_submissions_path(course)) + to have_link('sidebar_item_assessments_submissions', href: course_submissions_path(course)) end # COMMENTED OUT as it is not possible to select the options for filtering diff --git a/spec/features/course/duplication_spec.rb b/spec/features/course/duplication_spec.rb index 335d1091235..b94063baaa3 100644 --- a/spec/features/course/duplication_spec.rb +++ b/spec/features/course/duplication_spec.rb @@ -18,7 +18,7 @@ scenario 'I cannot view the Duplication Sidebar item' do visit course_path(course) - expect(find_sidebar).not_to have_text(I18n.t('layouts.duplication.title')) + expect(find_sidebar).not_to have_selector('#sidebar_item_admin_duplication') end end @@ -28,7 +28,7 @@ scenario 'I can view the Duplication Sidebar item' do visit course_path(course) - expect(find_sidebar).to have_text(I18n.t('layouts.duplication.title')) + expect(find_sidebar).to have_selector('#sidebar_item_admin_duplication') end end end @@ -39,7 +39,7 @@ scenario 'I can view the Duplication Sidebar item' do visit course_path(course) - expect(find_sidebar).to have_text(I18n.t('layouts.duplication.title')) + expect(find_sidebar).to have_selector('#sidebar_item_admin_duplication') end context 'when I am a manager in one specific course' do @@ -104,7 +104,7 @@ scenario 'I cannot view the Duplication Sidebar item' do visit course_path(course) - expect(find_sidebar).not_to have_text(I18n.t('layouts.duplication.title')) + expect(find_sidebar).not_to have_selector('#sidebar_item_admin_duplication') end scenario 'I cannot access the duplication page' do diff --git a/spec/features/course/forum/topic_management_spec.rb b/spec/features/course/forum/topic_management_spec.rb index f29dccff7a4..5bf9448e009 100644 --- a/spec/features/course/forum/topic_management_spec.rb +++ b/spec/features/course/forum/topic_management_spec.rb @@ -208,7 +208,7 @@ scenario 'I can view the Forum Sidebar item' do visit course_path(course) - expect(find_sidebar).to have_text(I18n.t('course.forum.forums.sidebar_title')) + expect(find_sidebar).to have_selector('#sidebar_item_forums') end scenario 'I can see shown topics' do diff --git a/spec/features/course/group_management_spec.rb b/spec/features/course/group_management_spec.rb index 48e06e7d255..1b1e78bb050 100644 --- a/spec/features/course/group_management_spec.rb +++ b/spec/features/course/group_management_spec.rb @@ -17,7 +17,7 @@ scenario 'I can view the Group Sidebar item' do visit course_path(course) - expect(find_sidebar).to have_text(I18n.t('course.groups.sidebar_title')) + expect(find_sidebar).to have_selector('#sidebar_item_course_groups_component') end scenario 'I can view all the group categories in course' do @@ -113,7 +113,7 @@ scenario 'I can view the Group Sidebar item' do visit course_path(course) - expect(find_sidebar).to have_text(I18n.t('course.groups.sidebar_title')) + expect(find_sidebar).to have_selector('#sidebar_item_course_groups_component') end # scenario 'I can edit my group' do @@ -149,7 +149,7 @@ scenario 'I cannot view the Group Sidebar item' do visit course_path(course) - expect(find_sidebar).not_to have_text(I18n.t('course.groups.sidebar_title')) + expect(find_sidebar).not_to have_selector('#sidebar_item_course_groups_component') end end end diff --git a/spec/features/course/lesson_plan_spec.rb b/spec/features/course/lesson_plan_spec.rb index 2c1a3fa322f..27aa8a567a7 100644 --- a/spec/features/course/lesson_plan_spec.rb +++ b/spec/features/course/lesson_plan_spec.rb @@ -55,7 +55,7 @@ scenario 'I can view the LessonPlan Sidebar item' do visit course_path(course) - expect(find_sidebar).to have_text(I18n.t('course.lesson_plan.items.sidebar_title')) + expect(find_sidebar).to have_selector('#sidebar_item_lesson_plan') end scenario 'I can view all lesson plan items and milestones' do diff --git a/spec/features/course/level_management_spec.rb b/spec/features/course/level_management_spec.rb index 341e6aa49ce..e398395de45 100644 --- a/spec/features/course/level_management_spec.rb +++ b/spec/features/course/level_management_spec.rb @@ -24,7 +24,7 @@ scenario 'I can view the Level Sidebar item' do visit course_path(course) - expect(find_sidebar).to have_text(I18n.t('course.levels.sidebar_title')) + expect(find_sidebar).to have_selector('#sidebar_item_course_levels_component') end scenario 'I can view course levels' do @@ -66,7 +66,7 @@ scenario 'I cannot view the Level Sidebar item' do visit course_path(course) - expect(find_sidebar).not_to have_text(I18n.t('course.levels.sidebar_title')) + expect(find_sidebar).not_to have_selector('#sidebar_item_course_levels_component') end end end diff --git a/spec/features/course/material/folder_management_spec.rb b/spec/features/course/material/folder_management_spec.rb index fcc470aea57..282b117246f 100644 --- a/spec/features/course/material/folder_management_spec.rb +++ b/spec/features/course/material/folder_management_spec.rb @@ -146,7 +146,7 @@ let(:user) { create(:course_student, course: course).user } scenario 'I can view the Material Sidebar item' do - expect(find_sidebar).to have_text(I18n.t('course.material.sidebar_title')) + expect(find_sidebar).to have_selector('#sidebar_item_materials') end scenario 'I can view valid subfolders' do diff --git a/spec/features/course/staff_management_spec.rb b/spec/features/course/staff_management_spec.rb index 4f9daf754c7..c9f13f308d7 100644 --- a/spec/features/course/staff_management_spec.rb +++ b/spec/features/course/staff_management_spec.rb @@ -16,7 +16,7 @@ scenario 'I cannot view the Users Management Sidebar item' do visit course_path(course) - expect(find_sidebar).not_to have_text(I18n.t('layouts.course_users.title')) + expect(find_sidebar).not_to have_selector('#sidebar_item_admin_users_manage_users') end end @@ -27,7 +27,7 @@ scenario 'I can view the Users Management Sidebar item' do visit course_path(course) - expect(find_sidebar).to have_text(I18n.t('layouts.course_users.title')) + expect(find_sidebar).to have_selector('#sidebar_item_admin_users_manage_users') end scenario 'I cannot access the staff list' do @@ -43,7 +43,7 @@ scenario 'I can view the Users Management Sidebar item' do visit course_path(course) - expect(find_sidebar).to have_text(I18n.t('layouts.course_users.title')) + expect(find_sidebar).to have_selector('#sidebar_item_admin_users_manage_users') end scenario 'I can view the list of staff' do diff --git a/spec/features/course/staff_statistics_spec.rb b/spec/features/course/staff_statistics_spec.rb index a2b1bba5374..4fa5b51eaa0 100644 --- a/spec/features/course/staff_statistics_spec.rb +++ b/spec/features/course/staff_statistics_spec.rb @@ -113,7 +113,7 @@ scenario 'I cannot see the sidebar item' do visit course_path(course) - expect(find_sidebar).not_to have_text(I18n.t('course.statistics.header')) + expect(find_sidebar).not_to have_selector('#sidebar_item_course_statistics_component') end end end diff --git a/spec/features/course/students_statistics_spec.rb b/spec/features/course/students_statistics_spec.rb index 759abdc143b..9d92a675695 100644 --- a/spec/features/course/students_statistics_spec.rb +++ b/spec/features/course/students_statistics_spec.rb @@ -52,7 +52,7 @@ scenario 'I cannot see the statistics sidebar item' do visit course_path(course) - expect(find_sidebar).not_to have_text(I18n.t('course.statistics.header')) + expect(find_sidebar).not_to have_selector('#sidebar_item_course_statistics_component') end scenario 'I cannot access the statistics page' do diff --git a/spec/features/course/unread_status_management_spec.rb b/spec/features/course/unread_status_management_spec.rb index 3c6ce6d65d0..27daa819136 100644 --- a/spec/features/course/unread_status_management_spec.rb +++ b/spec/features/course/unread_status_management_spec.rb @@ -53,7 +53,7 @@ it 'shows the correct number of unread items' do expect(course.announcements.unread_by(first_user).count).to eq(1) - expect(find_sidebar.find_link(I18n.t('course.announcements.sidebar_title'))).to have_text 1 + expect(find_sidebar).to have_selector('#sidebar_item_announcements', text: 1) end end end diff --git a/spec/features/system/admin/components_settings_spec.rb b/spec/features/system/admin/components_settings_spec.rb index 606e915f05f..139673314c5 100644 --- a/spec/features/system/admin/components_settings_spec.rb +++ b/spec/features/system/admin/components_settings_spec.rb @@ -27,7 +27,7 @@ settings = Instance::Settings::Components.new(instance) components.each do |component| - expect(page).to have_selector('tr', text: component.display_name) + expect(page).to have_selector("tr#component_#{component.key}") within find("tr#component_#{component.key}") do if enabled_components.include?(component) diff --git a/spec/models/course/assessment/duplication_spec.rb b/spec/models/course/assessment/duplication_spec.rb index 577545bfab1..814b45ce6d5 100644 --- a/spec/models/course/assessment/duplication_spec.rb +++ b/spec/models/course/assessment/duplication_spec.rb @@ -49,7 +49,7 @@ options = { current_user: admin, new_start_at: (source_course.start_at + time_shift).iso8601, - new_title: I18n.t('course.duplications.show.new_course_title_prefix') + new_title: "#{source_course.title} copy" } Course::Duplication::CourseDuplicationService.duplicate_course(source_course, options) end diff --git a/spec/services/course/duplication/course_duplication_service_spec.rb b/spec/services/course/duplication/course_duplication_service_spec.rb index 43121956a48..64d4bc3fd6b 100644 --- a/spec/services/course/duplication/course_duplication_service_spec.rb +++ b/spec/services/course/duplication/course_duplication_service_spec.rb @@ -11,7 +11,7 @@ options = { current_user: admin, new_start_at: (course.start_at + time_shift).iso8601, - new_title: I18n.t('course.duplications.show.new_course_title_prefix') + new_title: "#{course.title} copy" } Course::Duplication::CourseDuplicationService.duplicate_course(course, options) end @@ -48,7 +48,7 @@ # Also test that a course with a registration key can be duplicated. course.registration_key = 'abcde' expect(new_course).to_not be course - expect(new_course.title).to eq I18n.t('course.duplications.show.new_course_title_prefix') + expect(new_course.title).to eq "#{course.title} copy" # Throws error if database contraints are violated. new_course.save!