Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. Translation does not work when the text of QLineEdit is modified

Translation does not work when the text of QLineEdit is modified

Scheduled Pinned Locked Moved Solved General and Desktop
translation
13 Posts 4 Posters 3.7k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • S Online
    S Online
    sierdzio
    Moderators
    wrote on 3 Dec 2016, 17:02 last edited by
    #4

    This is rather inner working of C++ itself. But I am only guessing to be honest.

    What you can try is to define this string array (btw. you can also use QStringList) in a singleton class that is initialized after translation is loaded, so that it gets correct data.

    (Z(:^

    Z 1 Reply Last reply 3 Dec 2016, 17:49
    0
    • S sierdzio
      3 Dec 2016, 17:02

      This is rather inner working of C++ itself. But I am only guessing to be honest.

      What you can try is to define this string array (btw. you can also use QStringList) in a singleton class that is initialized after translation is loaded, so that it gets correct data.

      Z Offline
      Z Offline
      Zoltan
      wrote on 3 Dec 2016, 17:49 last edited by
      #5

      @sierdzio My constant variable is called from the ui. But the ui class is instantiated after the translation is loaded. Shouldn't it be OK (it isn't)?

      1 Reply Last reply
      0
      • Z Zoltan
        3 Dec 2016, 11:55

        I have a desktop application I want to translate. All translations work well except in the following case. I have a QLineEdit object called resultEdit whose text is updated when a pushbutton is clicked on. resultEdit can display the following strings:

        const QString days[7] = {QCoreApplication::tr("Monday"), \
                                 QCoreApplication::tr("Tuesday"), \
                                 QCoreApplication::tr("Wednesday"), \
                                 QCoreApplication::tr("Thursday"), \
                                 QCoreApplication::tr("Friday"), \
                                 QCoreApplication::tr("Saturday"), \
                                 QCoreApplication::tr("Sunday")};
        

        So days is a global array. One callback functions which calculates which day to print is

        void ZellerGUI::on_yearEdit_editingFinished()
        {
            // Calculate the day of the week
            int calculatedDay = some_integer_from_1_to_7;
            ui->resultEdit->setText(days[calculatedDay - 1]);
        }
        

        However, when I select the translation, the names of the days remain in English. It is weird as all other stings are translated well. When I opened the Linguist, it recognised all seven days. What happens in the background that the translations do not work for this global array?

        K Offline
        K Offline
        kshegunov
        Moderators
        wrote on 3 Dec 2016, 18:19 last edited by
        #6

        Try something like this:

        const char * const days[7] = {
            QT_TR_NOOP("Monday"),
            QT_TR_NOOP("Tuesday"),
            // ... and so on
        }
        
        void ZellerGUI::on_yearEdit_editingFinished()
        {
            // ... calculate day
            QString day = QCoreApplication::tr(days[calculatedDay - 1]);
            ui->resultEdit->setText(day);
        }
        

        Read and abide by the Qt Code of Conduct

        Z 1 Reply Last reply 3 Dec 2016, 18:29
        0
        • K kshegunov
          3 Dec 2016, 18:19

          Try something like this:

          const char * const days[7] = {
              QT_TR_NOOP("Monday"),
              QT_TR_NOOP("Tuesday"),
              // ... and so on
          }
          
          void ZellerGUI::on_yearEdit_editingFinished()
          {
              // ... calculate day
              QString day = QCoreApplication::tr(days[calculatedDay - 1]);
              ui->resultEdit->setText(day);
          }
          
          Z Offline
          Z Offline
          Zoltan
          wrote on 3 Dec 2016, 18:29 last edited by
          #7

          @kshegunov When I call lupdate on the project file, it throws these warnings:

          tr() cannot be called without context
          

          and these strings do not appear in Linguist.

          K 1 Reply Last reply 3 Dec 2016, 19:05
          0
          • Z Zoltan
            3 Dec 2016, 18:29

            @kshegunov When I call lupdate on the project file, it throws these warnings:

            tr() cannot be called without context
            

            and these strings do not appear in Linguist.

            K Offline
            K Offline
            kshegunov
            Moderators
            wrote on 3 Dec 2016, 19:05 last edited by
            #8

            Yes I think my example is rotten. Try with QT_TRANSLATE_NOOP and give it a context:

            const char * const days[7] = {
                QT_TRANSLATE_NOOP("Weekdays", "Monday"),
                QT_TRANSLATE_NOOP("Weekdays", "Tuesday"),
                // ... and so on
            }
            

            Read and abide by the Qt Code of Conduct

            Z 1 Reply Last reply 3 Dec 2016, 19:18
            2
            • K kshegunov
              3 Dec 2016, 19:05

              Yes I think my example is rotten. Try with QT_TRANSLATE_NOOP and give it a context:

              const char * const days[7] = {
                  QT_TRANSLATE_NOOP("Weekdays", "Monday"),
                  QT_TRANSLATE_NOOP("Weekdays", "Tuesday"),
                  // ... and so on
              }
              
              Z Offline
              Z Offline
              Zoltan
              wrote on 3 Dec 2016, 19:18 last edited by Zoltan 12 Mar 2016, 19:29
              #9

              @kshegunov Thank you. Now Linguist recognizes it but my application doesn't appreciate it yet. In the debugger, I also see the English name.

              K 1 Reply Last reply 3 Dec 2016, 19:44
              0
              • Z Zoltan
                3 Dec 2016, 19:18

                @kshegunov Thank you. Now Linguist recognizes it but my application doesn't appreciate it yet. In the debugger, I also see the English name.

                K Offline
                K Offline
                kshegunov
                Moderators
                wrote on 3 Dec 2016, 19:44 last edited by
                #10

                Well, did you translate it?

                QString day = QCoreApplication::translate("Weekdays", days[calculatedDay - 1]);
                

                Read and abide by the Qt Code of Conduct

                Z 1 Reply Last reply 3 Dec 2016, 19:52
                2
                • K kshegunov
                  3 Dec 2016, 19:44

                  Well, did you translate it?

                  QString day = QCoreApplication::translate("Weekdays", days[calculatedDay - 1]);
                  
                  Z Offline
                  Z Offline
                  Zoltan
                  wrote on 3 Dec 2016, 19:52 last edited by
                  #11

                  @kshegunov I just used your previous solution:

                  QString day = QCoreApplication::tr(days[calculatedDay - 1]);
                  

                  Using your last command

                  QString day = QCoreApplication::translate("Weekdays", days[calculatedDay - 1]);
                  

                  perfectly works. Now I just have to think it over why it works.

                  Thank you very much for your precious help!

                  K ? 2 Replies Last reply 3 Dec 2016, 19:55
                  0
                  • Z Zoltan
                    3 Dec 2016, 19:52

                    @kshegunov I just used your previous solution:

                    QString day = QCoreApplication::tr(days[calculatedDay - 1]);
                    

                    Using your last command

                    QString day = QCoreApplication::translate("Weekdays", days[calculatedDay - 1]);
                    

                    perfectly works. Now I just have to think it over why it works.

                    Thank you very much for your precious help!

                    K Offline
                    K Offline
                    kshegunov
                    Moderators
                    wrote on 3 Dec 2016, 19:55 last edited by kshegunov 12 Mar 2016, 20:01
                    #12

                    You're welcome.
                    Happy coding!

                    Edit:
                    Btw, moving the keys to the function should also work:

                    void ZellerGUI::on_yearEdit_editingFinished()
                    {
                        // If this is initialized here it should work okay
                        static const char * const days[7] = {
                            QT_TR_NOOP("Monday"),
                            QT_TR_NOOP("Tuesday"),
                            // ... and so on
                        };
                        // ... calculate day
                        QString day = QCoreApplication::tr(days[calculatedDay - 1]);
                        ui->resultEdit->setText(day);
                    }
                    

                    Read and abide by the Qt Code of Conduct

                    1 Reply Last reply
                    3
                    • Z Zoltan
                      3 Dec 2016, 19:52

                      @kshegunov I just used your previous solution:

                      QString day = QCoreApplication::tr(days[calculatedDay - 1]);
                      

                      Using your last command

                      QString day = QCoreApplication::translate("Weekdays", days[calculatedDay - 1]);
                      

                      perfectly works. Now I just have to think it over why it works.

                      Thank you very much for your precious help!

                      ? Offline
                      ? Offline
                      A Former User
                      wrote on 11 Apr 2019, 14:30 last edited by
                      #13

                      @Zoltan I have the same problem, must I do?

                      1 Reply Last reply
                      0

                      • Login

                      • Login or register to search.
                      • First post
                        Last post
                      0
                      • Categories
                      • Recent
                      • Tags
                      • Popular
                      • Users
                      • Groups
                      • Search
                      • Get Qt Extensions
                      • Unsolved