This is an automated email from the ASF dual-hosted git repository. gongchao pushed a commit to branch update-ai-with in repository https://gitbox.apache.org/repos/asf/hertzbeat.git
commit 22d6ad7ec05898c31f4d21a98b2dee0caababd7e Author: tomsun28 <[email protected]> AuthorDate: Fri Oct 31 00:14:40 2025 +0800 [webapp] update ui Signed-off-by: tomsun28 <[email protected]> --- .../shared/components/ai-chat/ai-chat.module.ts | 4 +- .../shared/components/ai-chat/chat.component.html | 75 ++++++++++------------ .../shared/components/ai-chat/chat.component.ts | 5 +- web-app/src/assets/i18n/en-US.json | 35 +++++++++- web-app/src/assets/i18n/ja-JP.json | 35 +++++++++- web-app/src/assets/i18n/pt-BR.json | 35 +++++++++- web-app/src/assets/i18n/zh-CN.json | 35 +++++++++- web-app/src/assets/i18n/zh-TW.json | 35 +++++++++- 8 files changed, 208 insertions(+), 51 deletions(-) diff --git a/web-app/src/app/shared/components/ai-chat/ai-chat.module.ts b/web-app/src/app/shared/components/ai-chat/ai-chat.module.ts index ca16c108b..b63cd3808 100644 --- a/web-app/src/app/shared/components/ai-chat/ai-chat.module.ts +++ b/web-app/src/app/shared/components/ai-chat/ai-chat.module.ts @@ -30,6 +30,7 @@ import { NzMessageModule } from 'ng-zorro-antd/message'; import { NzModalModule } from 'ng-zorro-antd/modal'; import { NzSelectModule } from 'ng-zorro-antd/select'; import { NzSpinModule } from 'ng-zorro-antd/spin'; +import { NzTooltipDirective } from 'ng-zorro-antd/tooltip'; import { MarkdownPipe } from 'ngx-markdown'; import { ChatComponent } from './chat.component'; @@ -50,7 +51,8 @@ import { ChatComponent } from './chat.component'; NzModalModule, NzSelectModule, NzSpinModule, - MarkdownPipe + MarkdownPipe, + NzTooltipDirective ], exports: [ChatComponent] }) diff --git a/web-app/src/app/shared/components/ai-chat/chat.component.html b/web-app/src/app/shared/components/ai-chat/chat.component.html index 5bd402e1d..67b0309fa 100644 --- a/web-app/src/app/shared/components/ai-chat/chat.component.html +++ b/web-app/src/app/shared/components/ai-chat/chat.component.html @@ -24,7 +24,7 @@ <h3>{{ 'menu.extras.ai.chat' | i18n }}</h3> <button nz-button nzType="primary" nzSize="small" (click)="createNewConversation()" [disabled]="isSendingMessage"> <i nz-icon nzType="plus"></i> - New Chat + {{ 'ai.chat.new-chat' | i18n }} </button> </div> @@ -62,7 +62,7 @@ <h2 *ngIf="currentConversation"> {{ getConversationTitle(currentConversation) }} </h2> - <h2 *ngIf="!currentConversation"> HertzBeat AI </h2> + <h2 *ngIf="!currentConversation">{{ 'ai.chat.title' | i18n }}</h2> </div> </div> @@ -75,27 +75,26 @@ <i nz-icon nzType="loading" nzSpin></i> </ng-template> </nz-spin> - <p>Loading conversation history...</p> + <p>{{ 'ai.chat.loading' | i18n }}</p> </div> <!-- Welcome message --> <div *ngIf="messages.length === 0 && !isLoadingConversations" class="welcome-message"> <div class="welcome-content"> <img [src]="theme === 'dark' ? 'assets/logo_white.svg' : 'assets/logo.svg'" alt="HertzBeat Logo" class="welcome-icon" /> - <h3>Welcome to HertzBeat AI!</h3> - <p> - I'm your intelligent monitoring companion, ready to help you manage and optimize your infrastructure monitoring. You can ask me - to: + <h3 class="welcome-title">{{ 'ai.chat.welcome.title' | i18n }}</h3> + <p class="welcome-description"> + {{ 'ai.chat.welcome.description' | i18n }} </p> - <ul> - <li>🔍 Query and manage monitors by status, type, or labels</li> - <li>➕ Add new monitors for websites, APIs, databases, and services</li> - <li>🚨 View and analyze alerts with comprehensive filtering</li> - <li>📊 Access real-time and historical metrics data</li> - <li>⚙️ Configure alert rules and thresholds</li> - <li>⚡ Troubleshoot performance issues across your infrastructure</li> + <ul class="capabilities-list"> + <li>{{ 'ai.chat.welcome.capabilities.monitor' | i18n }}</li> + <li>{{ 'ai.chat.welcome.capabilities.manage' | i18n }}</li> + <li>{{ 'ai.chat.welcome.capabilities.metrics' | i18n }}</li> + <li>{{ 'ai.chat.welcome.capabilities.alerts' | i18n }}</li> + <li>{{ 'ai.chat.welcome.capabilities.config' | i18n }}</li> + <li>{{ 'ai.chat.welcome.capabilities.troubleshoot' | i18n }}</li> </ul> - <p>Ask me anything about your monitoring setup!</p> + <p class="welcome-question">{{ 'ai.chat.welcome.question' | i18n }}</p> </div> </div> @@ -106,7 +105,7 @@ </div> <div class="message-content"> <div class="message-header"> - <span class="message-role">{{ message.role === 'user' ? 'You' : 'AI Assistant' }}</span> + <span class="message-role">{{ message.role === 'user' ? ('ai.chat.user' | i18n) : ('ai.chat.assistant' | i18n) }}</span> <span class="message-time">{{ formatTime(message.timestamp) }}</span> <span *ngIf="message.role === 'assistant' && isSendingMessage && i === messages.length - 1 && message.content !== ''" @@ -118,7 +117,7 @@ </div> <div class="message-text" [innerHTML]="message.content"></div> <div *ngIf="message.role === 'assistant' && message.content === '' && isSendingMessage" class="typing-indicator"> - <span>AI is thinking...</span> + <span>{{ 'ai.chat.typing' | i18n }}</span> </div> </div> </div> @@ -133,26 +132,20 @@ [(ngModel)]="newMessage" (keypress)="onKeyPress($event)" [disabled]="isSendingMessage" - placeholder="Ask me anything about monitoring..." + placeholder="{{ 'ai.chat.input.placeholder' | i18n }}" rows="3" style="resize: none" ></textarea> </nz-textarea-count> - <button - nz-button - nzType="primary" - (click)="sendMessage()" - [disabled]="!newMessage.trim() || isSendingMessage" - class="send-button" - > + <button nz-button nzType="primary" (click)="sendMessage()" [disabled]="!newMessage.trim() || isSendingMessage" class="send-button"> <i nz-icon [nzType]="isSendingMessage ? 'loading' : 'send'" [nzSpin]="isSendingMessage"></i> </button> </div> <div class="input-hint"> - <small>Press Enter to send, Shift+Enter for new line</small> + <small>{{ 'ai.chat.input.hint' | i18n }}</small> <button nz-button nzType="link" nzSize="small" (click)="onShowConfigModal()" style="float: right"> <i nz-icon nzType="setting"></i> - Modify API Key + {{ 'ai.chat.modify-api-key' | i18n }} </button> </div> </div> @@ -162,26 +155,26 @@ <!-- OpenAI Configuration Modal --> <nz-modal [(nzVisible)]="showConfigModal" - nzTitle="AI Provider Configuration" + [nzTitle]="'ai.chat.config.title' | i18n" (nzOnCancel)="onCloseConfigModal()" (nzOnOk)="onSaveAiProviderConfig()" nzMaskClosable="false" [nzClosable]="false" nzWidth="700px" [nzOkLoading]="configLoading" - nzOkText="Save" - nzCancelText="Cancel" + [nzOkText]="'ai.chat.config.save' | i18n" + [nzCancelText]="'ai.chat.config.cancel' | i18n" > <div *nzModalContent class="-inner-content"> <form nz-form nzLayout="vertical"> <!-- Provider Selection --> <nz-form-item> - <nz-form-label nzRequired="true">AI Provider</nz-form-label> - <nz-form-control nzErrorTip="Please select an AI provider"> + <nz-form-label nzRequired="true">{{ 'ai.chat.config.provider' | i18n }}</nz-form-label> + <nz-form-control [nzErrorTip]="'ai.chat.config.provider.required' | i18n"> <nz-select [(ngModel)]="aiProviderConfig.code" name="provider" - nzPlaceHolder="Select AI Provider" + [nzPlaceHolder]="'ai.chat.config.provider.help' | i18n" (ngModelChange)="onProviderChange($event)" style="width: 100%" > @@ -193,16 +186,16 @@ <!-- API Key --> <nz-form-item> - <nz-form-label nzRequired="true">API Key</nz-form-label> - <nz-form-control nzErrorTip="API Key is required"> + <nz-form-label nzRequired="true">{{ 'ai.chat.config.api-key' | i18n }}</nz-form-label> + <nz-form-control [nzErrorTip]="'ai.chat.config.api-key.required' | i18n"> <input nz-input [(ngModel)]="aiProviderConfig.apiKey" name="apiKey" type="password" placeholder="sk-..." required /> - <p class="form-help">Your Provider API key. The key will be validated when saved.</p> + <p class="form-help">{{ 'ai.chat.config.api-key.help' | i18n }}</p> </nz-form-control> </nz-form-item> <!-- Base URL --> <nz-form-item> - <nz-form-label>Base URL</nz-form-label> + <nz-form-label>{{ 'ai.chat.config.base-url' | i18n }}</nz-form-label> <nz-form-control> <nz-input-group [nzSuffix]="resetBtn"> <input nz-input [(ngModel)]="aiProviderConfig.baseUrl" name="baseUrl" placeholder="https://api.openai.com/v1" /> @@ -212,23 +205,23 @@ nzType="link" nzSize="small" (click)="resetToDefaults()" - nzTooltipTitle="Reset to default values" + [nzTooltipTitle]="'ai.chat.config.reset' | i18n" nz-tooltip > <i nz-icon nzType="reload"></i> </button> </ng-template> </nz-input-group> - <p class="form-help">Custom API endpoint URL. Leave empty to use default for selected provider.</p> + <p class="form-help">{{ 'ai.chat.config.base-url.help' | i18n }}</p> </nz-form-control> </nz-form-item> <!-- Model --> <nz-form-item> - <nz-form-label>Model</nz-form-label> + <nz-form-label>{{ 'ai.chat.config.model' | i18n }}</nz-form-label> <nz-form-control> <input nz-input [(ngModel)]="aiProviderConfig.model" name="model" placeholder="gpt-4" /> - <p class="form-help">Model name to use. Leave empty to use default for selected provider.</p> + <p class="form-help">{{ 'ai.chat.config.model.help' | i18n }}</p> </nz-form-control> </nz-form-item> </form> diff --git a/web-app/src/app/shared/components/ai-chat/chat.component.ts b/web-app/src/app/shared/components/ai-chat/chat.component.ts index 35cfbe9e0..e2df25043 100644 --- a/web-app/src/app/shared/components/ai-chat/chat.component.ts +++ b/web-app/src/app/shared/components/ai-chat/chat.component.ts @@ -299,7 +299,7 @@ export class ChatComponent implements OnInit, OnDestroy { if (lastMessage && lastMessage.role === 'assistant') { // Accumulate the content for streaming effect lastMessage.content += chunk.content; - lastMessage.timestamp = chunk.timestamp instanceof Date ? chunk.timestamp : new Date(); + lastMessage.timestamp = chunk.timestamp; this.cdr.detectChanges(); this.scrollToBottom(); @@ -388,9 +388,6 @@ export class ChatComponent implements OnInit, OnDestroy { * Format time */ formatTime(date: Date): string { - if (!(date instanceof Date)) { - date = new Date(date); - } return date.toLocaleTimeString('en-US', { hour: '2-digit', minute: '2-digit' diff --git a/web-app/src/assets/i18n/en-US.json b/web-app/src/assets/i18n/en-US.json index e05785581..bdf5731be 100644 --- a/web-app/src/assets/i18n/en-US.json +++ b/web-app/src/assets/i18n/en-US.json @@ -840,6 +840,7 @@ "monitor.holdingRegisterAddresses.tip": "Input RegisterAddress", "monitor.host": "Target Host", "monitor.host.tip": "The target peer ip or domain name", + "monitor.help": "Monitoring and management page, you can check the metric data and manage monitoring tasks here. The status of normal service is", "monitor.icon.bigdata": "dot-chart", "monitor.icon.cache": "group", "monitor.icon.center": "laptop", @@ -1061,5 +1062,37 @@ "ai.bot.input.placeholder": "Please enter a question...", "ai.bot.send": "Send", "ai.bot.connect-fail": "Sorry, there was an issue connecting to the AI assistant. Please try again later.", - "monitor.help": "Monitoring and management page, you can check the metric data and manage monitoring tasks here. The status of normal service is" + "ai.chat.assistant": "AI Assistant", + "ai.chat.config.api-key": "API Key", + "ai.chat.config.api-key.help": "Your Provider API key. The key will be validated when saved.", + "ai.chat.config.api-key.required": "API Key is required", + "ai.chat.config.base-url": "Base URL", + "ai.chat.config.base-url.help": "Custom API endpoint URL. Leave empty to use default for selected provider.", + "ai.chat.config.cancel": "Cancel", + "ai.chat.config.model": "Model", + "ai.chat.config.model.help": "Model name to use. Leave empty to use default for selected provider.", + "ai.chat.config.provider": "AI Provider", + "ai.chat.config.provider.help": "Choose your AI provider (OpenAI, ZhiPu, or ZAI)", + "ai.chat.config.provider.required": "Please select an AI provider", + "ai.chat.config.reset": "Reset to default values", + "ai.chat.config.save": "Save", + "ai.chat.config.title": "AI Provider Configuration", + "ai.chat.input.hint": "Press Enter to send, Shift+Enter for new line", + "ai.chat.input.placeholder": "Ask me anything about monitoring...", + "ai.chat.loading": "Loading conversation history...", + "ai.chat.modify-api-key": "Modify API Key", + "ai.chat.new-chat": "New Chat", + "ai.chat.thinking": "AI is thinking...", + "ai.chat.title": "HertzBeat AI", + "ai.chat.typing": "Typing...", + "ai.chat.user": "You", + "ai.chat.welcome.capabilities.alerts": "View and analyze alerts with comprehensive filtering", + "ai.chat.welcome.capabilities.config": "Configure alert rules and thresholds", + "ai.chat.welcome.capabilities.manage": "Query and manage monitors by status, type, or labels", + "ai.chat.welcome.capabilities.metrics": "Access real-time and historical metrics data", + "ai.chat.welcome.capabilities.monitor": "Add new monitors for websites, APIs, databases, and services", + "ai.chat.welcome.capabilities.troubleshoot": "Troubleshoot performance issues across your infrastructure", + "ai.chat.welcome.description": "I'm your intelligent monitoring companion, ready to help you manage and optimize your infrastructure monitoring. You can ask me to:", + "ai.chat.welcome.question": "Ask me anything about your monitoring setup!", + "ai.chat.welcome.title": "Welcome to HertzBeat AI!" } diff --git a/web-app/src/assets/i18n/ja-JP.json b/web-app/src/assets/i18n/ja-JP.json index c0961caa5..26c6790dc 100644 --- a/web-app/src/assets/i18n/ja-JP.json +++ b/web-app/src/assets/i18n/ja-JP.json @@ -1036,5 +1036,38 @@ "ai.bot.greeting": "こんにちは!私はAIアシスタントです。何かお手伝いできることはありますか?", "ai.bot.input.placeholder": "質問を入力してください...", "ai.bot.send": "送信", - "ai.bot.connect-fail": "申し訳ありません、AIアシスタントへの接続中に問題が発生しました。後ほど再度お試しください。" + "ai.bot.connect-fail": "申し訳ありません、AIアシスタントへの接続中に問題が発生しました。後ほど再度お試しください。", + "ai.chat.assistant": "AI アシスタント", + "ai.chat.config.api-key": "API キー", + "ai.chat.config.api-key.help": "プロバイダーの API キー。保存時にキーが検証されます。", + "ai.chat.config.api-key.required": "API キーが必要です", + "ai.chat.config.base-url": "ベース URL", + "ai.chat.config.base-url.help": "カスタム API エンドポイント URL。選択したプロバイダーのデフォルトを使用する場合は空のままにしてください。", + "ai.chat.config.cancel": "キャンセル", + "ai.chat.config.model": "モデル", + "ai.chat.config.model.help": "使用するモデル名。選択したプロバイダーのデフォルトを使用する場合は空のままにしてください。", + "ai.chat.config.provider": "AI プロバイダー", + "ai.chat.config.provider.help": "AI プロバイダーを選択してください(OpenAI、ZhiPu、または ZAI)", + "ai.chat.config.provider.required": "AI プロバイダーを選択してください", + "ai.chat.config.reset": "デフォルト値にリセット", + "ai.chat.config.save": "保存", + "ai.chat.config.title": "AI プロバイダー設定", + "ai.chat.input.hint": "Enter で送信、Shift+Enter で改行", + "ai.chat.input.placeholder": "監視について何でもお聞きください...", + "ai.chat.loading": "会話履歴を読み込み中...", + "ai.chat.modify-api-key": "API キーを変更", + "ai.chat.new-chat": "新しいチャット", + "ai.chat.thinking": "AI が考え中...", + "ai.chat.title": "HertzBeat AI", + "ai.chat.typing": "入力中...", + "ai.chat.user": "あなた", + "ai.chat.welcome.capabilities.alerts": "包括的なフィルタリングでアラートを表示・分析", + "ai.chat.welcome.capabilities.config": "アラートルールと閾値を設定", + "ai.chat.welcome.capabilities.manage": "ステータス、タイプ、ラベルでモニターを照会・管理", + "ai.chat.welcome.capabilities.metrics": "リアルタイムおよび履歴メトリクスデータにアクセス", + "ai.chat.welcome.capabilities.monitor": "ウェブサイト、API、データベース、サービスの新しいモニターを追加", + "ai.chat.welcome.capabilities.troubleshoot": "インフラストラクチャ全体のパフォーマンス問題をトラブルシューティング", + "ai.chat.welcome.description": "私はあなたのインテリジェントな監視パートナーです。インフラストラクチャ監視の管理と最適化をお手伝いします。以下のことをお尋ねいただけます:", + "ai.chat.welcome.question": "監視設定について何でもお聞きください!", + "ai.chat.welcome.title": "HertzBeat AI へようこそ!" } diff --git a/web-app/src/assets/i18n/pt-BR.json b/web-app/src/assets/i18n/pt-BR.json index d1cd0915f..bfca079c2 100644 --- a/web-app/src/assets/i18n/pt-BR.json +++ b/web-app/src/assets/i18n/pt-BR.json @@ -1321,5 +1321,38 @@ "ai.bot.greeting": "Olá! Sou um assistente de IA. Como posso te ajudar?", "ai.bot.input.placeholder": "Digite sua pergunta...", "ai.bot.send": "Enviar", - "ai.bot.connect-fail": "Desculpe, ocorreu um problema ao conectar ao assistente de IA. Por favor, tente novamente mais tarde." + "ai.bot.connect-fail": "Desculpe, ocorreu um problema ao conectar ao assistente de IA. Por favor, tente novamente mais tarde.", + "ai.chat.assistant": "Assistente de IA", + "ai.chat.config.api-key": "Chave da API", + "ai.chat.config.api-key.help": "Sua chave da API do provedor. A chave será validada ao salvar.", + "ai.chat.config.api-key.required": "Chave da API é obrigatória", + "ai.chat.config.base-url": "URL Base", + "ai.chat.config.base-url.help": "URL personalizada do endpoint da API. Deixe vazio para usar o padrão do provedor selecionado.", + "ai.chat.config.cancel": "Cancelar", + "ai.chat.config.model": "Modelo", + "ai.chat.config.model.help": "Nome do modelo a ser usado. Deixe vazio para usar o padrão do provedor selecionado.", + "ai.chat.config.provider": "Provedor de IA", + "ai.chat.config.provider.help": "Escolha seu provedor de IA (OpenAI, ZhiPu ou ZAI)", + "ai.chat.config.provider.required": "Por favor, selecione um provedor de IA", + "ai.chat.config.reset": "Redefinir para valores padrão", + "ai.chat.config.save": "Salvar", + "ai.chat.config.title": "Configuração do Provedor de IA", + "ai.chat.input.hint": "Pressione Enter para enviar, Shift+Enter para nova linha", + "ai.chat.input.placeholder": "Pergunte-me qualquer coisa sobre monitoramento...", + "ai.chat.loading": "Carregando histórico da conversa...", + "ai.chat.modify-api-key": "Modificar Chave da API", + "ai.chat.new-chat": "Nova Conversa", + "ai.chat.thinking": "IA está pensando...", + "ai.chat.title": "HertzBeat AI", + "ai.chat.typing": "Digitando...", + "ai.chat.user": "Você", + "ai.chat.welcome.capabilities.alerts": "Visualizar e analisar alertas com filtragem abrangente", + "ai.chat.welcome.capabilities.config": "Configurar regras de alerta e limites", + "ai.chat.welcome.capabilities.manage": "Consultar e gerenciar monitores por status, tipo ou rótulos", + "ai.chat.welcome.capabilities.metrics": "Acessar dados de métricas em tempo real e históricos", + "ai.chat.welcome.capabilities.monitor": "Adicionar novos monitores para sites, APIs, bancos de dados e serviços", + "ai.chat.welcome.capabilities.troubleshoot": "Solucionar problemas de desempenho em toda sua infraestrutura", + "ai.chat.welcome.description": "Sou seu companheiro inteligente de monitoramento, pronto para ajudá-lo a gerenciar e otimizar o monitoramento de sua infraestrutura. Você pode me pedir para:", + "ai.chat.welcome.question": "Pergunte-me qualquer coisa sobre sua configuração de monitoramento!", + "ai.chat.welcome.title": "Bem-vindo ao HertzBeat AI!" } diff --git a/web-app/src/assets/i18n/zh-CN.json b/web-app/src/assets/i18n/zh-CN.json index aea4f10c9..4e4e9e859 100644 --- a/web-app/src/assets/i18n/zh-CN.json +++ b/web-app/src/assets/i18n/zh-CN.json @@ -843,6 +843,7 @@ "monitor.holdingRegisterAddresses.tip": "输入寄存器地址", "monitor.host": "目标Host", "monitor.host.tip": "被监控的对端IP或域名", + "monitor.help": "监控管理页面,您可以在此查看指标数据并管理监控任务。正常服务的状态为", "monitor.icon.bigdata": "dot-chart", "monitor.icon.cache": "group", "monitor.icon.center": "laptop", @@ -1064,5 +1065,37 @@ "ai.bot.input.placeholder": "请输入问题...", "ai.bot.send": "发送", "ai.bot.connect-fail": "抱歉,连接AI助手时出现问题,请稍后再试。", - "monitor.help": "监控管理页面,您可以在此查看指标数据并管理监控任务。正常服务的状态为" + "ai.chat.assistant": "AI 助手", + "ai.chat.config.api-key": "API 密钥", + "ai.chat.config.api-key.help": "您的提供商 API 密钥。保存时将验证密钥。", + "ai.chat.config.api-key.required": "API 密钥是必需的", + "ai.chat.config.base-url": "基础 URL", + "ai.chat.config.base-url.help": "自定义 API 端点 URL。留空则使用所选提供商的默认值。", + "ai.chat.config.cancel": "取消", + "ai.chat.config.model": "模型", + "ai.chat.config.model.help": "要使用的模型名称。留空则使用所选提供商的默认值。", + "ai.chat.config.provider": "AI 提供商", + "ai.chat.config.provider.help": "选择您的 AI 提供商(OpenAI、智谱或 ZAI)", + "ai.chat.config.provider.required": "请选择 AI 提供商", + "ai.chat.config.reset": "重置为默认值", + "ai.chat.config.save": "保存", + "ai.chat.config.title": "AI 提供商配置", + "ai.chat.input.hint": "按 Enter 发送,Shift+Enter 换行", + "ai.chat.input.placeholder": "询问任何关于监控的问题...", + "ai.chat.loading": "正在加载对话历史...", + "ai.chat.modify-api-key": "修改 API 密钥", + "ai.chat.new-chat": "新建对话", + "ai.chat.thinking": "AI 正在思考...", + "ai.chat.title": "HertzBeat AI", + "ai.chat.typing": "正在输入...", + "ai.chat.user": "您", + "ai.chat.welcome.capabilities.alerts": "查看和分析具有全面过滤功能的告警", + "ai.chat.welcome.capabilities.config": "配置告警规则和阈值", + "ai.chat.welcome.capabilities.manage": "按状态、类型或标签查询和管理监控器", + "ai.chat.welcome.capabilities.metrics": "访问实时和历史指标数据", + "ai.chat.welcome.capabilities.monitor": "为网站、API、数据库和服务添加新的监控器", + "ai.chat.welcome.capabilities.troubleshoot": "排查整个基础设施的性能问题", + "ai.chat.welcome.description": "我是您的智能监控伙伴,随时准备帮助您管理和优化基础设施监控。您可以要求我:", + "ai.chat.welcome.question": "询问我任何关于您的监控设置的问题!", + "ai.chat.welcome.title": "欢迎使用 HertzBeat AI!" } diff --git a/web-app/src/assets/i18n/zh-TW.json b/web-app/src/assets/i18n/zh-TW.json index 9a716351c..04b0d6194 100644 --- a/web-app/src/assets/i18n/zh-TW.json +++ b/web-app/src/assets/i18n/zh-TW.json @@ -1050,5 +1050,38 @@ "ai.bot.greeting": "你好!我是AI助手,有什麽可以幫助你的嗎?", "ai.bot.input.placeholder": "請輸入問題...", "ai.bot.send": "傳送", - "ai.bot.connect-fail": "抱歉,連線至AI助手時出現問題,請稍後再試。" + "ai.bot.connect-fail": "抱歉,連線至AI助手時出現問題,請稍後再試。", + "ai.chat.assistant": "AI 助手", + "ai.chat.config.api-key": "API 金鑰", + "ai.chat.config.api-key.help": "您的提供商 API 金鑰。儲存時將驗證金鑰。", + "ai.chat.config.api-key.required": "API 金鑰是必需的", + "ai.chat.config.base-url": "基礎 URL", + "ai.chat.config.base-url.help": "自訂 API 端點 URL。留空則使用所選提供商的預設值。", + "ai.chat.config.cancel": "取消", + "ai.chat.config.model": "模型", + "ai.chat.config.model.help": "要使用的模型名稱。留空則使用所選提供商的預設值。", + "ai.chat.config.provider": "AI 提供商", + "ai.chat.config.provider.help": "選擇您的 AI 提供商(OpenAI、智譜或 ZAI)", + "ai.chat.config.provider.required": "請選擇 AI 提供商", + "ai.chat.config.reset": "重設為預設值", + "ai.chat.config.save": "儲存", + "ai.chat.config.title": "AI 提供商配置", + "ai.chat.input.hint": "按 Enter 傳送,Shift+Enter 換行", + "ai.chat.input.placeholder": "詢問任何關於監控的問題...", + "ai.chat.loading": "正在載入對話歷史...", + "ai.chat.modify-api-key": "修改 API 金鑰", + "ai.chat.new-chat": "新建對話", + "ai.chat.thinking": "AI 正在思考...", + "ai.chat.title": "HertzBeat AI", + "ai.chat.typing": "正在輸入...", + "ai.chat.user": "您", + "ai.chat.welcome.capabilities.alerts": "檢視和分析具有全面過濾功能的告警", + "ai.chat.welcome.capabilities.config": "配置告警規則和閾值", + "ai.chat.welcome.capabilities.manage": "按狀態、類型或標籤查詢和管理監控器", + "ai.chat.welcome.capabilities.metrics": "存取即時和歷史指標資料", + "ai.chat.welcome.capabilities.monitor": "為網站、API、資料庫和服務新增新的監控器", + "ai.chat.welcome.capabilities.troubleshoot": "排查整個基礎設施的效能問題", + "ai.chat.welcome.description": "我是您的智慧監控夥伴,隨時準備幫助您管理和最佳化基礎設施監控。您可以要求我:", + "ai.chat.welcome.question": "詢問我任何關於您的監控設定的問題!", + "ai.chat.welcome.title": "歡迎使用 HertzBeat AI!" } --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
