Bläddra i källkod

Add Greek localization and language picker support.

Co-authored-by: Cursor <cursoragent@cursor.com>
AhtashamShahzad1 1 månad sedan
förälder
incheckning
56af40be48

+ 1 - 0
Info.plist

@@ -17,6 +17,7 @@
 		<string>nl</string>
 		<string>sv</string>
 		<string>fi</string>
+		<string>el</string>
 		<string>ko</string>
 		<string>pt-BR</string>
 		<string>ru</string>

+ 1 - 0
meetings_app.xcodeproj/project.pbxproj

@@ -105,6 +105,7 @@
 				nl,
 				sv,
 				fi,
+				el,
 				ko,
 				"pt-BR",
 				ru,

+ 3 - 1
meetings_app/Localization/AppLanguageManager.swift

@@ -8,7 +8,7 @@ enum AppLanguageManager {
     private static let defaultsKey = "settings.appLanguageCode"
 
     /// UI languages shown in Settings → Language (order preserved).
-    private static let supportedLanguageCodes = ["en", "fr", "fr-CA", "es-ES", "es-MX", "de", "nl", "sv", "fi", "ko", "pt-BR", "ru", "vi", "zh-Hans", "zh-Hant"]
+    private static let supportedLanguageCodes = ["en", "fr", "fr-CA", "es-ES", "es-MX", "de", "nl", "sv", "fi", "el", "ko", "pt-BR", "ru", "vi", "zh-Hans", "zh-Hant"]
 
     /// `nil` follows the system language; otherwise uses the selected `.lproj` code.
     static var selectedLanguageCode: String? {
@@ -99,6 +99,8 @@ enum AppLanguageManager {
             return "Svenska"
         case "fi":
             return "Suomi"
+        case "el":
+            return "Ελληνικά"
         case "ko":
             return "한국어"
         case "pt-BR":

+ 4 - 0
meetings_app/el.lproj/InfoPlist.strings

@@ -0,0 +1,4 @@
+"CFBundleDisplayName" = "Βοηθός AI για Meet της Γκουγκλ";
+"CFBundleName" = "Βοηθός AI για Meet της Γκουγκλ";
+"NSMicrophoneUsageDescription" = "Με τη συγκατάθεσή σας, η εφαρμογή θα εγγράψει τον ήχο της σύσκεψης σε αυτό το Mac και θα τον εμφανίσει στον Βοηθό AI μετά τη σύσκεψη.";
+"NSSpeechRecognitionUsageDescription" = "Αυτή η εφαρμογή μετατρέπει τον αποθηκευμένο ήχο σύσκεψης σε κείμενο απομαγνητοφώνησης για τον Βοηθό AI.";

+ 452 - 0
meetings_app/el.lproj/Localizable.strings

@@ -0,0 +1,452 @@
+/* AppBrand.name ("Meetings") σκόπιμα παραλειπόμενο — το όνομα της εφαρμογής παραμένει αμετάβλητο στον κώδικα. */
+"AI Companion for Meet" = "Βοηθός AI για Meet της Γκουγκλ";
+
+/* MARK: - Γενικά */
+"OK" = "Εντάξει";
+"Cancel" = "Ακύρωση";
+"Continue" = "Συνέχεια";
+"Apply" = "Εφαρμογή";
+"Reset" = "Επαναφορά";
+"Save" = "Αποθήκευση";
+"Copy" = "Αντιγραφή";
+"Copied" = "Αντιγράφηκε";
+"Close" = "Κλείσιμο";
+"Join" = "Συμμετοχή";
+"None" = "Κανένα";
+"Link" = "Σύνδεσμος";
+"Stop" = "Διακοπή";
+"Address" = "Διεύθυνση";
+"Title" = "Τίτλος";
+"Notes" = "Σημειώσεις";
+"Start" = "Έναρξη";
+"Premium" = "Premium";
+"Popular" = "Δημοφιλές";
+"Browser" = "Περιηγητής";
+"Meeting" = "Σύσκεψη";
+"Error" = "Σφάλμα";
+"Success" = "Επιτυχία";
+
+/* MARK: - Γραμμή κατάστασης */
+"Meetings status menu" = "Μενού κατάστασης συσκέψεων";
+"Open App" = "Άνοιγμα εφαρμογής";
+"Join Meetings" = "Συμμετοχή σε συσκέψεις";
+"Schedule" = "Προγραμματισμός";
+"Calendar" = "Ημερολόγιο";
+"Widgets" = "Widgets";
+"AI Companion" = "Βοηθός AI";
+"Settings" = "Ρυθμίσεις";
+"Top meetings" = "Καρφιτσωμένες συσκέψεις";
+"No upcoming meetings" = "Δεν υπάρχουν επερχόμενες συσκέψεις";
+"Sign Out" = "Αποσύνδεση";
+"Sign In" = "Σύνδεση";
+"Quit" = "Έξοδος";
+
+/* MARK: - Αρχική οθόνη */
+"Preparing your meetings workspace" = "Προετοιμασία χώρου εργασίας συσκέψεων";
+"CONNECTING SERVICES" = "ΣΥΝΔΕΣΗ ΥΠΗΡΕΣΙΩΝ";
+"READY" = "ΕΤΟΙΜΟ";
+"Plan smart, achieve more" = "Έξυπνος σχεδιασμός, περισσότερα επιτεύγματα";
+
+/* MARK: - Widgets */
+"Add Widget to Desktop" = "Προσθήκη widget στην επιφάνεια εργασίας";
+"Choose a size and add your Google Meet widget." = "Επιλέξτε μέγεθος και προσθέστε το widget Meet της Γκουγκλ.";
+"Tip: Right-click a desktop widget to remove it." = "Συμβουλή: Κάντε δεξί κλικ σε ένα widget επιφάνειας εργασίας για να το αφαιρέσετε.";
+"Removed %@ widget from desktop." = "Το widget %@ αφαιρέθηκε από την επιφάνεια εργασίας.";
+"Added %@ widget from desktop." = "Το widget %@ προστέθηκε από την επιφάνεια εργασίας.";
+"Added %@ widget to desktop." = "Το widget %@ προστέθηκε στην επιφάνεια εργασίας.";
+"Widgets are Premium only. Upgrade to add widgets." = "Τα widgets είναι μόνο για Premium. Αναβαθμίστε για να προσθέσετε widgets.";
+"Remove Widget" = "Αφαίρεση widget";
+"Small" = "Μικρό";
+"Medium" = "Μεσαίο";
+"Quick actions" = "Γρήγορες ενέργειες";
+"Open Meet" = "Άνοιγμα Meet της Γκουγκλ";
+"Upcoming meetings" = "Επερχόμενες συσκέψεις";
+"Sign in to see upcoming meetings" = "Συνδεθείτε για να δείτε επερχόμενες συσκέψεις";
+"Sign in with Google" = "Σύνδεση με τη Γκουγκλ";
+"Google Meet" = "Meet της Γκουγκλ";
+"Open and join quickly" = "Γρήγορο άνοιγμα και συμμετοχή";
+"Refresh" = "Ανανέωση";
+
+/* MARK: - Πλαϊνή γραμμή και πλοήγηση */
+"Planning" = "Προγραμματισμός";
+"Additional" = "Πρόσθετα";
+"Get Premium" = "Αποκτήστε Premium";
+"Manage Subscription" = "Διαχείριση συνδρομής";
+"App for Google Meet" = "Εφαρμογή για Meet της Γκουγκλ";
+
+/* MARK: - Συμμετοχή σε σύσκεψη */
+"New Instant Meet" = "Νέα άμεση σύσκεψη";
+"Start instant Meet in more section with\nGoogle Meet meet." = "Ξεκινήστε άμεση σύσκεψη Meet της Γκουγκλ στην ενότητα Περισσότερα\nμε το Meet της Γκουγκλ.";
+"Join with Link" = "Συμμετοχή με σύνδεσμο";
+"Code or meet.google.com/…" = "Κωδικός ή meet.google.com/…";
+"Join with ID" = "Συμμετοχή με ID";
+"Join with URL" = "Συμμετοχή με URL";
+"Meeting URL" = "URL σύσκεψης";
+"Enter meeting URL..." = "Εισαγάγετε URL σύσκεψης...";
+"Quick Join Meeting" = "Γρήγορη συμμετοχή σε σύσκεψη";
+"Invalid Meet link" = "Μη έγκυρος σύνδεσμος Meet της Γκουγκλ";
+"Enter a valid Google Meet link or meeting code (for example nkd-grps-duv, meet.google.com/nkd-grps-duv, or https://meet.google.com/nkd-grps-duv)." = "Εισαγάγετε έγκυρο σύνδεσμο Meet της Γκουγκλ ή κωδικό σύσκεψης (για παράδειγμα nkd-grps-duv, meet.google.com/nkd-grps-duv ή https://meet.google.com/nkd-grps-duv).";
+"Instant Meeting" = "Άμεση σύσκεψη";
+"Connect Google to start Instant Meeting" = "Συνδέστε τη Γκουγκλ για να ξεκινήσετε άμεση σύσκεψη";
+"To auto-stop recording when the meeting ends, connect your Google account first." = "Για αυτόματη διακοπή εγγραφής όταν τελειώσει η σύσκεψη, συνδέστε πρώτα τον λογαριασμό σας Γκουγκλ.";
+"Could not create Instant Meeting" = "Δεν ήταν δυνατή η δημιουργία άμεσης σύσκεψης";
+"Free trial used. Upgrade to continue." = "Η δωρεάν δοκιμή χρησιμοποιήθηκε. Αναβαθμίστε για να συνεχίσετε.";
+
+/* MARK: - Περιήγηση στον ιστό */
+"Browse the web" = "Περιήγηση στον ιστό";
+"Enter a web address (for example meet.google.com)." = "Εισαγάγετε μια διεύθυνση ιστού (για παράδειγμα meet.google.com).";
+"Invalid address" = "Μη έγκυρη διεύθυνση";
+"Enter a valid http or https URL." = "Εισαγάγετε έγκυρο URL http ή https.";
+"Browse" = "Περιήγηση";
+"Quick links" = "Γρήγοροι σύνδεσμοι";
+"Zoom help" = "Βοήθεια Zoom";
+"https://example.com or example.com" = "https://example.com ή example.com";
+"Enter a valid web address, for example https://example.com" = "Εισαγάγετε έγκυρη διεύθυνση ιστού, για παράδειγμα https://example.com";
+"Address not allowed" = "Η διεύθυνση δεν επιτρέπεται";
+"This URL is not permitted with the current in-app browser policy (whitelist)." = "Αυτό το URL δεν επιτρέπεται με την τρέχουσα πολιτική προγράμματος περιήγησης εντός εφαρμογής (λευκή λίστα).";
+"Unable to load page" = "Αδυναμία φόρτωσης σελίδας";
+"Could not load this page in the in-app browser.\n\n%@" = "Δεν ήταν δυνατή η φόρτωση αυτής της σελίδας στο πρόγραμμα περιήγησης εντός εφαρμογής.\n\n%@";
+"Page stopped loading" = "Η φόρτωση της σελίδας σταμάτησε";
+"Unable to open browser" = "Αδυναμία ανοίγματος προγράμματος περιήγησης";
+"Unable to Open Safari" = "Αδυναμία ανοίγματος Safari";
+
+/* MARK: - Προγραμματισμός και ημερολόγιο */
+"All" = "Όλα";
+"Today" = "Σήμερα";
+"This week" = "Αυτή την εβδομάδα";
+"This month" = "Αυτόν τον μήνα";
+"Previous week" = "Προηγούμενη εβδομάδα";
+"Previous month" = "Προηγούμενος μήνας";
+"Custom range" = "Προσαρμοσμένο εύρος";
+"No meetings match the selected filters." = "Καμία σύσκεψη δεν ταιριάζει με τα επιλεγμένα φίλτρα.";
+"Adjust the date range and tap Apply." = "Προσαρμόστε το εύρος ημερομηνιών και πατήστε Εφαρμογή.";
+"Premium required. Get Premium now to unlock Calendar." = "Απαιτείται Premium. Αποκτήστε Premium τώρα για να ξεκλειδώσετε το Ημερολόγιο.";
+"Premium required. Click to open paywall." = "Απαιτείται Premium. Κάντε κλικ για να ανοίξετε το paywall.";
+"Get Premium to see events" = "Αποκτήστε Premium για να δείτε συμβάντα";
+"Connect Google" = "Σύνδεση Γκουγκλ";
+"Sign in with Google first to schedule a meeting from Calendar." = "Συνδεθείτε πρώτα με τη Γκουγκλ για να προγραμματίσετε μια σύσκεψη από το Ημερολόγιο.";
+"Select date" = "Επιλογή ημερομηνίας";
+"Choose a date to schedule your meeting." = "Επιλέξτε ημερομηνία για να προγραμματίσετε τη σύσκεψή σας.";
+"Google schedule" = "Ημερολόγιο Γκουγκλ";
+"To show scheduled meetings, connect your Google account. You’ll need a Google OAuth client ID (Desktop) and a redirect URI matching the app’s callback scheme." = "Για να εμφανίσετε προγραμματισμένες συσκέψεις, συνδέστε τον λογαριασμό σας Γκουγκλ. Θα χρειαστείτε ένα client ID OAuth της Γκουγκλ (Desktop) και ένα redirect URI που να ταιριάζει με το σχήμα επανάκλησης της εφαρμογής.";
+"Actions" = "Ενέργειες";
+"Schedule meeting" = "Προγραμματισμός σύσκεψης";
+"Team sync" = "Συγχρονισμός ομάδας";
+"Duration (min)" = "Διάρκεια (λεπτά)";
+"Refresh saved meetings" = "Ανανέωση αποθηκευμένων συσκέψεων";
+
+/* MARK: - Ρυθμίσεις */
+"Manage appearance, account, and app options." = "Διαχείριση εμφάνισης, λογαριασμού και επιλογών εφαρμογής.";
+"Appearance" = "Εμφάνιση";
+"Account" = "Λογαριασμός";
+"App" = "Εφαρμογή";
+"Notifications" = "Ειδοποιήσεις";
+"Help & Legal" = "Βοήθεια & Νομικά";
+"Dark Mode" = "Σκοτεινή λειτουργία";
+"Language" = "Γλώσσα";
+"System Language" = "Γλώσσα συστήματος";
+"Rate Us" = "Βαθμολογήστε μας";
+"Share App" = "Κοινοποίηση εφαρμογής";
+"Upgrade" = "Αναβάθμιση";
+"Privacy Policy" = "Πολιτική απορρήτου";
+"Support" = "Υποστήριξη";
+"Terms of Services" = "Όροι υπηρεσίας";
+"AI Language 1" = "Γλώσσα AI 1";
+"AI Language 2" = "Γλώσσα AI 2";
+"Google account connected" = "Συνδεδεμένος λογαριασμός Γκουγκλ";
+"Google account not connected" = "Μη συνδεδεμένος λογαριασμός Γκουγκλ";
+"Signed in" = "Συνδεδεμένος";
+"Sign in to sync your meetings and calendar." = "Συνδεθείτε για συγχρονισμό συσκέψεων και ημερολογίου.";
+"Log out" = "Αποσύνδεση";
+"Check out %@ for managing and joining meetings." = "Δοκιμάστε το %@ για διαχείριση και συμμετοχή σε συσκέψεις.";
+"Meetings App" = "Εφαρμογή Συσκέψεων";
+
+/* MARK: - Συναίνεση εγγραφής */
+"Record this meeting locally?" = "Τοπική εγγραφή αυτής της σύσκεψης;";
+"With your consent, the app will record meeting audio on this Mac and show it in AI Companion after the meeting." = "Με τη συγκατάθεσή σας, η εφαρμογή θα εγγράψει τον ήχο της σύσκεψης σε αυτό το Mac και θα τον εμφανίσει στον Βοηθό AI μετά τη σύσκεψη.";
+"Allow and Continue" = "Να επιτραπεί και συνέχεια";
+"Continue Without Recording" = "Συνέχεια χωρίς εγγραφή";
+"Transcription Languages" = "Γλώσσες απομαγνητοφώνησης";
+"Preferred Language 1" = "Προτιμώμενη γλώσσα 1";
+"Preferred Language 2" = "Προτιμώμενη γλώσσα 2";
+"Microphone permission denied" = "Άρνηση άδειας μικροφώνου";
+"Microphone permission required" = "Απαιτείται άδεια μικροφώνου";
+"Enable microphone access in System Settings to record meetings locally." = "Ενεργοποιήστε την πρόσβαση μικροφώνου στις Ρυθμίσεις Συστήματος για τοπική εγγραφή συσκέψεων.";
+"Could not start recording" = "Δεν ήταν δυνατή η έναρξη εγγραφής";
+"Recording will start when the meeting starts" = "Η εγγραφή θα ξεκινήσει όταν ξεκινήσει η σύσκεψη";
+"Meeting recording started (meeting + microphone)" = "Η εγγραφή σύσκεψης ξεκίνησε (σύσκεψη + μικρόφωνο)";
+"System audio unavailable. Recording microphone only." = "Ο ήχος συστήματος δεν είναι διαθέσιμος. Εγγραφή μόνο μικροφώνου.";
+"Meeting recording started (microphone only)" = "Η εγγραφή σύσκεψης ξεκίνησε (μόνο μικρόφωνο)";
+"Meeting recording saved" = "Η εγγραφή σύσκεψης αποθηκεύτηκε";
+
+/* MARK: - Βοηθός AI */
+"Get notes from your previous meetings" = "Λάβετε σημειώσεις από προηγούμενες συσκέψεις";
+"Connect your Google account to see your AI Companion meeting history." = "Συνδέστε τον λογαριασμό σας Γκουγκλ για να δείτε το ιστορικό συσκέψεων του Βοηθού AI.";
+"No previous meetings yet for %@. End a meeting to save it here and generate notes." = "Δεν υπάρχουν ακόμα προηγούμενες συσκέψεις για %@. Τερματίστε μια σύσκεψη για να αποθηκευτεί εδώ και να δημιουργηθούν σημειώσεις.";
+"this account" = "αυτός ο λογαριασμός";
+"Previous meetings" = "Προηγούμενες συσκέψεις";
+"Recording in progress: %@" = "Εγγραφή σε εξέλιξη: %@";
+"Started: %@" = "Ξεκίνησε: %@";
+"Stop Recording" = "Διακοπή εγγραφής";
+"Date: %@" = "Ημερομηνία: %@";
+"Saved time: %@" = "Αποθηκευμένος χρόνος: %@";
+"Get Notes" = "Λήψη σημειώσεων";
+"Premium required. Click to unlock AI Companion notes." = "Απαιτείται Premium. Κάντε κλικ για να ξεκλειδώσετε τις σημειώσεις Βοηθού AI.";
+"Play Audio" = "Αναπαραγωγή ήχου";
+"Pause Audio" = "Παύση ήχου";
+"Stopped" = "Σταμάτησε";
+"Speaking..." = "Ομιλία...";
+"Paused" = "Σε παύση";
+"Playing..." = "Αναπαραγωγή...";
+"Not playing" = "Δεν γίνεται αναπαραγωγή";
+"Checking audio..." = "Έλεγχος ήχου...";
+"Audio file missing" = "Λείπει το αρχείο ήχου";
+"Could not play recording" = "Δεν ήταν δυνατή η αναπαραγωγή της εγγραφής";
+"Failed: %@" = "Απέτυχε: %@";
+"Failed to play audio" = "Αποτυχία αναπαραγωγής ήχου";
+"decode error" = "σφάλμα αποκωδικοποίησης";
+"Loading..." = "Φόρτωση...";
+"Buffering..." = "Προσωρινή αποθήκευση...";
+"Finished" = "Ολοκληρώθηκε";
+"Transcript not requested" = "Δεν ζητήθηκε απομαγνητοφώνηση";
+"Transcript processing..." = "Επεξεργασία απομαγνητοφώνησης...";
+"Transcript ready" = "Η απομαγνητοφώνηση είναι έτοιμη";
+"Transcript unavailable (tap to retry)" = "Η απομαγνητοφώνηση δεν είναι διαθέσιμη (πατήστε για επανάληψη)";
+"Notes not requested" = "Δεν ζητήθηκαν σημειώσεις";
+"Preparing notes, please wait..." = "Προετοιμασία σημειώσεων, παρακαλώ περιμένετε...";
+"Notes ready" = "Οι σημειώσεις είναι έτοιμες";
+"Notes unavailable (tap to retry)" = "Οι σημειώσεις δεν είναι διαθέσιμες (πατήστε για επανάληψη)";
+"Transcript unavailable" = "Η απομαγνητοφώνηση δεν είναι διαθέσιμη";
+"Notes unavailable" = "Οι σημειώσεις δεν είναι διαθέσιμες";
+"Could not find recording details for this meeting." = "Δεν βρέθηκαν λεπτομέρειες εγγραφής για αυτή τη σύσκεψη.";
+"Transcript - %@" = "Απομαγνητοφώνηση - %@";
+"Notes - %@" = "Σημειώσεις - %@";
+"Meeting Notes" = "Σημειώσεις σύσκεψης";
+
+/* MARK: - Paywall και StoreKit */
+"Meetings Pro" = "Συσκέψεις Pro";
+"PREMIUM EXPERIENCE" = "PREMIUM ΕΜΠΕΙΡΙΑ";
+"Elevate your meetings workflow" = "Αναβαθμίστε τη ροή εργασίας συσκέψεών σας";
+"Unlock automation, premium meeting tools, and priority support for every session." = "Ξεκλειδώστε αυτοματισμό, premium εργαλεία συσκέψεων και υποστήριξη προτεραιότητας για κάθε συνεδρία.";
+"Manage meetings" = "Διαχείριση συσκέψεων";
+"Smart scheduling" = "Έξυπνος προγραμματισμός";
+"Faster workflow" = "Ταχύτερη ροή εργασίας";
+"Reminder notifications" = "Ειδοποιήσεις υπενθύμισης";
+"Monthly" = "Μηνιαία";
+"Bi Yearly" = "Εξαμηνιαία";
+"Yearly" = "Ετήσια";
+"Most Popular" = "Δημοφιλέστερο";
+"%@ • Most Popular" = "%@ • Δημοφιλέστερο";
+"3 days free trial" = "3 ημέρες δωρεάν δοκιμή";
+"Cancel anytime" = "Ακύρωση ανά πάσα στιγμή";
+"No lock-in" = "Χωρίς δέσμευση";
+"Instant access" = "Άμεση πρόσβαση";
+"Unlock all tools" = "Ξεκλείδωμα όλων των εργαλείων";
+"Secure billing" = "Ασφαλής χρέωση";
+"Handled by Apple" = "Διαχείριση από Apple";
+"Secured by Apple. Cancel anytime." = "Ασφαλισμένο από Apple. Ακύρωση ανά πάσα στιγμή.";
+"Restore Purchase" = "Επαναφορά αγοράς";
+"Continue with free plan" = "Συνέχεια με δωρεάν πρόγραμμα";
+"Already Premium" = "Ήδη Premium";
+"You are already premium. Do you want to continue with this purchase?" = "Είστε ήδη premium. Θέλετε να συνεχίσετε με αυτήν την αγορά;";
+"Current plan: %@. Choose a different package to switch." = "Τρέχον πρόγραμμα: %@. Επιλέξτε διαφορετικό πακέτο για αλλαγή.";
+"Premium is active on this Apple ID." = "Το Premium είναι ενεργό σε αυτό το Apple ID.";
+"Free for %@, then %@" = "Δωρεάν για %@, μετά %@";
+"Billed via App Store" = "Χρέωση μέσω App Store";
+"%@  •  %@" = "%@  •  %@";
+"Save 0%" = "Εξοικονόμηση 0%";
+"Save %@%%" = "Εξοικονόμηση %@%%";
+"month" = "μήνας";
+"year" = "έτος";
+"%@ free trial" = "%@ δωρεάν δοκιμή";
+"Processing..." = "Επεξεργασία...";
+"Premium Active" = "Premium ενεργό";
+"Continue with 3 day trail" = "Συνέχεια με δοκιμή 3 ημερών";
+"Please Wait" = "Παρακαλώ περιμένετε";
+"A purchase is already being processed." = "Μια αγορά βρίσκεται ήδη σε επεξεργασία.";
+"This Apple ID already has premium access." = "Αυτό το Apple ID έχει ήδη πρόσβαση premium.";
+"Purchase Complete" = "Η αγορά ολοκληρώθηκε";
+"Premium has been unlocked successfully." = "Το Premium ξεκλειδώθηκε με επιτυχία.";
+"Purchase Pending" = "Εκκρεμής αγορά";
+"Your purchase is pending approval. You can continue once it completes." = "Η αγορά σας εκκρεμεί έγκριση. Μπορείτε να συνεχίσετε μόλις ολοκληρωθεί.";
+"Product Not Available" = "Το προϊόν δεν είναι διαθέσιμο";
+"Unable to load this product. Check your StoreKit configuration and product IDs." = "Δεν είναι δυνατή η φόρτωση αυτού του προϊόντος. Ελέγξτε τη διαμόρφωση StoreKit και τα αναγνωριστικά προϊόντων.";
+"Already Purchased" = "Έχει ήδη αγοραστεί";
+"This plan is already active on your Apple ID." = "Αυτό το πρόγραμμα είναι ήδη ενεργό στο Apple ID σας.";
+"Purchase Failed" = "Αποτυχία αγοράς";
+"Restore Purchases" = "Επαναφορά αγορών";
+"Purchases restored successfully." = "Οι αγορές επαναφέρθηκαν με επιτυχία.";
+"No previous premium purchase was found for this Apple ID." = "Δεν βρέθηκε προηγούμενη αγορά premium για αυτό το Apple ID.";
+"Restore failed: %@" = "Αποτυχία επαναφοράς: %@";
+"Unable to Open Subscriptions" = "Αδυναμία ανοίγματος Συνδρομών";
+"The subscriptions URL is invalid." = "Το URL συνδρομών δεν είναι έγκυρο.";
+"%@ tapped." = "Πατήθηκε %@.";
+
+/* MARK: - Αυθεντικοποίηση */
+"Google Sign-In" = "Σύνδεση Γκουγκλ";
+
+/* MARK: - Σφάλματα αναγνώρισης ομιλίας/απομαγνητοφώνησης */
+"Speech recognition permission denied. Enable it in System Settings and try again." = "Άρνηση άδειας αναγνώρισης ομιλίας. Ενεργοποιήστε την στις Ρυθμίσεις Συστήματος και δοκιμάστε ξανά.";
+"Speech recognition is restricted on this Mac." = "Η αναγνώριση ομιλίας είναι περιορισμένη σε αυτό το Mac.";
+"Speech recognition authorization is unavailable." = "Η εξουσιοδότηση αναγνώρισης ομιλίας δεν είναι διαθέσιμη.";
+"Speech recognizer is unavailable for the current locale." = "Ο αναγνωριστής ομιλίας δεν είναι διαθέσιμος για την τρέχουσα τοπική ρύθμιση.";
+"Speech recognizer is unavailable for %@." = "Ο αναγνωριστής ομιλίας δεν είναι διαθέσιμος για %@.";
+"No audio was available to transcribe." = "Δεν υπήρχε διαθέσιμος ήχος για απομαγνητοφώνηση.";
+
+/* MARK: - Σφάλματα συναλλαγών StoreKit */
+"Unable to load products: %@" = "Αδυναμία φόρτωσης προϊόντων: %@";
+"Product ID not found in StoreKit response. Requested: %@. Loaded IDs: %@" = "Το αναγνωριστικό προϊόντος δεν βρέθηκε στην απόκριση StoreKit. Ζητήθηκε: %@. Φορτωμένα ID: %@";
+"Purchase verification failed." = "Αποτυχία επαλήθευσης αγοράς.";
+"Unknown purchase state." = "Άγνωστη κατάσταση αγοράς.";
+"none" = "κανένα";
+
+/* MARK: - Κείμενα τιμών paywall */
+"%@ one-time purchase" = "%@ εφάπαξ αγορά";
+"%@/month" = "%@/μήνα";
+"%@/6 months" = "%@/6 μήνες";
+"%@/year (3 days free trial)" = "%@/έτος (3 ημέρες δωρεάν δοκιμή)";
+"day" = "ημέρα";
+"week" = "εβδομάδα";
+"period" = "περίοδος";
+"1 %@" = "1 %@";
+"%d %@s" = "%d %@";
+
+/* MARK: - Toasts και γρήγορη ανάδραση */
+"Meeting added successfully." = "Η σύσκεψη προστέθηκε με επιτυχία.";
+"An issue occurred. Please try again." = "Παρουσιάστηκε πρόβλημα. Παρακαλώ δοκιμάστε ξανά.";
+"Failed to load transcript." = "Αποτυχία φόρτωσης απομαγνητοφώνησης.";
+"Failed to generate notes." = "Αποτυχία δημιουργίας σημειώσεων.";
+
+/* MARK: - Ειδοποιήσεις προγράμματος περιήγησης */
+"Try Again" = "Δοκιμάστε ξανά";
+"The in-app browser closed this page unexpectedly. You can try loading it again in this same window." = "Το πρόγραμμα περιήγησης εντός εφαρμογής έκλεισε αυτή τη σελίδα απροσδόκητα. Μπορείτε να δοκιμάσετε να την φορτώσετε ξανά στο ίδιο παράθυρο.";
+
+/* MARK: - Σφάλματα προγραμματισμού και ημερολογίου */
+"Couldn't load schedule." = "Δεν ήταν δυνατή η φόρτωση του προγράμματος.";
+"Couldn't refresh schedule." = "Δεν ήταν δυνατή η ανανέωση του προγράμματος.";
+"Couldn't connect Google account." = "Δεν ήταν δυνατή η σύνδεση του λογαριασμού Γκουγκλ.";
+"Couldn't logout Google account." = "Δεν ήταν δυνατή η αποσύνδεση του λογαριασμού Γκουγκλ.";
+"Couldn't load schedule" = "Δεν ήταν δυνατή η φόρτωση του προγράμματος";
+"Couldn't determine Meet meeting code from URL." = "Δεν ήταν δυνατός ο προσδιορισμός του κωδικού σύσκεψης Meet της Γκουγκλ από το URL.";
+"Refreshing…" = "Ανανέωση…";
+"Connect Google to see meetings" = "Συνδέστε τη Γκουγκλ για να δείτε συσκέψεις";
+"Connect to load schedule" = "Συνδεθείτε για φόρτωση προγράμματος";
+"Loading…" = "Φόρτωση…";
+"Loading schedule…" = "Φόρτωση προγράμματος…";
+"Start date must be on or before end date." = "Η ημερομηνία έναρξης πρέπει να είναι πριν ή ίδια με την ημερομηνία λήξης.";
+"Invalid custom date range" = "Μη έγκυρο προσαρμοσμένο εύρος ημερομηνιών";
+"No meetings" = "Καμία σύσκεψη";
+"No meetings for selected filters" = "Καμία σύσκεψη για τα επιλεγμένα φίλτρα";
+"No meetings on %@" = "Καμία σύσκεψη στις %@";
+"1 meeting on %@" = "1 σύσκεψη στις %@";
+"%d meetings on %@" = "%d συσκέψεις στις %@";
+"All day" = "Ολοήμερο";
+"Duration: all day" = "Διάρκεια: ολοήμερο";
+"Duration: %dh %dm" = "Διάρκεια: %dω %dλ";
+"Duration: %dh" = "Διάρκεια: %dω";
+"Duration: %dm" = "Διάρκεια: %dλ";
+"%@ - %@" = "%@ - %@";
+"Scheduled Meeting" = "Προγραμματισμένη σύσκεψη";
+
+/* MARK: - Αναδυόμενο παράθυρο δημιουργίας σύσκεψης */
+"Please enter a title." = "Παρακαλώ εισάγετε τίτλο.";
+"Duration must be a positive number of minutes." = "Η διάρκεια πρέπει να είναι θετικός αριθμός λεπτών.";
+"Invalid start time." = "Μη έγκυρη ώρα έναρξης.";
+
+/* MARK: - Υπενθυμίσεις και ειδοποιήσεις */
+"Reminders" = "Υπενθυμίσεις";
+"1 Day Before" = "1 ημέρα πριν";
+"12 Hours Before" = "12 ώρες πριν";
+"1 Hour Before" = "1 ώρα πριν";
+"Starts in 1 day" = "Ξεκινά σε 1 ημέρα";
+"Starts in 12 hours" = "Ξεκινά σε 12 ώρες";
+"Starts in 1 hour" = "Ξεκινά σε 1 ώρα";
+
+/* MARK: - Σφάλματα OAuth Γκουγκλ */
+"Missing Google OAuth Client ID." = "Λείπει το Client ID OAuth της Γκουγκλ.";
+"Missing Google OAuth Client Secret." = "Λείπει το Client Secret OAuth της Γκουγκλ.";
+"Invalid OAuth callback URL." = "Μη έγκυρο URL επανάκλησης OAuth.";
+"Google did not return an authorization code." = "Η Γκουγκλ δεν επέστρεψε κωδικό εξουσιοδότησης.";
+"Token exchange failed: %@" = "Αποτυχία ανταλλαγής token: %@";
+"Could not open browser for Google sign-in." = "Δεν ήταν δυνατό το άνοιγμα του προγράμματος περιήγησης για σύνδεση Γκουγκλ.";
+"Google sign-in timed out." = "Χρονικό όριο σύνδεσης Γκουγκλ.";
+"No stored Google tokens found." = "Δεν βρέθηκαν αποθηκευμένα tokens Γκουγκλ.";
+
+/* MARK: - Σφάλματα Βοηθού AI/απομαγνητοφώνησης */
+"Recording not found." = "Η εγγραφή δεν βρέθηκε.";
+"Local meeting audio is missing." = "Λείπει ο τοπικός ήχος σύσκεψης.";
+"Generated transcript was empty." = "Η παραγόμενη απομαγνητοφώνηση ήταν κενή.";
+"(No transcript entries found.)" = "(Δεν βρέθηκαν καταχωρίσεις απομαγνητοφώνησης.)";
+"No conference record found for this meeting." = "Δεν βρέθηκε εγγραφή διάσκεψης για αυτή τη σύσκεψη.";
+"No transcript found for this meeting." = "Δεν βρέθηκε απομαγνητοφώνηση για αυτή τη σύσκεψη.";
+"Unable to create audio composition tracks." = "Δεν ήταν δυνατή η δημιουργία ροών σύνθεσης ήχου.";
+"Unable to create audio export session." = "Δεν ήταν δυνατή η δημιουργία συνεδρίας εξαγωγής ήχου.";
+"Audio mix export failed." = "Αποτυχία εξαγωγής μίξης ήχου.";
+"No display available for system audio capture." = "Δεν υπάρχει διαθέσιμη οθόνη για καταγραφή ήχου συστήματος.";
+"Cannot add audio writer input." = "Δεν είναι δυνατή η προσθήκη εισόδου εγγραφής ήχου.";
+
+/* MARK: - Σφάλματα Γκουγκλ API */
+"Google Meet returned an invalid response." = "Το Meet της Γκουγκλ επέστρεψε μη έγκυρη απόκριση.";
+"Google Meet API error (%d): %@" = "Σφάλμα API Meet της Γκουγκλ (%d): %@";
+"Failed to parse Google Meet response: %@" = "Αποτυχία ανάλυσης απόκρισης Meet της Γκουγκλ: %@";
+"Google Calendar returned an invalid response." = "Το Ημερολόγιο Γκουγκλ επέστρεψε μη έγκυρη απόκριση.";
+"Google Calendar API error (%d): %@" = "Σφάλμα API Ημερολογίου Γκουγκλ (%d): %@";
+"Failed to parse Google Calendar events: %@" = "Αποτυχία ανάλυσης συμβάντων Ημερολογίου Γκουγκλ: %@";
+
+/* MARK: - Σφάλματα OpenAI */
+"OpenAI API key is missing. Set OPENAI_API_KEY in the environment or app key vault." = "Λείπει το κλειδί OpenAI API. Ορίστε OPENAI_API_KEY στο περιβάλλον ή στο θησαυροφυλάκιο κλειδιών της εφαρμογής.";
+"Notes generation returned an invalid response." = "Η δημιουργία σημειώσεων επέστρεψε μη έγκυρη απόκριση.";
+"Notes generation failed (%d): %@" = "Αποτυχία δημιουργίας σημειώσεων (%d): %@";
+"Notes generation returned empty text." = "Η δημιουργία σημειώσεων επέστρεψε κενό κείμενο.";
+"OpenAI transcription returned an invalid response." = "Η απομαγνητοφώνηση OpenAI επέστρεψε μη έγκυρη απόκριση.";
+"OpenAI transcription failed (%d): %@" = "Αποτυχία απομαγνητοφώνησης OpenAI (%d): %@";
+"OpenAI transcription returned no text." = "Η απομαγνητοφώνηση OpenAI δεν επέστρεψε κείμενο.";
+
+/* MARK: - Περιήγηση και πρόγραμμα περιήγησης εντός εφαρμογής */
+"Open sites in the in-app browser (back, forward, reload, address bar). OAuth and “Continue in browser” flows stay inside the app." = "Ανοίξτε ιστότοπους στο πρόγραμμα περιήγησης εντός εφαρμογής (πίσω, μπροστά, ανανέωση, γραμμή διεύθυνσης). Οι ροές OAuth και «Συνέχεια στον περιηγητή» παραμένουν στην εφαρμογή.";
+"Open in app browser" = "Άνοιγμα στον περιηγητή εφαρμογής";
+"Meet help" = "Βοήθεια Meet της Γκουγκλ";
+"Go" = "Μετάβαση";
+"Back" = "Πίσω";
+"Forward" = "Μπροστά";
+"Reload" = "Ανανέωση";
+
+/* MARK: - Ετικέτες προγραμματισμού και ημερολογίου */
+"Google Calendar" = "Ημερολόγιο Γκουγκλ";
+"Untitled meeting" = "Σύσκεψη χωρίς τίτλο";
+"Created event missing start/end." = "Το δημιουργημένο συμβάν δεν έχει έναρξη/λήξη.";
+"Created event missing Meet/HTML link." = "Το δημιουργημένο συμβάν δεν έχει σύνδεσμο Meet/HTML της Γκουγκλ.";
+
+/* MARK: - Λογαριασμός Γκουγκλ */
+"Google account" = "Λογαριασμός Γκουγκλ";
+"%@, Google account" = "%@, λογαριασμός Γκουγκλ";
+"Google User" = "Χρήστης Γκουγκλ";
+
+/* MARK: - Συμμετοχή Zoom (μη χρησιμοποιούμενη ενότητα) */
+"Meeting ID" = "ID σύσκεψης";
+"Enter meeting ID..." = "Εισαγάγετε ID σύσκεψης...";
+"Meeting Passcode" = "Κωδικός πρόσβασης σύσκεψης";
+"Enter meeting passcode..." = "Εισαγάγετε κωδικό πρόσβασης σύσκεψης...";
+
+/* MARK: - Paywall (εναλλακτικά οφέλη) */
+"Virtual backgrounds" = "Εικονικά φόντα";
+"Tools for productivity" = "Εργαλεία παραγωγικότητας";
+"24/7 support" = "Υποστήριξη 24/7";
+
+/* MARK: - Ομιλητές απομαγνητοφώνησης */
+"You" = "Εσείς";
+
+/* MARK: - Σφάλματα Keychain */
+"Failed to read OAuth tokens from Keychain." = "Αποτυχία ανάγνωσης OAuth tokens από το Keychain.";
+"Keychain returned an invalid token payload." = "Το Keychain επέστρεψε μη έγκυρο φορτίο token.";
+"Failed to update OAuth tokens in Keychain." = "Αποτυχία ενημέρωσης OAuth tokens στο Keychain.";
+"Failed to save OAuth tokens to Keychain." = "Αποτυχία αποθήκευσης OAuth tokens στο Keychain.";
+"Failed to delete OAuth tokens from Keychain." = "Αποτυχία διαγραφής OAuth tokens από το Keychain.";
+"Unable to allocate audio buffer." = "Δεν ήταν δυνατή η δέσμευση buffer ήχου.";
+"Invalid revoke response." = "Μη έγκυρη απόκριση ανάκλησης.";
+"Token revoke failed with status %d." = "Η ανάκληση token απέτυχε με κατάσταση %d.";
+
+/* MARK: - Διαγνωστικά ειδοποιήσεων σφάλματος */
+"Keychain: %d (%@)" = "Keychain: %d (%@)";
+"OSStatus: %d" = "OSStatus: %d";
+"Item: service=%@, account=%@" = "Στοιχείο: service=%@, account=%@";

+ 17 - 0
meetings_app/el.lproj/Main.strings

@@ -0,0 +1,17 @@
+/* Class = "NSMenuItem"; title = "AI Companion for Meet"; ObjectID = "1Xt-HY-uBw"; */
+"1Xt-HY-uBw.title" = "Βοηθός AI για Meet της Γκουγκλ";
+
+/* Class = "NSMenu"; title = "AI Companion for Meet"; ObjectID = "uQy-DD-JDr"; */
+"uQy-DD-JDr.title" = "Βοηθός AI για Meet της Γκουγκλ";
+
+/* Class = "NSMenuItem"; title = "About AI Companion for Meet"; ObjectID = "5kV-Vb-QxS"; */
+"5kV-Vb-QxS.title" = "Σχετικά με τον Βοηθό AI για Meet της Γκουγκλ";
+
+/* Class = "NSMenuItem"; title = "Hide AI Companion for Meet"; ObjectID = "Olw-nP-bQN"; */
+"Olw-nP-bQN.title" = "Απόκρυψη Βοηθού AI για Meet της Γκουγκλ";
+
+/* Class = "NSMenuItem"; title = "Quit AI Companion for Meet"; ObjectID = "4sb-4s-VLi"; */
+"4sb-4s-VLi.title" = "Έξοδος από τον Βοηθό AI για Meet της Γκουγκλ";
+
+/* Class = "NSMenuItem"; title = "AI Companion for Meet Help"; ObjectID = "FKE-Sm-Kum"; */
+"FKE-Sm-Kum.title" = "Βοήθεια Βοηθού AI για Meet της Γκουγκλ";