From 68c87c921793ffe3c0d6683e60e1e3d74e48af40 Mon Sep 17 00:00:00 2001 From: Thomas Basler Date: Fri, 18 Oct 2024 20:46:35 +0200 Subject: [PATCH] Move lookup for translation path to separate method --- include/I18n.h | 1 + src/I18n.cpp | 13 +++++++++++++ src/WebApi_i18n.cpp | 11 ++++------- 3 files changed, 18 insertions(+), 7 deletions(-) diff --git a/include/I18n.h b/include/I18n.h index 07e8945a..6d75ea37 100644 --- a/include/I18n.h +++ b/include/I18n.h @@ -16,6 +16,7 @@ public: I18nClass(); void init(Scheduler& scheduler); std::list getAvailableLanguages(); + String getFilenameByLocale(String& locale) const; private: void readLangPacks(); diff --git a/src/I18n.cpp b/src/I18n.cpp index 4df72565..1fb49cfa 100644 --- a/src/I18n.cpp +++ b/src/I18n.cpp @@ -25,6 +25,19 @@ std::list I18nClass::getAvailableLanguages() return _availLanguages; } +String I18nClass::getFilenameByLocale(String& locale) const +{ + auto it = std::find_if(_availLanguages.begin(), _availLanguages.end(), [locale](const LanguageInfo_t& elem) { + return elem.code == locale; + }); + + if (it != _availLanguages.end()) { + return it->filename; + } else { + return String(); + } +} + void I18nClass::readLangPacks() { auto root = LittleFS.open("/"); diff --git a/src/WebApi_i18n.cpp b/src/WebApi_i18n.cpp index 1673501a..9daa6c57 100644 --- a/src/WebApi_i18n.cpp +++ b/src/WebApi_i18n.cpp @@ -40,13 +40,10 @@ void WebApiI18nClass::onI18nLanguage(AsyncWebServerRequest* request) if (request->hasParam("code")) { String code = request->getParam("code")->value(); - const auto& languages = I18n.getAvailableLanguages(); - auto it = std::find_if(languages.begin(), languages.end(), [code](const LanguageInfo_t& elem) { - return elem.code == code; - }); + String filename = I18n.getFilenameByLocale(code); - if (it != languages.end()) { - String md5 = Utils::generateMd5FromFile(it->filename); + if (filename != "") { + String md5 = Utils::generateMd5FromFile(filename); String expectedEtag; expectedEtag = "\""; @@ -64,7 +61,7 @@ void WebApiI18nClass::onI18nLanguage(AsyncWebServerRequest* request) if (eTagMatch) { response = request->beginResponse(304); } else { - response = request->beginResponse(LittleFS, it->filename, asyncsrv::T_application_json); + response = request->beginResponse(LittleFS, filename, asyncsrv::T_application_json); } // HTTP requires cache headers in 200 and 304 to be identical