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 () => {