From 6ee4705e2a0c3958c9524e61b42513cb185194b7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Yingyi=20/=20=E9=A2=96=E9=80=B8?=
<49649786+Zuoqiu-Yingyi@users.noreply.github.com>
Date: Tue, 31 Dec 2024 21:06:13 +0800
Subject: [PATCH] :art: Support local file system sync & backup (#13663)
* :art: Use local file system sync & backup
* :arrow_up: dejavu
* :art: Add the settings panel of local file system sync & backup
* :memo: Update user guides of local file system sync & backup
* :art: Adjust supported runtime environments
---
app/appearance/langs/ar_SA.json | 5 +-
app/appearance/langs/de_DE.json | 3 +
app/appearance/langs/en_US.json | 3 +
app/appearance/langs/es_ES.json | 3 +
app/appearance/langs/fr_FR.json | 3 +
app/appearance/langs/he_IL.json | 3 +
app/appearance/langs/it_IT.json | 3 +
app/appearance/langs/ja_JP.json | 3 +
app/appearance/langs/pl_PL.json | 3 +
app/appearance/langs/ru_RU.json | 3 +
app/appearance/langs/zh_CHT.json | 3 +
app/appearance/langs/zh_CN.json | 3 +
.../20230805232018-hgrq0ju.sy | 32 ++++++++-
.../20230805230131-sn7obzb.sy | 32 ++++++++-
.../20230805232903-erdoerp.sy | 32 ++++++++-
.../20240530101000-na9sys7.sy | 32 ++++++++-
app/src/config/repos.ts | 67 ++++++++++++++++++-
app/src/types/config.d.ts | 24 +++++++
app/src/util/functions.ts | 14 +++-
kernel/api/router.go | 1 +
kernel/api/sync.go | 39 +++++++++++
kernel/conf/sync.go | 10 +++
kernel/model/conf.go | 7 ++
kernel/model/repository.go | 18 +++--
kernel/model/sync.go | 27 +++++++-
kernel/util/net.go | 14 ++--
kernel/util/path.go | 53 ++++++++++++---
27 files changed, 408 insertions(+), 32 deletions(-)
diff --git a/app/appearance/langs/ar_SA.json b/app/appearance/langs/ar_SA.json
index 6c4507ded37..11fa101b999 100644
--- a/app/appearance/langs/ar_SA.json
+++ b/app/appearance/langs/ar_SA.json
@@ -1,4 +1,6 @@
{
+ "localFlieSystem": "نظام الملفات المحلي",
+ "deviceNotSupport": "الجهاز الحالي غير مدعوم",
"second": "ثانية",
"syncInterval": "الفاصل الزمني للمزامنة",
"syncIntervalTip": "مزامنة البيانات تلقائياً بعد أن توقف عن التغيير",
@@ -475,6 +477,7 @@
"syncOfficialProviderIntro": "المحدد حاليا هو خدمة تخزين السحابة التي توفرها رسميا SiYuan، والتي تدعم فقط المستخدمين المشتركين المدفوعة",
"syncThirdPartyProviderS3Intro": "المحدد حاليا هو خدمة تخزين سحابية تابعة لطرف ثالث متوافقة مع بروتوكول Amazon S3 (على سبيل المثال Qiniu، Aliyun OSS، Cloudflare R2)",
"syncThirdPartyProviderWebDAVIntro": "المحدد حاليا هو خدمة تخزين سحابية لطرف ثالث مع بروتوكول WebDAV. بسبب ضعف أداء هذا البروتوكول وعدم كفاية استقراره، يوصى باختيار خدمة S3 أولا",
+ "syncThirdPartyProviderLocalIntro": "المحدد حاليا هو خدمة تخزين سحابية لطرف ثالث مع بروتوكوليتم حاليًا اختيار خدمة التخزين التي يوفرها نظام الملفات المحلي. الرجاء إدخال المسار الكامل للمجلد المحلي في حقل Endpoint",
"syncThirdPartyProviderTip": "قبل استخدام هذه الميزة، يرجى الانتباه إلى القيود التقنية وبنود الفوترة لخدمة التخزين السحابي من الطرف الثالث:
القيود التقنية مثل تكرار استدعاء الواجهة وعرض النطاق الترددي
بنود الفوترة مثل مساحة التخزين وحركة المرور
شروط الاستخدام وضمان التوفر
إخلاء المسؤولية: للمزيد من التفاصيل، يرجى الرجوع إلى الشروط ذات الصلة في ترخيص المصدر المفتوح AGPLv3 المستخدم في SiYuan",
"syncProvider": "موفر خدمات التخزين السحابي",
"syncProviderTip": "إذا تم اختياره، سيتم استخدام خدمة التخزين السحابية لهذا الموفر لتحقيق مزامنة السحابة ووظائف النسخ الاحتياطي",
@@ -1581,4 +1584,4 @@
"251": "مجموع الأصول غير المستخدمة [%d]، [%d] فقط منها مدرج هنا",
"252": "\uD83D\uDEA8 قد يقوم Microsoft Defender بحذف النواة عن طريق الخطأ، وحذف البيانات وتقليل الأداء بشكل كبير. يوصى بإضافة مسار التثبيت ومسار مساحة العمل الخاصة بـ SiYuan إلى قائمة الاستثناءات"
}
-}
\ No newline at end of file
+}
diff --git a/app/appearance/langs/de_DE.json b/app/appearance/langs/de_DE.json
index 4ef52766909..903a417585a 100644
--- a/app/appearance/langs/de_DE.json
+++ b/app/appearance/langs/de_DE.json
@@ -1,4 +1,6 @@
{
+ "localFlieSystem": "Lokales Dateisystem",
+ "deviceNotSupport": "Das aktuelle Gerät wird nicht unterstützt",
"second": "Sekunde",
"syncInterval": "Synchronisierungsintervall",
"syncIntervalTip": "Automatische Datensynchronisierung, nachdem die Daten nicht mehr geändert werden",
@@ -475,6 +477,7 @@
"syncOfficialProviderIntro": "Derzeit ausgewählt ist der von SiYuan offiziell bereitgestellte Cloud-Speicherdienst, der nur abonnierte Benutzer unterstützt.",
"syncThirdPartyProviderS3Intro": "Derzeit ausgewählt ist ein Drittanbieter-Cloudspeicherdienst, der mit dem Amazon S3-Protokoll kompatibel ist (z. B. Qiniu, Aliyun OSS, Cloudflare R2)",
"syncThirdPartyProviderWebDAVIntro": "Derzeit ausgewählt ist ein Drittanbieter-Cloudspeicherdienst mit dem WebDAV-Protokoll. Aufgrund der schlechten Leistung und unzureichenden Stabilität dieses Protokolls wird empfohlen, zuerst den S3-Dienst auszuwählen.",
+ "syncThirdPartyProviderLocalIntro": "Derzeit wird der vom lokalen Dateisystem bereitgestellte Speicherdienst ausgewählt. Bitte geben Sie im Feld Endpoint den vollständigen Pfad des lokalen Ordners ein",
"syncThirdPartyProviderTip": "Bitte beachten Sie vor der Nutzung dieser Funktion die technischen Einschränkungen und Abrechnungspositionen des Drittanbieter-Cloudspeicherdienstes:
Technische Einschränkungen wie Schnittstellenaufruffrequenz und Bandbreite
Abrechnungspositionen wie Speicherplatz und Datenverkehr
Nutzungsbedingungen und Verfügbarkeitsgarantie
Haftungsausschluss: Für Details konsultieren Sie bitte die entsprechenden Bestimmungen in der Open Source Lizenz AGPLv3, die von SiYuan verwendet wird.",
"syncProvider": "Cloud-Speicherdienstanbieter",
"syncProviderTip": "Wenn ausgewählt, wird der Cloud-Speicherdienst dieses Anbieters verwendet, um Cloud-Synchronisations- und Backup-Funktionen zu erreichen.",
diff --git a/app/appearance/langs/en_US.json b/app/appearance/langs/en_US.json
index bb679a0fa1c..d3d92cf506b 100644
--- a/app/appearance/langs/en_US.json
+++ b/app/appearance/langs/en_US.json
@@ -1,4 +1,6 @@
{
+ "localFlieSystem": "Local file system",
+ "deviceNotSupport": "The current device is not supported",
"second": "second",
"syncInterval": "sync interval",
"syncIntervalTip": "Automatically sync data after it stops changing",
@@ -475,6 +477,7 @@
"syncOfficialProviderIntro": "Currently selected is the cloud storage service officially provided by SiYuan, which only supports paid subscription users",
"syncThirdPartyProviderS3Intro": "The current selected is a third-party cloud storage service compatible with the Amazon S3 protocol (eg Qiniu, Aliyun OSS, Cloudflare R2)",
"syncThirdPartyProviderWebDAVIntro": "The currently selected is a third-party cloud storage service with the WebDAV protocol. Due to the poor performance and insufficient stability of this protocol, it is recommended to choose the S3 service first",
+ "syncThirdPartyProviderLocalIntro": "The storage service provided by the local file system is currently selected. Please enter the full path of the local folder in the Endpoint field",
"syncThirdPartyProviderTip": "Before using this feature, please pay attention to the technical limitations and billing items of the third-party cloud storage service:
Technical limitations such as interface calling frequency and bandwidth
Billing items such as storage space and traffic
Terms of use and availability guarantee
Disclaimer: For details, please refer to the relevant terms in the open source license AGPLv3 used by SiYuan",
"syncProvider": "Cloud storage service provider",
"syncProviderTip": "If selected, the cloud storage service of this provider will be used to achieve cloud synchronization and backup functions",
diff --git a/app/appearance/langs/es_ES.json b/app/appearance/langs/es_ES.json
index 6cfbc0c8fd5..c2117823ed2 100644
--- a/app/appearance/langs/es_ES.json
+++ b/app/appearance/langs/es_ES.json
@@ -1,4 +1,6 @@
{
+ "localFlieSystem": "Sistema de archivos local",
+ "deviceNotSupport": "El dispositivo actual no es compatible",
"second": "segundo",
"syncInterval": "intervalo de sincronización",
"syncIntervalTip": "Sincronización automática de datos después de que los datos dejen de cambiar",
@@ -475,6 +477,7 @@
"syncOfficialProviderIntro": "Actualmente seleccionado es el servicio de almacenamiento en la nube proporcionado oficialmente por SiYuan, que solo admite usuarios de suscripción paga",
"syncThirdPartyProviderS3Intro": "El actual seleccionado es un servicio de almacenamiento en la nube de terceros compatible con el protocolo Amazon S3",
"syncThirdPartyProviderWebDAVIntro": "El servicio de almacenamiento en la nube de terceros del protocolo WebDAV está actualmente seleccionado. Debido al bajo rendimiento y la estabilidad insuficiente de este protocolo, se recomienda elegir primero el servicio S3",
+ "syncThirdPartyProviderLocalIntro": "Actualmente está seleccionado el servicio de almacenamiento proporcionado por el sistema de archivos local. Por favor, ingrese la ruta completa de la carpeta local en el campo Endpoint",
"syncThirdPartyProviderTip": "Antes de usar esta función, preste atención a las limitaciones técnicas y los elementos de facturación del servicio de almacenamiento en la nube de terceros:
Limitaciones técnicas, como la frecuencia de llamada de la interfaz y el ancho de banda
Artículos de facturación como espacio de almacenamiento y tráfico
Términos de uso y garantía de disponibilidad
Descargo de responsabilidad: para obtener más información, consulte los términos relevantes en la licencia de código abierto AGPLv3 utilizado por SiYuan",
"syncProvider": "Proveedor de servicios de almacenamiento en la nube",
"syncProviderTip": "Si se selecciona, el servicio de almacenamiento en la nube de este proveedor se usará para lograr funciones de sincronización y copia de seguridad en la nube",
diff --git a/app/appearance/langs/fr_FR.json b/app/appearance/langs/fr_FR.json
index 159c4c4c13c..7e5cc5a5e86 100644
--- a/app/appearance/langs/fr_FR.json
+++ b/app/appearance/langs/fr_FR.json
@@ -1,4 +1,6 @@
{
+ "localFlieSystem": "Système de fichiers local",
+ "deviceNotSupport": "L'appareil actuel n'est pas pris en charge",
"second": "seconde",
"syncInterval": "intervalle de synchronisation",
"syncIntervalTip": "Synchronisation automatique des données après l'arrêt des modifications",
@@ -475,6 +477,7 @@
"syncOfficialProviderIntro": "Actuellement sélectionné est le service de stockage en nuage officiellement fourni par SiYuan, qui ne prend en charge que les utilisateurs d'abonnement payant",
"syncThirdPartyProviderS3Intro": "L'actuel sélectionné est un service de stockage cloud tiers compatible avec le protocole Amazon S3",
"syncThirdPartyProviderWebDAVIntro": "Le service de stockage cloud tiers du protocole WebDAV est actuellement sélectionné. En raison des performances médiocres et de la stabilité insuffisante de ce protocole, il est recommandé de choisir d'abord le service S3",
+ "syncThirdPartyProviderLocalIntro": "Le service de stockage fourni par le système de fichiers local est actuellement sélectionné. Veuillez saisir le chemin complet du dossier local dans le champ Endpoint",
"syncThirdPartyProviderTip": "Avant d'utiliser cette fonctionnalité, veuillez prêter attention aux limitations techniques et aux éléments de facturation du service de stockage cloud tiers :
Limitations techniques telles que la fréquence d'appel et la bande passante de l'interface
Éléments de facturation tels que l'espace de stockage et le trafic
Conditions d'utilisation et garantie de disponibilité
Avis de non-responsabilité : pour plus de détails, veuillez vous référer aux termes pertinents dans la licence open source AGPLv3 utilisé par SiYuan",
"syncProvider": "Fournisseur de services de stockage en nuage",
"syncProviderTip": "Si sélectionné, le service de stockage cloud de ce fournisseur sera utilisé pour réaliser les fonctions de synchronisation et de sauvegarde cloud",
diff --git a/app/appearance/langs/he_IL.json b/app/appearance/langs/he_IL.json
index f08a8234784..9d4c6e73248 100644
--- a/app/appearance/langs/he_IL.json
+++ b/app/appearance/langs/he_IL.json
@@ -1,4 +1,6 @@
{
+ "localFlieSystem": "מערכת קבצים מקומית",
+ "deviceNotSupport": "המכשיר הנוכחי אינו נתמך",
"second": "שנייה",
"syncInterval": "מרווח סנכרון",
"syncIntervalTip": "סנכרון נתונים אוטומטי לאחר שהנתונים מפסיקים להשתנות",
@@ -475,6 +477,7 @@
"syncOfficialProviderIntro": "נבחר עתה הוא שירות האחסון בענן המוצע רשמית על ידי SiYuan, אשר תומך רק במשתמשים בתשלום",
"syncThirdPartyProviderS3Intro": "הנבחר עתה הוא שירות אחסון בענן צד שלישי תואם עם פרוטוקול Amazon S3 (למשל Qiniu, Aliyun OSS, Cloudflare R2)",
"syncThirdPartyProviderWebDAVIntro": "הנבחר עתה הוא שירות אחסון בענן צד שלישי עם פרוטוקול WebDAV. בשל ביצועים לקויים ויציבות בלתי מתאימה של פרוטוקול זה, הכרחי לבחור קודם בשירות S3",
+ "syncThirdPartyProviderLocalIntro": "שירות האחסון שסופק על ידי מערכת הקבצים המקומית נבחר כעת. אנא הזן את הנתיב המלא של התיקייה המקומית בשדה Endpoint",
"syncThirdPartyProviderTip": "לפני השימוש בתכונה זו, אנא שים לב למגבלות טכניות ופריטי חיוב של שירות האחסון בענן של צד שלישי:
מגבלות טכניות כמו תדירות קריאות ממשק ורוחב פס
פריטי חיוב כמו שטח אחסון ותעבורה
תנאי שימוש והתחייבות זמינות
הבהרה: למידע נוסף, עיין בתנאים הרלוונטיים ברישיון הקוד הפתוח AGPLv3 בו משתמשת SiYuan",
"syncProvider": "ספק שירות אחסון בענן",
"syncProviderTip": "אם נבחר, שירות האחסון בענן של ספק זה ישמש כדי להשיג פונקציות סנכרון וגיבוי בענן",
diff --git a/app/appearance/langs/it_IT.json b/app/appearance/langs/it_IT.json
index 5f372f257e2..f04bf2d2370 100644
--- a/app/appearance/langs/it_IT.json
+++ b/app/appearance/langs/it_IT.json
@@ -1,4 +1,6 @@
{
+ "localFlieSystem": "File system locale",
+ "deviceNotSupport": "Il dispositivo corrente non è supportato",
"second": "secondo",
"syncInterval": "intervallo di sincronizzazione",
"syncIntervalTip": "Sincronizzazione automatica dei dati dopo che non ci sono più variazioni",
@@ -475,6 +477,7 @@
"syncOfficialProviderIntro": "Attualmente è selezionato il servizio di archiviazione cloud ufficiale fornito da SiYuan, che supporta solo utenti abbonati a pagamento",
"syncThirdPartyProviderS3Intro": "Attualmente è selezionato un servizio di archiviazione cloud di terze parti compatibile con il protocollo Amazon S3 (es. Qiniu, Aliyun OSS, Cloudflare R2)",
"syncThirdPartyProviderWebDAVIntro": "Attualmente è selezionato un servizio di archiviazione cloud di terze parti con protocollo WebDAV. A causa delle scarse prestazioni e della stabilità insufficiente di questo protocollo, si consiglia di scegliere prima il servizio S3",
+ "syncThirdPartyProviderLocalIntro": "Attualmente è selezionato il servizio di archiviazione fornito dal file system locale. Inserisci il percorso completo della cartella locale nel campo Endpoint",
"syncThirdPartyProviderTip": "Prima di utilizzare questa funzione, presta attenzione ai limiti tecnici e agli elementi di fatturazione del servizio di archiviazione cloud di terze parti:
Limitazioni tecniche come la frequenza delle chiamate dell'interfaccia e la larghezza di banda
Elementi di fatturazione come lo spazio di archiviazione e il traffico
Termini di utilizzo e garanzia di disponibilità
Disclaimer: Per dettagli, si prega di consultare i termini pertinenti nella licenza open source AGPLv3 utilizzata da SiYuan",
"syncProvider": "Provider di servizio di archiviazione cloud",
"syncProviderTip": "Se selezionato, verrà utilizzato il servizio di archiviazione cloud di questo provider per sincronizzare e fare il backup dei dati",
diff --git a/app/appearance/langs/ja_JP.json b/app/appearance/langs/ja_JP.json
index 196ab3d44bf..0d12fb1a9bd 100644
--- a/app/appearance/langs/ja_JP.json
+++ b/app/appearance/langs/ja_JP.json
@@ -1,4 +1,6 @@
{
+ "localFlieSystem": "ローカルファイルシステム",
+ "deviceNotSupport": "現在のデバイスはサポートされていません",
"second": "秒",
"syncInterval": "同期間隔",
"syncIntervalTip": "データが変動しなくなった後に自動的にデータを同期します",
@@ -475,6 +477,7 @@
"syncOfficialProviderIntro": "現在選択されているのは SiYuan が公式に提供するクラウドストレージサービスで、有料サブスクリプションユーザーのみが利用可能です",
"syncThirdPartyProviderS3Intro": "現在選択されているのは Amazon S3 プロトコルに準拠したサードパーティのクラウドストレージサービスです (例: Qiniu、Aliyun OSS、Cloudflare R2)",
"syncThirdPartyProviderWebDAVIntro": "現在選択されているのは WebDAV プロトコルに対応したサードパーティのクラウドストレージサービスです。このプロトコルはパフォーマンスが低く安定性に欠けるため、S3 サービスを優先して選択することをお勧めします",
+ "syncThirdPartyProviderLocalIntro": "現在、ローカルファイルシステムが提供するストレージサービスが選択されています。Endpointフィールドにローカルフォルダの完全なパスを入力してください",
"syncThirdPartyProviderTip": "この機能を使用する前にサードパーティのクラウドストレージサービスの技術的な制限と請求項目に注意してください:
インターフェース呼び出し頻度や帯域幅などの技術的制限
ストレージ容量やトラフィックなどの請求項目
利用規約と可用性の保証
免責事項: 詳細は SiYuan が使用するオープンソースライセンス AGPLv3 の関連規約を参照してください",
"syncProvider": "クラウドストレージサービスプロバイダー",
"syncProviderTip": "選択したプロバイダーのクラウドストレージサービスがクラウド同期とバックアップ機能を実現するために使用されます",
diff --git a/app/appearance/langs/pl_PL.json b/app/appearance/langs/pl_PL.json
index 1031d70f029..edddee0eb38 100644
--- a/app/appearance/langs/pl_PL.json
+++ b/app/appearance/langs/pl_PL.json
@@ -1,4 +1,6 @@
{
+ "localFlieSystem": "Lokalny system plików",
+ "deviceNotSupport": "Bieżące urządzenie nie jest obsługiwane",
"second": "sekunda",
"syncInterval": "interwał synchronizacji",
"syncIntervalTip": "Automatyczna synchronizacja danych po zaprzestaniu zmian",
@@ -475,6 +477,7 @@
"syncOfficialProviderIntro": "Aktualnie wybrano usługę pamięci w chmurze oficjalnie dostarczaną przez SiYuan, która obsługuje tylko płatnych subskrybentów",
"syncThirdPartyProviderS3Intro": "Wybrano aktualnie jest usługą pamięci w chmurze firmy trzeciej zgodną z protokołem Amazon S3 (np. Qiniu, Aliyun OSS, Cloudflare R2)",
"syncThirdPartyProviderWebDAVIntro": "Wybrano obecnie jest usługą pamięci w chmurze firmy trzeciej z protokołem WebDAV. Z powodu słabej wydajności i niewystarczającej stabilności tego protokołu zaleca się najpierw wybranie usługi S3",
+ "syncThirdPartyProviderLocalIntro": "Obecnie wybrana jest usługa pamięci masowej dostarczana przez lokalny system plików. Wprowadź pełną ścieżkę do lokalnego folderu w polu Endpoint",
"syncThirdPartyProviderTip": "Przed użyciem tej funkcji proszę zwrócić uwagę na ograniczenia techniczne i pozycje rozliczeniowe usługi pamięci w chmurze firmy trzeciej:
Ograniczenia techniczne, takie jak częstotliwość wywołań interfejsów i przepustowość
Elementy rozliczeniowe, takie jak przestrzeń magazynowa i ruch
Warunki użytkowania i gwarancja dostępności
Zastrzeżenie: Aby uzyskać szczegóły, należy się odwołać do odpowiednich warunków w licencji open source AGPLv3 używanej przez SiYuan",
"syncProvider": "Dostawca usługi pamięci w chmurze",
"syncProviderTip": "Jeśli zostanie wybrany, usługa pamięci w chmurze tego dostawcy zostanie wykorzystana do realizacji funkcji synchronizacji i kopii zapasowej w chmurze",
diff --git a/app/appearance/langs/ru_RU.json b/app/appearance/langs/ru_RU.json
index e7c3dc25687..c8519751518 100644
--- a/app/appearance/langs/ru_RU.json
+++ b/app/appearance/langs/ru_RU.json
@@ -1,4 +1,6 @@
{
+ "localFlieSystem": "Локальная файловая система",
+ "deviceNotSupport": "Текущее устройство не поддерживается",
"second": "секунда",
"syncInterval": "интервал синхронизации",
"syncIntervalTip": "Автоматическая синхронизация данных после прекращения изменений",
@@ -475,6 +477,7 @@
"syncOfficialProviderIntro": "В настоящее время выбрана облачная служба хранения, официально предоставляемая SiYuan, которая поддерживает только пользователей платной подписки",
"syncThirdPartyProviderS3Intro": "В настоящее время выбрана служба облачного хранения третьей стороны, совместимая с протоколом Amazon S3 (например, Qiniu, Aliyun OSS, Cloudflare R2)",
"syncThirdPartyProviderWebDAVIntro": "В настоящее время выбрана облачная служба хранения, третьей стороны с протоколом WebDAV. Из-за низкой производительности и недостаточной стабильности этого протокола рекомендуется сначала выбрать службу S3",
+ "syncThirdPartyProviderLocalIntro": "В настоящее время выбрана служба хранения, предоставляемая локальной файловой системой. Введите полный путь к локальной папке в поле Endpoint",
"syncThirdPartyProviderTip": "Перед использованием этой функции, пожалуйста, обратите внимание на технические ограничения и пункты выставления счетов службы облачного хранения третьей стороны:
Технические ограничения, такие как частота вызова интерфейса и пропускная способность
Пункты выставления счетов, такие как место для хранения и трафик
Условия использования и гарантия доступности
Отказ от ответственности: Для получения дополнительных сведений смотрите соответствующие условия в лицензии открытого исходного кода AGPLv3, используемой SiYuan",
"syncProvider": "Поставщик услуги облачного хранения",
"syncProviderTip": "Если выбрано, будет использоваться облачное хранилище этого провайдера для реализации функций синхронизации и резервного копирования в облаке",
diff --git a/app/appearance/langs/zh_CHT.json b/app/appearance/langs/zh_CHT.json
index d973c0ec3ae..a93f5209a88 100644
--- a/app/appearance/langs/zh_CHT.json
+++ b/app/appearance/langs/zh_CHT.json
@@ -1,4 +1,6 @@
{
+ "localFlieSystem": "本地檔案系統",
+ "deviceNotSupport": "當前設備不支援",
"second": "秒",
"syncInterval": "同步間隔",
"syncIntervalTip": "數據不再變動後自動進行數據同步",
@@ -475,6 +477,7 @@
"syncOfficialProviderIntro": "當前選擇的是 SiYuan 官方提供的雲端存儲服務,僅支持付費訂閱用戶使用",
"syncThirdPartyProviderS3Intro": "當前選擇的是 Amazon S3 協議兼容的第三方雲端存儲服務(比如七牛雲、阿里雲 OSS、Cloudflare R2)",
"syncThirdPartyProviderWebDAVIntro": "當前選擇的是 WebDAV 協議的第三方雲端存儲服務。由於該協議性能較差且穩定性不足,建議優先選擇 S3 服務",
+ "syncThirdPartyProviderLocalIntro": "目前選擇的是本地文件系統提供的儲存服務。請在 Endpoint 欄位中輸入本地資料夾的完整路徑",
"syncThirdPartyProviderTip": "在使用該特性前,請注意第三方雲端存儲服務的技術限制和計費項目等條款: