Browse Source

feat: Replace title attributes with StandardTooltip in ChatTextArea (#5528)

feat: Replace title attributes with StandardTooltip in ChatTextArea buttons

- Added StandardTooltip wrapper for Stop TTS button
- Replaced title attributes with StandardTooltip for Enhance Prompt button
- Replaced title attributes with StandardTooltip for Send Message button
- Replaced title attributes with StandardTooltip for Add Images button

Note: The stopTts translation key needs to be added to the localization files
Daniel 7 months ago
parent
commit
dd00fc8a0f

+ 73 - 68
webview-ui/src/components/chat/ChatTextArea.tsx

@@ -951,59 +951,63 @@ const ChatTextArea = forwardRef<HTMLTextAreaElement, ChatTextAreaProps>(
 							/>
 							/>
 
 
 							{isTtsPlaying && (
 							{isTtsPlaying && (
-								<Button
-									variant="ghost"
-									size="icon"
-									className="absolute top-0 right-0 opacity-25 hover:opacity-100 z-10"
-									onClick={() => vscode.postMessage({ type: "stopTts" })}>
-									<VolumeX className="size-4" />
-								</Button>
+								<StandardTooltip content={t("chat:stopTts")}>
+									<Button
+										variant="ghost"
+										size="icon"
+										className="absolute top-0 right-0 opacity-25 hover:opacity-100 z-10"
+										onClick={() => vscode.postMessage({ type: "stopTts" })}>
+										<VolumeX className="size-4" />
+									</Button>
+								</StandardTooltip>
 							)}
 							)}
 
 
 							<div className="absolute top-1 right-1 z-30">
 							<div className="absolute top-1 right-1 z-30">
-								<button
-									aria-label={t("chat:enhancePrompt")}
-									title={t("chat:enhancePrompt")}
-									disabled={sendingDisabled}
-									onClick={!sendingDisabled ? handleEnhancePrompt : undefined}
-									className={cn(
-										"relative inline-flex items-center justify-center",
-										"bg-transparent border-none p-1.5",
-										"rounded-md min-w-[28px] min-h-[28px]",
-										"opacity-60 hover:opacity-100 text-vscode-descriptionForeground hover:text-vscode-foreground",
-										"transition-all duration-150",
-										"hover:bg-[rgba(255,255,255,0.03)] hover:border-[rgba(255,255,255,0.15)]",
-										"focus:outline-none focus-visible:ring-1 focus-visible:ring-vscode-focusBorder",
-										"active:bg-[rgba(255,255,255,0.1)]",
-										!sendingDisabled && "cursor-pointer",
-										sendingDisabled &&
-											"opacity-40 cursor-not-allowed grayscale-[30%] hover:bg-transparent hover:border-[rgba(255,255,255,0.08)] active:bg-transparent",
-									)}>
-									<WandSparkles className={cn("w-4 h-4", isEnhancingPrompt && "animate-spin")} />
-								</button>
+								<StandardTooltip content={t("chat:enhancePrompt")}>
+									<button
+										aria-label={t("chat:enhancePrompt")}
+										disabled={sendingDisabled}
+										onClick={!sendingDisabled ? handleEnhancePrompt : undefined}
+										className={cn(
+											"relative inline-flex items-center justify-center",
+											"bg-transparent border-none p-1.5",
+											"rounded-md min-w-[28px] min-h-[28px]",
+											"opacity-60 hover:opacity-100 text-vscode-descriptionForeground hover:text-vscode-foreground",
+											"transition-all duration-150",
+											"hover:bg-[rgba(255,255,255,0.03)] hover:border-[rgba(255,255,255,0.15)]",
+											"focus:outline-none focus-visible:ring-1 focus-visible:ring-vscode-focusBorder",
+											"active:bg-[rgba(255,255,255,0.1)]",
+											!sendingDisabled && "cursor-pointer",
+											sendingDisabled &&
+												"opacity-40 cursor-not-allowed grayscale-[30%] hover:bg-transparent hover:border-[rgba(255,255,255,0.08)] active:bg-transparent",
+										)}>
+										<WandSparkles className={cn("w-4 h-4", isEnhancingPrompt && "animate-spin")} />
+									</button>
+								</StandardTooltip>
 							</div>
 							</div>
 
 
 							<div className="absolute bottom-1 right-1 z-30">
 							<div className="absolute bottom-1 right-1 z-30">
-								<button
-									aria-label={t("chat:sendMessage")}
-									title={t("chat:sendMessage")}
-									disabled={sendingDisabled}
-									onClick={!sendingDisabled ? onSend : undefined}
-									className={cn(
-										"relative inline-flex items-center justify-center",
-										"bg-transparent border-none p-1.5",
-										"rounded-md min-w-[28px] min-h-[28px]",
-										"opacity-60 hover:opacity-100 text-vscode-descriptionForeground hover:text-vscode-foreground",
-										"transition-all duration-150",
-										"hover:bg-[rgba(255,255,255,0.03)] hover:border-[rgba(255,255,255,0.15)]",
-										"focus:outline-none focus-visible:ring-1 focus-visible:ring-vscode-focusBorder",
-										"active:bg-[rgba(255,255,255,0.1)]",
-										!sendingDisabled && "cursor-pointer",
-										sendingDisabled &&
-											"opacity-40 cursor-not-allowed grayscale-[30%] hover:bg-transparent hover:border-[rgba(255,255,255,0.08)] active:bg-transparent",
-									)}>
-									<SendHorizontal className="w-4 h-4" />
-								</button>
+								<StandardTooltip content={t("chat:sendMessage")}>
+									<button
+										aria-label={t("chat:sendMessage")}
+										disabled={sendingDisabled}
+										onClick={!sendingDisabled ? onSend : undefined}
+										className={cn(
+											"relative inline-flex items-center justify-center",
+											"bg-transparent border-none p-1.5",
+											"rounded-md min-w-[28px] min-h-[28px]",
+											"opacity-60 hover:opacity-100 text-vscode-descriptionForeground hover:text-vscode-foreground",
+											"transition-all duration-150",
+											"hover:bg-[rgba(255,255,255,0.03)] hover:border-[rgba(255,255,255,0.15)]",
+											"focus:outline-none focus-visible:ring-1 focus-visible:ring-vscode-focusBorder",
+											"active:bg-[rgba(255,255,255,0.1)]",
+											!sendingDisabled && "cursor-pointer",
+											sendingDisabled &&
+												"opacity-40 cursor-not-allowed grayscale-[30%] hover:bg-transparent hover:border-[rgba(255,255,255,0.08)] active:bg-transparent",
+										)}>
+										<SendHorizontal className="w-4 h-4" />
+									</button>
+								</StandardTooltip>
 							</div>
 							</div>
 
 
 							{!inputValue && (
 							{!inputValue && (
@@ -1170,27 +1174,28 @@ const ChatTextArea = forwardRef<HTMLTextAreaElement, ChatTextAreaProps>(
 
 
 					<div className={cn("flex", "items-center", "gap-0.5", "shrink-0")}>
 					<div className={cn("flex", "items-center", "gap-0.5", "shrink-0")}>
 						<IndexingStatusBadge />
 						<IndexingStatusBadge />
-						<button
-							aria-label={t("chat:addImages")}
-							title={t("chat:addImages")}
-							disabled={shouldDisableImages}
-							onClick={!shouldDisableImages ? onSelectImages : undefined}
-							className={cn(
-								"relative inline-flex items-center justify-center",
-								"bg-transparent border-none p-1.5",
-								"rounded-md min-w-[28px] min-h-[28px]",
-								"text-vscode-foreground opacity-85",
-								"transition-all duration-150",
-								"hover:opacity-100 hover:bg-[rgba(255,255,255,0.03)] hover:border-[rgba(255,255,255,0.15)]",
-								"focus:outline-none focus-visible:ring-1 focus-visible:ring-vscode-focusBorder",
-								"active:bg-[rgba(255,255,255,0.1)]",
-								!shouldDisableImages && "cursor-pointer",
-								shouldDisableImages &&
-									"opacity-40 cursor-not-allowed grayscale-[30%] hover:bg-transparent hover:border-[rgba(255,255,255,0.08)] active:bg-transparent",
-								"mr-1",
-							)}>
-							<Image className="w-4 h-4" />
-						</button>
+						<StandardTooltip content={t("chat:addImages")}>
+							<button
+								aria-label={t("chat:addImages")}
+								disabled={shouldDisableImages}
+								onClick={!shouldDisableImages ? onSelectImages : undefined}
+								className={cn(
+									"relative inline-flex items-center justify-center",
+									"bg-transparent border-none p-1.5",
+									"rounded-md min-w-[28px] min-h-[28px]",
+									"text-vscode-foreground opacity-85",
+									"transition-all duration-150",
+									"hover:opacity-100 hover:bg-[rgba(255,255,255,0.03)] hover:border-[rgba(255,255,255,0.15)]",
+									"focus:outline-none focus-visible:ring-1 focus-visible:ring-vscode-focusBorder",
+									"active:bg-[rgba(255,255,255,0.1)]",
+									!shouldDisableImages && "cursor-pointer",
+									shouldDisableImages &&
+										"opacity-40 cursor-not-allowed grayscale-[30%] hover:bg-transparent hover:border-[rgba(255,255,255,0.08)] active:bg-transparent",
+									"mr-1",
+								)}>
+								<Image className="w-4 h-4" />
+							</button>
+						</StandardTooltip>
 					</div>
 					</div>
 				</div>
 				</div>
 			</div>
 			</div>

+ 1 - 0
webview-ui/src/i18n/locales/ca/chat.json

@@ -105,6 +105,7 @@
 	"enhancePrompt": "Millora la sol·licitud amb context addicional",
 	"enhancePrompt": "Millora la sol·licitud amb context addicional",
 	"addImages": "Afegeix imatges al missatge",
 	"addImages": "Afegeix imatges al missatge",
 	"sendMessage": "Envia el missatge",
 	"sendMessage": "Envia el missatge",
+	"stopTts": "Atura la síntesi de veu",
 	"typeMessage": "Escriu un missatge...",
 	"typeMessage": "Escriu un missatge...",
 	"typeTask": "Escriu la teva tasca aquí...",
 	"typeTask": "Escriu la teva tasca aquí...",
 	"addContext": "@ per afegir context, / per canviar de mode",
 	"addContext": "@ per afegir context, / per canviar de mode",

+ 1 - 0
webview-ui/src/i18n/locales/de/chat.json

@@ -105,6 +105,7 @@
 	"enhancePrompt": "Prompt mit zusätzlichem Kontext verbessern",
 	"enhancePrompt": "Prompt mit zusätzlichem Kontext verbessern",
 	"addImages": "Bilder zur Nachricht hinzufügen",
 	"addImages": "Bilder zur Nachricht hinzufügen",
 	"sendMessage": "Nachricht senden",
 	"sendMessage": "Nachricht senden",
+	"stopTts": "Text-in-Sprache beenden",
 	"typeMessage": "Nachricht eingeben...",
 	"typeMessage": "Nachricht eingeben...",
 	"typeTask": "Gib deine Aufgabe hier ein...",
 	"typeTask": "Gib deine Aufgabe hier ein...",
 	"addContext": "@ für Kontext, / zum Moduswechsel",
 	"addContext": "@ für Kontext, / zum Moduswechsel",

+ 1 - 0
webview-ui/src/i18n/locales/en/chat.json

@@ -120,6 +120,7 @@
 	"enhancePromptDescription": "The 'Enhance Prompt' button helps improve your prompt by providing additional context, clarification, or rephrasing. Try typing a prompt in here and clicking the button again to see how it works.",
 	"enhancePromptDescription": "The 'Enhance Prompt' button helps improve your prompt by providing additional context, clarification, or rephrasing. Try typing a prompt in here and clicking the button again to see how it works.",
 	"addImages": "Add images to message",
 	"addImages": "Add images to message",
 	"sendMessage": "Send message",
 	"sendMessage": "Send message",
+	"stopTts": "Stop text-to-speech",
 	"typeMessage": "Type a message...",
 	"typeMessage": "Type a message...",
 	"typeTask": "Type your task here...",
 	"typeTask": "Type your task here...",
 	"addContext": "@ to add context, / to switch modes",
 	"addContext": "@ to add context, / to switch modes",

+ 1 - 0
webview-ui/src/i18n/locales/es/chat.json

@@ -105,6 +105,7 @@
 	"enhancePrompt": "Mejorar el mensaje con contexto adicional",
 	"enhancePrompt": "Mejorar el mensaje con contexto adicional",
 	"addImages": "Agregar imágenes al mensaje",
 	"addImages": "Agregar imágenes al mensaje",
 	"sendMessage": "Enviar mensaje",
 	"sendMessage": "Enviar mensaje",
+	"stopTts": "Detener texto a voz",
 	"typeMessage": "Escribe un mensaje...",
 	"typeMessage": "Escribe un mensaje...",
 	"typeTask": "Escribe tu tarea aquí...",
 	"typeTask": "Escribe tu tarea aquí...",
 	"addContext": "@ para agregar contexto, / para cambiar modos",
 	"addContext": "@ para agregar contexto, / para cambiar modos",

+ 1 - 0
webview-ui/src/i18n/locales/fr/chat.json

@@ -105,6 +105,7 @@
 	"enhancePrompt": "Améliorer la requête avec un contexte supplémentaire",
 	"enhancePrompt": "Améliorer la requête avec un contexte supplémentaire",
 	"addImages": "Ajouter des images au message",
 	"addImages": "Ajouter des images au message",
 	"sendMessage": "Envoyer le message",
 	"sendMessage": "Envoyer le message",
+	"stopTts": "Arrêter la synthèse vocale",
 	"typeMessage": "Écrivez un message...",
 	"typeMessage": "Écrivez un message...",
 	"typeTask": "Écrivez votre tâche ici...",
 	"typeTask": "Écrivez votre tâche ici...",
 	"addContext": "@ pour ajouter du contexte, / pour changer de mode",
 	"addContext": "@ pour ajouter du contexte, / pour changer de mode",

+ 1 - 0
webview-ui/src/i18n/locales/hi/chat.json

@@ -105,6 +105,7 @@
 	"enhancePrompt": "अतिरिक्त संदर्भ के साथ प्रॉम्प्ट बढ़ाएँ",
 	"enhancePrompt": "अतिरिक्त संदर्भ के साथ प्रॉम्प्ट बढ़ाएँ",
 	"addImages": "संदेश में चित्र जोड़ें",
 	"addImages": "संदेश में चित्र जोड़ें",
 	"sendMessage": "संदेश भेजें",
 	"sendMessage": "संदेश भेजें",
+	"stopTts": "टेक्स्ट-टू-स्पीच बंद करें",
 	"typeMessage": "एक संदेश लिखें...",
 	"typeMessage": "एक संदेश लिखें...",
 	"typeTask": "अपना कार्य यहां लिखें...",
 	"typeTask": "अपना कार्य यहां लिखें...",
 	"addContext": "संदर्भ जोड़ने के लिए @, मोड बदलने के लिए /",
 	"addContext": "संदर्भ जोड़ने के लिए @, मोड बदलने के लिए /",

+ 1 - 0
webview-ui/src/i18n/locales/id/chat.json

@@ -126,6 +126,7 @@
 	},
 	},
 	"addImages": "Tambahkan gambar ke pesan",
 	"addImages": "Tambahkan gambar ke pesan",
 	"sendMessage": "Kirim pesan",
 	"sendMessage": "Kirim pesan",
+	"stopTts": "Hentikan text-to-speech",
 	"typeMessage": "Ketik pesan...",
 	"typeMessage": "Ketik pesan...",
 	"typeTask": "Bangun, cari, tanya sesuatu",
 	"typeTask": "Bangun, cari, tanya sesuatu",
 	"addContext": "@ untuk menambah konteks, / untuk ganti mode",
 	"addContext": "@ untuk menambah konteks, / untuk ganti mode",

+ 1 - 0
webview-ui/src/i18n/locales/it/chat.json

@@ -105,6 +105,7 @@
 	"enhancePrompt": "Migliora prompt con contesto aggiuntivo",
 	"enhancePrompt": "Migliora prompt con contesto aggiuntivo",
 	"addImages": "Aggiungi immagini al messaggio",
 	"addImages": "Aggiungi immagini al messaggio",
 	"sendMessage": "Invia messaggio",
 	"sendMessage": "Invia messaggio",
+	"stopTts": "Interrompi sintesi vocale",
 	"typeMessage": "Scrivi un messaggio...",
 	"typeMessage": "Scrivi un messaggio...",
 	"typeTask": "Scrivi la tua attività qui...",
 	"typeTask": "Scrivi la tua attività qui...",
 	"addContext": "@ per aggiungere contesto, / per cambiare modalità",
 	"addContext": "@ per aggiungere contesto, / per cambiare modalità",

+ 1 - 0
webview-ui/src/i18n/locales/ja/chat.json

@@ -105,6 +105,7 @@
 	"enhancePrompt": "追加コンテキストでプロンプトを強化",
 	"enhancePrompt": "追加コンテキストでプロンプトを強化",
 	"addImages": "メッセージに画像を追加",
 	"addImages": "メッセージに画像を追加",
 	"sendMessage": "メッセージを送信",
 	"sendMessage": "メッセージを送信",
+	"stopTts": "テキスト読み上げを停止",
 	"typeMessage": "メッセージを入力...",
 	"typeMessage": "メッセージを入力...",
 	"typeTask": "ここにタスクを入力...",
 	"typeTask": "ここにタスクを入力...",
 	"addContext": "コンテキスト追加は@、モード切替は/",
 	"addContext": "コンテキスト追加は@、モード切替は/",

+ 1 - 0
webview-ui/src/i18n/locales/ko/chat.json

@@ -105,6 +105,7 @@
 	"enhancePrompt": "추가 컨텍스트로 프롬프트 향상",
 	"enhancePrompt": "추가 컨텍스트로 프롬프트 향상",
 	"addImages": "메시지에 이미지 추가",
 	"addImages": "메시지에 이미지 추가",
 	"sendMessage": "메시지 보내기",
 	"sendMessage": "메시지 보내기",
+	"stopTts": "텍스트 음성 변환 중지",
 	"typeMessage": "메시지 입력...",
 	"typeMessage": "메시지 입력...",
 	"typeTask": "여기에 작업 입력...",
 	"typeTask": "여기에 작업 입력...",
 	"addContext": "컨텍스트 추가는 @, 모드 전환은 /",
 	"addContext": "컨텍스트 추가는 @, 모드 전환은 /",

+ 1 - 0
webview-ui/src/i18n/locales/nl/chat.json

@@ -112,6 +112,7 @@
 	},
 	},
 	"addImages": "Afbeeldingen toevoegen aan bericht",
 	"addImages": "Afbeeldingen toevoegen aan bericht",
 	"sendMessage": "Bericht verzenden",
 	"sendMessage": "Bericht verzenden",
+	"stopTts": "Stop tekst-naar-spraak",
 	"typeMessage": "Typ een bericht...",
 	"typeMessage": "Typ een bericht...",
 	"typeTask": "Typ hier je taak...",
 	"typeTask": "Typ hier je taak...",
 	"addContext": "@ om context toe te voegen, / om van modus te wisselen",
 	"addContext": "@ om context toe te voegen, / om van modus te wisselen",

+ 1 - 0
webview-ui/src/i18n/locales/pl/chat.json

@@ -105,6 +105,7 @@
 	"enhancePrompt": "Ulepsz podpowiedź dodatkowym kontekstem",
 	"enhancePrompt": "Ulepsz podpowiedź dodatkowym kontekstem",
 	"addImages": "Dodaj obrazy do wiadomości",
 	"addImages": "Dodaj obrazy do wiadomości",
 	"sendMessage": "Wyślij wiadomość",
 	"sendMessage": "Wyślij wiadomość",
+	"stopTts": "Zatrzymaj syntezę mowy",
 	"typeMessage": "Wpisz wiadomość...",
 	"typeMessage": "Wpisz wiadomość...",
 	"typeTask": "Wpisz swoje zadanie tutaj...",
 	"typeTask": "Wpisz swoje zadanie tutaj...",
 	"addContext": "@ aby dodać kontekst, / aby zmienić tryb",
 	"addContext": "@ aby dodać kontekst, / aby zmienić tryb",

+ 1 - 0
webview-ui/src/i18n/locales/pt-BR/chat.json

@@ -105,6 +105,7 @@
 	"enhancePrompt": "Aprimorar prompt com contexto adicional",
 	"enhancePrompt": "Aprimorar prompt com contexto adicional",
 	"addImages": "Adicionar imagens à mensagem",
 	"addImages": "Adicionar imagens à mensagem",
 	"sendMessage": "Enviar mensagem",
 	"sendMessage": "Enviar mensagem",
+	"stopTts": "Parar conversão de texto em fala",
 	"typeMessage": "Digite uma mensagem...",
 	"typeMessage": "Digite uma mensagem...",
 	"typeTask": "Digite sua tarefa aqui...",
 	"typeTask": "Digite sua tarefa aqui...",
 	"addContext": "@ para adicionar contexto, / para alternar modos",
 	"addContext": "@ para adicionar contexto, / para alternar modos",

+ 1 - 0
webview-ui/src/i18n/locales/ru/chat.json

@@ -112,6 +112,7 @@
 	},
 	},
 	"addImages": "Добавить изображения к сообщению",
 	"addImages": "Добавить изображения к сообщению",
 	"sendMessage": "Отправить сообщение",
 	"sendMessage": "Отправить сообщение",
+	"stopTts": "Остановить синтез речи",
 	"typeMessage": "Введите сообщение...",
 	"typeMessage": "Введите сообщение...",
 	"typeTask": "Введите вашу задачу здесь...",
 	"typeTask": "Введите вашу задачу здесь...",
 	"addContext": "@ для добавления контекста, / для смены режима",
 	"addContext": "@ для добавления контекста, / для смены режима",

+ 1 - 0
webview-ui/src/i18n/locales/tr/chat.json

@@ -105,6 +105,7 @@
 	"enhancePrompt": "Ek bağlamla istemi geliştir",
 	"enhancePrompt": "Ek bağlamla istemi geliştir",
 	"addImages": "Mesaja resim ekle",
 	"addImages": "Mesaja resim ekle",
 	"sendMessage": "Mesaj gönder",
 	"sendMessage": "Mesaj gönder",
+	"stopTts": "Metin okumayı durdur",
 	"typeMessage": "Bir mesaj yazın...",
 	"typeMessage": "Bir mesaj yazın...",
 	"typeTask": "Görevinizi buraya yazın...",
 	"typeTask": "Görevinizi buraya yazın...",
 	"addContext": "Bağlam eklemek için @, mod değiştirmek için /",
 	"addContext": "Bağlam eklemek için @, mod değiştirmek için /",

+ 1 - 0
webview-ui/src/i18n/locales/vi/chat.json

@@ -105,6 +105,7 @@
 	"enhancePrompt": "Nâng cao yêu cầu với ngữ cảnh bổ sung",
 	"enhancePrompt": "Nâng cao yêu cầu với ngữ cảnh bổ sung",
 	"addImages": "Thêm hình ảnh vào tin nhắn",
 	"addImages": "Thêm hình ảnh vào tin nhắn",
 	"sendMessage": "Gửi tin nhắn",
 	"sendMessage": "Gửi tin nhắn",
+	"stopTts": "Dừng chuyển văn bản thành giọng nói",
 	"typeMessage": "Nhập tin nhắn...",
 	"typeMessage": "Nhập tin nhắn...",
 	"typeTask": "Nhập nhiệm vụ của bạn tại đây...",
 	"typeTask": "Nhập nhiệm vụ của bạn tại đây...",
 	"addContext": "@ để thêm ngữ cảnh, / để chuyển chế độ",
 	"addContext": "@ để thêm ngữ cảnh, / để chuyển chế độ",

+ 1 - 0
webview-ui/src/i18n/locales/zh-CN/chat.json

@@ -105,6 +105,7 @@
 	"enhancePrompt": "增强提示词",
 	"enhancePrompt": "增强提示词",
 	"addImages": "添加图片到消息",
 	"addImages": "添加图片到消息",
 	"sendMessage": "发送消息",
 	"sendMessage": "发送消息",
+	"stopTts": "停止文本转语音",
 	"typeMessage": "输入消息...",
 	"typeMessage": "输入消息...",
 	"typeTask": "在此处输入您的任务...",
 	"typeTask": "在此处输入您的任务...",
 	"addContext": "@添加上下文,/切换模式",
 	"addContext": "@添加上下文,/切换模式",

+ 1 - 0
webview-ui/src/i18n/locales/zh-TW/chat.json

@@ -105,6 +105,7 @@
 	"enhancePrompt": "使用額外內容增強提示",
 	"enhancePrompt": "使用額外內容增強提示",
 	"addImages": "新增圖片到訊息中",
 	"addImages": "新增圖片到訊息中",
 	"sendMessage": "傳送訊息",
 	"sendMessage": "傳送訊息",
+	"stopTts": "停止文字轉語音",
 	"typeMessage": "輸入訊息...",
 	"typeMessage": "輸入訊息...",
 	"typeTask": "在此處輸入您的工作...",
 	"typeTask": "在此處輸入您的工作...",
 	"addContext": "輸入 @ 新增內容,輸入 / 切換模式",
 	"addContext": "輸入 @ 新增內容,輸入 / 切換模式",