diff --git a/README.md b/README.md index 98a3852..67c4c10 100644 --- a/README.md +++ b/README.md @@ -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 diff --git a/src/i18n.ts b/src/i18n.ts index 8b6d2eb..b4b75be 100644 --- a/src/i18n.ts +++ b/src/i18n.ts @@ -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 diff --git a/src/locales/sl.json b/src/locales/sl.json new file mode 100644 index 0000000..c20b9e4 --- /dev/null +++ b/src/locales/sl.json @@ -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" + } +}