Skip to content

Commit 0fba255

Browse files
authored
Merge pull request #27 from aitok-ai/lijing/en_cn
support auto selecting language with navigator
2 parents f3ef73f + cc81bd3 commit 0fba255

File tree

20 files changed

+165
-108
lines changed

20 files changed

+165
-108
lines changed

client/src/components/Auth/Login.tsx

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,30 +19,29 @@ function Login() {
1919
return (
2020
<div className="flex min-h-screen flex-col items-center justify-center bg-white pt-6 sm:pt-0">
2121
<div className="mt-6 w-96 overflow-hidden bg-white px-6 py-4 sm:max-w-md sm:rounded-lg">
22-
<h1 className="mb-4 text-center text-3xl font-semibold">Welcome back</h1>
22+
<h1 className="mb-4 text-center text-3xl font-semibold">{navigator.languages[0]==='zh-CN'?"欢迎回来":"Welcome back"}</h1>
2323
{error && (
2424
<div
2525
className="relative mt-4 rounded border border-red-400 bg-red-100 px-4 py-3 text-red-700"
2626
role="alert"
2727
>
28-
Unable to login with the information provided. Please check your credentials and try
29-
again.
28+
{navigator.languages[0]==='zh-CN'?"无法使用提供的信息登录。请检查您的凭据,然后重试。":"Unable to login with the information provided. Please check your credentials and try again."}
3029
</div>
3130
)}
3231
<LoginForm onSubmit={login} />
3332
{startupConfig?.registrationEnabled && (
3433
<p className="my-4 text-center text-sm font-light text-gray-700">
3534
{' '}
36-
Don&apos;t have an account?{' '}
35+
{navigator.languages[0]==='zh-CN'?"没有账号?点击":"Don&apos;t have an account?"}{' '}
3736
<a href="/register" className="p-1 text-green-500 hover:underline">
38-
Sign up
37+
{navigator.languages[0]==='zh-CN'?"注册":"Sign up"}
3938
</a>
4039
</p>
4140
)}
4241
{startupConfig?.googleLoginEnabled && (
4342
<>
4443
<div className="relative mt-6 flex w-full items-center justify-center border border-t uppercase">
45-
<div className="absolute bg-white px-3 text-xs">Or</div>
44+
<div className="absolute bg-white px-3 text-xs">{navigator.languages[0]==='zh-CN'?"或":"Or"}</div>
4645
</div>
4746
<div className="mt-4 flex gap-x-2">
4847
<a
@@ -73,7 +72,7 @@ function Login() {
7372
d="m419.404 58.936-82.933 67.896C313.136 112.246 285.552 103.82 256 103.82c-66.729 0-123.429 42.957-143.965 102.724l-83.397-68.276h-.014C71.23 56.123 157.06 0 256 0c62.115 0 119.068 22.126 163.404 58.936z"
7473
></path>
7574
</svg>
76-
<p>Login with Google</p>
75+
<p>{navigator.languages[0]==='zh-CN'?"使用Google登录":"Login with Google"}</p>
7776
</a>
7877
</div>
7978
</>

client/src/components/Auth/LoginForm.tsx

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -30,15 +30,15 @@ function LoginForm({ onSubmit }: TLoginFormProps) {
3030
required: 'Email is required',
3131
minLength: {
3232
value: 3,
33-
message: 'Email must be at least 6 characters'
33+
message: navigator.languages[0]==='zh-CN'?'邮箱地址长度至少超过6个字符':'Email must be at least 6 characters'
3434
},
3535
maxLength: {
3636
value: 120,
37-
message: 'Email should not be longer than 120 characters'
37+
message: navigator.languages[0]==='zh-CN'?"邮箱长度不能超过120个字符":'Email should not be longer than 120 characters'
3838
},
3939
pattern: {
4040
value: /\S+@\S+\.\S+/,
41-
message: 'You must enter a valid email address'
41+
message: navigator.languages[0]==='zh-CN'?'你必须输入一个有效的邮箱地址':'You must enter a valid email address'
4242
}
4343
})}
4444
aria-invalid={!!errors.email}
@@ -49,7 +49,7 @@ function LoginForm({ onSubmit }: TLoginFormProps) {
4949
htmlFor="email"
5050
className="absolute left-2.5 top-4 z-10 origin-[0] -translate-y-4 scale-75 transform text-gray-500 duration-300 peer-placeholder-shown:translate-y-0 peer-placeholder-shown:scale-100 peer-focus:-translate-y-4 peer-focus:scale-75 peer-focus:text-green-500"
5151
>
52-
Email address
52+
{navigator.languages[0]==='zh-CN'?"邮箱":"Email address"}
5353
</label>
5454
</div>
5555
{errors.email && (
@@ -85,7 +85,7 @@ function LoginForm({ onSubmit }: TLoginFormProps) {
8585
htmlFor="password"
8686
className="absolute left-2.5 top-4 z-10 origin-[0] -translate-y-4 scale-75 transform text-gray-500 duration-300 peer-placeholder-shown:translate-y-0 peer-placeholder-shown:scale-100 peer-focus:-translate-y-4 peer-focus:scale-75 peer-focus:text-green-500"
8787
>
88-
Password
88+
{navigator.languages[0]==='zh-CN'?'密码':'Password'}
8989
</label>
9090
</div>
9191

@@ -97,15 +97,15 @@ function LoginForm({ onSubmit }: TLoginFormProps) {
9797
)}
9898
</div>
9999
<a href="/forgot-password" className="text-sm text-green-500 hover:underline">
100-
Forgot Password?
100+
{navigator.languages[0]==='zh-CN'?"忘记密码?":"Forgot Password?"}
101101
</a>
102102
<div className="mt-6">
103103
<button
104104
aria-label="Sign in"
105105
type="submit"
106106
className="w-full transform rounded-sm bg-green-500 px-4 py-3 tracking-wide text-white transition-colors duration-200 hover:bg-green-600 focus:bg-green-600 focus:outline-none"
107107
>
108-
Continue
108+
{navigator.languages[0]==='zh-CN'?'继续':'Continue'}
109109
</button>
110110
</div>
111111
</form>

client/src/components/Auth/Registration.tsx

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -43,13 +43,13 @@ function Registration() {
4343
return (
4444
<div className="flex min-h-screen flex-col items-center justify-center bg-white pt-6 sm:pt-0">
4545
<div className="mt-6 w-96 overflow-hidden bg-white px-6 py-4 sm:max-w-md sm:rounded-lg">
46-
<h1 className="mb-4 text-center text-3xl font-semibold">Create your account</h1>
46+
<h1 className="mb-4 text-center text-3xl font-semibold">{navigator.languages[0]==='zh-CN'?'创建你的账号':'Create your account'}</h1>
4747
{error && (
4848
<div
4949
className="relative mt-4 rounded border border-red-400 bg-red-100 px-4 py-3 text-red-700"
5050
role="alert"
5151
>
52-
There was an error attempting to register your account. Please try again. {errorMessage}
52+
{navigator.languages[0]==='zh-CN'?'注册帐户时出错。请重试。':'There was an error attempting to register your account. Please try again.'} {errorMessage}
5353
</div>
5454
)}
5555
<form
@@ -69,11 +69,11 @@ function Registration() {
6969
required: 'Name is required',
7070
minLength: {
7171
value: 3,
72-
message: 'Name must be at least 3 characters'
72+
message: navigator.languages[0]==='zh-CN'?'名字必须超过3个字符':'Name must be at least 3 characters'
7373
},
7474
maxLength: {
7575
value: 80,
76-
message: 'Name must be less than 80 characters'
76+
message: navigator.languages[0]==='zh-CN'?'名字最大长度是80个字符':'Name must be less than 80 characters'
7777
}
7878
})}
7979
aria-invalid={!!errors.name}
@@ -84,7 +84,7 @@ function Registration() {
8484
htmlFor="name"
8585
className="absolute left-2.5 top-4 z-10 origin-[0] -translate-y-4 scale-75 transform text-sm text-gray-500 duration-300 peer-placeholder-shown:translate-y-0 peer-placeholder-shown:scale-100 peer-focus:-translate-y-4 peer-focus:scale-75 peer-focus:text-green-500"
8686
>
87-
Full name
87+
{navigator.languages[0]==='zh-CN'?'全名':'Full name'}
8888
</label>
8989
</div>
9090

@@ -105,11 +105,11 @@ function Registration() {
105105
required: 'Username is required',
106106
minLength: {
107107
value: 3,
108-
message: 'Username must be at least 3 characters'
108+
message: navigator.languages[0]==='zh-CN'?'用户名长度最少3个字符':'Username must be at least 3 characters'
109109
},
110110
maxLength: {
111111
value: 20,
112-
message: 'Username must be less than 20 characters'
112+
message: navigator.languages[0]==='zh-CN'?'用户名必须少于20个字符':'Username must be less than 20 characters'
113113
}
114114
})}
115115
aria-invalid={!!errors.username}
@@ -121,7 +121,7 @@ function Registration() {
121121
htmlFor="username"
122122
className="absolute left-2.5 top-4 z-10 origin-[0] -translate-y-4 scale-75 transform text-sm text-gray-500 duration-300 peer-placeholder-shown:translate-y-0 peer-placeholder-shown:scale-100 peer-focus:-translate-y-4 peer-focus:scale-75 peer-focus:text-green-500"
123123
>
124-
Username
124+
{navigator.languages[0]==='zh-CN'?'用户名':'Username'}
125125
</label>
126126
</div>
127127

@@ -143,15 +143,15 @@ function Registration() {
143143
required: 'Email is required',
144144
minLength: {
145145
value: 3,
146-
message: 'Email must be at least 6 characters'
146+
message: navigator.languages[0]==='zh-CN'?'邮箱地址至少6个字符':'Email must be at least 6 characters'
147147
},
148148
maxLength: {
149149
value: 120,
150-
message: 'Email should not be longer than 120 characters'
150+
message: navigator.languages[0]==='zh-CN'?'邮箱地址不能超过120个字符':'Email should not be longer than 120 characters'
151151
},
152152
pattern: {
153153
value: /\S+@\S+\.\S+/,
154-
message: 'You must enter a valid email address'
154+
message: navigator.languages[0]==='zh-CN'?'你必须输入一个有效的邮箱地址':'You must enter a valid email address'
155155
}
156156
})}
157157
aria-invalid={!!errors.email}
@@ -162,7 +162,7 @@ function Registration() {
162162
htmlFor="email"
163163
className="absolute left-2.5 top-4 z-10 origin-[0] -translate-y-4 scale-75 transform text-sm text-gray-500 duration-300 peer-placeholder-shown:translate-y-0 peer-placeholder-shown:scale-100 peer-focus:-translate-y-4 peer-focus:scale-75 peer-focus:text-green-500"
164164
>
165-
Email
165+
{navigator.languages[0]==='zh-CN'?'邮箱':'Email'}
166166
</label>
167167
</div>
168168
{errors.email && (
@@ -184,11 +184,11 @@ function Registration() {
184184
required: 'Password is required',
185185
minLength: {
186186
value: 8,
187-
message: 'Password must be at least 8 characters'
187+
message: navigator.languages[0]==='zh-CN'?'密码长度至少8位':'Password must be at least 8 characters'
188188
},
189189
maxLength: {
190190
value: 40,
191-
message: 'Password must be less than 40 characters'
191+
message: navigator.languages[0]==='zh-CN'?'密码长度不能超过40个字符':'Password must be less than 40 characters'
192192
}
193193
})}
194194
aria-invalid={!!errors.password}
@@ -199,7 +199,7 @@ function Registration() {
199199
htmlFor="password"
200200
className="absolute left-2.5 top-4 z-10 origin-[0] -translate-y-4 scale-75 transform text-sm text-gray-500 duration-300 peer-placeholder-shown:translate-y-0 peer-placeholder-shown:scale-100 peer-focus:-translate-y-4 peer-focus:scale-75 peer-focus:text-green-500"
201201
>
202-
Password
202+
{navigator.languages[0]==='zh-CN'?'密码':'Password'}
203203
</label>
204204
</div>
205205

@@ -233,7 +233,7 @@ function Registration() {
233233
htmlFor="confirm_password"
234234
className="absolute left-2.5 top-4 z-10 origin-[0] -translate-y-4 scale-75 transform text-sm text-gray-500 duration-300 peer-placeholder-shown:translate-y-0 peer-placeholder-shown:scale-100 peer-focus:-translate-y-4 peer-focus:scale-75 peer-focus:text-green-500"
235235
>
236-
Confirm password
236+
{navigator.languages[0]==='zh-CN'?'再次输入密码':'Confirm password'}
237237
</label>
238238
</div>
239239

@@ -257,19 +257,19 @@ function Registration() {
257257
aria-label="Submit registration"
258258
className="w-full transform rounded-sm bg-green-500 px-4 py-3 tracking-wide text-white transition-colors duration-200 hover:bg-green-600 focus:bg-green-600 focus:outline-none disabled:cursor-not-allowed disabled:opacity-50 disabled:hover:bg-green-500"
259259
>
260-
Continue
260+
{navigator.languages[0]==='zh-CN'?'继续':'Continue'}
261261
</button>
262262
</div>
263263
</form>
264264
<p className="my-4 text-center text-sm font-light text-gray-700">
265265
{' '}
266-
Already have an account?{' '}
266+
{navigator.languages[0]==='zh-CN'?'已经有账号? 点击':'Already have an account?'}{' '}
267267
<a
268268
href="/login"
269269
aria-label="Login"
270270
className="p-1 font-medium text-green-500 hover:underline"
271271
>
272-
Login
272+
{navigator.languages[0]==='zh-CN'?'登录':'Login'}
273273
</a>
274274
</p>
275275
{startupConfig?.googleLoginEnabled && (
@@ -307,7 +307,7 @@ function Registration() {
307307
d="m419.404 58.936-82.933 67.896C313.136 112.246 285.552 103.82 256 103.82c-66.729 0-123.429 42.957-143.965 102.724l-83.397-68.276h-.014C71.23 56.123 157.06 0 256 0c62.115 0 119.068 22.126 163.404 58.936z"
308308
></path>
309309
</svg>
310-
<p>Login with Google</p>
310+
<p>{navigator.languages[0]==='zh-CN'?'Google登录':'Login with Google'}</p>
311311
</a>
312312
</div>
313313
</>

client/src/components/Endpoints/EndpointOptionsDialog.jsx

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,9 @@ const EndpointOptionsDialog = ({ open, onOpenChange, preset: _preset, title }) =
5555
<>
5656
<Dialog open={open} onOpenChange={onOpenChange}>
5757
<DialogTemplate
58-
title={`${title || 'View Options'} - ${endpointName}`}
58+
title={`${
59+
title || (navigator.languages[0] === 'zh-CN' ? '查看选项' : 'View Options')
60+
} - ${endpointName}`}
5961
className="max-w-full sm:max-w-4xl"
6062
main={
6163
<div className="flex w-full flex-col items-center gap-2">
@@ -70,14 +72,14 @@ const EndpointOptionsDialog = ({ open, onOpenChange, preset: _preset, title }) =
7072
onClick={saveAsPreset}
7173
className="dark:hover:gray-400 border-gray-700 bg-green-600 text-white hover:bg-green-700 dark:hover:bg-green-800"
7274
>
73-
Save As Preset
75+
{navigator.languages[0] === 'zh-CN' ? '另存为预设' : 'Save As Preset'}
7476
</DialogButton>
7577
</>
7678
}
7779
leftButtons={
7880
<>
7981
<DialogButton onClick={exportPreset} className="dark:hover:gray-400 border-gray-700">
80-
Export
82+
{navigator.languages[0] === 'zh-CN' ? '导出' : 'Export'}
8183
</DialogButton>
8284
</>
8385
}

0 commit comments

Comments
 (0)