@@ -16,22 +16,67 @@ const socThreshold = 95 //not implemented
16
16
17
17
const scriptRun = new Date ( )
18
18
19
+ // Translations
20
+ const translations = {
21
+ en : {
22
+ chargeStatus : {
23
+ disconnected : "Disconnected" ,
24
+ holdingCharge : "holding charge" ,
25
+ connected : "connected" ,
26
+ charging : "charging…"
27
+ } ,
28
+ soc : "SOC" ,
29
+ range : "Range" ,
30
+ targetSOC : "Target SOC" ,
31
+ hvac : "HVAC"
32
+ } ,
33
+ de : {
34
+ chargeStatus : {
35
+ disconnected : "Entkoppelt" ,
36
+ holdingCharge : "Ladezustand halten" ,
37
+ connected : "Verbunden" ,
38
+ charging : "Lädt…"
39
+ } ,
40
+ soc : "Ladezustand" ,
41
+ range : "Reichweite" ,
42
+ targetSOC : "Zielladung" ,
43
+ hvac : "Heizung"
44
+ }
45
+ }
46
+
47
+ function getTranslatedText ( key ) {
48
+ let lang = Device . language ( ) ;
49
+ let translation = translations [ lang ] ;
50
+ if ( translation == undefined ) {
51
+ translation = translations . en ;
52
+ }
53
+ let nested = key . split ( "." ) ;
54
+ key . split ( "." ) . forEach ( function ( element ) {
55
+ translation = translation [ element ] ;
56
+ } ) ;
57
+ return translation ;
58
+ }
59
+
60
+ console . log ( Device . locale ( ) )
61
+ console . log ( Device . language ( ) )
62
+
19
63
let widget = await createWidget ( )
20
64
21
- // used for debugging if script runs inside the app
65
+ // present the widget in app
22
66
if ( ! config . runsInWidget ) {
23
67
await widget . presentMedium ( )
24
68
}
25
69
Script . setWidget ( widget )
26
70
Script . complete ( )
27
71
28
-
72
+ // adds a vertical stack to widgetStack
29
73
function verticalStack ( widgetStack ) {
30
74
let stack = widgetStack . addStack ( )
31
75
stack . layoutVertically ( )
32
76
return stack
33
77
}
34
78
79
+ // adds a value - title pair
35
80
function addFormattedData ( widgetStack , dataTitle , dataValue ) {
36
81
let stack = widgetStack . addStack ( )
37
82
stack . layoutVertically ( )
@@ -42,7 +87,7 @@ function addFormattedData(widgetStack, dataTitle, dataValue){
42
87
}
43
88
44
89
// build the widget
45
- async function createWidget ( items ) {
90
+ async function createWidget ( ) {
46
91
let widget = new ListWidget ( )
47
92
const data = await getData ( )
48
93
@@ -66,19 +111,19 @@ async function createWidget(items) {
66
111
67
112
switch ( data . plugConnectionState ) {
68
113
case "disconnected" :
69
- chargeStatus = "⚫ Entkoppelt"
114
+ chargeStatus = "⚫ " + getTranslatedText ( "chargeStatus.disconnected" )
70
115
break ;
71
116
case "connected" :
72
117
//widget.refreshAfterDate = new Date(Date.now() + 300) //increase refresh rate?
73
118
switch ( data . chargeStatus ) {
74
119
case "readyForCharging" :
75
- chargeStatus = "🟠 Ladezustand halten"
120
+ chargeStatus = "🟠 " + getTranslatedText ( "chargeStatus.connected" )
76
121
break ;
77
122
case "chargePurposeReachedAndConservation" :
78
- chargeStatus = "🟢 Verbunden"
123
+ chargeStatus = "🟢 " + getTranslatedText ( "chargeStatus.holdingCharge" )
79
124
break ;
80
125
case "charging" :
81
- chargeStatus = "⚡ Lädt…"
126
+ chargeStatus = "⚡ " + getTranslatedText ( "chargeStatus.charging" )
82
127
break ;
83
128
default :
84
129
chargeStatus = "unknown cS: " + data . chargeStatus
@@ -129,29 +174,28 @@ async function createWidget(items) {
129
174
130
175
const dataCol1 = verticalStack ( wrap )
131
176
132
- addFormattedData ( dataCol1 , "Ladestand" , data . batterySOC . toString ( ) + "%" )
177
+ addFormattedData ( dataCol1 , getTranslatedText ( "soc" ) , data . batterySOC . toString ( ) + "%" )
133
178
dataCol1 . addSpacer ( 10 )
134
- addFormattedData ( dataCol1 , "Reichweite" , data . remainingRange + "km" )
179
+ addFormattedData ( dataCol1 , getTranslatedText ( "range" ) , data . remainingRange + "km" )
135
180
136
181
const dataCol2 = verticalStack ( wrap )
137
182
138
- addFormattedData ( dataCol2 , "Zielladung" , data . targetSOC + "%" )
183
+ addFormattedData ( dataCol2 , getTranslatedText ( "targetSOC" ) , data . targetSOC + "%" )
139
184
dataCol2 . addSpacer ( 10 )
140
- addFormattedData ( dataCol2 , "Heizung" , data . hvacState + " (" + data . hvacTargetTemp + "°C)" )
185
+ addFormattedData ( dataCol2 , getTranslatedText ( "hvac" ) , data . hvacState + " (" + data . hvacTargetTemp + "°C)" )
141
186
142
187
let dF = new DateFormatter ( )
143
188
dF . useNoDateStyle ( )
144
189
dF . useShortTimeStyle ( )
145
- timedebug = widget . addText ( "carUpdate: " + ( dataTimestamp == null ? data . time : dF . string ( dataTimestamp ) ) + " lastUpdate: " + dF . string ( scriptRun ) )
190
+ timedebug = widget . addText ( "carUpdate " + ( dataTimestamp == null ? data . time : dF . string ( dataTimestamp ) ) + " (widget " + dF . string ( scriptRun ) + ")" )
146
191
timedebug . font = Font . lightSystemFont ( 8 )
147
192
timedebug . textColor = Color . dynamic ( Color . lightGray ( ) , Color . darkGray ( ) )
148
193
timedebug . rightAlignText ( )
149
194
return widget ;
150
195
}
151
196
152
197
153
-
154
- // fetch all data
198
+ // fetch data
155
199
async function getData ( ) {
156
200
let state
157
201
if ( exampleData || baseURL == "" ) {
0 commit comments