Add Slovenian (sl) language support

New translation for Slovenian language, bringing total to 15 supported languages.
This commit is contained in:
SuperKali
2025-12-14 10:10:01 +01:00
parent 3404016fc1
commit db3fa29541
3 changed files with 120 additions and 4 deletions

View File

@@ -58,7 +58,7 @@ Inspired by the simplicity of [Raspberry Pi Imager](https://github.com/raspberry
| **Verified Writes** | SHA256 read-back verification ensures your flash is perfect |
| **Custom Images** | Use your own `.img`, `.img.xz`, `.img.gz`, `.img.bz2`, `.img.zst` files |
| **Touch ID** | Authenticate with biometrics on macOS |
| **14 Languages** | Auto-detects system language (EN, IT, DE, FR, ES, PT, NL, PL, RU, ZH, JA, KO, UK, TR) |
| **15 Languages** | Auto-detects system language (EN, IT, DE, FR, ES, PT, NL, PL, RU, ZH, JA, KO, UK, TR, SL) |
| **Light/Dark Mode** | Follows your system preference |
| **Device Hot-Swap** | Automatically detects when devices are connected/disconnected |
| **Log Upload** | One-click error log upload to paste.armbian.com with QR code |
@@ -113,7 +113,7 @@ Built with modern technologies for optimal performance:
| **Framework** | Tauri 2 | Native performance, tiny bundle |
| **Backend** | Rust | Memory-safe, blazing fast I/O |
| **Async** | Tokio | Efficient concurrent operations |
| **i18n** | i18next + react-i18next | 14 language translations |
| **i18n** | i18next + react-i18next | 15 language translations |
| **Icons** | Lucide React | Modern, consistent icon set |
### Why Tauri over Electron?
@@ -149,6 +149,7 @@ The app automatically detects your system language:
| Spanish | `es` | Ukrainian | `uk` |
| Portuguese | `pt` | Turkish | `tr` |
| Dutch | `nl` | Polish | `pl` |
| Slovenian | `sl` | | |
## Development
@@ -217,7 +218,7 @@ armbian-imager/
│ │ └── shared/ # Shared components (ErrorDisplay)
│ ├── hooks/ # React Hooks (useTauri, useAsyncData, useDeviceMonitor)
│ ├── config/ # Configuration (manufacturers, badges, OS info)
│ ├── locales/ # i18n translations (14 languages)
│ ├── locales/ # i18n translations (15 languages)
│ ├── styles/ # Modular CSS
│ ├── types/ # TypeScript interfaces
│ ├── assets/ # Images, logos, OS icons

View File

@@ -16,6 +16,7 @@ import ja from './locales/ja.json';
import ko from './locales/ko.json';
import uk from './locales/uk.json';
import tr from './locales/tr.json';
import sl from './locales/sl.json';
const resources = {
en: { translation: en },
@@ -32,10 +33,11 @@ const resources = {
ko: { translation: ko },
uk: { translation: uk },
tr: { translation: tr },
sl: { translation: sl },
};
// Supported languages
const supportedLanguages = ['en', 'it', 'de', 'fr', 'es', 'pt', 'nl', 'pl', 'ru', 'zh', 'ja', 'ko', 'uk', 'tr'];
const supportedLanguages = ['en', 'it', 'de', 'fr', 'es', 'pt', 'nl', 'pl', 'ru', 'zh', 'ja', 'ko', 'uk', 'tr', 'sl'];
/**
* Extract language code from locale string

113
src/locales/sl.json Normal file
View File

@@ -0,0 +1,113 @@
{
"home": {
"manufacturer": "Proizvajalec",
"board": "Plošča",
"operatingSystem": "Operacijski sistem",
"storage": "Shramba",
"chooseBrand": "IZBERI ZNAMKO",
"chooseBoard": "IZBERI PLOŠČO",
"chooseOs": "IZBERI OS",
"chooseStorage": "IZBERI SHRAMBO",
"useCustomImage": "Uporabi sliko po meri",
"changeCustomImage": "Spremeni sliko po meri",
"images": "slike",
"boards": "plošče"
},
"flash": {
"downloading": "Prenašanje slike...",
"decompressing": "Razširjanje slike...",
"writing": "Zapisovanje slike na napravo...",
"verifying": "Preverjanje zapisanih podatkov...",
"complete": "Zapisovanje končano!",
"failed": "Prišlo je do napake",
"cancelled": "Preklicano",
"cancel": "Prekliči",
"retry": "Poskusi znova",
"back": "Nazaj",
"done": "Končano",
"flashAnother": "Zapiši drugo",
"authorizing": "Zahteva za avtorizacijo...",
"authorizingDesc": "Za nadaljevanje potrdite zahtevo za avtorizacijo.",
"preparing": "Priprava...",
"confirmTitle": "Potrdi izbiro",
"confirmText": "Zapisali boste na:",
"confirmWarning": "VSI PODATKI BODO TRAJNO IZBRISANI",
"eraseAndFlash": "Izbriši in zapiši",
"dataWarning": "Vsi podatki na izbrani napravi bodo izbrisani",
"successHint": "Vaša SD kartica je pripravljena! Napravo lahko varno odstranite in jo vstavite v {{boardName}}."
},
"modal": {
"selectManufacturer": "Izberi proizvajalca",
"selectBoard": "Izberi ploščo",
"selectImage": "Izberi operacijski sistem",
"selectDevice": "Izberi napravo za shranjevanje",
"searchManufacturer": "Išči proizvajalca...",
"searchBoard": "Išči plošče...",
"searchImage": "Išči slike...",
"close": "Zapri",
"noResults": "Ni rezultatov",
"noManufacturers": "Proizvajalcev ni mogoče najti",
"noBoards": "Plošč ni mogoče najti",
"noImages": "Slik ni mogoče najti",
"noDevices": "Naprav ni mogoče najti",
"loading": "Nalaganje...",
"error": "Napaka pri nalaganju podatkov",
"retry": "Poskusi znova",
"promoted": "Priporočeno",
"stable": "Stabilna",
"nightly": "Nightly",
"apps": "Aplikacije",
"minimal": "Minimalna",
"allImages": "Vse slike",
"scanningDevices": "Iskanje naprav...",
"insertDevice": "Vstavite SD kartico ali USB pogon",
"refreshDevices": "Osveži naprave"
},
"device": {
"removable": "Izmenljiva",
"system": "Sistemska",
"sdCard": "SD kartica",
"usb": "USB",
"sata": "SATA",
"sas": "SAS",
"nvme": "NVMe",
"noDevices": "Izmenljivih naprav ni mogoče najti",
"refreshing": "Osveževanje...",
"refresh": "Osveži"
},
"header": {
"title": "Armbian Imager",
"stepManufacturer": "Proizvajalec",
"stepBoard": "Plošča",
"stepOs": "OS",
"stepStorage": "Shramba",
"stepImage": "Slika"
},
"errorDisplay": {
"retry": "Poskusi znova",
"uploadLogs": "Naloži dnevnike",
"uploading": "Nalaganje...",
"uploadingLogs": "Nalaganje dnevnikov...",
"uploadLogsForSupport": "Naloži dnevnike za podporo",
"viewLogs": "Prikaži dnevnike",
"scanQrOrShare": "Skenirajte QR ali delite to povezavo:",
"uploadFailed": "Nalaganje ni uspelo"
},
"error": {
"downloadFailed": "Prenos ni uspel",
"flashFailed": "Zapisovanje ni uspelo",
"verifyFailed": "Preverjanje ni uspelo",
"cancelled": "Operacija preklicana",
"authFailed": "Avtorizacija ni uspela",
"authCancelled": "Uporabnik je preklical avtorizacijo",
"decompressionFailed": "Razširjanje ni uspelo",
"uploadFailed": "Nalaganje ni uspelo",
"deviceDisconnected": "Naprava odklopljena"
},
"custom": {
"customImage": "Slika po meri"
},
"common": {
"unknown": "Neznano"
}
}