Skip to content

Commit 3a3aa30

Browse files
authored
feat(app): localize "free usage exceeded" error & "Add credits" clickable link (anomalyco#13652)
1 parent cf50a28 commit 3a3aa30

18 files changed

Lines changed: 56 additions & 1 deletion

File tree

packages/ui/src/components/session-turn.css

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -560,6 +560,12 @@
560560
overflow-y: auto;
561561
}
562562

563+
.retry-error-link,
564+
.error-card-link {
565+
color: var(--text-strong);
566+
text-decoration: underline;
567+
}
568+
563569
[data-slot="session-turn-collapsible-content-inner"] {
564570
width: 100%;
565571
min-width: 0;

packages/ui/src/components/session-turn.tsx

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -436,6 +436,11 @@ export function SessionTurn(
436436
if (s.type !== "retry") return
437437
return s
438438
})
439+
const isRetryFreeUsageLimitError = createMemo(() => {
440+
const r = retry()
441+
if (!r) return false
442+
return r.message.includes("Free usage exceeded")
443+
})
439444

440445
const response = createMemo(() => lastTextPart()?.text)
441446
const responsePartId = createMemo(() => lastTextPart()?.id)
@@ -691,10 +696,22 @@ export function SessionTurn(
691696
{(() => {
692697
const r = retry()
693698
if (!r) return ""
694-
const msg = unwrap(r.message)
699+
const msg = isRetryFreeUsageLimitError()
700+
? i18n.t("ui.sessionTurn.error.freeUsageExceeded")
701+
: unwrap(r.message)
695702
return msg.length > 60 ? msg.slice(0, 60) + "..." : msg
696703
})()}
697704
</span>
705+
<Show when={isRetryFreeUsageLimitError()}>
706+
<a
707+
href="https://opencode.ai/zen"
708+
target="_blank"
709+
class="retry-error-link"
710+
rel="noopener noreferrer"
711+
>
712+
{i18n.t("ui.sessionTurn.error.addCredits")}
713+
</a>
714+
</Show>
698715
<span data-slot="session-turn-retry-seconds">
699716
· {i18n.t("ui.sessionTurn.retry.retrying")}
700717
{store.retrySeconds > 0

packages/ui/src/i18n/ar.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ export const dict = {
2828

2929
"ui.sessionTurn.retry.retrying": "إعادة المحاولة",
3030
"ui.sessionTurn.retry.inSeconds": "خلال {{seconds}} ثواني",
31+
"ui.sessionTurn.error.freeUsageExceeded": "تم تجاوز حد الاستخدام المجاني",
32+
"ui.sessionTurn.error.addCredits": "إضافة رصيد",
3133

3234
"ui.sessionTurn.status.delegating": "تفويض العمل",
3335
"ui.sessionTurn.status.planning": "تخطيط الخطوات التالية",

packages/ui/src/i18n/br.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ export const dict = {
2828

2929
"ui.sessionTurn.retry.retrying": "tentando novamente",
3030
"ui.sessionTurn.retry.inSeconds": "em {{seconds}}s",
31+
"ui.sessionTurn.error.freeUsageExceeded": "Limite de uso gratuito excedido",
32+
"ui.sessionTurn.error.addCredits": "Adicionar créditos",
3133

3234
"ui.sessionTurn.status.delegating": "Delegando trabalho",
3335
"ui.sessionTurn.status.planning": "Planejando próximos passos",

packages/ui/src/i18n/bs.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ export const dict = {
3232

3333
"ui.sessionTurn.retry.retrying": "ponovni pokušaj",
3434
"ui.sessionTurn.retry.inSeconds": "za {{seconds}}s",
35+
"ui.sessionTurn.error.freeUsageExceeded": "Besplatna upotreba premašena",
36+
"ui.sessionTurn.error.addCredits": "Dodaj kredite",
3537

3638
"ui.sessionTurn.status.delegating": "Delegiranje posla",
3739
"ui.sessionTurn.status.planning": "Planiranje sljedećih koraka",

packages/ui/src/i18n/da.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ export const dict = {
2727

2828
"ui.sessionTurn.retry.retrying": "prøver igen",
2929
"ui.sessionTurn.retry.inSeconds": "om {{seconds}}s",
30+
"ui.sessionTurn.error.freeUsageExceeded": "Gratis forbrug overskredet",
31+
"ui.sessionTurn.error.addCredits": "Tilføj kreditter",
3032

3133
"ui.sessionTurn.status.delegating": "Delegerer arbejde",
3234
"ui.sessionTurn.status.planning": "Planlægger næste trin",

packages/ui/src/i18n/de.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ export const dict = {
3131

3232
"ui.sessionTurn.retry.retrying": "erneuter Versuch",
3333
"ui.sessionTurn.retry.inSeconds": "in {{seconds}}s",
34+
"ui.sessionTurn.error.freeUsageExceeded": "Kostenloses Nutzungslimit überschritten",
35+
"ui.sessionTurn.error.addCredits": "Guthaben aufladen",
3436

3537
"ui.sessionTurn.status.delegating": "Arbeit delegieren",
3638
"ui.sessionTurn.status.planning": "Nächste Schritte planen",

packages/ui/src/i18n/en.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ export const dict = {
2828

2929
"ui.sessionTurn.retry.retrying": "retrying",
3030
"ui.sessionTurn.retry.inSeconds": "in {{seconds}}s",
31+
"ui.sessionTurn.error.freeUsageExceeded": "Free usage exceeded",
32+
"ui.sessionTurn.error.addCredits": "Add credits",
3133

3234
"ui.sessionTurn.status.delegating": "Delegating work",
3335
"ui.sessionTurn.status.planning": "Planning next steps",

packages/ui/src/i18n/es.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ export const dict = {
2828

2929
"ui.sessionTurn.retry.retrying": "reintentando",
3030
"ui.sessionTurn.retry.inSeconds": "en {{seconds}}s",
31+
"ui.sessionTurn.error.freeUsageExceeded": "Límite de uso gratuito excedido",
32+
"ui.sessionTurn.error.addCredits": "Añadir créditos",
3133

3234
"ui.sessionTurn.status.delegating": "Delegando trabajo",
3335
"ui.sessionTurn.status.planning": "Planificando siguientes pasos",

packages/ui/src/i18n/fr.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ export const dict = {
2828

2929
"ui.sessionTurn.retry.retrying": "nouvelle tentative",
3030
"ui.sessionTurn.retry.inSeconds": "dans {{seconds}}s",
31+
"ui.sessionTurn.error.freeUsageExceeded": "Limite d'utilisation gratuite dépassée",
32+
"ui.sessionTurn.error.addCredits": "Ajouter des crédits",
3133

3234
"ui.sessionTurn.status.delegating": "Délégation du travail",
3335
"ui.sessionTurn.status.planning": "Planification des prochaines étapes",

0 commit comments

Comments
 (0)