Vietnamese language support on web (#3549)

### What problem does this PR solve?

_Briefly describe what this PR aims to solve. Include background context
that will help reviewers understand the purpose of the PR._

### Type of change

- [X] New Feature (non-breaking change which adds functionality)
This commit is contained in:
so95 2024-11-21 17:43:08 +07:00 committed by GitHub
parent ee50f78d99
commit cc5960b88e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
10 changed files with 1064 additions and 4 deletions

View File

@ -3,6 +3,7 @@ import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
import { ReactQueryDevtools } from '@tanstack/react-query-devtools';
import { App, ConfigProvider, ConfigProviderProps } from 'antd';
import enUS from 'antd/locale/en_US';
import vi_VN from 'antd/locale/vi_VN';
import zhCN from 'antd/locale/zh_CN';
import zh_HK from 'antd/locale/zh_HK';
import dayjs from 'dayjs';
@ -27,6 +28,7 @@ const AntLanguageMap = {
en: enUS,
zh: zhCN,
'zh-TRADITIONAL': zh_HK,
vi: vi_VN,
};
const queryClient = new QueryClient();

View File

@ -45,6 +45,7 @@ export const LanguageList = [
'Traditional Chinese',
'Indonesia',
'Spanish',
'Vietnamese',
];
export const LanguageMap = {
@ -53,6 +54,7 @@ export const LanguageMap = {
'Traditional Chinese': '繁體中文',
Indonesia: 'Indonesia',
Spanish: 'Español',
Vietnamese: 'Tiếng việt',
};
export const LanguageTranslationMap = {
@ -61,6 +63,7 @@ export const LanguageTranslationMap = {
'Traditional Chinese': 'zh-TRADITIONAL',
Indonesia: 'id',
Spanish: 'es',
Vietnamese: 'vi',
};
export const FileMimeTypeMap = {

View File

@ -5,14 +5,17 @@ import { initReactI18next } from 'react-i18next';
import translation_en from './en';
import translation_es from './es';
import translation_id from './id';
import translation_vi from './vi';
import translation_zh from './zh';
import translation_zh_traditional from './zh-traditional';
const resources = {
en: translation_en,
zh: translation_zh,
'zh-TRADITIONAL': translation_zh_traditional,
id: translation_id,
es: translation_es,
vi: translation_vi,
};
i18n
@ -22,7 +25,7 @@ i18n
detection: {
lookupLocalStorage: 'lng',
},
supportedLngs: ['en', 'zh', 'zh-TRADITIONAL', 'id', 'es'],
supportedLngs: ['en', 'zh', 'zh-TRADITIONAL', 'id', 'es', 'vi'],
resources,
fallbackLng: 'en',
interpolation: {

View File

@ -439,6 +439,7 @@ The above is the content you need to summarize.`,
multiTurnTip:
'In multi-round conversations, the query to the knowledge base is optimized. The large model will be called to consume additional tokens.',
howUseId: 'How to use chat ID?',
description: 'Description of assistant',
},
setting: {
profile: 'Profile',

1046
web/src/locales/vi.ts Normal file

File diff suppressed because it is too large Load Diff

View File

@ -437,6 +437,7 @@ export default {
multiTurnTip:
'在多轮对话的中对去知识库查询的问题进行优化。会调用大模型额外消耗token。',
howUseId: '如何使用聊天ID',
description: '助理描述',
},
setting: {
profile: '概要',

View File

@ -6,10 +6,10 @@ const NoFoundPage = () => {
<Result
status="404"
title="404"
subTitle="页面未找到,请输入正确的地址。"
subTitle="Page not found, please enter a correct address."
extra={
<Button type="primary" onClick={() => history.push('/')}>
返回主页
Business
</Button>
}
/>

View File

@ -51,6 +51,9 @@ const AssistantSetting = ({ show, form }: ISegmentedContentProps) => {
>
<Input placeholder={t('namePlaceholder')} />
</Form.Item>
<Form.Item name={'description'} label={t('description')}>
<Input placeholder={t('descriptionPlaceholder')} />
</Form.Item>
<Form.Item
name="icon"
label={t('assistantAvatar')}

View File

@ -34,7 +34,7 @@ const Login = () => {
if (title === 'login') {
const code = await login({
email: params.email,
email: `${params.email}`.trim(),
password: rsaPassWord,
});
if (code === 0) {

View File

@ -35,6 +35,7 @@ const IconMap = {
es: 'es',
doc_store: 'storage',
redis: 'redis',
storage: 'minio',
database: 'database',
};