From a75c617b092ae69051d113d43366ee64c4be65b5 Mon Sep 17 00:00:00 2001
From: "transifex-integration[bot]"
<43880903+transifex-integration[bot]@users.noreply.github.com>
Date: Mon, 19 Oct 2026 15:44:32 +0000
Subject: [PATCH 1/9] [i18n] Translate messages.json in ar
100% reviewed source file: 'messages.json'
on 'ar'.
---
public/_locales/ar/messages.json | 474 +++++++++++++++++++++++++++++++
1 file changed, 474 insertions(+)
create mode 100644 public/_locales/ar/messages.json
diff --git a/public/_locales/ar/messages.json b/public/_locales/ar/messages.json
new file mode 100644
index 0000000..8e61c9f
--- /dev/null
+++ b/public/_locales/ar/messages.json
@@ -0,0 +1,474 @@
+{
+ "app_desc": {
+ "message": "أداة تساعدك على إدارة ملفات تعريف الوكيل والتبديل بينها"
+ },
+
+ "nav_preference": {
+ "message": "التفضيلات"
+ },
+ "nav_config": {
+ "message": "الإعدادات"
+ },
+ "nav_custom_profiles": {
+ "message": "ملفات التعريف المخصصة"
+ },
+ "nav_system_profiles": {
+ "message": "الإعدادات المسبقة"
+ },
+
+ "theme_light_mode": {
+ "message": "الوضع الفاتح"
+ },
+ "theme_dark_mode": {
+ "message": "الوضع الداكن"
+ },
+ "theme_auto_mode": {
+ "message": "اتباع النظام"
+ },
+
+ "mode_auto_switch": {
+ "message": "التبديل التلقائي"
+ },
+ "mode_auto_switch_abbr": {
+ "message": "تلقائي"
+ },
+
+ "mode_auto_switch_via": {
+ "message": "يتصل هذا الموقع عبر"
+ },
+ "mode_auto_switch_uncertain": {
+ "message": "هذا هو الاحتمال الأرجح. قد يختلف الوكيل الفعلي، إذ لا يمكن التحقق من القواعد المستندة إلى عناوين IP عند استخدام أسماء المضيفين."
+ },
+ "mode_auto_switch_scope_host": {
+ "message": "هذا الموقع"
+ },
+ "mode_auto_switch_rule_saved": {
+ "message": "تم حفظ القاعدة لـ $1"
+ },
+ "action_reload_tab": {
+ "message": "إعادة تحميل علامة التبويب"
+ },
+
+ "stats_failed_resources": {
+ "message": "عدد الموارد التي تعذّر تحميلها: $1"
+ },
+ "stats_details": {
+ "message": "التفاصيل"
+ },
+
+ "resources_title": {
+ "message": "الموارد"
+ },
+ "resources_filter_all": {
+ "message": "الكل"
+ },
+ "resources_filter_failed": {
+ "message": "فشل التحميل"
+ },
+ "resources_empty": {
+ "message": "لم يتم تسجيل أي موارد. أعد تحميل الصفحة لتسجيلها."
+ },
+ "resource_type_main": {
+ "message": "رئيسي"
+ },
+ "resource_type_iframe": {
+ "message": "iframe"
+ },
+ "resource_type_stylesheet": {
+ "message": "css"
+ },
+ "resource_type_script": {
+ "message": "نص برمجي"
+ },
+ "resource_type_image": {
+ "message": "صورة"
+ },
+ "resource_type_font": {
+ "message": "خط"
+ },
+ "resource_type_xhr": {
+ "message": "xhr"
+ },
+ "resource_type_media": {
+ "message": "وسائط"
+ },
+ "resource_type_websocket": {
+ "message": "ws"
+ },
+ "resource_type_other": {
+ "message": "أخرى"
+ },
+
+ "mode_direct": {
+ "message": "اتصال مباشر"
+ },
+ "mode_system": {
+ "message": "استخدام وكيل النظام"
+ },
+ "mode_profile_create": {
+ "message": "إنشاء ملف تعريف جديد"
+ },
+
+ "config_proxy_type": {
+ "message": "نوع الوكيل"
+ },
+ "config_proxy_type_proxy": {
+ "message": "وكيل"
+ },
+ "config_proxy_type_pac": {
+ "message": "نص PAC البرمجي"
+ },
+ "config_section_pac_url": {
+ "message": "رابط نص PAC البرمجي"
+ },
+ "config_section_pac_url_placeholder": {
+ "message": "https://example.com/proxy.pac"
+ },
+ "config_section_pac_url_hint": {
+ "message": "اختياري. عند تحديده، يتم تحديث محتوى النص البرمجي دوريًا في الخلفية."
+ },
+ "config_action_pac_fetch": {
+ "message": "جلب الآن"
+ },
+ "config_feedback_pac_fetched": {
+ "message": "تم جلب نص PAC البرمجي بنجاح."
+ },
+ "config_feedback_pac_fetch_failed": {
+ "message": "تعذّر جلب نص PAC البرمجي: $1"
+ },
+ "config_pac_last_fetched": {
+ "message": "آخر عملية جلب: $1"
+ },
+ "config_pac_last_error": {
+ "message": "خطأ آخر عملية جلب: $1"
+ },
+ "config_pac_manual_edit_warning": {
+ "message": "تم تحديد رابط للمصدر. ستُستبدل التعديلات اليدوية عند التحديث التالي."
+ },
+ "config_section_pac_refresh_interval": {
+ "message": "الفاصل الزمني للتحديث"
+ },
+ "config_section_pac_refresh_interval_hint": {
+ "message": "وتيرة إعادة جلب نص PAC البرمجي في الخلفية."
+ },
+ "config_pac_refresh_interval_minutes": {
+ "message": "الفاصل الزمني بالدقائق: $1"
+ },
+ "config_pac_refresh_interval_one_hour": {
+ "message": "كل ساعة"
+ },
+ "config_pac_refresh_interval_hours": {
+ "message": "الفاصل الزمني بالساعات: $1"
+ },
+ "config_pac_refresh_interval_one_day": {
+ "message": "كل يوم"
+ },
+ "config_pac_refresh_interval_disabled": {
+ "message": "معطّل (يدوي فقط)"
+ },
+ "config_proxy_type_auto": {
+ "message": "التبديل التلقائي"
+ },
+ "config_proxy_type_default": {
+ "message": "مثل الافتراضي"
+ },
+ "config_section_proxy_server": {
+ "message": "خادم الوكيل"
+ },
+ "config_section_proxy_server_default": {
+ "message": "الخادم الافتراضي"
+ },
+ "config_section_proxy_server_http": {
+ "message": "HTTP"
+ },
+ "config_section_proxy_server_https": {
+ "message": "HTTPS"
+ },
+ "config_section_proxy_server_ftp": {
+ "message": "FTP"
+ },
+ "config_section_proxy_auth_tips": {
+ "message": "أدخل اسم المستخدم وكلمة المرور إذا كان الوكيل يتطلب المصادقة"
+ },
+ "config_section_proxy_auth_unsupported": {
+ "message": "نوع الوكيل الحالي لا يدعم المصادقة"
+ },
+ "config_section_proxy_auth_title": {
+ "message": "مصادقة الوكيل"
+ },
+ "config_section_proxy_auth_username": {
+ "message": "اسم المستخدم"
+ },
+ "config_section_proxy_auth_password": {
+ "message": "كلمة المرور"
+ },
+
+ "config_section_bypass_list": {
+ "message": "قائمة التجاوز"
+ },
+ "config_section_advance": {
+ "message": "إعدادات متقدمة"
+ },
+ "config_reference_bypass_list": {
+ "message": "معرفة المزيد عن قائمة التجاوز"
+ },
+
+ "config_section_auto_switch_rules": {
+ "message": "قواعد التبديل التلقائي"
+ },
+ "config_section_auto_switch_type": {
+ "message": "نوع الشرط"
+ },
+ "config_section_auto_switch_type_domain": {
+ "message": "النطاق"
+ },
+ "config_section_auto_switch_type_url": {
+ "message": "الرابط"
+ },
+ "config_section_auto_switch_type_url_malformed": {
+ "message": "رابط غير صالح"
+ },
+ "config_section_auto_switch_type_url_malformed_chrome": {
+ "message": "لأسباب أمنية، لا يدعم Chrome مطابقة المسار في روابط HTTPS. للمزيد: https://issues.chromium.org/40083832"
+ },
+ "config_section_auto_switch_type_cidr": {
+ "message": "CIDR"
+ },
+ "config_section_auto_switch_type_cidr_malformed": {
+ "message": "صيغة CIDR غير صالحة. استخدم صيغة مثل `192.168.1.1/24` أو `2001:db8::/32`"
+ },
+ "config_section_auto_switch_type_regex": {
+ "message": "تعبير نمطي للرابط"
+ },
+ "config_section_auto_switch_type_regex_malformed": {
+ "message": "تعبير نمطي غير صالح"
+ },
+ "config_section_auto_switch_help_domain": {
+ "message": "يطابق اسم المضيف باستخدام أحرف البدل: يطابق * أي أحرف (بما فيها النقاط)، ويطابق ? حرفًا واحدًا. يطابق \"example.com\" هذا المضيف فقط؛ أضف \"*.example.com\" لمطابقة نطاقاته الفرعية. لا تشمل المطابقة المنافذ والمسارات."
+ },
+ "config_section_auto_switch_help_url": {
+ "message": "يطابق الرابط بالكامل باستخدام حرفَي البدل (* و?)، مثل \"http://example.com/api/*\".\nتخفي المتصفحات المسار والاستعلام في روابط https:// عن قواعد الوكيل (Chrome منذ الإصدار 52، وFirefox منذ الإصدار 51)، لذا لا يمكن لنمط https:// المطابقة إلا حتى اسم المضيف، مثل \"https://example.com/*\"."
+ },
+ "config_section_auto_switch_help_regex": {
+ "message": "تعبير نمطي بلغة JavaScript يُختبر على الرابط بالكامل. يميّز بين الأحرف الكبيرة والصغيرة، ويطابق أي موضع في الرابط ما لم تُحدّد بدايته ونهايته باستخدام ^ و$$، مثل \"^https?://(www\\.)?example\\.com/\".\nتخفي المتصفحات المسار والاستعلام في روابط https:// عن قواعد الوكيل (Chrome منذ الإصدار 52، وFirefox منذ الإصدار 51): يظهر رابط https:// بالشكل \"https://example.com/\" فقط، لذلك لا يمكن مطابقة مساره."
+ },
+ "config_section_auto_switch_help_cidr": {
+ "message": "يطابق الطلبات الموجّهة إلى عنوان IP ضمن النطاق، مثل \"192.168.0.0/16\" أو \"2001:db8::/32\". يطابق الطلب الموجّه إلى اسم مضيف إذا كان عنوان IP الناتج عن تحليل الاسم ضمن النطاق، مما يتطلب استعلام DNS."
+ },
+ "config_section_auto_switch_help_disabled": {
+ "message": "تُحفظ القاعدة مع تخطيها حتى تختار نوع شرط مجددًا."
+ },
+ "config_section_auto_switch_type_disabled": {
+ "message": "تخطي مؤقت"
+ },
+ "config_section_auto_switch_condition": {
+ "message": "الشرط"
+ },
+ "config_section_auto_switch_profile": {
+ "message": "التوجيه إلى"
+ },
+ "config_section_auto_switch_actions": {
+ "message": "الإجراءات"
+ },
+ "config_section_auto_switch_add_rule": {
+ "message": "إضافة قاعدة"
+ },
+ "config_section_auto_switch_delete_rule": {
+ "message": "حذف القاعدة الحالية"
+ },
+ "config_section_auto_switch_duplicate_rule": {
+ "message": "تكرار القاعدة الحالية"
+ },
+ "config_section_auto_switch_default_profile": {
+ "message": "ملف التعريف الافتراضي"
+ },
+ "config_section_auto_switch_pac_preview": {
+ "message": "معاينة نص PAC البرمجي"
+ },
+
+ "config_action_edit": {
+ "message": "تعديل"
+ },
+ "config_action_delete": {
+ "message": "حذف ملف التعريف"
+ },
+ "config_action_delete_double_confirm": {
+ "message": "هل تريد بالتأكيد حذف ملف التعريف الحالي؟"
+ },
+ "config_action_save": {
+ "message": "حفظ"
+ },
+ "config_action_cancel": {
+ "message": "تجاهل التغييرات"
+ },
+ "config_action_clear": {
+ "message": "مسح"
+ },
+
+ "config_feedback_saved": {
+ "message": "تم حفظ ملف التعريف"
+ },
+ "config_feedback_copied": {
+ "message": "تم النسخ"
+ },
+ "config_feedback_deleted": {
+ "message": "تم حذف ملف التعريف"
+ },
+ "config_feedback_unknown_profile": {
+ "message": "ملف تعريف غير معروف"
+ },
+ "config_feedback_error_occurred": {
+ "message": "حدث خطأ: $1"
+ },
+
+ "preferences_section_interface": {
+ "message": "الواجهة"
+ },
+
+ "preferences_language": {
+ "message": "اللغة"
+ },
+
+ "preferences_language_auto": {
+ "message": "اتباع المتصفح ($1)"
+ },
+
+ "preferences_theme": {
+ "message": "المظهر"
+ },
+
+ "preferences_action_behavior": {
+ "message": "تفتح أيقونة شريط الأدوات"
+ },
+
+ "preferences_action_behavior_popup": {
+ "message": "نافذة منبثقة"
+ },
+
+ "preferences_action_behavior_sidebar": {
+ "message": "شريط جانبي"
+ },
+
+ "preferences_action_behavior_hint": {
+ "message": "يبقى الشريط الجانبي مفتوحًا بجوار صفحاتك ويتبع علامة التبويب النشطة."
+ },
+
+ "preferences_action_behavior_sidebar_unsupported": {
+ "message": "لا يمكن لهذا الإصدار من المتصفح فتح شريط جانبي من أيقونة شريط الأدوات."
+ },
+
+ "preferences_section_import_export": {
+ "message": "الاستيراد والتصدير"
+ },
+
+ "preferences_section_import_export_desc": {
+ "message": "صدّر ملفات تعريف الوكيل إلى ملف للنسخ الاحتياطي أو المشاركة، أو استوردها لاستعادتها عند الحاجة."
+ },
+
+ "preferences_section_import_switchyomega": {
+ "message": "يقبل خيار «استيراد ملفات التعريف» أيضًا نسخة احتياطية من ProxySwitchyOmega أو ZeroOmega بامتداد (.bak). تظهر بعد الاستيراد قائمة بكل ما تعذّر تحويله بدقة."
+ },
+
+ "preferences_tag_beta": {
+ "message": "تجريبي"
+ },
+
+ "preferences_action_profile_export": {
+ "message": "تصدير ملفات التعريف"
+ },
+
+ "preferences_action_profile_import": {
+ "message": "استيراد ملفات التعريف"
+ },
+
+ "preferences_feedback_no_profile_to_be_exported": {
+ "message": "لا توجد ملفات تعريف صالحة للتصدير"
+ },
+
+ "preferences_tips_profile_overwrite": {
+ "message": "قد تُستبدل بعض ملفات التعريف بعد الاستيراد. هل تريد بالتأكيد المتابعة؟"
+ },
+
+ "preferences_feedback_n_profiles_being_imported": {
+ "message": "عدد ملفات التعريف التي تم استيرادها: $1"
+ },
+
+ "preferences_feedback_profiles_not_exported": {
+ "message": "لم يتم تصدير ملفات التعريف غير الصالحة: $1"
+ },
+
+ "preferences_import_warnings_title": {
+ "message": "تم الاستيراد مع تحذيرات"
+ },
+
+ "preferences_import_warnings_desc": {
+ "message": "تعذّر استيراد بعض الإعدادات بدقة. يُرجى مراجعة ملفات التعريف هذه."
+ },
+
+ "preferences_import_warnings_more": {
+ "message": "… وعدد التحذيرات الإضافية: $1"
+ },
+
+ "import_warn_invalid_profile": {
+ "message": "تم التخطي، ملف تعريف غير صالح: $1"
+ },
+
+ "import_warn_reserved_id": {
+ "message": "تم التخطي: معرّف ملف التعريف \"$1\" محجوز"
+ },
+
+ "import_warn_duplicate_id": {
+ "message": "تم التخطي: معرّف ملف التعريف \"$1\" مكرر"
+ },
+
+ "import_warn_unknown_reference": {
+ "message": "يشير إلى ملف تعريف غير موجود: $1"
+ },
+
+ "import_warn_unknown_profile_type": {
+ "message": "تم التخطي: نوع ملف التعريف \"$1\" غير مدعوم"
+ },
+
+ "import_warn_unsupported_condition": {
+ "message": "تعذّر تحويل القاعدة \"$1\" وتم استيرادها معطّلة"
+ },
+
+ "import_warn_ip_condition": {
+ "message": "تطابق قاعدة IP \"$1\" أيضًا أسماء المضيفين التي تُحلّل إلى عناوين IP ضمن هذا النطاق"
+ },
+
+ "import_warn_bypass_dropped": {
+ "message": "قاعدة التجاوز \"$1\" غير مدعومة وتم استبعادها"
+ },
+
+ "import_warn_pac_auth_dropped": {
+ "message": "بيانات اعتماد وكيل PAC غير مدعومة وتم استبعادها"
+ },
+
+ "import_warn_pac_file_url": {
+ "message": "لا يمكن تحديث ملف PAC المحلي \"$1\"؛ تم استيراد آخر نص برمجي جرى تحميله منه"
+ },
+
+ "import_warn_rule_list_static": {
+ "message": "تم استيراد القواعد من \"$1\" كقواعد ثابتة ولن تُحدّث تلقائيًا"
+ },
+
+ "form_is_required": {
+ "message": "الحقل $1 مطلوب"
+ },
+ "form_invalid_url": {
+ "message": "يجب أن يكون $1 رابطًا صالحًا يبدأ بـ http:// أو https://"
+ },
+
+ "feedback_error": {
+ "message": "حدث خطأ"
+ },
+
+ "firefox_incognito_access_error_html": {
+ "message": "
بسبب قيود Firefox، لا يعمل Proxyverse بشكل صحيح لأنه غير مفعّل في نوافذ التصفح الخاص.
\n يُرجى تفعيل الإضافة في النوافذ الخاصة.
\n"
+ },
+
+ "_": {
+ "message": ""
+ }
+}
From 16b230dd7f3e75b567e5771c9f900ab8f51ce10d Mon Sep 17 00:00:00 2001
From: "transifex-integration[bot]"
<43880903+transifex-integration[bot]@users.noreply.github.com>
Date: Mon, 19 Oct 2026 15:45:18 +0000
Subject: [PATCH 2/9] [i18n] Translate messages.json in zh_CN
100% reviewed source file: 'messages.json'
on 'zh_CN'.
---
public/_locales/zh_CN/messages.json | 50 ++++++++++++++++++++++-------
1 file changed, 39 insertions(+), 11 deletions(-)
diff --git a/public/_locales/zh_CN/messages.json b/public/_locales/zh_CN/messages.json
index 3c5804b..e891dd3 100644
--- a/public/_locales/zh_CN/messages.json
+++ b/public/_locales/zh_CN/messages.json
@@ -32,6 +32,7 @@
"mode_auto_switch_abbr": {
"message": "自动"
},
+
"mode_auto_switch_via": {
"message": "此网站经由"
},
@@ -47,12 +48,14 @@
"action_reload_tab": {
"message": "重新加载标签页"
},
+
"stats_failed_resources": {
"message": "$1 个资源加载失败"
},
"stats_details": {
"message": "详情"
},
+
"resources_title": {
"message": "资源"
},
@@ -96,7 +99,6 @@
"message": "其他"
},
-
"mode_direct": {
"message": "直接连接"
},
@@ -189,10 +191,10 @@
"message": "如果您的代理需要身份验证,请设置用户名和密码"
},
"config_section_proxy_auth_unsupported": {
- "message": "当前代理类型暂不支持鉴权"
+ "message": "当前代理类型不支持身份验证"
},
"config_section_proxy_auth_title": {
- "message": "代理认证信息"
+ "message": "代理身份验证"
},
"config_section_proxy_auth_username": {
"message": "用户名"
@@ -202,13 +204,13 @@
},
"config_section_bypass_list": {
- "message": "Bypass 列表"
+ "message": "代理绕过列表"
},
"config_section_advance": {
"message": "高级配置"
},
"config_reference_bypass_list": {
- "message": "详细了解 Bypass 列表"
+ "message": "详细了解代理绕过列表"
},
"config_section_auto_switch_rules": {
@@ -233,7 +235,7 @@
"message": "CIDR"
},
"config_section_auto_switch_type_cidr_malformed": {
- "message": "无效 CIDR。请使用 \"192.168.1.1/24\" 或 \"2001:db8::/32\" 等格式。"
+ "message": "无效 CIDR。请使用 `192.168.1.1/24` 或 `2001:db8::/32` 等格式。"
},
"config_section_auto_switch_type_regex": {
"message": "URL 正则"
@@ -260,7 +262,7 @@
"message": "临时禁用"
},
"config_section_auto_switch_condition": {
- "message": "匹配规则"
+ "message": "匹配条件"
},
"config_section_auto_switch_profile": {
"message": "分流至"
@@ -318,30 +320,39 @@
"config_feedback_error_occurred": {
"message": "发生错误:$1"
},
+
"preferences_section_interface": {
"message": "界面"
},
+
"preferences_language": {
"message": "语言"
},
+
"preferences_language_auto": {
"message": "跟随浏览器($1)"
},
+
"preferences_theme": {
"message": "主题"
},
+
"preferences_action_behavior": {
"message": "点击工具栏图标时打开"
},
+
"preferences_action_behavior_popup": {
"message": "弹出窗口"
},
+
"preferences_action_behavior_sidebar": {
"message": "侧边栏"
},
+
"preferences_action_behavior_hint": {
"message": "侧边栏会在网页旁保持打开,并跟随当前标签页。"
},
+
"preferences_action_behavior_sidebar_unsupported": {
"message": "当前浏览器版本不支持通过工具栏图标打开侧边栏。"
},
@@ -353,9 +364,11 @@
"preferences_section_import_export_desc": {
"message": "将代理配置导出成文件以便进行备份或分享,也可导入文件还原配置。"
},
+
"preferences_section_import_switchyomega": {
"message": "“导入配置”也支持 ProxySwitchyOmega / ZeroOmega 的备份文件(.bak)。无法完全转换的内容会在导入后列出。"
},
+
"preferences_tag_beta": {
"message": "Beta"
},
@@ -369,7 +382,7 @@
},
"preferences_feedback_no_profile_to_be_exported": {
- "message": "没有可以导出的配置"
+ "message": "没有可导出的有效配置"
},
"preferences_tips_profile_overwrite": {
@@ -379,54 +392,69 @@
"preferences_feedback_n_profiles_being_imported": {
"message": "已导入 $1 个配置"
},
+
"preferences_feedback_profiles_not_exported": {
"message": "以下无效配置未导出:$1"
},
+
"preferences_import_warnings_title": {
"message": "导入完成,但有警告"
},
+
"preferences_import_warnings_desc": {
"message": "部分设置无法完全导入,请检查以下配置。"
},
+
"preferences_import_warnings_more": {
"message": "……另有 $1 项"
},
+
"import_warn_invalid_profile": {
"message": "已跳过,无效配置:$1"
},
+
"import_warn_reserved_id": {
"message": "已跳过:配置 ID“$1”为保留 ID"
},
+
"import_warn_duplicate_id": {
"message": "已跳过:配置 ID“$1”重复出现"
},
+
"import_warn_unknown_reference": {
"message": "引用了不存在的配置:$1"
},
+
"import_warn_unknown_profile_type": {
"message": "已跳过:不支持配置类型“$1”"
},
+
"import_warn_unsupported_condition": {
"message": "规则“$1”无法转换,已作为禁用规则导入"
},
+
"import_warn_ip_condition": {
"message": "IP 规则“$1”也会匹配解析到该网段的主机名"
},
+
"import_warn_bypass_dropped": {
- "message": "不支持 Bypass 规则“$1”,已忽略"
+ "message": "不支持代理绕过规则“$1”,已忽略"
},
+
"import_warn_pac_auth_dropped": {
"message": "不支持 PAC 代理的认证信息,已忽略"
},
+
"import_warn_pac_file_url": {
"message": "无法更新本地 PAC 文件“$1”,已导入其最后加载的脚本"
},
+
"import_warn_rule_list_static": {
"message": "来自“$1”的规则已作为固定规则导入,不会自动更新"
},
"form_is_required": {
- "message": "$1是必填项"
+ "message": "$1 是必填项"
},
"form_invalid_url": {
"message": "$1 必须是有效的 http:// 或 https:// URL"
@@ -437,7 +465,7 @@
},
"firefox_incognito_access_error_html": {
- "message": " 由于 Firefox 的限制,Proxyverse 无法在隐私浏览窗口运行,因而无法正常工作。
\n 请在隐私窗口中开启扩展。
\n"
+ "message": " 由于 Firefox 的限制,Proxyverse 未获准在隐私浏览窗口中运行,因此无法正常工作。
\n 请允许此扩展在隐私窗口中运行。
\n"
},
"_": {
From 10a476ba8bc3bc2139433db4a25d3484d94880d9 Mon Sep 17 00:00:00 2001
From: "transifex-integration[bot]"
<43880903+transifex-integration[bot]@users.noreply.github.com>
Date: Mon, 19 Oct 2026 15:46:01 +0000
Subject: [PATCH 3/9] [i18n] Translate messages.json in zh_TW
100% reviewed source file: 'messages.json'
on 'zh_TW'.
---
public/_locales/zh_TW/messages.json | 46 +++++++++++++++++++++++------
1 file changed, 37 insertions(+), 9 deletions(-)
diff --git a/public/_locales/zh_TW/messages.json b/public/_locales/zh_TW/messages.json
index 622192e..bce4ee8 100644
--- a/public/_locales/zh_TW/messages.json
+++ b/public/_locales/zh_TW/messages.json
@@ -32,6 +32,7 @@
"mode_auto_switch_abbr": {
"message": "自動"
},
+
"mode_auto_switch_via": {
"message": "此網站經由"
},
@@ -47,12 +48,14 @@
"action_reload_tab": {
"message": "重新載入分頁"
},
+
"stats_failed_resources": {
"message": "$1 個資源載入失敗"
},
"stats_details": {
"message": "詳細資料"
},
+
"resources_title": {
"message": "資源"
},
@@ -96,7 +99,6 @@
"message": "其他"
},
-
"mode_direct": {
"message": "直接連線"
},
@@ -192,7 +194,7 @@
"message": "目前的代理類型不支援驗證"
},
"config_section_proxy_auth_title": {
- "message": "代理認證"
+ "message": "代理驗證"
},
"config_section_proxy_auth_username": {
"message": "使用者名稱"
@@ -233,13 +235,13 @@
"message": "CIDR"
},
"config_section_auto_switch_type_cidr_malformed": {
- "message": "無效 CIDR。請使用`192.168.1.1/24`或`2001:db8::/32`等格式。"
+ "message": "無效的 CIDR。請使用 `192.168.1.1/24` 或 `2001:db8::/32` 等格式。"
},
"config_section_auto_switch_type_regex": {
- "message": "URL 規則運算式"
+ "message": "URL 正規表示式"
},
"config_section_auto_switch_type_regex_malformed": {
- "message": "無效的規則運算式"
+ "message": "無效的正規表示式"
},
"config_section_auto_switch_help_domain": {
"message": "以萬用字元比對主機名稱:* 代表任意字元(包含點),? 代表單一字元。「example.com」僅比對該主機;若要包含子網域,請另外加上「*.example.com」。連接埠和路徑不納入比對。"
@@ -248,7 +250,7 @@
"message": "以萬用字元(* 和 ?)比對完整 URL,例如「http://example.com/api/*」。\n瀏覽器不會將 https:// URL 的路徑和查詢參數提供給代理規則(Chrome 52 起、Firefox 51 起),因此 https:// 的規則最多只能比對到主機,例如「https://example.com/*」。"
},
"config_section_auto_switch_help_regex": {
- "message": "以 JavaScript 規則運算式比對完整 URL,區分大小寫;除非以 ^ 和 $$ 錨定,否則可比對 URL 中的任何位置,例如「^https?://(www\\.)?example\\.com/」。\n瀏覽器不會將 https:// URL 的路徑和查詢參數提供給代理規則(Chrome 52 起、Firefox 51 起):https:// URL 只會被視為「https://example.com/」,因此無法比對其路徑。"
+ "message": "以 JavaScript 正規表示式比對完整 URL,區分大小寫;除非以 ^ 和 $$ 錨定,否則可比對 URL 中的任何位置,例如「^https?://(www\\.)?example\\.com/」。\n瀏覽器不會將 https:// URL 的路徑和查詢參數提供給代理規則(Chrome 52 起、Firefox 51 起):https:// URL 只會被視為「https://example.com/」,因此無法比對其路徑。"
},
"config_section_auto_switch_help_cidr": {
"message": "比對目標 IP 位址位於此範圍內的請求,例如「192.168.0.0/16」或「2001:db8::/32」。以主機名稱發出的請求,會在名稱解析到此範圍時符合,這需要一次 DNS 查詢。"
@@ -263,7 +265,7 @@
"message": "條件定義"
},
"config_section_auto_switch_profile": {
- "message": "要路由到的設定檔"
+ "message": "路由至"
},
"config_section_auto_switch_actions": {
"message": "動作"
@@ -318,30 +320,39 @@
"config_feedback_error_occurred": {
"message": "發生錯誤:$1"
},
+
"preferences_section_interface": {
"message": "介面"
},
+
"preferences_language": {
"message": "語言"
},
+
"preferences_language_auto": {
"message": "跟隨瀏覽器($1)"
},
+
"preferences_theme": {
"message": "主題"
},
+
"preferences_action_behavior": {
"message": "點擊工具列圖示時開啟"
},
+
"preferences_action_behavior_popup": {
"message": "彈出式視窗"
},
+
"preferences_action_behavior_sidebar": {
"message": "側邊欄"
},
+
"preferences_action_behavior_hint": {
"message": "側邊欄會在網頁旁保持開啟,並跟隨目前的分頁。"
},
+
"preferences_action_behavior_sidebar_unsupported": {
"message": "此瀏覽器版本無法從工具列圖示開啟側邊欄。"
},
@@ -353,9 +364,11 @@
"preferences_section_import_export_desc": {
"message": "將您的代理伺服器設定檔匯出至檔案,以便備份或分享,並可匯入以還原。"
},
+
"preferences_section_import_switchyomega": {
"message": "「匯入設定檔」也支援 ProxySwitchyOmega / ZeroOmega 的備份檔(.bak)。無法完整轉換的項目會在匯入後列出。"
},
+
"preferences_tag_beta": {
"message": "Beta"
},
@@ -369,7 +382,7 @@
},
"preferences_feedback_no_profile_to_be_exported": {
- "message": "沒有可以匯出的設定檔"
+ "message": "沒有可匯出的有效設定檔"
},
"preferences_tips_profile_overwrite": {
@@ -379,48 +392,63 @@
"preferences_feedback_n_profiles_being_imported": {
"message": "已匯入 $1 個設定檔"
},
+
"preferences_feedback_profiles_not_exported": {
"message": "以下無效的設定檔未匯出:$1"
},
+
"preferences_import_warnings_title": {
"message": "匯入完成,但有警告"
},
+
"preferences_import_warnings_desc": {
"message": "部分設定無法完整匯入,請檢查以下設定檔。"
},
+
"preferences_import_warnings_more": {
"message": "……還有 $1 項"
},
+
"import_warn_invalid_profile": {
"message": "已略過,無效的設定檔:$1"
},
+
"import_warn_reserved_id": {
"message": "已略過:設定檔 ID「$1」為保留 ID"
},
+
"import_warn_duplicate_id": {
"message": "已略過:設定檔 ID「$1」重複出現"
},
+
"import_warn_unknown_reference": {
"message": "參照了不存在的設定檔:$1"
},
+
"import_warn_unknown_profile_type": {
"message": "已略過:不支援設定檔類型「$1」"
},
+
"import_warn_unsupported_condition": {
"message": "規則「$1」無法轉換,已匯入為停用的規則"
},
+
"import_warn_ip_condition": {
"message": "IP 規則「$1」也會比對解析到此範圍的主機名稱"
},
+
"import_warn_bypass_dropped": {
"message": "不支援旁路規則「$1」,已略過"
},
+
"import_warn_pac_auth_dropped": {
"message": "不支援 PAC 代理的驗證資訊,已略過"
},
+
"import_warn_pac_file_url": {
"message": "無法更新本機 PAC 檔案「$1」,已匯入其最後載入的腳本"
},
+
"import_warn_rule_list_static": {
"message": "來自「$1」的規則已匯入為固定規則,不會自動更新"
},
@@ -437,7 +465,7 @@
},
"firefox_incognito_access_error_html": {
- "message": " 由於 Firefox 的限制,Proxyverse 無法在私人瀏覽視窗中執行,因此無法正常運作。
\n 請在私人視窗中啟用擴充套件。
\n"
+ "message": " 由於 Firefox 的限制,Proxyverse 未獲允許在私人瀏覽視窗中執行,因此無法正常運作。
\n 請允許此擴充套件在私人視窗中執行。
\n"
},
"_": {
From 38e3224cf1500d49e99111b81a00bef856d1f517 Mon Sep 17 00:00:00 2001
From: "transifex-integration[bot]"
<43880903+transifex-integration[bot]@users.noreply.github.com>
Date: Mon, 19 Oct 2026 15:46:32 +0000
Subject: [PATCH 4/9] [i18n] Translate messages.json in pt_BR
100% reviewed source file: 'messages.json'
on 'pt_BR'.
---
public/_locales/pt_BR/messages.json | 34 ++++++++++++++++++++++++++---
1 file changed, 31 insertions(+), 3 deletions(-)
diff --git a/public/_locales/pt_BR/messages.json b/public/_locales/pt_BR/messages.json
index 08ce19b..9a763a3 100644
--- a/public/_locales/pt_BR/messages.json
+++ b/public/_locales/pt_BR/messages.json
@@ -32,6 +32,7 @@
"mode_auto_switch_abbr": {
"message": "automático"
},
+
"mode_auto_switch_via": {
"message": "Este site via"
},
@@ -47,12 +48,14 @@
"action_reload_tab": {
"message": "Recarregar aba"
},
+
"stats_failed_resources": {
"message": "$1 recursos não foram carregados"
},
"stats_details": {
"message": "Detalhes"
},
+
"resources_title": {
"message": "Recursos"
},
@@ -96,7 +99,6 @@
"message": "outro"
},
-
"mode_direct": {
"message": "Direto"
},
@@ -251,7 +253,7 @@
"message": "Uma expressão regular JavaScript testada contra a URL completa. Diferencia maiúsculas de minúsculas e corresponde a qualquer parte da URL, a menos que seja ancorada com ^ e $$, por exemplo \"^https?://(www\\.)?example\\.com/\".\nOs navegadores ocultam o caminho e os parâmetros de URLs https:// das regras de proxy (Chrome desde a versão 52, Firefox desde a 51): uma URL https:// é vista apenas como \"https://example.com/\", então o caminho não pode ser comparado."
},
"config_section_auto_switch_help_cidr": {
- "message": "Corresponde a requisições para um endereço IP dentro do intervalo, por exemplo \"192.168.0.0/16\" ou \"2001:db8::/32\". Uma requisição por nome de host corresponde quando o nome resolve para um IP do intervalo, o que exige uma consulta DNS."
+ "message": "Corresponde a requisições para um endereço IP dentro do intervalo, por exemplo \"192.168.0.0/16\" ou \"2001:db8::/32\". Uma requisição por nome de host corresponde quando o nome é resolvido para um IP do intervalo, o que exige uma consulta DNS."
},
"config_section_auto_switch_help_disabled": {
"message": "A regra é mantida, mas ignorada, até que você escolha um tipo de condição novamente."
@@ -318,30 +320,39 @@
"config_feedback_error_occurred": {
"message": "Ocorreu um erro: $1"
},
+
"preferences_section_interface": {
"message": "Interface"
},
+
"preferences_language": {
"message": "Idioma"
},
+
"preferences_language_auto": {
"message": "Seguir o navegador ($1)"
},
+
"preferences_theme": {
"message": "Tema"
},
+
"preferences_action_behavior": {
"message": "O ícone da barra de ferramentas abre"
},
+
"preferences_action_behavior_popup": {
"message": "Pop-up"
},
+
"preferences_action_behavior_sidebar": {
"message": "Barra lateral"
},
+
"preferences_action_behavior_hint": {
"message": "A barra lateral fica aberta ao lado das suas páginas e acompanha a aba ativa."
},
+
"preferences_action_behavior_sidebar_unsupported": {
"message": "Esta versão do navegador não permite abrir uma barra lateral pelo ícone da barra de ferramentas."
},
@@ -353,9 +364,11 @@
"preferences_section_import_export_desc": {
"message": "Exporte seus perfis de proxy para um arquivo para backup ou compartilhamento, ou importe-os para restaurar perfis quando necessário."
},
+
"preferences_section_import_switchyomega": {
"message": "\"Importar perfis\" também aceita um backup do ProxySwitchyOmega / ZeroOmega (.bak). O que não puder ser convertido exatamente será listado após a importação."
},
+
"preferences_tag_beta": {
"message": "Beta"
},
@@ -379,48 +392,63 @@
"preferences_feedback_n_profiles_being_imported": {
"message": "$1 perfis foram importados"
},
+
"preferences_feedback_profiles_not_exported": {
"message": "Perfis inválidos não foram exportados: $1"
},
+
"preferences_import_warnings_title": {
"message": "Importado com avisos"
},
+
"preferences_import_warnings_desc": {
"message": "Algumas configurações não puderam ser importadas exatamente. Revise estes perfis."
},
+
"preferences_import_warnings_more": {
"message": "… e mais $1"
},
+
"import_warn_invalid_profile": {
"message": "Ignorado, perfil inválido: $1"
},
+
"import_warn_reserved_id": {
"message": "Ignorado: o ID de perfil \"$1\" é reservado"
},
+
"import_warn_duplicate_id": {
"message": "Ignorado: o ID de perfil \"$1\" aparece mais de uma vez"
},
+
"import_warn_unknown_reference": {
"message": "Faz referência a um perfil que não existe: $1"
},
+
"import_warn_unknown_profile_type": {
"message": "Ignorado: o tipo de perfil \"$1\" não é compatível"
},
+
"import_warn_unsupported_condition": {
"message": "A regra \"$1\" não pode ser convertida e foi importada como desativada"
},
+
"import_warn_ip_condition": {
- "message": "A regra de IP \"$1\" também corresponde a nomes de host que resolvem para este intervalo"
+ "message": "A regra de IP \"$1\" também corresponde a nomes de host resolvidos para endereços IP dentro deste intervalo"
},
+
"import_warn_bypass_dropped": {
"message": "A regra de exceção \"$1\" não é compatível e foi deixada de fora"
},
+
"import_warn_pac_auth_dropped": {
"message": "Credenciais de proxy PAC não são compatíveis e foram deixadas de fora"
},
+
"import_warn_pac_file_url": {
"message": "O arquivo PAC local \"$1\" não pode ser atualizado; o último script carregado foi importado"
},
+
"import_warn_rule_list_static": {
"message": "As regras de \"$1\" foram importadas como regras fixas e não serão atualizadas automaticamente"
},
From c0e3ee992a287bd98603143acfd1cc7a9996ac19 Mon Sep 17 00:00:00 2001
From: "transifex-integration[bot]"
<43880903+transifex-integration[bot]@users.noreply.github.com>
Date: Mon, 19 Oct 2026 15:48:32 +0000
Subject: [PATCH 5/9] [i18n] Removing messages.json in zh_CN
92% of minimum 100% reviewed source file: 'messages.json'
on 'zh_CN'.
---
public/_locales/zh_CN/messages.json | 50 +++++++----------------------
1 file changed, 11 insertions(+), 39 deletions(-)
diff --git a/public/_locales/zh_CN/messages.json b/public/_locales/zh_CN/messages.json
index e891dd3..3c5804b 100644
--- a/public/_locales/zh_CN/messages.json
+++ b/public/_locales/zh_CN/messages.json
@@ -32,7 +32,6 @@
"mode_auto_switch_abbr": {
"message": "自动"
},
-
"mode_auto_switch_via": {
"message": "此网站经由"
},
@@ -48,14 +47,12 @@
"action_reload_tab": {
"message": "重新加载标签页"
},
-
"stats_failed_resources": {
"message": "$1 个资源加载失败"
},
"stats_details": {
"message": "详情"
},
-
"resources_title": {
"message": "资源"
},
@@ -99,6 +96,7 @@
"message": "其他"
},
+
"mode_direct": {
"message": "直接连接"
},
@@ -191,10 +189,10 @@
"message": "如果您的代理需要身份验证,请设置用户名和密码"
},
"config_section_proxy_auth_unsupported": {
- "message": "当前代理类型不支持身份验证"
+ "message": "当前代理类型暂不支持鉴权"
},
"config_section_proxy_auth_title": {
- "message": "代理身份验证"
+ "message": "代理认证信息"
},
"config_section_proxy_auth_username": {
"message": "用户名"
@@ -204,13 +202,13 @@
},
"config_section_bypass_list": {
- "message": "代理绕过列表"
+ "message": "Bypass 列表"
},
"config_section_advance": {
"message": "高级配置"
},
"config_reference_bypass_list": {
- "message": "详细了解代理绕过列表"
+ "message": "详细了解 Bypass 列表"
},
"config_section_auto_switch_rules": {
@@ -235,7 +233,7 @@
"message": "CIDR"
},
"config_section_auto_switch_type_cidr_malformed": {
- "message": "无效 CIDR。请使用 `192.168.1.1/24` 或 `2001:db8::/32` 等格式。"
+ "message": "无效 CIDR。请使用 \"192.168.1.1/24\" 或 \"2001:db8::/32\" 等格式。"
},
"config_section_auto_switch_type_regex": {
"message": "URL 正则"
@@ -262,7 +260,7 @@
"message": "临时禁用"
},
"config_section_auto_switch_condition": {
- "message": "匹配条件"
+ "message": "匹配规则"
},
"config_section_auto_switch_profile": {
"message": "分流至"
@@ -320,39 +318,30 @@
"config_feedback_error_occurred": {
"message": "发生错误:$1"
},
-
"preferences_section_interface": {
"message": "界面"
},
-
"preferences_language": {
"message": "语言"
},
-
"preferences_language_auto": {
"message": "跟随浏览器($1)"
},
-
"preferences_theme": {
"message": "主题"
},
-
"preferences_action_behavior": {
"message": "点击工具栏图标时打开"
},
-
"preferences_action_behavior_popup": {
"message": "弹出窗口"
},
-
"preferences_action_behavior_sidebar": {
"message": "侧边栏"
},
-
"preferences_action_behavior_hint": {
"message": "侧边栏会在网页旁保持打开,并跟随当前标签页。"
},
-
"preferences_action_behavior_sidebar_unsupported": {
"message": "当前浏览器版本不支持通过工具栏图标打开侧边栏。"
},
@@ -364,11 +353,9 @@
"preferences_section_import_export_desc": {
"message": "将代理配置导出成文件以便进行备份或分享,也可导入文件还原配置。"
},
-
"preferences_section_import_switchyomega": {
"message": "“导入配置”也支持 ProxySwitchyOmega / ZeroOmega 的备份文件(.bak)。无法完全转换的内容会在导入后列出。"
},
-
"preferences_tag_beta": {
"message": "Beta"
},
@@ -382,7 +369,7 @@
},
"preferences_feedback_no_profile_to_be_exported": {
- "message": "没有可导出的有效配置"
+ "message": "没有可以导出的配置"
},
"preferences_tips_profile_overwrite": {
@@ -392,69 +379,54 @@
"preferences_feedback_n_profiles_being_imported": {
"message": "已导入 $1 个配置"
},
-
"preferences_feedback_profiles_not_exported": {
"message": "以下无效配置未导出:$1"
},
-
"preferences_import_warnings_title": {
"message": "导入完成,但有警告"
},
-
"preferences_import_warnings_desc": {
"message": "部分设置无法完全导入,请检查以下配置。"
},
-
"preferences_import_warnings_more": {
"message": "……另有 $1 项"
},
-
"import_warn_invalid_profile": {
"message": "已跳过,无效配置:$1"
},
-
"import_warn_reserved_id": {
"message": "已跳过:配置 ID“$1”为保留 ID"
},
-
"import_warn_duplicate_id": {
"message": "已跳过:配置 ID“$1”重复出现"
},
-
"import_warn_unknown_reference": {
"message": "引用了不存在的配置:$1"
},
-
"import_warn_unknown_profile_type": {
"message": "已跳过:不支持配置类型“$1”"
},
-
"import_warn_unsupported_condition": {
"message": "规则“$1”无法转换,已作为禁用规则导入"
},
-
"import_warn_ip_condition": {
"message": "IP 规则“$1”也会匹配解析到该网段的主机名"
},
-
"import_warn_bypass_dropped": {
- "message": "不支持代理绕过规则“$1”,已忽略"
+ "message": "不支持 Bypass 规则“$1”,已忽略"
},
-
"import_warn_pac_auth_dropped": {
"message": "不支持 PAC 代理的认证信息,已忽略"
},
-
"import_warn_pac_file_url": {
"message": "无法更新本地 PAC 文件“$1”,已导入其最后加载的脚本"
},
-
"import_warn_rule_list_static": {
"message": "来自“$1”的规则已作为固定规则导入,不会自动更新"
},
"form_is_required": {
- "message": "$1 是必填项"
+ "message": "$1是必填项"
},
"form_invalid_url": {
"message": "$1 必须是有效的 http:// 或 https:// URL"
@@ -465,7 +437,7 @@
},
"firefox_incognito_access_error_html": {
- "message": " 由于 Firefox 的限制,Proxyverse 未获准在隐私浏览窗口中运行,因此无法正常工作。
\n 请允许此扩展在隐私窗口中运行。
\n"
+ "message": " 由于 Firefox 的限制,Proxyverse 无法在隐私浏览窗口运行,因而无法正常工作。
\n 请在隐私窗口中开启扩展。
\n"
},
"_": {
From b916fa29f70343dbdc6b6a23fc422b9f81e0af8a Mon Sep 17 00:00:00 2001
From: "transifex-integration[bot]"
<43880903+transifex-integration[bot]@users.noreply.github.com>
Date: Mon, 19 Oct 2026 15:49:15 +0000
Subject: [PATCH 6/9] [i18n] Removing messages.json in zh_TW
94% of minimum 100% reviewed source file: 'messages.json'
on 'zh_TW'.
---
public/_locales/zh_TW/messages.json | 46 ++++++-----------------------
1 file changed, 9 insertions(+), 37 deletions(-)
diff --git a/public/_locales/zh_TW/messages.json b/public/_locales/zh_TW/messages.json
index bce4ee8..622192e 100644
--- a/public/_locales/zh_TW/messages.json
+++ b/public/_locales/zh_TW/messages.json
@@ -32,7 +32,6 @@
"mode_auto_switch_abbr": {
"message": "自動"
},
-
"mode_auto_switch_via": {
"message": "此網站經由"
},
@@ -48,14 +47,12 @@
"action_reload_tab": {
"message": "重新載入分頁"
},
-
"stats_failed_resources": {
"message": "$1 個資源載入失敗"
},
"stats_details": {
"message": "詳細資料"
},
-
"resources_title": {
"message": "資源"
},
@@ -99,6 +96,7 @@
"message": "其他"
},
+
"mode_direct": {
"message": "直接連線"
},
@@ -194,7 +192,7 @@
"message": "目前的代理類型不支援驗證"
},
"config_section_proxy_auth_title": {
- "message": "代理驗證"
+ "message": "代理認證"
},
"config_section_proxy_auth_username": {
"message": "使用者名稱"
@@ -235,13 +233,13 @@
"message": "CIDR"
},
"config_section_auto_switch_type_cidr_malformed": {
- "message": "無效的 CIDR。請使用 `192.168.1.1/24` 或 `2001:db8::/32` 等格式。"
+ "message": "無效 CIDR。請使用`192.168.1.1/24`或`2001:db8::/32`等格式。"
},
"config_section_auto_switch_type_regex": {
- "message": "URL 正規表示式"
+ "message": "URL 規則運算式"
},
"config_section_auto_switch_type_regex_malformed": {
- "message": "無效的正規表示式"
+ "message": "無效的規則運算式"
},
"config_section_auto_switch_help_domain": {
"message": "以萬用字元比對主機名稱:* 代表任意字元(包含點),? 代表單一字元。「example.com」僅比對該主機;若要包含子網域,請另外加上「*.example.com」。連接埠和路徑不納入比對。"
@@ -250,7 +248,7 @@
"message": "以萬用字元(* 和 ?)比對完整 URL,例如「http://example.com/api/*」。\n瀏覽器不會將 https:// URL 的路徑和查詢參數提供給代理規則(Chrome 52 起、Firefox 51 起),因此 https:// 的規則最多只能比對到主機,例如「https://example.com/*」。"
},
"config_section_auto_switch_help_regex": {
- "message": "以 JavaScript 正規表示式比對完整 URL,區分大小寫;除非以 ^ 和 $$ 錨定,否則可比對 URL 中的任何位置,例如「^https?://(www\\.)?example\\.com/」。\n瀏覽器不會將 https:// URL 的路徑和查詢參數提供給代理規則(Chrome 52 起、Firefox 51 起):https:// URL 只會被視為「https://example.com/」,因此無法比對其路徑。"
+ "message": "以 JavaScript 規則運算式比對完整 URL,區分大小寫;除非以 ^ 和 $$ 錨定,否則可比對 URL 中的任何位置,例如「^https?://(www\\.)?example\\.com/」。\n瀏覽器不會將 https:// URL 的路徑和查詢參數提供給代理規則(Chrome 52 起、Firefox 51 起):https:// URL 只會被視為「https://example.com/」,因此無法比對其路徑。"
},
"config_section_auto_switch_help_cidr": {
"message": "比對目標 IP 位址位於此範圍內的請求,例如「192.168.0.0/16」或「2001:db8::/32」。以主機名稱發出的請求,會在名稱解析到此範圍時符合,這需要一次 DNS 查詢。"
@@ -265,7 +263,7 @@
"message": "條件定義"
},
"config_section_auto_switch_profile": {
- "message": "路由至"
+ "message": "要路由到的設定檔"
},
"config_section_auto_switch_actions": {
"message": "動作"
@@ -320,39 +318,30 @@
"config_feedback_error_occurred": {
"message": "發生錯誤:$1"
},
-
"preferences_section_interface": {
"message": "介面"
},
-
"preferences_language": {
"message": "語言"
},
-
"preferences_language_auto": {
"message": "跟隨瀏覽器($1)"
},
-
"preferences_theme": {
"message": "主題"
},
-
"preferences_action_behavior": {
"message": "點擊工具列圖示時開啟"
},
-
"preferences_action_behavior_popup": {
"message": "彈出式視窗"
},
-
"preferences_action_behavior_sidebar": {
"message": "側邊欄"
},
-
"preferences_action_behavior_hint": {
"message": "側邊欄會在網頁旁保持開啟,並跟隨目前的分頁。"
},
-
"preferences_action_behavior_sidebar_unsupported": {
"message": "此瀏覽器版本無法從工具列圖示開啟側邊欄。"
},
@@ -364,11 +353,9 @@
"preferences_section_import_export_desc": {
"message": "將您的代理伺服器設定檔匯出至檔案,以便備份或分享,並可匯入以還原。"
},
-
"preferences_section_import_switchyomega": {
"message": "「匯入設定檔」也支援 ProxySwitchyOmega / ZeroOmega 的備份檔(.bak)。無法完整轉換的項目會在匯入後列出。"
},
-
"preferences_tag_beta": {
"message": "Beta"
},
@@ -382,7 +369,7 @@
},
"preferences_feedback_no_profile_to_be_exported": {
- "message": "沒有可匯出的有效設定檔"
+ "message": "沒有可以匯出的設定檔"
},
"preferences_tips_profile_overwrite": {
@@ -392,63 +379,48 @@
"preferences_feedback_n_profiles_being_imported": {
"message": "已匯入 $1 個設定檔"
},
-
"preferences_feedback_profiles_not_exported": {
"message": "以下無效的設定檔未匯出:$1"
},
-
"preferences_import_warnings_title": {
"message": "匯入完成,但有警告"
},
-
"preferences_import_warnings_desc": {
"message": "部分設定無法完整匯入,請檢查以下設定檔。"
},
-
"preferences_import_warnings_more": {
"message": "……還有 $1 項"
},
-
"import_warn_invalid_profile": {
"message": "已略過,無效的設定檔:$1"
},
-
"import_warn_reserved_id": {
"message": "已略過:設定檔 ID「$1」為保留 ID"
},
-
"import_warn_duplicate_id": {
"message": "已略過:設定檔 ID「$1」重複出現"
},
-
"import_warn_unknown_reference": {
"message": "參照了不存在的設定檔:$1"
},
-
"import_warn_unknown_profile_type": {
"message": "已略過:不支援設定檔類型「$1」"
},
-
"import_warn_unsupported_condition": {
"message": "規則「$1」無法轉換,已匯入為停用的規則"
},
-
"import_warn_ip_condition": {
"message": "IP 規則「$1」也會比對解析到此範圍的主機名稱"
},
-
"import_warn_bypass_dropped": {
"message": "不支援旁路規則「$1」,已略過"
},
-
"import_warn_pac_auth_dropped": {
"message": "不支援 PAC 代理的驗證資訊,已略過"
},
-
"import_warn_pac_file_url": {
"message": "無法更新本機 PAC 檔案「$1」,已匯入其最後載入的腳本"
},
-
"import_warn_rule_list_static": {
"message": "來自「$1」的規則已匯入為固定規則,不會自動更新"
},
@@ -465,7 +437,7 @@
},
"firefox_incognito_access_error_html": {
- "message": " 由於 Firefox 的限制,Proxyverse 未獲允許在私人瀏覽視窗中執行,因此無法正常運作。
\n 請允許此擴充套件在私人視窗中執行。
\n"
+ "message": " 由於 Firefox 的限制,Proxyverse 無法在私人瀏覽視窗中執行,因此無法正常運作。
\n 請在私人視窗中啟用擴充套件。
\n"
},
"_": {
From 57a4b37bc94c27b79e625596169d93df26b681fc Mon Sep 17 00:00:00 2001
From: SYM01 <33443792+SYM01@users.noreply.github.com>
Date: Tue, 20 Oct 2026 00:03:06 +0800
Subject: [PATCH 7/9] feat: Arabic UI language with right-to-left layout
Register the Arabic catalog (and Arco's ar-EG strings) and lay pages out
right to left when the messages shown are Arabic, whether chosen in
Preference or picked by the browser. Arco mirrors only a few components,
so mirror the spacing of the ones we use; inputs show each value in its
own direction, and URLs, the PAC editor and the English footer stay left
to right.
Co-Authored-By: Claude Opus 5.5
---
components.d.ts | 1 +
src/App.vue | 10 ++++--
src/components/FailedResourcesAlert.vue | 2 +-
src/components/configs/ProxyServerInput.vue | 3 +-
src/components/configs/ScriptInput.vue | 2 ++
src/pages/ConfigPage.vue | 7 ++--
src/pages/PopupPage.vue | 2 +-
src/pages/ResourcesPage.vue | 2 +-
src/services/i18n.ts | 35 ++++++++++++++------
src/style.css | 36 +++++++++++++++++++++
tests/services/i18n.test.ts | 15 +++++++++
11 files changed, 98 insertions(+), 17 deletions(-)
diff --git a/components.d.ts b/components.d.ts
index de953d9..22e81b5 100644
--- a/components.d.ts
+++ b/components.d.ts
@@ -18,6 +18,7 @@ declare module 'vue' {
ACollapse: typeof import('@arco-design/web-vue')['Collapse']
ACollapseItem: typeof import('@arco-design/web-vue')['CollapseItem']
AColorPicker: typeof import('@arco-design/web-vue')['ColorPicker']
+ AConfigProvider: typeof import('@arco-design/web-vue')['ConfigProvider']
ADgroup: typeof import('@arco-design/web-vue')['Dgroup']
ADivider: typeof import('@arco-design/web-vue')['Divider']
ADoption: typeof import('@arco-design/web-vue')['Doption']
diff --git a/src/App.vue b/src/App.vue
index 43e928e..8765779 100644
--- a/src/App.vue
+++ b/src/App.vue
@@ -2,18 +2,20 @@
import { h, onMounted } from "vue";
import { Modal } from "@arco-design/web-vue";
import { useLocale, addI18nMessages } from "@arco-design/web-vue/es/locale";
+import arEG from "@arco-design/web-vue/es/locale/lang/ar-eg";
import enUS from "@arco-design/web-vue/es/locale/lang/en-us";
import zhCN from "@arco-design/web-vue/es/locale/lang/zh-cn";
import zhTW from "@arco-design/web-vue/es/locale/lang/zh-tw";
import ptPT from "@arco-design/web-vue/es/locale/lang/pt-pt";
import { followDarkMode } from "./services/preference";
-import { followLanguage } from "./services/i18n";
+import { followLanguage, isRightToLeft } from "./services/i18n";
import type { ArcoLang } from "@arco-design/web-vue/es/locale/interface";
import { Host } from "./adapters";
import { useRoute } from "vue-router";
const route = useRoute();
const i18nConfig: Record = {
+ "ar-EG": arEG,
"en-US": enUS,
"zh-CN": zhCN,
"zh-TW": zhTW,
@@ -41,6 +43,8 @@ try {
console.warn(e);
}
+const rtl = isRightToLeft();
+
followDarkMode();
followLanguage();
onMounted(async () => {
@@ -57,5 +61,7 @@ onMounted(async () => {
-
+
+
+
diff --git a/src/components/FailedResourcesAlert.vue b/src/components/FailedResourcesAlert.vue
index d573e7e..e571d65 100644
--- a/src/components/FailedResourcesAlert.vue
+++ b/src/components/FailedResourcesAlert.vue
@@ -32,7 +32,7 @@ const failures = computed(() => countFailures(props.stats.resources));
"
>
{{ $t("stats_details") }}
-
+
diff --git a/src/components/configs/ProxyServerInput.vue b/src/components/configs/ProxyServerInput.vue
index 07179a1..b5c2e6b 100644
--- a/src/components/configs/ProxyServerInput.vue
+++ b/src/components/configs/ProxyServerInput.vue
@@ -120,7 +120,8 @@ const onClearAuth = () => {
:validate-trigger="props.validateTrigger"
>
-
+
+
({});
+// the sidebar sits at the start of the line, its resize handle at the end
+const rtl = isRightToLeft();
onMounted(async () => {
profiles.value = await listProfiles();
@@ -24,7 +27,7 @@ onMounted(async () => {
-