I18n how to?



  • I'm driving mad in i18n with Pyside. I followed some tutorials but have some problem in tranlsating some QmessageBox dialog and some other parts of the project.

    There is a manner to put most the strings in external py file and import it in the app and translating all the hard to translate string here.

    as example if i do

    import messages ad MS

    and refer to them as MS.msg001 in the code so i have i translated as simple string in the messages.py file?

    Thanks to all

    Carlo D.



  • I believe that you could create QTranslate() strings and use them after.
    Did you take a look to the format function?
    @
    myBestMessage = QtGui.QApplication.translate("TestSoft", "This is my secret: <br>{0}<br>Do you like it?", None)

    When you use it make something like:

    mySecret = "1234ABCDE...."
    myResult = myBestMessage.format(mySecret)
    @
    Remember that translations should hardcoded (that's what I thing I've heard of).



  • Many Thanks, I've solved putting them in the init part of the class so they are translated properly and refer to these messages in a derived QMessageBox, some QmessageBox fails About seems to work but Question (i didn't remember well fails to translate properly the messages).

          @
       
        self.toolcyl = self.tr("Cylindrical")
        self.toolsph = self.tr("Spherical (Ball)")        
        self.tooltor = self.tr("Toroidal (Bull)") 
        self.toolcon = self.tr("Conical") 
    
        glb.shape[0] = self.toolcyl
        glb.shape[1] = self.toolsph
        glb.shape[2] = self.tooltor
        glb.shape[3] = self.toolcon
    
        # End of the tool shapes definition        
        #
        ######################################################################
    
        EC_L.readTooltable(self)
        EC_UA.populateUI(self)
        
        ######################################################################        
        #        
        # Translatable string goes here i didn't find a method to make it 
        # work flawlessy in some QMessageBox 
        #
        ######################################################################
    
        # Exit Dialog        
        self.msg_01t = self.tr("<b>Exit Dialog</b>")
        self.msg_01m = self.tr("Are You sure you want to exit?")
    
        # About EuroCAM Box
        self.msg_02t = self.tr("About ")
        self.msg_02m = self.tr("<b>SomeProgram</b> is a program. <br> \
                       <br> It generates some output to help you in \
                       figuring out the life, the universe and all other things.")        
    
        # @
    

    I'm using them in the About widget without too many problem like this:

    @QMessageBox.about(self,self.msg_02t,self.msg_02m) @

    For the others MessageBox i have written a def like this:

    @
    def closeEvent(self, event):
    msgBox = QMessageBox()
    msgBox.setText(self.msg_01t)
    msgBox.setInformativeText(self.msg_01m)
    msgBox.setStandardButtons(QMessageBox.Yes | QMessageBox.Cancel)
    msgBox.setDefaultButton(QMessageBox.Yes)
    msgBox.setIcon(QMessageBox.Question)
    ret = msgBox.exec_()
    event.ignore()
    if ret == QMessageBox.Yes:
    # Do Something
    event.accept()
    elif ret == QMessageBox.Cancel:
    event.ignore()@

    In this manner it works as expected and if you note in the first lines of the examples i have translate some messages that are referenced in another module of the program. After struggling with this behavior I have found this solution that isn't too bad and not too unelegant, but the readability of the code suffers a little.

    Regards
    Carlo D.


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.