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/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": "" + } +} 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" }, diff --git a/public/_locales/zh_CN/messages.json b/public/_locales/zh_CN/messages.json index 3c5804b..c5e9de1 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": "直接连接" }, @@ -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" }, @@ -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": "不支持 Bypass 规则“$1”,已忽略" }, + "import_warn_pac_auth_dropped": { "message": "不支持 PAC 代理的认证信息,已忽略" }, + "import_warn_pac_file_url": { "message": "无法更新本地 PAC 文件“$1”,已导入其最后加载的脚本" }, + "import_warn_rule_list_static": { "message": "来自“$1”的规则已作为固定规则导入,不会自动更新" }, diff --git a/public/_locales/zh_TW/messages.json b/public/_locales/zh_TW/messages.json index 622192e..0d3b8b2 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": "直接連線" }, @@ -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" }, @@ -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」的規則已匯入為固定規則,不會自動更新" }, 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 () => {