v0.247.0: i18n spike — the dashboard can speak English, Hungarian byte-identical
gates / gates (push) Successful in 19s
gates / gates (push) Successful in 19s
Message bundles (internal/i18n) expanded into templates before parsing, one template set per language. Launcher, /backups, /apps/<slug> and the layout converted; household language setting, POST /settings/language, ?lang= override, report field. Parity test against fixtures captured from unconverted templates; copy gates read templates expanded; new i18n_missing_gate. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0159rPz1ZhFKsS53msqPYxtS
This commit is contained in:
@@ -10,9 +10,9 @@
|
||||
{{template "layout_start" .}}
|
||||
|
||||
<div class="page-header">
|
||||
<h2>Indítópult</h2>
|
||||
<h2>{{T "launcher.inditopult"}}</h2>
|
||||
<span class="domain-badge">{{.Domain}}</span>
|
||||
<button type="button" class="btn btn-outline share-open-btn" onclick="openShareModal()"><svg class="ico"><use href="#i-share"/></svg>Indítópult megosztása</button>
|
||||
<button type="button" class="btn btn-outline share-open-btn" onclick="openShareModal()"><svg class="ico"><use href="#i-share"/></svg>{{T "launcher.inditopult_megosztasa"}}</button>
|
||||
</div>
|
||||
|
||||
{{if .ShareFlash}}
|
||||
@@ -44,44 +44,44 @@
|
||||
</div>
|
||||
{{else}}
|
||||
<div class="empty-state">
|
||||
<p>Még nincs telepített alkalmazás.</p>
|
||||
<p><a href="/stacks" class="empty-state-link">Alkalmazások telepítése</a></p>
|
||||
<p>{{T "launcher.meg_nincs_telepitett_alkalmazas"}}</p>
|
||||
<p><a href="/stacks" class="empty-state-link">{{T "launcher.alkalmazasok_telepitese"}}</a></p>
|
||||
</div>
|
||||
{{end}}
|
||||
|
||||
<div class="modal-overlay" id="share-modal" style="display:none">
|
||||
<div class="modal-card">
|
||||
<h3>Indítópult megosztása</h3>
|
||||
<p class="share-lede">Egy megosztható link, amely csak megmutatja az alkalmazásokat és új lapon megnyitja őket. Fiók nélkül, felügyeleti hozzáférés nélkül — minden alkalmazás a saját bejelentkezése mögött marad.</p>
|
||||
<h3>{{T "launcher.inditopult_megosztasa"}}</h3>
|
||||
<p class="share-lede">{{T "launcher.egy_megoszthato_link_amely_csak"}}</p>
|
||||
{{if .ShareEnabled}}
|
||||
<div class="share-field">
|
||||
<label class="share-label">Megosztási link</label>
|
||||
<label class="share-label">{{T "launcher.megosztasi_link"}}</label>
|
||||
<div class="share-link-row">
|
||||
<input id="share-link-input" type="text" readonly value="{{.ShareURL}}">
|
||||
<button type="button" id="share-copy-btn" class="btn btn-outline" onclick="copyShareLink()">Link másolása</button>
|
||||
<button type="button" id="share-native-btn" class="btn btn-outline" style="display:none" onclick="nativeShare()">Megosztás…</button>
|
||||
<button type="button" id="share-copy-btn" class="btn btn-outline" onclick="copyShareLink()">{{T "launcher.link_masolasa"}}</button>
|
||||
<button type="button" id="share-native-btn" class="btn btn-outline" style="display:none" onclick="nativeShare()">{{T "launcher.megosztas"}}</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="share-qr">
|
||||
<img src="/launcher/share/qr.png" alt="QR-kód a megosztási linkhez" width="200" height="200">
|
||||
<span class="share-qr-hint">Olvassa be telefonnal a gyors megnyitáshoz.</span>
|
||||
<img src="/launcher/share/qr.png" alt="{{T "launcher.qr_kod_a_megosztasi_linkhez"}}" width="200" height="200">
|
||||
<span class="share-qr-hint">{{T "launcher.olvassa_be_telefonnal_a_gyors"}}</span>
|
||||
</div>
|
||||
<div class="share-field">
|
||||
{{if .SharePasswordSet}}
|
||||
<label class="share-label">Jelszó</label>
|
||||
<p class="share-note">A megosztás jelszóval védett.</p>
|
||||
<label class="share-label">{{T "launcher.jelszo"}}</label>
|
||||
<p class="share-note">{{T "launcher.a_megosztas_jelszoval_vedett"}}</p>
|
||||
<form method="POST" action="/launcher/share/password">
|
||||
{{.CSRFField}}
|
||||
<input type="hidden" name="action" value="clear">
|
||||
<button type="submit" class="btn btn-outline">Jelszó törlése</button>
|
||||
<button type="submit" class="btn btn-outline">{{T "launcher.jelszo_torlese"}}</button>
|
||||
</form>
|
||||
{{else}}
|
||||
<form method="POST" action="/launcher/share/password">
|
||||
{{.CSRFField}}
|
||||
<label class="share-label">Jelszó (nem kötelező)</label>
|
||||
<label class="share-label">{{T "launcher.jelszo_nem_kotelezo"}}</label>
|
||||
<div class="share-link-row">
|
||||
<input type="password" name="password" autocomplete="new-password" placeholder="Legalább 8 karakter">
|
||||
<button type="submit" class="btn btn-outline">Jelszó beállítása</button>
|
||||
<input type="password" name="password" autocomplete="new-password" placeholder="{{T "launcher.legalabb_8_karakter"}}">
|
||||
<button type="submit" class="btn btn-outline">{{T "launcher.jelszo_beallitasa"}}</button>
|
||||
</div>
|
||||
</form>
|
||||
{{end}}
|
||||
@@ -89,26 +89,26 @@
|
||||
<div class="share-actions">
|
||||
<form method="POST" action="/launcher/share/rotate">
|
||||
{{.CSRFField}}
|
||||
<button type="submit" class="btn btn-outline" data-confirm="Új link készítése? A régi link és minden korábbi belépés érvénytelenné válik.">Új link készítése</button>
|
||||
<button type="submit" class="btn btn-outline" data-confirm="{{T "launcher.uj_link_keszitese_a_regi"}}">{{T "launcher.uj_link_keszitese"}}</button>
|
||||
</form>
|
||||
<form method="POST" action="/launcher/share/disable">
|
||||
{{.CSRFField}}
|
||||
<button type="submit" class="btn btn-danger" data-confirm="Biztosan kikapcsolja a megosztást? A link azonnal érvénytelenné válik.">Megosztás kikapcsolása</button>
|
||||
<button type="submit" class="btn btn-danger" data-confirm="{{T "launcher.biztosan_kikapcsolja_a_megosztast_a"}}">{{T "launcher.megosztas_kikapcsolasa"}}</button>
|
||||
</form>
|
||||
</div>
|
||||
{{else}}
|
||||
<p class="share-note">A megosztás jelenleg ki van kapcsolva.</p>
|
||||
<p class="share-note">{{T "launcher.a_megosztas_jelenleg_ki_van"}}</p>
|
||||
<form method="POST" action="/launcher/share/enable">
|
||||
{{.CSRFField}}
|
||||
<div class="modal-actions">
|
||||
<button type="button" class="btn btn-outline" onclick="closeShareModal()">Bezárás</button>
|
||||
<button type="submit" class="btn btn-primary">Megosztás bekapcsolása</button>
|
||||
<button type="button" class="btn btn-outline" onclick="closeShareModal()">{{T "launcher.bezaras"}}</button>
|
||||
<button type="submit" class="btn btn-primary">{{T "launcher.megosztas_bekapcsolasa"}}</button>
|
||||
</div>
|
||||
</form>
|
||||
{{end}}
|
||||
{{if .ShareEnabled}}
|
||||
<div class="modal-actions">
|
||||
<button type="button" class="btn btn-outline" onclick="closeShareModal()">Bezárás</button>
|
||||
<button type="button" class="btn btn-outline" onclick="closeShareModal()">{{T "launcher.bezaras"}}</button>
|
||||
</div>
|
||||
{{end}}
|
||||
</div>
|
||||
@@ -121,7 +121,7 @@ function copyShareLink(){
|
||||
var inp=document.getElementById('share-link-input');
|
||||
var btn=document.getElementById('share-copy-btn');
|
||||
if(!inp)return;
|
||||
function done(){if(btn){var o=btn.textContent;btn.textContent='Másolva';setTimeout(function(){btn.textContent=o;},1500);}}
|
||||
function done(){if(btn){var o=btn.textContent;btn.textContent='{{T "launcher.masolva"}}';setTimeout(function(){btn.textContent=o;},1500);}}
|
||||
if(navigator.clipboard&&navigator.clipboard.writeText){navigator.clipboard.writeText(inp.value).then(done,function(){inp.select();done();});}
|
||||
else{inp.select();try{document.execCommand('copy');}catch(e){}done();}
|
||||
}
|
||||
@@ -131,7 +131,7 @@ function copyShareLink(){
|
||||
function nativeShare(){
|
||||
var inp=document.getElementById('share-link-input');
|
||||
if(!inp||!navigator.share)return;
|
||||
navigator.share({title:'Indítópult — {{.Domain}}',text:'Az otthoni alkalmazások egy helyen.',url:inp.value})
|
||||
navigator.share({title:'{{T "launcher.inditopult_2"}}',text:'{{T "launcher.az_otthoni_alkalmazasok_egy_helyen"}}',url:inp.value})
|
||||
.catch(function(e){if(e&&e.name==='AbortError')return;copyShareLink();});
|
||||
}
|
||||
(function(){
|
||||
|
||||
Reference in New Issue
Block a user