feat(app): localize "free usage exceeded" error & "Add credits" clickable link (#13652)
This commit is contained in:
@@ -560,6 +560,12 @@
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
.retry-error-link,
|
||||
.error-card-link {
|
||||
color: var(--text-strong);
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
[data-slot="session-turn-collapsible-content-inner"] {
|
||||
width: 100%;
|
||||
min-width: 0;
|
||||
|
||||
@@ -436,6 +436,11 @@ export function SessionTurn(
|
||||
if (s.type !== "retry") return
|
||||
return s
|
||||
})
|
||||
const isRetryFreeUsageLimitError = createMemo(() => {
|
||||
const r = retry()
|
||||
if (!r) return false
|
||||
return r.message.includes("Free usage exceeded")
|
||||
})
|
||||
|
||||
const response = createMemo(() => lastTextPart()?.text)
|
||||
const responsePartId = createMemo(() => lastTextPart()?.id)
|
||||
@@ -691,10 +696,22 @@ export function SessionTurn(
|
||||
{(() => {
|
||||
const r = retry()
|
||||
if (!r) return ""
|
||||
const msg = unwrap(r.message)
|
||||
const msg = isRetryFreeUsageLimitError()
|
||||
? i18n.t("ui.sessionTurn.error.freeUsageExceeded")
|
||||
: unwrap(r.message)
|
||||
return msg.length > 60 ? msg.slice(0, 60) + "..." : msg
|
||||
})()}
|
||||
</span>
|
||||
<Show when={isRetryFreeUsageLimitError()}>
|
||||
<a
|
||||
href="https://opencode.ai/zen"
|
||||
target="_blank"
|
||||
class="retry-error-link"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
{i18n.t("ui.sessionTurn.error.addCredits")}
|
||||
</a>
|
||||
</Show>
|
||||
<span data-slot="session-turn-retry-seconds">
|
||||
· {i18n.t("ui.sessionTurn.retry.retrying")}
|
||||
{store.retrySeconds > 0
|
||||
|
||||
@@ -28,6 +28,8 @@ export const dict = {
|
||||
|
||||
"ui.sessionTurn.retry.retrying": "إعادة المحاولة",
|
||||
"ui.sessionTurn.retry.inSeconds": "خلال {{seconds}} ثواني",
|
||||
"ui.sessionTurn.error.freeUsageExceeded": "تم تجاوز حد الاستخدام المجاني",
|
||||
"ui.sessionTurn.error.addCredits": "إضافة رصيد",
|
||||
|
||||
"ui.sessionTurn.status.delegating": "تفويض العمل",
|
||||
"ui.sessionTurn.status.planning": "تخطيط الخطوات التالية",
|
||||
|
||||
@@ -28,6 +28,8 @@ export const dict = {
|
||||
|
||||
"ui.sessionTurn.retry.retrying": "tentando novamente",
|
||||
"ui.sessionTurn.retry.inSeconds": "em {{seconds}}s",
|
||||
"ui.sessionTurn.error.freeUsageExceeded": "Limite de uso gratuito excedido",
|
||||
"ui.sessionTurn.error.addCredits": "Adicionar créditos",
|
||||
|
||||
"ui.sessionTurn.status.delegating": "Delegando trabalho",
|
||||
"ui.sessionTurn.status.planning": "Planejando próximos passos",
|
||||
|
||||
@@ -32,6 +32,8 @@ export const dict = {
|
||||
|
||||
"ui.sessionTurn.retry.retrying": "ponovni pokušaj",
|
||||
"ui.sessionTurn.retry.inSeconds": "za {{seconds}}s",
|
||||
"ui.sessionTurn.error.freeUsageExceeded": "Besplatna upotreba premašena",
|
||||
"ui.sessionTurn.error.addCredits": "Dodaj kredite",
|
||||
|
||||
"ui.sessionTurn.status.delegating": "Delegiranje posla",
|
||||
"ui.sessionTurn.status.planning": "Planiranje sljedećih koraka",
|
||||
|
||||
@@ -27,6 +27,8 @@ export const dict = {
|
||||
|
||||
"ui.sessionTurn.retry.retrying": "prøver igen",
|
||||
"ui.sessionTurn.retry.inSeconds": "om {{seconds}}s",
|
||||
"ui.sessionTurn.error.freeUsageExceeded": "Gratis forbrug overskredet",
|
||||
"ui.sessionTurn.error.addCredits": "Tilføj kreditter",
|
||||
|
||||
"ui.sessionTurn.status.delegating": "Delegerer arbejde",
|
||||
"ui.sessionTurn.status.planning": "Planlægger næste trin",
|
||||
|
||||
@@ -31,6 +31,8 @@ export const dict = {
|
||||
|
||||
"ui.sessionTurn.retry.retrying": "erneuter Versuch",
|
||||
"ui.sessionTurn.retry.inSeconds": "in {{seconds}}s",
|
||||
"ui.sessionTurn.error.freeUsageExceeded": "Kostenloses Nutzungslimit überschritten",
|
||||
"ui.sessionTurn.error.addCredits": "Guthaben aufladen",
|
||||
|
||||
"ui.sessionTurn.status.delegating": "Arbeit delegieren",
|
||||
"ui.sessionTurn.status.planning": "Nächste Schritte planen",
|
||||
|
||||
@@ -28,6 +28,8 @@ export const dict = {
|
||||
|
||||
"ui.sessionTurn.retry.retrying": "retrying",
|
||||
"ui.sessionTurn.retry.inSeconds": "in {{seconds}}s",
|
||||
"ui.sessionTurn.error.freeUsageExceeded": "Free usage exceeded",
|
||||
"ui.sessionTurn.error.addCredits": "Add credits",
|
||||
|
||||
"ui.sessionTurn.status.delegating": "Delegating work",
|
||||
"ui.sessionTurn.status.planning": "Planning next steps",
|
||||
|
||||
@@ -28,6 +28,8 @@ export const dict = {
|
||||
|
||||
"ui.sessionTurn.retry.retrying": "reintentando",
|
||||
"ui.sessionTurn.retry.inSeconds": "en {{seconds}}s",
|
||||
"ui.sessionTurn.error.freeUsageExceeded": "Límite de uso gratuito excedido",
|
||||
"ui.sessionTurn.error.addCredits": "Añadir créditos",
|
||||
|
||||
"ui.sessionTurn.status.delegating": "Delegando trabajo",
|
||||
"ui.sessionTurn.status.planning": "Planificando siguientes pasos",
|
||||
|
||||
@@ -28,6 +28,8 @@ export const dict = {
|
||||
|
||||
"ui.sessionTurn.retry.retrying": "nouvelle tentative",
|
||||
"ui.sessionTurn.retry.inSeconds": "dans {{seconds}}s",
|
||||
"ui.sessionTurn.error.freeUsageExceeded": "Limite d'utilisation gratuite dépassée",
|
||||
"ui.sessionTurn.error.addCredits": "Ajouter des crédits",
|
||||
|
||||
"ui.sessionTurn.status.delegating": "Délégation du travail",
|
||||
"ui.sessionTurn.status.planning": "Planification des prochaines étapes",
|
||||
|
||||
@@ -27,6 +27,8 @@ export const dict = {
|
||||
|
||||
"ui.sessionTurn.retry.retrying": "再試行中",
|
||||
"ui.sessionTurn.retry.inSeconds": "{{seconds}}秒後",
|
||||
"ui.sessionTurn.error.freeUsageExceeded": "無料使用制限に達しました",
|
||||
"ui.sessionTurn.error.addCredits": "クレジットを追加",
|
||||
|
||||
"ui.sessionTurn.status.delegating": "作業を委任中",
|
||||
"ui.sessionTurn.status.planning": "次のステップを計画中",
|
||||
|
||||
@@ -28,6 +28,8 @@ export const dict = {
|
||||
|
||||
"ui.sessionTurn.retry.retrying": "재시도 중",
|
||||
"ui.sessionTurn.retry.inSeconds": "{{seconds}}초 후",
|
||||
"ui.sessionTurn.error.freeUsageExceeded": "무료 사용량 초과",
|
||||
"ui.sessionTurn.error.addCredits": "크레딧 추가",
|
||||
|
||||
"ui.sessionTurn.status.delegating": "작업 위임 중",
|
||||
"ui.sessionTurn.status.planning": "다음 단계 계획 중",
|
||||
|
||||
@@ -31,6 +31,8 @@ export const dict: Record<Keys, string> = {
|
||||
|
||||
"ui.sessionTurn.retry.retrying": "Prøver igjen",
|
||||
"ui.sessionTurn.retry.inSeconds": "om {{seconds}}s",
|
||||
"ui.sessionTurn.error.freeUsageExceeded": "Gratis bruk overskredet",
|
||||
"ui.sessionTurn.error.addCredits": "Legg til kreditt",
|
||||
|
||||
"ui.sessionTurn.status.delegating": "Delegerer arbeid",
|
||||
"ui.sessionTurn.status.planning": "Planlegger neste trinn",
|
||||
|
||||
@@ -27,6 +27,8 @@ export const dict = {
|
||||
|
||||
"ui.sessionTurn.retry.retrying": "ponawianie",
|
||||
"ui.sessionTurn.retry.inSeconds": "za {{seconds}}s",
|
||||
"ui.sessionTurn.error.freeUsageExceeded": "Przekroczono limit darmowego użytkowania",
|
||||
"ui.sessionTurn.error.addCredits": "Dodaj kredyty",
|
||||
|
||||
"ui.sessionTurn.status.delegating": "Delegowanie pracy",
|
||||
"ui.sessionTurn.status.planning": "Planowanie kolejnych kroków",
|
||||
|
||||
@@ -27,6 +27,8 @@ export const dict = {
|
||||
|
||||
"ui.sessionTurn.retry.retrying": "повтор",
|
||||
"ui.sessionTurn.retry.inSeconds": "через {{seconds}}с",
|
||||
"ui.sessionTurn.error.freeUsageExceeded": "Лимит бесплатного использования превышен",
|
||||
"ui.sessionTurn.error.addCredits": "Добавить кредиты",
|
||||
|
||||
"ui.sessionTurn.status.delegating": "Делегирование работы",
|
||||
"ui.sessionTurn.status.planning": "Планирование следующих шагов",
|
||||
|
||||
@@ -28,6 +28,8 @@ export const dict = {
|
||||
|
||||
"ui.sessionTurn.retry.retrying": "กำลังลองใหม่",
|
||||
"ui.sessionTurn.retry.inSeconds": "ใน {{seconds}}วิ",
|
||||
"ui.sessionTurn.error.freeUsageExceeded": "เกินขีดจำกัดการใช้งานฟรี",
|
||||
"ui.sessionTurn.error.addCredits": "เพิ่มเครดิต",
|
||||
|
||||
"ui.sessionTurn.status.delegating": "มอบหมายงาน",
|
||||
"ui.sessionTurn.status.planning": "วางแผนขั้นตอนถัดไป",
|
||||
|
||||
@@ -32,6 +32,8 @@ export const dict = {
|
||||
|
||||
"ui.sessionTurn.retry.retrying": "重试中",
|
||||
"ui.sessionTurn.retry.inSeconds": "{{seconds}} 秒后",
|
||||
"ui.sessionTurn.error.freeUsageExceeded": "免费使用额度已用完",
|
||||
"ui.sessionTurn.error.addCredits": "添加积分",
|
||||
|
||||
"ui.sessionTurn.status.delegating": "正在委派工作",
|
||||
"ui.sessionTurn.status.planning": "正在规划下一步",
|
||||
|
||||
@@ -32,6 +32,8 @@ export const dict = {
|
||||
|
||||
"ui.sessionTurn.retry.retrying": "重試中",
|
||||
"ui.sessionTurn.retry.inSeconds": "{{seconds}} 秒後",
|
||||
"ui.sessionTurn.error.freeUsageExceeded": "免費使用額度已用完",
|
||||
"ui.sessionTurn.error.addCredits": "新增點數",
|
||||
|
||||
"ui.sessionTurn.status.delegating": "正在委派工作",
|
||||
"ui.sessionTurn.status.planning": "正在規劃下一步",
|
||||
|
||||
Reference in New Issue
Block a user