Skip to content

Commit 3bc9be4

Browse files
committed
v1.3.3
feat: add Traditional Chinese localisation - Thanks to @owovouo for the translation work in PR #13
1 parent b0fcd92 commit 3bc9be4

5 files changed

Lines changed: 71 additions & 6 deletions

File tree

Cargo.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "claude-code-usage-monitor"
3-
version = "1.3.2"
3+
version = "1.3.3"
44
edition = "2021"
55
license = "MIT"
66
description = "Claude Code Usage Monitor"

src/localization/mod.rs

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ mod german;
44
mod japanese;
55
mod korean;
66
mod spanish;
7+
mod traditional_chinese;
78

89
use windows::core::PWSTR;
910
use windows::Win32::Globalization::{
@@ -19,16 +20,18 @@ pub enum LanguageId {
1920
German,
2021
Japanese,
2122
Korean,
23+
TraditionalChinese,
2224
}
2325

2426
impl LanguageId {
25-
pub const ALL: [LanguageId; 6] = [
27+
pub const ALL: [LanguageId; 7] = [
2628
LanguageId::English,
2729
LanguageId::Spanish,
2830
LanguageId::French,
2931
LanguageId::German,
3032
LanguageId::Japanese,
3133
LanguageId::Korean,
34+
LanguageId::TraditionalChinese,
3235
];
3336

3437
pub fn code(self) -> &'static str {
@@ -39,6 +42,7 @@ impl LanguageId {
3942
Self::German => "de",
4043
Self::Japanese => "ja",
4144
Self::Korean => "ko",
45+
Self::TraditionalChinese => "zh-TW",
4246
}
4347
}
4448

@@ -50,6 +54,7 @@ impl LanguageId {
5054
Self::German => "Deutsch",
5155
Self::Japanese => "日本語",
5256
Self::Korean => "한국어",
57+
Self::TraditionalChinese => "繁體中文",
5358
}
5459
}
5560

@@ -61,6 +66,7 @@ impl LanguageId {
6166
Self::German => german::STRINGS,
6267
Self::Japanese => japanese::STRINGS,
6368
Self::Korean => korean::STRINGS,
69+
Self::TraditionalChinese => traditional_chinese::STRINGS,
6470
}
6571
}
6672

@@ -72,6 +78,7 @@ impl LanguageId {
7278
Self::German => german::UPDATE_VIA_WINGET_LABEL,
7379
Self::Japanese => japanese::UPDATE_VIA_WINGET_LABEL,
7480
Self::Korean => korean::UPDATE_VIA_WINGET_LABEL,
81+
Self::TraditionalChinese => traditional_chinese::UPDATE_VIA_WINGET_LABEL,
7582
}
7683
}
7784

@@ -81,13 +88,24 @@ impl LanguageId {
8188
return None;
8289
}
8390

84-
match normalized.split('-').next().unwrap_or_default() {
91+
let prefix = normalized.split('-').next().unwrap_or_default();
92+
match prefix {
8593
"en" => Some(Self::English),
8694
"es" => Some(Self::Spanish),
8795
"fr" => Some(Self::French),
8896
"de" => Some(Self::German),
8997
"ja" => Some(Self::Japanese),
9098
"ko" => Some(Self::Korean),
99+
"zh" => {
100+
if normalized.contains("tw")
101+
|| normalized.contains("hk")
102+
|| normalized.contains("hant")
103+
{
104+
Some(Self::TraditionalChinese)
105+
} else {
106+
None
107+
}
108+
}
91109
_ => None,
92110
}
93111
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
use super::Strings;
2+
3+
pub(super) const UPDATE_VIA_WINGET_LABEL: &str = "透過 WinGet 更新";
4+
5+
pub(super) const STRINGS: Strings = Strings {
6+
window_title: "Claude Code 使用量監控",
7+
refresh: "重新整理",
8+
update_frequency: "更新頻率",
9+
one_minute: "1 分鐘",
10+
five_minutes: "5 分鐘",
11+
fifteen_minutes: "15 分鐘",
12+
one_hour: "1 小時",
13+
settings: "設定",
14+
start_with_windows: "開機時啟動",
15+
reset_position: "重置位置",
16+
language: "語言",
17+
system_default: "系統預設",
18+
check_for_updates: "檢查更新",
19+
checking_for_updates: "正在檢查更新...",
20+
updates: "更新",
21+
update_in_progress: "已有更新檢查正在進行中。",
22+
up_to_date: "您已使用最新版本。",
23+
up_to_date_short: "已是最新",
24+
update_failed: "無法自動更新",
25+
applying_update: "正在套用更新...",
26+
update_to: "更新至",
27+
update_available: "有可用更新",
28+
update_prompt_now: "版本 {version} 已可用。是否立即更新?",
29+
exit: "結束",
30+
show_widget: "顯示小工具",
31+
session_window: "5h",
32+
weekly_window: "7d",
33+
now: "現在",
34+
day_suffix: "天",
35+
hour_suffix: "時",
36+
minute_suffix: "分",
37+
second_suffix: "秒",
38+
};

src/window.rs

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,7 @@ const IDM_LANG_FRENCH: u16 = 43;
107107
const IDM_LANG_GERMAN: u16 = 44;
108108
const IDM_LANG_JAPANESE: u16 = 45;
109109
const IDM_LANG_KOREAN: u16 = 46;
110+
const IDM_LANG_TRADITIONAL_CHINESE: u16 = 47;
110111

111112
const DIVIDER_HIT_ZONE: i32 = 13; // LEFT_DIVIDER_W + DIVIDER_RIGHT_MARGIN
112113

@@ -1821,8 +1822,14 @@ unsafe extern "system" fn wnd_proc(
18211822
// Reset the poll timer with the new interval
18221823
SetTimer(hwnd, TIMER_POLL, new_interval, None);
18231824
}
1824-
IDM_LANG_SYSTEM | IDM_LANG_ENGLISH | IDM_LANG_SPANISH | IDM_LANG_FRENCH
1825-
| IDM_LANG_GERMAN | IDM_LANG_JAPANESE | IDM_LANG_KOREAN => {
1825+
IDM_LANG_SYSTEM
1826+
| IDM_LANG_ENGLISH
1827+
| IDM_LANG_SPANISH
1828+
| IDM_LANG_FRENCH
1829+
| IDM_LANG_GERMAN
1830+
| IDM_LANG_JAPANESE
1831+
| IDM_LANG_KOREAN
1832+
| IDM_LANG_TRADITIONAL_CHINESE => {
18261833
let language_override = match id {
18271834
IDM_LANG_SYSTEM => None,
18281835
IDM_LANG_ENGLISH => Some(LanguageId::English),
@@ -1831,6 +1838,7 @@ unsafe extern "system" fn wnd_proc(
18311838
IDM_LANG_GERMAN => Some(LanguageId::German),
18321839
IDM_LANG_JAPANESE => Some(LanguageId::Japanese),
18331840
IDM_LANG_KOREAN => Some(LanguageId::Korean),
1841+
IDM_LANG_TRADITIONAL_CHINESE => Some(LanguageId::TraditionalChinese),
18341842
_ => None,
18351843
};
18361844
{
@@ -1998,6 +2006,7 @@ fn show_context_menu(hwnd: HWND) {
19982006
LanguageId::German => IDM_LANG_GERMAN,
19992007
LanguageId::Japanese => IDM_LANG_JAPANESE,
20002008
LanguageId::Korean => IDM_LANG_KOREAN,
2009+
LanguageId::TraditionalChinese => IDM_LANG_TRADITIONAL_CHINESE,
20012010
};
20022011
let label_str = native_interop::wide_str(language.native_name());
20032012
let flags = if language_override == Some(language) {

0 commit comments

Comments
 (0)