From 133db87c0329204bc721225657263083f07bdc4d Mon Sep 17 00:00:00 2001 From: Tobias Markus Date: Wed, 31 Dec 2025 00:06:53 +0100 Subject: [PATCH] Add method for loading available languages found in only on directory --- include/tinygettext/dictionary_manager.hpp | 3 +++ src/dictionary_manager.cpp | 27 +++++++++++++++++----- 2 files changed, 24 insertions(+), 6 deletions(-) diff --git a/include/tinygettext/dictionary_manager.hpp b/include/tinygettext/dictionary_manager.hpp index 8e76653..6f7579b 100644 --- a/include/tinygettext/dictionary_manager.hpp +++ b/include/tinygettext/dictionary_manager.hpp @@ -92,6 +92,9 @@ class DictionaryManager /** Return a set of the available languages in their country code */ std::set get_languages(); + /** Return a set of the available languages in their country code, found in the specified directory */ + std::set get_languages(const std::string& directory); + std::string convertFilename2Language(const std::string &s_in) const; private: diff --git a/src/dictionary_manager.cpp b/src/dictionary_manager.cpp index 6175d76..f05c3ce 100644 --- a/src/dictionary_manager.cpp +++ b/src/dictionary_manager.cpp @@ -189,14 +189,29 @@ DictionaryManager::get_languages() for (SearchPath::iterator p = search_path.begin(); p != search_path.end(); ++p) { - std::vector files = filesystem->open_directory(*p); + for (const auto& language : get_languages(*p)) + { + languages.insert(language); + } + } + return languages; +} + +std::set +DictionaryManager::get_languages(const std::string& directory) +{ + if (std::find(search_path.begin(), search_path.end(), directory) == search_path.end()) { + return std::set(); + } + + std::set languages; + std::vector files = filesystem->open_directory(directory); - for(std::vector::iterator file = files.begin(); file != files.end(); ++file) + for(std::vector::iterator file = files.begin(); file != files.end(); ++file) + { + if (has_suffix(*file, ".po")) { - if (has_suffix(*file, ".po")) - { - languages.insert(Language::from_env(file->substr(0, file->size()-3))); - } + languages.insert(Language::from_env(file->substr(0, file->size()-3))); } } return languages;