Merge pull request #2695 from Alexandr0856/feature/ukrainian-localization

Add Ukrainian localization
This commit is contained in:
MartinNYHC
2026-07-28 15:27:41 +02:00
committed by GitHub
6 changed files with 6988 additions and 5 deletions
+1 -1
View File
@@ -183,7 +183,7 @@ Optional but recommended — drop the [`slicer-api/` Compose stack](slicer-api/R
- Configurable drying presets per filament type (temperature & duration for AMS 2 Pro and AMS-HT)
- **Per-filament humidity threshold** — Set a different humidity trigger per filament type (e.g. Nylon at 20%, PLA at 60%, ASA at 30%) instead of one global value. Mixed-material AMS units use the most-restrictive threshold across the loaded spools so a single PLA + Nylon unit triggers at Nylon's level. Drives both the auto-drying scheduler and the hourly humidity alarm so the two can never disagree on whether a unit is "too humid"
- Dual external spool support for H2D (Ext-L / Ext-R)
- **HMS error monitoring with one-click actions** — Live HMS error log with history and the same Resume / Stop / Continue / Retry / Check Assistant / Don't Remind Me action buttons BambuStudio shows. Click and the matching MQTT command goes back to the printer — no more walking to the device just to dismiss a paused-print dialog. Catalog covers every Bambu model (X1 / P1 / A1 / H2 series); buttons are translated in all 11 supported locales
- **HMS error monitoring with one-click actions** — Live HMS error log with history and the same Resume / Stop / Continue / Retry / Check Assistant / Don't Remind Me action buttons BambuStudio shows. Click and the matching MQTT command goes back to the printer — no more walking to the device just to dismiss a paused-print dialog. Catalog covers every Bambu model (X1 / P1 / A1 / H2 series); buttons are translated in all 13 supported locales
- **Heater history charts** — Bambuddy logs nozzle, bed, and chamber readings every minute and surfaces them via a tiny chart icon on each heater tile in the printer card. Click for a per-heater modal with current / average / min / max stats, target overlay, and a 6h / 24h / 48h / 7d time range — works on read-only chamber sensors (X1C / P2S) too. AMS humidity and temperature get the same treatment (already shipped).
- Print success rates & trends
- Filament usage tracking
+15
View File
@@ -397,6 +397,20 @@ const RU_COGNATES = [
'(25%, 50%, 75%)',
];
// Ukrainian keeps only Latin brand names and placeholder/punctuation-only
// formats verbatim; every prose string in uk.ts is translated.
const UK_COGNATES = [
'MakerWorld: {{designer}}', // brand + placeholder
'{{printer}}: {{error}}', // pure placeholders
'Bambu Cloud', 'Orca Cloud', // brand names — same in every locale
'Sport (124%)', 'Ludicrous (166%)', // official Bambu speed-mode names
'email', // OIDC claim name placeholder
'{{name}} — {{stage}} ({{percent}}%) — {{elapsed}}',
'EC984C,#6CD4BC,A66EB9,D87694',
'({{count}}/8)',
'(25%, 50%, 75%)',
];
const IDENTICAL_TO_EN_ALLOWED = {
de: new Set(DE_COGNATES),
fr: new Set(FR_COGNATES),
@@ -409,6 +423,7 @@ const IDENTICAL_TO_EN_ALLOWED = {
'zh-TW': new Set(ZH_TW_COGNATES),
tr: new Set(TR_COGNATES),
ru: new Set(RU_COGNATES),
uk: new Set(UK_COGNATES),
};
// Pure comparison logic, exported so tests can verify each failure mode
+4 -1
View File
@@ -14,6 +14,7 @@ import ptBR from './locales/pt-BR';
import zhCN from './locales/zh-CN';
import zhTW from './locales/zh-TW';
import tr from './locales/tr';
import uk from './locales/uk';
import ru from './locales/ru';
const resources = {
@@ -28,10 +29,11 @@ const resources = {
'zh-CN': { translation: zhCN },
'zh-TW': { translation: zhTW },
tr: { translation: tr },
uk: { translation: uk },
ru: { translation: ru },
};
const SUPPORTED_LNGS = ['en', 'de', 'es', 'fr', 'ja', 'it', 'ko', 'pt-BR', 'ru', 'tr', 'zh-CN', 'zh-TW'];
const SUPPORTED_LNGS = ['en', 'de', 'es', 'fr', 'ja', 'it', 'ko', 'pt-BR', 'ru', 'tr', 'uk', 'zh-CN', 'zh-TW'];
const APPLIANCE_CONSUMED_KEY = 'bambuddy_appliance_locale_consumed';
i18n
@@ -109,5 +111,6 @@ export const availableLanguages = [
{ code: 'zh-CN', name: 'Chinese (Simplified)', nativeName: '简体中文' },
{ code: 'zh-TW', name: 'Chinese (Traditional)', nativeName: '繁體中文' },
{ code: 'tr', name: 'Turkish', nativeName: 'Türkçe' },
{ code: 'uk', name: 'Ukrainian', nativeName: 'Українська' },
{ code: 'ru', name: 'Russian', nativeName: 'Русский' },
];
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -26,7 +26,7 @@
<!-- Splash screens for iOS -->
<link rel="apple-touch-startup-image" href="/img/android-chrome-512x512.png" />
<script type="module" crossorigin src="/assets/index-D5mCVall.js"></script>
<script type="module" crossorigin src="/assets/index-B4oB3n1m.js"></script>
<link rel="stylesheet" crossorigin href="/assets/index-D4bpNaiw.css">
</head>
<body>