diff --git a/backend/apps/chat/models/chat_model.py b/backend/apps/chat/models/chat_model.py index d8005e266..8977525c9 100644 --- a/backend/apps/chat/models/chat_model.py +++ b/backend/apps/chat/models/chat_model.py @@ -354,7 +354,7 @@ def guess_sys_question(self, articles_number: int = 4): sqlbot_name=self.sqlbot_name) def guess_user_question(self, old_questions: str = "[]"): - return get_guess_question_template()['user'].format(question=self.question, schema=self.db_schema, + return get_guess_question_template()['user'].format(lang=self.lang, question=self.question, schema=self.db_schema, old_questions=old_questions) def filter_sys_question(self): @@ -411,7 +411,7 @@ class ChatQuestionBase(BaseModel): class McpQuestion(ChatQuestionBase): token: str = Body(description='token') stream: Optional[bool] = Body(description='是否流式输出,默认为true开启, 关闭false则返回JSON对象', default=True) - lang: Optional[str] = Body(description='语言:zh-CN|zh-TW|en|ko-KR', default='zh-CN') + lang: Optional[str] = Body(description='语言:zh-CN|zh-TW|en|ko-KR|th-TH', default='zh-CN') datasource_id: Optional[int | str] = Body(description='数据源ID,仅当当前对话没有确定数据源时有效', default=None) return_img: Optional[bool] = Body(description='是否返回图表,默认为true开启, 关闭false则仅返回数据', default=True) custom_model: Optional[str | int] = Body(description='模型ID', default=None) diff --git a/backend/apps/chat/task/llm.py b/backend/apps/chat/task/llm.py index 94fe239ed..4be8ed1e9 100644 --- a/backend/apps/chat/task/llm.py +++ b/backend/apps/chat/task/llm.py @@ -2086,6 +2086,8 @@ def get_lang_name(lang: str): return '英文' if normalized.startswith('ko'): return '韩语' + if normalized.startswith('th'): + return '泰语' return '简体中文' diff --git a/backend/apps/mcp/mcp.py b/backend/apps/mcp/mcp.py index 8b995931c..cf16fbb9f 100644 --- a/backend/apps/mcp/mcp.py +++ b/backend/apps/mcp/mcp.py @@ -166,7 +166,7 @@ async def get_model_by_ws(session: SessionDep, mcp_oid: WsMcp): async def mcp_question(session: SessionDep, trans: Trans, chat: McpQuestion): session_user = get_user(session, chat.token) lang = chat.lang - if lang in ["zh-CN", "zh-TW", "en", "ko-KR"]: + if lang in ["zh-CN", "zh-TW", "en", "ko-KR", "th-TH"]: session_user.language = lang # if chat.oid: # w_list = await user_ws_options(session, session_user.id, trans) diff --git a/backend/apps/system/api/user.py b/backend/apps/system/api/user.py index d383fe597..edfbf768a 100644 --- a/backend/apps/system/api/user.py +++ b/backend/apps/system/api/user.py @@ -370,7 +370,7 @@ async def batch_del(session: SessionDep, id_list: list[int]): @clear_cache(namespace=CacheNamespace.AUTH_INFO, cacheName=CacheName.USER_INFO, keyExpression="current_user.id") async def langChange(session: SessionDep, current_user: CurrentUser, trans: Trans, language: UserLanguage): lang = language.language - if lang not in ["zh-CN", "zh-TW", "en", "ko-KR"]: + if lang not in ["zh-CN", "zh-TW", "en", "ko-KR", "th-TH"]: raise Exception(trans('i18n_user.language_not_support', key = lang)) db_user: UserModel = get_db_user(session=session, user_id=current_user.id) db_user.language = lang diff --git a/backend/apps/system/schemas/system_schema.py b/backend/apps/system/schemas/system_schema.py index 1e75bdfbc..3660a6e23 100644 --- a/backend/apps/system/schemas/system_schema.py +++ b/backend/apps/system/schemas/system_schema.py @@ -32,7 +32,7 @@ class BaseUser(BaseModel): class BaseUserDTO(BaseUser, BaseCreatorDTO): - language: str = Field(pattern=r"^(zh-CN|zh-TW|en|ko-KR)$", default="zh-CN", description="用户语言") + language: str = Field(pattern=r"^(zh-CN|zh-TW|en|ko-KR|th-TH)$", default="zh-CN", description="用户语言") password: str status: int = 1 origin: int = 0 @@ -47,8 +47,8 @@ def to_dict(self): @field_validator("language") def validate_language(cls, lang: str) -> str: - if not re.fullmatch(r"^(zh-CN|zh-TW|en|ko-KR)$", lang): - raise ValueError("Language must be 'zh-CN', 'zh-TW', 'en', or 'ko-KR'") + if not re.fullmatch(r"^(zh-CN|zh-TW|en|ko-KR|th-TH)$", lang): + raise ValueError("Language must be 'zh-CN', 'zh-TW', 'en', 'ko-KR', or 'th-TH'") return lang diff --git a/backend/locales/th-TH.json b/backend/locales/th-TH.json new file mode 100644 index 000000000..eb2af0d9d --- /dev/null +++ b/backend/locales/th-TH.json @@ -0,0 +1,209 @@ +{ + "i18n_default_workspace": "พื้นที่ทำงานเริ่มต้น", + "i18n_ds_name_exist": "ชื่อนี้มีอยู่แล้ว", + "i18n_concat_admin": "โปรดติดต่อผู้ดูแลระบบ!", + "i18n_exist": "{msg} มีอยู่แล้ว!", + "i18n_name": "ชื่อ", + "i18n_not_exist": "{msg} ไม่มีอยู่!", + "i18n_error": "{key} ผิดพลาด!", + "i18n_miss_args": "ขาดพารามิเตอร์ {key}!", + "i18n_format_invalid": "รูปแบบ {key} ไม่ถูกต้อง!", + "i18n_login": { + "account_pwd_error": "บัญชีหรือรหัสผ่านไม่ถูกต้อง!", + "no_associated_ws": "ไม่มีพื้นที่ทำงานที่เชื่อมโยง {msg}", + "user_disable": "บัญชีถูกปิดใช้งาน {msg}", + "origin_error": "วิธีเข้าสู่ระบบไม่ถูกต้อง", + "prohibit_auto_create": "ห้ามสร้างผู้ใช้โดยอัตโนมัติ โปรดซิงค์ผู้ใช้ก่อน", + "no_platform_user": "ไม่พบบัญชี โปรดซิงค์ผู้ใช้ก่อน", + "new_pwd_is_initial": "รหัสผ่านใหม่ต้องไม่เป็นรหัสผ่านเริ่มต้น" + }, + "i18n_user": { + "account": "บัญชี", + "email": "อีเมล", + "password": "รหัสผ่าน", + "language_not_support": "ระบบไม่รองรับภาษา [{key}]!", + "ws_miss": "ผู้ใช้ปัจจุบันไม่ได้อยู่ในพื้นที่ทำงาน [{ws}]!", + "name": "ชื่อ", + "status": "สถานะผู้ใช้", + "origin": "แหล่งที่มาของผู้ใช้", + "workspace": "พื้นที่ทำงาน", + "role": "บทบาท", + "platform_user_id": "รหัสประจำตัวผู้ใช้ภายนอก", + "administrator": "ผู้ดูแลระบบ", + "ordinary_member": "สมาชิกทั่วไป", + "status_enabled": "เปิดใช้งานแล้ว", + "status_disabled": "ปิดใช้งานแล้ว", + "local_creation": "สร้างในระบบ" + }, + "i18n_ws": { + "title": "พื้นที่ทำงาน" + }, + "i18n_permission": { + "only_admin": "รองรับเฉพาะผู้ดูแลระบบเท่านั้น!", + "no_permission": "ไม่มีสิทธิ์เรียกใช้ {url}{msg}", + "authenticate_invalid": "การยืนยันตัวตนไม่ถูกต้อง【{msg}】", + "token_expired": "Token หมดอายุแล้ว", + "only_ws_admin": "รองรับเฉพาะผู้ดูแลพื้นที่ทำงานเท่านั้น!", + "permission_resource_limit": "ไม่มีสิทธิ์ดำเนินการ หรือไม่พบทรัพยากร!" + }, + "i18n_llm": { + "validate_error": "ตรวจสอบไม่สำเร็จ [{msg}]", + "delete_default_error": "ไม่สามารถลบโมเดลเริ่มต้นได้ [{key}]!", + "miss_default": "ยังไม่ได้กำหนดค่าโมเดลภาษาขนาดใหญ่เริ่มต้น" + }, + "i18n_ds_invalid": "การเชื่อมต่อแหล่งข้อมูลไม่ถูกต้อง", + "i18n_ds_upload_error": "อัปโหลดไฟล์ล้มเหลว", + "i18n_embedded": { + "invalid_origin": "ตรวจสอบโดเมนไม่สำเร็จ【{origin}】", + "missing_sign": "ขาดลายเซ็นการฝัง (SQLBOT-EMBEDDED-SIGN) จึงไม่สามารถยืนยันตัวตนผู้ฝังได้", + "assistant_id_mismatch": "รหัสผู้ช่วยในลายเซ็นไม่ตรงกับคำขอปัจจุบัน จึงไม่สามารถยืนยันตัวตนผู้ฝังได้", + "missing_origin": "หน้าเว็บปัจจุบันขาดข้อมูลแหล่งที่มา (Origin/Referer) จึงไม่สามารถยืนยันตัวตนผู้ฝังได้", + "target_origin_mismatch": "โดเมนต้นทางในลายเซ็นไม่ตรงกับโดเมนของหน้าเว็บปัจจุบัน จึงไม่สามารถยืนยันตัวตนผู้ฝังได้", + "invalid_sign": "ลายเซ็นการฝังไม่ถูกต้องหรือเสียหาย จึงไม่สามารถยืนยันตัวตนผู้ฝังได้", + "sign_time_expired": "ความล่าช้าในการซิงค์ระหว่างเซิร์ฟเวอร์ (SQLBot) กับหน้าเว็บปัจจุบัน (ฝั่งผู้ฝัง) เกิน 10 วินาที ทำให้การเชื่อมต่อขาดหาย", + "sign_time_invalid": "รูปแบบเวลาในลายเซ็นไม่ถูกต้อง จึงไม่สามารถยืนยันตัวตนผู้ฝังได้", + "automation_tool_detected": "ตรวจพบการเข้าถึงด้วยเครื่องมืออัตโนมัติ จึงบล็อกการฝัง", + "user_agent_mismatch": "ตัวระบุเบราว์เซอร์ในลายเซ็นไม่ตรงกับคำขอปัจจุบัน จึงบล็อกการฝัง", + "timezone_mismatch": "ข้อมูลเขตเวลาในลายเซ็นไม่สอดคล้องกับเวลาในลายเซ็น จึงบล็อกการฝัง" + }, + "i18n_chat": { + "record_id_in_mcp": "รหัสการตอบกลับ: " + }, + "i18n_terminology": { + "terminology_not_exists": "ไม่พบคำศัพท์นี้", + "datasource_cannot_be_none": "แหล่งข้อมูลต้องไม่ว่าง", + "cannot_be_repeated": "ชื่อคำศัพท์และคำพ้องความหมายต้องไม่ซ้ำกัน", + "exists_in_db": "ชื่อคำศัพท์และคำพ้องความหมายมีอยู่แล้ว", + "term_name": "ชื่อคำศัพท์", + "term_description": "คำอธิบายคำศัพท์", + "effective_data_sources": "แหล่งข้อมูลที่มีผล", + "all_data_sources": "แหล่งข้อมูลทั้งหมด", + "synonyms": "คำพ้องความหมาย", + "term_name_template": "ชื่อคำศัพท์ (จำเป็น)", + "term_description_template": "คำอธิบายคำศัพท์ (จำเป็น)", + "effective_data_sources_template": "แหล่งข้อมูลที่มีผล (รองรับหลายรายการ คั่นด้วย \",\")", + "all_data_sources_template": "แหล่งข้อมูลทั้งหมด (Y: ใช้กับแหล่งข้อมูลทั้งหมด, N: ใช้กับแหล่งข้อมูลที่ระบุ)", + "synonyms_template": "คำพ้องความหมาย (รองรับหลายรายการ คั่นด้วย \",\")", + "term_name_template_example_1": "คำศัพท์ 1", + "term_description_template_example_1": "คำอธิบายคำศัพท์ 1", + "effective_data_sources_template_example_1": "แหล่งข้อมูลที่มีผล 1, แหล่งข้อมูลที่มีผล 2", + "synonyms_template_example_1": "คำพ้องความหมาย 1, คำพ้องความหมาย 2", + "term_name_template_example_2": "คำศัพท์ 2", + "term_description_template_example_2": "คำอธิบายคำศัพท์ 2", + "synonyms_template_example_2": "คำพ้องความหมาย 3", + "word_cannot_be_empty": "ชื่อคำศัพท์ต้องไม่ว่าง", + "description_cannot_be_empty": "คำอธิบายคำศัพท์ต้องไม่ว่าง", + "datasource_not_found": "ไม่พบแหล่งข้อมูล" + }, + "i18n_data_training": { + "datasource_list_is_not_found": "ไม่พบรายการแหล่งข้อมูล", + "datasource_id_not_found": "ไม่พบรหัสแหล่งข้อมูล: {key}", + "datasource_cannot_be_none": "แหล่งข้อมูลต้องไม่ว่าง", + "datasource_assistant_cannot_be_none": "แหล่งข้อมูลและแอปพลิเคชันขั้นสูงต้องไม่ว่างทั้งคู่", + "data_training_not_exists": "ไม่พบตัวอย่างนี้", + "exists_in_db": "คำถามนี้มีอยู่แล้ว", + "data_training": "คลังตัวอย่าง SQL", + "problem_description": "คำอธิบายปัญหา", + "sample_sql": "ตัวอย่าง SQL", + "effective_data_sources": "แหล่งข้อมูลที่มีผล", + "advanced_application": "แอปพลิเคชันขั้นสูง", + "problem_description_template": "คำอธิบายปัญหา (จำเป็น)", + "sample_sql_template": "ตัวอย่าง SQL (จำเป็น)", + "effective_data_sources_template": "แหล่งข้อมูลที่มีผล", + "advanced_application_template": "แอปพลิเคชันขั้นสูง", + "problem_description_template_example": "สอบถาม ID ทั้งหมดในตาราง TEST", + "effective_data_sources_template_example": "แหล่งข้อมูลที่มีผล 1", + "advanced_application_template_example": "ชื่อแอปพลิเคชันขั้นสูงที่มีผล", + "error_info": "ข้อมูลข้อผิดพลาด", + "question_cannot_be_empty": "คำถามต้องไม่ว่าง", + "description_cannot_be_empty": "ตัวอย่าง SQL ต้องไม่ว่าง", + "datasource_not_found": "ไม่พบแหล่งข้อมูล", + "advanced_application_not_found": "ไม่พบแอปพลิเคชันขั้นสูง" + }, + "i18n_custom_prompt": { + "exists_in_db": "ชื่อเทมเพลตมีอยู่แล้ว", + "not_exists": "ไม่พบเทมเพลตนี้", + "prompt_word_name": "ชื่อพรอมป์ต์", + "prompt_word_content": "เนื้อหาพรอมป์ต์", + "effective_data_sources": "แหล่งข้อมูลที่มีผล", + "all_data_sources": "แหล่งข้อมูลทั้งหมด", + "prompt_word_name_template": "ชื่อพรอมป์ต์ (จำเป็น)", + "prompt_word_content_template": "เนื้อหาพรอมป์ต์ (จำเป็น)", + "effective_data_sources_template": "แหล่งข้อมูลที่มีผล (รองรับหลายรายการ คั่นด้วย \",\")", + "all_data_sources_template": "แหล่งข้อมูลทั้งหมด (Y: ใช้กับแหล่งข้อมูลทั้งหมด, N: ใช้กับแหล่งข้อมูลที่ระบุ)", + "prompt_word_name_template_example1": "พรอมป์ต์ 1", + "prompt_word_content_template_example1": "อธิบายพรอมป์ต์ของคุณโดยละเอียด", + "effective_data_sources_template_example1": "แหล่งข้อมูลที่มีผล 1, แหล่งข้อมูลที่มีผล 2", + "prompt_word_name_template_example2": "พรอมป์ต์ 2", + "prompt_word_content_template_example2": "อธิบายพรอมป์ต์ของคุณโดยละเอียด", + "name_cannot_be_empty": "ชื่อต้องไม่ว่าง", + "prompt_cannot_be_empty": "เนื้อหาพรอมป์ต์ต้องไม่ว่าง", + "type_cannot_be_empty": "ชนิดต้องไม่ว่าง", + "datasource_not_found": "ไม่พบแหล่งข้อมูล", + "datasource_cannot_be_none": "แหล่งข้อมูลต้องไม่ว่าง" + }, + "i18n_excel_export": { + "data_is_empty": "ข้อมูลในตารางว่าง ไม่สามารถส่งออกข้อมูลได้" + }, + "i18n_excel_import": { + "col_num_not_match": "จำนวนคอลัมน์ในไฟล์ EXCEL ไม่ตรงกัน" + }, + "i18n_authentication": { + "record_not_exist": "ไม่พบระเบียน {msg} โปรดบันทึกก่อน!" + }, + "i18n_audit": { + "success": "สำเร็จ", + "failed": "ล้มเหลว", + "system_log": "บันทึกการดำเนินการ", + "operation_type_name": "ชนิดการดำเนินการ", + "operation_detail_info": "รายละเอียดการดำเนินการ", + "user_name": "ผู้ดำเนินการ", + "oid_name": "พื้นที่ทำงาน", + "operation_status_name": "สถานะการดำเนินการ", + "error_message": "ข้อมูลข้อผิดพลาด", + "ip_address": "ที่อยู่ IP", + "create_time": "เวลาที่ดำเนินการ", + "chat": "สอบถามข้อมูลอัจฉริยะ", + "datasource": "แหล่งข้อมูล", + "dashboard": "แดชบอร์ด", + "member": "สมาชิก", + "permission": "สิทธิ์", + "terminology": "คำศัพท์", + "data_training": "คลังตัวอย่าง SQL", + "prompt_words": "พรอมป์ต์", + "user": "ผู้ใช้", + "workspace": "พื้นที่ทำงาน", + "ai_model": "โมเดล AI", + "application": "แอปพลิเคชัน", + "theme": "การตั้งค่ารูปลักษณ์", + "create": "สร้าง", + "delete": "ลบ", + "update": "อัปเดต", + "edit": "แก้ไข", + "login": "เข้าสู่ระบบ", + "export": "ส่งออก", + "import": "นำเข้า", + "add": "เพิ่ม", + "create_or_update": "เปลี่ยนแปลง", + "api_key": "API Key", + "params_setting": "การกำหนดค่าพารามิเตอร์", + "rules": "กฎสิทธิ์", + "log_setting": "การยืนยันตัวตนเข้าสู่ระบบ", + "setting": "ตั้งค่า", + "system_management": "การจัดการระบบ", + "opt_log": "บันทึกการดำเนินการ", + "prediction": "การคาดการณ์ข้อมูล", + "analysis": "การวิเคราะห์ข้อมูล", + "reset_pwd": "รีเซ็ตรหัสผ่าน", + "update_pwd": "อัปเดตรหัสผ่าน", + "update_status": "อัปเดตสถานะ", + "update_table_relation": "เปลี่ยนแปลงความสัมพันธ์ระหว่างตาราง" + }, + "i18n_table_not_exist": "ไม่พบตารางปัจจุบัน", + "i18n_variable": { + "name_exist": "ชื่อตัวแปรมีอยู่แล้ว", + "name": "ชื่อ", + "account": "บัญชี", + "email": "อีเมล" + } +} diff --git a/backend/templates/template.yaml b/backend/templates/template.yaml index 79f36a828..e9ab6c371 100644 --- a/backend/templates/template.yaml +++ b/backend/templates/template.yaml @@ -564,8 +564,6 @@ template: guess: system: | - ### 请使用语言:{lang} 回答,不需要输出深度思考过程 - ### 说明: 您的任务是根据给定的表结构,用户问题以及以往用户提问,推测用户接下来可能提问的1-{articles_number}个问题。 请遵循以下规则: @@ -581,7 +579,6 @@ template: - 最多返回{articles_number}个你推测出的结果 - 若无法推测,则返回空数据JSON: [] - - 若你的给出的JSON不是{lang}的,则必须翻译为{lang} ### 响应, 请直接返回JSON结果(不要包含任何其他文本): @@ -595,7 +592,8 @@ template: ### 以往提问: {old_questions} - /no_think + ## 请根据上述要求,使用语言:{lang} 进行输出,不需要输出深度思考过程 + ## JSON列表内的值,语言请与 {lang} 保持一致 analysis: system: | diff --git a/frontend/src/components/Language-selector/index.vue b/frontend/src/components/Language-selector/index.vue index 7ba9b37cf..8a4ac9a3e 100644 --- a/frontend/src/components/Language-selector/index.vue +++ b/frontend/src/components/Language-selector/index.vue @@ -36,6 +36,7 @@ const languageOptions = computed(() => [ { value: 'zh-CN', label: t('common.simplified_chinese') }, { value: 'zh-TW', label: t('common.traditional_chinese') }, { value: 'ko-KR', label: t('common.korean') }, + { value: 'th-TH', label: t('common.thai') }, ]) const selectedLanguage = computed(() => { diff --git a/frontend/src/components/layout/Person.vue b/frontend/src/components/layout/Person.vue index a58a02afb..ac689b12e 100644 --- a/frontend/src/components/layout/Person.vue +++ b/frontend/src/components/layout/Person.vue @@ -66,6 +66,10 @@ const languageList = computed(() => [ name: '한국인', value: 'ko-KR', }, + { + name: 'ไทย', + value: 'th-TH', + }, ]) const popoverRef = ref() diff --git a/frontend/src/i18n/en.json b/frontend/src/i18n/en.json index 1816cf4c5..daa0c1662 100644 --- a/frontend/src/i18n/en.json +++ b/frontend/src/i18n/en.json @@ -209,6 +209,7 @@ "reset": "Reset", "simplified_chinese": "简体中文", "korean": "한국어", + "thai": "ไทย", "traditional_chinese": "繁體中文", "help": "Help", "language": "Language", diff --git a/frontend/src/i18n/index.ts b/frontend/src/i18n/index.ts index c06dfcd98..b4946863e 100644 --- a/frontend/src/i18n/index.ts +++ b/frontend/src/i18n/index.ts @@ -3,9 +3,11 @@ import en from './en.json' import zhCN from './zh-CN.json' import zhTw from './zh-TW.json' import koKR from './ko-KR.json' +import thTH from './th-TH.json' import elementEnLocale from 'element-plus-secondary/es/locale/lang/en' import elementZhLocale from 'element-plus-secondary/es/locale/lang/zh-cn' import elementTwLocale from 'element-plus-secondary/es/locale/lang/zh-tw' +import elementThLocale from 'element-plus-secondary/es/locale/lang/th' import { useCache } from '@/utils/useCache' import { getBrowserLocale } from '@/utils/utils' @@ -57,6 +59,10 @@ const messages = { ...koKR, el: elementKoLocale, }, + 'th-TH': { + ...thTH, + el: elementThLocale, + }, } export const i18n = createI18n({ @@ -72,6 +78,7 @@ const elementLocales = { 'zh-CN': elementZhLocale, 'zh-TW': elementTwLocale, 'ko-KR': elementKoLocale, + 'th-TH': elementThLocale, } as const export const getElementLocale = () => { diff --git a/frontend/src/i18n/ko-KR.json b/frontend/src/i18n/ko-KR.json index 58686d303..b7d5ab387 100644 --- a/frontend/src/i18n/ko-KR.json +++ b/frontend/src/i18n/ko-KR.json @@ -209,6 +209,7 @@ "reset": "재설정", "simplified_chinese": "简体中文", "korean": "한국어", + "thai": "ไทย", "traditional_chinese": "繁體中文", "help": "도움말", "language": "언어", diff --git a/frontend/src/i18n/th-TH.json b/frontend/src/i18n/th-TH.json new file mode 100644 index 000000000..49a9e4dec --- /dev/null +++ b/frontend/src/i18n/th-TH.json @@ -0,0 +1,997 @@ +{ + "menu": { + "add_interface_credentials": "โปรดเพิ่มข้อมูลรับรอง API", + "Data Q&A": "สอบถามข้อมูลอัจฉริยะ", + "Data Connections": "แหล่งข้อมูล", + "Dashboard": "แดชบอร์ด", + "AI Model Configuration": "การกำหนดค่าโมเดล", + "Details": "รายละเอียด" + }, + "variables": { + "please_select_date": "โปรดเลือกวันที่", + "number_variable_error": "โปรดกรอกช่วงค่าตัวเลขให้ถูกต้อง", + "built_in": "มีในระบบแล้ว", + "normal_value": "ค่าปกติ", + "​​cannot_be_empty": "ค่าตัวแปรต้องไม่ว่าง", + "1_to_100": "ค่าตัวเลขของ {name} อยู่ในช่วง {min}~{max}", + "1_to_100_de": "ช่วงวันที่ของ {name} อยู่ระหว่าง {min}~{max}", + "system_variables": "ตัวแปรระบบ", + "variables": "ตัวแปร", + "system": "ระบบ", + "search_variables": "ค้นหาตัวแปร", + "add_variable": "เพิ่มตัวแปร", + "variable_name": "ชื่อตัวแปร", + "variable_type": "ชนิดตัวแปร", + "variable_value": "ค่าตัวแปร", + "variable_key": "คีย์ตัวแปร", + "kv": "คีย์-ค่า", + "edit_variable": "แก้ไขตัวแปร", + "no_variables_yet": "ยังไม่มีตัวแปร", + "please_enter_value": "โปรดกรอกค่า", + "date": "วันที่", + "start_date": "วันที่เริ่มต้น", + "end_date": "วันที่สิ้นสุด", + "enter_variable_name": "โปรดกรอกชื่อตัวแปร", + "enter_variable_value": "โปรดกรอกค่าตัวแปร", + "enter_variable_key": "โปรดกรอกคีย์ตัวแปร", + "key_value_cannot_be_empty": "คีย์และค่าต้องไม่ว่าง", + "key_repeat": "คีย์ต้องไม่ซ้ำกัน" + }, + "authorized_space": { + "authorized_space": "พื้นที่ทำงานที่ได้รับอนุญาต", + "authorized_space_list": "รายการพื้นที่ทำงานที่ได้รับอนุญาต", + "select_space": "เลือกพื้นที่ทำงาน", + "modify_authorized_space": "แก้ไขพื้นที่ทำงานที่ได้รับอนุญาต", + "workspaces_authorized": "อนุญาตแล้ว {num} พื้นที่ทำงาน", + "number_of_members": "จำนวนสมาชิก", + "delete_selected_workspaces": "ยืนยันการนำพื้นที่ทำงานที่เลือก {msg} แห่งออกหรือไม่?", + "delete_workspace": "ยืนยันการนำพื้นที่ทำงาน: {msg} ออกหรือไม่?", + "no_workspace": "ยังไม่มีพื้นที่ทำงาน" + }, + "sync": { + "records": "แสดง {num} รายการ จากทั้งหมด {total} รายการ", + "confirm_upload": "ยืนยันการอัปโหลด", + "field_details": "รายละเอียดฟิลด์", + "integration": "ต้องเปิดใช้งานการเชื่อมต่อแพลตฟอร์ม", + "the_existing_user": "หากผู้ใช้มีอยู่แล้ว ให้เขียนทับผู้ใช้เดิม", + "lazy_load": "โหลดแบบล่าช้า", + "sync_users": "ซิงค์ผู้ใช้", + "sync_wechat_users": "ซิงค์ผู้ใช้ WeCom", + "sync_dingtalk_users": "ซิงค์ผู้ใช้ DingTalk", + "sync_lark_users": "ซิงค์ผู้ใช้ Lark", + "sync_complete": "ซิงค์เสร็จสิ้น", + "synced_10_users": "ซิงค์ผู้ใช้สำเร็จ {num} ราย", + "failed_3_users": "ซิงค์ผู้ใช้สำเร็จ {success} ราย ล้มเหลว {failed} ราย ", + "download_failure_list": "ดาวน์โหลดรายการที่ล้มเหลว", + "sync_failed": "ซิงค์ล้มเหลว", + "failed_10_users": "ซิงค์ผู้ใช้ล้มเหลว {num} ราย ", + "continue_syncing": "ซิงค์ต่อไป", + "return_to_view": "กลับไปดู" + }, + "parameter": { + "execution_details": "รายละเอียดการทำงาน", + "overview": "ภาพรวม", + "tokens_required": "Tokens ที่ใช้", + "time_execution": "เวลาที่ใช้", + "export_notes": "ส่งออกหมายเหตุ", + "import_notes": "นำเข้าหมายเหตุ", + "memo": "กติกาการอัปเดตหมายเหตุ: จับคู่ตามชื่อตารางและชื่อฟิลด์ หากตรงกันจะอัปเดตหมายเหตุของตารางและฟิลด์ หากไม่ตรงกัน หมายเหตุจะคงเดิม", + "parameter_configuration": "การกำหนดค่าพารามิเตอร์", + "question_count_settings": "การตั้งค่าการสอบถามข้อมูล", + "context_record_count": "จำนวนบันทึกบริบท", + "context_record_count_hint": "จำนวนรอบคำถามของผู้ใช้", + "model_thinking_process": "ขยายกระบวนการคิดของโมเดล", + "hide_model_thinking_process": "ย่อกระบวนการคิดของโมเดล", + "rows_of_data": "จำกัดข้อมูล 1000 แถว", + "third_party_platform_settings": "การตั้งค่าการยืนยันตัวตนเข้าสู่ระบบ", + "by_third_party_platform": "สร้างผู้ใช้โดยอัตโนมัติ", + "platform_user_organization": "พื้นที่ทำงานเริ่มต้น", + "platform_user_roles": "บทบาทผู้ใช้จากแพลตฟอร์มภายนอก", + "excessive_data_volume": "เมื่อปิดการจำกัด 1000 แถวแล้ว ข้อมูลจะมีปริมาณมาก อาจทำให้ระบบช้าหรือค้างได้", + "sqlbot_name": "ชื่อผู้ช่วยสอบถามข้อมูล", + "show_sql": "อนุญาตให้ดูคำสั่ง SQL", + "show_log": "แสดงบันทึกการทำงาน", + "prompt": "พรอมป์ต์", + "disabling_successfully": "ปิดใช้งานสำเร็จ", + "closed_by_default": "ควบคุมการขยายหรือย่อกระบวนการคิดของโมเดลโดยค่าเริ่มต้น ในหน้าต่างสอบถามข้อมูล", + "and_platform_integration": "เกี่ยวข้องกับการยืนยันตัวตนเข้าสู่ระบบ", + "login_settings": "การตั้งค่าการเข้าสู่ระบบ", + "default_login": "วิธีเข้าสู่ระบบเริ่มต้น", + "disable_initial_password": "ปิดใช้งานรหัสผ่านเริ่มต้น", + "hide_initial_password": "ซ่อนรหัสผ่านเริ่มต้นบนหน้าเว็บ" + }, + "prompt": { + "default_password": "รหัสผ่านเริ่มต้น: {msg}", + "no_sql_sample": "ยังไม่มีตัวอย่าง SQL", + "add_sql_sample": "เพิ่มตัวอย่าง SQL", + "no_prompt_words": "ยังไม่มีพรอมป์ต์", + "customize_prompt_words": "พรอมป์ต์แบบกำหนดเอง", + "ask_sql": "SQL สำหรับสอบถามข้อมูล", + "data_analysis": "การวิเคราะห์ข้อมูล", + "data_prediction": "การคาดการณ์ข้อมูล", + "add_prompt_word": "เพิ่มพรอมป์ต์", + "prompt_word_name": "ชื่อพรอมป์ต์", + "prompt_word_content": "เนื้อหาพรอมป์ต์", + "training_data_details": "รายละเอียดข้อมูล", + "selected_prompt_words": "ยืนยันการลบพรอมป์ต์ที่เลือก {msg} รายการหรือไม่?", + "replaced_with": "โปรดกรอกพรอมป์ต์ เช่น เมื่อแสดงชื่อ ให้แสดงเฉพาะนามสกุล และใช้ * แทนชื่อจริง", + "loss_exercise_caution": "หากกรอกคำสั่งที่มีความเสี่ยงสูง เช่น ลบฐานข้อมูล ลบตารางข้อมูล หรือแก้ไขโครงสร้างตาราง อาจทำให้ข้อมูลสูญหายถาวร โปรดดำเนินการด้วยความระมัดระวัง!", + "edit_prompt_word": "แก้ไขพรอมป์ต์", + "all_236_terms": "ยืนยันการส่งออกพรอมป์ต์{type}ทั้งหมด {msg} รายการหรือไม่?", + "export_hint": "ยืนยันการส่งออกพรอมป์ต์{type}ทั้งหมดหรือไม่?", + "prompt_word_name_de": "ยืนยันการลบพรอมป์ต์: {msg} หรือไม่?", + "disable_field": "ปิดใช้งานฟิลด์", + "to_disable_it": "ฟิลด์นี้ได้กำหนดความสัมพันธ์ระหว่างตารางไว้ หากปิดใช้งาน ความสัมพันธ์ดังกล่าวจะไม่มีผล ยืนยันปิดใช้งานหรือไม่?" + }, + "training": { + "effective_data_sources": "แหล่งข้อมูลที่มีผล", + "all_data_sources": "แหล่งข้อมูลทั้งหมด", + "partial_data_sources": "แหล่งข้อมูลบางส่วน", + "add_it_here": "ลากชื่อตารางจากด้านซ้ายมาวางที่นี่", + "table_relationship_management": "การจัดการความสัมพันธ์ระหว่างตาราง", + "system_management": "การจัดการระบบ", + "data_training": "คลังตัวอย่าง SQL", + "problem_description": "คำอธิบายปัญหา", + "sample_sql": "ตัวอย่าง SQL", + "search_problem": "ค้นหาคำถาม", + "add_training_data": "เพิ่มตัวอย่าง SQL", + "training_data_details": "รายละเอียดตัวอย่าง SQL", + "training_data_items": "ยืนยันการลบตัวอย่าง SQL ที่เลือก {msg} รายการหรือไม่?", + "sql_statement": "คำสั่ง SQL", + "edit_training_data": "แก้ไขตัวอย่าง SQL", + "all_236_terms": "ยืนยันการส่งออกตัวอย่าง SQL ทั้งหมด {msg} รายการหรือไม่?", + "export_hint": "ยืนยันการส่งออกตัวอย่าง SQL ทั้งหมดหรือไม่?", + "sales_this_year": "ยืนยันการลบตัวอย่าง SQL: {msg} หรือไม่?", + "upload_success": "นำเข้าสำเร็จ", + "upload_failed": "นำเข้าสำเร็จ {success} รายการ ล้มเหลว {fail} รายการ ดูรายละเอียดความล้มเหลวที่: {fail_info}" + }, + "professional": { + "cannot_be_repeated": "ชื่อคำศัพท์และคำพ้องความหมายต้องไม่ซ้ำกัน", + "code_for_debugging": "คัดลอกโค้ดด้านล่างนี้เพื่อทดสอบ", + "full_screen_mode": "โหมดเต็มหน้าจอ", + "editing_terminology": "แก้ไขคำศัพท์", + "professional_terminology": "การกำหนดค่าคำศัพท์เฉพาะ", + "term_name": "ชื่อคำศัพท์", + "term_description": "คำอธิบายคำศัพท์", + "search_term": "ค้นหาคำศัพท์", + "no_term": "ยังไม่มีคำศัพท์", + "create_new_term": "สร้างคำศัพท์ใหม่", + "export_all": "ส่งออกทั้งหมด", + "professional_term_details": "รายละเอียดคำศัพท์เฉพาะ", + "business_term": "คำศัพท์ทางธุรกิจ", + "synonyms": "คำพ้องความหมาย", + "all_236_terms": "ยืนยันการส่งออกคำศัพท์ทั้งหมด {msg} รายการหรือไม่?", + "export_hint": "ยืนยันการส่งออกคำศัพท์ทั้งหมดหรือไม่?", + "export": "ส่งออก", + "selected_2_terms": "ยืนยันการลบคำศัพท์ที่เลือก {msg} รายการหรือไม่?", + "selected_2_terms_de": "ยืนยันการส่งออกคำศัพท์ที่เลือก {msg} รายการหรือไม่?", + "the_term_gmv": "ยืนยันการลบคำศัพท์: {msg} หรือไม่?" + }, + "common": { + "start_time": "เวลาเริ่มต้น", + "end_time": "เวลาสิ้นสุด", + "require": "จำเป็น", + "zoom_in": "ขยาย", + "zoom_out": "ย่อ", + "the_default_model": "เป็นโมเดลเริ่มต้นแล้ว", + "as_default_model": "ตั้งเป็นโมเดลเริ่มต้น", + "no_model_yet": "ยังไม่มีโมเดล", + "intelligent_questioning_platform": "ยินดีต้อนรับสู่แพลตฟอร์มสอบถามข้อมูลอัจฉริยะ SQLBot", + "login": "เข้าสู่ระบบด้วยบัญชี", + "login_": "เข้าสู่ระบบ", + "confirm2": "ตกลง", + "excessive_tables_selected": "เลือกตารางข้อมูลจำนวนมากเกินไป", + "to_continue_saving": "จำนวนตารางข้อมูลที่เลือกคือ {msg} เกินกว่า 30 ซึ่งอาจทำให้การดำเนินการหมดเวลาหรือไม่ตอบสนอง ยืนยันบันทึกต่อหรือไม่?", + "proceed_with_caution": "หลังจากลบแล้วจะกู้คืนไม่ได้ โปรดดำเนินการด้วยความระมัดระวัง", + "sales_in_2024": "ยืนยันการลบบทสนทนา: {msg} หรือไม่?", + "limited_to_30": "จำกัดจำนวนตารางข้อมูลไว้ที่ 30", + "enter_your_password": "โปรดกรอกรหัสผ่าน", + "your_account_email_address": "โปรดกรอกบัญชี/อีเมล", + "the_correct_password": "โปรดกรอกรหัสผ่านให้ถูกต้อง", + "input_content": "โปรดกรอกเนื้อหา", + "may_not_exist": "ไม่พบผลลัพธ์ ผู้ใช้อาจไม่มีอยู่", + "empty": "", + "back": "ย้อนกลับ", + "confirm": "ยืนยัน", + "cancel": "ยกเลิก", + "search": "ค้นหา", + "system_manage": "การจัดการระบบ", + "update_success": "อัปเดตสำเร็จ", + "save_success": "บันทึกสำเร็จ", + "operation_success": "ดำเนินการสำเร็จ", + "next": "ถัดไป", + "save": "บันทึก", + "logout": "ออกจากระบบ", + "please_input": "โปรดกรอก{msg}", + "switch_success": "สลับสำเร็จ", + "result_count": "ผลลัพธ์", + "clear_filter": "ล้างเงื่อนไข", + "reset": "รีเซ็ต", + "simplified_chinese": "简体中文", + "korean": "한국어", + "thai": "ไทย", + "traditional_chinese": "繁體中文", + "help": "ช่วยเหลือ", + "language": "ภาษา", + "english": "English", + "re_upload": "อัปโหลดใหม่", + "not_exceed_50mb": "รองรับไฟล์ XLS, XLSX, CSV ขนาดไม่เกิน 50MB", + "excel_file_type_limit": "รองรับเฉพาะไฟล์ XLS, XLSX", + "click_to_select_file": "คลิกเพื่อเลือกไฟล์", + "upload_hint_first": "ก่อนอื่นโปรด", + "upload_hint_download_template": "ดาวน์โหลดเทมเพลต", + "upload_hint_end": " แล้วกรอกตามรูปแบบที่กำหนดก่อนอัปโหลด", + "continue_to_upload": "นำเข้าต่อ", + "reset_password": "รีเซ็ตรหัสผ่าน", + "password_reset_successful": "รีเซ็ตรหัสผ่านสำเร็จ", + "or": "หรือ", + "refresh": "รีเฟรช", + "input_limit": "ความยาวระหว่าง {0} ถึง {1} ตัวอักษร", + "file_size_limit_error": "ขนาดไฟล์เกินกำหนด (สูงสุด{limit})" + }, + "dashboard": { + "open_dashboard": "เปิดแดชบอร์ด", + "add_dashboard_name_tips": "โปรดกรอกชื่อแดชบอร์ด", + "existing_dashboard": "แดชบอร์ดเดิม", + "add_success": "เพิ่มสำเร็จ", + "no_data": "ไม่พบเนื้อหาที่เกี่ยวข้อง", + "new_tab": "สร้างแท็บใหม่", + "length_limit64": "ความยาวฟิลด์ต้องอยู่ระหว่าง 1-64", + "sort_column": "ฟิลด์ที่ใช้เรียงลำดับ", + "sort_type": "วิธีเรียงลำดับ", + "time": "เวลา", + "sort_asc": "เรียงจากน้อยไปมาก", + "sort_desc": "เรียงจากมากไปน้อย", + "name_repeat": "ชื่อแดชบอร์ดนี้ถูกใช้แล้ว", + "rich_text_tips": "ดับเบิลคลิกเพื่อพิมพ์ข้อความ", + "exit_preview": "ออกจากโหมดดูตัวอย่าง", + "no_chat": "ยังไม่มีบทสนทนา", + "today": "วันนี้", + "this_week": "สัปดาห์นี้", + "earlier": "ก่อนหน้านี้", + "add_component_tips": "เลือกองค์ประกอบจากแถบเครื่องมือด้านบน ลากมาวางที่นี่เพื่อสร้างแดชบอร์ด", + "add_view": "เพิ่มแผนภูมิ", + "delete_dashboard_warn": "ยืนยันการลบแดชบอร์ด: {0} หรือไม่?", + "rename_dashboard": "เปลี่ยนชื่อแดชบอร์ด", + "dashboard_name": "ชื่อแดชบอร์ด", + "select_dashboard_tips": "โปรดเลือกแดชบอร์ดทางด้านซ้าย", + "no_dashboard": "ยังไม่มีแดชบอร์ด", + "no_dashboard_info": "ยังไม่มีเนื้อหา คลิกปุ่มด้านล่างเพื่อเพิ่ม", + "search": "ค้นหา", + "time_asc": "เรียงตามเวลาจากน้อยไปมาก", + "time_desc": "เรียงตามเวลาจากมากไปน้อย", + "name_asc": "เรียงตามชื่อจากน้อยไปมาก", + "name_desc": "เรียงตามชื่อจากมากไปน้อย", + "select_dashboard": "โปรดเลือกแดชบอร์ด", + "name": "ชื่อ", + "view": "แผนภูมิ", + "text": "Rich Text", + "preview": "ดูตัวอย่าง", + "creator": "ผู้สร้าง", + "dashboard_id": "รหัสแดชบอร์ด", + "create_time": "เวลาที่สร้าง", + "updater": "ผู้อัปเดต", + "update_time": "เวลาที่อัปเดต", + "edit": "แก้ไข", + "edit_title": "แก้ไขชื่อเรื่อง", + "length_1_64_characters": "ความยาวของชื่อฟิลด์ 1-64 ตัวอักษร", + "rename": "เปลี่ยนชื่อ", + "delete": "ลบ", + "delete_tips": "หลังจากลบ ทรัพยากรทั้งหมดในโฟลเดอร์นี้จะถูกลบด้วย โปรดดำเนินการด้วยความระมัดระวัง", + "undo": "เลิกทำ", + "reduction": "ทำซ้ำ", + "folder": "โฟลเดอร์", + "dashboard": "แดชบอร์ด", + "delete_warning": "ยืนยันการลบหรือไม่?", + "delete_resource_warn": "ยืนยันการลบ{0}นี้หรือไม่?", + "delete_success": "ลบสำเร็จ", + "new_folder": "สร้างโฟลเดอร์ใหม่", + "new_dashboard": "สร้างแดชบอร์ดใหม่", + "add_chart": "เพิ่มแผนภูมิ", + "chart_selected": "เลือกแล้ว {0}" + }, + "qa": { + "retrieve_error": "ยังไม่มีเนื้อหา", + "retrieve_again": "ดึงข้อมูลใหม่", + "recently": "ล่าสุด", + "recommend": "แนะนำ", + "quick_question": "คำถามด่วน", + "new_chat": "สร้างบทสนทนาใหม่", + "start_sqlbot": "เริ่มสอบถามข้อมูล", + "title": "สอบถามข้อมูลอัจฉริยะ", + "placeholder": "โปรดกรอกคำถามของคุณ", + "ask": "ถาม", + "loading": "กำลังโหลด...", + "no_data": "ยังไม่มีข้อมูล", + "error": "เกิดข้อผิดพลาด โปรดลองอีกครั้งภายหลัง", + "question_placeholder": "กด Enter เพื่อส่งคำถาม หรือใช้ Ctrl + Enter เพื่อขึ้นบรรทัดใหม่", + "greeting": "สวัสดี ฉันคือ SQLBot ยินดีให้บริการคุณ", + "hint_description": "ฉันสามารถสอบถามข้อมูล สร้างแผนภูมิ วิเคราะห์ข้อมูล คาดการณ์ข้อมูล ฯลฯ โปรดเลือกแหล่งข้อมูล แล้วเริ่มใช้งานการสอบถามข้อมูลอัจฉริยะเลย~", + "select_datasource": "เลือกแหล่งข้อมูล", + "view_more": "ดูเพิ่มเติม", + "selected_datasource": "เลือกแหล่งข้อมูลแล้ว", + "empty_datasource": "ยังไม่มีแหล่งข้อมูล โปรดสร้างก่อนเริ่มใช้งานการสอบถามข้อมูลอัจฉริยะ!", + "datasource_not_exist": "ไม่พบแหล่งข้อมูล", + "guess_u_ask": "คำถามที่คุณอาจสนใจ:", + "continue_to_ask": "ถามต่อ:", + "data_analysis": "การวิเคราะห์ข้อมูล", + "data_predict": "การคาดการณ์ข้อมูล", + "data_regenerated": "สร้างใหม่", + "chat_search": "ค้นหา", + "thinking": "กำลังคิด", + "thinking_step": "กระบวนการคิด", + "ask_again": "สร้างใหม่", + "today": "วันนี้", + "week": "ภายใน 7 วัน", + "earlier": "ก่อนหน้านี้", + "no_time": "ไม่มีเวลา", + "rename_conversation_title": "เปลี่ยนชื่อบทสนทนา", + "conversation_title": "ชื่อบทสนทนา", + "copied": "คัดลอกแล้ว", + "ask_failed": "การสอบถามข้อมูลล้มเหลว" + }, + "ds": { + "title": "แหล่งข้อมูล", + "local_excelcsv": "Excel/CSV ในเครื่อง", + "add": "เพิ่มแหล่งข้อมูล", + "delete": "ลบแหล่งข้อมูล", + "name": "ชื่อแหล่งข้อมูล", + "type": "ชนิดแหล่งข้อมูล", + "status": "สถานะ", + "pieces_in_total": "แสดง {ms} รายการ", + "actions": "การดำเนินการ", + "test_connection": "ทดสอบการเชื่อมต่อ", + "check": "ตรวจสอบ", + "connection_success": "เชื่อมต่อสำเร็จ", + "connection_failed": "เชื่อมต่อล้มเหลว โปรดตรวจสอบการกำหนดค่า", + "Search Datasource": "ค้นหาแหล่งข้อมูล", + "tables": "ตารางข้อมูล", + "no_data_tip": "ยังไม่มีข้อมูล โปรดเลือกตารางข้อมูลจากด้านซ้าย", + "comment": "คำอธิบาย", + "table_schema": "โครงสร้างตาราง", + "previous": "ก่อนหน้า", + "preview": "ดูตัวอย่างข้อมูล", + "preview_tip": "ดูตัวอย่าง 100 รายการ", + "field": { + "name": "ชื่อฟิลด์", + "type": "ชนิดข้อมูล", + "comment": "คำอธิบาย", + "custom_comment": "คำอธิบายที่กำหนดเอง", + "status": "สถานะ" + }, + "edit": { + "table_comment": "แก้ไขคำอธิบายตาราง", + "field_comment": "แก้ไขคำอธิบายฟิลด์", + "table_comment_label": "คำอธิบายตาราง", + "field_comment_label": "คำอธิบายฟิลด์" + }, + "form": { + "title": { + "add": "เพิ่มแหล่งข้อมูล", + "edit": "แก้ไขแหล่งข้อมูล", + "choose_tables": "เลือกตารางข้อมูล" + }, + "base_info": "ข้อมูลพื้นฐาน", + "choose_tables": "เลือกตารางข้อมูล", + "name": "ชื่อ", + "description": "คำอธิบาย", + "host": "ชื่อโฮสต์/ที่อยู่ IP", + "port": "พอร์ต", + "username": "ชื่อผู้ใช้", + "password": "รหัสผ่าน", + "database": "ฐานข้อมูล", + "connect_mode": "วิธีเชื่อมต่อ", + "service_name": "ชื่อบริการ", + "extra_jdbc": "การกำหนดค่าการเชื่อมต่อฐานข้อมูลเพิ่มเติม", + "schema": "Schema", + "get_schema": "ดึง Schema", + "file": "ไฟล์", + "upload_tip": "รองรับเฉพาะไฟล์ .xls, .xlsx, .csv ขนาดไม่เกิน 50MB", + "version_tip": { + "sqlServer": "เวอร์ชันที่รองรับ: 2012+", + "oracle": "เวอร์ชันที่รองรับ: 12+", + "mysql": "เวอร์ชันที่รองรับ: 5.6+", + "pg": "เวอร์ชันที่รองรับ: 9.6+" + }, + "selected": "เลือกแล้ว: {0}/{1}", + "validate": { + "name_required": "โปรดกรอกชื่อ", + "name_length": "ความยาวต้องอยู่ระหว่าง 1 ถึง 50 ตัวอักษร", + "type_required": "โปรดเลือกชนิดฐานข้อมูล", + "host_required": "โปรดกรอกที่อยู่โฮสต์", + "port_required": "โปรดกรอกหมายเลขพอร์ต", + "database_required": "โปรดกรอกชื่อฐานข้อมูล", + "mode_required": "โปรดเลือกวิธีเชื่อมต่อ", + "schema_required": "โปรดกรอกชื่อ Schema" + }, + "mode": { + "sid": "SID", + "service_name": "ชื่อบริการ" + }, + "support_version": "เวอร์ชันที่รองรับ", + "upload": { + "button": "อัปโหลด", + "tip": "รองรับเฉพาะไฟล์ .xls, .xlsx, .csv ขนาดไม่เกิน 50MB" + }, + "connect": { + "success": "เชื่อมต่อสำเร็จ", + "failed": "เชื่อมต่อล้มเหลว" + }, + "timeout": "หมดเวลาการเชื่อมต่อ (วินาที)", + "address": "ที่อยู่", + "low_version": "เข้ากันได้กับเวอร์ชันต่ำกว่า", + "ssl": "เปิดใช้งาน SSL", + "file_path": "เส้นทางไฟล์", + "pool_size": "ขนาดพูลการเชื่อมต่อ" + }, + "sync_fields": "ซิงค์โครงสร้างตาราง", + "sync_fields_success": "ซิงค์โครงสร้างตารางสำเร็จ", + "sync_fields_failed": "ซิงค์โครงสร้างตารางล้มเหลว" + }, + "datasource": { + "recommended_question": "คำถามแนะนำ", + "recommended_repetitive_tips": "มีคำถามที่ซ้ำกัน", + "recommended_problem_tips": "กำหนดคำถามเองอย่างน้อย 1 ข้อ แต่ละข้อยาว 2-200 ตัวอักษร", + "recommended_problem_configuration": "การกำหนดค่าคำถามแนะนำ", + "problem_generation_method": "วิธีสร้างคำถาม", + "ai_automatic_generation": "สร้างอัตโนมัติด้วย AI", + "user_defined": "ผู้ใช้กำหนดเอง", + "question_tips": "โปรดกรอกคำถามแนะนำ", + "add_question": "เพิ่มคำถาม", + "data_source_yet": "ยังไม่มีแหล่งข้อมูล", + "search_by_name": "ค้นหาตามชื่อ", + "search": "ค้นหา", + "all_types": "ทุกชนิด", + "new_data_source": "สร้างแหล่งข้อมูลใหม่", + "open_query": "เริ่มสอบถามข้อมูล", + "edit": "แก้ไข", + "source_connection_failed": "เชื่อมต่อแหล่งข้อมูลล้มเหลว", + "confirm": "ตกลง", + "copy": "คัดลอก", + "the_original_one": "ยืนยันการกู้คืนเป็นรหัสผ่านเริ่มต้นหรือไม่?", + "incorrect_email_format": "รูปแบบอีเมลไม่ถูกต้อง", + "enabled_status": "สถานะการเปิดใช้งาน", + "custom_notes": "หมายเหตุที่กำหนดเอง", + "field_type": "ชนิดฟิลด์", + "field_name": "ชื่อฟิลด์", + "relevant_content_found": "ไม่พบเนื้อหาที่เกี่ยวข้อง", + "please_enter": "โปรดกรอก", + "Please_select": "โปรดเลือก", + "table_notes": "หมายเหตุตาราง", + "field_notes": "หมายเหตุฟิลด์", + "select_all": "เลือกทั้งหมด", + "mysql_data_source": "แก้ไขแหล่งข้อมูล {msg}", + "configuration_information": "ข้อมูลการกำหนดค่า", + "data_source": "ยืนยันการลบแหล่งข้อมูล: {msg} หรือไม่?", + "operate_with_caution": "เมื่อถูกลบแล้ว จะไม่สามารถสอบถามข้อมูลจากแหล่งข้อมูลนี้ได้อีก โปรดดำเนินการด้วยความระมัดระวัง", + "data_source_de": "ไม่สามารถลบแหล่งข้อมูล: {msg}", + "cannot_be_deleted": "แหล่งข้อมูลนี้ถูกใช้โดยแผนภูมิในแดชบอร์ด จึงลบไม่ได้", + "got_it": "เข้าใจแล้ว", + "field_original_notes": "หมายเหตุเดิมของฟิลด์", + "field_notes_1": "หมายเหตุฟิลด์", + "no_table": "ยังไม่มีตารางข้อมูล", + "go_add": "ไปเพิ่ม", + "get_schema": "ดึง Schema" + }, + "model": { + "int": "จำนวนเต็ม", + "float": "เลขทศนิยม", + "string": "ข้อความ", + "default_model": "โมเดลเริ่มต้น", + "model_type": "ชนิดโมเดล", + "basic_model": "โมเดลพื้นฐาน", + "set_successfully": "ตั้งค่าสำเร็จ", + "operate_with_caution": "เมื่อโมเดลเริ่มต้นของระบบถูกเปลี่ยน ผลลัพธ์การสอบถามข้อมูลอัจฉริยะจะได้รับผลกระทบ โปรดดำเนินการด้วยความระมัดระวัง", + "system_default_model": "ยืนยันการตั้ง {msg} เป็นโมเดลเริ่มต้นของระบบหรือไม่?", + "ai_model_configuration": "การกำหนดค่าโมเดล AI", + "system_default_model_de": "โมเดลเริ่มต้นของระบบ", + "relevant_results_found": "ไม่พบผลลัพธ์ที่เกี่ยวข้อง", + "add_model": "เพิ่มโมเดล", + "select_supplier": "เลือกผู้ให้บริการ", + "the_basic_model": "โปรดตั้งชื่อให้โมเดลพื้นฐาน", + "the_basic_model_de": "โปรดเลือกโมเดลพื้นฐาน", + "length_max_error": "ความยาวของ {msg} ต้องไม่เกิน {max} ตัวอักษร", + "model_name": "ชื่อโมเดล", + "custom_model_name": "ชื่อโมเดลที่กำหนดเอง", + "enter_to_add": "สำหรับโมเดลที่ไม่อยู่ในรายการ พิมพ์ชื่อโมเดลแล้วกด Enter เพื่อเพิ่มได้เลย", + "api_domain_name": "ชื่อโดเมน API", + "advanced_settings": "การตั้งค่าขั้นสูง", + "model_parameters": "พารามิเตอร์โมเดล", + "add": "เพิ่ม", + "parameters": "พารามิเตอร์", + "display_name": "ชื่อที่แสดง", + "parameter_value": "ค่าพารามิเตอร์", + "text": "ข้อความ", + "number": "ตัวเลข", + "parameter_type": "ชนิดพารามิเตอร์", + "verification_successful": "ตรวจสอบสำเร็จ", + "del_default_tip": "ไม่สามารถลบโมเดล: {msg}", + "del_default_warn": "โมเดลนี้เป็นโมเดลเริ่มต้นของระบบ โปรดตั้งโมเดลอื่นเป็นโมเดลเริ่มต้นก่อน แล้วจึงลบโมเดลนี้", + "del_warn_tip": "ยืนยันการลบโมเดล: {msg} หรือไม่?", + "check_failed": "โมเดลไม่ถูกต้อง【{msg}】", + "default_miss": "ยังไม่ได้กำหนดค่าโมเดลภาษาขนาดใหญ่เริ่มต้น จึงไม่สามารถเริ่มสอบถามข้อมูลได้ โปรดติดต่อผู้ดูแลระบบเพื่อกำหนดค่า", + "default_miss_admin": "ยังไม่ได้กำหนดค่าโมเดลภาษาขนาดใหญ่เริ่มต้น จึงไม่สามารถเริ่มสอบถามข้อมูลได้", + "to_config": "ไปตั้งค่า" + }, + "user": { + "workspace": "พื้นที่ทำงาน", + "creation_time": "เวลาที่สร้าง", + "user_source": "แหล่งที่มาของผู้ใช้", + "phone_number": "เบอร์โทรศัพท์", + "email": "อีเมล", + "user_status": "สถานะผู้ใช้", + "account": "บัญชี", + "name": "ชื่อ", + "selected_2_items": "เลือกแล้ว {msg} รายการ", + "name_account_email": "ค้นหาชื่อ บัญชี อีเมล", + "user_management": "การจัดการผู้ใช้", + "filter": "กรอง", + "batch_import": "นำเข้าเป็นชุด", + "add_users": "เพิ่มผู้ใช้", + "selected_2_users": "ยืนยันการลบผู้ใช้ที่เลือก {msg} คนหรือไม่?", + "filter_conditions": "เงื่อนไขการกรอง", + "enable": "เปิดใช้งาน", + "disable": "ปิดใช้งาน", + "local_creation": "สร้างในระบบ", + "lark": "Lark", + "larksuite": "Larksuite", + "dingtalk": "DingTalk", + "wecom": "WeCom", + "1240_results": "{msg} ผลลัพธ์ ", + "clear_conditions": "ล้างเงื่อนไข", + "disabled": "ปิดใช้งานแล้ว", + "enabled": "เปิดใช้งานแล้ว", + "edit_user": "แก้ไขผู้ใช้", + "del_user": "ยืนยันการลบผู้ใช้: {msg} หรือไม่?", + "del_key": "ยืนยันการลบคีย์: {msg} หรือไม่?", + "please_first": "โปรด", + "download_the_template": "ดาวน์โหลดเทมเพลต", + "required_and_upload": " กรอกตามรูปแบบที่กำหนดแล้วอัปโหลด", + "file": "ไฟล์", + "upload_file": "อัปโหลดไฟล์", + "xls_format_files": "รองรับเฉพาะไฟล์รูปแบบ xlsx, xls", + "import": "นำเข้า", + "change_file": "เปลี่ยนไฟล์", + "data_import_completed": "นำเข้าข้อมูลเสร็จสิ้น", + "notes_import_completed": "นำเข้าหมายเหตุเสร็จสิ้น", + "imported_100_data": "นำเข้าข้อมูลสำเร็จ {msg} รายการ", + "return_to_view": "กลับไปดู", + "continue_importing": "นำเข้าต่อ", + "import_20_can": "นำเข้าข้อมูลสำเร็จ {msg} รายการ ล้มเหลว {loss} รายการ ", + "download_error_report": "ดาวน์โหลดรายงานข้อผิดพลาด", + "modify_and_re_import": " แก้ไขแล้วนำเข้าใหม่", + "data_import_failed": "นำเข้าข้อมูลล้มเหลว", + "failed_100_can": "นำเข้าล้มเหลว {msg} รายการ สามารถ", + "change_password": "เปลี่ยนรหัสผ่าน", + "new_password": "รหัสผ่านใหม่", + "confirm_password": "ยืนยันรหัสผ่าน", + "old_password": "รหัสผ่านเดิม", + "title": "การจัดการผู้ใช้", + "upgrade_pwd": { + "title": "เปลี่ยนรหัสผ่าน", + "old_pwd": "รหัสผ่านเดิม", + "new_pwd": "รหัสผ่านใหม่", + "confirm_pwd": "ยืนยันรหัสผ่าน", + "two_pwd_not_match": "รหัสผ่านที่กรอกทั้งสองครั้งไม่ตรงกัน", + "pwd_format_error": "8-20 ตัวอักษร และต้องมีตัวพิมพ์ใหญ่ ตัวพิมพ์เล็ก ตัวเลข และอักขระพิเศษ อย่างน้อยอย่างละ 1 ตัว" + } + }, + "workspace": { + "relevant_content_found": "ไม่พบเนื้อหาที่เกี่ยวข้อง", + "add_workspace": "เพิ่มพื้นที่ทำงาน", + "administrator": "ผู้ดูแลระบบ", + "ordinary_member": "สมาชิกทั่วไป", + "people": "คน", + "name_username_email": "ค้นหาชื่อ ชื่อผู้ใช้ อีเมล", + "add_member": "เพิ่มสมาชิก", + "member_type": "ชนิดสมาชิก", + "workspace_name": "ชื่อพื้นที่ทำงาน", + "no_user": "ยังไม่มีผู้ใช้", + "remove": "นำออก", + "selected_2_members": "ยืนยันการนำสมาชิกที่เลือก {msg} คนออกหรือไม่?", + "removed_successfully": "นำออกสำเร็จ", + "workspace_de_workspace": "ยืนยันการลบพื้นที่ทำงาน: {msg} หรือไม่?", + "member_feng_yibudao": "ยืนยันการนำสมาชิก: {msg} ออกหรือไม่?", + "select_member": "เลือกสมาชิก", + "selected_2_people": "เลือกแล้ว: {msg} คน", + "selected_number": "เลือกแล้ว: {msg} รายการ", + "clear": "ล้าง", + "historical_dialogue": "ยังไม่มีบทสนทนาย้อนหลัง", + "rename_a_workspace": "เปลี่ยนชื่อพื้นที่ทำงาน", + "return_to_workspace": "กลับไปยังพื้นที่ทำงาน", + "there_are": "มี ", + "2_dashboards": "แดชบอร์ด {msg} รายการ", + "smart_data_centers": "การสอบถามข้อมูลอัจฉริยะ {msg} รายการ", + "confirm_to_delete": "เมื่อลบแหล่งข้อมูลแล้ว จะไม่สามารถสอบถามข้อมูลที่เกี่ยวข้องได้อีก และแผนภูมิในแดชบอร์ดจะแสดงผลไม่ถูกต้อง โปรดดำเนินการด้วยความระมัดระวัง!", + "id_account_to_add": "ค้นหาชื่อผู้ใช้/บัญชีเพื่อเพิ่ม", + "find_user": "ค้นหาผู้ใช้", + "add_successfully": "เพิ่มสำเร็จ", + "member_management": "การจัดการสมาชิก", + "permission_configuration": "การกำหนดค่าสิทธิ์", + "set": "ตั้งค่า", + "operate_with_caution": "เมื่อลบแล้ว ผู้ใช้ภายใต้พื้นที่ทำงานนี้จะถูกนำออก และทรัพยากรทั้งหมดจะถูกลบด้วย โปรดดำเนินการด้วยความระมัดระวัง" + }, + "permission": { + "search_field": "ค้นหาฟิลด์", + "search_rule_group": "ค้นหากลุ่มกฎ", + "add_rule_group": "เพิ่มกลุ่มกฎ", + "permission_rule": "กฎสิทธิ์", + "restricted_user": "ผู้ใช้ที่ถูกจำกัด", + "set_rule": "กำหนดกฎ", + "set_user": "กำหนดผู้ใช้", + "2": "{msg} รายการ", + "238_people": "{msg} คน", + "no_permission_rule": "ยังไม่มีกฎสิทธิ์", + "set_permission_rule": "กำหนดกฎสิทธิ์", + "basic_information": "ข้อมูลพื้นฐาน", + "rule_group_name": "ชื่อกลุ่มกฎ", + "rule_name": "ชื่อกฎ", + "type": "ชนิด", + "data_source": "แหล่งข้อมูล", + "data_table": "ตารางข้อมูล", + "select_restricted_user": "เลือกผู้ใช้ที่ถูกจำกัด", + "rule_group_1": "ยืนยันการลบกลุ่มกฎ: {msg} หรือไม่?", + "no_rule": "ยังไม่มีกฎ", + "row_permission": "สิทธิ์ระดับแถว", + "column_permission": "สิทธิ์ระดับคอลัมน์", + "rule_rule_1": "ยืนยันการลบกฎ: {msg} หรือไม่?", + "no_content": "ยังไม่มีเนื้อหา", + "edit_column_permission": "แก้ไขสิทธิ์ระดับคอลัมน์", + "edit_row_permission": "แก้ไขสิทธิ์ระดับแถว", + "add_column_permission": "เพิ่มสิทธิ์ระดับคอลัมน์", + "add_row_permission": "เพิ่มสิทธิ์ระดับแถว", + "no_fields_yet": "ยังไม่มีฟิลด์", + "filter_eq": "เท่ากับ", + "filter_not_eq": "ไม่เท่ากับ", + "filter_lt": "น้อยกว่า", + "filter_le": "น้อยกว่าหรือเท่ากับ", + "filter_gt": "มากกว่า", + "filter_ge": "มากกว่าหรือเท่ากับ", + "filter_null": "เป็นค่าว่าง (null)", + "filter_not_null": "ไม่เป็นค่าว่าง (null)", + "filter_empty": "สตริงว่าง", + "filter_not_empty": "สตริงไม่ว่าง", + "filter_include": "มี", + "filter_not_include": "ไม่มี", + "conditional_filtering": "กรองตามเงื่อนไข", + "add_conditions": "เพิ่มเงื่อนไข", + "add_relationships": "เพิ่มความสัมพันธ์", + "cannot_be_empty_": "ฟิลด์ตัวกรองต้องไม่ว่าง", + "cannot_be_empty_de_ruler": "เงื่อนไขของกฎต้องไม่ว่าง", + "filter_value_can_null": "ค่าตัวกรองต้องไม่ว่าง", + "filter_like": "มี", + "filter_not_like": "ไม่มี", + "filter_in": "อยู่ใน", + "filter_not_in": "ไม่อยู่ใน", + "enter_a_question": "โปรดกรอกคำถาม", + "new_conversation": "บทสนทนาใหม่", + "send": "ส่ง", + "stop_replying": "หยุดตอบกลับ", + "i_am_sqlbot": "สวัสดี ฉันคือ SQLBot", + "predict_data_etc": "ฉันสามารถสอบถามข้อมูล สร้างแผนภูมิ วิเคราะห์ข้อมูล คาดการณ์ข้อมูล ฯลฯ", + "intelligent_data_query": "รีบเริ่มใช้งานการสอบถามข้อมูลอัจฉริยะเลย~" + }, + "embedded": { + "delete_10_apps": "ยืนยันการลบ {msg} แอปพลิเคชันหรือไม่?", + "click_to_show": "คลิกเพื่อแสดง", + "click_to_hide": "คลิกเพื่อซ่อน", + "your_app_secret": "ยืนยันการอัปเดต APP Secret หรือไม่?", + "proceed_with_caution": "เมื่อรีเซ็ตแล้ว App Secret ที่มีอยู่จะใช้ไม่ได้ทันที โปรดดำเนินการด้วยความระมัดระวัง", + "password_length": "ความยาวรหัสผ่าน", + "edit_app": "แก้ไขแอปพลิเคชัน", + "embedded_management": "การจัดการการฝัง", + "embedded_assistant": "การฝังผู้ช่วย", + "embedded_page": "การฝังหน้าเว็บ", + "no_application": "ยังไม่มีแอปพลิเคชัน", + "create_application": "สร้างแอปพลิเคชัน", + "basic_application": "แอปพลิเคชันพื้นฐาน", + "advanced_application": "แอปพลิเคชันขั้นสูง", + "embed_third_party": "ฝังในระบบภายนอก", + "support_is_required": "เหมาะสำหรับกรณีที่ไม่ต้องตรวจสอบข้อมูล เพียงฝังโค้ดลงในโค้ดของระบบภายนอก โดยไม่ต้องมีการสนับสนุนเพิ่มเติม", + "data_permissions_etc": "เหมาะสำหรับกรณีที่ต้องตรวจสอบข้อมูล โดยระบบภายนอกต้องมีอินเทอร์เฟซแหล่งข้อมูล อินเทอร์เฟซผู้ใช้ สิทธิ์ข้อมูล ฯลฯ", + "create_basic_application": "สร้างแอปพลิเคชันพื้นฐาน", + "set_data_source": "กำหนดแหล่งข้อมูล", + "basic_information": "ข้อมูลพื้นฐาน", + "application_name": "ชื่อแอปพลิเคชัน", + "application_description": "คำอธิบายแอปพลิเคชัน", + "cross_domain_settings": "การตั้งค่าข้ามโดเมน", + "enableCustomModel": "ใช้โมเดลที่กำหนดเอง", + "useModel": "ใช้โมเดล", + "defaultModel": "โมเดลเริ่มต้น", + "customModel": "โมเดลที่กำหนดเอง", + "third_party_address": "โปรดกรอกที่อยู่ของระบบภายนอกที่จะฝัง หากมีหลายรายการให้คั่นด้วยเครื่องหมายอัฒภาค (;)", + "set_to_private": "ตั้งเป็นส่วนตัว", + "set_to_public": "ตั้งเป็นสาธารณะ", + "public": "สาธารณะ", + "private": "ส่วนตัว", + "configure_interface": "กำหนดค่าอินเทอร์เฟซ", + "interface_url": "URL อินเทอร์เฟซ", + "format_is_incorrect": "รูปแบบไม่ถูกต้อง{msg}", + "domain_format_incorrect": "ต้องขึ้นต้นด้วย http หรือ https ไม่ลงท้ายด้วย / และคั่นหลายโดเมนด้วยอัฒภาคครึ่งวงเล็บ (;)", + "interface_url_incorrect": "โปรดกรอกเส้นทางสัมพัทธ์ที่ขึ้นต้นด้วย / หรือเส้นทางเต็มที่ขึ้นต้นด้วย http หรือ https", + "aes_enable": "เปิดใช้งานการเข้ารหัส AES", + "aes_enable_tips": "ฟิลด์ที่เข้ารหัส (host, user, password, dataBase, schema) ใช้การเข้ารหัสแบบ AES-CBC-PKCS5Padding", + "bit": "บิต", + "creating_advanced_applications": "สร้างแอปพลิเคชันขั้นสูง", + "credential_acquisition_method": "วิธีรับข้อมูลรับรอง", + "table_notes": "หมายเหตุตาราง", + "system_credential_type": "ชนิดข้อมูลรับรองของระบบต้นทาง", + "credential_name": "ชื่อข้อมูลรับรอง", + "target_credential_location": "ตำแหน่งข้อมูลรับรองปลายทาง", + "target_credential_name": "ชื่อข้อมูลรับรองปลายทาง", + "target_credential": "ข้อมูลรับรองปลายทาง", + "edit_advanced_applications": "แก้ไขแอปพลิเคชันขั้นสูง", + "edit_basic_applications": "แก้ไขแอปพลิเคชันพื้นฐาน", + "delete": "ยืนยันการลบ: {msg} หรือไม่?", + "code_to_embed": "คัดลอกโค้ดด้านล่างนี้เพื่อฝัง", + "floating_window_mode": "โหมดหน้าต่างลอย", + "copy_successful": "คัดลอกสำเร็จ", + "copy_failed": "คัดลอกล้มเหลว", + "open_the_query": "แหล่งข้อมูลสาธารณะอนุญาตให้ผู้ใช้ทุกคนเริ่มสอบถามข้อมูลได้ ส่วนแหล่งข้อมูลส่วนตัว ผู้ใช้ที่เข้าสู่ระบบแล้วสามารถเริ่มสอบถามข้อมูลได้", + "add_interface_credentials": "เพิ่มข้อมูลรับรองอินเทอร์เฟซ", + "edit_interface_credentials": "แก้ไขข้อมูลรับรองอินเทอร์เฟซ", + "duplicate_name": "ชื่อซ้ำ", + "duplicate_name_": "ชื่อจริงซ้ำ", + "duplicate_account": "บัญชีซ้ำ", + "duplicate_email": "อีเมลซ้ำ", + "repeating_parameters": "พารามิเตอร์ซ้ำ", + "interface_credentials": "ข้อมูลรับรองอินเทอร์เฟซ", + "no_credentials_yet": "ยังไม่มีข้อมูลรับรอง", + "intelligent_customer_service": "ผู้ช่วยบริการอัจฉริยะ SQLBot", + "enter_a_question": "โปรดกรอกคำถาม", + "new_conversation": "สร้างบทสนทนาใหม่", + "send": "ส่ง", + "stop_replying": "หยุดตอบกลับ", + "i_am_sqlbot": "สวัสดี ฉันคือ SQLBot", + "predict_data_etc": "ฉันสามารถสอบถามข้อมูล สร้างแผนภูมิ ตรวจจับความผิดปกติของข้อมูล คาดการณ์ข้อมูล ฯลฯ", + "intelligent_data_query": "รีบเริ่มใช้งานการสอบถามข้อมูลอัจฉริยะเลย~", + "origin_format_error": "รูปแบบไม่ถูกต้อง ต้องขึ้นต้นด้วย http หรือ https และไม่ลงท้ายด้วย /", + "display_settings": "การตั้งค่าการแสดงผล", + "header_text_color": "สีข้อความส่วนหัว", + "app_logo": "โลโก้แอปพลิเคชัน", + "maximum_size_10mb": "ขนาดที่แนะนำ 32 x 32 รองรับไฟล์ JPG, PNG ขนาดไม่เกิน 10MB", + "replace": "แทนที่", + "default_icon_position": "ตำแหน่งเริ่มต้นของไอคอน", + "draggable_position": "ตำแหน่งที่ลากวางได้", + "up": "บน", + "down": "ล่าง", + "left": "ซ้าย", + "right": "ขวา", + "welcome_description": "คำอธิบายคำต้อนรับ", + "data_analysis_now": "ฉันสามารถสอบถามข้อมูล สร้างแผนภูมิ ตรวจจับความผิดปกติของข้อมูล คาดการณ์ข้อมูล ฯลฯ รีบเริ่มใช้งานการสอบถามข้อมูลอัจฉริยะเลย~", + "window_entrance_icon": "ไอคอนทางเข้าหน้าต่างลอย", + "preview_error": "หน้าเว็บนี้ห้ามฝังด้วย Iframe!", + "assistant_app": "แอปพลิเคชันผู้ช่วย", + "auto_select_ds": "เลือกแหล่งข้อมูลอัตโนมัติ" + }, + "chat": { + "type": "ชนิดแผนภูมิ", + "chart_type": { + "table": "ตารางรายละเอียด", + "bar": "แผนภูมิแท่งแนวนอน", + "column": "แผนภูมิแท่ง", + "line": "แผนภูมิเส้น", + "pie": "แผนภูมิวงกลม" + }, + "hide_label": "ซ่อนป้ายกำกับ", + "show_label": "แสดงป้ายกำกับ", + "sort_asc": "เรียงจากน้อยไปมาก", + "sort_desc": "เรียงจากมากไปน้อย", + "sort_none": "ไม่เรียงลำดับ", + "show_sql": "ดู SQL", + "export_to": "ส่งออกเป็น", + "excel": "Excel", + "picture": "รูปภาพ", + "add_to_dashboard": "เพิ่มไปยังแดชบอร์ด", + "full_screen": "เต็มหน้าจอ", + "exit_full_screen": "ออกจากโหมดเต็มหน้าจอ", + "sql_generation": "สร้าง SQL", + "chart_generation": "สร้างแผนภูมิ", + "inference_process": "กระบวนการคิด", + "thinking": "กำลังคิด", + "data_analysis": "การวิเคราะห์ข้อมูล", + "data_predict": "การคาดการณ์ข้อมูล", + "data_over_limit": "ข้อมูลมีจำนวนมากเกินไป แสดงเพียง {0} รายการแรก", + "ds_is_invalid": "แหล่งข้อมูลไม่ถูกต้อง", + "error": "ข้อผิดพลาด", + "exec-sql-err": "ดำเนินการคำสั่ง SQL ล้มเหลว", + "no_data": "ยังไม่มีข้อมูล", + "loading_data": "กำลังโหลด...", + "show_error_detail": "ดูข้อมูลเพิ่มเติม", + "thousands_separator_setting": "การตั้งค่าตัวคั่นหลักพัน", + "thousands_separator_display": "แสดงตัวคั่นหลักพัน", + "log": { + "GENERATE_SQL": "สร้าง SQL", + "GENERATE_CHART": "สร้างโครงสร้างแผนภูมิ", + "ANALYSIS": "วิเคราะห์", + "PREDICT_DATA": "คาดการณ์", + "GENERATE_SQL_WITH_PERMISSIONS": "รวม SQL ตามสิทธิ์ระดับแถว", + "CHOOSE_DATASOURCE": "จับคู่แหล่งข้อมูล", + "GENERATE_DYNAMIC_SQL": "สร้าง SQL แบบไดนามิก", + "CHOOSE_TABLE": "จับคู่ตารางข้อมูล (Schema)", + "FILTER_TERMS": "จับคู่คำศัพท์", + "EXTRACT_KEYWORDS": "ดึงคีย์เวิร์ด", + "FILTER_SQL_EXAMPLE": "จับคู่ตัวอย่าง SQL", + "FILTER_CUSTOM_PROMPT": "จับคู่พรอมป์ต์ที่กำหนดเอง", + "EXECUTE_SQL": "ดำเนินการ SQL", + "GENERATE_PICTURE": "สร้างรูปภาพ" + }, + "log_system": "เทมเพลตบทสนทนา", + "log_question": "คำถามครั้งนี้", + "log_answer": "คำตอบจาก AI", + "log_history": "ประวัติ", + "find_term_title": "จับคู่ได้ {0} คำศัพท์", + "find_sql_sample_title": "จับคู่ได้ {0} ตัวอย่าง SQL", + "find_custom_prompt_title": "จับคู่ได้ {0} พรอมป์ต์ที่กำหนดเอง", + "query_count_title": "ค้นหาได้ {0} รายการ", + "generate_picture_success": "สร้างรูปภาพแล้ว" + }, + "about": { + "title": "เกี่ยวกับ", + "auth_to": "อนุญาตให้", + "invalid_license": "License ไม่ถูกต้อง", + "update_license": "อัปเดต License", + "expiration_time": "เวลาหมดอายุ", + "expirationed": "(หมดอายุแล้ว)", + "auth_num": "จำนวนที่อนุญาต", + "version": "เวอร์ชัน", + "version_num": "หมายเลขเวอร์ชัน", + "standard": "เวอร์ชันชุมชน", + "enterprise": "เวอร์ชันองค์กร", + "Professional": "เวอร์ชันมืออาชีพ", + "Embedded": "เวอร์ชันฝังระบบ", + "support": "รับการสนับสนุนทางเทคนิค", + "update_success": "อัปเดตสำเร็จ โปรดเข้าสู่ระบบอีกครั้ง", + "serial_no": "หมายเลขซีเรียล", + "remark": "หมายเหตุ", + "back_community": "กลับไปยังเวอร์ชันชุมชน", + "confirm_tips": "ยืนยันการกลับไปยังเวอร์ชันชุมชนหรือไม่?" + }, + "license": { + "error_tips": "ยืนยันการรีเฟรชหน้าเว็บหรือไม่?", + "offline_tips": "บริการออฟไลน์แล้ว โปรดติดต่อผู้ดูแลระบบเพื่อรีสตาร์ทบริการ!" + }, + "system": { + "system_settings": "การตั้งค่าระบบ", + "appearance_settings": "การตั้งค่ารูปลักษณ์", + "authentication_settings": "การยืนยันตัวตนเข้าสู่ระบบ", + "platform_display_theme": "ธีมการแสดงผลของแพลตฟอร์ม", + "default_turquoise": "ค่าเริ่มต้น (เขียวเทอร์ควอยซ์)", + "tech_blue": "น้ำเงินเทคโนโลยี", + "custom": "กำหนดเอง", + "platform_login_settings": "การตั้งค่าการเข้าสู่ระบบของแพลตฟอร์ม", + "page_preview": "ดูตัวอย่างหน้าเว็บ", + "restore_default": "กลับค่าเริ่มต้น", + "website_logo": "โลโก้เว็บไซต์", + "tab": "แท็บ", + "replace_image": "แทนที่รูปภาพ", + "larger_than_200kb": "โลโก้ที่แสดงด้านบนของเว็บไซต์ ขนาดที่แนะนำ 48 x 48 รองรับไฟล์ JPG, PNG ขนาดไม่เกิน 200KB", + "login_logo": "โลโก้ระบบ", + "larger_than_200kb_de": "โลโก้ด้านขวาของหน้าเข้าสู่ระบบ ขนาดที่แนะนำ 204*52 รองรับไฟล์ JPG, PNG ขนาดไม่เกิน 200KB", + "login_background_image": "ภาพพื้นหลังหน้าเข้าสู่ระบบ", + "larger_than_5mb": "ภาพพื้นหลังด้านซ้าย ขนาดที่แนะนำสำหรับภาพเวกเตอร์ 576*900 ภาพบิตแมป 1152*1800 รองรับไฟล์ JPG, PNG ขนาดไม่เกิน 5MB", + "website_name": "ชื่อเว็บไซต์", + "on_webpage_tabs": "ชื่อแพลตฟอร์มที่แสดงบนแท็บของหน้าเว็บ", + "welcome_message": "แสดงคำต้อนรับ", + "the_product_logo": "คำต้อนรับใต้โลโก้ผลิตภัณฑ์", + "screen_customization_supported": "ค่าเริ่มต้นคือหน้าเข้าสู่ระบบของ SQLBot รองรับการกำหนดเอง", + "screen_customization_settings": "ค่าเริ่มต้นคือหน้าปกของแพลตฟอร์ม SQLBot รองรับการกำหนดเอง", + "platform_settings": "การตั้งค่าแพลตฟอร์ม", + "help_documentation": "เอกสารช่วยเหลือ", + "show_about": "แสดงหน้าเกี่ยวกับ", + "abort_update": "ยกเลิกการอัปเดต", + "save_and_apply": "บันทึกและนำไปใช้", + "setting_successfully": "ตั้งค่าสำเร็จ", + "customize_theme_color": "กำหนดสีธีมเอง" + }, + "platform": { + "title": "การเชื่อมต่อแพลตฟอร์ม", + "status_open": "เปิดอยู่", + "status_close": "ปิดอยู่", + "access_in": "เชื่อมต่อ", + "can_enable_it": "สามารถเปิดใช้งานได้หลังจากทดสอบการเชื่อมต่อสำเร็จ" + }, + "authentication": { + "invalid": "ไม่ถูกต้อง", + "valid": "ถูกต้อง", + "cas_settings": "การตั้งค่า CAS", + "callback_domain_name": "ที่อยู่เรียกกลับ", + "callback_domain_name_error": "ที่อยู่เรียกกลับต้องเป็นโดเมนที่ใช้เข้าถึงอยู่ในปัจจุบัน", + "field_mapping": "การจับคู่คุณสมบัติผู้ใช้", + "field_mapping_placeholder": "เช่น {'{'}\"account\": \"saml2Account\", \"name\": \"saml2Name\", \"email\": \"email\"{'}'}", + "incorrect_please_re_enter": "รูปแบบไม่ถูกต้อง โปรดกรอกใหม่", + "in_json_format": "โปรดกรอกในรูปแบบ json", + "authorize_url": "ที่อยู่การอนุญาต", + "client_id": "Client ID", + "client_secret": "Client Secret", + "redirect_url": "ที่อยู่เรียกกลับ", + "logout_redirect_url": "ที่อยู่เรียกกลับเมื่อออกจากระบบ", + "logout_redirect_url_placeholder": "หลังออกจากระบบ โดยค่าเริ่มต้นจะไปที่หน้าเข้าสู่ระบบของ SQLBot สามารถกำหนดที่อยู่ปลายทางหลังออกจากระบบได้เอง", + "oauth2_settings": "การตั้งค่า OAuth2", + "scope": "ขอบเขตการอนุญาต", + "userinfo_url": "ที่อยู่ข้อมูลผู้ใช้", + "token_url": "ที่อยู่โทเคน", + "revoke_url": "ที่อยู่การเพิกถอน", + "oauth2_field_mapping_placeholder": "เช่น {'{'}\"account\": \"oauth2Account\", \"name\": \"oauth2Name\", \"email\": \"email\"{'}'}", + "token_auth_method": "วิธียืนยันตัวตนด้วย Token", + "userinfo_auth_method": "วิธียืนยันตัวตนข้อมูลผู้ใช้", + "oidc_settings": "การตั้งค่า OIDC", + "metadata_url": "ที่อยู่เมตาดาต้า", + "realm": "Realm", + "oidc_field_mapping_placeholder": "เช่น {'{'}\"account\": \"oidcAccount\", \"name\": \"oidcName\", \"email\": \"email\"{'}'}", + "ldap_settings": "การตั้งค่า LDAP", + "server_address": "ที่อยู่เซิร์ฟเวอร์", + "server_address_placeholder": "เช่น ldap://ldap.example.com:389", + "bind_dn": "Bind DN", + "bind_dn_placeholder": "เช่น cn=admin,dc=example,dc=com", + "bind_pwd": "รหัสผ่าน Bind", + "ou": "OU ของผู้ใช้", + "ou_placeholder": "เช่น ou=users,dc=example,dc=com", + "user_filter": "ตัวกรองผู้ใช้", + "user_filter_placeholder": "เช่น uid หรือ uid {0} email คั่นหลายคุณสมบัติด้วย {1}", + "ldap_field_mapping_placeholder": "เช่น {'{'}\"account\": \"ldapAccount\", \"name\": \"ldapName\", \"email\": \"mail\"{'}'}", + "be_turned_on": "สามารถเปิดใช้งานได้หลังจากทดสอบการเชื่อมต่อสำเร็จ" + }, + "login": { + "default_login": "ค่าเริ่มต้น", + "ldap_login": "เข้าสู่ระบบด้วย LDAP", + "account_login": "เข้าสู่ระบบด้วยบัญชี", + "force_change_pwd_title": "เปลี่ยนรหัสผ่านเริ่มต้น", + "force_change_pwd_tips": "รหัสผ่านปัจจุบันเป็นรหัสผ่านเริ่มต้นของระบบ โปรดเปลี่ยนรหัสผ่านก่อนเข้าสู่ระบบ", + "force_change_pwd_success": "เปลี่ยนรหัสผ่านสำเร็จ", + "other_login": "วิธีเข้าสู่ระบบอื่น ๆ", + "pwd_invalid_error": "รหัสผ่านหมดอายุแล้ว โปรดติดต่อผู้ดูแลระบบเพื่อเปลี่ยนหรือรีเซ็ต", + "pwd_exp_tips": "รหัสผ่านจะหมดอายุในอีก {0} วัน โปรดเปลี่ยนรหัสผ่านโดยเร็ว", + "qr_code": "คิวอาร์โค้ด", + "platform_disable": "การตั้งค่า{0}ยังไม่เปิดใช้งาน!", + "input_account": "โปรดกรอกบัญชี", + "redirect_2_auth": "กำลังเปลี่ยนไปยังการยืนยันตัวตน {0} ในอีก {1} วินาที...", + "redirect_immediately": "เปลี่ยนทันที", + "permission_invalid": "การยืนยันตัวตนไม่ถูกต้อง【บัญชีปัจจุบันมีสิทธิ์ไม่เพียงพอ】", + "scan_qr_login": "เข้าสู่ระบบด้วยการสแกนคิวอาร์โค้ด", + "no_auth_error": "ยังไม่ได้ยืนยันตัวตน กำลังไปยังหน้าเข้าสู่ระบบในอีก {0} วินาที..." + }, + "supplier": { + "alibaba_cloud_bailian": "Alibaba Cloud Bailian", + "qianfan_model": "Qianfan Model", + "deepseek": "DeepSeek", + "tencent_hunyuan": "Tencent Hunyuan", + "iflytek_spark": "iFlytek Spark", + "gemini": "Gemini", + "openai": "OpenAI", + "kimi": "Kimi", + "tencent_cloud": "Tencent Cloud", + "volcano_engine": "Volcano Engine", + "minimax": "MiniMax", + "generic_openai": "OpenAI แบบทั่วไป" + }, + "modelType": { + "llm": "โมเดลภาษาขนาดใหญ่" + }, + "audit": { + "system_log": "บันทึกการดำเนินการ", + "search_log": "ค้นหาบันทึก", + "operation_type": "ชนิดการดำเนินการ", + "operation_details": "รายละเอียดการดำเนินการ", + "operation_user_name": "ผู้ดำเนินการ", + "operation_status": "สถานะการดำเนินการ", + "user_name": "บันทึกการดำเนินการ", + "oid_name": "พื้นที่ทำงาน", + "ip_address": "ที่อยู่ IP", + "create_time": "เวลาที่สร้าง", + "no_log": "ยังไม่มีบันทึก", + "all_236_terms": "ยืนยันการส่งออกบันทึกทั้งหมด {msg} รายการหรือไม่?", + "export_hint": "ยืนยันการส่งออกบันทึกทั้งหมดหรือไม่?", + "export": "ส่งออก", + "success": "สำเร็จ", + "failed": "ล้มเหลว", + "failed_info": "รายละเอียดความล้มเหลวของการดำเนินการ", + "opt_time": "เวลาที่ดำเนินการ" + }, + "api_key": { + "info_tips": "API Key คือกุญแจสำหรับเข้าถึง SQLBot API ของคุณ มีสิทธิ์เต็มที่เท่ากับบัญชีของคุณ โปรดเก็บรักษาอย่างระมัดระวัง! อย่าเปิดเผย API Key ผ่านช่องทางภายนอกใด ๆ เพื่อป้องกันไม่ให้ผู้อื่นนำไปใช้จนก่อเหตุคุกคามด้านความปลอดภัย", + "create": "สร้าง", + "to_doc": "ดู API", + "trigger_limit": "รองรับการสร้าง API Key ได้สูงสุด {0} คีย์" + } +} diff --git a/frontend/src/i18n/zh-CN.json b/frontend/src/i18n/zh-CN.json index 16e05da63..8733c421a 100644 --- a/frontend/src/i18n/zh-CN.json +++ b/frontend/src/i18n/zh-CN.json @@ -209,6 +209,7 @@ "reset": "重置", "simplified_chinese": "简体中文", "korean": "한국어", + "thai": "ไทย", "traditional_chinese": "繁體中文", "help": "帮助", "language": "语言", diff --git a/frontend/src/i18n/zh-TW.json b/frontend/src/i18n/zh-TW.json index 8acb5198f..20eac87ef 100644 --- a/frontend/src/i18n/zh-TW.json +++ b/frontend/src/i18n/zh-TW.json @@ -209,6 +209,7 @@ "reset": "重設", "simplified_chinese": "簡體中文", "korean": "한국어", + "thai": "ไทย", "traditional_chinese": "繁體中文", "help": "說明", "language": "語言", diff --git a/frontend/src/stores/user.ts b/frontend/src/stores/user.ts index 30ba4f3a8..e87de76af 100644 --- a/frontend/src/stores/user.ts +++ b/frontend/src/stores/user.ts @@ -184,6 +184,8 @@ export const UserStore = defineStore('user', { language = 'zh-TW' } else if (language === 'ko_KR') { language = 'ko-KR' + } else if (language === 'th_TH') { + language = 'th-TH' } wsCache.set('user.language', language) this.language = language diff --git a/frontend/src/utils/utils.ts b/frontend/src/utils/utils.ts index 9e56f7de2..fddd774c9 100644 --- a/frontend/src/utils/utils.ts +++ b/frontend/src/utils/utils.ts @@ -52,6 +52,9 @@ export const getBrowserLocale = () => { const temp = language.toLowerCase().replace('_', '-') return temp === 'zh' ? 'zh-CN' : temp === 'zh-cn' ? 'zh-CN' : 'zh-TW' } + if (language.toLowerCase().startsWith('th')) { + return 'th-TH' + } return language } export const getLocale = () => {