diff options
Diffstat (limited to 'src/localization')
| -rw-r--r-- | src/localization/line_id.cpp | 100 | ||||
| -rw-r--r-- | src/localization/line_id.hpp | 56 | ||||
| -rw-r--r-- | src/localization/localization.cpp | 132 | ||||
| -rw-r--r-- | src/localization/localization.hpp | 37 |
4 files changed, 0 insertions, 325 deletions
diff --git a/src/localization/line_id.cpp b/src/localization/line_id.cpp deleted file mode 100644 index 567a3ba..0000000 --- a/src/localization/line_id.cpp +++ /dev/null @@ -1,100 +0,0 @@ -#include "line_id.hpp" - -#include <optional> -#include <string> - -namespace bot { - namespace loc { - std::optional<LineId> string_to_line_id(const std::string &str) { - if (str == "ping.response") { - return LineId::PingResponse; - } - - else if (str == "msg.owner") { - return LineId::MsgOwner; - } - - else if (str == "argument.subcommand") { - return LineId::ArgumentSubcommand; - } else if (str == "argument.message") { - return LineId::ArgumentMessage; - } else if (str == "argument.interval") { - return LineId::ArgumentInterval; - } else if (str == "argument.name") { - return LineId::ArgumentName; - } else if (str == "argument.target") { - return LineId::ArgumentTarget; - } else if (str == "argument.value") { - return LineId::ArgumentValue; - } else if (str == "argument.amount") { - return LineId::ArgumentAmount; - } - - else if (str == "error.template") { - return LineId::ErrorTemplate; - } else if (str == "error.not_enough_arguments") { - return LineId::ErrorNotEnoughArguments; - } else if (str == "error.incorrect_argument") { - return LineId::ErrorIncorrectArgument; - } else if (str == "error.incompatible_name") { - return LineId::ErrorIncompatibleName; - } else if (str == "error.namesake_creation") { - return LineId::ErrorNamesakeCreation; - } else if (str == "error.not_found") { - return LineId::ErrorNotFound; - } else if (str == "error.something_went_wrong") { - return LineId::ErrorSomethingWentWrong; - } else if (str == "error.insufficient_rights") { - return LineId::ErrorInsufficientRights; - } else if (str == "error.illegal_command") { - return LineId::ErrorIllegalCommand; - } - - else if (str == "event.on") { - return LineId::EventOn; - } else if (str == "event.off") { - return LineId::EventOff; - } - - else if (str == "notify.sub") { - return LineId::NotifySub; - } else if (str == "notify.unsub") { - return LineId::NotifyUnsub; - } - - else if (str == "join.response") { - return LineId::JoinResponse; - } else if (str == "join.response_in_chat") { - return LineId::JoinResponseInChat; - } else if (str == "join.already_in") { - return LineId::JoinAlreadyIn; - } else if (str == "join.rejoined") { - return LineId::JoinRejoined; - } else if (str == "join.from_other_chat") { - return LineId::JoinFromOtherChat; - } else if (str == "join.not_allowed") { - return LineId::JoinNotAllowed; - } - - else if (str == "custom_command.new") { - return LineId::CustomcommandNew; - } else if (str == "custom_command.delete") { - return LineId::CustomcommandDelete; - } - - else if (str == "timer.new") { - return LineId::TimerNew; - } else if (str == "timer.delete") { - return LineId::TimerDelete; - } - - else if (str == "help.response") { - return LineId::HelpResponse; - } - - else { - return std::nullopt; - } - } - } -} diff --git a/src/localization/line_id.hpp b/src/localization/line_id.hpp deleted file mode 100644 index 41ceec6..0000000 --- a/src/localization/line_id.hpp +++ /dev/null @@ -1,56 +0,0 @@ -#pragma once - -#include <optional> -#include <string> - -namespace bot { - namespace loc { - enum LineId { - MsgOwner, - - ArgumentSubcommand, - ArgumentMessage, - ArgumentInterval, - ArgumentName, - ArgumentTarget, - ArgumentValue, - ArgumentAmount, - - ErrorTemplate, - ErrorNotEnoughArguments, - ErrorIncorrectArgument, - ErrorIncompatibleName, - ErrorNamesakeCreation, - ErrorNotFound, - ErrorSomethingWentWrong, - ErrorExternalAPIError, - ErrorInsufficientRights, - ErrorIllegalCommand, - - PingResponse, - - EventOn, - EventOff, - - NotifySub, - NotifyUnsub, - - JoinResponse, - JoinResponseInChat, - JoinAlreadyIn, - JoinRejoined, - JoinFromOtherChat, - JoinNotAllowed, - - CustomcommandNew, - CustomcommandDelete, - - TimerNew, - TimerDelete, - - HelpResponse - }; - - std::optional<LineId> string_to_line_id(const std::string &str); - } -} diff --git a/src/localization/localization.cpp b/src/localization/localization.cpp deleted file mode 100644 index 2742602..0000000 --- a/src/localization/localization.cpp +++ /dev/null @@ -1,132 +0,0 @@ -#include "localization.hpp" - -#include <algorithm> -#include <filesystem> -#include <fstream> -#include <map> -#include <nlohmann/json.hpp> -#include <optional> -#include <string> -#include <unordered_map> -#include <vector> - -#include "../utils/string.hpp" -#include "line_id.hpp" - -namespace bot { - namespace loc { - Localization::Localization(const std::string &folder_path) { - for (const auto &entry : - std::filesystem::directory_iterator(folder_path)) { - std::vector<std::string> file_name_parts = - utils::string::split_text(entry.path(), '/'); - std::string file_name = file_name_parts[file_name_parts.size() - 1]; - file_name = file_name.substr(0, file_name.length() - 5); - - std::unordered_map<LineId, std::string> lines = - this->load_from_file(entry.path()); - - this->localizations[file_name] = lines; - } - } - - std::unordered_map<LineId, std::string> Localization::load_from_file( - const std::string &file_path) { - std::ifstream ifs(file_path); - - std::unordered_map<LineId, std::string> map; - - nlohmann::json json; - ifs >> json; - - for (auto it = json.begin(); it != json.end(); ++it) { - std::optional<LineId> line_id = string_to_line_id(it.key()); - - if (line_id.has_value()) { - map[line_id.value()] = it.value(); - } - } - - ifs.close(); - return map; - } - - std::optional<std::string> Localization::get_localized_line( - const std::string &locale_id, const LineId &line_id) const { - auto locale_it = - std::find_if(this->localizations.begin(), this->localizations.end(), - [&](const auto &x) { return x.first == locale_id; }); - - if (locale_it == this->localizations.end()) { - return std::nullopt; - } - - auto line_it = - std::find_if(locale_it->second.begin(), locale_it->second.end(), - [&](const auto &x) { return x.first == line_id; }); - - if (line_it == locale_it->second.end()) { - return std::nullopt; - } - - return line_it->second; - } - - std::optional<std::string> Localization::get_formatted_line( - const std::string &locale_id, const LineId &line_id, - const std::vector<std::string> &args) const { - std::optional<std::string> o_line = - this->get_localized_line(locale_id, line_id); - - if (!o_line.has_value()) { - return std::nullopt; - } - - std::string line = o_line.value(); - - int pos = 0; - int index = 0; - - while ((pos = line.find("%s", pos)) != std::string::npos) { - line.replace(pos, 2, args[index]); - pos += args[index].size(); - ++index; - - if (index >= args.size()) { - break; - } - } - - return line; - } - - std::optional<std::string> Localization::get_formatted_line( - const command::Request &request, const LineId &line_id, - const std::vector<std::string> &args) const { - std::optional<std::string> o_line = this->get_formatted_line( - request.channel_preferences.get_locale(), line_id, args); - - if (!o_line.has_value()) { - return std::nullopt; - } - - std::string line = o_line.value(); - - std::map<std::string, std::string> token_map = { - {"{sender.alias_name}", request.user.get_alias_name()}, - {"{source.alias_name}", request.channel.get_alias_name()}, - {"{default.prefix}", DEFAULT_PREFIX}}; - - for (const auto &pair : token_map) { - int pos = line.find(pair.first); - - while (pos != std::string::npos) { - line.replace(pos, pair.first.length(), pair.second); - pos = line.find(pair.first, pos + pair.second.length()); - } - } - - return line; - } - } -} diff --git a/src/localization/localization.hpp b/src/localization/localization.hpp deleted file mode 100644 index 4626c68..0000000 --- a/src/localization/localization.hpp +++ /dev/null @@ -1,37 +0,0 @@ -#pragma once - -#include <optional> -#include <string> -#include <unordered_map> -#include <vector> - -#include "../commands/request.hpp" -#include "line_id.hpp" - -namespace bot { - namespace loc { - class Localization { - public: - Localization(const std::string &folder_path); - ~Localization() = default; - - std::optional<std::string> get_localized_line( - const std::string &locale_id, const LineId &line_id) const; - - std::optional<std::string> get_formatted_line( - const std::string &locale_id, const LineId &line_id, - const std::vector<std::string> &args) const; - - std::optional<std::string> get_formatted_line( - const command::Request &request, const LineId &line_id, - const std::vector<std::string> &args) const; - - private: - std::unordered_map<LineId, std::string> load_from_file( - const std::string &file_path); - std::unordered_map<std::string, std::unordered_map<LineId, std::string>> - localizations; - }; - } - -} |
