From 7a7551107f080916b4031158a2d163e95fe633bc Mon Sep 17 00:00:00 2001 From: Grzegorz Kucmierz Date: Mon, 9 Feb 2026 19:18:23 +0100 Subject: [PATCH] =?UTF-8?q?Mobile:=20poprawa=20widoczno=C5=9Bci=20dropdown?= =?UTF-8?q?u=20j=C4=99zyk=C3=B3w;=20rozszerzenie=20listy=20j=C4=99zyk?= =?UTF-8?q?=C3=B3w?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/App.vue | 85 ++++++++++++++++++++++- src/composables/useI18n.js | 139 ++++++++++++++++++++++++++++++++++++- 2 files changed, 221 insertions(+), 3 deletions(-) diff --git a/src/App.vue b/src/App.vue index ef01d11..6d2b0ea 100644 --- a/src/App.vue +++ b/src/App.vue @@ -37,7 +37,40 @@ const languageFlags = { ru: '', pt: '', ur: '', - pl: '' + pl: '', + de: '', + it: '', + nl: '', + sv: '', + da: '', + fi: '', + no: '', + cs: '', + sk: '', + hu: '', + ro: '', + bg: '', + el: '', + uk: '', + be: '', + sr: '', + hr: '', + sl: '', + lt: '', + lv: '', + et: '', + ga: '', + is: '', + mt: '', + sq: '', + mk: '', + bs: '', + tr: '', + ca: '', + gl: '', + cy: '', + gd: '', + eu: '' }; const languages = computed(() => { @@ -52,7 +85,40 @@ const languages = computed(() => { { code: 'ru', label: t('language.ru') }, { code: 'pt', label: t('language.pt') }, { code: 'ur', label: t('language.ur') }, - { code: 'pl', label: t('language.pl') } + { code: 'pl', label: t('language.pl') }, + { code: 'de', label: t('language.de') }, + { code: 'it', label: t('language.it') }, + { code: 'nl', label: t('language.nl') }, + { code: 'sv', label: t('language.sv') }, + { code: 'da', label: t('language.da') }, + { code: 'fi', label: t('language.fi') }, + { code: 'no', label: t('language.no') }, + { code: 'cs', label: t('language.cs') }, + { code: 'sk', label: t('language.sk') }, + { code: 'hu', label: t('language.hu') }, + { code: 'ro', label: t('language.ro') }, + { code: 'bg', label: t('language.bg') }, + { code: 'el', label: t('language.el') }, + { code: 'uk', label: t('language.uk') }, + { code: 'be', label: t('language.be') }, + { code: 'sr', label: t('language.sr') }, + { code: 'hr', label: t('language.hr') }, + { code: 'sl', label: t('language.sl') }, + { code: 'lt', label: t('language.lt') }, + { code: 'lv', label: t('language.lv') }, + { code: 'et', label: t('language.et') }, + { code: 'ga', label: t('language.ga') }, + { code: 'is', label: t('language.is') }, + { code: 'mt', label: t('language.mt') }, + { code: 'sq', label: t('language.sq') }, + { code: 'mk', label: t('language.mk') }, + { code: 'bs', label: t('language.bs') }, + { code: 'tr', label: t('language.tr') }, + { code: 'ca', label: t('language.ca') }, + { code: 'gl', label: t('language.gl') }, + { code: 'cy', label: t('language.cy') }, + { code: 'gd', label: t('language.gd') }, + { code: 'eu', label: t('language.eu') } ]; return items.sort((a, b) => a.label.localeCompare(b.label, locale.value)); }); @@ -347,6 +413,8 @@ h1 { gap: 6px; z-index: 10; opacity: 1; + max-height: 70vh; + overflow-y: auto; } .lang-option { @@ -513,5 +581,18 @@ h1 { font-size: 2rem; letter-spacing: 2px; } + .lang-menu { + position: fixed; + top: 64px; + left: 50%; + right: auto; + transform: translateX(-50%); + width: min(90vw, 320px); + min-width: 240px; + z-index: 1005; + max-height: calc(100vh - 96px); + padding: 12px; + border-radius: 18px; + } } diff --git a/src/composables/useI18n.js b/src/composables/useI18n.js index bf502ee..acb9f49 100644 --- a/src/composables/useI18n.js +++ b/src/composables/useI18n.js @@ -1,6 +1,10 @@ import { ref, computed } from 'vue'; -const supportedLocales = ['pl', 'en', 'zh', 'hi', 'es', 'fr', 'ar', 'bn', 'ru', 'pt', 'ur']; +const supportedLocales = [ + 'pl','en','zh','hi','es','fr','ar','bn','ru','pt','ur', + 'de','it','nl','sv','da','fi','no','cs','sk','hu','ro','bg','el','uk','be', + 'sr','hr','sl','lt','lv','et','ga','is','mt','sq','mk','bs','tr','ca','gl','cy','gd','eu' +]; const detectLocale = () => { if (typeof navigator === 'undefined') return 'en'; @@ -648,6 +652,139 @@ const messages = { 'theme.light': 'ہلکا', 'theme.dark': 'گہرا' } + , + de: { + 'language.label': 'Sprachauswahl', + 'language.de': 'Deutsch' + }, + it: { + 'language.label': 'Selezione lingua', + 'language.it': 'Italiano' + }, + nl: { + 'language.label': 'Taalkeuze', + 'language.nl': 'Nederlands' + }, + sv: { + 'language.label': 'Språkval', + 'language.sv': 'Svenska' + }, + da: { + 'language.label': 'Sprogvalg', + 'language.da': 'Dansk' + }, + fi: { + 'language.label': 'Kielen valinta', + 'language.fi': 'Suomi' + }, + no: { + 'language.label': 'Språkvalg', + 'language.no': 'Norsk' + }, + cs: { + 'language.label': 'Výběr jazyka', + 'language.cs': 'Čeština' + }, + sk: { + 'language.label': 'Voľba jazyka', + 'language.sk': 'Slovenčina' + }, + hu: { + 'language.label': 'Nyelvválasztás', + 'language.hu': 'Magyar' + }, + ro: { + 'language.label': 'Selectare limbă', + 'language.ro': 'Română' + }, + bg: { + 'language.label': 'Избор на език', + 'language.bg': 'Български' + }, + el: { + 'language.label': 'Επιλογή γλώσσας', + 'language.el': 'Ελληνικά' + }, + uk: { + 'language.label': 'Вибір мови', + 'language.uk': 'Українська' + }, + be: { + 'language.label': 'Выбар мовы', + 'language.be': 'Беларуская' + }, + sr: { + 'language.label': 'Избор језика', + 'language.sr': 'Српски' + }, + hr: { + 'language.label': 'Odabir jezika', + 'language.hr': 'Hrvatski' + }, + sl: { + 'language.label': 'Izbira jezika', + 'language.sl': 'Slovenščina' + }, + lt: { + 'language.label': 'Kalbos pasirinkimas', + 'language.lt': 'Lietuvių' + }, + lv: { + 'language.label': 'Valodas izvēle', + 'language.lv': 'Latviešu' + }, + et: { + 'language.label': 'Keele valik', + 'language.et': 'Eesti' + }, + ga: { + 'language.label': 'Rogha teanga', + 'language.ga': 'Gaeilge' + }, + is: { + 'language.label': 'Val á tungumáli', + 'language.is': 'Íslenska' + }, + mt: { + 'language.label': 'Għażla tal-lingwa', + 'language.mt': 'Malti' + }, + sq: { + 'language.label': 'Zgjedhja e gjuhës', + 'language.sq': 'Shqip' + }, + mk: { + 'language.label': 'Избор на јазик', + 'language.mk': 'Македонски' + }, + bs: { + 'language.label': 'Izbor jezika', + 'language.bs': 'Bosanski' + }, + tr: { + 'language.label': 'Dil seçimi', + 'language.tr': 'Türkçe' + }, + ca: { + 'language.label': 'Selecció d’idioma', + 'language.ca': 'Català' + }, + gl: { + 'language.label': 'Selección de idioma', + 'language.gl': 'Galego' + }, + cy: { + 'language.label': 'Dewis iaith', + 'language.cy': 'Cymraeg' + }, + gd: { + 'language.label': 'Taghadh cànain', + 'language.gd': 'Gàidhlig' + }, + eu: { + 'language.label': 'Hizkuntza hautaketa', + 'language.eu': 'Euskara' + } }; const locale = ref(detectLocale());