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());