Skip to content

Commit f78ca33

Browse files
committed
widget: add English version
English and German languages are supported
1 parent 3262083 commit f78ca33

File tree

1 file changed

+58
-14
lines changed

1 file changed

+58
-14
lines changed

Car.js

Lines changed: 58 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -16,22 +16,67 @@ const socThreshold = 95 //not implemented
1616

1717
const scriptRun = new Date()
1818

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+
1963
let widget = await createWidget()
2064

21-
// used for debugging if script runs inside the app
65+
// present the widget in app
2266
if (!config.runsInWidget) {
2367
await widget.presentMedium()
2468
}
2569
Script.setWidget(widget)
2670
Script.complete()
2771

28-
72+
// adds a vertical stack to widgetStack
2973
function verticalStack(widgetStack){
3074
let stack = widgetStack.addStack()
3175
stack.layoutVertically()
3276
return stack
3377
}
3478

79+
// adds a value - title pair
3580
function addFormattedData(widgetStack, dataTitle, dataValue){
3681
let stack = widgetStack.addStack()
3782
stack.layoutVertically()
@@ -42,7 +87,7 @@ function addFormattedData(widgetStack, dataTitle, dataValue){
4287
}
4388

4489
// build the widget
45-
async function createWidget(items) {
90+
async function createWidget() {
4691
let widget = new ListWidget()
4792
const data = await getData()
4893

@@ -66,19 +111,19 @@ async function createWidget(items) {
66111

67112
switch (data.plugConnectionState){
68113
case "disconnected":
69-
chargeStatus = "⚫ Entkoppelt"
114+
chargeStatus = "⚫ "+getTranslatedText("chargeStatus.disconnected")
70115
break;
71116
case "connected":
72117
//widget.refreshAfterDate = new Date(Date.now() + 300) //increase refresh rate?
73118
switch (data.chargeStatus){
74119
case "readyForCharging":
75-
chargeStatus = "🟠 Ladezustand halten"
120+
chargeStatus = "🟠 "+getTranslatedText("chargeStatus.connected")
76121
break;
77122
case "chargePurposeReachedAndConservation":
78-
chargeStatus = "🟢 Verbunden"
123+
chargeStatus = "🟢 "+getTranslatedText("chargeStatus.holdingCharge")
79124
break;
80125
case "charging":
81-
chargeStatus = "⚡ Lädt…"
126+
chargeStatus = "⚡ "+getTranslatedText("chargeStatus.charging")
82127
break;
83128
default:
84129
chargeStatus = "unknown cS: "+data.chargeStatus
@@ -129,29 +174,28 @@ async function createWidget(items) {
129174

130175
const dataCol1 = verticalStack(wrap)
131176

132-
addFormattedData(dataCol1, "Ladestand", data.batterySOC.toString()+"%")
177+
addFormattedData(dataCol1, getTranslatedText("soc"), data.batterySOC.toString()+"%")
133178
dataCol1.addSpacer(10)
134-
addFormattedData(dataCol1, "Reichweite", data.remainingRange+ "km")
179+
addFormattedData(dataCol1, getTranslatedText("range"), data.remainingRange+ "km")
135180

136181
const dataCol2 = verticalStack(wrap)
137182

138-
addFormattedData(dataCol2, "Zielladung", data.targetSOC+"%")
183+
addFormattedData(dataCol2, getTranslatedText("targetSOC"), data.targetSOC+"%")
139184
dataCol2.addSpacer(10)
140-
addFormattedData(dataCol2, "Heizung", data.hvacState+" ("+data.hvacTargetTemp+"°C)")
185+
addFormattedData(dataCol2, getTranslatedText("hvac"), data.hvacState+" ("+data.hvacTargetTemp+"°C)")
141186

142187
let dF = new DateFormatter()
143188
dF.useNoDateStyle()
144189
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)+")")
146191
timedebug.font = Font.lightSystemFont(8)
147192
timedebug.textColor = Color.dynamic(Color.lightGray(), Color.darkGray())
148193
timedebug.rightAlignText()
149194
return widget;
150195
}
151196

152197

153-
154-
// fetch all data
198+
// fetch data
155199
async function getData() {
156200
let state
157201
if(exampleData || baseURL == ""){

0 commit comments

Comments
 (0)