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;