浏览代码

feat(nginx_log): add index_path configuration for custom index storage

0xJacky 1 周之前
父节点
当前提交
6567d929eb

+ 5 - 1
api/nginx_log/router.go

@@ -4,7 +4,7 @@ import "github.com/gin-gonic/gin"
 
 
 // InitRouter registers all the nginx log related routes
 // InitRouter registers all the nginx log related routes
 func InitRouter(r *gin.RouterGroup) {
 func InitRouter(r *gin.RouterGroup) {
-	r.GET("nginx_log", Log)
+
 	r.GET("nginx_logs", GetLogList)
 	r.GET("nginx_logs", GetLogList)
 	r.POST("nginx_log/page", GetNginxLogPage)
 	r.POST("nginx_log/page", GetNginxLogPage)
 	r.POST("nginx_log/analytics", GetLogAnalytics)
 	r.POST("nginx_log/analytics", GetLogAnalytics)
@@ -20,3 +20,7 @@ func InitRouter(r *gin.RouterGroup) {
 	r.POST("nginx_log/settings/advanced_indexing/disable", DisableAdvancedIndexing)
 	r.POST("nginx_log/settings/advanced_indexing/disable", DisableAdvancedIndexing)
 	r.GET("nginx_log/settings/advanced_indexing/status", GetAdvancedIndexingStatus)
 	r.GET("nginx_log/settings/advanced_indexing/status", GetAdvancedIndexingStatus)
 }
 }
+
+func InitWebSocketRouter(r *gin.RouterGroup) {
+	r.GET("nginx_log", Log)
+}

+ 1 - 0
app.example.ini

@@ -64,6 +64,7 @@ RestartCmd      = start-stop-daemon --start --quiet --pidfile /var/run/nginx.pid
 
 
 [nginx_log]
 [nginx_log]
 AdvancedIndexingEnabled = false
 AdvancedIndexingEnabled = false
+IndexPath =
 
 
 [node]
 [node]
 Name             = Local
 Name             = Local

+ 0 - 19
app/components.d.ts

@@ -10,30 +10,18 @@ declare module 'vue' {
   export interface GlobalComponents {
   export interface GlobalComponents {
     AAlert: typeof import('ant-design-vue/es')['Alert']
     AAlert: typeof import('ant-design-vue/es')['Alert']
     AApp: typeof import('ant-design-vue/es')['App']
     AApp: typeof import('ant-design-vue/es')['App']
-    AAutoComplete: typeof import('ant-design-vue/es')['AutoComplete']
     AAvatar: typeof import('ant-design-vue/es')['Avatar']
     AAvatar: typeof import('ant-design-vue/es')['Avatar']
     ABadge: typeof import('ant-design-vue/es')['Badge']
     ABadge: typeof import('ant-design-vue/es')['Badge']
     ABreadcrumb: typeof import('ant-design-vue/es')['Breadcrumb']
     ABreadcrumb: typeof import('ant-design-vue/es')['Breadcrumb']
     ABreadcrumbItem: typeof import('ant-design-vue/es')['BreadcrumbItem']
     ABreadcrumbItem: typeof import('ant-design-vue/es')['BreadcrumbItem']
     AButton: typeof import('ant-design-vue/es')['Button']
     AButton: typeof import('ant-design-vue/es')['Button']
     ACard: typeof import('ant-design-vue/es')['Card']
     ACard: typeof import('ant-design-vue/es')['Card']
-    ACheckbox: typeof import('ant-design-vue/es')['Checkbox']
-    ACheckboxGroup: typeof import('ant-design-vue/es')['CheckboxGroup']
     ACol: typeof import('ant-design-vue/es')['Col']
     ACol: typeof import('ant-design-vue/es')['Col']
-    ACollapse: typeof import('ant-design-vue/es')['Collapse']
-    ACollapsePanel: typeof import('ant-design-vue/es')['CollapsePanel']
-    AComment: typeof import('ant-design-vue/es')['Comment']
     AConfigProvider: typeof import('ant-design-vue/es')['ConfigProvider']
     AConfigProvider: typeof import('ant-design-vue/es')['ConfigProvider']
     ADivider: typeof import('ant-design-vue/es')['Divider']
     ADivider: typeof import('ant-design-vue/es')['Divider']
     ADrawer: typeof import('ant-design-vue/es')['Drawer']
     ADrawer: typeof import('ant-design-vue/es')['Drawer']
-    ADropdown: typeof import('ant-design-vue/es')['Dropdown']
-    AEmpty: typeof import('ant-design-vue/es')['Empty']
-    AForm: typeof import('ant-design-vue/es')['Form']
-    AFormItem: typeof import('ant-design-vue/es')['FormItem']
     AInput: typeof import('ant-design-vue/es')['Input']
     AInput: typeof import('ant-design-vue/es')['Input']
     AInputGroup: typeof import('ant-design-vue/es')['InputGroup']
     AInputGroup: typeof import('ant-design-vue/es')['InputGroup']
-    AInputNumber: typeof import('ant-design-vue/es')['InputNumber']
-    AInputPassword: typeof import('ant-design-vue/es')['InputPassword']
     ALayout: typeof import('ant-design-vue/es')['Layout']
     ALayout: typeof import('ant-design-vue/es')['Layout']
     ALayoutContent: typeof import('ant-design-vue/es')['LayoutContent']
     ALayoutContent: typeof import('ant-design-vue/es')['LayoutContent']
     ALayoutFooter: typeof import('ant-design-vue/es')['LayoutFooter']
     ALayoutFooter: typeof import('ant-design-vue/es')['LayoutFooter']
@@ -43,28 +31,21 @@ declare module 'vue' {
     AListItem: typeof import('ant-design-vue/es')['ListItem']
     AListItem: typeof import('ant-design-vue/es')['ListItem']
     AListItemMeta: typeof import('ant-design-vue/es')['ListItemMeta']
     AListItemMeta: typeof import('ant-design-vue/es')['ListItemMeta']
     AMenu: typeof import('ant-design-vue/es')['Menu']
     AMenu: typeof import('ant-design-vue/es')['Menu']
-    AMenuDivider: typeof import('ant-design-vue/es')['MenuDivider']
     AMenuItem: typeof import('ant-design-vue/es')['MenuItem']
     AMenuItem: typeof import('ant-design-vue/es')['MenuItem']
     AModal: typeof import('ant-design-vue/es')['Modal']
     AModal: typeof import('ant-design-vue/es')['Modal']
     APopconfirm: typeof import('ant-design-vue/es')['Popconfirm']
     APopconfirm: typeof import('ant-design-vue/es')['Popconfirm']
     APopover: typeof import('ant-design-vue/es')['Popover']
     APopover: typeof import('ant-design-vue/es')['Popover']
     AppProvider: typeof import('./src/components/AppProvider.vue')['default']
     AppProvider: typeof import('./src/components/AppProvider.vue')['default']
     AProgress: typeof import('ant-design-vue/es')['Progress']
     AProgress: typeof import('ant-design-vue/es')['Progress']
-    ARangePicker: typeof import('ant-design-vue/es')['RangePicker']
     ARow: typeof import('ant-design-vue/es')['Row']
     ARow: typeof import('ant-design-vue/es')['Row']
-    ASegmented: typeof import('ant-design-vue/es')['Segmented']
     ASelect: typeof import('ant-design-vue/es')['Select']
     ASelect: typeof import('ant-design-vue/es')['Select']
     ASelectOption: typeof import('ant-design-vue/es')['SelectOption']
     ASelectOption: typeof import('ant-design-vue/es')['SelectOption']
     ASpace: typeof import('ant-design-vue/es')['Space']
     ASpace: typeof import('ant-design-vue/es')['Space']
-    ASpin: typeof import('ant-design-vue/es')['Spin']
     AStatistic: typeof import('ant-design-vue/es')['Statistic']
     AStatistic: typeof import('ant-design-vue/es')['Statistic']
     ASubMenu: typeof import('ant-design-vue/es')['SubMenu']
     ASubMenu: typeof import('ant-design-vue/es')['SubMenu']
-    ASwitch: typeof import('ant-design-vue/es')['Switch']
-    ATable: typeof import('ant-design-vue/es')['Table']
     ATabPane: typeof import('ant-design-vue/es')['TabPane']
     ATabPane: typeof import('ant-design-vue/es')['TabPane']
     ATabs: typeof import('ant-design-vue/es')['Tabs']
     ATabs: typeof import('ant-design-vue/es')['Tabs']
     ATag: typeof import('ant-design-vue/es')['Tag']
     ATag: typeof import('ant-design-vue/es')['Tag']
-    ATextarea: typeof import('ant-design-vue/es')['Textarea']
     ATooltip: typeof import('ant-design-vue/es')['Tooltip']
     ATooltip: typeof import('ant-design-vue/es')['Tooltip']
     ATypographyText: typeof import('ant-design-vue/es')['TypographyText']
     ATypographyText: typeof import('ant-design-vue/es')['TypographyText']
     ATypographyTitle: typeof import('ant-design-vue/es')['TypographyTitle']
     ATypographyTitle: typeof import('ant-design-vue/es')['TypographyTitle']

+ 1 - 0
app/src/api/settings.ts

@@ -72,6 +72,7 @@ export interface NginxSettings {
 
 
 export interface NginxLogSettings {
 export interface NginxLogSettings {
   advanced_indexing_enabled: boolean
   advanced_indexing_enabled: boolean
+  index_path: string
 }
 }
 
 
 export interface NodeSettings {
 export interface NodeSettings {

+ 197 - 202
app/src/language/ar/app.po

@@ -5,10 +5,10 @@ msgid ""
 msgstr ""
 msgstr ""
 "PO-Revision-Date: 2025-07-14 07:37+0000\n"
 "PO-Revision-Date: 2025-07-14 07:37+0000\n"
 "Last-Translator: mosaati <mohammed.saati@gmail.com>\n"
 "Last-Translator: mosaati <mohammed.saati@gmail.com>\n"
-"Language-Team: Arabic <https://weblate.nginxui.com/projects/nginx-ui/"
-"frontend/ar/>\n"
+"Language-Team: Arabic "
+"<https://weblate.nginxui.com/projects/nginx-ui/frontend/ar/>\n"
 "Language: ar\n"
 "Language: ar\n"
-"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 "
 "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 "
 "&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n"
 "&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n"
@@ -33,8 +33,7 @@ msgid "[Nginx UI] Certificate successfully revoked"
 msgstr "[Nginx UI] تم إلغاء الشهادة بنجاح"
 msgstr "[Nginx UI] تم إلغاء الشهادة بنجاح"
 
 
 #: src/language/generate.ts:39
 #: src/language/generate.ts:39
-msgid ""
-"[Nginx UI] Certificate was used for server, reloading server TLS certificate"
+msgid "[Nginx UI] Certificate was used for server, reloading server TLS certificate"
 msgstr "[Nginx UI] تم استخدام الشهادة للخادم، إعادة تحميل شهادة TLS للخادم"
 msgstr "[Nginx UI] تم استخدام الشهادة للخادم، إعادة تحميل شهادة TLS للخادم"
 
 
 #: src/language/generate.ts:40
 #: src/language/generate.ts:40
@@ -110,7 +109,15 @@ msgstr "تم نسخ {label} إلى الحافظة"
 msgid "* Includes nodes from group %{groupName} and manually selected nodes"
 msgid "* Includes nodes from group %{groupName} and manually selected nodes"
 msgstr "* يتضمن عقدًا من مجموعة %{groupName} وعقدًا مختارة يدويًا"
 msgstr "* يتضمن عقدًا من مجموعة %{groupName} وعقدًا مختارة يدويًا"
 
 
-#: src/views/nginx_log/components/IndexingSettingsModal.vue:168
+#: src/views/nginx_log/components/IndexingSettingsModal.vue:141
+msgid ""
+"* Index files are stored in the \"log-index\" directory within your Nginx "
+"UI config path by default."
+msgstr ""
+"* يتم تخزين ملفات الفهرس في دليل \"log-index\" ضمن مسار تكوين واجهة NGINX "
+"افتراضيًا."
+
+#: src/views/nginx_log/components/IndexingSettingsModal.vue:176
 msgid ""
 msgid ""
 "* Performance metrics measured on Apple M2 Pro (12-core) with 32GB RAM. "
 "* Performance metrics measured on Apple M2 Pro (12-core) with 32GB RAM. "
 "Actual performance may vary based on your hardware configuration."
 "Actual performance may vary based on your hardware configuration."
@@ -272,7 +279,7 @@ msgstr "تم تمكين الفهرسة المتقدمة ولكن فشل بدء 
 msgid "Advanced indexing enabled successfully"
 msgid "Advanced indexing enabled successfully"
 msgstr "تم تمكين الفهرسة المتقدمة بنجاح"
 msgstr "تم تمكين الفهرسة المتقدمة بنجاح"
 
 
-#: src/views/nginx_log/components/IndexingSettingsModal.vue:245
+#: src/views/nginx_log/components/IndexingSettingsModal.vue:253
 msgid "Advanced log indexing features are free and open source for all users"
 msgid "Advanced log indexing features are free and open source for all users"
 msgstr "ميزات الفهرسة المتقدمة للسجلات مجانية ومفتوحة المصدر لجميع المستخدمين"
 msgstr "ميزات الفهرسة المتقدمة للسجلات مجانية ومفتوحة المصدر لجميع المستخدمين"
 
 
@@ -280,7 +287,7 @@ msgstr "ميزات الفهرسة المتقدمة للسجلات مجانية 
 msgid "Advanced memory pooling system"
 msgid "Advanced memory pooling system"
 msgstr "نظام تجميع الذاكرة المتقدم"
 msgstr "نظام تجميع الذاكرة المتقدم"
 
 
-#: src/views/nginx_log/components/IndexingSettingsModal.vue:193
+#: src/views/nginx_log/components/IndexingSettingsModal.vue:201
 msgid "Advanced search & filtering"
 msgid "Advanced search & filtering"
 msgstr "البحث المتقدم والتصفية"
 msgstr "البحث المتقدم والتصفية"
 
 
@@ -322,8 +329,7 @@ msgid "Any"
 msgstr "أي"
 msgstr "أي"
 
 
 #: src/components/AutoCertForm/AutoCertForm.vue:209
 #: src/components/AutoCertForm/AutoCertForm.vue:209
-msgid ""
-"Any reachable IP address can be used with private Certificate Authorities"
+msgid "Any reachable IP address can be used with private Certificate Authorities"
 msgstr "يمكن استخدام أي عنوان IP قابل للوصول مع سلطات الشهادات الخاصة"
 msgstr "يمكن استخدام أي عنوان IP قابل للوصول مع سلطات الشهادات الخاصة"
 
 
 #: src/views/preference/tabs/OpenAISettings.vue:32
 #: src/views/preference/tabs/OpenAISettings.vue:32
@@ -512,7 +518,7 @@ msgstr "AutoCert قيد التشغيل، يرجى الانتظار..."
 msgid "AutoCert is running..."
 msgid "AutoCert is running..."
 msgstr "AutoCert قيد التشغيل..."
 msgstr "AutoCert قيد التشغيل..."
 
 
-#: src/views/nginx_log/components/IndexingSettingsModal.vue:213
+#: src/views/nginx_log/components/IndexingSettingsModal.vue:221
 msgid "Automated log rotation detection"
 msgid "Automated log rotation detection"
 msgstr "الكشف التلقائي عن تدوير السجلات"
 msgstr "الكشف التلقائي عن تدوير السجلات"
 
 
@@ -601,14 +607,13 @@ msgstr "جدول النسخ الاحتياطي"
 
 
 #: src/components/Notification/notifications.ts:38
 #: src/components/Notification/notifications.ts:38
 msgid "Backup task %{backup_name} completed successfully, file: %{file_path}"
 msgid "Backup task %{backup_name} completed successfully, file: %{file_path}"
-msgstr ""
-"تم إنجاز مهمة النسخ الاحتياطي %{backup_name} بنجاح، الملف: %{file_path}"
+msgstr "تم إنجاز مهمة النسخ الاحتياطي %{backup_name} بنجاح، الملف: %{file_path}"
 
 
 #: src/components/Notification/notifications.ts:34
 #: src/components/Notification/notifications.ts:34
-msgid ""
-"Backup task %{backup_name} failed during storage upload, error: %{error}"
+msgid "Backup task %{backup_name} failed during storage upload, error: %{error}"
 msgstr ""
 msgstr ""
-"فشلت مهمة النسخ الاحتياطي %{backup_name} أثناء تحميل التخزين، الخطأ: %{error}"
+"فشلت مهمة النسخ الاحتياطي %{backup_name} أثناء تحميل التخزين، الخطأ: "
+"%{error}"
 
 
 #: src/components/Notification/notifications.ts:30
 #: src/components/Notification/notifications.ts:30
 msgid "Backup task %{backup_name} failed to execute, error: %{error}"
 msgid "Backup task %{backup_name} failed to execute, error: %{error}"
@@ -684,7 +689,7 @@ msgstr "المتصفح"
 msgid "Browser Statistics"
 msgid "Browser Statistics"
 msgstr "إحصائيات المتصفح"
 msgstr "إحصائيات المتصفح"
 
 
-#: src/views/nginx_log/components/IndexingSettingsModal.vue:267
+#: src/views/nginx_log/components/IndexingSettingsModal.vue:275
 msgid ""
 msgid ""
 "By enabling advanced indexing, you acknowledge that your system meets the "
 "By enabling advanced indexing, you acknowledge that your system meets the "
 "requirements and understand the performance implications. This will start "
 "requirements and understand the performance implications. This will start "
@@ -703,8 +708,7 @@ msgstr "الذاكرة المؤقتة"
 
 
 #: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:177
 #: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:177
 msgid "Cache items not accessed within this time will be removed"
 msgid "Cache items not accessed within this time will be removed"
-msgstr ""
-"سيتم إزالة عناصر الذاكرة المؤقتة التي لم يتم الوصول إليها خلال هذا الوقت"
+msgstr "سيتم إزالة عناصر الذاكرة المؤقتة التي لم يتم الوصول إليها خلال هذا الوقت"
 
 
 #: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:349
 #: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:349
 msgid "Cache loader processing time threshold"
 msgid "Cache loader processing time threshold"
@@ -970,23 +974,23 @@ msgstr "فحص الأيقونة"
 #: src/language/generate.ts:6
 #: src/language/generate.ts:6
 msgid ""
 msgid ""
 "Check if /var/run/docker.sock exists. If you are using Nginx UI Official "
 "Check if /var/run/docker.sock exists. If you are using Nginx UI Official "
-"Docker Image, please make sure the docker socket is mounted like this: `-v /"
-"var/run/docker.sock:/var/run/docker.sock`. Nginx UI official image uses /var/"
-"run/docker.sock to communicate with the host Docker Engine via Docker Client "
-"API. This feature is used to control Nginx in another container and perform "
-"container replacement rather than binary replacement during OTA upgrades of "
-"Nginx UI to ensure container dependencies are also upgraded. If you don't "
-"need this feature, please add the environment variable "
+"Docker Image, please make sure the docker socket is mounted like this: `-v "
+"/var/run/docker.sock:/var/run/docker.sock`. Nginx UI official image uses "
+"/var/run/docker.sock to communicate with the host Docker Engine via Docker "
+"Client API. This feature is used to control Nginx in another container and "
+"perform container replacement rather than binary replacement during OTA "
+"upgrades of Nginx UI to ensure container dependencies are also upgraded. If "
+"you don't need this feature, please add the environment variable "
 "NGINX_UI_IGNORE_DOCKER_SOCKET=true to the container."
 "NGINX_UI_IGNORE_DOCKER_SOCKET=true to the container."
 msgstr ""
 msgstr ""
 "تحقق مما إذا كان /var/run/docker.sock موجودًا. إذا كنت تستخدم صورة Docker "
 "تحقق مما إذا كان /var/run/docker.sock موجودًا. إذا كنت تستخدم صورة Docker "
-"الرسمية لـ Nginx UI، يرجى التأكد من توصيل مقبس Docker بهذه الطريقة: `-v /var/"
-"run/docker.sock:/var/run/docker.sock`. تستخدم صورة Nginx UI الرسمية /var/run/"
-"docker.sock للتواصل مع محرك Docker المضيف عبر واجهة برمجة تطبيقات Docker "
-"Client. تُستخدم هذه الميزة للتحكم في Nginx في حاوية أخرى وإجراء استبدال "
-"الحاوية بدلاً من استبدال الثنائي أثناء التحديثات OTA لـ Nginx UI لضمان تحديث "
-"تبعيات الحاوية أيضًا. إذا كنت لا تحتاج إلى هذه الميزة، يرجى إضافة متغير "
-"البيئة NGINX_UI_IGNORE_DOCKER_SOCKET=true إلى الحاوية."
+"الرسمية لـ Nginx UI، يرجى التأكد من توصيل مقبس Docker بهذه الطريقة: `-v "
+"/var/run/docker.sock:/var/run/docker.sock`. تستخدم صورة Nginx UI الرسمية "
+"/var/run/docker.sock للتواصل مع محرك Docker المضيف عبر واجهة برمجة تطبيقات "
+"Docker Client. تُستخدم هذه الميزة للتحكم في Nginx في حاوية أخرى وإجراء "
+"استبدال الحاوية بدلاً من استبدال الثنائي أثناء التحديثات OTA لـ Nginx UI "
+"لضمان تحديث تبعيات الحاوية أيضًا. إذا كنت لا تحتاج إلى هذه الميزة، يرجى "
+"إضافة متغير البيئة NGINX_UI_IGNORE_DOCKER_SOCKET=true إلى الحاوية."
 
 
 #: src/components/SelfCheck/tasks/frontend/https-check.ts:14
 #: src/components/SelfCheck/tasks/frontend/https-check.ts:14
 msgid ""
 msgid ""
@@ -997,25 +1001,24 @@ msgstr ""
 "استخدام ميزات Passkeys والحافظة"
 "استخدام ميزات Passkeys والحافظة"
 
 
 #: src/language/generate.ts:7
 #: src/language/generate.ts:7
-msgid ""
-"Check if the conf.d directory is under the nginx configuration directory"
+msgid "Check if the conf.d directory is under the nginx configuration directory"
 msgstr "تحقق مما إذا كان دليل conf.d موجودًا ضمن دليل تكوين nginx"
 msgstr "تحقق مما إذا كان دليل conf.d موجودًا ضمن دليل تكوين nginx"
 
 
 #: src/language/generate.ts:9
 #: src/language/generate.ts:9
 msgid ""
 msgid ""
-"Check if the nginx access log path exists. By default, this path is obtained "
-"from 'nginx -V'. If it cannot be obtained or the obtained path does not "
-"point to a valid, existing file, an error will be reported. In this case, "
-"you need to modify the configuration file to specify the access log path."
-"Refer to the docs for more details: https://nginxui.com/zh_CN/guide/config-"
-"nginx.html#accesslogpath"
+"Check if the nginx access log path exists. By default, this path is "
+"obtained from 'nginx -V'. If it cannot be obtained or the obtained path "
+"does not point to a valid, existing file, an error will be reported. In "
+"this case, you need to modify the configuration file to specify the access "
+"log path.Refer to the docs for more details: "
+"https://nginxui.com/zh_CN/guide/config-nginx.html#accesslogpath"
 msgstr ""
 msgstr ""
-"تحقق مما إذا كان مسار سجل الوصول إلى nginx موجودًا. بشكل افتراضي، يتم الحصول "
-"على هذا المسار من 'nginx -V'. إذا لم يتم الحصول عليه أو إذا كان المسار الذي "
-"تم الحصول عليه لا يشير إلى ملف صالح موجود، فسيتم الإبلاغ عن خطأ. في هذه "
-"الحالة، تحتاج إلى تعديل ملف التكوين لتحديد مسار سجل الوصول. راجع الوثائق "
-"لمزيد من التفاصيل: https://nginxui.com/zh_CN/guide/config-nginx."
-"html#accesslogpath"
+"تحقق مما إذا كان مسار سجل الوصول إلى nginx موجودًا. بشكل افتراضي، يتم "
+"الحصول على هذا المسار من 'nginx -V'. إذا لم يتم الحصول عليه أو إذا كان "
+"المسار الذي تم الحصول عليه لا يشير إلى ملف صالح موجود، فسيتم الإبلاغ عن "
+"خطأ. في هذه الحالة، تحتاج إلى تعديل ملف التكوين لتحديد مسار سجل الوصول. "
+"راجع الوثائق لمزيد من التفاصيل: "
+"https://nginxui.com/zh_CN/guide/config-nginx.html#accesslogpath"
 
 
 #: src/language/generate.ts:10
 #: src/language/generate.ts:10
 msgid "Check if the nginx configuration directory exists"
 msgid "Check if the nginx configuration directory exists"
@@ -1031,28 +1034,29 @@ msgid ""
 "from 'nginx -V'. If it cannot be obtained or the obtained path does not "
 "from 'nginx -V'. If it cannot be obtained or the obtained path does not "
 "point to a valid, existing file, an error will be reported. In this case, "
 "point to a valid, existing file, an error will be reported. In this case, "
 "you need to modify the configuration file to specify the error log path. "
 "you need to modify the configuration file to specify the error log path. "
-"Refer to the docs for more details: https://nginxui.com/zh_CN/guide/config-"
-"nginx.html#errorlogpath"
+"Refer to the docs for more details: "
+"https://nginxui.com/zh_CN/guide/config-nginx.html#errorlogpath"
 msgstr ""
 msgstr ""
 "تحقق مما إذا كان مسار سجل أخطاء nginx موجودًا. بشكل افتراضي، يتم الحصول على "
 "تحقق مما إذا كان مسار سجل أخطاء nginx موجودًا. بشكل افتراضي، يتم الحصول على "
 "هذا المسار من 'nginx -V'. إذا تعذر الحصول عليه أو إذا كان المسار الذي تم "
 "هذا المسار من 'nginx -V'. إذا تعذر الحصول عليه أو إذا كان المسار الذي تم "
-"الحصول عليه لا يشير إلى ملف صالح موجود، فسيتم الإبلاغ عن خطأ. في هذه الحالة، "
-"تحتاج إلى تعديل ملف التكوين لتحديد مسار سجل الأخطاء. راجع الوثائق لمزيد من "
-"التفاصيل: https://nginxui.com/zh_CN/guide/config-nginx.html#errorlogpath"
+"الحصول عليه لا يشير إلى ملف صالح موجود، فسيتم الإبلاغ عن خطأ. في هذه "
+"الحالة، تحتاج إلى تعديل ملف التكوين لتحديد مسار سجل الأخطاء. راجع الوثائق "
+"لمزيد من التفاصيل: "
+"https://nginxui.com/zh_CN/guide/config-nginx.html#errorlogpath"
 
 
 #: src/language/generate.ts:8
 #: src/language/generate.ts:8
 msgid ""
 msgid ""
 "Check if the nginx PID path exists. By default, this path is obtained from "
 "Check if the nginx PID path exists. By default, this path is obtained from "
 "'nginx -V'. If it cannot be obtained, an error will be reported. In this "
 "'nginx -V'. If it cannot be obtained, an error will be reported. In this "
 "case, you need to modify the configuration file to specify the Nginx PID "
 "case, you need to modify the configuration file to specify the Nginx PID "
-"path.Refer to the docs for more details: https://nginxui.com/zh_CN/guide/"
-"config-nginx.html#pidpath"
+"path.Refer to the docs for more details: "
+"https://nginxui.com/zh_CN/guide/config-nginx.html#pidpath"
 msgstr ""
 msgstr ""
-"تحقق مما إذا كان مسار معرف عملية Nginx موجودًا. بشكل افتراضي، يتم الحصول على "
-"هذا المسار من الأمر 'nginx -V'. إذا تعذر الحصول عليه، سيتم الإبلاغ عن خطأ. "
-"في هذه الحالة، تحتاج إلى تعديل ملف التكوين لتحديد مسار معرف عملية Nginx. "
-"راجع الوثائق لمزيد من التفاصيل: https://nginxui.com/zh_CN/guide/config-nginx."
-"html#pidpath"
+"تحقق مما إذا كان مسار معرف عملية Nginx موجودًا. بشكل افتراضي، يتم الحصول "
+"على هذا المسار من الأمر 'nginx -V'. إذا تعذر الحصول عليه، سيتم الإبلاغ عن "
+"خطأ. في هذه الحالة، تحتاج إلى تعديل ملف التكوين لتحديد مسار معرف عملية "
+"Nginx. راجع الوثائق لمزيد من التفاصيل: "
+"https://nginxui.com/zh_CN/guide/config-nginx.html#pidpath"
 
 
 #: src/language/generate.ts:13
 #: src/language/generate.ts:13
 msgid "Check if the nginx sbin path exists"
 msgid "Check if the nginx sbin path exists"
@@ -1080,8 +1084,8 @@ msgstr ""
 
 
 #: src/language/generate.ts:18
 #: src/language/generate.ts:18
 msgid ""
 msgid ""
-"Check if the streams-available and streams-enabled directories are under the "
-"nginx configuration directory"
+"Check if the streams-available and streams-enabled directories are under "
+"the nginx configuration directory"
 msgstr ""
 msgstr ""
 "تحقق مما إذا كانت الدلائل streams-available و streams-enabled موجودة ضمن "
 "تحقق مما إذا كانت الدلائل streams-available و streams-enabled موجودة ضمن "
 "دليل تكوين nginx"
 "دليل تكوين nginx"
@@ -1226,7 +1230,7 @@ msgstr "فهرسة كاملة مع إمكانيات البحث"
 msgid "components"
 msgid "components"
 msgstr "المكونات"
 msgstr "المكونات"
 
 
-#: src/views/nginx_log/components/IndexingSettingsModal.vue:221
+#: src/views/nginx_log/components/IndexingSettingsModal.vue:229
 msgid "Compressed log file support"
 msgid "Compressed log file support"
 msgstr "دعم ملفات السجل المضغوطة"
 msgstr "دعم ملفات السجل المضغوطة"
 
 
@@ -1302,7 +1306,7 @@ msgstr "تأكيد الحذف"
 msgid "Confirm New Password"
 msgid "Confirm New Password"
 msgstr "تأكيد كلمة المرور الجديدة"
 msgstr "تأكيد كلمة المرور الجديدة"
 
 
-#: src/views/nginx_log/components/IndexingSettingsModal.vue:266
+#: src/views/nginx_log/components/IndexingSettingsModal.vue:274
 msgid "Confirmation Required"
 msgid "Confirmation Required"
 msgstr "مطلوب تأكيد"
 msgstr "مطلوب تأكيد"
 
 
@@ -1440,7 +1444,7 @@ msgstr "بيانات الاعتماد"
 msgid "Cron Expression"
 msgid "Cron Expression"
 msgstr "تعبير كرون"
 msgstr "تعبير كرون"
 
 
-#: src/views/nginx_log/components/IndexingSettingsModal.vue:217
+#: src/views/nginx_log/components/IndexingSettingsModal.vue:225
 msgid "Cross-file timeline correlation"
 msgid "Cross-file timeline correlation"
 msgstr "ارتباط الجدول الزمني عبر الملفات"
 msgstr "ارتباط الجدول الزمني عبر الملفات"
 
 
@@ -1924,8 +1928,8 @@ msgid ""
 "Due to the security policies of some browsers, you cannot use passkeys on "
 "Due to the security policies of some browsers, you cannot use passkeys on "
 "non-HTTPS websites, except when running on localhost."
 "non-HTTPS websites, except when running on localhost."
 msgstr ""
 msgstr ""
-"نظرًا لسياسات الأمان لبعض المتصفحات، لا يمكنك استخدام مفاتيح المرور على مواقع "
-"الويب غير HTTPS، إلا عند التشغيل على localhost."
+"نظرًا لسياسات الأمان لبعض المتصفحات، لا يمكنك استخدام مفاتيح المرور على "
+"مواقع الويب غير HTTPS، إلا عند التشغيل على localhost."
 
 
 #: src/components/LLM/LLMSessionTabs.vue:287
 #: src/components/LLM/LLMSessionTabs.vue:287
 #: src/components/LLM/LLMSessionTabs.vue:378
 #: src/components/LLM/LLMSessionTabs.vue:378
@@ -1946,7 +1950,7 @@ msgstr "تم النسخ إلى المحلي بنجاح"
 msgid "Dynamic"
 msgid "Dynamic"
 msgstr "ديناميكي"
 msgstr "ديناميكي"
 
 
-#: src/views/nginx_log/components/IndexingSettingsModal.vue:189
+#: src/views/nginx_log/components/IndexingSettingsModal.vue:197
 msgid "Dynamic shard management"
 msgid "Dynamic shard management"
 msgstr "إدارة الأجزاء الديناميكية"
 msgstr "إدارة الأجزاء الديناميكية"
 
 
@@ -2213,11 +2217,11 @@ msgstr "سجلات الأخطاء"
 
 
 #: src/views/nginx_log/structured/StructuredLogViewer.vue:668
 #: src/views/nginx_log/structured/StructuredLogViewer.vue:668
 msgid ""
 msgid ""
-"Error logs do not support structured analysis as they contain free-form text "
-"messages."
+"Error logs do not support structured analysis as they contain free-form "
+"text messages."
 msgstr "لا تدعم سجلات الأخطاء التحليل المنظم لأنها تحتوي على رسائل نصية حرة."
 msgstr "لا تدعم سجلات الأخطاء التحليل المنظم لأنها تحتوي على رسائل نصية حرة."
 
 
-#: src/views/nginx_log/components/IndexingSettingsModal.vue:225
+#: src/views/nginx_log/components/IndexingSettingsModal.vue:233
 msgid "Error pattern recognition"
 msgid "Error pattern recognition"
 msgstr "التعرف على أنماط الأخطاء"
 msgstr "التعرف على أنماط الأخطاء"
 
 
@@ -2245,7 +2249,7 @@ msgstr "تنفيذ في كل شهر في اليوم %{day} عند الساعة %
 msgid "Expand"
 msgid "Expand"
 msgstr "توسيع"
 msgstr "توسيع"
 
 
-#: src/views/nginx_log/components/IndexingSettingsModal.vue:145
+#: src/views/nginx_log/components/IndexingSettingsModal.vue:153
 msgid "Expected Performance"
 msgid "Expected Performance"
 msgstr "الأداء المتوقع"
 msgstr "الأداء المتوقع"
 
 
@@ -2274,15 +2278,15 @@ msgstr "تصدير إكسل"
 msgid ""
 msgid ""
 "External Account Binding HMAC Key (optional). Should be in Base64 URL "
 "External Account Binding HMAC Key (optional). Should be in Base64 URL "
 "encoding format."
 "encoding format."
-msgstr ""
-"مفتاح HMAC لربط الحساب الخارجي (اختياري). يجب أن يكون بتنسيق Base64 URL."
+msgstr "مفتاح HMAC لربط الحساب الخارجي (اختياري). يجب أن يكون بتنسيق Base64 URL."
 
 
 #: src/views/certificate/ACMEUser.vue:92
 #: src/views/certificate/ACMEUser.vue:92
 msgid ""
 msgid ""
-"External Account Binding Key ID (optional). Required for some ACME providers "
-"like ZeroSSL."
+"External Account Binding Key ID (optional). Required for some ACME "
+"providers like ZeroSSL."
 msgstr ""
 msgstr ""
-"معرف مفتاح الربط الحساب الخارجي (اختياري). مطلوب لبعض موفري ACME مثل ZeroSSL."
+"معرف مفتاح الربط الحساب الخارجي (اختياري). مطلوب لبعض موفري ACME مثل "
+"ZeroSSL."
 
 
 #: src/views/preference/tabs/NginxSettings.vue:49
 #: src/views/preference/tabs/NginxSettings.vue:49
 msgid "External Docker Container"
 msgid "External Docker Container"
@@ -2697,7 +2701,7 @@ msgstr "فشل في كتابة الملف المشفر: {0}"
 msgid "Failed to write security key file: {0}"
 msgid "Failed to write security key file: {0}"
 msgstr "فشل في كتابة ملف مفتاح الأمان: {0}"
 msgstr "فشل في كتابة ملف مفتاح الأمان: {0}"
 
 
-#: src/views/nginx_log/components/IndexingSettingsModal.vue:179
+#: src/views/nginx_log/components/IndexingSettingsModal.vue:187
 msgid "Features"
 msgid "Features"
 msgstr "الميزات"
 msgstr "الميزات"
 
 
@@ -2784,16 +2788,15 @@ msgstr "للمستخدمين الصينيين"
 msgid "For Chinese user: https://cloud.nginxui.com/"
 msgid "For Chinese user: https://cloud.nginxui.com/"
 msgstr "للمستخدمين الصين: /https://cloud.nginxui.com"
 msgstr "للمستخدمين الصين: /https://cloud.nginxui.com"
 
 
-#: src/views/nginx_log/components/IndexingSettingsModal.vue:257
+#: src/views/nginx_log/components/IndexingSettingsModal.vue:265
 msgid "For commercial or professional use, contact"
 msgid "For commercial or professional use, contact"
 msgstr "للاستخدام التجاري أو المهني، يرجى الاتصال بـ"
 msgstr "للاستخدام التجاري أو المهني، يرجى الاتصال بـ"
 
 
 #: src/views/nginx_log/structured/StructuredLogViewer.vue:670
 #: src/views/nginx_log/structured/StructuredLogViewer.vue:670
-msgid ""
-"For error logs, please use the Raw Log Viewer for better viewing experience."
+msgid "For error logs, please use the Raw Log Viewer for better viewing experience."
 msgstr ""
 msgstr ""
-"بالنسبة لسجلات الأخطاء، يرجى استخدام عارض السجلات الخام للحصول على تجربة عرض "
-"أفضل."
+"بالنسبة لسجلات الأخطاء، يرجى استخدام عارض السجلات الخام للحصول على تجربة "
+"عرض أفضل."
 
 
 #: src/components/AutoCertForm/AutoCertForm.vue:140
 #: src/components/AutoCertForm/AutoCertForm.vue:140
 msgid ""
 msgid ""
@@ -2805,11 +2808,11 @@ msgstr ""
 
 
 #: src/components/AutoCertForm/AutoCertForm.vue:188
 #: src/components/AutoCertForm/AutoCertForm.vue:188
 msgid ""
 msgid ""
-"For IP-based certificates, please specify the server IP address that will be "
-"included in the certificate."
+"For IP-based certificates, please specify the server IP address that will "
+"be included in the certificate."
 msgstr ""
 msgstr ""
-"بالنسبة للشهادات القائمة على IP، يرجى تحديد عنوان IP الخاص بالخادم الذي سيتم "
-"تضمينه في الشهادة."
+"بالنسبة للشهادات القائمة على IP، يرجى تحديد عنوان IP الخاص بالخادم الذي "
+"سيتم تضمينه في الشهادة."
 
 
 #: src/constants/errors/middleware.ts:4
 #: src/constants/errors/middleware.ts:4
 msgid "Form parse failed"
 msgid "Form parse failed"
@@ -2843,7 +2846,7 @@ msgstr "واجهة المستخدم"
 msgid "Full Text Search"
 msgid "Full Text Search"
 msgstr "بحث النص الكامل"
 msgstr "بحث النص الكامل"
 
 
-#: src/views/nginx_log/components/IndexingSettingsModal.vue:209
+#: src/views/nginx_log/components/IndexingSettingsModal.vue:217
 msgid "Full-text search support"
 msgid "Full-text search support"
 msgstr "دعم البحث النصي الكامل"
 msgstr "دعم البحث النصي الكامل"
 
 
@@ -2918,8 +2921,8 @@ msgid ""
 "gRPC health check requires server to implement gRPC Health Check service "
 "gRPC health check requires server to implement gRPC Health Check service "
 "(grpc.health.v1.Health)."
 "(grpc.health.v1.Health)."
 msgstr ""
 msgstr ""
-"يتطلب فحص صحة gRPC أن يقوم الخادم بتنفيذ خدمة فحص صحة gRPC (grpc.health.v1."
-"Health)."
+"يتطلب فحص صحة gRPC أن يقوم الخادم بتنفيذ خدمة فحص صحة gRPC "
+"(grpc.health.v1.Health)."
 
 
 #: src/views/dashboard/components/SiteHealthCheckModal.vue:501
 #: src/views/dashboard/components/SiteHealthCheckModal.vue:501
 msgid ""
 msgid ""
@@ -3032,6 +3035,14 @@ msgid ""
 "option."
 "option."
 msgstr "إذا كنت ترغب في إلغاء الشهادة القديمة تلقائيًا، يرجى تمكين هذا الخيار."
 msgstr "إذا كنت ترغب في إلغاء الشهادة القديمة تلقائيًا، يرجى تمكين هذا الخيار."
 
 
+#: src/views/nginx_log/components/IndexingSettingsModal.vue:142
+msgid ""
+"If you want to change the storage location, you can set the `IndexPath` of "
+"`nginx_log` section in the Nginx UI config."
+msgstr ""
+"إذا كنت ترغب في تغيير موقع التخزين، يمكنك تعيين `IndexPath` لقسم "
+"`nginx_log` في تكوين واجهة Nginx."
+
 #: src/views/preference/components/AuthSettings/AddPasskey.vue:76
 #: src/views/preference/components/AuthSettings/AddPasskey.vue:76
 msgid "If your browser supports WebAuthn Passkey, a dialog box will appear."
 msgid "If your browser supports WebAuthn Passkey, a dialog box will appear."
 msgstr "إذا كان متصفحك يدعم WebAuthn Passkey، ستظهر نافذة حوار."
 msgstr "إذا كان متصفحك يدعم WebAuthn Passkey، ستظهر نافذة حوار."
@@ -3065,7 +3076,7 @@ msgstr ""
 "يشمل العملية الرئيسية وعمليات العامل وعمليات التخزين المؤقت وعمليات Nginx "
 "يشمل العملية الرئيسية وعمليات العامل وعمليات التخزين المؤقت وعمليات Nginx "
 "الأخرى"
 "الأخرى"
 
 
-#: src/views/nginx_log/components/IndexingSettingsModal.vue:205
+#: src/views/nginx_log/components/IndexingSettingsModal.vue:213
 msgid "Incremental index scanning"
 msgid "Incremental index scanning"
 msgstr "مسح فهرس تدريجي"
 msgstr "مسح فهرس تدريجي"
 
 
@@ -3521,12 +3532,12 @@ msgstr "سجل"
 #: src/language/generate.ts:23
 #: src/language/generate.ts:23
 msgid ""
 msgid ""
 "Log file %{log_path} is not a regular file. If you are using nginx-ui in "
 "Log file %{log_path} is not a regular file. If you are using nginx-ui in "
-"docker container, please refer to https://nginxui.com/zh_CN/guide/config-"
-"nginx-log.html for more information."
+"docker container, please refer to "
+"https://nginxui.com/zh_CN/guide/config-nginx-log.html for more information."
 msgstr ""
 msgstr ""
 "ملف السجل %{log_path} ليس ملفًا عاديًا. إذا كنت تستخدم nginx-ui في حاوية "
 "ملف السجل %{log_path} ليس ملفًا عاديًا. إذا كنت تستخدم nginx-ui في حاوية "
-"Docker، يرجى الرجوع إلى https://nginxui.com/zh_CN/guide/config-nginx-log."
-"html لمزيد من المعلومات."
+"Docker، يرجى الرجوع إلى "
+"https://nginxui.com/zh_CN/guide/config-nginx-log.html لمزيد من المعلومات."
 
 
 #: src/constants/errors/nginx_log.ts:14
 #: src/constants/errors/nginx_log.ts:14
 msgid "Log file does not exist"
 msgid "Log file does not exist"
@@ -3578,19 +3589,19 @@ msgstr "تدوير السجلات"
 
 
 #: src/views/preference/tabs/LogrotateSettings.vue:13
 #: src/views/preference/tabs/LogrotateSettings.vue:13
 msgid ""
 msgid ""
-"Logrotate, by default, is enabled in most mainstream Linux distributions for "
-"users who install Nginx UI on the host machine, so you don't need to modify "
-"the parameters on this page. For users who install Nginx UI using Docker "
-"containers, you can manually enable this option. The crontab task scheduler "
-"of Nginx UI will execute the logrotate command at the interval you set in "
-"minutes."
+"Logrotate, by default, is enabled in most mainstream Linux distributions "
+"for users who install Nginx UI on the host machine, so you don't need to "
+"modify the parameters on this page. For users who install Nginx UI using "
+"Docker containers, you can manually enable this option. The crontab task "
+"scheduler of Nginx UI will execute the logrotate command at the interval "
+"you set in minutes."
 msgstr ""
 msgstr ""
 "بشكل افتراضي، يتم تفعيل تدوير السجلات في معظم توزيعات لينكس الرئيسية "
 "بشكل افتراضي، يتم تفعيل تدوير السجلات في معظم توزيعات لينكس الرئيسية "
 "للمستخدمين الذين يقومون بتثبيت واجهة Nginx UI على الجهاز المضيف، لذا لا "
 "للمستخدمين الذين يقومون بتثبيت واجهة Nginx UI على الجهاز المضيف، لذا لا "
-"تحتاج إلى تعديل معايير في هذه الصفحة. بالنسبة للمستخدمين الذين يقومون بتثبيت "
-"واجهة Nginx UI باستخدام حاويات Docker، يمكنك تمكين هذا الخيار يدويًا. سيقوم "
-"مجدول المهام crontab الخاص بواجهة Nginx UI بتنفيذ أمر تدوير السجلات في "
-"الفاصل الزمني الذي تحدده بالدقائق."
+"تحتاج إلى تعديل معايير في هذه الصفحة. بالنسبة للمستخدمين الذين يقومون "
+"بتثبيت واجهة Nginx UI باستخدام حاويات Docker، يمكنك تمكين هذا الخيار "
+"يدويًا. سيقوم مجدول المهام crontab الخاص بواجهة Nginx UI بتنفيذ أمر تدوير "
+"السجلات في الفاصل الزمني الذي تحدده بالدقائق."
 
 
 #: src/composables/useGeoTranslation.ts:166
 #: src/composables/useGeoTranslation.ts:166
 #: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:135
 #: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:135
@@ -3843,7 +3854,7 @@ msgstr "يوميًا في اليوم %{day} الساعة %{time}"
 msgid "Mozilla/5.0..."
 msgid "Mozilla/5.0..."
 msgstr "Mozilla/5.0..."
 msgstr "Mozilla/5.0..."
 
 
-#: src/views/nginx_log/components/IndexingSettingsModal.vue:229
+#: src/views/nginx_log/components/IndexingSettingsModal.vue:237
 msgid "Multi-dimensional data visualization"
 msgid "Multi-dimensional data visualization"
 msgstr "تصور البيانات متعدد الأبعاد"
 msgstr "تصور البيانات متعدد الأبعاد"
 
 
@@ -4146,8 +4157,8 @@ msgstr "تمت استعادة تكوين Nginx UI"
 
 
 #: src/components/SystemRestore/SystemRestoreContent.vue:336
 #: src/components/SystemRestore/SystemRestoreContent.vue:336
 msgid ""
 msgid ""
-"Nginx UI configuration has been restored and will restart automatically in a "
-"few seconds."
+"Nginx UI configuration has been restored and will restart automatically in "
+"a few seconds."
 msgstr "تمت استعادة تكوين Nginx UI وسيتم إعادة التشغيل تلقائيًا خلال بضع ثوانٍ."
 msgstr "تمت استعادة تكوين Nginx UI وسيتم إعادة التشغيل تلقائيًا خلال بضع ثوانٍ."
 
 
 #: src/language/generate.ts:30
 #: src/language/generate.ts:30
@@ -4337,13 +4348,11 @@ msgstr "عدد عمليات العامل المتزامنة، يتم الضبط
 
 
 #: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:314
 #: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:314
 msgid "Number of files processed by cache loader at once"
 msgid "Number of files processed by cache loader at once"
-msgstr ""
-"عدد الملفات التي تتم معالجتها بواسطة محمل ذاكرة التخزين المؤقت في وقت واحد"
+msgstr "عدد الملفات التي تتم معالجتها بواسطة محمل ذاكرة التخزين المؤقت في وقت واحد"
 
 
 #: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:252
 #: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:252
 msgid "Number of files processed by cache manager at once"
 msgid "Number of files processed by cache manager at once"
-msgstr ""
-"عدد الملفات التي تتم معالجتها بواسطة مدير ذاكرة التخزين المؤقت في وقت واحد"
+msgstr "عدد الملفات التي تتم معالجتها بواسطة مدير ذاكرة التخزين المؤقت في وقت واحد"
 
 
 #: src/composables/usePerformanceMetrics.ts:129
 #: src/composables/usePerformanceMetrics.ts:129
 #: src/composables/usePerformanceMetrics.ts:169
 #: src/composables/usePerformanceMetrics.ts:169
@@ -4393,7 +4402,7 @@ msgstr "الوثيقة الرسمية"
 msgid "Offline"
 msgid "Offline"
 msgstr "غير متصل"
 msgstr "غير متصل"
 
 
-#: src/views/nginx_log/components/IndexingSettingsModal.vue:201
+#: src/views/nginx_log/components/IndexingSettingsModal.vue:209
 msgid "Offline GeoIP analysis"
 msgid "Offline GeoIP analysis"
 msgstr "تحليل GeoIP دون اتصال"
 msgstr "تحليل GeoIP دون اتصال"
 
 
@@ -4443,7 +4452,7 @@ msgstr "يُسمح فقط بملفات zip"
 msgid "Open"
 msgid "Open"
 msgstr "مفتوح"
 msgstr "مفتوح"
 
 
-#: src/views/nginx_log/components/IndexingSettingsModal.vue:238
+#: src/views/nginx_log/components/IndexingSettingsModal.vue:246
 msgid "Open Source Limitation"
 msgid "Open Source Limitation"
 msgstr "قيود المصدر المفتوح"
 msgstr "قيود المصدر المفتوح"
 
 
@@ -4667,8 +4676,7 @@ msgstr "الرجاء إدخال"
 msgid ""
 msgid ""
 "Please enter a name for the passkey you wish to create and click the OK "
 "Please enter a name for the passkey you wish to create and click the OK "
 "button below."
 "button below."
-msgstr ""
-"يرجى إدخال اسم لمفتاح المرور الذي ترغب في إنشائه ثم انقر على زر موافق أدناه."
+msgstr "يرجى إدخال اسم لمفتاح المرور الذي ترغب في إنشائه ثم انقر على زر موافق أدناه."
 
 
 #: src/components/AutoCertForm/AutoCertForm.vue:98
 #: src/components/AutoCertForm/AutoCertForm.vue:98
 msgid "Please enter a valid IPv4 address (0-255 per octet)"
 msgid "Please enter a valid IPv4 address (0-255 per octet)"
@@ -4728,8 +4736,8 @@ msgstr ""
 #: src/components/Notification/notifications.ts:194
 #: src/components/Notification/notifications.ts:194
 #: src/language/constants.ts:59
 #: src/language/constants.ts:59
 msgid ""
 msgid ""
-"Please generate new recovery codes in the preferences immediately to prevent "
-"lockout."
+"Please generate new recovery codes in the preferences immediately to "
+"prevent lockout."
 msgstr "يرجى إنشاء رموز استرداد جديدة في التفضيلات على الفور لمنع الإغلاق."
 msgstr "يرجى إنشاء رموز استرداد جديدة في التفضيلات على الفور لمنع الإغلاق."
 
 
 #: src/views/config/components/ConfigRightPanel/Basic.vue:27
 #: src/views/config/components/ConfigRightPanel/Basic.vue:27
@@ -4771,8 +4779,7 @@ msgid "Please log in."
 msgstr "الرجاء تسجيل الدخول."
 msgstr "الرجاء تسجيل الدخول."
 
 
 #: src/views/certificate/DNSCredential.vue:102
 #: src/views/certificate/DNSCredential.vue:102
-msgid ""
-"Please note that the unit of time configurations below are all in seconds."
+msgid "Please note that the unit of time configurations below are all in seconds."
 msgstr "يرجى ملاحظة أن تكوين وحدات الوقت أدناه كلها بالثواني."
 msgstr "يرجى ملاحظة أن تكوين وحدات الوقت أدناه كلها بالثواني."
 
 
 #: src/views/install/components/InstallView.vue:102
 #: src/views/install/components/InstallView.vue:102
@@ -4907,7 +4914,8 @@ msgstr "البروتوكول"
 #: src/views/preference/tabs/ServerSettings.vue:47
 #: src/views/preference/tabs/ServerSettings.vue:47
 msgid ""
 msgid ""
 "Protocol configuration only takes effect when directly connecting. If using "
 "Protocol configuration only takes effect when directly connecting. If using "
-"reverse proxy, please configure the protocol separately in the reverse proxy."
+"reverse proxy, please configure the protocol separately in the reverse "
+"proxy."
 msgstr ""
 msgstr ""
 "إعدادات البروتوكول تتأثر فقط عند الاتصال المباشر. إذا كنت تستخدم خادم وكيل "
 "إعدادات البروتوكول تتأثر فقط عند الاتصال المباشر. إذا كنت تستخدم خادم وكيل "
 "عكسي، يرجى تكوين البروتوكول بشكل منفصل في خادم الوكيل العكسي."
 "عكسي، يرجى تكوين البروتوكول بشكل منفصل في خادم الوكيل العكسي."
@@ -4981,7 +4989,7 @@ msgstr "طلبات القراءة"
 msgid "Reads"
 msgid "Reads"
 msgstr "يقرأ"
 msgstr "يقرأ"
 
 
-#: src/views/nginx_log/components/IndexingSettingsModal.vue:197
+#: src/views/nginx_log/components/IndexingSettingsModal.vue:205
 msgid "Real-time analytics dashboard"
 msgid "Real-time analytics dashboard"
 msgstr "لوحة تحليلات في الوقت الفعلي"
 msgstr "لوحة تحليلات في الوقت الفعلي"
 
 
@@ -5793,19 +5801,19 @@ msgstr "الإعدادات"
 
 
 #: src/constants/errors/nginx_log.ts:8
 #: src/constants/errors/nginx_log.ts:8
 msgid ""
 msgid ""
-"Settings.NginxLogSettings.AccessLogPath is empty, refer to https://nginxui."
-"com/guide/config-nginx.html for more information"
+"Settings.NginxLogSettings.AccessLogPath is empty, refer to "
+"https://nginxui.com/guide/config-nginx.html for more information"
 msgstr ""
 msgstr ""
-"إعدادات.Settings.NginxLogSettings.AccessLogPath فارغة، راجع https://nginxui."
-"com/guide/config-nginx.html لمزيد من المعلومات"
+"إعدادات.Settings.NginxLogSettings.AccessLogPath فارغة، راجع "
+"https://nginxui.com/guide/config-nginx.html لمزيد من المعلومات"
 
 
 #: src/constants/errors/nginx_log.ts:7
 #: src/constants/errors/nginx_log.ts:7
 msgid ""
 msgid ""
-"Settings.NginxLogSettings.ErrorLogPath is empty, refer to https://nginxui."
-"com/guide/config-nginx.html for more information"
+"Settings.NginxLogSettings.ErrorLogPath is empty, refer to "
+"https://nginxui.com/guide/config-nginx.html for more information"
 msgstr ""
 msgstr ""
-"إعدادات.Settings.NginxLogSettings.ErrorLogPath فارغة، راجع https://nginxui."
-"com/guide/config-nginx.html لمزيد من المعلومات"
+"إعدادات.Settings.NginxLogSettings.ErrorLogPath فارغة، راجع "
+"https://nginxui.com/guide/config-nginx.html لمزيد من المعلومات"
 
 
 #: src/views/install/components/InstallView.vue:65
 #: src/views/install/components/InstallView.vue:65
 msgid "Setup your Nginx UI"
 msgid "Setup your Nginx UI"
@@ -6104,9 +6112,9 @@ msgstr "الأحد"
 #: src/components/SelfCheck/tasks/frontend/websocket.ts:13
 #: src/components/SelfCheck/tasks/frontend/websocket.ts:13
 msgid ""
 msgid ""
 "Support communication with the backend through the WebSocket protocol. If "
 "Support communication with the backend through the WebSocket protocol. If "
-"your Nginx UI is being used via an Nginx reverse proxy, please refer to this "
-"link to write the corresponding configuration file: https://nginxui.com/"
-"guide/nginx-proxy-example.html"
+"your Nginx UI is being used via an Nginx reverse proxy, please refer to "
+"this link to write the corresponding configuration file: "
+"https://nginxui.com/guide/nginx-proxy-example.html"
 msgstr ""
 msgstr ""
 "دعم الاتصال مع الخلفية من خلال بروتوكول WebSocket. إذا كنت تستخدم واجهة "
 "دعم الاتصال مع الخلفية من خلال بروتوكول WebSocket. إذا كنت تستخدم واجهة "
 "Nginx عبر وكيل عكسي لـ Nginx، يرجى الرجوع إلى هذا الرابط لكتابة ملف التكوين "
 "Nginx عبر وكيل عكسي لـ Nginx، يرجى الرجوع إلى هذا الرابط لكتابة ملف التكوين "
@@ -6297,8 +6305,7 @@ msgstr ""
 msgid ""
 msgid ""
 "The ICP Number should only contain letters, unicode, numbers, hyphens, "
 "The ICP Number should only contain letters, unicode, numbers, hyphens, "
 "dashes, colons, and dots."
 "dashes, colons, and dots."
-msgstr ""
-"يجب أن يحتوي رقم ICP على أحرف، يونيكود، أرقام، شرطات، نقاط، ونقطتين فقط."
+msgstr "يجب أن يحتوي رقم ICP على أحرف، يونيكود، أرقام، شرطات، نقاط، ونقطتين فقط."
 
 
 #: src/views/certificate/components/CertificateContentEditor.vue:115
 #: src/views/certificate/components/CertificateContentEditor.vue:115
 msgid "The input is not a SSL Certificate"
 msgid "The input is not a SSL Certificate"
@@ -6310,10 +6317,11 @@ msgstr "المدخل ليس مفتاح شهادة SSL"
 
 
 #: src/constants/errors/nginx_log.ts:2
 #: src/constants/errors/nginx_log.ts:2
 msgid ""
 msgid ""
-"The log path is not under the paths in settings.NginxSettings.LogDirWhiteList"
+"The log path is not under the paths in "
+"settings.NginxSettings.LogDirWhiteList"
 msgstr ""
 msgstr ""
-"مسار السجل ليس ضمن المسارات الموجودة في settings.NginxSettings."
-"LogDirWhiteList"
+"مسار السجل ليس ضمن المسارات الموجودة في "
+"settings.NginxSettings.LogDirWhiteList"
 
 
 #: src/views/preference/tabs/OpenAISettings.vue:23
 #: src/views/preference/tabs/OpenAISettings.vue:23
 #: src/views/preference/tabs/OpenAISettings.vue:89
 #: src/views/preference/tabs/OpenAISettings.vue:89
@@ -6325,8 +6333,7 @@ msgstr ""
 "فقط."
 "فقط."
 
 
 #: src/views/preference/tabs/OpenAISettings.vue:90
 #: src/views/preference/tabs/OpenAISettings.vue:90
-msgid ""
-"The model used for code completion, if not set, the chat model will be used."
+msgid "The model used for code completion, if not set, the chat model will be used."
 msgstr ""
 msgstr ""
 "النموذج المستخدم لإكمال التعليمات البرمجية، إذا لم يتم تعيينه، سيتم استخدام "
 "النموذج المستخدم لإكمال التعليمات البرمجية، إذا لم يتم تعيينه، سيتم استخدام "
 "نموذج الدردشة."
 "نموذج الدردشة."
@@ -6335,8 +6342,7 @@ msgstr ""
 msgid ""
 msgid ""
 "The node name should only contain letters, unicode, numbers, hyphens, "
 "The node name should only contain letters, unicode, numbers, hyphens, "
 "dashes, colons, and dots."
 "dashes, colons, and dots."
-msgstr ""
-"يجب أن يحتوي اسم العقدة على أحرف، يونيكود، أرقام، شرطات، نقاط، ونقطتين فقط."
+msgstr "يجب أن يحتوي اسم العقدة على أحرف، يونيكود، أرقام، شرطات، نقاط، ونقطتين فقط."
 
 
 #: src/views/site/site_add/SiteAdd.vue:96
 #: src/views/site/site_add/SiteAdd.vue:96
 msgid "The parameter of server_name is required"
 msgid "The parameter of server_name is required"
@@ -6442,14 +6448,13 @@ msgid "This field should not be empty"
 msgstr "يجب ألا يكون هذا الحقل فارغًا"
 msgstr "يجب ألا يكون هذا الحقل فارغًا"
 
 
 #: src/constants/form_errors.ts:6
 #: src/constants/form_errors.ts:6
-msgid ""
-"This field should only contain letters, unicode characters, numbers, and -_."
+msgid "This field should only contain letters, unicode characters, numbers, and -_."
 msgstr "يجب أن يحتوي هذا الحقل على حروف وأحرف يونيكود وأرقام و-_. فقط."
 msgstr "يجب أن يحتوي هذا الحقل على حروف وأحرف يونيكود وأرقام و-_. فقط."
 
 
 #: src/language/curd.ts:46
 #: src/language/curd.ts:46
 msgid ""
 msgid ""
-"This field should only contain letters, unicode characters, numbers, and -"
-"_./:"
+"This field should only contain letters, unicode characters, numbers, and "
+"-_./:"
 msgstr "يجب أن يحتوي هذا الحقل فقط على أحرف وأحرف يونيكود وأرقام و -_./:"
 msgstr "يجب أن يحتوي هذا الحقل فقط على أحرف وأحرف يونيكود وأرقام و -_./:"
 
 
 #: src/components/Notification/notifications.ts:94
 #: src/components/Notification/notifications.ts:94
@@ -6461,8 +6466,8 @@ msgid ""
 "This module provides Nginx request statistics, connection count, etc. data. "
 "This module provides Nginx request statistics, connection count, etc. data. "
 "After enabling it, you can view performance statistics"
 "After enabling it, you can view performance statistics"
 msgstr ""
 msgstr ""
-"توفر هذه الوحدة إحصائيات طلبات Nginx وعدد الاتصالات وما إلى ذلك من البيانات. "
-"بعد تمكينها، يمكنك عرض إحصائيات الأداء"
+"توفر هذه الوحدة إحصائيات طلبات Nginx وعدد الاتصالات وما إلى ذلك من "
+"البيانات. بعد تمكينها، يمكنك عرض إحصائيات الأداء"
 
 
 #: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:25
 #: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:25
 msgid "This month"
 msgid "This month"
@@ -6482,9 +6487,9 @@ msgstr ""
 
 
 #: src/components/AutoCertForm/AutoCertForm.vue:128
 #: src/components/AutoCertForm/AutoCertForm.vue:128
 msgid ""
 msgid ""
-"This site is configured as a default server (default_server) for HTTPS (port "
-"443). IP certificates require Certificate Authority (CA) support and may not "
-"be available with all ACME providers."
+"This site is configured as a default server (default_server) for HTTPS "
+"(port 443). IP certificates require Certificate Authority (CA) support and "
+"may not be available with all ACME providers."
 msgstr ""
 msgstr ""
 "تم تكوين هذا الموقع كخادم افتراضي (default_server) لـ HTTPS (المنفذ 443). "
 "تم تكوين هذا الموقع كخادم افتراضي (default_server) لـ HTTPS (المنفذ 443). "
 "تتطلب شهادات IP دعمًا من سلطة الشهادات (CA) وقد لا تكون متاحة مع جميع موفري "
 "تتطلب شهادات IP دعمًا من سلطة الشهادات (CA) وقد لا تكون متاحة مع جميع موفري "
@@ -6492,8 +6497,8 @@ msgstr ""
 
 
 #: src/components/AutoCertForm/AutoCertForm.vue:132
 #: src/components/AutoCertForm/AutoCertForm.vue:132
 msgid ""
 msgid ""
-"This site uses wildcard server name (_) which typically indicates an IP-"
-"based certificate. IP certificates require Certificate Authority (CA) "
+"This site uses wildcard server name (_) which typically indicates an "
+"IP-based certificate. IP certificates require Certificate Authority (CA) "
 "support and may not be available with all ACME providers."
 "support and may not be available with all ACME providers."
 msgstr ""
 msgstr ""
 "يستخدم هذا الموقع اسم خادم شامل (_) والذي يشير عادةً إلى شهادة قائمة على "
 "يستخدم هذا الموقع اسم خادم شامل (_) والذي يشير عادةً إلى شهادة قائمة على "
@@ -6543,12 +6548,11 @@ msgid ""
 "This will restore configuration files and database. Nginx UI will restart "
 "This will restore configuration files and database. Nginx UI will restart "
 "after the restoration is complete."
 "after the restoration is complete."
 msgstr ""
 msgstr ""
-"سيؤدي هذا إلى استعادة ملفات التكوين وقاعدة البيانات. سيعاد تشغيل واجهة Nginx "
-"بعد اكتمال الاستعادة."
+"سيؤدي هذا إلى استعادة ملفات التكوين وقاعدة البيانات. سيعاد تشغيل واجهة "
+"Nginx بعد اكتمال الاستعادة."
 
 
 #: src/views/node/BatchUpgrader.vue:186
 #: src/views/node/BatchUpgrader.vue:186
-msgid ""
-"This will upgrade or reinstall the Nginx UI on %{nodeNames} to %{version}."
+msgid "This will upgrade or reinstall the Nginx UI on %{nodeNames} to %{version}."
 msgstr "سيتم ترقية أو إعادة تثبيت Nginx UI على %{nodeNames} إلى %{version}."
 msgstr "سيتم ترقية أو إعادة تثبيت Nginx UI على %{nodeNames} إلى %{version}."
 
 
 #: src/views/preference/tabs/AuthSettings.vue:89
 #: src/views/preference/tabs/AuthSettings.vue:89
@@ -6619,8 +6623,8 @@ msgstr ""
 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:15
 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:15
 msgid ""
 msgid ""
 "To make sure the certification auto-renewal can work normally, we need to "
 "To make sure the certification auto-renewal can work normally, we need to "
-"add a location which can proxy the request from authority to backend, and we "
-"need to save this file and reload the Nginx. Are you sure you want to "
+"add a location which can proxy the request from authority to backend, and "
+"we need to save this file and reload the Nginx. Are you sure you want to "
 "continue?"
 "continue?"
 msgstr ""
 msgstr ""
 "لضمان عمل تجديد الشهادة التلقائي بشكل طبيعي، نحتاج إلى إضافة موقع يمكنه "
 "لضمان عمل تجديد الشهادة التلقائي بشكل طبيعي، نحتاج إلى إضافة موقع يمكنه "
@@ -6633,9 +6637,9 @@ msgid ""
 "provide an OpenAI-compatible API endpoint, so just set the baseUrl to your "
 "provide an OpenAI-compatible API endpoint, so just set the baseUrl to your "
 "local API."
 "local API."
 msgstr ""
 msgstr ""
-"لاستخدام نموذج كبير محلي، قم بنشره باستخدام ollama أو vllm أو lmdeploy. توفر "
-"هذه الأدوات نقطة نهاية API متوافقة مع OpenAI، لذا ما عليك سوى تعيين baseUrl "
-"إلى API المحلي الخاص بك."
+"لاستخدام نموذج كبير محلي، قم بنشره باستخدام ollama أو vllm أو lmdeploy. "
+"توفر هذه الأدوات نقطة نهاية API متوافقة مع OpenAI، لذا ما عليك سوى تعيين "
+"baseUrl إلى API المحلي الخاص بك."
 
 
 #: src/views/dashboard/NginxDashBoard.vue:57
 #: src/views/dashboard/NginxDashBoard.vue:57
 msgid "Toggle failed"
 msgid "Toggle failed"
@@ -7027,8 +7031,8 @@ msgid ""
 "you have a valid backup file and security token, and carefully select what "
 "you have a valid backup file and security token, and carefully select what "
 "to restore."
 "to restore."
 msgstr ""
 msgstr ""
-"تحذير: ستقوم عملية الاستعادة بالكتابة فوق التكوينات الحالية. تأكد من أن لديك "
-"ملف نسخ احتياطي صالحًا ورمزًا أمنيًا، واختر بعناية ما تريد استعادته."
+"تحذير: ستقوم عملية الاستعادة بالكتابة فوق التكوينات الحالية. تأكد من أن "
+"لديك ملف نسخ احتياطي صالحًا ورمزًا أمنيًا، واختر بعناية ما تريد استعادته."
 
 
 #: src/components/AutoCertForm/AutoCertForm.vue:103
 #: src/components/AutoCertForm/AutoCertForm.vue:103
 msgid ""
 msgid ""
@@ -7040,7 +7044,7 @@ msgstr ""
 "Encrypt إصدار شهادات لعناوين IP الخاصة. استخدم عنوان IP عام أو فكر في "
 "Encrypt إصدار شهادات لعناوين IP الخاصة. استخدم عنوان IP عام أو فكر في "
 "استخدام سلطة تصديق خاصة."
 "استخدام سلطة تصديق خاصة."
 
 
-#: src/views/nginx_log/components/IndexingSettingsModal.vue:251
+#: src/views/nginx_log/components/IndexingSettingsModal.vue:259
 msgid "We do not accept any feature requests"
 msgid "We do not accept any feature requests"
 msgstr "نحن لا نقبل أي طلبات ميزات"
 msgstr "نحن لا نقبل أي طلبات ميزات"
 
 
@@ -7052,8 +7056,8 @@ msgstr "سنضيف سجل أو أكثر من سجلات TXT إلى سجلات DN
 
 
 #: src/views/site/site_edit/components/Cert/ObtainCert.vue:142
 #: src/views/site/site_edit/components/Cert/ObtainCert.vue:142
 msgid ""
 msgid ""
-"We will remove the HTTPChallenge configuration from this file and reload the "
-"Nginx. Are you sure you want to continue?"
+"We will remove the HTTPChallenge configuration from this file and reload "
+"the Nginx. Are you sure you want to continue?"
 msgstr ""
 msgstr ""
 "سنقوم بإزالة تكوين HTTPChallenge من هذا الملف وإعادة تحميل Nginx. هل أنت "
 "سنقوم بإزالة تكوين HTTPChallenge من هذا الملف وإعادة تحميل Nginx. هل أنت "
 "متأكد أنك تريد المتابعة؟"
 "متأكد أنك تريد المتابعة؟"
@@ -7106,8 +7110,8 @@ msgid ""
 "When you enable/disable, delete, or save this site, the nodes set in the "
 "When you enable/disable, delete, or save this site, the nodes set in the "
 "namespace and the nodes selected below will be synchronized."
 "namespace and the nodes selected below will be synchronized."
 msgstr ""
 msgstr ""
-"عند تمكين/تعطيل أو حذف أو حفظ هذا الموقع، سيتم مزامنة العقد المحددة في مساحة "
-"الاسم والعقد المحددة أدناه."
+"عند تمكين/تعطيل أو حذف أو حفظ هذا الموقع، سيتم مزامنة العقد المحددة في "
+"مساحة الاسم والعقد المحددة أدناه."
 
 
 #: src/views/preference/components/AuthSettings/RecoveryCodes.vue:141
 #: src/views/preference/components/AuthSettings/RecoveryCodes.vue:141
 msgid ""
 msgid ""
@@ -7177,11 +7181,11 @@ msgstr "نعم"
 
 
 #: src/views/terminal/Terminal.vue:200
 #: src/views/terminal/Terminal.vue:200
 msgid ""
 msgid ""
-"You are accessing this terminal over an insecure HTTP connection on a non-"
-"localhost domain. This may expose sensitive information."
+"You are accessing this terminal over an insecure HTTP connection on a "
+"non-localhost domain. This may expose sensitive information."
 msgstr ""
 msgstr ""
-"أنت تتصل بهذا الطرف عبر اتصال HTTP غير آمن في نطاق غير محلي. قد يؤدي هذا إلى "
-"كشف معلومات حساسة."
+"أنت تتصل بهذا الطرف عبر اتصال HTTP غير آمن في نطاق غير محلي. قد يؤدي هذا "
+"إلى كشف معلومات حساسة."
 
 
 #: src/constants/errors/config.ts:8
 #: src/constants/errors/config.ts:8
 msgid "You are not allowed to delete a file outside of the nginx config path"
 msgid "You are not allowed to delete a file outside of the nginx config path"
@@ -7210,8 +7214,7 @@ msgid ""
 msgstr "لم تقم بتكوين إعدادات Webauthn، لذا لا يمكنك إضافة مفتاح مرور."
 msgstr "لم تقم بتكوين إعدادات Webauthn، لذا لا يمكنك إضافة مفتاح مرور."
 
 
 #: src/views/preference/components/AuthSettings/RecoveryCodes.vue:82
 #: src/views/preference/components/AuthSettings/RecoveryCodes.vue:82
-msgid ""
-"You have not enabled 2FA yet. Please enable 2FA to generate recovery codes."
+msgid "You have not enabled 2FA yet. Please enable 2FA to generate recovery codes."
 msgstr ""
 msgstr ""
 "لم تقم بتمكين المصادقة الثنائية بعد. يرجى تمكين المصادقة الثنائية لإنشاء "
 "لم تقم بتمكين المصادقة الثنائية بعد. يرجى تمكين المصادقة الثنائية لإنشاء "
 "رموز الاسترداد."
 "رموز الاسترداد."
@@ -7237,7 +7240,7 @@ msgstr "رموزك القديمة لن تعمل بعد الآن."
 msgid "Your passkeys"
 msgid "Your passkeys"
 msgstr "مفاتيح المرور الخاصة بك"
 msgstr "مفاتيح المرور الخاصة بك"
 
 
-#: src/views/nginx_log/components/IndexingSettingsModal.vue:185
+#: src/views/nginx_log/components/IndexingSettingsModal.vue:193
 msgid "Zero-allocation pipeline"
 msgid "Zero-allocation pipeline"
 msgstr "خط أنابيب بدون تخصيص"
 msgstr "خط أنابيب بدون تخصيص"
 
 
@@ -7388,14 +7391,13 @@ msgstr "خط أنابيب بدون تخصيص"
 
 
 #~ msgid ""
 #~ msgid ""
 #~ "Support communication with the backend through the Server-Sent Events "
 #~ "Support communication with the backend through the Server-Sent Events "
-#~ "protocol. If your Nginx UI is being used via an Nginx reverse proxy, "
-#~ "please refer to this link to write the corresponding configuration file: "
+#~ "protocol. If your Nginx UI is being used via an Nginx reverse proxy, please "
+#~ "refer to this link to write the corresponding configuration file: "
 #~ "https://nginxui.com/guide/nginx-proxy-example.html"
 #~ "https://nginxui.com/guide/nginx-proxy-example.html"
 #~ msgstr ""
 #~ msgstr ""
-#~ "دعم الاتصال مع الخلفية من خلال بروتوكول Server-Sent Events. إذا كنت "
-#~ "تستخدم واجهة Nginx UI عبر وكيل عكسي لـ Nginx، يرجى الرجوع إلى هذا الرابط "
-#~ "لكتابة ملف التكوين المقابل: https://nginxui.com/guide/nginx-proxy-example."
-#~ "html"
+#~ "دعم الاتصال مع الخلفية من خلال بروتوكول Server-Sent Events. إذا كنت تستخدم "
+#~ "واجهة Nginx UI عبر وكيل عكسي لـ Nginx، يرجى الرجوع إلى هذا الرابط لكتابة "
+#~ "ملف التكوين المقابل: https://nginxui.com/guide/nginx-proxy-example.html"
 
 
 #~ msgid "If left blank, the default CA Dir will be used."
 #~ msgid "If left blank, the default CA Dir will be used."
 #~ msgstr "إذا تُرك فارغًا، سيتم استخدام دليل CA الافتراضي."
 #~ msgstr "إذا تُرك فارغًا، سيتم استخدام دليل CA الافتراضي."
@@ -7486,12 +7488,12 @@ msgstr "خط أنابيب بدون تخصيص"
 
 
 #~ msgid ""
 #~ msgid ""
 #~ "Check if /var/run/docker.sock exists. If you are using Nginx UI Official "
 #~ "Check if /var/run/docker.sock exists. If you are using Nginx UI Official "
-#~ "Docker Image, please make sure the docker socket is mounted like this: `-"
-#~ "v /var/run/docker.sock:/var/run/docker.sock`."
+#~ "Docker Image, please make sure the docker socket is mounted like this: `-v "
+#~ "/var/run/docker.sock:/var/run/docker.sock`."
 #~ msgstr ""
 #~ msgstr ""
 #~ "تحقق مما إذا كان /var/run/docker.sock موجودًا. إذا كنت تستخدم صورة Docker "
 #~ "تحقق مما إذا كان /var/run/docker.sock موجودًا. إذا كنت تستخدم صورة Docker "
-#~ "الرسمية لـ Nginx UI، يرجى التأكد من أن مقبس Docker مثبت بهذه الطريقة: `-"
-#~ "v /var/run/docker.sock:/var/run/docker.sock`."
+#~ "الرسمية لـ Nginx UI، يرجى التأكد من أن مقبس Docker مثبت بهذه الطريقة: `-v "
+#~ "/var/run/docker.sock:/var/run/docker.sock`."
 
 
 #~ msgid "Check if the nginx access log path exists"
 #~ msgid "Check if the nginx access log path exists"
 #~ msgstr "تحقق مما إذا كان مسار سجل الوصول لـ nginx موجودًا"
 #~ msgstr "تحقق مما إذا كان مسار سجل الوصول لـ nginx موجودًا"
@@ -7527,8 +7529,8 @@ msgstr "خط أنابيب بدون تخصيص"
 
 
 #, fuzzy
 #, fuzzy
 #~ msgid ""
 #~ msgid ""
-#~ "When you enable/disable, delete, or save this stream, the nodes set in "
-#~ "the Node Group and the nodes selected below will be synchronized."
+#~ "When you enable/disable, delete, or save this stream, the nodes set in the "
+#~ "Node Group and the nodes selected below will be synchronized."
 #~ msgstr ""
 #~ msgstr ""
 #~ "عند تفعيل/تعطيل، حذف، أو حفظ هذا الموقع، سيتم مزامنة العقد المحددة في فئة "
 #~ "عند تفعيل/تعطيل، حذف، أو حفظ هذا الموقع، سيتم مزامنة العقد المحددة في فئة "
 #~ "الموقع والعقد المحددة أدناه."
 #~ "الموقع والعقد المحددة أدناه."
@@ -7591,15 +7593,12 @@ msgstr "خط أنابيب بدون تخصيص"
 #~ msgid "Please upgrade the remote Nginx UI to the latest version"
 #~ msgid "Please upgrade the remote Nginx UI to the latest version"
 #~ msgstr "يرجى ترقية واجهة Nginx البعيدة إلى أحدث إصدار"
 #~ msgstr "يرجى ترقية واجهة Nginx البعيدة إلى أحدث إصدار"
 
 
-#~ msgid ""
-#~ "Rename %{orig_path} to %{new_path} on %{env_name} failed, response: "
-#~ "%{resp}"
+#~ msgid "Rename %{orig_path} to %{new_path} on %{env_name} failed, response: %{resp}"
 #~ msgstr ""
 #~ msgstr ""
 #~ "فشل إعادة تسمية %{orig_path} إلى %{new_path} على %{env_name}، الاستجابة: "
 #~ "فشل إعادة تسمية %{orig_path} إلى %{new_path} على %{env_name}، الاستجابة: "
 #~ "%{resp}"
 #~ "%{resp}"
 
 
-#~ msgid ""
-#~ "Rename Site %{site} to %{new_site} on %{node} error, response: %{resp}"
+#~ msgid "Rename Site %{site} to %{new_site} on %{node} error, response: %{resp}"
 #~ msgstr ""
 #~ msgstr ""
 #~ "خطأ في إعادة تسمية الموقع %{site} إلى %{new_site} على %{node}، الاستجابة: "
 #~ "خطأ في إعادة تسمية الموقع %{site} إلى %{new_site} على %{node}، الاستجابة: "
 #~ "%{resp}"
 #~ "%{resp}"
@@ -7614,23 +7613,20 @@ msgstr "خط أنابيب بدون تخصيص"
 #~ "فشل مزامنة الشهادة %{cert_name} إلى %{env_name}، يرجى ترقية واجهة Nginx "
 #~ "فشل مزامنة الشهادة %{cert_name} إلى %{env_name}، يرجى ترقية واجهة Nginx "
 #~ "البعيدة إلى أحدث إصدار"
 #~ "البعيدة إلى أحدث إصدار"
 
 
-#~ msgid ""
-#~ "Sync Certificate %{cert_name} to %{env_name} failed, response: %{resp}"
+#~ msgid "Sync Certificate %{cert_name} to %{env_name} failed, response: %{resp}"
 #~ msgstr "فشل مزامنة الشهادة %{cert_name} إلى %{env_name}، الاستجابة: %{resp}"
 #~ msgstr "فشل مزامنة الشهادة %{cert_name} إلى %{env_name}، الاستجابة: %{resp}"
 
 
 #~ msgid "Sync config %{config_name} to %{env_name} failed, response: %{resp}"
 #~ msgid "Sync config %{config_name} to %{env_name} failed, response: %{resp}"
-#~ msgstr ""
-#~ "فشل مزامنة التكوين %{config_name} إلى %{env_name}، الاستجابة: %{resp}"
+#~ msgstr "فشل مزامنة التكوين %{config_name} إلى %{env_name}، الاستجابة: %{resp}"
 
 
 #~ msgid ""
 #~ msgid ""
-#~ "If you lose your mobile phone, you can use the recovery code to reset "
-#~ "your 2FA."
+#~ "If you lose your mobile phone, you can use the recovery code to reset your "
+#~ "2FA."
 #~ msgstr ""
 #~ msgstr ""
 #~ "إذا فقدت هاتفك المحمول، يمكنك استخدام رمز الاسترداد لإعادة تعيين المصادقة "
 #~ "إذا فقدت هاتفك المحمول، يمكنك استخدام رمز الاسترداد لإعادة تعيين المصادقة "
 #~ "الثنائية."
 #~ "الثنائية."
 
 
-#~ msgid ""
-#~ "The recovery code is only displayed once, please save it in a safe place."
+#~ msgid "The recovery code is only displayed once, please save it in a safe place."
 #~ msgstr "رمز الاسترداد يُعرض مرة واحدة فقط، يرجى حفظه في مكان آمن."
 #~ msgstr "رمز الاسترداد يُعرض مرة واحدة فقط، يرجى حفظه في مكان آمن."
 
 
 #~ msgid "Can't scan? Use text key binding"
 #~ msgid "Can't scan? Use text key binding"
@@ -7640,5 +7636,4 @@ msgstr "خط أنابيب بدون تخصيص"
 #~ msgstr "اسم المستخدم أو كلمة المرور غير صحيحة"
 #~ msgstr "اسم المستخدم أو كلمة المرور غير صحيحة"
 
 
 #~ msgid "Too many login failed attempts, please try again later"
 #~ msgid "Too many login failed attempts, please try again later"
-#~ msgstr ""
-#~ "عدد كبير جدًا من محاولات تسجيل الدخول الفاشلة، يرجى المحاولة مرة أخرى لاحقًا"
+#~ msgstr "عدد كبير جدًا من محاولات تسجيل الدخول الفاشلة، يرجى المحاولة مرة أخرى لاحقًا"

文件差异内容过多而无法显示
+ 189 - 205
app/src/language/de_DE/app.po


+ 33 - 21
app/src/language/en/app.po

@@ -92,7 +92,13 @@ msgstr ""
 msgid "* Includes nodes from group %{groupName} and manually selected nodes"
 msgid "* Includes nodes from group %{groupName} and manually selected nodes"
 msgstr ""
 msgstr ""
 
 
-#: src/views/nginx_log/components/IndexingSettingsModal.vue:168
+#: src/views/nginx_log/components/IndexingSettingsModal.vue:141
+msgid ""
+"* Index files are stored in the \"log-index\" directory within your Nginx UI "
+"config path by default."
+msgstr ""
+
+#: src/views/nginx_log/components/IndexingSettingsModal.vue:176
 msgid ""
 msgid ""
 "* Performance metrics measured on Apple M2 Pro (12-core) with 32GB RAM. "
 "* Performance metrics measured on Apple M2 Pro (12-core) with 32GB RAM. "
 "Actual performance may vary based on your hardware configuration."
 "Actual performance may vary based on your hardware configuration."
@@ -252,7 +258,7 @@ msgstr ""
 msgid "Advanced indexing enabled successfully"
 msgid "Advanced indexing enabled successfully"
 msgstr ""
 msgstr ""
 
 
-#: src/views/nginx_log/components/IndexingSettingsModal.vue:245
+#: src/views/nginx_log/components/IndexingSettingsModal.vue:253
 msgid "Advanced log indexing features are free and open source for all users"
 msgid "Advanced log indexing features are free and open source for all users"
 msgstr ""
 msgstr ""
 
 
@@ -260,7 +266,7 @@ msgstr ""
 msgid "Advanced memory pooling system"
 msgid "Advanced memory pooling system"
 msgstr ""
 msgstr ""
 
 
-#: src/views/nginx_log/components/IndexingSettingsModal.vue:193
+#: src/views/nginx_log/components/IndexingSettingsModal.vue:201
 msgid "Advanced search & filtering"
 msgid "Advanced search & filtering"
 msgstr ""
 msgstr ""
 
 
@@ -490,7 +496,7 @@ msgstr ""
 msgid "AutoCert is running..."
 msgid "AutoCert is running..."
 msgstr ""
 msgstr ""
 
 
-#: src/views/nginx_log/components/IndexingSettingsModal.vue:213
+#: src/views/nginx_log/components/IndexingSettingsModal.vue:221
 msgid "Automated log rotation detection"
 msgid "Automated log rotation detection"
 msgstr ""
 msgstr ""
 
 
@@ -660,7 +666,7 @@ msgstr ""
 msgid "Browser Statistics"
 msgid "Browser Statistics"
 msgstr ""
 msgstr ""
 
 
-#: src/views/nginx_log/components/IndexingSettingsModal.vue:267
+#: src/views/nginx_log/components/IndexingSettingsModal.vue:275
 msgid ""
 msgid ""
 "By enabling advanced indexing, you acknowledge that your system meets the "
 "By enabling advanced indexing, you acknowledge that your system meets the "
 "requirements and understand the performance implications. This will start "
 "requirements and understand the performance implications. This will start "
@@ -1159,7 +1165,7 @@ msgstr ""
 msgid "components"
 msgid "components"
 msgstr ""
 msgstr ""
 
 
-#: src/views/nginx_log/components/IndexingSettingsModal.vue:221
+#: src/views/nginx_log/components/IndexingSettingsModal.vue:229
 msgid "Compressed log file support"
 msgid "Compressed log file support"
 msgstr ""
 msgstr ""
 
 
@@ -1235,7 +1241,7 @@ msgstr ""
 msgid "Confirm New Password"
 msgid "Confirm New Password"
 msgstr ""
 msgstr ""
 
 
-#: src/views/nginx_log/components/IndexingSettingsModal.vue:266
+#: src/views/nginx_log/components/IndexingSettingsModal.vue:274
 msgid "Confirmation Required"
 msgid "Confirmation Required"
 msgstr ""
 msgstr ""
 
 
@@ -1371,7 +1377,7 @@ msgstr ""
 msgid "Cron Expression"
 msgid "Cron Expression"
 msgstr ""
 msgstr ""
 
 
-#: src/views/nginx_log/components/IndexingSettingsModal.vue:217
+#: src/views/nginx_log/components/IndexingSettingsModal.vue:225
 msgid "Cross-file timeline correlation"
 msgid "Cross-file timeline correlation"
 msgstr ""
 msgstr ""
 
 
@@ -1871,7 +1877,7 @@ msgstr ""
 msgid "Dynamic"
 msgid "Dynamic"
 msgstr ""
 msgstr ""
 
 
-#: src/views/nginx_log/components/IndexingSettingsModal.vue:189
+#: src/views/nginx_log/components/IndexingSettingsModal.vue:197
 msgid "Dynamic shard management"
 msgid "Dynamic shard management"
 msgstr ""
 msgstr ""
 
 
@@ -2139,7 +2145,7 @@ msgid ""
 "messages."
 "messages."
 msgstr ""
 msgstr ""
 
 
-#: src/views/nginx_log/components/IndexingSettingsModal.vue:225
+#: src/views/nginx_log/components/IndexingSettingsModal.vue:233
 msgid "Error pattern recognition"
 msgid "Error pattern recognition"
 msgstr ""
 msgstr ""
 
 
@@ -2167,7 +2173,7 @@ msgstr ""
 msgid "Expand"
 msgid "Expand"
 msgstr ""
 msgstr ""
 
 
-#: src/views/nginx_log/components/IndexingSettingsModal.vue:145
+#: src/views/nginx_log/components/IndexingSettingsModal.vue:153
 msgid "Expected Performance"
 msgid "Expected Performance"
 msgstr ""
 msgstr ""
 
 
@@ -2617,7 +2623,7 @@ msgstr ""
 msgid "Failed to write security key file: {0}"
 msgid "Failed to write security key file: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/views/nginx_log/components/IndexingSettingsModal.vue:179
+#: src/views/nginx_log/components/IndexingSettingsModal.vue:187
 msgid "Features"
 msgid "Features"
 msgstr ""
 msgstr ""
 
 
@@ -2704,7 +2710,7 @@ msgstr ""
 msgid "For Chinese user: https://cloud.nginxui.com/"
 msgid "For Chinese user: https://cloud.nginxui.com/"
 msgstr ""
 msgstr ""
 
 
-#: src/views/nginx_log/components/IndexingSettingsModal.vue:257
+#: src/views/nginx_log/components/IndexingSettingsModal.vue:265
 msgid "For commercial or professional use, contact"
 msgid "For commercial or professional use, contact"
 msgstr ""
 msgstr ""
 
 
@@ -2757,7 +2763,7 @@ msgstr ""
 msgid "Full Text Search"
 msgid "Full Text Search"
 msgstr ""
 msgstr ""
 
 
-#: src/views/nginx_log/components/IndexingSettingsModal.vue:209
+#: src/views/nginx_log/components/IndexingSettingsModal.vue:217
 msgid "Full-text search support"
 msgid "Full-text search support"
 msgstr ""
 msgstr ""
 
 
@@ -2940,6 +2946,12 @@ msgid ""
 "option."
 "option."
 msgstr ""
 msgstr ""
 
 
+#: src/views/nginx_log/components/IndexingSettingsModal.vue:142
+msgid ""
+"If you want to change the storage location, you can set the `IndexPath` of "
+"`nginx_log` section in the Nginx UI config."
+msgstr ""
+
 #: src/views/preference/components/AuthSettings/AddPasskey.vue:76
 #: src/views/preference/components/AuthSettings/AddPasskey.vue:76
 msgid "If your browser supports WebAuthn Passkey, a dialog box will appear."
 msgid "If your browser supports WebAuthn Passkey, a dialog box will appear."
 msgstr ""
 msgstr ""
@@ -2969,7 +2981,7 @@ msgid ""
 "processes"
 "processes"
 msgstr ""
 msgstr ""
 
 
-#: src/views/nginx_log/components/IndexingSettingsModal.vue:205
+#: src/views/nginx_log/components/IndexingSettingsModal.vue:213
 msgid "Incremental index scanning"
 msgid "Incremental index scanning"
 msgstr ""
 msgstr ""
 
 
@@ -3732,7 +3744,7 @@ msgstr ""
 msgid "Mozilla/5.0..."
 msgid "Mozilla/5.0..."
 msgstr ""
 msgstr ""
 
 
-#: src/views/nginx_log/components/IndexingSettingsModal.vue:229
+#: src/views/nginx_log/components/IndexingSettingsModal.vue:237
 msgid "Multi-dimensional data visualization"
 msgid "Multi-dimensional data visualization"
 msgstr ""
 msgstr ""
 
 
@@ -4272,7 +4284,7 @@ msgstr ""
 msgid "Offline"
 msgid "Offline"
 msgstr ""
 msgstr ""
 
 
-#: src/views/nginx_log/components/IndexingSettingsModal.vue:201
+#: src/views/nginx_log/components/IndexingSettingsModal.vue:209
 msgid "Offline GeoIP analysis"
 msgid "Offline GeoIP analysis"
 msgstr ""
 msgstr ""
 
 
@@ -4322,7 +4334,7 @@ msgstr ""
 msgid "Open"
 msgid "Open"
 msgstr ""
 msgstr ""
 
 
-#: src/views/nginx_log/components/IndexingSettingsModal.vue:238
+#: src/views/nginx_log/components/IndexingSettingsModal.vue:246
 msgid "Open Source Limitation"
 msgid "Open Source Limitation"
 msgstr ""
 msgstr ""
 
 
@@ -4850,7 +4862,7 @@ msgstr ""
 msgid "Reads"
 msgid "Reads"
 msgstr ""
 msgstr ""
 
 
-#: src/views/nginx_log/components/IndexingSettingsModal.vue:197
+#: src/views/nginx_log/components/IndexingSettingsModal.vue:205
 msgid "Real-time analytics dashboard"
 msgid "Real-time analytics dashboard"
 msgstr ""
 msgstr ""
 
 
@@ -6832,7 +6844,7 @@ msgid ""
 "or consider using a private CA."
 "or consider using a private CA."
 msgstr ""
 msgstr ""
 
 
-#: src/views/nginx_log/components/IndexingSettingsModal.vue:251
+#: src/views/nginx_log/components/IndexingSettingsModal.vue:259
 msgid "We do not accept any feature requests"
 msgid "We do not accept any feature requests"
 msgstr ""
 msgstr ""
 
 
@@ -7016,6 +7028,6 @@ msgstr ""
 msgid "Your passkeys"
 msgid "Your passkeys"
 msgstr ""
 msgstr ""
 
 
-#: src/views/nginx_log/components/IndexingSettingsModal.vue:185
+#: src/views/nginx_log/components/IndexingSettingsModal.vue:193
 msgid "Zero-allocation pipeline"
 msgid "Zero-allocation pipeline"
 msgstr ""
 msgstr ""

文件差异内容过多而无法显示
+ 201 - 202
app/src/language/es/app.po


文件差异内容过多而无法显示
+ 198 - 209
app/src/language/fr_FR/app.po


文件差异内容过多而无法显示
+ 173 - 268
app/src/language/ja_JP/app.po


文件差异内容过多而无法显示
+ 178 - 253
app/src/language/ko_KR/app.po


+ 29 - 21
app/src/language/messages.pot

@@ -95,7 +95,11 @@ msgstr ""
 msgid "* Includes nodes from group %{groupName} and manually selected nodes"
 msgid "* Includes nodes from group %{groupName} and manually selected nodes"
 msgstr ""
 msgstr ""
 
 
-#: src/views/nginx_log/components/IndexingSettingsModal.vue:168
+#: src/views/nginx_log/components/IndexingSettingsModal.vue:141
+msgid "* Index files are stored in the \"log-index\" directory within your Nginx UI config path by default."
+msgstr ""
+
+#: src/views/nginx_log/components/IndexingSettingsModal.vue:176
 msgid "* Performance metrics measured on Apple M2 Pro (12-core) with 32GB RAM. Actual performance may vary based on your hardware configuration."
 msgid "* Performance metrics measured on Apple M2 Pro (12-core) with 32GB RAM. Actual performance may vary based on your hardware configuration."
 msgstr ""
 msgstr ""
 
 
@@ -261,7 +265,7 @@ msgstr ""
 msgid "Advanced indexing enabled successfully"
 msgid "Advanced indexing enabled successfully"
 msgstr ""
 msgstr ""
 
 
-#: src/views/nginx_log/components/IndexingSettingsModal.vue:245
+#: src/views/nginx_log/components/IndexingSettingsModal.vue:253
 msgid "Advanced log indexing features are free and open source for all users"
 msgid "Advanced log indexing features are free and open source for all users"
 msgstr ""
 msgstr ""
 
 
@@ -269,7 +273,7 @@ msgstr ""
 msgid "Advanced memory pooling system"
 msgid "Advanced memory pooling system"
 msgstr ""
 msgstr ""
 
 
-#: src/views/nginx_log/components/IndexingSettingsModal.vue:193
+#: src/views/nginx_log/components/IndexingSettingsModal.vue:201
 msgid "Advanced search & filtering"
 msgid "Advanced search & filtering"
 msgstr ""
 msgstr ""
 
 
@@ -498,7 +502,7 @@ msgstr ""
 msgid "AutoCert is running..."
 msgid "AutoCert is running..."
 msgstr ""
 msgstr ""
 
 
-#: src/views/nginx_log/components/IndexingSettingsModal.vue:213
+#: src/views/nginx_log/components/IndexingSettingsModal.vue:221
 msgid "Automated log rotation detection"
 msgid "Automated log rotation detection"
 msgstr ""
 msgstr ""
 
 
@@ -668,7 +672,7 @@ msgstr ""
 msgid "Browser Statistics"
 msgid "Browser Statistics"
 msgstr ""
 msgstr ""
 
 
-#: src/views/nginx_log/components/IndexingSettingsModal.vue:267
+#: src/views/nginx_log/components/IndexingSettingsModal.vue:275
 msgid "By enabling advanced indexing, you acknowledge that your system meets the requirements and understand the performance implications. This will start indexing existing log files immediately."
 msgid "By enabling advanced indexing, you acknowledge that your system meets the requirements and understand the performance implications. This will start indexing existing log files immediately."
 msgstr ""
 msgstr ""
 
 
@@ -1134,7 +1138,7 @@ msgstr ""
 msgid "components"
 msgid "components"
 msgstr ""
 msgstr ""
 
 
-#: src/views/nginx_log/components/IndexingSettingsModal.vue:221
+#: src/views/nginx_log/components/IndexingSettingsModal.vue:229
 msgid "Compressed log file support"
 msgid "Compressed log file support"
 msgstr ""
 msgstr ""
 
 
@@ -1210,7 +1214,7 @@ msgstr ""
 msgid "Confirm New Password"
 msgid "Confirm New Password"
 msgstr ""
 msgstr ""
 
 
-#: src/views/nginx_log/components/IndexingSettingsModal.vue:266
+#: src/views/nginx_log/components/IndexingSettingsModal.vue:274
 msgid "Confirmation Required"
 msgid "Confirmation Required"
 msgstr ""
 msgstr ""
 
 
@@ -1345,7 +1349,7 @@ msgstr ""
 msgid "Cron Expression"
 msgid "Cron Expression"
 msgstr ""
 msgstr ""
 
 
-#: src/views/nginx_log/components/IndexingSettingsModal.vue:217
+#: src/views/nginx_log/components/IndexingSettingsModal.vue:225
 msgid "Cross-file timeline correlation"
 msgid "Cross-file timeline correlation"
 msgstr ""
 msgstr ""
 
 
@@ -1849,7 +1853,7 @@ msgstr ""
 msgid "Dynamic"
 msgid "Dynamic"
 msgstr ""
 msgstr ""
 
 
-#: src/views/nginx_log/components/IndexingSettingsModal.vue:189
+#: src/views/nginx_log/components/IndexingSettingsModal.vue:197
 msgid "Dynamic shard management"
 msgid "Dynamic shard management"
 msgstr ""
 msgstr ""
 
 
@@ -2116,7 +2120,7 @@ msgstr ""
 msgid "Error logs do not support structured analysis as they contain free-form text messages."
 msgid "Error logs do not support structured analysis as they contain free-form text messages."
 msgstr ""
 msgstr ""
 
 
-#: src/views/nginx_log/components/IndexingSettingsModal.vue:225
+#: src/views/nginx_log/components/IndexingSettingsModal.vue:233
 msgid "Error pattern recognition"
 msgid "Error pattern recognition"
 msgstr ""
 msgstr ""
 
 
@@ -2144,7 +2148,7 @@ msgstr ""
 msgid "Expand"
 msgid "Expand"
 msgstr ""
 msgstr ""
 
 
-#: src/views/nginx_log/components/IndexingSettingsModal.vue:145
+#: src/views/nginx_log/components/IndexingSettingsModal.vue:153
 msgid "Expected Performance"
 msgid "Expected Performance"
 msgstr ""
 msgstr ""
 
 
@@ -2590,7 +2594,7 @@ msgstr ""
 msgid "Failed to write security key file: {0}"
 msgid "Failed to write security key file: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/views/nginx_log/components/IndexingSettingsModal.vue:179
+#: src/views/nginx_log/components/IndexingSettingsModal.vue:187
 msgid "Features"
 msgid "Features"
 msgstr ""
 msgstr ""
 
 
@@ -2676,7 +2680,7 @@ msgstr ""
 msgid "For Chinese user: https://cloud.nginxui.com/"
 msgid "For Chinese user: https://cloud.nginxui.com/"
 msgstr ""
 msgstr ""
 
 
-#: src/views/nginx_log/components/IndexingSettingsModal.vue:257
+#: src/views/nginx_log/components/IndexingSettingsModal.vue:265
 msgid "For commercial or professional use, contact"
 msgid "For commercial or professional use, contact"
 msgstr ""
 msgstr ""
 
 
@@ -2725,7 +2729,7 @@ msgstr ""
 msgid "Full Text Search"
 msgid "Full Text Search"
 msgstr ""
 msgstr ""
 
 
-#: src/views/nginx_log/components/IndexingSettingsModal.vue:209
+#: src/views/nginx_log/components/IndexingSettingsModal.vue:217
 msgid "Full-text search support"
 msgid "Full-text search support"
 msgstr ""
 msgstr ""
 
 
@@ -2901,6 +2905,10 @@ msgstr ""
 msgid "If you want to automatically revoke the old certificate, please enable this option."
 msgid "If you want to automatically revoke the old certificate, please enable this option."
 msgstr ""
 msgstr ""
 
 
+#: src/views/nginx_log/components/IndexingSettingsModal.vue:142
+msgid "If you want to change the storage location, you can set the `IndexPath` of `nginx_log` section in the Nginx UI config."
+msgstr ""
+
 #: src/views/preference/components/AuthSettings/AddPasskey.vue:76
 #: src/views/preference/components/AuthSettings/AddPasskey.vue:76
 msgid "If your browser supports WebAuthn Passkey, a dialog box will appear."
 msgid "If your browser supports WebAuthn Passkey, a dialog box will appear."
 msgstr ""
 msgstr ""
@@ -2926,7 +2934,7 @@ msgstr ""
 msgid "Includes master process, worker processes, cache processes, and other Nginx processes"
 msgid "Includes master process, worker processes, cache processes, and other Nginx processes"
 msgstr ""
 msgstr ""
 
 
-#: src/views/nginx_log/components/IndexingSettingsModal.vue:205
+#: src/views/nginx_log/components/IndexingSettingsModal.vue:213
 msgid "Incremental index scanning"
 msgid "Incremental index scanning"
 msgstr ""
 msgstr ""
 
 
@@ -3684,7 +3692,7 @@ msgstr ""
 msgid "Mozilla/5.0..."
 msgid "Mozilla/5.0..."
 msgstr ""
 msgstr ""
 
 
-#: src/views/nginx_log/components/IndexingSettingsModal.vue:229
+#: src/views/nginx_log/components/IndexingSettingsModal.vue:237
 msgid "Multi-dimensional data visualization"
 msgid "Multi-dimensional data visualization"
 msgstr ""
 msgstr ""
 
 
@@ -4228,7 +4236,7 @@ msgstr ""
 msgid "Offline"
 msgid "Offline"
 msgstr ""
 msgstr ""
 
 
-#: src/views/nginx_log/components/IndexingSettingsModal.vue:201
+#: src/views/nginx_log/components/IndexingSettingsModal.vue:209
 msgid "Offline GeoIP analysis"
 msgid "Offline GeoIP analysis"
 msgstr ""
 msgstr ""
 
 
@@ -4280,7 +4288,7 @@ msgstr ""
 msgid "Open"
 msgid "Open"
 msgstr ""
 msgstr ""
 
 
-#: src/views/nginx_log/components/IndexingSettingsModal.vue:238
+#: src/views/nginx_log/components/IndexingSettingsModal.vue:246
 msgid "Open Source Limitation"
 msgid "Open Source Limitation"
 msgstr ""
 msgstr ""
 
 
@@ -4800,7 +4808,7 @@ msgstr ""
 msgid "Reads"
 msgid "Reads"
 msgstr ""
 msgstr ""
 
 
-#: src/views/nginx_log/components/IndexingSettingsModal.vue:197
+#: src/views/nginx_log/components/IndexingSettingsModal.vue:205
 msgid "Real-time analytics dashboard"
 msgid "Real-time analytics dashboard"
 msgstr ""
 msgstr ""
 
 
@@ -6734,7 +6742,7 @@ msgstr ""
 msgid "Warning: This appears to be a private IP address. Public CAs like Let's Encrypt cannot issue certificates for private IPs. Use a public IP address or consider using a private CA."
 msgid "Warning: This appears to be a private IP address. Public CAs like Let's Encrypt cannot issue certificates for private IPs. Use a public IP address or consider using a private CA."
 msgstr ""
 msgstr ""
 
 
-#: src/views/nginx_log/components/IndexingSettingsModal.vue:251
+#: src/views/nginx_log/components/IndexingSettingsModal.vue:259
 msgid "We do not accept any feature requests"
 msgid "We do not accept any feature requests"
 msgstr ""
 msgstr ""
 
 
@@ -6901,6 +6909,6 @@ msgstr ""
 msgid "Your passkeys"
 msgid "Your passkeys"
 msgstr ""
 msgstr ""
 
 
-#: src/views/nginx_log/components/IndexingSettingsModal.vue:185
+#: src/views/nginx_log/components/IndexingSettingsModal.vue:193
 msgid "Zero-allocation pipeline"
 msgid "Zero-allocation pipeline"
 msgstr ""
 msgstr ""

文件差异内容过多而无法显示
+ 195 - 206
app/src/language/pt_PT/app.po


文件差异内容过多而无法显示
+ 198 - 201
app/src/language/ru_RU/app.po


文件差异内容过多而无法显示
+ 199 - 208
app/src/language/tr_TR/app.po


文件差异内容过多而无法显示
+ 211 - 213
app/src/language/uk_UA/app.po


文件差异内容过多而无法显示
+ 213 - 213
app/src/language/vi_VN/app.po


文件差异内容过多而无法显示
+ 178 - 240
app/src/language/zh_CN/app.po


文件差异内容过多而无法显示
+ 184 - 246
app/src/language/zh_TW/app.po


+ 8 - 0
app/src/views/nginx_log/components/IndexingSettingsModal.vue

@@ -134,6 +134,14 @@ function handleCancel() {
             </AListItem>
             </AListItem>
           </template>
           </template>
         </AList>
         </AList>
+
+        <!-- Subtle note about Bleve index storage location -->
+        <div class="mt-2">
+          <ATypographyText type="secondary" class="text-xs">
+            {{ $gettext('* Index files are stored in the "log-index" directory within your Nginx UI config path by default.') }}
+            {{ $gettext('If you want to change the storage location, you can set the `IndexPath` of `nginx_log` section in the Nginx UI config.') }}
+          </ATypographyText>
+        </div>
       </div>
       </div>
 
 
       <ADivider />
       <ADivider />

+ 1 - 0
app/src/views/preference/store/index.ts

@@ -69,6 +69,7 @@ const useSystemSettingsStore = defineStore('systemSettings', () => {
     },
     },
     nginx_log: {
     nginx_log: {
       advanced_indexing_enabled: false,
       advanced_indexing_enabled: false,
+      index_path: '',
     },
     },
     node: {
     node: {
       name: '',
       name: '',

+ 25 - 9
docs/guide/config-nginx-log.md

@@ -13,19 +13,34 @@ This section covers configuration options for Nginx log processing and analysis
 
 
 This option enables advanced indexing for Nginx logs, which provides high-performance log search and analysis capabilities.
 This option enables advanced indexing for Nginx logs, which provides high-performance log search and analysis capabilities.
 
 
-### System Requirements
+#### Behavior When Disabled (Basic Mode)
 
 
-#### Minimum Requirements
+When `AdvancedIndexingEnabled` is set to `false`, Nginx UI still discovers log entries from your Nginx configuration and shows them in the Logs list. In this basic mode:
+
+- You can view the list of detected log files (grouped by simple rotation patterns), but advanced features like indexing metrics, document counts, and search shards are not available.
+- Real-time viewing (tail) continues to work based on resolved access/error log paths.
+
+### IndexPath
+
+- Type: `string`
+- Version: `>= v2.2.0`
+
+- By default, Bleve index files are stored in the `log-index` directory located under your Nginx UI config directory (for example, `/usr/local/nginx-ui/log-index`).
+- If the config directory cannot be determined, the fallback path is `./log-index` relative to the application.
+
+## System Requirements
+
+### Minimum Requirements
 - **CPU**: 1 core minimum
 - **CPU**: 1 core minimum
 - **Memory**: 2GB RAM minimum
 - **Memory**: 2GB RAM minimum
 - **Storage**: At least 20GB available disk space
 - **Storage**: At least 20GB available disk space
 
 
-#### Recommended Configuration
+### Recommended Configuration
 - **CPU**: 2+ cores recommended
 - **CPU**: 2+ cores recommended
 - **Memory**: 4GB+ RAM recommended
 - **Memory**: 4GB+ RAM recommended
 - **Storage**: SSD storage for better I/O performance
 - **Storage**: SSD storage for better I/O performance
 
 
-### Performance Metrics
+## Performance Metrics
 
 
 Based on production validation and comprehensive testing (M2 Pro 12 cores, September 2025):
 Based on production validation and comprehensive testing (M2 Pro 12 cores, September 2025):
 
 
@@ -38,23 +53,23 @@ Based on production validation and comprehensive testing (M2 Pro 12 cores, Septe
 | **Adaptive Scaling** | **12→36 workers** | Dynamic resource optimization |
 | **Adaptive Scaling** | **12→36 workers** | Dynamic resource optimization |
 | **Batch Optimization** | **1000→6000** | Real-time throughput tuning |
 | **Batch Optimization** | **1000→6000** | Real-time throughput tuning |
 
 
-### Features
+## Features
 
 
 When advanced indexing is enabled, you get access to the following features:
 When advanced indexing is enabled, you get access to the following features:
 
 
-#### Core Capabilities
+### Core Capabilities
 - **Zero-allocation pipeline** - Optimized memory usage for high-performance processing
 - **Zero-allocation pipeline** - Optimized memory usage for high-performance processing
 - **Dynamic shard management** - Intelligent distribution of log data across shards
 - **Dynamic shard management** - Intelligent distribution of log data across shards
 - **Incremental index scanning** - Only indexes new log entries for efficiency
 - **Incremental index scanning** - Only indexes new log entries for efficiency
 - **Automated log rotation detection** - Seamlessly handles rotated log files
 - **Automated log rotation detection** - Seamlessly handles rotated log files
 
 
-#### Search & Analysis
+### Search & Analysis
 - **Advanced search & filtering** - Complex queries with multiple criteria
 - **Advanced search & filtering** - Complex queries with multiple criteria
 - **Full-text search with regex support** - Powerful pattern matching capabilities
 - **Full-text search with regex support** - Powerful pattern matching capabilities
 - **Cross-file timeline correlation** - Analyze events across multiple log files
 - **Cross-file timeline correlation** - Analyze events across multiple log files
 - **Error pattern recognition** - Automatic detection of error patterns
 - **Error pattern recognition** - Automatic detection of error patterns
 
 
-#### Data Processing
+### Data Processing
 - **Compressed log file support** - Works with gzipped and other compressed formats
 - **Compressed log file support** - Works with gzipped and other compressed formats
 - **Offline GeoIP analysis** - Location-based analytics without external services
 - **Offline GeoIP analysis** - Location-based analytics without external services
 - **Real-time analytics dashboard** - Live monitoring and statistics
 - **Real-time analytics dashboard** - Live monitoring and statistics
@@ -74,4 +89,5 @@ Advanced indexing delivers enterprise-grade performance with **~10,000 records/s
 
 
 ::: warning Initial Indexing
 ::: warning Initial Indexing
 When you enable advanced indexing, the system will immediately start indexing existing log files. This initial indexing process may temporarily impact system performance.
 When you enable advanced indexing, the system will immediately start indexing existing log files. This initial indexing process may temporarily impact system performance.
-:::
+:::
+

+ 1 - 0
docs/guide/env.md

@@ -93,6 +93,7 @@ Applicable for version v2.0.0-beta.37 and above.
 | Configuration Setting  | Environment Variable                   |
 | Configuration Setting  | Environment Variable                   |
 |------------------------|---------------------------------------|
 |------------------------|---------------------------------------|
 | AdvancedIndexingEnabled | NGINX_UI_NGINX_LOG_ADVANCED_INDEXING_ENABLED |
 | AdvancedIndexingEnabled | NGINX_UI_NGINX_LOG_ADVANCED_INDEXING_ENABLED |
+| IndexPath               | NGINX_UI_NGINX_LOG_INDEX_PATH                |
 
 
 ## Node
 ## Node
 | Configuration Setting | Environment Variable            |
 | Configuration Setting | Environment Variable            |

+ 25 - 9
docs/zh_CN/guide/config-nginx-log.md

@@ -13,19 +13,34 @@
 
 
 此选项启用 Nginx 日志的高级索引功能,提供高性能的日志搜索和分析能力。
 此选项启用 Nginx 日志的高级索引功能,提供高性能的日志搜索和分析能力。
 
 
-### 系统要求
+#### 关闭时的行为(基础模式)
 
 
-#### 最低要求
+当 `AdvancedIndexingEnabled` 为 `false` 时,Nginx UI 仍会从 Nginx 配置中发现日志入口,并在日志列表中展示。在基础模式下:
+
+- 可以查看已检测到的日志文件列表(基于简单的轮转规则进行分组),但不提供索引指标、文档计数和分片搜索等高级功能。
+- 基于解析到的访问/错误日志路径,实时查看(tail)仍可使用。
+
+### IndexPath
+
+- 类型:`string`
+- 版本:`>= v2.2.0`
+
+- 默认情况下,Bleve 索引文件存放在 Nginx UI 配置目录下的 `log-index` 目录(例如:`/usr/local/nginx-ui/log-index`)。
+- 如果无法确定配置目录,回退路径为应用相对路径的 `./log-index`。
+
+## 系统要求
+
+### 最低要求
 - **CPU**: 最少 1 核心
 - **CPU**: 最少 1 核心
 - **内存**: 最少 2GB RAM
 - **内存**: 最少 2GB RAM
 - **存储**: 至少 20GB 可用磁盘空间
 - **存储**: 至少 20GB 可用磁盘空间
 
 
-#### 推荐配置
+### 推荐配置
 - **CPU**: 建议 2 核心或以上
 - **CPU**: 建议 2 核心或以上
 - **内存**: 建议 4GB RAM 或以上
 - **内存**: 建议 4GB RAM 或以上
 - **存储**: 建议使用 SSD 以获得更好的 I/O 性能
 - **存储**: 建议使用 SSD 以获得更好的 I/O 性能
 
 
-### 性能指标
+## 性能指标
 
 
 基于生产环境验证和全面测试(M2 Pro 12核心,2025年9月):
 基于生产环境验证和全面测试(M2 Pro 12核心,2025年9月):
 
 
@@ -38,23 +53,23 @@
 | **自适应扩展** | **12→36 工作线程** | 动态资源优化 |
 | **自适应扩展** | **12→36 工作线程** | 动态资源优化 |
 | **批处理优化** | **1000→6000** | 实时吞吐量调优 |
 | **批处理优化** | **1000→6000** | 实时吞吐量调优 |
 
 
-### 功能特性
+## 功能特性
 
 
 启用高级索引后,您将获得以下功能:
 启用高级索引后,您将获得以下功能:
 
 
-#### 核心能力
+### 核心能力
 - **零分配管道** - 优化内存使用以实现高性能处理
 - **零分配管道** - 优化内存使用以实现高性能处理
 - **动态分片管理** - 智能分布日志数据到各个分片
 - **动态分片管理** - 智能分布日志数据到各个分片
 - **增量索引扫描** - 仅索引新的日志条目以提高效率
 - **增量索引扫描** - 仅索引新的日志条目以提高效率
 - **自动日志轮转检测** - 无缝处理轮转的日志文件
 - **自动日志轮转检测** - 无缝处理轮转的日志文件
 
 
-#### 搜索与分析
+### 搜索与分析
 - **高级搜索和过滤** - 支持多条件的复杂查询
 - **高级搜索和过滤** - 支持多条件的复杂查询
 - **支持正则表达式的全文搜索** - 强大的模式匹配能力
 - **支持正则表达式的全文搜索** - 强大的模式匹配能力
 - **跨文件时间线关联** - 分析多个日志文件中的事件
 - **跨文件时间线关联** - 分析多个日志文件中的事件
 - **错误模式识别** - 自动检测错误模式
 - **错误模式识别** - 自动检测错误模式
 
 
-#### 数据处理
+### 数据处理
 - **压缩日志文件支持** - 支持 gzip 和其他压缩格式
 - **压缩日志文件支持** - 支持 gzip 和其他压缩格式
 - **离线 GeoIP 分析** - 无需外部服务的位置分析
 - **离线 GeoIP 分析** - 无需外部服务的位置分析
 - **实时分析仪表板** - 实时监控和统计
 - **实时分析仪表板** - 实时监控和统计
@@ -74,4 +89,5 @@
 
 
 ::: warning 初始索引
 ::: warning 初始索引
 当您启用高级索引时,系统将立即开始索引现有日志文件。此初始索引过程可能会暂时影响系统性能。
 当您启用高级索引时,系统将立即开始索引现有日志文件。此初始索引过程可能会暂时影响系统性能。
-:::
+:::
+

+ 1 - 0
docs/zh_CN/guide/env.md

@@ -104,6 +104,7 @@
 | 配置                     | 环境变量                                       |
 | 配置                     | 环境变量                                       |
 |-------------------------|-----------------------------------------------|
 |-------------------------|-----------------------------------------------|
 | AdvancedIndexingEnabled | NGINX_UI_NGINX_LOG_ADVANCED_INDEXING_ENABLED |
 | AdvancedIndexingEnabled | NGINX_UI_NGINX_LOG_ADVANCED_INDEXING_ENABLED |
+| IndexPath               | NGINX_UI_NGINX_LOG_INDEX_PATH                |
 
 
 ## Node
 ## Node
 
 

+ 25 - 9
docs/zh_TW/guide/config-nginx-log.md

@@ -13,19 +13,35 @@
 
 
 此選項啟用 Nginx 日誌的進階索引功能,提供高效能的日誌搜尋和分析能力。
 此選項啟用 Nginx 日誌的進階索引功能,提供高效能的日誌搜尋和分析能力。
 
 
-### 系統需求
+#### 關閉時的行為(基礎模式)
 
 
-#### 最低需求
+當 `AdvancedIndexingEnabled` 為 `false` 時,Nginx UI 仍會從 Nginx 設定中發現日誌入口,並在日誌列表中顯示。在基礎模式下:
+
+- 可檢視已偵測到的日誌檔列表(基於簡單的輪轉規則進行分組),但不提供索引指標、文件計數與分片搜尋等進階功能。
+- 依據解析出的存取/錯誤日誌路徑,即時檢視(tail)仍可使用。
+
+### IndexPath
+
+- 類型:`string`
+- 版本:`>= v2.2.0`
+
+- 預設情況下,Bleve 索引檔存放於 Nginx UI 設定目錄下的 `log-index` 目錄(例如:`/usr/local/nginx-ui/log-index`)。
+- 若無法判定設定目錄,則回退至應用相對路徑的 `./log-index`。
+
+
+## 系統需求
+
+### 最低需求
 - **CPU**: 最少 1 核心
 - **CPU**: 最少 1 核心
 - **記憶體**: 最少 2GB RAM
 - **記憶體**: 最少 2GB RAM
 - **儲存**: 至少 20GB 可用磁碟空間
 - **儲存**: 至少 20GB 可用磁碟空間
 
 
-#### 建議配置
+### 建議配置
 - **CPU**: 建議 2 核心或以上
 - **CPU**: 建議 2 核心或以上
 - **記憶體**: 建議 4GB RAM 或以上
 - **記憶體**: 建議 4GB RAM 或以上
 - **儲存**: 建議使用 SSD 以獲得更好的 I/O 效能
 - **儲存**: 建議使用 SSD 以獲得更好的 I/O 效能
 
 
-### 效能指標
+## 效能指標
 
 
 基於生產環境驗證和全面測試(M2 Pro 12核心,2025年9月):
 基於生產環境驗證和全面測試(M2 Pro 12核心,2025年9月):
 
 
@@ -38,23 +54,23 @@
 | **自適應擴展** | **12→36 工作執行緒** | 動態資源最佳化 |
 | **自適應擴展** | **12→36 工作執行緒** | 動態資源最佳化 |
 | **批次處理最佳化** | **1000→6000** | 即時吞吐量調優 |
 | **批次處理最佳化** | **1000→6000** | 即時吞吐量調優 |
 
 
-### 功能特性
+## 功能特性
 
 
 啟用進階索引後,您將獲得以下功能:
 啟用進階索引後,您將獲得以下功能:
 
 
-#### 核心能力
+### 核心能力
 - **零分配管道** - 最佳化記憶體使用以實現高效能處理
 - **零分配管道** - 最佳化記憶體使用以實現高效能處理
 - **動態分片管理** - 智慧分布日誌資料到各個分片
 - **動態分片管理** - 智慧分布日誌資料到各個分片
 - **增量索引掃描** - 僅索引新的日誌條目以提高效率
 - **增量索引掃描** - 僅索引新的日誌條目以提高效率
 - **自動日誌輪轉偵測** - 無縫處理輪轉的日誌檔案
 - **自動日誌輪轉偵測** - 無縫處理輪轉的日誌檔案
 
 
-#### 搜尋與分析
+### 搜尋與分析
 - **進階搜尋和過濾** - 支援多條件的複雜查詢
 - **進階搜尋和過濾** - 支援多條件的複雜查詢
 - **支援正規表示式的全文搜尋** - 強大的模式比對能力
 - **支援正規表示式的全文搜尋** - 強大的模式比對能力
 - **跨檔案時間線關聯** - 分析多個日誌檔案中的事件
 - **跨檔案時間線關聯** - 分析多個日誌檔案中的事件
 - **錯誤模式識別** - 自動偵測錯誤模式
 - **錯誤模式識別** - 自動偵測錯誤模式
 
 
-#### 資料處理
+### 資料處理
 - **壓縮日誌檔案支援** - 支援 gzip 和其他壓縮格式
 - **壓縮日誌檔案支援** - 支援 gzip 和其他壓縮格式
 - **離線 GeoIP 分析** - 無需外部服務的位置分析
 - **離線 GeoIP 分析** - 無需外部服務的位置分析
 - **即時分析儀表板** - 即時監控和統計
 - **即時分析儀表板** - 即時監控和統計
@@ -74,4 +90,4 @@
 
 
 ::: warning 初始索引
 ::: warning 初始索引
 當您啟用進階索引時,系統將立即開始索引現有日誌檔案。此初始索引過程可能會暫時影響系統效能。
 當您啟用進階索引時,系統將立即開始索引現有日誌檔案。此初始索引過程可能會暫時影響系統效能。
-:::
+:::

+ 1 - 0
docs/zh_TW/guide/env.md

@@ -104,6 +104,7 @@
 | 設定                     | 環境變數                                       |
 | 設定                     | 環境變數                                       |
 |-------------------------|-----------------------------------------------|
 |-------------------------|-----------------------------------------------|
 | AdvancedIndexingEnabled | NGINX_UI_NGINX_LOG_ADVANCED_INDEXING_ENABLED |
 | AdvancedIndexingEnabled | NGINX_UI_NGINX_LOG_ADVANCED_INDEXING_ENABLED |
+| IndexPath               | NGINX_UI_NGINX_LOG_INDEX_PATH                |
 
 
 ## Node
 ## Node
 
 

+ 12 - 0
internal/nginx_log/modern_services.go

@@ -124,6 +124,18 @@ func initializeWithDefaults(ctx context.Context) error {
 
 
 // getConfigDirIndexPath returns the index path relative to the config file directory
 // getConfigDirIndexPath returns the index path relative to the config file directory
 func getConfigDirIndexPath() string {
 func getConfigDirIndexPath() string {
+	// Use custom path if configured
+	if settings.NginxLogSettings.IndexPath != "" {
+		indexPath := settings.NginxLogSettings.IndexPath
+		// Ensure the directory exists
+		if err := os.MkdirAll(indexPath, 0755); err != nil {
+			logger.Warnf("Failed to create custom index directory at %s: %v, using default", indexPath, err)
+		} else {
+			logger.Infof("Using custom index path: %s", indexPath)
+			return indexPath
+		}
+	}
+
 	// Get the config file path from cosy settings
 	// Get the config file path from cosy settings
 	if cSettings.ConfPath != "" {
 	if cSettings.ConfPath != "" {
 		configDir := filepath.Dir(cSettings.ConfPath)
 		configDir := filepath.Dir(cSettings.ConfPath)

+ 2 - 1
router/routers.go

@@ -95,6 +95,7 @@ func InitRouter() {
 			notification.InitRouter(g)
 			notification.InitRouter(g)
 			external_notify.InitRouter(g)
 			external_notify.InitRouter(g)
 			backup.InitAutoBackupRouter(g)
 			backup.InitAutoBackupRouter(g)
+			nginxLog.InitRouter(g)
 		}
 		}
 
 
 		// Authorization required and websocket request
 		// Authorization required and websocket request
@@ -107,7 +108,7 @@ func InitRouter() {
 			{
 			{
 				terminal.InitRouter(o)
 				terminal.InitRouter(o)
 			}
 			}
-			nginxLog.InitRouter(w)
+			nginxLog.InitWebSocketRouter(w)
 			upstream.InitRouter(w)
 			upstream.InitRouter(w)
 			system.InitWebSocketRouter(w)
 			system.InitWebSocketRouter(w)
 			nginx.InitWebSocketRouter(w)
 			nginx.InitWebSocketRouter(w)

+ 2 - 1
settings/nginx_log.go

@@ -1,7 +1,8 @@
 package settings
 package settings
 
 
 type NginxLog struct {
 type NginxLog struct {
-	AdvancedIndexingEnabled bool `json:"advanced_indexing_enabled"`
+	AdvancedIndexingEnabled bool   `json:"advanced_indexing_enabled"`
+	IndexPath               string `json:"index_path"`
 }
 }
 
 
 var NginxLogSettings = &NginxLog{}
 var NginxLogSettings = &NginxLog{}

部分文件因为文件数量过多而无法显示