Procházet zdrojové kódy

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.
David Kalnischkies před 13 roky
rodič
revize
55732492dd
47 změnil soubory, kde provedl 13387 přidání a 12521 odebrání
  1. 32 3
      cmdline/apt-get.cc
  2. 1 1
      configure.ac
  3. 297 279
      po/apt-all.pot
  4. 299 281
      po/ar.po
  5. 301 283
      po/ast.po
  6. 299 281
      po/bg.po
  7. 298 281
      po/bs.po
  8. 299 281
      po/ca.po
  9. 299 281
      po/cs.po
  10. 298 281
      po/cy.po
  11. 299 281
      po/da.po
  12. 301 283
      po/de.po
  13. 303 283
      po/dz.po
  14. 302 284
      po/el.po
  15. 303 285
      po/es.po
  16. 300 282
      po/eu.po
  17. 299 281
      po/fi.po
  18. 299 281
      po/fr.po
  19. 300 282
      po/gl.po
  20. 299 281
      po/hu.po
  21. 301 283
      po/it.po
  22. 302 284
      po/ja.po
  23. 299 279
      po/km.po
  24. 299 281
      po/ko.po
  25. 299 280
      po/ku.po
  26. 299 281
      po/lt.po
  27. 299 279
      po/mr.po
  28. 299 281
      po/nb.po
  29. 300 280
      po/ne.po
  30. 300 282
      po/nl.po
  31. 300 282
      po/nn.po
  32. 299 281
      po/pl.po
  33. 301 283
      po/pt.po
  34. 299 281
      po/pt_BR.po
  35. 301 283
      po/ro.po
  36. 299 281
      po/ru.po
  37. 301 283
      po/sk.po
  38. 303 285
      po/sl.po
  39. 299 281
      po/sv.po
  40. 301 283
      po/th.po
  41. 300 282
      po/tl.po
  42. 457 402
      po/tr.po
  43. 301 283
      po/uk.po
  44. 299 281
      po/vi.po
  45. 300 282
      po/zh_CN.po
  46. 300 281
      po/zh_TW.po
  47. 2 2
      test/integration/test-bug-596498-trusted-unsigned-repo

+ 32 - 3
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;

+ 1 - 1
configure.ac

@@ -18,7 +18,7 @@ AC_CONFIG_AUX_DIR(buildlib)
 AC_CONFIG_HEADER(include/config.h:buildlib/config.h.in include/apti18n.h:buildlib/apti18n.h.in)
 
 PACKAGE="apt"
-PACKAGE_VERSION="0.9.7.6ubuntu2"
+PACKAGE_VERSION="0.9.9.4"
 PACKAGE_MAIL="APT Development Team <deity@lists.debian.org>"
 AC_DEFINE_UNQUOTED(PACKAGE,"$PACKAGE")
 AC_DEFINE_UNQUOTED(PACKAGE_VERSION,"$PACKAGE_VERSION")

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 297 - 279
po/apt-all.pot


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 299 - 281
po/ar.po


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 301 - 283
po/ast.po


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 299 - 281
po/bg.po


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 298 - 281
po/bs.po


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 299 - 281
po/ca.po


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 299 - 281
po/cs.po


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 298 - 281
po/cy.po


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 299 - 281
po/da.po


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 301 - 283
po/de.po


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 303 - 283
po/dz.po


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 302 - 284
po/el.po


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 303 - 285
po/es.po


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 300 - 282
po/eu.po


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 299 - 281
po/fi.po


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 299 - 281
po/fr.po


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 300 - 282
po/gl.po


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 299 - 281
po/hu.po


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 301 - 283
po/it.po


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 302 - 284
po/ja.po


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 299 - 279
po/km.po


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 299 - 281
po/ko.po


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 299 - 280
po/ku.po


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 299 - 281
po/lt.po


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 299 - 279
po/mr.po


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 299 - 281
po/nb.po


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 300 - 280
po/ne.po


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 300 - 282
po/nl.po


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 300 - 282
po/nn.po


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 299 - 281
po/pl.po


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 301 - 283
po/pt.po


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 299 - 281
po/pt_BR.po


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 301 - 283
po/ro.po


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 299 - 281
po/ru.po


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 301 - 283
po/sk.po


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 303 - 285
po/sl.po


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 299 - 281
po/sv.po


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 301 - 283
po/th.po


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 300 - 282
po/tl.po


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 457 - 402
po/tr.po


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 301 - 283
po/uk.po


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 299 - 281
po/vi.po


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 300 - 282
po/zh_CN.po


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 300 - 281
po/zh_TW.po


+ 2 - 2
test/integration/test-bug-596498-trusted-unsigned-repo

@@ -27,7 +27,7 @@ aptgetupdate
 testequal "$PKGTEXT
 WARNING: The following packages cannot be authenticated!
   cool
-Install these packages without verification [y/N]? N
+Install these packages without verification? [y/N] N
 E: Some packages could not be authenticated" aptget install cool --assume-no -d
 
 find aptarchive/ \( -name 'Release.gpg' -o -name 'InRelease' \) -delete
@@ -37,7 +37,7 @@ aptgetupdate
 testequal "$PKGTEXT
 WARNING: The following packages cannot be authenticated!
   cool
-Install these packages without verification [y/N]? N
+Install these packages without verification? [y/N] N
 E: Some packages could not be authenticated" aptget install cool --assume-no -d
 
 sed -i -e 's#deb#deb [trusted=yes]#' $DEBFILE