// // Created by bbr on 14.06.22.. // #include "message_source.h" #include // static instance of application static MessageSource *messageSource = nullptr; MessageSource *MessageSource::instance() { if (messageSource == nullptr) { messageSource = new MessageSource(); } return messageSource; } void MessageSource::loadDefaults() { messages.clear(); // TOOLBAR add("msg_toolbar_load_library", "Load library"); add("msg_toolbar_load_schema", "Load schema"); add("msg_toolbar_save_schema", "Save schema"); add("msg_toolbar_generate_comdel", "Generate comdel"); // SIDEBAR add("msg_sidebar_components", "Components:"); add("msg_sidebar_busses", "Busses:"); // VALUES add("msg_boolean_true", "True"); add("msg_boolean_false", "False"); // SUCCESS MESSAGES add("msg_dialog_success_title", "Success"); add("msg_dialog_success_validation", "No validation errors found!"); add("msg_dialog_success_comdel_generation", "Successfully generate COMDEL model!"); add("msg_dialog_success_save_schema", "Successfully saved schema"); // DEFAULT ACTIONS add("msg_dialog_actions_ok", "Ok"); add("msg_dialog_actions_cancel", "Cancel"); add("msg_dialog_actions_set", "Set"); add("msg_dialog_actions_update", "Update"); add("msg_dialog_actions_update_named", "Update {name}"); add("msg_dialog_actions_remove_named", "Remove {name}"); // PIN DIALOG add("msg_pin_update", "Update"); add("msg_pin_remove", "Remove"); add("msg_sa_pin_update_title", "Update {wire1} - {wire2}"); add("msg_sa_pin_remove_title", "Remove {wire1} - {wire2}"); add("msg_pin_update_action", "Update connection"); add("msg_pin_remove_action", "Remove connection"); // ERROR DIALOG add("msg_dialog_error_title", "Error"); add("msg_dialog_error_close", "Close"); // WARNING DIALOG add("msg_dialog_warning_title", "Warning"); // ATTRIBUTE DIALOG/ACTION add("msg_dialog_attribute_update", "Update {attribute}"); add("msg_dialog_attribute_set", "Set {attribute}"); // NAME DIALOG add("msg_dialog_name_update", "Update name"); // MEMORY DIALOG/ACTION add("msg_dialog_memory_update", "Update memory"); add("msg_dialog_memory_set", "Set memory"); add("msg_dialog_memory_default", "No memory selected"); // CONNECTION add("msg_dialog_sa_pin_set", "Set wire"); // VALIDATORS add("msg_validators_component_min_count", "Missing instances of component {componentName}. Required at least {min}, found {count}!"); add("msg_validators_component_max_count", "Too many instances of component {componentname}. Expected at most {max}, found {count}!"); add("msg_validators_bus_min_count", "Missing instances of bus {busName}. Required at least {min}, found {count}!"); add("msg_validators_bus_max_count", "Too many instances of bus {busName}. Expected at most {max}, found {count}!"); add("msg_validators_memory_not_found", "Cannot find memory instance {memoryReference}"); add("msg_validators_duplicates_found", "Found multiple instances with name {instanceName}"); // LOADING/SAVING DIALOGS add("msg_files_load_library", "Open library"); add("msg_files_load_library_format", "COMDEL library (*.csl)"); add("msg_files_load_schema", "Open schema"); add("msg_files_load_schema_format", "COMDEL schema (*.csch)"); add("msg_files_store_schema", "Store schema"); add("msg_files_store_schema_format", "COMDEL schema (*.csch)"); add("msg_files_store_comdel", "Store COMDEL system"); add("msg_files_store_comdel_format", "COMDEL system (*.system)"); } void MessageSource::add(const std::string& key, std::string message) { messages[key] = message; } std::string MessageSource::get(const std::string& key, std::map parametars) { std::string message; if(messages.count(key) == 1) { // if key not found in translations use key as message message = messages[key]; } else { message = key; } message = populateMessage(message, parametars); return message; } std::string MessageSource::get(const std::string &key) { return get(key, {}); } std::string MessageSource::populateMessage(std::string message, std::map parametars) { for (auto &[key, value]: parametars) { message = replacePlaceholder(message, key, value); } return message; } std::string MessageSource::replacePlaceholder(std::string message, const std::string key, std::string value) { auto wholeKey = "{" + key + "}"; auto found = message.find(wholeKey); while (found != std::string::npos) { message.replace(found, wholeKey.length(), value); found = message.find(key); } return message; } void MessageSource::load(std::map _messages) { loadDefaults(); for (auto &[key, value]: _messages) { messages[key] = value; } } std::map MessageSource::map(std::map values) { std::map parametars; for (auto &[key, value]: values) { parametars[key] = value.string(); } return parametars; }