From 6d80edc04a5d26112f2d15d0dff5da2a8bb7f681 Mon Sep 17 00:00:00 2001 From: Veloman Yunkan Date: Tue, 8 Apr 2025 16:58:36 +0400 Subject: [PATCH] Translated the advice on the new 404 error page Translation of the multi-line/multi-paragraph advice is done under the assumption that its structure (5 paragraphs, two of which serve as entries in a bulleted list) can be preserved in the translations by proper phrasing, i.e. the advice must be translated as a whole rather than each of its sentences (which act as units of translation) separately. --- src/server/response.cpp | 13 +++++++++++++ static/skin/i18n/en.json | 5 +++++ static/skin/i18n/qqq.json | 5 +++++ static/skin/i18n/test.json | 5 +++++ static/templates/sexy404.html | 10 +++++----- test/server.cpp | 12 ++++++------ 6 files changed, 39 insertions(+), 11 deletions(-) diff --git a/src/server/response.cpp b/src/server/response.cpp index 2587d8d3..fd0b8594 100644 --- a/src/server/response.cpp +++ b/src/server/response.cpp @@ -248,6 +248,18 @@ public: return from(nonParameterizedMessage(nonParameterizedMsgId)); } + static Data staticMultiParagraphText(const std::string& msgIdPrefix, size_t n) + { + Object paragraphs; + for ( size_t i = 1; i <= n; ++i ) { + std::ostringstream oss; + oss << "p" << i; + const std::string pId = oss.str(); + paragraphs[pId] = fromMsgId(msgIdPrefix + "." + pId); + } + return paragraphs; + } + std::string asJSON() const; void dumpJSON(std::ostream& os) const; @@ -389,6 +401,7 @@ NewHTTP404Response::NewHTTP404Response(const RequestContext& request, {"PAGE_HEADING", Data::fromMsgId("new-404-page-heading")}, {"404_img_text", Data::fromMsgId("404-img-text")}, {"path_was_not_found_msg", Data::fromMsgId("path-was-not-found")}, + {"advice", Data::staticMultiParagraphText("404-advice", 5)}, }); } diff --git a/static/skin/i18n/en.json b/static/skin/i18n/en.json index e2d3bc91..15ed6377 100644 --- a/static/skin/i18n/en.json +++ b/static/skin/i18n/en.json @@ -24,6 +24,11 @@ , "new-404-page-heading" : "Oops. Page not found." , "404-img-text": "Not found!" , "path-was-not-found": "The requested path was not found:" + , "404-advice.p1": "The content you're looking for may still be available, but it might be located at a different place within the ZIM file." + , "404-advice.p2": "Please:" + , "404-advice.p3": "Try using the search function to find the content you want" + , "404-advice.p4": "Look for keywords or titles related to the information you're seeking" + , "404-advice.p5": "This approach should help you locate the desired content, even if the original link isn't working properly." , "500-page-title" : "Internal Server Error" , "500-page-heading" : "Internal Server Error" , "500-page-text": "An internal server error occured. We are sorry about that :/" diff --git a/static/skin/i18n/qqq.json b/static/skin/i18n/qqq.json index 86dcde6d..e23016d0 100644 --- a/static/skin/i18n/qqq.json +++ b/static/skin/i18n/qqq.json @@ -28,6 +28,11 @@ "new-404-page-heading": "Heading of the 404 error page", "404-img-text": "Fallback text for the image on the 404 error page", "path-was-not-found": "Message telling that the URL path was not found (to be followed by the actual path)", + "404-advice.p1": "1st paragraph of the multiline advice on the 'Page not found' error page (see 404-advice.p1 through 404-advice.p5 for full text)", + "404-advice.p2": "2nd paragraph of the multiline advice on the 'Page not found' error page (see 404-advice.p1 through 404-advice.p5 for full text)", + "404-advice.p3": "3rd paragraph of the multiline advice on the 'Page not found' error page (see 404-advice.p1 through 404-advice.p5 for full text)", + "404-advice.p4": "4th paragraph of the multiline advice on the 'Page not found' error page (see 404-advice.p1 through 404-advice.p5 for full text)", + "404-advice.p5": "5th paragraph of the multiline advice on the 'Page not found' error page (see 404-advice.p1 through 404-advice.p5 for full text)", "500-page-title": "Title of the 500 error page", "500-page-heading": "Heading of the 500 error page", "500-page-text": "Text of the 500 error page", diff --git a/static/skin/i18n/test.json b/static/skin/i18n/test.json index 34ed4871..90fcc49b 100644 --- a/static/skin/i18n/test.json +++ b/static/skin/i18n/test.json @@ -17,6 +17,11 @@ , "new-404-page-heading" : "[I18N TESTING] Oops. Larry Page could not be reached. He may be on paternity leave." , "404-img-text": "[I18N] Not found! [TESTING]" , "path-was-not-found": "[I18N TESTING] The requested path was not found (in fact, nothing was found instead, either):" + , "404-advice.p1": "Sh*t happens. [I18N TESTING] Take it easy!" + , "404-advice.p2": "[I18N TESTING] Try one of the following:" + , "404-advice.p3": "[I18N TESTING] Check the spelling of the URL path" + , "404-advice.p4": "[I18N TESTING] Press the dice button" + , "404-advice.p5": "Good luck! [I18N TESTING]" , "library-button-text": "[I18N TESTING] Navigate to the welcome page" , "home-button-text": "[I18N TESTING] Jump to the main page of '{{BOOK_TITLE}}'" , "random-page-button-text": "[I18N TESTING] I am tired of determinism" diff --git a/static/templates/sexy404.html b/static/templates/sexy404.html index 582c653c..a2839956 100644 --- a/static/templates/sexy404.html +++ b/static/templates/sexy404.html @@ -23,13 +23,13 @@

{{url_path}}

-

The content you're looking for may still be available, but it might be located at a different place within the ZIM file.

-

Please:

+

{{advice.p1}}

+

{{advice.p2}}

-

This approach should help you locate the desired content, even if the original link isn't working properly.

+

{{advice.p5}}

diff --git a/test/server.cpp b/test/server.cpp index dac001a6..53f57f4e 100644 --- a/test/server.cpp +++ b/test/server.cpp @@ -346,7 +346,7 @@ R"EXPECTEDRESULT( - window.KIWIX_RESPONSE_TEMPLATE = "<!DOCTYPE html>\n<html>\n <head>\n <meta charset="utf-8">\n <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />\n <title>{{PAGE_TITLE}}</title>\n <link type="text/css" href="{{root}}/skin/error.css?cacheid=c49d1586" rel="Stylesheet" />\n{{#KIWIX_RESPONSE_DATA}} <script>\n window.KIWIX_RESPONSE_TEMPLATE = "{{KIWIX_RESPONSE_TEMPLATE}}";\n window.KIWIX_RESPONSE_DATA = {{{KIWIX_RESPONSE_DATA}}};\n </script>{{/KIWIX_RESPONSE_DATA}}\n </head>\n <body>\n <header>\n <img src="{{root}}/skin/404.svg?cacheid=b6d648af"\n alt="{{404_img_text}}"\n aria-label="{{404_img_text}}"\n title="{{404_img_text}}">\n </header>\n <section class="intro">\n <h1>{{PAGE_HEADING}}</h1>\n <p>{{path_was_not_found_msg}}</p>\n <p><code>{{url_path}}</code></p>\n </section>\n <section class="advice">\n <p>The content you're looking for may still be available, but it might be located at a different place within the ZIM file.</p>\n <p class="list-intro">Please:</p>\n <ul>\n <li>Try using the search function to find the content you want</li>\n <li>Look for keywords or titles related to the information you're seeking</li>\n </ul>\n <p>This approach should help you locate the desired content, even if the original link isn't working properly.</p>\n </section>\n </body>\n</html>\n"; + window.KIWIX_RESPONSE_TEMPLATE = "<!DOCTYPE html>\n<html>\n <head>\n <meta charset="utf-8">\n <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />\n <title>{{PAGE_TITLE}}</title>\n <link type="text/css" href="{{root}}/skin/error.css?cacheid=c49d1586" rel="Stylesheet" />\n{{#KIWIX_RESPONSE_DATA}} <script>\n window.KIWIX_RESPONSE_TEMPLATE = "{{KIWIX_RESPONSE_TEMPLATE}}";\n window.KIWIX_RESPONSE_DATA = {{{KIWIX_RESPONSE_DATA}}};\n </script>{{/KIWIX_RESPONSE_DATA}}\n </head>\n <body>\n <header>\n <img src="{{root}}/skin/404.svg?cacheid=b6d648af"\n alt="{{404_img_text}}"\n aria-label="{{404_img_text}}"\n title="{{404_img_text}}">\n </header>\n <section class="intro">\n <h1>{{PAGE_HEADING}}</h1>\n <p>{{path_was_not_found_msg}}</p>\n <p><code>{{url_path}}</code></p>\n </section>\n <section class="advice">\n <p>{{advice.p1}}</p>\n <p class="list-intro">{{advice.p2}}</p>\n <ul>\n <li>{{advice.p3}}</li>\n <li>{{advice.p4}}</li>\n </ul>\n <p>{{advice.p5}}</p>\n </section>\n </body>\n</html>\n"; Page not found