diff --git a/data/campaigns/Eastern_Invasion/lua/bandits.lua b/data/campaigns/Eastern_Invasion/lua/bandits.lua
index d745d8fd90a..e6a831e4249 100644
--- a/data/campaigns/Eastern_Invasion/lua/bandits.lua
+++ b/data/campaigns/Eastern_Invasion/lua/bandits.lua
@@ -81,7 +81,7 @@ function wml_actions.bandit_village_capture(cfg)
vars.villages_visited = visited + 1
wesnoth.game_events.fire("addogin_advice", x, y, unit);
- wml.fire("message" , { x = x , y = y , message = _"They're here!"})
+ wml.fire("message" , { x = x , y = y , message = _"They’re here!"})
bandits_found(x,y)
return
diff --git a/data/campaigns/World_Conquest/lua/campaign/enemy_themed.lua b/data/campaigns/World_Conquest/lua/campaign/enemy_themed.lua
index 5a66d511c2c..663a85cf5c3 100644
--- a/data/campaigns/World_Conquest/lua/campaign/enemy_themed.lua
+++ b/data/campaigns/World_Conquest/lua/campaign/enemy_themed.lua
@@ -2,7 +2,7 @@ local _ = wesnoth.textdomain 'wesnoth-wc'
local on_event = wesnoth.require("on_event")
local strings = {
- enemy_pet = _ "$name|'s pet"
+ enemy_pet = _ "$name|’s pet"
}
-- in the later scenarios there is a small chance that a scenario will be themed for an enemy
-- which means in paticular changing the castle of the enemy accorign to the unit type of that
diff --git a/src/addon/validation.cpp b/src/addon/validation.cpp
index 091a9a77243..d4a774e9f66 100644
--- a/src/addon/validation.cpp
+++ b/src/addon/validation.cpp
@@ -500,7 +500,7 @@ std::string addon_check_status_desc(unsigned int code)
},
{
ADDON_CHECK_STATUS::AUTH_TYPE_MISMATCH,
- N_("The add-on's forum_auth attribute does not match what was previously uploaded.")
+ N_("The add-on’s forum_auth attribute does not match what was previously uploaded.")
},
//
diff --git a/src/editor/map/map_context.cpp b/src/editor/map/map_context.cpp
index 0d86bd349da..49c43a1f3e3 100644
--- a/src/editor/map/map_context.cpp
+++ b/src/editor/map/map_context.cpp
@@ -261,7 +261,7 @@ map_context::map_context(const game_config_view& game_config, const std::string&
try {
// 5.1 The file can be loaded by the editor as a scenario
if(file_string.find("<<") != std::string::npos) {
- throw editor_map_load_exception(filename, _("Found the characters '<<' indicating inline lua is present - aborting"));
+ throw editor_map_load_exception(filename, _("Found the characters ‘<<’ indicating inline lua is present — aborting"));
}
load_scenario();
} catch(const std::exception&) {
diff --git a/src/game_config_manager.cpp b/src/game_config_manager.cpp
index c071d7b03b8..36cbebb704c 100644
--- a/src/game_config_manager.cpp
+++ b/src/game_config_manager.cpp
@@ -298,7 +298,7 @@ void game_config_manager::load_game_config(bool reload_everything, const game_cl
events::call_in_main_thread([&]() {
gui2::dialogs::wml_error::display(
_("Error loading core data."),
- _("Can't locate the default core.")
+ _("Can’t locate the default core.")
+ '\n' + _("The game will now exit."));
});
throw;
diff --git a/src/game_initialization/depcheck.cpp b/src/game_initialization/depcheck.cpp
index 7649255587d..f0baf677b10 100644
--- a/src/game_initialization/depcheck.cpp
+++ b/src/game_initialization/depcheck.cpp
@@ -513,7 +513,7 @@ bool manager::change_scenario(const std::string& id)
{
// Checking for missing dependencies
if(!get_required_not_installed(elem(id, "scenario")).empty()) {
- std::string msg = _("Scenario can't be activated. Some dependencies are missing: ");
+ std::string msg = _("Scenario can’t be activated. Some dependencies are missing: ");
msg += utils::join(get_required_not_installed(elem(id, "scenario")), ", ");
@@ -582,7 +582,7 @@ bool manager::change_era(const std::string& id)
{
// Checking for missing dependencies
if(!get_required_not_installed(elem(id, "era")).empty()) {
- std::string msg = _("Era can't be activated. Some dependencies are missing: ");
+ std::string msg = _("Era can’t be activated. Some dependencies are missing: ");
msg += utils::join(get_required_not_installed(elem(id, "era")), ", ");
failure_dialog(msg);
diff --git a/src/game_initialization/lobby_data.cpp b/src/game_initialization/lobby_data.cpp
index 3be580e2721..1dbf5286d13 100644
--- a/src/game_initialization/lobby_data.cpp
+++ b/src/game_initialization/lobby_data.cpp
@@ -441,7 +441,7 @@ game_info::addon_req game_info::check_addon_version_compatibility(const config&
<< "'";
r.outcome = addon_req::CANNOT_SATISFY;
- r.message = VGETTEXT("The host's version of $addon is incompatible. They have version $host_ver while you have version $local_ver.", {
+ r.message = VGETTEXT("The host’s version of $addon is incompatible. They have version $host_ver while you have version $local_ver.", {
{"addon", local_item["addon_title"].str()},
{"host_ver", remote_ver.str()},
{"local_ver", local_ver.str()}
diff --git a/src/game_initialization/mp_game_utils.cpp b/src/game_initialization/mp_game_utils.cpp
index 79144157dd8..6d8ecbc8be3 100644
--- a/src/game_initialization/mp_game_utils.cpp
+++ b/src/game_initialization/mp_game_utils.cpp
@@ -100,7 +100,7 @@ config initial_level_config(saved_game& state)
if(!era_cfg) {
if(params.saved_game == saved_game_mode::type::no) {
- throw config::error(VGETTEXT("Cannot find era '$era'", {{"era", era}}));
+ throw config::error(VGETTEXT("Cannot find era ‘$era’", {{"era", era}}));
}
// FIXME: @todo We should tell user about missing era but still load game...
diff --git a/src/game_initialization/multiplayer.cpp b/src/game_initialization/multiplayer.cpp
index 334ca7fbe88..e1c99326fbf 100644
--- a/src/game_initialization/multiplayer.cpp
+++ b/src/game_initialization/multiplayer.cpp
@@ -265,7 +265,7 @@ std::unique_ptr mp_manager::open_connection(std::string hos
i18n_symbols["required_version"] = version;
i18n_symbols["your_version"] = game_config::wesnoth_version.str();
- const std::string errorstring = VGETTEXT("The server accepts versions '$required_version', but you are using version '$your_version'", i18n_symbols);
+ const std::string errorstring = VGETTEXT("The server accepts versions ‘$required_version’, but you are using version ‘$your_version’", i18n_symbols);
throw wesnothd_error(errorstring);
}
diff --git a/src/game_initialization/playcampaign.cpp b/src/game_initialization/playcampaign.cpp
index 36b4ca755e4..a7b49c68ab2 100644
--- a/src/game_initialization/playcampaign.cpp
+++ b/src/game_initialization/playcampaign.cpp
@@ -276,7 +276,7 @@ level_result::type campaign_controller::play_game()
utils::string_map symbols;
symbols["scenario"] = state_.get_scenario_id();
- std::string message = _("Unknown scenario: '$scenario|'");
+ std::string message = _("Unknown scenario: ‘$scenario|’");
message = utils::interpolate_variables_into_string(message, &symbols);
gui2::show_error_message(message);
diff --git a/src/generators/default_map_generator_job.cpp b/src/generators/default_map_generator_job.cpp
index fcab7f53ad9..867f6510e74 100644
--- a/src/generators/default_map_generator_job.cpp
+++ b/src/generators/default_map_generator_job.cpp
@@ -703,7 +703,7 @@ std::string default_map_generator_job::default_generate_map(generator_data data,
<< " show_labels=" << data.show_labels;
// Odd widths are nasty
- VALIDATE(is_even(data.width), _("Random maps with an odd width aren't supported."));
+ VALIDATE(is_even(data.width), _("Random maps with an odd width aren’t supported."));
// Try to find configuration for castles
auto castle_config = cfg.optional_child("castle");
@@ -966,7 +966,7 @@ std::string default_map_generator_job::default_generate_map(generator_data data,
if(best_ranking == 0) {
ERR_NG << "No castle location found, for " << data.nplayers << " players aborting. ";
- const std::string error = _("No valid castle location found. Too many or too few mountain hexes? (please check the 'max hill size' parameter)");
+ const std::string error = _("No valid castle location found. Too many or too few mountain hexes? (please check the ‘max hill size’ parameter)");
throw mapgen_exception(error);
}
diff --git a/src/gui/core/canvas.cpp b/src/gui/core/canvas.cpp
index f60e3c353ef..2dfc93b13fa 100644
--- a/src/gui/core/canvas.cpp
+++ b/src/gui/core/canvas.cpp
@@ -274,7 +274,7 @@ void image_shape::dimension_validation(unsigned value, const std::string& name,
{
const int as_int = static_cast(value);
- VALIDATE_WITH_DEV_MESSAGE(as_int >= 0, _("Image doesn't fit on canvas."),
+ VALIDATE_WITH_DEV_MESSAGE(as_int >= 0, _("Image doesn’t fit on canvas."),
formatter() << "Image '" << name << "', " << key << " = " << as_int << "."
);
}
diff --git a/src/gui/core/window_builder.cpp b/src/gui/core/window_builder.cpp
index ef2765764b9..16abf5b16d0 100644
--- a/src/gui/core/window_builder.cpp
+++ b/src/gui/core/window_builder.cpp
@@ -217,7 +217,7 @@ builder_grid::builder_grid(const config& cfg)
}
if(col == 0) {
- const t_string msg = VGETTEXT("Grid '$grid' row $row must have at least one column.", {
+ const t_string msg = VGETTEXT("Grid ‘$grid’ row $row must have at least one column.", {
{"grid", id}, {"row", std::to_string(rows)}
});
@@ -229,7 +229,7 @@ builder_grid::builder_grid(const config& cfg)
if(rows == 1) {
cols = col;
} else if(col != cols) {
- const t_string msg = VGETTEXT("Grid '$grid' row $row has a differing number of columns ($found found, $expected expected)", {
+ const t_string msg = VGETTEXT("Grid ‘$grid’ row $row has a differing number of columns ($found found, $expected expected)", {
{"grid", id}, {"row", std::to_string(rows)}, {"found", std::to_string(col)}, {"expected", std::to_string(cols)}
});
diff --git a/src/gui/dialogs/editor/custom_tod.cpp b/src/gui/dialogs/editor/custom_tod.cpp
index 75c79ebe2c8..e69b02a9300 100644
--- a/src/gui/dialogs/editor/custom_tod.cpp
+++ b/src/gui/dialogs/editor/custom_tod.cpp
@@ -175,7 +175,7 @@ void custom_tod::select_file(const std::string& default_dir)
if(dlg.show()) {
dn = dlg.path();
const std::string& message
- = _("This file is outside Wesnoth's data dirs. Do you wish to copy it into your add-on?");
+ = _("This file is outside Wesnoth’s data dirs. Do you wish to copy it into your add-on?");
if(data.first == "image") {
if (!filesystem::to_asset_path(dn, addon_id_, "images")) {
diff --git a/src/gui/dialogs/editor/edit_unit.cpp b/src/gui/dialogs/editor/edit_unit.cpp
index 3f86bb89473..f066f7a5604 100644
--- a/src/gui/dialogs/editor/edit_unit.cpp
+++ b/src/gui/dialogs/editor/edit_unit.cpp
@@ -317,7 +317,7 @@ void editor_edit_unit::select_file(const std::string& default_dir, const std::st
std::string dn = dlg.path();
const std::string& message
- = _("This file is outside Wesnoth's data dirs. Do you wish to copy it into your add-on?");
+ = _("This file is outside Wesnoth’s data dirs. Do you wish to copy it into your add-on?");
if(id_stem == "unit_image") {
diff --git a/src/gui/dialogs/lua_interpreter.cpp b/src/gui/dialogs/lua_interpreter.cpp
index 52ac5f8b667..e8a2d33f543 100644
--- a/src/gui/dialogs/lua_interpreter.cpp
+++ b/src/gui/dialogs/lua_interpreter.cpp
@@ -624,7 +624,7 @@ void lua_interpreter::display(lua_kernel_base * lk) {
#ifndef ALWAYS_HAVE_LUA_CONSOLE
if(!game_config::debug && resources::controller) {
display_chat_manager& chat_man = resources::controller->get_display().get_chat_manager();
- const std::string& message = _("The lua console can only be used in debug mode! (Run ':debug' first)");
+ const std::string& message = _("The lua console can only be used in debug mode! (Run ‘:debug’ first)");
chat_man.add_chat_message(time(nullptr), _("lua console"), 0, message, events::chat_handler::MESSAGE_PRIVATE, false);
return;
}
diff --git a/src/gui/dialogs/multiplayer/lobby.cpp b/src/gui/dialogs/multiplayer/lobby.cpp
index e7185f3381c..3e811409f2e 100644
--- a/src/gui/dialogs/multiplayer/lobby.cpp
+++ b/src/gui/dialogs/multiplayer/lobby.cpp
@@ -170,7 +170,7 @@ bool handle_addon_requirements_gui(const std::vector parse_list_data(const config& data, const unsign
auto cols = row.child_range("column");
VALIDATE(static_cast(cols.size()) == req_cols,
- _("'list_data' must have the same number of columns as the 'list_definition'.")
+ _("‘list_data’ must have the same number of columns as the ‘list_definition’.")
);
for(const auto& c : cols) {
@@ -771,7 +771,7 @@ builder_listbox::builder_listbox(const config& cfg)
list_builder = std::make_shared(*l);
assert(list_builder);
- VALIDATE(list_builder->rows == 1, _("A 'list_definition' should contain one row."));
+ VALIDATE(list_builder->rows == 1, _("A ‘list_definition’ should contain one row."));
if(cfg.has_child("list_data")) {
list_data = parse_list_data(cfg.mandatory_child("list_data"), list_builder->cols);
@@ -814,7 +814,7 @@ builder_horizontal_listbox::builder_horizontal_listbox(const config& cfg)
list_builder = std::make_shared(*l);
assert(list_builder);
- VALIDATE(list_builder->rows == 1, _("A 'list_definition' should contain one row."));
+ VALIDATE(list_builder->rows == 1, _("A ‘list_definition’ should contain one row."));
if(cfg.has_child("list_data")) {
list_data = parse_list_data(cfg.mandatory_child("list_data"), list_builder->cols);
@@ -857,7 +857,7 @@ builder_grid_listbox::builder_grid_listbox(const config& cfg)
list_builder = std::make_shared(*l);
assert(list_builder);
- VALIDATE(list_builder->rows == 1, _("A 'list_definition' should contain one row."));
+ VALIDATE(list_builder->rows == 1, _("A ‘list_definition’ should contain one row."));
if(cfg.has_child("list_data")) {
list_data = parse_list_data(cfg.mandatory_child("list_data"), list_builder->cols);
diff --git a/src/gui/widgets/multi_page.cpp b/src/gui/widgets/multi_page.cpp
index ba5b5ed88cb..83d009dcb09 100644
--- a/src/gui/widgets/multi_page.cpp
+++ b/src/gui/widgets/multi_page.cpp
@@ -216,8 +216,8 @@ builder_multi_page::builder_multi_page(const config& cfg)
}
VALIDATE(col == builder->cols,
- _("'list_data' must have "
- "the same number of columns as the 'list_definition'."));
+ _("‘list_data’ must have "
+ "the same number of columns as the ‘list_definition’."));
}
}
diff --git a/src/gui/widgets/slider.cpp b/src/gui/widgets/slider.cpp
index 96407902098..1b92bbcbf5b 100644
--- a/src/gui/widgets/slider.cpp
+++ b/src/gui/widgets/slider.cpp
@@ -353,7 +353,7 @@ std::unique_ptr builder_slider::build() const
if(!value_labels_.empty()) {
VALIDATE(value_labels_.size() == static_cast(widget->get_item_count()),
- _("The number of value_labels and values don't match."));
+ _("The number of value_labels and values don’t match."));
widget->set_value_labels(value_labels_);
diff --git a/src/gui/widgets/tree_view.cpp b/src/gui/widgets/tree_view.cpp
index 82ee72b42a8..a497f4055b1 100644
--- a/src/gui/widgets/tree_view.cpp
+++ b/src/gui/widgets/tree_view.cpp
@@ -322,7 +322,7 @@ tree_node::tree_node(const config& cfg)
VALIDATE(!id.empty(), missing_mandatory_wml_key("node", "id"));
// TODO: interpolate this value into the error message
- VALIDATE(id != tree_view::root_node_id, _("[node]id 'root' is reserved for the implementation."));
+ VALIDATE(id != tree_view::root_node_id, _("[node]id ‘root’ is reserved for the implementation."));
auto node_definition = VALIDATE_WML_CHILD(cfg, "node_definition", missing_mandatory_wml_tag("node", "node_definition"));
builder = std::make_shared(node_definition);
diff --git a/src/gui/widgets/window.cpp b/src/gui/widgets/window.cpp
index 00c349565e8..614934952a4 100644
--- a/src/gui/widgets/window.cpp
+++ b/src/gui/widgets/window.cpp
@@ -418,7 +418,7 @@ void window::finish_build(const builder_window::window_resolution& definition)
{
for(const auto& lg : definition.linked_groups) {
if(has_linked_size_group(lg.id)) {
- t_string msg = VGETTEXT("Linked '$id' group has multiple definitions.", {{"id", lg.id}});
+ t_string msg = VGETTEXT("Linked ‘$id’ group has multiple definitions.", {{"id", lg.id}});
FAIL(msg);
}
@@ -902,7 +902,7 @@ void window::layout()
click_dismiss_button = btn;
}
VALIDATE(click_dismiss_button,
- _("Click dismiss needs a 'click_dismiss' or 'ok' button."));
+ _("Click dismiss needs a ‘click_dismiss’ or ‘ok’ button."));
}
/***** Layout. *****/
@@ -928,7 +928,7 @@ void window::layout()
<< settings::screen_width << ',' << settings::screen_height << '.';
throw wml_exception(_("Failed to show a dialog, "
- "which doesn't fit on the screen."),
+ "which doesn’t fit on the screen."),
sstr.str());
}
@@ -965,7 +965,7 @@ void window::layout()
<< '.';
throw wml_exception(_("Failed to show a dialog, "
- "which doesn't fit on the screen."),
+ "which doesn’t fit on the screen."),
sstr.str());
}
}
diff --git a/src/map_command_handler.hpp b/src/map_command_handler.hpp
index 58fa009d67c..d648fd667e7 100644
--- a/src/map_command_handler.hpp
+++ b/src/map_command_handler.hpp
@@ -222,11 +222,11 @@ public:
}
// If a proposal for a command is found, print it
if(has_command_proposal) {
- print("help", VGETTEXT("Unknown command '$command', did you mean '$command_proposal'? try $help_command "
+ print("help", VGETTEXT("Unknown command ‘$command’, did you mean ‘$command_proposal’? try $help_command "
"for a list of available commands.", symbols));
}
else {
- print("help", VGETTEXT("Unknown command '$command', try $help_command "
+ print("help", VGETTEXT("Unknown command ‘$command’, try $help_command "
"for a list of available commands.", symbols));
}
}
diff --git a/src/menu_events.cpp b/src/menu_events.cpp
index c9a692afaac..41deb6c206b 100644
--- a/src/menu_events.cpp
+++ b/src/menu_events.cpp
@@ -391,7 +391,7 @@ void menu_handler::recall(int side_num, const map_location& last_hex)
return;
}
if(recall_list_team.empty()) {
- gui2::show_transient_message("", _("You currently can't recall at the highlighted location."));
+ gui2::show_transient_message("", _("You currently can’t recall at the highlighted location."));
return;
}
@@ -1239,7 +1239,7 @@ protected:
register_command(
"layers", &console_handler::do_layers, _("Debug layers from terrain under the mouse."), "", "D");
register_command("fps", &console_handler::do_fps, _("Display and log fps (Frames Per Second)."));
- register_command("benchmark", &console_handler::do_benchmark, _("Similar to the 'fps' command, but also forces everything to redraw instead of only things that have changed."));
+ register_command("benchmark", &console_handler::do_benchmark, _("Similar to the ‘fps’ command, but also forces everything to redraw instead of only things that have changed."));
register_command("save", &console_handler::do_save, _("Save game."));
register_alias("save", "w");
register_command("quit", &console_handler::do_quit, _("Quit game."));
@@ -1250,7 +1250,7 @@ protected:
register_command("ignore_replay_errors", &console_handler::do_ignore_replay_errors, _("Ignore replay errors."));
register_command("nosaves", &console_handler::do_nosaves, _("Disable autosaves."));
register_command("next_level", &console_handler::do_next_level,
- _("Advance to the next scenario, or scenario identified by 'id'"), _(""), "DS");
+ _("Advance to the next scenario, or scenario identified by ‘id’"), _(""), "DS");
register_alias("next_level", "n");
register_command("choose_level", &console_handler::do_choose_level, _("Choose next scenario"), "", "DS");
register_alias("choose_level", "cl");
@@ -1286,7 +1286,7 @@ protected:
// register_command("unbuff", &console_handler::do_unbuff,
// _("Remove a trait from a unit. (Does not work yet.)"), "", "D");
register_command("discover", &console_handler::do_discover, _("Discover all units in help."), "");
- register_command("undiscover", &console_handler::do_undiscover, _("'Undiscover' all units in help."), "");
+ register_command("undiscover", &console_handler::do_undiscover, _("‘Undiscover’ all units in help."), "");
register_command("create", &console_handler::do_create, _("Create a unit."), _(""), "DS");
register_command("fog", &console_handler::do_fog, _("Toggle fog for the current player."), "", "DS");
register_command("shroud", &console_handler::do_shroud, _("Toggle shroud for the current player."), "", "DS");
@@ -1467,10 +1467,10 @@ void console_handler::do_droid()
symbols["side"] = std::to_string(side);
if(side < 1 || side > menu_handler_.pc_.get_teams().size()) {
- command_failed(VGETTEXT("Can't droid invalid side: '$side'.", symbols));
+ command_failed(VGETTEXT("Can’t droid invalid side: ‘$side’.", symbols));
return;
} else if(menu_handler_.board().get_team(side).is_network()) {
- command_failed(VGETTEXT("Can't droid networked side: '$side'.", symbols));
+ command_failed(VGETTEXT("Can’t droid networked side: ‘$side’.", symbols));
return;
} else if(menu_handler_.board().get_team(side).is_local()) {
bool changed = false;
@@ -1482,7 +1482,7 @@ void console_handler::do_droid()
if(action == "on") {
if(is_ai && !is_your_turn) {
- command_failed(_("It is not allowed to change a side from AI to human control when it's not your turn."));
+ command_failed(_("It is not allowed to change a side from AI to human control when it’s not your turn."));
return;
}
if(!is_human || !is_droid) {
@@ -1492,13 +1492,13 @@ void console_handler::do_droid()
if(is_ai) {
menu_handler_.pc_.send_to_wesnothd(config {"change_controller", config {"side", side, "player", prefs::get().login(), "to", side_controller::human}});
}
- print(get_cmd(), VGETTEXT("Side '$side' controller is now controlled by: AI.", symbols));
+ print(get_cmd(), VGETTEXT("Side ‘$side’ controller is now controlled by: AI.", symbols));
} else {
- print(get_cmd(), VGETTEXT("Side '$side' is already droided.", symbols));
+ print(get_cmd(), VGETTEXT("Side ‘$side’ is already droided.", symbols));
}
} else if(action == "off") {
if(is_ai && !is_your_turn) {
- command_failed(_("It is not allowed to change a side from AI to human control when it's not your turn."));
+ command_failed(_("It is not allowed to change a side from AI to human control when it’s not your turn."));
return;
}
if(!is_human || !is_proxy_human) {
@@ -1508,13 +1508,13 @@ void console_handler::do_droid()
if(is_ai) {
menu_handler_.pc_.send_to_wesnothd(config {"change_controller", config {"side", side, "player", prefs::get().login(), "to", side_controller::human}});
}
- print(get_cmd(), VGETTEXT("Side '$side' controller is now controlled by: human.", symbols));
+ print(get_cmd(), VGETTEXT("Side ‘$side’ controller is now controlled by: human.", symbols));
} else {
- print(get_cmd(), VGETTEXT("Side '$side' is already not droided.", symbols));
+ print(get_cmd(), VGETTEXT("Side ‘$side’ is already not droided.", symbols));
}
} else if(action == "full") {
if(!is_your_turn) {
- command_failed(_("It is not allowed to change a side from human to AI control when it's not your turn."));
+ command_failed(_("It is not allowed to change a side from human to AI control when it’s not your turn."));
return;
}
if(!is_ai || !is_droid) {
@@ -1524,13 +1524,13 @@ void console_handler::do_droid()
if(is_human || is_proxy_human) {
menu_handler_.pc_.send_to_wesnothd(config {"change_controller", config {"side", side, "player", prefs::get().login(), "to", side_controller::ai}});
}
- print(get_cmd(), VGETTEXT("Side '$side' controller is now fully controlled by: AI.", symbols));
+ print(get_cmd(), VGETTEXT("Side ‘$side’ controller is now fully controlled by: AI.", symbols));
} else {
- print(get_cmd(), VGETTEXT("Side '$side' is already fully AI controlled.", symbols));
+ print(get_cmd(), VGETTEXT("Side ‘$side’ is already fully AI controlled.", symbols));
}
} else if(action == "") {
if(is_ai && !is_your_turn) {
- command_failed(_("It is not allowed to change a side from AI to human control when it's not your turn."));
+ command_failed(_("It is not allowed to change a side from AI to human control when it’s not your turn."));
return;
}
if(is_ai || is_droid) {
@@ -1540,7 +1540,7 @@ void console_handler::do_droid()
if(is_ai) {
menu_handler_.pc_.send_to_wesnothd(config {"change_controller", config {"side", side, "player", prefs::get().login(), "to", side_controller::human}});
}
- print(get_cmd(), VGETTEXT("Side '$side' controller is now controlled by: human.", symbols));
+ print(get_cmd(), VGETTEXT("Side ‘$side’ controller is now controlled by: human.", symbols));
} else {
menu_handler_.board().get_team(side).make_human();
menu_handler_.board().get_team(side).make_droid();
@@ -1548,10 +1548,10 @@ void console_handler::do_droid()
if(is_ai) {
menu_handler_.pc_.send_to_wesnothd(config {"change_controller", config {"side", side, "player", prefs::get().login(), "to", side_controller::human}});
}
- print(get_cmd(), VGETTEXT("Side '$side' controller is now controlled by: AI.", symbols));
+ print(get_cmd(), VGETTEXT("Side ‘$side’ controller is now controlled by: AI.", symbols));
}
} else {
- print(get_cmd(), VGETTEXT("Invalid action provided for side '$side'. Valid actions are: on, off, full.", symbols));
+ print(get_cmd(), VGETTEXT("Invalid action provided for side ‘$side’. Valid actions are: on, off, full.", symbols));
}
if(team_num_ == side && changed) {
@@ -1560,7 +1560,7 @@ void console_handler::do_droid()
}
}
} else {
- command_failed(VGETTEXT("Side '$side' is not a human or AI player.", symbols));
+ command_failed(VGETTEXT("Side ‘$side’ is not a human or AI player.", symbols));
return;
}
menu_handler_.textbox_info_.close();
@@ -1596,17 +1596,17 @@ void console_handler::do_idle()
if(side < 1 || side > menu_handler_.pc_.get_teams().size()) {
utils::string_map symbols;
symbols["side"] = side_s;
- command_failed(VGETTEXT("Can't idle invalid side: '$side'.", symbols));
+ command_failed(VGETTEXT("Can’t idle invalid side: ‘$side’.", symbols));
return;
} else if(menu_handler_.board().get_team(side).is_network()) {
utils::string_map symbols;
symbols["side"] = std::to_string(side);
- command_failed(VGETTEXT("Can't idle networked side: '$side'.", symbols));
+ command_failed(VGETTEXT("Can’t idle networked side: ‘$side’.", symbols));
return;
} else if(menu_handler_.board().get_team(side).is_local_ai()) {
utils::string_map symbols;
symbols["side"] = std::to_string(side);
- command_failed(VGETTEXT("Can't idle local ai side: '$side'.", symbols));
+ command_failed(VGETTEXT("Can’t idle local ai side: ‘$side’.", symbols));
return;
} else if(menu_handler_.board().get_team(side).is_local_human()) {
if(menu_handler_.board().get_team(side).is_idle() ? action == " on" : action == " off") {
@@ -1667,7 +1667,7 @@ void console_handler::do_control()
if(it_t == teams.end()) {
utils::string_map symbols;
symbols["side"] = side;
- command_failed(VGETTEXT("Can't change control of invalid side: '$side'.", symbols));
+ command_failed(VGETTEXT("Can’t change control of invalid side: ‘$side’.", symbols));
return;
} else {
side_num = it_t->side();
@@ -1677,7 +1677,7 @@ void console_handler::do_control()
if(side_num < 1 || side_num > menu_handler_.pc_.get_teams().size()) {
utils::string_map symbols;
symbols["side"] = side;
- command_failed(VGETTEXT("Can't change control of out-of-bounds side: '$side'.", symbols));
+ command_failed(VGETTEXT("Can’t change control of out-of-bounds side: ‘$side’.", symbols));
return;
}
@@ -1694,14 +1694,14 @@ void console_handler::do_controller()
} catch(const bad_lexical_cast&) {
utils::string_map symbols;
symbols["side"] = side;
- command_failed(VGETTEXT("Can't query control of invalid side: '$side'.", symbols));
+ command_failed(VGETTEXT("Can’t query control of invalid side: ‘$side’.", symbols));
return;
}
if(side_num < 1 || side_num > menu_handler_.pc_.get_teams().size()) {
utils::string_map symbols;
symbols["side"] = side;
- command_failed(VGETTEXT("Can't query control of out-of-bounds side: '$side'.", symbols));
+ command_failed(VGETTEXT("Can’t query control of out-of-bounds side: ‘$side’.", symbols));
return;
}
@@ -1977,7 +1977,7 @@ void console_handler::do_unit()
utils::string_map symbols;
symbols["unit"] = get_arg(1);
command_failed(VGETTEXT(
- "Debug command 'unit: $unit' failed: no unit selected or hovered over.",
+ "Debug command ‘unit: $unit’ failed: no unit selected or hovered over.",
symbols));
return;
}
@@ -1995,7 +1995,7 @@ void console_handler::do_unit()
utils::string_map symbols;
symbols["alignment"] = get_arg(1);
command_failed(VGETTEXT(
- "Invalid alignment: '$alignment', needs to be one of lawful, neutral, chaotic, or liminal.",
+ "Invalid alignment: ‘$alignment’, needs to be one of lawful, neutral, chaotic, or liminal.",
symbols));
return;
}
diff --git a/src/playsingle_controller.cpp b/src/playsingle_controller.cpp
index b2606a4bfef..d04e7e500c1 100644
--- a/src/playsingle_controller.cpp
+++ b/src/playsingle_controller.cpp
@@ -180,7 +180,7 @@ void playsingle_controller::play_scenario_init(const config& level)
gui2::show_transient_message(
// TODO: find a better title
_("Game Error"),
- _("This multiplayer game uses an alternative random mode, if you don't know what this message means, then "
+ _("This multiplayer game uses an alternative random mode, if you don’t know what this message means, then "
"most likely someone is cheating or someone reloaded a corrupt game."));
}
}
diff --git a/src/savegame.cpp b/src/savegame.cpp
index d91634425be..b7280b6642c 100644
--- a/src/savegame.cpp
+++ b/src/savegame.cpp
@@ -428,7 +428,7 @@ bool savegame::check_overwrite()
bool savegame::check_filename(const std::string& filename)
{
if(filesystem::is_compressed_file(filename)) {
- gui2::show_error_message(_("Save names should not end on '.gz' or '.bz2'. Please remove the extension."));
+ gui2::show_error_message(_("Save names should not end on ‘.gz’ or ‘.bz2’. Please remove the extension."));
return false;
} else if(!filesystem::is_legal_user_file_name(filename)) {
// This message is not all-inclusive. This is on purpose. Few people
diff --git a/src/serialization/parser.cpp b/src/serialization/parser.cpp
index 950657202ee..e8440ab9452 100644
--- a/src/serialization/parser.cpp
+++ b/src/serialization/parser.cpp
@@ -476,7 +476,7 @@ void parser::error(const std::string& error_type, const std::string& pos_format)
i18n_symbols["value"] = tok_.current_token().value;
i18n_symbols["previous_value"] = tok_.previous_token().value;
- const std::string& tok_state = _("Value: '$value' Previous: '$previous_value'");
+ const std::string& tok_state = _("Value: ‘$value’ Previous: ‘$previous_value’");
#else
const std::string& tok_state = "";
#endif
diff --git a/src/tests/gui/test_gui2.cpp b/src/tests/gui/test_gui2.cpp
index da501d34568..403ec072a14 100644
--- a/src/tests/gui/test_gui2.cpp
+++ b/src/tests/gui/test_gui2.cpp
@@ -739,7 +739,7 @@ BOOST_AUTO_TEST_CASE(test_make_test_fake)
message dlg("title", "message", true, false, false);
dlg.show(1);
} catch(const wml_exception& e) {
- BOOST_CHECK(e.user_message == _("Failed to show a dialog, which doesn't fit on the screen."));
+ BOOST_CHECK(e.user_message == _("Failed to show a dialog, which doesn’t fit on the screen."));
return;
} catch(...) {
BOOST_ERROR("Didn't catch the wanted exception, instead caught " << utils::get_unknown_exception_type() << ".");