Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 7 additions & 2 deletions packages/global/common/i18n/type.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,12 @@ export type I18nStringType = z.infer<typeof I18nStringSchema>;
export enum LangEnum {
'zh_CN' = 'zh-CN',
'zh_Hant' = 'zh-Hant',
'en' = 'en'
'en' = 'en',
'ko' = 'ko'
}

export type localeType = `${LangEnum}`;
export const LocaleList = ['en', 'zh-CN', 'zh-Hant'] as const;
export const LocaleList = ['en', 'zh-CN', 'zh-Hant', 'ko'] as const;

export const LanguageSchema = z.enum(LocaleList).meta({ description: '用户语言偏好' });

Expand All @@ -30,6 +31,10 @@ export const langMap = {
[LangEnum.zh_Hant]: {
label: '繁体中文',
avatar: 'common/language/China'
},
[LangEnum.ko]: {
label: '한국어',
avatar: 'common/language/Korea'
}
};

Expand Down
4 changes: 3 additions & 1 deletion packages/service/core/app/provider/controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,5 +25,7 @@ export const getModelProvider = (provider?: string, language = 'en') => {
return defaultProvider;
}

return global.ModelProviderMapCache[language as langType][provider] ?? defaultProvider;
// Locales without a pre-built provider name/avatar map (e.g. those not covered by langType)
// fall back to the default provider info instead of throwing.
return global.ModelProviderMapCache[language as langType]?.[provider] ?? defaultProvider;
};
1 change: 1 addition & 0 deletions packages/web/components/common/Icon/constants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ export const iconPaths = {
'common/inviteLight': () => import('./icons/common/inviteLight.svg'),
'common/language/America': () => import('./icons/common/language/America.svg'),
'common/language/China': () => import('./icons/common/language/China.svg'),
'common/language/Korea': () => import('./icons/common/language/Korea.svg'),
'common/language/en': () => import('./icons/common/language/en.svg'),
'common/language/translate': () => import('./icons/common/language/translate.svg'),
'common/language/zh': () => import('./icons/common/language/zh.svg'),
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
46 changes: 46 additions & 0 deletions packages/web/i18n/ko/account.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
{
"api_key": "API 키",
"bills_and_invoices": "청구서",
"custom_domain": "커스텀 도메인",
"confirm_logout": "로그아웃하시겠습니까?",
"language": "언어 및 시간대",
"logout": "로그아웃",
"model_provider": "모델 제공업체",
"notifications": "알림",
"personal_information": "개인 정보",
"promotion_records": "프로모션",
"team": "팀",
"third_party": "제3자",
"usage_records": "사용량",
"app_registration_count": "앱 등록 수",
"audit_log_store_duration": "감사 로그 보관 기간",
"bill_detail": "청구서 상세",
"chat_history_store_duration": "대화 기록 보관 기간",
"custom_config_details": "커스텀 설정 상세",
"day": "일",
"extra_ai_points": "AI 포인트 계산 기준",
"extra_dataset_size": "추가 지식베이스 용량",
"generation_time": "생성 시간",
"has_invoice": "세금계산서 발행 여부",
"hour": "시간",
"max_app_amount": "최대 앱 수",
"max_dataset_amount": "최대 지식베이스 수",
"max_dataset_size": "최대 지식베이스 용량",
"max_team_member": "최대 팀원 수",
"month": "월",
"order_number": "주문 번호",
"order_type": "주문 유형",
"payment_method": "결제 방법",
"requests_per_minute": "분당 요청 수",
"status": "상태",
"subscription_mode_month": "기간",
"subscription_package": "구독 패키지",
"subscription_period": "구독 주기",
"support_wallet_amount": "금액",
"ticket_response_time": "티켓 응답 시간",
"website_sync_per_dataset": "지식베이스별 웹사이트 동기화",
"yes": "예",
"no": "아니오",
"yuan": "¥{{amount}}",
"bill.not_need_invoice": "잔액 결제이므로 세금계산서를 발행할 수 없습니다"
}
29 changes: 29 additions & 0 deletions packages/web/i18n/ko/account_apikey.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
{
"cancel_select": "선택 해제",
"created_at": "생성일",
"create_tag_with_name": "\"{{name}}\" 생성",
"create_time": "생성 시간",
"delete_tag": "태그 삭제",
"delete_tag_confirm": "이 태그를 삭제하시겠습니까? 이 태그를 사용하는 API 키에서 제거됩니다.",
"edit_tag": "태그 편집",
"key_tips": "API 키를 사용하여 특정 엔드포인트에 접근할 수 있습니다. 앱에 접근하려면 해당 앱 내부의 API 키를 사용하세요.",
"last_used_at": "마지막 사용",
"last_used_time": "마지막 사용 시간",
"no_tags": "태그 없음",
"remaining_points": "잔여 크레딧",
"search_key_name_or_value": "키 이름 또는 키 일부로 검색",
"search_or_add_tag": "태그 검색 또는 추가",
"search_tag": "태그 검색",
"select_tag": "태그 선택",
"sort_label": "정렬",
"sort_by_create_time": "생성 시간",
"sort_by_last_used_time": "마지막 사용 시간",
"sort_by_remaining_points": "잔여 크레딧",
"tag_filter": "태그별 필터",
"tag_manage": "태그 관리",
"tag_name": "태그 이름",
"tag_total": "총 {{total}}개 태그",
"tags": "태그",
"time": "시간",
"tutorial": "튜토리얼"
}
45 changes: 45 additions & 0 deletions packages/web/i18n/ko/account_bill.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
{
"Invoice_document": "세금계산서 문서",
"all": "전체",
"back": "돌아가기",
"bank_account": "개설 계좌",
"bank_name": "개설 은행",
"bill_record": "청구 기록",
"click_to_download": "클릭하여 다운로드",
"company_address": "회사 주소",
"company_phone": "회사 전화번호",
"completed": "완료됨",
"confirm": "확인",
"contact_phone": "연락처 전화번호",
"contact_phone_void": "연락처 전화번호 형식 오류",
"default_header": "기본 상호",
"detail": "상세",
"email_address": "이메일 주소",
"invoice_amount": "세금계산서 금액",
"invoice_detail": "세금계산서 상세",
"invoice_sending_info": "세금계산서는 3~7 영업일 이내에 이메일로 발송됩니다. 잠시만 기다려 주세요.",
"need_special_invoice": "전용 세금계산서가 필요하신가요?",
"no_invoice_record": "청구 기록이 없습니다~",
"no_invoice_record_tip": "아직 세금계산서 발행 기록이 없습니다",
"organization_name": "기관명",
"payway_coupon": "쿠폰 코드",
"save": "저장",
"save_failed": "저장 중 오류가 발생했습니다",
"save_success": "저장되었습니다",
"submit_failed": "제출 실패",
"submit_success": "제출 성공",
"submitted": "제출됨",
"support_wallet_apply_invoice": "청구 가능한 내역",
"support_wallet_bill_tag_invoice": "세금계산서",
"support_wallet_invoicing": "세금계산서 발행 중",
"time": "시간",
"total_amount": "총액",
"type": "유형",
"unit_code": "사업자등록번호",
"wecom_not_pay_tip": "아직 결제되지 않았습니다. 곧 결제 페이지로 이동합니다",
"status": "상태",
"support_wallet_amount": "금액",
"yes": "예",
"no": "아니오",
"yuan": "¥{{amount}}"
}
23 changes: 23 additions & 0 deletions packages/web/i18n/ko/account_custom_domain.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
{
"custom_domain": "커스텀 도메인",
"DNS_record": "DNS 레코드",
"DNS_record.type": "유형",
"DNS_resolve_hint": "도메인 서비스 제공업체로 이동하여 이 도메인에 대해 <bold>{{domain}}</bold>으로의 CNAME 레코드를 추가해 주세요. 레코드가 적용된 후 커스텀 도메인을 연결할 수 있습니다.",
"delete_confirm": "이 커스텀 도메인을 삭제하시겠습니까?",
"dns_resolved": "확인됨",
"dns_resolving": "확인 중",
"domain": "도메인",
"domain_verify": "도메인 인증",
"domain_verify.content": "파일 내용",
"domain_verify.desc": "저장 후 {{domain}}/{{path}}에 접속하면 {{content}}가 반환됩니다",
"domain_verify.path": "파일 경로",
"provider": "도메인 제공업체",
"provider.aliyun": "알리바바 클라우드",
"provider.tencent": "텐센트 클라우드",
"provider.volcengine": "볼케이노 엔진",
"registration_hint": "본인의 도메인을 준비하시고 <bold>{{provider}}</bold>를 통해 ICP 등록을 완료한 후, 아래 입력란에 도메인을 입력해 주세요",
"status.active": "활성",
"status.inactive": "비활성",
"upgrade_to_use_custom_domain": "현재 플랜에서는 커스텀 도메인을 지원하지 않습니다. 먼저 업그레이드해 주세요",
"upgrade_plan": "플랜 업그레이드"
}
78 changes: 78 additions & 0 deletions packages/web/i18n/ko/account_info.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
{
"account_knowledge_base_cleanup_warning": "무료 버전 팀이 30일 연속으로 시스템에 로그인하지 않으면, 시스템이 계정의 지식베이스를 자동으로 정리합니다.",
"active": "적용 중",
"ai_points": "AI 포인트",
"ai_points_calculation_standard": "AI 포인트",
"ai_points_usage_tip": "AI 모델을 호출할 때마다 일정량의 AI 포인트가 소비됩니다. \n구체적인 계산 기준은 위의 \"과금 기준\"을 참고하세요.",
"app_amount": "에이전트 수",
"app_registration_count": "등록된 앱 수",
"apply_app_registration": "앱 등록 신청",
"avatar": "아바타",
"avatar_can_only_select_jpg_png": "아바타는 jpg 또는 png 형식만 선택할 수 있습니다",
"avatar_can_only_select_one": "아바타는 이미지 한 장만 선택할 수 있습니다",
"balance": "잔액",
"billing_standard": "기준",
"cancel": "취소",
"change": "변경",
"check_purchase_history": "주문 보기",
"choose_avatar": "클릭하여 아바타 선택",
"click_modify_nickname": "클릭하여 닉네임 수정",
"confirm": "확인",
"confirm_password": "비밀번호 확인",
"contact_customer_service": "고객센터 문의",
"contact_us": "문의하기",
"current_package": "현재 요금제",
"current_token_price": "현재 포인트 가격",
"dataset_amount": "지식베이스 수",
"discount_coupon": "쿠폰",
"effective_time": "적용 시간",
"exchange": "교환",
"exchange_failure": "교환 실패",
"exchange_success": "교환 성공",
"expiration_time": "만료 시간",
"expired": "만료됨",
"expired_tips": "이미 만료되었습니다~",
"general_info": "일반 정보",
"group": "그룹",
"help_document": "도움말 문서",
"member_amount": "멤버 수",
"member_name": "이름",
"month": "월",
"new_password": "새 비밀번호",
"not_started_tips": "시작되지 않음",
"old_password": "기존 비밀번호",
"package_and_usage": "요금제",
"package_details": "상세",
"package_expiry_time": "만료됨",
"package_usage_rules": "패키지 사용 규칙: 시스템은 상위 등급의 패키지를 우선 사용하며, 사용하지 않은 기존 패키지는 이후에 적용됩니다.",
"password": "비밀번호",
"password_tip": "비밀번호는 최소 8자 이상이어야 하며, 숫자, 문자, 특수문자 중 최소 두 가지 조합을 포함해야 합니다",
"password_update_error": "비밀번호 변경 중 오류가 발생했습니다",
"password_update_success": "비밀번호가 변경되었습니다",
"pending_usage": "사용 예정",
"please_bind_contact": "연락처 정보를 등록해 주세요",
"purchase_extra_package": "업그레이드",
"redeem_coupon": "쿠폰 사용",
"resource_usage": "사용량",
"select_avatar": "클릭하여 아바타 선택",
"standard_package_and_extra_resource_package": "기본 및 추가 요금제 포함",
"storage_capacity": "저장 용량",
"team_balance": "잔액",
"team_info": "팀 정보",
"token_validity_period": "포인트는 1년간 유효합니다",
"tokens": "포인트",
"type": "유형",
"unlimited": "무제한",
"update_password": "비밀번호 변경",
"update_success_tip": "데이터가 업데이트되었습니다",
"upgrade_package": "업그레이드",
"usage_balance": "잔액 사용: 잔액 사용",
"usage_balance_notice": "시스템 업그레이드로 인해 기존의 \"잔액에서 자동 갱신 차감\" 방식이 폐지되었으며, 잔액 충전 입구도 닫혔습니다. \n보유 중인 잔액은 포인트 구매에 사용하실 수 있습니다",
"use": "사용",
"used_time": "사용 시각",
"used_tips": "이미 사용됨",
"user_account": "사용자 이름",
"user_team_team_name": "팀",
"you_can_convert": "교환 가능",
"yuan": "위안"
}
6 changes: 6 additions & 0 deletions packages/web/i18n/ko/account_inform.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"notification_detail": "알림 상세",
"no_notifications": "아직 알림이 없습니다",
"system": "공식",
"team": "팀"
}
Loading