diff --git a/README.md b/README.md index 056dcce..609a59b 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Usage4Claude -[English](README.md) | [日本語](docs/README.ja.md) | [简体中文](docs/README.zh-CN.md) | [繁體中文](docs/README.zh-TW.md) | [한국어](docs/README.ko.md) +[English](README.md) | [日本語](docs/README.ja.md) | [简体中文](docs/README.zh-CN.md) | [繁體中文](docs/README.zh-TW.md) | [한국어](docs/README.ko.md) | [Français](docs/README.fr.md)
@@ -66,6 +66,7 @@ All platforms share the same usage quota, monitored in one place! - 简体中文 - 繁体中文 - 한국어 + - Français - More languages coming soon... ### 🔧 Convenient Features diff --git a/Usage4Claude/Helpers/LocalizationHelper.swift b/Usage4Claude/Helpers/LocalizationHelper.swift index 7f075a5..93a08d0 100644 --- a/Usage4Claude/Helpers/LocalizationHelper.swift +++ b/Usage4Claude/Helpers/LocalizationHelper.swift @@ -238,6 +238,7 @@ enum L { static var chinese: String { localized("language.chinese") } static var chineseTraditional: String { localized("language.chinese_traditional") } static var korean: String { localized("language.korean") } + static var french: String { localized("language.french") } } // MARK: - Window Titles diff --git a/Usage4Claude/Models/UserSettings.swift b/Usage4Claude/Models/UserSettings.swift index 0aa159a..f747c73 100644 --- a/Usage4Claude/Models/UserSettings.swift +++ b/Usage4Claude/Models/UserSettings.swift @@ -269,6 +269,8 @@ enum AppLanguage: String, CaseIterable, Codable { case chineseTraditional = "zh-Hant" /// 韩语 case korean = "ko" + /// 法语 + case french = "fr" var localizedName: String { switch self { @@ -282,6 +284,8 @@ enum AppLanguage: String, CaseIterable, Codable { return L.Language.chineseTraditional case .korean: return L.Language.korean + case .french: + return L.Language.french } } } @@ -300,6 +304,8 @@ extension AppLanguage { return Locale(identifier: "zh_TW") case .korean: return Locale(identifier: "ko_KR") + case .french: + return Locale(identifier: "fr_FR") } } } diff --git a/Usage4Claude/Resources/en.lproj/Localizable.strings b/Usage4Claude/Resources/en.lproj/Localizable.strings index c31fc3b..40390d3 100644 --- a/Usage4Claude/Resources/en.lproj/Localizable.strings +++ b/Usage4Claude/Resources/en.lproj/Localizable.strings @@ -150,6 +150,7 @@ "language.chinese" = "中文(简体)"; "language.chinese_traditional" = "中文(繁體)"; "language.korean" = "한국어"; +"language.french" = "Français"; // MARK: - Window Titles "window.settings_title" = "Usage4Claude Settings"; diff --git a/Usage4Claude/Resources/fr.lproj/Localizable.strings b/Usage4Claude/Resources/fr.lproj/Localizable.strings new file mode 100644 index 0000000..8b4d254 --- /dev/null +++ b/Usage4Claude/Resources/fr.lproj/Localizable.strings @@ -0,0 +1,403 @@ +/* + Localizable.strings (French) + Usage4Claude + + French localization contributed via GitHub. + Copyright © 2025 f-is-h. All rights reserved. +*/ + +// MARK: - Menu Items +"menu.general_settings" = "Réglages généraux"; +"menu.auth_settings" = "Réglages d'authentification"; +"menu.check_updates" = "Vérifier les mises à jour"; +"menu.about" = "À propos"; +"menu.web_usage" = "Voir l'utilisation de Claude"; +"menu.coffee" = "Offrir un café"; +"menu.github_sponsor" = "Sponsor GitHub"; +"menu.quit" = "Quitter Usage4Claude"; +"menu.account" = "Compte"; +"menu.account_prefix" = "Compte :"; + +// MARK: - Usage Detail View +"usage.title" = "Utilisation de Claude"; +"usage.not_started" = "S'affichera après le début de l'utilisation"; +"usage.reset_in" = "Réinitialisation dans"; +"usage.remaining" = "Restant"; +"usage.loading" = "Chargement…"; +"usage.not_configured" = "Authentification non configurée"; +"usage.go_to_settings" = "Aller aux réglages"; +"usage.reset_time" = "Heure de réinitialisation"; +"usage.used" = "Utilisé"; +"usage.five_hour_limit" = "Limite 5 heures"; +"usage.seven_day_limit" = "Limite 7 jours"; +"usage.five_hour_limit_short" = "5h"; +"usage.seven_day_limit_short" = "7j"; +"usage.reset_date" = "Date de réinitialisation"; +"usage.refresh" = "Actualiser"; +"usage.refresh_cooldown" = "Veuillez patienter un instant"; +"usage.run_diagnostic" = "Lancer le diagnostic"; + +// MARK: - Settings - Tabs +"settings.tab.general" = "Général"; +"settings.tab.auth" = "Authentification"; +"settings.tab.about" = "À propos"; + +// MARK: - Settings - General +"settings.general.launch_section" = "Lancement au démarrage"; +"settings.general.launch_at_login" = "Démarrer automatiquement à la connexion"; +"settings.general.launch_hint" = "Lorsque cette option est activée, l'application se lancera automatiquement à la connexion au système"; +"settings.general.display_section" = "Réglages d'affichage"; +"settings.general.menubar_icon" = "Icône de la barre des menus"; +"settings.general.menubar_hint" = "Choisir ce qui s'affiche dans la barre des menus"; +"settings.general.menubar_theme" = "Thème de la barre des menus"; +"settings.general.display_content" = "Contenu affiché"; +"settings.general.monochrome_no_icon_hint" = "L'affichage de l'icône n'est pas disponible avec le thème monochrome"; +"settings.general.refresh_section" = "Réglages d'actualisation"; +"settings.general.refresh_mode" = "Mode d'actualisation"; +"settings.general.refresh_interval" = "Intervalle d'actualisation fixe"; +"settings.general.refresh_hint_smart" = "Ajuste automatiquement la fréquence d'actualisation selon l'utilisation (1 min en activité, jusqu'à 10 min au repos)"; +"settings.general.refresh_hint_fixed" = "Actualiser les données à intervalles fixes"; +"settings.general.language_section" = "Réglages de langue"; +"settings.general.interface_language" = "Langue de l'interface"; +"settings.general.language_hint" = "Changer la langue d'affichage de l'interface"; +"settings.general.reset_button" = "Réinitialiser par défaut"; +"icon_style.color_translucent" = "Couleur translucide"; +"icon_style.color_with_background" = "Couleur avec fond"; +"icon_style.monochrome" = "Monochrome"; +"icon_style.color_translucent_desc" = "Anneaux colorés sur fond transparent, adapté à la plupart des styles de barre des menus"; +"icon_style.color_with_background_desc" = "Anneaux colorés sur fond blanc translucide, idéal lorsque le mode translucide rend mal sur les fonds sombres"; +"icon_style.monochrome_desc" = "S'adapte automatiquement au style de la barre des menus, sobre et élégant"; + +// MARK: - Settings - Authentication +"settings.auth.how_to_title" = "Comment obtenir les informations d'authentification"; +"settings.auth.step1" = "1. Rendez-vous sur claude.ai dans votre navigateur et connectez-vous"; +"settings.auth.step2" = "2. Ouvrez les outils de développement (F12 ou Cmd+Option+I)"; +"settings.auth.step3" = "3. Allez dans l'onglet Réseau (Network)"; +"settings.auth.step4" = "4. Rechargez la page et trouvez la requête usage"; +"settings.auth.step5" = "5. Trouvez sessionKey dans les Cookies sous Headers"; +"settings.auth.step6" = "6. Copiez la valeur de sessionKey et collez-la ci-dessus"; +"settings.auth.open_browser" = "Ouvrir la page d'utilisation de Claude dans le navigateur"; +"settings.auth.session_key_label" = "Clé de session"; +"settings.auth.session_key_placeholder" = "Collez la clé de session"; +"settings.auth.session_key_hint" = "Longue chaîne commençant par sk-ant-sid01-"; +"settings.auth.configured" = "Authentification configurée"; +"settings.auth.not_configured" = "Veuillez saisir la clé de session"; +"settings.auth.credentials_title" = "Identifiants d'authentification"; +"settings.auth.ready_to_use" = "Prêt à utiliser l'application"; +"settings.auth.need_credentials" = "Veuillez saisir la clé de session"; +"settings.auth.show_password" = "Afficher"; +"settings.auth.hide_password" = "Masquer"; + +// MARK: - Settings - About +"settings.about.version" = "Version %@"; +"settings.about.description" = "Suivre la limite d'utilisation de 5 heures de Claude AI"; +"settings.about.developer" = "Développeur"; +"settings.about.license" = "Licence"; +"settings.about.license_value" = "Licence MIT"; +"settings.about.github" = "Visiter le dépôt GitHub"; +"settings.about.coffee" = "Offrir un café"; +"settings.about.github_sponsor" = "Sponsor GitHub"; +"settings.about.copyright" = "© 2025 Tous droits réservés"; + +// MARK: - Welcome View +"welcome.title" = "Bienvenue dans Usage4Claude"; +"welcome.subtitle" = "Veuillez configurer vos informations d'authentification avant de commencer"; +"welcome.setup_button" = "Configurer l'authentification"; +"welcome.later_button" = "Configurer plus tard"; + +// MARK: - Update Checker +"update.new_version_title" = "Nouvelle version disponible"; +"update.latest_version" = "Dernière version"; +"update.current_version" = "Version actuelle"; +"update.view_details_hint" = "Cliquez sur [Voir les détails] pour consulter le contenu complet de la mise à jour"; +"update.view_release_page" = "Voir le contenu complet de la mise à jour sur la page Release"; +"update.download_button" = "Télécharger la mise à jour"; +"update.remind_later_button" = "Rappeler plus tard"; +"update.view_details_button" = "Voir les détails"; +"update.up_to_date_title" = "À jour"; +"update.up_to_date_message" = "La version actuelle %@ est à jour."; +"update.ok_button" = "OK"; +"update.check_failed_title" = "Échec de la vérification"; +"update.confirm_button" = "Confirmer"; +"update.error.invalid_url" = "URL invalide"; +"update.error.network" = "Erreur réseau. Veuillez vérifier votre connexion Internet."; +"update.error.no_data" = "Impossible de récupérer les données"; +"update.error.parse_failed" = "Échec de l'analyse des informations de mise à jour."; + +// MARK: - Update Notification +"update.notification.available" = "Nouvelle version disponible !"; +"update.notification.badge_menu" = "🎉 Nouvelle version disponible !"; +"update.notification.badge_short" = "🎉 Nouveau !"; + +// MARK: - Icon Display Mode +"display.percentage_only" = "Pourcentage uniquement"; +"display.icon_only" = "Icône uniquement"; +"display.both" = "Icône et pourcentage"; +"display.show_icon" = "Afficher l'icône"; +"display.show_percentage" = "Afficher le pourcentage"; + +// MARK: - Refresh Interval +"refresh.smart_mode" = "Fréquence intelligente"; +"refresh.fixed_mode" = "Fréquence fixe"; +"refresh.1_minute" = "1 minute"; +"refresh.3_minutes" = "3 minutes"; +"refresh.5_minutes" = "5 minutes"; +"refresh.10_minutes" = "10 minutes"; + +// MARK: - Language Names +"language.english" = "English"; +"language.japanese" = "日本語"; +"language.chinese" = "中文(简体)"; +"language.chinese_traditional" = "中文(繁體)"; +"language.korean" = "한국어"; +"language.french" = "Français"; + +// MARK: - Window Titles +"window.settings_title" = "Réglages Usage4Claude"; +"window.welcome_title" = "Bienvenue"; + +// MARK: - Usage Data Formatting +"usage_data.not_started_reset" = "L'heure de réinitialisation s'affichera après le début de l'utilisation"; +"usage_data.resetting_soon" = "Réinitialisation imminente"; +"usage_data.resets_in_hours" = "Environ %dh %dmin restantes"; +"usage_data.resets_in_minutes" = "Environ %dmin restantes"; +"usage_data.resets_in_days" = "Environ %dj %dh restantes"; +"usage_data.unknown" = "Inconnu"; +"usage_data.today" = "Aujourd'hui"; +"usage_data.tomorrow" = "Demain"; + +// MARK: - Error Messages +"error.invalid_url" = "URL invalide"; +"error.no_data" = "Aucune donnée reçue"; +"error.session_expired" = "Session expirée, veuillez reconfigurer dans les réglages"; +"error.cloudflare_blocked" = "Requête bloquée par le système de sécurité. Veuillez visiter claude.ai dans votre navigateur pour confirmer que vous n'êtes pas un robot, puis réessayez."; +"error.no_credentials" = "Veuillez d'abord configurer les informations d'authentification dans les réglages"; +"error.network_failed" = "Échec de la requête réseau. Veuillez vérifier votre connexion Internet."; +"error.decoding_failed" = "Échec de l'analyse des données de réponse. Veuillez vérifier si vos identifiants sont corrects."; +"error.no_organizations_found" = "Aucune organisation trouvée"; +"error.unauthorized" = "Échec de l'authentification, veuillez vérifier vos identifiants"; +"error.rate_limited" = "Trop de requêtes, veuillez réessayer plus tard"; + +// MARK: - Launch at Login +"launch.status.enabled" = "Activé"; +"launch.status.disabled" = "Désactivé"; +"launch.status.requires_approval" = "En attente d'autorisation"; +"launch.status.not_found" = "Introuvable"; +"launch.error.title" = "Erreur de lancement au démarrage"; +"launch.error.enable" = "Impossible d'activer le lancement au démarrage"; +"launch.error.disable" = "Impossible de désactiver le lancement au démarrage"; + +// MARK: - Diagnostics +"diagnostic.section_title" = "Diagnostic de connexion"; +"diagnostic.section_description" = "Testez votre connexion à l'API Claude et diagnostiquez les problèmes. Toutes les informations sensibles sont automatiquement masquées dans les rapports."; +"diagnostic.test_button" = "Tester la connexion"; +"diagnostic.view_details_button" = "Voir les détails"; +"diagnostic.export_button" = "Exporter le rapport"; +"diagnostic.testing_connection" = "Test de connexion en cours…"; +"diagnostic.test_completed" = "Test terminé"; +"diagnostic.test_success" = "Test de connexion réussi"; +"diagnostic.test_failed" = "Échec du test de connexion"; +"diagnostic.result_success" = "Connexion réussie"; +"diagnostic.result_failed" = "Échec de la connexion"; +"diagnostic.http_status" = "Statut HTTP"; +"diagnostic.response_time" = "Temps de réponse"; +"diagnostic.response_type" = "Type de réponse"; +"diagnostic.cloudflare_detected" = "Défi Cloudflare détecté"; +"diagnostic.diagnosis" = "Diagnostic"; +"diagnostic.suggestions" = "Suggestions"; +"diagnostic.privacy_notice" = "Toutes les données sensibles sont automatiquement masquées pour la confidentialité"; +"diagnostic.detailed_report_title" = "Rapport de diagnostic détaillé"; +"diagnostic.no_report_available" = "Aucun rapport disponible. Veuillez d'abord lancer un test."; +"diagnostic.copy_to_clipboard" = "Copier dans le presse-papiers"; +"diagnostic.export_title" = "Exporter le rapport de diagnostic"; +"diagnostic.export_message" = "Ce rapport ne contient aucune information sensible et peut être partagé en toute sécurité."; +"diagnostic.export_success_title" = "Export réussi"; +"diagnostic.export_success_message" = "Le rapport de diagnostic a été enregistré dans :"; +"diagnostic.export_error_title" = "Échec de l'export"; + +// Diagnosis messages +"diagnostic.diagnosis_success" = "La connexion fonctionne correctement. L'API a renvoyé des données d'utilisation valides."; +"diagnostic.diagnosis_cloudflare" = "La requête a été bloquée par le système de sécurité Cloudflare. Cela peut être dû à la réputation de l'IP ou à la configuration réseau."; +"diagnostic.diagnosis_decoding" = "Le serveur a renvoyé des données mais elles n'ont pas pu être analysées. Cela signifie généralement que les identifiants sont incorrects ou ne correspondent pas."; +"diagnostic.diagnosis_network" = "Échec de la connexion réseau. Veuillez vérifier votre connexion Internet."; +"diagnostic.diagnosis_no_credentials" = "Les identifiants d'authentification ne sont pas configurés."; +"diagnostic.diagnosis_invalid_url" = "Format de l'identifiant d'organisation invalide."; +"diagnostic.diagnosis_unknown" = "Une erreur inconnue s'est produite. Veuillez exporter et partager ce rapport avec les développeurs."; + +// Suggestion messages +"diagnostic.suggestion_success" = "Tout fonctionne correctement. Aucune action requise."; +"diagnostic.suggestion_visit_browser" = "Rendez-vous sur claude.ai dans votre navigateur et complétez les défis de sécurité"; +"diagnostic.suggestion_wait_and_retry" = "Attendez 5 à 10 minutes et réessayez"; +"diagnostic.suggestion_check_vpn" = "Vérifiez si un VPN ou un proxy affecte la connexion"; +"diagnostic.suggestion_use_smart_mode" = "Utilisez le mode d'actualisation intelligent pour réduire la fréquence des requêtes"; +"diagnostic.suggestion_verify_credentials" = "Vérifiez que l'identifiant d'organisation et la clé de session sont corrects"; +"diagnostic.suggestion_update_session_key" = "Votre clé de session a peut-être expiré. Veuillez la mettre à jour depuis le navigateur"; +"diagnostic.suggestion_check_browser" = "Vérifiez que vous pouvez accéder à claude.ai/settings/usage dans le navigateur"; +"diagnostic.suggestion_check_internet" = "Vérifiez votre connexion Internet"; +"diagnostic.suggestion_check_firewall" = "Vérifiez les réglages du pare-feu ou de l'antivirus"; +"diagnostic.suggestion_retry_later" = "Réessayez plus tard"; +"diagnostic.suggestion_configure_auth" = "Veuillez configurer l'identifiant d'organisation et la clé de session dans les champs ci-dessus"; +"diagnostic.suggestion_check_org_id" = "Vérifiez que le format de l'identifiant d'organisation est correct (doit être un UUID)"; +"diagnostic.suggestion_export_and_share" = "Exportez ce rapport de diagnostic et partagez-le sur GitHub Issues"; +"diagnostic.suggestion_contact_support" = "Contactez le développeur pour obtenir de l'aide sur github.com/f-is-h/Usage4Claude/issues"; +"diagnostic.open_log_folder" = "Ouvrir le dossier des journaux"; + +// MARK: - Limit Types (v2.0.0) +"five_hour_limit" = "Limite 5 heures"; +"seven_day_limit" = "Limite 7 jours"; +"opus_weekly_limit" = "Limite Opus 7j"; +"sonnet_weekly_limit" = "Limite Sonnet 7j"; +"extra_usage" = "Utilisation supplémentaire"; + +// MARK: - Display Options (v2.0.0) +"display_options" = "Options d'affichage"; +"smart_display" = "Affichage intelligent"; +"smart_display_description" = "Afficher automatiquement tous les types de limites avec des données"; +"custom_display" = "Affichage personnalisé"; +"custom_display_description" = "Sélectionner manuellement les limites à afficher"; +"display_mode_label" = "Mode d'affichage"; +"select_limit_types" = "Sélectionner les types de limites à afficher"; +"circular_icon_constraint" = "Au moins une icône circulaire (5 heures ou 7 jours) doit être sélectionnée"; +"colored_theme_unavailable" = "Les thèmes colorés ne sont disponibles qu'avec 1 à 2 icônes circulaires sans autre type"; + +// MARK: - Theme Selection (v2.0.0) +"theme_selection" = "Thème"; +"monochrome_theme" = "Thème monochrome"; +"colored_theme" = "Thème coloré"; +"colored_theme_unavailable_reason" = "Non disponible : uniquement avec 2 indicateurs circulaires ou moins"; + +// MARK: - Credentials Configuration (v2.0.0) +"credentials" = "Identifiants"; +"session_key_hint" = "Trouvez dans DevTools du navigateur → Application → Cookies → claude.ai"; +"session_key_help" = "Votre clé de session sera stockée de manière sécurisée dans le trousseau macOS"; +"session_key_required" = "La clé de session est requise"; +"fetching" = "Récupération…"; +"refetch" = "Récupérer à nouveau"; +"configuring" = "Configuration…"; +"credentials_saved" = "Identifiants enregistrés avec succès"; +"save" = "Enregistrer"; +"back" = "Retour"; +"continue" = "Continuer"; + +// MARK: - Welcome Flow (v2.0.0) +"welcome_credentials_title" = "Configurer l'accès à Claude"; +"welcome_credentials_subtitle" = "Saisissez votre clé de session — nous récupérerons automatiquement votre identifiant d'organisation"; +"welcome_display_title" = "Choisir les options d'affichage"; +"welcome_display_subtitle" = "Sélectionnez les limites d'utilisation à afficher dans la barre des menus"; +"preview" = "Aperçu"; +"welcome.skip" = "Passer"; +"welcome.finish" = "Terminer"; +"welcome.authentication_setup" = "Configuration de l'authentification"; +"welcome.session_key" = "Clé de session"; +"welcome.session_key_placeholder" = "Collez votre clé de session ici"; +"welcome.session_key_hint" = "Commence par sk-ant-sid01-…"; +"welcome.valid_format" = "Format valide"; +"welcome.invalid_format" = "La clé de session doit contenir entre 20 et 500 caractères"; +"welcome.select_limits" = "Sélectionner les limites"; +"welcome.smart_mode_recommended" = "Mode intelligent (recommandé)"; +"welcome.custom_selection" = "Sélection personnalisée"; +"welcome.display_title" = "Options d'affichage"; +"welcome.display_subtitle" = "Choisissez les types de limites à afficher"; +"welcome.preview" = "Aperçu"; +"welcome.back" = "Retour"; +"welcome.skip" = "Passer"; +"welcome.continue" = "Continuer"; +"welcome.finish" = "Terminer"; +"welcome.how_to_get_session_key" = "Comment obtenir la clé de session ?"; +"welcome.configuring" = "Configuration…"; +"welcome.fetch_org_id_failed" = "Impossible de récupérer l'identifiant d'organisation, veuillez réessayer dans les Réglages"; +"welcome.menubar_icon_not_visible" = "L'icône de la barre des menus n'est pas visible ?"; +"welcome.multi_account_hint" = "Besoin de plusieurs comptes ? Vous pourrez en ajouter d'autres dans les Réglages après la configuration."; + +// MARK: - Detail Window - Date/Time Formats (v2.0.0) +"today" = "Aujourd'hui"; +"today_time" = "Aujourd'hui %@"; +"month_day" = "%d/%d"; +"extra_usage_format" = "%d $/%d $"; + +// MARK: - Detail Window - Remaining Time (v2.0.0) +"extra_usage_remaining" = "%@ $ restants"; +"remaining_days_hours" = "%d jours %d heures restants"; +"remaining_hours_minutes" = "%d heures %d minutes restantes"; +"remaining_minutes" = "%d minutes restantes"; + +// MARK: - Settings Window (v2.0.0) +"settings" = "Réglages"; + +// MARK: - General (v2.0.0) +"unknown" = "Inconnu"; + +// MARK: - Usage Data - Compact Remaining Formats +"usage_data.compact_resetting_soon" = "Bientôt"; +"usage_data.compact_remaining_minutes" = "%dmin"; +"usage_data.compact_remaining_hours" = "%dh %dmin"; +"usage_data.compact_remaining_days" = "%dj %dh"; + +// MARK: - Extra Usage +"extra_usage.not_enabled" = "Non activé"; +"extra_usage.usage_amount" = "%.0f $/%.0f $"; +"extra_usage.remaining_amount" = "%.0f $ restants"; + +// MARK: - Loading Animation +"loading_animation.rainbow" = "Dégradé arc-en-ciel"; +"loading_animation.dashed" = "Rotation en pointillés"; +"loading_animation.pulse" = "Effet de pulsation"; +"loading_animation.current" = "Animation de chargement : %@"; + +// MARK: - Time Format +"time_format.system" = "Suivre le système"; +"time_format.twelve_hour" = "12 heures (2:30 PM)"; +"time_format.twenty_four_hour" = "24 heures (14:30)"; +"settings.general.time_format_section" = "Format de l'heure"; +"settings.general.time_format_hint" = "Choisir le format d'affichage de l'heure dans l'application"; +"settings.general.time_format_preview" = "Aperçu"; + +// MARK: - Appearance +"appearance.system" = "Système"; +"appearance.light" = "Clair"; +"appearance.dark" = "Sombre"; +"settings.general.appearance_section" = "Apparence"; +"settings.general.appearance_hint" = "Choisir le thème de couleur de l'application, ou suivre les réglages système"; + +// MARK: - Account Management (v2.1.0) +"account.list_title" = "Comptes"; +"account.no_accounts" = "Aucun compte configuré. Ajoutez un compte pour commencer."; +"account.add_account" = "Ajouter un compte"; +"account.add_new_account" = "Ajouter un nouveau compte"; +"account.current_account" = "Compte actuel"; +"account.alias" = "Alias"; +"account.alias_optional" = "Alias (facultatif)"; +"account.alias_placeholder" = "ex. Pro perso, Équipe travail"; +"account.clear_alias" = "Effacer l'alias"; +"account.organization_id" = "Identifiant d'organisation"; +"account.copy_org_id" = "Copier l'identifiant d'organisation"; +"account.delete_account" = "Supprimer ce compte"; +"account.delete_confirm_title" = "Supprimer le compte"; +"account.delete_confirm_message" = "Êtes-vous sûr de vouloir supprimer ce compte ? Cette action est irréversible."; +"account.delete" = "Supprimer"; +"account.cancel" = "Annuler"; +"account.validate_and_add" = "Valider et ajouter"; +"account.multi_org_added" = "%d organisations trouvées. Des comptes ont été créés pour chacune. Vous pouvez définir des alias dans les détails du compte."; + +// MARK: - Usage Notifications +"notification.section" = "Notifications"; +"notification.hint" = "Être notifié lorsque l'utilisation atteint un seuil ou est réinitialisée"; +"notification.enable" = "Activer les notifications d'utilisation"; +"notification.description" = "Recevoir une notification lorsqu'une limite atteint 90 %%, ou lorsque l'utilisation est réinitialisée."; +"notification.warning_title" = "Avertissement d'utilisation"; +"notification.warning_body" = "%@ a atteint %d %% d'utilisation"; +"notification.reset_title" = "Réinitialisation de l'utilisation"; +"notification.reset_body" = "L'utilisation de %@ a été réinitialisée"; + +// MARK: - Web Login (v2.2.0) +"weblogin.window_title" = "Se connecter à Claude"; +"weblogin.browser_login" = "Connexion via le navigateur"; +"weblogin.browser_login_recommended" = "Se connecter via le navigateur (recommandé)"; +"weblogin.manual_input" = "Saisie manuelle"; +"weblogin.or_manual_input" = "ou saisir la clé de session manuellement"; +"weblogin.loading" = "Chargement de la page de connexion…"; +"weblogin.waiting_for_login" = "Veuillez vous connecter à votre compte Claude"; +"weblogin.validating" = "Vérification des identifiants…"; +"weblogin.success" = "Compte ajouté avec succès : %@"; +"weblogin.cloudflare_blocked" = "Si la page ne se charge pas, veuillez utiliser la saisie manuelle."; +"weblogin.privacy_notice" = "Vos identifiants sont utilisés uniquement en local et stockés de manière sécurisée dans le trousseau système."; diff --git a/Usage4Claude/Resources/ja.lproj/Localizable.strings b/Usage4Claude/Resources/ja.lproj/Localizable.strings index b32a90c..7ef4744 100644 --- a/Usage4Claude/Resources/ja.lproj/Localizable.strings +++ b/Usage4Claude/Resources/ja.lproj/Localizable.strings @@ -150,6 +150,7 @@ "language.chinese" = "中文(簡体字)"; "language.chinese_traditional" = "中文(繁體字)"; "language.korean" = "한국어"; +"language.french" = "Français"; // MARK: - Window Titles "window.settings_title" = "Usage4Claude 設定"; diff --git a/Usage4Claude/Resources/ko.lproj/Localizable.strings b/Usage4Claude/Resources/ko.lproj/Localizable.strings index 2b9f832..29ba564 100644 --- a/Usage4Claude/Resources/ko.lproj/Localizable.strings +++ b/Usage4Claude/Resources/ko.lproj/Localizable.strings @@ -150,6 +150,7 @@ "language.chinese" = "中文(简体)"; "language.chinese_traditional" = "中文(繁体)"; "language.korean" = "한국어"; +"language.french" = "Français"; // MARK: - Window Titles "window.settings_title" = "Usage4Claude 설정"; diff --git a/Usage4Claude/Resources/zh-Hans.lproj/Localizable.strings b/Usage4Claude/Resources/zh-Hans.lproj/Localizable.strings index 06d74e1..1246f9b 100644 --- a/Usage4Claude/Resources/zh-Hans.lproj/Localizable.strings +++ b/Usage4Claude/Resources/zh-Hans.lproj/Localizable.strings @@ -150,6 +150,7 @@ "language.chinese" = "中文(简体)"; "language.chinese_traditional" = "中文(繁体)"; "language.korean" = "한국어"; +"language.french" = "Français"; // MARK: - Window Titles "window.settings_title" = "Usage4Claude 设置"; diff --git a/Usage4Claude/Resources/zh-Hant.lproj/Localizable.strings b/Usage4Claude/Resources/zh-Hant.lproj/Localizable.strings index 4f26ecb..610ae12 100644 --- a/Usage4Claude/Resources/zh-Hant.lproj/Localizable.strings +++ b/Usage4Claude/Resources/zh-Hant.lproj/Localizable.strings @@ -150,6 +150,7 @@ "language.english" = "English"; "language.japanese" = "日本語"; "language.korean" = "한국어"; +"language.french" = "Français"; // MARK: - Window Titles "window.settings_title" = "Usage4Claude 設定"; diff --git a/Usage4Claude/Views/Settings/Welcome/WelcomeView.swift b/Usage4Claude/Views/Settings/Welcome/WelcomeView.swift index 36f3cf1..6a7e12d 100644 --- a/Usage4Claude/Views/Settings/Welcome/WelcomeView.swift +++ b/Usage4Claude/Views/Settings/Welcome/WelcomeView.swift @@ -617,6 +617,10 @@ struct SetupStepView: View { case .korean: let anchor = section == .initialSetup ? "#초기-설정" : "#-자주-묻는-질문" return "\(baseURL)/docs/README.ko.md\(anchor)" + + case .french: + let anchor = section == .initialSetup ? "#configuration-initiale" : "#-faq" + return "\(baseURL)/docs/README.fr.md\(anchor)" } } } diff --git a/docs/README.fr.md b/docs/README.fr.md new file mode 100644 index 0000000..b0a8892 --- /dev/null +++ b/docs/README.fr.md @@ -0,0 +1,265 @@ +# Usage4Claude + +[English](../README.md) | [日本語](README.ja.md) | [简体中文](README.zh-CN.md) | [繁體中文](README.zh-TW.md) | [한국어](README.ko.md) | [Français](README.fr.md) + +
+ +icon + +[![macOS](https://img.shields.io/badge/macOS-13.0%2B-blue?style=flat-square)](https://www.apple.com/macos/) +[![Swift](https://img.shields.io/badge/Swift-5.0%2B-orange?style=flat-square)](https://swift.org) +[![SwiftUI](https://img.shields.io/badge/SwiftUI-✓-green?style=flat-square)](https://developer.apple.com/xcode/swiftui/) +[![License](https://img.shields.io/badge/License-MIT-purple?style=flat-square)](../LICENSE) +[![Release](https://img.shields.io/github/v/release/f-is-h/Usage4Claude?style=flat-square)](https://github.com/f-is-h/Usage4Claude/releases) +[![Downloads (all assets, all releases)](https://img.shields.io/github/downloads/f-is-h/Usage4Claude/total)](https://github.com/f-is-h/Usage4Claude/releases) + +**Une application macOS elegante dans la barre des menus pour surveiller en temps reel votre utilisation de Claude AI.** + +✨ **Surveille toutes les plateformes Claude : Web • Claude Code • Desktop • App Mobile • Cowork** ✨ + +[Fonctionnalites](#-fonctionnalites) • [Installation](#-installation) • [Guide d'utilisation](#-guide-dutilisation) • [FAQ](#-faq) • [Support](#-support) + +
+ +--- + +## ✨ Fonctionnalites + +### 🎯 Fonctionnalites principales + +- **📊 Surveillance en temps reel** - Affiche le quota d'utilisation de l'abonnement Claude (Free/Pro/Team/Max) dans la barre des menus +- **🎯 Support multi-limites** - Affiche jusqu'a 5 limites simultanement (5h/7j/Extra/7j Opus/7j Sonnet) +- **🎨 Mode d'affichage intelligent** - Detection et affichage automatiques de tous les types de limites avec donnees disponibles +- **⚙️ Affichage personnalise** - Selection manuelle des types de limites a afficher, toute combinaison possible +- **🎨 Couleurs intelligentes** - Changement automatique des couleurs selon l'utilisation, chaque type de limite a son propre schema +- **🔔 Notifications d'utilisation** - Avertissement a 90 % d'utilisation, notification lors de la reinitialisation du quota +- **👥 Gestion multi-comptes** - Support de plusieurs comptes / plusieurs organisations par compte, changement rapide +- **🌐 Connexion via navigateur integre** - Navigateur integre pour extraire automatiquement la Session Key, sans copie manuelle +- **🎨 Reglages d'apparence** - Support du mode systeme / clair / sombre +- **🕐 Format horaire** - Support du format systeme / 12h / 24h +- **⏰ Minuterie precise** - Heure de reinitialisation du quota affichee a la minute pres +- **🔄 Actualisation intelligente** - Rafraichissement adaptatif intelligent a 4 niveaux ou intervalles fixes (1/3/5/10 min) +- **⚡ Actualisation manuelle** - Cliquez sur le bouton d'actualisation pour mettre a jour instantanement (protection anti-rebond de 10 s) +- **💻 Experience native** - Application macOS 100 % native, legere et elegante + +### 🌐 Support multiplateforme + +Fonctionne avec tous les produits Claude : +- 🌐 **Claude.ai** (Interface web) +- 💻 **Claude Code** (Outil CLI pour developpeurs) +- 🖥️ **Application de bureau** (macOS/Windows) +- 📱 **Application mobile** (iOS/Android) +- 🤝 **Cowork** (Agent IA) + +Toutes les plateformes partagent le meme quota d'utilisation, surveille en un seul endroit ! + +### 🎨 Personnalisation + +- **🕓 Modes d'affichage multiples** + - Pourcentage uniquement - Epure et intuitif, visible en un coup d'oeil + - Icone uniquement - Discret et elegant, details au clic + - Icone + Pourcentage - Information complete, identification visuelle rapide + +- **🌍 Support multilingue** + - English + - 日本語 + - 简体中文 + - 繁体中文 + - 한국어 + - Francais + - D'autres langues a venir... + +### 🔒 Securite et confidentialite + +- 🏠 **Stockage local uniquement** - Toutes les donnees sont stockees localement, aucune collecte ni envoi d'informations personnelles +- 🔐 **Protection Keychain** - Informations sensibles securisees dans le trousseau, pas de cles en clair +- 📖 **Open source transparent** - Code entierement public, auditable par tous +- 🛡️ **Protection Sandbox** - App Sandbox activee pour une securite renforcee + +--- + +## 💾 Installation + +### Option 1 : Telecharger le binaire (recommande) + +1. Rendez-vous sur la [page des Releases](https://github.com/f-is-h/Usage4Claude/releases) +2. Telechargez le dernier fichier `.dmg` +3. Double-cliquez pour ouvrir, glissez l'application dans le dossier Applications +4. Faites un clic droit sur l'app et selectionnez « Ouvrir » au premier lancement (autoriser l'app non signee) +5. Autorisez l'acces au trousseau pour les informations d'authentification + +### Option 2 : Compiler depuis les sources + +#### Prerequis +- macOS 13.0 ou ulterieur +- Xcode 15.0 ou ulterieur +- Git + +#### Etapes de compilation + +```bash +# Cloner le depot +git clone https://github.com/f-is-h/Usage4Claude.git +cd Usage4Claude + +# Ouvrir dans Xcode +open Usage4Claude.xcodeproj + +# Appuyez sur Cmd + R pour lancer dans Xcode +``` + +--- + +## 📖 Guide d'utilisation + +### Configuration initiale + +1. **Lancer l'application** + L'ecran de bienvenue apparait au premier lancement + +2. **Configurer l'authentification** + - **Option 1 : Connexion via le navigateur (recommande)** + - Cliquez sur le bouton « Connexion via le navigateur » + - Connectez-vous a votre compte Claude dans le navigateur integre + - La Session Key sera extraite automatiquement apres la connexion + - **Option 2 : Saisie manuelle** + - Ouvrez votre navigateur et visitez la page d'utilisation de Claude + - Ouvrez les outils de developpement (F12 ou Cmd + Option + I) + - Allez dans l'onglet « Reseau », rechargez la page + - Trouvez la requete `usage`, extrayez `sessionKey=sk-ant-...` depuis le Cookie + - Collez dans le champ de saisie + +### Utilisation quotidienne + +- **Affichage par defaut** - L'icone de la barre des menus affiche le pourcentage d'utilisation +- **Voir les details** - Cliquez sur l'icone de la barre des menus +- **Actualisation manuelle** - Cliquez sur le bouton d'actualisation ou utilisez le raccourci ⌘R +- **Changer de compte** - Menu « … » dans la fenetre de detail ou clic droit sur l'icone +- **Raccourcis clavier** + - ⌘R - Actualiser les donnees + - ⌘, - Ouvrir les reglages generaux + - ⌘⇧A - Ouvrir les reglages d'authentification + - ⌘Q - Quitter l'application + +--- + +## ❓ FAQ + +
+Q : Que faire si l'application affiche « Session expiree » ? + +R : Les Session Keys expirent periodiquement (generalement des semaines a des mois), il faut en obtenir une nouvelle : +1. Ouvrez Reglages → Authentification +2. Cliquez sur « Connexion via le navigateur » (recommande), ou obtenez manuellement une nouvelle Session Key +3. C'est fait, la surveillance reprendra + +
+ +
+Q : Comment activer le lancement automatique au demarrage ? + +R : Deux methodes : + +**Methode 1 : Option integree (recommande)** +1. Ouvrez Reglages → General +2. Cochez « Demarrer automatiquement a la connexion » + +**Methode 2 : Via les Reglages Systeme** +1. Ouvrez Reglages Systeme → General → Ouverture +2. Cliquez sur « + » pour ajouter Usage4Claude + +
+ +
+Q : Combien de ressources systeme sont utilisees ? + +R : Tres leger : +- Utilisation CPU : < 0,1 % (au repos) +- Memoire : ~20 Mo +- Reseau : Seulement 1 requete par minute + +
+ +
+Q : Quelles versions de macOS sont supportees ? + +R : Necessite macOS 13.0 (Ventura) ou ulterieur. Supporte les puces Intel et Apple Silicon (M1/M2/M3). + +
+ +
+Q : Pourquoi l'application demande-t-elle l'acces au trousseau ? + +R : +- Le trousseau est le gestionnaire de mots de passe au niveau systeme de macOS +- Votre Session Key est chiffree dans le trousseau +- L'Organization ID est stocke dans la configuration locale (identifiant non sensible) +- C'est la methode de stockage securise recommandee par Apple +- Seule cette application peut acceder aux informations, les autres applications ne peuvent pas les consulter + +
+ +
+Q : Mes donnees sont-elles en securite ? Comment la confidentialite est-elle protegee ? + +**Entierement securise !** + +**Stockage des donnees :** +- Toutes les donnees sont stockees **uniquement** sur votre Mac local +- Aucune collecte, aucun suivi, aucune statistique +- Aucune requete reseau en dehors des appels a l'API Claude +- Aucun service tiers utilise + +**Securite de l'authentification :** +- Session Key chiffree via le trousseau macOS (chiffrement au niveau systeme) +- Le trousseau utilise le chiffrement AES-256 + protection materielle (T2 / Secure Enclave) +- Seule cette application peut acceder a vos identifiants +- Vous pouvez revoquer l'acces a tout moment via l'application « Trousseaux d'acces » + +**Transparence du code :** +- 100 % open source +- Pas d'obfuscation ni de fonctionnalites cachees +- La communaute peut auditer et verifier + +
+ +
+Q : L'application fonctionne-t-elle avec Claude Code / l'app de bureau / l'app mobile ? + +R : **Oui, elle fonctionne avec toutes les plateformes Claude !** + +Puisque tous les produits Claude (Web, Claude Code, Application de bureau, Application mobile, Cowork) partagent le meme quota d'utilisation, Usage4Claude surveille votre utilisation combinee sur toutes les plateformes. + +
+ +--- + +## 📄 Licence + +Ce projet est sous licence MIT - voir le fichier [LICENSE](../LICENSE) pour plus de details + +--- + +## 📞 Contact + +- **Issues** : [Soumettre un probleme ou une suggestion](https://github.com/f-is-h/Usage4Claude/issues) +- **Discussions** : [Rejoindre les discussions](https://github.com/f-is-h/Usage4Claude/discussions) +- **GitHub** : [@f-is-h](https://github.com/f-is-h) + +--- + +## ⚖️ Avertissement + +Ce projet est un outil tiers independant sans affiliation officielle avec Anthropic ou Claude AI. Veuillez respecter les conditions d'utilisation de Claude AI lors de l'utilisation de ce logiciel. + +--- + +
+ +**Si ce projet vous aide, n'hesitez pas a lui donner une ⭐ Star !** + +Fait avec ❤️ par [f-is-h](https://github.com/f-is-h) + +[⬆ Retour en haut](#usage4claude) + +
diff --git a/docs/README.ja.md b/docs/README.ja.md index bd55466..c0ae51b 100644 --- a/docs/README.ja.md +++ b/docs/README.ja.md @@ -1,6 +1,6 @@ # Usage4Claude -[English](../README.md) | [日本語](README.ja.md) | [简体中文](README.zh-CN.md) | [繁體中文](README.zh-TW.md) | [한국어](README.ko.md) +[English](../README.md) | [日本語](README.ja.md) | [简体中文](README.zh-CN.md) | [繁體中文](README.zh-TW.md) | [한국어](README.ko.md) | [Français](README.fr.md)
diff --git a/docs/README.ko.md b/docs/README.ko.md index 200c92e..791859a 100644 --- a/docs/README.ko.md +++ b/docs/README.ko.md @@ -1,6 +1,6 @@ # Usage4Claude -[English](../README.md) | [日本語](README.ja.md) | [简体中文](README.zh-CN.md) | [繁體中文](README.zh-TW.md) | [한국어](README.ko.md) +[English](../README.md) | [日本語](README.ja.md) | [简体中文](README.zh-CN.md) | [繁體中文](README.zh-TW.md) | [한국어](README.ko.md) | [Français](README.fr.md)
diff --git a/docs/README.zh-CN.md b/docs/README.zh-CN.md index bfcd97e..6f91650 100644 --- a/docs/README.zh-CN.md +++ b/docs/README.zh-CN.md @@ -1,6 +1,6 @@ # Usage4Claude -[English](../README.md) | [日本語](README.ja.md) | [简体中文](README.zh-CN.md) | [繁體中文](README.zh-TW.md) | [한국어](README.ko.md) +[English](../README.md) | [日本語](README.ja.md) | [简体中文](README.zh-CN.md) | [繁體中文](README.zh-TW.md) | [한국어](README.ko.md) | [Français](README.fr.md)
diff --git a/docs/README.zh-TW.md b/docs/README.zh-TW.md index 5511ae6..7903e8e 100644 --- a/docs/README.zh-TW.md +++ b/docs/README.zh-TW.md @@ -1,6 +1,6 @@ # Usage4Claude -[English](../README.md) | [日本語](README.ja.md) | [简体中文](README.zh-CN.md) | [繁體中文](README.zh-TW.md) | [한국어](README.ko.md) +[English](../README.md) | [日本語](README.ja.md) | [简体中文](README.zh-CN.md) | [繁體中文](README.zh-TW.md) | [한국어](README.ko.md) | [Français](README.fr.md)