+ for (var n in obj) { if (obj.hasOwnProperty(n) && obj[n]) { return false } }
+ return true
+ }
+
+ // Extending unicode characters. A series of a non-extending char +
+ // any number of extending chars is treated as a single unit as far
+ // as editing and measuring is concerned. This is not fully correct,
+ // since some scripts/fonts/browsers also treat other configurations
+ // of code points as a group.
+ var extendingChars = /[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/;
+ if (cur.from != cur.to && sticky == "before") { found = i; }
+ else { bidiOther = i; }
+ }
+ if (cur.from == ch) {
+ if (cur.from != cur.to && sticky != "before") { found = i; }
+ else { bidiOther = i; }
+ }
+ }
+ return found != null ? found : bidiOther
+ }
+
+ // Bidirectional ordering algorithm
+ // See http://unicode.org/reports/tr9/tr9-13.html for the algorithm
+ // that this (partially) implements.
+
+ // One-char codes used for character types:
+ // L (L): Left-to-Right
+ // R (R): Right-to-Left
+ // r (AL): Right-to-Left Arabic
+ // 1 (EN): European Number
+ // + (ES): European Number Separator
+ // % (ET): European Number Terminator
+ // n (AN): Arabic Number
+ // , (CS): Common Number Separator
+ // m (NSM): Non-Spacing Mark
+ // b (BN): Boundary Neutral
+ // s (B): Paragraph Separator
+ // t (S): Segment Separator
+ // w (WS): Whitespace
+ // N (ON): Other Neutrals
+
+ // Returns null if characters are ordered as they appear
+ // (left-to-right), or an array of sections ({from, to, level}
+ // objects) in the order in which they occur visually.
+ var bidiOrdering = (function() {
+ // Character types for codepoints 0 to 0xff
+ var lowTypes = "bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN";
+ // Character types for codepoints 0x600 to 0x6f9
+ var arabicTypes = "nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111";
+ function charType(code) {
+ if (code <= 0xf7) { return lowTypes.charAt(code) }
"realityDesc" = "Xray core needs to be 1.8.0 or higher."
"realityDesc" = "Xray core needs to be 1.8.0 or higher."
"telegramDesc" = "use Telegram ID without @ or chat IDs ( you can get it here @userinfobot or use '/id' command in bot )"
"telegramDesc" = "use Telegram ID without @ or chat IDs ( you can get it here @userinfobot or use '/id' command in bot )"
"subscriptionDesc" = "you can find your sub link on Details, also you can use the same name for several configurations"
"subscriptionDesc" = "you can find your sub link on Details, also you can use the same name for several configurations"
+"info" = "Info"
+"same" = "Same"
+"inboundData" = "Inbound's data"
+"copyToClipboard" = "Copy to clipboard"
+"import" = "Import"
+"importInbound" = "Import an inbound"
[pages.client]
[pages.client]
"add" = "Add Client"
"add" = "Add Client"
@@ -185,6 +197,8 @@
"delayedStart" = "Start after first use"
"delayedStart" = "Start after first use"
"expireDays" = "Expire days"
"expireDays" = "Expire days"
"days" = "day(s)"
"days" = "day(s)"
+"renew" = "Auto renew"
+"renewDesc" = "Auto renew days after expiration. 0 = disable"
[pages.inbounds.toasts]
[pages.inbounds.toasts]
"obtain" = "Obtain"
"obtain" = "Obtain"
@@ -216,7 +230,6 @@
"resetDefaultConfig" = "Reset to Default Configuration"
"resetDefaultConfig" = "Reset to Default Configuration"
"panelSettings" = "Panel Settings"
"panelSettings" = "Panel Settings"
"securitySettings" = "Security Settings"
"securitySettings" = "Security Settings"
-"xrayConfiguration" = "Xray Configuration"
"TGBotSettings" = "Telegram Bot Settings"
"TGBotSettings" = "Telegram Bot Settings"
"panelListeningIP" = "Panel Listening IP"
"panelListeningIP" = "Panel Listening IP"
"panelListeningIPDesc" = "Leave blank by default to monitor all IPs."
"panelListeningIPDesc" = "Leave blank by default to monitor all IPs."
@@ -230,6 +243,10 @@
"privateKeyPathDesc" = "Fill in an absolute path starting with."
"privateKeyPathDesc" = "Fill in an absolute path starting with."
"panelUrlPath" = "Panel URL Root Path"
"panelUrlPath" = "Panel URL Root Path"
"panelUrlPathDesc" = "Must start with '/' and end with."
"panelUrlPathDesc" = "Must start with '/' and end with."
+"pageSize" = "Pagination size"
+"pageSizeDesc" = "Define page size for inbounds table. Set 0 to disable"
+"remarkModel" = "Remark Model and Seperation charachter"
+"sampleRemark" = "Sample remark"
"oldUsername" = "Current Username"
"oldUsername" = "Current Username"
"currentPassword" = "Current Password"
"currentPassword" = "Current Password"
"newUsername" = "New Username"
"newUsername" = "New Username"
@@ -276,13 +293,16 @@
"subEncrypt" = "Encrypt configs"
"subEncrypt" = "Encrypt configs"
"subEncryptDesc" = "Encrypt the returned configs in subscription"
"subEncryptDesc" = "Encrypt the returned configs in subscription"
"subShowInfo" = "Show usage info"
"subShowInfo" = "Show usage info"
-"subShowInfoDesc" = "Show remianed traffic and date after config name"
+"subShowInfoDesc" = "Show remained traffic and date after config name"
+"subURI" = "Reverse Proxy URI"
+"subURIDesc" = "Change base URI of subscription URL for using on behind of proxies"
-[pages.settings.templates]
-"title" = "Templates"
+[pages.xray]
+"title" = "Xray Settings"
+"save" = "Save Settings"
+"restart" = "Restart Xray"
"basicTemplate" = "Basic Template"
"basicTemplate" = "Basic Template"
"advancedTemplate" = "Advanced Template"
"advancedTemplate" = "Advanced Template"
-"completeTemplate" = "Complete Template"
"generalConfigs" = "General Configs"
"generalConfigs" = "General Configs"
"generalConfigsDesc" = "These options will provide general adjustments."
"generalConfigsDesc" = "These options will provide general adjustments."
"blockConfigs" = "Blocking Configs"
"blockConfigs" = "Blocking Configs"
@@ -355,14 +375,40 @@
"xrayConfigOutboundsDesc" = "Change the configuration template to define outgoing ways for this server."
"xrayConfigOutboundsDesc" = "Change the configuration template to define outgoing ways for this server."
"xrayConfigRoutings" = "Configuration of routing rules."
"xrayConfigRoutings" = "Configuration of routing rules."
"xrayConfigRoutingsDesc" = "Change the configuration template to define routing rules for this server."
"xrayConfigRoutingsDesc" = "Change the configuration template to define routing rules for this server."
-"manualLists" = "Manual Lists"
-"manualListsDesc" = "Please use the JSON array format."
-"manualBlockedIPs" = "List of Blocked IPs"
-"manualBlockedDomains" = "List of Blocked Domains"
-"manualDirectIPs" = "List of Direct IPs"
-"manualDirectDomains" = "List of Direct Domains"
-"manualIPv4Domains" = "List of IPv4 Domains"
-"manualWARPDomains" = "List of WARP Domains"
+"completeTemplate" = "All"
+"Inbounds" = "Inbounds"
+"Outbounds" = "Outbounds"
+"Routings" = "Routing rules"
+"RoutingsDesc" = "The priority of each rule is important!"
+
+[pages.xray.rules]
+"first" = "First"
+"last" = "Last"
+"up" = "Up"
+"down" = "Down"
+"source" = "Source"
+"dest" = "Destination"
+"inbound" = "Inbound"
+"outbound" = "Outbound"
+"info" = "Info"
+"add" = "Add Rule"
+"edit" = "Edit Rule"
+"useComma" = "Comma separated items"
+
+[pages.xray.outbound]
+"addOutbound" = "Add outbound"
+"addReverse" = "Add reverse"
+"editOutbound" = "Edit outbound"
+"editReverse" = "Edit reverse"
+"tag" = "Tag"
+"tagDesc" = "Unique tag"
+"address" = "Address"
+"reverse" = "Reverse"
+"domain" = "Domain"
+"type" = "Type"
+"bridge" = "Bridge"
+"portal" = "Portal"
+"intercon" = "Interconnection"
[pages.settings.security]
[pages.settings.security]
"admin" = "Admin"
"admin" = "Admin"
@@ -406,7 +452,7 @@
"usage" = "❗ Please provide a text to search!"
"usage" = "❗ Please provide a text to search!"
"getID" = "🆔 Your ID: <code>{{ .ID }}</code>"
"getID" = "🆔 Your ID: <code>{{ .ID }}</code>"
"helpAdminCommands" = "Search for a client email:\r\n<code>/usage [Email]</code>\r\n \r\nSearch for inbounds (with client stats):\r\n<code>/inbound [Remark]</code>"
"helpAdminCommands" = "Search for a client email:\r\n<code>/usage [Email]</code>\r\n \r\nSearch for inbounds (with client stats):\r\n<code>/inbound [Remark]</code>"
-"helpClientCommands" = "To search for statistics, just use folowing command:\r\n \r\n<code>/usage [UUID|Password]</code>\r\n \r\nUse UUID for vmess/vless and Password for Trojan."
+"helpClientCommands" = "To search for statistics, just use the following command:\r\n \r\n<code>/usage [UUID|Password]</code>\r\n \r\nUse UUID for vmess/vless and Password for Trojan."
[tgbot.messages]
[tgbot.messages]
"cpuThreshold" = "🔴 The CPU usage {{ .Percent }}% is more than threshold {{ .Threshold }}%"
"cpuThreshold" = "🔴 The CPU usage {{ .Percent }}% is more than threshold {{ .Threshold }}%"
"deleteInboundContent" = "آیا مطمئن به حذف سرویس هستید ؟"
"deleteInboundContent" = "آیا مطمئن به حذف سرویس هستید ؟"
+"deleteClient" = "حذف کاربر"
+"deleteClientContent" = "آیا مطمئن به حذف کاربر هستید ؟"
"resetTrafficContent" = "آیا مطمئن به ریست ترافیک هستید ؟"
"resetTrafficContent" = "آیا مطمئن به ریست ترافیک هستید ؟"
"copyLink" = "کپی لینک"
"copyLink" = "کپی لینک"
"address" = "آدرس"
"address" = "آدرس"
@@ -169,6 +175,12 @@
"realityDesc" = "هسته Xray باید 1.8.0 و بالاتر باشد"
"realityDesc" = "هسته Xray باید 1.8.0 و بالاتر باشد"
"telegramDesc" = "از آیدی تلگرام بدون @ یا آیدی چت استفاده کنید (می توانید آن را از اینجا دریافت کنید @userinfobot یا در ربات دستور '/id' را وارد کنید)"
"telegramDesc" = "از آیدی تلگرام بدون @ یا آیدی چت استفاده کنید (می توانید آن را از اینجا دریافت کنید @userinfobot یا در ربات دستور '/id' را وارد کنید)"
"subscriptionDesc" = "می توانید ساب لینک خود را در جزئیات پیدا کنید، همچنین می توانید از همین نام برای چندین کانفیگ استفاده کنید"
"subscriptionDesc" = "می توانید ساب لینک خود را در جزئیات پیدا کنید، همچنین می توانید از همین نام برای چندین کانفیگ استفاده کنید"
+"info" = "اطلاعات"
+"same" = "همسان"
+"inboundData" = "دادههای سرویس"
+"copyToClipboard" = "کپی در حافظه"
+"import" = "وارد کردن"
+"importInbound" = "وارد کردن یک سرویس"
[pages.client]
[pages.client]
"add" = "کاربر جدید"
"add" = "کاربر جدید"
@@ -185,6 +197,8 @@
"delayedStart" = "شروع بعد از اولین استفاده"
"delayedStart" = "شروع بعد از اولین استفاده"
"expireDays" = "روزهای اعتبار"
"expireDays" = "روزهای اعتبار"
"days" = "(روز)"
"days" = "(روز)"
+"renew" = "تمدید خودکار"
+"renewDesc" = "روزهای تمدید خودکار پس از انقضا. 0 = غیرفعال"
[pages.inbounds.toasts]
[pages.inbounds.toasts]
"obtain" = "Obtain"
"obtain" = "Obtain"
@@ -216,7 +230,6 @@
"resetDefaultConfig" = "برگشت به تنظیمات پیشفرض"
"resetDefaultConfig" = "برگشت به تنظیمات پیشفرض"
"panelSettings" = "تنظیمات پنل"
"panelSettings" = "تنظیمات پنل"
"securitySettings" = "تنظیمات امنیتی"
"securitySettings" = "تنظیمات امنیتی"
-"xrayConfiguration" = "تنظیمات Xray"
"TGBotSettings" = "تنظیمات ربات تلگرام"
"TGBotSettings" = "تنظیمات ربات تلگرام"
"panelListeningIP" = "محدودیت آی پی پنل"
"panelListeningIP" = "محدودیت آی پی پنل"
"panelListeningIPDesc" = "برای استفاده از تمام آیپیها به طور پیش فرض خالی بگذارید"
"panelListeningIPDesc" = "برای استفاده از تمام آیپیها به طور پیش فرض خالی بگذارید"
@@ -230,6 +243,10 @@
"privateKeyPathDesc" = "باید یک مسیر مطلق باشد که با / شروع می شود "
"privateKeyPathDesc" = "باید یک مسیر مطلق باشد که با / شروع می شود "
"panelUrlPath" = "آدرس روت پنل"
"panelUrlPath" = "آدرس روت پنل"
"panelUrlPathDesc" = "باید با '/' شروع شود و با '/' تمام شود"
"panelUrlPathDesc" = "باید با '/' شروع شود و با '/' تمام شود"
+"pageSize" = "اندازه صفحه بندی جدول"
+"pageSizeDesc" = "اندازه صفحه را برای جدول سرویس ها تعریف کنید. 0: غیرفعال"
"realityDesc" = "Версия Xray должна быть не ниже 1.8.0"
"realityDesc" = "Версия Xray должна быть не ниже 1.8.0"
"telegramDesc" = "Используйте идентификатор Telegram без символа @ или идентификатора чата (можно получить его здесь @userinfobot или использовать команду '/id' в боте)"
"telegramDesc" = "Используйте идентификатор Telegram без символа @ или идентификатора чата (можно получить его здесь @userinfobot или использовать команду '/id' в боте)"
"subscriptionDesc" = "Вы можете найти свою ссылку подписки в разделе 'Подробнее', также вы можете использовать одно и то же имя для нескольких конфигураций"
"subscriptionDesc" = "Вы можете найти свою ссылку подписки в разделе 'Подробнее', также вы можете использовать одно и то же имя для нескольких конфигураций"
"deleteInboundContent" = "Xác nhận xóa điểm vào? (Inbound)"
"deleteInboundContent" = "Xác nhận xóa điểm vào? (Inbound)"
+"deleteClient" = "Xóa khách hàng"
+"deleteClientContent" = "Bạn có chắc chắn muốn xóa ứng dụng khách không?"
"resetTrafficContent" = "Xác nhận đặt lại lưu lượng?"
"resetTrafficContent" = "Xác nhận đặt lại lưu lượng?"
"copyLink" = "Sao chép liên kết"
"copyLink" = "Sao chép liên kết"
"address" = "Địa chỉ"
"address" = "Địa chỉ"
@@ -132,8 +138,8 @@
"totalFlow" = "Tổng lưu lượng"
"totalFlow" = "Tổng lưu lượng"
"leaveBlankToNeverExpire" = "Để trống để không bao giờ hết hạn"
"leaveBlankToNeverExpire" = "Để trống để không bao giờ hết hạn"
"noRecommendKeepDefault" = "Không yêu cầu đặc biệt để giữ nguyên cài đặt mặc định"
"noRecommendKeepDefault" = "Không yêu cầu đặc biệt để giữ nguyên cài đặt mặc định"
-"certificatePath" = "Đường dẫn tập tin chứng chỉ"
-"certificateContent" = "Nội dung tập tin chứng chỉ"
+"certificatePath" = "Đường dẫn tập"
+"certificateContent" = "Nội dung tập"
"publicKeyPath" = "Đường dẫn khóa công khai"
"publicKeyPath" = "Đường dẫn khóa công khai"
"publicKeyContent" = "Nội dung khóa công khai"
"publicKeyContent" = "Nội dung khóa công khai"
"keyPath" = "Đường dẫn khóa riêng tư"
"keyPath" = "Đường dẫn khóa riêng tư"
@@ -169,6 +175,12 @@
"realityDesc" = "Xray core cần phiên bản 1.8.0 hoặc cao hơn."
"realityDesc" = "Xray core cần phiên bản 1.8.0 hoặc cao hơn."
"telegramDesc" = "Sử dụng Telegram ID mà không cần ký hiệu @ hoặc chat IDs (bạn có thể nhận được nó ở đây @userinfobot hoặc sử dụng lệnh '/id' trong bot)"
"telegramDesc" = "Sử dụng Telegram ID mà không cần ký hiệu @ hoặc chat IDs (bạn có thể nhận được nó ở đây @userinfobot hoặc sử dụng lệnh '/id' trong bot)"
"subscriptionDesc" = "Bạn có thể tìm liên kết đăng ký của mình trong Chi tiết, cũng như bạn có thể sử dụng cùng tên cho nhiều cấu hình khác nhau"
"subscriptionDesc" = "Bạn có thể tìm liên kết đăng ký của mình trong Chi tiết, cũng như bạn có thể sử dụng cùng tên cho nhiều cấu hình khác nhau"
+"info" = "Thông tin"
+"same" = "Giống nhau"
+"inboundData" = "Dữ liệu gửi đến"
+"copyToClipboard" = "Sao chép vào bảng nhớ tạm"
+"import" = "Nhập"
+"importInbound" = "Nhập hàng gửi về"
[pages.client]
[pages.client]
"add" = "Thêm Client"
"add" = "Thêm Client"
@@ -185,6 +197,8 @@
"delayedStart" = "Bắt đầu sau khi sử dụng lần đầu"
"delayedStart" = "Bắt đầu sau khi sử dụng lần đầu"
"expireDays" = "Số ngày hết hạn"
"expireDays" = "Số ngày hết hạn"
"days" = "ngày"
"days" = "ngày"
+"renew" = "Tự động gia hạn"
+"renewDesc" = "Tự động gia hạn những ngày sau khi hết hạn. 0 = tắt"
[pages.inbounds.toasts]
[pages.inbounds.toasts]
"obtain" = "Nhận"
"obtain" = "Nhận"
@@ -216,7 +230,6 @@
"resetDefaultConfig" = "Đặt lại Cấu hình Mặc định"
"resetDefaultConfig" = "Đặt lại Cấu hình Mặc định"
"panelSettings" = "Cài đặt Bảng điều khiển"
"panelSettings" = "Cài đặt Bảng điều khiển"
"securitySettings" = "Cài đặt Bảo mật"
"securitySettings" = "Cài đặt Bảo mật"
-"xrayConfiguration" = "Cấu hình Xray"
"TGBotSettings" = "Cài đặt Bot Telegram"
"TGBotSettings" = "Cài đặt Bot Telegram"
"panelListeningIP" = "IP Nghe của Bảng điều khiển"
"panelListeningIP" = "IP Nghe của Bảng điều khiển"
"panelListeningIPDesc" = "Mặc định để trống để nghe tất cả các IP."
"panelListeningIPDesc" = "Mặc định để trống để nghe tất cả các IP."
@@ -230,6 +243,10 @@
"privateKeyPathDesc" = "Điền vào đường dẫn tuyệt đối bắt đầu với."
"privateKeyPathDesc" = "Điền vào đường dẫn tuyệt đối bắt đầu với."
"panelUrlPath" = "Đường dẫn gốc URL Bảng điều khiển"
"panelUrlPath" = "Đường dẫn gốc URL Bảng điều khiển"
"panelUrlPathDesc" = "Phải bắt đầu bằng '/' và kết thúc bằng."
"panelUrlPathDesc" = "Phải bắt đầu bằng '/' và kết thúc bằng."
+"pageSize" = "Kích thước phân trang"
+"pageSizeDesc" = "Xác định kích thước trang cho bảng gửi đến. Đặt 0 để tắt"
+"remarkModel" = "Ghi chú mô hình và ký tự phân tách"
+"sampleRemark" = "Nhận xét mẫu"
"oldUsername" = "Tên người dùng hiện tại"
"oldUsername" = "Tên người dùng hiện tại"
"currentPassword" = "Mật khẩu hiện tại"
"currentPassword" = "Mật khẩu hiện tại"
"newUsername" = "Tên người dùng mới"
"newUsername" = "Tên người dùng mới"
@@ -277,12 +294,15 @@
"subEncryptDesc" = "Mã hóa các cấu hình được trả về trong đăng ký"
"subEncryptDesc" = "Mã hóa các cấu hình được trả về trong đăng ký"
"subShowInfo" = "Hiển thị thông tin sử dụng"
"subShowInfo" = "Hiển thị thông tin sử dụng"
"subShowInfoDesc" = "Hiển thị lưu lượng truy cập còn lại và ngày sau tên cấu hình"
"subShowInfoDesc" = "Hiển thị lưu lượng truy cập còn lại và ngày sau tên cấu hình"
+"subURI" = "URI proxy ngược"
+"subURIDesc" = "Thay đổi URI cơ sở của URL đăng ký để sử dụng ở phía sau proxy"
-[pages.settings.templates]
-"title" = "Mẫu"
+[pages.xray]
+"title" = "Xray Cài đặt"
+"save" = "Lưu cài đặt"
+"restart" = "Khởi động lại Xray"
"basicTemplate" = "Mẫu Cơ bản"
"basicTemplate" = "Mẫu Cơ bản"
"advancedTemplate" = "Mẫu Nâng cao"
"advancedTemplate" = "Mẫu Nâng cao"
-"completeTemplate" = "Mẫu Đầy đủ"
"generalConfigs" = "Cấu hình Chung"
"generalConfigs" = "Cấu hình Chung"
"generalConfigsDesc" = "Những tùy chọn này sẽ cung cấp điều chỉnh tổng quát."
"generalConfigsDesc" = "Những tùy chọn này sẽ cung cấp điều chỉnh tổng quát."
"blockConfigs" = "Cấu hình Chặn"
"blockConfigs" = "Cấu hình Chặn"
@@ -355,14 +375,40 @@
"xrayConfigOutboundsDesc" = "Thay đổi mẫu cấu hình để xác định các cách ra đi cho máy chủ này."
"xrayConfigOutboundsDesc" = "Thay đổi mẫu cấu hình để xác định các cách ra đi cho máy chủ này."
"xrayConfigRoutings" = "Cấu hình của Luật Định tuyến."
"xrayConfigRoutings" = "Cấu hình của Luật Định tuyến."
"xrayConfigRoutingsDesc" = "Thay đổi mẫu cấu hình để xác định luật định tuyến cho máy chủ này."
"xrayConfigRoutingsDesc" = "Thay đổi mẫu cấu hình để xác định luật định tuyến cho máy chủ này."
-"manualLists" = "Danh sách Thủ công"
-"manualListsDesc" = "Vui lòng sử dụng định dạng mảng JSON."
-"manualBlockedIPs" = "Danh sách IP bị Chặn"
-"manualBlockedDomains" = "Danh sách Tên miền bị Chặn"
-"manualDirectIPs" = "Danh sách IP Trực tiếp"
-"manualDirectDomains" = "Danh sách Tên miền Trực tiếp"
-"manualIPv4Domains" = "Danh sách Tên miền IPv4"
-"manualWARPDomains" = "Danh sách Tên miền WARP"
+"completeTemplate" = "All"
+"Inbounds" = "Vào"
+"Outbounds" = "Outbounds"
+"Routings" = "Quy tắc định tuyến"
+"RoutingsDesc" = "Mức độ ưu tiên của mỗi quy tắc đều quan trọng!"
+
+[pages.xray.rules]
+"first" = "Đầu tiên"
+"last" = "Cuối cùng"
+"up" = "Lên"
+"down" = "Xuống"
+"source" = "Nguồn"
+"dest" = "Đích"
+"inbound" = "Vào"
+"outbound" = "Ra ngoài"
+"info" = "Thông tin"
+"add" = "Thêm quy tắc"
+"edit" = "Chỉnh sửa quy tắc"
+"useComma" = "Các mục được phân tách bằng dấu phẩy"