summaryrefslogtreecommitdiff
path: root/cmdline
diff options
context:
space:
mode:
authorDavid Kalnischkies <kalnischkies@gmail.com>2013-08-01 12:58:20 +0200
committerDavid Kalnischkies <kalnischkies@gmail.com>2013-08-01 13:37:52 +0200
commit55732492ddea83e7d97b2e0c3e6799948fc5f152 (patch)
tree639665f9fbd33d4302739c5b1dfa66c6842ab0a8 /cmdline
parent0c33605d981ceb78a4761e39043dc79ef9a571b2 (diff)
unset LANGUAGE for showing [Y/n] answer hints
nl_langinfo is used to acquire the YESEXPR of the language used, but it will return the one from LC_MESSAGES, which might be different from the language chosen for display of the question (based on LANGUAGE) so this commit removes the [Y/n] help text from the questions itself and moves it to the prompt creation in which the usage of LC_MESSAGES is forced for it, so that the helptext shown actually represents the characters accepted as input for the question. There is still room for problems of course starting with an untranslated "[Y/n]" but a translated YESEXPR or the problem that the question is asked in a completely different language which might have a conflicting definition of [Y/n] input or the user simple ignores the helptext and assumes that an answer matching the question language is accepted, but the mayority of users will never have this problem to begin with, so we should be fine (or at least a bit finer than before). Closes nothing really, but should at least help a bit with bugs like deb:194614, deb:471102, lp:1205578, and countless others.
Diffstat (limited to 'cmdline')
-rw-r--r--cmdline/apt-get.cc35
1 files changed, 32 insertions, 3 deletions
diff --git a/cmdline/apt-get.cc b/cmdline/apt-get.cc
index 73b396795..4b7691d93 100644
--- a/cmdline/apt-get.cc
+++ b/cmdline/apt-get.cc
@@ -130,13 +130,42 @@ class CacheFile : public pkgCacheFile
/* Returns true on a Yes.*/
bool YnPrompt(bool Default=true)
{
+ /* nl_langinfo does not support LANGUAGE setting, so we unset it here
+ to have the help-message (hopefully) match the expected characters */
+ char * language = getenv("LANGUAGE");
+ if (language != NULL)
+ language = strdup(language);
+ if (language != NULL)
+ unsetenv("LANGUAGE");
+
+ if (Default == true)
+ // TRANSLATOR: Yes/No question help-text: defaulting to Y[es]
+ // e.g. "Do you want to continue? [Y/n] "
+ // The user has to answer with an input matching the
+ // YESEXPR/NOEXPR defined in your l10n.
+ c2out << " " << _("[Y/n]") << " " << std::flush;
+ else
+ // TRANSLATOR: Yes/No question help-text: defaulting to N[o]
+ // e.g. "Should this file be removed? [y/N] "
+ // The user has to answer with an input matching the
+ // YESEXPR/NOEXPR defined in your l10n.
+ c2out << " " << _("[y/N]") << " " << std::flush;
+
+ if (language != NULL)
+ {
+ setenv("LANGUAGE", language, 0);
+ free(language);
+ }
+
if (_config->FindB("APT::Get::Assume-Yes",false) == true)
{
+ // TRANSLATOR: "Yes" answer printed for a yes/no question if --assume-yes is set
c1out << _("Y") << endl;
return true;
}
else if (_config->FindB("APT::Get::Assume-No",false) == true)
{
+ // TRANSLATOR: "No" answer printed for a yes/no question if --assume-no is set
c1out << _("N") << endl;
return false;
}
@@ -1076,7 +1105,7 @@ static bool CheckAuth(pkgAcquire& Fetcher)
if (_config->FindI("quiet",0) < 2
&& _config->FindB("APT::Get::Assume-Yes",false) == false)
{
- c2out << _("Install these packages without verification [y/N]? ") << flush;
+ c2out << _("Install these packages without verification?") << flush;
if (!YnPrompt(false))
return _error->Error(_("Some packages could not be authenticated"));
@@ -1281,8 +1310,8 @@ bool InstallPackages(CacheFile &Cache,bool ShwKept,bool Ask = true,
if (_config->FindI("quiet",0) < 2 &&
_config->FindB("APT::Get::Assume-Yes",false) == false)
{
- c2out << _("Do you want to continue [Y/n]? ") << flush;
-
+ c2out << _("Do you want to continue?") << flush;
+
if (YnPrompt() == false)
{
c2out << _("Abort.") << endl;