From 3d97b39f2d492e7dd1c887594dd4ec16ff54ee3f Mon Sep 17 00:00:00 2001 From: Jamal Ali Date: Sun, 6 Sep 2026 18:52:59 +0400 Subject: [PATCH] feat(i18n): add Azerbaijani language support (#6278) --- web/src/i18n.ts | 1 + web/src/locales/az.json | 1115 ++++++++++++++++++++++++++ web/tests/i18n-locale-search.test.ts | 10 + 3 files changed, 1126 insertions(+) create mode 100644 web/src/locales/az.json diff --git a/web/src/i18n.ts b/web/src/i18n.ts index 56d27646..d45d141c 100644 --- a/web/src/i18n.ts +++ b/web/src/i18n.ts @@ -5,6 +5,7 @@ import { findNearestMatchedLanguage } from "./utils/i18n"; export const locales = orderBy([ "ar", + "az", "bg", "ca", "cs", diff --git a/web/src/locales/az.json b/web/src/locales/az.json new file mode 100644 index 00000000..361cb0cc --- /dev/null +++ b/web/src/locales/az.json @@ -0,0 +1,1115 @@ +{ + "about": { + "api-docs": "API sənədləri", + "api-docs-note": "REST və gRPC arayışı", + "blogs": "Bloqlar", + "build": "Build", + "commit": "Commit", + "demo": "Demo", + "description": "Məxfiliyi öndə tutan, yüngül qeyd tutma xidməti. Dəyərli fikirlərinizi asanlıqla yazın və paylaşın.", + "distribution": "Paylanma", + "documents": "Sənədlər", + "documents-note": "Memos-u yerləşdirin, tənzimləyin və istifadə edin", + "github-repository": "GitHub repozitoriyası", + "github-repository-note": "Mənbə kodu, məsələlər və buraxılışlar", + "license": "Lisenziya", + "media": "Media", + "official-website": "Rəsmi sayt", + "official-website-note": "Layihənin əsas səhifəsi", + "powered-by": "Memos ilə işləyir", + "project": "Layihə", + "project-links": "Layihə keçidləri", + "web-clipper": "Web Clipper", + "web-clipper-platforms": "Chrome + Firefox" + }, + "auth": { + "admin-sign-in": "Administrator girişi", + "admin-sign-in-tip": "Parolla giriş administratorlar üçün açıq qalır.", + "back-to-sign-in": "Girişə qayıt", + "continue-with": "{{provider}} ilə davam et", + "create-admin-account": "Admin hesabı yarat", + "create-your-account": "Hesabınızı yaradın", + "explore-public-memos": "Bu instansdakı ictimai qeydləri kəşf edin", + "first-run": "İlk işə salma", + "new-password": "Yeni parol", + "protected-memo-notice": "Bu qeyd ictimai deyil. Davam etmək üçün daxil olun.", + "repeat-new-password": "Yeni parolu təkrarlayın", + "setup-description": "Bu instans üçün administrator hesabı yaradın.", + "setup-note": "Bu hesab instans parametrlərinə, üzvlərə və kimlik provayderlərinə sahib olur.", + "setup-title": "İnstansınızı qurun", + "sign-in-tip": "Artıq hesabınız var?", + "sign-up-tip": "Hələ hesabınız yoxdur?", + "signin-unavailable-description": "Parolla giriş deaktiv edilib və heç bir kimlik provayderi tənzimlənməyib. Giriş üsulunu aktivləşdirmək üçün administratorunuza müraciət edin.", + "signin-unavailable-title": "Giriş əlçatan deyil", + "signup-unavailable-description": "Parollu hesablar deaktiv edilib və heç bir kimlik provayderi tənzimlənməyib. Giriş üçün administratorunuza müraciət edin.", + "signup-unavailable-title": "Qeydiyyat əlçatan deyil", + "signups-closed-description": "Bu instansda yeni hesablar deaktiv edilib. Giriş lazımdırsa, administratorunuzla əlaqə saxlayın.", + "signups-closed-title": "Qeydiyyat bağlıdır", + "sso-signup-tip": "Hesabınızı yaratmaq üçün aşağıdakı provayderlərdən biri ilə daxil olun.", + "welcome-back": "Yenidən xoş gəlmisiniz." + }, + "calendar": { + "close-day": "Günü bağla", + "more-memos": "+{{count}} daha", + "new-memo-on-day": "Bu gün üçün yeni qeyd", + "next-year": "Növbəti il", + "no-memos-in-month": "{{month}} ayında qeyd yoxdur", + "no-memos-on-day": "Bu gün üçün qeyd yoxdur", + "previous-year": "Əvvəlki il", + "resize-panel": "Gün panelinin ölçüsünü dəyiş", + "select-month": "Ay seç" + }, + "demo": { + "banner-description": "Rahatlıqla kəşf edin! Bu demo vaxtaşırı sıfırlanır.", + "banner-title": "Memos demosu", + "deploy-link": "Öz Memos nüsxənizi yerləşdirin" + }, + "attachment-details": { + "actions": { + "copied": "Koordinatlar kopyalandı", + "copy-coordinates": "Koordinatları kopyala", + "hide": "Qoşma təfərrüatlarını gizlət", + "hide-map": "Xəritəni gizlət", + "show": "Qoşma təfərrüatlarını göstər", + "show-map": "Xəritəni göstər" + }, + "empty": "Yadda saxlanılmış çəkiliş metaməlumatı yoxdur.", + "fields": { + "altitude": "Hündürlük", + "camera": "Kamera", + "captured": "Çəkilib", + "dimensions": "Ölçülər", + "duration": "Müddət", + "exposure": "Ekspozisiya", + "file": "Fayl", + "lens": "Obyektiv", + "location": "Koordinatlar", + "source-orientation": "Mənbə EXIF oriyentasiyası", + "uploaded": "Yüklənib" + }, + "sections": { + "camera": "Kamera", + "capture": "Çəkiliş", + "file": "Fayl", + "location": "Məkan", + "technical": "Texniki təfərrüatlar" + }, + "timezone-unknown": "Saat qurşağı naməlumdur", + "title": "Təfərrüatlar" + }, + "attachment-library": { + "actions": { + "open": "Aç", + "retry": "Yenidən cəhd et" + }, + "empty": { + "all": "Hələ qoşma yoxdur.", + "audio": "Hələ audio qoşma yoxdur.", + "documents": "Hələ sənəd qoşması yoxdur.", + "media": "Hələ media qoşması yoxdur." + }, + "errors": { + "load": "Qoşmaları yükləmək alınmadı." + }, + "labels": { + "live": "Canlı", + "live-photo": "Live Photo", + "memo": "Qeyd", + "not-linked": "Bağlı deyil", + "unknown-date": "Naməlum tarix", + "unused": "İstifadə edilməyib" + }, + "tabs": { + "audio": "Audio", + "documents": "Sənədlər", + "media": "Media" + }, + "unused": { + "confirm-description": "Bu, qeydə bağlı olmayan bütün yüklənmiş faylları çıxarır.", + "description": "Bu yükləmələr heç bir qeydə qoşulmayıb. Onları burada nəzərdən keçirin və ya çıxarın.", + "title": "Bağlanmamış yükləmələr" + } + }, + "common": { + "about": "Haqqında", + "actions": "Əməliyyatlar", + "add": "Əlavə et", + "admin": "Admin", + "all": "Hamısı", + "archive": "Arxivlə", + "archived": "Arxivlənmiş", + "attachments": "Qoşmalar", + "author": "Müəllif", + "avatar": "Avatar", + "basic": "Əsas", + "beta": "Beta", + "calendar": "Təqvim", + "cancel": "Ləğv et", + "change": "Dəyiş", + "clear": "Təmizlə", + "close": "Bağla", + "collapse": "Yığ", + "confirm": "Təsdiqlə", + "copy": "Kopyala", + "create": "Yarat", + "created-at": "Yaradılıb", + "database": "Verilənlər bazası", + "day": "Gün", + "days": { + "fri": "C", + "mon": "B.e", + "sat": "Ş", + "sun": "B", + "thu": "C.a", + "tue": "Ç.a", + "wed": "Ç" + }, + "delete": "Sil", + "description": "Təsvir", + "edit": "Redaktə et", + "email": "E-poçt", + "empty-placeholder": "Boş", + "expand": "Aç", + "explore": "Kəşf et", + "file": "Fayl", + "filter": "Süzgəc", + "home": "Əsas səhifə", + "image": "Şəkil", + "in": "İçində", + "inbox": "Gələnlər", + "input": "Daxiletmə", + "language": "Dil", + "last-updated-at": "Son yenilənmə", + "learn-more": "Ətraflı", + "link": "Keçid", + "location": "Məkan", + "manage": "İdarə et", + "map": "Xəritə", + "mark": "İşarələ", + "memo": "Qeyd", + "memos": "Qeydlər", + "month-navigation": "Ay naviqasiyası", + "more": "Daha çox", + "name": "Ad", + "new": "Yeni", + "next-month": "Növbəti ay", + "nickname": "Ləqəb", + "null": "Yoxdur", + "or": "və ya", + "password": "Parol", + "pin": "Sancaqla", + "pinned": "Sancaqlanmış", + "previous-month": "Əvvəlki ay", + "preview": "Önbaxış", + "profile": "Profil", + "properties": "Xüsusiyyətlər", + "referenced-by": "İstinad edənlər", + "referencing": "İstinad edir", + "relations": "Əlaqələr", + "remember-me": "Məni xatırla", + "rename": "Adını dəyiş", + "reset": "Sıfırla", + "resize-sidebar": "Yan panelin ölçüsünü dəyiş", + "resources": "Resurslar", + "restore": "Bərpa et", + "role": "Rol", + "save": "Yadda saxla", + "search": "Axtar", + "select": "Seç", + "settings": "Parametrlər", + "share": "Paylaş", + "sign-in": "Daxil ol", + "sign-in-to-memos": "Memos-a daxil ol", + "sign-out": "Çıxış et", + "sign-up": "Qeydiyyatdan keç", + "statistics": "Statistika", + "tags": "Etiketlər", + "tasks": "Tapşırıqlar", + "title": "Başlıq", + "today": "Bu gün", + "tree-mode": "Ağac şəklində göstər", + "type": "Növ", + "unlink": "Əlaqəni ayır", + "unpin": "Sancağı götür", + "update": "Yenilə", + "upload": "Yüklə", + "user": "İstifadəçi", + "username": "İstifadəçi adı", + "version": "Versiya", + "visibility": "Görünürlük", + "views": "Görünüşlər", + "yourself": "Özünüz" + }, + "locale-picker": { + "no-language-feedback": "Dil tapılmadı? Rəy göndərin" + }, + "editor": { + "add-your-comment-here": "Şərhinizi bura yazın...", + "any-thoughts": "Ağlınıza nə gəlir...", + "exit-focus-mode": "Fokus rejimindən çıx", + "focus-mode": "Fokus rejimi", + "comment": "Şərh", + "formatting-toolbar": "Formatlama paneli", + "format": { + "heading": "Başlıq", + "paragraph": "Abzas", + "heading-1": "Başlıq 1", + "heading-2": "Başlıq 2", + "heading-3": "Başlıq 3", + "bold": "Qalın", + "italic": "Kursiv", + "strikethrough": "Üstüxətli", + "code": "Sətiriçi kod", + "code-block": "Kod bloku", + "bullet-list": "Nişanlı siyahı", + "ordered-list": "Nömrəli siyahı", + "task-list": "Tapşırıq siyahısı", + "link": "Keçid", + "link-prompt": "URL daxil edin", + "more": "Digər formatlama" + }, + "insert-menu": { + "add-attachment": "Qoşma əlavə et", + "add-location": "Məkan əlavə et", + "image-upload-failed": "Bəzi şəkillər yüklənə bilmədi. Yenidən cəhd edin və ya yüklənmiş faylları qoşma kimi saxlayın.", + "image-upload-stopped": "Şəkil yükləməsi dayandırıldı {{completed}}/{{total}}", + "insert-image": "Şəkil daxil et", + "keep-as-attachments": "Qoşma kimi saxla", + "link-memo": "Qeydə keçid əlavə et", + "retry-image-upload": "Yenidən cəhd et", + "uploading-inline-image": "Məzmuna yüklənir", + "uploading-images": "Şəkillər yüklənir {{completed}}/{{total}}", + "upload-file": "Fayl yüklə" + }, + "new-memo": "Yeni qeyd", + "no-changes-detected": "Dəyişiklik aşkarlanmadı", + "save": "Yadda saxla", + "saved": "Yadda saxlanıldı", + "validation": { + "cannot-save": "Yadda saxlamaq mümkün deyil", + "content-required": "Məzmun, qoşma və ya fayl tələb olunur", + "finish-audio-recording": "Yadda saxlamazdan əvvəl audio yazısını bitirin", + "loading-content": "Qeydin məzmunu yüklənir", + "resolve-image-uploads": "Yadda saxlamazdan əvvəl şəkil yükləmələrini tamamlayın", + "save-in-progress": "Yadda saxlanılır", + "unsupported-attachment-image-url": "Dəstəklənməyən qoşma şəkli URL-i: {{url}}", + "wait-for-upload": "Yükləmənin tamamlanmasını gözləyin" + }, + "unsupported-syntax-raw-mode": "Bu qeyddə zəngin mətn redaktorunun təhlükəsiz redaktə edə bilmədiyi sintaksis var, ona görə xam Markdown rejimində açıldı.", + "wysiwyg-editor": "WYSIWYG redaktoru", + "audio-recorder": { + "attachment-label": "Audio yazısı", + "attachment-label-with-time": "Audio yazısı {{time}}", + "configure-ai-provider": "Əvvəlcə AI provayderini konfiqurasiya edin", + "discard": "İmtina et", + "error": "Mikrofon əlçatan deyil", + "error-description": "Bu sayt üçün mikrofon icazəsini yoxlayıb yenidən cəhd edin.", + "idle-description": "Audio yazısını qoşma kimi əlavə etmək üçün yazmağa başlayın.", + "keep": "Yazını saxla", + "pause-recording": "Audio yazısına fasilə ver", + "play-recording": "Audio yazısını oynat", + "ready": "Yazı hazırdır", + "ready-description": "Klipə önbaxış edin, sonra onu audio qoşma kimi saxlayın və ya ondan imtina edin.", + "record-again": "Yenidən yaz", + "recording": "Audio yazılır", + "recording-description": "Qısa audio qoşma yazın. Cari uzunluq: {{duration}}", + "requesting": "İcazə istənilir...", + "requesting-permission": "Mikrofon icazəsi istənilir", + "requesting-permission-description": "Yazmağa başlamaq üçün brauzerdə mikrofon icazəsini verin.", + "start": "Yazmağa başla", + "stop": "Yazını dayandır", + "title": "Səs yazıcısı", + "transcribe": "Mətnə çevir", + "transcribe-empty": "Nitq aşkarlanmadı", + "transcribe-error": "Audionu mətnə çevirmək alınmadı", + "transcribe-success": "Transkripsiya əlavə edildi", + "transcribing": "Mətnə çevrilir...", + "trigger": "Audio yaz", + "unsupported": "Audio yazısı dəstəklənmir", + "unsupported-description": "Bu brauzer qeyd redaktorundan audio yaza bilmir." + } + }, + "inbox": { + "failed-to-load": "Gələnlər elementi yüklənmədi", + "memo-comment": "{{user}} {{memo}} qeydinizə şərh yazıb.", + "no-archived": "Arxivlənmiş bildiriş yoxdur", + "no-unread": "Oxunmamış bildiriş yoxdur", + "space-invitation": "sizi sahəyə qoşulmağa dəvət etdi", + "space-invitation-accepted": "Bu sahəyə qoşuldunuz.", + "space-invitation-open": "Sahəni aç", + "unread": "Oxunmamış" + }, + "live-update": { + "connected": "Canlı yeniləmələr aktivdir", + "connecting": "Canlı yeniləmələrə qoşulur...", + "disconnected": "Canlı yeniləmələr əlçatan deyil" + }, + "markdown": { + "checkbox": "Qeyd xanası", + "code-block": "Kod bloku", + "content-syntax": "Məzmun sintaksisi" + }, + "memo": { + "archived-at": "Arxivlənib", + "back-to": "{{source}} bölməsinə qayıt", + "click-to-hide-sensitive-content": "Həssas məzmunu gizlətmək üçün klikləyin", + "click-to-show-sensitive-content": "Həssas məzmunu göstərmək üçün klikləyin", + "code": "Kod", + "comment": { + "self": "Şərhlər", + "write-a-comment": "Şərh yazın" + }, + "copy-content": "Məzmunu kopyala", + "copy-link": "Keçidi kopyala", + "count-memos-in-date": "{{date}} tarixində {{count}} {{memos}}", + "count-memos-updated-in-date": "{{date}} tarixində yenilənən {{count}} {{memos}}", + "delete-confirm": "Bu qeydi silmək istədiyinizə əminsiniz?", + "delete-confirm-description": "Bu əməliyyat geri qaytarıla bilməz. Qoşmalar, keçidlər və istinadlar da çıxarılacaq.", + "direction": "İstiqamət", + "direction-asc": "Artan", + "direction-desc": "Azalan", + "display-time": "Vaxtı göstər", + "filters": { + "has-code": "Kod var", + "has-link": "Keçid var", + "has-location": "Məkan var", + "has-task-list": "Tapşırıq siyahısı var", + "label": "Süzgəclər" + }, + "compact-mode": "Yığcam rejim", + "connections": "Bağlantılar", + "grid-compact-hint": "Şəbəkə düzülüşləri həmişə yığcam kartlardan istifadə edir.", + "go-to": "{{source}} bölməsinə keç", + "layout": "Düzülüş", + "layout-auto": "Avtomatik", + "layout-auto-description": "Ekrana sığdığı qədər sütun", + "layout-columns": "{{n}} sütun", + "layout-columns-description": "En imkan verdikdə {{n}} sütuna qədər", + "layout-list": "Siyahı", + "layout-list-description": "Oxu eninə uyğun tək sütun", + "link-preview": "Keçid önbaxışı", + "links": "Keçidlər", + "load-more": "Daha çox yüklə", + "no-archived-memos": "Arxivlənmiş qeyd yoxdur.", + "no-memos": "Qeyd yoxdur.", + "new-badge": "Yeni", + "newest-first": "Əvvəlcə ən yenilər", + "oldest-first": "Əvvəlcə ən köhnələr", + "on-this-memo": "Bu qeyddə", + "order": "Sıralama", + "order-by": "Sıralama meyarı", + "outline": "Mündəricat", + "parent-memo": "Ana qeyd", + "search-placeholder": "Qeydləri axtar...", + "shown-time": "Göstərilən vaxt", + "share": { + "active-links": "Aktiv paylaşım keçidləri", + "copied": "Kopyalandı!", + "copy": "Keçidi kopyala", + "create-failed": "Paylaşım keçidinin yaradılması alınmadı", + "create-link": "Yeni keçid yarat", + "creating": "Yaradılır…", + "expiry-1-day": "1 gün", + "expiry-30-days": "30 gün", + "expiry-7-days": "7 gün", + "expiry-label": "Bitmə vaxtı", + "expiry-never": "Heç vaxt", + "image-description": "Önbaxış cari cihaz eninizdə ({{width}}px) göstərilir.", + "image-download": "PNG endir", + "image-download-failed": "Şəklin ixracı alınmadı", + "image-downloaded": "Şəkil yadda saxlanıldı", + "image-footer": "Memos-dan paylaşıldı", + "image-share": "Şəkli paylaş", + "image-share-failed": "Şəklin paylaşılması alınmadı", + "image-title": "Şəkil kimi paylaş", + "expires-on": "{{date}} tarixində vaxtı bitəcək", + "invalid-link": "Bu keçid etibarsızdır və ya vaxtı bitib.", + "never-expires": "Vaxtı heç vaxt bitməyəcək", + "no-links": "Hələ paylaşım keçidi yoxdur. Aşağıda bir keçid yaradın.", + "open-image": "Şəkil kimi paylaş", + "open-panel": "Paylaşım keçidlərini idarə et", + "revoke": "Ləğv et", + "revoke-failed": "Keçidin ləğvi alınmadı", + "revoked": "Paylaşım keçidi ləğv edildi", + "section-label": "Paylaşım", + "share": "Paylaş", + "shared-by": "{{creator}} tərəfindən paylaşılıb", + "title": "Bu qeydi paylaş" + }, + "show-less": "Az göstər", + "show-more": "Daha çox göstər", + "to-do": "Görüləcək iş", + "task-actions": { + "check-all": "Bütün tapşırıqları işarələ", + "title": "Tapşırıqlar", + "uncheck-all": "Bütün tapşırıqların işarəsini götür", + "updated": "Tapşırıqlar yeniləndi" + }, + "view-detail": "Təfərrüatlara bax", + "view-options": "Görünüş parametrləri", + "visibility": { + "disabled": "İctimai qeydlər deaktiv edilib", + "private": "Şəxsi", + "private-description": "Yalnız sizə görünür", + "protected": "Qorunan", + "protected-description": "Daxil olmuş istifadəçilərə görünür", + "public": "İctimai", + "public-description": "Hamıya görünür", + "space": "Sahə", + "space-description": "Bu sahənin üzvlərinə görünür" + } + }, + "message": { + "archived-successfully": "Uğurla arxivləndi", + "change-memo-created-time": "Qeydin yaradılma vaxtını dəyiş", + "copied": "Kopyalandı", + "deleted-successfully": "Qeyd uğurla silindi", + "description-is-required": "Təsvir tələb olunur", + "failed-to-embed-memo": "Qeydin yerləşdirilməsi alınmadı", + "fill-all": "Zəhmət olmasa bütün sahələri doldurun.", + "fill-all-required-fields": "Zəhmət olmasa tələb olunan bütün sahələri doldurun", + "maximum-upload-size-is": "İcazə verilən maksimum yükləmə ölçüsü {{size}} MiB-dir", + "memo-not-found": "Qeyd tapılmadı.", + "new-password-not-match": "Yeni parollar uyğun gəlmir.", + "no-data": "Məlumat tapılmadı.", + "password-changed": "Parol dəyişdirildi", + "password-not-match": "Parollar uyğun gəlmir.", + "restored-successfully": "Uğurla bərpa edildi", + "succeed-copy-content": "Məzmun uğurla kopyalandı.", + "succeed-copy-link": "Keçid uğurla kopyalandı.", + "update-succeed": "Yeniləmə uğurlu oldu" + }, + "profile": { + "no-shared-memos": "@{{username}} hələ heç bir qeyd paylaşmayıb.", + "not-found-description": "Bu instansda @{{username}} adlı Memos istifadəçisi yoxdur.", + "not-found-title": "Burada heç kim yoxdur" + }, + "reference": { + "add-references": "İstinadlar əlavə et", + "embedded-usage": "Yerləşdirilmiş məzmun kimi istifadə et", + "no-memos-found": "Qeyd tapılmadı", + "search-placeholder": "Məzmunda axtar" + }, + "resource": { + "clear": "Təmizlə", + "copy-link": "Keçidi kopyala", + "create-dialog": { + "external-link": { + "file-name": "Fayl adı", + "file-name-placeholder": "Fayl adı", + "link": "Keçid", + "link-placeholder": "https://the.link.to/your/resource", + "option": "Xarici keçid", + "type": "Növ", + "type-placeholder": "Fayl növü" + }, + "local-file": { + "choose": "Fayl seç…", + "option": "Lokal fayl" + }, + "title": "Resurs yarat", + "upload-method": "Yükləmə üsulu" + }, + "delete-all-unused": "İstifadə olunmayanların hamısını sil", + "delete-all-unused-confirm": "İstifadə olunmayan bütün resursları silmək istədiyinizə əminsiniz? BU ƏMƏLİYYAT GERİ QAYTARILA BİLMƏZ", + "delete-all-unused-error": "İstifadə olunmayan resursları silmək alınmadı", + "delete-all-unused-success": "Resurslar silindi", + "delete-resource": "Resursu sil", + "delete-selected-resources": "Seçilmiş resursları sil", + "fetching-data": "Məlumat alınır…", + "file-drag-drop-prompt": "Faylı yükləmək üçün bura sürükləyib buraxın", + "linked-amount": "Bağlı sayı", + "no-files-selected": "Heç bir fayl seçilməyib", + "no-resources": "Resurs yoxdur.", + "no-unused-resources": "İstifadə olunmayan resurs yoxdur", + "reset-link": "Keçidi sıfırla", + "reset-link-prompt": "Keçidi sıfırlamaq istədiyinizə əminsiniz? Bu, keçidin hazırkı bütün istifadələrini sıradan çıxaracaq. BU ƏMƏLİYYAT GERİ QAYTARILA BİLMƏZ", + "reset-resource-link": "Resurs keçidini sıfırla", + "unused-resources": "İstifadə olunmayan resurslar" + }, + "router": { + "back-to-top": "Yuxarı qayıt", + "go-to-home": "Əsas səhifəyə keç" + }, + "search": { + "access-error": "Bu qeydlərə girişiniz yoxdur.", + "clear-query": "Sorğunu təmizlə", + "edit-query": "Sorğunu redaktə et", + "expression": "Axtarış ifadəsi", + "expression-mode": "İfadə", + "invalid-expression": "Axtarış ifadəsi tətbiq edilə bilmədi", + "keyboard-hint": "Axtarmaq üçün Enter · yeni sətir üçün Shift+Enter", + "load-error": "Qeydlər yüklənmədi", + "mode": "Axtarış rejimi", + "retry": "Yenidən cəhd et", + "syntax-help": "Axtarış sintaksisi", + "text": "Mətn" + }, + "setting": { + "access-token": { + "access-token-copied-to-clipboard": "Giriş tokeni mübadilə buferinə kopyalandı", + "access-token-deleted": "`{{description}}` giriş tokeni silindi", + "access-token-deletion": "`{{description}}` giriş tokenini silmək istədiyinizə əminsiniz?", + "access-token-deletion-description": "Bu əməliyyat geri qaytarıla bilməz. Bu tokendən istifadə edən bütün servisləri yeni tokenə keçirməli olacaqsınız.", + "create-dialog": { + "access-token-created": "`{{description}}` giriş tokeni yaradıldı", + "create-access-token": "Giriş tokeni yarat", + "description": "Təsvir", + "duration-1m": "1 ay", + "duration-90d": "90 gün", + "duration-8h": "8 saat", + "duration-never": "Heç vaxt", + "expiration": "Vaxtın bitməsi", + "some-description": "Hər hansı təsvir..." + }, + "create-first": "İlk tokeninizi yaradın", + "description": "Başqa tətbiqlərin sizin adınızdan Memos API-dən istifadə etməsinə imkan verən gizli açarları yaradın və ləğv edin.", + "about-description": "Şəxsi giriş tokeni (PAT) API sorğularını sizin hesabınız kimi təsdiqləyən gizli açardır. Onu saxlayan istənilən tətbiq və ya skript — MCP server, CLI, mobil müştəri — tokenin vaxtı bitənə və ya siz onu silənə qədər Memos-da sizin edə bildiyiniz hər şeyi edə bilər. Onu Authorization başlığında Bearer tokeni kimi göndərin:", + "empty-description": "Token skript və ya tətbiqə sizin adınızdan API-yə müraciət etmək imkanı verir. O, yalnız yaradılan an bir dəfə göstərilir, sonra isə ləğv edə biləsiniz deyə burada siyahıya düşür.", + "empty-title": "Hələ giriş tokeni yoxdur", + "expires": "Bitmə vaxtı", + "guideline-shown-once": "Token yalnız bir dəfə — onu yaratdıqdan dərhal sonra göstərilir (mübadilə buferinə kopyalanır). Onu parol meneceri kimi təhlükəsiz bir yerdə saxlayın.", + "guideline-one-per-app": "Hər tətbiq və ya skript üçün ayrıca token yaradın ki, birini ləğv edəndə qalanları sıradan çıxmasın.", + "guideline-expiration": "Vaxtı bitəcək tokenlərə üstünlük verin. Uzunömürlü tokenlər sızarsa, risk daha böyükdür.", + "guideline-review": "Vaxtaşırı son istifadə vaxtını yoxlayın və artıq tanımadığınız və ya ehtiyacınız olmayan tokenləri silin.", + "how-to-use": "Tokendən necə istifadə etməli", + "label": "Giriş tokenləri", + "last-used": "Son istifadə", + "never-used": "Heç vaxt istifadə olunmayıb", + "no-expiration": "Vaxt məhdudiyyəti yoxdur", + "title": "Giriş tokenləri", + "token": "Token", + "web-clipper-title": "Memos Web Clipper ilə tokendən istifadə" + }, + "account": { + "change-password": "Parolu dəyiş", + "danger-area": "Təhlükəli sahə", + "danger-area-description": "Geri qaytarıla bilməyən hesab əməliyyatları buradadır. Davam etməzdən əvvəl onları diqqətlə nəzərdən keçirin.", + "delete-account": "Hesabı sil", + "delete-account-description": "Bu hesabı və onunla bağlı bütün girişləri bu instansdan həmişəlik çıxarın. Bu əməliyyat geri qaytarıla bilməz.", + "email-note": "İstəyə bağlı", + "export-memos": "Qeydləri ixrac et", + "nickname-note": "Bannerdə göstərilir", + "openapi-reset": "OpenAPI açarını sıfırla", + "openapi-sample-post": "Salam #memos — {{url}} ünvanından", + "openapi-title": "OpenAPI", + "reset-api": "API-ni sıfırla", + "title": "Hesab məlumatları", + "update-information": "Məlumatları yenilə", + "username-note": "Daxil olmaq üçün istifadə olunur" + }, + "ai": { + "add-provider": "Provayder əlavə et", + "api-key": "API açarı", + "api-key-required": "API açarı tələb olunur.", + "byok-description": "OpenAI və ya Gemini-ni öz hesabınızdan olan API açarı ilə qoşun. Memos provayderə birbaşa bu serverdən müraciət edir.", + "byok-key-note": "Öz provayder hesabınızdan olan açarı işlədin; Memos paylaşılan süni intellekt açarları ilə gəlmir.", + "byok-label": "BYOK", + "byok-model-note": "Audio transkripsiyası kimi funksiyalar üçün dəstəklənən modelləri Memos özü seçir.", + "byok-storage-note": "Açarlar bu instansda qalır və parametrlər yüklənəndə maskalanır.", + "byok-title": "Öz süni intellekt hesabınızı işlədin", + "configured": "Konfiqurasiya edilib", + "current-key": "Cari açar: {{key}}", + "default-endpoint": "Defolt endpoint", + "delete-provider": "`{{title}}` süni intellekt provayderi silinsin?", + "description": "Provayder açarları instans sahibi tərəfindən verilir və server tərəfindəki süni intellekt funksiyalarında istifadə olunur.", + "dialog-description": "Öz provayder hesabınızdan açar əlavə edin. Memos hər provayder üçün daxili modellərdən istifadə edir; saxlanılan açarı qorumaq üçün redaktə zamanı API açarı sahəsini boş buraxın.", + "edit-provider": "Provayderi redaktə et", + "endpoint": "Endpoint", + "endpoint-hint": "Rəsmi provayder endpointindən istifadə etmək üçün boş buraxın.", + "integrations-description": "Provayder açarları instans sahibi tərəfindən verilir və server tərəfindəki süni intellekt funksiyalarında istifadə olunur.", + "integrations-title": "AI inteqrasiyaları", + "keep-api-key": "Mövcud açarı saxlamaq üçün boş buraxın", + "label": "AI", + "no-providers": "Konfiqurasiya edilmiş süni intellekt provayderi yoxdur.", + "provider-title": "Provayder adı", + "provider-title-required": "Provayder adı tələb olunur.", + "provider-type": "Provayder növü", + "providers": "Provayderlər", + "transcription-description": "Qeyd redaktorunda audio yazılarkən istifadə olunan nitqdən mətnə çevirmə parametrləri.", + "transcription-empty-providers": "Transkripsiyanı aktivləşdirmək üçün əvvəlcə AI inteqrasiyası əlavə edin.", + "transcription-language-help": "ISO 639-1 qısa kodu (məsələn, en, de, zh). Avtomatik təyin üçün boş buraxın.", + "transcription-language-placeholder": "avtomatik təyin", + "transcription-language": "Defolt dil", + "transcription-model-help": "Sərbəst mətn. Provayderin model identifikatorunu yazın — məsələn, 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": "Model", + "transcription-no-provider": "Yoxdur — transkripsiya deaktivdir", + "transcription-prompt-help": "Xüsusi adların və peşə terminlərinin yazılışını yaxşılaşdırır. OpenAI Whisper bunu yumşaq işarə kimi qəbul edir (Whisper limiti təxminən 224 tokendir). Gemini isə onu generasiya promptunun içində hərfi göstəriş kimi qəbul edir.", + "transcription-prompt-placeholder": "Adlar: Alice, Bob. Lüğət: kubernetes, OAuth.", + "transcription-prompt": "Prompt ipucları", + "transcription-provider": "Provayder", + "transcription-title": "Transkripsiya", + "transcription-warning-no-key": "Seçilmiş provayderin API açarı təyin edilməyib. Açar əlavə etmək üçün yuxarıdakı inteqrasiyanı redaktə edin." + }, + "instance": { + "access-description": "Bu instans üçün anonim baxışı, qeydiyyatı, doğrulamanı və profil redaktəsini idarə edin.", + "access-title": "Giriş və siyasətlər", + "allow-public-access-description": "Sistemə daxil olmamış ziyarətçilərə ictimai qeydlərə baxmağa icazə verir. Bu deaktiv ediləndə paylaşılan qeyd keçidləri yenə də əlçatan qalır.", + "allow-public-access": "İctimai girişə icazə ver", + "disallow-change-nickname-description": "İstifadəçilərin görünən adını dəyişməsinin qarşısını alır.", + "disallow-change-nickname": "Ləqəbin dəyişdirilməsini qadağan et", + "disallow-change-username-description": "İstifadəçilərin giriş üçün istifadəçi adını dəyişməsinin qarşısını alır.", + "disallow-change-username": "İstifadəçi adının dəyişdirilməsini qadağan et", + "disallow-password-auth-description": "İstifadəçilərdən parolla giriş əvəzinə kimlik provayderi vasitəsilə daxil olmağı tələb edir.", + "disallow-password-auth": "Parolla doğrulamanı qadağan et", + "disallow-user-registration-description": "Yeni istifadəçilərin qeydiyyat səhifəsindən hesab yaratmasının qarşısını alır.", + "disallow-user-registration": "İstifadəçi qeydiyyatını qadağan et", + "monday": "Bazar ertəsi", + "saturday": "Şənbə", + "sunday": "Bazar", + "week-start-day-description": "Təqvim tipli görünüşlərdə göstərilən ilk günü müəyyən edir.", + "week-start-day": "Həftənin başlanğıc günü" + }, + "member": { + "active": "Aktiv", + "admin": "Admin", + "archive-member": "Üzvü arxivlə", + "archived": "Arxivlənmiş", + "archive-success": "{{username}} uğurla arxivləndi", + "archive-warning": "{{username}} istifadəçisini arxivləmək istədiyinizə əminsiniz?", + "archive-warning-description": "Arxivləmə hesabı deaktiv edir. Onu sonra bərpa edə və ya silə bilərsiniz.", + "create-a-member": "Üzv yarat", + "delete-member": "Üzvü sil", + "delete-success": "{{username}} uğurla silindi", + "delete-warning": "{{username}} istifadəçisini silmək istədiyinizə əminsiniz?", + "delete-warning-description": "BU ƏMƏLİYYAT GERİ QAYTARILA BİLMƏZ", + "label": "Üzv", + "list-title": "Üzv siyahısı", + "member-column": "Üzv", + "restore-success": "{{username}} uğurla bərpa edildi", + "summary-column": "Xülasə", + "user": "İstifadəçi", + "no-members-found": "Üzv tapılmadı" + }, + "memo": { + "add-reaction": "Reaksiya əlavə et", + "bytes-unit": "bayt", + "configured-reactions": "Təyin edilmiş reaksiyalar", + "content-length-limit": "Məzmun uzunluğu limiti (Bayt)", + "content-length-limit-description": "Serverin qəbul etdiyi maksimum qeyd mətni ölçüsü.", + "content-length-limit-error": "Məzmun uzunluğu limiti {{min}} və {{max}} bayt arasında tam ədəd olmalıdır.", + "content-length-limit-minimum": "Minimum: {{min}} bayt", + "double-click-edit-description": "İstifadəçilərə qeydə iki dəfə klikləməklə redaktəni açmağa icazə verin.", + "editing-description": "Qeyd redaktəsinin davranışını və server tərəfindəki məzmun limitlərini idarə edin.", + "editing-title": "Redaktə", + "enable-blur-sensitive-content": "Həssas məzmunun bulanıqlaşdırılmasını aktivləşdir", + "enable-memo-comments": "Qeyd şərhlərini aktivləşdir", + "enable-memo-location": "Qeyd məkanını aktivləşdir", + "label": "Qeyd", + "reaction-placeholder": "məs. 👍", + "reactions-description": "İstifadəçilərin qeydlərə tətbiq edə biləcəyi reaksiya variantlarını təyin edin.", + "remove-reaction": "Reaksiyanı çıxar", + "reactions": "Reaksiyalar", + "title": "Qeydlə bağlı parametrlər", + "reactions-required": "Reaksiyalar siyahısı boş ola bilməz" + }, + "my-account": { + "label": "Hesabım" + }, + "spaces": { + "accept": "Qəbul et", + "accept-success": "Dəvət qəbul edildi. {{space}} artıq «Sizin sahələriniz» bölməsindədir.", + "active-user": "Aktiv Memos istifadəçisi", + "admin-role-description": "Bu sahəni redaktə edə, istifadəçi dəvət edə və üzvləri idarə edə bilər.", + "already-invited": "Dəvət artıq gözləmədədir", + "already-member": "Artıq üzvdür", + "cancel-invitation": "Dəvəti ləğv et", + "cancel-invitation-confirm-description": "İstifadəçi bu dəvəti artıq qəbul edə bilməyəcək. Onu sonra yenidən dəvət edə bilərsiniz.", + "cancel-invitation-confirm-title": "@{{username}} üçün dəvət ləğv edilsin?", + "cancel-invitation-success": "Dəvət ləğv edildi.", + "change-role": "@{{username}} istifadəçisinin rolunu dəyiş", + "create-scope-note": "Siz ilk admin olacaqsınız. Onu burada yaratmaq cari baxış əhatənizi dəyişməyəcək.", + "create-space": "Sahə yarat", + "decline": "Rədd et", + "decline-success": "Dəvət rədd edildi.", + "delete-confirm-description": "Bu, sahəni və ora yerləşdirilmiş qeydləri həmişəlik silir. Bu əməliyyat geri qaytarıla bilməz.", + "delete-confirm-title": "{{space}} silinsin?", + "delete-description": "Bu sahəni və ora yerləşdirilmiş qeydləri həmişəlik sil.", + "delete-space": "Sahəni sil", + "delete-success": "{{space}} silindi.", + "description": "Üzv olduğunuz sahələrə baxın, üzvləri və dəvətləri idarə edin.", + "description-help": "Bu sahənin nə üçün olduğunu izah edin.", + "general": "Ümumi", + "invitation-pending": "Dəvət gözləmədədir", + "invitations": "Dəvətlər", + "invite-description": "Mövcud Memos istifadəçisini dəvət edin. Sahəyə qoşulmaq üçün əvvəlcə dəvəti qəbul etməlidir.", + "invite-member": "Üzv dəvət et", + "invite-success": "Dəvət @{{username}} istifadəçisinə göndərildi.", + "invite-to": "{{space}} sahəsinə dəvət et", + "invite-yourself": "Bu, sizsiniz", + "invited-to-join": "Bu sahəyə qoşulmaq üçün dəvət almısınız.", + "label": "Sahələr", + "last-admin-leave-description": "Ayrılmazdan əvvəl başqa sahə adminini təyin edin.", + "leave": "Ayrıl", + "leave-confirm-description": "Bu sahədəki qeydlərə və qoşmalara girişi itirəcəksiniz.", + "leave-confirm-title": "{{space}} tərk edilsin?", + "leave-description": "Onun qeydlərinə və qoşmalarına girişi itirəcəksiniz.", + "leave-space": "Sahədən ayrıl", + "leave-success": "{{space}} sahəsindən ayrıldınız.", + "load-error": "Sahələrinizi yükləmək alınmadı.", + "loading": "Sahələr yüklənir...", + "loading-invitations": "Dəvətlər yüklənir...", + "loading-members": "Üzvlər yüklənir...", + "manage-space": "{{space}} sahəsini idarə et", + "member-count": "{{count}} üzv", + "members": "Üzvlər", + "members-count": "{{count}} üzv", + "members-description": "Bu sahəyə baxa və töhfə verə bilən şəxslər.", + "members-load-error": "Üzvləri yükləmək alınmadı.", + "memos-user": "Memos istifadəçisi", + "no-description": "Hələ təsvir yoxdur.", + "no-pending-invitations": "Gözləyən dəvət yoxdur.", + "no-spaces": "Hələ sahə yoxdur", + "no-spaces-description": "Qeydlər və üzvlər üçün ortaq yer yaradın. Onu burada yaratmaq cari baxış əhatənizi dəyişməyəcək.", + "pending-count": "{{count}} gözləyir", + "pending-invitations": "Gözləyən dəvətlər", + "remove": "Çıxar", + "remove-confirm-description": "O, bu sahədəki qeydlərə və qoşmalara girişi itirəcək.", + "remove-confirm-title": "@{{username}} bu sahədən çıxarılsın?", + "remove-success": "@{{username}} sahədən çıxarıldı.", + "role-in-space": "Bu sahədəki rol", + "role-update-success": "Üzvün rolu yeniləndi.", + "save-changes": "Dəyişiklikləri yadda saxla", + "save-success": "Sahə məlumatları yadda saxlanıldı.", + "search-user-placeholder": "Dəqiq istifadəçi adı ilə axtarın", + "send-invitation": "Dəvət göndər", + "space-admin": "Sahə admini", + "space-count": "{{count}} sahə", + "space-details": "Sahə məlumatları", + "space-details-description": "Bu məlumatlar sahədəki hər kəsə görünür.", + "space-user": "Sahə istifadəçisi", + "spaces-count": "{{count}} sahə", + "title": "Sahələr", + "untitled": "Adsız sahə", + "user-not-found": "@{{username}} üçün aktiv Memos istifadəçisi tapılmadı.", + "user-role-description": "Bu sahəyə baxa və töhfə verə bilər.", + "you": "Siz", + "your-access": "Sizin girişiniz", + "your-spaces": "Sizin sahələriniz" + }, + "notification": { + "email-description": "Qeyd şərhləri və qeyd edilmələr üçün e-poçt nüsxələri göndərin. Gmail smtp.gmail.com, 587 portu, STARTTLS və tətbiq parolu ilə işləyir.", + "email-enabled": "E-poçt bildirişlərini aktivləşdir", + "email-enabled-description": "E-poçt tətbiqdaxili gələnlər bildirişinə əlavə olaraq göndərilir. Bunu istifadəçilər üçün aktivləşdirməzdən əvvəl tələb olunan sahələri doldurun.", + "email-title": "E-poçt çatdırılması", + "from-email": "Göndərən e-poçt", + "from-email-description": "Bildiriş e-poçtlarında görünən göndərən ünvanı. Gmail üçün SMTP istifadəçi adı ilə eyni Gmail hesabını işlədin.", + "from-name": "Göndərənin adı", + "from-name-description": "Göndərən ünvanının yanında görünən ad. Yalnız e-poçt ünvanı görünsün deyə boş buraxın.", + "label": "Bildirişlər", + "reply-to": "Cavab ünvanı", + "reply-to-description": "Bildiriş e-poçtlarına cavabların gedəcəyi ünvan. Cavabları göndərən e-poçt ünvanında almaq üçün boş buraxın.", + "requirement-gmail": "Gmail üçün tələb olunur", + "requirement-optional": "İstəyə bağlı", + "requirement-recommended": "Tövsiyə olunur", + "requirement-required": "Tələb olunur", + "smtp-host": "SMTP hostu", + "smtp-host-description": "SMTP serverinin host adı. Gmail üçün smtp.gmail.com işlədin.", + "smtp-password": "SMTP parolu", + "smtp-password-description": "SMTP parolu və ya tətbiqə xas token. Gmail adi hesab parolunuzu deyil, Google tətbiq parolunu tələb edir.", + "smtp-password-placeholder-existing": "Cari parolu saxlamaq üçün boş buraxın", + "smtp-password-preserve-description": "Mövcud SMTP parolunu saxlamaq üçün boş buraxın. Yeni tətbiq parolunu yalnız məlumatları dəyişdirəndə daxil edin.", + "smtp-port": "SMTP portu", + "smtp-port-description": "Gmail və əksər provayderlər üçün STARTTLS ilə 587 işlədin. 465 yalnız SSL/TLS aktiv olanda işlədilir.", + "smtp-username": "SMTP istifadəçi adı", + "smtp-username-description": "Doğrulama üçün istifadəçi adı. Gmail tam Gmail ünvanınızı tələb edir.", + "test-email": "Sınaq e-poçtu göndər", + "test-email-missing-recipient": "Sınaq e-poçtu göndərməzdən əvvəl hesabınızda e-poçt ünvanı təyin edin.", + "test-email-sending": "Sınaq e-poçtu göndərilir...", + "test-email-success": "Sınaq e-poçtu {{email}} ünvanına göndərildi.", + "use-ssl": "SSL/TLS işlət", + "use-ssl-description": "Adətən 465 portu ilə işlədilən implisit TLS-dən istifadə edin. 587 portunda STARTTLS işlədəndə bunu söndürün.", + "use-tls": "STARTTLS işlət", + "use-tls-description": "SMTP bağlantısını STARTTLS ilə təkmilləşdirin. 587 portu ilə Gmail üçün bunu açıq saxlayın." + }, + "preference": { + "appearance-description": "Tətbiqin necə görünəcəyini və hesabınız üçün hansı dildən istifadə edəcəyini seçin.", + "appearance-title": "Görünüş", + "default-memo-sort-option": "Qeydin göstərilmə vaxtı", + "default-memo-visibility": "Defolt qeyd görünürlüyü", + "default-memo-visibility-description": "Redaktorda dəyişdirilmədikcə yeni yaradılan qeydlərə tətbiq edilən görünürlük.", + "label": "Tərcihlər", + "language-description": "İnterfeys dilini dərhal yeniləyir və hesabınızda yadda saxlayır.", + "memo-defaults-description": "Yeni qeyd yazarkən istifadə olunan defolt dəyərləri təyin edin.", + "memo-defaults-title": "Qeyd üçün defoltlar", + "save-media-metadata": "Media metaməlumatını yadda saxla", + "save-media-metadata-description": "Gələcək yükləmələr üçün mövcud kamera, çəkiliş vaxtı, məkan, şəkil ölçüləri və əsas video detallarını yadda saxlayın. Qoşmanı görə bilən hər kəs bu metaməlumatı ala bilər. Mövcud qoşmalar dəyişməz qalır.", + "theme-description": "Seçilmiş mövzunu bu cihazda dərhal tətbiq edir.", + "theme": "Mövzu", + "uploads-privacy-description": "Yüklənən media ilə birlikdə göndərilən, məxfiliyə həssas məlumatları idarə edin.", + "uploads-privacy-title": "Yükləmələr və məxfilik" + }, + "memo-view": { + "delete-confirm": "`{{title}}` görünüşünü silmək istədiyinizə əminsiniz?", + "delete-success": "`{{title}}` görünüşü silindi" + }, + "sso": { + "account": "Hesab", + "accounts-description": "Hər kimlik provayderini nəzərdən keçirin, cari bağlantı vəziyyətini görün və xarici kimlikləri bu hesaba qoşun və ya ondan ayırın.", + "accounts-title": "SSO hesabları", + "authorization-endpoint": "Avtorizasiya endpoint-i", + "avatar-url": "Avatar URL-i", + "basic-settings": "Əsas parametrlər", + "basic-settings-description": "OAuth məlumatlarını doldurmazdan əvvəl provayder kimliyini, görünən adı və istəyə bağlı identifikator qaydalarını təyin edin.", + "client-id": "Client ID", + "client-secret": "Client secret", + "client-secret-optional-description": "Mövcud client secret dəyişməz qalsın deyə boş buraxın.", + "configuration": "Konfiqurasiya", + "configuration-summary-description": "Tam konfiqurasiyanı sətir içində açmadan provayderi tanımağa və yoxlamağa kömək edən əsas məlumatları göstərir.", + "confirm-delete": "`{{name}}` SSO konfiqurasiyasını silmək istədiyinizə əminsiniz? BU ƏMƏLİYYAT GERİ QAYTARILA BİLMƏZ", + "create-sso": "SSO yarat", + "create-sso-description": "Admin tərəfindən idarə olunan vahid giriş üçün yeni kimlik provayderi yaradın.", + "custom": "Fərdi", + "delete-sso": "Silməni təsdiqlə", + "disabled-password-login-warning": "Parolla giriş deaktivdir, kimlik provayderlərini çıxararkən xüsusilə diqqətli olun", + "endpoints": "Endpoint-lər", + "display-name": "Görünən ad", + "extern-uid": "Xarici ID", + "extern-uid-description": "Bu, hazırda hesabınıza bağlı olan provayder tərəfindəki kimlikdir.", + "filter-disabled": "Deaktiv", + "identifier": "İdentifikator", + "identifier-filter": "İdentifikator süzgəci", + "identifier-filter-description": "Hansı xarici identifikatorların daxil ola biləcəyinə icazə vermək və ya onu məhdudlaşdırmaq üçün istifadə olunan istəyə bağlı regex.", + "field-mapping": "Claim uyğunlaşdırması", + "field-mapping-description": "İstifadəçini müəyyən etmək və profil məlumatlarını əvvəlcədən doldurmaq üçün istifadə olunan mənbə profil sahələrini uyğunlaşdırın.", + "field-mapping-identifier-description": "Daxil olarkən və ya hesabı bağlayarkən sabit xarici identifikator kimi istifadə olunur.", + "linked": "Bağlıdır", + "label": "SSO", + "mapping": "Uyğunlaşdırma", + "mapping-avatar-short": "avatar", + "mapping-display-name-short": "ad", + "mapping-email-short": "e-poçt", + "mapping-identifier-short": "id", + "mapping-none": "Konfiqurasiya edilməyib", + "no-sso-found": "SSO tapılmadı.", + "not-linked": "Bağlı deyil", + "not-linked-description": "Hələ heç bir xarici kimlik bağlanmayıb. Sonradan onunla daxil olmaq üçün bu provayderi qoşa bilərsiniz.", + "oauth-configuration": "OAuth konfiqurasiyası", + "oauth-configuration-description": "Giriş zamanı istifadə olunan OAuth müştəri məlumatlarını və provayder endpoint-lərini doldurun.", + "provider": "Provayder", + "provider-id": "Provayder ID-si", + "provider-id-description": "Yalnız kiçik hərflər, rəqəmlər və defislər. Bu dəyər provayder resursunun adının bir hissəsinə çevrilir.", + "provider-uid": "UID", + "redirect-url": "Yönləndirmə URL-i", + "redirect-url-description": "Avtorizasiya kodu axını tamamlana bilsin deyə bu callback URL-ini kimlik provayderinizdə qeydiyyatdan keçirin.", + "scope-count_one": "{{count}} scope", + "scope-count_other": "{{count}} scope", + "scopes": "Scope-lar", + "scopes-description": "Scope-ları boşluqla ayırın. Əksər provayderlərə profil və ya e-poçt girişi kimi kiçik bir dəst kifayət edir.", + "single-sign-on": "Autentifikasiya üçün vahid girişin (SSO) konfiqurasiyası", + "sso-created": "SSO {{name}} yaradıldı", + "sso-list": "SSO siyahısı", + "sso-updated": "SSO {{name}} yeniləndi", + "template": "Şablon", + "template-description": "Provayderin hazır şablonundan başlayın, sonra öz tenant-ınız üçün giriş məlumatlarını və endpoint-ləri tənzimləyin.", + "unlink-success": "{{name}} bağlantısı kəsildi.", + "token-endpoint": "Token endpoint-i", + "update-sso": "SSO-nu yenilə", + "update-sso-description": "Provayder konfiqurasiyasını nəzərdən keçirin, sonra dəyişməli olan sahələri yadda saxlayın.", + "user-endpoint": "İstifadəçi endpoint-i" + }, + "storage": { + "accesskey": "Access key", + "accesskey-description": "Bucket və ya S3 uyğun xidmət üçün Access key ID.", + "accesskey-placeholder": "Access key / Access ID", + "badge-default": "Defolt", + "badge-recommended": "Tövsiyə olunur", + "bucket": "Bucket", + "bucket-description": "Yeni qoşma obyektlərinin saxlanılacağı Bucket.", + "bucket-placeholder": "Bucket adı", + "create-a-service": "Xidmət yarat", + "create-storage": "Saxlama yarat", + "current-storage": "Qoşma saxlaması", + "current-storage-description": "Yeni qoşmaların harada saxlanılacağını seçin. Mövcud qoşmalar indiki saxlama yerində qalır.", + "database-description": "Qoşma bloblarını birbaşa tətbiqin verilənlər bazasında saxlayın.", + "database-note-backup": "Kiçik instanslarda qeydlərlə birlikdə ehtiyat nüsxəsini almaq sadədir.", + "database-note-size": "Qoşmalar çox və ya böyük olduqda verilənlər bazası sürətlə böyüyə bilər.", + "delete-storage": "Saxlamanı sil", + "endpoint": "Endpoint", + "endpoint-description": "Xidmət endpoint-i, məsələn AWS S3, Cloudflare R2, MinIO və ya digər uyğun URL.", + "filepath-template": "Fayl yolu şablonu", + "filepath-template-description": "Lokal və S3 saxlaması tərəfindən istifadə olunur. {timestamp}, {uuid} və {filename} dəstəklənir. Defolt: assets/{timestamp}_{uuid}_{filename}.", + "insecure-skip-tls-verify": "TLS yoxlamasını ötür", + "insecure-skip-tls-verify-description": "S3 endpoint-i üçün TLS sertifikat yoxlamasını deaktiv edin. Yalnız öz-özünə imzalanmış sertifikatdan istifadə edən etibarlı endpoint-lər üçün aktivləşdirin; bu, man-in-the-middle hücumlarına qarşı müdafiəni aradan qaldırır.", + "label": "Saxlama", + "local-description": "Yeni qoşmaları serverin fayl sistemində saxlayın. Yeni instanslar üçün defolt budur.", + "local-note-backup": "Qoşma qovluğunu qalıcı saxlayın və ehtiyat nüsxəsini alın, xüsusən Docker və ya konteyner yerləşdirmələrində.", + "local-note-path": "Nisbi yollar instans profilinin data qovluğu altına yazılır.", + "local-storage-path": "Lokal saxlama yolu", + "path": "Saxlama yolu", + "path-description": "Lokal saxlamadakı eyni dinamik dəyişənlərdən istifadə edə bilərsiniz, məsələn {filename}", + "path-placeholder": "custom/path", + "region": "Region", + "region-description": "Provayderin tələb etdiyi Region. Bəzi uyğun xidmətlər üçün provayderin qəbul etdiyi istənilən region sətri kifayətdir.", + "region-placeholder": "Region adı", + "s3-configuration": "S3 konfiqurasiyası", + "s3-configuration-description": "Yeni qoşmalar üçün S3 uyğun Bucket konfiqurasiya edin.", + "s3-description": "Yeni qoşmaları S3 uyğun obyekt saxlama xidmətində saxlayın.", + "s3-note-config": "Etibarlı Endpoint, Region, Bucket, giriş məlumatları, icazələr və serverin şəbəkə girişi tələb olunur.", + "s3-note-scale": "Böyük qoşma kitabxanaları, bulud yerləşdirmələri və ya çoxlu tətbiq instansı üçün ən uyğundur.", + "s3-compatible-url": "S3 uyğun URL", + "secretkey": "Secret key", + "secretkey-description": "Bucket və ya S3 uyğun xidmət üçün secret access key.", + "secretkey-preserve-description": "Mövcud secret key saxlanılsın deyə boş buraxın.", + "secretkey-placeholder": "Secret key / Access Key", + "selected-backend": "Seçilib", + "storage-services": "Saxlama xidmətləri", + "type-database": "Verilənlər bazası", + "type-local": "Lokal fayl sistemi", + "type-s3": "S3 uyğun saxlama", + "update-a-service": "Xidməti yenilə", + "update-local-path": "Lokal saxlama yolunu yenilə", + "update-local-path-description": "Lokal saxlama yolu verilənlər bazası faylınıza nisbi yoldur", + "update-storage": "Saxlamanı yenilə", + "url-prefix": "URL prefiksi", + "url-prefix-placeholder": "Xüsusi URL prefiksi, istəyə bağlı", + "url-suffix": "URL suffiksi", + "url-suffix-placeholder": "Xüsusi URL suffiksi, istəyə bağlı", + "use-path-style": "Path-style URL-lərdən istifadə et", + "use-path-style-description": "Virtual-hosted-style Bucket-ləri dəstəkləməyən MinIO kimi provayderlər və ya bəzi S3 uyğun xidmətlər üçün bunu aktivləşdirin.", + "warning-text": "`{{name}}` saxlama xidmətini silmək istədiyinizə əminsiniz? BU ƏMƏLİYYAT GERİ QAYTARILA BİLMƏZ" + }, + "system": { + "additional-script": "Əlavə skript", + "additional-script-description": "Hər veb səhifəyə JavaScript əlavə edin. Yalnız etibarlı koddan istifadə edin.", + "additional-script-placeholder": "Əlavə JavaScript kodu", + "additional-style": "Əlavə üslub", + "additional-style-description": "İnstans üzrə görünüşü tənzimləmək üçün veb tətbiqə CSS əlavə edin.", + "additional-style-placeholder": "Əlavə CSS kodu", + "allow-user-signup": "İstifadəçi qeydiyyatına icazə ver", + "basic-description": "Bu instans üçün ictimai kimlik və təqvim defoltlarını konfiqurasiya edin.", + "customize-server": { + "description": "Təsvir", + "icon-url": "İkon URL-i", + "locale": "Server dili", + "title": "Serveri fərdiləşdir" + }, + "custom-code-description": "Frontend-ə tətbiq olunan, istəyə bağlı instans üzrə CSS və JavaScript.", + "custom-code-title": "Xüsusi kod", + "disable-password-login": "Parol ilə girişi deaktiv et", + "disable-password-login-final-warning": "Nə etdiyinizi bilirsinizsə, `CONFIRM` yazın.", + "disable-password-login-warning": "Bu, bütün istifadəçilər üçün parol ilə girişi deaktiv edəcək. Konfiqurasiya etdiyiniz kimlik provayderləri işləməzsə, bu parametri verilənlər bazasında geri qaytarmadan daxil olmaq mümkün olmayacaq. Kimlik provayderini silərkən də xüsusilə diqqətli olmalısınız", + "display-with-updated-time": "Yenilənmə vaxtı ilə göstər", + "enable-auto-compact": "Avtomatik sıxılmanı aktivləşdir", + "enable-double-click-to-edit": "Redaktə üçün ikiqat kliki aktivləşdir", + "enable-password-login": "Parol ilə girişi aktivləşdir", + "enable-password-login-warning": "Bu, bütün istifadəçilər üçün parol ilə girişi aktivləşdirəcək. Yalnız istifadəçilərin həm SSO, həm də parol ilə daxil ola bilməsini istəyirsinizsə davam edin", + "label": "Sistem", + "max-upload-size": "Maksimum yükləmə ölçüsü (MiB)", + "max-upload-size-hint": "Tövsiyə olunan dəyər 32 MiB-dir.", + "removed-completed-task-list-items": "Tamamlanmış tapşırıq siyahısı elementlərinin silinməsini aktivləşdir", + "server-name": "Server adı", + "title": "Ümumi" + }, + "version": "Versiya", + "webhook": { + "create-dialog": { + "an-easy-to-remember-name": "Yadda saxlaması asan bir ad", + "copy-secret": "İmzalama sirrini kopyala", + "create-webhook": "Webhook yarat", + "create-webhook-success": "`{{name}}` webhook-u yaradıldı", + "edit-webhook": "Webhook-u redaktə et", + "generate-secret": "Yarat", + "payload-url": "Payload URL-i", + "reveal-secret": "Göstər", + "signing-secret": "İmzalama sirri", + "signing-secret-auto-note": "İmzalama sirri avtomatik yaradılır. Onu yaratdıqdan sonra görə bilərsiniz.", + "signing-secret-configured": "Konfiqurasiya edilib", + "signing-secret-created-note": "Webhook yaradıldı. İmzalama sirrini indi kopyalayın — onu sonra «Redaktə et» bölməsindən də görə bilərsiniz.", + "signing-secret-not-configured": "Konfiqurasiya edilməyib", + "title": "Başlıq", + "url-example-post-receive": "https://example.com/postreceive" + }, + "delete-dialog": { + "delete-webhook-description": "Bu əməliyyat geri qaytarıla bilməz.", + "delete-webhook-success": "`{{name}}` webhook-u uğurla silindi", + "delete-webhook-title": "`{{name}}` webhook-unu silmək istədiyinizə əminsiniz?" + }, + "no-webhooks-found": "Webhook tapılmadı.", + "title": "Webhook-lar", + "url": "URL", + "label": "Webhook-lar" + }, + "tags": { + "label": "Etiketlər", + "title": "Etiket metaməlumatı", + "description": "Etiketlərə bütün instans boyu istəyə bağlı göstərmə rəngi təyin edin və ya uyğun gələn qeyd məzmununu bulanıqlaşdırın. Etiket adları sabitlənmiş (anchored) regex şablonu kimi qəbul edilir.", + "add-rule": "Qayda əlavə et", + "background-color": "Fon rəngi", + "blur-content": "Məzmunu bulanıqlaşdır", + "configured-rules": "Qurulmuş qaydalar", + "default-color": "Defolt", + "matching-rule": "Sabitlənmiş regex", + "no-tags-configured": "Etiket metaməlumatı qurulmayıb.", + "tag-name": "Etiket adı", + "tag-name-placeholder": "məs. work və ya project/.*", + "tag-already-exists": "Etiket artıq mövcuddur.", + "tag-pattern-hint": "Etiket adı və ya regex şablonu (məs. project/.* bütün project/ etiketlərinə uyğun gəlir)", + "invalid-regex": "Yanlış və ya təhlükəsiz olmayan regex şablonu.", + "used-count": "{{count}} qeyd", + "using-default-color": "Defolt rəng istifadə olunur." + }, + "resource-stats": { + "label": "Resurslar", + "title": "Resurs statistikası", + "description": "Bu instans üçün resurs istifadəsi.", + "database": { + "title": "Verilənlər bazası", + "driver": "Drayver", + "size": "Ölçü" + }, + "local-storage": { + "title": "Lokal saxlama", + "size": "Data qovluğunun ölçüsü" + }, + "unknown": "Naməlum", + "last-updated": "Son yenilənmə {{ago}}", + "refresh": "Yenilə", + "load-error": "Statistikanı yükləmək alınmadı" + } + }, + "space": { + "create": "Sahə yarat", + "create-description": "Qeydlər və üzvlər üçün ortaq yer yaradın.", + "create-success": "Sahə yaradıldı", + "creator-admin-note": "Siz ilk admin olacaqsınız.", + "current": "Sahə", + "custom-id-conflict": "Bu Sahə UID-i artıq istifadədədir.", + "custom-id-help": "Keçidlərdə və API sorğularında istifadə olunur. Sonradan dəyişdirilə bilməz. 1–36 ASCII hərf, rəqəm və ya defis işlədin; defislə başlamayın və bitirməyin.", + "custom-id-invalid": "1–36 ASCII hərf, rəqəm və ya defis işlədin; əvvəldə və sonda defis olmasın.", + "custom-id-label": "Sahə UID-i", + "custom-id-toggle": "Sahə UID-ini fərdiləşdir", + "description-placeholder": "Bu sahə nə üçündür?", + "load-error": "Sahələr yüklənmədi", + "loading": "Sahələr yüklənir…", + "name-placeholder": "məs. Məhsul", + "spaces": "Sahələr", + "switch": "Sahəni dəyiş" + }, + "tag": { + "all-tags": "Bütün etiketlər", + "create-tag": "Etiket yarat", + "create-tags-guide": "`#tag` yazaraq etiket yarada bilərsiniz.", + "delete-confirm": "Bu etiketi silmək istədiyinizə əminsiniz? Bütün əlaqəli qeydlər arxivlənəcək.", + "delete-success": "Etiket uğurla silindi", + "delete-tag": "Etiketi sil", + "new-name": "Yeni ad", + "no-tag-found": "Etiket tapılmadı", + "old-name": "Köhnə ad", + "rename-error-empty": "Etiket adı boş ola və ya boşluq ehtiva edə bilməz", + "rename-error-repeat": "Yeni ad köhnə adla eyni ola bilməz", + "rename-success": "Etiketin adı uğurla dəyişdirildi", + "rename-tag": "Etiketin adını dəyiş", + "rename-tip": "Bu etiketi daşıyan bütün qeydləriniz yenilənəcək." + }, + "tooltip": { + "link-memo": "Qeydə keçid əlavə et", + "markdown-menu": "Markdown", + "select-location": "Məkan", + "select-visibility": "Görünürlük", + "tags": "Etiketlər", + "upload-attachment": "Qoşma(lar) yüklə" + } +} diff --git a/web/tests/i18n-locale-search.test.ts b/web/tests/i18n-locale-search.test.ts index ea39f203..90400454 100644 --- a/web/tests/i18n-locale-search.test.ts +++ b/web/tests/i18n-locale-search.test.ts @@ -1,5 +1,6 @@ import { describe, expect, it } from "vitest"; import { locales } from "@/i18n"; +import azTranslation from "@/locales/az.json"; import enTranslation from "@/locales/en.json"; import heTranslation from "@/locales/he.json"; import { getLocaleSearchLabels, localeMatchesSearch, normalizeLocaleSearchText } from "@/utils/i18n"; @@ -45,6 +46,15 @@ describe("locale search helpers", () => { expect(heTranslation.auth).not.toHaveProperty("host-tip"); }); + it("includes Azerbaijani in the supported locale list", () => { + expect(locales).toContain("az"); + expect(localeMatchesSearch("az", "azerbaijani", "en")).toBe(true); + }); + + it("keeps the Azerbaijani catalog aligned with the English one", () => { + expect(flattenTranslationKeys(azTranslation).sort()).toEqual(flattenTranslationKeys(enTranslation).sort()); + }); + 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("יפוג תוקף");