From 4a6f987bf7f9d73e9dd33d225fd2d73e9bf69a88 Mon Sep 17 00:00:00 2001 From: grm Date: Wed, 16 Sep 2026 19:10:13 +0300 Subject: Merge the Layout and Design tabs into one form with a single Save The look and the layout of a blog were split over two tabs that cross-linked each other, and the Layout tab saved every toggle, move and add straight away through a dozen tiny forms. Now one Design tab holds it all, organised by part of the blog (colours & fonts, header, menu, content, side columns, footer, logo & icon) behind a sticky side index, and one Save stores the theme, every module and the menu atomically (BlogStore.SaveDesign). Module settings are edited inline; Discard changes throws the edits away; a validation error shows the form again exactly as it was sent. The image pickers no longer render the whole library four times over: a select of the newest images, and a script-driven panel that fetches the library page by page (GET /files as JSON) with lazy thumbnails. New options: posts per page, site title size, footer alignment. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01Sd8UPWrvyYCLj97JexNw3A --- internal/i18n/el.go | 163 +++++++++++++++++++++++++--------------------------- 1 file changed, 77 insertions(+), 86 deletions(-) (limited to 'internal/i18n') diff --git a/internal/i18n/el.go b/internal/i18n/el.go index 26e3a60..15270c1 100644 --- a/internal/i18n/el.go +++ b/internal/i18n/el.go @@ -16,19 +16,15 @@ var el = map[string]string{ "Posts": "Δημοσιεύσεις", "Pages": "Σελίδες", "Announcements": "Ανακοινώσεις", - "Layout": "Διάταξη", "Design": "Σχεδίαση", "Settings": "Ρυθμίσεις", "View blog": "Προβολή ιστολογίου", "View page": "Προβολή σελίδας", "View post": "Προβολή δημοσίευσης", "view": "προβολή", - "edit": "επεξεργασία", "delete": "διαγραφή", - "remove": "αφαίρεση", "Remove": "Αφαίρεση", "Save": "Αποθήκευση", - "Add": "Προσθήκη", "Back": "Πίσω", "Cancel": "Άκυρο", "Create": "Δημιουργία", @@ -57,7 +53,6 @@ var el = map[string]string{ "you": "εσείς", "tab.": "καρτέλα.", "your blog": "το ιστολόγιό σας", - "to see it.": "για να τη δείτε.", "to see them.": "για να τις δείτε.", // ---- overview ---- @@ -67,7 +62,6 @@ var el = map[string]string{ "Write a new post": "Γράψτε νέα δημοσίευση", "Add a page": "Προσθήκη σελίδας", "Post an announcement": "Νέα ανακοίνωση", - "Arrange the layout": "Ρύθμιση διάταξης", "Change the look": "Αλλαγή εμφάνισης", "%d posts": "%d δημοσιεύσεις", "hidden from menu": "εκτός μενού", @@ -265,25 +259,18 @@ var el = map[string]string{ "Wrong username or password.": "Λάθος όνομα χρήστη ή κωδικός.", // ---- layout ---- - "Decide what goes where on your blog. Every change here is saved straight away; refresh": "Αποφασίστε τι πάει πού στο ιστολόγιό σας. Κάθε αλλαγή εδώ αποθηκεύεται αμέσως· ανανεώστε", - "Colours and fonts are on the": "Τα χρώματα και οι γραμματοσειρές είναι στην", - "Columns": "Στήλες", - "Header": "Κεφαλίδα", - "Footer": "Υποσέλιδο", - "Menu": "Μενού", - "Left": "Αριστερά", - "Right": "Δεξιά", - "Left column width": "Πλάτος αριστερής στήλης", - "Right column width": "Πλάτος δεξιάς στήλης", + "Header": "Κεφαλίδα", + "Footer": "Υποσέλιδο", + "Menu": "Μενού", + "Left": "Αριστερά", + "Right": "Δεξιά", + "Left column width": "Πλάτος αριστερής στήλης", + "Right column width": "Πλάτος δεξιάς στήλης", "Between 15% and 40% each; the main content takes the rest. A column only appears when it has at least one module; without columns the posts take the whole width. On phones the columns stack: main content first, then the left and right columns, then the footer.": "Από 15% έως 40% η καθεμία· το κύριο περιεχόμενο παίρνει το υπόλοιπο. Μια στήλη εμφανίζεται μόνο όταν έχει τουλάχιστον ένα στοιχείο· χωρίς στήλες οι δημοσιεύσεις παίρνουν όλο το πλάτος. Στα κινητά οι στήλες στοιβάζονται: πρώτα το κύριο περιεχόμενο, μετά η αριστερή και η δεξιά στήλη, μετά το υποσέλιδο.", - "Always keep the columns' space, even when a column is empty or hidden": "Να κρατιέται πάντα ο χώρος των στηλών, ακόμα κι όταν μια στήλη είναι άδεια ή κρυφή", - "the main content then keeps its width and stays centred": "το κύριο περιεχόμενο κρατά έτσι το πλάτος του και μένει κεντραρισμένο", - "Save columns": "Αποθήκευση στηλών", - "The top of every page. Stack the title, a logo and the menu in the order you like. A banner image can be chosen on the Design tab.": "Η κορυφή κάθε σελίδας. Βάλτε τον τίτλο, ένα λογότυπο και το μενού με όποια σειρά θέλετε. Μια εικόνα-πανό επιλέγεται στην καρτέλα Σχεδίαση.", - "A narrow column beside your posts. Good for the menu, an archive or recent posts.": "Μια στενή στήλη δίπλα στις δημοσιεύσεις σας. Καλή για το μενού, το αρχείο ή τις πρόσφατες δημοσιεύσεις.", - "A narrow column on the other side of your posts. Same choices as the left one.": "Μια στενή στήλη από την άλλη πλευρά των δημοσιεύσεων. Ίδιες επιλογές με την αριστερή.", - "The bottom of every page: a copyright line, the RSS link, a list of your pages.": "Το τέλος κάθε σελίδας: μια γραμμή copyright, ο σύνδεσμος RSS, μια λίστα με τις σελίδες σας.", - "Your posts and pages always show here. You can add your own HTML before and after them — an intro box, a newsletter form, a badge…": "Οι δημοσιεύσεις και οι σελίδες σας εμφανίζονται πάντα εδώ. Μπορείτε να προσθέσετε δικό σας HTML πριν και μετά — ένα εισαγωγικό πλαίσιο, μια φόρμα newsletter, ένα σήμα…", + "Always keep the columns' space, even when a column is empty or hidden": "Να κρατιέται πάντα ο χώρος των στηλών, ακόμα κι όταν μια στήλη είναι άδεια ή κρυφή", + "the main content then keeps its width and stays centred": "το κύριο περιεχόμενο κρατά έτσι το πλάτος του και μένει κεντραρισμένο", + "A narrow column beside your posts. Good for the menu, an archive or recent posts.": "Μια στενή στήλη δίπλα στις δημοσιεύσεις σας. Καλή για το μενού, το αρχείο ή τις πρόσφατες δημοσιεύσεις.", + "A narrow column on the other side of your posts. Same choices as the left one.": "Μια στενή στήλη από την άλλη πλευρά των δημοσιεύσεων. Ίδιες επιλογές με την αριστερή.", "Nothing extra.": "Τίποτα επιπλέον.", "Add custom HTML": "Προσθήκη δικού σας HTML", "The links the Menu module shows, wherever you place it. Pages and outside links can be mixed in any order. Ticking “Show in menu” on a page does the same as adding it here.": "Οι σύνδεσμοι που δείχνει το στοιχείο Μενού, όπου κι αν το βάλετε. Σελίδες και εξωτερικοί σύνδεσμοι μπορούν να αναμειχθούν με όποια σειρά θέλετε. Το «Εμφάνιση στο μενού» σε μια σελίδα κάνει το ίδιο με την προσθήκη της εδώ.", @@ -295,28 +282,12 @@ var el = map[string]string{ "Add a link": "Προσθήκη συνδέσμου", "Add link": "Προσθήκη συνδέσμου", "My photos": "Οι φωτογραφίες μου", - "Hide this area": "Απόκρυψη περιοχής", - "Show this area": "Εμφάνιση περιοχής", "no logo chosen": "δεν έχει επιλεγεί λογότυπο", - "pick one on the": "επιλέξτε ένα στην", "Nothing here yet.": "Τίποτα εδώ ακόμα.", "Nothing here yet — this area is not shown until you add a module.": "Τίποτα εδώ ακόμα — η περιοχή δεν εμφανίζεται μέχρι να προσθέσετε ένα στοιχείο.", "Add a module": "Προσθήκη στοιχείου", - "Columns saved. Refresh your blog to see them.": "Οι στήλες αποθηκεύτηκαν. Ανανεώστε το ιστολόγιό σας για να τις δείτε.", - "%s hidden.": "%s: κρύφτηκε.", - "%s shown again. Refresh your blog to see it.": "%s: εμφανίζεται ξανά. Ανανεώστε το ιστολόγιό σας για να τη δείτε.", - "That module cannot go in that area.": "Αυτό το στοιχείο δεν μπορεί να μπει σε αυτή την περιοχή.", - "There is already a module there; edit or remove it first.": "Υπάρχει ήδη στοιχείο εκεί· επεξεργαστείτε το ή αφαιρέστε το πρώτα.", - "Added. Now write what it should show.": "Προστέθηκε. Γράψτε τώρα τι θα δείχνει.", - "%s added. Refresh your blog to see it.": "%s: προστέθηκε. Ανανεώστε το ιστολόγιό σας για να το δείτε.", - "%s removed.": "%s: αφαιρέθηκε.", - "the “%s” module and its text": "το στοιχείο «%s» και το κείμενό του", - "Pick a page first.": "Επιλέξτε πρώτα μια σελίδα.", - "Page added to the menu. Refresh your blog to see it.": "Η σελίδα προστέθηκε στο μενού. Ανανεώστε το ιστολόγιό σας για να τη δείτε.", - "Give the link a short text (max 60 characters).": "Δώστε στον σύνδεσμο ένα σύντομο κείμενο (έως 60 χαρακτήρες).", + "Give the link a short text (max 60 characters).": "Δώστε στον σύνδεσμο ένα σύντομο κείμενο (έως 60 χαρακτήρες).", "That address does not look right. Use a full web address like https://example.org or a path like /about.": "Η διεύθυνση δεν φαίνεται σωστή. Χρησιμοποιήστε πλήρη διεύθυνση όπως https://example.org ή διαδρομή όπως /about.", - "Link added to the menu. Refresh your blog to see it.": "Ο σύνδεσμος προστέθηκε στο μενού. Ανανεώστε το ιστολόγιό σας για να τον δείτε.", - "Removed from the menu.": "Αφαιρέθηκε από το μενού.", // module and area names (web.moduleNames / areaNames) "Blog title & tagline": "Τίτλος & υπότιτλος ιστολογίου", @@ -339,7 +310,6 @@ var el = map[string]string{ "all tags": "όλες οι ετικέτες", // ---- module form ---- - "in the %s": "— %s", "How many posts": "Πόσες δημοσιεύσεις", "The newest published posts from every page of your blog, newest first.": "Οι νεότερες δημοσιεύσεις από όλες τις σελίδες του ιστολογίου, με τις πιο πρόσφατες πρώτα.", "Every published post grouped by year and month, newest first. Years and months fold open and shut; the latest year starts open.": "Όλες οι δημοσιεύσεις ανά έτος και μήνα, με τις πιο πρόσφατες πρώτα. Έτη και μήνες ανοιγοκλείνουν· το τελευταίο έτος ξεκινά ανοιχτό.", @@ -352,18 +322,13 @@ var el = map[string]string{ "Put into your page exactly as written — embeds, badges and scripts all work. Anything broken here (an unclosed tag, say) can break the page around it, so check your blog after saving. 20 KB at most.": "Μπαίνει στη σελίδα σας ακριβώς όπως γράφεται — ενσωματώσεις, σήματα και scripts δουλεύουν όλα. Ό,τι είναι λάθος εδώ (π.χ. μια ετικέτα που δεν κλείνει) μπορεί να χαλάσει τη σελίδα γύρω του, γι' αυτό ελέγξτε το ιστολόγιό σας μετά την αποθήκευση. Έως 20 KB.", "© 2026 Me": "© 2026 Εγώ", "Plain text; each line becomes its own paragraph.": "Απλό κείμενο· κάθε γραμμή γίνεται ξεχωριστή παράγραφος.", - "Back to layout": "Πίσω στη διάταξη", - "Heading is too long (max 120 characters).": "Η επικεφαλίδα είναι πολύ μεγάλη (έως 120 χαρακτήρες).", - "Content is too long (20 KB max).": "Το περιεχόμενο είναι πολύ μεγάλο (έως 20 KB).", + "Heading is too long (max 120 characters).": "Η επικεφαλίδα είναι πολύ μεγάλη (έως 120 χαρακτήρες).", + "Content is too long (20 KB max).": "Το περιεχόμενο είναι πολύ μεγάλο (έως 20 KB).", // ---- design ---- - "Changes are live as soon as you save; refresh": "Οι αλλαγές ισχύουν μόλις αποθηκεύσετε· ανανεώστε", - "Schemes": "Συνδυασμοί", - "Background": "Φόντο", - "Logo & icon": "Λογότυπο & εικονίδιο", - "What appears where — header, columns, footer and their modules — is arranged on the": "Τι εμφανίζεται πού — κεφαλίδα, στήλες, υποσέλιδο και τα στοιχεία τους — ρυθμίζεται στην", - "Colour schemes": "Χρωματικοί συνδυασμοί", - "A quick start: applying a scheme sets every colour below and saves immediately. Images, fonts and layout are kept.": "Για γρήγορη αρχή: ένας συνδυασμός ορίζει όλα τα παρακάτω χρώματα και αποθηκεύεται αμέσως. Εικόνες, γραμματοσειρές και διάταξη διατηρούνται.", + "Background": "Φόντο", + "Logo & icon": "Λογότυπο & εικονίδιο", + "Colour schemes": "Χρωματικοί συνδυασμοί", "Apply %s": "Εφαρμογή: %s", "Paper": "Χαρτί", "Night": "Νύχτα", @@ -377,8 +342,6 @@ var el = map[string]string{ "Fill, fixed while scrolling": "Γέμισμα, σταθερό στην κύλιση", "Repeat (tile)": "Επανάληψη (πλακάκι)", "Background image": "Εικόνα φόντου", - "Text & content area": "Κείμενο & περιοχή περιεχομένου", - "Content background": "Φόντο περιεχομένου", "Text colour": "Χρώμα κειμένου", "Link colour": "Χρώμα συνδέσμων", "Change colour when the mouse is over a link": "Αλλαγή χρώματος όταν το ποντίκι είναι πάνω από σύνδεσμο", @@ -401,44 +364,30 @@ var el = map[string]string{ "inside the box": "μέσα στο πλαίσιο", "Compact": "Σφιχτό", "Roomy": "Άνετο", - "The content spans the whole page; how much of it the posts get is set by the column widths on the": "Το περιεχόμενο απλώνεται σε όλη τη σελίδα· πόσο από αυτό παίρνουν οι δημοσιεύσεις ορίζεται από τα πλάτη των στηλών στην", - "Alignment": "Στοίχιση", - "Centred": "Στο κέντρο", - "Image height": "Ύψος εικόνας", - "Short": "Χαμηλό", - "Medium": "Μεσαίο", - "Tall": "Ψηλό", - "The title, logo and menu are header modules — add, remove and order them on the": "Ο τίτλος, το λογότυπο και το μενού είναι στοιχεία της κεφαλίδας — προσθέστε, αφαιρέστε και ταξινομήστε τα στην", - "The banner below is shown across the top of the header whenever one is chosen.": "Το πανό παρακάτω εμφανίζεται κατά μήκος της κορυφής της κεφαλίδας όποτε έχει επιλεγεί κάποιο.", - "Header image (banner)": "Εικόνα κεφαλίδας (πανό)", - "Which links the menu shows, and where it sits, is set on the": "Ποιους συνδέσμους δείχνει το μενού, και πού βρίσκεται, ορίζεται στην", - "Here you choose how it looks.": "Εδώ επιλέγετε πώς φαίνεται.", - "menu in the header": "μενού στην κεφαλίδα", - "Link style": "Στυλ συνδέσμων", - "Uppercase, spaced": "Κεφαλαία, αραιά", - "Menu colours": "Χρώματα μενού", - "Posts & dates": "Δημοσιεύσεις & ημερομηνίες", - "Show the date on posts": "Εμφάνιση ημερομηνίας στις δημοσιεύσεις", - "Date format": "Μορφή ημερομηνίας", - "The footer text, RSS link and other footer modules live on the": "Το κείμενο υποσέλιδου, ο σύνδεσμος RSS και τα άλλα στοιχεία του υποσέλιδου βρίσκονται στην", - "Logo & site icon": "Λογότυπο & εικονίδιο ιστολογίου", - "Logo size": "Μέγεθος λογότυπου", - "Small (48 px tall)": "Μικρό (48 px ύψος)", - "Medium (80 px)": "Μεσαίο (80 px)", - "Large (140 px)": "Μεγάλο (140 px)", - "Shown wherever you place a Logo module (Layout tab); it links to your front page.": "Εμφανίζεται όπου βάλετε στοιχείο Λογότυπο (καρτέλα Διάταξη)· οδηγεί στην αρχική σας σελίδα.", - "Favicon": "Εικονίδιο (favicon)", + "Alignment": "Στοίχιση", + "Centred": "Στο κέντρο", + "Short": "Χαμηλό", + "Medium": "Μεσαίο", + "Tall": "Ψηλό", + "menu in the header": "μενού στην κεφαλίδα", + "Link style": "Στυλ συνδέσμων", + "Uppercase, spaced": "Κεφαλαία, αραιά", + "Show the date on posts": "Εμφάνιση ημερομηνίας στις δημοσιεύσεις", + "Date format": "Μορφή ημερομηνίας", + "Logo & site icon": "Λογότυπο & εικονίδιο ιστολογίου", + "Logo size": "Μέγεθος λογότυπου", + "Small (48 px tall)": "Μικρό (48 px ύψος)", + "Medium (80 px)": "Μεσαίο (80 px)", + "Large (140 px)": "Μεγάλο (140 px)", + "Favicon": "Εικονίδιο (favicon)", "The small icon browsers show in the tab. A square PNG or ICO of 32–64 px works best; pick None for the Blogspace icon.": "Το μικρό εικονίδιο που δείχνουν οι φυλλομετρητές στην καρτέλα. Ένα τετράγωνο PNG ή ICO 32–64 px είναι ιδανικό· επιλέξτε Κανένα για το εικονίδιο του Blogspace.", - "Save design": "Αποθήκευση σχεδίασης", "Reset to defaults": "Επαναφορά προεπιλογών", "Puts every colour, font and layout option back to how a new blog starts and forgets the chosen images (they stay in your library).": "Επαναφέρει κάθε χρώμα, γραμματοσειρά και επιλογή διάταξης όπως ξεκινά ένα νέο ιστολόγιο και ξεχνά τις επιλεγμένες εικόνες (μένουν στη συλλογή σας).", "Reset everything": "Επαναφορά όλων", "None": "Κανένα", "…or upload a new one": "…ή μεταφορτώστε καινούργια", - "Design saved. Refresh your blog to see it.": "Η σχεδίαση αποθηκεύτηκε. Ανανεώστε το ιστολόγιό σας για να τη δείτε.", - "Unknown colour scheme.": "Άγνωστος χρωματικός συνδυασμός.", - "Applied the %s scheme. Refresh your blog to see it.": "Εφαρμόστηκε ο συνδυασμός %s. Ανανεώστε το ιστολόγιό σας για να τον δείτε.", - "Design and layout reset to the defaults.": "Σχεδίαση και διάταξη επανήλθαν στις προεπιλογές.", + "Design saved. Refresh your blog to see it.": "Η σχεδίαση αποθηκεύτηκε. Ανανεώστε το ιστολόγιό σας για να τη δείτε.", + "Design and layout reset to the defaults.": "Σχεδίαση και διάταξη επανήλθαν στις προεπιλογές.", // ---- admin ---- "Users & blogs": "Χρήστες & ιστολόγια", @@ -496,4 +445,46 @@ var el = map[string]string{ "Nothing matched “%s”.": "Τίποτα δεν ταιριάζει με «%s».", "One post matches.": "Μία δημοσίευση ταιριάζει.", "%d posts match.": "%d δημοσιεύσεις ταιριάζουν.", + + // ---- design: the one tab for look and layout ---- + "Everything about how your blog looks and what goes where, saved together with the one button at the bottom. Changes are live as soon as you save; refresh": "Ό,τι αφορά την εμφάνιση του ιστολογίου σας και το τι πάει πού, αποθηκευμένο μαζί με το ένα κουμπί στο τέλος. Οι αλλαγές ισχύουν μόλις αποθηκεύσετε· ανανεώστε", + "Colours & fonts": "Χρώματα & γραμματοσειρές", + "Side columns": "Πλαϊνές στήλες", + "Page background": "Φόντο σελίδας", + "Text & links": "Κείμενο & σύνδεσμοι", + "Fonts": "Γραμματοσειρές", + "A quick start: a scheme fills in every colour below. Images, fonts and layout are kept.": "Για γρήγορη αρχή: ένας συνδυασμός συμπληρώνει όλα τα παρακάτω χρώματα. Εικόνες, γραμματοσειρές και διάταξη διατηρούνται.", + "Apply a scheme when saving": "Εφαρμογή συνδυασμού κατά την αποθήκευση", + "Keep the colours below": "Διατήρηση των παρακάτω χρωμάτων", + "Show the header": "Εμφάνιση της κεφαλίδας", + "the top of every page": "η κορυφή κάθε σελίδας", + "Title size": "Μέγεθος τίτλου", + "Banner image": "Εικόνα-πανό", + "Banner height": "Ύψος πανό", + "Shown across the top of the header whenever one is chosen.": "Εμφανίζεται κατά μήκος της κορυφής της κεφαλίδας όποτε έχει επιλεγεί κάποια.", + "Stack the title, a logo, the menu and a search box in the order you like.": "Βάλτε τον τίτλο, ένα λογότυπο, το μενού και ένα πλαίσιο αναζήτησης με όποια σειρά θέλετε.", + "A page or link filled in here is added when you save.": "Μια σελίδα ή ένας σύνδεσμος που συμπληρώνετε εδώ προστίθεται όταν αποθηκεύσετε.", + "How the menu looks": "Πώς φαίνεται το μενού", + "The box your posts and pages are shown in. It spans whatever the side columns leave.": "Το πλαίσιο στο οποίο εμφανίζονται οι δημοσιεύσεις και οι σελίδες σας. Απλώνεται σε ό,τι αφήνουν οι πλαϊνές στήλες.", + "Posts per page": "Δημοσιεύσεις ανά σελίδα", + "Around the posts": "Γύρω από τις δημοσιεύσεις", + "Your own HTML before and after the posts — an intro box, a newsletter form, a badge…": "Δικό σας HTML πριν και μετά τις δημοσιεύσεις — ένα εισαγωγικό πλαίσιο, μια φόρμα newsletter, ένα σήμα…", + "Show the left column": "Εμφάνιση της αριστερής στήλης", + "Show the right column": "Εμφάνιση της δεξιάς στήλης", + "Show the footer": "Εμφάνιση του υποσέλιδου", + "the bottom of every page": "το τέλος κάθε σελίδας", + "A copyright line, the RSS link, a list of your pages.": "Μια γραμμή copyright, ο σύνδεσμος RSS, μια λίστα με τις σελίδες σας.", + "Shown wherever you place a Logo module; it links to your front page.": "Εμφανίζεται όπου βάλετε στοιχείο Λογότυπο· οδηγεί στην αρχική σας σελίδα.", + "pick one": "επιλέξτε ένα", + "Discard changes": "Απόρριψη αλλαγών", + "Unsaved changes": "Μη αποθηκευμένες αλλαγές", + "Throw away your unsaved changes?": "Να πεταχτούν οι μη αποθηκευμένες αλλαγές σας;", + "Remove this module and its text?": "Να αφαιρεθεί αυτό το στοιχείο και το κείμενό του;", + "Only one module fits before or after the posts; remove one first.": "Μόνο ένα στοιχείο χωράει πριν ή μετά τις δημοσιεύσεις· αφαιρέστε πρώτα ένα.", + "Choose from library…": "Επιλογή από τη συλλογή…", + "Current image": "Τρέχουσα εικόνα", + "Filter by name…": "Φιλτράρισμα κατά όνομα…", + "%d images": "%d εικόνες", + "No images match.": "Καμία εικόνα δεν ταιριάζει.", + "Close": "Κλείσιμο", } -- cgit v1.2.3