Skip to content

Commit 1ca9595

Browse files
committed
Refactor i18n init and simplify vision fallback
1 parent 1a89333 commit 1ca9595

File tree

13 files changed

+56
-134
lines changed

13 files changed

+56
-134
lines changed

pc_client/providers/vision_provider.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -682,10 +682,7 @@ async def _process_frame(self, task: TaskEnvelope) -> TaskResult:
682682
# Update metrics
683683
tasks_processed_total.labels(provider='VisionProvider', task_type='vision.frame', status='completed').inc()
684684

685-
if frame is None:
686-
fallback_image = Image.new("RGBA", (640, 360), (20, 20, 30, 255))
687-
else:
688-
fallback_image = frame
685+
fallback_image = frame or Image.new("RGBA", (640, 360), (20, 20, 30, 255))
689686
tracking_marker = self._calculate_tracking_marker(fallback_image, tracking_state, [], timestamp)
690687
self._update_tracker_snapshot(fallback_image, [], tracking_marker)
691688

web/assets/i18n-loader.js

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import { initI18n, applyDom, t } from '/web/assets/i18n.js';
2+
3+
function pickLang(value) {
4+
if (!value) return null;
5+
const lowered = value.toLowerCase();
6+
if (lowered.startsWith('en')) return 'en';
7+
if (lowered.startsWith('pl')) return 'pl';
8+
return null;
9+
}
10+
11+
export async function initI18nPage(options = {}) {
12+
const { titleKey, fallbackTitle, defaultLang = 'pl' } = options;
13+
const urlLang = new URLSearchParams(location.search).get('lang');
14+
const saved = localStorage.getItem('lang');
15+
const browser = (navigator.language || '').slice(0, 2).toLowerCase();
16+
const lang = pickLang(urlLang) || pickLang(saved) || pickLang(browser) || defaultLang;
17+
if (urlLang) localStorage.setItem('lang', lang);
18+
await initI18n(lang);
19+
applyDom();
20+
document.documentElement.setAttribute('lang', lang);
21+
if (titleKey) {
22+
document.title = t(titleKey) || fallbackTitle || document.title;
23+
} else if (fallbackTitle && !document.title) {
24+
document.title = fallbackTitle;
25+
}
26+
window.__i18n_t = t;
27+
return { lang, t };
28+
}

web/assistant.html

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -76,17 +76,13 @@ <h2 class="c-card__title" data-i18n="assistant.history_title">Historia komend</h
7676

7777
<!-- APP -->
7878
<script type="module">
79-
import { initI18n, applyDom, t } from '/web/assets/i18n.js';
79+
import { initI18nPage } from '/web/assets/i18n-loader.js';
8080

8181
// --- Inicjalizacja języka
82-
const urlLang = new URLSearchParams(location.search).get('lang');
83-
const saved = localStorage.getItem('lang');
84-
const browser = (navigator.language || '').slice(0,2).toLowerCase();
85-
const pick = (v)=> v && v.toLowerCase().startsWith('en') ? 'en' : (v && v.toLowerCase().startsWith('pl') ? 'pl' : null);
86-
const lang = pick(urlLang) || pick(saved) || pick(browser) || 'pl';
87-
if (urlLang) localStorage.setItem('lang', lang);
88-
await initI18n(lang);
89-
applyDom();
82+
const { lang, t } = await initI18nPage({
83+
titleKey: 'assistant.page_title',
84+
fallbackTitle: 'Rider-PC: Google Assistant',
85+
});
9086
function syncLangMeta(code){
9187
document.documentElement.setAttribute('lang', code);
9288
document.title = t('assistant.page_title') || 'Rider-PC: Google Assistant';

web/chat-pc.html

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -258,18 +258,8 @@ <h3 data-i18n="chat_pc.benchmark_results">Wyniki benchmarku</h3>
258258
<footer class="layout-footer" data-dashboard-footer-target></footer>
259259

260260
<script type="module">
261-
import { initI18n, applyDom, t } from '/web/assets/i18n.js';
262-
const urlLang = new URLSearchParams(location.search).get('lang');
263-
const saved = localStorage.getItem('lang');
264-
const browser = (navigator.language || '').slice(0,2).toLowerCase();
265-
const pick = (v)=> v && v.toLowerCase().startsWith('en') ? 'en' : (v && v.toLowerCase().startsWith('pl') ? 'pl' : null);
266-
const lang = pick(urlLang) || pick(saved) || pick(browser) || 'pl';
267-
if (urlLang) localStorage.setItem('lang', lang);
268-
await initI18n(lang);
269-
applyDom();
270-
document.documentElement.setAttribute('lang', lang);
271-
document.title = t('nav.chat_pc');
272-
window.__i18n_t = t;
261+
import { initI18nPage } from '/web/assets/i18n-loader.js';
262+
await initI18nPage({ titleKey: 'nav.chat_pc' });
273263
</script>
274264
<script>
275265
(function(){

web/chat.html

Lines changed: 4 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -75,20 +75,10 @@ <h2 id="providerTitle" data-i18n="voice.providers_title">Providerzy TTS</h2>
7575
<!-- Footer -->
7676
<footer class="layout-footer" data-dashboard-footer-target></footer>
7777

78-
<script type="module">
79-
import { initI18n, applyDom, t } from '/web/assets/i18n.js';
80-
const urlLang = new URLSearchParams(location.search).get('lang');
81-
const saved = localStorage.getItem('lang');
82-
const browser = (navigator.language || '').slice(0,2).toLowerCase();
83-
const pick = (v)=> v && v.toLowerCase().startsWith('en') ? 'en' : (v && v.toLowerCase().startsWith('pl') ? 'pl' : null);
84-
const lang = pick(urlLang) || pick(saved) || pick(browser) || 'pl';
85-
if (urlLang) localStorage.setItem('lang', lang);
86-
await initI18n(lang);
87-
applyDom();
88-
document.documentElement.setAttribute('lang', lang);
89-
document.title = t('nav.chat');
90-
window.__i18n_t = t;
91-
</script>
78+
<script type="module">
79+
import { initI18nPage } from '/web/assets/i18n-loader.js';
80+
await initI18nPage({ titleKey: 'nav.chat' });
81+
</script>
9282
<script>
9383
(function(){
9484
const board = document.getElementById('board');

web/control.html

Lines changed: 2 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -482,25 +482,13 @@ <h2 class="c-card__title" data-i18n="motion_queue.title">Kolejka ruchu</h2>
482482
<script type="module" src="/web/assets/menu.js"></script>
483483
<script type="module" src="/web/assets/footer.js"></script>
484484
<script type="module">
485-
import { initI18n, applyDom, t } from "/web/assets/i18n.js";
485+
import { initI18nPage } from "/web/assets/i18n-loader.js";
486486

487487
// legacy endpoint string kept for compatibility with tests/tools
488488
const LEGACY_TRACKING_ENDPOINT = "/api/vision/tracking/mode";
489489

490490
// --- i18n init ---
491-
const urlLang = new URLSearchParams(location.search).get("lang");
492-
const saved = localStorage.getItem("lang");
493-
const browser = (navigator.language || "").slice(0, 2).toLowerCase();
494-
const pick = (v) =>
495-
v && v.toLowerCase().startsWith("en")
496-
? "en"
497-
: v && v.toLowerCase().startsWith("pl")
498-
? "pl"
499-
: null;
500-
const lang = pick(urlLang) || pick(saved) || pick(browser) || "pl";
501-
if (urlLang) {
502-
localStorage.setItem("lang", lang);
503-
}
491+
const { t } = await initI18nPage({ titleKey: "meta.app_title" });
504492

505493
async function fetchControlState() {
506494
try {
@@ -569,11 +557,6 @@ <h2 class="c-card__title" data-i18n="motion_queue.title">Kolejka ruchu</h2>
569557
);
570558
}
571559
}
572-
await initI18n(lang);
573-
applyDom();
574-
document.documentElement.setAttribute("lang", lang);
575-
document.title = t("meta.app_title");
576-
577560
// ====== helpers ======
578561
const qs = (s) => document.querySelector(s);
579562
const logEl = qs("#log");

web/google_home.html

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -65,17 +65,10 @@ <h2 class="c-card__title" data-i18n="home.devices_title">Your Devices</h2>
6565

6666
<!-- APP (i18n + logika) -->
6767
<script type="module">
68-
import { initI18n, applyDom, t } from '/web/assets/i18n.js';
68+
import { initI18nPage } from '/web/assets/i18n-loader.js';
6969

7070
// --- Inicjalizacja języka
71-
const urlLang = new URLSearchParams(location.search).get('lang');
72-
const saved = localStorage.getItem('lang');
73-
const browser = (navigator.language || '').slice(0,2).toLowerCase();
74-
const pick = (v)=> v && v.toLowerCase().startsWith('en') ? 'en' : (v && v.toLowerCase().startsWith('pl') ? 'pl' : null);
75-
const lang = pick(urlLang) || pick(saved) || pick(browser) || 'pl';
76-
if (urlLang) localStorage.setItem('lang', lang);
77-
await initI18n(lang);
78-
applyDom();
71+
const { lang, t } = await initI18nPage({ titleKey: 'home.page_title' });
7972
function syncLangMeta(code){
8073
document.documentElement.setAttribute('lang', code);
8174
document.title = t('home.page_title');

web/mode.html

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -44,17 +44,8 @@ <h2 class="c-card__title" data-i18n="providers_ui.merged_title">Panel przeniesio
4444
<footer class="layout-footer" data-dashboard-footer-target></footer>
4545

4646
<script type="module">
47-
import { initI18n, applyDom, t } from '/web/assets/i18n.js';
48-
const urlLang = new URLSearchParams(location.search).get('lang');
49-
const saved = localStorage.getItem('lang');
50-
const browser = (navigator.language || '').slice(0,2).toLowerCase();
51-
const pick = (v)=> v && v.toLowerCase().startsWith('en') ? 'en' : (v && v.toLowerCase().startsWith('pl') ? 'pl' : null);
52-
const lang = pick(urlLang) || pick(saved) || pick(browser) || 'pl';
53-
if (urlLang) localStorage.setItem('lang', lang);
54-
await initI18n(lang);
55-
applyDom();
56-
document.documentElement.setAttribute('lang', lang);
57-
document.title = t('ai_mode.title');
47+
import { initI18nPage } from '/web/assets/i18n-loader.js';
48+
await initI18nPage({ titleKey: 'ai_mode.title' });
5849
</script>
5950
<script type="module" src="/web/assets/menu.js"></script>
6051
<script type="module" src="/web/assets/footer.js"></script>

web/models.html

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -217,18 +217,8 @@ <h3 class="engine-title u-mb-0">🤖 Silnik Rider-Pi (Health)</h3>
217217
<footer class="layout-footer" data-dashboard-footer-target></footer>
218218

219219
<script type="module">
220-
import { initI18n, applyDom, t } from '/web/assets/i18n.js';
221-
const urlLang = new URLSearchParams(location.search).get('lang');
222-
const saved = localStorage.getItem('lang');
223-
const browser = (navigator.language || '').slice(0,2).toLowerCase();
224-
const pick = (v)=> v && v.toLowerCase().startsWith('en') ? 'en' : (v && v.toLowerCase().startsWith('pl') ? 'pl' : null);
225-
const lang = pick(urlLang) || pick(saved) || pick(browser) || 'pl';
226-
if (urlLang) localStorage.setItem('lang', lang);
227-
await initI18n(lang);
228-
applyDom();
229-
document.documentElement.setAttribute('lang', lang);
230-
document.title = t('models.subtitle');
231-
window.__i18n_t = t;
220+
import { initI18nPage } from '/web/assets/i18n-loader.js';
221+
await initI18nPage({ titleKey: 'models.subtitle' });
232222
</script>
233223
<script>
234224
// --- 1. ZARZĄDZANIE STANEM APLIKACJI ---

web/navigation.html

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -82,19 +82,8 @@ <h1 class="page-title"><span class="brand-accent">Rider-PC</span>: <span class="
8282
<footer class="layout-footer" data-dashboard-footer-target></footer>
8383

8484
<script type="module">
85-
import { initI18n, applyDom, t } from '/web/assets/i18n.js';
86-
87-
const urlLang = new URLSearchParams(location.search).get('lang');
88-
const saved = localStorage.getItem('lang');
89-
const browser = (navigator.language || '').slice(0,2).toLowerCase();
90-
const pick = (v)=> v && v.toLowerCase().startsWith('en') ? 'en' : (v && v.toLowerCase().startsWith('pl') ? 'pl' : null);
91-
const lang = pick(urlLang) || pick(saved) || pick(browser) || 'pl';
92-
if (urlLang) localStorage.setItem('lang', lang);
93-
await initI18n(lang);
94-
applyDom();
95-
document.documentElement.setAttribute('lang', lang);
96-
document.title = t('navigation.page_title');
97-
window.__i18n_t = t;
85+
import { initI18nPage } from '/web/assets/i18n-loader.js';
86+
await initI18nPage({ titleKey: 'navigation.page_title' });
9887
</script>
9988
<script>
10089
const canvas = document.getElementById('mapCanvas');

0 commit comments

Comments
 (0)