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:
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ Item {
|
||||
Layout.fillWidth: true
|
||||
|
||||
Controls.SubtitleLabel {
|
||||
text: qsTr("№")
|
||||
text: qsTr("#")
|
||||
color: Palette.tableHeaderTextColor
|
||||
anchors.centerIn: parent
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user