Draw the mockup with the screens' own words, compile every text while building, and send the language with the live updates

- The page takes the screens' words its mockup draws from their own texts: screen.ha (Home Assistant's words, filled
  from Home Assistant), screen.time, screen.date, screen.number and screen.tile.page, per language next to _meta and
  editor. The copies under editor.mockup go; the rest of `screen` and all of `addon` stay out of the build.
- Numbers in the mockup follow the screens' language (screen.number, with its minimum grouping) or the chosen style,
  as the firmware writes them.
- @intlify/unplugin-vue-i18n compiles every text at build time, so the page runs vue-i18n's runtime-only build
  without the message compiler; every language's _meta comes with the page. Empty texts stay out while building.
- The live updates carry the editor's language (api/events?language=), as an EventSource sends no headers.
- web/ needs Node 22.13 or newer: vue-i18n 11.4, Vite 7 and the unplugin ask for it.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Max Gramser
2026-09-19 14:59:02 +02:00
parent 1dc2eab0cf
commit 94b320074d
34 changed files with 2491 additions and 292 deletions
File diff suppressed because one or more lines are too long
@@ -1 +0,0 @@
const e={name:"Deutsch",english:"German",script:"latin",plural:"one_other",clock:"24",checked:!1},t={},c={_meta:e,editor:t};export{e as _meta,c as default,t as editor};
@@ -1 +0,0 @@
const e={name:"English (UK)",english:"English (UK)",script:"latin",plural:"one_other",clock:"24",checked:!0},n={_meta:e};export{e as _meta,n as default};
File diff suppressed because one or more lines are too long
@@ -1 +0,0 @@
const e={name:"Español",english:"Spanish",script:"latin",plural:"one_other",clock:"24",checked:!1},s={},t={_meta:e,editor:s};export{e as _meta,t as default,s as editor};
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1 +0,0 @@
const e={name:"Français",english:"French",script:"latin",plural:"one_upto_1",clock:"24",checked:!1},t={},a={_meta:e,editor:t};export{e as _meta,a as default,t as editor};
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1 +0,0 @@
const t={name:"Italiano",english:"Italian",script:"latin",plural:"one_other",clock:"24",checked:!1},a={},e={_meta:t,editor:a};export{t as _meta,e as default,a as editor};
File diff suppressed because one or more lines are too long
@@ -1 +0,0 @@
const e={name:"Nederlands",english:"Dutch",script:"latin",plural:"one_other",clock:"24",checked:!1},t={},c={_meta:e,editor:t};export{e as _meta,c as default,t as editor};
File diff suppressed because one or more lines are too long
@@ -1 +0,0 @@
const l={name:"Polski",english:"Polish",script:"latin",plural:"slavic_pl",clock:"24",checked:!1},s={},c={_meta:l,editor:s};export{l as _meta,c as default,s as editor};
File diff suppressed because one or more lines are too long
@@ -1 +0,0 @@
const t={name:"Português",english:"Portuguese",script:"latin",plural:"one_upto_1",clock:"24",checked:!1},e={},o={_meta:t,editor:e};export{t as _meta,o as default,e as editor};
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -5,7 +5,7 @@
<meta name="viewport" content="width=device-width,initial-scale=1" />
<meta name="color-scheme" content="light dark" />
<title>ESP Screens</title>
<script type="module" crossorigin src="./assets/index-CUv9rdNM.js"></script>
<script type="module" crossorigin src="./assets/index-Ci37AxLI.js"></script>
<link rel="stylesheet" crossorigin href="./assets/index-C6Sfd-UM.css">
</head>
<body>