mirror of
https://github.com/immich-app/immich.git
synced 2026-07-10 14:14:00 -07:00
Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 0f7bfb73f6 | |||
| 557189d7a8 | |||
| 19313e75fd |
+1
-1
@@ -4,4 +4,4 @@
|
||||
/web/ @danieldietzler
|
||||
/machine-learning/ @mertalev
|
||||
/e2e/ @danieldietzler
|
||||
/mobile/ @shenlong-tanwen @santoshakil
|
||||
/mobile/ @shenlong-tanwen @santoshakil @agg23
|
||||
|
||||
+1
-1
@@ -2180,7 +2180,7 @@
|
||||
"video_quality": "Якасць відэа",
|
||||
"videos": "Відэа",
|
||||
"videos_count": "{count, plural, one {# відэа} other {# відэа}}",
|
||||
"view": "Прагляд",
|
||||
"view": "Выгляд",
|
||||
"view_album": "Праглядзець альбом",
|
||||
"view_all": "Праглядзець усё",
|
||||
"view_all_users": "Праглядзець усех карыстальнікаў",
|
||||
|
||||
+1
-1
@@ -108,7 +108,7 @@
|
||||
"image_thumbnail_quality_description": "Kvalita miniatur od 1 do 100. Vyšší je lepší, ale vytváří větší soubory a může snížit odezvu aplikace.",
|
||||
"image_thumbnail_title": "Miniatury",
|
||||
"import_config_from_json_description": "Importujte konfiguraci systému nahráním konfiguračního JSON souboru",
|
||||
"integrity_checks_checksum_files": "Soubory s kontrolními součty",
|
||||
"integrity_checks_checksum_files": "Kontrolní součty souborů",
|
||||
"integrity_checks_checksum_files_description": "Nastavení kontroly kontrolního součtu",
|
||||
"integrity_checks_checksum_files_enable_description": "Zapnout kontrolu kontrolního součtu",
|
||||
"integrity_checks_checksum_files_percentage_limit": "Procentuální limit",
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
"add_location": "הוספת מיקום",
|
||||
"add_partner": "הוספת שותף",
|
||||
"add_photos": "הוספת תמונות",
|
||||
"add_step": "הוסף שלב",
|
||||
"add_tag": "הוספת תג",
|
||||
"add_to": "הוספה ל…",
|
||||
"add_to_album": "הוספה לאלבום",
|
||||
@@ -106,6 +107,16 @@
|
||||
"image_thumbnail_quality_description": "איכות תמונה ממוזערת מ-1 עד 100. איכות גבוהה יותר היא טובה יותר, אבל מייצרת קבצים גדולים יותר ויכולה להפחית את תגובתיות היישום.",
|
||||
"image_thumbnail_title": "הגדרות תמונה ממוזערת",
|
||||
"import_config_from_json_description": "ייבוא תצורת מערכת באמצעות קובץ תצורה JSON",
|
||||
"integrity_checks_checksum_files_percentage_limit": "מגבלת אחוזים",
|
||||
"integrity_checks_checksum_files_time_limit": "מגבלת זמן",
|
||||
"integrity_checks_missing_files": "קבצים חסרים",
|
||||
"integrity_checks_missing_files_description": "הגדר את התדירות והפעל או השבת את בדיקת הקבצים החסרים",
|
||||
"integrity_checks_missing_files_enable_description": "הפעל את בדיקת הקבצים החסרים",
|
||||
"integrity_checks_settings": "בדיקת שלמות",
|
||||
"integrity_checks_settings_description": "ניהול מרווחי הזמן של בדיקות השלמות",
|
||||
"integrity_checks_untracked_files": "קבצים לא במעקב",
|
||||
"integrity_checks_untracked_files_description": "הגדר את התדירות והפעל או השבת את בדיקת הקבצים שלא במעקב",
|
||||
"integrity_checks_untracked_files_enable_description": "הפעל את בדיקת הקבצים שלא במעקב",
|
||||
"job_concurrency": "בו-זמניות של {job}",
|
||||
"job_created": "עבודה נוצרה",
|
||||
"job_not_concurrency_safe": "עבודה זו אינה בטוחה להרצה במקביל.",
|
||||
@@ -181,9 +192,18 @@
|
||||
"machine_learning_smart_search_enabled": "אפשר חיפוש חכם",
|
||||
"machine_learning_smart_search_enabled_description": "אם מושבת, תמונות לא יקודדו לחיפוש חכם.",
|
||||
"machine_learning_url_description": "כתובת ה-URL של שרת למידת המכונה. אם ניתנת יותר מכתובת URL אחת, כל שרת ינוסה ניסיון אחד בכל פעם עד שאחד מהם יגיב בהצלחה, לפי הסדר מהראשון עד האחרון. שרתים שלא מגיבים יוזנחו זמנית עד שיחזרו להיות מקוונים.",
|
||||
"maintenance_backup_management": "ניהול גיבוי",
|
||||
"maintenance_delete_backup": "מחק גיבוי",
|
||||
"maintenance_delete_backup_description": "קובץ זה ימחק לצמיתות.",
|
||||
"maintenance_delete_error": "מחיקת הגיבוי נכשלה.",
|
||||
"maintenance_integrity_check_all": "בדוק הכל",
|
||||
"maintenance_integrity_missing_file": "קבצים חסרים",
|
||||
"maintenance_integrity_missing_file_description": "קבצים ש‐Immich עקב אחריהם במסד הנתונים אך אינם קיימים במערכת הקבצים.",
|
||||
"maintenance_integrity_missing_file_job": "בדוק אם יש קבצים חסרים",
|
||||
"maintenance_integrity_missing_file_refresh_job": "רענון דוחות קבצים חסרים",
|
||||
"maintenance_integrity_untracked_file": "קבצים לא במעקב",
|
||||
"maintenance_integrity_untracked_file_description": "קבצים בתיקיות של Immich של-Immich אין תיעוד שלהם.",
|
||||
"maintenance_integrity_untracked_file_refresh_job": "רענן דוחות קבצים לא במעקב",
|
||||
"maintenance_restore_backup": "שחזור מגיבוי",
|
||||
"maintenance_restore_backup_description": "Immich יימחק וישוחזר מהגיבוי שנבחר. גיבוי ייווצר לפני שתמשיך.",
|
||||
"maintenance_restore_backup_different_version": "גיבוי זה נוצר עם גרסה שונה של Immich!",
|
||||
@@ -298,6 +318,8 @@
|
||||
"refreshing_all_libraries": "מרענן את כל הספריות",
|
||||
"registration": "רישום מנהל מערכת",
|
||||
"registration_description": "מכיוון שאתה המשתמש הראשון במערכת, אתה תוקצה כמנהל ואתה אחראי על משימות ניהול, ומשתמשים נוספים ייווצרו על ידך.",
|
||||
"release_channel_release_candidate": "מועמד לשחרור",
|
||||
"release_channel_stable": "יציב",
|
||||
"remove_failed_jobs": "הסרת משימות שנכשלו",
|
||||
"require_password_change_on_login": "דרוש מהמשתמש לשנות סיסמה בכניסה הראשונה",
|
||||
"reset_settings_to_default": "אפס הגדרות לברירת המחדל",
|
||||
@@ -392,6 +414,10 @@
|
||||
"transcoding_preferred_hardware_device_description": "חל רק על VAAPI ו-QSV. מגדיר את צומת ה-dri המשמש להמרת קידוד של חומרה.",
|
||||
"transcoding_preset_preset": "הגדרות קבועות מראש (-preset)",
|
||||
"transcoding_preset_preset_description": "מהירות דחיסה. הגדרות קבועות מראש איטיות יותר מייצרות קבצים קטנים יותר, ומגבירות את האיכות כאשר מכוונים לקצב סיביות מסוים. VP9 מתעלם ממהירויות מעל 'מהיר יותר'.",
|
||||
"transcoding_realtime": "קידוד בזמן אמת [ניסיוני]",
|
||||
"transcoding_realtime_description": "אפשר קידוד בזמן אמת בזמן שהסרטון משודר. מאפשר החלפת איכות, אך עלול לגרום להשהיות וגמגומים בהתאם ליכולות השרת.",
|
||||
"transcoding_realtime_enabled": "הפעל קידוד בזמן אמת",
|
||||
"transcoding_realtime_resolutions": "רזולוציות",
|
||||
"transcoding_reference_frames": "פריימים לייחוס",
|
||||
"transcoding_reference_frames_description": "מספר הפריימים לייחוס בעת דחיסה של פריים נתון. ערכים גבוהים יותר משפרים את יעילות הדחיסה, אך מאטים את הקידוד. 0 מגדיר את הערך זה באופן אוטומטי.",
|
||||
"transcoding_required_description": "רק סרטונים שאינם בפורמט מקובל",
|
||||
|
||||
@@ -434,6 +434,7 @@
|
||||
"transcoding_realtime_resolutions": "Risoluzioni",
|
||||
"transcoding_realtime_resolutions_description": "Le risoluzioni offerte per la transcodifica in tempo reale. Risoluzioni più elevate possono causare problemi di riproduzione se il server non riesce a transcodificarle abbastanza rapidamente.",
|
||||
"transcoding_realtime_video_codecs": "Codec video",
|
||||
"transcoding_realtime_video_codecs_description": "I codec video disponibili per la transcodifica in tempo reale. I client sceglieranno l'opzione migliore tra quelle supportate durante la riproduzione. L'AV1 è più efficiente dell'HEVC, che a sua volta è più efficiente dell'H.264. Quando si utilizza l'accelerazione hardware, selezionare solo i codec che l'acceleratore è in grado di codificare. Quando si utilizza la transcodifica software, tenere presente che l'H.264 è più veloce dell'AV1, che a sua volta è più veloce dell'HEVC.",
|
||||
"transcoding_reference_frames": "Frame di riferimento",
|
||||
"transcoding_reference_frames_description": "Il numero di frame da prendere in considerazione nel comprimere un determinato frame. Valori più alti migliorano l'efficienza di compressione, ma rallentano la codifica. 0 imposta questo valore automaticamente.",
|
||||
"transcoding_required_description": "Solo video che non sono in un formato accettato",
|
||||
@@ -2190,6 +2191,7 @@
|
||||
"upload_status_errors": "Errori",
|
||||
"upload_status_uploaded": "Caricato",
|
||||
"upload_success": "Caricamento completato, aggiorna la pagina per vedere le nuove risorse caricate.",
|
||||
"upload_to_album_body": "Per gli utenti che non utilizzano la funzione di caricamento manuale, ora è possibile scegliere di aggiungere le foto locali direttamente a un album mentre le si carica, senza più bisogno di caricarle prima per poi aggiungerle a un album in un secondo momento.",
|
||||
"upload_to_album_title": "Carica direttamente in un album",
|
||||
"upload_to_immich": "Carica su Immich ({count})",
|
||||
"uploading": "Caricamento",
|
||||
|
||||
+10
-4
@@ -108,7 +108,7 @@
|
||||
"image_thumbnail_quality_description": "Qualidade das miniaturas de 1 a 100. Maior é melhor, mas produz tamanhos de ficheiro maiores e podem reduzir a capacidade de resposta da aplicação.",
|
||||
"image_thumbnail_title": "Definições de Miniaturas",
|
||||
"import_config_from_json_description": "Importar configuração do sistema ao carregar um ficheiro JSON",
|
||||
"integrity_checks_checksum_files": "Ficheiros de checksum",
|
||||
"integrity_checks_checksum_files": "Checksum de ficheiros",
|
||||
"integrity_checks_checksum_files_description": "Configurar a verificação de checksum",
|
||||
"integrity_checks_checksum_files_enable_description": "Ativar a verificação de checksum",
|
||||
"integrity_checks_checksum_files_percentage_limit": "Limite percentual",
|
||||
@@ -431,6 +431,10 @@
|
||||
"transcoding_realtime_description": "Permite que a transcodificação seja efetuada em tempo real enquanto o vídeo a está a ser transmitido. Permite a alteração de qualidade, mas pode causar um maior atraso na reprodução e lentidão dependendo da capacidade do servidor.",
|
||||
"transcoding_realtime_enabled": "Ativar transcodificação em tempo real",
|
||||
"transcoding_realtime_enabled_description": "Se estiver desativado, o servidor irá recusar o início de novas sessões de transcodificação em tempo real.",
|
||||
"transcoding_realtime_resolutions": "Resoluções",
|
||||
"transcoding_realtime_resolutions_description": "As resoluções que são disponibilizadas para transcodificação em tempo real. Resoluções mais altas podem causar problemas de reprodução se o servidor não conseguir transcodificá-las com rapidez suficiente.",
|
||||
"transcoding_realtime_video_codecs": "Codecs de vídeo",
|
||||
"transcoding_realtime_video_codecs_description": "Os codecs de vídeo que são disponibilizados para transcodificação em tempo real. Os clientes vão escolher a melhor opção que suportam durante a reprodução. AV1 é mais eficiente do que HEVC, que por sua vez é mais eficiente do que H.264. Ao utilizar aceleração por hardware, selecione apenas os codecs que o acelerador consegue codificar. Ao utilizar transcodificação por software, observe que H.264 é mais rápido do que AV1, que por sua vez é mais rápido do que HEVC.",
|
||||
"transcoding_reference_frames": "Quadros de referência",
|
||||
"transcoding_reference_frames_description": "O número de quadros a serem referenciados ao comprimir um determinado quadro. Valores mais altos melhoram a eficiência da compressão, mas tornam a codificação mais lenta. 0 define esse valor automaticamente.",
|
||||
"transcoding_required_description": "Apenas vídeos que não estejam num formato aceite",
|
||||
@@ -593,6 +597,7 @@
|
||||
"asset_viewer_settings_title": "Visualizador",
|
||||
"assets": "Ficheiros",
|
||||
"assets_added_to_album_count": "{count, plural, one {# ficheiro adicionado} other {# ficheiros adicionados}} ao álbum",
|
||||
"assets_added_to_album_partial_count": "{totalCount, plural, one {Foi adicionado} other {Foram adicionados}} {successCount} de {totalCount} {totalCount, plural, one {ficheiro} other {ficheiros}} ao álbum",
|
||||
"assets_added_to_albums_count": "{assetTotal, plural, one {Foi adicionado # ficheiro} other {Foram adiciondos # ficheiros}} a {albumTotal, plural, one {# álbum} other {# albuns}}",
|
||||
"assets_cannot_be_added_to_album_count": "Não foi possível adicionar {count, plural, one {ficheiro} other {ficheiros}} ao álbum",
|
||||
"assets_cannot_be_added_to_albums": "{count, plural, one {Ficheiro não pode ser adicionado} other {Ficheiros não podem ser adiciondos}} a nenhum dos álbuns",
|
||||
@@ -1140,7 +1145,7 @@
|
||||
"forgot_pin_code_question": "Esqueceu-se do seu PIN?",
|
||||
"forward": "Para a frente",
|
||||
"free_up_space": "Libertar Espaço",
|
||||
"free_up_space_description": "Mover fotos e vídeos que tenham sido copiados para o servidor para a reciclagem do seu dispositivo para libertar espaço. As cópias no servidor mantêm-se seguras.",
|
||||
"free_up_space_description": "Mover fotos e vídeos que já tenham sido copiados para o servidor para a reciclagem do seu dispositivo para libertar espaço. As cópias no servidor mantêm-se seguras.",
|
||||
"free_up_space_settings_subtitle": "Libertar espaço no dispositivo",
|
||||
"full_path": "Caminho completo: {path}",
|
||||
"full_path_or_folder": "Caminho completo ou nome da pasta",
|
||||
@@ -1843,7 +1848,7 @@
|
||||
"search_no_people_named": "Nenhuma pessoa chamada \"{name}\"",
|
||||
"search_no_result": "Nenhum resultado encontrado, tente pesquisar por algo diferente",
|
||||
"search_options": "Opções de pesquisa",
|
||||
"search_page_search_photos_videos": "Pesquise suas fotos e vídeos",
|
||||
"search_page_search_photos_videos": "Pesquise pelas suas fotos e vídeos",
|
||||
"search_page_view_all_button": "Ver tudo",
|
||||
"search_people": "Pesquisar pessoas",
|
||||
"search_places": "Pesquisar lugares",
|
||||
@@ -1883,7 +1888,7 @@
|
||||
"send_message": "Enviar mensagem",
|
||||
"send_welcome_email": "Enviar E-mail de boas vindas",
|
||||
"server_endpoint": "URL do servidor",
|
||||
"server_info_box_app_version": "Versão do app",
|
||||
"server_info_box_app_version": "Versão da aplicação",
|
||||
"server_info_box_server_url": "URL do servidor",
|
||||
"server_offline": "Servidor Offline",
|
||||
"server_online": "Servidor Online",
|
||||
@@ -2150,6 +2155,7 @@
|
||||
"unknown": "Desconhecido",
|
||||
"unknown_country": "País desconhecido",
|
||||
"unknown_date": "Data desconhecida",
|
||||
"unknown_schema": "Esquema desconhecido",
|
||||
"unknown_year": "Ano desconhecido",
|
||||
"unlimited": "Ilimitado",
|
||||
"unlink_motion_video": "Remover relação com video animado",
|
||||
|
||||
+31
-31
@@ -392,52 +392,52 @@
|
||||
"transcoding_acceleration_qsv": "Quick Sync (требуется процессор Intel 7-го поколения или новее)",
|
||||
"transcoding_acceleration_rkmpp": "RKMPP (только для SOC Rockchip)",
|
||||
"transcoding_acceleration_vaapi": "VAAPI",
|
||||
"transcoding_accepted_audio_codecs": "Поддерживаемые аудиокодеки",
|
||||
"transcoding_accepted_audio_codecs_description": "Выберите аудиокодеки, которые не нужно перекодировать. Используется только для определенных политик перекодирования.",
|
||||
"transcoding_accepted_containers": "Поддерживаемые контейнеры",
|
||||
"transcoding_accepted_audio_codecs": "Допустимые аудиокодеки",
|
||||
"transcoding_accepted_audio_codecs_description": "Выберите аудиокодеки, видео с которыми не нужно перекодировать. Используется только для определенных политик перекодирования.",
|
||||
"transcoding_accepted_containers": "Допустимые контейнеры",
|
||||
"transcoding_accepted_containers_description": "Выберите, какие форматы контейнеров не нужно преобразовывать в MP4. Используется только для определенных политик перекодирования.",
|
||||
"transcoding_accepted_video_codecs": "Поддерживаемые видеокодеки",
|
||||
"transcoding_accepted_video_codecs_description": "Выберите видеокодеки, которые не нужно перекодировать. Используется только для определенных политик перекодирования.",
|
||||
"transcoding_advanced_options_description": "Параметры, которые большинству пользователей не следует менять",
|
||||
"transcoding_accepted_video_codecs": "Допустимые видеокодеки",
|
||||
"transcoding_accepted_video_codecs_description": "Выберите видеокодеки, видео с которыми не нужно перекодировать. Используется только для определенных политик перекодирования.",
|
||||
"transcoding_advanced_options_description": "Параметры, которые большинству пользователей не следует изменять",
|
||||
"transcoding_audio_codec": "Аудиокодек",
|
||||
"transcoding_audio_codec_description": "Opus — вариант самого высокого качества, но имеет меньшую совместимость со старыми устройствами или программным обеспечением.",
|
||||
"transcoding_bitrate_description": "Видео с битрейтом выше максимального или в неподходящем формате может вызвать проблемы",
|
||||
"transcoding_bitrate_description": "Видео с битрейтом выше максимального или в недопустимом формате",
|
||||
"transcoding_codecs_learn_more": "Для понимания используемой терминологии обратитесь к документации FFmpeg по кодекам <h264-link>H.264</h264-link>, <hevc-link>HEVC</hevc-link> и <vp9-link>VP9</vp9-link>.",
|
||||
"transcoding_constant_quality_mode": "Режим постоянного качества",
|
||||
"transcoding_constant_quality_mode_description": "Режим ICQ лучше, чем CQP, но некоторые устройства аппаратного ускорения его не поддерживают. Установка этой опции будет отдавать предпочтение указанному режиму при использовании кодирования на основе качества. NVENC не поддерживает режим ICQ.",
|
||||
"transcoding_constant_rate_factor": "Коэффициент постоянной скорости (-crf)",
|
||||
"transcoding_constant_rate_factor": "Постоянный коэффициент скорости (-crf)",
|
||||
"transcoding_constant_rate_factor_description": "Уровень качества видео. Типичные значения: 23 для H.264, 28 для HEVC, 31 для VP9 и 35 для AV1. Чем ниже, тем лучше, но при этом создаются файлы большего размера.",
|
||||
"transcoding_disabled_description": "Не перекодировать видео, это может привести к сбою воспроизведения на некоторых клиентах",
|
||||
"transcoding_disabled_description": "Не перекодировать никакие видео, может привести к проблемам воспроизведения на некоторых клиентах",
|
||||
"transcoding_encoding_options": "Параметры кодирования",
|
||||
"transcoding_encoding_options_description": "Установите кодеки, разрешение, качество и другие параметры для кодированного видео",
|
||||
"transcoding_encoding_options_description": "Кодеки, разрешение, качество и другие параметры для перекодирования видео",
|
||||
"transcoding_hardware_acceleration": "Аппаратное ускорение",
|
||||
"transcoding_hardware_acceleration_description": "Экспериментально: более быстрое транскодирование, но с возможным ухудшением качества при том же битрейте",
|
||||
"transcoding_hardware_decoding": "Аппаратное декодирование",
|
||||
"transcoding_hardware_decoding_setting_description": "Дополнительно ускоряет декодирование, а не только кодирование. Может работать не со всеми видео.",
|
||||
"transcoding_max_b_frames": "Максимально промежуточных кадров",
|
||||
"transcoding_max_b_frames_description": "Более высокие значения повышают эффективность сжатия, но замедляют кодирование. Может быть несовместимо с аппаратным ускорением на старых устройствах. 0 отключает B-кадры, а -1 устанавливает это значение автоматически.",
|
||||
"transcoding_max_b_frames": "Максимальное количество промежуточных кадров",
|
||||
"transcoding_max_b_frames_description": "Более высокие значения повышают эффективность сжатия, но замедляют кодирование. Может быть несовместимо с аппаратным ускорением на старых устройствах. Значение 0 полностью отключает создание промежуточных B-кадров, а -1 - устанавливает автоматическое определение их количества.",
|
||||
"transcoding_max_bitrate": "Максимальный битрейт",
|
||||
"transcoding_max_bitrate_description": "Ограничение битрейта может сделать размер файла более предсказуемым при незначительном снижении качества. При разрешении 720p типичными значениями являются 2600 кбит/с для кодеков VP9 или HEVC и 4500 кбит/с для H.264. Ограничение отключено, если задано значение 0. Когда единица измерения не указана, предполагается k (кбит/с); поэтому значения 5000, 5000k и 5M (для Мбит/с) эквивалентны.",
|
||||
"transcoding_max_keyframe_interval": "Максимальный интервал ключевых кадров",
|
||||
"transcoding_max_keyframe_interval_description": "Устанавливает максимальное расстояние между ключевыми кадрами. Более низкие значения ухудшают эффективность сжатия, но сокращают время поиска и могут улучшить качество в сценах с быстрым движением. 0 устанавливает это значение автоматически.",
|
||||
"transcoding_optimal_description": "Видео с разрешением выше целевого или не в принятом формате",
|
||||
"transcoding_policy": "Политика перекодировки",
|
||||
"transcoding_policy_description": "Установите, когда видео будет перекодировано",
|
||||
"transcoding_max_keyframe_interval_description": "Устанавливает максимальное расстояние между ключевыми кадрами. Более низкие значения ухудшают эффективность сжатия, но сокращают время поиска и могут улучшить качество в сценах с быстрым движением. Значение 0 устанавливает автоматическое определение.",
|
||||
"transcoding_optimal_description": "Видео с разрешениями выше целевого или в недопустимом формате",
|
||||
"transcoding_policy": "Политика перекодирования",
|
||||
"transcoding_policy_description": "Какие видео должны подвергаться перекодированию",
|
||||
"transcoding_preferred_hardware_device": "Предпочитаемое аппаратное устройство",
|
||||
"transcoding_preferred_hardware_device_description": "Применяется только к VAAPI и QSV. Устанавливает dri-узел, используемый для аппаратного транскодирования.",
|
||||
"transcoding_preset_preset": "Предустановка",
|
||||
"transcoding_preset_preset_description": "Скорость сжатия. Медленные настройки создают более маленькие файлы и повышают качество при достижении определенного битрейта. VP9 игнорирует скорости выше “faster”.",
|
||||
"transcoding_realtime": "[ЭКСПЕРИМЕНТАЛЬНО] Перекодирование в реальном времени",
|
||||
"transcoding_realtime_description": "Позволяет перекодировать видео в режиме реального времени во время воспроизведения. Поддерживает переключение качества, но может вызывать более высокие задержки воспроизведения и подтормаживания в зависимости от производительности сервера.",
|
||||
"transcoding_realtime_enabled": "Включить перекодирование в реальном времени",
|
||||
"transcoding_realtime_enabled_description": "Отключение параметра приведёт к недоступности запуска перекодирования в реальном времени.",
|
||||
"transcoding_preset_preset": "Профиль кодирования (-preset)",
|
||||
"transcoding_preset_preset_description": "Определяют скорость сжатия. Более медленные профили приводят к созданию файлов меньшего размера и повышают качество при установке достаточного битрейта. VP9 игнорирует профили выше “faster”.",
|
||||
"transcoding_realtime": "[ЭКСПЕРИМЕНТАЛЬНО] Транскодирование в реальном времени",
|
||||
"transcoding_realtime_description": "Позволяет транскодировать видео в режиме реального времени во время воспроизведения. Поддерживает переключение качества, но может вызывать задержки воспроизведения и подтормаживания в случае недостаточной производительности сервера.",
|
||||
"transcoding_realtime_enabled": "Включить транскодирование в реальном времени",
|
||||
"transcoding_realtime_enabled_description": "Отключение приведёт к недоступности транскодирования в реальном времени.",
|
||||
"transcoding_realtime_resolutions": "Разрешения",
|
||||
"transcoding_realtime_resolutions_description": "Доступные разрешения для транскодирования в реальном времени. Высокие разрешения могут вызвать проблемы с воспроизведением, если возможностей сервера будет недостаточно.",
|
||||
"transcoding_realtime_video_codecs": "Видеокодеки",
|
||||
"transcoding_realtime_video_codecs_description": "Доступные видеокодеки для транскодирования в реальном времени. Клиенты будут выбирать наиболее подходящий кодек во время воспроизведения. AV1 эффективнее, чем HEVC, который, в свою очередь, эффективнее, чем H.264. При использовании аппаратного ускорения выбирайте только те кодеки, которые поддерживает ускоритель. При использовании программного перекодирования обратите внимание, что H.264 быстрее, чем AV1, который, в свою очередь, быстрее, чем HEVC.",
|
||||
"transcoding_reference_frames": "Опорные кадры",
|
||||
"transcoding_reference_frames_description": "Количество кадров, на которые следует ссылаться при сжатии данного кадра. Более высокие значения повышают эффективность сжатия, но замедляют кодирование. 0 устанавливает это значение автоматически.",
|
||||
"transcoding_required_description": "Только видео в нестандартном формате",
|
||||
"transcoding_reference_frames_description": "Количество кадров, на которые следует ссылаться при сжатии текущего кадра. Более высокие значения повышают эффективность сжатия, но замедляют кодирование. Значение 0 устанавливает автоматическое определение их количества.",
|
||||
"transcoding_required_description": "Только видео в недопустимом формате",
|
||||
"transcoding_settings": "Настройки транскодирования видео",
|
||||
"transcoding_settings_description": "Управляйте тем, какие видео нужно перекодировать и как их обрабатывать",
|
||||
"transcoding_target_resolution": "Целевое разрешение",
|
||||
@@ -445,15 +445,15 @@
|
||||
"transcoding_temporal_aq": "Temporal Adaptive Quantization (временное адаптивное квантование)",
|
||||
"transcoding_temporal_aq_description": "Применимо только к NVENC (NVIDIA Encoder). Технология повышает качество высокодетализированных нединамичных сцен. Может быть несовместима со старыми устройствами.",
|
||||
"transcoding_threads": "Потоки",
|
||||
"transcoding_threads_description": "Более высокие значения приводят к более быстрому кодированию, но оставляют серверу меньше места для обработки других задач во время активности. Это значение не должно превышать количество ядер процессора. Максимизирует использование, если установлено значение 0.",
|
||||
"transcoding_threads_description": "Более высокие значения приводят к более быстрому перекодированию, но отнимают больше ресурсов у сервера для выполнения других задач. Значение не должно превышать количество ядер процессора. Значение 0 максимизирует использование ресурсов.",
|
||||
"transcoding_tone_mapping": "Отображение тонов",
|
||||
"transcoding_tone_mapping_description": "Пытается сохранить внешний вид HDR-видео при преобразовании в SDR. Каждый алгоритм делает разные компромиссы между цветом, детализацией и яркостью. Hable сохраняет детали, Mobius сохраняет цвет, а Reinhard сохраняет яркость.",
|
||||
"transcoding_tone_mapping_description": "Технология сохранения отображения HDR-видео при преобразовании в SDR. Каждый алгоритм предлагает разные компромиссы между цветом, детализацией и яркостью. Hable сохраняет детали, Mobius сохраняет цвет, а Reinhard сохраняет яркость.",
|
||||
"transcoding_transcode_policy": "Политика перекодирования",
|
||||
"transcoding_transcode_policy_description": "Правила, определяющие, какие видео должны быть перекодированы. HDR-видео и видео с форматом пикселей, отличным от YUV 4:2:0, всегда будут перекодироваться (за исключением случаев, когда перекодирование отключено).",
|
||||
"transcoding_transcode_policy_description": "Определяет какие видео должны быть перекодированы. HDR-видео и видео с форматом пикселей, отличным от YUV 4:2:0, всегда будут перекодироваться (за исключением случаев, когда перекодирование отключено).",
|
||||
"transcoding_two_pass_encoding": "Двухпроходное кодирование",
|
||||
"transcoding_two_pass_encoding_setting_description": "Перекодируйте за два прохода, чтобы получить более качественное кодирование видео. Когда включен максимальный битрейт (необходим для работы с H.264 и HEVC), в этом режиме используется диапазон битрейта, основанный на максимальном битрейте, и игнорируется CRF. Для VP9 можно использовать CRF, если отключен максимальный битрейт.",
|
||||
"transcoding_two_pass_encoding_setting_description": "Перекодирование в два прохода для получения более качественного видео. Когда включён максимальный битрейт (требуется для работы с H.264 и HEVC), этот режим использует диапазон битрейта, опираясь на значение максимального битрейта, и игнорирует CRF (постоянный коэффициент скорости). Для VP9 CRF может использоваться только если отключён максимальный битрейт.",
|
||||
"transcoding_video_codec": "Видеокодек",
|
||||
"transcoding_video_codec_description": "VP9 обладает высокой эффективностью и веб-совместимостью, но перекодирование занимает больше времени. HEVC работает аналогично, но имеет меньшую веб-совместимость. H.264 широко совместим и быстро перекодируется, но создает файлы гораздо большего размера. AV1 — наиболее эффективный кодек, но он не поддерживается на старых устройствах.",
|
||||
"transcoding_video_codec_description": "VP9 обладает высокой эффективностью и веб-совместимостью, но перекодирование занимает больше времени. HEVC работает аналогично, но имеет меньшую веб-совместимость. H.264 широко совместим и быстро кодируется, но создаёт файлы гораздо большего размера. AV1 — наиболее эффективный кодек, но он не поддерживается старыми устройствами.",
|
||||
"trash_enabled_description": "Включить корзину",
|
||||
"trash_number_of_days": "Срок хранения",
|
||||
"trash_number_of_days_description": "Количество дней, в течение которых файлы будут храниться в корзине до окончательного удаления",
|
||||
@@ -479,7 +479,7 @@
|
||||
"user_successfully_removed": "Пользователь {email} успешно удален.",
|
||||
"users_page_description": "Управление пользователями системы",
|
||||
"version_check_channel": "Канал обновлений",
|
||||
"version_check_channel_description": "Выберите канал по которым получать уведомления о новых версиях",
|
||||
"version_check_channel_description": "Выберите канал по которому получать уведомления о новых версиях",
|
||||
"version_check_enabled_description": "Включить проверку наличия новых версий",
|
||||
"version_check_implications": "Функция проверки версии периодически обращается к сайту {server}",
|
||||
"version_check_settings": "Проверка версии",
|
||||
@@ -1728,7 +1728,7 @@
|
||||
"recently_added_title": "Недавно добавленные",
|
||||
"recently_taken": "Недавно снято",
|
||||
"refresh": "Обновить",
|
||||
"refresh_encoded_videos": "Обновить закодированные видео",
|
||||
"refresh_encoded_videos": "Обновить перекодированные видео",
|
||||
"refresh_faces": "Обновить лица",
|
||||
"refresh_metadata": "Обновить метаданные",
|
||||
"refresh_thumbnails": "Обновить миниатюры",
|
||||
|
||||
@@ -431,6 +431,10 @@
|
||||
"transcoding_realtime_description": "Videonun akışı sırasında kod dönüştürme işleminin gerçek zamanlı olarak yapılmasını sağlar. Kalite değiştirmeye olanak tanır, ancak sunucu yeteneklerine bağlı olarak daha yüksek oynatma gecikmesine ve takılmalara neden olabilir.",
|
||||
"transcoding_realtime_enabled": "Gerçek zamanlı kod dönüştürmeyi etkinleştirin",
|
||||
"transcoding_realtime_enabled_description": "Devre dışı bırakılırsa, sunucu yeni gerçek zamanlı kod dönüştürme oturumları başlatmayı reddedecektir.",
|
||||
"transcoding_realtime_resolutions": "Çözüm",
|
||||
"transcoding_realtime_resolutions_description": "Gerçek zamanlı dönüştürme (transcoding) için sunulan çözünürlükler. Sunucu veriyi yeterince hızlı dönüştüremezse, yüksek çözünürlükler oynatma sorunlarına yol açabilir.",
|
||||
"transcoding_realtime_video_codecs": "Video kodekleri",
|
||||
"transcoding_realtime_video_codecs_description": "Anlık kod dönüştürme için sunulan video kodekleri. Cihazlar, oynatma esnasında destekledikleri en iyi kodeği seçecektir. Verimlilik sıralaması AV1 > HEVC > H.264 şeklindedir. Donanım hızlandırma aktifken sadece ekran kartınızın desteklediği kodekleri seçiniz. Yazılımsal dönüştürmede ise hız sıralaması H.264 > AV1 > HEVC şeklindedir.",
|
||||
"transcoding_reference_frames": "Referans kareler",
|
||||
"transcoding_reference_frames_description": "Belirli bir kareyi sıkıştırırken referans alınacak kare sayısı. Daha yüksek değerler sıkıştırma verimliliğini artırır, ancak kodlamayı yavaşlatır. 0 bu değeri otomatik olarak ayarlar.",
|
||||
"transcoding_required_description": "Yalnızca kabul edilen formatta olmayan videolar",
|
||||
@@ -593,6 +597,7 @@
|
||||
"asset_viewer_settings_title": "İçerik Görüntüleyici",
|
||||
"assets": "Öğeler",
|
||||
"assets_added_to_album_count": "Albüme {count, plural, one {# asset} other {# assets}} eklendi",
|
||||
"assets_added_to_album_partial_count": "Albüme {successCount} içerisinden {totalCount} {totalCount, plural, one {ögeden} other {ögeden}} tane eklendi",
|
||||
"assets_added_to_albums_count": "Eklendi {assetTotal, plural, one {# asset} other {# assets}} buraya {albumTotal, plural, one {# album} other {# albums}}",
|
||||
"assets_cannot_be_added_to_album_count": "{count, plural, one {Asset} other {Assets}} albüme eklenemiyor",
|
||||
"assets_cannot_be_added_to_albums": "{count, plural, one {Asset} other {Assets}} hiçbir albüme eklenemez",
|
||||
@@ -2150,6 +2155,7 @@
|
||||
"unknown": "Bilinmeyen",
|
||||
"unknown_country": "Bilinmeyen Ülke",
|
||||
"unknown_date": "Bilinmeyen tarih",
|
||||
"unknown_schema": "Bilinmeyen şema",
|
||||
"unknown_year": "Bilinmeyen Yıl",
|
||||
"unlimited": "Sınırsız",
|
||||
"unlink_motion_video": "Hareketli video bağlantısını kaldır",
|
||||
|
||||
@@ -7,6 +7,16 @@ import { preferencesFactory } from '@test-data/factories/preferences-factory';
|
||||
import { userAdminFactory } from '@test-data/factories/user-factory';
|
||||
import AssetViewerNavBar from './AssetViewerNavBar.svelte';
|
||||
|
||||
vi.mock(import('$lib/managers/feature-flags-manager.svelte'), function () {
|
||||
return {
|
||||
featureFlagsManager: {
|
||||
init: vi.fn(),
|
||||
loadFeatureFlags: vi.fn(),
|
||||
value: { smartSearch: true, trash: true },
|
||||
} as never,
|
||||
};
|
||||
});
|
||||
|
||||
describe('AssetViewerNavBar component', () => {
|
||||
const additionalProps = {
|
||||
preAction: () => {},
|
||||
@@ -24,15 +34,6 @@ describe('AssetViewerNavBar component', () => {
|
||||
};
|
||||
});
|
||||
vi.stubGlobal('ResizeObserver', getResizeObserverMock());
|
||||
vi.mock(import('$lib/managers/feature-flags-manager.svelte'), function () {
|
||||
return {
|
||||
featureFlagsManager: {
|
||||
init: vi.fn(),
|
||||
loadFeatureFlags: vi.fn(),
|
||||
value: { smartSearch: true, trash: true },
|
||||
} as never,
|
||||
};
|
||||
});
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
|
||||
@@ -4,16 +4,14 @@ import { renderWithTooltips } from '$tests/helpers';
|
||||
import { assetFactory } from '@test-data/factories/asset-factory';
|
||||
import DeleteAction from './DeleteAction.svelte';
|
||||
|
||||
vi.mock(import('$lib/managers/feature-flags-manager.svelte'), () => {
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
return { featureFlagsManager: { init: vi.fn(), loadFeatureFlags: vi.fn(), value: { trash: true } } as any };
|
||||
});
|
||||
|
||||
let asset: AssetResponseDto;
|
||||
|
||||
describe('DeleteAction component', () => {
|
||||
beforeEach(() => {
|
||||
vi.mock(import('$lib/managers/feature-flags-manager.svelte'), () => {
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
return { featureFlagsManager: { init: vi.fn(), loadFeatureFlags: vi.fn(), value: { trash: true } } as any };
|
||||
});
|
||||
});
|
||||
|
||||
describe('given an asset which is not trashed yet', () => {
|
||||
beforeEach(() => {
|
||||
asset = assetFactory.build({ isTrashed: false });
|
||||
|
||||
@@ -4,6 +4,11 @@ import Thumbnail from '$lib/components/assets/thumbnail/Thumbnail.svelte';
|
||||
import { getTabbable } from '$lib/utils/focus-util';
|
||||
import { assetFactory } from '@test-data/factories/asset-factory';
|
||||
|
||||
vi.mock('$lib/utils/navigation', () => ({
|
||||
currentUrlReplaceAssetId: vi.fn(),
|
||||
isSharedLinkRoute: vi.fn().mockReturnValue(false),
|
||||
}));
|
||||
|
||||
vi.hoisted(() => {
|
||||
Object.defineProperty(globalThis, 'matchMedia', {
|
||||
writable: true,
|
||||
@@ -26,10 +31,6 @@ vi.hoisted(() => {
|
||||
describe('Thumbnail component', () => {
|
||||
beforeAll(() => {
|
||||
vi.stubGlobal('IntersectionObserver', getIntersectionObserverMock());
|
||||
vi.mock('$lib/utils/navigation', () => ({
|
||||
currentUrlReplaceAssetId: vi.fn(),
|
||||
isSharedLinkRoute: vi.fn().mockReturnValue(false),
|
||||
}));
|
||||
});
|
||||
|
||||
it('should only contain a single tabbable element (the container)', () => {
|
||||
|
||||
@@ -16,7 +16,7 @@ describe('RecentAlbums component', () => {
|
||||
sdkMock.getAllAlbums.mockResolvedValueOnce([...albums]);
|
||||
render(RecentAlbums);
|
||||
|
||||
expect(sdkMock.getAllAlbums).toBeCalledTimes(1);
|
||||
expect(sdkMock.getAllAlbums).toHaveBeenCalledOnce();
|
||||
|
||||
// wtf
|
||||
await tick();
|
||||
|
||||
@@ -35,7 +35,7 @@ describe('FormatMessage component', () => {
|
||||
|
||||
it('throws an error when locale is empty', async () => {
|
||||
await locale.set(undefined);
|
||||
expect(() => render(FormatMessage, { key: '' as Translations })).toThrowError();
|
||||
expect(() => render(FormatMessage, { key: '' as Translations })).toThrow();
|
||||
await locale.set('en');
|
||||
});
|
||||
|
||||
|
||||
@@ -70,7 +70,7 @@ describe('TimelineManager', () => {
|
||||
});
|
||||
|
||||
it('should load months in viewport', () => {
|
||||
expect(sdkMock.getTimeBuckets).toBeCalledTimes(1);
|
||||
expect(sdkMock.getTimeBuckets).toHaveBeenCalledOnce();
|
||||
expect(sdkMock.getTimeBucket).toHaveBeenCalledTimes(2);
|
||||
});
|
||||
|
||||
@@ -133,13 +133,13 @@ describe('TimelineManager', () => {
|
||||
it('loads a month', async () => {
|
||||
expect(getTimelineMonthByDate(timelineManager, { year: 2024, month: 1 })?.getAssets().length).toEqual(0);
|
||||
await timelineManager.loadTimelineMonth({ year: 2024, month: 1 });
|
||||
expect(sdkMock.getTimeBucket).toBeCalledTimes(1);
|
||||
expect(sdkMock.getTimeBucket).toHaveBeenCalledOnce();
|
||||
expect(getTimelineMonthByDate(timelineManager, { year: 2024, month: 1 })?.getAssets().length).toEqual(3);
|
||||
});
|
||||
|
||||
it('ignores invalid months', async () => {
|
||||
await timelineManager.loadTimelineMonth({ year: 2023, month: 1 });
|
||||
expect(sdkMock.getTimeBucket).toBeCalledTimes(0);
|
||||
expect(sdkMock.getTimeBucket).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it('cancels month loading', async () => {
|
||||
@@ -147,7 +147,7 @@ describe('TimelineManager', () => {
|
||||
void timelineManager.loadTimelineMonth({ year: 2024, month: 1 });
|
||||
const abortSpy = vi.spyOn(month!.loader!.cancelToken!, 'abort');
|
||||
month?.cancel();
|
||||
expect(abortSpy).toBeCalledTimes(1);
|
||||
expect(abortSpy).toHaveBeenCalledOnce();
|
||||
await timelineManager.loadTimelineMonth({ year: 2024, month: 1 });
|
||||
expect(getTimelineMonthByDate(timelineManager, { year: 2024, month: 1 })?.getAssets().length).toEqual(3);
|
||||
});
|
||||
@@ -157,10 +157,10 @@ describe('TimelineManager', () => {
|
||||
timelineManager.loadTimelineMonth({ year: 2024, month: 1 }),
|
||||
timelineManager.loadTimelineMonth({ year: 2024, month: 1 }),
|
||||
]);
|
||||
expect(sdkMock.getTimeBucket).toBeCalledTimes(1);
|
||||
expect(sdkMock.getTimeBucket).toHaveBeenCalledOnce();
|
||||
|
||||
await timelineManager.loadTimelineMonth({ year: 2024, month: 1 });
|
||||
expect(sdkMock.getTimeBucket).toBeCalledTimes(1);
|
||||
expect(sdkMock.getTimeBucket).toHaveBeenCalledOnce();
|
||||
});
|
||||
|
||||
it('allows loading a canceled month', async () => {
|
||||
@@ -283,7 +283,7 @@ describe('TimelineManager', () => {
|
||||
const asset = deriveLocalDateTimeFromFileCreatedAt(timelineAssetFactory.build());
|
||||
timelineManager.upsertAssets([asset]);
|
||||
|
||||
expect(updateAssetsSpy).toBeCalledWith([asset]);
|
||||
expect(updateAssetsSpy).toHaveBeenCalledWith([asset]);
|
||||
expect(timelineManager.assetCount).toEqual(1);
|
||||
});
|
||||
|
||||
@@ -642,8 +642,8 @@ describe('TimelineManager', () => {
|
||||
const previousMonthSpy = vi.spyOn(previousMonth!.loader!, 'execute');
|
||||
const previous = await timelineManager.getLaterAsset(a);
|
||||
expect(previous).toEqual(b);
|
||||
expect(loadTimelineMonthSpy).toBeCalledTimes(0);
|
||||
expect(previousMonthSpy).toBeCalledTimes(0);
|
||||
expect(loadTimelineMonthSpy).not.toHaveBeenCalled();
|
||||
expect(previousMonthSpy).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it('skips removed assets', async () => {
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
const { trigger, selectedKey, onClose }: Props = $props();
|
||||
</script>
|
||||
|
||||
<BasicModal title={$t('add_step')} onClose={() => onClose()} size="medium">
|
||||
<BasicModal title={$t('add_step')} {onClose} size="medium">
|
||||
{#await searchPluginMethods({ trigger })}
|
||||
<div class="flex w-full place-content-center place-items-center">
|
||||
<LoadingSpinner />
|
||||
|
||||
@@ -2,17 +2,15 @@ import type { ServerConfigDto } from '@immich/sdk';
|
||||
import { asUrl } from '$lib/services/shared-link.service';
|
||||
import { sharedLinkFactory } from '@test-data/factories/shared-link-factory';
|
||||
|
||||
describe('SharedLinkService', () => {
|
||||
beforeAll(() => {
|
||||
vi.mock(import('$lib/managers/server-config-manager.svelte'), () => ({
|
||||
serverConfigManager: {
|
||||
value: { externalDomain: 'http://localhost:2283' } as ServerConfigDto,
|
||||
init: vi.fn(),
|
||||
loadServerConfig: vi.fn(),
|
||||
},
|
||||
}));
|
||||
});
|
||||
vi.mock(import('$lib/managers/server-config-manager.svelte'), () => ({
|
||||
serverConfigManager: {
|
||||
value: { externalDomain: 'http://localhost:2283' } as ServerConfigDto,
|
||||
init: vi.fn(),
|
||||
loadServerConfig: vi.fn(),
|
||||
},
|
||||
}));
|
||||
|
||||
describe('SharedLinkService', () => {
|
||||
describe('asUrl', () => {
|
||||
it('should properly encode characters in slug', () => {
|
||||
expect(asUrl(sharedLinkFactory.build({ slug: 'foo/bar' }))).toBe('http://localhost:2283/s/foo%2Fbar');
|
||||
|
||||
@@ -1,6 +1,10 @@
|
||||
import { writable } from 'svelte/store';
|
||||
import { getAlbumDateRange, getShortDateRange } from './date-time';
|
||||
|
||||
vitest.mock('$lib/stores/preferences.store', () => ({
|
||||
locale: writable('en'),
|
||||
}));
|
||||
|
||||
describe('getShortDateRange', () => {
|
||||
beforeEach(() => {
|
||||
vi.stubEnv('TZ', 'UTC');
|
||||
@@ -41,10 +45,6 @@ describe('getShortDateRange', () => {
|
||||
describe('getAlbumDate', () => {
|
||||
beforeAll(() => {
|
||||
process.env.TZ = 'UTC';
|
||||
|
||||
vitest.mock('$lib/stores/preferences.store', () => ({
|
||||
locale: writable('en'),
|
||||
}));
|
||||
});
|
||||
|
||||
it('should work with only a start date', () => {
|
||||
|
||||
@@ -34,7 +34,7 @@ describe('Executor Queue test', function () {
|
||||
// The last task will be executed after 200ms and will finish at 400ms
|
||||
void eq.addTask(() => timeoutPromiseBuilder(200, 'T4'));
|
||||
|
||||
expect(finished).not.toBeCalled();
|
||||
expect(finished).not.toHaveBeenCalled();
|
||||
expect(started).toHaveBeenCalledTimes(3);
|
||||
|
||||
vi.advanceTimersByTime(100);
|
||||
|
||||
Reference in New Issue
Block a user