Completa i18n IT/EN/FR/DE/ES su sito pubblico, area autenticata e admin.

Tutte le view marketing, legali, viewer, dashboard e admin usano t(); mailer utente-facing e flash localizzati; admin con LocaleResolver e selettore lingua.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-07-24 00:38:50 +02:00
co-authored by Cursor
parent fb7068f86c
commit b88f44ab1c
158 changed files with 9444 additions and 1536 deletions
@@ -22,4 +22,4 @@
<button type="button" class="regia-btn regia-btn--minus" data-action="away_undo" style="width:100%;margin-top:4px"></button>
</div>
</div>
<button type="button" class="regia-btn regia-btn--yellow" data-action="advance_period" style="margin-top:12px">Prossimo quarto</button>
<button type="button" class="regia-btn regia-btn--yellow" data-action="advance_period" style="margin-top:12px"><%= t("regia.board.next_period") %></button>
@@ -1,4 +1,4 @@
<p class="regia-sets" id="sets-line">Punteggio libero</p>
<p class="regia-sets" id="sets-line"><%= t("regia.board.generic_score") %></p>
<p class="regia-score-line" id="score-line"><%= live_score_points_label(@match, @score) %></p>
<p class="regia-partials" id="partials-line" hidden></p>
@@ -18,4 +18,4 @@
<button type="button" class="regia-btn regia-btn--minus" data-action="away_undo" style="width:100%;margin-top:6px"></button>
</div>
</div>
<button type="button" class="regia-btn regia-btn--yellow" data-action="advance_period" style="margin-top:12px">Prossimo tempo</button>
<button type="button" class="regia-btn regia-btn--yellow" data-action="advance_period" style="margin-top:12px"><%= t("regia.board.next_half") %></button>
@@ -1,10 +1,10 @@
<% data = @score.data || {} %>
<p class="regia-sets" id="sets-line">Cronometro</p>
<p class="regia-sets" id="sets-line"><%= t("regia.board.stopwatch") %></p>
<p class="regia-score-line" id="score-line" hidden></p>
<p class="regia-partials" id="partials-line" hidden></p>
<p class="regia-clock-line" id="clock-line"><%= format_clock_secs(data["clock_secs"], count_up: true) %></p>
<div class="regia-clock-actions" style="margin-top:16px">
<button type="button" class="regia-btn regia-btn--outline" data-action="clock_toggle"><%= data["clock_running"] ? "Pausa" : "Avvia" %></button>
<button type="button" class="regia-btn regia-btn--outline" data-action="clock_reset">Reset</button>
<button type="button" class="regia-btn regia-btn--outline" data-action="clock_toggle"><%= data["clock_running"] ? t("regia.board.pause") : t("regia.board.start") %></button>
<button type="button" class="regia-btn regia-btn--outline" data-action="clock_reset"><%= t("regia.board.reset") %></button>
</div>
@@ -1,7 +1,7 @@
<p class="regia-sets" id="sets-line"><%= live_score_sets_label(@score) || "—" %></p>
<p class="regia-score-line" id="score-line"><%= live_score_points_label(@match, @score) %></p>
<p class="regia-partials" id="partials-line"<%= " hidden" unless live_score_partials_label(@score).present? %>>
Parziali: <%= live_score_partials_label(@score) %>
<%= t("regia.board.partials_prefix") %> <%= live_score_partials_label(@score) %>
</p>
<div class="regia-team-row">
@@ -12,7 +12,7 @@
<button type="button" class="regia-btn regia-btn--minus" data-action="home_undo" style="width:100%;margin-top:6px"></button>
</div>
<div class="regia-center-hint" id="center-hint">
<%= Scoring::Rules.from_match(@match).points_target(@score.current_set) %> pt
<%= Scoring::Rules.from_match(@match).points_target(@score.current_set) %> <%= t("regia.board.points_suffix") %>
</div>
<div>
<div class="regia-team-name"><%= @match.opponent_name %></div>
@@ -21,4 +21,4 @@
<button type="button" class="regia-btn regia-btn--minus" data-action="away_undo" style="width:100%;margin-top:6px"></button>
</div>
</div>
<button type="button" class="regia-btn regia-btn--yellow" data-action="close_set" style="margin-top:12px">Chiudi set</button>
<button type="button" class="regia-btn regia-btn--yellow" data-action="close_set" style="margin-top:12px"><%= t("regia.board.close_set") %></button>
+16 -15
View File
@@ -1,4 +1,4 @@
<% content_for :title, "Regia#{@team.name} vs #{@match.opponent_name}" %>
<% content_for :title, t("regia.title", home: @team.name, away: @match.opponent_name) %>
<% content_for :robots, "noindex, nofollow" %>
<% content_for :head do %>
@@ -8,6 +8,7 @@
<% end %>
<div class="regia-page" id="regia-app"
data-i18n="<%= j regia_js_i18n_json %>"
data-token="<%= j params[:token] %>"
data-board="<%= @match.effective_board_type %>"
data-status-url="<%= j public_regia_status_path(params[:token]) %>"
@@ -29,34 +30,34 @@
<header class="regia-header">
<h1><%= @team.name %> vs <%= @match.opponent_name %></h1>
<p id="regia-subtitle">Regia · <%= regia_header_subtitle(@match, @score) %></p>
<p id="regia-subtitle"><%= t("regia.subtitle_prefix") %> <%= regia_header_subtitle(@match, @score) %></p>
<span id="regia-badge" class="regia-badge <%= @stream_closed ? 'regia-badge--ended' : (@session.paused? ? 'regia-badge--wait' : (@on_air ? 'regia-badge--live' : 'regia-badge--wait')) %>">
<%= @stream_closed ? "Terminata" : (@session.paused? ? "In pausa" : (@on_air ? "In onda" : "In attesa")) %>
<%= @stream_closed ? t("regia.status.ended") : (@session.paused? ? t("regia.status.paused") : (@on_air ? t("regia.status.live") : t("regia.status.waiting"))) %>
</span>
</header>
<% if @live_share_url.present? %>
<div class="regia-share-group">
<p class="regia-share-label">Link diretta (spettatori)</p>
<p class="regia-share-label"><%= t("regia.live_share_label") %></p>
<div class="regia-share">
<button type="button" class="regia-btn regia-btn--outline" id="btn-share-live" style="margin:0">
Condividi diretta
<%= t("regia.share_live") %>
</button>
<button type="button" class="regia-btn regia-btn--outline" id="btn-copy-live" style="margin:0">
Copia link
<%= t("regia.copy_link") %>
</button>
</div>
</div>
<% end %>
<div class="regia-share-group">
<p class="regia-share-label">Link regia (punteggio)</p>
<p class="regia-share-label"><%= t("regia.regia_share_label") %></p>
<div class="regia-share">
<button type="button" class="regia-btn regia-btn--outline" id="btn-share-regia" style="margin:0">
Condividi link regia
<%= t("regia.share_regia") %>
</button>
<button type="button" class="regia-btn regia-btn--outline" id="btn-copy-regia" style="margin:0">
Copia link
<%= t("regia.copy_link") %>
</button>
</div>
</div>
@@ -66,7 +67,7 @@
<video id="regia-preview" playsinline muted autoplay></video>
<% end %>
<div id="regia-preview-placeholder" class="regia-preview__placeholder">
<%= @stream_closed ? "Diretta terminata" : "Anteprima in attesa del segnale…" %>
<%= @stream_closed ? t("regia.preview_ended") : t("regia.preview_waiting") %>
</div>
</div>
@@ -75,8 +76,8 @@
</section>
<% unless @stream_closed %>
<button type="button" class="regia-btn regia-btn--outline" id="btn-pause"><%= @session.paused? ? "Riprendi diretta" : "Metti in pausa" %></button>
<button type="button" class="regia-btn regia-btn--danger" id="btn-stop">Chiudi diretta</button>
<button type="button" class="regia-btn regia-btn--outline" id="btn-pause"><%= @session.paused? ? t("regia.resume") : t("regia.pause") %></button>
<button type="button" class="regia-btn regia-btn--danger" id="btn-stop"><%= t("regia.stop") %></button>
<% end %>
</div>
@@ -84,11 +85,11 @@
<div id="regia-modal" class="regia-modal" aria-hidden="true">
<div class="regia-modal__card">
<h2 id="modal-title">Set vinto</h2>
<h2 id="modal-title"><%= t("regia.modal.set_won_title") %></h2>
<p id="modal-body"></p>
<div class="regia-modal__actions">
<button type="button" class="regia-btn regia-btn--yellow" id="modal-confirm">Chiudi set</button>
<button type="button" class="regia-btn regia-btn--outline" id="modal-cancel">Annulla</button>
<button type="button" class="regia-btn regia-btn--yellow" id="modal-confirm"><%= t("regia.modal.confirm") %></button>
<button type="button" class="regia-btn regia-btn--outline" id="modal-cancel"><%= t("regia.modal.cancel") %></button>
</div>
</div>
</div>