diff --git a/web/src/hooks/useUserLocale.ts b/web/src/hooks/useUserLocale.ts index 01fcc0ec..cd3946c3 100644 --- a/web/src/hooks/useUserLocale.ts +++ b/web/src/hooks/useUserLocale.ts @@ -26,7 +26,7 @@ export const useUserLocale = () => { document.documentElement.setAttribute("lang", currentLocale); // RTL languages - if (["ar", "fa"].includes(currentLocale)) { + if (["ar", "fa", "he"].includes(currentLocale)) { document.documentElement.setAttribute("dir", "rtl"); } else { document.documentElement.setAttribute("dir", "ltr"); diff --git a/web/src/i18n.ts b/web/src/i18n.ts index 8e9d9133..56d27646 100644 --- a/web/src/i18n.ts +++ b/web/src/i18n.ts @@ -19,6 +19,7 @@ export const locales = orderBy([ "fi", "fr", "gl", + "he", "hi", "hr", "hu", diff --git a/web/src/locales/he.json b/web/src/locales/he.json new file mode 100644 index 00000000..fdddee5d --- /dev/null +++ b/web/src/locales/he.json @@ -0,0 +1,972 @@ +{ + "about": { + "api-docs": "תיעוד API", + "api-docs-note": "עיון ב־REST וב־gRPC", + "blogs": "בלוגים", + "build": "פרטי הבנייה", + "commit": "קומיט", + "demo": "הדגמה", + "description": "שירות קליל לכתיבת פתקים, הממוקד בפרטיות. שמרו ושתפו בקלות את המחשבות הנהדרות שלכם.", + "distribution": "הפצה", + "documents": "מסמכים", + "documents-note": "פריסה, הגדרה ושימוש ב־Memos", + "github-repository": "מאגר GitHub", + "github-repository-note": "קוד המקור, בעיות וגרסאות", + "license": "רישיון", + "media": "מדיה", + "official-website": "האתר הרשמי", + "official-website-note": "דף הבית של הפרויקט", + "powered-by": "מופעל על ידי Memos", + "project": "פרויקט", + "project-links": "קישורי הפרויקט", + "web-clipper": "Web Clipper", + "web-clipper-platforms": "Chrome + Firefox" + }, + "auth": { + "admin-sign-in": "התחברות מנהל", + "admin-sign-in-tip": "התחברות באמצעות סיסמה נשארת זמינה למנהלים.", + "back-to-sign-in": "חזרה להתחברות", + "continue-with": "המשיכו עם {{provider}}", + "create-admin-account": "צור חשבון מנהל", + "create-your-account": "צרו את החשבון שלכם", + "explore-public-memos": "עיינו בפתקים הציבוריים במופע הזה", + "first-run": "הפעלה ראשונה", + "new-password": "סיסמה חדשה", + "protected-memo-notice": "הפתק הזה אינו ציבורי. התחברו כדי להמשיך.", + "repeat-new-password": "הקלידו שוב את הסיסמה החדשה", + "setup-description": "צרו את חשבון המנהל עבור המופע הזה.", + "setup-note": "חשבון זה מנהל את הגדרות המופע, החברים וספקי הזהות.", + "setup-title": "הגדירו את המופע שלכם", + "sign-in-tip": "כבר יש לכם חשבון?", + "sign-up-tip": "עדיין אין לכם חשבון?", + "signin-unavailable-description": "התחברות באמצעות סיסמה מושבתת ולא הוגדרו ספקי זהות. בקשו מהמנהל להפעיל שיטת התחברות.", + "signin-unavailable-title": "לא ניתן להתחבר", + "signup-unavailable-description": "חשבונות באמצעות סיסמה מושבתים ולא הוגדרו ספקי זהות. בקשו מהמנהל גישה.", + "signup-unavailable-title": "לא ניתן להירשם", + "signups-closed-description": "חשבונות חדשים מושבתים במופע הזה. פנו למנהל אם אתם זקוקים לגישה.", + "signups-closed-title": "ההרשמה סגורה", + "sso-signup-tip": "התחברו באמצעות ספק למטה כדי ליצור את החשבון שלכם.", + "welcome-back": "ברוכים הבאים." + }, + "demo": { + "banner-description": "אתם מוזמנים לסייר! ההדגמה מתאפסת מעת לעת.", + "banner-title": "הדגמת Memos", + "deploy-link": "פרסו מופע Memos משלכם" + }, + "attachment-details": { + "actions": { + "copied": "הקואורדינטות הועתקו", + "copy-coordinates": "העתק קואורדינטות", + "hide": "הסתר פרטי הקובץ המצורף", + "hide-map": "הסתר מפה", + "show": "הצג פרטי הקובץ המצורף", + "show-map": "הצג מפה" + }, + "empty": "אין מטא־נתונים שמורים של הצילום.", + "fields": { + "altitude": "גובה", + "camera": "מצלמה", + "captured": "זמן צילום", + "dimensions": "מידות", + "duration": "משך", + "exposure": "חשיפה", + "file": "קובץ", + "lens": "עדשה", + "location": "קואורדינטות", + "source-orientation": "כיוון EXIF המקורי", + "uploaded": "הועלה" + }, + "sections": { + "camera": "מצלמה", + "capture": "צילום", + "file": "קובץ", + "location": "מיקום", + "technical": "פרטים טכניים" + }, + "timezone-unknown": "אזור הזמן לא ידוע", + "title": "פרטים" + }, + "attachment-library": { + "actions": { + "open": "פתח", + "retry": "נסה שוב" + }, + "empty": { + "all": "אין קבצים מצורפים עדיין.", + "audio": "אין קבצי שמע מצורפים עדיין.", + "documents": "אין מסמכים מצורפים עדיין.", + "media": "אין קובצי מדיה מצורפים עדיין." + }, + "errors": { + "load": "טעינת הקבצים המצורפים נכשלה." + }, + "labels": { + "live": "חי", + "live-photo": "Live Photo", + "memo": "פתק", + "not-linked": "לא מקושר", + "unknown-date": "תאריך לא ידוע", + "unused": "לא בשימוש" + }, + "tabs": { + "audio": "שמע", + "documents": "מסמכים", + "media": "מדיה" + }, + "unused": { + "confirm-description": "פעולה זו מסירה כל קובץ שהועלה ואינו מקושר לפתק.", + "description": "קבצים אלה מעולם לא צורפו לפתק. עיינו בהם או הסירו אותם כאן.", + "title": "קבצים שהועלו ואינם מקושרים" + } + }, + "common": { + "about": "אודות", + "actions": "פעולות", + "add": "הוסף", + "admin": "מנהל", + "all": "הכול", + "archive": "ארכיון", + "archived": "בארכיון", + "attachments": "קבצים מצורפים", + "author": "מחבר", + "avatar": "תמונת פרופיל", + "basic": "בסיסי", + "beta": "בטא", + "calendar": "לוח שנה", + "cancel": "ביטול", + "change": "שינוי", + "clear": "נקה", + "close": "סגור", + "collapse": "כווץ", + "confirm": "אישור", + "copy": "העתק", + "create": "צור", + "created-at": "נוצר בתאריך", + "database": "מסד נתונים", + "day": "יום", + "days": { + "fri": "שישי", + "mon": "שני", + "sat": "שבת", + "sun": "ראשון", + "thu": "חמישי", + "tue": "שלישי", + "wed": "רביעי" + }, + "delete": "מחק", + "description": "תיאור", + "edit": "ערוך", + "email": "דוא״ל", + "empty-placeholder": "ריק", + "expand": "הרחב", + "explore": "גלה", + "file": "קובץ", + "filter": "סנן", + "home": "דף הבית", + "image": "תמונה", + "in": "ב־", + "inbox": "תיבת הדואר הנכנס", + "input": "קלט", + "language": "שפה", + "last-updated-at": "עודכן לאחרונה בתאריך", + "learn-more": "למידע נוסף", + "link": "קישור", + "location": "מיקום", + "manage": "ניהול", + "map": "מפה", + "mark": "סמן", + "memo": "פתק", + "memos": "פתקים", + "month-navigation": "ניווט בין חודשים", + "more": "עוד", + "name": "שם", + "new": "חדש", + "next-month": "החודש הבא", + "nickname": "כינוי", + "null": "ריק", + "or": "או", + "password": "סיסמה", + "pin": "הצמד", + "pinned": "מוצמד", + "previous-month": "החודש הקודם", + "preview": "תצוגה מקדימה", + "profile": "פרופיל", + "properties": "מאפיינים", + "referenced-by": "מופנה אליו על ידי", + "referencing": "מפנה אל", + "relations": "קשרים", + "remember-me": "זכור אותי", + "rename": "שנה שם", + "reset": "איפוס", + "resize-sidebar": "שנה את גודל סרגל הצד", + "resources": "משאבים", + "restore": "שחזר", + "role": "תפקיד", + "save": "שמור", + "search": "חיפוש", + "select": "בחר", + "settings": "הגדרות", + "share": "שיתוף", + "sign-in": "התחברות", + "sign-in-to-memos": "התחברו ל־Memos", + "sign-out": "התנתק", + "sign-up": "הרשמה", + "statistics": "סטטיסטיקה", + "tags": "תגיות", + "tasks": "משימות", + "title": "כותרת", + "today": "היום", + "tree-mode": "מצב עץ", + "type": "סוג", + "unlink": "נתק קישור", + "unpin": "בטל הצמדה", + "update": "עדכן", + "upload": "העלה", + "user": "משתמש", + "username": "שם משתמש", + "version": "גרסה", + "visibility": "נראות", + "views": "תצוגות", + "yourself": "עצמך" + }, + "locale-picker": { + "no-language-feedback": "לא מצאתם את השפה? שלחו משוב" + }, + "editor": { + "add-your-comment-here": "הוסיפו את התגובה שלכם כאן...", + "any-thoughts": "יש מחשבות...", + "exit-focus-mode": "יציאה ממצב מיקוד", + "focus-mode": "מצב מיקוד", + "formatting-toolbar": "סרגל עיצוב", + "format": { + "heading": "כותרת", + "paragraph": "פסקה", + "heading-1": "כותרת 1", + "heading-2": "כותרת 2", + "heading-3": "כותרת 3", + "bold": "מודגש", + "italic": "נטוי", + "strikethrough": "קו חוצה", + "code": "קוד בתוך השורה", + "code-block": "בלוק קוד", + "bullet-list": "רשימת תבליטים", + "ordered-list": "רשימה ממוספרת", + "task-list": "רשימת משימות", + "link": "קישור", + "link-prompt": "הזינו כתובת URL", + "more": "אפשרויות עיצוב נוספות" + }, + "insert-menu": { + "add-attachment": "הוסף קובץ מצורף", + "add-location": "הוסף מיקום", + "image-upload-failed": "לא ניתן להעלות חלק מהתמונות. נסו שוב או השאירו את התמונות שהועלו כקבצים מצורפים.", + "image-upload-stopped": "העלאת התמונה נעצרה {{completed}}/{{total}}", + "insert-image": "הוסף תמונה", + "keep-as-attachments": "שמור כקבצים מצורפים", + "link-memo": "קשר פתק", + "retry-image-upload": "נסה שוב", + "uploading-inline-image": "מעלה לתוכן", + "uploading-images": "מעלה תמונות {{completed}}/{{total}}", + "upload-file": "העלה קובץ" + }, + "no-changes-detected": "לא זוהו שינויים", + "save": "שמור", + "saving": "שומר...", + "validation": { + "cannot-save": "לא ניתן לשמור", + "content-required": "נדרש תוכן, קובץ מצורף או קובץ", + "finish-audio-recording": "סיימו את הקלטת השמע לפני השמירה", + "loading-content": "טוען את תוכן הפתק", + "resolve-image-uploads": "פתרו את העלאות התמונות לפני השמירה", + "save-in-progress": "השמירה מתבצעת", + "unsupported-attachment-image-url": "כתובת תמונה של קובץ מצורף אינה נתמכת: {{url}}", + "wait-for-upload": "המתינו לסיום ההעלאה" + }, + "unsupported-syntax-raw-mode": "פתק זה מכיל תחביר שעורך הטקסט העשיר אינו יכול לערוך בבטחה, ולכן הוא נפתח במצב Markdown גולמי.", + "wysiwyg-editor": "עורך WYSIWYG", + "audio-recorder": { + "attachment-label": "הקלטת שמע", + "attachment-label-with-time": "הקלטת שמע {{time}}", + "configure-ai-provider": "הגדירו תחילה ספק AI", + "discard": "השלך", + "error": "המיקרופון אינו זמין", + "error-description": "נסו שוב לאחר בדיקת הרשאת המיקרופון לאתר זה.", + "idle-description": "התחילו להקליט כדי להוסיף הקלטת שמע כקובץ מצורף.", + "keep": "המשך להקליט", + "pause-recording": "השהה הקלטת שמע", + "play-recording": "הפעל הקלטה", + "ready": "ההקלטה מוכנה", + "ready-description": "הציגו תצוגה מקדימה של הקטע, ואז שמרו אותו כקובץ שמע מצורף או השליכו אותו.", + "record-again": "הקלט שוב", + "recording": "מקליט שמע", + "recording-description": "הקליטו קובץ שמע מצורף במהירות. האורך הנוכחי: {{duration}}", + "requesting": "מבקש גישה...", + "requesting-permission": "מבקש גישה למיקרופון", + "requesting-permission-description": "אפשרו גישה למיקרופון בדפדפן כדי להתחיל להקליט.", + "start": "התחל הקלטה", + "stop": "עצור הקלטה", + "title": "מקליט שמע", + "transcribe": "תמלול", + "transcribe-empty": "לא זוהה דיבור", + "transcribe-error": "תמלול השמע נכשל", + "transcribe-success": "התמלול נוסף", + "transcribing": "מתמלל...", + "trigger": "הקלט שמע", + "unsupported": "הקלטת שמע אינה נתמכת", + "unsupported-description": "הדפדפן הזה אינו יכול להקליט שמע מעורך הפתקים." + } + }, + "inbox": { + "failed-to-load": "טעינת פריט מתיבת הדואר הנכנס נכשלה", + "memo-comment": "{{user}} הגיב/ה על {{memo}} שלכם.", + "no-archived": "אין התראות בארכיון", + "no-unread": "אין התראות שלא נקראו", + "unread": "לא נקרא" + }, + "live-update": { + "connected": "עדכונים חיים פעילים", + "connecting": "מתחבר לעדכונים חיים...", + "disconnected": "עדכונים חיים אינם זמינים" + }, + "markdown": { + "checkbox": "תיבת סימון", + "code-block": "בלוק קוד", + "content-syntax": "תחביר תוכן" + }, + "memo": { + "archived-at": "בארכיון בתאריך", + "click-to-hide-sensitive-content": "לחצו כדי להסתיר תוכן רגיש", + "click-to-show-sensitive-content": "לחצו כדי להציג תוכן רגיש", + "code": "קוד", + "comment": { + "self": "תגובות", + "write-a-comment": "כתבו תגובה" + }, + "copy-content": "העתק תוכן", + "copy-link": "העתק קישור", + "count-memos-in-date": "{{count}} {{memos}} בתאריך {{date}}", + "count-memos-updated-in-date": "עודכנו {{count}} {{memos}} בתאריך {{date}}", + "delete-confirm": "האם אתם בטוחים שברצונכם למחוק את הפתק הזה?\n\nפעולה זו אינה הפיכה", + "delete-confirm-description": "פעולה זו אינה הפיכה. גם קבצים מצורפים, קישורים והפניות יוסרו.", + "direction": "כיוון", + "direction-asc": "עולה", + "direction-desc": "יורד", + "display-time": "הצג זמן", + "filters": { + "has-code": "מכיל קוד", + "has-link": "מכיל קישור", + "has-location": "מכיל מיקום", + "has-task-list": "מכיל רשימת משימות", + "label": "מסננים" + }, + "compact-mode": "מצב קומפקטי", + "grid-compact-hint": "פריסות רשת משתמשות תמיד בכרטיסים קומפקטיים.", + "layout": "פריסה", + "layout-auto": "אוטומטי", + "layout-auto-description": "מספר העמודות המרבי שמתאים למסך", + "layout-columns": "{{n}} עמודות", + "layout-columns-description": "עד {{n}} עמודות כאשר הרוחב מאפשר", + "layout-list": "רשימה", + "layout-list-description": "עמודה יחידה ברוחב קריא", + "link-preview": "תצוגה מקדימה של קישור", + "links": "קישורים", + "load-more": "טען עוד", + "no-archived-memos": "אין פתקים בארכיון", + "no-memos": "אין פתקים.", + "new-badge": "חדש", + "newest-first": "החדשים ביותר תחילה", + "oldest-first": "הישנים ביותר תחילה", + "order": "סדר", + "order-by": "מיין לפי", + "outline": "מתאר", + "search-placeholder": "חיפוש בפתקים...", + "shown-time": "זמן מוצג", + "share": { + "active-links": "קישורי שיתוף פעילים", + "copied": "הועתק!", + "copy": "העתק קישור", + "create-failed": "יצירת קישור השיתוף נכשלה", + "create-link": "צור קישור חדש", + "creating": "יוצר…", + "expiry-1-day": "יום אחד", + "expiry-30-days": "30 ימים", + "expiry-7-days": "7 ימים", + "expiry-label": "תפוגה", + "expiry-never": "לעולם לא", + "image-description": "תצוגה מקדימה ברוחב המכשיר הנוכחי שלכם ({{width}}px).", + "image-download": "הורד PNG", + "image-download-failed": "ייצוא התמונה נכשל", + "image-downloaded": "התמונה נשמרה", + "image-footer": "שותף מ־Memos", + "image-share": "שתף תמונה", + "image-share-failed": "שיתוף התמונה נכשל", + "image-title": "שתף כתמונה", + "expires-on": "יפוג תוקף בתאריך {{date}}", + "invalid-link": "הקישור הזה אינו תקין או שפג תוקפו.", + "never-expires": "אינו פג לעולם", + "no-links": "עדיין אין קישורי שיתוף. צרו קישור למטה.", + "open-image": "שתף כתמונה", + "open-panel": "ניהול קישורי שיתוף", + "revoke": "בטל", + "revoke-failed": "ביטול הקישור נכשל", + "revoked": "קישור השיתוף בוטל", + "section-label": "שיתוף", + "share": "שתף", + "shared-by": "שותף על ידי {{creator}}", + "title": "שתפו את הפתק הזה" + }, + "show-less": "הצג פחות", + "show-more": "הצג עוד", + "to-do": "משימה", + "task-actions": { + "check-all": "סמן את כל המשימות", + "title": "משימות", + "uncheck-all": "בטל סימון של כל המשימות", + "updated": "המשימות עודכנו" + }, + "view-detail": "הצג פרטים", + "view-options": "אפשרויות תצוגה", + "visibility": { + "disabled": "פתקים ציבוריים מושבתים", + "private": "פרטי", + "private-description": "גלוי רק לכם", + "protected": "מוגן", + "protected-description": "גלוי למשתמשים מחוברים", + "public": "ציבורי", + "public-description": "גלוי לכולם" + } + }, + "message": { + "archived-successfully": "הועבר לארכיון בהצלחה", + "change-memo-created-time": "שינוי זמן יצירת הפתק", + "copied": "הועתק", + "deleted-successfully": "הפתק נמחק בהצלחה", + "description-is-required": "נדרש תיאור", + "failed-to-embed-memo": "הטמעת הפתק נכשלה", + "fill-all": "מלאו את כל השדות.", + "fill-all-required-fields": "מלאו את כל השדות הנדרשים", + "maximum-upload-size-is": "גודל ההעלאה המרבי המותר הוא {{size}} MiB", + "memo-not-found": "הפתק לא נמצא.", + "new-password-not-match": "הסיסמאות החדשות אינן תואמות.", + "no-data": "לא נמצאו נתונים.", + "password-changed": "הסיסמה שונתה", + "password-not-match": "הסיסמאות אינן תואמות.", + "restored-successfully": "שוחזר בהצלחה", + "succeed-copy-content": "התוכן הועתק בהצלחה.", + "succeed-copy-link": "הקישור הועתק בהצלחה.", + "update-succeed": "העדכון הצליח", + "user-not-found": "המשתמש לא נמצא" + }, + "reference": { + "add-references": "הוסף הפניות", + "embedded-usage": "השתמש כתוכן מוטמע", + "no-memos-found": "לא נמצאו פתקים", + "search-placeholder": "חיפוש בתוכן" + }, + "resource": { + "clear": "נקה", + "copy-link": "העתק קישור", + "create-dialog": { + "external-link": { + "file-name": "שם הקובץ", + "file-name-placeholder": "שם הקובץ", + "link": "קישור", + "link-placeholder": "https://the.link.to/your/resource", + "option": "קישור חיצוני", + "type": "סוג", + "type-placeholder": "סוג הקובץ" + }, + "local-file": { + "choose": "בחר קובץ…", + "option": "קובץ מקומי" + }, + "title": "צור משאב", + "upload-method": "שיטת העלאה" + }, + "delete-all-unused": "מחק את כל המשאבים שאינם בשימוש", + "delete-all-unused-confirm": "האם אתם בטוחים שברצונכם למחוק את כל המשאבים שאינם בשימוש? פעולה זו אינה הפיכה", + "delete-all-unused-error": "מחיקת המשאבים שאינם בשימוש נכשלה", + "delete-all-unused-success": "המשאבים נמחקו בהצלחה", + "delete-resource": "מחק משאב", + "delete-selected-resources": "מחק את המשאבים שנבחרו", + "fetching-data": "מביא נתונים…", + "file-drag-drop-prompt": "גררו את הקובץ לכאן כדי להעלות אותו", + "linked-amount": "כמות מקושרת", + "no-files-selected": "לא נבחרו קבצים", + "no-resources": "אין משאבים.", + "no-unused-resources": "אין משאבים שאינם בשימוש", + "reset-link": "אפס קישור", + "reset-link-prompt": "האם אתם בטוחים שברצונכם לאפס את הקישור? פעולה זו תנתק את כל השימושים הנוכחיים בקישור.\n\nפעולה זו אינה הפיכה", + "reset-resource-link": "אפס קישור למשאב", + "unused-resources": "משאבים שאינם בשימוש" + }, + "router": { + "back-to-top": "חזרה לראש הדף", + "go-to-home": "עבור לדף הבית" + }, + "setting": { + "access-token": { + "access-token-copied-to-clipboard": "אסימון הגישה הועתק ללוח", + "access-token-deleted": "אסימון הגישה `{{description}}` נמחק", + "access-token-deletion": "האם אתם בטוחים שברצונכם למחוק את אסימון הגישה `{{description}}`?", + "access-token-deletion-description": "פעולה זו אינה הפיכה. יהיה עליכם לעדכן את כל השירותים המשתמשים באסימון הזה כדי להשתמש באסימון חדש.", + "create-dialog": { + "access-token-created": "אסימון הגישה `{{description}}` נוצר", + "create-access-token": "צור אסימון גישה", + "description": "תיאור", + "duration-1m": "חודש אחד", + "duration-90d": "90 ימים", + "duration-8h": "8 שעות", + "duration-never": "לעולם לא", + "expiration": "תפוגה", + "some-description": "תיאור כלשהו..." + }, + "create-first": "צרו את האסימון הראשון שלכם", + "description": "רשימת כל אסימוני הגישה לחשבון שלכם.", + "about-description": "אסימון גישה אישי (PAT) הוא מפתח סודי שמאמת בקשות API כחשבון שלכם. כל אפליקציה או סקריפט שמחזיקים בו — שרת MCP, CLI או לקוח נייד — יכולים לבצע ב־Memos כל פעולה שאתם יכולים לבצע, עד שהאסימון יפוג או שתמחקו אותו. שלחו אותו כאישור Bearer בכותרת Authorization:", + "empty-description": "אסימון מאפשר לסקריפט או לאפליקציה לקרוא ל־API בשמכם. הוא מוצג פעם אחת בעת היצירה, ולאחר מכן מופיע כאן כדי שתוכלו לבטל אותו.", + "empty-title": "אין עדיין אסימוני גישה", + "expires": "יפוג תוקף", + "guideline-shown-once": "אסימון מוצג פעם אחת בלבד, מיד לאחר יצירתו (הוא מועתק ללוח). שמרו אותו במקום בטוח, למשל במנהל סיסמאות.", + "guideline-one-per-app": "צרו אסימון נפרד לכל אפליקציה או סקריפט, כדי שתוכלו לבטל אחד מהם בלי לפגוע באחרים.", + "guideline-expiration": "העדיפו אסימונים שתוקפם יפוג. אסימונים ארוכי־טווח מהווים סיכון גדול יותר אם הם דולפים.", + "guideline-review": "בדקו מדי פעם את זמן השימוש האחרון ומחקו אסימונים שאינכם מזהים או שאינכם צריכים.", + "how-to-use": "כיצד להשתמש באסימון", + "label": "אסימוני גישה", + "last-used": "בשימוש לאחרונה", + "never-used": "מעולם לא היה בשימוש", + "no-expiration": "ללא תפוגה", + "title": "אסימוני גישה", + "token": "אסימון", + "web-clipper-title": "השתמשו באסימון עם Web Clipper של Memos" + }, + "account": { + "change-password": "שנה סיסמה", + "danger-area": "אזור מסוכן", + "danger-area-description": "פעולות בלתי הפיכות של החשבון נמצאות כאן. בדקו אותן היטב לפני שתמשיכו.", + "delete-account": "מחק חשבון", + "delete-account-description": "הסירו לצמיתות את החשבון הזה ואת כל הגישות המשויכות אליו מהמופע. אי אפשר לבטל פעולה זו.", + "email-note": "אופציונלי", + "export-memos": "ייצוא פתקים", + "nickname-note": "מוצג בכותרת", + "openapi-reset": "איפוס מפתח OpenAPI", + "openapi-sample-post": "שלום #הפתקיםשלי מאת {{url}}", + "openapi-title": "OpenAPI", + "reset-api": "אפס API", + "title": "פרטי החשבון", + "update-information": "עדכון פרטים", + "username-note": "משמש להתחברות" + }, + "ai": { + "add-provider": "הוסף ספק", + "api-key": "מפתח API", + "api-key-required": "נדרש מפתח API.", + "byok-description": "חברו את OpenAI או Gemini באמצעות מפתח API מהחשבון שלכם. Memos קורא לספק ישירות מהשרת הזה.", + "byok-key-note": "השתמשו במפתח מחשבון הספק שלכם; Memos אינו כולל פרטי גישה משותפים ל־AI.", + "byok-label": "BYOK", + "byok-model-note": "Memos בוחר מודלים נתמכים עבור תכונות כמו תמלול שמע.", + "byok-storage-note": "המפתחות נשארים במופע הזה ומוסתרים בעת טעינת ההגדרות.", + "byok-title": "השתמשו בחשבון ה־AI שלכם", + "configured": "מוגדר", + "current-key": "מפתח נוכחי: {{key}}", + "default-endpoint": "נקודת קצה של ברירת המחדל", + "delete-provider": "למחוק את ספק ה־AI `{{title}}`?", + "description": "מפתחות ספק מסופקים על ידי בעל המופע ומשמשים תכונות AI בצד השרת.", + "dialog-description": "הוסיפו מפתח מחשבון הספק שלכם. Memos משתמש במודלים מובנים לכל ספק; השאירו את מפתח ה־API ריק בעת העריכה כדי לשמור על המפתח הקיים.", + "edit-provider": "ערוך ספק", + "endpoint": "נקודת קצה", + "endpoint-hint": "השאירו ריק כדי להשתמש בנקודת הקצה הרשמית של הספק.", + "integrations-description": "מפתחות ספק מסופקים על ידי בעל המופע ומשמשים תכונות AI בצד השרת.", + "integrations-title": "שילובי AI", + "keep-api-key": "השאירו ריק כדי לשמור על המפתח הקיים", + "label": "AI", + "no-providers": "לא הוגדרו ספקי AI.", + "provider-title": "שם הספק", + "provider-title-required": "נדרש שם ספק.", + "provider-type": "סוג הספק", + "providers": "ספקים", + "transcription-description": "הגדרות המרת דיבור לטקסט המשמשות בעת הקלטת שמע בעורך הפתקים.", + "transcription-empty-providers": "הוסיפו תחילה שילוב AI כדי להפעיל תמלול.", + "transcription-language-help": "קוד קצר ISO 639-1 (לדוגמה en, de, zh). השאירו ריק לזיהוי אוטומטי.", + "transcription-language-placeholder": "זיהוי אוטומטי", + "transcription-language": "שפת ברירת מחדל", + "transcription-model-help": "טקסט חופשי. השתמשו במזהה המודל של הספק — לדוגמה whisper-1, gpt-4o-transcribe, whisper-large-v3-turbo.", + "transcription-model-placeholder-gemini": "gemini-2.5-flash, gemini-2.5-pro", + "transcription-model-placeholder-openai": "whisper-1, gpt-4o-transcribe, gpt-4o-mini-transcribe, gpt-4o-transcribe-diarize", + "transcription-model": "מודל", + "transcription-no-provider": "ללא — התמלול מושבת", + "transcription-prompt-help": "משפר את האיות של שמות פרטיים וז׳רגון. OpenAI Whisper מתייחס לכך כרמז עדין (המגבלה של Whisper היא בערך 224 טוקנים). Gemini מתייחס לכך כהוראה מילולית בתוך הנחיית היצירה.", + "transcription-prompt-placeholder": "שמות: Alice, Bob. מילון מונחים: kubernetes, OAuth.", + "transcription-prompt": "רמזים להנחיה", + "transcription-provider": "ספק", + "transcription-title": "תמלול", + "transcription-warning-no-key": "לספק שנבחר לא הוגדר מפתח API. ערכו את השילוב שלמעלה כדי להוסיף אותו." + }, + "instance": { + "access-description": "שליטה בהרשמה, באימות, בעריכת הפרופיל ובהגדרות ברירת המחדל של לוח השנה עבור המופע הזה.", + "access-title": "גישה ומדיניות", + "disallow-change-nickname-description": "מנעו ממשתמשים לשנות את שם התצוגה שלהם.", + "disallow-change-nickname": "אל תאפשר שינוי כינוי", + "disallow-change-username-description": "מנעו ממשתמשים לשנות את שם המשתמש שלהם להתחברות.", + "disallow-change-username": "אל תאפשר שינוי שם משתמש", + "disallow-password-auth-description": "דרשו ממשתמשים להתחבר דרך ספק זהות במקום באמצעות סיסמה.", + "disallow-password-auth": "אל תאפשר אימות באמצעות סיסמה", + "disallow-user-registration-description": "מנעו ממשתמשים חדשים ליצור חשבונות מדף ההרשמה.", + "disallow-user-registration": "אל תאפשר הרשמת משתמשים", + "monday": "שני", + "saturday": "שבת", + "sunday": "ראשון", + "week-start-day-description": "שולט ביום הראשון שמוצג בתצוגות בסגנון לוח שנה.", + "week-start-day": "יום תחילת השבוע" + }, + "member": { + "active": "פעיל", + "admin": "מנהל", + "archive-member": "העבר חבר לארכיון", + "archived": "בארכיון", + "archive-success": "{{username}} הועבר/ה לארכיון בהצלחה", + "archive-warning": "האם אתם בטוחים שברצונכם להעביר את {{username}} לארכיון?", + "archive-warning-description": "העברה לארכיון משביתה את החשבון. תוכלו לשחזר אותו או למחוק אותו מאוחר יותר.", + "create-a-member": "צור חבר", + "delete-member": "מחק חבר", + "delete-success": "{{username}} נמחק/ה בהצלחה", + "delete-warning": "האם אתם בטוחים שברצונכם למחוק את {{username}}? פעולה זו אינה הפיכה", + "delete-warning-description": "פעולה זו אינה הפיכה", + "label": "חבר", + "list-title": "רשימת חברים", + "member-column": "חבר", + "restore-success": "{{username}} שוחזר/ה בהצלחה", + "summary-column": "סיכום", + "user": "משתמש", + "no-members-found": "לא נמצאו חברים" + }, + "memo": { + "add-reaction": "הוסף תגובה", + "bytes-unit": "בתים", + "configured-reactions": "תגובות שהוגדרו", + "content-length-limit": "מגבלת אורך תוכן (בתים)", + "content-length-limit-description": "גודל גוף הפתק המרבי שהשרת מקבל.", + "double-click-edit-description": "אפשרו למשתמשים לפתוח עריכת פתק בלחיצה כפולה על פתק.", + "editing-description": "שליטה בהתנהגות עריכת הפתקים ובמגבלות התוכן בצד השרת.", + "editing-title": "עריכה", + "enable-blur-sensitive-content": "אפשר טשטוש תוכן רגיש (NSFW)", + "enable-memo-comments": "אפשר תגובות על פתקים", + "enable-memo-location": "אפשר מיקום בפתקים", + "label": "פתק", + "reaction-placeholder": "לדוגמה 👍", + "reactions-description": "הגדירו את אפשרויות התגובה שמשתמשים יכולים להחיל על פתקים.", + "remove-reaction": "הסר תגובה", + "reactions": "תגובות", + "title": "הגדרות פתקים", + "reactions-required": "רשימת התגובות לא יכולה להיות ריקה" + }, + "my-account": { + "label": "החשבון שלי" + }, + "notification": { + "email-description": "שלחו עותקי דוא״ל לתגובות ולאזכורים בפתקים. Gmail פועל עם smtp.gmail.com, יציאה 587, STARTTLS וסיסמת אפליקציה.", + "email-enabled": "אפשר התראות בדוא״ל", + "email-enabled-description": "הדוא״ל נשלח בנוסף להתראה בתיבת הדואר הנכנס באפליקציה. מלאו את השדות הנדרשים לפני שתפעילו זאת למשתמשים.", + "email-title": "שליחת דוא״ל", + "from-email": "דוא״ל השולח", + "from-email-description": "כתובת השולח שמוצגת בדוא״לי ההתראות. עבור Gmail, השתמשו באותו חשבון Gmail כמו בשם המשתמש של SMTP.", + "from-name": "שם השולח", + "from-name-description": "שם התצוגה שמוצג לצד כתובת השולח. השאירו ריק כדי להציג רק את כתובת הדוא״ל.", + "label": "התראות", + "reply-to": "כתובת למענה", + "reply-to-description": "כתובת לתשובות לדוא״לי ההתראות. השאירו ריק כדי לקבל תשובות בכתובת דוא״ל השולח.", + "requirement-gmail": "נדרש עבור Gmail", + "requirement-optional": "אופציונלי", + "requirement-recommended": "מומלץ", + "requirement-required": "נדרש", + "smtp-host": "שרת SMTP", + "smtp-host-description": "שם המארח של שרת ה־SMTP. השתמשו ב־smtp.gmail.com עבור Gmail.", + "smtp-password": "סיסמת SMTP", + "smtp-password-description": "סיסמת SMTP או אסימון ייעודי לאפליקציה. Gmail דורש סיסמת אפליקציה של Google, לא את סיסמת החשבון הרגילה.", + "smtp-password-placeholder-existing": "השאירו ריק כדי לשמור על הסיסמה הנוכחית", + "smtp-password-preserve-description": "השאירו ריק כדי לשמור על סיסמת ה־SMTP הקיימת. הזינו סיסמת אפליקציה חדשה רק בעת החלפת פרטי הגישה.", + "smtp-port": "יציאת SMTP", + "smtp-port-description": "השתמשו ב־587 עם STARTTLS עבור Gmail ורוב הספקים. השתמשו ב־465 רק בעת הפעלת SSL/TLS.", + "smtp-username": "שם משתמש SMTP", + "smtp-username-description": "שם המשתמש לאימות. Gmail דורש את כתובת ה־Gmail המלאה שלכם.", + "test-email": "שלח דוא״ל בדיקה", + "test-email-missing-recipient": "הגדירו כתובת דוא״ל בחשבון שלכם לפני שליחת דוא״ל בדיקה.", + "test-email-sending": "שולח דוא״ל בדיקה...", + "test-email-success": "דוא״ל בדיקה נשלח אל {{email}}.", + "use-ssl": "השתמש ב־SSL/TLS", + "use-ssl-description": "השתמשו ב־TLS מובלע, בדרך כלל עם יציאה 465. כבו אפשרות זו בעת שימוש ב־STARTTLS ביציאה 587.", + "use-tls": "השתמש ב־STARTTLS", + "use-tls-description": "שדרגו את חיבור ה־SMTP באמצעות STARTTLS. השאירו אפשרות זו מופעלת עבור Gmail ביציאה 587." + }, + "preference": { + "appearance-description": "בחרו כיצד האפליקציה נראית ובאיזו שפה החשבון שלכם משתמש.", + "appearance-title": "מראה", + "default-memo-sort-option": "זמן הצגת הפתק", + "default-memo-visibility": "נראות ברירת המחדל של הפתק", + "default-memo-visibility-description": "הנראות שחלה על פתקים חדשים שנוצרו, אלא אם תשנו אותה בעורך.", + "label": "העדפות", + "language-description": "מעדכן את שפת הממשק באופן מיידי ושומר אותה בחשבון שלכם.", + "memo-defaults-description": "הגדירו את ברירות המחדל המשמשות בעת כתיבת פתקים חדשים.", + "memo-defaults-title": "ברירות מחדל של פתקים", + "save-media-metadata": "שמור מטא־נתונים של מדיה", + "save-media-metadata-description": "עבור העלאות עתידיות, שמרו את דגם המצלמה, זמן הצילום, המיקום, מידות התמונה ופרטי וידאו בסיסיים הזמינים. כל מי שיכול לצפות בקובץ המצורף עשוי לקבל מטא־נתונים אלה. קבצים מצורפים קיימים לא ישתנו.", + "theme-description": "החל את ערכת הנושא שנבחרה באופן מיידי במכשיר הזה.", + "theme": "ערכת נושא", + "uploads-privacy-description": "שליטה במידע רגיש לפרטיות שנשלח עם מדיה שהועלתה.", + "uploads-privacy-title": "העלאות ופרטיות" + }, + "memo-view": { + "delete-confirm": "האם אתם בטוחים שברצונכם למחוק את התצוגה `{{title}}`?", + "delete-success": "התצוגה `{{title}}` נמחקה בהצלחה" + }, + "sso": { + "account": "חשבון", + "accounts-description": "עיינו בכל ספק זהות, בדקו את מצב הקישור הנוכחי וחברו או נתקו זהויות חיצוניות מהחשבון הזה.", + "accounts-title": "חשבונות SSO", + "authorization-endpoint": "נקודת קצה של הרשאה", + "avatar-url": "כתובת URL של תמונת פרופיל", + "basic-settings": "הגדרות בסיסיות", + "basic-settings-description": "הגדירו את זהות הספק, את שם התצוגה ואת כללי המזהים האופציונליים לפני מילוי פרטי OAuth.", + "client-id": "מזהה לקוח", + "client-secret": "סוד לקוח", + "client-secret-optional-description": "השאירו ריק כדי להשאיר את סוד הלקוח הקיים ללא שינוי.", + "configuration": "הגדרה", + "configuration-summary-description": "הציגו את הפרטים החיוניים לזיהוי וביקורת של ספק בלי לחשוף את התצורה המלאה בתוך השורה.", + "confirm-delete": "האם אתם בטוחים שברצונכם למחוק את הגדרת ה־SSO \"{{name}}\"? פעולה זו אינה הפיכה", + "create-sso": "צור SSO", + "create-sso-description": "צרו ספק זהות חדש להתחברות יחידה המנוהלת על ידי מנהל.", + "custom": "מותאם אישית", + "delete-sso": "אישור מחיקה", + "disabled-password-login-warning": "התחברות באמצעות סיסמה מושבתת. היזהרו בעת הסרת ספקי זהות", + "endpoints": "נקודות קצה", + "display-name": "שם תצוגה", + "extern-uid": "מזהה חיצוני", + "extern-uid-description": "זהו מזהה הזהות מצד הספק שמקושר כרגע לחשבון שלכם.", + "filter-disabled": "מושבת", + "identifier": "מזהה", + "identifier-filter": "סינון מזהה", + "identifier-filter-description": "ביטוי רגולרי אופציונלי המשמש לאפשר או להגביל אילו מזהים חיצוניים יכולים להתחבר.", + "field-mapping": "מיפוי הצהרות", + "field-mapping-description": "מפו את שדות הפרופיל שמגיעים מהספק כדי לזהות את המשתמש ולמלא מראש נתוני פרופיל.", + "field-mapping-identifier-description": "משמש כמזהה החיצוני היציב בעת התחברות או קישור חשבון.", + "linked": "מקושר", + "label": "התחברות יחידה", + "mapping": "מיפוי", + "mapping-avatar-short": "תמונה", + "mapping-display-name-short": "שם", + "mapping-email-short": "דוא״ל", + "mapping-identifier-short": "מזהה", + "mapping-none": "לא הוגדר", + "no-sso-found": "לא נמצא SSO.", + "not-linked": "לא מקושר", + "not-linked-description": "עדיין לא קושרה זהות חיצונית. תוכלו לחבר את הספק הזה כדי להתחבר באמצעותו מאוחר יותר.", + "oauth-configuration": "הגדרת OAuth", + "oauth-configuration-description": "מלאו את פרטי הכניסה של לקוח OAuth ואת נקודות הקצה של הספק המשמשות בעת ההתחברות.", + "provider": "ספק", + "provider-id": "מזהה ספק", + "provider-id-description": "מותר להשתמש באותיות קטנות, מספרים ומקפים בלבד. ערך זה יהפוך לחלק משם המשאב של הספק.", + "provider-uid": "UID", + "redirect-url": "כתובת להפניה", + "redirect-url-description": "רשמו את כתובת החזרה הזו אצל ספק הזהות שלכם כדי שתהליך קוד ההרשאה יוכל להסתיים.", + "scope-count_one": "{{count}} טווח", + "scope-count_other": "{{count}} טווחים", + "scopes": "טווחים", + "scopes-description": "הפרידו בין טווחים ברווחים. רוב הספקים זקוקים רק לקבוצה קטנה כגון profile או email.", + "single-sign-on": "הגדרת התחברות יחידה (SSO) לאימות", + "sso-created": "ה־SSO {{name}} נוצר", + "sso-list": "רשימת SSO", + "sso-updated": "ה־SSO {{name}} עודכן", + "template": "תבנית", + "template-description": "התחילו מתבנית ספק, ואז התאימו את פרטי הכניסה ואת נקודות הקצה למופע שלכם.", + "unlink-success": "הקישור של {{name}} נותק.", + "token-endpoint": "נקודת קצה של אסימון", + "update-sso": "עדכן SSO", + "update-sso-description": "בדקו את תצורת הספק, ואז שמרו את השדות שצריכים להשתנות.", + "user-endpoint": "נקודת קצה של משתמש" + }, + "storage": { + "accesskey": "מפתח גישה", + "accesskey-description": "מזהה מפתח הגישה של הדלי או השירות התואם ל־S3.", + "accesskey-placeholder": "מפתח גישה / מזהה גישה", + "badge-default": "ברירת מחדל", + "badge-recommended": "מומלץ", + "bucket": "דלי אחסון", + "bucket-description": "הדלי שבו יאוחסנו אובייקטים חדשים של קבצים מצורפים.", + "bucket-placeholder": "שם הדלי", + "create-a-service": "צור שירות", + "create-storage": "צור אחסון", + "current-storage": "אחסון האובייקטים הנוכחי", + "current-storage-description": "בחרו היכן יאוחסנו קבצים מצורפים חדשים. קבצים קיימים יישארו במיקום האחסון הנוכחי שלהם.", + "database-description": "אחסנו ישירות את נתוני הקבצים המצורפים במסד הנתונים של האפליקציה.", + "database-note-backup": "קל לגבות יחד עם הפתקים במופעים קטנים.", + "database-note-size": "מסד הנתונים עלול לגדול במהירות עם קבצים מצורפים רבים או גדולים.", + "delete-storage": "מחק אחסון", + "endpoint": "נקודת קצה", + "endpoint-description": "נקודת קצה של השירות, כגון AWS S3, Cloudflare R2, MinIO או כתובת תואמת אחרת.", + "filepath-template": "תבנית נתיב קובץ", + "filepath-template-description": "משמש באחסון מקומי וב־S3. תומך ב־{timestamp}, {uuid} ו־{filename}. ברירת מחדל: assets/{timestamp}_{uuid}_{filename}.", + "insecure-skip-tls-verify": "דלג על אימות TLS", + "insecure-skip-tls-verify-description": "השביתו את אימות תעודת ה־TLS עבור נקודת הקצה של S3. הפעילו רק עבור נקודות קצה מהימנות המשתמשות בתעודה בחתימה עצמית; פעולה זו מסירה את ההגנה מפני התקפת אדם בתווך.", + "label": "אחסון", + "local-description": "אחסנו קבצים מצורפים חדשים במערכת הקבצים של השרת. זו ברירת המחדל במופעים חדשים.", + "local-note-backup": "שמרו וגבו את תיקיית הקבצים המצורפים, במיוחד בפריסות Docker או במכולות.", + "local-note-path": "נתיבים יחסיים נכתבים תחת תיקיית נתוני הפרופיל של המופע.", + "local-storage-path": "נתיב אחסון מקומי", + "path": "נתיב אחסון", + "path-description": "אפשר להשתמש באותם משתנים דינמיים כמו באחסון המקומי, למשל {filename}", + "path-placeholder": "נתיב/מותאם אישית", + "presign-placeholder": "כתובת חתומה מראש, אופציונלי", + "region": "אזור", + "region-description": "האזור הנדרש על ידי הספק. עבור שירותים תואמים מסוימים, כל מחרוזת אזור שהספק מקבל תספיק.", + "region-placeholder": "שם האזור", + "s3-configuration": "הגדרות S3", + "s3-configuration-description": "הגדירו דלי תואם S3 עבור קבצים מצורפים חדשים.", + "s3-description": "אחסנו קבצים מצורפים חדשים בשירות אחסון אובייקטים תואם S3.", + "s3-note-config": "נדרשות נקודת קצה, אזור, דלי, פרטי גישה, הרשאות וגישה לרשת של השרת תקינים.", + "s3-note-scale": "מתאים במיוחד לספריות קבצים מצורפים גדולות, לפריסות ענן או למספר מופעי אפליקציה.", + "s3-compatible-url": "כתובת תואמת S3", + "secretkey": "מפתח סודי", + "secretkey-description": "מפתח הגישה הסודי של הדלי או השירות התואם ל־S3.", + "secretkey-preserve-description": "השאירו ריק כדי לשמור על המפתח הסודי הקיים.", + "secretkey-placeholder": "מפתח סודי / מפתח גישה", + "selected-backend": "נבחר", + "storage-services": "שירותי אחסון", + "type-database": "מסד נתונים", + "type-local": "מערכת קבצים מקומית", + "type-s3": "אחסון תואם S3", + "update-a-service": "עדכן שירות", + "update-local-path": "עדכן נתיב מקומי", + "update-local-path-description": "נתיב האחסון המקומי הוא נתיב יחסי לקובץ מסד הנתונים שלכם", + "update-storage": "עדכן אחסון", + "url-prefix": "קידומת כתובת", + "url-prefix-placeholder": "קידומת כתובת מותאמת אישית, אופציונלי", + "url-suffix": "סיומת כתובת", + "url-suffix-placeholder": "סיומת כתובת מותאמת אישית, אופציונלי", + "use-path-style": "השתמש בכתובות URL בסגנון נתיב", + "use-path-style-description": "הפעילו זאת עבור ספקים כגון MinIO או שירותים תואמי S3 שאינם תומכים בדליים בסגנון מארח וירטואלי.", + "warning-text": "האם אתם בטוחים שברצונכם למחוק את שירות האחסון \"{{name}}\"? פעולה זו אינה הפיכה" + }, + "system": { + "additional-script": "סקריפט נוסף", + "additional-script-description": "הזריקו JavaScript לכל דף אינטרנט. השתמשו רק בקוד מהימן.", + "additional-script-placeholder": "קוד JavaScript נוסף", + "additional-style": "סגנון נוסף", + "additional-style-description": "הזריקו CSS לאפליקציית האינטרנט כדי להתאים את המראה בכל המופע.", + "additional-style-placeholder": "קוד CSS נוסף", + "allow-user-signup": "אפשר הרשמת משתמשים", + "basic-description": "הגדירו את הזהות הציבורית שמוצגת על ידי המופע הזה.", + "customize-server": { + "description": "תיאור", + "icon-url": "כתובת סמל", + "locale": "שפת השרת", + "title": "התאמת השרת" + }, + "custom-code-description": "CSS ו־JavaScript אופציונליים ברמת המופע, המוחלים על ממשק המשתמש.", + "custom-code-title": "קוד מותאם אישית", + "disable-password-login": "השבת התחברות באמצעות סיסמה", + "disable-password-login-final-warning": "הקלידו \"CONFIRM\" אם אתם בטוחים שאתם יודעים מה אתם עושים.", + "disable-password-login-warning": "פעולה זו תשבית התחברות באמצעות סיסמה לכל המשתמשים. לא ניתן יהיה להתחבר ללא ביטול ההגדרה במסד הנתונים אם ספקי הזהות ייכשלו. היזהרו בעת הסרת ספק זהות", + "display-with-updated-time": "הצג עם זמן העדכון", + "enable-auto-compact": "אפשר כיווץ אוטומטי", + "enable-double-click-to-edit": "אפשר לחיצה כפולה לעריכה", + "enable-password-login": "אפשר התחברות באמצעות סיסמה", + "enable-password-login-warning": "פעולה זו תאפשר התחברות באמצעות סיסמה לכל המשתמשים. המשיכו רק אם ברצונכם לאפשר למשתמשים להתחבר גם באמצעות SSO וגם באמצעות סיסמה", + "label": "מערכת", + "max-upload-size": "גודל העלאה מרבי (MiB)", + "max-upload-size-hint": "הערך המומלץ הוא 32 MiB.", + "removed-completed-task-list-items": "אפשר הסרת פריטים שהושלמו מרשימת המשימות", + "server-name": "שם השרת", + "title": "כללי" + }, + "version": "גרסה", + "webhook": { + "create-dialog": { + "an-easy-to-remember-name": "שם שקל לזכור", + "copy-secret": "העתק סוד חתימה", + "create-webhook": "צור Webhook", + "create-webhook-success": "Webhook `{{name}}` נוצר", + "edit-webhook": "ערוך Webhook", + "generate-secret": "צור", + "payload-url": "כתובת המטען", + "reveal-secret": "הצג", + "signing-secret": "סוד חתימה", + "signing-secret-auto-note": "סוד חתימה נוצר באופן אוטומטי. תוכלו להציג אותו לאחר היצירה.", + "signing-secret-configured": "מוגדר", + "signing-secret-created-note": "Webhook נוצר. העתיקו עכשיו את סוד החתימה — תוכלו גם להציג אותו מאוחר יותר דרך העריכה.", + "signing-secret-not-configured": "לא מוגדר", + "title": "כותרת", + "url-example-post-receive": "https://example.com/postreceive" + }, + "delete-dialog": { + "delete-webhook-description": "פעולה זו אינה הפיכה.", + "delete-webhook-success": "Webhook `{{name}}` נמחק בהצלחה", + "delete-webhook-title": "האם אתם בטוחים שברצונכם למחוק את Webhook `{{name}}`?" + }, + "no-webhooks-found": "לא נמצאו Webhooks.", + "title": "Webhooks", + "url": "כתובת", + "label": "Webhooks" + }, + "tags": { + "label": "תגיות", + "title": "מטא־נתונים של תגיות", + "description": "הגדירו צבעי תצוגה אופציונליים לתגיות ברמת המופע, או טשטשו תוכן של פתקים תואמים. שמות התגיות מטופלים כדפוסי regex מעוגנים.", + "add-rule": "הוסף כלל", + "background-color": "צבע רקע", + "blur-content": "טשטש תוכן", + "configured-rules": "כללים שהוגדרו", + "default-color": "ברירת מחדל", + "matching-rule": "ביטוי רגולרי מעוגן", + "no-tags-configured": "לא הוגדרו מטא־נתונים לתגיות.", + "tag-name": "שם התגית", + "tag-name-placeholder": "לדוגמה work או project/.*", + "tag-already-exists": "התגית כבר קיימת.", + "tag-pattern-hint": "שם תגית או דפוס ביטוי רגולרי (לדוגמה, project/.* תואם לכל תגיות project/)", + "invalid-regex": "דפוס הביטוי הרגולרי אינו תקין או אינו בטוח.", + "used-count": "{{count}} פתקים", + "using-default-color": "משתמש בצבע ברירת המחדל." + }, + "resource-stats": { + "label": "משאבים", + "title": "סטטיסטיקות משאבים", + "description": "שימוש במשאבים עבור המופע הזה.", + "database": { + "title": "מסד נתונים", + "driver": "מנהל התקן", + "size": "גודל" + }, + "local-storage": { + "title": "אחסון מקומי", + "size": "גודל תיקיית הנתונים" + }, + "unknown": "לא ידוע", + "last-updated": "עודכן לאחרונה {{ago}}", + "refresh": "רענן", + "load-error": "טעינת הסטטיסטיקות נכשלה" + } + }, + "tag": { + "all-tags": "כל התגיות", + "create-tag": "צור תגית", + "create-tags-guide": "אפשר ליצור תגיות על ידי הזנת `#tag`.", + "delete-confirm": "האם אתם בטוחים שברצונכם למחוק את התגית הזו? כל הפתקים הקשורים יועברו לארכיון.", + "delete-success": "התגית נמחקה בהצלחה", + "delete-tag": "מחק תגית", + "new-name": "שם חדש", + "no-tag-found": "לא נמצאו תגיות", + "old-name": "שם ישן", + "rename-error-empty": "שם התגית לא יכול להיות ריק או להכיל רווחים", + "rename-error-repeat": "השם החדש לא יכול להיות זהה לשם הישן", + "rename-success": "שם התגית שונה בהצלחה", + "rename-tag": "שנה שם תגית", + "rename-tip": "כל הפתקים שלכם עם התגית הזו יעודכנו." + }, + "tooltip": { + "link-memo": "קשר פתק", + "markdown-menu": "Markdown", + "select-location": "מיקום", + "select-visibility": "נראות", + "tags": "תגיות", + "upload-attachment": "העלה קובץ מצורף" + } +} diff --git a/web/tests/i18n-locale-search.test.ts b/web/tests/i18n-locale-search.test.ts index 74ba2202..ea39f203 100644 --- a/web/tests/i18n-locale-search.test.ts +++ b/web/tests/i18n-locale-search.test.ts @@ -1,6 +1,17 @@ import { describe, expect, it } from "vitest"; +import { locales } from "@/i18n"; +import enTranslation from "@/locales/en.json"; +import heTranslation from "@/locales/he.json"; import { getLocaleSearchLabels, localeMatchesSearch, normalizeLocaleSearchText } from "@/utils/i18n"; +const flattenTranslationKeys = (value: unknown, prefix = ""): string[] => { + if (value && typeof value === "object" && !Array.isArray(value)) { + return Object.entries(value).flatMap(([key, child]) => flattenTranslationKeys(child, prefix ? `${prefix}.${key}` : key)); + } + + return [prefix]; +}; + describe("locale search helpers", () => { it("normalizes case and diacritics for locale search", () => { expect(normalizeLocaleSearchText("Português")).toBe("portugues"); @@ -21,4 +32,22 @@ describe("locale search helpers", () => { expect(localeMatchesSearch("pt-PT", "portugues", "en")).toBe(true); expect(localeMatchesSearch("ja", "romanian", "en")).toBe(false); }); + + it("includes Hebrew in the supported locale list", () => { + expect(locales).toContain("he"); + expect(localeMatchesSearch("he", "hebrew", "en")).toBe(true); + }); + + it("keeps Hebrew keys within the current English catalog", () => { + expect(flattenTranslationKeys(enTranslation).sort()).toEqual(expect.arrayContaining(flattenTranslationKeys(heTranslation).sort())); + expect(heTranslation.setting).toHaveProperty("ai"); + expect(heTranslation.setting).toHaveProperty("notification"); + expect(heTranslation.auth).not.toHaveProperty("host-tip"); + }); + + it("uses future-oriented wording for expiring Hebrew links and tokens", () => { + expect(heTranslation.memo.share["expires-on"]).toBe("יפוג תוקף בתאריך {{date}}"); + expect(heTranslation.setting["access-token"].expires).toBe("יפוג תוקף"); + expect(heTranslation.setting["access-token"]["guideline-expiration"]).toContain("שתוקפם יפוג"); + }); });