1
mirror of https://github.com/monero-project/monero-gui synced 2024-11-25 10:47:19 +01:00

Merge pull request #2088

15a5f76 add missing TranslationManager.emptyString (selsta)
This commit is contained in:
luigi1111 2019-04-16 16:54:17 -04:00
commit 10926644bf
No known key found for this signature in database
GPG Key ID: F4ACA0183641E010
21 changed files with 765 additions and 65 deletions

View File

@ -684,7 +684,7 @@ Rectangle {
anchors.right: parent.right anchors.right: parent.right
anchors.bottom: daemonProgressBar.top anchors.bottom: daemonProgressBar.top
height: 48 * scaleRatio height: 48 * scaleRatio
syncType: qsTr("Wallet") syncType: qsTr("Wallet") + translationManager.emptyString
visible: networkStatus.connected visible: networkStatus.connected
} }
@ -693,7 +693,7 @@ Rectangle {
anchors.left: parent.left anchors.left: parent.left
anchors.right: parent.right anchors.right: parent.right
anchors.bottom: parent.bottom anchors.bottom: parent.bottom
syncType: qsTr("Daemon") syncType: qsTr("Daemon") + translationManager.emptyString
visible: networkStatus.connected visible: networkStatus.connected
height: 62 * scaleRatio height: 62 * scaleRatio
} }

View File

@ -90,7 +90,7 @@ Window {
} }
Text { Text {
text: qsTr("Starting local node in %1 seconds").arg(countDown); text: qsTr("Starting local node in %1 seconds").arg(countDown) + translationManager.emptyString;
font.pixelSize: 18 font.pixelSize: 18
Layout.alignment: Qt.AlignHCenter Layout.alignment: Qt.AlignHCenter
Layout.fillWidth: true Layout.fillWidth: true
@ -108,7 +108,7 @@ Window {
id: okButton id: okButton
visible:false visible:false
fontSize: 14 fontSize: 14
text: qsTr("Start daemon (%1)").arg(countDown) text: qsTr("Start daemon (%1)").arg(countDown) + translationManager.emptyString
KeyNavigation.tab: cancelButton KeyNavigation.tab: cancelButton
onClicked: { onClicked: {
timer.stop(); timer.stop();
@ -121,7 +121,7 @@ Window {
MoneroComponents.StandardButton { MoneroComponents.StandardButton {
id: cancelButton id: cancelButton
fontSize: 14 fontSize: 14
text: qsTr("Use custom settings") text: qsTr("Use custom settings") + translationManager.emptyString
onClicked: { onClicked: {
timer.stop(); timer.stop();

View File

@ -145,7 +145,7 @@ Item {
small: true small: true
width: 120 width: 120
fontSize: 14 fontSize: 14
text: qsTr("Ok") text: qsTr("Ok") + translationManager.emptyString
KeyNavigation.tab: cancelButton KeyNavigation.tab: cancelButton
onClicked: { onClicked: {
root.close() root.close()

View File

@ -126,7 +126,7 @@ Item {
MoneroComponents.LabelButton { MoneroComponents.LabelButton {
id: copyButtonId id: copyButtonId
text: qsTr("Copy") text: qsTr("Copy") + translationManager.emptyString
anchors.right: parent.right anchors.right: parent.right
onClicked: { onClicked: {
if (input.text.length > 0) { if (input.text.length > 0) {

View File

@ -134,7 +134,7 @@ ColumnLayout {
MoneroComponents.LabelButton { MoneroComponents.LabelButton {
id: copyButtonId id: copyButtonId
visible: copyButton && input.text !== "" visible: copyButton && input.text !== ""
text: qsTr("Copy") text: qsTr("Copy") + translationManager.emptyString
onClicked: { onClicked: {
if (input.text.length > 0) { if (input.text.length > 0) {
console.log("Copied to clipboard"); console.log("Copied to clipboard");
@ -147,7 +147,7 @@ ColumnLayout {
MoneroComponents.LabelButton { MoneroComponents.LabelButton {
id: pasteButtonId id: pasteButtonId
onClicked: item.onPaste(clipboard.text()) onClicked: item.onPaste(clipboard.text())
text: qsTr("Paste") text: qsTr("Paste") + translationManager.emptyString
visible: pasteButton visible: pasteButton
} }
} }

View File

@ -101,7 +101,7 @@ Item {
Layout.maximumWidth: 400 * scaleRatio Layout.maximumWidth: 400 * scaleRatio
Label { Label {
text: qsTr("Please enter new password") text: qsTr("Please enter new password") + translationManager.emptyString
Layout.fillWidth: true Layout.fillWidth: true
font.pixelSize: 16 * scaleRatio font.pixelSize: 16 * scaleRatio
@ -179,7 +179,7 @@ Item {
} }
Label { Label {
text: qsTr("Please confirm new password") text: qsTr("Please confirm new password") + translationManager.emptyString
Layout.fillWidth: true Layout.fillWidth: true
font.pixelSize: 16 * scaleRatio font.pixelSize: 16 * scaleRatio
@ -280,7 +280,7 @@ Item {
} }
MoneroComponents.StandardButton { MoneroComponents.StandardButton {
id: okButton id: okButton
text: qsTr("Continue") text: qsTr("Continue") + translationManager.emptyString
KeyNavigation.tab: cancelButton KeyNavigation.tab: cancelButton
enabled: passwordInput1.text === passwordInput2.text enabled: passwordInput1.text === passwordInput2.text
onClicked: { onClicked: {

View File

@ -111,7 +111,7 @@ Item {
Layout.maximumWidth: 400 * scaleRatio Layout.maximumWidth: 400 * scaleRatio
Label { Label {
text: root.walletName.length > 0 ? qsTr("Please enter wallet device passphrase for: ") + root.walletName : qsTr("Please enter wallet device passphrase") text: (root.walletName.length > 0 ? qsTr("Please enter wallet device passphrase for: ") + root.walletName : qsTr("Please enter wallet device passphrase")) + translationManager.emptyString
Layout.fillWidth: true Layout.fillWidth: true
font.pixelSize: 16 * scaleRatio font.pixelSize: 16 * scaleRatio
@ -121,7 +121,7 @@ Item {
} }
Label { Label {
text: qsTr("Warning: passphrase entry on host is a security risk as it can be captured by malware. It is advised to prefer device-based passphrase entry."); text: qsTr("Warning: passphrase entry on host is a security risk as it can be captured by malware. It is advised to prefer device-based passphrase entry.") + translationManager.emptyString
Layout.fillWidth: true Layout.fillWidth: true
wrapMode: Text.Wrap wrapMode: Text.Wrap
@ -211,7 +211,7 @@ Item {
} }
Label { Label {
text: qsTr("Please re-enter") text: qsTr("Please re-enter") + translationManager.emptyString
Layout.fillWidth: true Layout.fillWidth: true
font.pixelSize: 16 * scaleRatio font.pixelSize: 16 * scaleRatio
@ -312,7 +312,7 @@ Item {
} }
MoneroComponents.StandardButton { MoneroComponents.StandardButton {
id: okButton id: okButton
text: qsTr("Continue") text: qsTr("Continue") + translationManager.emptyString
KeyNavigation.tab: cancelButton KeyNavigation.tab: cancelButton
enabled: passphaseInput1.text === passphaseInput2.text enabled: passphaseInput1.text === passphaseInput2.text
onClicked: { onClicked: {

View File

@ -99,7 +99,7 @@ Item {
Layout.maximumWidth: 400 * scaleRatio Layout.maximumWidth: 400 * scaleRatio
Label { Label {
text: root.walletName.length > 0 ? qsTr("Please enter wallet password for: ") + root.walletName : qsTr("Please enter wallet password") text: (root.walletName.length > 0 ? qsTr("Please enter wallet password for: ") + root.walletName : qsTr("Please enter wallet password")) + translationManager.emptyString
Layout.fillWidth: true Layout.fillWidth: true
font.pixelSize: 16 * scaleRatio font.pixelSize: 16 * scaleRatio
@ -232,7 +232,7 @@ Item {
MoneroComponents.StandardButton { MoneroComponents.StandardButton {
id: okButton id: okButton
small: true small: true
text: qsTr("Continue") text: qsTr("Continue") + translationManager.emptyString
KeyNavigation.tab: cancelButton KeyNavigation.tab: cancelButton
onClicked: { onClicked: {
root.close() root.close()

View File

@ -1201,7 +1201,7 @@ ApplicationWindow {
handleTransactionConfirmed() handleTransactionConfirmed()
} }
} else { } else {
passwordDialog.showError(qsTr("Wrong password")); passwordDialog.showError(qsTr("Wrong password") + translationManager.emptyString);
} }
} }
passwordDialog.onRejectedCallback = null; passwordDialog.onRejectedCallback = null;
@ -1229,7 +1229,7 @@ ApplicationWindow {
//Open Wallet from file //Open Wallet from file
FileDialog { FileDialog {
id: fileDialog id: fileDialog
title: qsTr("Please choose a file") title: qsTr("Please choose a file") + translationManager.emptyString
folder: "file://" + moneroAccountsDir folder: "file://" + moneroAccountsDir
nameFilters: [ "Wallet files (*.keys)"] nameFilters: [ "Wallet files (*.keys)"]
sidebarVisible: false sidebarVisible: false
@ -1397,7 +1397,7 @@ ApplicationWindow {
height: appWindow.height / 2 height: appWindow.height / 2
x: (appWindow.width - width) / 2 x: (appWindow.width - width) / 2
y: (appWindow.height - height) / 2 y: (appWindow.height - height) / 2
messageText: qsTr("Please wait...") messageText: qsTr("Please wait...") + translationManager.emptyString
} }
Item { Item {

View File

@ -79,13 +79,13 @@ Rectangle {
MoneroComponents.LabelSubheader { MoneroComponents.LabelSubheader {
Layout.fillWidth: true Layout.fillWidth: true
textFormat: Text.RichText textFormat: Text.RichText
text: qsTr("Balance All") text: qsTr("Balance All") + translationManager.emptyString
} }
RowLayout { RowLayout {
Layout.topMargin: 22 * scaleRatio Layout.topMargin: 22 * scaleRatio
Text { Text {
text: qsTr("Total balance: ") text: qsTr("Total balance: ") + translationManager.emptyString
Layout.fillWidth: true Layout.fillWidth: true
color: "#757575" color: "#757575"
font.pixelSize: 14 font.pixelSize: 14
@ -118,7 +118,7 @@ Rectangle {
RowLayout { RowLayout {
Layout.topMargin: 10 * scaleRatio Layout.topMargin: 10 * scaleRatio
Text { Text {
text: qsTr("Total unlocked balance: ") text: qsTr("Total unlocked balance: ") + translationManager.emptyString
Layout.fillWidth: true Layout.fillWidth: true
color: "#757575" color: "#757575"
font.pixelSize: 14 font.pixelSize: 14
@ -156,7 +156,7 @@ Rectangle {
MoneroComponents.LabelSubheader { MoneroComponents.LabelSubheader {
Layout.fillWidth: true Layout.fillWidth: true
textFormat: Text.RichText textFormat: Text.RichText
text: qsTr("Accounts") text: qsTr("Accounts") + translationManager.emptyString
} }
ColumnLayout { ColumnLayout {
@ -320,7 +320,7 @@ Rectangle {
text: qsTr("Create new account") + translationManager.emptyString; text: qsTr("Create new account") + translationManager.emptyString;
onClicked: { onClicked: {
inputDialog.labelText = qsTr("Set the label of the new account:") + translationManager.emptyString inputDialog.labelText = qsTr("Set the label of the new account:") + translationManager.emptyString
inputDialog.inputText = qsTr("(Untitled)") inputDialog.inputText = qsTr("(Untitled)") + translationManager.emptyString
inputDialog.onAcceptedCallback = function() { inputDialog.onAcceptedCallback = function() {
appWindow.currentWallet.subaddressAccount.addRow(inputDialog.inputText) appWindow.currentWallet.subaddressAccount.addRow(inputDialog.inputText)
appWindow.currentWallet.switchSubaddressAccount(appWindow.currentWallet.numSubaddressAccounts() - 1) appWindow.currentWallet.switchSubaddressAccount(appWindow.currentWallet.numSubaddressAccounts() - 1)

View File

@ -396,7 +396,7 @@ Rectangle {
font.pixelSize: 16 * scaleRatio font.pixelSize: 16 * scaleRatio
font.bold: false font.bold: false
color: MoneroComponents.Style.defaultFontColor color: MoneroComponents.Style.defaultFontColor
text: qsTr("Cancel") text: qsTr("Cancel") + translationManager.emptyString
MouseArea { MouseArea {
anchors.fill: parent anchors.fill: parent
@ -413,7 +413,7 @@ Rectangle {
font.pixelSize: 16 * scaleRatio font.pixelSize: 16 * scaleRatio
font.bold: false font.bold: false
color: MoneroComponents.Style.defaultFontColor color: MoneroComponents.Style.defaultFontColor
text: qsTr("Delete") text: qsTr("Delete") + translationManager.emptyString
MouseArea { MouseArea {
anchors.fill: parent anchors.fill: parent

View File

@ -100,7 +100,7 @@ Rectangle {
Layout.alignment: Qt.AlignVCenter Layout.alignment: Qt.AlignVCenter
font.family: MoneroComponents.Style.fontRegular.name font.family: MoneroComponents.Style.fontRegular.name
font.pixelSize: 15 * scaleRatio font.pixelSize: 15 * scaleRatio
text: qsTr("Sort & filter") text: qsTr("Sort & filter") + translationManager.emptyString
color: MoneroComponents.Style.defaultFontColor color: MoneroComponents.Style.defaultFontColor
MouseArea { MouseArea {
@ -239,7 +239,7 @@ Rectangle {
id: sortBlockheightText id: sortBlockheightText
font.family: MoneroComponents.Style.fontRegular.name font.family: MoneroComponents.Style.fontRegular.name
font.pixelSize: 15 * scaleRatio font.pixelSize: 15 * scaleRatio
text: qsTr("Blockheight") text: qsTr("Blockheight") + translationManager.emptyString
color: root.sortBy === "blockheight" ? MoneroComponents.Style.defaultFontColor : MoneroComponents.Style.dimmedFontColor color: root.sortBy === "blockheight" ? MoneroComponents.Style.defaultFontColor : MoneroComponents.Style.dimmedFontColor
anchors.verticalCenter: parent.verticalCenter anchors.verticalCenter: parent.verticalCenter
} }
@ -295,7 +295,7 @@ Rectangle {
id: sortDateText id: sortDateText
font.family: MoneroComponents.Style.fontRegular.name font.family: MoneroComponents.Style.fontRegular.name
font.pixelSize: 15 * scaleRatio font.pixelSize: 15 * scaleRatio
text: qsTr("Date") text: qsTr("Date") + translationManager.emptyString
color: root.sortBy === "timestamp" ? MoneroComponents.Style.defaultFontColor : MoneroComponents.Style.dimmedFontColor color: root.sortBy === "timestamp" ? MoneroComponents.Style.defaultFontColor : MoneroComponents.Style.dimmedFontColor
anchors.verticalCenter: parent.verticalCenter anchors.verticalCenter: parent.verticalCenter
} }
@ -351,7 +351,7 @@ Rectangle {
id: sortAmountText id: sortAmountText
font.family: MoneroComponents.Style.fontRegular.name font.family: MoneroComponents.Style.fontRegular.name
font.pixelSize: 15 * scaleRatio font.pixelSize: 15 * scaleRatio
text: qsTr("Amount") text: qsTr("Amount") + translationManager.emptyString
color: root.sortBy === "amount" ? MoneroComponents.Style.defaultFontColor : MoneroComponents.Style.dimmedFontColor color: root.sortBy === "amount" ? MoneroComponents.Style.defaultFontColor : MoneroComponents.Style.dimmedFontColor
anchors.verticalCenter: parent.verticalCenter anchors.verticalCenter: parent.verticalCenter
} }
@ -604,7 +604,7 @@ Rectangle {
Text { Text {
font.family: MoneroComponents.Style.fontRegular.name font.family: MoneroComponents.Style.fontRegular.name
font.pixelSize: 15 * scaleRatio font.pixelSize: 15 * scaleRatio
text: isout ? qsTr("Sent") : qsTr("Received") text: (isout ? qsTr("Sent") : qsTr("Received")) + translationManager.emptyString
color: "#C0C0C0" color: "#C0C0C0"
anchors.verticalCenter: parent.verticalCenter anchors.verticalCenter: parent.verticalCenter
} }
@ -652,7 +652,7 @@ Rectangle {
Text { Text {
font.family: MoneroComponents.Style.fontRegular.name font.family: MoneroComponents.Style.fontRegular.name
font.pixelSize: 15 * scaleRatio font.pixelSize: 15 * scaleRatio
text: isout ? qsTr("Fee") : confirmationsRequired === 60 ? qsTr("Mined") : qsTr("Fee") text: (isout ? qsTr("Fee") : confirmationsRequired === 60 ? qsTr("Mined") : qsTr("Fee")) + translationManager.emptyString
color: "#C0C0C0" color: "#C0C0C0"
anchors.verticalCenter: parent.verticalCenter anchors.verticalCenter: parent.verticalCenter
} }
@ -667,7 +667,7 @@ Rectangle {
font.family: MoneroComponents.Style.fontRegular.name font.family: MoneroComponents.Style.fontRegular.name
font.pixelSize: 15 * scaleRatio font.pixelSize: 15 * scaleRatio
text: { text: {
if(!isout && confirmationsRequired === 60) return qsTr("Yes"); if(!isout && confirmationsRequired === 60) return qsTr("Yes") + translationManager.emptyString;
if(fee !== "") return fee + " XMR"; if(fee !== "") return fee + " XMR";
return "-"; return "-";
} }
@ -711,7 +711,7 @@ Rectangle {
Text { Text {
font.family: MoneroComponents.Style.fontRegular.name font.family: MoneroComponents.Style.fontRegular.name
font.pixelSize: 15 * scaleRatio font.pixelSize: 15 * scaleRatio
text: qsTr("Blockheight") text: qsTr("Blockheight") + translationManager.emptyString
color: "#C0C0C0" color: "#C0C0C0"
anchors.verticalCenter: parent.verticalCenter anchors.verticalCenter: parent.verticalCenter
} }
@ -725,7 +725,7 @@ Rectangle {
Text { Text {
font.family: MoneroComponents.Style.fontRegular.name font.family: MoneroComponents.Style.fontRegular.name
font.pixelSize: 14 * scaleRatio font.pixelSize: 14 * scaleRatio
text: blockheight > 0 ? blockheight : qsTr('Pending'); text: blockheight > 0 ? blockheight : qsTr('Pending') + translationManager.emptyString;
color: MoneroComponents.Style.defaultFontColor color: MoneroComponents.Style.defaultFontColor
anchors.verticalCenter: parent.verticalCenter anchors.verticalCenter: parent.verticalCenter
@ -760,7 +760,7 @@ Rectangle {
Text { Text {
font.family: MoneroComponents.Style.fontRegular.name font.family: MoneroComponents.Style.fontRegular.name
font.pixelSize: 15 * scaleRatio font.pixelSize: 15 * scaleRatio
text: qsTr("Confirmations") text: qsTr("Confirmations") + translationManager.emptyString
color: "#C0C0C0" color: "#C0C0C0"
anchors.verticalCenter: parent.verticalCenter anchors.verticalCenter: parent.verticalCenter
} }
@ -815,7 +815,7 @@ Rectangle {
Text { Text {
font.family: MoneroComponents.Style.fontRegular.name font.family: MoneroComponents.Style.fontRegular.name
font.pixelSize: 15 * scaleRatio font.pixelSize: 15 * scaleRatio
text: qsTr("Date") text: qsTr("Date") + translationManager.emptyString
color: "#C0C0C0" color: "#C0C0C0"
anchors.verticalCenter: parent.verticalCenter anchors.verticalCenter: parent.verticalCenter
} }
@ -913,7 +913,7 @@ Rectangle {
Text { Text {
font.family: MoneroComponents.Style.fontRegular.name font.family: MoneroComponents.Style.fontRegular.name
font.pixelSize: 15 * scaleRatio font.pixelSize: 15 * scaleRatio
text: qsTr("Description") text: qsTr("Description") + translationManager.emptyString
color: "#C0C0C0" color: "#C0C0C0"
anchors.verticalCenter: parent.verticalCenter anchors.verticalCenter: parent.verticalCenter
} }
@ -980,7 +980,7 @@ Rectangle {
Text { Text {
font.family: MoneroComponents.Style.fontRegular.name font.family: MoneroComponents.Style.fontRegular.name
font.pixelSize: 15 * scaleRatio font.pixelSize: 15 * scaleRatio
text: qsTr("Transaction ID") text: qsTr("Transaction ID") + translationManager.emptyString
color: "#C0C0C0" color: "#C0C0C0"
anchors.verticalCenter: parent.verticalCenter anchors.verticalCenter: parent.verticalCenter
} }
@ -1022,7 +1022,7 @@ Rectangle {
Text { Text {
font.family: MoneroComponents.Style.fontRegular.name font.family: MoneroComponents.Style.fontRegular.name
font.pixelSize: 15 * scaleRatio font.pixelSize: 15 * scaleRatio
text: qsTr("Transaction key") text: qsTr("Transaction key") + translationManager.emptyString
color: "#C0C0C0" color: "#C0C0C0"
anchors.verticalCenter: parent.verticalCenter anchors.verticalCenter: parent.verticalCenter
} }
@ -1070,7 +1070,7 @@ Rectangle {
Text { Text {
font.family: MoneroComponents.Style.fontRegular.name font.family: MoneroComponents.Style.fontRegular.name
font.pixelSize: 15 * scaleRatio font.pixelSize: 15 * scaleRatio
text: qsTr("Address sent to") text: qsTr("Address sent to") + translationManager.emptyString
color: "#C0C0C0" color: "#C0C0C0"
anchors.verticalCenter: parent.verticalCenter anchors.verticalCenter: parent.verticalCenter
} }
@ -1091,9 +1091,9 @@ Rectangle {
} }
if(isout && blockheight === 0) if(isout && blockheight === 0)
return qsTr("Waiting for transaction to leave txpool.") return qsTr("Waiting for transaction to leave txpool.") + translationManager.emptyString
else else
return qsTr("Unknown recipient"); return qsTr("Unknown recipient") + translationManager.emptyString;
} }
color: MoneroComponents.Style.defaultFontColor color: MoneroComponents.Style.defaultFontColor
@ -1489,9 +1489,9 @@ Rectangle {
function updateHistoryStatusMessage(){ function updateHistoryStatusMessage(){
if(root.txModelData.length <= 0){ if(root.txModelData.length <= 0){
root.historyStatusMessage = qsTr("No transaction history yet."); root.historyStatusMessage = qsTr("No transaction history yet.") + translationManager.emptyString;
} else if (root.txData.length <= 0){ } else if (root.txData.length <= 0){
root.historyStatusMessage = qsTr("No results."); root.historyStatusMessage = qsTr("No results.") + translationManager.emptyString;
} else { } else {
root.historyStatusMessage = qsTr("%1 transactions total, showing %2.").arg(root.txData.length).arg(txListViewModel.count) + translationManager.emptyString; root.historyStatusMessage = qsTr("%1 transactions total, showing %2.").arg(root.txData.length).arg(txListViewModel.count) + translationManager.emptyString;
} }
@ -1501,12 +1501,12 @@ Rectangle {
var tx_key = currentWallet.getTxKey(hash) var tx_key = currentWallet.getTxKey(hash)
var tx_note = currentWallet.getUserNote(hash) var tx_note = currentWallet.getUserNote(hash)
var rings = currentWallet.getRings(hash) var rings = currentWallet.getRings(hash)
var address_label = subaddrIndex == 0 ? qsTr("Primary address") : currentWallet.getSubaddressLabel(subaddrAccount, subaddrIndex) var address_label = subaddrIndex == 0 ? (qsTr("Primary address") + translationManager.emptyString) : currentWallet.getSubaddressLabel(subaddrAccount, subaddrIndex)
var address = currentWallet.address(subaddrAccount, subaddrIndex) var address = currentWallet.address(subaddrAccount, subaddrIndex)
if (rings) if (rings)
rings = rings.replace(/\|/g, '\n') rings = rings.replace(/\|/g, '\n')
informationPopup.title = qsTr("Transaction details"); informationPopup.title = qsTr("Transaction details") + translationManager.emptyString;
informationPopup.content = buildTxDetailsString(hash, paymentId, tx_key, tx_note, destinations, rings, address, address_label); informationPopup.content = buildTxDetailsString(hash, paymentId, tx_key, tx_note, destinations, rings, address, address_label);
informationPopup.onCloseCallback = null informationPopup.onCloseCallback = null
informationPopup.open(); informationPopup.open();
@ -1564,7 +1564,7 @@ Rectangle {
FileDialog { FileDialog {
id: writeCSVFileDialog id: writeCSVFileDialog
title: qsTr("Please choose a folder") title: qsTr("Please choose a folder") + translationManager.emptyString
selectFolder: true selectFolder: true
onRejected: { onRejected: {
console.log("csv write canceled") console.log("csv write canceled")

View File

@ -140,7 +140,7 @@ Rectangle {
enabled: startSoloMinerButton.enabled enabled: startSoloMinerButton.enabled
onClicked: { onClicked: {
soloMinerThreadsLine.text = idealThreadCount soloMinerThreadsLine.text = idealThreadCount
appWindow.showStatusMessage(qsTr("Set to use all threads"),3) appWindow.showStatusMessage(qsTr("Set to use all threads") + translationManager.emptyString,3)
} }
} }
} }
@ -197,9 +197,9 @@ Rectangle {
update() update()
} else { } else {
errorPopup.title = qsTr("Error starting mining") + translationManager.emptyString; errorPopup.title = qsTr("Error starting mining") + translationManager.emptyString;
errorPopup.text = qsTr("Couldn't start mining.<br>") errorPopup.text = qsTr("Couldn't start mining.<br>") + translationManager.emptyString
if (!walletManager.isDaemonLocal(appWindow.currentDaemonAddress)) if (!walletManager.isDaemonLocal(appWindow.currentDaemonAddress))
errorPopup.text += qsTr("Mining is only available on local daemons. Run a local daemon to be able to mine.<br>") errorPopup.text += qsTr("Mining is only available on local daemons. Run a local daemon to be able to mine.<br>") + translationManager.emptyString
errorPopup.icon = StandardIcon.Critical errorPopup.icon = StandardIcon.Critical
errorPopup.open() errorPopup.open()
} }

View File

@ -83,7 +83,7 @@ Rectangle {
MoneroComponents.LabelSubheader { MoneroComponents.LabelSubheader {
Layout.fillWidth: true Layout.fillWidth: true
textFormat: Text.RichText textFormat: Text.RichText
text: qsTr("Addresses") text: qsTr("Addresses") + translationManager.emptyString
} }
ColumnLayout { ColumnLayout {
@ -231,7 +231,7 @@ Rectangle {
text: qsTr("Create new address") + translationManager.emptyString; text: qsTr("Create new address") + translationManager.emptyString;
onClicked: { onClicked: {
inputDialog.labelText = qsTr("Set the label of the new address:") + translationManager.emptyString inputDialog.labelText = qsTr("Set the label of the new address:") + translationManager.emptyString
inputDialog.inputText = qsTr("(Untitled)") inputDialog.inputText = qsTr("(Untitled)") + translationManager.emptyString
inputDialog.onAcceptedCallback = function() { inputDialog.onAcceptedCallback = function() {
appWindow.currentWallet.subaddress.addRow(appWindow.currentWallet.currentSubaddressAccount, inputDialog.inputText) appWindow.currentWallet.subaddress.addRow(appWindow.currentWallet.currentSubaddressAccount, inputDialog.inputText)
current_subaddress_table_index = appWindow.currentWallet.numSubaddresses(appWindow.currentWallet.currentSubaddressAccount) - 1 current_subaddress_table_index = appWindow.currentWallet.numSubaddresses(appWindow.currentWallet.currentSubaddressAccount) - 1
@ -284,7 +284,7 @@ Rectangle {
rightIcon: "../images/external-link-white.png" rightIcon: "../images/external-link-white.png"
onClicked: { onClicked: {
clipboard.setText(TxUtils.makeQRCodeString(appWindow.current_address)); clipboard.setText(TxUtils.makeQRCodeString(appWindow.current_address));
appWindow.showStatusMessage(qsTr("Copied to clipboard"), 3); appWindow.showStatusMessage(qsTr("Copied to clipboard") + translationManager.emptyString, 3);
} }
} }
} }
@ -297,7 +297,7 @@ Rectangle {
FileDialog { FileDialog {
id: qrFileDialog id: qrFileDialog
title: qsTr("Please choose a name") title: qsTr("Please choose a name") + translationManager.emptyString
folder: shortcuts.pictures folder: shortcuts.pictures
selectExisting: false selectExisting: false
nameFilters: ["Image (*.png)"] nameFilters: ["Image (*.png)"]

View File

@ -128,7 +128,7 @@ Rectangle {
"and you can import this list here.<br>" + "and you can import this list here.<br>" +
"Alternatively, you can scan the blockchain (and the blockchain of key-reusing Monero clones) yourself " + "Alternatively, you can scan the blockchain (and the blockchain of key-reusing Monero clones) yourself " +
"using the monero-blockchain-mark-spent-outputs tool to create a list of known spent outputs.<br>" "using the monero-blockchain-mark-spent-outputs tool to create a list of known spent outputs.<br>"
) ) + translationManager.emptyString
sharedRingDBDialog.icon = StandardIcon.Information sharedRingDBDialog.icon = StandardIcon.Information
sharedRingDBDialog.open() sharedRingDBDialog.open()
} }
@ -266,7 +266,7 @@ Rectangle {
"which allows you to then spend your Monero safely.<br>" + "which allows you to then spend your Monero safely.<br>" +
"If you do not use a key-reusing Monero clone without these safety features, then you do not need to do anything " + "If you do not use a key-reusing Monero clone without these safety features, then you do not need to do anything " +
"as it is all automated.<br>" "as it is all automated.<br>"
) ) + translationManager.emptyString
sharedRingDBDialog.icon = StandardIcon.Information sharedRingDBDialog.icon = StandardIcon.Information
sharedRingDBDialog.open() sharedRingDBDialog.open()
} }
@ -324,7 +324,7 @@ Rectangle {
onClicked: { onClicked: {
var ring = appWindow.currentWallet.getRing(keyImageLine.text) var ring = appWindow.currentWallet.getRing(keyImageLine.text)
if (ring === "") { if (ring === "") {
getRingLine.text = qsTr("No ring found"); getRingLine.text = qsTr("No ring found") + translationManager.emptyString;
} }
else { else {
getRingLine.text = ring; getRingLine.text = ring;

View File

@ -0,0 +1,700 @@
import QtQuick 2.7
import QtQuick.Layouts 1.1
import QtQuick.Controls 2.0
import QtGraphicalEffects 1.0
import QtQuick.Controls.Styles 1.4
import QtQuick.Dialogs 1.2
import moneroComponents.Clipboard 1.0
import moneroComponents.Wallet 1.0
import moneroComponents.WalletManager 1.0
import moneroComponents.TransactionHistory 1.0
import moneroComponents.TransactionHistoryModel 1.0
import moneroComponents.Subaddress 1.0
import moneroComponents.SubaddressModel 1.0
import "../../js/Windows.js" as Windows
import "../../js/TxUtils.js" as TxUtils
import "../../js/Utils.js" as Utils
import "../../components" as MoneroComponents
import "../../pages"
import "."
Item {
id: root
anchors.margins: 0
property int minWidth: 900 * scaleRatio
property int qrCodeSize: 220 * scaleRatio
property bool enableTracking: false
property string trackingError: "" // setting this will show a message @ tracking table
property alias merchantHeight: mainLayout.height
property string addressLabel: ""
property var hiddenAmounts: []
function onPageCompleted() {
appWindow.titlebarToggleOrange();
appWindow.hideMenu();
// prepare tracking
trackingCheckbox.checked = root.enableTracking
root.update();
timer.running = true;
// set currently selected account indication
var _addressLabel = appWindow.currentWallet.getSubaddressLabel(
appWindow.currentWallet.currentSubaddressAccount,
appWindow.current_subaddress_table_index);
if(_addressLabel === ""){
root.addressLabel = "#" + appWindow.current_subaddress_table_index;
} else {
root.addressLabel = _addressLabel;
}
}
function onPageClosed() {
appWindow.titlebarToggleOrange();
// reset component objects
timer.running = false
root.enableTracking = false
trackingModel.clear()
appWindow.showMenu();
}
Image {
anchors.top: parent.top
anchors.left: parent.left
anchors.right: parent.right
height: 300 * scaleRatio
source: "../../images/merchant/bg.png"
smooth: false
}
ColumnLayout {
id: mainLayout
visible: parent.width >= root.minWidth
spacing: 0
// emulates max-width + center for container
property int maxWidth: 1200 * scaleRatio
property int defaultMargin: 50 * scaleRatio
property int horizontalMargin: {
if(appWindow.width >= maxWidth){
return ((appWindow.width - maxWidth) / 2) + defaultMargin;
} else {
return defaultMargin;
}
}
anchors.leftMargin: horizontalMargin
anchors.rightMargin: horizontalMargin
anchors.margins: defaultMargin
anchors.left: parent.left
anchors.top: parent.top
anchors.right: parent.right
Item {
height: 220 * scaleRatio
anchors.left: parent.left
anchors.right: parent.right
Rectangle {
id: tracker
anchors.left: parent.left
anchors.top: parent.top
height: 220 * scaleRatio
width: (parent.width - qrImg.width) - 50 * scaleRatio
radius: 5
ColumnLayout {
anchors.top: parent.top
anchors.left: parent.left
anchors.right: parent.right
spacing: 0
RowLayout {
spacing: 0
height: 56 * scaleRatio
RowLayout {
Layout.alignment: Qt.AlignLeft
Layout.preferredWidth: 260 * scaleRatio
Layout.preferredHeight: parent.height
Layout.fillHeight: true
spacing: 8 * scaleRatio
Item {
Layout.preferredWidth: 10 * scaleRatio
}
Text {
font.pixelSize: 16 * scaleRatio
font.bold: true
color: "#767676"
text: qsTr("Sales") + translationManager.emptyString
}
Item {
Layout.fillWidth: true
}
}
Item {
Layout.fillWidth: true
}
}
Rectangle {
Layout.fillWidth: true
Layout.preferredHeight: 1 * scaleRatio
color: "#d9d9d9"
}
MerchantTrackingList {
Layout.fillWidth: true
Layout.preferredHeight: 400 * scaleRatio
model: trackingModel
message: {
if(!root.enableTracking){
return qsTr(
"<style>p{font-size:14px;}</style>" +
"<p>This page will automatically scan the blockchain and the tx pool " +
"for incoming transactions using the QR code.</p>" +
"<p>It's up to you whether to accept unconfirmed transactions or not. It is likely they'll be " +
"confirmed in short order, but there is still a possibility they might not, so for larger " +
"values you may want to wait for one or more confirmation(s).</p>"
);
} else if(root.trackingError !== ""){
return root.trackingError;
} else if(trackingModel.count < 1){
return qsTr("Currently monitoring incoming transactions, none found yet.");
} else {
return ""
}
}
onHideAmountToggled: {
if(root.hiddenAmounts.indexOf(txid) < 0){
root.hiddenAmounts.push(txid);
} else {
root.hiddenAmounts = root.hiddenAmounts.filter(function(_txid) { return _txid !== txid });
}
}
}
}
}
DropShadow {
anchors.fill: source
cached: true
horizontalOffset: 3
verticalOffset: 3
radius: 8.0
samples: 16
color: "#20000000"
smooth: true
source: tracker
}
Rectangle {
id: qrImg
color: "white"
anchors.right: parent.right
anchors.top: parent.top
height: root.qrCodeSize
width: root.qrCodeSize
Layout.maximumWidth: root.qrCodeSize
Layout.preferredHeight: width
radius: 5
Image {
id: qrCode
anchors.fill: parent
anchors.margins: 1 * scaleRatio
smooth: false
fillMode: Image.PreserveAspectFit
source: "image://qrcode/" + TxUtils.makeQRCodeString(appWindow.current_address, amountToReceive.text)
MouseArea {
anchors.fill: parent
acceptedButtons: Qt.RightButton
onClicked: {
if (mouse.button == Qt.RightButton){
qrMenu.x = this.mouseX;
qrMenu.y = this.mouseY;
qrMenu.open()
}
}
onPressAndHold: qrFileDialog.open()
}
}
Menu {
id: qrMenu
title: "QrCode"
MenuItem {
text: qsTr("Save As") + translationManager.emptyString;
onTriggered: qrFileDialog.open()
}
}
}
DropShadow {
anchors.fill: source
cached: true
horizontalOffset: 3
verticalOffset: 3
radius: 8.0
samples: 16
color: "#30000000"
smooth: true
source: qrImg
}
}
Item {
Layout.preferredHeight: 40 * scaleRatio
anchors.left: parent.left
anchors.right: parent.right
Item {
width: (parent.width - qrImg.width) - (50 * scaleRatio)
height: 32 * scaleRatio
Text {
anchors.verticalCenter: parent.verticalCenter
anchors.horizontalCenter: parent.horizontalCenter
font.pixelSize: 12 * scaleRatio
font.bold: false
color: "white"
text: "<style type='text/css'>a {text-decoration: none; color: #FF6C3C; font-size: 12px;}</style>Currently selected address: " + addressLabel + " <a href='#'>(Change)</a>"
textFormat: Text.RichText
MouseArea {
anchors.fill: parent
hoverEnabled: true
cursorShape: Qt.PointingHandCursor
onClicked: appWindow.showPageRequest("Receive")
}
}
}
Item {
anchors.right: parent.right
anchors.top: parent.top
width: 220 * scaleRatio
height: 32 * scaleRatio
Text {
anchors.verticalCenter: parent.verticalCenter
anchors.horizontalCenter: parent.horizontalCenter
font.pixelSize: 12 * scaleRatio
font.bold: false
color: "white"
text: qsTr("(right-click, save as)") + translationManager.emptyString
}
}
}
Item {
Layout.preferredHeight: 120 * scaleRatio
Layout.topMargin: 20 * scaleRatio
Layout.fillWidth: true
Rectangle {
id: payment_url_container
anchors.left: parent.left
anchors.top: parent.top
implicitHeight: 120 * scaleRatio
width: (parent.width - qrImg.width) - (50 * scaleRatio)
radius: 5
ColumnLayout {
anchors.top: parent.top
anchors.left: parent.left
anchors.right: parent.right
spacing: 0
RowLayout {
spacing: 0
height: 56 * scaleRatio
RowLayout {
Layout.alignment: Qt.AlignLeft
Layout.preferredWidth: 260 * scaleRatio
Layout.preferredHeight: parent.height
Layout.fillHeight: true
spacing: 8
Item {
Layout.preferredWidth: 10 * scaleRatio
}
Text {
font.pixelSize: 14 * scaleRatio
font.bold: true
color: "#767676"
text: qsTr("Payment URL") + translationManager.emptyString
}
Item {
Layout.fillWidth: true
}
}
// @TODO: PaymentURL explanation
// Rectangle {
// // help box
// Layout.alignment: Qt.AlignLeft
// Layout.preferredWidth: 40 * scaleRatio
// Layout.fillHeight: true
// color: "transparent"
// Text {
// anchors.verticalCenter: parent.verticalCenter
// anchors.right: parent.right
// anchors.rightMargin: 20 * scaleRatio
// font.pixelSize: 16 * scaleRatio
// font.bold: true
// color: "#767676"
// text:"?"
// }
// MouseArea {
// anchors.fill: parent
// cursorShape: Qt.PointingHandCursor
// onClicked: {
// merchantPageDialog.title = qsTr("Payment URL") + translationManager.emptyString;
// merchantPageDialog.text = qsTr("payment url explanation")
// merchantPageDialog.icon = StandardIcon.Information
// merchantPageDialog.open()
// }
// }
// }
Item {
Layout.fillWidth: true
}
}
Rectangle {
Layout.fillWidth: true
Layout.preferredHeight: 1
color: "#d9d9d9"
}
Text {
property string _color: "#767676"
Layout.fillWidth: true
Layout.margins: 20 * scaleRatio
Layout.topMargin: 10 * scaleRatio
wrapMode: Text.WrapAnywhere
elide: Text.ElideRight
font.pixelSize: 12 * scaleRatio
font.bold: true
color: _color
text: TxUtils.makeQRCodeString(appWindow.current_address, amountToReceive.text)
MouseArea {
anchors.fill: parent
hoverEnabled: true
cursorShape: Qt.PointingHandCursor
onEntered: {
parent.color = MoneroComponents.Style.orange
}
onExited: {
parent.color = parent._color
}
onClicked: {
console.log("Copied to clipboard");
clipboard.setText(parent.text);
appWindow.showStatusMessage(qsTr("Copied to clipboard"), 3);
}
}
}
}
}
DropShadow {
anchors.fill: source
cached: true
horizontalOffset: 3
verticalOffset: 3
radius: 8.0
samples: 16
color: "#20000000"
smooth: true
source: payment_url_container
}
Item {
anchors.right: parent.right
anchors.top: parent.top
width: 220 * scaleRatio
height: 32 * scaleRatio
ColumnLayout {
anchors.left: parent.left
anchors.right: parent.right
Text {
font.pixelSize: 14 * scaleRatio
font.bold: false
color: "white"
text: qsTr("Amount to receive") + " (XMR)"
}
Image {
height: 28 * scaleRatio
width: 220 * scaleRatio
source: "../../images/merchant/input_box.png"
TextField {
id: amountToReceive
topPadding: 0
leftPadding: 10 * scaleRatio
anchors.left: parent.left
anchors.right: parent.right
anchors.top: parent.top
anchors.topMargin: 3 * scaleRatio
font.pixelSize: 16 * scaleRatio
font.bold: true
horizontalAlignment: TextInput.AlignLeft
verticalAlignment: TextInput.AlignVCenter
selectByMouse: true
color: "#424242"
selectionColor: "#3f3fe3"
selectedTextColor: "white"
placeholderText: "0.00"
background: Rectangle {
color: "transparent"
}
onTextChanged: {
if (amountToReceive.text.indexOf('.') === 0) {
amountToReceive.text = '0' + amountToReceive.text;
}
}
validator: RegExpValidator {
regExp: /^(\d{1,8})?([\.]\d{1,12})?$/
}
}
}
Item {
height: 2 * scaleRatio
width: 220 * scaleRatio
}
Text {
// @TODO: When we have XMR/USD rate avi. in the future.
visible: false
font.pixelSize: 14 * scaleRatio
font.bold: false
color: "white"
text: qsTr("Amount to receive") + " (USD)"
opacity: 0.2
}
Image {
visible: false
height: 28 * scaleRatio
width: 220 * scaleRatio
source: "../../images/merchant/input_box.png"
opacity: 0.2
}
}
}
}
Item {
Layout.topMargin: 32 * scaleRatio
Layout.preferredHeight: 40 * scaleRatio
anchors.left: parent.left
anchors.right: parent.right
ColumnLayout {
spacing: 16 * scaleRatio
MerchantCheckbox {
id: trackingCheckbox
checked: root.enableTracking
text: qsTr("Enable sales tracker") + translationManager.emptyString
onChanged: {
root.enableTracking = this.checked;
}
}
Text {
id: content
font.pixelSize: 14 * scaleRatio
font.bold: false
color: "white"
text: qsTr("Leave this page") + translationManager.emptyString
MouseArea {
anchors.fill: parent
hoverEnabled: true
cursorShape: Qt.PointingHandCursor
onClicked: appWindow.showPageRequest("Receive")
}
}
}
}
}
Rectangle {
// Shows when the window is too small
visible: parent.width < root.minWidth
anchors.top: parent.top
anchors.topMargin: 100 * scaleRatio;
anchors.horizontalCenter: parent.horizontalCenter
height: 120 * scaleRatio
width: 400 * scaleRatio
radius: 5
Text {
anchors.horizontalCenter: parent.horizontalCenter
anchors.verticalCenter: parent.verticalCenter
font.pixelSize: 14 * scaleRatio
font.bold: true
color: MoneroComponents.Style.moneroGrey
text: qsTr("The merchant page requires a larger window") + translationManager.emptyString
}
}
function update() {
const max_tracking = 3;
if (!appWindow.currentWallet || !root.enableTracking) {
root.trackingError = "";
trackingModel.clear();
return
}
if (appWindow.currentWallet.connected() == Wallet.ConnectionStatus_Disconnected) {
root.trackingError = qsTr("WARNING: no connection to daemon");
trackingModel.clear();
return
}
var model = appWindow.currentWallet.historyModel
var count = model.rowCount()
var totalAmount = 0
var nTransactions = 0
var blockchainHeight = null
var txs = []
// Currently selected subaddress as per Receive page
var current_subaddress_table_index = appWindow.current_subaddress_table_index;
for (var i = 0; i < count && txs.length < max_tracking; ++i) {
var idx = model.index(i, 0)
var isout = model.data(idx, TransactionHistoryModel.TransactionIsOutRole);
var timeDate = model.data(idx, TransactionHistoryModel.TransactionDateRole);
var timeHour = model.data(idx, TransactionHistoryModel.TransactionTimeRole);
var timeEpoch = new Date(timeDate + "T" + timeHour) .getTime() / 1000;
var subaddrAccount = model.data(idx, TransactionHistoryModel.TransactionSubaddrAccountRole);
var subaddrIndex = model.data(idx, TransactionHistoryModel.TransactionSubaddrIndexRole);
if (!isout && subaddrAccount == appWindow.currentWallet.currentSubaddressAccount && subaddrIndex == current_subaddress_table_index) {
var amount = model.data(idx, TransactionHistoryModel.TransactionAtomicAmountRole);
totalAmount = walletManager.addi(totalAmount, amount)
nTransactions += 1
var txid = model.data(idx, TransactionHistoryModel.TransactionHashRole);
var blockHeight = model.data(idx, TransactionHistoryModel.TransactionBlockHeightRole);
var in_txpool = false;
var confirmations = 0;
var displayAmount = 0;
if (blockHeight == 0) {
in_txpool = true;
} else {
if (blockchainHeight == null)
blockchainHeight = appWindow.currentWallet.blockChainHeight()
confirmations = blockchainHeight - blockHeight - 1
displayAmount = model.data(idx, TransactionHistoryModel.TransactionDisplayAmountRole);
}
txs.push({
"amount": displayAmount,
"confirmations": confirmations,
"blockheight": blockHeight,
"in_txpool": in_txpool,
"txid": txid,
"time_epoch": timeEpoch,
"time_date": timeDate + " " + timeHour,
"hide_amount": root.hiddenAmounts.indexOf(txid) >= 0
})
}
}
// Update tracking status label
if (nTransactions == 0) {
root.trackingError = qsTr("Currently monitoring incoming transactions, none found yet.") + translationManager.emptyString
return
}
trackingModel.clear();
txs.forEach(function(tx){
trackingModel.append({
"amount": tx.amount,
"blockheight": tx.blockheight,
"confirmations": tx.confirmations,
"blockheight": tx.blockHeight,
"in_txpool": tx.in_txpool,
"txid": tx.txid,
"time_epoch": tx.time_epoch,
"time_date": tx.time_date,
"hide_amount": tx.hide_amount
});
});
}
ListModel {
id: trackingModel
}
Timer {
id: timer
interval: 3000; running: false; repeat: true
onTriggered: update()
}
MessageDialog {
id: merchantPageDialog
standardButtons: StandardButton.Ok
}
FileDialog {
id: qrFileDialog
title: "Please choose a name"
folder: shortcuts.pictures
selectExisting: false
nameFilters: ["Image (*.png)"]
onAccepted: {
if(!walletManager.saveQrCode(TxUtils.makeQRCodeString(appWindow.current_address, amountToReceive.text), walletManager.urlToLocalPath(fileUrl))) {
console.log("Failed to save QrCode to file " + walletManager.urlToLocalPath(fileUrl) )
receivePageDialog.title = qsTr("Save QrCode") + translationManager.emptyString;
receivePageDialog.text = qsTr("Failed to save QrCode to ") + walletManager.urlToLocalPath(fileUrl) + translationManager.emptyString;
receivePageDialog.icon = StandardIcon.Error
receivePageDialog.open()
}
}
}
Clipboard { id: clipboard }
}

View File

@ -100,7 +100,7 @@ ListView {
font.pixelSize: 12 * scaleRatio font.pixelSize: 12 * scaleRatio
font.bold: false font.bold: false
color: "#707070" color: "#707070"
text: hide_amount ? "(" + qsTr("show") + ")" : "(" + qsTr("hide") + ")" text: (hide_amount ? "(" + qsTr("show") + ")" : "(" + qsTr("hide") + ")") + translationManager.emptyString
} }
MouseArea { MouseArea {

View File

@ -403,7 +403,7 @@ Rectangle {
newPasswordDialog.open() newPasswordDialog.open()
} else { } else {
informationPopup.title = qsTr("Error") + translationManager.emptyString; informationPopup.title = qsTr("Error") + translationManager.emptyString;
informationPopup.text = qsTr("Wrong password"); informationPopup.text = qsTr("Wrong password") + translationManager.emptyString;
informationPopup.open() informationPopup.open()
informationPopup.onCloseCallback = function() { informationPopup.onCloseCallback = function() {
passwordDialog.open() passwordDialog.open()

View File

@ -152,7 +152,7 @@ ColumnLayout {
Layout.fillWidth: true Layout.fillWidth: true
Label { Label {
text: qsTr("Password") text: qsTr("Password") + translationManager.emptyString
Layout.fillWidth: true Layout.fillWidth: true
font.pixelSize: 14 * scaleRatio font.pixelSize: 14 * scaleRatio

View File

@ -63,7 +63,7 @@ Rectangle {
WizardNav { WizardNav {
Layout.topMargin: 24 * scaleRatio Layout.topMargin: 24 * scaleRatio
btnNextText: qsTr("Open wallet") btnNextText: qsTr("Open wallet") + translationManager.emptyString
progressSteps: 4 progressSteps: 4
progress: 4 progress: 4

View File

@ -78,7 +78,7 @@ Rectangle {
Layout.topMargin: 20 * scaleRatio Layout.topMargin: 20 * scaleRatio
id: btnNext id: btnNext
small: true small: true
text: qsTr("Browse filesystem") text: qsTr("Browse filesystem") + translationManager.emptyString
onClicked: { onClicked: {
wizardController.openWallet(); wizardController.openWallet();