A system of translations into different languages has been implemented. Added translations into Russian. Various UI fixes for valid internationalization

This commit is contained in:
Yury Shuvakin
2022-08-28 11:33:56 +03:00
parent 2a960893d0
commit 4a0f78c247
39 changed files with 3365 additions and 357 deletions

View File

@@ -16,7 +16,7 @@ Item {
Layout.fillWidth: true
RowLayout {
spacing: 90
spacing: 70
anchors.fill: parent
Controls.TitleLabel {
@@ -41,14 +41,14 @@ Item {
GridLayout {
columns: 2
columnSpacing: 90
columnSpacing: 70
rowSpacing: 20
anchors.fill: parent
RowLayout {
spacing: 10
Controls.ContentLabel {
text: qsTr("Battery charge level, V")
text: qsTr("Battery charge level, %")
Layout.fillWidth: true
Layout.maximumWidth: implicitWidth
}
@@ -222,7 +222,7 @@ Item {
GridLayout {
columns: 2
columnSpacing: 90
columnSpacing: 70
rowSpacing: 20
anchors.fill: parent

View File

@@ -12,6 +12,8 @@ RowLayout {
property real contentRowSpacing: 20
property real contentColumnSpacing: 35
signal needWait(bool active, string text)
spacing: contentColumnSpacing
Flickable {
@@ -163,12 +165,16 @@ RowLayout {
Controls.SubtitleLabel {
text: qsTr("Maximum charge current, A")
maximumLineCount: 2
wrapMode: Text.WordWrap
Layout.fillWidth: true
Layout.maximumWidth: (parent.width - parent.columnSpacing) / 2
}
Controls.SubtitleLabel {
text: qsTr("Maximum load current, A")
maximumLineCount: 2
wrapMode: Text.WordWrap
Layout.fillWidth: true
Layout.maximumWidth: (parent.width - parent.columnSpacing) / 2
}
@@ -189,6 +195,8 @@ RowLayout {
Controls.SubtitleLabel {
text: qsTr("Maximum temperature, °C")
maximumLineCount: 2
wrapMode: Text.WordWrap
Layout.fillWidth: true
Layout.maximumWidth: (parent.width - parent.columnSpacing) / 2
Layout.columnSpan: 2
@@ -224,12 +232,16 @@ RowLayout {
Controls.SubtitleLabel {
text: qsTr("Lower disable threshold, V")
maximumLineCount: 2
wrapMode: Text.WordWrap
Layout.fillWidth: true
Layout.maximumWidth: (parent.width - parent.columnSpacing) / 2
}
Controls.SubtitleLabel {
text: qsTr("Upper disable threshold, V")
maximumLineCount: 2
wrapMode: Text.WordWrap
Layout.fillWidth: true
Layout.maximumWidth: (parent.width - parent.columnSpacing) / 2
}
@@ -250,14 +262,16 @@ RowLayout {
Controls.SubtitleLabel {
text: qsTr("Lower enable threshold (should be higher than disable), V")
maximumLineCount: 2
maximumLineCount: 3
wrapMode: Text.WordWrap
Layout.fillWidth: true
Layout.maximumWidth: (parent.width - parent.columnSpacing) / 2
}
Controls.SubtitleLabel {
text: qsTr("Upper enable threshold (should be higher than disable), V")
maximumLineCount: 2
maximumLineCount: 3
wrapMode: Text.WordWrap
Layout.fillWidth: true
Layout.maximumWidth: (parent.width - parent.columnSpacing) / 2
}
@@ -328,6 +342,8 @@ RowLayout {
Controls.SubtitleLabel {
text: qsTr("Cell balancing interval, ms")
maximumLineCount: 2
wrapMode: Text.WordWrap
Layout.fillWidth: true
Layout.maximumWidth: (parent.width - parent.columnSpacing) / 2
Layout.columnSpan: 2
@@ -367,13 +383,13 @@ RowLayout {
spacing: 20
Controls.LabelWithBackground {
text: qsTr(" 1")
text: qsTr("# 1")
Layout.preferredWidth: outputSettingsFrame.outputNumberSize
Layout.preferredHeight: outputSettingsFrame.outputNumberSize
}
Controls.CheckBox {
text: qsTr("Use for management")
text: qsTr("Use for storage management")
Layout.fillWidth: true
Layout.preferredHeight: outputSettingsFrame.outputNumberSize
}
@@ -391,7 +407,7 @@ RowLayout {
spacing: 20
Controls.LabelWithBackground {
text: qsTr(" 2")
text: qsTr("# 2")
Layout.preferredWidth: outputSettingsFrame.outputNumberSize
Layout.preferredHeight: outputSettingsFrame.outputNumberSize
}
@@ -408,6 +424,8 @@ RowLayout {
Controls.SubtitleLabel {
text: qsTr("Change in value during SOC")
maximumLineCount: 2
wrapMode: Text.WordWrap
Layout.fillWidth: true
Layout.maximumWidth: (parent.width - parent.columnSpacing) / 2
Layout.columnSpan: 2
@@ -429,7 +447,7 @@ RowLayout {
spacing: 20
Controls.LabelWithBackground {
text: qsTr(" 3")
text: qsTr("# 3")
Layout.preferredWidth: outputSettingsFrame.outputNumberSize
Layout.preferredHeight: outputSettingsFrame.outputNumberSize
}
@@ -476,7 +494,7 @@ RowLayout {
spacing: 20
Controls.LabelWithBackground {
text: qsTr(" 4")
text: qsTr("# 4")
Layout.preferredWidth: outputSettingsFrame.outputNumberSize
Layout.preferredHeight: outputSettingsFrame.outputNumberSize
}
@@ -534,7 +552,7 @@ RowLayout {
anchors.fill: parent
Controls.SubtitleLabel {
text: qsTr("Current sensor value «0»")
text: qsTr("Current sensor value \"0\"")
Layout.fillWidth: true
Layout.columnSpan: 2
}
@@ -549,7 +567,7 @@ RowLayout {
Controls.Button {
id: zeroSensorValueCalibrationButton
text: qsTr("Calibrate «0»")
text: qsTr("Calibrate \"0\"")
Layout.fillWidth: true
Layout.maximumWidth: (parent.width - parent.columnSpacing) / 2
Layout.columnSpan: 2
@@ -561,6 +579,7 @@ RowLayout {
Controls.OutlineButton {
text: qsTr("Load settings from file")
onClicked: loadFileDialog.open()
Layout.preferredWidth: 270
FileDialog {
id: loadFileDialog
@@ -576,6 +595,7 @@ RowLayout {
Controls.OutlineButton {
text: qsTr("Save settings to file")
onClicked: saveFileDialog.open()
Layout.preferredWidth: 270
FileDialog {
id: saveFileDialog
@@ -637,7 +657,7 @@ RowLayout {
}
Controls.LinkLabel {
text: qsTr("Current sensor value «0»")
text: qsTr("Current sensor value \"0\"")
onClicked: settingsFlickable.contentY = zeroSensorSettingsFrame.mapToItem(settingsFlickable.contentItem, 0, 0).y
}
@@ -649,7 +669,7 @@ RowLayout {
spacing: 15
Controls.OutlineButton {
text: qsTr("Read settings from file")
text: qsTr("Read default settings")
Layout.fillWidth: true
onClicked: BmsInterface.commands().getBMSconfDefault()
}
@@ -661,15 +681,6 @@ RowLayout {
}
Controls.OutlineButton {
text: qsTr("Write to non-volatile memory of BMS")
Layout.fillWidth: true
onClicked: {
writeValuesToConfig()
BmsInterface.commands().storeBMSConfig()
}
}
Controls.Button {
text: qsTr("Write current values to BMS")
Layout.fillWidth: true
onClicked: {
@@ -678,10 +689,20 @@ RowLayout {
}
}
Controls.Button {
text: qsTr("Write to non-volatile memory of BMS")
Layout.fillWidth: true
onClicked: {
needWait(true, qsTr("The settings are written to non-volatile memory.\nWait, please."))
writeValuesToConfig()
BmsInterface.commands().storeBMSConfig()
}
}
Layout.fillWidth: true
}
Layout.maximumWidth: 320
Layout.maximumWidth: 280
Layout.fillHeight: true
}

View File

@@ -21,7 +21,7 @@ Item {
Layout.fillWidth: true
Controls.SubtitleLabel {
text: qsTr("")
text: qsTr("#")
color: Palette.tableHeaderTextColor
anchors.centerIn: parent
}

View File

@@ -9,7 +9,7 @@ import Utils 1.0
Dialog {
id: root
title: qsTr("Connection screen")
width: 400
width: 470
height: 320
modal: true
closePolicy: Popup.CloseOnEscape
@@ -79,7 +79,7 @@ Dialog {
Connections {
target: BmsInterface
onPortConnectedChanged: {
connectButton.text = BmsInterface.isPortConnected() ? qsTr("Disconnect") : qsTr("Connect")
connectButton.text = Qt.binding(function() { return BmsInterface.isPortConnected() ? qsTr("Disconnect") : qsTr("Connect") })
serialBox.enabled = !BmsInterface.isPortConnected()
}
}

View File

@@ -37,27 +37,27 @@ ColumnLayout {
Controls.TabButton {
text: qsTr("Current")
width: bar.width / 6 * 0.9
}
Controls.TabButton {
text: qsTr("Battery temperature")
width: bar.width / 6 * 1.2
}
Controls.TabButton {
text: qsTr("BMS temperature")
width: bar.width / 6 * 1.2
}
Controls.TabButton {
text: qsTr("Cell voltage")
width: bar.width / 6 * 0.8
}
Controls.TabButton {
text: qsTr("Battery temperature")
width: bar.width / 6 * 1.3
}
Controls.TabButton {
text: qsTr("BMS temperature")
width: bar.width / 6 * 1.1
}
Controls.TabButton {
text: qsTr("Cell voltage")
width: bar.width / 6 * 1
}
Controls.TabButton {
text: qsTr("Cell list")
width: bar.width / 6 * 0.9
width: bar.width / 6 * 0.85
}
Layout.fillWidth: true
@@ -81,6 +81,8 @@ ColumnLayout {
Controls.CheckBox {
id: checkSeries
checked: true
spacing: 10
onCheckedChanged: {
if (checked) {
chartItem.series(modelData).color = seriesColor
@@ -103,7 +105,7 @@ ColumnLayout {
chartItem = ListView.view ? ListView.view.chartItem : parent.chartItem
horizontal = !ListView.view
seriesColor = chartItem.series(modelData).color
checkSeries.text = chartItem.series(modelData).name
checkSeries.text = Qt.binding(function(){ return chartItem.series(modelData).name })
}
}
}
@@ -145,7 +147,7 @@ ColumnLayout {
RowLayout {
visible: horizontalLegend
spacing: 20
spacing: 0
property Controls.ChartView chartItem: chart
@@ -170,7 +172,7 @@ ColumnLayout {
property Controls.ChartView chartItem: chart
Layout.preferredWidth: 180
Layout.preferredWidth: 200
Layout.fillHeight: true
}
}
@@ -362,6 +364,15 @@ ColumnLayout {
}
}
Connections {
target: Translator
onCurrentLanguageChanged: {
for (var i = 0; i < cellListLoader.item.chart.count; ++i) {
cellListLoader.item.chart.series(i).name = qsTr("Cell #") + (i + 1).toString()
}
}
}
Connections {
target: BmsInterface.commands()
@@ -461,38 +472,53 @@ ColumnLayout {
Component.onCompleted: {
voltageLoader.item.chart.createSeries(ChartView.SeriesTypeLine, qsTr("Voltage indicator"),
voltageLoader.item.chart.xAxis, voltageLoader.item.chart.yAxis)
voltageLoader.item.chart.series(0).name = Qt.binding(function(){ return qsTr("Voltage indicator") })
voltageLoader.item.chart.axes[0].max = 10
voltageLoader.item.seriesCount = voltageLoader.item.chart.count
////////////////////////////////////////////////////////////////////////////////////////////////////////////
currentLoader.item.chart.createSeries(ChartView.SeriesTypeLine, qsTr("Current indicator"),
currentLoader.item.chart.xAxis, currentLoader.item.chart.yAxis)
currentLoader.item.chart.series(0).name = Qt.binding(function(){ return qsTr("Current indicator") })
currentLoader.item.chart.axes[0].max = 10
currentLoader.item.seriesCount = currentLoader.item.chart.count
////////////////////////////////////////////////////////////////////////////////////////////////////////////
batteryTemperatureLoader.item.chart.createSeries(ChartView.SeriesTypeLine, qsTr("Maximum temperature"),
batteryTemperatureLoader.item.chart.xAxis, batteryTemperatureLoader.item.chart.yAxis)
batteryTemperatureLoader.item.chart.createSeries(ChartView.SeriesTypeLine, qsTr("Average temperature"),
batteryTemperatureLoader.item.chart.xAxis, batteryTemperatureLoader.item.chart.yAxis)
batteryTemperatureLoader.item.chart.createSeries(ChartView.SeriesTypeLine, qsTr("Minimum temperature"),
batteryTemperatureLoader.item.chart.xAxis, batteryTemperatureLoader.item.chart.yAxis)
batteryTemperatureLoader.item.chart.series(0).name = Qt.binding(function(){ return qsTr("Maximum temperature") })
batteryTemperatureLoader.item.chart.series(1).name = Qt.binding(function(){ return qsTr("Average temperature") })
batteryTemperatureLoader.item.chart.series(2).name = Qt.binding(function(){ return qsTr("Minimum temperature") })
batteryTemperatureLoader.item.chart.axes[0].max = 10
batteryTemperatureLoader.item.seriesCount = batteryTemperatureLoader.item.chart.count
///////////////////////////////////////////////////////////////////////////////////////////////////////////
bmsTemperatureLoader.item.chart.createSeries(ChartView.SeriesTypeLine, qsTr("Maximum temperature"),
bmsTemperatureLoader.item.chart.xAxis, bmsTemperatureLoader.item.chart.yAxis)
bmsTemperatureLoader.item.chart.createSeries(ChartView.SeriesTypeLine, qsTr("Average temperature"),
bmsTemperatureLoader.item.chart.xAxis, bmsTemperatureLoader.item.chart.yAxis)
bmsTemperatureLoader.item.chart.createSeries(ChartView.SeriesTypeLine, qsTr("Minimum temperature"),
bmsTemperatureLoader.item.chart.xAxis, bmsTemperatureLoader.item.chart.yAxis)
bmsTemperatureLoader.item.chart.series(0).name = Qt.binding(function(){ return qsTr("Maximum temperature") })
bmsTemperatureLoader.item.chart.series(1).name = Qt.binding(function(){ return qsTr("Average temperature") })
bmsTemperatureLoader.item.chart.series(2).name = Qt.binding(function(){ return qsTr("Minimum temperature") })
bmsTemperatureLoader.item.chart.axes[0].max = 10
bmsTemperatureLoader.item.seriesCount = bmsTemperatureLoader.item.chart.count
///////////////////////////////////////////////////////////////////////////////////////////////////////////
cellVoltageLoader.item.chart.createSeries(ChartView.SeriesTypeLine, qsTr("Maximum voltage"),
cellVoltageLoader.item.chart.xAxis, cellVoltageLoader.item.chart.yAxis)
cellVoltageLoader.item.chart.createSeries(ChartView.SeriesTypeLine, qsTr("Average voltage"),
cellVoltageLoader.item.chart.xAxis, cellVoltageLoader.item.chart.yAxis)
cellVoltageLoader.item.chart.createSeries(ChartView.SeriesTypeLine, qsTr("Minimum voltage"),
cellVoltageLoader.item.chart.xAxis, cellVoltageLoader.item.chart.yAxis)
cellVoltageLoader.item.chart.series(0).name = Qt.binding(function(){ return qsTr("Maximum voltage") })
cellVoltageLoader.item.chart.series(1).name = Qt.binding(function(){ return qsTr("Average voltage") })
cellVoltageLoader.item.chart.series(2).name = Qt.binding(function(){ return qsTr("Minimum voltage") })
cellVoltageLoader.item.chart.axes[0].max = 10
cellVoltageLoader.item.seriesCount = cellVoltageLoader.item.chart.count
}