diff --git a/resources/qml/Components/QrCodeScanPopup.qml b/resources/qml/Components/QrCodeScanPopup.qml index a02f341..f394fea 100644 --- a/resources/qml/Components/QrCodeScanPopup.qml +++ b/resources/qml/Components/QrCodeScanPopup.qml @@ -23,7 +23,8 @@ Dialog { width: app.width * 0.8 modal: true - title: "Scan QR-Code" + //% "Scan QR-Code" + title: qsTrId("scanQrCode") standardButtons: Dialog.Cancel @@ -36,7 +37,8 @@ Dialog { onClosed: cameraLoader.sourceComponent = null function setDefaultStatusText() { - _statusText = "Place the Code in the center" + //% "Place the Code in the center" + _statusText = qsTrId("placeQrCodeInCenter") _statusColor = Material.primaryTextColor } @@ -177,12 +179,14 @@ Dialog { control._freezeScanning = true - control._statusText = "Plase wait..." + //% "Plase wait" + control._statusText = qsTrId("pleaseWait") + "..." if(app.openWidgetFromUrl(tag)) control.close() else { - control._statusText = "Invalid QR-Code" + //% "Invalid QR-Code" + control._statusText = qsTrId("invalidQrCode") control._statusColor = Material.color(Material.Red) statusTextResetTimer.start() control._freezeScanning = false diff --git a/resources/qml/Components/SpeedFlowChartLocker.qml b/resources/qml/Components/SpeedFlowChartLocker.qml index 954d88a..10f2b43 100644 --- a/resources/qml/Components/SpeedFlowChartLocker.qml +++ b/resources/qml/Components/SpeedFlowChartLocker.qml @@ -16,7 +16,8 @@ Rectangle { target: speedFlowChartProduct function onPurchaseFailed() { - purchaseBt.text = qsTr("Purchase failed") + //% "Purchase failed" + purchaseBt.text = qsTrId("purchaseFailed") purchaseBt.enabled = false buttonTextResetTimer.start() } @@ -29,8 +30,10 @@ Rectangle { repeat: false onTriggered: { purchaseBt.text = (speedFlowChartProduct.status === Product.Registered - ? "Buy now for " + speedFlowChartProduct.price - : qsTr("this item is currently unavailable")) + //% "Buy now for" + ? qsTrId("buyNowFor") + " " + speedFlowChartProduct.price + //% "This item is currently unavailable" + : qsTrId("itemUnavailable")) purchaseBt.enabled = true } } @@ -53,7 +56,8 @@ Rectangle { height: parent.height * 0.015 - text: qsTr("This is a premium feature.") + //% "This is a premium feature." + text: qsTrId("thisIsAPremiumFeature") font.bold: true font.pixelSize: height @@ -83,8 +87,9 @@ Rectangle { Layout.alignment: Layout.Center enabled: speedFlowChartProduct.status === Product.Registered text: speedFlowChartProduct.status === Product.Registered - ? "\uf218 Buy now for " + speedFlowChartProduct.price - : qsTr("This item is currently unavailable") + ? "\uf218 "+ qsTrId("buyNowFor") +" " + speedFlowChartProduct.price + //% "This item is currently unavailable" + : qsTrId("itemIsUnavailable") font.family: fa5solid.name onClicked: speedFlowChartProduct.purchase() } @@ -93,26 +98,28 @@ Rectangle { Layout.alignment: Layout.Center - Button { - id: restorePurchaseButton - Layout.alignment: Layout.Center - visible: speedFlowChartProduct.status === Product.Registered + Button { + id: restorePurchaseButton + Layout.alignment: Layout.Center + visible: speedFlowChartProduct.status === Product.Registered - flat: true - text: "restore purchase" + flat: true + //% "Restore purchase" + text: qsTrId("restorePurchase") - onClicked: inAppProductStore.restorePurchases() - } + onClicked: inAppProductStore.restorePurchases() + } - Button { - id: contactSupportButton - Layout.alignment: Layout.Center + Button { + id: contactSupportButton + Layout.alignment: Layout.Center - flat: true - text: "contact support" + flat: true + //% "contact support" + text: qsTrId("contact support") - onClicked: Qt.openUrlExternally("mailto:contact@itsblue.de") - } + onClicked: Qt.openUrlExternally("mailto:contact@itsblue.de") + } } } diff --git a/resources/qml/Pages/StartPage.qml b/resources/qml/Pages/StartPage.qml index 7734679..4181ca5 100644 --- a/resources/qml/Pages/StartPage.qml +++ b/resources/qml/Pages/StartPage.qml @@ -104,10 +104,21 @@ Page { Repeater { id: buttonRepeater property var buttons: [ - ["\uf059", "IFSC results", ifscDisclaimerDialog.open], - ["\uf042", Material.theme === Material.Light ? "Dark mode":"Light mode", app.toggleDarkMode], - ["\uf05a", "About blueROCK", aboutBluerockDisclaimerDialog.open], - ["\uf029", "Scan QR code", qrCodeScanPopup.open], + //% "IFSC results" + ["\uf059", qsTrId("ifscResults"), ifscDisclaimerDialog.open], + [ + "\uf042", + Material.theme === Material.Light ? + //% "Dark mode" + qsTrId("darkMode"): + //% "Light mode" + qsTrId("lightMode"), + app.toggleDarkMode + ], + //% "About blueROCK" + ["\uf05a", qsTrId("aboutBluerock"), aboutBluerockDisclaimerDialog.open], + //% "Scan QR code" + ["\uf029", qsTrId("scanQrCode"), qrCodeScanPopup.open], ] model: buttons diff --git a/resources/qml/Widgets/CalendarWidget.qml b/resources/qml/Widgets/CalendarWidget.qml index d2c248f..2a82889 100644 --- a/resources/qml/Widgets/CalendarWidget.qml +++ b/resources/qml/Widgets/CalendarWidget.qml @@ -28,7 +28,8 @@ DataListView { property bool ready - property string title: (params.nation === "ICC" ? "IFSC":params.nation === "GER" ? "DAV":"SAC") + " " + qsTr("calendar") + " " + control.year + //% "calendar" + property string title: (params.nation === "ICC" ? "IFSC":params.nation === "GER" ? "DAV":"SAC") + " " + qsTrId("calendar") + " " + control.year property Component headerComponent: RowLayout { @@ -63,13 +64,15 @@ DataListView { } } - compCats.push( {"text": qsTr("Favorites"), "data": {"sort_rank":0, "cat_id":[-1]}} ) + //% "Favorites" + compCats.push( {"text": qsTrId("favorites"), "data": {"sort_rank":0, "cat_id":[-1]}} ) compCats.sort(function(a, b) { return a['data']['sort_rank'] - b['data']['sort_rank']; }); - filterSelectPu.appear(compCats, qsTr("Select Filters"), "") + //% "Select filters" + filterSelectPu.appear(compCats, qsTrId("selectFilters"), "") } text: "\uf0b0" @@ -202,13 +205,18 @@ DataListView { var infoUrls = getCompInfoUrls(compIndex) var infosheet = ""; if(infoUrls.length >= 1) - infosheet += ("" + qsTr('infosheet') + "") + //% "Infosheet" + infosheet += ("" + qsTrId('infosheet') + "") if(infoUrls.length === 2) - infosheet += (", " + qsTr('further infos') + "") + //% "Further infos" + infosheet += (", " + qsTrId('furtherInfos') + "") console.log("Infosheet: " + infosheet) - var eventWebsite = control.widgetData["competitions"][compIndex]["homepage"] !== undefined ? ("" + qsTr('Event Website') + ""):"" + + var eventWebsite = control.widgetData["competitions"][compIndex]["homepage"] !== undefined ? + //% "Event website" + ("" + qsTrId('eventWebsite') + ""):"" selector.appear(selectOptions, control.widgetData["competitions"][compIndex]['name'], eventWebsite + ((eventWebsite !== "" && infosheet !== "") ? ", ":"") + infosheet ) } @@ -224,7 +232,8 @@ DataListView { } } - selector.appear(selectOptions, qsTr("select year")) + //% "Select year" + selector.appear(selectOptions, qsTrId("selectYear")) } function openCup(state, data) { @@ -236,7 +245,8 @@ DataListView { if(state === undefined){ // opened for the first time -> select cup - selectTitle = qsTr("select cup") + //% "Select cup" + selectTitle = qsTrId("selectCup") cups.sort(function(a, b) { return parseInt(b["SerId"]) - parseInt(a["SerId"]); @@ -264,7 +274,8 @@ DataListView { return } - selectTitle = cup['name'] + ": " + qsTr("select category") + //% "Select category" + selectTitle = cup['name'] + ": " + qsTrId("selectCategory") // build a list with all cat in the cup out of the cat keys (rkey) given in the cup.cats for(prop in cup['cats']){ diff --git a/resources/qml/Widgets/ProfileWidget.qml b/resources/qml/Widgets/ProfileWidget.qml index 55058b0..76869b1 100644 --- a/resources/qml/Widgets/ProfileWidget.qml +++ b/resources/qml/Widgets/ProfileWidget.qml @@ -190,7 +190,8 @@ Page { verticalAlignment: Text.AlignVCenter horizontalAlignment: Text.AlignHCenter - text: qsTr("age") + ": " + widgetData["age"] + //% "Age" + text: qsTrId("age") + ": " + widgetData["age"] } Label { @@ -206,7 +207,8 @@ Page { verticalAlignment: Text.AlignVCenter horizontalAlignment: Text.AlignHCenter - text: qsTr("year of birth") + ": " + widgetData["birthdate"] + //% "Year of birth" + text: qsTrId("yearOfBirth") + ": " + widgetData["birthdate"] } Label { @@ -222,7 +224,8 @@ Page { verticalAlignment: Text.AlignVCenter horizontalAlignment: Text.AlignHCenter - text: qsTr("city") + ": " + widgetData["city"] + //% "City" + text: qsTrId("city") + ": " + widgetData["city"] } } @@ -263,7 +266,11 @@ Page { flat: true - text: bestResultsRep.showAllResults ? qsTr("show best results"):qsTr("show all results") + text: bestResultsRep.showAllResults ? + //% "Show best results" + qsTrId("showBestResults"): + //% "Show all results" + qsTrId("showAllResults") onClicked: { bestResultsRep.showAllResults = !bestResultsRep.showAllResults diff --git a/resources/qml/Widgets/RankingWidget.qml b/resources/qml/Widgets/RankingWidget.qml index 2392773..5bdbc1c 100644 --- a/resources/qml/Widgets/RankingWidget.qml +++ b/resources/qml/Widgets/RankingWidget.qml @@ -27,7 +27,8 @@ DataListView { property bool ready property string title: control.widgetData['comp_name'] - property string subTitle: qsTr("(Ranking)") + " after " + control.widgetData['route_name'] + //% "(Ranking)" + property string subTitle: qsTrId("rankingHeadline") + " after " + control.widgetData['route_name'] property bool titleIsPageTitle: true property var widgetData: currentWidgetData diff --git a/resources/qml/Widgets/RegistrationWidget.qml b/resources/qml/Widgets/RegistrationWidget.qml index 68642c5..8d29df2 100644 --- a/resources/qml/Widgets/RegistrationWidget.qml +++ b/resources/qml/Widgets/RegistrationWidget.qml @@ -57,7 +57,8 @@ DataListView { } } - var addition = "(Registration) " + //% "(Registration)" + var addition = qsTrId("registrationHeadline") if(titleString !== undefined){ return addition + " " + titleString @@ -108,7 +109,7 @@ DataListView { } } - selector.appear(selectOptions, qsTr("select cat")) + selector.appear(selectOptions, qsTrId("selectCategory")) } function filterAthletes(athletes) { diff --git a/resources/qml/Widgets/ResultWidget.qml b/resources/qml/Widgets/ResultWidget.qml index 418aa5d..33bc4ec 100644 --- a/resources/qml/Widgets/ResultWidget.qml +++ b/resources/qml/Widgets/ResultWidget.qml @@ -132,8 +132,8 @@ DataListView { titleString = control.widgetData["categorys"][i]["name"] } } - - var addition = qsTr("(Results)") + //% "(Results)" + var addition = qsTrId("resultsHeadline") if(titleString !== undefined){ return addition + " " + titleString @@ -166,7 +166,7 @@ DataListView { } } - selector.appear(selectOptions, qsTr("select cat")) + selector.appear(selectOptions, qsTrId("selectCategory")) } Connections { diff --git a/resources/qml/Widgets/StartlistWidget.qml b/resources/qml/Widgets/StartlistWidget.qml index df248eb..fe1e23f 100644 --- a/resources/qml/Widgets/StartlistWidget.qml +++ b/resources/qml/Widgets/StartlistWidget.qml @@ -28,7 +28,7 @@ DataListView { property bool ready property string title: control.widgetData['comp_name'] - property string subTitle: qsTr("(Startlist)") + " " + control.widgetData['route_name'] //getSubtitle() + property string subTitle: getSubtitle() property bool titleIsPageTitle: true property Component headerComponent: ToolButton { @@ -52,7 +52,8 @@ DataListView { } } - var addition = qsTr("(Startlist)") + //% "(Startlist)" + var addition = qsTrId("startlistHeadline") return addition + " " + titleString } @@ -78,7 +79,7 @@ DataListView { } } - selector.appear(selectOptions, qsTr("select cat")) + selector.appear(selectOptions, qsTrId("startlistHeadline")) } Connections { diff --git a/resources/qml/main.qml b/resources/qml/main.qml index 3c0466b..356c2d0 100644 --- a/resources/qml/main.qml +++ b/resources/qml/main.qml @@ -34,7 +34,7 @@ Window { visible: true width: 540 height: 960 - title: qsTr("blueROCK") + title: "blueROCK" Page { id: app @@ -656,76 +656,36 @@ Window { // 2 - error var errorString - var errorDescription switch(errorCode) { case 0: infoLevel = 2 - errorString = "No connection to server" - errorDescription = "Please check your internet connection and try again." - break - case 200: - infoLevel = 0 - errorString = "Success" - errorDescription = "The request was successfull" - break - case 401: - infoLevel = 2 - errorString = "Authentication required" - errorDescription = "The server asked for user credentinals, please chack them and try again" + //% "No connection to server" + errorString = qsTrId("noConnectionError") break case 404: infoLevel = 2 - errorString = "Not found" - errorDescription = "The requested item was not found" - break - case 500: - infoLevel = 2 - errorString = "Internal server error" - errorDescription = "The server was unable to process this request, this is probaply the servers fault. Please try again later." - break - case 900: - infoLevel = 2 - errorString = "Internal error" - errorDescription = "Something went wron internally, this is probaply an inssue in the program code" + //% "Not found" + errorString = qsTrId("notFoundError") break case 901: infoLevel = 1 - errorString = "No Data" - errorDescription = "There is currently no data available. Please try again later." - break - case 902: - infoLevel = 1 - errorString = "Cached (old) data" - errorDescription = "Es konnte keine Verbindung zum Server hergestellt werden, aber es sind noch alte Daten gespeichert." - break - case 903: - infoLevel = 1 - errorString = "Ungültiger Aufruf" - errorDescription = "Die aufgerufene Funktion ist momentan nicht verfügbar, bitte versuche es später erneut." - break - case 904: - infoLevel = 2 - errorString = "Incompatible API" - errorDescription = "Please make shure that you are using the latest version of this app and try again." - break - case 905: - infoLevel = 1 - errorString = "Loading..." - errorDescription = "Please wait while we're loading some data" + //% "No Data" + errorString = qsTrId("noDataError") break case 906: infoLevel = 2 - errorString = "Invalid Request" + //% "Invalid Request" + errorString = qsTrId("invalidRequestError") errorDescription = "Invalid Request" break default: infoLevel = 2 - errorString = "Unexpected error ("+errorCode+")" - errorDescription = "Unexpected error while getting data from the server. Please try again later." + //% "Unexpected error" + errorString = qsTrId("unexpectedError") + " ("+errorCode+")" } - return([infoLevel, errorString, errorDescription]) + return([infoLevel, errorString]) } }