Add VNGETTEXT macro to complement the VGETTEXT macro

This commit is contained in:
Celtic Minstrel 2017-04-15 23:36:57 -04:00
parent cb333dbfdf
commit b7aea011f9
9 changed files with 29 additions and 17 deletions

View file

@ -28,6 +28,7 @@ set(GETTEXT_XGETTEXT_OPTIONS
--keyword=_n:1,2
--keyword=sngettext:1,2
--keyword=vngettext:1,2
--keyword=VNGETTEXT:1,2
)
find_program(GETTEXT_MSGCAT_EXECUTABLE msgcat)

View file

@ -59,7 +59,7 @@ if "pot-update" in COMMAND_LINE_TARGETS:
"""xgettext --force-po --default-domain=%s --directory=. --add-comments=TRANSLATORS: \
--from-code=UTF-8 --sort-by-file \
--keyword=_ --keyword=N_ --keyword=sgettext --keyword=vgettext --keyword=VGETTEXT \
--keyword=_n:1,2 --keyword=sngettext:1,2 --keyword=vngettext:1,2 \
--keyword=_n:1,2 --keyword=sngettext:1,2 --keyword=vngettext:1,2 --keyword=VNGETTEXT:1,2 \
--files-from=%s --copyright-holder='Wesnoth development team' --msgid-bugs-address=http://bugs.wesnoth.org/ \
--output=$TARGET \
; sed -i s/charset=CHARSET/charset=UTF-8/ $TARGET \

View file

@ -1159,17 +1159,17 @@ namespace { // Private helpers for move_unit()
color_t msg_color;
if ( friend_count_ != 0 && enemy_count_ != 0 ) {
// Both friends and enemies sighted -- neutral message.
symbols["friendphrase"] = vngettext("Part of 'Units sighted! (...)' sentence^1 friendly", "$friends friendly", friend_count_, symbols);
symbols["enemyphrase"] = vngettext("Part of 'Units sighted! (...)' sentence^1 enemy", "$enemies enemy", enemy_count_, symbols);
symbols["friendphrase"] = VNGETTEXT("Part of 'Units sighted! (...)' sentence^1 friendly", "$friends friendly", friend_count_, symbols);
symbols["enemyphrase"] = VNGETTEXT("Part of 'Units sighted! (...)' sentence^1 enemy", "$enemies enemy", enemy_count_, symbols);
message = vgettext("Units sighted! ($friendphrase, $enemyphrase)", symbols);
msg_color = font::NORMAL_COLOR;
} else if ( enemy_count_ != 0 ) {
// Only enemies sighted -- bad message.
message = vngettext("Enemy unit sighted!", "$enemies enemy units sighted!", enemy_count_, symbols);
message = VNGETTEXT("Enemy unit sighted!", "$enemies enemy units sighted!", enemy_count_, symbols);
msg_color = font::BAD_COLOR;
} else if ( friend_count_ != 0 ) {
// Only friends sighted -- good message.
message = vngettext("Friendly unit sighted", "$friends friendly units sighted", friend_count_, symbols);
message = VNGETTEXT("Friendly unit sighted", "$friends friendly units sighted", friend_count_, symbols);
msg_color = font::GOOD_COLOR;
}

View file

@ -263,3 +263,10 @@ std::string vngettext(const char* sing, const char* plur, int n, const utils::st
const std::string msg = utils::interpolate_variables_into_string(orig, &symbols);
return msg;
}
std::string vngettext(const char *domain, const char *sing, const char* plur, int n, const utils::string_map& symbols)
{
const std::string orig(translation::dsngettext(domain, sing, plur, n));
const std::string msg = utils::interpolate_variables_into_string(orig, &symbols);
return msg;
}

View file

@ -62,6 +62,8 @@ std::string vgettext(const char* domain
std::string vngettext(const char*, const char*, int, const utils::string_map&);
std::string vngettext(const char*, const char*, const char*, int, const utils::string_map&);
/**
* @todo Convert all functions.
*
@ -72,8 +74,10 @@ std::string vngettext(const char*, const char*, int, const utils::string_map&);
#ifdef GETTEXT_DOMAIN
#define VGETTEXT(msgid, symbols) vgettext(GETTEXT_DOMAIN, msgid, symbols)
#define VNGETTEXT(msgid, msgid_plural, count, symbols) vngettext(GETTEXT_DOMAIN, msgid, msgid_plural, count, symbols)
#else
#define VGETTEXT(msgid, symbols) vgettext(msgid, symbols)
#define VNGETTEXT(msgid, msgid_plural, count, symbols) vngettext(msgid, msgid_plural, count, symbols)
#endif
#endif

View file

@ -87,7 +87,7 @@ void campaign_controller::report_victory(
// want to translate them differently.
if(t.carryover_add()) {
if(t.carryover_gold() > 0) {
goldmsg = vngettext(
goldmsg = VNGETTEXT(
"You will start the next scenario with $gold "
"on top of the defined minimum starting gold.",
"You will start the next scenario with $gold "
@ -95,7 +95,7 @@ void campaign_controller::report_victory(
t.carryover_gold(), symbols);
} else {
goldmsg = vngettext(
goldmsg = VNGETTEXT(
"You will start the next scenario with "
"the defined minimum starting gold.",
"You will start the next scenario with "
@ -103,7 +103,7 @@ void campaign_controller::report_victory(
t.carryover_gold(), symbols);
}
} else {
goldmsg = vngettext(
goldmsg = VNGETTEXT(
"You will start the next scenario with $gold "
"or its defined minimum starting gold, "
"whichever is higher.",

View file

@ -373,7 +373,7 @@ void menu_handler::recall(int side_num, const map_location &last_hex)
if (current_team.gold() - wb_gold < unit_cost) {
utils::string_map i18n_symbols;
i18n_symbols["cost"] = std::to_string(unit_cost);
std::string msg = vngettext(
std::string msg = VNGETTEXT(
"You must have at least 1 gold piece to recall a unit",
"You must have at least $cost gold pieces to recall this unit",
unit_cost, i18n_symbols);

View file

@ -348,7 +348,7 @@ bool attack_type::describe_modification(const config& cfg,std::string* descripti
if(!increase_damage.empty()) {
add_and(desc);
desc << vngettext(
desc << VNGETTEXT(
// TRANSLATORS: Current value for WML code increase_damage, documented in https://wiki.wesnoth.org/EffectWML
"$number_or_percent damage",
"$number_or_percent damage",
@ -359,7 +359,7 @@ bool attack_type::describe_modification(const config& cfg,std::string* descripti
if(!set_damage.empty()) {
add_and(desc);
// TRANSLATORS: Current value for WML code set_damage, documented in https://wiki.wesnoth.org/EffectWML
desc << vngettext(
desc << VNGETTEXT(
"$number damage",
"$number damage",
std::stoi(set_damage),
@ -368,7 +368,7 @@ bool attack_type::describe_modification(const config& cfg,std::string* descripti
if(!increase_attacks.empty()) {
add_and(desc);
desc << vngettext(
desc << VNGETTEXT(
// TRANSLATORS: Current value for WML code increase_attacks, documented in https://wiki.wesnoth.org/EffectWML
"$number_or_percent strike",
"$number_or_percent strikes",
@ -378,7 +378,7 @@ bool attack_type::describe_modification(const config& cfg,std::string* descripti
if(!set_attacks.empty()) {
add_and(desc);
desc << vngettext(
desc << VNGETTEXT(
// TRANSLATORS: Current value for WML code set_attacks, documented in https://wiki.wesnoth.org/EffectWML
"$number strike",
"$number strikes",
@ -420,7 +420,7 @@ bool attack_type::describe_modification(const config& cfg,std::string* descripti
if(!set_movement.empty()) {
add_and(desc);
desc << vngettext(
desc << VNGETTEXT(
// TRANSLATORS: Current value for WML code set_movement, documented in https://wiki.wesnoth.org/EffectWML
"$number movement point",
"$number movement points",
@ -430,7 +430,7 @@ bool attack_type::describe_modification(const config& cfg,std::string* descripti
if(!increase_movement.empty()) {
add_and(desc);
desc << vngettext(
desc << VNGETTEXT(
// TRANSLATORS: Current value for WML code increase_movement, documented in https://wiki.wesnoth.org/EffectWML
"$number_or_percent movement point",
"$number_or_percent movement points",

View file

@ -1781,7 +1781,7 @@ std::string unit::describe_builtin_effect(std::string apply_to, const config& ef
return "";
}
if(apply_to == "movement") {
return vngettext(
return VNGETTEXT(
"$number_or_percent move",
"$number_or_percent moves",
std::stoi(increase),
@ -1799,7 +1799,7 @@ std::string unit::describe_builtin_effect(std::string apply_to, const config& ef
"$number_or_percent XP to advance",
utils::string_map({{"number_or_percent", utils::print_modifier(increase)}}));
} else if(apply_to == "max_attacks") {
return vngettext(
return VNGETTEXT(
"$number_or_percent attack per turn",
"$number_or_percent attacks per turn",
std::stoi(increase),