Merge v0.6.0 and v0.6.1 #29
20 changed files with 627 additions and 62 deletions
|
@ -36,8 +36,11 @@ HEADERS += \
|
||||||
RESOURCES += resources/qml/qml.qrc \
|
RESOURCES += resources/qml/qml.qrc \
|
||||||
resources/shared/shared.qrc \
|
resources/shared/shared.qrc \
|
||||||
#resources/shared/icons/bluerock/index.theme \
|
#resources/shared/icons/bluerock/index.theme \
|
||||||
#$$files(resources/shared/icons/*.png, true)
|
\ #$$files(resources/shared/icons/*.png, true)
|
||||||
|
resources/translations/translations.qrc
|
||||||
|
|
||||||
|
TRANSLATIONS += resources/translations/en.ts \
|
||||||
|
resources/translations/de.ts
|
||||||
|
|
||||||
# Additional import path used to resolve QML modules in Qt Creator's code model
|
# Additional import path used to resolve QML modules in Qt Creator's code model
|
||||||
QML_IMPORT_PATH =
|
QML_IMPORT_PATH =
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
|
|
||||||
class AndroidShareUtils : public PlatformShareUtils, public QAndroidActivityResultReceiver
|
class AndroidShareUtils : public PlatformShareUtils, public QAndroidActivityResultReceiver
|
||||||
{
|
{
|
||||||
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
AndroidShareUtils(QObject* parent = nullptr);
|
AndroidShareUtils(QObject* parent = nullptr);
|
||||||
bool checkMimeTypeView(const QString &mimeType) override;
|
bool checkMimeTypeView(const QString &mimeType) override;
|
||||||
|
|
|
@ -24,7 +24,7 @@ Dialog {
|
||||||
|
|
||||||
modal: true
|
modal: true
|
||||||
//% "Scan QR-Code"
|
//% "Scan QR-Code"
|
||||||
title: qsTrId("scanQrCode")
|
title: qsTrId("#scanQrCode")
|
||||||
|
|
||||||
standardButtons: Dialog.Cancel
|
standardButtons: Dialog.Cancel
|
||||||
|
|
||||||
|
@ -38,7 +38,7 @@ Dialog {
|
||||||
|
|
||||||
function setDefaultStatusText() {
|
function setDefaultStatusText() {
|
||||||
//% "Place the Code in the center"
|
//% "Place the Code in the center"
|
||||||
_statusText = qsTrId("placeQrCodeInCenter")
|
_statusText = qsTrId("#placeQrCodeInCenter")
|
||||||
_statusColor = Material.primaryTextColor
|
_statusColor = Material.primaryTextColor
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -180,13 +180,13 @@ Dialog {
|
||||||
control._freezeScanning = true
|
control._freezeScanning = true
|
||||||
|
|
||||||
//% "Plase wait"
|
//% "Plase wait"
|
||||||
control._statusText = qsTrId("pleaseWait") + "..."
|
control._statusText = qsTrId("#pleaseWait") + "..."
|
||||||
|
|
||||||
if(app.openWidgetFromUrl(tag))
|
if(app.openWidgetFromUrl(tag))
|
||||||
control.close()
|
control.close()
|
||||||
else {
|
else {
|
||||||
//% "Invalid QR-Code"
|
//% "Invalid QR-Code"
|
||||||
control._statusText = qsTrId("invalidQrCode")
|
control._statusText = qsTrId("#invalidQrCode")
|
||||||
control._statusColor = Material.color(Material.Red)
|
control._statusColor = Material.color(Material.Red)
|
||||||
statusTextResetTimer.start()
|
statusTextResetTimer.start()
|
||||||
control._freezeScanning = false
|
control._freezeScanning = false
|
||||||
|
|
|
@ -16,7 +16,8 @@ Dialog {
|
||||||
y: (parent.height - height) * 0.5
|
y: (parent.height - height) * 0.5
|
||||||
|
|
||||||
modal: true
|
modal: true
|
||||||
title: "Share these results"
|
//% "Share these results"
|
||||||
|
title: qsTrId("#shareResultsHeadline")
|
||||||
|
|
||||||
onClosed: {
|
onClosed: {
|
||||||
shareComponentLoader.sourceComponent = null
|
shareComponentLoader.sourceComponent = null
|
||||||
|
@ -40,12 +41,15 @@ Dialog {
|
||||||
Repeater {
|
Repeater {
|
||||||
id: buttonRepeater
|
id: buttonRepeater
|
||||||
property var buttons: [
|
property var buttons: [
|
||||||
["\uf0c1", "Link", serverConn.shareResultsAsUrl],
|
//% "Link"
|
||||||
["\uf029", "QR-code", function() {
|
["\uf0c1", qsTrId("#shareByLink"), serverConn.shareResultsAsUrl],
|
||||||
|
//% "QR-Code"
|
||||||
|
["\uf029", qsTrId("#shareByQrCode"), function() {
|
||||||
stackLayout.currentIndex = 1
|
stackLayout.currentIndex = 1
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
["\uf1c1", "Poster", serverConn.shareResultsAsPoster],
|
//% "Poster"
|
||||||
|
["\uf1c1", qsTrId("#shareByPoster"), serverConn.shareResultsAsPoster],
|
||||||
]
|
]
|
||||||
|
|
||||||
model: buttons
|
model: buttons
|
||||||
|
|
|
@ -17,7 +17,7 @@ Rectangle {
|
||||||
|
|
||||||
function onPurchaseFailed() {
|
function onPurchaseFailed() {
|
||||||
//% "Purchase failed"
|
//% "Purchase failed"
|
||||||
purchaseBt.text = qsTrId("purchaseFailed")
|
purchaseBt.text = qsTrId("#purchaseFailed")
|
||||||
purchaseBt.enabled = false
|
purchaseBt.enabled = false
|
||||||
buttonTextResetTimer.start()
|
buttonTextResetTimer.start()
|
||||||
}
|
}
|
||||||
|
@ -31,9 +31,9 @@ Rectangle {
|
||||||
onTriggered: {
|
onTriggered: {
|
||||||
purchaseBt.text = (speedFlowChartProduct.status === Product.Registered
|
purchaseBt.text = (speedFlowChartProduct.status === Product.Registered
|
||||||
//% "Buy now for"
|
//% "Buy now for"
|
||||||
? qsTrId("buyNowFor") + " " + speedFlowChartProduct.price
|
? qsTrId("#buyNowFor") + " " + speedFlowChartProduct.price
|
||||||
//% "This item is currently unavailable"
|
//% "This item is currently unavailable"
|
||||||
: qsTrId("itemUnavailable"))
|
: qsTrId("#itemIsUnavailable"))
|
||||||
purchaseBt.enabled = true
|
purchaseBt.enabled = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -57,7 +57,7 @@ Rectangle {
|
||||||
height: parent.height * 0.015
|
height: parent.height * 0.015
|
||||||
|
|
||||||
//% "This is a premium feature."
|
//% "This is a premium feature."
|
||||||
text: qsTrId("thisIsAPremiumFeature")
|
text: qsTrId("#thisIsAPremiumFeature")
|
||||||
|
|
||||||
font.bold: true
|
font.bold: true
|
||||||
font.pixelSize: height
|
font.pixelSize: height
|
||||||
|
@ -87,9 +87,8 @@ Rectangle {
|
||||||
Layout.alignment: Layout.Center
|
Layout.alignment: Layout.Center
|
||||||
enabled: speedFlowChartProduct.status === Product.Registered
|
enabled: speedFlowChartProduct.status === Product.Registered
|
||||||
text: speedFlowChartProduct.status === Product.Registered
|
text: speedFlowChartProduct.status === Product.Registered
|
||||||
? "\uf218 "+ qsTrId("buyNowFor") +" " + speedFlowChartProduct.price
|
? "\uf218 "+ qsTrId("#buyNowFor") +" " + speedFlowChartProduct.price
|
||||||
//% "This item is currently unavailable"
|
: qsTrId("#itemIsUnavailable")
|
||||||
: qsTrId("itemIsUnavailable")
|
|
||||||
font.family: fa5solid.name
|
font.family: fa5solid.name
|
||||||
onClicked: speedFlowChartProduct.purchase()
|
onClicked: speedFlowChartProduct.purchase()
|
||||||
}
|
}
|
||||||
|
@ -105,7 +104,7 @@ Rectangle {
|
||||||
|
|
||||||
flat: true
|
flat: true
|
||||||
//% "Restore purchase"
|
//% "Restore purchase"
|
||||||
text: qsTrId("restorePurchase")
|
text: qsTrId("#restorePurchase")
|
||||||
|
|
||||||
onClicked: inAppProductStore.restorePurchases()
|
onClicked: inAppProductStore.restorePurchases()
|
||||||
}
|
}
|
||||||
|
@ -116,7 +115,7 @@ Rectangle {
|
||||||
|
|
||||||
flat: true
|
flat: true
|
||||||
//% "contact support"
|
//% "contact support"
|
||||||
text: qsTrId("contact support")
|
text: qsTrId("#contact support")
|
||||||
|
|
||||||
onClicked: Qt.openUrlExternally("mailto:contact@itsblue.de")
|
onClicked: Qt.openUrlExternally("mailto:contact@itsblue.de")
|
||||||
}
|
}
|
||||||
|
|
|
@ -105,20 +105,19 @@ Page {
|
||||||
id: buttonRepeater
|
id: buttonRepeater
|
||||||
property var buttons: [
|
property var buttons: [
|
||||||
//% "IFSC results"
|
//% "IFSC results"
|
||||||
["\uf059", qsTrId("ifscResults"), ifscDisclaimerDialog.open],
|
["\uf059", qsTrId("#ifscResults"), ifscDisclaimerDialog.open],
|
||||||
[
|
[
|
||||||
"\uf042",
|
"\uf042",
|
||||||
Material.theme === Material.Light ?
|
Material.theme === Material.Light ?
|
||||||
//% "Dark mode"
|
//% "Dark mode"
|
||||||
qsTrId("darkMode"):
|
qsTrId("#darkMode"):
|
||||||
//% "Light mode"
|
//% "Light mode"
|
||||||
qsTrId("lightMode"),
|
qsTrId("#lightMode"),
|
||||||
app.toggleDarkMode
|
app.toggleDarkMode
|
||||||
],
|
],
|
||||||
//% "About blueROCK"
|
//% "About blueROCK"
|
||||||
["\uf05a", qsTrId("aboutBluerock"), aboutBluerockDisclaimerDialog.open],
|
["\uf05a", qsTrId("#aboutBluerock"), aboutBluerockDisclaimerDialog.open],
|
||||||
//% "Scan QR code"
|
["\uf029", qsTrId("#scanQrCode"), qrCodeScanPopup.open],
|
||||||
["\uf029", qsTrId("scanQrCode"), qrCodeScanPopup.open],
|
|
||||||
]
|
]
|
||||||
|
|
||||||
model: buttons
|
model: buttons
|
||||||
|
@ -160,22 +159,18 @@ Page {
|
||||||
DisclaimerDialog {
|
DisclaimerDialog {
|
||||||
id: ifscDisclaimerDialog
|
id: ifscDisclaimerDialog
|
||||||
Material.theme: root.Material.theme
|
Material.theme: root.Material.theme
|
||||||
title: "Where are the IFSC results?"
|
//% "Where are the IFSC results?"
|
||||||
content: "Unfortunately, the IFSC has restricted the access to their data and <b>is not willing to share results with blueROCK anymore</b>. " +
|
title: qsTrId("#ifscDisclaimerTitle")
|
||||||
"Because of this, blueROCK is no longer able to access and display IFSC results.<br><br>" +
|
//% "Unfortunately, the IFSC has restricted the access to their data and <b>is not willing to share results with blueROCK anymore</b>. Because of this, blueROCK is no longer able to access and display IFSC results.<br><br>You can find current IFSC results <a href=\"https://ifsc.results.info\">over here</a> and on <a href=\"https://ifsc-climbing.org\">their website</a>."
|
||||||
"You can find current IFSC results <a href=\"https://ifsc.results.info\">over here</a> and on <a href=\"https://ifsc-climbing.org\">their website</a>."
|
content: qsTrId("#ifscDisclaimer")
|
||||||
}
|
}
|
||||||
|
|
||||||
DisclaimerDialog {
|
DisclaimerDialog {
|
||||||
id: aboutBluerockDisclaimerDialog
|
id: aboutBluerockDisclaimerDialog
|
||||||
Material.theme: root.Material.theme
|
Material.theme: root.Material.theme
|
||||||
title: "blueROCK v" + APP_VERSION + "<br>By <a href=\"https://itsblue.de\">Itsblue Development</a>"
|
title: "blueROCK v" + APP_VERSION + "<br>By <a href=\"https://itsblue.de\">Itsblue Development</a>"
|
||||||
content: "This app was built using the <a href='https://qt.io'>Qt Framework</a> " +
|
//% "This app was built using the <a href='https://qt.io'>Qt Framework</a> licensed under the <a href='https://www.gnu.org/licenses/lgpl-3.0.en.html'>GNU lgplV3 license</a>.<br><br>This app is open source and licensed under the <a href='https://www.gnu.org/licenses/agpl-3.0.en.html'>GNU agplV3 license</a>, the source code can be found <a href='https://itsblue.dev/dorian/blueROCK/'>here</a>.<br><br>Resultservice and rankings provided by <a href='http://www.digitalROCK.de'>digital ROCK</a>."
|
||||||
"licensed under the <a href='https://www.gnu.org/licenses/lgpl-3.0.en.html'>GNU lgplV3 license</a>.<br><br>"+
|
content: qsTrId("#aboutBluerockDisclaimer")
|
||||||
|
|
||||||
"This app is open source and licensed under the <a href='https://www.gnu.org/licenses/agpl-3.0.en.html'>GNU agplV3 license</a>," +
|
|
||||||
"the source code can be found <a href='https://itsblue.dev/dorian/blueROCK/'>here</a>.<br><br>" +
|
|
||||||
"Resultservice and rankings provided by <a href='http://www.digitalROCK.de'>digital ROCK</a>."
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QrCodeScanPopup {
|
QrCodeScanPopup {
|
||||||
|
|
|
@ -29,7 +29,7 @@ DataListView {
|
||||||
property bool ready
|
property bool ready
|
||||||
|
|
||||||
//% "calendar"
|
//% "calendar"
|
||||||
property string title: (params.nation === "ICC" ? "IFSC":params.nation === "GER" ? "DAV":"SAC") + " " + qsTrId("calendar") + " " + control.year
|
property string title: (params.nation === "ICC" ? "IFSC":params.nation === "GER" ? "DAV":"SAC") + " " + qsTrId("#calendar") + " " + control.year
|
||||||
|
|
||||||
property Component headerComponent: RowLayout {
|
property Component headerComponent: RowLayout {
|
||||||
|
|
||||||
|
@ -65,14 +65,14 @@ DataListView {
|
||||||
}
|
}
|
||||||
|
|
||||||
//% "Favorites"
|
//% "Favorites"
|
||||||
compCats.push( {"text": qsTrId("favorites"), "data": {"sort_rank":0, "cat_id":[-1]}} )
|
compCats.push( {"text": qsTrId("#favorites"), "data": {"sort_rank":0, "cat_id":[-1]}} )
|
||||||
|
|
||||||
compCats.sort(function(a, b) {
|
compCats.sort(function(a, b) {
|
||||||
return a['data']['sort_rank'] - b['data']['sort_rank'];
|
return a['data']['sort_rank'] - b['data']['sort_rank'];
|
||||||
});
|
});
|
||||||
|
|
||||||
//% "Select filters"
|
//% "Select filters"
|
||||||
filterSelectPu.appear(compCats, qsTrId("selectFilters"), "")
|
filterSelectPu.appear(compCats, qsTrId("#selectFilters"), "")
|
||||||
}
|
}
|
||||||
|
|
||||||
text: "\uf0b0"
|
text: "\uf0b0"
|
||||||
|
@ -206,17 +206,17 @@ DataListView {
|
||||||
var infosheet = "";
|
var infosheet = "";
|
||||||
if(infoUrls.length >= 1)
|
if(infoUrls.length >= 1)
|
||||||
//% "Infosheet"
|
//% "Infosheet"
|
||||||
infosheet += ("<a href='" + getCompInfoUrls(compIndex)[0] + "'>" + qsTrId('infosheet') + "</a>")
|
infosheet += ("<a href='" + getCompInfoUrls(compIndex)[0] + "'>" + qsTrId("#infosheet") + "</a>")
|
||||||
if(infoUrls.length === 2)
|
if(infoUrls.length === 2)
|
||||||
//% "Further infos"
|
//% "Further infos"
|
||||||
infosheet += (", <a href='" + getCompInfoUrls(compIndex)[1] + "'>" + qsTrId('furtherInfos') + "</a>")
|
infosheet += (", <a href='" + getCompInfoUrls(compIndex)[1] + "'>" + qsTrId("#furtherInfos") + "</a>")
|
||||||
|
|
||||||
console.log("Infosheet: " + infosheet)
|
console.log("Infosheet: " + infosheet)
|
||||||
|
|
||||||
|
|
||||||
var eventWebsite = control.widgetData["competitions"][compIndex]["homepage"] !== undefined ?
|
var eventWebsite = control.widgetData["competitions"][compIndex]["homepage"] !== undefined ?
|
||||||
//% "Event website"
|
//% "Event website"
|
||||||
("<a href='" + control.widgetData["competitions"][compIndex]["homepage"] + "'>" + qsTrId('eventWebsite') + "</a>"):""
|
("<a href='" + control.widgetData["competitions"][compIndex]["homepage"] + "'>" + qsTrId("#eventWebsite") + "</a>"):""
|
||||||
|
|
||||||
selector.appear(selectOptions, control.widgetData["competitions"][compIndex]['name'], eventWebsite + ((eventWebsite !== "" && infosheet !== "") ? ", ":"") + infosheet )
|
selector.appear(selectOptions, control.widgetData["competitions"][compIndex]['name'], eventWebsite + ((eventWebsite !== "" && infosheet !== "") ? ", ":"") + infosheet )
|
||||||
}
|
}
|
||||||
|
@ -233,7 +233,7 @@ DataListView {
|
||||||
}
|
}
|
||||||
|
|
||||||
//% "Select year"
|
//% "Select year"
|
||||||
selector.appear(selectOptions, qsTrId("selectYear"))
|
selector.appear(selectOptions, qsTrId("#selectYear"))
|
||||||
}
|
}
|
||||||
|
|
||||||
function openCup(state, data) {
|
function openCup(state, data) {
|
||||||
|
@ -246,7 +246,7 @@ DataListView {
|
||||||
if(state === undefined){
|
if(state === undefined){
|
||||||
// opened for the first time -> select cup
|
// opened for the first time -> select cup
|
||||||
//% "Select cup"
|
//% "Select cup"
|
||||||
selectTitle = qsTrId("selectCup")
|
selectTitle = qsTrId("#selectCup")
|
||||||
|
|
||||||
cups.sort(function(a, b) {
|
cups.sort(function(a, b) {
|
||||||
return parseInt(b["SerId"]) - parseInt(a["SerId"]);
|
return parseInt(b["SerId"]) - parseInt(a["SerId"]);
|
||||||
|
@ -275,7 +275,7 @@ DataListView {
|
||||||
}
|
}
|
||||||
|
|
||||||
//% "Select category"
|
//% "Select category"
|
||||||
selectTitle = cup['name'] + ": " + qsTrId("selectCategory")
|
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
|
// 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']){
|
for(prop in cup['cats']){
|
||||||
|
|
|
@ -191,7 +191,7 @@ Page {
|
||||||
horizontalAlignment: Text.AlignHCenter
|
horizontalAlignment: Text.AlignHCenter
|
||||||
|
|
||||||
//% "Age"
|
//% "Age"
|
||||||
text: qsTrId("age") + ": " + widgetData["age"]
|
text: qsTrId("#age") + ": " + widgetData["age"]
|
||||||
}
|
}
|
||||||
|
|
||||||
Label {
|
Label {
|
||||||
|
@ -208,7 +208,7 @@ Page {
|
||||||
horizontalAlignment: Text.AlignHCenter
|
horizontalAlignment: Text.AlignHCenter
|
||||||
|
|
||||||
//% "Year of birth"
|
//% "Year of birth"
|
||||||
text: qsTrId("yearOfBirth") + ": " + widgetData["birthdate"]
|
text: qsTrId("#yearOfBirth") + ": " + widgetData["birthdate"]
|
||||||
}
|
}
|
||||||
|
|
||||||
Label {
|
Label {
|
||||||
|
@ -225,7 +225,7 @@ Page {
|
||||||
horizontalAlignment: Text.AlignHCenter
|
horizontalAlignment: Text.AlignHCenter
|
||||||
|
|
||||||
//% "City"
|
//% "City"
|
||||||
text: qsTrId("city") + ": " + widgetData["city"]
|
text: qsTrId("#city") + ": " + widgetData["city"]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -268,9 +268,9 @@ Page {
|
||||||
|
|
||||||
text: bestResultsRep.showAllResults ?
|
text: bestResultsRep.showAllResults ?
|
||||||
//% "Show best results"
|
//% "Show best results"
|
||||||
qsTrId("showBestResults"):
|
qsTrId("#showBestResults"):
|
||||||
//% "Show all results"
|
//% "Show all results"
|
||||||
qsTrId("showAllResults")
|
qsTrId("#showAllResults")
|
||||||
|
|
||||||
onClicked: {
|
onClicked: {
|
||||||
bestResultsRep.showAllResults = !bestResultsRep.showAllResults
|
bestResultsRep.showAllResults = !bestResultsRep.showAllResults
|
||||||
|
|
|
@ -28,7 +28,7 @@ DataListView {
|
||||||
|
|
||||||
property string title: control.widgetData['comp_name']
|
property string title: control.widgetData['comp_name']
|
||||||
//% "(Ranking)"
|
//% "(Ranking)"
|
||||||
property string subTitle: qsTrId("rankingHeadline") + " after " + control.widgetData['route_name']
|
property string subTitle: qsTrId("#rankingHeadline") + " after " + control.widgetData['route_name']
|
||||||
property bool titleIsPageTitle: true
|
property bool titleIsPageTitle: true
|
||||||
|
|
||||||
property var widgetData: currentWidgetData
|
property var widgetData: currentWidgetData
|
||||||
|
|
|
@ -58,7 +58,7 @@ DataListView {
|
||||||
}
|
}
|
||||||
|
|
||||||
//% "(Registration)"
|
//% "(Registration)"
|
||||||
var addition = qsTrId("registrationHeadline")
|
var addition = qsTrId("#registrationHeadline")
|
||||||
|
|
||||||
if(titleString !== undefined){
|
if(titleString !== undefined){
|
||||||
return addition + " " + titleString
|
return addition + " " + titleString
|
||||||
|
@ -109,7 +109,7 @@ DataListView {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
selector.appear(selectOptions, qsTrId("selectCategory"))
|
selector.appear(selectOptions, qsTrId("#selectCategory"))
|
||||||
}
|
}
|
||||||
|
|
||||||
function filterAthletes(athletes) {
|
function filterAthletes(athletes) {
|
||||||
|
|
|
@ -133,7 +133,7 @@ DataListView {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//% "(Results)"
|
//% "(Results)"
|
||||||
var addition = qsTrId("resultsHeadline")
|
var addition = qsTrId("#resultsHeadline")
|
||||||
|
|
||||||
if(titleString !== undefined){
|
if(titleString !== undefined){
|
||||||
return addition + " " + titleString
|
return addition + " " + titleString
|
||||||
|
@ -166,7 +166,7 @@ DataListView {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
selector.appear(selectOptions, qsTrId("selectCategory"))
|
selector.appear(selectOptions, qsTrId("#selectCategory"))
|
||||||
}
|
}
|
||||||
|
|
||||||
Connections {
|
Connections {
|
||||||
|
|
|
@ -53,7 +53,7 @@ DataListView {
|
||||||
}
|
}
|
||||||
|
|
||||||
//% "(Startlist)"
|
//% "(Startlist)"
|
||||||
var addition = qsTrId("startlistHeadline")
|
var addition = qsTrId("#startlistHeadline")
|
||||||
return addition + " " + titleString
|
return addition + " " + titleString
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -79,7 +79,7 @@ DataListView {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
selector.appear(selectOptions, qsTrId("startlistHeadline"))
|
selector.appear(selectOptions, qsTrId("#startlistHeadline"))
|
||||||
}
|
}
|
||||||
|
|
||||||
Connections {
|
Connections {
|
||||||
|
|
|
@ -547,7 +547,8 @@ Window {
|
||||||
font.bold: true
|
font.bold: true
|
||||||
color: "white"
|
color: "white"
|
||||||
|
|
||||||
text: "loading..."
|
//% "Loading"
|
||||||
|
text: qsTrId("#loading") + "..."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -661,28 +662,28 @@ Window {
|
||||||
case 0:
|
case 0:
|
||||||
infoLevel = 2
|
infoLevel = 2
|
||||||
//% "No connection to server"
|
//% "No connection to server"
|
||||||
errorString = qsTrId("noConnectionError")
|
errorString = qsTrId("#noConnectionError")
|
||||||
break
|
break
|
||||||
case 404:
|
case 404:
|
||||||
infoLevel = 2
|
infoLevel = 2
|
||||||
//% "Not found"
|
//% "Not found"
|
||||||
errorString = qsTrId("notFoundError")
|
errorString = qsTrId("#notFoundError")
|
||||||
break
|
break
|
||||||
case 901:
|
case 901:
|
||||||
infoLevel = 1
|
infoLevel = 1
|
||||||
//% "No Data"
|
//% "No Data"
|
||||||
errorString = qsTrId("noDataError")
|
errorString = qsTrId("#noDataError")
|
||||||
break
|
break
|
||||||
case 906:
|
case 906:
|
||||||
infoLevel = 2
|
infoLevel = 2
|
||||||
//% "Invalid Request"
|
//% "Invalid Request"
|
||||||
errorString = qsTrId("invalidRequestError")
|
errorString = qsTrId("#invalidRequestError")
|
||||||
errorDescription = "Invalid Request"
|
errorDescription = "Invalid Request"
|
||||||
break
|
break
|
||||||
default:
|
default:
|
||||||
infoLevel = 2
|
infoLevel = 2
|
||||||
//% "Unexpected error"
|
//% "Unexpected error"
|
||||||
errorString = qsTrId("unexpectedError") + " ("+errorCode+")"
|
errorString = qsTrId("#unexpectedError") + " ("+errorCode+")"
|
||||||
}
|
}
|
||||||
|
|
||||||
return([infoLevel, errorString])
|
return([infoLevel, errorString])
|
||||||
|
|
BIN
resources/translations/de.qm
Normal file
BIN
resources/translations/de.qm
Normal file
Binary file not shown.
274
resources/translations/de.ts
Normal file
274
resources/translations/de.ts
Normal file
|
@ -0,0 +1,274 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!DOCTYPE TS>
|
||||||
|
<TS version="2.1" language="de" sourcelanguage="en">
|
||||||
|
<context>
|
||||||
|
<name></name>
|
||||||
|
<message id="#scanQrCode">
|
||||||
|
<location filename="../qml/Components/QrCodeScanPopup.qml" line="27"/>
|
||||||
|
<source>Scan QR-Code</source>
|
||||||
|
<translation>QR-Code scannen</translation>
|
||||||
|
</message>
|
||||||
|
<message id="#placeQrCodeInCenter">
|
||||||
|
<location filename="../qml/Components/QrCodeScanPopup.qml" line="41"/>
|
||||||
|
<source>Place the Code in the center</source>
|
||||||
|
<translation>Positioniere den Code in der Mitte</translation>
|
||||||
|
</message>
|
||||||
|
<message id="#pleaseWait">
|
||||||
|
<location filename="../qml/Components/QrCodeScanPopup.qml" line="183"/>
|
||||||
|
<source>Plase wait</source>
|
||||||
|
<translation>Bitte warten</translation>
|
||||||
|
</message>
|
||||||
|
<message id="#invalidQrCode">
|
||||||
|
<location filename="../qml/Components/QrCodeScanPopup.qml" line="189"/>
|
||||||
|
<source>Invalid QR-Code</source>
|
||||||
|
<translation>Ungültiger QR-Code</translation>
|
||||||
|
</message>
|
||||||
|
<message id="#shareResultsHeadline">
|
||||||
|
<location filename="../qml/Components/SharePopup.qml" line="20"/>
|
||||||
|
<source>Share these results</source>
|
||||||
|
<translation>Teile diese Ergebnisse</translation>
|
||||||
|
</message>
|
||||||
|
<message id="#shareByLink">
|
||||||
|
<location filename="../qml/Components/SharePopup.qml" line="45"/>
|
||||||
|
<source>Link</source>
|
||||||
|
<translation>Link</translation>
|
||||||
|
</message>
|
||||||
|
<message id="#shareByQrCode">
|
||||||
|
<location filename="../qml/Components/SharePopup.qml" line="47"/>
|
||||||
|
<source>QR-Code</source>
|
||||||
|
<translation>QR-Code</translation>
|
||||||
|
</message>
|
||||||
|
<message id="#shareByPoster">
|
||||||
|
<location filename="../qml/Components/SharePopup.qml" line="52"/>
|
||||||
|
<source>Poster</source>
|
||||||
|
<translation>Poster</translation>
|
||||||
|
</message>
|
||||||
|
<message id="#purchaseFailed">
|
||||||
|
<location filename="../qml/Components/SpeedFlowChartLocker.qml" line="20"/>
|
||||||
|
<source>Purchase failed</source>
|
||||||
|
<translation>Kauf fehlgeschlagen</translation>
|
||||||
|
</message>
|
||||||
|
<message id="#buyNowFor">
|
||||||
|
<location filename="../qml/Components/SpeedFlowChartLocker.qml" line="34"/>
|
||||||
|
<location filename="../qml/Components/SpeedFlowChartLocker.qml" line="90"/>
|
||||||
|
<source>Buy now for</source>
|
||||||
|
<translation>Jetzt kaufen für</translation>
|
||||||
|
</message>
|
||||||
|
<message id="#itemUnavailable">
|
||||||
|
<location filename="../qml/Components/SpeedFlowChartLocker.qml" line="36"/>
|
||||||
|
<source>This item is currently unavailable</source>
|
||||||
|
<translation>Diese Produkt ist nicht verfügbar</translation>
|
||||||
|
</message>
|
||||||
|
<message id="#thisIsAPremiumFeature">
|
||||||
|
<location filename="../qml/Components/SpeedFlowChartLocker.qml" line="60"/>
|
||||||
|
<source>This is a premium feature.</source>
|
||||||
|
<translation>Das ist eine premium Funktion.</translation>
|
||||||
|
</message>
|
||||||
|
<message id="#itemIsUnavailable">
|
||||||
|
<location filename="../qml/Components/SpeedFlowChartLocker.qml" line="92"/>
|
||||||
|
<source>This item is currently unavailable</source>
|
||||||
|
<translation>Diese Produkt ist nicht verfügbar</translation>
|
||||||
|
</message>
|
||||||
|
<message id="#restorePurchase">
|
||||||
|
<location filename="../qml/Components/SpeedFlowChartLocker.qml" line="108"/>
|
||||||
|
<source>Restore purchase</source>
|
||||||
|
<translation>Kauf wiederherstellen</translation>
|
||||||
|
</message>
|
||||||
|
<message id="#contact support">
|
||||||
|
<location filename="../qml/Components/SpeedFlowChartLocker.qml" line="119"/>
|
||||||
|
<source>contact support</source>
|
||||||
|
<translation>Support kontaktieren</translation>
|
||||||
|
</message>
|
||||||
|
<message id="#ifscResults">
|
||||||
|
<location filename="../qml/Pages/StartPage.qml" line="108"/>
|
||||||
|
<source>IFSC results</source>
|
||||||
|
<translation>IFSC Ergebnisse</translation>
|
||||||
|
</message>
|
||||||
|
<message id="#darkMode">
|
||||||
|
<location filename="../qml/Pages/StartPage.qml" line="113"/>
|
||||||
|
<source>Dark mode</source>
|
||||||
|
<translation>Dunkler Modus</translation>
|
||||||
|
</message>
|
||||||
|
<message id="#lightMode">
|
||||||
|
<location filename="../qml/Pages/StartPage.qml" line="115"/>
|
||||||
|
<source>Light mode</source>
|
||||||
|
<translation>Heller Modus</translation>
|
||||||
|
</message>
|
||||||
|
<message id="#aboutBluerock">
|
||||||
|
<location filename="../qml/Pages/StartPage.qml" line="119"/>
|
||||||
|
<source>About blueROCK</source>
|
||||||
|
<translation>Über blueROCK</translation>
|
||||||
|
</message>
|
||||||
|
<message id="#ifscDisclaimerTitle">
|
||||||
|
<location filename="../qml/Pages/StartPage.qml" line="164"/>
|
||||||
|
<source>Where are the IFSC results?</source>
|
||||||
|
<translation>Wo sind die IFSC Ergebnisse?</translation>
|
||||||
|
</message>
|
||||||
|
<message id="#ifscDisclaimer">
|
||||||
|
<location filename="../qml/Pages/StartPage.qml" line="166"/>
|
||||||
|
<source>Unfortunately, the IFSC has restricted the access to their data and <b>is not willing to share results with blueROCK anymore</b>. Because of this, blueROCK is no longer able to access and display IFSC results.<br><br>You can find current IFSC results <a href="https://ifsc.results.info">over here</a> and on <a href="https://ifsc-climbing.org">their website</a>.</source>
|
||||||
|
<translation>Leider hat die IFSC den Zugang zu ihren Ergebnissen eingeschränkt<b>und ist nicht mehr bereit, Ergebnisse mit blueROCK zu teilen</b>. Daher ist blueROCK nicht länger in der Lage auf IFSC Ergebnisse zuzugriefen und diese anzuzeigen.<br><br>Aktuelle IFSC Ergebnisse finden sich <a href="https://ifsc.results.info">hier</a> und auf der <a href="https://ifsc-climbing.org">IFSC Webseite</a>.</translation>
|
||||||
|
</message>
|
||||||
|
<message id="#aboutBluerockDisclaimer">
|
||||||
|
<location filename="../qml/Pages/StartPage.qml" line="174"/>
|
||||||
|
<source>This app was built using the <a href='https://qt.io'>Qt Framework</a> licensed under the <a href='https://www.gnu.org/licenses/lgpl-3.0.en.html'>GNU lgplV3 license</a>.<br><br>This app is open source and licensed under the <a href='https://www.gnu.org/licenses/agpl-3.0.en.html'>GNU agplV3 license</a>, the source code can be found <a href='https://itsblue.dev/dorian/blueROCK/'>here</a>.<br><br>Resultservice and rankings provided by <a href='http://www.digitalROCK.de'>digital ROCK</a>.</source>
|
||||||
|
<translation type="unfinished">Diese App wurde unter Verwendung des <a href='https://qt.io'>Qt Frameworks</a> unter der <a href='https://www.gnu.org/licenses/lgpl-3.0.en.html'>GNU lgplV3 Lizenz</a> erstellt.<br><br>Diese App ist Open-source und lizensiert unter der <a href='https://www.gnu.org/licenses/agpl-3.0.en.html'>GNU agplV3 Lizenz</a>. Der Sourcecode findet sich <a href='https://itsblue.dev/dorian/blueROCK/'>hier</a>.Die Ergebnisse und Ranglisten werden von <a href='http://www.digitalROCK.de'>digital ROCK</a> zur Verfügung gestellt.</translation>
|
||||||
|
</message>
|
||||||
|
<message id="#calendar">
|
||||||
|
<location filename="../qml/Widgets/CalendarWidget.qml" line="32"/>
|
||||||
|
<source>calendar</source>
|
||||||
|
<translation>Kalender</translation>
|
||||||
|
</message>
|
||||||
|
<message id="#favorites">
|
||||||
|
<location filename="../qml/Widgets/CalendarWidget.qml" line="68"/>
|
||||||
|
<source>Favorites</source>
|
||||||
|
<translation>Favoriten</translation>
|
||||||
|
</message>
|
||||||
|
<message id="#selectFilters">
|
||||||
|
<location filename="../qml/Widgets/CalendarWidget.qml" line="75"/>
|
||||||
|
<source>Select filters</source>
|
||||||
|
<translation>Filter auswählen</translation>
|
||||||
|
</message>
|
||||||
|
<message id="#infosheet">
|
||||||
|
<location filename="../qml/Widgets/CalendarWidget.qml" line="209"/>
|
||||||
|
<source>Infosheet</source>
|
||||||
|
<translation>Ausschreibung</translation>
|
||||||
|
</message>
|
||||||
|
<message id="#furtherInfos">
|
||||||
|
<location filename="../qml/Widgets/CalendarWidget.qml" line="212"/>
|
||||||
|
<source>Further infos</source>
|
||||||
|
<translation>Weitere Informationen</translation>
|
||||||
|
</message>
|
||||||
|
<message id="#eventWebsite">
|
||||||
|
<location filename="../qml/Widgets/CalendarWidget.qml" line="219"/>
|
||||||
|
<source>Event website</source>
|
||||||
|
<translation>Veranstaltungswebseite</translation>
|
||||||
|
</message>
|
||||||
|
<message id="#selectYear">
|
||||||
|
<location filename="../qml/Widgets/CalendarWidget.qml" line="236"/>
|
||||||
|
<source>Select year</source>
|
||||||
|
<translation>Jahr auswählen</translation>
|
||||||
|
</message>
|
||||||
|
<message id="#selectCup">
|
||||||
|
<location filename="../qml/Widgets/CalendarWidget.qml" line="249"/>
|
||||||
|
<source>Select cup</source>
|
||||||
|
<translation>Rangliste auswählen</translation>
|
||||||
|
</message>
|
||||||
|
<message id="#selectCategory">
|
||||||
|
<location filename="../qml/Widgets/CalendarWidget.qml" line="278"/>
|
||||||
|
<location filename="../qml/Widgets/RegistrationWidget.qml" line="112"/>
|
||||||
|
<location filename="../qml/Widgets/ResultWidget.qml" line="169"/>
|
||||||
|
<source>Select category</source>
|
||||||
|
<translation>Kategorie auswählen</translation>
|
||||||
|
</message>
|
||||||
|
<message id="#age">
|
||||||
|
<location filename="../qml/Widgets/ProfileWidget.qml" line="194"/>
|
||||||
|
<source>Age</source>
|
||||||
|
<translation>Alter</translation>
|
||||||
|
</message>
|
||||||
|
<message id="#yearOfBirth">
|
||||||
|
<location filename="../qml/Widgets/ProfileWidget.qml" line="211"/>
|
||||||
|
<source>Year of birth</source>
|
||||||
|
<translation>Geburtsjahr</translation>
|
||||||
|
</message>
|
||||||
|
<message id="#city">
|
||||||
|
<location filename="../qml/Widgets/ProfileWidget.qml" line="228"/>
|
||||||
|
<source>City</source>
|
||||||
|
<translation>Stadt</translation>
|
||||||
|
</message>
|
||||||
|
<message id="#showBestResults">
|
||||||
|
<location filename="../qml/Widgets/ProfileWidget.qml" line="271"/>
|
||||||
|
<source>Show best results</source>
|
||||||
|
<translation>Zeige die besten Ergebnisse</translation>
|
||||||
|
</message>
|
||||||
|
<message id="#showAllResults">
|
||||||
|
<location filename="../qml/Widgets/ProfileWidget.qml" line="273"/>
|
||||||
|
<source>Show all results</source>
|
||||||
|
<translation>Zeige alle Ergebnisse</translation>
|
||||||
|
</message>
|
||||||
|
<message id="#rankingHeadline">
|
||||||
|
<location filename="../qml/Widgets/RankingWidget.qml" line="31"/>
|
||||||
|
<source>(Ranking)</source>
|
||||||
|
<translation>(Rangliste)</translation>
|
||||||
|
</message>
|
||||||
|
<message id="#registrationHeadline">
|
||||||
|
<location filename="../qml/Widgets/RegistrationWidget.qml" line="61"/>
|
||||||
|
<source>(Registration)</source>
|
||||||
|
<translation>(Registrierung)</translation>
|
||||||
|
</message>
|
||||||
|
<message id="#resultsHeadline">
|
||||||
|
<location filename="../qml/Widgets/ResultWidget.qml" line="136"/>
|
||||||
|
<source>(Results)</source>
|
||||||
|
<translation>(Ergebnisse)</translation>
|
||||||
|
</message>
|
||||||
|
<message id="#startlistHeadline">
|
||||||
|
<location filename="../qml/Widgets/StartlistWidget.qml" line="56"/>
|
||||||
|
<location filename="../qml/Widgets/StartlistWidget.qml" line="82"/>
|
||||||
|
<source>(Startlist)</source>
|
||||||
|
<translation>(Startliste)</translation>
|
||||||
|
</message>
|
||||||
|
<message id="#loading">
|
||||||
|
<location filename="../qml/main.qml" line="551"/>
|
||||||
|
<source>Loading</source>
|
||||||
|
<translation>Laden</translation>
|
||||||
|
</message>
|
||||||
|
<message id="#noConnectionError">
|
||||||
|
<location filename="../qml/main.qml" line="665"/>
|
||||||
|
<source>No connection to server</source>
|
||||||
|
<translation>Keine Verbindung zum Server</translation>
|
||||||
|
</message>
|
||||||
|
<message id="#notFoundError">
|
||||||
|
<location filename="../qml/main.qml" line="670"/>
|
||||||
|
<source>Not found</source>
|
||||||
|
<translation>Nicht gefunden</translation>
|
||||||
|
</message>
|
||||||
|
<message id="#noDataError">
|
||||||
|
<location filename="../qml/main.qml" line="675"/>
|
||||||
|
<source>No Data</source>
|
||||||
|
<translation>Keine Daten</translation>
|
||||||
|
</message>
|
||||||
|
<message id="#invalidRequestError">
|
||||||
|
<location filename="../qml/main.qml" line="680"/>
|
||||||
|
<source>Invalid Request</source>
|
||||||
|
<translation>Ungültige Anfrage</translation>
|
||||||
|
</message>
|
||||||
|
<message id="#unexpectedError">
|
||||||
|
<location filename="../qml/main.qml" line="686"/>
|
||||||
|
<source>Unexpected error</source>
|
||||||
|
<translation>Unerwarteter Fehler</translation>
|
||||||
|
</message>
|
||||||
|
<message id="#shareResultsLinkText">
|
||||||
|
<location filename="../../sources/bluerockbackend.cpp" line="99"/>
|
||||||
|
<source>Check out the results of %1 over here:</source>
|
||||||
|
<translation>Verfolge die Ergebnisse vom Wettkampf "%1" hier live:</translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>AndroidShareUtils</name>
|
||||||
|
<message>
|
||||||
|
<location filename="../../sources/shareUtils/androidshareutils.cpp" line="191"/>
|
||||||
|
<source>Share: an Error occured</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../../sources/shareUtils/androidshareutils.cpp" line="203"/>
|
||||||
|
<source>Share: an Error occured
|
||||||
|
WorkingDir not valid</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../../sources/shareUtils/androidshareutils.cpp" line="217"/>
|
||||||
|
<location filename="../../sources/shareUtils/androidshareutils.cpp" line="243"/>
|
||||||
|
<location filename="../../sources/shareUtils/androidshareutils.cpp" line="255"/>
|
||||||
|
<location filename="../../sources/shareUtils/androidshareutils.cpp" line="283"/>
|
||||||
|
<source>Empty URL received</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../../sources/shareUtils/androidshareutils.cpp" line="235"/>
|
||||||
|
<location filename="../../sources/shareUtils/androidshareutils.cpp" line="273"/>
|
||||||
|
<source>File does not exist: %1</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
|
</TS>
|
BIN
resources/translations/en.qm
Normal file
BIN
resources/translations/en.qm
Normal file
Binary file not shown.
271
resources/translations/en.ts
Normal file
271
resources/translations/en.ts
Normal file
|
@ -0,0 +1,271 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!DOCTYPE TS>
|
||||||
|
<TS version="2.1">
|
||||||
|
<context>
|
||||||
|
<name></name>
|
||||||
|
<message id="#scanQrCode">
|
||||||
|
<location filename="../qml/Components/QrCodeScanPopup.qml" line="27"/>
|
||||||
|
<location filename="../qml/Pages/StartPage.qml" line="120"/>
|
||||||
|
<source>Scan QR-Code</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message id="#placeQrCodeInCenter">
|
||||||
|
<location filename="../qml/Components/QrCodeScanPopup.qml" line="41"/>
|
||||||
|
<source>Place the Code in the center</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message id="#pleaseWait">
|
||||||
|
<location filename="../qml/Components/QrCodeScanPopup.qml" line="183"/>
|
||||||
|
<source>Plase wait</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message id="#invalidQrCode">
|
||||||
|
<location filename="../qml/Components/QrCodeScanPopup.qml" line="189"/>
|
||||||
|
<source>Invalid QR-Code</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message id="#shareResultsHeadline">
|
||||||
|
<location filename="../qml/Components/SharePopup.qml" line="20"/>
|
||||||
|
<source>Share these results</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message id="#shareByLink">
|
||||||
|
<location filename="../qml/Components/SharePopup.qml" line="45"/>
|
||||||
|
<source>Link</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message id="#shareByQrCode">
|
||||||
|
<location filename="../qml/Components/SharePopup.qml" line="47"/>
|
||||||
|
<source>QR-Code</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message id="#shareByPoster">
|
||||||
|
<location filename="../qml/Components/SharePopup.qml" line="52"/>
|
||||||
|
<source>Poster</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message id="#purchaseFailed">
|
||||||
|
<location filename="../qml/Components/SpeedFlowChartLocker.qml" line="20"/>
|
||||||
|
<source>Purchase failed</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message id="#buyNowFor">
|
||||||
|
<location filename="../qml/Components/SpeedFlowChartLocker.qml" line="34"/>
|
||||||
|
<location filename="../qml/Components/SpeedFlowChartLocker.qml" line="90"/>
|
||||||
|
<source>Buy now for</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message id="#thisIsAPremiumFeature">
|
||||||
|
<location filename="../qml/Components/SpeedFlowChartLocker.qml" line="60"/>
|
||||||
|
<source>This is a premium feature.</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message id="#itemIsUnavailable">
|
||||||
|
<location filename="../qml/Components/SpeedFlowChartLocker.qml" line="36"/>
|
||||||
|
<location filename="../qml/Components/SpeedFlowChartLocker.qml" line="91"/>
|
||||||
|
<source>This item is currently unavailable</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message id="#restorePurchase">
|
||||||
|
<location filename="../qml/Components/SpeedFlowChartLocker.qml" line="107"/>
|
||||||
|
<source>Restore purchase</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message id="#contact support">
|
||||||
|
<location filename="../qml/Components/SpeedFlowChartLocker.qml" line="118"/>
|
||||||
|
<source>contact support</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message id="#ifscResults">
|
||||||
|
<location filename="../qml/Pages/StartPage.qml" line="108"/>
|
||||||
|
<source>IFSC results</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message id="#darkMode">
|
||||||
|
<location filename="../qml/Pages/StartPage.qml" line="113"/>
|
||||||
|
<source>Dark mode</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message id="#lightMode">
|
||||||
|
<location filename="../qml/Pages/StartPage.qml" line="115"/>
|
||||||
|
<source>Light mode</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message id="#aboutBluerock">
|
||||||
|
<location filename="../qml/Pages/StartPage.qml" line="119"/>
|
||||||
|
<source>About blueROCK</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message id="#ifscDisclaimerTitle">
|
||||||
|
<location filename="../qml/Pages/StartPage.qml" line="163"/>
|
||||||
|
<source>Where are the IFSC results?</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message id="#ifscDisclaimer">
|
||||||
|
<location filename="../qml/Pages/StartPage.qml" line="165"/>
|
||||||
|
<source>Unfortunately, the IFSC has restricted the access to their data and <b>is not willing to share results with blueROCK anymore</b>. Because of this, blueROCK is no longer able to access and display IFSC results.<br><br>You can find current IFSC results <a href="https://ifsc.results.info">over here</a> and on <a href="https://ifsc-climbing.org">their website</a>.</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message id="#aboutBluerockDisclaimer">
|
||||||
|
<location filename="../qml/Pages/StartPage.qml" line="173"/>
|
||||||
|
<source>This app was built using the <a href='https://qt.io'>Qt Framework</a> licensed under the <a href='https://www.gnu.org/licenses/lgpl-3.0.en.html'>GNU lgplV3 license</a>.<br><br>This app is open source and licensed under the <a href='https://www.gnu.org/licenses/agpl-3.0.en.html'>GNU agplV3 license</a>, the source code can be found <a href='https://itsblue.dev/dorian/blueROCK/'>here</a>.<br><br>Resultservice and rankings provided by <a href='http://www.digitalROCK.de'>digital ROCK</a>.</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message id="#calendar">
|
||||||
|
<location filename="../qml/Widgets/CalendarWidget.qml" line="32"/>
|
||||||
|
<source>calendar</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message id="#favorites">
|
||||||
|
<location filename="../qml/Widgets/CalendarWidget.qml" line="68"/>
|
||||||
|
<source>Favorites</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message id="#selectFilters">
|
||||||
|
<location filename="../qml/Widgets/CalendarWidget.qml" line="75"/>
|
||||||
|
<source>Select filters</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message id="#infosheet">
|
||||||
|
<location filename="../qml/Widgets/CalendarWidget.qml" line="209"/>
|
||||||
|
<source>Infosheet</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message id="#furtherInfos">
|
||||||
|
<location filename="../qml/Widgets/CalendarWidget.qml" line="212"/>
|
||||||
|
<source>Further infos</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message id="#eventWebsite">
|
||||||
|
<location filename="../qml/Widgets/CalendarWidget.qml" line="219"/>
|
||||||
|
<source>Event website</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message id="#selectYear">
|
||||||
|
<location filename="../qml/Widgets/CalendarWidget.qml" line="236"/>
|
||||||
|
<source>Select year</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message id="#selectCup">
|
||||||
|
<location filename="../qml/Widgets/CalendarWidget.qml" line="249"/>
|
||||||
|
<source>Select cup</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message id="#selectCategory">
|
||||||
|
<location filename="../qml/Widgets/CalendarWidget.qml" line="278"/>
|
||||||
|
<location filename="../qml/Widgets/RegistrationWidget.qml" line="112"/>
|
||||||
|
<location filename="../qml/Widgets/ResultWidget.qml" line="169"/>
|
||||||
|
<source>Select category</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message id="#age">
|
||||||
|
<location filename="../qml/Widgets/ProfileWidget.qml" line="194"/>
|
||||||
|
<source>Age</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message id="#yearOfBirth">
|
||||||
|
<location filename="../qml/Widgets/ProfileWidget.qml" line="211"/>
|
||||||
|
<source>Year of birth</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message id="#city">
|
||||||
|
<location filename="../qml/Widgets/ProfileWidget.qml" line="228"/>
|
||||||
|
<source>City</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message id="#showBestResults">
|
||||||
|
<location filename="../qml/Widgets/ProfileWidget.qml" line="271"/>
|
||||||
|
<source>Show best results</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message id="#showAllResults">
|
||||||
|
<location filename="../qml/Widgets/ProfileWidget.qml" line="273"/>
|
||||||
|
<source>Show all results</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message id="#rankingHeadline">
|
||||||
|
<location filename="../qml/Widgets/RankingWidget.qml" line="31"/>
|
||||||
|
<source>(Ranking)</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message id="#registrationHeadline">
|
||||||
|
<location filename="../qml/Widgets/RegistrationWidget.qml" line="61"/>
|
||||||
|
<source>(Registration)</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message id="#resultsHeadline">
|
||||||
|
<location filename="../qml/Widgets/ResultWidget.qml" line="136"/>
|
||||||
|
<source>(Results)</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message id="#startlistHeadline">
|
||||||
|
<location filename="../qml/Widgets/StartlistWidget.qml" line="56"/>
|
||||||
|
<location filename="../qml/Widgets/StartlistWidget.qml" line="82"/>
|
||||||
|
<source>(Startlist)</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message id="#loading">
|
||||||
|
<location filename="../qml/main.qml" line="551"/>
|
||||||
|
<source>Loading</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message id="#noConnectionError">
|
||||||
|
<location filename="../qml/main.qml" line="665"/>
|
||||||
|
<source>No connection to server</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message id="#notFoundError">
|
||||||
|
<location filename="../qml/main.qml" line="670"/>
|
||||||
|
<source>Not found</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message id="#noDataError">
|
||||||
|
<location filename="../qml/main.qml" line="675"/>
|
||||||
|
<source>No Data</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message id="#invalidRequestError">
|
||||||
|
<location filename="../qml/main.qml" line="680"/>
|
||||||
|
<source>Invalid Request</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message id="#unexpectedError">
|
||||||
|
<location filename="../qml/main.qml" line="686"/>
|
||||||
|
<source>Unexpected error</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message id="#shareResultsLinkText">
|
||||||
|
<location filename="../../sources/bluerockbackend.cpp" line="99"/>
|
||||||
|
<source>Check out the results of %1 over here:</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>AndroidShareUtils</name>
|
||||||
|
<message>
|
||||||
|
<location filename="../../sources/shareUtils/androidshareutils.cpp" line="191"/>
|
||||||
|
<source>Share: an Error occured</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../../sources/shareUtils/androidshareutils.cpp" line="203"/>
|
||||||
|
<source>Share: an Error occured
|
||||||
|
WorkingDir not valid</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../../sources/shareUtils/androidshareutils.cpp" line="217"/>
|
||||||
|
<location filename="../../sources/shareUtils/androidshareutils.cpp" line="243"/>
|
||||||
|
<location filename="../../sources/shareUtils/androidshareutils.cpp" line="255"/>
|
||||||
|
<location filename="../../sources/shareUtils/androidshareutils.cpp" line="283"/>
|
||||||
|
<source>Empty URL received</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../../sources/shareUtils/androidshareutils.cpp" line="235"/>
|
||||||
|
<location filename="../../sources/shareUtils/androidshareutils.cpp" line="273"/>
|
||||||
|
<source>File does not exist: %1</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
|
</TS>
|
6
resources/translations/translations.qrc
Normal file
6
resources/translations/translations.qrc
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
<RCC>
|
||||||
|
<qresource prefix="/">
|
||||||
|
<file>de.qm</file>
|
||||||
|
<file>en.qm</file>
|
||||||
|
</qresource>
|
||||||
|
</RCC>
|
|
@ -95,7 +95,8 @@ QVariantMap BlueRockBackend::getParamsFromUrl(QString stringUrl) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void BlueRockBackend::shareResultsAsUrl(QString url, QString compName) {
|
void BlueRockBackend::shareResultsAsUrl(QString url, QString compName) {
|
||||||
this->_shareUtils->shareText("Check out the results of " + compName + " over here:\n" + url);
|
//% "Check out the results of %1 over here:"
|
||||||
|
this->_shareUtils->shareText(qtTrId("#shareResultsLinkText").arg(compName) + "\n" + url);
|
||||||
}
|
}
|
||||||
|
|
||||||
void BlueRockBackend::shareResultsAsPoster(QString url, QString compName) {
|
void BlueRockBackend::shareResultsAsPoster(QString url, QString compName) {
|
||||||
|
|
|
@ -34,6 +34,16 @@ int main(int argc, char *argv[])
|
||||||
|
|
||||||
QGuiApplication app(argc, argv);
|
QGuiApplication app(argc, argv);
|
||||||
|
|
||||||
|
// translation
|
||||||
|
QString localeName = QLocale::system().bcp47Name();
|
||||||
|
QTranslator* translator = new QTranslator(qApp);
|
||||||
|
|
||||||
|
// fallback to en!
|
||||||
|
if(!translator->load(":/" + localeName + ".qm"))
|
||||||
|
translator->load(":/en.qm");
|
||||||
|
|
||||||
|
QGuiApplication::installTranslator(translator);
|
||||||
|
|
||||||
QQuickStyle::setStyle("Material");
|
QQuickStyle::setStyle("Material");
|
||||||
|
|
||||||
qmlRegisterType<BlueRockBackend>("de.itsblue.blueROCK", 1, 0, "BlueRockBackend");
|
qmlRegisterType<BlueRockBackend>("de.itsblue.blueROCK", 1, 0, "BlueRockBackend");
|
||||||
|
|
Loading…
Reference in a new issue