Преглед изворни кода

Add Hebrew localization and language picker support.

Co-authored-by: Cursor <cursoragent@cursor.com>
AhtashamShahzad1 пре 1 месец
родитељ
комит
d1117b0054

+ 1 - 0
Info.plist

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

+ 1 - 0
meetings_app.xcodeproj/project.pbxproj

@@ -106,6 +106,7 @@
 				sv,
 				fi,
 				el,
+				he,
 				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", "el", "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", "he", "ko", "pt-BR", "ru", "vi", "zh-Hans", "zh-Hant"]
 
     /// `nil` follows the system language; otherwise uses the selected `.lproj` code.
     static var selectedLanguageCode: String? {
@@ -101,6 +101,8 @@ enum AppLanguageManager {
             return "Suomi"
         case "el":
             return "Ελληνικά"
+        case "he":
+            return "עברית"
         case "ko":
             return "한국어"
         case "pt-BR":

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

@@ -0,0 +1,4 @@
+"CFBundleDisplayName" = "עוזר בינה מלאכותית למיט של גוגל";
+"CFBundleName" = "עוזר בינה מלאכותית למיט של גוגל";
+"NSMicrophoneUsageDescription" = "בהסכמתך, האפליקציה תקליט את שמע הפגישה ב-Mac זה ותציג אותו בעוזר בינה מלאכותית לאחר הפגישה.";
+"NSSpeechRecognitionUsageDescription" = "אפליקציה זו ממירה את שמע הפגישות השמור שלך לתמלולי טקסט עבור עוזר בינה מלאכותית.";

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

@@ -0,0 +1,452 @@
+/* AppBrand.name ("Meetings") הושמט במכוון — שם האפליקציה נשאר ללא שינוי בקוד. */
+"AI Companion for 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" = "ווידג'טים";
+"AI Companion" = "עוזר בינה מלאכותית";
+"Settings" = "הגדרות";
+"Top meetings" = "פגישות מוצמדות";
+"No upcoming meetings" = "אין פגישות קרובות";
+"Sign Out" = "התנתקות";
+"Sign In" = "התחברות";
+"Quit" = "יציאה";
+
+/* MARK: - מסך בית */
+"Preparing your meetings workspace" = "מכין את סביבת העבודה שלך לפגישות";
+"CONNECTING SERVICES" = "מתחבר לשירותים";
+"READY" = "מוכן";
+"Plan smart, achieve more" = "תכנן בחוכמה, השג יותר";
+
+/* MARK: - ווידג'טים */
+"Add Widget to Desktop" = "הוסף ווידג'ט לשולחן העבודה";
+"Choose a size and add your Google Meet widget." = "בחר גודל והוסף את ווידג'ט מיט של גוגל שלך.";
+"Tip: Right-click a desktop widget to remove it." = "טיפ: לחץ לחיצה ימנית על ווידג'ט בשולחן העבודה כדי להסיר אותו.";
+"Removed %@ widget from desktop." = "הווידג'ט %@ הוסר משולחן העבודה.";
+"Added %@ widget from desktop." = "הווידג'ט %@ נוסף משולחן העבודה.";
+"Added %@ widget to desktop." = "הווידג'ט %@ נוסף לשולחן העבודה.";
+"Widgets are Premium only. Upgrade to add widgets." = "ווידג'טים זמינים ב-Premium בלבד. שדרג כדי להוסיף ווידג'טים.";
+"Remove Widget" = "הסר ווידג'ט";
+"Small" = "קטן";
+"Medium" = "בינוני";
+"Quick actions" = "פעולות מהירות";
+"Open Meet" = "פתח מיט של גוגל";
+"Upcoming meetings" = "פגישות קרובות";
+"Sign in to see upcoming meetings" = "התחבר כדי לראות פגישות קרובות";
+"Sign in with Google" = "התחבר עם גוגל";
+"Google Meet" = "מיט של גוגל";
+"Open and join quickly" = "פתח והצטרף במהירות";
+"Refresh" = "רענן";
+
+/* MARK: - סרגל צד וניווט */
+"Planning" = "תכנון";
+"Additional" = "נוסף";
+"Get Premium" = "קבל Premium";
+"Manage Subscription" = "נהל מנוי";
+"App for Google Meet" = "אפליקציה למיט של גוגל";
+
+/* MARK: - הצטרפות לפגישה */
+"New Instant Meet" = "מיט מיידי חדש";
+"Start instant Meet in more section with\nGoogle Meet meet." = "התחל מיט מיידי של גוגל בסעיף עוד\nעם מיט של גוגל.";
+"Join with Link" = "הצטרף עם קישור";
+"Code or meet.google.com/…" = "קוד או meet.google.com/…";
+"Join with ID" = "הצטרף עם מזהה";
+"Join with URL" = "הצטרף עם כתובת URL";
+"Meeting URL" = "כתובת URL של הפגישה";
+"Enter meeting URL..." = "הזן כתובת URL של הפגישה...";
+"Quick Join Meeting" = "הצטרפות מהירה לפגישה";
+"Invalid Meet link" = "קישור מיט של גוגל לא חוקי";
+"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)." = "הזן קישור מיט של גוגל או קוד פגישה חוקי (לדוגמה 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. לחץ כדי לפתוח את חומת התשלום.";
+"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." = "כדי להציג פגישות מתוזמנות, חבר את חשבון גוגל שלך. תזדקק למזהה לקוח OAuth של גוגל (שולחן עבודה) וכתובת URI להפניה מחדש התואמת את סכימת ה-callback של האפליקציה.";
+"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" = "שפת בינה מלאכותית 1";
+"AI Language 2" = "שפת בינה מלאכותית 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 זה ותציג אותו בעוזר בינה מלאכותית לאחר הפגישה.";
+"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: - עוזר בינה מלאכותית */
+"Get notes from your previous meetings" = "קבל הערות מהפגישות הקודמות שלך";
+"Connect your Google account to see your AI Companion meeting history." = "חבר את חשבון גוגל שלך כדי לראות את היסטוריית הפגישות של עוזר בינה מלאכותית.";
+"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. לחץ כדי לפתוח את הערות עוזר בינה מלאכותית.";
+"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: - חומת תשלום ו-StoreKit */
+"Meetings Pro" = "פגישות Pro";
+"PREMIUM EXPERIENCE" = "חוויית PREMIUM";
+"Elevate your meetings workflow" = "שדרג את זרימת העבודה של הפגישות שלך";
+"Unlock automation, premium meeting tools, and priority support for every session." = "פתח אוטומציה, כלי פגישות פרימיום ותמיכה בעדיפות לכל מפגש.";
+"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" = "מטופל על ידי אפל";
+"Secured by Apple. Cancel anytime." = "מאובטח על ידי אפל. בטל בכל עת.";
+"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 פעיל במזהה אפל זה.";
+"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." = "למזהה אפל זה יש כבר גישת 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." = "תוכנית זו כבר פעילה במזהה אפל שלך.";
+"Purchase Failed" = "הרכישה נכשלה";
+"Restore Purchases" = "שחזר רכישות";
+"Purchases restored successfully." = "הרכישות שוחזרו בהצלחה.";
+"No previous premium purchase was found for this Apple ID." = "לא נמצאה רכישת Premium קודמת עבור מזהה אפל זה.";
+"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. מבוקש: %@. מזהים שנטענו: %@";
+"Purchase verification failed." = "אימות הרכישה נכשל.";
+"Unknown purchase state." = "מצב רכישה לא ידוע.";
+"none" = "ללא";
+
+/* MARK: - טקסטים של מחירי חומת תשלום */
+"%@ one-time purchase" = "רכישה חד-פעמית %@";
+"%@/month" = "%@/חודש";
+"%@/6 months" = "%@/6 חודשים";
+"%@/year (3 days free trial)" = "%@/שנה (3 ימי ניסיון חינם)";
+"day" = "יום";
+"week" = "שבוע";
+"period" = "תקופה";
+"1 %@" = "1 %@";
+"%d %@s" = "%d %@";
+
+/* MARK: - הודעות קופצות ומשוב מהיר */
+"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." = "לא ניתן היה לקבוע את קוד הפגישה של מיט של גוגל מכתובת ה-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 %@" = "פגישה אחת ב-%@";
+"%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" = "יום אחד לפני";
+"12 Hours Before" = "12 שעות לפני";
+"1 Hour Before" = "שעה אחת לפני";
+"Starts in 1 day" = "מתחיל בעוד יום";
+"Starts in 12 hours" = "מתחיל בעוד 12 שעות";
+"Starts in 1 hour" = "מתחיל בעוד שעה";
+
+/* MARK: - שגיאות Google OAuth */
+"Missing Google OAuth Client ID." = "מזהה לקוח OAuth של גוגל חסר.";
+"Missing Google OAuth Client Secret." = "סוד לקוח OAuth של גוגל חסר.";
+"Invalid OAuth callback URL." = "כתובת URL של OAuth callback אינה חוקית.";
+"Google did not return an authorization code." = "גוגל לא החזירה קוד הרשאה.";
+"Token exchange failed: %@" = "החלפת אסימון נכשלה: %@";
+"Could not open browser for Google sign-in." = "לא ניתן היה לפתוח דפדפן להתחברות לגוגל.";
+"Google sign-in timed out." = "התחברות לגוגל פגה.";
+"No stored Google tokens found." = "לא נמצאו אסימוני גוגל שמורים.";
+
+/* MARK: - שגיאות עוזר בינה מלאכותית/תמלול */
+"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: - שגיאות Google API */
+"Google Meet returned an invalid response." = "מיט של גוגל החזירה תגובה לא חוקית.";
+"Google Meet API error (%d): %@" = "שגיאת API של מיט של גוגל (%d): %@";
+"Failed to parse Google Meet response: %@" = "פענוח תגובת מיט של גוגל נכשל: %@";
+"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." = "מפתח API של OpenAI חסר. הגדר 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" = "עזרה למיט של גוגל";
+"Go" = "עבור";
+"Back" = "אחורה";
+"Forward" = "קדימה";
+"Reload" = "רענן";
+
+/* MARK: - תוויות יומן ותזמון */
+"Google Calendar" = "יומן גוגל";
+"Untitled meeting" = "פגישה ללא כותרת";
+"Created event missing start/end." = "באירוע שנוצר חסר התחלה/סיום.";
+"Created event missing Meet/HTML link." = "באירוע שנוצר חסר קישור מיט של גוגל/HTML.";
+
+/* MARK: - חשבון Google */
+"Google account" = "חשבון גוגל";
+"%@, Google account" = "%@, חשבון גוגל";
+"Google User" = "משתמש גוגל";
+
+/* MARK: - הצטרפות ל-Zoom (חלקים לא בשימוש) */
+"Meeting ID" = "מזהה פגישה";
+"Enter meeting ID..." = "הזן מזהה פגישה...";
+"Meeting Passcode" = "קוד גישה לפגישה";
+"Enter meeting passcode..." = "הזן קוד גישה לפגישה...";
+
+/* MARK: - חומת תשלום (יתרונות חלופיים) */
+"Virtual backgrounds" = "רקעים וירטואליים";
+"Tools for productivity" = "כלים לפרודוקטיביות";
+"24/7 support" = "תמיכה 24/7";
+
+/* MARK: - דוברים בתמלול */
+"You" = "אתה";
+
+/* MARK: - שגיאות מחזיק מפתחות */
+"Failed to read OAuth tokens from Keychain." = "קריאת אסימוני OAuth ממחזיק המפתחות נכשלה.";
+"Keychain returned an invalid token payload." = "מחזיק המפתחות החזיר מטען אסימון לא חוקי.";
+"Failed to update OAuth tokens in Keychain." = "עדכון אסימוני OAuth במחזיק המפתחות נכשל.";
+"Failed to save OAuth tokens to Keychain." = "שמירת אסימוני OAuth במחזיק המפתחות נכשלה.";
+"Failed to delete OAuth tokens from Keychain." = "מחיקת אסימוני OAuth ממחזיק המפתחות נכשלה.";
+"Unable to allocate audio buffer." = "לא ניתן להקצות חוצץ שמע.";
+"Invalid revoke response." = "תגובת ביטול לא חוקית.";
+"Token revoke failed with status %d." = "ביטול אסימון נכשל עם סטטוס %d.";
+
+/* MARK: - אבחון שגיאות */
+"Keychain: %d (%@)" = "מחזיק מפתחות: %d (%@)";
+"OSStatus: %d" = "OSStatus: %d";
+"Item: service=%@, account=%@" = "פריט: service=%@, account=%@";

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

@@ -0,0 +1,17 @@
+/* Class = "NSMenuItem"; title = "AI Companion for Meet"; ObjectID = "1Xt-HY-uBw"; */
+"1Xt-HY-uBw.title" = "עוזר בינה מלאכותית למיט של גוגל";
+
+/* Class = "NSMenu"; title = "AI Companion for Meet"; ObjectID = "uQy-DD-JDr"; */
+"uQy-DD-JDr.title" = "עוזר בינה מלאכותית למיט של גוגל";
+
+/* Class = "NSMenuItem"; title = "About AI Companion for Meet"; ObjectID = "5kV-Vb-QxS"; */
+"5kV-Vb-QxS.title" = "אודות עוזר בינה מלאכותית למיט של גוגל";
+
+/* Class = "NSMenuItem"; title = "Hide AI Companion for Meet"; ObjectID = "Olw-nP-bQN"; */
+"Olw-nP-bQN.title" = "הסתר עוזר בינה מלאכותית למיט של גוגל";
+
+/* Class = "NSMenuItem"; title = "Quit AI Companion for Meet"; ObjectID = "4sb-4s-VLi"; */
+"4sb-4s-VLi.title" = "צא מעוזר בינה מלאכותית למיט של גוגל";
+
+/* Class = "NSMenuItem"; title = "AI Companion for Meet Help"; ObjectID = "FKE-Sm-Kum"; */
+"FKE-Sm-Kum.title" = "עזרה לעוזר בינה מלאכותית למיט של גוגל";