I18n Translations (#2267)

* rebase

* i18n-1

* add error info i18n

* fix

* fix

* refactor: 删除error.json

* delete useI18n
This commit is contained in:
papapatrick
2024-08-05 18:42:21 +08:00
committed by GitHub
parent 025d405fe2
commit 10dcdb5491
107 changed files with 1128 additions and 416 deletions

View File

@@ -62,7 +62,7 @@ const ApiKeyTable = ({ tips, appId }: { tips: string; appId?: string }) => {
const [apiKey, setApiKey] = useState('');
const { ConfirmModal, openConfirm } = useConfirm({
type: 'delete',
content: '确认删除该API密钥删除后该密钥立即失效对应的对话日志不会删除请确认'
content: t('workflow:delete_api')
});
const { mutate: onclickRemove, isLoading: isDeleting } = useMutation({
@@ -318,7 +318,7 @@ function EditKeyModal({
const { mutate: onclickCreate, isLoading: creating } = useRequest({
mutationFn: async (e: EditProps) => createAOpenApiKey(e),
errorToast: '创建链接异常',
errorToast: t('workflow:create_link_error'),
onSuccess: onCreate
});
const { mutate: onclickUpdate, isLoading: updating } = useRequest({
@@ -326,7 +326,7 @@ function EditKeyModal({
//@ts-ignore
return putOpenApiKey(e);
},
errorToast: '更新链接异常',
errorToast: t('workflow:update_link_error'),
onSuccess: onEdit
});

View File

@@ -73,7 +73,7 @@ const LafAccountModal = ({
onError: (err) => {
onResetForm();
toast({
title: getErrText(err, '获取应用列表失败'),
title: getErrText(err, t('common:get_app_failed')),
status: 'error'
});
}
@@ -132,7 +132,7 @@ const LafAccountModal = ({
}}
isLoading={isPatLoading}
>
{t('common:verification')}
</Button>
</>
) : (
@@ -145,7 +145,7 @@ const LafAccountModal = ({
});
}}
>
{t('common:has_verification')}
</Button>
)}
</Flex>

View File

@@ -5,7 +5,7 @@ import type { PermissionValueType } from '@fastgpt/global/support/permission/typ
import { ReadPermissionVal, WritePermissionVal } from '@fastgpt/global/support/permission/constant';
import { useRequest2 } from '@fastgpt/web/hooks/useRequest';
import { useConfirm } from '@fastgpt/web/hooks/useConfirm';
import { useI18n } from '@/web/context/I18n';
import { useTranslation } from 'react-i18next';
export enum defaultPermissionEnum {
private = 'private',
@@ -34,12 +34,11 @@ const DefaultPermissionList = ({
...styles
}: Props) => {
const { ConfirmModal, openConfirm } = useConfirm({});
const { commonT } = useI18n();
const { t } = useTranslation();
const defaultPermissionSelectList = [
{ label: '仅协作者访问', value: defaultPer },
{ label: '团队可访问', value: readPer },
{ label: '团队可编辑', value: writePer }
{ label: t('user:permission.only_collaborators'), value: defaultPer },
{ label: t('user:permission.team_read'), value: readPer },
{ label: t('user:permission.team_write'), value: writePer }
];
const { runAsync: onRequestChange, loading } = useRequest2((v: PermissionValueType) =>
@@ -58,7 +57,7 @@ const DefaultPermissionList = ({
openConfirm(
() => onRequestChange(per),
undefined,
commonT('permission.Remove InheritPermission Confirm')
t('common:permission.Remove InheritPermission Confirm')
)();
} else {
return onRequestChange(per);

View File

@@ -79,7 +79,13 @@ function AddMemberModal({ onClose }: AddModalPropsType) {
});
return (
<MyModal isOpen onClose={onClose} iconSrc="modal/AddClb" title="添加协作者" minW="800px">
<MyModal
isOpen
onClose={onClose}
iconSrc="modal/AddClb"
title={t('user:team.add_collaborator')}
minW="800px"
>
<ModalBody>
<MyBox
isLoading={loadingMembers}
@@ -103,7 +109,7 @@ function AddMemberModal({ onClose }: AddModalPropsType) {
<MyIcon name="common/searchLight" w="16px" color={'myGray.500'} />
</InputLeftElement>
<Input
placeholder="搜索用户名"
placeholder={t('user:search_user')}
bgColor="myGray.50"
onChange={(e) => setSearchText(e.target.value)}
/>
@@ -156,7 +162,9 @@ function AddMemberModal({ onClose }: AddModalPropsType) {
</Flex>
</Flex>
<Flex p="4" flexDirection="column">
<Box>: {selectedMemberIdList.length}</Box>
<Box>
{t('user:has_chosen') + ': '}+ {selectedMemberIdList.length}
</Box>
<Flex flexDirection="column" mt="2">
{selectedMemberIdList.map((tmbId) => {
const member = filterMembers.find((v) => v.tmbId === tmbId);
@@ -211,7 +219,7 @@ function AddMemberModal({ onClose }: AddModalPropsType) {
onChange={(v) => setSelectedPermission(v)}
/>
<Button isLoading={isUpdating} ml="4" h={'32px'} onClick={onConfirm}>
{t('common:common.Confirm')}
</Button>
</ModalFooter>
</MyModal>

View File

@@ -23,12 +23,13 @@ import { PermissionValueType } from '@fastgpt/global/support/permission/type';
import { useUserStore } from '@/web/support/user/useUserStore';
import EmptyTip from '@fastgpt/web/components/common/EmptyTip';
import Loading from '@fastgpt/web/components/common/MyLoading';
import { useTranslation } from 'next-i18next';
export type ManageModalProps = {
onClose: () => void;
};
function ManageModal({ onClose }: ManageModalProps) {
const { t } = useTranslation();
const { userInfo } = useUserStore();
const { permission, collaboratorList, onUpdateCollaborators, onDelOneCollaborator } =
useContextSelector(CollaboratorContext, (v) => v);
@@ -44,23 +45,29 @@ function ManageModal({ onClose }: ManageModalProps) {
permission: per
});
},
successToast: '更新成功',
successToast: t('common.Update Success'),
errorToast: 'Error'
});
const loading = isDeleting || isUpdating;
return (
<MyModal isOpen onClose={onClose} minW="600px" title="管理协作者" iconSrc="common/settingLight">
<MyModal
isOpen
onClose={onClose}
minW="600px"
title={t('user:team.manage_collaborators')}
iconSrc="common/settingLight"
>
<ModalBody>
<TableContainer borderRadius="md" minH="400px">
<Table>
<Thead bg="myGray.100">
<Tr>
<Th border="none"></Th>
<Th border="none"></Th>
<Th border="none">{t('user:name')}</Th>
<Th border="none">{t('user:permissions')}</Th>
<Th border="none" w={'40px'}>
{t('user:operations')}
</Th>
</Tr>
</Thead>
@@ -109,7 +116,7 @@ function ManageModal({ onClose }: ManageModalProps) {
})}
</Tbody>
</Table>
{collaboratorList?.length === 0 && <EmptyTip text={'暂无协作者'} />}
{collaboratorList?.length === 0 && <EmptyTip text={t('user:team.no_collaborators')} />}
</TableContainer>
{loading && <Loading fixed={false} />}
</ModalBody>

View File

@@ -47,8 +47,8 @@ function AddManagerModal({ onClose, onSuccess }: { onClose: () => void; onSucces
refetchMembers();
onSuccess();
},
successToast: '成功',
errorToast: '失败'
successToast: t('common:common.Success'),
errorToast: t('common:common.failed')
});
const filterMembers = useMemo(() => {
@@ -83,7 +83,7 @@ function AddManagerModal({ onClose, onSuccess }: { onClose: () => void; onSucces
<MyIcon name="common/searchLight" w="16px" color={'myGray.500'} />
</InputLeftElement>
<Input
placeholder="搜索用户名"
placeholder={t('user:search_user')}
fontSize="sm"
bg={'myGray.50'}
onChange={(e) => {
@@ -120,7 +120,7 @@ function AddManagerModal({ onClose, onSuccess }: { onClose: () => void; onSucces
</Flex>
</Flex>
<Flex borderLeft="1px" borderColor="myGray.200" flexDirection="column" p="4">
<Box mt={3}>: {selected.length} </Box>
<Box mt={3}>{t('common:chosen') + ': ' + selected.length} </Box>
<Box mt={5}>
{selected.map((member) => {
return (

View File

@@ -31,8 +31,8 @@ function PermissionManage() {
mutationFn: async (memberId: string) => {
return delMemberPermission(memberId);
},
successToast: '删除管理员成功',
errorToast: '删除管理员异常',
successToast: t('user:delete.admin_success'),
errorToast: t('user:delete.admin_failed'),
onSuccess: () => {
refetchMembers();
}
@@ -75,7 +75,7 @@ function PermissionManage() {
onOpenAddManager();
}}
>
{t('user:team.Add manager')}
</Button>
)}
</Flex>

View File

@@ -95,7 +95,7 @@ const TeamTagsAsync = ({ onClose }: { onClose: () => void }) => {
<Box>
<Box>{teamInfo?.teamName}</Box>
<Box color={'myGray.500'} fontSize={'xs'} fontWeight={'normal'}>
{'填写标签同步链接,点击同步按钮即可同步'}
{t('user:synchronization.title')}
</Box>
</Box>
}
@@ -110,7 +110,7 @@ const TeamTagsAsync = ({ onClose }: { onClose: () => void }) => {
ml={4}
autoFocus
bg={'myWhite.600'}
placeholder="请输入同步标签"
placeholder={t('user:synchronization.placeholder')}
{...register('teamDomain', {
required: true
})}
@@ -181,7 +181,7 @@ const TeamTagsAsync = ({ onClose }: { onClose: () => void }) => {
leftIcon={<RepeatIcon />}
onClick={handleSubmit((data) => onclickTagAsync(data))}
>
{t('user:synchronization.button')}
</Button>
</Flex>
</ModalBody>

View File

@@ -73,7 +73,7 @@ const QRCodePayModal = ({
return (
<MyModal isOpen title={t('common:user.Pay')} iconSrc="/imgs/modal/pay.svg">
<ModalBody textAlign={'center'}>
<Box mb={3}>: {readPrice}</Box>
<Box mb={3}>{t('common:pay.wechat', { price: readPrice })}</Box>
<Box id={'payQRCode'} display={'inline-block'} h={'128px'}></Box>
</ModalBody>
<ModalFooter />

View File

@@ -112,13 +112,13 @@ const StandardPlanContentList = ({
{!!planContent.permissionReRank && (
<Flex alignItems={'center'}>
<MyIcon name={'price/right'} w={'16px'} mr={3} />
<Box color={'myGray.600'}></Box>
<Box color={'myGray.600'}>{t('chat:rearrangement')}</Box>
</Flex>
)}
{!!planContent.permissionWebsiteSync && (
<Flex alignItems={'center'}>
<MyIcon name={'price/right'} w={'16px'} mr={3} />
<Box color={'myGray.600'}>Web站点同步</Box>
<Box color={'myGray.600'}>{t('chat:web_site_sync')}</Box>
</Flex>
)}
</Grid>