Make rule templates translatable

This commit is contained in:
Michael Zanetti 2019-08-31 22:08:22 +02:00
parent 01277053f9
commit 9d4697d796
9 changed files with 1051 additions and 20 deletions

View File

@ -14,6 +14,7 @@
#include <QDir>
#include <QJsonDocument>
#include <QMetaEnum>
#include <QCoreApplication>
RuleTemplates::RuleTemplates(QObject *parent) : QAbstractListModel(parent)
{
@ -44,7 +45,13 @@ RuleTemplates::RuleTemplates(QObject *parent) : QAbstractListModel(parent)
QVariantMap ruleTemplate = ruleTemplateVariant.toMap();
// RuleTemplate base
t = new RuleTemplate(ruleTemplate.value("interfaceName").toString(), ruleTemplate.value("description").toString(), ruleTemplate.value("ruleNameTemplate").toString(), this);
QString descriptionContext = QString("description for %0").arg(QFileInfo(templateFile).baseName());
QString nameTemplateContext = QString("ruleNameTemplate for %0").arg(QFileInfo(templateFile).baseName());
t = new RuleTemplate(ruleTemplate.value("interfaceName").toString(),
qApp->translate(descriptionContext.toUtf8(), ruleTemplate.value("description").toByteArray()),
qApp->translate(nameTemplateContext.toUtf8(), ruleTemplate.value("ruleNameTemplate").toByteArray()),
this);
qDebug() << "Loading rule template" << ruleTemplate.value("description").toString() << tr(ruleTemplate.value("description").toByteArray());
// EventDescriptorTemplate
foreach (const QVariant &eventDescriptorVariant, ruleTemplate.value("eventDescriptorTemplates").toList()) {

45
messages.sh Executable file
View File

@ -0,0 +1,45 @@
#!/bin/bash
# Script to update translation files
# Generates ruletemplates/messages.h and calls lupdate on the entire project
# Ideally this would eventually be called in the CI when building the packages
# However, this will break not find all translations when ran with Qt < 5.9
# so for now this is ran manually all the time and results are committed to the
# repository
OUT="nymea-app/ruletemplates/messages.h"
echo "// This file is generated. Update it using ./messages.sh in the root source directory" > $OUT
echo "#include <QString>" >> $OUT
echo "const QString translations[] {" >> $OUT
for INPUTFILE in `ls nymea-app/ruletemplates/*json`; do
echo "Extracting strings from ruletemplate file $INPUTFILE"
FILEBASENAME=$(basename -- "$INPUTFILE")
FILEBASENAME="${FILEBASENAME%.*}"
while IFS= read -r LINE
do
if [[ $LINE == *"\"description\""* ]] || [[ $LINE == *"\"ruleNameTemplate\""* ]]; then
if [ $HASCONTENT -eq 1 ]; then
echo "," >> $OUT
fi
TYPE=`echo $LINE | cut -d ":" -f 1 | sed 's/"//g'`
STRING=`echo $LINE | cut -d ":" -f 2 | sed 's/,$//'`
echo -n "QT_TRANSLATE_NOOP(" >> $OUT
echo -n "\"$TYPE for $FILEBASENAME\", " >> $OUT
echo -n $STRING >> $OUT
echo -n ")" >> $OUT
HASCONTENT=1
fi
done < "$INPUTFILE"
done
echo "" >> $OUT
echo "};" >> $OUT
lupdate nymea-app.pro

View File

@ -41,7 +41,7 @@
#include "stylecontroller.h"
#include "pushnotifications.h"
#include "applogcontroller.h"
#include "ruletemplates/messages.h"
QObject *platformHelperProvider(QQmlEngine *engine, QJSEngine *scriptEngine)
{

View File

@ -22,7 +22,8 @@ HEADERS += \
pushnotifications.h \
platformhelper.h \
platformintegration/generic/platformhelpergeneric.h \
applogcontroller.h
applogcontroller.h \
ruletemplates/messages.h
SOURCES += main.cpp \
platformintegration/generic/raspberrypihelper.cpp \
@ -130,11 +131,3 @@ BR=$$BRANDING
target.path = /usr/bin
INSTALLS += target
DISTFILES += \
ruletemplates/doorbellruletemplates.json \
ruletemplates/smartmetertemplates.json \
ruletemplates/presencesensortemplates.json \
ruletemplates/daylightsensor.json \
ruletemplates/lighttemplates.json

View File

@ -0,0 +1,54 @@
// This file is generated. Update it using ./messages.sh in the root source directory
#include <QString>
const QString translations[] {
QT_TRANSLATE_NOOP("description for accesscontroltemplates", "Alert me on denied access attempts"),
QT_TRANSLATE_NOOP("ruleNameTemplate for accesscontroltemplates", "Denied access attempt on %0"),
QT_TRANSLATE_NOOP("description for accesscontroltemplates", "Notify my about access"),
QT_TRANSLATE_NOOP("ruleNameTemplate for accesscontroltemplates", "Access granted on %0"),
QT_TRANSLATE_NOOP("description for accesscontroltemplates", "Notify my about user access"),
QT_TRANSLATE_NOOP("ruleNameTemplate for accesscontroltemplates", "Access granted to user on %0"),
QT_TRANSLATE_NOOP("description for buttontemplates", "Turn on a light"),
QT_TRANSLATE_NOOP("ruleNameTemplate for buttontemplates", "%0 turns on %1"),
QT_TRANSLATE_NOOP("description for buttontemplates", "Turn off a light"),
QT_TRANSLATE_NOOP("ruleNameTemplate for buttontemplates", "%0 turns off %1"),
QT_TRANSLATE_NOOP("description for buttontemplates", "Switch a light"),
QT_TRANSLATE_NOOP("ruleNameTemplate for buttontemplates", "%0 switches %1"),
QT_TRANSLATE_NOOP("description for buttontemplates", "Turn off all lights"),
QT_TRANSLATE_NOOP("ruleNameTemplate for buttontemplates", "Turn off everything with %0"),
QT_TRANSLATE_NOOP("description for daylightsensor", "Turn on a light while it's dark outside"),
QT_TRANSLATE_NOOP("ruleNameTemplate for daylightsensor", "Turn on %1 while it's dark outside"),
QT_TRANSLATE_NOOP("description for daylightsensor", "Turn on a light when it gets dark outside"),
QT_TRANSLATE_NOOP("ruleNameTemplate for daylightsensor", "Turn on %1 when it gets dark outside (%0)"),
QT_TRANSLATE_NOOP("description for daylightsensor", "Turn on all lights when it gets dark outside"),
QT_TRANSLATE_NOOP("ruleNameTemplate for daylightsensor", "Turn on all lights when it gets dark outside"),
QT_TRANSLATE_NOOP("description for doorbellruletemplates", "Alert on doorbell ring"),
QT_TRANSLATE_NOOP("ruleNameTemplate for doorbellruletemplates", "Alert %1 when someone is at %0"),
QT_TRANSLATE_NOOP("description for mediatemplates", "Dim light while watching TV"),
QT_TRANSLATE_NOOP("ruleNameTemplate for mediatemplates", "%0 dims %1 for movie time"),
QT_TRANSLATE_NOOP("description for notificationtemplates", "Notify me when a device runs out of battery"),
QT_TRANSLATE_NOOP("ruleNameTemplate for notificationtemplates", "Low battery alert for %0"),
QT_TRANSLATE_NOOP("description for notificationtemplates", "Notify me when something runs dry"),
QT_TRANSLATE_NOOP("ruleNameTemplate for notificationtemplates", "Notify %1 when %0 runs dry"),
QT_TRANSLATE_NOOP("description for notificationtemplates", "Notify me when a thing gets disconnected"),
QT_TRANSLATE_NOOP("ruleNameTemplate for notificationtemplates", "Disconnect alert for %0"),
QT_TRANSLATE_NOOP("description for notificationtemplates", "Notify me when a thing connects"),
QT_TRANSLATE_NOOP("ruleNameTemplate for notificationtemplates", "Connection notification for %0"),
QT_TRANSLATE_NOOP("description for presencesensortemplates", "Turn on something while being present"),
QT_TRANSLATE_NOOP("ruleNameTemplate for presencesensortemplates", "Turn on %1 while %0 reports presence"),
QT_TRANSLATE_NOOP("description for presencesensortemplates", "Turn off something when leaving"),
QT_TRANSLATE_NOOP("ruleNameTemplate for presencesensortemplates", "Turn off %1 when %0 reports leaving"),
QT_TRANSLATE_NOOP("description for presencesensortemplates", "Turn off everything when leaving"),
QT_TRANSLATE_NOOP("ruleNameTemplate for presencesensortemplates", "Turn off everything when %0 reports leaving"),
QT_TRANSLATE_NOOP("description for presencesensortemplates", "Turn off all lights when leaving"),
QT_TRANSLATE_NOOP("ruleNameTemplate for presencesensortemplates", "Turn off all lights when %0 reports leaving"),
QT_TRANSLATE_NOOP("description for presencesensortemplates", "Turn on something when arriving"),
QT_TRANSLATE_NOOP("ruleNameTemplate for presencesensortemplates", "Turn on %1 when %0 reports arriving"),
QT_TRANSLATE_NOOP("description for smartmetertemplates", "Charge my car while producing energy"),
QT_TRANSLATE_NOOP("ruleNameTemplate for smartmetertemplates", "Smart car charging"),
QT_TRANSLATE_NOOP("description for smartmetertemplates", "Turn on heating while producing energy"),
QT_TRANSLATE_NOOP("ruleNameTemplate for smartmetertemplates", "Smart heating"),
QT_TRANSLATE_NOOP("description for template", ""),
QT_TRANSLATE_NOOP("ruleNameTemplate for template", "%0 ..."),
QT_TRANSLATE_NOOP("description for thermostattemplates", "Set temperature while I'm home"),
QT_TRANSLATE_NOOP("ruleNameTemplate for thermostattemplates", "Set temperature while I'm home")
};

View File

@ -716,6 +716,14 @@
<source>Log in to %1:cloud in order to connect to %1:core systems from anywhere.</source>
<translation>Melde Dich bei %1:cloud an um von überall aus auf Deine %1:core Systeme zugreifen zu können.</translation>
</message>
<message>
<source>Failed to connect to the login server. Please mase sure your network connection is working.</source>
<translation>Fehler beim verbinden zum Login-Server. Bitte stelle sicher, dass Deine Netzwerkverbindung funktioniert.</translation>
</message>
<message>
<source>An unexpected error happened. Please report this isse. Error code:</source>
<translation>Ein Unerwartetet Fehler ist aufgetreten. Bitte benachrichtige uns darüber. Fehler code:</translation>
</message>
</context>
<context>
<name>CloudSettingsPage</name>
@ -1345,6 +1353,13 @@
<translation type="vanished">%1 installiert</translation>
</message>
</context>
<context>
<name>DoorbellDevicePage</name>
<message>
<source>History</source>
<translation>Verlauf</translation>
</message>
</context>
<context>
<name>EditCalendarItemPage</name>
<message>
@ -3338,6 +3353,13 @@ Möchtest Du fortfahren?</translation>
<translation type="vanished">OK</translation>
</message>
</context>
<context>
<name>NewMagicPage</name>
<message>
<source>New magic</source>
<translation>Neue Magie</translation>
</message>
</context>
<context>
<name>NewThingMagicPage</name>
<message>
@ -3348,6 +3370,10 @@ Möchtest Du fortfahren?</translation>
<source>Create some magic manually</source>
<translation>Magie manuell erstellen</translation>
</message>
<message>
<source>New magic for %1</source>
<translation>Neue Magie für %1</translation>
</message>
</context>
<context>
<name>NewThingPage</name>
@ -3564,6 +3590,34 @@ Möchtest Du fortfahren?</translation>
<source>presence sensor</source>
<translation>Anwesenheitssensor</translation>
</message>
<message>
<source>Doorbells</source>
<translation>Türklingeln</translation>
</message>
<message>
<source>doorbell</source>
<translation>Türklingel</translation>
</message>
<message>
<source>alert</source>
<translation>Alarm</translation>
</message>
<message>
<source>button</source>
<translation>Taster</translation>
</message>
<message>
<source>access control</source>
<translation>Zugangskontrolle</translation>
</message>
<message>
<source>smart meter</source>
<translation>Smart Meter</translation>
</message>
<message>
<source>media player</source>
<translation>Medienabspielgerät</translation>
</message>
</context>
<context>
<name>NymeaConnection</name>
@ -5005,6 +5059,129 @@ Bitte warte bis diese abgeschlossen ist.</translation>
<translation>Verbinde zu %1:core</translation>
</message>
</context>
<context>
<name>description for accesscontroltemplates</name>
<message>
<source>Alert me on denied access attempts</source>
<translation>Benachritige mich bei Fehlgeschlagenen Zutrittsversuchen</translation>
</message>
<message>
<source>Notify my about access</source>
<translation>Benachrichtige me über Zugänge</translation>
</message>
<message>
<source>Notify my about user access</source>
<translation>Benachrichtige mich über Benutzerzugang</translation>
</message>
</context>
<context>
<name>description for buttontemplates</name>
<message>
<source>Turn on a light</source>
<translation>Ein Licht einschalten</translation>
</message>
<message>
<source>Turn off a light</source>
<translation>Ein Licht ausschalten</translation>
</message>
<message>
<source>Switch a light</source>
<translation>Ein Licht schalten</translation>
</message>
<message>
<source>Turn off all lights</source>
<translation>Alle Lichter ausschalten</translation>
</message>
</context>
<context>
<name>description for daylightsensor</name>
<message>
<source>Turn on a light while it&apos;s dark outside</source>
<translation>Ein Licht einschalten während es dunkel ist</translation>
</message>
<message>
<source>Turn on a light when it gets dark outside</source>
<translation>Ein Licht einschalten wenn es dunkel wird</translation>
</message>
<message>
<source>Turn on all lights when it gets dark outside</source>
<translation>Alle Lichter einschlalten wenn es dunkel wird</translation>
</message>
</context>
<context>
<name>description for doorbellruletemplates</name>
<message>
<source>Alert on doorbell ring</source>
<translation>Signal bei Türklingelbetätigung</translation>
</message>
</context>
<context>
<name>description for mediatemplates</name>
<message>
<source>Dim light while watching TV</source>
<translation>Licht dimmen während TV-Wiedergabe</translation>
</message>
</context>
<context>
<name>description for notificationtemplates</name>
<message>
<source>Notify me when a device runs out of battery</source>
<translation>Benachrichtige mich wenn sich die Batterie eines Gerätes zu Ende neight</translation>
</message>
<message>
<source>Notify me when something runs dry</source>
<translation>Benachrichte mich wenn etwas austrocknet</translation>
</message>
<message>
<source>Notify me when a thing gets disconnected</source>
<translation>Benachrichtuge mich wenn ein Gerät die Verbindung verliert</translation>
</message>
<message>
<source>Notify me when a thing connects</source>
<translation>Benachrichtige mich wenn sich ein Gerät verbindet</translation>
</message>
</context>
<context>
<name>description for presencesensortemplates</name>
<message>
<source>Turn on something while being present</source>
<translation>Etwas einschalten während Anwesenheit</translation>
</message>
<message>
<source>Turn off something when leaving</source>
<translation>Etwas ausschalten beim Verlassen</translation>
</message>
<message>
<source>Turn off everything when leaving</source>
<translation>Alles ausschalten beim Verlassen</translation>
</message>
<message>
<source>Turn off all lights when leaving</source>
<translation>Alle Lichter beim Verlassen ausschalten</translation>
</message>
<message>
<source>Turn on something when arriving</source>
<translation>Etwas einschalten bei Ankunft</translation>
</message>
</context>
<context>
<name>description for smartmetertemplates</name>
<message>
<source>Charge my car while producing energy</source>
<translation>Fahrzeug laden während Strom erzeugt wird</translation>
</message>
<message>
<source>Turn on heating while producing energy</source>
<translation>Heizung einschalten während Strom erzeugt wird</translation>
</message>
</context>
<context>
<name>description for thermostattemplates</name>
<message>
<source>Set temperature while I&apos;m home</source>
<translation>Temperatur einstellen während ich zuhause bin</translation>
</message>
</context>
<context>
<name>main</name>
<message>
@ -5064,4 +5241,134 @@ Bitte warte bis diese abgeschlossen ist.</translation>
<translation type="vanished">OK</translation>
</message>
</context>
<context>
<name>ruleNameTemplate for accesscontroltemplates</name>
<message>
<source>Denied access attempt on %0</source>
<translation>Verweigerter Zutrittsversuch bei %0</translation>
</message>
<message>
<source>Access granted on %0</source>
<translation>Zugang erteikt bei %0</translation>
</message>
<message>
<source>Access granted to user on %0</source>
<translation>Zuggang für Benutzer bei %0 erlaubt</translation>
</message>
</context>
<context>
<name>ruleNameTemplate for buttontemplates</name>
<message>
<source>%0 turns on %1</source>
<translation>0% schaltet %1 ein</translation>
</message>
<message>
<source>%0 turns off %1</source>
<translation>%0 schaltet %1 aus</translation>
</message>
<message>
<source>%0 switches %1</source>
<translation>%0 schaltet %1</translation>
</message>
<message>
<source>Turn off everything with %0</source>
<translation>Alles ausschalten mit %0</translation>
</message>
</context>
<context>
<name>ruleNameTemplate for daylightsensor</name>
<message>
<source>Turn on %1 while it&apos;s dark outside</source>
<translation>%1 einschalten während es drausen dunkel ist</translation>
</message>
<message>
<source>Turn on %1 when it gets dark outside (%0)</source>
<translation>Schalte %1 ein wenn es drausen dunkel wird (%0)</translation>
</message>
<message>
<source>Turn on all lights when it gets dark outside</source>
<translation>Alle Lichter einschalten wenn es drausen dunkel wird</translation>
</message>
</context>
<context>
<name>ruleNameTemplate for doorbellruletemplates</name>
<message>
<source>Alert %1 when someone is at %0</source>
<translation>Signal bei %1 wenn jemand bei %0 ist</translation>
</message>
</context>
<context>
<name>ruleNameTemplate for mediatemplates</name>
<message>
<source>%0 dims %1 for movie time</source>
<translation>%0 dimmt %1 für Fernsehzeit</translation>
</message>
</context>
<context>
<name>ruleNameTemplate for notificationtemplates</name>
<message>
<source>Low battery alert for %0</source>
<translation>Batterieladung kritisch bei %0</translation>
</message>
<message>
<source>Notify %1 when %0 runs dry</source>
<translation>Benachrichtige %1 wenn %0 austrocknet</translation>
</message>
<message>
<source>Disconnect alert for %0</source>
<translation>%0 wurde getrennt</translation>
</message>
<message>
<source>Connection notification for %0</source>
<translation>%0 wurde verbunden</translation>
</message>
</context>
<context>
<name>ruleNameTemplate for presencesensortemplates</name>
<message>
<source>Turn on %1 while %0 reports presence</source>
<translation>%1 einschalten während %0 Anwesenheit registriert</translation>
</message>
<message>
<source>Turn off %1 when %0 reports leaving</source>
<translation>%1 ausschalten wenn %0 verlassen wird</translation>
</message>
<message>
<source>Turn off everything when %0 reports leaving</source>
<translation>Alles ausschalten wenn %0 verlassen wird</translation>
</message>
<message>
<source>Turn off all lights when %0 reports leaving</source>
<translation>Alle Lichter ausschalten wenn %0 verlassen wird</translation>
</message>
<message>
<source>Turn on %1 when %0 reports arriving</source>
<translation>%1 einschalten %0 Ankunft registiert</translation>
</message>
</context>
<context>
<name>ruleNameTemplate for smartmetertemplates</name>
<message>
<source>Smart car charging</source>
<translation>Intelligentes Fahrzeugladen</translation>
</message>
<message>
<source>Smart heating</source>
<translation>Intelligente Heizung</translation>
</message>
</context>
<context>
<name>ruleNameTemplate for template</name>
<message>
<source>%0 ...</source>
<translation></translation>
</message>
</context>
<context>
<name>ruleNameTemplate for thermostattemplates</name>
<message>
<source>Set temperature while I&apos;m home</source>
<translation>Setze Temperatur während ich zuhause bin</translation>
</message>
</context>
</TS>

View File

@ -496,6 +496,14 @@
<source>Log in to %1:cloud in order to connect to %1:core systems from anywhere.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Failed to connect to the login server. Please mase sure your network connection is working.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>An unexpected error happened. Please report this isse. Error code:</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>CloudSettingsPage</name>
@ -926,6 +934,13 @@
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>DoorbellDevicePage</name>
<message>
<source>History</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>EditCalendarItemPage</name>
<message>
@ -2572,6 +2587,13 @@ Please try again.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>NewMagicPage</name>
<message>
<source>New magic</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>NewThingMagicPage</name>
<message>
@ -2582,6 +2604,10 @@ Please try again.</source>
<source>Create some magic manually</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>New magic for %1</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>NewThingPage</name>
@ -2782,6 +2808,34 @@ Please try again.</source>
<source>presence sensor</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Doorbells</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>doorbell</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>alert</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>button</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>access control</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>smart meter</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>media player</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>NymeaConnection</name>
@ -3792,4 +3846,257 @@ Do you want to proceed?</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>description for accesscontroltemplates</name>
<message>
<source>Alert me on denied access attempts</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Notify my about access</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Notify my about user access</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>description for buttontemplates</name>
<message>
<source>Turn on a light</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Turn off a light</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Switch a light</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Turn off all lights</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>description for daylightsensor</name>
<message>
<source>Turn on a light while it&apos;s dark outside</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Turn on a light when it gets dark outside</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Turn on all lights when it gets dark outside</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>description for doorbellruletemplates</name>
<message>
<source>Alert on doorbell ring</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>description for mediatemplates</name>
<message>
<source>Dim light while watching TV</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>description for notificationtemplates</name>
<message>
<source>Notify me when a device runs out of battery</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Notify me when something runs dry</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Notify me when a thing gets disconnected</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Notify me when a thing connects</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>description for presencesensortemplates</name>
<message>
<source>Turn on something while being present</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Turn off something when leaving</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Turn off everything when leaving</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Turn off all lights when leaving</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Turn on something when arriving</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>description for smartmetertemplates</name>
<message>
<source>Charge my car while producing energy</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Turn on heating while producing energy</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>description for thermostattemplates</name>
<message>
<source>Set temperature while I&apos;m home</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ruleNameTemplate for accesscontroltemplates</name>
<message>
<source>Denied access attempt on %0</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Access granted on %0</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Access granted to user on %0</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ruleNameTemplate for buttontemplates</name>
<message>
<source>%0 turns on %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>%0 turns off %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>%0 switches %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Turn off everything with %0</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ruleNameTemplate for daylightsensor</name>
<message>
<source>Turn on %1 while it&apos;s dark outside</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Turn on %1 when it gets dark outside (%0)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Turn on all lights when it gets dark outside</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ruleNameTemplate for doorbellruletemplates</name>
<message>
<source>Alert %1 when someone is at %0</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ruleNameTemplate for mediatemplates</name>
<message>
<source>%0 dims %1 for movie time</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ruleNameTemplate for notificationtemplates</name>
<message>
<source>Low battery alert for %0</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Notify %1 when %0 runs dry</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Disconnect alert for %0</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Connection notification for %0</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ruleNameTemplate for presencesensortemplates</name>
<message>
<source>Turn on %1 while %0 reports presence</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Turn off %1 when %0 reports leaving</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Turn off everything when %0 reports leaving</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Turn off all lights when %0 reports leaving</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Turn on %1 when %0 reports arriving</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ruleNameTemplate for smartmetertemplates</name>
<message>
<source>Smart car charging</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Smart heating</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ruleNameTemplate for template</name>
<message>
<source>%0 ...</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ruleNameTemplate for thermostattemplates</name>
<message>
<source>Set temperature while I&apos;m home</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>

View File

@ -331,13 +331,14 @@
<source>There are %n boxes connected to your cloud</source>
<translation type="obsolete">
<numerusform>There is %n box connected to your cloud.</numerusform>
<numerusform>There are %n boxes connected to your cloud.</numerusform>
</translation>
</message>
<message numerus="yes">
<source>There are %n boxes connected to your cloud.</source>
<translation><numerusform>%n () .</numerusform>
</translation></message>
<translation type="vanished">
<numerusform>%n () .</numerusform>
</translation>
</message>
<message>
<source>Cloud login</source>
<translation> </translation>
@ -480,8 +481,10 @@
</message>
<message numerus="yes">
<source>There are %n %1:core systems connected to your cloud.</source>
<translation><numerusform>%n %1:코어 .</numerusform>
</translation></message>
<translation>
<numerusform>%n %1:코어 .</numerusform>
</translation>
</message>
<message>
<source>Sorry to see you go. If you log out you won&apos;t be able to connect to %1:core systems remotely any more. However, you can come back any time, we&apos;ll keep your user account. If you whish to completely delete your account and all the data associated with it, check the box below before hitting ok. If you decide to delete your account, all your personal information will be removed from %1:cloud and cannot be restored.</source>
<translation>. %1:코어 . , . . %1:클라우드에서 .</translation>
@ -490,6 +493,14 @@
<source>Log in to %1:cloud in order to connect to %1:core systems from anywhere.</source>
<translation> %1:core %1:cloud에 .</translation>
</message>
<message>
<source>Failed to connect to the login server. Please mase sure your network connection is working.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>An unexpected error happened. Please report this isse. Error code:</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>CloudSettingsPage</name>
@ -920,6 +931,13 @@
<translation>%1 </translation>
</message>
</context>
<context>
<name>DoorbellDevicePage</name>
<message>
<source>History</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>EditCalendarItemPage</name>
<message>
@ -2245,8 +2263,10 @@ Please try again.</source>
</message>
<message numerus="yes">
<source>%n system update(s) available</source>
<translation><numerusform>%n </numerusform>
</translation></message>
<translation>
<numerusform>%n </numerusform>
</translation>
</message>
<message>
<source>System settings</source>
<translation> </translation>
@ -2570,6 +2590,13 @@ Please try again.</source>
<translation>WiFi를 WiFi를 . LAN %1 .</translation>
</message>
</context>
<context>
<name>NewMagicPage</name>
<message>
<source>New magic</source>
<translation type="unfinished"> </translation>
</message>
</context>
<context>
<name>NewThingMagicPage</name>
<message>
@ -2580,6 +2607,10 @@ Please try again.</source>
<source>Create some magic manually</source>
<translation> </translation>
</message>
<message>
<source>New magic for %1</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>NewThingPage</name>
@ -2780,6 +2811,34 @@ Please try again.</source>
<source>presence sensor</source>
<translation> </translation>
</message>
<message>
<source>Doorbells</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>doorbell</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>alert</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>button</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>access control</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>smart meter</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>media player</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>NymeaConnection</name>
@ -3515,8 +3574,10 @@ Please only use this if you are sure you want this and consider reporting the is
</message>
<message numerus="yes">
<source>%n update(s) available</source>
<translation><numerusform>%n </numerusform>
</translation></message>
<translation>
<numerusform>%n </numerusform>
</translation>
</message>
<message>
<source>Check again</source>
<translation> </translation>
@ -3788,4 +3849,257 @@ Do you want to proceed?</source>
<translation>%1:코어에 </translation>
</message>
</context>
<context>
<name>description for accesscontroltemplates</name>
<message>
<source>Alert me on denied access attempts</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Notify my about access</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Notify my about user access</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>description for buttontemplates</name>
<message>
<source>Turn on a light</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Turn off a light</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Switch a light</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Turn off all lights</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>description for daylightsensor</name>
<message>
<source>Turn on a light while it&apos;s dark outside</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Turn on a light when it gets dark outside</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Turn on all lights when it gets dark outside</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>description for doorbellruletemplates</name>
<message>
<source>Alert on doorbell ring</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>description for mediatemplates</name>
<message>
<source>Dim light while watching TV</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>description for notificationtemplates</name>
<message>
<source>Notify me when a device runs out of battery</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Notify me when something runs dry</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Notify me when a thing gets disconnected</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Notify me when a thing connects</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>description for presencesensortemplates</name>
<message>
<source>Turn on something while being present</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Turn off something when leaving</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Turn off everything when leaving</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Turn off all lights when leaving</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Turn on something when arriving</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>description for smartmetertemplates</name>
<message>
<source>Charge my car while producing energy</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Turn on heating while producing energy</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>description for thermostattemplates</name>
<message>
<source>Set temperature while I&apos;m home</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ruleNameTemplate for accesscontroltemplates</name>
<message>
<source>Denied access attempt on %0</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Access granted on %0</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Access granted to user on %0</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ruleNameTemplate for buttontemplates</name>
<message>
<source>%0 turns on %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>%0 turns off %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>%0 switches %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Turn off everything with %0</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ruleNameTemplate for daylightsensor</name>
<message>
<source>Turn on %1 while it&apos;s dark outside</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Turn on %1 when it gets dark outside (%0)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Turn on all lights when it gets dark outside</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ruleNameTemplate for doorbellruletemplates</name>
<message>
<source>Alert %1 when someone is at %0</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ruleNameTemplate for mediatemplates</name>
<message>
<source>%0 dims %1 for movie time</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ruleNameTemplate for notificationtemplates</name>
<message>
<source>Low battery alert for %0</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Notify %1 when %0 runs dry</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Disconnect alert for %0</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Connection notification for %0</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ruleNameTemplate for presencesensortemplates</name>
<message>
<source>Turn on %1 while %0 reports presence</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Turn off %1 when %0 reports leaving</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Turn off everything when %0 reports leaving</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Turn off all lights when %0 reports leaving</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Turn on %1 when %0 reports arriving</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ruleNameTemplate for smartmetertemplates</name>
<message>
<source>Smart car charging</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Smart heating</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ruleNameTemplate for template</name>
<message>
<source>%0 ...</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ruleNameTemplate for thermostattemplates</name>
<message>
<source>Set temperature while I&apos;m home</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>

View File

@ -175,6 +175,7 @@ ApplicationWindow {
return Qt.resolvedUrl("images/sensors/closable.svg")
case "media":
case "mediacontroller":
case "mediaplayer":
return Qt.resolvedUrl("images/mediaplayer-app-symbolic.svg")
case "powersocket":
return Qt.resolvedUrl("images/powersocket.svg")
@ -310,6 +311,9 @@ ApplicationWindow {
case "extendedsmartmeterproducer":
case "extendedsmartmeterconsumer":
return qsTr("smart meter");
case "media":
case "mediaplayer":
return qsTr("media player")
default:
console.warn("Unhandled interfaceToDisplayName:", name)
}