🎉 happy birthday LibreChat (#1768)

* happy birthday LibreChat

* Refactor endpoint condition in Landing component

* Update birthday message in Eng.tsx

* fix(/config): avoid nesting ternaries

* refactor(/config): check birthday

---------

Co-authored-by: Danny Avila <messagedaniel@protonmail.com>
This commit is contained in:
Marco Beretta 2024-02-11 15:10:12 +01:00 committed by GitHub
parent 14b61fc861
commit a91042b6b9
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
24 changed files with 169 additions and 43 deletions

View file

@ -26,6 +26,8 @@ DOMAIN_SERVER=http://localhost:3080
NO_INDEX=true
SHOW_BIRTHDAY_ICON=true
#===============#
# Debug Logging #
#===============#

View file

@ -7,6 +7,11 @@ const emailLoginEnabled =
process.env.ALLOW_EMAIL_LOGIN === undefined || isEnabled(process.env.ALLOW_EMAIL_LOGIN);
router.get('/', async function (req, res) {
const isBirthday = () => {
const today = new Date();
return today.getMonth() === 1 && today.getDate() === 11;
};
try {
const payload = {
appTitle: process.env.APP_TITLE || 'LibreChat',
@ -33,6 +38,10 @@ router.get('/', async function (req, res) {
!!process.env.EMAIL_PASSWORD &&
!!process.env.EMAIL_FROM,
checkBalance: isEnabled(process.env.CHECK_BALANCE),
showBirthdayIcon:
isBirthday() ||
isEnabled(process.env.SHOW_BIRTHDAY_ICON) ||
process.env.SHOW_BIRTHDAY_ICON === '',
};
if (typeof process.env.CUSTOM_FOOTER === 'string') {

View file

@ -1,14 +1,17 @@
import type { ReactNode } from 'react';
import { useGetEndpointsQuery } from 'librechat-data-provider/react-query';
import { useGetEndpointsQuery, useGetStartupConfig } from 'librechat-data-provider/react-query';
import { EModelEndpoint } from 'librechat-data-provider';
import { icons } from './Menus/Endpoints/Icons';
import { useChatContext } from '~/Providers';
import { getEndpointField } from '~/utils';
import { useLocalize } from '~/hooks';
import { BirthdayIcon } from '~/components/svg';
import { TooltipProvider, Tooltip, TooltipTrigger, TooltipContent } from '~/components/ui/';
export default function Landing({ Header }: { Header?: ReactNode }) {
const { conversation } = useChatContext();
const { data: endpointsConfig } = useGetEndpointsQuery();
const { data: startupConfig } = useGetStartupConfig();
const localize = useLocalize();
let { endpoint } = conversation ?? {};
@ -27,10 +30,12 @@ export default function Landing({ Header }: { Header?: ReactNode }) {
const Icon = icons[iconKey];
return (
<TooltipProvider delayDuration={50}>
<Tooltip>
<div className="relative h-full">
<div className="absolute left-0 right-0">{Header && Header}</div>
<div className="flex h-full flex-col items-center justify-center">
<div className="mb-3 h-[72px] w-[72px]">
<div className="relative mb-3 h-[72px] w-[72px]">
<div className="gizmo-shadow-stroke relative flex h-full items-center justify-center rounded-full bg-white text-black">
{endpoint &&
Icon &&
@ -41,6 +46,14 @@ export default function Landing({ Header }: { Header?: ReactNode }) {
endpoint: endpoint,
iconURL: iconURL,
})}
<TooltipTrigger>
{(startupConfig?.showBirthdayIcon ?? false) && (
<BirthdayIcon className="absolute bottom-12 right-5" />
)}
</TooltipTrigger>
<TooltipContent side="top" sideOffset={85} className="left-[-20%]">
{localize('com_ui_happy_birthday')}
</TooltipContent>
</div>
</div>
<div className="mb-5 text-2xl font-medium dark:text-white">
@ -48,5 +61,7 @@ export default function Landing({ Header }: { Header?: ReactNode }) {
</div>
</div>
</div>
</Tooltip>
</TooltipProvider>
);
}

View file

@ -0,0 +1,64 @@
import React from 'react';
import { cn } from '~/utils/';
export default function BirthdayIcon({ className = '' }) {
return (
<svg
version="1.1"
viewBox="0 0 233.33 290"
xmlns="http://www.w3.org/2000/svg"
xmlnsXlink="http://www.w3.org/1999/xlink"
className={cn('h-14 w-14', className)}
>
<defs>
<linearGradient
id="linearGradient1842"
x1="163.92"
x2="173.66"
y1="22.212"
y2="-6.5784"
gradientTransform="translate(.10391 .050143)"
gradientUnits="userSpaceOnUse"
>
<stop stopColor="#640a62" offset="0" />
<stop stopColor="#852283" offset=".49917" />
<stop stopColor="#640a62" offset="1" />
</linearGradient>
</defs>
<g>
<path
transform="matrix(.43416 .90084 -.89966 .4366 0 0)"
d="m259.29-126.03a232.2 237.56 0 0 1-17.412 231.34l-193.32-131.59z"
fill="url(#linearGradient1842)"
/>
<path
transform="matrix(.6967 .051926 -.051926 .6967 35.578 23.196)"
d="m50.818 31.415c-1.4654 2.4749-10.838 2.4195-12.997 4.3204-2.1584 1.9009-3.288 11.206-5.9282 12.347-2.6402 1.1409-10.191-4.4132-13.054-4.1441-2.8636 0.26917-9.2466 7.133-12.053 6.5041-2.8066-0.62889-5.6503-9.5602-8.1252-11.026-2.4749-1.4654-11.673 0.33572-13.574-1.8227s1.0482-11.056-0.0927-13.696c-1.1409-2.6402-9.6412-6.5898-9.9104-9.4533-0.26917-2.8636 7.3463-8.328 7.9752-11.135 0.62889-2.8066-3.9265-10.998-2.4612-13.473 1.4654-2.4749 10.838-2.4195 12.997-4.3204 2.1584-1.9009 3.288-11.206 5.9282-12.347 2.6402-1.1409 10.191 4.4132 13.054 4.1441 2.8636-0.26917 9.2466-7.133 12.053-6.5041 2.8066 0.62889 5.6503 9.5602 8.1252 11.026s11.673-0.33572 13.574 1.8227c1.9009 2.1584-1.0482 11.056 0.0927 13.696 1.1409 2.6402 9.6412 6.5898 9.9104 9.4533 0.26917 2.8635-7.3463 8.328-7.9752 11.135-0.62889 2.8066 3.9265 10.998 2.4612 13.473z"
fill="#ff9d78"
stroke="#f29472"
strokeWidth="4.7877"
/>
<circle cx="170.36" cy="215.76" r="12.903" fill="#cfffff" />
<path
d="m220.77 174.77c-88.526 101.03-191.21 85.731-209.5 82.142-2.2101-2e-5 -2.6686 0.42426-3.437 2.0021l-1.7042 7.5028c0.056197 2.3603 0.37544 2.6428 1.9121 3.5409 18.396 3.3746 130.27 19.488 223.46-86.881 0.64011-1.5095 0.46653-3.1324-0.59137-4.7337l-5.1558-3.6482c-1.586-0.8743-3.9524-0.94332-4.9837 0.0751z"
color="#000000"
fill="#ff9d78"
stroke="#f29472"
strokeLinejoin="round"
strokeWidth="2.8913"
/>
<g fill="#cfffff">
<circle cx="72.684" cy="99.47" r="12.903" />
<circle cx="99.144" cy="172.32" r="12.903" />
<circle cx="59.617" cy="214.78" r="12.903" />
<circle cx="135.4" cy="118.42" r="12.903" />
<path
transform="rotate(38.66)"
d="m254.21-1.9608a12.903 12.903 0 0 1-6.4852 11.194 12.903 12.903 0 0 1-12.937-0.0582 12.903 12.903 0 0 1-6.3843-11.252l12.903 0.1161z"
/>
<path d="m29.476 158.16a12.903 12.903 0 0 0-3.6562 0.5293l-3.3691 23.189a12.903 12.903 0 0 0 7.0254 2.0879 12.903 12.903 0 0 0 12.904-12.904 12.903 12.903 0 0 0-12.904-12.902z" />
</g>
</g>
</svg>
);
}

View file

@ -45,3 +45,4 @@ export { default as UserIcon } from './UserIcon';
export { default as NewChatIcon } from './NewChatIcon';
export { default as ExperimentIcon } from './ExperimentIcon';
export { default as GoogleIconChat } from './GoogleIconChat';
export { default as BirthdayIcon } from './BirthdayIcon';

View file

@ -3,6 +3,7 @@
export default {
com_ui_balance: 'الرصيد',
com_ui_examples: 'أمثلة',
com_ui_happy_birthday: 'إنه عيد ميلادي الأول!',
com_ui_new_chat: 'دردشة جديدة',
com_ui_example_quantum_computing: 'شرح الحوسبة الكمومية ببساطة',
com_ui_example_10_year_old_b_day: 'هل لديك أفكار إبداعية لعيد ميلاد طفل عمره 10 سنوات؟',

View file

@ -5,6 +5,7 @@
export default {
com_ui_examples: 'Exemplos',
com_ui_new_chat: 'Novo Chat',
com_ui_happy_birthday: 'É meu primeiro aniversário!',
com_ui_example_quantum_computing: 'Explique a computação quântica em termos simples',
com_ui_example_10_year_old_b_day:
'Tem alguma ideia criativa para o aniversário de uma criança de 10 anos?',

View file

@ -3,11 +3,14 @@
export default {
com_ui_examples: 'Beispiele',
com_ui_new_chat: 'Neuer Chat',
com_ui_happy_birthday: 'Es ist mein erster Geburtstag!',
com_ui_example_quantum_computing: 'Erkläre Quantencomputing in einfachen Worten',
com_ui_example_10_year_old_b_day: 'Hast du eine kreative Idee für den Geburtstag eines 10-Jährigen?',
com_ui_example_10_year_old_b_day:
'Hast du eine kreative Idee für den Geburtstag eines 10-Jährigen?',
com_ui_example_http_in_js: 'Wie stelle ich eine HTTP-Anfrage in Javascript?',
com_ui_capabilities: 'Funktionen',
com_ui_capability_remember: 'Erinnert sich daran, was der Benutzer zu einem früheren Zeitpunkt in der Konversation gesagt hat',
com_ui_capability_remember:
'Erinnert sich daran, was der Benutzer zu einem früheren Zeitpunkt in der Konversation gesagt hat',
com_ui_capability_correction: 'Ermöglicht es dem Benutzer, nachträgliche Korrekturen vorzunehmen',
com_ui_capability_decline_requests: 'Ermöglicht es, unangemessene Anfragen abzulehnen',
com_ui_limitations: 'Beschränkungen',
@ -29,13 +32,15 @@ export default {
com_ui_showing: 'Zeigen',
com_ui_of: 'von',
com_ui_entries: 'Einträge',
com_ui_pay_per_call: 'Alle KI-Chats an einem Ort. Bezahle pro API-Abruf nutzungsbasiert und nicht pro Monat',
com_ui_pay_per_call:
'Alle KI-Chats an einem Ort. Bezahle pro API-Abruf nutzungsbasiert und nicht pro Monat',
com_ui_new_footer: 'Alle KI-Chats an einem Ort.',
com_ui_enter: 'Eingabe',
com_ui_submit: 'Abschicken',
com_ui_upload_success: 'Erfolgreich hochgeladene Datei',
com_ui_upload_error: 'Beim Hochladen deiner Datei ist ein Fehler aufgetreten',
com_ui_upload_invalid: 'Ungültige Datei zum Hochladen. Muss ein Bild sein, das nicht größer als 2 MB ist',
com_ui_upload_invalid:
'Ungültige Datei zum Hochladen. Muss ein Bild sein, das nicht größer als 2 MB ist',
com_ui_cancel: 'Abbrechen',
com_ui_save: 'Speichern',
com_ui_save_submit: 'Speichern & Absenden',
@ -145,7 +150,8 @@ com_endpoint_system_message: 'System Nachricht',
com_endpoint_google_maxoutputtokens:
' Maximale Anzahl von Token, die in der Antwort erzeugt werden können. Gib einen niedrigeren Wert für kürzere Antworten und einen höheren Wert für längere Antworten an.',
com_endpoint_google_custom_name_placeholder: 'Setze einen benutzerdefinierten Namen für Google',
com_endpoint_prompt_prefix_placeholder: 'Setze benutzerdefinierte Anweisungen oder Kontext. Ignoriert, wenn leer.',
com_endpoint_prompt_prefix_placeholder:
'Setze benutzerdefinierte Anweisungen oder Kontext. Ignoriert, wenn leer.',
com_endpoint_custom_name: 'Benutzerdefinierter Name',
com_endpoint_prompt_prefix: 'Benutzerdefinierte Anweisungen',
com_endpoint_temperature: 'Temperatur (Kreativität)',
@ -190,13 +196,18 @@ com_endpoint_system_message: 'System Nachricht',
com_endpoint_plug_set_custom_instructions_for_gpt_placeholder:
'Setzt benutzerdefinierte Anweisungen, die in die System Nachricht aufgenommen werden. Standardmäßig: keine',
com_endpoint_import: 'Importieren',
com_endpoint_set_custom_name: 'Lege einen benutzerdefinierten Namen fest, für den Fall, dass du diese Vorgabe finden kannst',
com_endpoint_set_custom_name:
'Lege einen benutzerdefinierten Namen fest, für den Fall, dass du diese Vorgabe finden kannst',
com_endpoint_preset_delete_confirm: 'Bist du sicher, dass du diese Vorgabe löschen willst?',
com_endpoint_preset_clear_all_confirm: "Bist du sicher, dass du alle deine Voreinstellungen löschen willst?",
com_endpoint_preset_clear_all_confirm:
'Bist du sicher, dass du alle deine Voreinstellungen löschen willst?',
com_endpoint_preset_import: 'Voreinstellung importiert!',
com_endpoint_preset_import_error: 'Beim Import deiner Voreinstellung ist ein Fehler aufgetreten. Bitte versuche es erneut.',
com_endpoint_preset_save_error: 'Es ist ein Fehler beim Speichern deiner Voreinstellung aufgetreten. Bitte versuche es noch einmal.',
com_endpoint_preset_delete_error: 'Beim Löschen deiner Voreinstellung ist ein Fehler aufgetreten. Bitte versuche es noch einmal.',
com_endpoint_preset_import_error:
'Beim Import deiner Voreinstellung ist ein Fehler aufgetreten. Bitte versuche es erneut.',
com_endpoint_preset_save_error:
'Es ist ein Fehler beim Speichern deiner Voreinstellung aufgetreten. Bitte versuche es noch einmal.',
com_endpoint_preset_delete_error:
'Beim Löschen deiner Voreinstellung ist ein Fehler aufgetreten. Bitte versuche es noch einmal.',
com_endpoint_preset_default_removed: 'ist nicht mehr die Standardeinstellung.',
com_endpoint_preset_default_item: 'Standard:',
com_endpoint_preset_default_none: 'Keine Standardeinstellung aktiv.',
@ -222,7 +233,8 @@ com_endpoint_system_message: 'System Nachricht',
com_endpoint_presets_clear_warning:
'Bist du sicher, dass du alle Voreinstellungen löschen willst? Dies ist nicht umkehrbar.',
com_endpoint_not_implemented: 'Nicht implementiert',
com_endpoint_no_presets: 'Es gibt noch keine Voreinstellungen, verwende die Schaltfläche "Einstellungen", um eine Vorlage zu erstellen.',
com_endpoint_no_presets:
'Es gibt noch keine Voreinstellungen, verwende die Schaltfläche "Einstellungen", um eine Vorlage zu erstellen.',
com_endpoint_not_available: 'Kein Endpunkt verfügbar',
com_endpoint_view_options: 'Ansichtsoptionen',
com_endpoint_save_convo_as_preset: 'Konversation als Voreinstellung speichern',
@ -244,18 +256,23 @@ com_endpoint_system_message: 'System Nachricht',
com_endpoint_config_google_service_key: 'Google Service Account Key',
com_endpoint_config_google_cloud_platform: '(von Google Cloud Platform)',
com_endpoint_config_google_api_key: 'Google API Key',
com_endpoint_config_google_gemini_api: "(Gemini API)",
com_endpoint_config_google_api_info: 'Um deinen Generative Language API-Schlüssel (für Gemini) zu erhalten,',
com_endpoint_config_google_gemini_api: '(Gemini API)',
com_endpoint_config_google_api_info:
'Um deinen Generative Language API-Schlüssel (für Gemini) zu erhalten,',
com_endpoint_config_key_import_json_key: 'Importiere Service Account JSON Key.',
com_endpoint_config_key_import_json_key_success: 'Erfolgreich importierter Service Account JSON Key',
com_endpoint_config_key_import_json_key_success:
'Erfolgreich importierter Service Account JSON Key',
com_endpoint_config_key_import_json_key_invalid:
'Ungültiger Service Account JSON Key, Hast du die richtige Datei importiert?',
com_endpoint_config_key_get_edge_key: 'Um dein Access Token für Bing zu erhalten, melde dich an bei',
com_endpoint_config_key_get_edge_key:
'Um dein Access Token für Bing zu erhalten, melde dich an bei',
com_endpoint_config_key_get_edge_key_dev_tool:
'Verwende Dev-Tools oder eine Erweiterung, während du auf der Website angemeldet bist, um den Inhalt des _U-Cookies zu kopieren. Wenn dies fehlschlägt, befolge die folgenden Anweisungen',
com_endpoint_config_key_edge_instructions: 'Anweisungen',
com_endpoint_config_key_edge_full_key_string: 'um die vollständigen Cookie-Strings zu übermitteln.',
com_endpoint_config_key_chatgpt: 'Um dein Zugangstoken für ChatGPT \'Gratis Version\' zu erhalten, melde dich bei',
com_endpoint_config_key_edge_full_key_string:
'um die vollständigen Cookie-Strings zu übermitteln.',
com_endpoint_config_key_chatgpt:
'Um dein Zugangstoken für ChatGPT \'Gratis Version\' zu erhalten, melde dich bei',
com_endpoint_config_key_chatgpt_then_visit: 'danach besuche',
com_endpoint_config_key_chatgpt_copy_token: 'Kopiere das Zugangstoken.',
com_endpoint_config_key_google_need_to: 'Du musst',

View file

@ -5,6 +5,7 @@
export default {
com_ui_examples: 'Examples',
com_ui_new_chat: 'New Chat',
com_ui_happy_birthday: 'It\'s my 1st birthday!',
com_ui_example_quantum_computing: 'Explain quantum computing in simple terms',
com_ui_example_10_year_old_b_day: 'Got any creative ideas for a 10 year old\'s birthday?',
com_ui_example_http_in_js: 'How do I make an HTTP request in Javascript?',

View file

@ -5,6 +5,7 @@
export default {
com_ui_examples: 'Ejemplos',
com_ui_new_chat: 'Nuevo Chat',
com_ui_happy_birthday: '¡Es mi primer cumpleaños!',
com_ui_example_quantum_computing: 'Explicar la computación cuántica en términos simples',
com_ui_example_10_year_old_b_day:
'¿Tienes alguna idea creativa para el cumpleaños de un niño de 10 años?',

View file

@ -5,6 +5,7 @@
export default {
com_ui_examples: 'Exemples',
com_ui_new_chat: 'Nouvelle conversation',
com_ui_happy_birthday: 'C\'est mon premier anniversaire !',
com_ui_example_quantum_computing: 'Expliquer l\'informatique quantique en termes simples',
com_ui_example_10_year_old_b_day:
'Tu as des idées créatives pour l\'anniversaire d\'un enfant de 10 ans ?',

View file

@ -5,6 +5,7 @@
export default {
com_ui_examples: 'Contoh',
com_ui_new_chat: 'Chat Baru',
com_ui_happy_birthday: 'Ini ulang tahun pertamaku!',
com_ui_example_quantum_computing: 'Jelaskan komputasi kuantum dengan istilah yang sederhana',
com_ui_example_10_year_old_b_day: 'Ada ide kreatif untuk ulang tahun anak 10 tahun?',
com_ui_example_http_in_js: 'Bagaimana cara membuat permintaan HTTP dalam Javascript?',

View file

@ -5,6 +5,7 @@
export default {
com_ui_examples: 'Esempi',
com_ui_new_chat: 'Nuova Chat',
com_ui_happy_birthday: 'È il mio primo compleanno!',
com_ui_example_quantum_computing: 'Spiega l\'informatica quantistica in termini semplici',
com_ui_example_10_year_old_b_day:
'Hai qualche idea creativa per il compleanno di un bambino di 10 anni?',

View file

@ -5,6 +5,7 @@
export default {
com_ui_examples: '例',
com_ui_new_chat: '新規チャット',
com_ui_happy_birthday: '初めての誕生日です!',
com_ui_example_quantum_computing: '量子コンピュータを簡潔に説明してください',
com_ui_example_10_year_old_b_day: '10歳の誕生日で行うクリエイティブなアイデアはありますか',
com_ui_example_http_in_js: 'JavascriptでHTTPリクエストを作成するにはどうすればよいですか',

View file

@ -3,6 +3,7 @@
export default {
com_ui_examples: '예시',
com_ui_new_chat: '새 채팅',
com_ui_happy_birthday: '내 첫 생일이야!',
com_ui_example_quantum_computing: '양자 컴퓨팅을 간단하게 설명해줄래?',
com_ui_example_10_year_old_b_day: '10살 아이 생일 파티를 위한 참신한 아이디어 있을까?',
com_ui_example_http_in_js: '자바스크립트에서 HTTP 요청을 어떻게 만드나요?',

View file

@ -3,6 +3,7 @@
export default {
com_ui_examples: 'Voorbeelden',
com_ui_new_chat: 'Nieuwe chat',
com_ui_happy_birthday: 'Het is mijn eerste verjaardag!',
com_ui_example_quantum_computing: 'Leg quantumcomputing in eenvoudige termen uit',
com_ui_example_10_year_old_b_day: 'Heb je creatieve ideeën voor de verjaardag van een 10-jarige?',
com_ui_example_http_in_js: 'Hoe maak ik een HTTP-aanvraag in Javascript?',

View file

@ -1,8 +1,9 @@
// Polskie frazy
// Polish phrases
export default {
com_ui_examples: 'Przykłady',
com_ui_new_chat: 'Nowy czat',
com_ui_happy_birthday: 'To moje pierwsze urodziny!',
com_ui_example_quantum_computing: 'Wyjaśnij obliczenia kwantowe w prostych słowach',
com_ui_example_10_year_old_b_day: 'Masz jakieś kreatywne pomysły na dziesiąte urodziny?',
com_ui_example_http_in_js: 'Jak wykonać żądanie HTTP w JavaScript?',

View file

@ -3,6 +3,7 @@
export default {
com_ui_examples: 'Примеры',
com_ui_new_chat: 'Создать чат',
com_ui_happy_birthday: 'Это мой первый день рождения!',
com_ui_example_quantum_computing: 'Объясни квантовые вычисления простыми словами',
com_ui_example_10_year_old_b_day:
'У тебя есть креативные идеи для дня рождения 10-летнего ребенка?',

View file

@ -3,6 +3,7 @@
export default {
com_ui_examples: 'Exempel', // Examples
com_ui_new_chat: 'Ny chatt', // New chat
com_ui_happy_birthday: 'Det är min första födelsedag!', // It's my first birthday!
com_ui_example_quantum_computing: 'Förklara kvantberäkning på enkla termer', // Explain quantum computing in simple terms
com_ui_example_10_year_old_b_day: 'Har du några kreativa idéer till ett 10-årings födelsedag?', // Got any creative ideas for a 10 year old's birthday?
com_ui_example_http_in_js: 'Hur gör jag en HTTP-förfrågan i Javascript?', // How do I make an HTTP request in Javascript?

View file

@ -3,6 +3,7 @@
export default {
com_ui_examples: 'Örnekler',
com_ui_new_chat: 'Yeni Sohbet',
com_ui_happy_birthday: 'Bu benim ilk doğum günüm!',
com_ui_example_quantum_computing: 'Kuantum bilgisayarını basit terimlerle açıkla',
com_ui_example_10_year_old_b_day:
'10 yaşındaki bir çocuğun doğum günü için yaratıcı fikirlerin var mı?',

View file

@ -3,6 +3,7 @@
export default {
com_ui_examples: 'Ví dụ',
com_ui_new_chat: 'Trò chuyện mới',
com_ui_happy_birthday: 'Đây là sinh nhật đầu tiên của tôi!',
com_ui_example_quantum_computing: 'Giải thích máy tính lượng tử theo cách đơn giản',
com_ui_example_10_year_old_b_day:
'Có ý tưởng sáng tạo nào cho sinh nhật của một đứa trẻ 10 tuổi không?',

View file

@ -5,6 +5,7 @@
export default {
com_ui_examples: '示例',
com_ui_new_chat: '创建新对话',
com_ui_happy_birthday: '这是我的第一个生日!',
com_ui_example_quantum_computing: '如何给7岁小孩讲解量子计算',
com_ui_example_10_year_old_b_day: '如何举办生日宴才能耳目一新?',
com_ui_example_http_in_js: '如何在Python中实现HTTP请求',

View file

@ -3,6 +3,7 @@
export default {
com_ui_examples: '範例',
com_ui_new_chat: '新對話',
com_ui_happy_birthday: '這是我的第一個生日!',
com_ui_example_quantum_computing: '用簡單的方式解釋量子計算',
com_ui_example_10_year_old_b_day: '有沒有創意十足的十歲生日派對點子?',
com_ui_example_http_in_js: '如何在 JavaScript 中發起 HTTP 請求?',

View file

@ -203,6 +203,7 @@ export type TStartupConfig = {
socialLoginEnabled: boolean;
emailEnabled: boolean;
checkBalance: boolean;
showBirthdayIcon: boolean;
customFooter?: string;
};