From 9d2c47122ce04e4e1ea9ef91460e3b8be018a3ba Mon Sep 17 00:00:00 2001 From: Marlon Date: Fri, 30 Dec 2022 17:20:49 +0000 Subject: [PATCH 01/16] :globe_with_meridians: Translated (German) Currently translated at 100.0% (180 of 180 strings) Translation: ClassQuiz/Frontend Translate-URL: https://hosted.weblate.org/projects/classquiz/frontend/de/ --- frontend/src/lib/i18n/locales/de.json | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/frontend/src/lib/i18n/locales/de.json b/frontend/src/lib/i18n/locales/de.json index 3afcf26..aeca426 100644 --- a/frontend/src/lib/i18n/locales/de.json +++ b/frontend/src/lib/i18n/locales/de.json @@ -17,7 +17,7 @@ "see_all_quizzes": "Sieh all deine Quizze", "students_site": "Seite der Schüler*innen", "teachers_site": "Seite der Lehrer*innen", - "no_tracking_content": "Kahoot! trackt mit mindestens 2 amerikanischen Drittanbietern und ClassQuiz trackt gar nicht mit Drittanbietern!", + "no_tracking_content": "Kahoot! trackt mit mindestens zwei amerikanischen Drittanbietern und ClassQuiz trackt gar nicht mit Drittanbietern!", "quiz_results_downloadable_content": "Quiz-Ergebnisse können einfach in Form einer Excel-Tabelle heruntergeladen werden (Wusste gar nicht, dass andere dies nicht können).", "multilingual_content": "ClassQuiz ist jetzt schon komplett in Englisch, Deutsch, Türkisch, Französisch, norwegischem Bokmål und Italienisch verfügbar, wobei es auch teilweise in Indonesisch und Katalanisch verfügbar ist.", "no_tracking": "Kein Tracking", @@ -92,7 +92,8 @@ "unexpected": "Der gute alte unerwartete Fehler hat uns heimgesucht!" } } - } + }, + "use_backup_code": "Backup-Code benutzen" }, "words": { "question": "Frage", @@ -150,7 +151,10 @@ "practice": "Üben", "error": "Fehler", "voting": "Umfrage", - "download": "Herunterladen" + "download": "Herunterladen", + "continue": "Weiter", + "totp": "TOTP", + "backup_code": "Backup-Code" }, "editor": { "time_in_seconds": "Zeit in Sekunden", From 1431e42ae1d6aad805978a7827aafd0e176dfeeb Mon Sep 17 00:00:00 2001 From: Sean Wang Date: Thu, 5 Jan 2023 06:06:18 +0100 Subject: [PATCH 02/16] :globe_with_meridians: Added translation for (Chinese (Traditional)) --- frontend/src/lib/i18n/locales/zh_Hant.json | 1 + 1 file changed, 1 insertion(+) create mode 100644 frontend/src/lib/i18n/locales/zh_Hant.json diff --git a/frontend/src/lib/i18n/locales/zh_Hant.json b/frontend/src/lib/i18n/locales/zh_Hant.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/frontend/src/lib/i18n/locales/zh_Hant.json @@ -0,0 +1 @@ +{} From 7f785b8b2f4d8c066d28e910d4dc337847683129 Mon Sep 17 00:00:00 2001 From: Sean Wang Date: Thu, 5 Jan 2023 05:10:53 +0000 Subject: [PATCH 03/16] :globe_with_meridians: Translated (Chinese (Traditional)) Currently translated at 72.7% (131 of 180 strings) Translation: ClassQuiz/Frontend Translate-URL: https://hosted.weblate.org/projects/classquiz/frontend/zh_Hant/ --- frontend/src/lib/i18n/locales/zh_Hant.json | 187 ++++++++++++++++++++- 1 file changed, 186 insertions(+), 1 deletion(-) diff --git a/frontend/src/lib/i18n/locales/zh_Hant.json b/frontend/src/lib/i18n/locales/zh_Hant.json index 0967ef4..6e1f7b5 100644 --- a/frontend/src/lib/i18n/locales/zh_Hant.json +++ b/frontend/src/lib/i18n/locales/zh_Hant.json @@ -1 +1,186 @@ -{} +{ + "index_page": { + "meta": { + "title": "首頁" + }, + "slogan": "開源的測驗平台!", + "create_or_import": "建立或匯入", + "see_all_quizzes": "查看你所有的測驗", + "teachers_site": "教師頁面", + "students_site": "學生頁面", + "no_tracking": "零追蹤", + "self_hostable": "可自行架設", + "german_server": "德國伺服器", + "user_friendly": "易於使用", + "completely_free": "完全免費", + "multilingual": "多語言", + "dark_mode": "深色模式", + "get_a_quiz": "1. 取得測驗", + "create_a_quiz_from_scratch": "使用編輯器建立測驗並加入圖片和更多內容", + "import_quiz_from_kahoot_and_edit": "從 Kahoot! 匯入測驗並在 ClassQuiz 上進行編輯", + "play_quiz": "2. 遊玩測驗", + "select_answer": "選擇答案", + "choose_answer_wisely": "明智地選擇你的答案", + "view_results": "檢視結果", + "check_if_chosen_wisely": "驗證你的選擇是否正確", + "list_winners": "列出贏家", + "get_ranking_and_winners": "取得排名和贏家", + "why_classquiz": "為什麼選擇 ClassQuiz?", + "download_quizzes": "下載測驗", + "stats": "ClassQuiz 上已有 {{user_count}} 位使用者和 {{quiz_count}} 個測驗。", + "features_description": { + "1": "ClassQuiz 是一個可以讓你建立和管理測驗的測驗平台。" + }, + "quiz_results_downloadable": "可被下載的測驗結果", + "find_or_explore": "搜尋 (或瀏覽) 其他人建立和匯入的測驗", + "no_tracking_content": "Kahoot! 會追蹤並將你的資料分享給第三方,但 ClassQuiz 不會。" + }, + "edit_page": { + "success_update_title": "測驗已更新。" + }, + "create_page": { + "success": { + "title": "測驗已建立。", + "body": "讓遊戲開始吧。" + } + }, + "register_page": { + "create_account": "建立帳戶", + "forgot_password?": "忘記密碼?", + "already_have_account?": "已經擁有帳戶?", + "greeting": "很高興見到你!" + }, + "login_page": { + "login_or_create_account": "登入或建立帳戶", + "already_have_account": "沒有帳戶?", + "modal": { + "error": { + "wrong_creds": "電子郵件地址或密碼錯誤。", + "unexpected": "非預期錯誤!", + "description": { + "wrong_creds": "請確認你的密碼和電子郵件地址是否正確。" + } + }, + "success": { + "success": "已登入。", + "success_check_mail": "已登入。請檢查你的電子信箱收件匣。" + } + }, + "welcome_back": "歡迎回來。", + "use_backup_code": "使用備用代碼" + }, + "editor": { + "delete_question": "刪除問題", + "add_new_question": "新增問題", + "delete_answer": "刪除答案", + "add_new_answer": "新增答案" + }, + "import_page": { + "need_help": "需要幫助?" + }, + "admin_page": { + "start_game": "開始遊戲", + "get_results": "取得結果", + "get_results_and_stop_time": "取得結果並停止計時", + "get_final_results": "取得最終結果", + "export_results": "匯出結果", + "show_next_question": "顯示下一個問題", + "time_left": "剩餘時間", + "stop_time": "停止計時" + }, + "password_reset_page": { + "reset_password": "重設密碼" + }, + "settings_page": { + "old_password": "舊密碼", + "new_password": "新密碼", + "repeat_password": "再次輸入密碼", + "change_password_submit": "變更密碼!", + "check_location": "檢查位置" + }, + "explore_page": { + "made_by": "作者為", + "imported_by": "匯入者為" + }, + "play_page": { + "2nd_place": "第二名", + "3rd place": "第三名", + "with_out_of": "{{total_question_count}} 題中答對 {{correct_questions}} 題", + "1st_place": "第一名" + }, + "editor_page": { + "add_an_answer": "新增一個答案", + "right_click_to_delete": "右鍵點擊一個答案即可將它刪除!" + }, + "footer": { + "more_details_here": "更多詳細資訊" + }, + "uploader": { + "add_image": "新增圖片" + }, + "words": { + "find": "尋找", + "question": "問題", + "answer": "答案", + "stats": "統計資料", + "features": "功能", + "login": "登入", + "email": "電子郵件地址", + "username": "使用者名稱", + "password": "密碼", + "edit": "編輯", + "delete": "刪除", + "public": "公開", + "create": "建立", + "import": "匯入", + "logout": "登出", + "title": "標題", + "url": "URL", + "submit": "提交", + "pin": "PIN", + "kick": "踢出", + "register": "註冊", + "close": "關閉", + "save": "儲存", + "description": "描述", + "image": "圖片", + "settings": "設定", + "repeat_password": "再次輸入密碼", + "explore": "發現", + "screenshot": "螢幕截圖", + "screenshot_plural": "螢幕截圖", + "browser": "瀏覽器", + "correct": "正確", + "result": "結果", + "result_plural": "結果", + "range": "範圍", + "multiple_choice": "選擇題", + "private": "私人", + "dashboard": "儀錶板", + "question_plural": "問題", + "game_pin": "遊戲 PIN", + "other": "其他", + "search": "搜尋", + "other_plural": "其他", + "download": "下載", + "voting": "投票", + "docs": "文件", + "donating": "贊助", + "practice": "練習", + "error": "錯誤", + "continue": "繼續", + "backup_code": "備用代碼", + "totp": "" + }, + "search_page": { + "at_least_3_characters": "輸入至少 3 個字元..." + }, + "dashboard": { + "search_for_own_quizzes": "搜尋你的測驗" + }, + "overview_page": { + "created_at": "建立於", + "question_count": "問題數", + "no_quizzes": "點擊「建立」按鈕或從 Kahoot! 匯入測驗。" + } +} From 0e5dfdddfbcd2e2b5e94fc8d0721d748094c8ce2 Mon Sep 17 00:00:00 2001 From: Sean Wang Date: Sat, 7 Jan 2023 03:40:55 +0000 Subject: [PATCH 04/16] :globe_with_meridians: Translated (Chinese (Traditional)) Currently translated at 73.8% (133 of 180 strings) Translation: ClassQuiz/Frontend Translate-URL: https://hosted.weblate.org/projects/classquiz/frontend/zh_Hant/ --- frontend/src/lib/i18n/locales/zh_Hant.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/frontend/src/lib/i18n/locales/zh_Hant.json b/frontend/src/lib/i18n/locales/zh_Hant.json index 6e1f7b5..75cd64c 100644 --- a/frontend/src/lib/i18n/locales/zh_Hant.json +++ b/frontend/src/lib/i18n/locales/zh_Hant.json @@ -1,7 +1,8 @@ { "index_page": { "meta": { - "title": "首頁" + "title": "首頁", + "description": "ClassQuiz 是一款為學生設計的似 Kahoot! 測驗應用程式,不僅開源還免費" }, "slogan": "開源的測驗平台!", "create_or_import": "建立或匯入", @@ -29,7 +30,8 @@ "download_quizzes": "下載測驗", "stats": "ClassQuiz 上已有 {{user_count}} 位使用者和 {{quiz_count}} 個測驗。", "features_description": { - "1": "ClassQuiz 是一個可以讓你建立和管理測驗的測驗平台。" + "1": "ClassQuiz 是一個可以讓你建立和管理測驗的測驗平台。", + "2": "最主要的功能之一是允許你匯入 Kahoot! 上的測驗。" }, "quiz_results_downloadable": "可被下載的測驗結果", "find_or_explore": "搜尋 (或瀏覽) 其他人建立和匯入的測驗", From f09c79e7987a515184e1b76d8b112bfadb2f7e9b Mon Sep 17 00:00:00 2001 From: gallegonovato Date: Thu, 12 Jan 2023 15:25:48 +0000 Subject: [PATCH 05/16] :globe_with_meridians: Translated (Spanish) Currently translated at 100.0% (180 of 180 strings) Translation: ClassQuiz/Frontend Translate-URL: https://hosted.weblate.org/projects/classquiz/frontend/es/ --- frontend/src/lib/i18n/locales/es.json | 77 +++++++++++++++++---------- 1 file changed, 48 insertions(+), 29 deletions(-) diff --git a/frontend/src/lib/i18n/locales/es.json b/frontend/src/lib/i18n/locales/es.json index 586705b..d69c1d8 100644 --- a/frontend/src/lib/i18n/locales/es.json +++ b/frontend/src/lib/i18n/locales/es.json @@ -8,7 +8,7 @@ "features_description": { "1": "ClassQuiz es una plataforma de quiz que permite crear y gestionar quiz.", "2": "La principal funcionalidad es una función de importación de Kahoot! que permite importar cuestionarios de Kahoot!", - "3": "Destaca el editor sencillo, así como la función de exportar los resultados de los cuestionarios a archivos de Excel." + "3": "El editor fácil de usar es un punto destacado, al igual que la función de exportación para descargar los resultados de las pruebas como archivos de Excel." }, "stats": "Ya hay {{user_count}} usuarios y {{quiz_count}} cuestionarios en ClassQuiz.", "see_what_true_and_false": "Ver lo que estaba correcto o incorrecto", @@ -16,20 +16,20 @@ "get_a_quiz": "1. Haz un quiz", "create_a_quiz_from_scratch": "Crea un quiz desde cero con el editor e incluye imágenes y más", "find_or_explore": "Encuentra (o explora) quizzes hechos o importados por otras personas", - "import_quiz_from_kahoot_and_edit": "Importa un cuestionario de Kahoot! y edítalo en ClassQuiz", + "import_quiz_from_kahoot_and_edit": "¡Importa un cuestionario de Kahoot! y editarlo en ClassQuiz", "no_tracking": "Sin rastreo", "german_server": "Servidor alemán", "user_friendly": "Fácil de usar", - "completely_free": "Totalmente gratuito", + "completely_free": "Totalmente gratis", "quiz_results_downloadable": "Los resultados de los cuestionarios se pueden descargar", "multilingual": "Multilingüe", - "completely_free_content": "ClassQuiz es completamente gratuito, sin planes de pago ni molestas redirecciones a la página de actualización. Sin embargo, ¡se agradece una donación!", + "completely_free_content": "ClassQuiz es gratuito para el usuario, sin planes pagos ni redireccionamientos para una versión paga. Por lo tanto, cualquier donación es apreciada.", "see_how_many_true_and_false": "Ver cuántos estaban correctos o equivocados", "create_or_import": "Crear o importar", "see_all_quizzes": "Ver todos tus cuestionarios", "teachers_site": "Portal de profesores", "students_site": "Portal estudiante", - "multilingual_content": "ClassQuiz ya está totalmente traducido al inglés, alemán, turco, francés e italiano. También está parcialmente traducido al indonesio y al catalán.", + "multilingual_content": "ClassQuiz ya está completamente disponible en inglés, alemán, turco, francés, bokmål noruego e italiano, mientras que también está disponible parcialmente en indonesio y catalán.", "select_answer": "Selecciona la respuesta", "view_results": "Ver los resultados", "check_if_chosen_wisely": "Comprueba, si has elegido bien", @@ -37,52 +37,57 @@ "get_ranking_and_winners": "Consigue la clasificación y mira quién ha ganado", "why_classquiz": "¿Por qué ClassQuiz?", "self_hostable_content": "ClassQuiz puede ser fácilmente auto-alojado, por lo que los datos sólo están bajo tu control!", - "user_friendly_content": "ClassQuiz trata de ser lo más fácil de uso posible, por lo que es fácil de usar para todo el mundo", + "user_friendly_content": "ClassQuiz está diseñado para ser simple y fácil de usar para todos.", "quiz_results_downloadable_content": "Los resultados de los cuestionarios se pueden exportar fácilmente a una hoja de cálculo de Excel. (No sabía que otros no pudieran hacerlo)", "dark_mode_content": "Una de las funcionalidades más importantes que puede tener un sitio web!", "german_server_content": "Los servidores de ClassQuiz se encuentran en Alemania y están alojados con netcup.", "play_quiz": "2. Haz el quiz", "choose_answer_wisely": "Elige bien tu respuesta", - "no_tracking_content": "Kahoot! rastrea con al menos 2 proveedores americanos y ClassQuiz no rastrea con ningún proveedor!", - "self_hostable": "Autohospedable" + "no_tracking_content": "Kahoot! rastrea y comparte su perfil con terceros, pero ClassQuiz no lo hace.", + "self_hostable": "Autohospedable", + "download_quizzes": "Descargar cuestionarios", + "community_driven_content": "¡ClassQuiz depende de la comunidad que proporciona ClassQuiz con donaciones, solicitudes de funciones, traducciones y más! ¡También puede convertirse en parte de la comunidad de ClassQuiz!", + "community_driven": "Impulsado por la comunidad", + "download_quizzes_content": "Los cuestionarios se pueden descargar como un solo archivo e importar en cualquier momento, lo que le permite mover fácilmente sus cuestionarios a otra instancia de ClassQuiz." }, "create_page": { "success": { - "body": "¡Creación del quiz con éxito!", - "title": "¡Quiz creado con éxito!" + "body": "Que empiecen los juegos.", + "title": "Cuestionario creado." } }, "login_page": { "modal": { "success": { - "success_check_mail": "¡Inicio de sesión exitoso! ¡Comprueba tu buzón de correo!", + "success_check_mail": "Conectado. Por favor revise su bandeja de entrada de correo electrónico.", "description": { - "success_check_mail": "Por favor, comprueba tu buzón, ya que deberías haber recibido un correo, con un enlace en el que puedes hacer clic para iniciar sesión.", - "success": "¡Se ha iniciado la sesión con éxito!" + "success_check_mail": "Verifique su buzón de correo ya que debería haber recibido un correo electrónico con un enlace para iniciar sesión.", + "success": "Conectado." }, - "success": "¡Inicio de sesión exitoso!" + "success": "Conectado." }, "error": { - "wrong_creds": "Correo electrónico o contraseña incorrectos!", + "wrong_creds": "Dirección de correo electrónico o contraseña incorrecta.", "unexpected": "¡Error inesperado!", "description": { - "wrong_creds": "Asegúrate de que tu contraseña y tu correo electrónico son correctos!", + "wrong_creds": "Por favor, asegúrese de que su contraseña y dirección de correo electrónico sean correctas.", "unexpected": "Se produjo el típico error inesperado!" } } }, - "welcome_back": "¡Bienvenido de nuevo!", - "login_or_create_account": "Iniciar sesión o crear una cuenta", - "already_have_account": "¿No tienes una cuenta?" + "welcome_back": "Bienvenido de nuevo.", + "login_or_create_account": "Ingresar o Crear una cuenta", + "already_have_account": "¿No tienes una cuenta?", + "use_backup_code": "Usar el código de la copia de seguridad" }, "overview_page": { "created_at": "Creado en", "question_count": "Recuento de preguntas", - "no_quizzes": "Parece que no tienes ningún quiz. ¿Quieres cambiar eso? ¡Haz clic en el botón \"Crear\" o importa un cuestionario de Kahoot!" + "no_quizzes": "Haga clic en el botón \"Crear\" o importe un cuestionario de Kahoot. para ponerse en marcha." }, "edit_page": { - "success_update_title": "¡Quiz actualizado con éxito!", - "success_update_body": "¡Actualización del quiz con éxito!" + "success_update_title": "Cuestionario actualizado.", + "success_update_body": "Nadie esperará la Inquisición." }, "register_page": { "greeting": "¡Encantado de conocerte!", @@ -114,8 +119,8 @@ "answer": "Respuesta", "stats": "Estadísticas", "features": "Características", - "login": "Inicio de sesión", - "email": "Correo electrónico", + "login": "Iniciar sesión", + "email": "Dirección de correo electrónico", "username": "Nombre de usuario", "count": "Cuenta", "range": "Zona", @@ -145,7 +150,11 @@ "correct": "Correcto", "result": "Resultado", "result_plural": "Resultados", - "password": "Contraseña" + "password": "Contraseña", + "download": "Descargar", + "continue": "Continuar", + "backup_code": "Código de la copia de seguridad", + "totp": "contraseña de un solo uso (Totp)" }, "admin_page": { "export_results": "Exportar resultados", @@ -157,7 +166,7 @@ "start_game": "Iniciar el juego", "time_left": "Tiempo restante", "get_final_results": "Ver los resultados finales", - "start_by_showing_first_question": "Comienza mostrando la primera pregunta!", + "start_by_showing_first_question": "Comienza mostrando la primera pregunta.", "no_answers": "¡No hay respuestas!" }, "settings_page": { @@ -183,7 +192,7 @@ }, "footer": { "self_ads": "Hecho con ❤️ por {{mawoka_link}} y con la ayuda de {{others_link}}.", - "more_details_here": "Más detalles aquí", + "more_details_here": "Para más información", "donate": "Si te resulta útil, considera {{donate_link}}." }, "error_page": { @@ -201,19 +210,29 @@ }, "import_page": { "need_help": "¿Necesitas ayuda?", - "visit_docs": "Visite la documentación" + "visit_docs": "Visite la documentación", + "url_should_look_like_this": "La URL debería verse así: https://create.kahoot.it/details/...", + "a_kahoot_quiz": "¡Un Kahoot! Prueba", + "side_import_kahoot": "¡En este lado puedes importar cuestionarios, que viven en Kahoot!.", + "classquiz_quiz": "Un ClassQuiz-Quiz", + "upload_file_ending": "Cargue el archivo que termina en .cqa", + "this_side_classquiz": "Desde aquí puede importar cuestionarios exportados desde ClassQuiz." }, "explore_page": { "made_by": "Hecho por", "imported_by": "Importado por" }, "search_page": { - "at_least_3_characters": "Escribe al menos 3 caracteres..." + "at_least_3_characters": "Escribe al menos 3 caracteres...", + "nothing_here": "No hay nada aquí..." }, "password_reset_page": { "reset_password": "Restablecer contraseña" }, "dashboard": { "search_for_own_quizzes": "Busca tus propios quizzes" + }, + "uploader": { + "add_image": "Añadir una imagen" } } From fb13c3a5636e597f92ab59340875ea95967693e8 Mon Sep 17 00:00:00 2001 From: Sean Wang Date: Thu, 12 Jan 2023 01:33:02 +0000 Subject: [PATCH 06/16] :globe_with_meridians: Translated (Chinese (Traditional)) Currently translated at 76.1% (137 of 180 strings) Translation: ClassQuiz/Frontend Translate-URL: https://hosted.weblate.org/projects/classquiz/frontend/zh_Hant/ --- frontend/src/lib/i18n/locales/zh_Hant.json | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/frontend/src/lib/i18n/locales/zh_Hant.json b/frontend/src/lib/i18n/locales/zh_Hant.json index 75cd64c..f2604fe 100644 --- a/frontend/src/lib/i18n/locales/zh_Hant.json +++ b/frontend/src/lib/i18n/locales/zh_Hant.json @@ -35,7 +35,10 @@ }, "quiz_results_downloadable": "可被下載的測驗結果", "find_or_explore": "搜尋 (或瀏覽) 其他人建立和匯入的測驗", - "no_tracking_content": "Kahoot! 會追蹤並將你的資料分享給第三方,但 ClassQuiz 不會。" + "no_tracking_content": "Kahoot! 會追蹤並將你的資料分享給第三方,但 ClassQuiz 不會。", + "user_friendly_content": "ClassQuiz 旨在簡單,每個人都可以輕鬆使用。", + "dark_mode_content": "一個網站最重要的功能之一!", + "german_server_content": "ClassQuiz 的伺服器位於德國,並由 netcup 提供。" }, "edit_page": { "success_update_title": "測驗已更新。" @@ -65,7 +68,10 @@ }, "success": { "success": "已登入。", - "success_check_mail": "已登入。請檢查你的電子信箱收件匣。" + "success_check_mail": "已登入。請檢查你的電子信箱收件匣。", + "description": { + "success": "已登入。" + } } }, "welcome_back": "歡迎回來。", From 6227238af16315f347fc04b49fd4525423166bb8 Mon Sep 17 00:00:00 2001 From: Mawoka Date: Wed, 18 Jan 2023 20:39:11 +0100 Subject: [PATCH 07/16] :globe_with_meridians: Integrated Chinese language --- frontend/src/lib/i18n/i18n-service.ts | 2 ++ frontend/src/lib/language-toggle.svelte | 6 ++++++ 2 files changed, 8 insertions(+) diff --git a/frontend/src/lib/i18n/i18n-service.ts b/frontend/src/lib/i18n/i18n-service.ts index 06c9df0..f3b0cfa 100644 --- a/frontend/src/lib/i18n/i18n-service.ts +++ b/frontend/src/lib/i18n/i18n-service.ts @@ -15,6 +15,7 @@ import ca from './locales/ca.json'; import it from './locales/it.json'; import es from './locales/es.json'; import nb_no from './locales/nb_NO.json'; +import zh_Hant from './locales/zh_Hant.json'; import LanguageDetector from 'i18next-browser-languagedetector'; import type { i18n, Resource } from 'i18next'; @@ -68,6 +69,7 @@ export class I18nService { this.i18n.addResourceBundle('ca', 'translation', ca); this.i18n.addResourceBundle('es', 'translation', es); this.i18n.addResourceBundle('nb_NO', 'translation', nb_no); + this.i18n.addResourceBundle('zh_Hant', 'translation', zh_Hant); } changeLanguage(language: string): void { diff --git a/frontend/src/lib/language-toggle.svelte b/frontend/src/lib/language-toggle.svelte index 390f46f..29392cb 100644 --- a/frontend/src/lib/language-toggle.svelte +++ b/frontend/src/lib/language-toggle.svelte @@ -47,6 +47,7 @@ + +
+
+
+
+ profile +
+

+ @{data.user.username} +

+

+ Joined on {new Date(data.user.created_at).toLocaleDateString()} +

+
+
+ {#each data.quizzes as quiz} +
+
+ +
+

{@html quiz.title}

+

+ {@html quiz.description} +

+ {#if quiz.cover_image} +
+
+ Not provided +
+
+ {/if} +
+ + +
+ +
+
+ {#if $signedIn} + + + + + + + {:else} +
+ +
+
+ +
+ {/if} +
+
+
+ {/each} +
+
+
+{#if start_game !== null} + +{/if} diff --git a/frontend/src/routes/user/[user_id]/+page.ts b/frontend/src/routes/user/[user_id]/+page.ts new file mode 100644 index 0000000..80ca0de --- /dev/null +++ b/frontend/src/routes/user/[user_id]/+page.ts @@ -0,0 +1,24 @@ +/* + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + */ + +import type { PageLoad } from './$types'; + +export const load = (async ({ params, fetch }) => { + const user_req = await fetch(`/api/v1/community/user/${params.user_id}`); + const user = await user_req.json(); + if (!user) { + return { + user: undefined, + quizzes: undefined + }; + } + const quiz_req = await fetch(`/api/v1/community/quizzes/${params.user_id}?imported=false`); + const quizzes = await quiz_req.json(); + return { + user, + quizzes + }; +}) satisfies PageLoad; From 028ab567deaf0a506aa00897a4cac298b846ce27 Mon Sep 17 00:00:00 2001 From: Mawoka Date: Thu, 26 Jan 2023 19:18:56 +0100 Subject: [PATCH 15/16] :sparkles: Finished user-screen --- classquiz/routers/quiz.py | 19 +++++++++++++++---- frontend/src/routes/user/[user_id]/+page.ts | 6 +++--- .../src/routes/view/[quiz_id]/+page.svelte | 3 +++ 3 files changed, 21 insertions(+), 7 deletions(-) diff --git a/classquiz/routers/quiz.py b/classquiz/routers/quiz.py index 211ad95..c6d9946 100644 --- a/classquiz/routers/quiz.py +++ b/classquiz/routers/quiz.py @@ -18,7 +18,7 @@ import bleach from classquiz.auth import get_current_user from classquiz.config import redis, settings, storage, meilisearch -from classquiz.db.models import Quiz, QuizInput, User, PlayGame, GameInLobby +from classquiz.db.models import Quiz, QuizInput, User, PlayGame, GameInLobby, QuizQuestion from classquiz.kahoot_importer.import_quiz import import_quiz import html import urllib.parse @@ -75,17 +75,28 @@ async def get_quiz_from_id(quiz_id: str, user: User | None = Depends(get_current return quiz -@router.get("/get/public/{quiz_id}", response_model=Quiz) +class PublicQuizResponseUser(BaseModel): + username: str + id: uuid.UUID + + +class PublicQuizResponse(Quiz.get_pydantic()): + user_id: PublicQuizResponseUser + questions: list[QuizQuestion] + + +@router.get("/get/public/{quiz_id}") async def get_public_quiz(quiz_id: str): try: quiz_id = uuid.UUID(quiz_id) except ValueError: raise HTTPException(status_code=400, detail="badly formed quiz id") - quiz = await Quiz.objects.get_or_none(id=quiz_id) + quiz = await Quiz.objects.select_related("user_id").get_or_none(id=quiz_id) + print(quiz.dict(exclude={"user_id": {"avatar"}})) if quiz is None: return JSONResponse(status_code=404, content={"detail": "quiz not found"}) else: - return quiz + return PublicQuizResponse(**quiz.dict()) @router.post("/start/{quiz_id}") diff --git a/frontend/src/routes/user/[user_id]/+page.ts b/frontend/src/routes/user/[user_id]/+page.ts index 80ca0de..7aadc47 100644 --- a/frontend/src/routes/user/[user_id]/+page.ts +++ b/frontend/src/routes/user/[user_id]/+page.ts @@ -4,9 +4,9 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import type { PageLoad } from './$types'; +// import type { PageLoad } from './$types'; -export const load = (async ({ params, fetch }) => { +export const load = async ({ params, fetch }) => { const user_req = await fetch(`/api/v1/community/user/${params.user_id}`); const user = await user_req.json(); if (!user) { @@ -21,4 +21,4 @@ export const load = (async ({ params, fetch }) => { user, quizzes }; -}) satisfies PageLoad; +}; // satisfies PageLoad; diff --git a/frontend/src/routes/view/[quiz_id]/+page.svelte b/frontend/src/routes/view/[quiz_id]/+page.svelte index ebb0666..9527044 100644 --- a/frontend/src/routes/view/[quiz_id]/+page.svelte +++ b/frontend/src/routes/view/[quiz_id]/+page.svelte @@ -68,6 +68,9 @@

{@html quiz.description}

+

+ Made by @{quiz.user_id.username} +

{#if quiz.cover_image}
From 433ac002a0558f6c060a1e70e48dcf6b9fce87ab Mon Sep 17 00:00:00 2001 From: Mawoka Date: Thu, 26 Jan 2023 19:22:50 +0100 Subject: [PATCH 16/16] :sparkles: Added Title to user-page --- frontend/src/routes/user/[user_id]/+page.svelte | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/frontend/src/routes/user/[user_id]/+page.svelte b/frontend/src/routes/user/[user_id]/+page.svelte index 25e3aae..07dcd2c 100644 --- a/frontend/src/routes/user/[user_id]/+page.svelte +++ b/frontend/src/routes/user/[user_id]/+page.svelte @@ -33,6 +33,10 @@ console.log(data, 'data'); + + ClassQuiz - @{data.user.username} + +