Add localization to templates

This commit is contained in:
Thomas Lovén 2020-01-12 13:25:00 +01:00
parent 8790289006
commit 90eab9b92a
3 changed files with 17 additions and 4 deletions

File diff suppressed because one or more lines are too long

View File

@ -7,7 +7,7 @@ import { bindActionHandler } from "./action.js";
import { createCard, createElement, createEntityRow } from "./lovelace-element.js"; import { createCard, createElement, createEntityRow } from "./lovelace-element.js";
import { moreInfo } from "./more-info.js"; import { moreInfo } from "./more-info.js";
import { popUp, closePopUp } from "./popup.js"; import { popUp, closePopUp } from "./popup.js";
import { parseTemplate, subscribeRenderTemplate } from "./templates.js"; import { parseTemplate, subscribeRenderTemplate, hasTemplate } from "./templates.js";
import { hasOldTemplate, parseOldTemplate } from "./old-templates.js"; import { hasOldTemplate, parseOldTemplate } from "./old-templates.js";
import { getData, areaByName, areaDevices, deviceByName, deviceEntities }  from "./devices"; import { getData, areaByName, areaDevices, deviceByName, deviceEntities }  from "./devices";
@ -43,7 +43,7 @@ class CardTools {
static get popUp() { return popUp; } static get popUp() { return popUp; }
static get closePopUp() { return closePopUp; } static get closePopUp() { return closePopUp; }
static get hasTemplate() { return hasOldTemplate; } static get hasTemplate() { return (tpl) => hasTemplate(tpl) || hasOldTemplate(tpl); }
static parseTemplate(hass, str, specialData = {}) { static parseTemplate(hass, str, specialData = {}) {
if (typeof(hass) === "string") if (typeof(hass) === "string")
return parseOldTemplate(hass, str); return parseOldTemplate(hass, str);

View File

@ -19,6 +19,13 @@ export async function parseTemplate(hass, str, specialData = {}) {
return hass.callApi("POST", "template", {template: str}); return hass.callApi("POST", "template", {template: str});
}; };
export function hasTemplate(str) {
if(String(str).includes("{%"))
return true;
if(String(str).includes("{{"))
return true;
}
export function subscribeRenderTemplate(conn, onChange, params) { export function subscribeRenderTemplate(conn, onChange, params) {
// params = {template, entity_ids, variables} // params = {template, entity_ids, variables}
if(!conn) if(!conn)
@ -33,7 +40,13 @@ export function subscribeRenderTemplate(conn, onChange, params) {
let entity_ids = params.entity_ids; let entity_ids = params.entity_ids;
return conn.subscribeMessage( return conn.subscribeMessage(
(msg) => onChange(msg.result), (msg) => {
let res = msg.result;
// Localize "_(key)" if found in template results
const localize_function = /_\([^)]*\)/g;
res = res.replace(localize_function, (key) => hass().localize(key.substring(2, key.length-1)) || key);
onChange(res)
},
{ type: "render_template", { type: "render_template",
template, template,
variables, variables,