Dynamically created Qt Quick QML component strings not translated



  • We have a top-level QML object inside a QWidget. For the high-level object we call installTranslatorFunctions and the application's current translators are installed appropriately. The QML strings are properly translated.

    However, from our top-level QML object we call Qt.createComponent followed by component.createObject call to show a pure QML dialog. Our problem is the strings in the dynamically created dialog are not being translated appropriately. The same strings that are shared in the top-level QML (from where createComponent is called) are being translated and displayed properly. So we do not suspect that this is a more global issue of not going through the translation process correctly. Is there are separate step that needs to be done to install a translator for this dynamic component? I couldn't find reference to that in my searches.

    We are using Qt 5.4.1.

    Thank you for any assistance or thoughts anyone may provide!

    var component = Qt.createComponent("EditServerDialog.qml")
    var dialog = component.createObject(root, {visible: true, currentIndex: -1})
    

    Where EditServerDialog.qml is (edited for brevity):

    import QtQuick 2.4
    import QtQuick.Window 2.0
    
    import "qrc:/QML/GUI/QML"
    
    Window {
        id: editServerDialogWindow
        width: 600
        height: 350
        flags: Qt.Dialog
        modality: Qt.ApplicationModal
    
    
        EditServerDialogForm {
       }
    }
    

    and EditServerDialogForm was created in QML Designer:

    import QtQuick 2.4
    import QtQuick.Controls 1.2
    
    Item {
        id: editServerUiContent
        clip: false
        width: 600
        height: 350
        transformOrigin: Item.Center
        
        Label {
            id: label1
            x: 39
            y: 41
            text: qsTr("Connection Name")
            verticalAlignment: Text.AlignVCenter
        }
    
        Label {
            id: label2
            x: 116
            y: 81
            text: qsTr("Server")
        }
    
        Label {
            id: label3
            x: 121
            y: 121
            text: qsTr("Share")
        }
    
        Label {
            id: label4
            x: 108
            y: 161
            text: qsTr("Domain")
        }
    
        Label {
            id: label5
            x: 92
            y: 201
            text: qsTr("Username")
        }
    
        Label {
            id: label6
            x: 95
            y: 241
            text: qsTr("Password")
        }
    
        property alias cancelButton: buttonCancel
        Button {
            id: buttonCancel
            x: 479
            y: 293
            text: qsTr("Cancel")
            isDefault: true
        }
    
        property alias okButton: buttonOk
        Button {
            id: buttonOk
            x: 380
            y: 293
            text: qsTr("OK")
            activeFocusOnPress: false
        }
    
        property string connName: textInputConnName.text
        TextField {
            id: textInputConnName
            x: 180
            y: 40
            width: 360
            height: 20
            text: connNameIn
            placeholderText: connNamePlaceholder
            activeFocusOnPress: true
            inputMask: qsTr("")
            z: 1
            clip: true
            //cursorVisible: true
            focus: true
            KeyNavigation.tab: textInputServerName
            KeyNavigation.backtab: cancelButton
            KeyNavigation.priority: KeyNavigation.BeforeItem
            //selectByMouse: true
        }
    
        Rectangle {
            id: rectangleConnName
            x: 178
            y: 38
            width: 364
            height: 23
            color: "#e0e0e0"
            radius: 3
            border.width: 2
            border.color: "#000000"
        }
    
        property string serverName: textInputServerName.text
        TextField {
            id: textInputServerName
            x: 180
            y: 80
            width: 360
            height: 20
            text: serverNameIn
            placeholderText: serverNamePlaceholder
            inputMask: qsTr("")
            clip: true
            z: 1
           // cursorVisible: false
            KeyNavigation.tab: textInputShareName
            KeyNavigation.backtab: textInputConnName
            KeyNavigation.priority: KeyNavigation.BeforeItem
           // selectByMouse: true
        }
    
        Rectangle {
            id: rectangleServerName
            x: 178
            y: 78
            width: 364
            height: 23
            color: "#e0e0e0"
            radius: 3
            border.width: 2
            border.color: "#000000"
        }
    
        property string shareName: textInputShareName.text
        TextField {
            id: textInputShareName
            x: 180
            y: 120
            width: 360
            height: 20
            text: shareNameIn
            placeholderText: shareNamePlaceholder
            inputMask: qsTr("")
            //cursorVisible: false
            z: 1
            clip: true
            KeyNavigation.tab: textInputDomainName
            KeyNavigation.backtab: textInputServerName
            KeyNavigation.priority: KeyNavigation.BeforeItem
            //selectByMouse: true
        }
    
        Rectangle {
            id: rectangleShareName
                x: 178
                y: 119
                width: 364
                height: 23
                color: "#e0e0e0"
                radius: 3
                border.color: "#000000"
                border.width: 2
            }
    
        property string username: textInputUsername.text
        TextField {
            id: textInputUsername
            x: 180
            y: 200
            width: 360
            height: 20
            text: usernameIn
            placeholderText: usernamePlaceholder
            inputMask: qsTr("")
            //cursorVisible: false
            z: 1
            clip: true
            KeyNavigation.tab: textInputPassword
            KeyNavigation.backtab: textInputDomainName
            KeyNavigation.priority: KeyNavigation.BeforeItem
            //selectByMouse: true
        }
    
        Rectangle {
            id: rectangleUsername
            x: 178
            y: 198
            width: 364
            height: 23
            color: "#e0e0e0"
            radius: 3
            border.color: "#000000"
            border.width: 2
        }
    
        property string password: textInputPassword.text
        TextField {
            id: textInputPassword
            x: 180
            y: 240
            width: 360
            height: 20
            text: passwordIn
            echoMode: TextInput.Password
            inputMask: qsTr("")
            placeholderText: passwordPlaceholder
            //cursorVisible: false
            z: 1
            clip: true
            KeyNavigation.tab: okButton
            KeyNavigation.backtab: textInputUsername
            KeyNavigation.priority: KeyNavigation.BeforeItem
            //selectByMouse: true
        }
    
        Rectangle {
            id: rectanglePassword
            x: 178
            y: 239
            width: 364
            height: 23
            color: "#e0e0e0"
            radius: 3
            border.color: "#000000"
            border.width: 2
        }
    
        property string domainName: textInputDomainName.text
        TextField {
            id: textInputDomainName
            x: 180
            y: 160
            width: 360
            height: 20
            text: domainNameIn
            inputMask: qsTr("")
            placeholderText:  domainNamePlaceholder
            //cursorVisible: false
            z: 1
            clip: true
            KeyNavigation.tab: textInputUsername
            KeyNavigation.backtab: textInputShareName
            KeyNavigation.priority: KeyNavigation.BeforeItem
            //selectByMouse: true
        }
    
        Rectangle {
            id: rectangleDomainName
            x: 178
            y: 159
            width: 364
            height: 23
            color: "#e0e0e0"
            radius: 3
            border.color: "#000000"
            border.width: 2
        }
    }
    
    
    


  • Hi,

    I had almost the same problem. In my case, I wanted translate a string in ListModel and qsTr("MyString") didn't work. I have solved the problem with using QT_TR_NOOP("MyString"). Have you tested ?

    Bye & good luck.

    Charlie



  • I'm not sure how that would work in this case. We will give it a shot. These are static strings defined within the QML itself - nothing fancy like a list view.


Log in to reply
 

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