From 5e55d7b5b45d3303268a0b184304bf0f534b736b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Benedikt=20R=C3=B6tsch?= Date: Wed, 14 Feb 2018 16:15:32 +0100 Subject: [PATCH] feat(errors): new error page copy --- app.js | 2 +- i18n/locales/de-DE.json | 32 ++++++++++++++++---------------- i18n/locales/en-US.json | 32 ++++++++++++++++---------------- routes/courses.js | 6 +++--- views/error.pug | 22 +++++++++++----------- 5 files changed, 47 insertions(+), 47 deletions(-) diff --git a/app.js b/app.js index 593aaaa..ff2ff83 100644 --- a/app.js +++ b/app.js @@ -136,7 +136,7 @@ app.use('/', routes) // Catch 404 and forward to error handler app.use(function (request, response, next) { - const err = new Error(translate('error404Route', response.currentLocale)) + const err = new Error(translate('errorMessage404Route', response.currentLocale)) err.status = 404 next(err) }) diff --git a/i18n/locales/de-DE.json b/i18n/locales/de-DE.json index 9a0e56d..a9ab360 100644 --- a/i18n/locales/de-DE.json +++ b/i18n/locales/de-DE.json @@ -60,15 +60,6 @@ "startCourseLabel": "Kurs beginnen", "categoriesLabel": "Kategorien", "allCoursesLabel": "Alle Kurse", - "somethingWentWrongLabel": "Hmm, etwas ging schief.", - "tryLabel": "Versuchen Sie", - "contentModelChangedErrorLabel": "Überprüfen Sie, ob das Content Model verändert wurde.", - "draftOrPublishedErrorLabel": "Überprüfen Sie, ob es nicht veröffentlichte Änderungen gibt.", - "localeContentErrorLabel": "Überprüfen Sie, ob es Inhalt für diese Sprache gibt.", - "verifyCredentialsErrorLabel": "Überprüfen Sie, ob die Zugangsdaten richtig und nicht abgelaufen sind.", - "stackTraceErrorLabel": "Schauen Sie sich den folgenden Stack Trace an", - "errorLabel": "Fehler", - "stackTraceLabel": "Stack Trace", "companyLabel": "Firma", "officeLabel": "Büro in Berlin", "germanyLabel": "Deutschland", @@ -114,10 +105,19 @@ "usingServerCredentialsLabel": "Die Beispielanwendung verwendet derzeit serverseitig gespeicherte Anmeldeinformationen zum Herstellen einer Verbindung mit einem Contentful-Space.", "usingSessionCredentialsLabel": "Die Beispielanwendung verwendet derzeit Anmeldeinformationen von der Anwendungssitzung, um eine Verbindung zu einem Contentful-Space herzustellen.", "applicationCredentialsLabel": "Anmeldeinformationen für die Anwendungssitzung", - "notFoundErrorLabel": "Diese Seite kann nicht gefunden werden. Stellen Sie sicher, dass sie existiert und veröffentlicht ist.", - "error404Route": "Vergewissern Sie sich, dass sie eine unterstützte Adresse aufrufen.", - "error404Lesson": "Vergewissern Sie sich, dass die Lektion veröffentlicht ist und nicht gelöscht wurde.", - "error404Course": "Vergewissern Sie sich, dass der Kurs veröffentlicht ist und nicht gelöscht wurde.", - "error404Category": "Vergewissern Sie sich, dass die Kategorie veröffentlicht ist und nicht gelöscht wurde.", - "errorHighlightedCourse": "⚠️ Dieser Kurs wurde nicht veröffentlicht oder existiert nicht" -} \ No newline at end of file + "errorHighlightedCourse": "⚠️ Dieser Kurs wurde nicht veröffentlicht oder existiert nicht.", + "somethingWentWrongLabel": "Hmm, etwas ging schief.", + "errorMessage404Route": "Diese Seite existiert nicht.", + "errorMessage404Lesson": "Diese Lektion existiert nicht.", + "errorMessage404Course": "Dieser Kurs existiert nicht.", + "errorMessage404Category": "Diese Kategorie existiert nicht.", + "hintsLabel": "Versuchen Sie Folgendes um die Probleme zu lösen:", + "notFoundErrorHint": "Überprüfen Sie, ob dieser Inhalt existiert und veröffentlicht wurde.", + "contentModelChangedErrorHint": "Überprüfen Sie, ob die Struktur der Inhalte geändert wurde. Haben Sie einen Inhaltstyp oder ein benötigtes Feld gelöscht?", + "draftOrPublishedErrorHint": "Überprüfen Sie, ob der Inhalt veröffentlicht wurde, Änderungen enthält (Content Delivery API) oder gelöscht wurde (Content Preview API & Content Delivery API).", + "localeContentErrorHint": "Überprüfen Sie, ob alle benötigten Felder dieser Sprache befüllt wurden.", + "verifyCredentialsErrorHint": "Überprüfen Sie, ob die Space ID und die Access Tokens richtig und nicht abgelaufen sind.", + "stackTraceErrorHint": "Schauen Sie sich den folgenden Stack Trace an.", + "errorLabel": "Fehler von Contentful:", + "stackTraceLabel": "Stack trace:" +} diff --git a/i18n/locales/en-US.json b/i18n/locales/en-US.json index 725b643..83a65b8 100644 --- a/i18n/locales/en-US.json +++ b/i18n/locales/en-US.json @@ -60,15 +60,6 @@ "startCourseLabel": "Start course", "categoriesLabel": "Categories", "allCoursesLabel": "All courses", - "somethingWentWrongLabel": "Oops, something went wrong", - "tryLabel": "Try", - "contentModelChangedErrorLabel": "Check if the content model has changed", - "draftOrPublishedErrorLabel": "Check the selection has content in draft or published state (for Preview or Delivery)", - "localeContentErrorLabel": "Check if there's any content for this locale", - "verifyCredentialsErrorLabel": "Verify credentials are correct and up to date", - "stackTraceErrorLabel": "Check the stack trace below", - "errorLabel": "Error", - "stackTraceLabel": "Stack trace", "companyLabel": "Company", "officeLabel": "Office Berlin", "germanyLabel": "Germany", @@ -114,10 +105,19 @@ "usingServerCredentialsLabel": "The example app is currently using server side stored credentials to connect to a Contentful space.", "usingSessionCredentialsLabel": "The example app is currently using application session stored credentials to connect to a Contentful space.", "applicationCredentialsLabel": "Application session credentials", - "notFoundErrorLabel": "The page you are trying to access could not be found. Make sure it is existing and published.", - "error404Route": "Make sure that you are trying to reach a supported address.", - "error404Lesson": "Make sure that the lesson has not been deleted or unpublished.", - "error404Course": "Make sure that the course has not been deleted or unpublished.", - "error404Category": "Make sure that the category has not been deleted or unpublished.", - "errorHighlightedCourse": "⚠️ The course is not published or does not exist" -} \ No newline at end of file + "errorHighlightedCourse": "⚠️ The course is not published or does not exist.", + "somethingWentWrongLabel": "Oops, something went wrong", + "errorMessage404Route": "The page you are trying to open does not exist.", + "errorMessage404Lesson": "The lesson you are trying to open does not exist.", + "errorMessage404Course": "The course you are trying to open does not exist.", + "errorMessage404Category": "The category you are trying to open does not exist.", + "hintsLabel": "Try the following to fix the issue(s):", + "notFoundErrorHint": "Make sure the content you are trying to access exists and is published.", + "contentModelChangedErrorHint": "Check if the content model has changed. Did you delete a content type or a required field?", + "draftOrPublishedErrorHint": "Check if the content is in a draft or pending changes state (Content Delivery API), or if it has been deleted (Content Preview API & Content Delivery API).", + "localeContentErrorHint": "Check if all required fields have content for this locale.", + "verifyCredentialsErrorHint": "Verify that your space id and access tokens are correct and up to date.", + "stackTraceErrorHint": "Check the stack trace below.", + "errorLabel": "Error from Contentful:", + "stackTraceLabel": "Stack trace:" +} diff --git a/routes/courses.js b/routes/courses.js index 9a48b17..3b1fa86 100644 --- a/routes/courses.js +++ b/routes/courses.js @@ -57,7 +57,7 @@ module.exports.getCourse = async (request, response, next) => { course = await getCourse(request.params.slug, response.locals.currentLocale.code, response.locals.currentApi.id) } catch (err) { if (err.status === 404) { - err.message = translate('error404Course', response.currentLocale) + err.message = translate('errorMessage404Course', response.currentLocale) } throw err } @@ -98,7 +98,7 @@ module.exports.getCoursesByCategory = async (request, response, next) => { const activeCategory = categories.find((category) => category.fields.slug === request.params.category) if (!activeCategory) { - const error = new Error(translate('error404Category', response.currentLocale)) + const error = new Error(translate('errorMessage404Category', response.currentLocale)) error.status = 404 throw error } @@ -128,7 +128,7 @@ module.exports.getLesson = async (request, response, next) => { let {lesson, nextLesson} = getNextLesson(lessons, request.params.lslug) if (!lesson) { - const error = new Error(translate('error404Lesson', response.currentLocale)) + const error = new Error(translate('errorMessage404Lesson', response.currentLocale)) error.status = 404 throw error } diff --git a/views/error.pug b/views/error.pug index 6289570..ceaee20 100644 --- a/views/error.pug +++ b/views/error.pug @@ -6,24 +6,24 @@ block content .layout-centered .error h1 #{translate('somethingWentWrongLabel', currentLocale.code)} (#{error.status}) - p #{error.message} + // We use the last line to have a human readable output for pug error messages + p #{error.message.split('\n').pop()} - h2 #{translate('tryLabel', currentLocale.code)}: + h2 #{translate('hintsLabel', currentLocale.code)} ul case error.status when 404 - li #{translate('notFoundErrorLabel', currentLocale.code)} - li #{translate('draftOrPublishedErrorLabel', currentLocale.code)} + li #{translate('notFoundErrorHint', currentLocale.code)} + li #{translate('draftOrPublishedErrorHint', currentLocale.code)} when 400 - li #{translate('contentModelChangedErrorLabel', currentLocale.code)} - when 401 - li #{translate('verifyCredentialsErrorLabel', currentLocale.code)} - li #{translate('localeContentErrorLabel', currentLocale.code)} - when 500 - li #{translate('contentModelChangedErrorLabel', currentLocale.code)} + li #{translate('contentModelChangedErrorHint', currentLocale.code)} + default + li #{translate('contentModelChangedErrorHint', currentLocale.code)} + li #{translate('draftOrPublishedErrorHint', currentLocale.code)} + li #{translate('localeContentErrorHint', currentLocale.code)} if error.stack - li #{translate('stackTraceErrorLabel', currentLocale.code)} + li #{translate('stackTraceErrorHint', currentLocale.code)} if helpers.isCustomCredentials(settings) form(action='/settings?reset=true' method='POST')