diff --git a/.gitignore b/.gitignore index 0475229..2d0c3ba 100644 --- a/.gitignore +++ b/.gitignore @@ -10,6 +10,7 @@ # IDE .idea/ .vscode/ +.history/ *.swp *.swo *~ diff --git a/Cargo.lock b/Cargo.lock index 6ac3321..b4bef3d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -38,7 +38,7 @@ checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" [[package]] name = "claude-code-usage-monitor" -version = "1.4.1" +version = "1.4.3" dependencies = [ "dirs", "native-tls", diff --git a/Cargo.toml b/Cargo.toml index f89b125..2c2ac9f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "claude-code-usage-monitor" -version = "1.4.1" +version = "1.4.3" edition = "2021" license = "MIT" description = "Claude Code Usage Monitor" diff --git a/src/localization/mod.rs b/src/localization/mod.rs index 3b7f577..39ee702 100644 --- a/src/localization/mod.rs +++ b/src/localization/mod.rs @@ -7,6 +7,7 @@ mod korean; mod spanish; mod traditional_chinese; mod russian; +mod portuguese_brazil; use windows::core::PWSTR; use windows::Win32::Globalization::{ @@ -25,10 +26,11 @@ pub enum LanguageId { Korean, TraditionalChinese, Russian, + PortugueseBrazil, } impl LanguageId { - pub const ALL: [LanguageId; 9] = [ + pub const ALL: [LanguageId; 10] = [ LanguageId::English, LanguageId::Dutch, LanguageId::Spanish, @@ -38,6 +40,7 @@ impl LanguageId { LanguageId::Korean, LanguageId::TraditionalChinese, LanguageId::Russian, + LanguageId::PortugueseBrazil, ]; pub fn code(self) -> &'static str { @@ -51,6 +54,7 @@ impl LanguageId { Self::Korean => "ko", Self::TraditionalChinese => "zh-TW", Self::Russian => "ru", + Self::PortugueseBrazil => "pt-BR", } } @@ -65,6 +69,7 @@ impl LanguageId { Self::Korean => "한국어", Self::TraditionalChinese => "繁體中文", Self::Russian => "Русский", + Self::PortugueseBrazil => "Português (Brasil)", } } @@ -79,6 +84,7 @@ impl LanguageId { Self::Korean => korean::STRINGS, Self::TraditionalChinese => traditional_chinese::STRINGS, Self::Russian => russian::STRINGS, + Self::PortugueseBrazil => portuguese_brazil::STRINGS, } } @@ -93,6 +99,7 @@ impl LanguageId { Self::Korean => korean::UPDATE_VIA_WINGET_LABEL, Self::TraditionalChinese => traditional_chinese::UPDATE_VIA_WINGET_LABEL, Self::Russian => russian::UPDATE_VIA_WINGET_LABEL, + Self::PortugueseBrazil => portuguese_brazil::UPDATE_VIA_WINGET_LABEL, } } @@ -120,8 +127,9 @@ impl LanguageId { } else { None } - }, + } "ru" => Some(Self::Russian), + "pt" => Some(Self::PortugueseBrazil), _ => None, } } diff --git a/src/localization/portuguese_brazil.rs b/src/localization/portuguese_brazil.rs new file mode 100644 index 0000000..691ee77 --- /dev/null +++ b/src/localization/portuguese_brazil.rs @@ -0,0 +1,46 @@ +use super::Strings; + +pub(super) const UPDATE_VIA_WINGET_LABEL: &str = "Atualizar via WinGet"; + +pub(super) const STRINGS: Strings = Strings { + window_title: "Monitor de Uso do Claude Code", + refresh: "Atualizar", + update_frequency: "Frequência de Atualização", + one_minute: "1 Minuto", + five_minutes: "5 Minutos", + fifteen_minutes: "15 Minutos", + one_hour: "1 Hora", + models: "Modelos", + claude_code_model: "Claude Code", + codex_model: "Codex", + settings: "Configurações", + start_with_windows: "Iniciar com o Windows", + reset_position: "Redefinir Posição", + language: "Idioma", + system_default: "Padrão do Sistema", + check_for_updates: "Busca atualizações", + checking_for_updates: "Buscando por atualizações...", + updates: "Atualizações", + update_in_progress: "Uma verificação de atualização já está em andamento.", + up_to_date: "Você já tem a versão mais recente.", + up_to_date_short: "Atualizado", + update_failed: "Não foi possível atualizar automaticamente", + applying_update: "Aplicando atualização...", + update_to: "Atualizar para", + update_available: "Atualização disponível", + update_prompt_now: "Versão {version} está disponível. Deseja atualizar agora?", + exit: "Sair", + show_widget: "Exibir Widget", + session_window: "5h", + weekly_window: "7d", + now: "agora", + day_suffix: "d", + hour_suffix: "h", + minute_suffix: "m", + second_suffix: "s", + token_expired_title: "Erro de Autenticação do Claude Code", + token_expired_body: "Execute 'claude' em um terminal, use '/login' e siga as instruções. Depois disso, atualize ou reinicie este aplicativo.", + codex_token_expired_title: "Erro de Autenticação do Codex", + codex_token_expired_body: "Execute 'codex' em um terminal e siga as instruções de login. Depois disso, atualize ou reinicie este aplicativo.", + codex_window_title: "Monitor de uso do Codex", +}; diff --git a/src/localization/russian.rs b/src/localization/russian.rs index 6a445b8..786d0fa 100644 --- a/src/localization/russian.rs +++ b/src/localization/russian.rs @@ -37,10 +37,10 @@ pub(super) const STRINGS: Strings = Strings { day_suffix: "д", hour_suffix: "ч", minute_suffix: "м", + second_suffix: "с", token_expired_title: "Ошибка авторизации Claude Code", token_expired_body: "Запустите 'claude' в терминале, затем используйте '/login' и следуйте инструкциям. После этого обновите или перезапустите приложение.", codex_token_expired_title: "Ошибка авторизации Codex", codex_token_expired_body: "Запустите 'codex' в терминале и следуйте инструкциям для входа. После этого обновите или перезапустите приложение.", codex_window_title: "Монитор использования Codex", - second_suffix: "с", }; \ No newline at end of file diff --git a/src/window.rs b/src/window.rs index 51d0845..8f6bd86 100644 --- a/src/window.rs +++ b/src/window.rs @@ -120,6 +120,7 @@ const IDM_LANG_JAPANESE: u16 = 46; const IDM_LANG_KOREAN: u16 = 47; const IDM_LANG_TRADITIONAL_CHINESE: u16 = 48; const IDM_LANG_RUSSIAN: u16 = 49; +const IDM_LANG_PORTUGUESE_BRAZIL: u16 = 50; const IDM_MODEL_CLAUDE_CODE: u16 = 60; const IDM_MODEL_CODEX: u16 = 61; @@ -2268,7 +2269,9 @@ unsafe extern "system" fn wnd_proc( | IDM_LANG_GERMAN | IDM_LANG_JAPANESE | IDM_LANG_KOREAN - | IDM_LANG_TRADITIONAL_CHINESE => { + | IDM_LANG_TRADITIONAL_CHINESE + | IDM_LANG_RUSSIAN + | IDM_LANG_PORTUGUESE_BRAZIL => { let language_override = match id { IDM_LANG_SYSTEM => None, IDM_LANG_ENGLISH => Some(LanguageId::English), @@ -2279,6 +2282,8 @@ unsafe extern "system" fn wnd_proc( IDM_LANG_JAPANESE => Some(LanguageId::Japanese), IDM_LANG_KOREAN => Some(LanguageId::Korean), IDM_LANG_TRADITIONAL_CHINESE => Some(LanguageId::TraditionalChinese), + IDM_LANG_RUSSIAN => Some(LanguageId::Russian), + IDM_LANG_PORTUGUESE_BRAZIL => Some(LanguageId::PortugueseBrazil), _ => None, }; { @@ -2490,7 +2495,8 @@ fn show_context_menu(hwnd: HWND) { LanguageId::Japanese => IDM_LANG_JAPANESE, LanguageId::Korean => IDM_LANG_KOREAN, LanguageId::TraditionalChinese => IDM_LANG_TRADITIONAL_CHINESE, - LanguageId::Russian => IDM_LANG_RUSSIAN + LanguageId::Russian => IDM_LANG_RUSSIAN, + LanguageId::PortugueseBrazil => IDM_LANG_PORTUGUESE_BRAZIL, }; let label_str = native_interop::wide_str(language.native_name()); let flags = if language_override == Some(language) {