chore: add more language supports

This commit is contained in:
Junyan Qin
2026-03-28 20:48:36 +08:00
parent 99e2976826
commit dddfa8ac79
14 changed files with 3758 additions and 0 deletions

View File

@@ -25,6 +25,15 @@ class I18nString(pydantic.BaseModel):
ja_JP: typing.Optional[str] = None ja_JP: typing.Optional[str] = None
"""日文""" """日文"""
th_TH: typing.Optional[str] = None
"""泰文"""
vi_VN: typing.Optional[str] = None
"""越南文"""
es_ES: typing.Optional[str] = None
"""西班牙文"""
def to_dict(self) -> dict: def to_dict(self) -> dict:
"""转换为字典""" """转换为字典"""
dic = {} dic = {}
@@ -36,6 +45,12 @@ class I18nString(pydantic.BaseModel):
dic['zh_Hant'] = self.zh_Hant dic['zh_Hant'] = self.zh_Hant
if self.ja_JP is not None: if self.ja_JP is not None:
dic['ja_JP'] = self.ja_JP dic['ja_JP'] = self.ja_JP
if self.th_TH is not None:
dic['th_TH'] = self.th_TH
if self.vi_VN is not None:
dic['vi_VN'] = self.vi_VN
if self.es_ES is not None:
dic['es_ES'] = self.es_ES
return dic return dic

View File

@@ -7,11 +7,17 @@ metadata:
zh_Hans: Discord zh_Hans: Discord
zh_Hant: Discord zh_Hant: Discord
ja_JP: Discord ja_JP: Discord
th_TH: Discord
vi_VN: Discord
es_ES: Discord
description: description:
en_US: Discord Adapter en_US: Discord Adapter
zh_Hans: Discord 适配器,需要可连接 Discord 服务器的网络环境 zh_Hans: Discord 适配器,需要可连接 Discord 服务器的网络环境
zh_Hant: Discord 適配器,需要可連線 Discord 伺服器的網路環境 zh_Hant: Discord 適配器,需要可連線 Discord 伺服器的網路環境
ja_JP: Discord アダプター、Discord サーバーに接続可能なネットワーク環境が必要です ja_JP: Discord アダプター、Discord サーバーに接続可能なネットワーク環境が必要です
th_TH: อะแดปเตอร์ Discord ต้องการสภาพแวดล้อมเครือข่ายที่สามารถเชื่อมต่อกับเซิร์ฟเวอร์ Discord ได้
vi_VN: Bộ điều hợp Discord, cần môi trường mạng có thể kết nối với máy chủ Discord
es_ES: Adaptador de Discord, requiere un entorno de red con acceso al servidor de Discord
icon: discord.svg icon: discord.svg
spec: spec:
categories: categories:
@@ -24,6 +30,9 @@ spec:
zh_Hans: 客户端ID zh_Hans: 客户端ID
zh_Hant: 用戶端ID zh_Hant: 用戶端ID
ja_JP: クライアント ID ja_JP: クライアント ID
th_TH: รหัสไคลเอนต์
vi_VN: ID khách hàng
es_ES: ID de cliente
type: string type: string
required: true required: true
default: "" default: ""
@@ -33,6 +42,9 @@ spec:
zh_Hans: 令牌 zh_Hans: 令牌
zh_Hant: 令牌 zh_Hant: 令牌
ja_JP: トークン ja_JP: トークン
th_TH: โทเค็น
vi_VN: Mã thông báo
es_ES: Token
type: string type: string
required: true required: true
default: "" default: ""

View File

@@ -6,11 +6,17 @@ metadata:
en_US: LINE en_US: LINE
zh_Hans: LINE zh_Hans: LINE
zh_Hant: LINE zh_Hant: LINE
th_TH: LINE
vi_VN: LINE
es_ES: LINE
description: description:
en_US: LINE Adapter, requires a public URL to receive LINE message pushes, please refer to the documentation for usage details en_US: LINE Adapter, requires a public URL to receive LINE message pushes, please refer to the documentation for usage details
zh_Hans: LINE适配器需要公网地址以接收 LINE 消息推送,请查看文档了解使用方式 zh_Hans: LINE适配器需要公网地址以接收 LINE 消息推送,请查看文档了解使用方式
zh_Hant: LINE 適配器,需要公網地址以接收 LINE 訊息推送,請查看文件了解使用方式 zh_Hant: LINE 適配器,需要公網地址以接收 LINE 訊息推送,請查看文件了解使用方式
ja_JP: LINEアダプター、LINEのメッセージプッシュを受信するためにパブリックURLが必要です。使用方法の詳細については、ドキュメントを参照してください。 ja_JP: LINEアダプター、LINEのメッセージプッシュを受信するためにパブリックURLが必要です。使用方法の詳細については、ドキュメントを参照してください。
th_TH: อะแดปเตอร์ LINE ต้องการ URL สาธารณะเพื่อรับการแจ้งเตือนข้อความจาก LINE โปรดดูเอกสารประกอบสำหรับรายละเอียดการใช้งาน
vi_VN: Bộ điều hợp LINE, cần URL công cộng để nhận thông báo tin nhắn LINE, vui lòng xem tài liệu để biết chi tiết cách sử dụng
es_ES: Adaptador de LINE, requiere una URL pública para recibir notificaciones de mensajes de LINE, consulte la documentación para obtener detalles de uso
icon: line.png icon: line.png
spec: spec:
categories: categories:
@@ -22,11 +28,17 @@ spec:
zh_Hans: Webhook 回调地址 zh_Hans: Webhook 回调地址
ja_JP: Webhook コールバック URL ja_JP: Webhook コールバック URL
zh_Hant: Webhook 回調地址 zh_Hant: Webhook 回調地址
th_TH: URL การเรียกกลับ Webhook
vi_VN: URL gọi lại Webhook
es_ES: URL de devolución de llamada Webhook
description: description:
en_US: Copy this URL and paste it into your LINE channel's webhook configuration en_US: Copy this URL and paste it into your LINE channel's webhook configuration
zh_Hans: 复制此地址并粘贴到 LINE 频道的 Webhook 配置中 zh_Hans: 复制此地址并粘贴到 LINE 频道的 Webhook 配置中
ja_JP: この URL をコピーして LINE チャンネルの Webhook 設定に貼り付けてください ja_JP: この URL をコピーして LINE チャンネルの Webhook 設定に貼り付けてください
zh_Hant: 複製此地址並貼到 LINE 頻道的 Webhook 設定中 zh_Hant: 複製此地址並貼到 LINE 頻道的 Webhook 設定中
th_TH: คัดลอก URL นี้แล้ววางในการตั้งค่า Webhook ของช่อง LINE ของคุณ
vi_VN: Sao chép URL này và dán vào cấu hình webhook của kênh LINE của bạn
es_ES: Copie esta URL y péguela en la configuración de webhook de su canal LINE
type: webhook-url type: webhook-url
required: false required: false
default: "" default: ""
@@ -36,6 +48,9 @@ spec:
zh_Hans: 频道访问令牌 zh_Hans: 频道访问令牌
ja_JP: チャンネルアクセストークン ja_JP: チャンネルアクセストークン
zh_Hant: 頻道存取令牌 zh_Hant: 頻道存取令牌
th_TH: โทเค็นการเข้าถึงช่อง
vi_VN: Mã truy cập kênh
es_ES: Token de acceso del canal
type: string type: string
required: true required: true
default: "" default: ""
@@ -45,11 +60,17 @@ spec:
zh_Hans: 消息密钥 zh_Hans: 消息密钥
ja_JP: チャンネルシークレット ja_JP: チャンネルシークレット
zh_Hant: 訊息密鑰 zh_Hant: 訊息密鑰
th_TH: รหัสลับช่อง
vi_VN: Khóa bí mật kênh
es_ES: Secreto del canal
description: description:
en_US: Only valid when webhook mode is enabled, please fill in the encrypt key en_US: Only valid when webhook mode is enabled, please fill in the encrypt key
zh_Hans: 请填写加密密钥 zh_Hans: 请填写加密密钥
ja_JP: Webhookモードが有効な場合にのみ、暗号化キーを入力してください ja_JP: Webhookモードが有効な場合にのみ、暗号化キーを入力してください
zh_Hant: 請填寫加密密鑰 zh_Hant: 請填寫加密密鑰
th_TH: กรุณากรอกคีย์เข้ารหัส
vi_VN: Vui lòng điền khóa mã hóa
es_ES: Por favor, introduzca la clave de cifrado
type: string type: string
required: true required: true
default: "" default: ""

View File

@@ -6,10 +6,16 @@ metadata:
en_US: Satori en_US: Satori
zh_Hans: Satori zh_Hans: Satori
zh_Hant: Satori zh_Hant: Satori
th_TH: Satori
vi_VN: Satori
es_ES: Satori
description: description:
en_US: SatoriAdapter en_US: SatoriAdapter
zh_Hans: Satori 协议适配器,支持多种平台的接入,请查看文档了解使用方式 zh_Hans: Satori 协议适配器,支持多种平台的接入,请查看文档了解使用方式
zh_Hant: Satori 協定適配器,支援多種平台的接入,請查看文件了解使用方式 zh_Hant: Satori 協定適配器,支援多種平台的接入,請查看文件了解使用方式
th_TH: อะแดปเตอร์โปรโตคอล Satori รองรับการเชื่อมต่อหลายแพลตฟอร์ม โปรดดูเอกสารประกอบสำหรับวิธีการใช้งาน
vi_VN: Bộ điều hợp giao thức Satori, hỗ trợ kết nối nhiều nền tảng, vui lòng xem tài liệu để biết cách sử dụng
es_ES: Adaptador del protocolo Satori, soporta acceso a múltiples plataformas, consulte la documentación para obtener instrucciones de uso
icon: satori.png icon: satori.png
spec: spec:
categories: categories:
@@ -20,6 +26,9 @@ spec:
en_US: Platform en_US: Platform
zh_Hans: 平台名称 zh_Hans: 平台名称
zh_Hant: 平台名稱 zh_Hant: 平台名稱
th_TH: ชื่อแพลตฟอร์ม
vi_VN: Tên nền tảng
es_ES: Nombre de la plataforma
type: string type: string
required: true required: true
default: "llonebot" default: "llonebot"
@@ -27,11 +36,17 @@ spec:
en_US: The platform name (e.g., llonebot, discord, telegram) en_US: The platform name (e.g., llonebot, discord, telegram)
zh_Hans: 平台名称(如 llonebot, discord, telegram zh_Hans: 平台名称(如 llonebot, discord, telegram
zh_Hant: 平台名稱(如 llonebot、discord、telegram zh_Hant: 平台名稱(如 llonebot、discord、telegram
th_TH: ชื่อแพลตฟอร์ม (เช่น llonebot, discord, telegram)
vi_VN: Tên nền tảng (ví dụ: llonebot, discord, telegram)
es_ES: El nombre de la plataforma (p. ej., llonebot, discord, telegram)
- name: host - name: host
label: label:
en_US: Host en_US: Host
zh_Hans: 主机地址 zh_Hans: 主机地址
zh_Hant: 主機地址 zh_Hant: 主機地址
th_TH: ที่อยู่โฮสต์
vi_VN: Địa chỉ máy chủ
es_ES: Dirección del host
type: string type: string
required: true required: true
default: "127.0.0.1" default: "127.0.0.1"
@@ -39,11 +54,17 @@ spec:
en_US: The host address of LLOneBot Satori server (e.g., 127.0.0.1, localhost, 192.168.1.100) en_US: The host address of LLOneBot Satori server (e.g., 127.0.0.1, localhost, 192.168.1.100)
zh_Hans: LLOneBot Satori服务器的主机地址如 127.0.0.1, localhost, 192.168.1.100 zh_Hans: LLOneBot Satori服务器的主机地址如 127.0.0.1, localhost, 192.168.1.100
zh_Hant: LLOneBot Satori 伺服器的主機地址(如 127.0.0.1、localhost、192.168.1.100 zh_Hant: LLOneBot Satori 伺服器的主機地址(如 127.0.0.1、localhost、192.168.1.100
th_TH: ที่อยู่โฮสต์ของเซิร์ฟเวอร์ LLOneBot Satori (เช่น 127.0.0.1, localhost, 192.168.1.100)
vi_VN: Địa chỉ máy chủ LLOneBot Satori (ví dụ: 127.0.0.1, localhost, 192.168.1.100)
es_ES: La dirección del host del servidor LLOneBot Satori (p. ej., 127.0.0.1, localhost, 192.168.1.100)
- name: port - name: port
label: label:
en_US: Port en_US: Port
zh_Hans: 监听端口 zh_Hans: 监听端口
zh_Hant: 監聽連接埠 zh_Hant: 監聽連接埠
th_TH: พอร์ต
vi_VN: Cổng
es_ES: Puerto
type: integer type: integer
required: true required: true
default: 5600 default: 5600
@@ -52,6 +73,9 @@ spec:
en_US: Satori API Endpoint en_US: Satori API Endpoint
zh_Hans: Satori API 终结点 zh_Hans: Satori API 终结点
zh_Hant: Satori API 端點 zh_Hant: Satori API 端點
th_TH: จุดปลาย Satori API
vi_VN: Điểm cuối Satori API
es_ES: Punto de acceso de la API Satori
type: string type: string
required: true required: true
default: "http://localhost:5600/v1" default: "http://localhost:5600/v1"
@@ -60,6 +84,9 @@ spec:
en_US: Satori WebSocket Endpoint en_US: Satori WebSocket Endpoint
zh_Hans: Satori WebSocket 终结点 zh_Hans: Satori WebSocket 终结点
zh_Hant: Satori WebSocket 端點 zh_Hant: Satori WebSocket 端點
th_TH: จุดปลาย Satori WebSocket
vi_VN: Điểm cuối Satori WebSocket
es_ES: Punto de acceso WebSocket de Satori
type: string type: string
required: true required: true
default: "ws://localhost:5600/v1/events" default: "ws://localhost:5600/v1/events"
@@ -68,6 +95,9 @@ spec:
en_US: Token en_US: Token
zh_Hans: 令牌 zh_Hans: 令牌
zh_Hant: 令牌 zh_Hant: 令牌
th_TH: โทเค็น
vi_VN: Mã thông báo
es_ES: Token
type: string type: string
required: true required: true
default: "" default: ""

View File

@@ -7,11 +7,17 @@ metadata:
zh_Hans: Slack zh_Hans: Slack
zh_Hant: Slack zh_Hant: Slack
ja_JP: Slack ja_JP: Slack
th_TH: Slack
vi_VN: Slack
es_ES: Slack
description: description:
en_US: Slack Adapter en_US: Slack Adapter
zh_Hans: Slack 适配器,需要公网地址以接收 Slack 消息推送,请查看文档了解使用方式 zh_Hans: Slack 适配器,需要公网地址以接收 Slack 消息推送,请查看文档了解使用方式
zh_Hant: Slack 適配器,需要公網地址以接收 Slack 訊息推送,請查看文件了解使用方式 zh_Hant: Slack 適配器,需要公網地址以接收 Slack 訊息推送,請查看文件了解使用方式
ja_JP: Slack アダプター、Slackのメッセージプッシュを受信するためにパブリックURLが必要です。使用方法の詳細については、ドキュメントを参照してください。 ja_JP: Slack アダプター、Slackのメッセージプッシュを受信するためにパブリックURLが必要です。使用方法の詳細については、ドキュメントを参照してください。
th_TH: อะแดปเตอร์ Slack ต้องการที่อยู่สาธารณะเพื่อรับการแจ้งเตือนข้อความจาก Slack โปรดดูเอกสารประกอบสำหรับวิธีการใช้งาน
vi_VN: Bộ điều hợp Slack, cần địa chỉ công cộng để nhận thông báo tin nhắn từ Slack, vui lòng xem tài liệu để biết cách sử dụng
es_ES: Adaptador de Slack, requiere una dirección pública para recibir notificaciones de mensajes de Slack, consulte la documentación para obtener instrucciones de uso
icon: slack.png icon: slack.png
spec: spec:
categories: categories:
@@ -24,11 +30,17 @@ spec:
zh_Hans: Webhook 回调地址 zh_Hans: Webhook 回调地址
zh_Hant: Webhook 回調地址 zh_Hant: Webhook 回調地址
ja_JP: Webhook コールバック URL ja_JP: Webhook コールバック URL
th_TH: URL การเรียกกลับ Webhook
vi_VN: URL gọi lại Webhook
es_ES: URL de devolución de llamada Webhook
description: description:
en_US: Copy this URL and paste it into your Slack app's event subscription configuration en_US: Copy this URL and paste it into your Slack app's event subscription configuration
zh_Hans: 复制此地址并粘贴到 Slack 应用的事件订阅配置中 zh_Hans: 复制此地址并粘贴到 Slack 应用的事件订阅配置中
zh_Hant: 複製此地址並貼到 Slack 應用的事件訂閱設定中 zh_Hant: 複製此地址並貼到 Slack 應用的事件訂閱設定中
ja_JP: この URL をコピーして Slack アプリのイベントサブスクリプション設定に貼り付けてください ja_JP: この URL をコピーして Slack アプリのイベントサブスクリプション設定に貼り付けてください
th_TH: คัดลอก URL นี้แล้ววางในการตั้งค่าการสมัครรับเหตุการณ์ของแอป Slack ของคุณ
vi_VN: Sao chép URL này và dán vào cấu hình đăng ký sự kiện của ứng dụng Slack của bạn
es_ES: Copie esta URL y péguela en la configuración de suscripción de eventos de su aplicación Slack
type: webhook-url type: webhook-url
required: false required: false
default: "" default: ""
@@ -38,6 +50,9 @@ spec:
zh_Hans: 机器人令牌 zh_Hans: 机器人令牌
zh_Hant: 機器人令牌 zh_Hant: 機器人令牌
ja_JP: ボットトークン ja_JP: ボットトークン
th_TH: โทเค็นบอท
vi_VN: Mã thông báo Bot
es_ES: Token del bot
type: string type: string
required: true required: true
default: "" default: ""
@@ -47,6 +62,9 @@ spec:
zh_Hans: 密钥 zh_Hans: 密钥
zh_Hant: 密鑰 zh_Hant: 密鑰
ja_JP: 署名シークレット ja_JP: 署名シークレット
th_TH: คีย์ลายเซ็น
vi_VN: Khóa ký
es_ES: Secreto de firma
type: string type: string
required: true required: true
default: "" default: ""

View File

@@ -7,11 +7,17 @@ metadata:
zh_Hans: 电报 zh_Hans: 电报
zh_Hant: Telegram zh_Hant: Telegram
ja_JP: Telegram ja_JP: Telegram
th_TH: Telegram
vi_VN: Telegram
es_ES: Telegram
description: description:
en_US: Telegram Adapter en_US: Telegram Adapter
zh_Hans: Telegram 适配器,请查看文档了解使用方式 zh_Hans: Telegram 适配器,请查看文档了解使用方式
zh_Hant: Telegram 適配器,請查看文件了解使用方式 zh_Hant: Telegram 適配器,請查看文件了解使用方式
ja_JP: Telegram アダプター。使用方法の詳細については、ドキュメントを参照してください。 ja_JP: Telegram アダプター。使用方法の詳細については、ドキュメントを参照してください。
th_TH: อะแดปเตอร์ Telegram โปรดดูเอกสารประกอบสำหรับวิธีการใช้งาน
vi_VN: Bộ điều hợp Telegram, vui lòng xem tài liệu để biết cách sử dụng
es_ES: Adaptador de Telegram, consulte la documentación para obtener instrucciones de uso
icon: telegram.svg icon: telegram.svg
spec: spec:
categories: categories:
@@ -24,6 +30,9 @@ spec:
zh_Hans: 令牌 zh_Hans: 令牌
zh_Hant: 令牌 zh_Hant: 令牌
ja_JP: トークン ja_JP: トークン
th_TH: โทเค็น
vi_VN: Mã thông báo
es_ES: Token
type: string type: string
required: true required: true
default: "token_from_botfather" default: "token_from_botfather"
@@ -33,6 +42,9 @@ spec:
zh_Hans: 是否使用 Markdown 卡片 zh_Hans: 是否使用 Markdown 卡片
zh_Hant: 是否使用 Markdown 卡片 zh_Hant: 是否使用 Markdown 卡片
ja_JP: Markdown カードを使用 ja_JP: Markdown カードを使用
th_TH: การ์ด Markdown
vi_VN: Thẻ Markdown
es_ES: Tarjeta Markdown
type: boolean type: boolean
required: false required: false
default: true default: true
@@ -42,11 +54,17 @@ spec:
zh_Hans: 启用电报流式回复模式 zh_Hans: 启用电报流式回复模式
zh_Hant: 啟用 Telegram 串流回覆模式 zh_Hant: 啟用 Telegram 串流回覆模式
ja_JP: ストリーミング返信モードを有効化 ja_JP: ストリーミング返信モードを有効化
th_TH: เปิดใช้งานโหมดตอบกลับแบบสตรีม
vi_VN: Bật chế độ trả lời trực tuyến
es_ES: Habilitar modo de respuesta en streaming
description: description:
en_US: If enabled, the bot will use the stream of telegram reply mode en_US: If enabled, the bot will use the stream of telegram reply mode
zh_Hans: 如果启用,将使用电报流式方式来回复内容 zh_Hans: 如果启用,将使用电报流式方式来回复内容
zh_Hant: 如果啟用,將使用 Telegram 串流方式來回覆內容 zh_Hant: 如果啟用,將使用 Telegram 串流方式來回覆內容
ja_JP: 有効にすると、ボットはストリーミングモードでメッセージに返信します ja_JP: 有効にすると、ボットはストリーミングモードでメッセージに返信します
th_TH: หากเปิดใช้งาน บอทจะใช้โหมดสตรีมของ Telegram ในการตอบกลับ
vi_VN: Nếu bật, bot sẽ sử dụng chế độ trả lời trực tuyến của Telegram
es_ES: Si está habilitado, el bot usará el modo de respuesta en streaming de Telegram
type: boolean type: boolean
required: true required: true
default: false default: false

View File

@@ -6,10 +6,16 @@ metadata:
en_US: "WebSocket Chat" en_US: "WebSocket Chat"
zh_Hans: "WebSocket 聊天" zh_Hans: "WebSocket 聊天"
zh_Hant: "WebSocket 聊天" zh_Hant: "WebSocket 聊天"
th_TH: "แชท WebSocket"
vi_VN: "Trò chuyện WebSocket"
es_ES: "Chat WebSocket"
description: description:
en_US: "WebSocket adapter for bidirectional real-time communication" en_US: "WebSocket adapter for bidirectional real-time communication"
zh_Hans: "用于双向实时通信的 WebSocket 适配器" zh_Hans: "用于双向实时通信的 WebSocket 适配器"
zh_Hant: "用於雙向即時通訊的 WebSocket 適配器" zh_Hant: "用於雙向即時通訊的 WebSocket 適配器"
th_TH: "อะแดปเตอร์ WebSocket สำหรับการสื่อสารแบบเรียลไทม์สองทิศทาง"
vi_VN: "Bộ điều hợp WebSocket cho giao tiếp thời gian thực hai chiều"
es_ES: "Adaptador WebSocket para comunicación bidireccional en tiempo real"
icon: "" icon: ""
spec: spec:
categories: categories:

View File

@@ -3,6 +3,9 @@ export interface I18nObject {
zh_Hans: string; zh_Hans: string;
zh_Hant?: string; zh_Hant?: string;
ja_JP?: string; ja_JP?: string;
th_TH?: string;
vi_VN?: string;
es_ES?: string;
} }
export interface ComponentManifest { export interface ComponentManifest {

View File

@@ -39,6 +39,15 @@ export function LanguageSelector({
} else if (i18n.language === 'ja' || i18n.language === 'ja-JP') { } else if (i18n.language === 'ja' || i18n.language === 'ja-JP') {
setCurrentLanguage('ja-JP'); setCurrentLanguage('ja-JP');
localStorage.setItem('langbot_language', 'ja-JP'); localStorage.setItem('langbot_language', 'ja-JP');
} else if (i18n.language === 'th' || i18n.language === 'th-TH') {
setCurrentLanguage('th-TH');
localStorage.setItem('langbot_language', 'th-TH');
} else if (i18n.language === 'vi' || i18n.language === 'vi-VN') {
setCurrentLanguage('vi-VN');
localStorage.setItem('langbot_language', 'vi-VN');
} else if (i18n.language === 'es' || i18n.language === 'es-ES') {
setCurrentLanguage('es-ES');
localStorage.setItem('langbot_language', 'es-ES');
} else { } else {
setCurrentLanguage('en-US'); setCurrentLanguage('en-US');
localStorage.setItem('langbot_language', 'en-US'); localStorage.setItem('langbot_language', 'en-US');
@@ -58,6 +67,15 @@ export function LanguageSelector({
detectedLanguage = 'zh-Hant'; detectedLanguage = 'zh-Hant';
} else if (browserLanguage === 'ja' || browserLanguage === 'ja-JP') { } else if (browserLanguage === 'ja' || browserLanguage === 'ja-JP') {
detectedLanguage = 'ja-JP'; detectedLanguage = 'ja-JP';
} else if (browserLanguage === 'th' || browserLanguage === 'th-TH') {
detectedLanguage = 'th-TH';
} else if (browserLanguage === 'vi' || browserLanguage === 'vi-VN') {
detectedLanguage = 'vi-VN';
} else if (
browserLanguage === 'es' ||
browserLanguage.startsWith('es-')
) {
detectedLanguage = 'es-ES';
} else { } else {
detectedLanguage = 'en-US'; detectedLanguage = 'en-US';
} }
@@ -92,6 +110,9 @@ export function LanguageSelector({
<SelectItem value="zh-Hant"></SelectItem> <SelectItem value="zh-Hant"></SelectItem>
<SelectItem value="en-US">English</SelectItem> <SelectItem value="en-US">English</SelectItem>
<SelectItem value="ja-JP"></SelectItem> <SelectItem value="ja-JP"></SelectItem>
<SelectItem value="th-TH"></SelectItem>
<SelectItem value="vi-VN">Tiếng Việt</SelectItem>
<SelectItem value="es-ES">Español</SelectItem>
</SelectContent> </SelectContent>
</Select> </Select>
); );

View File

@@ -27,6 +27,9 @@ export const extractI18nObject = (i18nObject: I18nObject): string => {
if (language === 'zh_Hans' && i18nObject.zh_Hans) return i18nObject.zh_Hans; if (language === 'zh_Hans' && i18nObject.zh_Hans) return i18nObject.zh_Hans;
if (language === 'zh_Hant' && i18nObject.zh_Hant) return i18nObject.zh_Hant; if (language === 'zh_Hant' && i18nObject.zh_Hant) return i18nObject.zh_Hant;
if (language === 'ja_JP' && i18nObject.ja_JP) return i18nObject.ja_JP; if (language === 'ja_JP' && i18nObject.ja_JP) return i18nObject.ja_JP;
if (language === 'th_TH' && i18nObject.th_TH) return i18nObject.th_TH;
if (language === 'vi_VN' && i18nObject.vi_VN) return i18nObject.vi_VN;
if (language === 'es_ES' && i18nObject.es_ES) return i18nObject.es_ES;
return ( return (
i18nObject.en_US || i18nObject.en_US ||
i18nObject.zh_Hans || i18nObject.zh_Hans ||
@@ -49,6 +52,12 @@ export const getAPILanguageCode = (): string => {
if (language === 'en-US') return 'en'; if (language === 'en-US') return 'en';
// ja-JP -> ja_JP // ja-JP -> ja_JP
if (language === 'ja-JP') return 'ja_JP'; if (language === 'ja-JP') return 'ja_JP';
// th-TH -> th_TH
if (language === 'th-TH') return 'th_TH';
// vi-VN -> vi_VN
if (language === 'vi-VN') return 'vi_VN';
// es-ES -> es_ES
if (language === 'es-ES') return 'es_ES';
// 默认返回 en // 默认返回 en
return 'en'; return 'en';
}; };

View File

@@ -8,6 +8,9 @@ import enUS from './locales/en-US';
import zhHans from './locales/zh-Hans'; import zhHans from './locales/zh-Hans';
import zhHant from './locales/zh-Hant'; import zhHant from './locales/zh-Hant';
import jaJP from './locales/ja-JP'; import jaJP from './locales/ja-JP';
import thTH from './locales/th-TH';
import viVN from './locales/vi-VN';
import esES from './locales/es-ES';
i18n i18n
.use(LanguageDetector) .use(LanguageDetector)
@@ -26,6 +29,15 @@ i18n
'ja-JP': { 'ja-JP': {
translation: jaJP, translation: jaJP,
}, },
'th-TH': {
translation: thTH,
},
'vi-VN': {
translation: viVN,
},
'es-ES': {
translation: esES,
},
}, },
fallbackLng: 'zh-Hans', fallbackLng: 'zh-Hans',
debug: process.env.NODE_ENV === 'development', debug: process.env.NODE_ENV === 'development',

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff