diff --git a/src/components/setting/setting-verge-advanced.tsx b/src/components/setting/setting-verge-advanced.tsx index c88348ab..0216a4a2 100644 --- a/src/components/setting/setting-verge-advanced.tsx +++ b/src/components/setting/setting-verge-advanced.tsx @@ -47,7 +47,10 @@ const SettingVergeAdvanced = ({ onError: _ }: Props) => { try { const info = await checkUpdate(); if (!info?.available) { - showNotice("success", t("Currently on the Latest Version")); + showNotice( + "success", + t("components.settings.verge.advanced.notifications.latestVersion"), + ); } else { updateRef.current?.open(); } @@ -58,17 +61,25 @@ const SettingVergeAdvanced = ({ onError: _ }: Props) => { const onExportDiagnosticInfo = useCallback(async () => { await exportDiagnosticInfo(); - showNotice("success", t("Copy Success"), 1000); + showNotice( + "success", + t("components.settings.common.notifications.copySuccess"), + 1000, + ); }, [t]); const copyVersion = useCallback(() => { navigator.clipboard.writeText(`v${version}`).then(() => { - showNotice("success", t("Version copied to clipboard"), 1000); + showNotice( + "success", + t("components.settings.verge.advanced.notifications.versionCopied"), + 1000, + ); }); }, [t]); return ( - + @@ -80,10 +91,10 @@ const SettingVergeAdvanced = ({ onError: _ }: Props) => { backupRef.current?.open()} - label={t("Backup Setting")} + label={t("components.settings.verge.advanced.items.backupSetting")} extra={ } @@ -91,33 +102,45 @@ const SettingVergeAdvanced = ({ onError: _ }: Props) => { configRef.current?.open()} - label={t("Runtime Config")} + label={t("components.settings.verge.advanced.items.runtimeConfig")} /> } /> - - - - - - - + + + + + + + } @@ -128,11 +151,11 @@ const SettingVergeAdvanced = ({ onError: _ }: Props) => { onClick={() => { exitApp(); }} - label={t("Exit")} + label={t("components.settings.verge.advanced.items.exit")} /> { > } > diff --git a/src/components/setting/setting-verge-basic.tsx b/src/components/setting/setting-verge-basic.tsx index 1cf245cd..a764de17 100644 --- a/src/components/setting/setting-verge-basic.tsx +++ b/src/components/setting/setting-verge-basic.tsx @@ -78,7 +78,7 @@ const SettingVergeBasic = ({ onError }: Props) => { await copyClashEnv(); showNotice( "success", - t("components.settings.verge.basic.notifications.copySuccess"), + t("components.settings.common.notifications.copySuccess"), 1000, ); }, [t]); diff --git a/src/locales/ar.json b/src/locales/ar.json index 872f5633..06d88483 100644 --- a/src/locales/ar.json +++ b/src/locales/ar.json @@ -969,14 +969,44 @@ "browse": "استعراض", "clear": "مسح" }, - "notifications": { - "copySuccess": "تم النسخ بنجاح" - }, "trayOptions": { "showMainWindow": "إظهار النافذة الرئيسية", "showTrayMenu": "Show Tray Menu", "disable": "تعطيل" } + }, + "advanced": { + "title": "الإعدادات الأساسية Verge", + "items": { + "backupSetting": "إعداد النسخ الاحتياطي", + "runtimeConfig": "تكوين وقت التشغيل", + "openConfDir": "فتح مجلد التكوين", + "openCoreDir": "فتح مجلد النواة", + "openLogsDir": "فتح مجلد السجلات", + "checkUpdates": "التحقق من وجود تحديثات", + "openDevTools": "أدوات المطور", + "liteModeSettings": "LightWeight Mode Settings", + "exit": "خروج", + "exportDiagnostics": "Export Diagnostic Info", + "vergeVersion": "إصدار Verge" + }, + "tooltips": { + "backupInfo": "Support local or WebDAV backup of configuration files", + "openConfDir": "إذا عمل البرنامج بشكل غير طبيعي، قم بالنسخ الاحتياطي ثم حذف جميع الملفات في هذا المجلد ثم أعد تشغيل البرنامج", + "liteMode": "إيقاف الواجهة الرسومية والإبقاء على تشغيل النواة" + }, + "actions": { + "copyVersion": "Copy Version" + }, + "notifications": { + "latestVersion": "أنت على أحدث إصدار حاليًا", + "versionCopied": "Version copied to clipboard" + } + } + }, + "common": { + "notifications": { + "copySuccess": "تم النسخ بنجاح" } } } diff --git a/src/locales/de.json b/src/locales/de.json index 8ed73923..ba6caf4c 100644 --- a/src/locales/de.json +++ b/src/locales/de.json @@ -969,14 +969,44 @@ "browse": "Durchsuchen", "clear": "Löschen" }, - "notifications": { - "copySuccess": "Kopieren erfolgreich" - }, "trayOptions": { "showMainWindow": "Hauptfenster anzeigen", "showTrayMenu": "Tray-Menü anzeigen", "disable": "Deaktivieren" } + }, + "advanced": { + "title": "Verge-Erweiterte Einstellungen", + "items": { + "backupSetting": "Sicherungseinstellungen", + "runtimeConfig": "Aktuelle Konfiguration", + "openConfDir": "Konfigurationsverzeichnis", + "openCoreDir": "Kernverzeichnis", + "openLogsDir": "Protokollverzeichnis", + "checkUpdates": "Auf Updates prüfen", + "openDevTools": "Entwicklertools öffnen", + "liteModeSettings": "Einstellungen für den Leichtgewichtigen Modus", + "exit": "Beenden", + "exportDiagnostics": "Diagnoseinformationen exportieren", + "vergeVersion": "Verge-Version" + }, + "tooltips": { + "backupInfo": "Unterstützt die Sicherung von Konfigurationsdateien über WebDAV", + "openConfDir": "Wenn die Software fehlerhaft funktioniert, !sichern Sie! alle Dateien in diesem Verzeichnis, löschen Sie sie und starten Sie die Software neu.", + "liteMode": "GUI-Oberfläche schließen, nur den Kern laufen lassen" + }, + "actions": { + "copyVersion": "Copy Version" + }, + "notifications": { + "latestVersion": "Sie verwenden bereits die neueste Version", + "versionCopied": "Version copied to clipboard" + } + } + }, + "common": { + "notifications": { + "copySuccess": "Kopieren erfolgreich" } } } diff --git a/src/locales/en.json b/src/locales/en.json index 5f7eb8d6..448e1a68 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -969,14 +969,44 @@ "browse": "Browse", "clear": "Clear" }, - "notifications": { - "copySuccess": "Copy Success" - }, "trayOptions": { "showMainWindow": "Show Main Window", "showTrayMenu": "Show Tray Menu", "disable": "Disable" } + }, + "advanced": { + "title": "Verge Advanced Setting", + "items": { + "backupSetting": "Backup Setting", + "runtimeConfig": "Runtime Config", + "openConfDir": "Open Conf Dir", + "openCoreDir": "Open Core Dir", + "openLogsDir": "Open Logs Dir", + "checkUpdates": "Check for Updates", + "openDevTools": "Dev Tools", + "liteModeSettings": "LightWeight Mode Settings", + "exit": "Exit", + "exportDiagnostics": "Export Diagnostic Info", + "vergeVersion": "Verge Version" + }, + "tooltips": { + "backupInfo": "Support local or WebDAV backup of configuration files", + "openConfDir": "If the software runs abnormally, BACKUP and delete all files in this folder then restart the software", + "liteMode": "Close the GUI and keep only the kernel running" + }, + "actions": { + "copyVersion": "Copy Version" + }, + "notifications": { + "latestVersion": "Currently on the Latest Version", + "versionCopied": "Version copied to clipboard" + } + } + }, + "common": { + "notifications": { + "copySuccess": "Copy Success" } } } diff --git a/src/locales/es.json b/src/locales/es.json index e3677ada..c7a653e7 100644 --- a/src/locales/es.json +++ b/src/locales/es.json @@ -969,14 +969,44 @@ "browse": "Examinar", "clear": "Limpiar" }, - "notifications": { - "copySuccess": "Copia exitosa" - }, "trayOptions": { "showMainWindow": "Mostrar ventana principal", "showTrayMenu": "Mostrar menú de la bandeja", "disable": "Deshabilitar" } + }, + "advanced": { + "title": "Ajustes avanzados de Verge", + "items": { + "backupSetting": "Configuración de copia de seguridad", + "runtimeConfig": "Configuración actual", + "openConfDir": "Directorio de configuración", + "openCoreDir": "Directorio del núcleo", + "openLogsDir": "Directorio de registros", + "checkUpdates": "Comprobar actualizaciones", + "openDevTools": "Abrir herramientas de desarrollo", + "liteModeSettings": "Configuración del modo ligero", + "exit": "Salir", + "exportDiagnostics": "Exportar información de diagnóstico", + "vergeVersion": "Versión de Verge" + }, + "tooltips": { + "backupInfo": "Soporte para la copia de seguridad de archivos de configuración a través de WebDAV", + "openConfDir": "Si el software no funciona correctamente, !realice una copia de seguridad! y elimine todos los archivos de esta carpeta, luego reinicie el software.", + "liteMode": "Cierra la interfaz gráfica y solo mantiene el núcleo en ejecución" + }, + "actions": { + "copyVersion": "Copy Version" + }, + "notifications": { + "latestVersion": "Actualmente está en la última versión", + "versionCopied": "Version copied to clipboard" + } + } + }, + "common": { + "notifications": { + "copySuccess": "Copia exitosa" } } } diff --git a/src/locales/fa.json b/src/locales/fa.json index ba687286..ae511441 100644 --- a/src/locales/fa.json +++ b/src/locales/fa.json @@ -969,14 +969,44 @@ "browse": "مرور کردن", "clear": "پاک کردن" }, - "notifications": { - "copySuccess": "کپی با موفقیت انجام شد" - }, "trayOptions": { "showMainWindow": "نمایش پنجره اصلی", "showTrayMenu": "Show Tray Menu", "disable": "غیرفعال کردن" } + }, + "advanced": { + "title": "تنظیمات پیشرفته Verge", + "items": { + "backupSetting": "تنظیمات پشتیبان گیری", + "runtimeConfig": "پیکربندی زمان اجرا", + "openConfDir": "باز کردن پوشه برنامه", + "openCoreDir": "باز کردن پوشه هسته", + "openLogsDir": "باز کردن پوشه لاگ‌ها", + "checkUpdates": "بررسی برای به‌روزرسانی‌ها", + "openDevTools": "باز کردن ابزارهای توسعه‌دهنده", + "liteModeSettings": "LightWeight Mode Settings", + "exit": "خروج", + "exportDiagnostics": "Export Diagnostic Info", + "vergeVersion": "نسخه Verge" + }, + "tooltips": { + "backupInfo": "از فایل های پیکربندی پشتیبان WebDAV پشتیبانی می کند", + "openConfDir": "اگر نرم‌افزار به‌طور غیرعادی اجرا می‌شود، از تمام فایل‌های موجود در این پوشه نسخه پشتیبان تهیه و پاک کنید تا نرم‌افزار را مجدداً راه‌اندازی کنید", + "liteMode": "رابط کاربری گرافیکی را ببندید و فقط هسته را در حال اجرا نگه دارید" + }, + "actions": { + "copyVersion": "Copy Version" + }, + "notifications": { + "latestVersion": "در حال حاضر در آخرین نسخه", + "versionCopied": "Version copied to clipboard" + } + } + }, + "common": { + "notifications": { + "copySuccess": "کپی با موفقیت انجام شد" } } } diff --git a/src/locales/id.json b/src/locales/id.json index 706d8491..46d2d035 100644 --- a/src/locales/id.json +++ b/src/locales/id.json @@ -969,14 +969,44 @@ "browse": "Jelajahi", "clear": "Bersihkan" }, - "notifications": { - "copySuccess": "Salin Berhasil" - }, "trayOptions": { "showMainWindow": "Tampilkan Jendela Utama", "showTrayMenu": "Show Tray Menu", "disable": "Nonaktifkan" } + }, + "advanced": { + "title": "Pengaturan Lanjutan Verge", + "items": { + "backupSetting": "Pengaturan Cadangan", + "runtimeConfig": "Konfigurasi Runtime", + "openConfDir": "Buka Direktori Konfigurasi", + "openCoreDir": "Buka Direktori Core", + "openLogsDir": "Buka Direktori Log", + "checkUpdates": "Periksa Pembaruan", + "openDevTools": "Buka Alat Pengembang", + "liteModeSettings": "LightWeight Mode Settings", + "exit": "Keluar", + "exportDiagnostics": "Export Diagnostic Info", + "vergeVersion": "Versi Verge" + }, + "tooltips": { + "backupInfo": "Mendukung file konfigurasi cadangan WebDAV", + "openConfDir": "Jika perangkat lunak berjalan tidak normal, CADANGKAN dan hapus semua file di folder ini lalu mulai ulang perangkat lunak", + "liteMode": "Tutup GUI dan biarkan hanya kernel yang berjalan" + }, + "actions": { + "copyVersion": "Copy Version" + }, + "notifications": { + "latestVersion": "Saat ini pada Versi Terbaru", + "versionCopied": "Version copied to clipboard" + } + } + }, + "common": { + "notifications": { + "copySuccess": "Salin Berhasil" } } } diff --git a/src/locales/jp.json b/src/locales/jp.json index 888736f0..3a961211 100644 --- a/src/locales/jp.json +++ b/src/locales/jp.json @@ -969,14 +969,44 @@ "browse": "参照", "clear": "クリア" }, - "notifications": { - "copySuccess": "コピー成功" - }, "trayOptions": { "showMainWindow": "メインウィンドウを表示", "showTrayMenu": "トレイメニューを表示", "disable": "無効にする" } + }, + "advanced": { + "title": "Verge詳細設定", + "items": { + "backupSetting": "バックアップ設定", + "runtimeConfig": "現在の設定", + "openConfDir": "設定ディレクトリを開く", + "openCoreDir": "コアディレクトリを開く", + "openLogsDir": "ログディレクトリを開く", + "checkUpdates": "更新を確認", + "openDevTools": "開発者ツールを開く", + "liteModeSettings": "軽量モード設定", + "exit": "終了", + "exportDiagnostics": "診断情報をエクスポート", + "vergeVersion": "Vergeバージョン" + }, + "tooltips": { + "backupInfo": "WebDAVを使用した設定ファイルのバックアップをサポートします。", + "openConfDir": "アプリケーションが正常に動作しない場合は、このフォルダ内のすべてのファイルを!バックアップ!して削除し、アプリケーションを再起動してください。", + "liteMode": "GUIを閉じて、コアのみを実行します。" + }, + "actions": { + "copyVersion": "Copy Version" + }, + "notifications": { + "latestVersion": "現在は最新バージョンです。", + "versionCopied": "Version copied to clipboard" + } + } + }, + "common": { + "notifications": { + "copySuccess": "コピー成功" } } } diff --git a/src/locales/ko.json b/src/locales/ko.json index 60b746ca..1a9cd328 100644 --- a/src/locales/ko.json +++ b/src/locales/ko.json @@ -969,14 +969,44 @@ "browse": "Browse", "clear": "지우기" }, - "notifications": { - "copySuccess": "복사 성공" - }, "trayOptions": { "showMainWindow": "메인 창 표시", "showTrayMenu": "트레이 메뉴 표시", "disable": "비활성화" } + }, + "advanced": { + "title": "Verge Advanced Setting", + "items": { + "backupSetting": "Backup Setting", + "runtimeConfig": "Runtime Config", + "openConfDir": "Open Conf Dir", + "openCoreDir": "Open Core Dir", + "openLogsDir": "Open Logs Dir", + "checkUpdates": "Check for Updates", + "openDevTools": "Dev Tools", + "liteModeSettings": "LightWeight Mode Settings", + "exit": "Exit", + "exportDiagnostics": "Export Diagnostic Info", + "vergeVersion": "Verge Version" + }, + "tooltips": { + "backupInfo": "Support local or WebDAV backup of configuration files", + "openConfDir": "If the software runs abnormally, BACKUP and delete all files in this folder then restart the software", + "liteMode": "Close the GUI and keep only the kernel running" + }, + "actions": { + "copyVersion": "Copy Version" + }, + "notifications": { + "latestVersion": "Currently on the Latest Version", + "versionCopied": "Version copied to clipboard" + } + } + }, + "common": { + "notifications": { + "copySuccess": "복사 성공" } } } diff --git a/src/locales/ru.json b/src/locales/ru.json index 42abf147..66fcab4c 100644 --- a/src/locales/ru.json +++ b/src/locales/ru.json @@ -969,14 +969,44 @@ "browse": "Просмотреть", "clear": "Очистить" }, - "notifications": { - "copySuccess": "Скопировано" - }, "trayOptions": { "showMainWindow": "Показать главное окно", "showTrayMenu": "Показать меню в трее", "disable": "Отключить" } + }, + "advanced": { + "title": "Расширенные настройки Verge", + "items": { + "backupSetting": "Настройки резервного копирования", + "runtimeConfig": "Используемый конфиг", + "openConfDir": "Открыть папку приложения", + "openCoreDir": "Открыть папку ядра", + "openLogsDir": "Открыть папку логов", + "checkUpdates": "Проверить обновления", + "openDevTools": "Открыть Dev Tools", + "liteModeSettings": "Настройки LightWeight Mode", + "exit": "Выход", + "exportDiagnostics": "Экспорт диагностической информации", + "vergeVersion": "Версия Clash Verge Rev" + }, + "tooltips": { + "backupInfo": "Поддерживает файлы конфигурации резервного копирования WebDAV", + "openConfDir": "Если программное обеспечение работает неправильно, сделайте резервную копию и удалите все файлы в этой папке, а затем перезапустите ПО", + "liteMode": "Режим, в котором работает только ядро Clash, а графический интрефейс закрыт" + }, + "actions": { + "copyVersion": "Copy Version" + }, + "notifications": { + "latestVersion": "Обновление не требуется", + "versionCopied": "Version copied to clipboard" + } + } + }, + "common": { + "notifications": { + "copySuccess": "Скопировано" } } } diff --git a/src/locales/tr.json b/src/locales/tr.json index 5b31a5f7..4d93b5f5 100644 --- a/src/locales/tr.json +++ b/src/locales/tr.json @@ -969,14 +969,44 @@ "browse": "Gözat", "clear": "Temizle" }, - "notifications": { - "copySuccess": "Kopyalama Başarılı" - }, "trayOptions": { "showMainWindow": "Ana Pencereyi Göster", "showTrayMenu": "Tepsi Menüsünü Göster", "disable": "Devre Dışı Bırak" } + }, + "advanced": { + "title": "Verge Gelişmiş Ayarı", + "items": { + "backupSetting": "Yedekleme Ayarı", + "runtimeConfig": "Çalışma Zamanı Yapılandırması", + "openConfDir": "Yapılandırma Dizinini Aç", + "openCoreDir": "Çekirdek Dizinini Aç", + "openLogsDir": "Günlük Dizinini Aç", + "checkUpdates": "Güncellemeleri Kontrol Et", + "openDevTools": "Geliştirici Araçları", + "liteModeSettings": "Hafif Mod Ayarları", + "exit": "Çıkış", + "exportDiagnostics": "Tanılama Bilgilerini Dışa Aktar", + "vergeVersion": "Verge Sürümü" + }, + "tooltips": { + "backupInfo": "WebDAV yedekleme yapılandırma dosyalarını destekler", + "openConfDir": "Yazılım anormal çalışıyorsa, bu klasördeki tüm dosyaları YEDEKLEYİN ve silin, ardından yazılımı yeniden başlatın", + "liteMode": "GUI'yi kapatın ve yalnızca çekirdeği çalışır durumda tutun" + }, + "actions": { + "copyVersion": "Copy Version" + }, + "notifications": { + "latestVersion": "Şu Anda En Son Sürümdesiniz", + "versionCopied": "Version copied to clipboard" + } + } + }, + "common": { + "notifications": { + "copySuccess": "Kopyalama Başarılı" } } } diff --git a/src/locales/tt.json b/src/locales/tt.json index 5f388c98..5c4c0124 100644 --- a/src/locales/tt.json +++ b/src/locales/tt.json @@ -969,14 +969,44 @@ "browse": "Карау", "clear": "Чистарту" }, - "notifications": { - "copySuccess": "Күчерелде" - }, "trayOptions": { "showMainWindow": "Төп тәрәзәне күрсәтү", "showTrayMenu": "Show Tray Menu", "disable": "Сүндерү" } + }, + "advanced": { + "title": "Verge Киңәйтелгән көйләүләр", + "items": { + "backupSetting": "Резерв копия көйләүләре", + "runtimeConfig": "Агымдагы конфигурация", + "openConfDir": "Кушымта папкасын ачу", + "openCoreDir": "Ядро сакланган папканы ачу", + "openLogsDir": "Логлар папкасын ачу", + "checkUpdates": "Яңартуларны тикшерү", + "openDevTools": "Разработчик коралларын ачу", + "liteModeSettings": "LightWeight Mode Settings", + "exit": "Чыгу", + "exportDiagnostics": "Export Diagnostic Info", + "vergeVersion": "Verge версиясе" + }, + "tooltips": { + "backupInfo": "WebDAV аша конфигурация файлын саклауны хуплый", + "openConfDir": "Әгәр программада хаталар чыкса, бу папкадагы файлларны саклап калыгыз да, аннары барысын да бетереп, программаны яңадан башлагыз", + "liteMode": "GUI-ны ябыгыз һәм бары тик төшне генә эшләтеп калдырыгыз" + }, + "actions": { + "copyVersion": "Copy Version" + }, + "notifications": { + "latestVersion": "Сездә иң соңгы версия урнаштырылган", + "versionCopied": "Version copied to clipboard" + } + } + }, + "common": { + "notifications": { + "copySuccess": "Күчерелде" } } } diff --git a/src/locales/zh.json b/src/locales/zh.json index 609b4ff4..b31b1c0f 100644 --- a/src/locales/zh.json +++ b/src/locales/zh.json @@ -969,14 +969,44 @@ "browse": "浏览", "clear": "清除" }, - "notifications": { - "copySuccess": "复制成功" - }, "trayOptions": { "showMainWindow": "显示主窗口", "showTrayMenu": "显示托盘菜单", "disable": "禁用" } + }, + "advanced": { + "title": "Verge 高级设置", + "items": { + "backupSetting": "备份设置", + "runtimeConfig": "当前配置", + "openConfDir": "配置目录", + "openCoreDir": "内核目录", + "openLogsDir": "日志目录", + "checkUpdates": "检查更新", + "openDevTools": "开发者工具", + "liteModeSettings": "轻量模式设置", + "exit": "退出", + "exportDiagnostics": "导出诊断信息", + "vergeVersion": "Verge 版本" + }, + "tooltips": { + "backupInfo": "支持本地或 WebDAV 方式备份配置文件", + "openConfDir": "如果软件运行异常,!备份!并删除此文件夹下的所有文件,重启软件", + "liteMode": "关闭GUI界面,仅保留内核运行" + }, + "actions": { + "copyVersion": "复制Verge版本号" + }, + "notifications": { + "latestVersion": "当前已是最新版本", + "versionCopied": "Verge版本已复制到剪贴板" + } + } + }, + "common": { + "notifications": { + "copySuccess": "复制成功" } } } diff --git a/src/locales/zhtw.json b/src/locales/zhtw.json index ef08ccd7..54158253 100644 --- a/src/locales/zhtw.json +++ b/src/locales/zhtw.json @@ -969,14 +969,44 @@ "browse": "瀏覽", "clear": "清除" }, - "notifications": { - "copySuccess": "複製成功" - }, "trayOptions": { "showMainWindow": "顯示主視窗", "showTrayMenu": "顯示系統匣選單", "disable": "停用" } + }, + "advanced": { + "title": "Verge 進階設定", + "items": { + "backupSetting": "備份設定", + "runtimeConfig": "執行期設定", + "openConfDir": "配置目錄", + "openCoreDir": "內核目錄", + "openLogsDir": "日誌目錄", + "checkUpdates": "檢查更新", + "openDevTools": "開發人員工具", + "liteModeSettings": "輕量模式設定", + "exit": "離開", + "exportDiagnostics": "匯出診斷資訊", + "vergeVersion": "Verge 版本" + }, + "tooltips": { + "backupInfo": "支援本機或 WebDAV 方式備份配置檔案", + "openConfDir": "如果軟體執行異常,!備份!並刪除此資料夾下的所有檔案,重新啟動軟體", + "liteMode": "關閉 GUI 介面,僅保留內核執行" + }, + "actions": { + "copyVersion": "複製Verge版本號" + }, + "notifications": { + "latestVersion": "目前已是最新版本", + "versionCopied": "Verge版本已複製到剪貼簿" + } + } + }, + "common": { + "notifications": { + "copySuccess": "複製成功" } } }