From ec7547ecd85e92f24bbbee29d5c513180a4aba2e Mon Sep 17 00:00:00 2001 From: postoso Date: Sun, 21 Jun 2026 02:35:51 -0400 Subject: [PATCH] fix(auth): distinct login message for OAuth access_denied OAuth callbacks redirect denied/cancelled logins to /login?error=access_denied, but no auth.login.errors.access_denied translation key existed, so the frontend fell back to the generic "Unable to sign in" default. That is misleading for an explicit user/provider denial and can loop the user through retry. Add an access_denied key to all 23 locale files with a message that distinguishes cancellation/denial from infrastructure failures, and a test asserting the key exists, is distinct from default, and is present across every locale. --- backend/chainlit/translations/ar-SA.json | 1 + backend/chainlit/translations/bn.json | 1 + backend/chainlit/translations/da-DK.json | 1 + backend/chainlit/translations/de-DE.json | 1 + backend/chainlit/translations/el-GR.json | 1 + backend/chainlit/translations/en-US.json | 1 + backend/chainlit/translations/es.json | 1 + backend/chainlit/translations/fr-FR.json | 1 + backend/chainlit/translations/gu.json | 1 + backend/chainlit/translations/he-IL.json | 1 + backend/chainlit/translations/hi.json | 1 + backend/chainlit/translations/it.json | 1 + backend/chainlit/translations/ja.json | 1 + backend/chainlit/translations/kn.json | 1 + backend/chainlit/translations/ko.json | 1 + backend/chainlit/translations/ml.json | 1 + backend/chainlit/translations/mr.json | 1 + backend/chainlit/translations/nl.json | 1 + backend/chainlit/translations/pt-PT.json | 1 + backend/chainlit/translations/ta.json | 1 + backend/chainlit/translations/te.json | 1 + backend/chainlit/translations/zh-CN.json | 1 + backend/chainlit/translations/zh-TW.json | 1 + backend/tests/test_translations.py | 52 ++++++++++++++++++++++++ 24 files changed, 75 insertions(+) diff --git a/backend/chainlit/translations/ar-SA.json b/backend/chainlit/translations/ar-SA.json index b98b427d23..2bb95307ca 100644 --- a/backend/chainlit/translations/ar-SA.json +++ b/backend/chainlit/translations/ar-SA.json @@ -46,6 +46,7 @@ "emailCreateAccount": "حاول تسجيل الدخول بحساب آخر", "callback": "حاول تسجيل الدخول بحساب آخر", "oauthAccountNotLinked": "لتأكيد هويتك، قم بتسجيل الدخول بنفس الحساب الذي استخدمته في الأصل", + "access_denied": "تم إلغاء تسجيل الدخول أو تم رفض الوصول. إذا كان هذا عن طريق الخطأ، يرجى المحاولة مرة أخرى.", "emailSignin": "تعذر إرسال البريد الإلكتروني", "emailVerify": "يرجى التحقق من بريدك الإلكتروني، تم إرسال بريد إلكتروني جديد", "credentialsSignin": "فشل تسجيل الدخول. تحقق من صحة المعلومات المقدمة", diff --git a/backend/chainlit/translations/bn.json b/backend/chainlit/translations/bn.json index 432d53bea2..442e194b50 100644 --- a/backend/chainlit/translations/bn.json +++ b/backend/chainlit/translations/bn.json @@ -46,6 +46,7 @@ "emailCreateAccount": "অন্য একটি অ্যাকাউন্ট দিয়ে সাইন ইন করার চেষ্টা করুন", "callback": "অন্য একটি অ্যাকাউন্ট দিয়ে সাইন ইন করার চেষ্টা করুন", "oauthAccountNotLinked": "আপনার পরিচয় নিশ্চিত করতে, আপনি যে অ্যাকাউন্টটি মূলত ব্যবহার করেছিলেন সেটি দিয়ে সাইন ইন করুন", + "access_denied": "সাইন ইন বাতিল করা হয়েছে বা অ্যাক্সেস অস্বীকার করা হয়েছে। যদি এটি ভুলবশত হয়ে থাকে, অনুগ্রহ করে আবার চেষ্টা করুন।", "emailSignin": "ইমেইল পাঠানো যায়নি", "emailVerify": "অনুগ্রহ করে আপনার ইমেইল যাচাই করুন, একটি নতুন ইমেইল পাঠানো হয়েছে", "credentialsSignin": "সাইন ইন ব্যর্থ হয়েছে। আপনার দেওয়া তথ্য সঠিক কিনা যাচাই করুন", diff --git a/backend/chainlit/translations/da-DK.json b/backend/chainlit/translations/da-DK.json index aba214e617..44639d1a2b 100644 --- a/backend/chainlit/translations/da-DK.json +++ b/backend/chainlit/translations/da-DK.json @@ -46,6 +46,7 @@ "emailCreateAccount": "Prøv at logge ind med en anden konto", "callback": "Prøv at logge ind med en anden konto", "oauthAccountNotLinked": "For at bekræfte din identitet, log ind med samme konto, som du oprindeligt brugte", + "access_denied": "Login blev annulleret, eller adgang blev nægtet. Hvis det var en fejl, så prøv igen.", "emailSignin": "E-mailen kunne ikke sendes", "emailVerify": "Bekræft venligst din e-mail, en ny e-mail er blevet sendt", "credentialsSignin": "Login mislykkedes. Kontroller at de angivne oplysninger er korrekte", diff --git a/backend/chainlit/translations/de-DE.json b/backend/chainlit/translations/de-DE.json index db5934b6f1..031f6433ca 100644 --- a/backend/chainlit/translations/de-DE.json +++ b/backend/chainlit/translations/de-DE.json @@ -46,6 +46,7 @@ "emailCreateAccount": "Versuche dich mit einem anderen Konto anzumelden", "callback": "Versuche dich mit einem anderen Konto anzumelden", "oauthAccountNotLinked": "Um die Identität zu bestätigen, melde dich mit demselben Konto an, das du ursprünglich verwendet hast", + "access_denied": "Die Anmeldung wurde abgebrochen oder der Zugriff wurde verweigert. Falls dies ein Versehen war, versuchen Sie es bitte erneut.", "emailSignin": "Die E-Mail konnte nicht gesendet werden", "emailVerify": "Es wurde eine neue E-Mail versandt. Bitte überprüfe dein E-Mail Postfach", "credentialsSignin": "Anmeldung fehlgeschlagen. Überprüfe, ob die angegebenen Benutzerdaten korrekt sind", diff --git a/backend/chainlit/translations/el-GR.json b/backend/chainlit/translations/el-GR.json index 54e12265f3..40030cd9b2 100644 --- a/backend/chainlit/translations/el-GR.json +++ b/backend/chainlit/translations/el-GR.json @@ -46,6 +46,7 @@ "emailCreateAccount": "Δοκιμάστε να συνδεθείτε με διαφορετικό λογαριασμό", "callback": "Δοκιμάστε να συνδεθείτε με διαφορετικό λογαριασμό", "oauthAccountNotLinked": "Για να επιβεβαιώσετε την ταυτότητά σας, συνδεθείτε με τον ίδιο λογαριασμό που χρησιμοποιήσατε αρχικά", + "access_denied": "Η σύνδεση ακυρώθηκε ή η πρόσβαση απορρίφθηκε. Αν έγινε κατά λάθος, δοκιμάστε ξανά.", "emailSignin": "Δεν ήταν δυνατή η αποστολή του email", "emailVerify": "Παρακαλώ επαληθεύστε την διεύθυνση ηλεκτρονικού ταχυδρομείου σας, ένα νέο email σας έχει σταλεί", "credentialsSignin": "Η σύνδεση απέτυχε. Ελέγξτε ότι τα στοιχεία που δώσατε είναι σωστά", diff --git a/backend/chainlit/translations/en-US.json b/backend/chainlit/translations/en-US.json index 5a62b3c254..fa55807642 100644 --- a/backend/chainlit/translations/en-US.json +++ b/backend/chainlit/translations/en-US.json @@ -46,6 +46,7 @@ "emailCreateAccount": "Try signing in with a different account", "callback": "Try signing in with a different account", "oauthAccountNotLinked": "To confirm your identity, sign in with the same account you used originally", + "access_denied": "Sign in was cancelled or access was denied. If this was a mistake, please try again.", "emailSignin": "The e-mail could not be sent", "emailVerify": "Please verify your email, a new email has been sent", "credentialsSignin": "Sign in failed. Check the details you provided are correct", diff --git a/backend/chainlit/translations/es.json b/backend/chainlit/translations/es.json index f47a53f7c6..f68c15bd57 100644 --- a/backend/chainlit/translations/es.json +++ b/backend/chainlit/translations/es.json @@ -46,6 +46,7 @@ "emailCreateAccount": "Intenta iniciar sesión con otra cuenta", "callback": "Intenta iniciar sesión con otra cuenta", "oauthAccountNotLinked": "Para confirmar tu identidad, inicia sesión con la misma cuenta que usaste originalmente", + "access_denied": "El inicio de sesión se canceló o se denegó el acceso. Si fue un error, vuelva a intentarlo.", "emailSignin": "No se pudo enviar el correo electrónico", "emailVerify": "Por favor verifica tu correo, se ha enviado un nuevo correo", "credentialsSignin": "Error al iniciar sesión. Verifica que los datos proporcionados sean correctos", diff --git a/backend/chainlit/translations/fr-FR.json b/backend/chainlit/translations/fr-FR.json index 163be03afd..894e58232d 100644 --- a/backend/chainlit/translations/fr-FR.json +++ b/backend/chainlit/translations/fr-FR.json @@ -46,6 +46,7 @@ "emailCreateAccount": "Essayez de vous connecter avec un autre compte", "callback": "Essayez de vous connecter avec un autre compte", "oauthAccountNotLinked": "Pour confirmer votre identité, connectez-vous avec le même compte que vous avez utilisé à l'origine", + "access_denied": "La connexion a été annulée ou l'accès a été refusé. Si c'est une erreur, veuillez réessayer.", "emailSignin": "L'e-mail n'a pas pu être envoyé", "emailVerify": "Veuillez vérifier votre e-mail, un nouvel e-mail a été envoyé", "credentialsSignin": "La connexion a échoué. Vérifiez que les informations que vous avez fournies sont correctes", diff --git a/backend/chainlit/translations/gu.json b/backend/chainlit/translations/gu.json index 2abb735f99..daa3601f72 100644 --- a/backend/chainlit/translations/gu.json +++ b/backend/chainlit/translations/gu.json @@ -46,6 +46,7 @@ "emailCreateAccount": "અલગ એકાઉન્ટથી સાઇન ઇન કરવાનો પ્રયાસ કરો", "callback": "અલગ એકાઉન્ટથી સાઇન ઇન કરવાનો પ્રયાસ કરો", "oauthAccountNotLinked": "તમારી ઓળખની પુષ્ટિ કરવા માટે, મૂળ રૂપે વાપરેલા એકાઉન્ટથી સાઇન ઇન કરો", + "access_denied": "સાઇન ઇન રદ કરવામાં આવ્યું અથવા ઍક્સેસ નકારવામાં આવી. જો આ ભૂલથી થયું હોય, તો કૃપા કરીને ફરી પ્રયાસ કરો.", "emailSignin": "ઈમેલ મોકલી શકાયો નથી", "emailVerify": "કૃપા કરી તમારો ઈમેલ ચકાસો, નવો ઈમેલ મોકલવામાં આવ્યો છે", "credentialsSignin": "સાઇન ઇન નિષ્ફળ. આપેલી વિગતો સાચી છે કે નહીં તે ચકાસો", diff --git a/backend/chainlit/translations/he-IL.json b/backend/chainlit/translations/he-IL.json index b184890121..81008aaf7d 100644 --- a/backend/chainlit/translations/he-IL.json +++ b/backend/chainlit/translations/he-IL.json @@ -46,6 +46,7 @@ "emailCreateAccount": "נסה להתחבר עם חשבון אחר", "callback": "נסה להתחבר עם חשבון אחר", "oauthAccountNotLinked": "כדי לאמת את זהותך, התחבר עם אותו חשבון בו השתמשת במקור", + "access_denied": "ההתחברות בוטלה או שהגישה נדחתה. אם זו הייתה טעות, אנא נסה שוב.", "emailSignin": "לא ניתן היה לשלוח את האימייל", "emailVerify": "אנא אמת את האימייל שלך, נשלח אימייל חדש", "credentialsSignin": "ההתחברות נכשלה. בדוק שהפרטים שהזנת נכונים", diff --git a/backend/chainlit/translations/hi.json b/backend/chainlit/translations/hi.json index 457d70eea6..fa714484b2 100644 --- a/backend/chainlit/translations/hi.json +++ b/backend/chainlit/translations/hi.json @@ -46,6 +46,7 @@ "emailCreateAccount": "किसी दूसरे खाते से साइन इन करने का प्रयास करें", "callback": "किसी दूसरे खाते से साइन इन करने का प्रयास करें", "oauthAccountNotLinked": "अपनी पहचान की पुष्टि करने के लिए, उसी खाते से साइन इन करें जिसका उपयोग आपने मूल रूप से किया था", + "access_denied": "साइन इन रद्द कर दिया गया या एक्सेस अस्वीकार कर दिया गया। यदि यह गलती से हुआ है, तो कृपया पुनः प्रयास करें।", "emailSignin": "ईमेल नहीं भेजा जा सका", "emailVerify": "कृपया अपना ईमेल सत्यापित करें, एक नया ईमेल भेजा गया है", "credentialsSignin": "साइन इन विफल। आपके द्वारा प्रदान किए गए विवरण की जांच करें", diff --git a/backend/chainlit/translations/it.json b/backend/chainlit/translations/it.json index 69021fe630..64302db325 100644 --- a/backend/chainlit/translations/it.json +++ b/backend/chainlit/translations/it.json @@ -46,6 +46,7 @@ "emailCreateAccount": "Prova ad accedere con un account diverso", "callback": "Prova ad accedere con un account diverso", "oauthAccountNotLinked": "Per confermare la tua identità, accedi con lo stesso account che hai usato in precedenza", + "access_denied": "L'accesso è stato annullato o l'autorizzazione è stata negata. Se è stato un errore, riprova.", "emailSignin": "Impossibile inviare l'email", "emailVerify": "Verifica la tua email, è stata inviata una nuova email", "credentialsSignin": "Accesso non riuscito. Verifica che i dati forniti siano corretti", diff --git a/backend/chainlit/translations/ja.json b/backend/chainlit/translations/ja.json index b1ea49659b..956729eab8 100644 --- a/backend/chainlit/translations/ja.json +++ b/backend/chainlit/translations/ja.json @@ -46,6 +46,7 @@ "emailCreateAccount": "別のアカウントでサインインしてください", "callback": "別のアカウントでサインインしてください", "oauthAccountNotLinked": "本人確認のため、最初に使用したのと同じアカウントでサインインしてください", + "access_denied": "サインインがキャンセルされたか、アクセスが拒否されました。誤りの場合は、もう一度お試しください。", "emailSignin": "メールを送信できませんでした", "emailVerify": "メールアドレスを確認してください。新しいメールが送信されました", "credentialsSignin": "サインインに失敗しました。入力した情報が正しいか確認してください", diff --git a/backend/chainlit/translations/kn.json b/backend/chainlit/translations/kn.json index ef59021765..8cd5f435e1 100644 --- a/backend/chainlit/translations/kn.json +++ b/backend/chainlit/translations/kn.json @@ -46,6 +46,7 @@ "emailCreateAccount": "ಬೇರೆ ಖಾತೆಯೊಂದಿಗೆ ಸೈನ್ ಇನ್ ಮಾಡಲು ಪ್ರಯತ್ನಿಸಿ", "callback": "ಬೇರೆ ಖಾತೆಯೊಂದಿಗೆ ಸೈನ್ ಇನ್ ಮಾಡಲು ಪ್ರಯತ್ನಿಸಿ", "oauthAccountNotLinked": "ನಿಮ್ಮ ಗುರುತನ್ನು ದೃಢೀಕರಿಸಲು, ನೀವು ಮೊದಲು ಬಳಸಿದ ಅದೇ ಖಾತೆಯೊಂದಿಗೆ ಸೈನ್ ಇನ್ ಮಾಡಿ", + "access_denied": "ಸೈನ್ ಇನ್ ರದ್ದುಗೊಳಿಸಲಾಗಿದೆ ಅಥವಾ ಪ್ರವೇಶವನ್ನು ನಿರಾಕರಿಸಲಾಗಿದೆ. ಇದು ತಪ್ಪಾಗಿ ಆಗಿದ್ದರೆ, ದಯವಿಟ್ಟು ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ.", "emailSignin": "ಇಮೇಲ್ ಕಳುಹಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ", "emailVerify": "ದಯವಿಟ್ಟು ನಿಮ್ಮ ಇಮೇಲ್ ಪರಿಶೀಲಿಸಿ, ಹೊಸ ಇಮೇಲ್ ಕಳುಹಿಸಲಾಗಿದೆ", "credentialsSignin": "ಸೈನ್ ಇನ್ ವಿಫಲವಾಗಿದೆ. ನೀವು ಒದಗಿಸಿದ ವಿವರಗಳು ಸರಿಯಾಗಿವೆಯೇ ಎಂದು ಪರಿಶೀಲಿಸಿ", diff --git a/backend/chainlit/translations/ko.json b/backend/chainlit/translations/ko.json index f05622faf1..5d28674bd1 100644 --- a/backend/chainlit/translations/ko.json +++ b/backend/chainlit/translations/ko.json @@ -46,6 +46,7 @@ "emailCreateAccount": "다른 계정으로 로그인해보세요", "callback": "다른 계정으로 로그인해보세요", "oauthAccountNotLinked": "신원을 확인하려면 원래 사용했던 계정으로 로그인하세요", + "access_denied": "로그인이 취소되었거나 접근이 거부되었습니다. 실수였다면 다시 시도해 주세요.", "emailSignin": "이메일을 보낼 수 없습니다", "emailVerify": "이메일을 확인해주세요. 새로운 이메일이 발송되었습니다", "credentialsSignin": "로그인 실패. 제공한 정보가 올바른지 확인하세요", diff --git a/backend/chainlit/translations/ml.json b/backend/chainlit/translations/ml.json index 5e01cd402e..2bc64cfd1f 100644 --- a/backend/chainlit/translations/ml.json +++ b/backend/chainlit/translations/ml.json @@ -46,6 +46,7 @@ "emailCreateAccount": "മറ്റൊരു അക്കൗണ്ട് ഉപയോഗിച്ച് സൈൻ ഇൻ ചെയ്യാൻ ശ്രമിക്കുക", "callback": "മറ്റൊരു അക്കൗണ്ട് ഉപയോഗിച്ച് സൈൻ ഇൻ ചെയ്യാൻ ശ്രമിക്കുക", "oauthAccountNotLinked": "നിങ്ങളുടെ വ്യക്തിത്വം സ്ഥിരീകരിക്കാൻ, ആദ്യം ഉപയോഗിച്ച അതേ അക്കൗണ്ട് ഉപയോഗിച്ച് സൈൻ ഇൻ ചെയ്യുക", + "access_denied": "സൈൻ ഇൻ റദ്ദാക്കി അല്ലെങ്കിൽ ആക്സസ് നിരസിച്ചു. ഇത് അബദ്ധത്തിൽ സംഭവിച്ചതാണെങ്കിൽ, ദയവായി വീണ്ടും ശ്രമിക്കുക.", "emailSignin": "ഇമെയിൽ അയയ്ക്കാൻ കഴിഞ്ഞില്ല", "emailVerify": "നിങ്ങളുടെ ഇമെയിൽ പരിശോധിക്കുക, ഒരു പുതിയ ഇമെയിൽ അയച്ചിട്ടുണ്ട്", "credentialsSignin": "സൈൻ ഇൻ പരാജയപ്പെട്ടു. നിങ്ങൾ നൽകിയ വിവരങ്ങൾ ശരിയാണെന്ന് പരിശോധിക്കുക", diff --git a/backend/chainlit/translations/mr.json b/backend/chainlit/translations/mr.json index c559f83cfc..9d338a16eb 100644 --- a/backend/chainlit/translations/mr.json +++ b/backend/chainlit/translations/mr.json @@ -46,6 +46,7 @@ "emailCreateAccount": "वेगळ्या खात्याने साइन इन करण्याचा प्रयत्न करा", "callback": "वेगळ्या खात्याने साइन इन करण्याचा प्रयत्न करा", "oauthAccountNotLinked": "तुमची ओळख पटवण्यासाठी, मूळ वापरलेल्या खात्यानेच साइन इन करा", + "access_denied": "साइन इन रद्द केले गेले किंवा प्रवेश नाकारला गेला. हे चुकून झाले असल्यास, कृपया पुन्हा प्रयत्न करा.", "emailSignin": "ईमेल पाठवू शकले नाही", "emailVerify": "कृपया तुमचा ईमेल तपासा, नवीन ईमेल पाठवला गेला आहे", "credentialsSignin": "साइन इन अयशस्वी. तुम्ही दिलेली माहिती योग्य आहे का ते तपासा", diff --git a/backend/chainlit/translations/nl.json b/backend/chainlit/translations/nl.json index b4760191a2..4f0d186e15 100644 --- a/backend/chainlit/translations/nl.json +++ b/backend/chainlit/translations/nl.json @@ -46,6 +46,7 @@ "emailCreateAccount": "Probeer in te loggen met een ander account", "callback": "Probeer in te loggen met een ander account", "oauthAccountNotLinked": "Om je identiteit te bevestigen, log in met hetzelfde account dat je oorspronkelijk hebt gebruikt", + "access_denied": "Het inloggen is geannuleerd of de toegang is geweigerd. Als dit een vergissing was, probeer het opnieuw.", "emailSignin": "De e-mail kon niet worden verzonden", "emailVerify": "Verifieer je e-mail, er is een nieuwe e-mail verzonden", "credentialsSignin": "Inloggen mislukt. Controleer of de ingevoerde gegevens correct zijn", diff --git a/backend/chainlit/translations/pt-PT.json b/backend/chainlit/translations/pt-PT.json index a1f1497059..c00c31bead 100644 --- a/backend/chainlit/translations/pt-PT.json +++ b/backend/chainlit/translations/pt-PT.json @@ -46,6 +46,7 @@ "emailCreateAccount": "Tente iniciar sess\u00e3o com outra conta", "callback": "Tente iniciar sess\u00e3o com outra conta", "oauthAccountNotLinked": "Para confirmar a sua identidade, inicie sess\u00e3o com a mesma conta utilizada anteriormente", + "access_denied": "O in\u00edcio de sess\u00e3o foi cancelado ou o acesso foi negado. Se foi um engano, tente novamente.", "emailSignin": "N\u00e3o foi poss\u00edvel enviar o e-mail", "emailVerify": "Por favor, verifique o seu e-mail. Foi enviada uma nova mensagem", "credentialsSignin": "Erro ao iniciar sess\u00e3o. Verifique se os dados fornecidos est\u00e3o corretos", diff --git a/backend/chainlit/translations/ta.json b/backend/chainlit/translations/ta.json index be051916f7..707bef043a 100644 --- a/backend/chainlit/translations/ta.json +++ b/backend/chainlit/translations/ta.json @@ -46,6 +46,7 @@ "emailCreateAccount": "வேறு கணக்குடன் உள்நுழைய முயற்சிக்கவும்", "callback": "வேறு கணக்குடன் உள்நுழைய முயற்சிக்கவும்", "oauthAccountNotLinked": "உங்கள் அடையாளத்தை உறுதிப்படுத்த, முதலில் பயன்படுத்திய அதே கணக்குடன் உள்நுழையவும்", + "access_denied": "உள்நுழைவு ரத்து செய்யப்பட்டது அல்லது அணுகல் மறுக்கப்பட்டது. இது தவறுதலாக நிகழ்ந்திருந்தால், மீண்டும் முயற்சிக்கவும்.", "emailSignin": "மின்னஞ்சலை அனுப்ப முடியவில்லை", "emailVerify": "உங்கள் மின்னஞ்சலை சரிபார்க்கவும், புதிய மின்னஞ்சல் அனுப்பப்பட்டுள்ளது", "credentialsSignin": "உள்நுழைவு தோல்வியடைந்தது. நீங்கள் வழங்கிய விவரங்கள் சரியானவை என சரிபார்க்கவும்", diff --git a/backend/chainlit/translations/te.json b/backend/chainlit/translations/te.json index 5849a3a1a4..3a94be108a 100644 --- a/backend/chainlit/translations/te.json +++ b/backend/chainlit/translations/te.json @@ -46,6 +46,7 @@ "emailCreateAccount": "వేరే ఖాతాతో సైన్ ఇన్ చేయడానికి ప్రయత్నించండి", "callback": "వేరే ఖాతాతో సైన్ ఇన్ చేయడానికి ప్రయత్నించండి", "oauthAccountNotLinked": "మీ గుర్తింపును నిర్ధారించడానికి, మీరు మొదట ఉపయోగించిన అదే ఖాతాతో సైన్ ఇన్ చేయండి", + "access_denied": "సైన్ ఇన్ రద్దు చేయబడింది లేదా యాక్సెస్ నిరాకరించబడింది. ఇది పొరపాటున జరిగితే, దయచేసి మళ్లీ ప్రయత్నించండి.", "emailSignin": "ఇమెయిల్ పంపడం సాధ్యం కాలేదు", "emailVerify": "దయచేసి మీ ఇమెయిల్‌ని ధృవీకరించండి, కొత్త ఇమెయిల్ పంపబడింది", "credentialsSignin": "సైన్ ఇన్ విఫలమైంది. మీరు అందించిన వివరాలు సరైనవేనా అని తనిఖీ చేయండి", diff --git a/backend/chainlit/translations/zh-CN.json b/backend/chainlit/translations/zh-CN.json index bce16c1149..32a14ca143 100644 --- a/backend/chainlit/translations/zh-CN.json +++ b/backend/chainlit/translations/zh-CN.json @@ -46,6 +46,7 @@ "emailCreateAccount": "请尝试使用其他账号登录", "callback": "请尝试使用其他账号登录", "oauthAccountNotLinked": "为确认您的身份,请使用原始账号登录", + "access_denied": "登录已取消或访问被拒绝。如果这是误操作,请重试。", "emailSignin": "邮件发送失败", "emailVerify": "请验证您的邮箱,新的验证邮件已发送", "credentialsSignin": "登录失败。请检查您提供的信息是否正确", diff --git a/backend/chainlit/translations/zh-TW.json b/backend/chainlit/translations/zh-TW.json index 4c475b61d1..8dbe8201f3 100644 --- a/backend/chainlit/translations/zh-TW.json +++ b/backend/chainlit/translations/zh-TW.json @@ -46,6 +46,7 @@ "emailCreateAccount": "請嘗試使用其它帳號登入", "callback": "請嘗試使用其它帳號登入", "oauthAccountNotLinked": "為確認您的身份,請以原本使用的帳號登入", + "access_denied": "登入已取消或存取遭拒。如果這是誤操作,請重試。", "emailSignin": "電子郵件發送失敗", "emailVerify": "請驗證您的電子信箱,新的驗證郵件已發送", "credentialsSignin": "登入失敗。請檢查您提供的資訊是否正確", diff --git a/backend/tests/test_translations.py b/backend/tests/test_translations.py index 6e517c4748..3ceffa8ed7 100644 --- a/backend/tests/test_translations.py +++ b/backend/tests/test_translations.py @@ -1,8 +1,12 @@ +import glob +import json +import os from io import StringIO from unittest.mock import patch import pytest +from chainlit.config import TRANSLATIONS_DIR from chainlit.translations import compare_json_structures, lint_translation_json @@ -384,3 +388,51 @@ def test_compare_preserves_error_order(self): missing_errors = [e for e in errors if "Missing" in e] assert len(extra_errors) == 2 assert len(missing_errors) == 3 + + +def _locale_files(): + return sorted(glob.glob(os.path.join(TRANSLATIONS_DIR, "*.json"))) + + +def _login_errors(path): + with open(path, encoding="utf-8") as f: + return json.load(f)["auth"]["login"]["errors"] + + +class TestOAuthAccessDeniedKey: + """The access_denied error code must resolve to a dedicated, distinct + login message in every shipped locale. + + The frontend builds the i18n key as auth.login.errors.{error.toLowerCase()}, + so an OAuth ?error=access_denied redirect looks up auth.login.errors.access_denied. + Without this key it falls back to the generic 'default' message, which is + misleading for an explicit user/provider denial. + """ + + def test_access_denied_present_in_en_us(self): + errors = _login_errors(os.path.join(TRANSLATIONS_DIR, "en-US.json")) + assert "access_denied" in errors + assert isinstance(errors["access_denied"], str) + assert errors["access_denied"].strip() + + def test_access_denied_distinct_from_default_in_en_us(self): + errors = _login_errors(os.path.join(TRANSLATIONS_DIR, "en-US.json")) + assert errors["access_denied"] != errors["default"] + + def test_access_denied_present_in_all_locales(self): + files = _locale_files() + assert files, "no locale files found" + for path in files: + errors = _login_errors(path) + name = os.path.basename(path) + assert "access_denied" in errors, f"{name} missing access_denied key" + value = errors["access_denied"] + assert isinstance(value, str), f"{name} access_denied is not a string" + assert value.strip(), f"{name} has empty access_denied value" + + def test_locale_login_errors_match_en_us_structure(self): + truth = _login_errors(os.path.join(TRANSLATIONS_DIR, "en-US.json")) + for path in _locale_files(): + name = os.path.basename(path) + errors = compare_json_structures(truth, _login_errors(path)) + assert errors == [], f"{name} login.errors structure drift: {errors}"