Skip to content

Commit 198d8b3

Browse files
author
itsdodobitch
committed
Improve Usage localization coverage
1 parent d7673d4 commit 198d8b3

5 files changed

Lines changed: 225 additions & 26 deletions

File tree

Sources/HermesDesktop/Resources/en.lproj/Localizable.strings

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,3 +142,64 @@
142142
"Selected profile home" = "Selected profile home";
143143
"Sessions/Usage source" = "Sessions/Usage source";
144144
"Target" = "Target";
145+
"The main cards and charts on this page are for the active Hermes profile. When more than one profile is discovered on the same host, a separate panel shows total token consumption across all profiles." = "The main cards and charts on this page are for the active Hermes profile. When more than one profile is discovered on the same host, a separate panel shows total token consumption across all profiles.";
146+
"Loading usage totals…" = "Loading usage totals…";
147+
"Unable to load usage" = "Unable to load usage";
148+
"Usage unavailable" = "Usage unavailable";
149+
"No readable Hermes session database is currently available for the active host." = "No readable Hermes session database is currently available for the active host.";
150+
"Input Tokens" = "Input Tokens";
151+
"Output Tokens" = "Output Tokens";
152+
"Active Profile" = "Active Profile";
153+
"Everything below stays scoped to the currently selected Hermes profile." = "Everything below stays scoped to the currently selected Hermes profile.";
154+
"Current Total" = "Current Total";
155+
"All Profiles Total Tokens" = "All Profiles Total Tokens";
156+
"This panel is host-wide. It combines total token consumption across all readable Hermes profiles on the active host, including input, output, cache, and reasoning. The other cards on this page remain scoped to the active profile." = "This panel is host-wide. It combines total token consumption across all readable Hermes profiles on the active host, including input, output, cache, and reasoning. The other cards on this page remain scoped to the active profile.";
157+
"Not enough profile data yet" = "Not enough profile data yet";
158+
"At least two profiles need readable usage data before the cross-profile breakdown becomes meaningful." = "At least two profiles need readable usage data before the cross-profile breakdown becomes meaningful.";
159+
"Unavailable profiles are excluded from the donut: %@." = "Unavailable profiles are excluded from the donut: %@.";
160+
"Readable Profiles" = "Readable Profiles";
161+
"Host-wide Total" = "Host-wide Total";
162+
"Active Profile Share" = "Active Profile Share";
163+
"Active Profile Totals" = "Active Profile Totals";
164+
"A compact summary of stored session usage for the currently selected Hermes profile." = "A compact summary of stored session usage for the currently selected Hermes profile.";
165+
"Stored Sessions" = "Stored Sessions";
166+
"Total Tokens" = "Total Tokens";
167+
"Avg. per Session" = "Avg. per Session";
168+
"Input vs Output" = "Input vs Output";
169+
"The visual balance between stored input and output token consumption." = "The visual balance between stored input and output token consumption.";
170+
"Input" = "Input";
171+
"Output" = "Output";
172+
"Top 5 Sessions by Tokens" = "Top 5 Sessions by Tokens";
173+
"The stored sessions with the highest combined token consumption." = "The stored sessions with the highest combined token consumption.";
174+
"No session usage yet" = "No session usage yet";
175+
"No additional session yet" = "No additional session yet";
176+
"Top 5 Models by Tokens" = "Top 5 Models by Tokens";
177+
"Ranked by input/output tokens. Cache and reasoning stay secondary." = "Ranked by input/output tokens. Cache and reasoning stay secondary.";
178+
"No model usage yet" = "No model usage yet";
179+
"No additional model yet" = "No additional model yet";
180+
"Recent Session History" = "Recent Session History";
181+
"The last 100 stored sessions, shown as token consumption over time." = "The last 100 stored sessions, shown as token consumption over time.";
182+
"No recent sessions available" = "No recent sessions available";
183+
"Recent session usage will appear here once Hermes has stored session data." = "Recent session usage will appear here once Hermes has stored session data.";
184+
"Session" = "Session";
185+
"Tokens" = "Tokens";
186+
"%@ total tokens" = "%@ total tokens";
187+
"Recent sessions" = "Recent sessions";
188+
"Lower" = "Lower";
189+
"Medium" = "Medium";
190+
"Higher" = "Higher";
191+
"Model data unavailable" = "Model data unavailable";
192+
"No tracked models yet" = "No tracked models yet";
193+
"No stored sessions yet" = "No stored sessions yet";
194+
"No ranked sessions available" = "No ranked sessions available";
195+
"All Tokens" = "All Tokens";
196+
"all profiles total" = "all profiles total";
197+
"Input %@" = "Input %@";
198+
"Output %@" = "Output %@";
199+
"Cache %@" = "Cache %@";
200+
"Reasoning %@" = "Reasoning %@";
201+
"tokens" = "tokens";
202+
"+%@ cache/reasoning" = "+%@ cache/reasoning";
203+
"%@ sessions" = "%@ sessions";
204+
"tokens · %@" = "tokens · %@";
205+
"tokens · -" = "tokens · -";

Sources/HermesDesktop/Resources/ru.lproj/Localizable.strings

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,3 +142,64 @@
142142
"Selected profile home" = "Домашняя папка выбранного профиля";
143143
"Sessions/Usage source" = "Источник сеансов/использования";
144144
"Target" = "Цель";
145+
"The main cards and charts on this page are for the active Hermes profile. When more than one profile is discovered on the same host, a separate panel shows total token consumption across all profiles." = "Основные карточки и графики на этой странице относятся к активному профилю Hermes. Если на том же хосте найдено несколько профилей, отдельная панель показывает общий расход токенов по всем профилям.";
146+
"Loading usage totals…" = "Загрузка итогов использования…";
147+
"Unable to load usage" = "Не удалось загрузить использование";
148+
"Usage unavailable" = "Использование недоступно";
149+
"No readable Hermes session database is currently available for the active host." = "Для активного хоста сейчас нет читаемой базы сеансов Hermes.";
150+
"Input Tokens" = "Входные токены";
151+
"Output Tokens" = "Выходные токены";
152+
"Active Profile" = "Активный профиль";
153+
"Everything below stays scoped to the currently selected Hermes profile." = "Все ниже относится к текущему выбранному профилю Hermes.";
154+
"Current Total" = "Текущий итог";
155+
"All Profiles Total Tokens" = "Токены по всем профилям";
156+
"This panel is host-wide. It combines total token consumption across all readable Hermes profiles on the active host, including input, output, cache, and reasoning. The other cards on this page remain scoped to the active profile." = "Эта панель относится ко всему хосту. Она суммирует расход токенов по всем читаемым профилям Hermes на активном хосте, включая ввод, вывод, кэш и reasoning. Остальные карточки на странице остаются в рамках активного профиля.";
157+
"Not enough profile data yet" = "Пока недостаточно данных профилей";
158+
"At least two profiles need readable usage data before the cross-profile breakdown becomes meaningful." = "Нужны читаемые данные использования хотя бы по двум профилям, чтобы разбивка по профилям была полезной.";
159+
"Unavailable profiles are excluded from the donut: %@." = "Недоступные профили исключены из диаграммы: %@.";
160+
"Readable Profiles" = "Читаемые профили";
161+
"Host-wide Total" = "Итого по хосту";
162+
"Active Profile Share" = "Доля активного профиля";
163+
"Active Profile Totals" = "Итоги активного профиля";
164+
"A compact summary of stored session usage for the currently selected Hermes profile." = "Краткая сводка использования сохраненных сеансов для текущего выбранного профиля Hermes.";
165+
"Stored Sessions" = "Сохраненные сеансы";
166+
"Total Tokens" = "Всего токенов";
167+
"Avg. per Session" = "Среднее на сеанс";
168+
"Input vs Output" = "Ввод и вывод";
169+
"The visual balance between stored input and output token consumption." = "Визуальное соотношение сохраненного расхода входных и выходных токенов.";
170+
"Input" = "Ввод";
171+
"Output" = "Вывод";
172+
"Top 5 Sessions by Tokens" = "Топ-5 сеансов по токенам";
173+
"The stored sessions with the highest combined token consumption." = "Сохраненные сеансы с самым высоким суммарным расходом токенов.";
174+
"No session usage yet" = "Пока нет использования сеансов";
175+
"No additional session yet" = "Дополнительных сеансов пока нет";
176+
"Top 5 Models by Tokens" = "Топ-5 моделей по токенам";
177+
"Ranked by input/output tokens. Cache and reasoning stay secondary." = "Рейтинг по входным/выходным токенам. Кэш и reasoning остаются вторичными.";
178+
"No model usage yet" = "Пока нет использования моделей";
179+
"No additional model yet" = "Дополнительных моделей пока нет";
180+
"Recent Session History" = "История недавних сеансов";
181+
"The last 100 stored sessions, shown as token consumption over time." = "Последние 100 сохраненных сеансов с расходом токенов по времени.";
182+
"No recent sessions available" = "Недавние сеансы недоступны";
183+
"Recent session usage will appear here once Hermes has stored session data." = "Использование недавних сеансов появится здесь, когда Hermes сохранит данные сеансов.";
184+
"Session" = "Сеанс";
185+
"Tokens" = "Токены";
186+
"%@ total tokens" = "%@ токенов всего";
187+
"Recent sessions" = "Недавние сеансы";
188+
"Lower" = "Ниже";
189+
"Medium" = "Средне";
190+
"Higher" = "Выше";
191+
"Model data unavailable" = "Данные модели недоступны";
192+
"No tracked models yet" = "Отслеживаемых моделей пока нет";
193+
"No stored sessions yet" = "Сохраненных сеансов пока нет";
194+
"No ranked sessions available" = "Сеансы для рейтинга недоступны";
195+
"All Tokens" = "Все токены";
196+
"all profiles total" = "итого по всем профилям";
197+
"Input %@" = "Ввод %@";
198+
"Output %@" = "Вывод %@";
199+
"Cache %@" = "Кэш %@";
200+
"Reasoning %@" = "Reasoning %@";
201+
"tokens" = "токены";
202+
"+%@ cache/reasoning" = "+%@ кэш/reasoning";
203+
"%@ sessions" = "%@ сеансов";
204+
"tokens · %@" = "токены · %@";
205+
"tokens · -" = "токены · -";

Sources/HermesDesktop/Resources/zh-Hans.lproj/Localizable.strings

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,3 +142,64 @@
142142
"Selected profile home" = "所选配置主目录";
143143
"Sessions/Usage source" = "会话/用量来源";
144144
"Target" = "目标";
145+
"The main cards and charts on this page are for the active Hermes profile. When more than one profile is discovered on the same host, a separate panel shows total token consumption across all profiles." = "此页面的主要卡片和图表针对当前 Hermes 配置。若同一主机上发现多个配置,单独面板会显示所有配置的 token 消耗总量。";
146+
"Loading usage totals…" = "正在加载用量总计…";
147+
"Unable to load usage" = "无法加载用量";
148+
"Usage unavailable" = "用量不可用";
149+
"No readable Hermes session database is currently available for the active host." = "当前主机暂无可读取的 Hermes 会话数据库。";
150+
"Input Tokens" = "输入 Tokens";
151+
"Output Tokens" = "输出 Tokens";
152+
"Active Profile" = "当前配置";
153+
"Everything below stays scoped to the currently selected Hermes profile." = "下方所有内容都限定在当前选择的 Hermes 配置内。";
154+
"Current Total" = "当前总计";
155+
"All Profiles Total Tokens" = "所有配置 Token 总量";
156+
"This panel is host-wide. It combines total token consumption across all readable Hermes profiles on the active host, including input, output, cache, and reasoning. The other cards on this page remain scoped to the active profile." = "此面板为主机范围统计,汇总当前主机上所有可读取 Hermes 配置的 token 消耗,包括输入、输出、缓存和推理。本页其他卡片仍限定在当前配置内。";
157+
"Not enough profile data yet" = "配置数据还不够";
158+
"At least two profiles need readable usage data before the cross-profile breakdown becomes meaningful." = "至少需要两个配置具有可读取的用量数据,跨配置拆分才有意义。";
159+
"Unavailable profiles are excluded from the donut: %@." = "不可用的配置已从环形图中排除:%@。";
160+
"Readable Profiles" = "可读取配置";
161+
"Host-wide Total" = "主机总计";
162+
"Active Profile Share" = "当前配置占比";
163+
"Active Profile Totals" = "当前配置总计";
164+
"A compact summary of stored session usage for the currently selected Hermes profile." = "当前所选 Hermes 配置已存储会话用量的简要汇总。";
165+
"Stored Sessions" = "已存储会话";
166+
"Total Tokens" = "Token 总量";
167+
"Avg. per Session" = "每会话平均";
168+
"Input vs Output" = "输入与输出";
169+
"The visual balance between stored input and output token consumption." = "已存储输入与输出 token 消耗的可视化对比。";
170+
"Input" = "输入";
171+
"Output" = "输出";
172+
"Top 5 Sessions by Tokens" = "Token 用量最高的 5 个会话";
173+
"The stored sessions with the highest combined token consumption." = "综合 token 消耗最高的已存储会话。";
174+
"No session usage yet" = "暂无会话用量";
175+
"No additional session yet" = "暂无更多会话";
176+
"Top 5 Models by Tokens" = "Token 用量最高的 5 个模型";
177+
"Ranked by input/output tokens. Cache and reasoning stay secondary." = "按输入/输出 token 排名,缓存和推理作为辅助信息。";
178+
"No model usage yet" = "暂无模型用量";
179+
"No additional model yet" = "暂无更多模型";
180+
"Recent Session History" = "最近会话历史";
181+
"The last 100 stored sessions, shown as token consumption over time." = "最近 100 个已存储会话,按时间显示 token 消耗。";
182+
"No recent sessions available" = "暂无最近会话";
183+
"Recent session usage will appear here once Hermes has stored session data." = "Hermes 存储会话数据后,最近会话用量会显示在这里。";
184+
"Session" = "会话";
185+
"Tokens" = "Tokens";
186+
"%@ total tokens" = "总计 %@ tokens";
187+
"Recent sessions" = "最近会话";
188+
"Lower" = "较低";
189+
"Medium" = "中等";
190+
"Higher" = "较高";
191+
"Model data unavailable" = "模型数据不可用";
192+
"No tracked models yet" = "暂无跟踪的模型";
193+
"No stored sessions yet" = "暂无已存储会话";
194+
"No ranked sessions available" = "暂无可排名会话";
195+
"All Tokens" = "所有 Tokens";
196+
"all profiles total" = "所有配置总计";
197+
"Input %@" = "输入 %@";
198+
"Output %@" = "输出 %@";
199+
"Cache %@" = "缓存 %@";
200+
"Reasoning %@" = "推理 %@";
201+
"tokens" = "tokens";
202+
"+%@ cache/reasoning" = "+%@ 缓存/推理";
203+
"%@ sessions" = "%@ 个会话";
204+
"tokens · %@" = "tokens · %@";
205+
"tokens · -" = "tokens · -";

Sources/HermesDesktop/Utilities/Localization.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,8 @@ enum L10n {
99

1010
return NSLocalizedString(key, bundle: .module, value: key, comment: "")
1111
}
12+
13+
static func string(_ key: String, _ arguments: CVarArg...) -> String {
14+
String(format: string(key), arguments: arguments)
15+
}
1216
}

0 commit comments

Comments
 (0)