Merge branch 'main' of github.com:st7105/Claude-Code-Usage-Monitor

This commit is contained in:
st7105 2026-06-16 11:56:55 +03:00
commit a4a28acdfc
7 changed files with 68 additions and 7 deletions

1
.gitignore vendored
View File

@ -10,6 +10,7 @@
# IDE
.idea/
.vscode/
.history/
*.swp
*.swo
*~

2
Cargo.lock generated
View File

@ -38,7 +38,7 @@ checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801"
[[package]]
name = "claude-code-usage-monitor"
version = "1.4.1"
version = "1.4.3"
dependencies = [
"dirs",
"native-tls",

View File

@ -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"

View File

@ -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,
}
}

View File

@ -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",
};

View File

@ -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: "с",
};

View File

@ -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) {