gui: Bilingual GUI error messages #16224

pull hebasto wants to merge 5 commits into bitcoin:master from hebasto:20190617-bilingual-errors changing 23 files +166 −144
  1. hebasto commented at 1:02 PM on June 17, 2019: member

    This is an alternative to #15340 (it works with the Chain interface; see: #15340 (comment)). Refs:

    This PR:

    • makes GUI error messages bilingual: user's native language + untranslated (i.e. English)
    • insures that only untranslated messages are written to the debug log file and to stderr (that is not the case on master).

    If a translated string is unavailable only an English string appears to a user.

    Here are some examples (updated):

    Screenshot from 2020-04-24 17-08-37

    Screenshot from 2020-04-24 17-12-17

    • qt5ct: using qt5ct plugin message is my local environment specific; please ignore it.

    Note for reviewers: InitWarning() is out of this PR scope.

  2. fanquake added the label GUI on Jun 17, 2019
  3. hebasto cross-referenced this on Jun 17, 2019 from issue gui: Introduce bilingual GUI error messages by hebasto
  4. hebasto commented at 1:07 PM on June 17, 2019: member

    @MarcoFalke your #15340 (review) has been addressed.

  5. hebasto force-pushed on Jun 17, 2019
  6. hebasto cross-referenced this on Jun 17, 2019 from issue gui: Translated messages should not be written to debug log (InitError, InitWarning, ...) by MarcoFalke
  7. ryanofsky commented at 3:02 PM on June 17, 2019: contributor

    EDIT: I didn't realize when I wrote this there was lots of previous discussion already about showing untranslated messages in #15340.


    Concept ACK, especially for the code cleanup making error handling more consistent. Some thoughts:

    • I'm not sure it would be better to show same message twice in error dialogs, than to only show the translated message and something like "More detailed debug information can be found in debug.log," or maybe just the translated message and a "View debug log..." button, to reduce the amount of clutter. I'd hope that in most cases translated error messages would be clear enough to help users solve problems, and only more rarely would users need untranslated strings for to report a bug or look things up.

    • Using _("") syntax for translated strings is pretty common and well understood, but _("", true) for bilingual strings seems harder to distinguish and figure out. Might worth considering other syntaxes _b(""), bilingual(""), translate("") or even ""_translate with user literal syntax. Other option would be not having any special syntax and just adding normal functions that return literal and formatted bilingual_str objects.

    PR looks good in its current form though, and it would be good to get opinions from other reviewers.

  8. MarcoFalke commented at 3:42 PM on June 17, 2019: member

    Is there even a point in having two different translation functions long term? Shouldn't all non-gui code use the one that returns a bilingual_str?

  9. ryanofsky commented at 3:58 PM on June 17, 2019: contributor

    Is there even a point in having two different translation functions long term?

    Good point. I don't think there is. So another alternative could be to update the _ function to return both translated and untranslated strings, and not have any new syntax at all.

  10. DrahtBot commented at 6:37 PM on June 17, 2019: contributor

    <!--e57a25ab6845829454e8d69fc972939a-->

    The following sections might be updated with supplementary metadata relevant to reviewers and maintainers.

    <!--174a7506f384e20aa4161008e828411d-->

    Conflicts

    Reviewers, this pull request conflicts with the following ones:

    • #18849 (The Zero Allocations project by jb55)
    • #18740 (Remove g_rpc_node global by ryanofsky)
    • #18000 (Index for UTXO Set Statistics by fjahr)
    • #17659 (qt: Do not block GUI thread in RPCConsole by hebasto)
    • #17127 (util: Correct permissions for datadir and wallets subdir by hebasto)
    • #15606 ([experimental] UTXO snapshots by jamesob)

    If you consider this pull request important, please also help to review the conflicting pull requests. Ideally, start with the one that should be merged first.

  11. DrahtBot added the label Needs rebase on Jun 18, 2019
  12. hebasto force-pushed on Jun 19, 2019
  13. hebasto commented at 3:53 PM on June 19, 2019: member

    Rebased.

  14. DrahtBot removed the label Needs rebase on Jun 19, 2019
  15. DrahtBot added the label Needs rebase on Jun 25, 2019
  16. in src/util/translation.h:26 in 81baf61a15 outdated
      21 | +
      22 | +namespace tinyformat {
      23 | +template <typename... Args>
      24 | +bilingual_str format(const bilingual_str& fmt, const Args&... args)
      25 | +{
      26 | +    return std::move(bilingual_str{format(fmt.original, args...), format(fmt.translated, args...)});
    


    practicalswift commented at 3:40 PM on June 25, 2019:

    I think std::move prevents copy elision here.


    hebasto commented at 4:43 PM on June 25, 2019:

    Fixed.

  17. in src/util/translation.h:47 in 81baf61a15 outdated
      42 | +/**
      43 | + * Bilingual translation function.
      44 | + */
      45 | +inline bilingual_str _(const char* psz, bool ignored)
      46 | +{
      47 | +    return std::move(bilingual_str{psz, G_TRANSLATION_FUN ? (G_TRANSLATION_FUN)(psz) : psz});
    


    practicalswift commented at 3:40 PM on June 25, 2019:

    Same here :-)


    hebasto commented at 4:43 PM on June 25, 2019:

    Fixed.

  18. hebasto force-pushed on Jun 25, 2019
  19. hebasto commented at 4:46 PM on June 25, 2019: member

    Rebased. @practicalswift Thank you for review. Your comments have been addressed. Nothing prevents return value optimization now ;)

  20. hebasto commented at 4:54 PM on June 25, 2019: member

    @ryanofsky

    Using _("") syntax for translated strings is pretty common and well understood, but _("", true) for bilingual strings seems harder to distinguish and figure out. Might worth considering other syntaxes _b(""), bilingual(""), translate("") or even ""_translate with user literal syntax.

    IIUC, this will require appropriate changes for the share/qt/extract_strings_qt.py script, right?

  21. DrahtBot removed the label Needs rebase on Jun 25, 2019
  22. MarcoFalke cross-referenced this on Jun 25, 2019 from issue Remove duplicated "Error: " prefix in logs by hebasto
  23. in src/util/translation.h:37 in 1855f54d3c outdated
      32 | +
      33 | +/**
      34 | + * Translation function.
      35 | + * If no translation function is set, simply return the input.
      36 | + */
      37 | +inline std::string _(const char* psz)
    


    MarcoFalke commented at 6:13 PM on June 26, 2019:

    What about this?

    inline bilingual_str _(const char* psz)
    

    Have you seen my comment here: #16224 (comment)?


    hebasto commented at 7:16 PM on June 26, 2019:

    Have you seen my comment here: #16224 (comment)?

    Sure!

    IIUC, your suggestion implies some kind of type conversion (from bilingual_str to std::string) for arguments of some functions and in assignment statements?


    MarcoFalke commented at 8:54 PM on June 26, 2019:

    If you don't need the original string, it can be dropped with _().translated, no? I understand that the changes are more disruptive, but it seems clearer than the unused optional argument.

    It could probably be done as a scripted-diff.

  24. DrahtBot added the label Needs rebase on Jun 27, 2019
  25. hebasto force-pushed on Jun 28, 2019
  26. hebasto force-pushed on Jun 28, 2019
  27. DrahtBot removed the label Needs rebase on Jun 28, 2019
  28. hebasto commented at 6:31 PM on June 28, 2019: member

    @MarcoFalke

    Is there even a point in having two different translation functions long term? Shouldn't all non-gui code use the one that returns a bilingual_str?

    Implemented.

    It could probably be done as a scripted-diff.

    Done.

    Also rebased on top of #16278.

  29. MarcoFalke commented at 7:03 PM on June 28, 2019: member

    ACK 72d3599e5b06fb1799c8b3689e76d7b97b067531

    Not sure about the huge scripted diff, you can probably replace the body with

    sed -i --regexp-extended 's/\b_\("([^"]+|\\")*"\)/&.translated/g' $(git grep --files-with-matches '\b_(' src)
    
  30. hebasto force-pushed on Jun 29, 2019
  31. hebasto force-pushed on Jun 29, 2019
  32. hebasto commented at 9:01 AM on June 29, 2019: member

    @MarcoFalke Thank you for your review.

    Not sure about the huge scripted diff, you can probably replace the body with

    sed -i --regexp-extended 's/\b_\("([^"]+|\\")*"\)/&.translated/g' $(git grep --files-with-matches '\b_(' src)
    

    Done:

    sed -i 's/\b_("\([^"]\|\\"\)*")/&.translated/g' $(git grep --files-with-matches '\b_("' src)
    
  33. hebasto commented at 9:04 AM on June 29, 2019: member

    GH rearranged this PR commits. The amended commit 54419c82dd025df1b214ac3b99f85d66f3b9b403 became the last in the https://github.com/bitcoin/bitcoin/pull/16224/commits.

    UPDATE: https://help.github.com/en/articles/why-are-my-commits-in-the-wrong-order

    Is this an issue? If so, how may I fix it should I fix the commit order?

  34. promag commented at 2:26 PM on July 5, 2019: member

    Is this an issue? If so, ~how may I fix it~ should I fix the commit order? @hebasto no, it's fine.

  35. promag commented at 2:48 PM on July 5, 2019: member

    Concept ACK, please don't merge this yet.

  36. in src/init.cpp:756 in e985a077f5 outdated
     744 | @@ -745,17 +745,17 @@ static void ThreadImport(std::vector<fs::path> vImportFiles)
     745 |   */
     746 |  static bool InitSanityCheck()
     747 |  {
     748 | -    if(!ECC_InitSanityCheck()) {
     749 | -        InitError("Elliptic curve cryptography sanity check failure. Aborting.");
     750 | -        return false;
     751 | +    if (!ECC_InitSanityCheck()) {
     752 | +        std::string rare_error_do_not_translate = "Elliptic curve cryptography sanity check failure. Aborting.";
     753 | +        return InitError(bilingual_str{rare_error_do_not_translate, rare_error_do_not_translate});
    


    promag commented at 3:07 PM on July 5, 2019:

    e985a077f5f6b5e154f2cb4be25a50a45e00e211

    These changes are unnecessary if you keep error InitError(const std::string&) and just do:

    bool InitError(const std::string& str)
    {
        return InitError(bilingual_str{str, str});
    }
    

    hebasto commented at 3:35 PM on July 5, 2019:

    The function with signature InitError(const std::string&) has been removed intentionally to prevent emerging of untranslated error messages in the future. All such cases should be implemented in the code explicitly.

  37. in src/ui_interface.cpp:65 in a9641a7ac1 outdated
      61 |      return false;
      62 |  }
      63 |  
      64 | +bool InitError(const bilingual_str& str)
      65 | +{
      66 | +    bilingual_str bs{str.original, str.translated};
    


    promag commented at 3:23 PM on July 5, 2019:

    a9641a7ac12e3eae763faadbf9bfeeb5f14e3717

    Just

    bilingual_str bs{str};
    

    hebasto commented at 3:39 PM on July 5, 2019:

    Agree. Will be fixed tonight.


    hebasto commented at 8:29 PM on July 5, 2019:

    Done.


    hebasto commented at 7:06 AM on July 6, 2019:

    promag commented at 1:26 PM on July 6, 2019:

    iono about that error 😕 somehow it doesn't use copy constructor.


    hebasto commented at 1:56 PM on July 6, 2019:

    Copy initialization will do:

        bilingual_str bs = str;
    
  38. promag commented at 3:25 PM on July 5, 2019: member

    Agree with @ryanofsky, I think original text could be set with QMessageBox::setDetailedText and BitcoinGUI::message could be extended to accept that parameter.

  39. hebasto commented at 3:47 PM on July 5, 2019: member

    @promag Thank you for your review.

    Agree with @ryanofsky, I think original text could be set with QMessageBox::setDetailedText and BitcoinGUI::message could be extended to accept that parameter.

    Do you think the Show Details... button on an error message window is expressive enough for a user? Maybe QMessageBox::informativeText?

    Anyway, could this improvement be implemented with a successive PR?

  40. hebasto force-pushed on Jul 5, 2019
  41. promag commented at 8:47 PM on July 5, 2019: member

    I don't think so, the idea is to allow access to the original message while not displaying both.

  42. hebasto commented at 8:54 PM on July 5, 2019: member

    @promag

    I don't think so, the idea is to allow access to the original message while not displaying both.

    In this case "Original message:" prefix seems redundant in the detailed text, right?

  43. promag commented at 1:30 PM on July 6, 2019: member

    In this case "Original message:" prefix seems redundant in the detailed text, right?

    I don't mind the prefix, actually it can help later if we decide to add more details, like:

    Original message: This is a bad message in english.
    Erro code: 123
    Location: some_file.cpp:line
    
  44. hebasto force-pushed on Jul 6, 2019
  45. hebasto commented at 4:04 PM on July 6, 2019: member

    @promag

    I don't think so, the idea is to allow access to the original message while not displaying both.

    Implemented.

  46. promag commented at 11:18 PM on July 6, 2019: member

    On macos Screenshot 2019-07-07 at 00 17 31 Screenshot 2019-07-07 at 00 17 34

  47. DrahtBot added the label Needs rebase on Jul 8, 2019
  48. hebasto force-pushed on Jul 9, 2019
  49. hebasto force-pushed on Jul 9, 2019
  50. hebasto commented at 3:55 PM on July 9, 2019: member

    Rebased.

  51. hebasto force-pushed on Jul 9, 2019
  52. MarcoFalke commented at 4:44 PM on July 9, 2019: member

    Could split all the refactoring-only up to (and including) 4e1eda717ed282f7a8ca67329d5a0669b6832ef8 to a separate pull request?

  53. hebasto cross-referenced this on Jul 9, 2019 from issue Add bilingual_str type by hebasto
  54. hebasto commented at 6:04 PM on July 9, 2019: member

    @MarcoFalke

    Could split all the refactoring-only up to (and including) 4e1eda7 to a separate pull request?

    Done: #16362

  55. fanquake added this to the milestone 0.19.0 on Jul 10, 2019
  56. hebasto force-pushed on Jul 10, 2019
  57. hebasto commented at 3:15 PM on July 10, 2019: member

    Rebased.

  58. DrahtBot removed the label Needs rebase on Jul 10, 2019
  59. in src/init.cpp:974 in 32cf78af45 outdated
     959 | @@ -956,7 +960,7 @@ bool AppInitParameterInteraction()
     960 |  
     961 |      // Warn if unrecognized section name are present in the config file.
     962 |      for (const auto& section : gArgs.GetUnrecognizedSections()) {
     963 | -        InitWarning(strprintf("%s:%i " + _("Section [%s] is not recognized."), section.m_file, section.m_line, section.m_name));
     964 | +        InitWarning(strprintf("%s:%i " + _("Section [%s] is not recognized.").translated, section.m_file, section.m_line, section.m_name));
    


    ryanofsky commented at 7:38 PM on July 15, 2019:

    I think it'd be nice if InitWarning took a bilingual string. It would make InitWarning more consistent with InitError, and give us the ability to easily log untranslated warnings. But this could be implemented in a separate PR, since it would probably complicate this one.


    hebasto commented at 6:27 PM on July 18, 2019:

    You are reading my mind ;) InitWarning has been left for a separate PR.

  60. in src/init.cpp:1736 in 32cf78af45 outdated
    1625 | @@ -1622,9 +1626,10 @@ bool AppInitMain(InitInterfaces& interfaces)
    1626 |          if (!fLoaded && !ShutdownRequested()) {
    1627 |              // first suggest a reindex
    1628 |              if (!fReset) {
    1629 | +                bilingual_str bs = _("Do you want to rebuild the block database now?");
    1630 |                  bool fRet = uiInterface.ThreadSafeQuestion(
    1631 | -                    strLoadError + ".\n\n" + _("Do you want to rebuild the block database now?"),
    1632 | -                    strLoadError + ".\nPlease restart with -reindex or -reindex-chainstate to recover.",
    1633 | +                    bilingual_str{strLoadError.original + "\n\n" + bs.original, strLoadError.translated + "\n\n" + bs.translated},
    1634 | +                    strLoadError.original + ".\nPlease restart with -reindex or -reindex-chainstate to recover.",
    


    ryanofsky commented at 7:48 PM on July 15, 2019:

    I realize you are not changing behavior, but is it intentional that only the first part of the translated string is actually translated, and the second half is not? I'm not sure this makes very much sense, so it might be helpful to have a TODO comment for cleaning this up later.


    hebasto commented at 8:01 PM on July 18, 2019:

    ... is it intentional that only the first part of the translated string is actually translated, and the second half is not?

    Yes, it is. The second half is a non-interactive message which is printed to the debug.log and std::cerr: https://github.com/bitcoin/bitcoin/blob/18c3521c2c72cee05094e49ec97c4ef8facdd1d8/src/noui.cpp#L47-L50

  61. in src/validation.cpp:1660 in 32cf78af45 outdated
    1382 | @@ -1382,7 +1383,7 @@ static bool AbortNode(const std::string& strMessage, const std::string& userMess
    1383 |      SetMiscWarning(strMessage);
    1384 |      LogPrintf("*** %s\n", strMessage);
    1385 |      if (!userMessage.empty()) {
    1386 | -        uiInterface.ThreadSafeMessageBox(userMessage, "", CClientUIInterface::MSG_ERROR | prefix);
    1387 | +        uiInterface.ThreadSafeMessageBox(bilingual_str{userMessage, userMessage}, "", CClientUIInterface::MSG_ERROR | prefix);
    


    ryanofsky commented at 7:52 PM on July 15, 2019:

    It would be good to add some comment here explaining this. If it's intentional never to translate the abortnode message it'd be good to write that. Or if it would be better to fix this later, there could be a TODO comment here saying AbortNode should take a bilingual string, or whatever the followup would be.


    hebasto commented at 9:04 PM on July 18, 2019:

    Some TODO comments have been added.

  62. in src/init.cpp:1071 in 32cf78af45 outdated
    1057 | @@ -1054,7 +1058,7 @@ bool AppInitParameterInteraction()
    1058 |      if (gArgs.IsArgSet("-minimumchainwork")) {
    1059 |          const std::string minChainWorkStr = gArgs.GetArg("-minimumchainwork", "");
    1060 |          if (!IsHexNumber(minChainWorkStr)) {
    1061 | -            return InitError(strprintf("Invalid non-hex (%s) minimum chain work value specified", minChainWorkStr));
    1062 | +            return InitError(strprintf(_("Invalid non-hex (%s) minimum chain work value specified"), minChainWorkStr));
    


    ryanofsky commented at 8:04 PM on July 15, 2019:

    This change as a whole seems to be adding a lot of new translated strings. But I wonder if it would be better to be more conservative and not add new translations here, instead saving that part for a followup PR and selectively leaving less common errors untranslated. One way to do this might be with a DoNotTranslate function

    bilingual_str DoNotTranslate(std::string original)
    {
        return {original, original};
    }
    

    hebasto commented at 9:04 PM on July 18, 2019:

    DoNotTranslate() has been implemented.


    Sjors commented at 2:32 PM on November 20, 2019:

    Nit: don't forget to actually use Untranslated here.

  63. ryanofsky approved
  64. ryanofsky commented at 8:26 PM on July 15, 2019: contributor

    utACK 32cf78af45c662617eaf91bb3bb07e27151a3a95. I skimmed all the commits, but found it most easy just to review the final consolidated diff, because some of intermediate commits update the same lines more than once.

    This change seems acceptable in its current state, but my preference would be to have a new refactoring-only PR that introduces bilingual string instances without changing behavior. The refactoring-only PR could:

    1. Introduce the bilingual_str class
    2. Change _ to return bilingual strings, and change MessageBox and InitError (and maybe AbortNode and InitWarning) to accept bilingual strings
    3. Add DoNotTranslate (see below) calls wherever needed to maintain existing behavior and avoid breaking compilation.

    After that PR, this PR altering the GUI and adding new translations could be smaller and easier to understand.

  65. DrahtBot added the label Needs rebase on Jul 16, 2019
  66. hebasto force-pushed on Jul 18, 2019
  67. hebasto commented at 4:41 PM on July 18, 2019: member

    Rebased.

  68. DrahtBot removed the label Needs rebase on Jul 18, 2019
  69. hebasto commented at 6:19 PM on July 18, 2019: member

    @ryanofsky Thank you for your review.

    The refactoring-only PR could: ... 2. Change _ to return bilingual strings, and change MessageBox and InitError (and maybe AbortNode and InitWarning) to accept bilingual strings

    Such commit could be very complicated. Currently, this PR introduces bilingual abilities to the related functions (ThreadSafeMessageBox, InitError) commit by commit.

    Also this PR has been already split as @MarcoFalke suggested.

  70. hebasto force-pushed on Jul 18, 2019
  71. hebasto commented at 9:03 PM on July 18, 2019: member

    @ryanofsky Added TODO comments and the DoNotTranslate() function.

  72. hebasto force-pushed on Jul 23, 2019
  73. hebasto commented at 5:29 PM on July 23, 2019: member

    Rebased on top of #16355.

  74. hebasto force-pushed on Jul 23, 2019
  75. DrahtBot added the label Needs rebase on Jul 24, 2019
  76. hebasto commented at 12:31 PM on July 24, 2019: member

    @promag

    ... please don't merge this yet.

    Could we move on? Would you mind looking into #16362 too?

  77. hebasto force-pushed on Jul 24, 2019
  78. hebasto commented at 1:59 PM on July 24, 2019: member

    Rebased.

  79. fanquake removed the label Needs rebase on Jul 24, 2019
  80. hebasto force-pushed on Jul 24, 2019
  81. hebasto commented at 3:30 PM on July 24, 2019: member

    @MarcoFalke Rebasing on top of #16366 caused a bilingual representation of some messages: diff.

    I suppose some of them should be untranslated intentionally. If so, let me know to make changes, please?

  82. ryanofsky commented at 4:48 PM on July 24, 2019: contributor

    I suppose some of them should be untranslated intentionally. If so, let me know to make changes, please?

    There could be other opinions, but I'd recommend replacing _ with DoNotTranslate here to avoid refactoring and changing behavior in the same PR. (Sorry for sounding like a broken record on mixing refactoring and behavior changes, but I think if we want to add new translations, this should happen in a small separate standalone PR adding new translations, not mixed in with everything else here).

  83. MarcoFalke referenced this in commit d960d5ca99 on Jul 24, 2019
  84. in src/bitcoind.cpp:22 in af608a0cf0 outdated
      18 | @@ -19,6 +19,9 @@
      19 |  #include <util/strencodings.h>
      20 |  #include <util/system.h>
      21 |  #include <util/threadnames.h>
      22 | +#include <util/translation.h>
    


    MarcoFalke commented at 6:15 PM on July 24, 2019:

    translations are only for the gui, this should never be added here


    ryanofsky commented at 6:47 PM on July 24, 2019:

    translations are only for the gui, this should never be added here

    I haven't looked at the context for this comment yet, but in general translations are desirable when writing error messages to stderr, right? My understanding is we only want to avoid translating very technical messages, rare messages, and messages sent to debug.log.


    hebasto commented at 6:42 PM on July 26, 2019:

    translations are only for the gui, this should never be added here

    That is correct. But without #include <util/translation.h> the linker fires an error for the last but one commit:

      CXXLD    bitcoind
    libbitcoin_server.a(libbitcoin_server_a-init.o): In function `_(char const*)':
    /home/hebasto/github/bitcoin/src/./util/translation.h:39: undefined reference to `G_TRANSLATION_FUN[abi:cxx11]'
    
  85. in src/qt/bitcoin.cpp:458 in af608a0cf0 outdated
     458 | @@ -459,7 +459,7 @@ int GuiMain(int argc, char* argv[])
     459 |      SetupUIArgs();
     460 |      std::string error;
     461 |      if (!node->parseParameters(argc, argv, error)) {
     462 | -        node->initError(strprintf("Error parsing command line arguments: %s\n", error));
     463 | +        node->initError(strprintf(_("Error parsing command line arguments: %s\n"), error));
     464 |          // Create a message box, because the gui has neither been created nor has subscribed to core signals
     465 |          QMessageBox::critical(nullptr, PACKAGE_NAME,
     466 |              // message can not be translated because translations have not been initialized
    


    MarcoFalke commented at 6:16 PM on July 24, 2019:

    :eyes: Please remove the _( three lines above.


    hebasto commented at 7:08 PM on July 26, 2019:

    Correct. Fixed.

  86. in src/qt/bitcoin.cpp:524 in af608a0cf0 outdated
     520 | @@ -521,7 +521,7 @@ int GuiMain(int argc, char* argv[])
     521 |      try {
     522 |          node->selectParams(gArgs.GetChainName());
     523 |      } catch(std::exception &e) {
     524 | -        node->initError(strprintf("%s\n", e.what()));
     525 | +        node->initError(strprintf(_("%s\n"), e.what()));
    


    MarcoFalke commented at 6:17 PM on July 24, 2019:

    Here and the two other instances: The The gui is not yet subscribed to core signals and can't pick up the translation, which is why it is manually translated below.


    hebasto commented at 7:08 PM on July 26, 2019:

    Correct. Fixed.

  87. hebasto force-pushed on Jul 26, 2019
  88. hebasto commented at 7:07 PM on July 26, 2019: member

    The latest push:

    • rebased on top of #16362
    • fixed rebasing on top of #16366: no more translations in bitcoind and Node::initError()
    • forward declaration of struct bilingual_str
  89. sidhujag referenced this in commit b4919222bc on Jul 29, 2019
  90. DrahtBot added the label Needs rebase on Aug 14, 2019
  91. hebasto force-pushed on Aug 15, 2019
  92. hebasto force-pushed on Aug 15, 2019
  93. hebasto commented at 6:36 PM on August 15, 2019: member

    Rebased on top of 367b023ae444e7d9641c4a3469f9154461e50e68.

  94. DrahtBot removed the label Needs rebase on Aug 15, 2019
  95. DrahtBot added the label Needs rebase on Aug 16, 2019
  96. hebasto force-pushed on Aug 17, 2019
  97. hebasto commented at 8:01 AM on August 17, 2019: member

    Rebased after #16620 has been merged.

  98. hebasto force-pushed on Aug 17, 2019
  99. DrahtBot removed the label Needs rebase on Aug 17, 2019
  100. DrahtBot added the label Needs rebase on Aug 19, 2019
  101. hebasto force-pushed on Aug 19, 2019
  102. DrahtBot removed the label Needs rebase on Aug 19, 2019
  103. hebasto commented at 5:07 AM on August 20, 2019: member

    Rebased.

  104. MarcoFalke removed this from the milestone 0.19.0 on Aug 28, 2019
  105. MarcoFalke added this to the milestone 0.20.0 on Aug 28, 2019
  106. MarcoFalke commented at 7:32 PM on August 28, 2019: member

    Translation string freeze is in three days, which seems too risky for this change. Assigned "0.20.0" milestone.

  107. DrahtBot added the label Needs rebase on Sep 3, 2019
  108. hebasto force-pushed on Sep 7, 2019
  109. DrahtBot removed the label Needs rebase on Sep 7, 2019
  110. hebasto force-pushed on Sep 7, 2019
  111. hebasto commented at 6:44 PM on September 7, 2019: member

    Rebased.

  112. DrahtBot added the label Needs rebase on Sep 19, 2019
  113. laanwj added the label Feature on Sep 30, 2019
  114. laanwj commented at 9:34 AM on October 4, 2019: member

    Code review ACK 322ffab8771a2a968246deb32750e1b6b1b930b4

  115. hebasto force-pushed on Oct 5, 2019
  116. hebasto commented at 10:10 AM on October 5, 2019: member

    Rebased after #16743 has been merged.

  117. DrahtBot removed the label Needs rebase on Oct 5, 2019
  118. hebasto commented at 11:29 AM on October 5, 2019: member

    @MarcoFalke @ryanofsky @practicalswift @promag

    Would you mind re-reviewing this PR?

  119. in src/init.cpp:1623 in 7886733e16 outdated
    1618 | @@ -1619,7 +1619,8 @@ bool AppInitMain(InitInterfaces& interfaces)
    1619 |              // first suggest a reindex
    1620 |              if (!fReset) {
    1621 |                  bool fRet = uiInterface.ThreadSafeQuestion(
    1622 | -                    strLoadError + ".\n\n" + _("Do you want to rebuild the block database now?").translated,
    1623 | +                    strprintf(_("%s.\n\nDo you want to rebuild the block database now?"), strLoadError),
    1624 | +                    /*strLoadError + ".\n\n" + _("Do you want to rebuild the block database now?").translated,*/
    


    MarcoFalke commented at 5:35 PM on October 7, 2019:

    :eyes:


    hebasto commented at 6:06 PM on October 7, 2019:

    It seems this line is outdated already ;)


    hebasto commented at 6:26 PM on October 7, 2019:

    Sorry for a mess. Fixed in the latest push 24cae76e6476f467095327ca9970ef1a784c629b.

  120. in src/init.cpp:1622 in 7886733e16 outdated
    1618 | @@ -1619,7 +1619,8 @@ bool AppInitMain(InitInterfaces& interfaces)
    1619 |              // first suggest a reindex
    1620 |              if (!fReset) {
    1621 |                  bool fRet = uiInterface.ThreadSafeQuestion(
    1622 | -                    strLoadError + ".\n\n" + _("Do you want to rebuild the block database now?").translated,
    1623 | +                    strprintf(_("%s.\n\nDo you want to rebuild the block database now?"), strLoadError),
    


    MarcoFalke commented at 5:37 PM on October 7, 2019:

    Not sure if we want to translate %s.\n\n, maybe add an operator+ or operator<< to bilingual_str, so that either + or strprintf can be used.


    hebasto commented at 7:01 PM on October 7, 2019:

    This line is outdated due to the following commits ;)

    ... maybe add an operator+ or operator<< to bilingual_str, so that either + or strprintf can be used.

    Agree. Good idea for the following PRs (as this PR does not touch bilingual_str itself).


    hebasto commented at 2:10 AM on May 5, 2020:
  121. in src/qt/bitcoingui.cpp:1383 in 7886733e16 outdated
    1362 |      style &= ~CClientUIInterface::SECURE;
    1363 |      bool ret = false;
    1364 | +
    1365 | +    QString detailed_message;
    1366 | +    if (message.original != message.translated) {
    1367 | +        detailed_message = QObject::tr("Original message:") + "\n" + QString::fromStdString(message.original);
    


    MarcoFalke commented at 5:38 PM on October 7, 2019:

    what is the point of translations again, if we show the original message anyway?


    hebasto commented at 6:00 PM on October 7, 2019:

    This translated title, QObject::tr("Original message:"), is intended for non-english interface. The message itself is not translated, obviously. That was an initial idea, but I'm open for changes ;)


    MarcoFalke commented at 6:06 PM on October 7, 2019:

    yes, what is the point of showing the translation and the original message. If the user understood the original message (in English), what is the point of showing the translation?


    hebasto commented at 6:14 PM on October 7, 2019:

    Translation - for a user. Original message - for googling and referencing.


    MarcoFalke commented at 6:24 PM on October 7, 2019:

    I see. I guess fine with me, but at least the code could mention that.


    hebasto commented at 6:28 PM on October 7, 2019:

    Add some comments?


    MarcoFalke commented at 6:31 PM on October 7, 2019:

    jup


    hebasto commented at 6:55 PM on October 7, 2019:

    Done.

  122. MarcoFalke commented at 5:39 PM on October 7, 2019: member

    Concept ACK. One question inline.

  123. in src/util/translation.h:42 in aa21c807af outdated
      38 | @@ -39,4 +39,9 @@ inline static bilingual_str _(const char* psz)
      39 |      return bilingual_str{psz, G_TRANSLATION_FUN ? (G_TRANSLATION_FUN)(psz) : psz};
      40 |  }
      41 |  
      42 | +inline static bilingual_str DoNotTranslate(std::string original)
    


    MarcoFalke commented at 6:24 PM on October 7, 2019:

    in commit aa21c807af55f94867b11bab5e2e9a8160a3fc9d

    style-question: Could this be called Untranslated, so that arbitrary strings can be passed in (even string that are impossible to translate, such as error strings returned from third party libraries).


    hebasto commented at 6:57 PM on October 7, 2019:

    Done.

  124. hebasto force-pushed on Oct 7, 2019
  125. hebasto force-pushed on Oct 7, 2019
  126. hebasto commented at 7:03 PM on October 7, 2019: member

    @MarcoFalke Thank you for your review. Your comments have been addressed.

  127. jonasschnelli commented at 7:37 AM on October 10, 2019: contributor

    Tested and looks good. Would it make sense to also make the strings in qt/bitcoin.cpp translate the new way? Things like "Specified data directory \"%s\" does not exist" or "Error reading configuration file: %s\n"

  128. hebasto commented at 8:44 AM on October 10, 2019: member

    @jonasschnelli

    Would it make sense to also make the strings in qt/bitcoin.cpp translate the new way? Things like "Specified data directory \"%s\" does not exist" or "Error reading configuration file: %s\n"

    These strings are not in qt/bitcoin.cpp but in bitcoind.cpp ;) More details in #16366 by @MarcoFalke

  129. DrahtBot added the label Needs rebase on Oct 15, 2019
  130. hebasto force-pushed on Oct 16, 2019
  131. hebasto commented at 4:27 PM on October 16, 2019: member

    Rebased after #17138 has been merged.

  132. DrahtBot removed the label Needs rebase on Oct 16, 2019
  133. DrahtBot added the label Needs rebase on Oct 21, 2019
  134. hebasto force-pushed on Oct 26, 2019
  135. hebasto commented at 6:04 PM on October 26, 2019: member

    Rebased after #17070 has been merged.

  136. DrahtBot removed the label Needs rebase on Oct 26, 2019
  137. DrahtBot added the label Needs rebase on Oct 28, 2019
  138. hebasto force-pushed on Oct 29, 2019
  139. hebasto commented at 6:56 AM on October 29, 2019: member

    Rebased after #17279 has been merged.

  140. DrahtBot removed the label Needs rebase on Oct 29, 2019
  141. DrahtBot added the label Needs rebase on Oct 29, 2019
  142. hebasto force-pushed on Oct 29, 2019
  143. hebasto commented at 1:39 PM on October 29, 2019: member

    Rebased after #17260 has been merged.

  144. DrahtBot removed the label Needs rebase on Oct 29, 2019
  145. DrahtBot added the label Needs rebase on Oct 30, 2019
  146. hebasto force-pushed on Oct 30, 2019
  147. hebasto commented at 6:56 PM on October 30, 2019: member

    Rebased after #16839 has been merged.

  148. DrahtBot removed the label Needs rebase on Oct 30, 2019
  149. DrahtBot added the label Needs rebase on Nov 4, 2019
  150. hebasto force-pushed on Nov 4, 2019
  151. hebasto commented at 4:39 PM on November 4, 2019: member

    Rebased after #17304 has been merged.

  152. DrahtBot removed the label Needs rebase on Nov 4, 2019
  153. DrahtBot added the label Needs rebase on Nov 5, 2019
  154. hebasto force-pushed on Nov 6, 2019
  155. hebasto commented at 3:13 PM on November 6, 2019: member

    Rebased after #16540 has been merged.

  156. DrahtBot removed the label Needs rebase on Nov 6, 2019
  157. in src/httpserver.cpp:179 in ffed46515d outdated
     175 | @@ -175,7 +176,7 @@ static bool InitHTTPAllowList()
     176 |          LookupSubNet(strAllow.c_str(), subnet);
     177 |          if (!subnet.IsValid()) {
     178 |              uiInterface.ThreadSafeMessageBox(
     179 | -                strprintf("Invalid -rpcallowip subnet specification: %s. Valid are a single IP (e.g. 1.2.3.4), a network/netmask (e.g. 1.2.3.4/255.255.255.0) or a network/CIDR (e.g. 1.2.3.4/24).", strAllow),
     180 | +                strprintf(_("Invalid -rpcallowip subnet specification: %s. Valid are a single IP (e.g. 1.2.3.4), a network/netmask (e.g. 1.2.3.4/255.255.255.0) or a network/CIDR (e.g. 1.2.3.4/24)."), strAllow),
    


    Sjors commented at 2:26 PM on November 20, 2019:

    nit: make this NoTranslate. All relevant documentation is in English anyway.


    laanwj commented at 2:54 PM on November 20, 2019:

    Agree. This is a terrible message to translate.


    hebasto commented at 6:21 PM on November 21, 2019:

    Done.


    MarcoFalke commented at 6:57 PM on May 4, 2020:

    This has not yet been addressed


    MarcoFalke commented at 6:58 PM on May 4, 2020:

    I'd say we should leave all new translations for a later pull. You can blindly mark everything Untranslated for now


    hebasto commented at 2:09 AM on May 5, 2020:
  158. Sjors commented at 2:36 PM on November 20, 2019: member

    The end result ffed46515d556c0dbc8535548d0a485a62306106 looks good, lightly tested on macOS.

    But the individual commits are too confusing atm, they would be easier to review if you:

    1. the first commit 05b20f6 as is
    2. introduce Untranslated earlier, with just {return original}
    3. the next commit moves .translated to ThreadSafeMessageBox
    4. a commit where you introduce newly translated strings _(
    5. a commit that drops the redundant return false from calls to InitError (although otherwise unrelated)
    6. (maybe a few more things, to keep 7 focussed)
    7. switch to bilingual_str

    I don't mind if this PR adds or removes a few translations, if that makes things easier. I also suspect there's more places where we can add Untranslated, but this could be done in a followup.

  159. laanwj commented at 2:54 PM on November 20, 2019: member

    ACK ffed46515d556c0dbc8535548d0a485a62306106

    I like that this has a by-effect of introducing a type for GUI-facing messages versus internal ones. An explicit Untranslated instead of having bilingual_str implicitly constructed is a good idea. I also like that you put the translation-related stuff in a separate header.

  160. DrahtBot added the label Needs rebase on Nov 20, 2019
  161. hebasto force-pushed on Nov 21, 2019
  162. hebasto commented at 6:18 PM on November 21, 2019: member

    Rebased after #17444 has been merged.

    Also, @Sjors's comment has been addressed.

  163. hebasto commented at 6:29 PM on November 21, 2019: member

    @Sjors

    But the individual commits are too confusing atm, they would be easier to review if you ...

    Sorry, but I'd prefer to leave the commit order as is for the following reasons: (a) it helps me to keep this PR rebased; (b) other reviewers have ACKed already. The intrinsic logic of each commit is: a functional change plus other changes to compile successfully.

    I also suspect there's more places where we can add Untranslated, but this could be done in a followup.

    Totally agree with you.

  164. DrahtBot removed the label Needs rebase on Nov 21, 2019
  165. DrahtBot added the label Needs rebase on Jan 8, 2020
  166. hebasto force-pushed on Jan 8, 2020
  167. hebasto commented at 5:19 PM on January 8, 2020: member

    Rebased after #16963 has been merged.

  168. DrahtBot removed the label Needs rebase on Jan 8, 2020
  169. DrahtBot added the label Needs rebase on Jan 17, 2020
  170. hebasto force-pushed on Jan 18, 2020
  171. DrahtBot removed the label Needs rebase on Jan 18, 2020
  172. hebasto commented at 2:49 PM on January 18, 2020: member

    Rebased after #17943 has been merged.

  173. DrahtBot added the label Needs rebase on Jan 22, 2020
  174. Sjors commented at 5:19 PM on January 22, 2020: member

    Needs a rebase now that #17943 was reverted.

  175. hebasto force-pushed on Jan 23, 2020
  176. hebasto commented at 6:08 PM on January 23, 2020: member

    Rebased after #17754 and #17965 have been merged.

  177. DrahtBot removed the label Needs rebase on Jan 23, 2020
  178. DrahtBot added the label Needs rebase on Jan 30, 2020
  179. hebasto force-pushed on Jan 30, 2020
  180. hebasto commented at 5:24 PM on January 30, 2020: member

    Rebased after #16702 and #17261 have been merged.

  181. DrahtBot removed the label Needs rebase on Jan 30, 2020
  182. hebasto cross-referenced this on Feb 1, 2020 from issue "PSBT Operations" dialog by gwillen
  183. DrahtBot cross-referenced this on Feb 11, 2020 from issue Fix crashes and infinite loop in ListWalletDir() by uhliksk
  184. DrahtBot cross-referenced this on Feb 11, 2020 from issue wallet: Remove calls to Chain::Lock methods by ryanofsky
  185. DrahtBot cross-referenced this on Feb 11, 2020 from issue config, net, test: asmap feature refinements and functional tests by jonatack
  186. DrahtBot cross-referenced this on Feb 11, 2020 from issue Add ChainstateManager, remove BlockManager global by jamesob
  187. DrahtBot cross-referenced this on Feb 11, 2020 from issue qt: Do not block GUI thread in RPCConsole by hebasto
  188. DrahtBot cross-referenced this on Feb 11, 2020 from issue Switch to weight units for all feerates computation by darosior
  189. DrahtBot cross-referenced this on Feb 11, 2020 from issue util: Set safe permissions for data directory and `wallets/` subdir by hebasto
  190. DrahtBot cross-referenced this on Feb 11, 2020 from issue wallet: Handle duplicate fileid exception by promag
  191. DrahtBot cross-referenced this on Feb 11, 2020 from issue Chainparams: Rename IsTestChain() to AllowAcceptNonstd() by jtimon
  192. DrahtBot cross-referenced this on Feb 11, 2020 from issue Native Descriptor Wallets using DescriptorScriptPubKeyMan by achow101
  193. DrahtBot cross-referenced this on Feb 11, 2020 from issue Replace -upgradewallet startup option with upgradewallet RPC by achow101
  194. DrahtBot cross-referenced this on Feb 11, 2020 from issue build: Optionally enable -Wzero-as-null-pointer-constant by Empact
  195. DrahtBot cross-referenced this on Feb 12, 2020 from issue Add address-based index (attempt 4?) by marcinja
  196. DrahtBot cross-referenced this on Feb 21, 2020 from issue Add error handling to all boost filesystem functions by uhliksk
  197. DrahtBot cross-referenced this on Feb 21, 2020 from issue External signer support - Wallet Box edition by Sjors
  198. DrahtBot cross-referenced this on Feb 22, 2020 from issue UI external signer support (e.g. hardware wallet) by Sjors
  199. DrahtBot cross-referenced this on Feb 26, 2020 from issue Multiprocess bitcoin by ryanofsky
  200. DrahtBot cross-referenced this on Mar 4, 2020 from issue qt: Use SynchronizationState enum for signals to GUI by hebasto
  201. DrahtBot added the label Needs rebase on Mar 5, 2020
  202. hebasto force-pushed on Mar 5, 2020
  203. hebasto commented at 7:49 PM on March 5, 2020: member

    ~Rebased due to #17812.~

  204. DrahtBot removed the label Needs rebase on Mar 5, 2020
  205. hebasto force-pushed on Mar 5, 2020
  206. hebasto commented at 8:52 PM on March 5, 2020: member

    Rebased due to #17812. Now fixed.

  207. DrahtBot cross-referenced this on Mar 7, 2020 from issue [WIP] Index for UTXO Set Statistics by fjahr
  208. emilengler commented at 5:10 PM on March 13, 2020: contributor

    This is probably a low level error but running HEAD on german with --datadir=/tmp/no results in grafik

    I miss the English message there

  209. hebasto commented at 6:51 PM on March 13, 2020: member

    @emilengler

    This is probably a low level error but running HEAD on german with --datadir=/tmp/no results in grafik

    I miss the English message there

    This is due to the following line: https://github.com/bitcoin/bitcoin/blob/d600529cf44cde00212028f91c9ded5c4550d9ff/src/interfaces/node.cpp#L56

    And I think this made intentionally after merging #16366. See some comments:

  210. laanwj removed this from the milestone 0.20.0 on Mar 25, 2020
  211. laanwj added this to the milestone 0.21.0 on Mar 25, 2020
  212. DrahtBot cross-referenced this on Apr 1, 2020 from issue Wallet passive startup by ryanofsky
  213. DrahtBot added the label Needs rebase on Apr 2, 2020
  214. hebasto force-pushed on Apr 11, 2020
  215. hebasto commented at 3:51 PM on April 11, 2020: member

    Rebased d600529cf44cde00212028f91c9ded5c4550d9ff -> 4bcdc3f4d9a5386b69142ca72ad500c64f9eab24 due to the conflict with #17737.

  216. DrahtBot removed the label Needs rebase on Apr 11, 2020
  217. Sjors commented at 11:45 AM on April 12, 2020: member

    tACK 4bcdc3f

  218. DrahtBot cross-referenced this on Apr 14, 2020 from issue assumeutxo by jamesob
  219. DrahtBot added the label Needs rebase on Apr 14, 2020
  220. hebasto force-pushed on Apr 16, 2020
  221. hebasto commented at 9:24 PM on April 16, 2020: member

    Rebased 4bcdc3f4d9a5386b69142ca72ad500c64f9eab24 -> 5ca0c77bae59f33dc122305d5f68077a70153af7 due to the conflict with #17954.

  222. hebasto commented at 9:35 PM on April 16, 2020: member

    @ryanofsky @MarcoFalke @practicalswift @promag @laanwj @jonasschnelli @Sjors @emilengler

    Mind re-reviewing this PR to give it some--I hope final--(re)ACKs :)

  223. DrahtBot removed the label Needs rebase on Apr 16, 2020
  224. DrahtBot cross-referenced this on Apr 16, 2020 from issue rpc: remove g_rpc_node & g_rpc_chain by brakmic
  225. DrahtBot cross-referenced this on Apr 17, 2020 from issue Reverse cs_main, cs_wallet lock order and reduce cs_main locking by ariard
  226. DrahtBot cross-referenced this on Apr 18, 2020 from issue wallet: Avoid translating RPC errors by MarcoFalke
  227. DrahtBot added the label Needs rebase on Apr 19, 2020
  228. in src/wallet/load.cpp:56 in 5ca0c77bae outdated
      48 | @@ -49,14 +49,15 @@ bool VerifyWallets(interfaces::Chain& chain, const std::vector<std::string>& wal
      49 |          WalletLocation location(wallet_file);
      50 |  
      51 |          if (!wallet_paths.insert(location.GetPath()).second) {
      52 | -            chain.initError(strprintf(_("Error loading wallet %s. Duplicate -wallet filename specified.").translated, wallet_file));
      53 | +            chain.initError(strprintf(_("Error loading wallet %s. Duplicate -wallet filename specified."), wallet_file));
      54 |              return false;
      55 |          }
      56 |  
      57 | +        // TODO: error_string and warning_string should be bilingual strings.
    


    MarcoFalke commented at 1:51 PM on April 19, 2020:

    I have a slight preference to get #18699 in first, which fixes this TODO


    hebasto commented at 2:02 PM on April 19, 2020:

    Agree.

  229. MarcoFalke approved
  230. MarcoFalke commented at 1:53 PM on April 19, 2020: member

    Concept ACK

  231. Sjors commented at 2:04 PM on April 19, 2020: member

    Looks like it needs another rebase.

  232. hebasto force-pushed on Apr 20, 2020
  233. hebasto commented at 4:05 PM on April 20, 2020: member

    Rebased 5ca0c77bae59f33dc122305d5f68077a70153af7 -> cb041d501ac478a39ef73df86c3bce3b084cae18 due to the conflict with #15761.

  234. DrahtBot removed the label Needs rebase on Apr 20, 2020
  235. DrahtBot cross-referenced this on Apr 22, 2020 from issue Remove g_rpc_node global by ryanofsky
  236. Sjors commented at 4:47 PM on April 23, 2020: member

    re-tACK cb041d5

    Can you update the PR description with an example that actually works? E.g. bitcoin-qt -lang=nl -uacomment="\\"

    <img width="474" alt="Schermafbeelding 2020-04-23 om 18 46 57" src="https://user-images.githubusercontent.com/10217/80126137-f2982c80-8592-11ea-93a5-d7684d5343ee.png">

  237. hebasto commented at 2:16 PM on April 24, 2020: member

    @Sjors

    re-tACK cb041d5

    Can you update the PR description with an example that actually works? E.g. bitcoin-qt -lang=nl -uacomment="\\"

    Thank you! Updated.

  238. DrahtBot added the label Needs rebase on Apr 27, 2020
  239. hebasto force-pushed on Apr 27, 2020
  240. hebasto commented at 3:46 AM on April 27, 2020: member

    Rebased cb041d501ac478a39ef73df86c3bce3b084cae18 -> https://github.com/bitcoin/bitcoin/commit/0ea49f4c28ca9dd7cf5ba81c66041d2c2f7b2e92 due to the conflict with #16528.

  241. DrahtBot removed the label Needs rebase on Apr 27, 2020
  242. Sjors commented at 7:21 PM on April 27, 2020: member

    utACK 0ea49f4c28ca9dd7cf5ba81c66041d2c2f7b2e92 rebase

  243. DrahtBot added the label Needs rebase on May 1, 2020
  244. hebasto force-pushed on May 1, 2020
  245. hebasto commented at 7:59 PM on May 1, 2020: member

    Rebased 0ea49f4c28ca9dd7cf5ba81c66041d2c2f7b2e92 -> 1078fad9c517059d3752d01cdca189994fac0d4b due to the conflicts with #16426 and #18727.

  246. DrahtBot removed the label Needs rebase on May 1, 2020
  247. DrahtBot cross-referenced this on May 2, 2020 from issue The Zero Allocations project by jb55
  248. Sjors commented at 10:17 AM on May 4, 2020: member

    Travis didn't run. Make sure your account didn't accidentally get flagged.

  249. hebasto commented at 10:20 AM on May 4, 2020: member

    Travis didn't run. Make sure your account didn't accidentally get flagged.

    Verified. It seems ok.

  250. Sjors commented at 10:43 AM on May 4, 2020: member

    Ok, maybe just try another rebase?

  251. hebasto force-pushed on May 4, 2020
  252. hebasto commented at 10:47 AM on May 4, 2020: member

    Ok, maybe just try another rebase?

    Rebased 1078fad9c517059d3752d01cdca189994fac0d4b -> 101ff19cdc0743c48ec76d9a39855be632de7956.

  253. MarcoFalke commented at 2:41 PM on May 4, 2020: member

    Needs rebase, but diff should be slightly smaller because of the merge of #18699

  254. DrahtBot added the label Needs rebase on May 4, 2020
  255. hebasto force-pushed on May 4, 2020
  256. hebasto commented at 4:40 PM on May 4, 2020: member

    Rebased 101ff19cdc0743c48ec76d9a39855be632de7956 -> 5ff042d4955ab0f8a0dd8ed2522cf0da17f5b00d due to the conflict with #18699.

  257. DrahtBot removed the label Needs rebase on May 4, 2020
  258. Sjors commented at 6:43 PM on May 4, 2020: member

    re-tACK 5ff042d

  259. gui: Add detailed text to BitcoinGUI::message 23b9fa2e5e
  260. Make ThreadSafe{MessageBox|Question} bilingual 917ca93553
  261. Make InitError bilingual 7e923d47ba
  262. doc: Do not translate technical or extremely rare errors e95e658b8e
  263. util: Cleanup translation.h 18bd83b1fe
  264. hebasto force-pushed on May 5, 2020
  265. hebasto commented at 2:08 AM on May 5, 2020: member

    Updated 5ff042d4955ab0f8a0dd8ed2522cf0da17f5b00d -> 18bd83b1fee2eb47ed4ad05c91f2d6cc311fc9ad:

    I'd say we should leave all new translations for a later pull. You can blindly mark everything Untranslated for now

  266. Sjors commented at 3:19 PM on May 8, 2020: member

    re-tACK 18bd83b1fee2eb47ed4ad05c91f2d6cc311fc9ad

  267. MarcoFalke commented at 4:00 PM on May 8, 2020: member

    ACK 18bd83b1fee2eb47ed4ad05c91f2d6cc311fc9ad 🐦

    Thanks for finally making the debug log of international users readable. I found it painful to translate the debug log in bug reports back to English.

    I checked that no new translations are added, but did not run the GUI.

    <details><summary>Show signature and timestamp</summary>

    Signature:

    -----BEGIN PGP SIGNED MESSAGE-----
    Hash: SHA512
    
    ACK 18bd83b1fee2eb47ed4ad05c91f2d6cc311fc9ad 🐦
    
    Thanks for finally making the debug log of international users readable. I
    found it painful to translate the debug log in bug reports back to English.
    
    I checked that no new translations are added, but did not run the GUI.
    -----BEGIN PGP SIGNATURE-----
    
    iQGzBAEBCgAdFiEE+rVPoUahrI9sLGYTzit1aX5ppUgFAlwqrYAACgkQzit1aX5p
    pUiI8wwAnm6ab4DxH44gY+MYdYKbbQe+Qayc2wuMw1wvpNfYdJDZ2xK2N5ZWCIoc
    grA4eVeluZggMf30d8pKP+HFofQVugYFyTB/lG/9PnSl//WAgezClqkxnW1YE0pm
    xfVfKC1f7RBGswfcm+Rrq7m0LfzWEjoGgCCbcjQm86kAP+Mt8phmjQRNc43FycFJ
    dLO7DFZMiqjSIhLi4bbSqiynUXuTY2tMbjv4e23gHWKFcnvndBE3QjfirsRlcp4f
    Ly5lvEFCABOdnMQ0K8/9bSn2XqHwWyZxXJ+Yj1twkCchcjmcnHTfAmTJXs0Vahqd
    vapzAw2X0dk6x8JWZcu+am7rFSzZu+tAHWnDC1DgjgsnDZMMTI4rjPbtBP9X01ka
    C6SjRDt91NZdm2x+jXrHKEhmQdQ3FDVU2hGb6g3cjxe/RJAyxZ3W5ZTTYqvQXOjh
    992J7pQOtQjQHovjFWyQ4WSxlTXPd7PFhZ1NyOJE2UCJD8rdUtav2nxzbh0q3SX2
    Seu4nsii
    =xXpH
    -----END PGP SIGNATURE-----
    

    Timestamp of file with hash 1fd623baf008aff28a965813df642d958b9fc77a22a30025ff01d55db57e248e -

    </details>

  268. MarcoFalke merged this on May 8, 2020
  269. MarcoFalke closed this on May 8, 2020

  270. hebasto deleted the branch on May 8, 2020
  271. jonatack cross-referenced this on May 8, 2020 from issue Serve cfcheckpt requests by jnewbery
  272. hebasto cross-referenced this on May 10, 2020 from issue Pass bilingual_str argument to AbortNode() by hebasto
  273. domob1812 referenced this in commit e2470922f5 on May 11, 2020
  274. MarcoFalke referenced this in commit e45fb7e0d2 on May 12, 2020
  275. sidhujag referenced this in commit fc9f727a08 on May 12, 2020
  276. sidhujag referenced this in commit f21e1a5217 on May 12, 2020
  277. MarcoFalke referenced this in commit 4b30c41b4e on Jun 16, 2020
  278. sidhujag referenced this in commit f3dc64f18d on Jul 7, 2020
  279. monstrobishi referenced this in commit b197d184be on Sep 6, 2020
  280. str4d cross-referenced this on Oct 18, 2020 from issue Support internationalization for CLI documentation & the metrics screen. by daira
  281. jasonbcox referenced this in commit 4ca53cf009 on Oct 20, 2020
  282. jasonbcox referenced this in commit 44c87af6b5 on Oct 20, 2020
  283. jasonbcox referenced this in commit 5b1bc64e8e on Oct 20, 2020
  284. deadalnix referenced this in commit 8ad96feb52 on Oct 20, 2020
  285. jasonbcox referenced this in commit 626a4fc628 on Oct 20, 2020
  286. hebasto cross-referenced this on Aug 5, 2021 from issue Prompt to reset settings when settings.json cannot be read by ryanofsky
  287. PastaPastaPasta referenced this in commit f83dd4f290 on Apr 5, 2022
  288. PastaPastaPasta referenced this in commit 7a6f894184 on Apr 5, 2022
  289. kwvg referenced this in commit adea612e84 on Apr 7, 2022
  290. kwvg referenced this in commit 1b3f3a0176 on Apr 7, 2022
  291. PastaPastaPasta referenced this in commit af00598c9a on Apr 7, 2022
  292. bitcoin locked this on Aug 16, 2022

Milestone
0.21.0

Linked (view graph)
#15340 gui: Introduce bilingual GUI error messages#15894 Remove duplicated "Error: " prefix in logs#16218 gui: Translated messages should not be written to debug log (InitError, InitWarning, ...)#16278 tests: Remove unused includes#16355 refactor: move CCoinsViewErrorCatcher out of init.cpp#16362 Add bilingual_str type#16366 init: Use InitError for all errors in bitcoind/qt#16540 test: Add ASSERT_DEBUG_LOG to unit test framework#16620 util: Move ResolveErrMsg to util/error#16702 p2p: supplying and using asmap to improve IP bucketing in addrman#16743 refactor: move LoadChainTip/RelayBlocks under CChainState#16839 Replace Connman and BanMan globals with NodeContext local#16963 wallet: Fix unique_ptr usage in boost::signals2#17070 wallet: Avoid showing GUI popups on RPC errors#17138 Remove wallet access to some node arguments#17260 Split some CWallet functions into new LegacyScriptPubKeyMan#17261 Make ScriptPubKeyMan an actual interface and the wallet to have multiple#17279 refactor: Remove redundant c_str() calls in formatting#17304 refactor: Move many functions into LegacyScriptPubKeyMan and further separate it from CWallet#17444 wallet: Avoid showing GUI popups on RPC errors (take 2)#17754 net: Don't allow resolving of std::string with embedded NUL characters. Add tests. #17943 qt, refactor: Remove never used default parameter#17965 qt: Revert changes of pr17943#18027 "PSBT Operations" dialog#18669 log: Use Join() helper when listing log categories#18727 test: Add CreateWalletFromFile test#18877 Serve cfcheckpt requests#18927 Pass bilingual_str argument to AbortNode()

github-metadata-mirror

This is a metadata mirror of the GitHub repository bitcoin/bitcoin. This site is not affiliated with GitHub. Content is generated from a GitHub metadata backup.
generated: 2026-05-20 06:54 UTC