diff --git a/frontend/locales/en.json b/frontend/locales/en.json index b3dab6e..53538d5 100644 --- a/frontend/locales/en.json +++ b/frontend/locales/en.json @@ -11,7 +11,14 @@ "language": "Language", "search": "Search", "email": "Email", - "password": "Password" + "password": "Password", + "account": "Account" + }, + "auth": { + "sign-in": "Sign in", + "sign-up": "Sign up", + "sign-out": "Sign out", + "create-your-account": "Create your account" }, "analytics": { "self": "Analytics", @@ -38,5 +45,30 @@ "description": "Visible to everyone on the internet" } } + }, + "user": { + "self": "User", + "nickname": "Nickname", + "email": "Email", + "role": "Role", + "profile": "Profile", + "action": { + "add-user": "Add user" + } + }, + "settings": { + "self": "Setting", + "preference": { + "self": "Preference", + "color-theme": "Color theme" + }, + "workspace": { + "self": "Workspace settings", + "custom-style": "Custom style", + "enable-user-signup": { + "self": "Enable user signup", + "description": "Once enabled, other users can signup." + } + } } } diff --git a/frontend/locales/zh.json b/frontend/locales/zh.json index 42352f1..4f8ee8f 100644 --- a/frontend/locales/zh.json +++ b/frontend/locales/zh.json @@ -11,7 +11,14 @@ "language": "语言", "search": "搜索", "email": "邮箱", - "password": "密码" + "password": "密码", + "account": "账号" + }, + "auth": { + "sign-in": "登录", + "sign-up": "注册", + "sign-out": "退出登录", + "create-your-account": "创建账号" }, "analytics": { "self": "分析", @@ -38,5 +45,30 @@ "description": "对任何人可见" } } + }, + "user": { + "self": "用户", + "nickname": "昵称", + "email": "邮箱", + "role": "角色", + "profile": "账号", + "action": { + "add-user": "添加用户" + } + }, + "settings": { + "self": "设置", + "preference": { + "self": "偏好设置", + "color-theme": "主题" + }, + "workspace": { + "self": "系统设置", + "custom-style": "自定义样式", + "enable-user-signup": { + "self": "启用用户注册", + "description": "允许其他用户注册新账号" + } + } } } diff --git a/frontend/web/src/components/Header.tsx b/frontend/web/src/components/Header.tsx index 15171ae..b188d44 100644 --- a/frontend/web/src/components/Header.tsx +++ b/frontend/web/src/components/Header.tsx @@ -1,5 +1,6 @@ import { Avatar } from "@mui/joy"; import { useState } from "react"; +import { useTranslation } from "react-i18next"; import { Link } from "react-router-dom"; import useWorkspaceStore from "@/stores/v1/workspace"; import { PlanType } from "@/types/proto/api/v2/subscription_service"; @@ -10,6 +11,7 @@ import Icon from "./Icon"; import Dropdown from "./common/Dropdown"; const Header: React.FC = () => { + const { t } = useTranslation(); const workspaceStore = useWorkspaceStore(); const currentUser = useUserStore().getCurrentUser(); const [showAboutDialog, setShowAboutDialog] = useState(false); @@ -52,27 +54,27 @@ const Header: React.FC = () => { to="/setting/general" className="w-full px-2 flex flex-row justify-start items-center text-left dark:text-gray-400 leading-8 cursor-pointer rounded hover:bg-gray-100 dark:hover:bg-zinc-800 disabled:cursor-not-allowed disabled:bg-gray-100 disabled:opacity-60" > - Profile + {t("user.profile")} {isAdmin && ( - Setting + {t("settings.self")} )} } diff --git a/frontend/web/src/components/setting/AccountSection.tsx b/frontend/web/src/components/setting/AccountSection.tsx index 7d7f786..f30c5b6 100644 --- a/frontend/web/src/components/setting/AccountSection.tsx +++ b/frontend/web/src/components/setting/AccountSection.tsx @@ -15,7 +15,7 @@ const AccountSection: React.FC = () => { return ( <>
-

Account

+

{t("common.account")}

{currentUser.nickname} {isAdmin && Admin} diff --git a/frontend/web/src/components/setting/MemberSection.tsx b/frontend/web/src/components/setting/MemberSection.tsx index 01d3ee0..a19f3a5 100644 --- a/frontend/web/src/components/setting/MemberSection.tsx +++ b/frontend/web/src/components/setting/MemberSection.tsx @@ -1,12 +1,14 @@ import { Button, IconButton } from "@mui/joy"; import { useEffect, useState } from "react"; import toast from "react-hot-toast"; +import { useTranslation } from "react-i18next"; import useUserStore from "../../stores/v1/user"; import { showCommonDialog } from "../Alert"; import CreateUserDialog from "../CreateUserDialog"; import Icon from "../Icon"; const MemberSection = () => { + const { t } = useTranslation(); const userStore = useUserStore(); const [showCreateUserDialog, setShowCreateUserDialog] = useState(false); const [currentEditingUser, setCurrentEditingUser] = useState(undefined); @@ -43,7 +45,7 @@ const MemberSection = () => {

-

Users

+

{t("user.self")}

A list of all the users in your workspace including their nickname, email and role.

@@ -57,7 +59,7 @@ const MemberSection = () => { setCurrentEditingUser(undefined); }} > - Add user + {t("user.action.add-user")}
@@ -68,20 +70,20 @@ const MemberSection = () => { - Nickname + {t("user.nickname")} - Email + {t("user.email")} - Role + {t("user.role")} - Edit + {t("common.edit")} - + {userList.map((user) => ( {user.nickname} diff --git a/frontend/web/src/components/setting/PreferenceSection.tsx b/frontend/web/src/components/setting/PreferenceSection.tsx index d3211a7..31dcf16 100644 --- a/frontend/web/src/components/setting/PreferenceSection.tsx +++ b/frontend/web/src/components/setting/PreferenceSection.tsx @@ -1,6 +1,5 @@ import { Option, Select } from "@mui/joy"; import { useTranslation } from "react-i18next"; -import { releaseGuard } from "@/helpers/utils"; import { UserSetting, UserSetting_ColorTheme, UserSetting_Locale } from "@/types/proto/api/v2/user_setting_service"; import useUserStore from "../../stores/v1/user"; import BetaBadge from "../BetaBadge"; @@ -61,10 +60,10 @@ const PreferenceSection: React.FC = () => { return ( <>
-

Preference

+

{t("settings.preference.self")}

- Color Theme + {t("settings.preference.color-theme")}
- {releaseGuard() && ( -
-
- {t("common.language")} - -
- +
+
+ {t("common.language")} +
- )} + +
); diff --git a/frontend/web/src/components/setting/WorkspaceSection.tsx b/frontend/web/src/components/setting/WorkspaceSection.tsx index 8712a2c..0d2e3b6 100644 --- a/frontend/web/src/components/setting/WorkspaceSection.tsx +++ b/frontend/web/src/components/setting/WorkspaceSection.tsx @@ -2,11 +2,13 @@ import { Button, Checkbox, Textarea } from "@mui/joy"; import { isEqual } from "lodash-es"; import { useRef, useState } from "react"; import toast from "react-hot-toast"; +import { useTranslation } from "react-i18next"; import { workspaceServiceClient } from "@/grpcweb"; import useWorkspaceStore from "@/stores/v1/workspace"; import { WorkspaceSetting } from "@/types/proto/api/v2/workspace_service"; const WorkspaceSection: React.FC = () => { + const { t } = useTranslation(); const workspaceStore = useWorkspaceStore(); const [workspaceSetting, setWorkspaceSetting] = useState(workspaceStore.setting); const originalWorkspaceSetting = useRef(workspaceStore.setting); @@ -56,9 +58,9 @@ const WorkspaceSection: React.FC = () => { return (
-

Workspace settings

+

{t("settings.workspace.self")}

-

Custom style

+

{t("settings.workspace.custom-style")}