mirror of
https://github.com/mauriceboe/TREK.git
synced 2026-10-18 21:16:47 +00:00
v3.4.1 (#1606)
* fix(transit): lead arrive-by results with the latest arrival (#1479) MOTIS returns arrive-by itineraries ascending with the deadline-adjacent connection last, so the visible top of the list arrived ~2h before the requested time — misread as a timezone bug. Sort arrive-by results by endTime descending so the connection closest to the requested arrival leads, mirroring depart-by. Claude-Session: https://claude.ai/code/session_01BCrZUoPzHZF6H4C6avMXoz * fix(transit): lead arrive-by results with the latest arrival (#1479) MOTIS returns arrive-by itineraries ascending with the deadline-adjacent connection last, so the visible top of the list arrived ~2h before the requested time — misread as a timezone bug. Sort arrive-by results by endTime descending so the connection closest to the requested arrival leads, mirroring depart-by. * fix(reservations): run AirTrail modal hooks before the isOpen early return (#1602) The sectionItems useMemo added by #1535 sat below 'if (!isOpen) return null'. The modal mounts closed, so the first open render executed one more hook than the previous render and React unmounted the whole tree (error #310), blanking the page. Move the memo above the early return and cover the closed-then-open transition with a regression test. * fix(planner): only draw the check-in-day hotel morning leg when provably at/after check-in (#1597) (#1607) On an accommodation's check-in day the hotel -> first-stop leg was drawn by default for any PLACE first stop, suppressed only when that place was explicitly timed before check-in. An un-timed first place (e.g. "Home" on day 1 of a driving holiday) therefore always produced a phantom hotel -> Home leg, regardless of the check-in time. Flip the default to mirror shouldDrawEveningLeg: the morning leg is now drawn only when the first place is provably timed at/after check-in (you dropped your bags first). The drawn map route, the sidebar hotel connectors, and the Google Maps export all share this helper and inherit the fix. The optimizer anchors (#1321) are unchanged. * fix(notifications): never fall back to the admin ntfy topic for per-user sends (#1608) * chore: correct shields.io url * chore: correct shields.io url * chore: update helm repo link * chore: document new helm chart url * chore: document new helm chart url * fix(atlas): make Kosovo selectable on the Atlas map (#1609) Kosovo's user-assigned ISO code (XK/XKX) was missing from both code tables in the atlas pipeline: the geo builder's A3_TO_A2 map (so the shipped admin0 bundle carried ISO_A2: null) and the client's A2_TO_A3 map. With neither resolvable, onEachFeature attached no hover/click handlers to Kosovo's polygon and the country search dropped it, making Kosovo impossible to select. - add XK<->XKX to the client A2_TO_A3 table and the builder A3_TO_A2 map - stamp ISO_A2: "XK" on the Kosovo feature in the shipped admin0 bundle - guard both with tests (atlasModel resolution + ATLAS-BUNDLE-003) * chore: normalize docker image references to mauriceboe/trek (lowercase) * fix(memories): honor Synology skip-SSL on photo streaming (#1611) The synology_skip_ssl setting was forwarded on the JSON API path (login/browse/test-connection) but not on the image-byte fetches, so a NAS with a self-signed certificate passed Test Connection while /api/photos/:id/thumbnail and /original failed with 500 "Failed to fetch asset" — and the TLS error was silently swallowed. - pipeAsset: accept fetchOptions and forward to safeFetch; log the underlying error on the 500 path (without the URL, which carries _sid) - fetchSynologyThumbnailBytes / streamSynologyAsset: pass rejectUnauthorized derived from synology_skip_ssl; log on failure - i18n: replace hardcoded "Immich" with {provider_name} in 7 memories keys across 14 locales (source of the reported "Failed to connect to Immich" banner on the Synology test), fix translated placeholder names in tr/ca/pl, and add a placeholder-parity spec to prevent regressions - client: gallery provider badge matched 'synology' instead of the real id 'synologyphotos', showing the raw id; label is now "Synology Photos" * chore: make chart.liketrek.com the canonical helm chart url * feat(plugins): prefer the registry's resolved store screenshot (#1613) Browse/detail use the screenshotUrl the aggregate step resolves (cover at the latest commit, or the first resolving README image), falling back to the docs/screenshot.png guess when the field is absent. Fixes blank store cards for plugins without a committed docs/screenshot.png. --------- Co-authored-by: Maurice <61554723+mauriceboe@users.noreply.github.com>
This commit is contained in:
@@ -2,13 +2,13 @@ import type { TranslationStrings } from '../types';
|
||||
|
||||
const memories: TranslationStrings = {
|
||||
'memories.title': 'صور',
|
||||
'memories.notConnected': 'Immich غير متصل',
|
||||
'memories.notConnectedHint': 'قم بتوصيل Immich في الإعدادات لعرض صور رحلتك هنا.',
|
||||
'memories.notConnected': '{provider_name} غير متصل',
|
||||
'memories.notConnectedHint': 'قم بتوصيل {provider_name} في الإعدادات لعرض صور رحلتك هنا.',
|
||||
'memories.notConnectedMultipleHint':
|
||||
'قم بتوصيل أحد موفري الصور هؤلاء: {provider_names} في الإعدادات لتتمكن من إضافة صور إلى هذه الرحلة.',
|
||||
'memories.noDates': 'أضف تواريخ لرحلتك لتحميل الصور.',
|
||||
'memories.noPhotos': 'لم يتم العثور على صور',
|
||||
'memories.noPhotosHint': 'لم يتم العثور على صور في Immich لفترة هذه الرحلة.',
|
||||
'memories.noPhotosHint': 'لم يتم العثور على صور في {provider_name} لفترة هذه الرحلة.',
|
||||
'memories.photosFound': 'صور',
|
||||
'memories.fromOthers': 'من آخرين',
|
||||
'memories.sharePhotos': 'مشاركة الصور',
|
||||
@@ -29,20 +29,20 @@ const memories: TranslationStrings = {
|
||||
'memories.testFirst': 'اختبر الاتصال أولاً',
|
||||
'memories.connected': 'متصل',
|
||||
'memories.disconnected': 'غير متصل',
|
||||
'memories.connectionSuccess': 'تم الاتصال بـ Immich',
|
||||
'memories.connectionError': 'تعذر الاتصال بـ Immich',
|
||||
'memories.connectionSuccess': 'تم الاتصال بـ {provider_name}',
|
||||
'memories.connectionError': 'تعذر الاتصال بـ {provider_name}',
|
||||
'memories.saved': 'تم حفظ إعدادات {provider_name}',
|
||||
'memories.providerDisconnectedBanner': 'اتصالك بـ {provider_name} مفقود. أعد الاتصال في الإعدادات لعرض الصور.',
|
||||
'memories.saveError': 'تعذّر حفظ إعدادات {provider_name}',
|
||||
'memories.addPhotos': 'إضافة صور',
|
||||
'memories.linkAlbum': 'ربط ألبوم',
|
||||
'memories.selectAlbum': 'اختيار ألبوم Immich',
|
||||
'memories.selectAlbum': 'اختيار ألبوم {provider_name}',
|
||||
'memories.selectAlbumMultiple': 'اختيار ألبوم',
|
||||
'memories.noAlbums': 'لم يتم العثور على ألبومات',
|
||||
'memories.syncAlbum': 'مزامنة الألبوم',
|
||||
'memories.unlinkAlbum': 'إلغاء الربط',
|
||||
'memories.photos': 'صور',
|
||||
'memories.selectPhotos': 'اختيار صور من Immich',
|
||||
'memories.selectPhotos': 'اختيار صور من {provider_name}',
|
||||
'memories.selectPhotosMultiple': 'اختيار الصور',
|
||||
'memories.selectHint': 'انقر على الصور لتحديدها.',
|
||||
'memories.selected': 'محدد',
|
||||
|
||||
@@ -2,13 +2,13 @@ import type { TranslationStrings } from '../types';
|
||||
|
||||
const memories: TranslationStrings = {
|
||||
'memories.title': 'Fotos',
|
||||
'memories.notConnected': 'Immich não conectado',
|
||||
'memories.notConnectedHint': 'Conecte sua instância Immich nas Configurações para ver suas fotos de viagem aqui.',
|
||||
'memories.notConnected': '{provider_name} não conectado',
|
||||
'memories.notConnectedHint': 'Conecte sua instância {provider_name} nas Configurações para ver suas fotos de viagem aqui.',
|
||||
'memories.notConnectedMultipleHint':
|
||||
'Conecte um destes provedores de fotos: {provider_names} nas Configurações para poder adicionar fotos a esta viagem.',
|
||||
'memories.noDates': 'Adicione datas à sua viagem para carregar fotos.',
|
||||
'memories.noPhotos': 'Nenhuma foto encontrada',
|
||||
'memories.noPhotosHint': 'Nenhuma foto encontrada no Immich para o período desta viagem.',
|
||||
'memories.noPhotosHint': 'Nenhuma foto encontrada em {provider_name} para o período desta viagem.',
|
||||
'memories.photosFound': 'fotos',
|
||||
'memories.fromOthers': 'de outros',
|
||||
'memories.sharePhotos': 'Compartilhar fotos',
|
||||
@@ -29,21 +29,21 @@ const memories: TranslationStrings = {
|
||||
'memories.testFirst': 'Teste a conexão primeiro',
|
||||
'memories.connected': 'Conectado',
|
||||
'memories.disconnected': 'Não conectado',
|
||||
'memories.connectionSuccess': 'Conectado ao Immich',
|
||||
'memories.connectionError': 'Não foi possível conectar ao Immich',
|
||||
'memories.connectionSuccess': 'Conectado a {provider_name}',
|
||||
'memories.connectionError': 'Não foi possível conectar a {provider_name}',
|
||||
'memories.saved': 'Configurações do {provider_name} salvas',
|
||||
'memories.providerDisconnectedBanner':
|
||||
'Sua conexão com {provider_name} foi perdida. Reconecte nas Configurações para ver as fotos.',
|
||||
'memories.saveError': 'Não foi possível salvar as configurações de {provider_name}',
|
||||
'memories.addPhotos': 'Adicionar fotos',
|
||||
'memories.linkAlbum': 'Vincular álbum',
|
||||
'memories.selectAlbum': 'Selecionar álbum do Immich',
|
||||
'memories.selectAlbum': 'Selecionar álbum de {provider_name}',
|
||||
'memories.selectAlbumMultiple': 'Selecionar álbum',
|
||||
'memories.noAlbums': 'Nenhum álbum encontrado',
|
||||
'memories.syncAlbum': 'Sincronizar álbum',
|
||||
'memories.unlinkAlbum': 'Desvincular',
|
||||
'memories.photos': 'fotos',
|
||||
'memories.selectPhotos': 'Selecionar fotos do Immich',
|
||||
'memories.selectPhotos': 'Selecionar fotos de {provider_name}',
|
||||
'memories.selectPhotosMultiple': 'Selecionar fotos',
|
||||
'memories.selectHint': 'Toque nas fotos para selecioná-las.',
|
||||
'memories.selected': 'selecionadas',
|
||||
|
||||
@@ -261,7 +261,7 @@ const admin: TranslationStrings = {
|
||||
"La teva instància de TREK s'executa en Docker. Per actualitzar a {version}, executa les següents ordres al teu servidor:",
|
||||
'admin.update.reloadHint': 'Recarrega la pàgina en uns segons.',
|
||||
'admin.update.nonDockerText':
|
||||
'Sembla que estàs executant una instal·lació nativa (no Docker). Segueix la guia de la documentació oficial per actualitzar manualment els binaris i aplicar les migracions de la base de dades.',
|
||||
"Aquesta instància de TREK no s'executa amb Docker. Per actualitzar a {version}, torna a executar el mètode d'instal·lació o actualització que vas fer servir — per exemple, a Proxmox Community Scripts executa l'actualització des de la consola LXC:",
|
||||
'admin.update.wikiLink': "Obre la guia d\\'actualització",
|
||||
'admin.addons.catalog.memories.name': 'Fotos (Immich)',
|
||||
'admin.addons.catalog.memories.description': "Comparteix fotos de viatge a través de la teva instància d'Immich",
|
||||
|
||||
@@ -2,14 +2,14 @@ import type { TranslationStrings } from '../types';
|
||||
|
||||
const memories: TranslationStrings = {
|
||||
'memories.title': 'Fotos',
|
||||
'memories.notConnected': 'Immich no connectat',
|
||||
'memories.notConnected': '{provider_name} no connectat',
|
||||
'memories.notConnectedHint':
|
||||
"Connecta la teva instància d'Immich a Configuració per veure les teves fotos de viatge aquí.",
|
||||
"Connecta la teva instància de {provider_name} a Configuració per veure les teves fotos de viatge aquí.",
|
||||
'memories.notConnectedMultipleHint':
|
||||
"Connecta algun d'aquests proveïdors de fotos: {provider_names} a Configuració per poder afegir fotos a aquest viatge.",
|
||||
'memories.noDates': 'Afegeix dates al teu viatge per carregar fotos.',
|
||||
'memories.noPhotos': "No s'han trobat fotos",
|
||||
'memories.noPhotosHint': "No s'han trobat fotos a Immich per al rang de dates d'aquest viatge.",
|
||||
'memories.noPhotosHint': "No s'han trobat fotos a {provider_name} per al rang de dates d'aquest viatge.",
|
||||
'memories.photosFound': 'fotos',
|
||||
'memories.fromOthers': "d'altres",
|
||||
'memories.sharePhotos': 'Comparteix fotos',
|
||||
@@ -30,8 +30,8 @@ const memories: TranslationStrings = {
|
||||
'memories.testFirst': 'Prova primer la connexió',
|
||||
'memories.connected': 'Connectat',
|
||||
'memories.disconnected': 'No connectat',
|
||||
'memories.connectionSuccess': 'Connectat a Immich',
|
||||
'memories.connectionError': "No s'ha pogut connectar a Immich",
|
||||
'memories.connectionSuccess': 'Connectat a {provider_name}',
|
||||
'memories.connectionError': "No s'ha pogut connectar a {provider_name}",
|
||||
'memories.saved': 'Configuració de {provider_name} desada',
|
||||
'memories.providerDisconnectedBanner':
|
||||
"S'ha perdut la connexió amb {provider_name}. Torna a connectar a Configuració per veure les fotos.",
|
||||
@@ -44,13 +44,13 @@ const memories: TranslationStrings = {
|
||||
'memories.allLocations': 'Totes les ubicacions',
|
||||
'memories.addPhotos': 'Afegeix fotos',
|
||||
'memories.linkAlbum': 'Vincula un àlbum',
|
||||
'memories.selectAlbum': "Selecciona un àlbum d'Immich",
|
||||
'memories.selectAlbum': "Selecciona un àlbum de {provider_name}",
|
||||
'memories.selectAlbumMultiple': 'Selecciona un àlbum',
|
||||
'memories.noAlbums': "No s'han trobat àlbums",
|
||||
'memories.syncAlbum': "Sincronitza l'àlbum",
|
||||
'memories.unlinkAlbum': 'Desvincula',
|
||||
'memories.photos': 'fotos',
|
||||
'memories.selectPhotos': "Selecciona fotos d'Immich",
|
||||
'memories.selectPhotos': "Selecciona fotos de {provider_name}",
|
||||
'memories.selectPhotosMultiple': 'Selecciona fotos',
|
||||
'memories.selectHint': 'Toca les fotos per seleccionar-les.',
|
||||
'memories.selected': 'seleccionat(s)',
|
||||
|
||||
@@ -2,13 +2,13 @@ import type { TranslationStrings } from '../types';
|
||||
|
||||
const memories: TranslationStrings = {
|
||||
'memories.title': 'Fotky',
|
||||
'memories.notConnected': 'Immich není připojen',
|
||||
'memories.notConnectedHint': 'Připojte svoji instanci Immich v Nastavení, abyste zde viděli fotky z cest.',
|
||||
'memories.notConnected': '{provider_name} není připojen',
|
||||
'memories.notConnectedHint': 'Připojte svoji instanci {provider_name} v Nastavení, abyste zde viděli fotky z cest.',
|
||||
'memories.notConnectedMultipleHint':
|
||||
'Pro přidání fotek k tomuto výletu připojte v Nastavení jednoho z těchto poskytovatelů fotek: {provider_names}.',
|
||||
'memories.noDates': 'Přidejte data k cestě pro načtení fotek.',
|
||||
'memories.noPhotos': 'Nenalezeny žádné fotky',
|
||||
'memories.noPhotosHint': 'V Immich nebyly nalezeny žádné fotky pro období této cesty.',
|
||||
'memories.noPhotosHint': 'V {provider_name} nebyly nalezeny žádné fotky pro období této cesty.',
|
||||
'memories.photosFound': 'fotek',
|
||||
'memories.fromOthers': 'od ostatních',
|
||||
'memories.sharePhotos': 'Sdílet fotky',
|
||||
@@ -29,21 +29,21 @@ const memories: TranslationStrings = {
|
||||
'memories.testFirst': 'Nejprve otestujte připojení',
|
||||
'memories.connected': 'Připojeno',
|
||||
'memories.disconnected': 'Nepřipojeno',
|
||||
'memories.connectionSuccess': 'Připojeno k Immich',
|
||||
'memories.connectionError': 'Nepodařilo se připojit k Immich',
|
||||
'memories.connectionSuccess': 'Připojeno k {provider_name}',
|
||||
'memories.connectionError': 'Nepodařilo se připojit k {provider_name}',
|
||||
'memories.saved': 'Nastavení {provider_name} uloženo',
|
||||
'memories.providerDisconnectedBanner':
|
||||
'Vaše připojení k {provider_name} bylo ztraceno. Obnovte připojení v Nastavení pro zobrazení fotek.',
|
||||
'memories.saveError': 'Nepodařilo se uložit nastavení {provider_name}',
|
||||
'memories.addPhotos': 'Přidat fotky',
|
||||
'memories.linkAlbum': 'Propojit album',
|
||||
'memories.selectAlbum': 'Vybrat album z Immich',
|
||||
'memories.selectAlbum': 'Vybrat album z {provider_name}',
|
||||
'memories.selectAlbumMultiple': 'Vybrat album',
|
||||
'memories.noAlbums': 'Žádná alba nenalezena',
|
||||
'memories.syncAlbum': 'Synchronizovat album',
|
||||
'memories.unlinkAlbum': 'Odpojit',
|
||||
'memories.photos': 'fotek',
|
||||
'memories.selectPhotos': 'Vybrat fotky z Immich',
|
||||
'memories.selectPhotos': 'Vybrat fotky z {provider_name}',
|
||||
'memories.selectPhotosMultiple': 'Vybrat fotky',
|
||||
'memories.selectHint': 'Klepněte na fotky pro jejich výběr.',
|
||||
'memories.selected': 'vybráno',
|
||||
|
||||
@@ -2,13 +2,13 @@ import type { TranslationStrings } from '../types';
|
||||
|
||||
const memories: TranslationStrings = {
|
||||
'memories.title': 'Fotos',
|
||||
'memories.notConnected': 'Immich nicht verbunden',
|
||||
'memories.notConnectedHint': 'Verbinde deine Immich-Instanz in den Einstellungen, um deine Reisefotos hier zu sehen.',
|
||||
'memories.notConnected': '{provider_name} nicht verbunden',
|
||||
'memories.notConnectedHint': 'Verbinde deine {provider_name}-Instanz in den Einstellungen, um deine Reisefotos hier zu sehen.',
|
||||
'memories.notConnectedMultipleHint':
|
||||
'Verbinde einen dieser Fotoanbieter: {provider_names} in den Einstellungen, um Fotos zu dieser Reise hinzufügen zu können.',
|
||||
'memories.noDates': 'Füge Daten zu deiner Reise hinzu, um Fotos zu laden.',
|
||||
'memories.noPhotos': 'Keine Fotos gefunden',
|
||||
'memories.noPhotosHint': 'Keine Fotos in Immich für den Zeitraum dieser Reise gefunden.',
|
||||
'memories.noPhotosHint': 'Keine Fotos in {provider_name} für den Zeitraum dieser Reise gefunden.',
|
||||
'memories.photosFound': 'Fotos',
|
||||
'memories.fromOthers': 'von anderen',
|
||||
'memories.sharePhotos': 'Fotos teilen',
|
||||
@@ -29,8 +29,8 @@ const memories: TranslationStrings = {
|
||||
'memories.testFirst': 'Verbindung zuerst testen',
|
||||
'memories.connected': 'Verbunden',
|
||||
'memories.disconnected': 'Nicht verbunden',
|
||||
'memories.connectionSuccess': 'Verbindung zu Immich hergestellt',
|
||||
'memories.connectionError': 'Verbindung zu Immich fehlgeschlagen',
|
||||
'memories.connectionSuccess': 'Verbindung zu {provider_name} hergestellt',
|
||||
'memories.connectionError': 'Verbindung zu {provider_name} fehlgeschlagen',
|
||||
'memories.saved': '{provider_name}-Einstellungen gespeichert',
|
||||
'memories.providerDisconnectedBanner':
|
||||
'Deine {provider_name}-Verbindung wurde getrennt. Verbinde erneut in den Einstellungen, um Fotos anzuzeigen.',
|
||||
@@ -40,13 +40,13 @@ const memories: TranslationStrings = {
|
||||
'memories.fillRequiredFields': 'Bitte füllen Sie alle Pflichtfelder aus',
|
||||
'memories.addPhotos': 'Fotos hinzufügen',
|
||||
'memories.linkAlbum': 'Album verknüpfen',
|
||||
'memories.selectAlbum': 'Immich-Album auswählen',
|
||||
'memories.selectAlbum': '{provider_name}-Album auswählen',
|
||||
'memories.selectAlbumMultiple': 'Album auswählen',
|
||||
'memories.noAlbums': 'Keine Alben gefunden',
|
||||
'memories.syncAlbum': 'Album synchronisieren',
|
||||
'memories.unlinkAlbum': 'Album trennen',
|
||||
'memories.photos': 'Fotos',
|
||||
'memories.selectPhotos': 'Fotos aus Immich auswählen',
|
||||
'memories.selectPhotos': 'Fotos aus {provider_name} auswählen',
|
||||
'memories.selectPhotosMultiple': 'Fotos auswählen',
|
||||
'memories.selectHint': 'Tippe auf Fotos um sie auszuwählen.',
|
||||
'memories.selected': 'ausgewählt',
|
||||
|
||||
@@ -2,13 +2,13 @@ import type { TranslationStrings } from '../types';
|
||||
|
||||
const memories: TranslationStrings = {
|
||||
'memories.title': 'Fotos',
|
||||
'memories.notConnected': 'Immich no conectado',
|
||||
'memories.notConnectedHint': 'Conecta tu instancia de Immich en Ajustes para ver tus fotos de viaje aquí.',
|
||||
'memories.notConnected': '{provider_name} no conectado',
|
||||
'memories.notConnectedHint': 'Conecta tu instancia de {provider_name} en Ajustes para ver tus fotos de viaje aquí.',
|
||||
'memories.notConnectedMultipleHint':
|
||||
'Conecta alguno de estos proveedores de fotos: {provider_names} en Configuración para poder añadir fotos a este viaje.',
|
||||
'memories.noDates': 'Añade fechas a tu viaje para cargar fotos.',
|
||||
'memories.noPhotos': 'No se encontraron fotos',
|
||||
'memories.noPhotosHint': 'No se encontraron fotos en Immich para el rango de fechas de este viaje.',
|
||||
'memories.noPhotosHint': 'No se encontraron fotos en {provider_name} para el rango de fechas de este viaje.',
|
||||
'memories.photosFound': 'fotos',
|
||||
'memories.fromOthers': 'de otros',
|
||||
'memories.sharePhotos': 'Compartir fotos',
|
||||
@@ -29,8 +29,8 @@ const memories: TranslationStrings = {
|
||||
'memories.testFirst': 'Probar conexión primero',
|
||||
'memories.connected': 'Conectado',
|
||||
'memories.disconnected': 'No conectado',
|
||||
'memories.connectionSuccess': 'Conectado a Immich',
|
||||
'memories.connectionError': 'No se pudo conectar a Immich',
|
||||
'memories.connectionSuccess': 'Conectado a {provider_name}',
|
||||
'memories.connectionError': 'No se pudo conectar a {provider_name}',
|
||||
'memories.saved': 'Configuración de {provider_name} guardada',
|
||||
'memories.providerDisconnectedBanner':
|
||||
'Se perdió la conexión con {provider_name}. Vuelve a conectar en Configuración para ver las fotos.',
|
||||
@@ -43,13 +43,13 @@ const memories: TranslationStrings = {
|
||||
'memories.allLocations': 'Todas las ubicaciones',
|
||||
'memories.addPhotos': 'Añadir fotos',
|
||||
'memories.linkAlbum': 'Vincular álbum',
|
||||
'memories.selectAlbum': 'Seleccionar álbum de Immich',
|
||||
'memories.selectAlbum': 'Seleccionar álbum de {provider_name}',
|
||||
'memories.selectAlbumMultiple': 'Seleccionar álbum',
|
||||
'memories.noAlbums': 'No se encontraron álbumes',
|
||||
'memories.syncAlbum': 'Sincronizar álbum',
|
||||
'memories.unlinkAlbum': 'Desvincular',
|
||||
'memories.photos': 'fotos',
|
||||
'memories.selectPhotos': 'Seleccionar fotos de Immich',
|
||||
'memories.selectPhotos': 'Seleccionar fotos de {provider_name}',
|
||||
'memories.selectPhotosMultiple': 'Seleccionar fotos',
|
||||
'memories.selectHint': 'Toca las fotos para seleccionarlas.',
|
||||
'memories.selected': 'seleccionado(s)',
|
||||
|
||||
@@ -2,14 +2,14 @@ import type { TranslationStrings } from '../types';
|
||||
|
||||
const memories: TranslationStrings = {
|
||||
'memories.title': 'Photos',
|
||||
'memories.notConnected': 'Immich non connecté',
|
||||
'memories.notConnected': '{provider_name} non connecté',
|
||||
'memories.notConnectedHint':
|
||||
'Connectez votre instance Immich dans les paramètres pour voir vos photos de voyage ici.',
|
||||
'Connectez votre instance {provider_name} dans les paramètres pour voir vos photos de voyage ici.',
|
||||
'memories.notConnectedMultipleHint':
|
||||
'Connectez un de ces fournisseurs de photos : {provider_names} dans les Paramètres pour pouvoir ajouter des photos à ce voyage.',
|
||||
'memories.noDates': 'Ajoutez des dates à votre voyage pour charger les photos.',
|
||||
'memories.noPhotos': 'Aucune photo trouvée',
|
||||
'memories.noPhotosHint': 'Aucune photo trouvée dans Immich pour la période de ce voyage.',
|
||||
'memories.noPhotosHint': 'Aucune photo trouvée dans {provider_name} pour la période de ce voyage.',
|
||||
'memories.photosFound': 'photos',
|
||||
'memories.fromOthers': "d'autres",
|
||||
'memories.sharePhotos': 'Partager les photos',
|
||||
@@ -31,8 +31,8 @@ const memories: TranslationStrings = {
|
||||
'memories.testFirst': 'Testez la connexion avant de sauvegarder',
|
||||
'memories.connected': 'Connecté',
|
||||
'memories.disconnected': 'Non connecté',
|
||||
'memories.connectionSuccess': 'Connecté à Immich',
|
||||
'memories.connectionError': 'Impossible de se connecter à Immich',
|
||||
'memories.connectionSuccess': 'Connecté à {provider_name}',
|
||||
'memories.connectionError': 'Impossible de se connecter à {provider_name}',
|
||||
'memories.saved': 'Paramètres {provider_name} enregistrés',
|
||||
'memories.providerDisconnectedBanner':
|
||||
'Votre connexion {provider_name} est perdue. Reconnectez-vous dans les Paramètres pour voir les photos.',
|
||||
@@ -45,13 +45,13 @@ const memories: TranslationStrings = {
|
||||
'memories.allLocations': 'Tous les lieux',
|
||||
'memories.addPhotos': 'Ajouter des photos',
|
||||
'memories.linkAlbum': 'Lier un album',
|
||||
'memories.selectAlbum': 'Choisir un album Immich',
|
||||
'memories.selectAlbum': 'Choisir un album {provider_name}',
|
||||
'memories.selectAlbumMultiple': 'Sélectionner un album',
|
||||
'memories.noAlbums': 'Aucun album trouvé',
|
||||
'memories.syncAlbum': 'Synchroniser',
|
||||
'memories.unlinkAlbum': 'Délier',
|
||||
'memories.photos': 'photos',
|
||||
'memories.selectPhotos': 'Sélectionner des photos depuis Immich',
|
||||
'memories.selectPhotos': 'Sélectionner des photos depuis {provider_name}',
|
||||
'memories.selectPhotosMultiple': 'Sélectionner des photos',
|
||||
'memories.selectHint': 'Appuyez sur les photos pour les sélectionner.',
|
||||
'memories.selected': 'sélectionné(s)',
|
||||
|
||||
@@ -2,14 +2,14 @@ import type { TranslationStrings } from '../types';
|
||||
|
||||
const memories: TranslationStrings = {
|
||||
'memories.title': 'Fotók',
|
||||
'memories.notConnected': 'Immich nincs csatlakoztatva',
|
||||
'memories.notConnected': '{provider_name} nincs csatlakoztatva',
|
||||
'memories.notConnectedHint':
|
||||
'Csatlakoztasd az Immich példányodat a Beállításokban, hogy itt lásd az utazási fotóidat.',
|
||||
'Csatlakoztasd a(z) {provider_name} példányodat a Beállításokban, hogy itt lásd az utazási fotóidat.',
|
||||
'memories.notConnectedMultipleHint':
|
||||
'A fényképek hozzáadásához csatlakoztasson egyet a következő fényképszolgáltatók közül a Beállításokban: {provider_names}.',
|
||||
'memories.noDates': 'Adj hozzá dátumokat az utazáshoz a fotók betöltéséhez.',
|
||||
'memories.noPhotos': 'Nem találhatók fotók',
|
||||
'memories.noPhotosHint': 'Nem találhatók fotók az Immichben erre az utazási időszakra.',
|
||||
'memories.noPhotosHint': 'Nem találhatók fotók a(z) {provider_name} szolgáltatásban erre az utazási időszakra.',
|
||||
'memories.photosFound': 'fotó',
|
||||
'memories.fromOthers': 'másoktól',
|
||||
'memories.sharePhotos': 'Fotók megosztása',
|
||||
@@ -31,21 +31,21 @@ const memories: TranslationStrings = {
|
||||
'memories.testFirst': 'Először teszteld a kapcsolatot',
|
||||
'memories.connected': 'Csatlakoztatva',
|
||||
'memories.disconnected': 'Nincs csatlakoztatva',
|
||||
'memories.connectionSuccess': 'Csatlakozva az Immichhez',
|
||||
'memories.connectionError': 'Nem sikerült csatlakozni az Immichhez',
|
||||
'memories.connectionSuccess': 'Csatlakozva a(z) {provider_name} szolgáltatáshoz',
|
||||
'memories.connectionError': 'Nem sikerült csatlakozni a(z) {provider_name} szolgáltatáshoz',
|
||||
'memories.saved': '{provider_name} beállítások mentve',
|
||||
'memories.providerDisconnectedBanner':
|
||||
'A {provider_name} kapcsolat megszakadt. Csatlakozzon újra a Beállításokban a fényképek megtekintéséhez.',
|
||||
'memories.saveError': 'Nem sikerült menteni a(z) {provider_name} beállításait',
|
||||
'memories.addPhotos': 'Fotók hozzáadása',
|
||||
'memories.linkAlbum': 'Album csatolása',
|
||||
'memories.selectAlbum': 'Immich album kiválasztása',
|
||||
'memories.selectAlbum': '{provider_name} album kiválasztása',
|
||||
'memories.selectAlbumMultiple': 'Album kiválasztása',
|
||||
'memories.noAlbums': 'Nem található album',
|
||||
'memories.syncAlbum': 'Album szinkronizálása',
|
||||
'memories.unlinkAlbum': 'Leválasztás',
|
||||
'memories.photos': 'fotó',
|
||||
'memories.selectPhotos': 'Fotók kiválasztása az Immichből',
|
||||
'memories.selectPhotos': 'Fotók kiválasztása a(z) {provider_name} szolgáltatásból',
|
||||
'memories.selectPhotosMultiple': 'Fényképek kiválasztása',
|
||||
'memories.selectHint': 'Koppints a fotókra a kijelölésükhöz.',
|
||||
'memories.selected': 'kijelölve',
|
||||
|
||||
@@ -0,0 +1,91 @@
|
||||
import ar from './ar';
|
||||
import br from './br';
|
||||
import ca from './ca';
|
||||
import cs from './cs';
|
||||
import de from './de';
|
||||
import en from './en';
|
||||
import es from './es';
|
||||
import fr from './fr';
|
||||
import gr from './gr';
|
||||
import hu from './hu';
|
||||
import id from './id';
|
||||
import itIT from './it';
|
||||
import ja from './ja';
|
||||
import ko from './ko';
|
||||
import nl from './nl';
|
||||
import pl from './pl';
|
||||
import ru from './ru';
|
||||
import sv from './sv';
|
||||
import tr from './tr';
|
||||
import type { TranslationStrings } from './types';
|
||||
import uk from './uk';
|
||||
import vi from './vi';
|
||||
import zh from './zh';
|
||||
import zhTW from './zh-TW';
|
||||
|
||||
import { describe, it, expect } from 'vitest';
|
||||
|
||||
/**
|
||||
* Placeholder parity: every `{placeholder}` present in an EN string must also
|
||||
* appear (untranslated) in each locale's translation of that key.
|
||||
*
|
||||
* This guards against the class of bug behind issue #1611's "Failed to connect
|
||||
* to Immich" report: locales that hardcoded a provider name where EN uses
|
||||
* `{provider_name}`, so the Synology banner showed "Immich". It also catches
|
||||
* translated placeholder names (e.g. `{versiyon}`), which render literally.
|
||||
*
|
||||
* Only keys the locale actually translates are checked — missing keys are
|
||||
* key-set drift, handled (as unenforced data) by i18n-parity.spec.ts.
|
||||
*/
|
||||
const LOCALES: Record<string, TranslationStrings> = {
|
||||
ar,
|
||||
br,
|
||||
ca,
|
||||
cs,
|
||||
de,
|
||||
es,
|
||||
fr,
|
||||
gr,
|
||||
hu,
|
||||
id,
|
||||
it: itIT,
|
||||
ja,
|
||||
ko,
|
||||
nl,
|
||||
pl,
|
||||
ru,
|
||||
sv,
|
||||
tr,
|
||||
uk,
|
||||
vi,
|
||||
zh,
|
||||
'zh-TW': zhTW,
|
||||
};
|
||||
|
||||
const PLACEHOLDER_RE = /\{[a-zA-Z0-9_]+\}/g;
|
||||
|
||||
describe('i18n placeholder parity', () => {
|
||||
it('every EN placeholder appears in each locale translation of the same key', () => {
|
||||
const violations: string[] = [];
|
||||
|
||||
for (const [enKey, enValue] of Object.entries(en)) {
|
||||
// A few catalog entries are structured data, not strings
|
||||
// (e.g. packing.suggestions.items) — placeholders only apply to strings.
|
||||
if (typeof enValue !== 'string') continue;
|
||||
const placeholders = enValue.match(PLACEHOLDER_RE);
|
||||
if (!placeholders) continue;
|
||||
|
||||
for (const [locale, catalog] of Object.entries(LOCALES)) {
|
||||
const translated = catalog[enKey];
|
||||
if (typeof translated !== 'string') continue;
|
||||
for (const placeholder of new Set(placeholders)) {
|
||||
if (!translated.includes(placeholder)) {
|
||||
violations.push(`${locale} ${enKey}: missing ${placeholder} in ${JSON.stringify(translated)}`);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
expect(violations).toEqual([]);
|
||||
});
|
||||
});
|
||||
@@ -2,14 +2,14 @@ import type { TranslationStrings } from '../types';
|
||||
|
||||
const memories: TranslationStrings = {
|
||||
'memories.title': 'Foto',
|
||||
'memories.notConnected': 'Immich non connesso',
|
||||
'memories.notConnected': '{provider_name} non connesso',
|
||||
'memories.notConnectedHint':
|
||||
'Connetti la tua istanza Immich nelle Impostazioni per vedere qui le foto del tuo viaggio.',
|
||||
'Connetti la tua istanza {provider_name} nelle Impostazioni per vedere qui le foto del tuo viaggio.',
|
||||
'memories.notConnectedMultipleHint':
|
||||
'Collega uno di questi provider di foto: {provider_names} nelle Impostazioni per poter aggiungere foto a questo viaggio.',
|
||||
'memories.noDates': 'Aggiungi le date al tuo viaggio per caricare le foto.',
|
||||
'memories.noPhotos': 'Nessuna foto trovata',
|
||||
'memories.noPhotosHint': "Nessuna foto trovata in Immich per l'intervallo di date di questo viaggio.",
|
||||
'memories.noPhotosHint': "Nessuna foto trovata in {provider_name} per l'intervallo di date di questo viaggio.",
|
||||
'memories.photosFound': 'foto',
|
||||
'memories.fromOthers': 'da altri',
|
||||
'memories.sharePhotos': 'Condividi foto',
|
||||
@@ -30,8 +30,8 @@ const memories: TranslationStrings = {
|
||||
'memories.testFirst': 'Testa prima la connessione',
|
||||
'memories.connected': 'Connesso',
|
||||
'memories.disconnected': 'Non connesso',
|
||||
'memories.connectionSuccess': 'Connesso a Immich',
|
||||
'memories.connectionError': 'Impossibile connettersi a Immich',
|
||||
'memories.connectionSuccess': 'Connesso a {provider_name}',
|
||||
'memories.connectionError': 'Impossibile connettersi a {provider_name}',
|
||||
'memories.saved': 'Impostazioni {provider_name} salvate',
|
||||
'memories.providerDisconnectedBanner':
|
||||
'La connessione a {provider_name} è persa. Riconnetti nelle Impostazioni per visualizzare le foto.',
|
||||
@@ -41,13 +41,13 @@ const memories: TranslationStrings = {
|
||||
'memories.fillRequiredFields': 'Per favore compila tutti i campi obbligatori',
|
||||
'memories.addPhotos': 'Aggiungi foto',
|
||||
'memories.linkAlbum': 'Collega album',
|
||||
'memories.selectAlbum': 'Seleziona album Immich',
|
||||
'memories.selectAlbum': 'Seleziona album {provider_name}',
|
||||
'memories.selectAlbumMultiple': 'Seleziona album',
|
||||
'memories.noAlbums': 'Nessun album trovato',
|
||||
'memories.syncAlbum': 'Sincronizza album',
|
||||
'memories.unlinkAlbum': 'Scollega',
|
||||
'memories.photos': 'foto',
|
||||
'memories.selectPhotos': 'Seleziona foto da Immich',
|
||||
'memories.selectPhotos': 'Seleziona foto da {provider_name}',
|
||||
'memories.selectPhotosMultiple': 'Seleziona foto',
|
||||
'memories.selectHint': 'Tocca le foto per selezionarle.',
|
||||
'memories.selected': 'selezionate',
|
||||
|
||||
@@ -2,13 +2,13 @@ import type { TranslationStrings } from '../types';
|
||||
|
||||
const memories: TranslationStrings = {
|
||||
'memories.title': "Foto's",
|
||||
'memories.notConnected': 'Immich niet verbonden',
|
||||
'memories.notConnectedHint': "Verbind je Immich-instantie in Instellingen om je reisfoto's hier te zien.",
|
||||
'memories.notConnected': '{provider_name} niet verbonden',
|
||||
'memories.notConnectedHint': "Verbind je {provider_name}-instantie in Instellingen om je reisfoto's hier te zien.",
|
||||
'memories.notConnectedMultipleHint':
|
||||
"Verbind een van deze fotoproviders: {provider_names} in Instellingen om foto's aan dit reisplan toe te voegen.",
|
||||
'memories.noDates': "Voeg data toe aan je reis om foto's te laden.",
|
||||
'memories.noPhotos': "Geen foto's gevonden",
|
||||
'memories.noPhotosHint': "Geen foto's gevonden in Immich voor de datumreeks van deze reis.",
|
||||
'memories.noPhotosHint': "Geen foto's gevonden in {provider_name} voor de datumreeks van deze reis.",
|
||||
'memories.photosFound': "foto's",
|
||||
'memories.fromOthers': 'van anderen',
|
||||
'memories.sharePhotos': "Foto's delen",
|
||||
@@ -29,8 +29,8 @@ const memories: TranslationStrings = {
|
||||
'memories.testFirst': 'Test eerst de verbinding',
|
||||
'memories.connected': 'Verbonden',
|
||||
'memories.disconnected': 'Niet verbonden',
|
||||
'memories.connectionSuccess': 'Verbonden met Immich',
|
||||
'memories.connectionError': 'Kon niet verbinden met Immich',
|
||||
'memories.connectionSuccess': 'Verbonden met {provider_name}',
|
||||
'memories.connectionError': 'Kon niet verbinden met {provider_name}',
|
||||
'memories.saved': '{provider_name}-instellingen opgeslagen',
|
||||
'memories.providerDisconnectedBanner':
|
||||
"Je {provider_name}-verbinding is verbroken. Maak opnieuw verbinding in Instellingen om foto's te bekijken.",
|
||||
@@ -43,13 +43,13 @@ const memories: TranslationStrings = {
|
||||
'memories.allLocations': 'Alle locaties',
|
||||
'memories.addPhotos': "Foto's toevoegen",
|
||||
'memories.linkAlbum': 'Album koppelen',
|
||||
'memories.selectAlbum': 'Immich-album selecteren',
|
||||
'memories.selectAlbum': '{provider_name}-album selecteren',
|
||||
'memories.selectAlbumMultiple': 'Album selecteren',
|
||||
'memories.noAlbums': 'Geen albums gevonden',
|
||||
'memories.syncAlbum': 'Album synchroniseren',
|
||||
'memories.unlinkAlbum': 'Ontkoppelen',
|
||||
'memories.photos': 'fotos',
|
||||
'memories.selectPhotos': "Selecteer foto's uit Immich",
|
||||
'memories.selectPhotos': "Selecteer foto's uit {provider_name}",
|
||||
'memories.selectPhotosMultiple': "Foto's selecteren",
|
||||
'memories.selectHint': "Tik op foto's om ze te selecteren.",
|
||||
'memories.selected': 'geselecteerd',
|
||||
|
||||
@@ -2,14 +2,14 @@ import type { TranslationStrings } from '../types';
|
||||
|
||||
const memories: TranslationStrings = {
|
||||
'memories.title': 'Zdjęcia',
|
||||
'memories.notConnected': 'Immich nie jest połączony',
|
||||
'memories.notConnected': '{provider_name} nie jest połączony',
|
||||
'memories.notConnectedHint':
|
||||
'Połącz swoją instancję Immich w ustawieniach, aby przeglądać tutaj swoje zdjęcia z podróży.',
|
||||
'Połącz swoją instancję {provider_name} w ustawieniach, aby przeglądać tutaj swoje zdjęcia z podróży.',
|
||||
'memories.notConnectedMultipleHint':
|
||||
'Połącz jednego z tych dostawców zdjęć: {provider_names} w Ustawieniach, aby móc dodawać zdjęcia do tej podróży.',
|
||||
'memories.noDates': 'Dodaj daty do swojej podróży, aby załadować zdjęcia.',
|
||||
'memories.noPhotos': 'Nie znaleziono zdjęć',
|
||||
'memories.noPhotosHint': 'Nie znaleziono zdjęć w Immich dla tego zakresu dat podróży.',
|
||||
'memories.noPhotosHint': 'Nie znaleziono zdjęć w {provider_name} dla tego zakresu dat podróży.',
|
||||
'memories.photosFound': 'zdjęć',
|
||||
'memories.fromOthers': 'od innych',
|
||||
'memories.sharePhotos': 'Udostępnij zdjęcia',
|
||||
@@ -29,14 +29,14 @@ const memories: TranslationStrings = {
|
||||
'memories.testShort': 'Test',
|
||||
'memories.connected': 'Połączono',
|
||||
'memories.disconnected': 'Nie połączono',
|
||||
'memories.connectionSuccess': 'Połączono z Immich',
|
||||
'memories.connectionError': 'Nie udało się połączyć z Immich',
|
||||
'memories.connectionSuccess': 'Połączono z {provider_name}',
|
||||
'memories.connectionError': 'Nie udało się połączyć z {provider_name}',
|
||||
'memories.saved': 'Ustawienia {provider_name} zostały zapisane',
|
||||
'memories.providerDisconnectedBanner':
|
||||
'Połączenie z {provider_name} zostało utracone. Połącz ponownie w Ustawieniach, aby wyświetlać zdjęcia.',
|
||||
'memories.saveError': 'Nie można zapisać ustawień {provider_name}',
|
||||
'memories.addPhotos': 'Dodaj zdjęcia',
|
||||
'memories.selectPhotos': 'Wybierz zdjęcia z Immich',
|
||||
'memories.selectPhotos': 'Wybierz zdjęcia z {provider_name}',
|
||||
'memories.selectPhotosMultiple': 'Wybierz zdjęcia',
|
||||
'memories.selectHint': 'Dotknij zdjęć, aby je zaznaczyć.',
|
||||
'memories.selected': 'wybranych',
|
||||
@@ -55,7 +55,7 @@ const memories: TranslationStrings = {
|
||||
'memories.confirmShareButton': 'Udostępnij zdjęcia',
|
||||
'memories.testFirst': 'Najpierw przetestuj połączenie',
|
||||
'memories.linkAlbum': 'Połącz album',
|
||||
'memories.selectAlbum': 'Wybierz album Immich',
|
||||
'memories.selectAlbum': 'Wybierz album {provider_name}',
|
||||
'memories.selectAlbumMultiple': 'Wybierz album',
|
||||
'memories.noAlbums': 'Nie znaleziono albumów',
|
||||
'memories.syncAlbum': 'Synchronizuj album',
|
||||
|
||||
@@ -79,7 +79,7 @@ const places: TranslationStrings = {
|
||||
'places.importNaverList': 'Lista Naver',
|
||||
'places.importList': 'Import listy',
|
||||
'places.googleListHint': 'Wklej link do listy Google Maps.',
|
||||
'places.googleListImported': 'Zaimportowano {count} miejsc',
|
||||
'places.googleListImported': 'Zaimportowano {count} miejsc z „{list}”',
|
||||
'places.googleListError': 'Nie udało się zaimportować listy',
|
||||
'places.naverListHint': 'Wklej link do udostępnionej listy Naver Maps, aby zaimportować wszystkie miejsca.',
|
||||
'places.naverListImported': 'Zaimportowano {count} miejsc z "{list}"',
|
||||
|
||||
@@ -2,13 +2,13 @@ import type { TranslationStrings } from '../types';
|
||||
|
||||
const memories: TranslationStrings = {
|
||||
'memories.title': 'Фото',
|
||||
'memories.notConnected': 'Immich не подключён',
|
||||
'memories.notConnectedHint': 'Подключите Immich в настройках, чтобы видеть фотографии из поездок.',
|
||||
'memories.notConnected': '{provider_name} не подключён',
|
||||
'memories.notConnectedHint': 'Подключите {provider_name} в настройках, чтобы видеть фотографии из поездок.',
|
||||
'memories.notConnectedMultipleHint':
|
||||
'Подключите одного из этих фотопровайдеров: {provider_names} в Настройках, чтобы добавлять фотографии к этому путешествию.',
|
||||
'memories.noDates': 'Добавьте даты поездки для загрузки фотографий.',
|
||||
'memories.noPhotos': 'Фотографии не найдены',
|
||||
'memories.noPhotosHint': 'В Immich нет фотографий за период этой поездки.',
|
||||
'memories.noPhotosHint': 'В {provider_name} нет фотографий за период этой поездки.',
|
||||
'memories.photosFound': 'фото',
|
||||
'memories.fromOthers': 'от других',
|
||||
'memories.sharePhotos': 'Поделиться фото',
|
||||
@@ -29,8 +29,8 @@ const memories: TranslationStrings = {
|
||||
'memories.testFirst': 'Сначала проверьте подключение',
|
||||
'memories.connected': 'Подключено',
|
||||
'memories.disconnected': 'Не подключено',
|
||||
'memories.connectionSuccess': 'Подключение к Immich установлено',
|
||||
'memories.connectionError': 'Не удалось подключиться к Immich',
|
||||
'memories.connectionSuccess': 'Подключение к {provider_name} установлено',
|
||||
'memories.connectionError': 'Не удалось подключиться к {provider_name}',
|
||||
'memories.saved': 'Настройки {provider_name} сохранены',
|
||||
'memories.providerDisconnectedBanner':
|
||||
'Соединение с {provider_name} потеряно. Переподключитесь в Настройках для просмотра фотографий.',
|
||||
@@ -40,13 +40,13 @@ const memories: TranslationStrings = {
|
||||
'memories.allLocations': 'Все места',
|
||||
'memories.addPhotos': 'Добавить фото',
|
||||
'memories.linkAlbum': 'Привязать альбом',
|
||||
'memories.selectAlbum': 'Выбрать альбом Immich',
|
||||
'memories.selectAlbum': 'Выбрать альбом {provider_name}',
|
||||
'memories.selectAlbumMultiple': 'Выбрать альбом',
|
||||
'memories.noAlbums': 'Альбомы не найдены',
|
||||
'memories.syncAlbum': 'Синхронизировать',
|
||||
'memories.unlinkAlbum': 'Отвязать',
|
||||
'memories.photos': 'фото',
|
||||
'memories.selectPhotos': 'Выбрать фото из Immich',
|
||||
'memories.selectPhotos': 'Выбрать фото из {provider_name}',
|
||||
'memories.selectPhotosMultiple': 'Выбрать фотографии',
|
||||
'memories.selectHint': 'Нажмите на фото, чтобы выбрать их.',
|
||||
'memories.selected': 'выбрано',
|
||||
|
||||
@@ -602,7 +602,7 @@ const admin: TranslationStrings = {
|
||||
'admin.github.by': 'ile',
|
||||
'admin.github.support': "TREK'i geliştirmeye devam etmeme yardımcı oluyor",
|
||||
'admin.update.available': 'Güncelleme mevcut',
|
||||
'admin.update.text': 'TREK {versiyon} mevcut. {current} çalıştırıyorsunuz.',
|
||||
'admin.update.text': 'TREK {version} mevcut. {current} çalıştırıyorsunuz.',
|
||||
'admin.update.button': "GitHub'da görüntüle",
|
||||
'admin.update.install': 'Güncellemeyi Yükle',
|
||||
'admin.update.confirmTitle': 'Güncelleme Yüklensin mi?',
|
||||
|
||||
@@ -51,7 +51,7 @@ const system_notice: TranslationStrings = {
|
||||
'system_notice.thank_you_support.cta_kofi': "Ko-fi'de Destek Ol",
|
||||
'system_notice.pager.prev': 'Önceki bildirim',
|
||||
'system_notice.pager.next': 'Sonraki bildirim',
|
||||
'system_notice.pager.counter': '{güncel} / {toplam}',
|
||||
'system_notice.pager.counter': '{current} / {total}',
|
||||
'system_notice.pager.goto': '{n}. bildirime git',
|
||||
'system_notice.pager.position': '{total} Bildirimden {current}.',
|
||||
};
|
||||
|
||||
@@ -31,7 +31,7 @@ const vacay: TranslationStrings = {
|
||||
'vacay.entitlementDays': 'Günler',
|
||||
'vacay.used': 'Kullanılmış',
|
||||
'vacay.remaining': 'Sol',
|
||||
'vacay.carriedOver': '{yıl} tarihinden itibaren',
|
||||
'vacay.carriedOver': '{year} tarihinden itibaren',
|
||||
'vacay.blockWeekends': 'Hafta Sonlarını Engelle',
|
||||
'vacay.blockWeekendsHint': 'Hafta sonu günlerinde tatil girişlerini önleyin',
|
||||
'vacay.weekendDays': 'Hafta sonu günleri',
|
||||
|
||||
@@ -2,13 +2,13 @@ import type { TranslationStrings } from '../types';
|
||||
|
||||
const memories: TranslationStrings = {
|
||||
'memories.title': 'Фото',
|
||||
'memories.notConnected': 'Immich не підключено',
|
||||
'memories.notConnectedHint': 'Підключіть Immich у налаштуваннях, щоб бачити фотографії з поїздок.',
|
||||
'memories.notConnected': '{provider_name} не підключено',
|
||||
'memories.notConnectedHint': 'Підключіть {provider_name} у налаштуваннях, щоб бачити фотографії з поїздок.',
|
||||
'memories.notConnectedMultipleHint':
|
||||
'Підключіть одного з цих фотопровайдерів: {provider_names} у Налаштуваннях, щоб додавати фотографії до цієї подорожі.',
|
||||
'memories.noDates': 'Додайте дати поїздки, щоб завантажити фотографії.',
|
||||
'memories.noPhotos': 'Фотографій не знайдено',
|
||||
'memories.noPhotosHint': 'В Immich немає фотографій за період цієї поїздки.',
|
||||
'memories.noPhotosHint': 'В {provider_name} немає фотографій за період цієї поїздки.',
|
||||
'memories.photosFound': 'фото',
|
||||
'memories.fromOthers': 'від інших',
|
||||
'memories.sharePhotos': 'Поділитися фото',
|
||||
@@ -29,8 +29,8 @@ const memories: TranslationStrings = {
|
||||
'memories.testFirst': 'Спершу перевірте підключення',
|
||||
'memories.connected': 'Підключено',
|
||||
'memories.disconnected': 'Не підключено',
|
||||
'memories.connectionSuccess': 'Підключення до Immich встановлено',
|
||||
'memories.connectionError': 'Не вдалося підключитися до Immich',
|
||||
'memories.connectionSuccess': 'Підключення до {provider_name} встановлено',
|
||||
'memories.connectionError': 'Не вдалося підключитися до {provider_name}',
|
||||
'memories.saved': 'Налаштування {provider_name} збережено',
|
||||
'memories.providerDisconnectedBanner':
|
||||
'З’єднання з {provider_name} втрачено. Перепідключіться в Налаштуваннях для перегляду фото.',
|
||||
@@ -40,13 +40,13 @@ const memories: TranslationStrings = {
|
||||
'memories.allLocations': 'Усі місця',
|
||||
'memories.addPhotos': 'Додати фото',
|
||||
'memories.linkAlbum': 'Прив’язати альбом',
|
||||
'memories.selectAlbum': 'Вибрати альбом Immich',
|
||||
'memories.selectAlbum': 'Вибрати альбом {provider_name}',
|
||||
'memories.selectAlbumMultiple': 'Вибрати альбом',
|
||||
'memories.noAlbums': 'Альбомів не знайдено',
|
||||
'memories.syncAlbum': 'Синхронізувати',
|
||||
'memories.unlinkAlbum': 'Відв’язати',
|
||||
'memories.photos': 'фото',
|
||||
'memories.selectPhotos': 'Вибрати фото з Immich',
|
||||
'memories.selectPhotos': 'Вибрати фото з {provider_name}',
|
||||
'memories.selectPhotosMultiple': 'Вибрати фотографії',
|
||||
'memories.selectHint': 'Натисніть на фото, щоб вибрати їх.',
|
||||
'memories.selected': 'вибрано',
|
||||
|
||||
@@ -2,12 +2,12 @@ import type { TranslationStrings } from '../types';
|
||||
|
||||
const memories: TranslationStrings = {
|
||||
'memories.title': '照片',
|
||||
'memories.notConnected': 'Immich 未连接',
|
||||
'memories.notConnectedHint': '在设置中连接您的 Immich 实例以在此查看旅行照片。',
|
||||
'memories.notConnected': '{provider_name} 未连接',
|
||||
'memories.notConnectedHint': '在设置中连接您的 {provider_name} 实例以在此查看旅行照片。',
|
||||
'memories.notConnectedMultipleHint': '请在设置中连接以下任一照片提供商:{provider_names},以便向此行程添加照片。',
|
||||
'memories.noDates': '为旅行添加日期以加载照片。',
|
||||
'memories.noPhotos': '未找到照片',
|
||||
'memories.noPhotosHint': 'Immich 中未找到此旅行日期范围内的照片。',
|
||||
'memories.noPhotosHint': '{provider_name} 中未找到此旅行日期范围内的照片。',
|
||||
'memories.photosFound': '张照片',
|
||||
'memories.fromOthers': '来自他人',
|
||||
'memories.sharePhotos': '分享照片',
|
||||
@@ -28,8 +28,8 @@ const memories: TranslationStrings = {
|
||||
'memories.testFirst': '请先测试连接',
|
||||
'memories.connected': '已连接',
|
||||
'memories.disconnected': '未连接',
|
||||
'memories.connectionSuccess': '已连接到 Immich',
|
||||
'memories.connectionError': '无法连接到 Immich',
|
||||
'memories.connectionSuccess': '已连接到 {provider_name}',
|
||||
'memories.connectionError': '无法连接到 {provider_name}',
|
||||
'memories.saved': '{provider_name} 设置已保存',
|
||||
'memories.providerDisconnectedBanner': '您与 {provider_name} 的连接已断开。请在设置中重新连接以查看照片。',
|
||||
'memories.saveError': '无法保存 {provider_name} 设置',
|
||||
@@ -38,13 +38,13 @@ const memories: TranslationStrings = {
|
||||
'memories.allLocations': '所有地点',
|
||||
'memories.addPhotos': '添加照片',
|
||||
'memories.linkAlbum': '关联相册',
|
||||
'memories.selectAlbum': '选择 Immich 相册',
|
||||
'memories.selectAlbum': '选择 {provider_name} 相册',
|
||||
'memories.selectAlbumMultiple': '选择相册',
|
||||
'memories.noAlbums': '未找到相册',
|
||||
'memories.syncAlbum': '同步相册',
|
||||
'memories.unlinkAlbum': '取消关联',
|
||||
'memories.photos': '张照片',
|
||||
'memories.selectPhotos': '从 Immich 选择照片',
|
||||
'memories.selectPhotos': '从 {provider_name} 选择照片',
|
||||
'memories.selectPhotosMultiple': '选择照片',
|
||||
'memories.selectHint': '点击照片以选择。',
|
||||
'memories.selected': '已选择',
|
||||
|
||||
Reference in New Issue
Block a user