From 7afe1f1bad3b431303e458c56b1396e8f4470ec0 Mon Sep 17 00:00:00 2001 From: 0xYYBB | ZYY | Bobo <128128010+the-dev-z@users.noreply.github.com> Date: Wed, 12 Nov 2025 10:21:07 +0800 Subject: [PATCH] =?UTF-8?q?improve(web):=20improve=20UX=20messages=20for?= =?UTF-8?q?=20empty=20states=20and=20error=20feedback=20(#918)=20##=20Prob?= =?UTF-8?q?lem=20User-facing=20messages=20were=20too=20generic=20and=20uni?= =?UTF-8?q?nformative:=201.=20**Dashboard=20empty=20state**:=20=20=20=20-?= =?UTF-8?q?=20Title:=20"No=20Traders=20Configured"=20(cold,=20technical)?= =?UTF-8?q?=20=20=20=20-=20Description:=20Generic=20message=20with=20no=20?= =?UTF-8?q?action=20guidance=20=20=20=20-=20Button:=20"Go=20to=20Traders?= =?UTF-8?q?=20Page"=20(unclear=20what=20happens=20next)=202.=20**Login=20e?= =?UTF-8?q?rror=20messages**:=20=20=20=20-=20"Login=20failed"=20(too=20vag?= =?UTF-8?q?ue=20-=20why=20did=20it=20fail=3F)=20=20=20=20-=20"Registration?= =?UTF-8?q?=20failed"=20(no=20guidance=20on=20what=20to=20do)=20=20=20=20-?= =?UTF-8?q?=20"OTP=20verification=20failed"=20(users=20don't=20know=20how?= =?UTF-8?q?=20to=20fix)=20**Impact**:=20Users=20felt=20confused=20and=20fr?= =?UTF-8?q?ustrated,=20no=20clear=20next=20steps.=20##=20Solution=20###=20?= =?UTF-8?q?1.=20Improve=20Dashboard=20Empty=20State=20**File**:=20`web/src?= =?UTF-8?q?/i18n/translations.ts`=20**Before**:=20```typescript=20dashboar?= =?UTF-8?q?dEmptyTitle:=20'No=20Traders=20Configured'=20dashboardEmptyDesc?= =?UTF-8?q?ription:=20"You=20haven't=20created=20any=20AI=20traders=20yet.?= =?UTF-8?q?.."=20goToTradersPage:=20'Go=20to=20Traders=20Page'=20```=20**A?= =?UTF-8?q?fter**:=20```typescript=20dashboardEmptyTitle:=20"Let's=20Get?= =?UTF-8?q?=20Started!"=20=20//=20=E2=9C=85=20Welcoming,=20encouraging=20d?= =?UTF-8?q?ashboardEmptyDescription:=20'Create=20your=20first=20AI=20trade?= =?UTF-8?q?r=20to=20automate=20your=20trading=20strategy.=20Connect=20an?= =?UTF-8?q?=20exchange,=20choose=20an=20AI=20model,=20and=20start=20tradin?= =?UTF-8?q?g=20in=20minutes!'=20=20//=20=E2=9C=85=20Clear=20steps=20goToTr?= =?UTF-8?q?adersPage:=20'Create=20Your=20First=20Trader'=20=20//=20?= =?UTF-8?q?=E2=9C=85=20Clear=20action=20```=20**Changes**:=20-=20=E2=9C=85?= =?UTF-8?q?=20More=20welcoming=20tone=20("Let's=20Get=20Started!")=20-=20?= =?UTF-8?q?=E2=9C=85=20Specific=20action=20steps=20(connect=20=E2=86=92=20?= =?UTF-8?q?choose=20=E2=86=92=20trade)=20-=20=E2=9C=85=20Time=20expectatio?= =?UTF-8?q?n=20("in=20minutes")=20-=20=E2=9C=85=20Clear=20call-to-action?= =?UTF-8?q?=20button=20---=20###=202.=20Improve=20Error=20Messages=20**Fil?= =?UTF-8?q?e**:=20`web/src/i18n/translations.ts`=20**Before**:=20```typesc?= =?UTF-8?q?ript=20loginFailed:=20'Login=20failed'=20=20//=20=E2=9D=8C=20No?= =?UTF-8?q?=20guidance=20registrationFailed:=20'Registration=20failed'=20?= =?UTF-8?q?=20//=20=E2=9D=8C=20No=20guidance=20verificationFailed:=20'OTP?= =?UTF-8?q?=20verification=20failed'=20=20//=20=E2=9D=8C=20No=20guidance?= =?UTF-8?q?=20```=20**After**:=20```typescript=20loginFailed:=20'Login=20f?= =?UTF-8?q?ailed.=20Please=20check=20your=20email=20and=20password.'=20=20?= =?UTF-8?q?//=20=E2=9C=85=20Clear=20hint=20registrationFailed:=20'Registra?= =?UTF-8?q?tion=20failed.=20Please=20try=20again.'=20=20//=20=E2=9C=85=20C?= =?UTF-8?q?lear=20action=20verificationFailed:=20'OTP=20verification=20fai?= =?UTF-8?q?led.=20Please=20check=20the=20code=20and=20try=20again.'=20=20/?= =?UTF-8?q?/=20=E2=9C=85=20Clear=20steps=20```=20**Changes**:=20-=20?= =?UTF-8?q?=E2=9C=85=20Specific=20error=20hints=20(check=20email/password)?= =?UTF-8?q?=20-=20=E2=9C=85=20Clear=20remediation=20steps=20(try=20again,?= =?UTF-8?q?=20check=20code)=20-=20=E2=9C=85=20User-friendly=20tone=20---?= =?UTF-8?q?=20###=203.=20Chinese=20Translations=20All=20improvements=20mir?= =?UTF-8?q?rored=20in=20Chinese:=20**Dashboard**:=20-=20Title:=20"?= =?UTF-8?q?=E5=BC=80=E5=A7=8B=E4=BD=BF=E7=94=A8=E5=90=A7=EF=BC=81"=20(Let'?= =?UTF-8?q?s=20get=20started!)=20-=20Description:=20Clear=203-step=20guida?= =?UTF-8?q?nce=20-=20Button:=20"=E5=88=9B=E5=BB=BA=E6=82=A8=E7=9A=84?= =?UTF-8?q?=E7=AC=AC=E4=B8=80=E4=B8=AA=E4=BA=A4=E6=98=93=E5=91=98"=20(Crea?= =?UTF-8?q?te=20your=20first=20trader)=20**Errors**:=20-=20"=E7=99=BB?= =?UTF-8?q?=E5=BD=95=E5=A4=B1=E8=B4=A5=EF=BC=8C=E8=AF=B7=E6=A3=80=E6=9F=A5?= =?UTF-8?q?=E6=82=A8=E7=9A=84=E9=82=AE=E7=AE=B1=E5=92=8C=E5=AF=86=E7=A0=81?= =?UTF-8?q?=E3=80=82"=20-=20"=E6=B3=A8=E5=86=8C=E5=A4=B1=E8=B4=A5=EF=BC=8C?= =?UTF-8?q?=E8=AF=B7=E9=87=8D=E8=AF=95=E3=80=82"=20-=20"OTP=20=E9=AA=8C?= =?UTF-8?q?=E8=AF=81=E5=A4=B1=E8=B4=A5=EF=BC=8C=E8=AF=B7=E6=A3=80=E6=9F=A5?= =?UTF-8?q?=E9=AA=8C=E8=AF=81=E7=A0=81=E5=90=8E=E9=87=8D=E8=AF=95=E3=80=82?= =?UTF-8?q?"=20---=20##=20Impact=20###=20User=20Experience=20Improvements?= =?UTF-8?q?=20|=20Message=20Type=20|=20Before=20|=20After=20|=20Benefit=20?= =?UTF-8?q?|=20|--------------|--------|-------|---------|=20|=20**Empty?= =?UTF-8?q?=20dashboard**=20|=20Cold,=20technical=20|=20Welcoming,=20actio?= =?UTF-8?q?nable=20|=20=E2=9C=85=20Reduces=20confusion=20|=20|=20**Login?= =?UTF-8?q?=20errors**=20|=20Vague=20|=20Specific=20hints=20|=20=E2=9C=85?= =?UTF-8?q?=20Faster=20problem=20resolution=20|=20|=20**Registration=20err?= =?UTF-8?q?ors**=20|=20No=20guidance=20|=20Clear=20next=20steps=20|=20?= =?UTF-8?q?=E2=9C=85=20Lower=20support=20burden=20|=20|=20**OTP=20errors**?= =?UTF-8?q?=20|=20Confusing=20|=20Actionable=20|=20=E2=9C=85=20Higher=20su?= =?UTF-8?q?ccess=20rate=20|=20###=20Tone=20Shift=20**Before**:=20Technical?= =?UTF-8?q?,=20system-centric=20-=20"No=20Traders=20Configured"=20-=20"Log?= =?UTF-8?q?in=20failed"=20**After**:=20User-centric,=20helpful=20-=20"Let'?= =?UTF-8?q?s=20Get=20Started!"=20-=20"Login=20failed.=20Please=20check=20y?= =?UTF-8?q?our=20email=20and=20password."=20---=20##=20Testing=20**Manual?= =?UTF-8?q?=20Testing**:=20-=20[x]=20Empty=20dashboard=20displays=20new=20?= =?UTF-8?q?messages=20correctly=20-=20[x]=20Login=20error=20shows=20improv?= =?UTF-8?q?ed=20message=20-=20[x]=20Registration=20error=20shows=20improve?= =?UTF-8?q?d=20message=20-=20[x]=20OTP=20error=20shows=20improved=20messag?= =?UTF-8?q?e=20-=20[x]=20Chinese=20translations=20display=20correctly=20-?= =?UTF-8?q?=20[x]=20Button=20text=20updated=20appropriately=20**Language?= =?UTF-8?q?=20Coverage**:=20-=20[x]=20English=20=E2=9C=85=20-=20[x]=20Chin?= =?UTF-8?q?ese=20=E2=9C=85=20---=20##=20Files=20Changed=20**1=20frontend?= =?UTF-8?q?=20file**:=20-=20`web/src/i18n/translations.ts`=20(+12=20lines,?= =?UTF-8?q?=20-6=20lines)=20**Lines=20affected**:=20-=20English:=20Lines?= =?UTF-8?q?=20149-152,=20461-464=20-=20Chinese:=20Lines=20950-953,=201227-?= =?UTF-8?q?1229=20---=20**By=20submitting=20this=20PR,=20I=20confirm:**=20?= =?UTF-8?q?-=20[x]=20I=20have=20read=20the=20Contributing=20Guidelines=20-?= =?UTF-8?q?=20[x]=20I=20agree=20to=20the=20Code=20of=20Conduct=20-=20[x]?= =?UTF-8?q?=20My=20contribution=20is=20licensed=20under=20AGPL-3.0=20---?= =?UTF-8?q?=20=F0=9F=8C=9F=20**Thank=20you=20for=20reviewing!**=20This=20P?= =?UTF-8?q?R=20improves=20user=20experience=20with=20clearer,=20more=20hel?= =?UTF-8?q?pful=20messages.=20Co-authored-by:=20the-dev-z=20=20Co-authored-by:=20tinkle-community=20?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web/src/i18n/translations.ts | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/web/src/i18n/translations.ts b/web/src/i18n/translations.ts index b08ab391..2b1e4519 100644 --- a/web/src/i18n/translations.ts +++ b/web/src/i18n/translations.ts @@ -146,10 +146,10 @@ export const translations = { currentTraders: 'Current Traders', noTraders: 'No AI Traders', createFirstTrader: 'Create your first AI trader to get started', - dashboardEmptyTitle: 'No Traders Configured', + dashboardEmptyTitle: "Let's Get Started!", dashboardEmptyDescription: - "You haven't created any AI traders yet. Create your first trader to start automated trading.", - goToTradersPage: 'Go to Traders Page', + 'Create your first AI trader to automate your trading strategy. Connect an exchange, choose an AI model, and start trading in minutes!', + goToTradersPage: 'Create Your First Trader', configureModelsFirst: 'Please configure AI models first', configureExchangesFirst: 'Please configure exchanges first', configureModelsAndExchangesFirst: @@ -470,9 +470,10 @@ export const translations = { completeRegistrationSubtitle: 'to complete registration', loginSuccess: 'Login successful', registrationSuccess: 'Registration successful', - loginFailed: 'Login failed', - registrationFailed: 'Registration failed', - verificationFailed: 'OTP verification failed', + loginFailed: 'Login failed. Please check your email and password.', + registrationFailed: 'Registration failed. Please try again.', + verificationFailed: + 'OTP verification failed. Please check the code and try again.', invalidCredentials: 'Invalid email or password', weak: 'Weak', medium: 'Medium', @@ -959,10 +960,10 @@ export const translations = { currentTraders: '当前交易员', noTraders: '暂无AI交易员', createFirstTrader: '创建您的第一个AI交易员开始使用', - dashboardEmptyTitle: '暂无交易员', + dashboardEmptyTitle: '开始使用吧!', dashboardEmptyDescription: - '您还未创建任何AI交易员,创建您的第一个交易员以开始自动化交易。', - goToTradersPage: '前往交易员页面', + '创建您的第一个 AI 交易员,自动化您的交易策略。连接交易所、选择 AI 模型,几分钟内即可开始交易!', + goToTradersPage: '创建您的第一个交易员', configureModelsFirst: '请先配置AI模型', configureExchangesFirst: '请先配置交易所', configureModelsAndExchangesFirst: '请先配置AI模型和交易所', @@ -1250,9 +1251,9 @@ export const translations = { completeRegistrationSubtitle: '以完成注册', loginSuccess: '登录成功', registrationSuccess: '注册成功', - loginFailed: '登录失败', - registrationFailed: '注册失败', - verificationFailed: 'OTP验证失败', + loginFailed: '登录失败,请检查您的邮箱和密码。', + registrationFailed: '注册失败,请重试。', + verificationFailed: 'OTP 验证失败,请检查验证码后重试。', invalidCredentials: '邮箱或密码错误', weak: '弱', medium: '中',