Genel Translate Problemleri
This commit is contained in:
parent
2858089c52
commit
9671116426
15 changed files with 378 additions and 165 deletions
|
|
@ -582,6 +582,12 @@
|
|||
"en": "Delete",
|
||||
"tr": "Sil"
|
||||
},
|
||||
{
|
||||
"resourceName": "Platform",
|
||||
"key": "DeleteConfirmation",
|
||||
"en": "Silmek istediğinize emin misiniz?",
|
||||
"tr": "Silmek istediğinize emin misiniz?"
|
||||
},
|
||||
{
|
||||
"resourceName": "Platform",
|
||||
"key": "Get",
|
||||
|
|
@ -600,6 +606,18 @@
|
|||
"en": "Administration",
|
||||
"tr": "Yönetim"
|
||||
},
|
||||
{
|
||||
"resourceName": "Platform",
|
||||
"key": "AccessDenied",
|
||||
"en": "Access denied!",
|
||||
"tr": "Erişim reddedildi!"
|
||||
},
|
||||
{
|
||||
"resourceName": "Platform",
|
||||
"key": "AccessDeniedMessage",
|
||||
"en": "You have no permission to visit this page",
|
||||
"tr": "Bu sayfayı ziyaret etme izniniz yok"
|
||||
},
|
||||
{
|
||||
"resourceName": "Platform",
|
||||
"key": "AbpTenantManagement",
|
||||
|
|
@ -609,8 +627,8 @@
|
|||
{
|
||||
"resourceName": "Platform",
|
||||
"key": "AbpTenantManagement.Tenants",
|
||||
"en": "Tenants",
|
||||
"tr": "Tenantlar"
|
||||
"en": "Companies",
|
||||
"tr": "Şirketler"
|
||||
},
|
||||
{
|
||||
"resourceName": "Platform",
|
||||
|
|
@ -748,7 +766,13 @@
|
|||
"resourceName": "Platform",
|
||||
"key": "Abp.Identity.OrganizationUnit.NewUnit",
|
||||
"en": "New Unit",
|
||||
"tr": "Üye Birim"
|
||||
"tr": "Yeni Birim"
|
||||
},
|
||||
{
|
||||
"resourceName": "Platform",
|
||||
"key": "Abp.Identity.OrganizationUnit.AddUnit",
|
||||
"en": "Add Unit",
|
||||
"tr": "Birim Ekle"
|
||||
},
|
||||
{
|
||||
"resourceName": "Platform",
|
||||
|
|
@ -780,6 +804,12 @@
|
|||
"en": "Delete",
|
||||
"tr": "Sil"
|
||||
},
|
||||
{
|
||||
"resourceName": "Platform",
|
||||
"key": "Abp.Identity.OrganizationUnit.Rename",
|
||||
"en": "Rename",
|
||||
"tr": "Değiştir"
|
||||
},
|
||||
{
|
||||
"resourceName": "Platform",
|
||||
"key": "Abp.Identity.OrganizationUnit.AddRootUnit",
|
||||
|
|
@ -792,6 +822,42 @@
|
|||
"en": "Add Sub Unit",
|
||||
"tr": "Alt Birim Ekle"
|
||||
},
|
||||
{
|
||||
"resourceName": "Platform",
|
||||
"key": "Abp.Identity.OrganizationUnit.Users.Description",
|
||||
"en": "Select an organization unit to see members",
|
||||
"tr": "Üyeleri görmek için bir organizasyon birimi seçin"
|
||||
},
|
||||
{
|
||||
"resourceName": "Platform",
|
||||
"key": "Abp.Identity.OrganizationUnit.Roles.Description",
|
||||
"en": "Select an organization unit to see roles",
|
||||
"tr": "Rolleri görmek için bir organizasyon birimi seçin"
|
||||
},
|
||||
{
|
||||
"resourceName": "Platform",
|
||||
"key": "Abp.Identity.OrganizationUnit.Parent",
|
||||
"en": "Parent",
|
||||
"tr": "Ebeveyn"
|
||||
},
|
||||
{
|
||||
"resourceName": "Platform",
|
||||
"key": "Abp.Identity.OrganizationUnit.DisplayName",
|
||||
"en": "DisplayName",
|
||||
"tr": "Görünür Adı"
|
||||
},
|
||||
{
|
||||
"resourceName": "Platform",
|
||||
"key": "Abp.Identity.OrganizationUnit.SelectMembers",
|
||||
"en": "Select Members",
|
||||
"tr": "Üyeleri Seçin"
|
||||
},
|
||||
{
|
||||
"resourceName": "Platform",
|
||||
"key": "Abp.Identity.OrganizationUnit.SelectRoles",
|
||||
"en": "Select Roles",
|
||||
"tr": "Rolleri Seçin"
|
||||
},
|
||||
{
|
||||
"resourceName": "Platform",
|
||||
"key": "App.Languages",
|
||||
|
|
@ -1704,6 +1770,18 @@
|
|||
"en": "Password Change Time",
|
||||
"tr": "Parola Değiştirme Zamanı"
|
||||
},
|
||||
{
|
||||
"resourceName": "Platform",
|
||||
"key": "Abp.Identity.User.UserInformation.CreateTime",
|
||||
"en": "Create Time",
|
||||
"tr": "Tanımlama Tarihi"
|
||||
},
|
||||
{
|
||||
"resourceName": "Platform",
|
||||
"key": "Abp.Identity.User.UserInformation.UpdateTime",
|
||||
"en": "Update Time",
|
||||
"tr": "Güncelleme Tarihi"
|
||||
},
|
||||
{
|
||||
"resourceName": "Platform",
|
||||
"key": "Abp.Identity.User.LockoutManagement",
|
||||
|
|
@ -1712,9 +1790,9 @@
|
|||
},
|
||||
{
|
||||
"resourceName": "Platform",
|
||||
"key": "Abp.Identity.User.LockoutManagement.Active",
|
||||
"en": "IsActive",
|
||||
"tr": "Aktif/Pasif"
|
||||
"key": "Abp.Identity.User.LockoutManagement.Status",
|
||||
"en": "Status",
|
||||
"tr": "Durum"
|
||||
},
|
||||
{
|
||||
"resourceName": "Platform",
|
||||
|
|
@ -1722,12 +1800,30 @@
|
|||
"en": "Admin Verification",
|
||||
"tr": "Yönetici Doğrulaması"
|
||||
},
|
||||
{
|
||||
"resourceName": "Platform",
|
||||
"key": "Abp.Identity.User.LockoutManagement.EmailConfirmed",
|
||||
"en": "Email Confirmed",
|
||||
"tr": "Email Adresi Onayı"
|
||||
},
|
||||
{
|
||||
"resourceName": "Platform",
|
||||
"key": "Abp.Identity.User.LockoutManagement.PhoneNumberConfirmed",
|
||||
"en": "Phone Number Confirmed",
|
||||
"tr": "Telefon Numarası Onayı"
|
||||
},
|
||||
{
|
||||
"resourceName": "Platform",
|
||||
"key": "Abp.Identity.User.LockoutManagement.TwoFactorEnabled",
|
||||
"en": "Two Factor Enabled",
|
||||
"tr": "İki Faktör Ektinleştirme"
|
||||
},
|
||||
{
|
||||
"resourceName": "Platform",
|
||||
"key": "Abp.Identity.User.LockoutManagement.LoginEndDate",
|
||||
"en": "Login End Date",
|
||||
"tr": "Login Bitiş Tarihi"
|
||||
},
|
||||
{
|
||||
"resourceName": "Platform",
|
||||
"key": "Abp.Identity.User.LockoutManagement.AccountEndDate",
|
||||
|
|
@ -1752,6 +1848,18 @@
|
|||
"en": "Account Lock Date",
|
||||
"tr": "Hesap Kilitlenme Tarihi"
|
||||
},
|
||||
{
|
||||
"resourceName": "Platform",
|
||||
"key": "Abp.Identity.User.LockoutManagement.ShouldChangePwOnNextLogin",
|
||||
"en": "Should Change Password On Next Login?",
|
||||
"tr": "Bir Sonraki Girişte Şifre Değiştirilsin mi?"
|
||||
},
|
||||
{
|
||||
"resourceName": "Platform",
|
||||
"key": "Abp.Identity.User.LockoutManagement.AccessFailedCount",
|
||||
"en": "Access Failed Count",
|
||||
"tr": "Başarısız Erişim Sayısı"
|
||||
},
|
||||
{
|
||||
"resourceName": "Platform",
|
||||
"key": "Abp.Identity.Profile",
|
||||
|
|
@ -1890,6 +1998,18 @@
|
|||
"en": "Internal Error",
|
||||
"tr": "Dahili Hata"
|
||||
},
|
||||
{
|
||||
"resourceName": "Platform",
|
||||
"key": "Error:0006",
|
||||
"en": "No records!",
|
||||
"tr": "Kayıt Yok!"
|
||||
},
|
||||
{
|
||||
"resourceName": "Platform",
|
||||
"key": "App.BackgroundWorkers.Message",
|
||||
"en": "Background Workers are being renewed.",
|
||||
"tr": "Arka Plan Çalışanları yenileniyor."
|
||||
},
|
||||
{
|
||||
"resourceName": "Platform",
|
||||
"key": "LoginEndDate",
|
||||
|
|
@ -4050,6 +4170,138 @@
|
|||
"key": "ListForms.ListFormFieldEdit.PivotSettingWordWrapEnabled",
|
||||
"en": "WordWrap Enabled",
|
||||
"tr": "WordWrap Enabled"
|
||||
},
|
||||
{
|
||||
"resourceName": "Platform",
|
||||
"key": "SidePanel.Title",
|
||||
"en": "Configuration",
|
||||
"tr": "Yapılandırma"
|
||||
},
|
||||
{
|
||||
"resourceName": "Platform",
|
||||
"key": "SidePanel.Mode",
|
||||
"en": "Mode",
|
||||
"tr": "Mod"
|
||||
},
|
||||
{
|
||||
"resourceName": "Platform",
|
||||
"key": "SidePanel.Mode.Description",
|
||||
"en": "Switch theme to dark mode",
|
||||
"tr": "Switch theme to dark mode"
|
||||
},
|
||||
{
|
||||
"resourceName": "Platform",
|
||||
"key": "SidePanel.Direction",
|
||||
"en": "Direction",
|
||||
"tr": "Yön"
|
||||
},
|
||||
{
|
||||
"resourceName": "Platform",
|
||||
"key": "SidePanel.Direction.Description",
|
||||
"en": "Select a direction",
|
||||
"tr": "Bir yön seçin"
|
||||
},
|
||||
{
|
||||
"resourceName": "Platform",
|
||||
"key": "SidePanel.NavMode",
|
||||
"en": "Nav Mode",
|
||||
"tr": "Nav Mod"
|
||||
},
|
||||
{
|
||||
"resourceName": "Platform",
|
||||
"key": "SidePanel.Themed",
|
||||
"en": "Theme",
|
||||
"tr": "Tema"
|
||||
},
|
||||
{
|
||||
"resourceName": "Platform",
|
||||
"key": "SidePanel.Layout",
|
||||
"en": "Layout",
|
||||
"tr": "Düzen"
|
||||
},
|
||||
{
|
||||
"resourceName": "Platform",
|
||||
"key": "SidePanel.Layout.Classic",
|
||||
"en": "Classic",
|
||||
"tr": "Klasik"
|
||||
},
|
||||
{
|
||||
"resourceName": "Platform",
|
||||
"key": "SidePanel.Layout.Modern",
|
||||
"en": "Modern",
|
||||
"tr": "Modern"
|
||||
},
|
||||
{
|
||||
"resourceName": "Platform",
|
||||
"key": "SidePanel.Layout.Stacked Side",
|
||||
"en": "Stacked Side",
|
||||
"tr": "Yığılmış Yan"
|
||||
},
|
||||
{
|
||||
"resourceName": "Platform",
|
||||
"key": "SidePanel.Layout.Simple",
|
||||
"en": "Simple",
|
||||
"tr": "Basit"
|
||||
},
|
||||
{
|
||||
"resourceName": "Platform",
|
||||
"key": "SidePanel.Layout.Decked",
|
||||
"en": "Decked",
|
||||
"tr": "Döşeli"
|
||||
},
|
||||
{
|
||||
"resourceName": "Platform",
|
||||
"key": "SidePanel.Layout.Blank",
|
||||
"en": "Blank",
|
||||
"tr": "Boş"
|
||||
},
|
||||
{
|
||||
"resourceName": "Platform",
|
||||
"key": "AI.Welcome",
|
||||
"en": "Welcome!",
|
||||
"tr": "Hoş Geldiniz!"
|
||||
},
|
||||
{
|
||||
"resourceName": "Platform",
|
||||
"key": "AI.Name",
|
||||
"en": "Course AI",
|
||||
"tr": "Kurs AI"
|
||||
},
|
||||
{
|
||||
"resourceName": "Platform",
|
||||
"key": "AI.WaitAnswer",
|
||||
"en": "Waiting for response...",
|
||||
"tr": "Yanıt bekleniyor..."
|
||||
},
|
||||
{
|
||||
"resourceName": "Platform",
|
||||
"key": "AI.Asking",
|
||||
"en": "Ask anything",
|
||||
"tr": "Herhangi bir şey sor"
|
||||
},
|
||||
{
|
||||
"resourceName": "Platform",
|
||||
"key": "AI.SelectModel",
|
||||
"en": "Select Model",
|
||||
"tr": "Model Seç"
|
||||
},
|
||||
{
|
||||
"resourceName": "Platform",
|
||||
"key": "AI.SohbetAnswer",
|
||||
"en": "Chat",
|
||||
"tr": "Sohbet"
|
||||
},
|
||||
{
|
||||
"resourceName": "Platform",
|
||||
"key": "AI.DatabaseAnswer",
|
||||
"en": "Database Query",
|
||||
"tr": "Veritabanı Sorgusu"
|
||||
},
|
||||
{
|
||||
"resourceName": "Platform",
|
||||
"key": "AI.AnalizAnswer",
|
||||
"en": "Analysis and Evaluation",
|
||||
"tr": "Analiz & Değerlendirme"
|
||||
}
|
||||
],
|
||||
"DataSources": [
|
||||
|
|
|
|||
|
|
@ -1,35 +0,0 @@
|
|||
import React from 'react';
|
||||
|
||||
const CaseStudies: React.FC = () => {
|
||||
return (
|
||||
<section className="py-16 bg-gray-50">
|
||||
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
|
||||
<div className="text-center">
|
||||
<h2 className="text-3xl font-bold text-gray-900 sm:text-4xl">
|
||||
Case Studies
|
||||
</h2>
|
||||
<p className="mt-4 text-lg text-gray-600">
|
||||
See how we've helped businesses achieve their goals
|
||||
</p>
|
||||
</div>
|
||||
<div className="mt-12 grid gap-8 md:grid-cols-2 lg:grid-cols-3">
|
||||
{/* Placeholder for case study cards */}
|
||||
<div className="bg-white rounded-lg shadow-md p-6">
|
||||
<h3 className="text-xl font-semibold text-gray-900">Case Study 1</h3>
|
||||
<p className="mt-2 text-gray-600">Coming soon...</p>
|
||||
</div>
|
||||
<div className="bg-white rounded-lg shadow-md p-6">
|
||||
<h3 className="text-xl font-semibold text-gray-900">Case Study 2</h3>
|
||||
<p className="mt-2 text-gray-600">Coming soon...</p>
|
||||
</div>
|
||||
<div className="bg-white rounded-lg shadow-md p-6">
|
||||
<h3 className="text-xl font-semibold text-gray-900">Case Study 3</h3>
|
||||
<p className="mt-2 text-gray-600">Coming soon...</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
);
|
||||
};
|
||||
|
||||
export default CaseStudies;
|
||||
|
|
@ -1,44 +0,0 @@
|
|||
import React from 'react';
|
||||
import Slider from 'react-slick';
|
||||
import 'slick-carousel/slick/slick.css';
|
||||
import 'slick-carousel/slick/slick-theme.css';
|
||||
import { useLanguage } from '../../context/LanguageContext';
|
||||
import { testimonials } from '../../locales/testimonials';
|
||||
|
||||
const Testimonials: React.FC = () => {
|
||||
const { t, language } = useLanguage();
|
||||
|
||||
const testimonialsData = testimonials[language];
|
||||
|
||||
const settings = {
|
||||
dots: true,
|
||||
infinite: true,
|
||||
speed: 500,
|
||||
slidesToShow: 3,
|
||||
slidesToScroll: 1,
|
||||
autoplay: true,
|
||||
autoplaySpeed: 5000,
|
||||
cssEase: "linear"
|
||||
};
|
||||
|
||||
return (
|
||||
<section className="py-16 bg-gray-50">
|
||||
<div className="container mx-auto px-4">
|
||||
<h2 className="text-3xl font-bold text-center mb-12">{t('testimonials.title')}</h2>
|
||||
<Slider {...settings}>
|
||||
{testimonialsData.map((testimonial, index) => (
|
||||
<div key={index} className="px-2">
|
||||
<div className="bg-white p-6 rounded-lg shadow-md">
|
||||
<p className="text-gray-600 mb-4">"{testimonial.quote}"</p>
|
||||
<div className="font-semibold">{testimonial.author}</div>
|
||||
<div className="text-sm text-gray-500">{testimonial.title}</div>
|
||||
</div>
|
||||
</div>
|
||||
))}
|
||||
</Slider>
|
||||
</div>
|
||||
</section>
|
||||
);
|
||||
};
|
||||
|
||||
export default Testimonials;
|
||||
|
|
@ -356,6 +356,10 @@ const translations = {
|
|||
// Testimonials Section
|
||||
"testimonials.title": "Müşteri Yorumları",
|
||||
|
||||
// NotFound
|
||||
"notFound.message": "Üzgünüz, aradığınız sayfa bulunamadı. Lütfen URL'yi kontrol edin veya ana sayfaya dönün.",
|
||||
"notFound.button": "Ana Sayfaya Dön",
|
||||
|
||||
// Common
|
||||
"common.learnMore": "Detaylı Bilgi",
|
||||
"common.contact":
|
||||
|
|
@ -742,6 +746,10 @@ const translations = {
|
|||
// Testimonials Section
|
||||
"testimonials.title": "Testimonials",
|
||||
|
||||
// NotFound
|
||||
"notFound.message": "Sorry, the page you are looking for was not found. Please check the URL or return to the homepage.",
|
||||
"notFound.button": "Return to Homepage",
|
||||
|
||||
// Common
|
||||
"common.learnMore": "Learn More",
|
||||
"common.contact":
|
||||
|
|
|
|||
|
|
@ -1,16 +1,20 @@
|
|||
import React from 'react';
|
||||
import { Frown } from 'lucide-react'; // Lucide-react kütüphanesinden Frown ikonunu import et
|
||||
import { useLanguage } from '../context/LanguageContext';
|
||||
|
||||
const NotFound: React.FC = () => {
|
||||
const { t, language } = useLanguage();
|
||||
|
||||
|
||||
return (
|
||||
<div className="flex flex-col items-center justify-center min-h-screen bg-white text-gray-700 p-4"> {/* Arka plan ve metin rengi güncellendi, padding eklendi */}
|
||||
<Frown size={128} className="text-blue-600 mb-6" /> {/* İkon boyutu ve rengi güncellendi */}
|
||||
<h1 className="text-7xl font-bold text-gray-900 mb-4">404</h1> {/* Başlık boyutu ve rengi güncellendi */}
|
||||
<p className="text-xl text-gray-600 mb-8 text-center max-w-md"> {/* Metin rengi, margin ve max-width güncellendi */}
|
||||
Üzgünüz, aradığınız sayfa bulunamadı. Lütfen URL'yi kontrol edin veya ana sayfaya dönün.
|
||||
{t('notFound.message')}
|
||||
</p>
|
||||
<a href="/" className="px-6 py-3 bg-blue-600 text-white rounded-lg hover:bg-blue-700 transition duration-300 text-lg font-semibold"> {/* Buton stili güncellendi */}
|
||||
Ana Sayfaya Dön
|
||||
{t('notFound.button')}
|
||||
</a>
|
||||
</div>
|
||||
);
|
||||
|
|
|
|||
|
|
@ -82,7 +82,7 @@ define(['./workbox-54d0af47'], (function (workbox) { 'use strict';
|
|||
"revision": "3ca0b8505b4bec776b69afdba2768812"
|
||||
}, {
|
||||
"url": "index.html",
|
||||
"revision": "0.ndk83qv1fe"
|
||||
"revision": "0.i5lc19up29o"
|
||||
}], {});
|
||||
workbox.cleanupOutdatedCaches();
|
||||
workbox.registerRoute(new workbox.NavigationRoute(workbox.createHandlerBoundToURL("index.html"), {
|
||||
|
|
|
|||
|
|
@ -5,12 +5,15 @@ import SidePanelContent, { SidePanelContentProps } from './SidePanelContent'
|
|||
import withHeaderItem from '@/utils/hoc/withHeaderItem'
|
||||
import { useStoreState, useStoreActions } from '@/store'
|
||||
import type { CommonProps } from '@/@types/common'
|
||||
import { useLocalization } from '@/utils/hooks/useLocalization'
|
||||
|
||||
type SidePanelProps = SidePanelContentProps & CommonProps
|
||||
|
||||
const _SidePanel = (props: SidePanelProps) => {
|
||||
const { setPanelExpand } = useStoreActions((actions) => actions.theme)
|
||||
|
||||
const {translate } = useLocalization()
|
||||
|
||||
const { className, ...rest } = props
|
||||
|
||||
const panelExpand = useStoreState((state) => state.theme.panelExpand)
|
||||
|
|
@ -35,7 +38,7 @@ const _SidePanel = (props: SidePanelProps) => {
|
|||
<HiOutlineCog />
|
||||
</div>
|
||||
<Drawer
|
||||
title="Side Panel"
|
||||
title={translate('::SidePanel.Title')}
|
||||
isOpen={panelExpand}
|
||||
placement={direction === 'rtl' ? 'left' : 'right'}
|
||||
width={375}
|
||||
|
|
|
|||
|
|
@ -14,6 +14,7 @@ import {
|
|||
LAYOUT_TYPE_BLANK,
|
||||
} from '@/constants/theme.constant'
|
||||
import type { LayoutType } from '@/@types/theme'
|
||||
import { useLocalization } from '@/utils/hooks/useLocalization'
|
||||
|
||||
const layouts = [
|
||||
{
|
||||
|
|
@ -64,6 +65,8 @@ const LayoutSwitcher = () => {
|
|||
|
||||
const { textTheme } = useThemeClass()
|
||||
|
||||
const { translate } = useLocalization()
|
||||
|
||||
return (
|
||||
<div>
|
||||
<Segment
|
||||
|
|
@ -98,7 +101,7 @@ const LayoutSwitcher = () => {
|
|||
/>
|
||||
</SegmentItemOption>
|
||||
<div className={classNames(active && textTheme, 'mt-2 font-semibold')}>
|
||||
{layout.label}
|
||||
{translate('::SidePanel.Layout.' + layout.label)}
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
|
|
|
|||
|
|
@ -4,39 +4,42 @@ import ThemeSwitcher from './ThemeSwitcher'
|
|||
import DirectionSwitcher from './DirectionSwitcher'
|
||||
import NavModeSwitcher from './NavModeSwitcher'
|
||||
import CopyButton from './CopyButton'
|
||||
import { useLocalization } from '@/utils/hooks/useLocalization'
|
||||
|
||||
export type ThemeConfiguratorProps = {
|
||||
callBackClose?: () => void
|
||||
}
|
||||
|
||||
const ThemeConfigurator = ({ callBackClose }: ThemeConfiguratorProps) => {
|
||||
const { translate } = useLocalization()
|
||||
|
||||
return (
|
||||
<div className="flex flex-col h-full justify-between">
|
||||
<div className="flex flex-col gap-y-10 mb-6">
|
||||
<div className="flex items-center justify-between">
|
||||
<div>
|
||||
<h6>Dark Mode</h6>
|
||||
<span>Switch theme to dark mode</span>
|
||||
<h6>{translate('::SidePanel.Mode')}</h6>
|
||||
<span>{translate('::SidePanel.Mode.Description')}</span>
|
||||
</div>
|
||||
<ModeSwitcher />
|
||||
</div>
|
||||
<div className="flex items-center justify-between">
|
||||
<div>
|
||||
<h6>Direction</h6>
|
||||
<span>Select a direction</span>
|
||||
<h6>{translate('::SidePanel.Direction')}</h6>
|
||||
<span>{translate('::SidePanel.Direction.Description')}</span>
|
||||
</div>
|
||||
<DirectionSwitcher callBackClose={callBackClose} />
|
||||
</div>
|
||||
<div>
|
||||
<h6 className="mb-3">Nav Mode</h6>
|
||||
<h6 className="mb-3">{translate('::SidePanel.NavMode')}</h6>
|
||||
<NavModeSwitcher />
|
||||
</div>
|
||||
<div>
|
||||
<h6 className="mb-3">Theme</h6>
|
||||
<h6 className="mb-3">{translate('::SidePanel.Themed')}</h6>
|
||||
<ThemeSwitcher />
|
||||
</div>
|
||||
<div>
|
||||
<h6 className="mb-3">Layout</h6>
|
||||
<h6 className="mb-3">{translate('::SidePanel.Layout')}</h6>
|
||||
<LayoutSwitcher />
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
import { Notification, toast } from '@/components/ui'
|
||||
import { generateBackgroundWorkers } from '@/proxy/background-worker/background-worker.service'
|
||||
import { useLocalization } from '@/utils/hooks/useLocalization'
|
||||
|
||||
export abstract class UiEvalService {
|
||||
static Init = () => {
|
||||
|
|
@ -7,6 +8,8 @@ export abstract class UiEvalService {
|
|||
}
|
||||
|
||||
static ApiGenerateBackgroundWorkers = () => {
|
||||
const { translate } = useLocalization()
|
||||
|
||||
const asyncCall = async () => {
|
||||
await generateBackgroundWorkers()
|
||||
}
|
||||
|
|
@ -15,7 +18,7 @@ export abstract class UiEvalService {
|
|||
|
||||
toast.push(
|
||||
<Notification type="success" duration={2000}>
|
||||
{'Background Workers are being renewed.'}
|
||||
{translate('::App.BackgroundWorkers.Message')}
|
||||
</Notification>,
|
||||
{
|
||||
placement: 'top-center',
|
||||
|
|
|
|||
|
|
@ -1,11 +1,13 @@
|
|||
import Container from '@/components/shared/Container'
|
||||
import DoubleSidedImage from '@/components/shared/DoubleSidedImage'
|
||||
import { Button } from '@/components/ui'
|
||||
import { useLocalization } from '@/utils/hooks/useLocalization'
|
||||
import { MdArrowBack } from 'react-icons/md'
|
||||
import { useNavigate } from 'react-router-dom'
|
||||
|
||||
const AccessDenied = () => {
|
||||
const navigate = useNavigate()
|
||||
const { translate } = useLocalization()
|
||||
|
||||
return (
|
||||
<Container className="h-full">
|
||||
|
|
@ -13,11 +15,11 @@ const AccessDenied = () => {
|
|||
<DoubleSidedImage
|
||||
src="/img/others/img-2.png"
|
||||
darkModeSrc="/img/others/img-2-dark.png"
|
||||
alt="Access Denied!"
|
||||
alt={ translate('::AccessDenied')}
|
||||
/>
|
||||
<div className="mt-6 text-center">
|
||||
<h3 className="mb-2">Access Denied!</h3>
|
||||
<p className="text-base">You have no permission to visit this page</p>
|
||||
<h3 className="mb-2">{ translate('::AccessDenied')}</h3>
|
||||
<p className="text-base">{ translate('::AccessDeniedMessage')}</p>
|
||||
</div>
|
||||
<Button size="xs" className="mt-2" variant="default" onClick={() => navigate(-2)}>
|
||||
<MdArrowBack />
|
||||
|
|
|
|||
|
|
@ -49,10 +49,10 @@ function UserDetails() {
|
|||
<Tabs defaultValue="user">
|
||||
<TabList>
|
||||
<TabNav value="user" icon={<HiOutlineUser />}>
|
||||
User Information
|
||||
{ translate('::Abp.Identity.User.UserInformation') }
|
||||
</TabNav>
|
||||
<TabNav value="lockout" icon={<HiOutlineLockOpen />}>
|
||||
Lockout Management
|
||||
{ translate('::Abp.Identity.User.LockoutManagement') }
|
||||
</TabNav>
|
||||
</TabList>
|
||||
<TabContent value="user">
|
||||
|
|
@ -65,7 +65,7 @@ function UserDetails() {
|
|||
|
||||
toast.push(
|
||||
<Notification type="success" duration={2000}>
|
||||
{'User bilgileri kaydedildi.'}
|
||||
{translate('Kaydet')}
|
||||
</Notification>,
|
||||
{
|
||||
placement: 'top-center',
|
||||
|
|
@ -84,7 +84,7 @@ function UserDetails() {
|
|||
<Form>
|
||||
<FormContainer size="sm">
|
||||
<div className="w-1/2">
|
||||
<div className="form-label mb-2">Role Management</div>
|
||||
<div className="form-label mb-2">{translate('::Abp.Identity.User.UserInformation.RoleManagement')}</div>
|
||||
<div className="border-2 rounded-lg">
|
||||
<FieldArray name="roles">
|
||||
{({ form, remove, push }) => (
|
||||
|
|
@ -117,7 +117,7 @@ function UserDetails() {
|
|||
<FormItem
|
||||
labelClass="!justify-start"
|
||||
labelWidth="40%"
|
||||
label="Email Address"
|
||||
label={translate('::Abp.Identity.User.UserInformation.EmailAddress')}
|
||||
>
|
||||
<Field
|
||||
type="text"
|
||||
|
|
@ -128,11 +128,15 @@ function UserDetails() {
|
|||
/>
|
||||
</FormItem>
|
||||
|
||||
<FormItem labelClass="!justify-start" labelWidth="40%" label="Name">
|
||||
<FormItem labelClass="!justify-start" labelWidth="40%"
|
||||
label={translate('::Abp.Identity.User.UserInformation.Name')}
|
||||
>
|
||||
<Field type="text" name="name" placeholder="Name" component={Input} />
|
||||
</FormItem>
|
||||
|
||||
<FormItem labelClass="!justify-start" labelWidth="40%" label="Surname">
|
||||
<FormItem labelClass="!justify-start" labelWidth="40%"
|
||||
label={translate('::Abp.Identity.User.UserInformation.Surname')}
|
||||
>
|
||||
<Field
|
||||
type="text"
|
||||
name="surname"
|
||||
|
|
@ -141,7 +145,9 @@ function UserDetails() {
|
|||
/>
|
||||
</FormItem>
|
||||
|
||||
<FormItem labelClass="!justify-start" labelWidth="40%" label="Phone Number">
|
||||
<FormItem labelClass="!justify-start" labelWidth="40%"
|
||||
label={translate('::Abp.Identity.User.UserInformation.PhoneNumber')}
|
||||
>
|
||||
<Field
|
||||
type="text"
|
||||
name="phoneNumber"
|
||||
|
|
@ -153,7 +159,7 @@ function UserDetails() {
|
|||
<FormItem
|
||||
labelClass="!justify-start"
|
||||
labelWidth="40%"
|
||||
label="Password change time"
|
||||
label={translate('::Abp.Identity.User.UserInformation.PasswordChangeTime')}
|
||||
>
|
||||
<Field name="lastPasswordChangeTime">
|
||||
{({ field, form }: FieldProps) => (
|
||||
|
|
@ -176,17 +182,19 @@ function UserDetails() {
|
|||
<FormItem
|
||||
labelClass="!justify-start"
|
||||
labelWidth="40%"
|
||||
label="Rocket Username"
|
||||
label={translate('::RocketUsername')}
|
||||
>
|
||||
<Field
|
||||
type="text"
|
||||
name="rocketUsername"
|
||||
placeholder="Rocket Username"
|
||||
placeholder={translate('::RocketUsername')}
|
||||
component={Input}
|
||||
/>
|
||||
</FormItem>
|
||||
|
||||
<FormItem labelClass="!justify-start" labelWidth="40%" label="Create Time">
|
||||
<FormItem labelClass="!justify-start" labelWidth="40%"
|
||||
label={translate('::Abp.Identity.User.UserInformation.CreateTime')}
|
||||
>
|
||||
<Field name="creationTime">
|
||||
{({ field, form }: FieldProps) => (
|
||||
<Input
|
||||
|
|
@ -198,7 +206,9 @@ function UserDetails() {
|
|||
)}
|
||||
</Field>
|
||||
</FormItem>
|
||||
<FormItem labelClass="!justify-start" labelWidth="40%" label="Update Time">
|
||||
<FormItem labelClass="!justify-start" labelWidth="40%"
|
||||
label={translate('::Abp.Identity.User.UserInformation.UpdateTime')}
|
||||
>
|
||||
<Field name="lastModificationTime">
|
||||
{({ field, form }: FieldProps) => (
|
||||
<Input
|
||||
|
|
@ -257,9 +267,9 @@ function UserDetails() {
|
|||
layout="horizontal"
|
||||
labelClass="!justify-start"
|
||||
labelWidth="50%"
|
||||
label="Status"
|
||||
label={translate('::Abp.Identity.User.LockoutManagement.Status')}
|
||||
>
|
||||
<Field name="isActive" placeholder="Status" component={Checkbox} />
|
||||
<Field name="isActive" placeholder={translate('::Abp.Identity.User.LockoutManagement.Status')} component={Checkbox} />
|
||||
</FormItem>
|
||||
|
||||
<hr className="mb-3" />
|
||||
|
|
@ -268,11 +278,11 @@ function UserDetails() {
|
|||
layout="horizontal"
|
||||
labelClass="!justify-start"
|
||||
labelWidth="50%"
|
||||
label="Admin Verification"
|
||||
label={translate('::Abp.Identity.User.LockoutManagement.AdminVerification')}
|
||||
>
|
||||
<Field
|
||||
name="isVerified"
|
||||
placeholder="Admin Verification"
|
||||
placeholder={translate('::Abp.Identity.User.LockoutManagement.AdminVerification')}
|
||||
component={Checkbox}
|
||||
/>
|
||||
</FormItem>
|
||||
|
|
@ -283,11 +293,11 @@ function UserDetails() {
|
|||
layout="horizontal"
|
||||
labelClass="!justify-start"
|
||||
labelWidth="50%"
|
||||
label="Email Confirmed"
|
||||
label={translate('::Abp.Identity.User.LockoutManagement.EmailConfirmed')}
|
||||
>
|
||||
<Field
|
||||
name="emailConfirmed"
|
||||
placeholder="Email Confirmed"
|
||||
placeholder={translate('::Abp.Identity.User.LockoutManagement.EmailConfirmed')}
|
||||
component={Checkbox}
|
||||
/>
|
||||
</FormItem>
|
||||
|
|
@ -296,11 +306,11 @@ function UserDetails() {
|
|||
layout="horizontal"
|
||||
labelClass="!justify-start"
|
||||
labelWidth="50%"
|
||||
label="Phone Number Confirmed"
|
||||
label={translate('::Abp.Identity.User.LockoutManagement.PhoneNumberConfirmed')}
|
||||
>
|
||||
<Field
|
||||
name="phoneNumberConfirmed"
|
||||
placeholder="Phone Number Confirmed"
|
||||
placeholder={translate('::Abp.Identity.User.LockoutManagement.PhoneNumberConfirmed')}
|
||||
component={Checkbox}
|
||||
/>
|
||||
</FormItem>
|
||||
|
|
@ -311,11 +321,11 @@ function UserDetails() {
|
|||
layout="horizontal"
|
||||
labelClass="!justify-start"
|
||||
labelWidth="50%"
|
||||
label="Two Factor Enabled"
|
||||
label={translate('::Abp.Identity.User.LockoutManagement.TwoFactorEnabled')}
|
||||
>
|
||||
<Field
|
||||
name="twoFactorEnabled"
|
||||
placeholder="Two Factor Enabled"
|
||||
placeholder={translate('::Abp.Identity.User.LockoutManagement.TwoFactorEnabled')}
|
||||
component={Checkbox}
|
||||
/>
|
||||
</FormItem>
|
||||
|
|
@ -326,7 +336,7 @@ function UserDetails() {
|
|||
layout="horizontal"
|
||||
labelClass="!justify-start"
|
||||
labelWidth="50%"
|
||||
label="Login End Date"
|
||||
label={translate('::Abp.Identity.User.LockoutManagement.LoginEndDate')}
|
||||
>
|
||||
<Field name="loginEndDate">
|
||||
{({ field, form }: FieldProps) => (
|
||||
|
|
@ -334,7 +344,7 @@ function UserDetails() {
|
|||
field={field}
|
||||
form={form}
|
||||
value={field.value ? dayjs(field.value).toDate() : null}
|
||||
placeholder="Select Date"
|
||||
placeholder={translate('::Abp.Identity.User.LockoutManagement.LoginEndDate')}
|
||||
onChange={(date) => {
|
||||
form.setFieldValue(
|
||||
field.name,
|
||||
|
|
@ -352,11 +362,11 @@ function UserDetails() {
|
|||
layout="horizontal"
|
||||
labelClass="!justify-start"
|
||||
labelWidth="50%"
|
||||
label="Account Lockout Enabled"
|
||||
label={translate('::Abp.Identity.User.LockoutManagement.AccountLockoutEnabled')}
|
||||
>
|
||||
<Field
|
||||
name="lockoutEnabled"
|
||||
placeholder="Account Lockout Enabled"
|
||||
placeholder={translate('::Abp.Identity.User.LockoutManagement.AccountLockoutEnabled')}
|
||||
component={Checkbox}
|
||||
/>
|
||||
</FormItem>
|
||||
|
|
@ -365,11 +375,11 @@ function UserDetails() {
|
|||
layout="horizontal"
|
||||
labelClass="!justify-start"
|
||||
labelWidth="50%"
|
||||
label="Account Locked"
|
||||
label={translate('::Abp.Identity.User.LockoutManagement.AccountLocked')}
|
||||
>
|
||||
<Field
|
||||
name="lockUser"
|
||||
placeholder="Account Locked"
|
||||
placeholder={translate('::Abp.Identity.User.LockoutManagement.AccountLocked')}
|
||||
component={Checkbox}
|
||||
/>
|
||||
</FormItem>
|
||||
|
|
@ -378,7 +388,7 @@ function UserDetails() {
|
|||
layout="horizontal"
|
||||
labelClass="!justify-start"
|
||||
labelWidth="50%"
|
||||
label="Lockout End Date"
|
||||
label={translate('::Abp.Identity.User.LockoutManagement.AccountEndDate')}
|
||||
>
|
||||
<Field name="lockoutEnd">
|
||||
{({ field, form }: FieldProps) => (
|
||||
|
|
@ -386,7 +396,7 @@ function UserDetails() {
|
|||
field={field}
|
||||
form={form}
|
||||
value={field.value ? dayjs(field.value).toDate() : null}
|
||||
placeholder="Select Date"
|
||||
placeholder={translate('::Abp.Identity.User.LockoutManagement.AccountEndDate')}
|
||||
onChange={(date) => {
|
||||
form.setFieldValue(
|
||||
field.name,
|
||||
|
|
@ -404,11 +414,11 @@ function UserDetails() {
|
|||
layout="horizontal"
|
||||
labelClass="!justify-start"
|
||||
labelWidth="50%"
|
||||
label="Should Change Pw On Next Login"
|
||||
label={translate('::Abp.Identity.User.LockoutManagement.ShouldChangePwOnNextLogin')}
|
||||
>
|
||||
<Field
|
||||
name="shouldChangePasswordOnNextLogin"
|
||||
placeholder="Should Change Pw On Next Login"
|
||||
placeholder={translate('::Abp.Identity.User.LockoutManagement.ShouldChangePwOnNextLogin')}
|
||||
component={Checkbox}
|
||||
/>
|
||||
</FormItem>
|
||||
|
|
@ -417,7 +427,7 @@ function UserDetails() {
|
|||
layout="horizontal"
|
||||
labelClass="!justify-start"
|
||||
labelWidth="50%"
|
||||
label="Access Failed Count"
|
||||
label={translate('::Abp.Identity.User.LockoutManagement.AccessFailedCount')}
|
||||
>
|
||||
<Field type="number" name="accessFailedCount" component={Input} />
|
||||
</FormItem>
|
||||
|
|
|
|||
|
|
@ -424,15 +424,15 @@ const OrganizationUnits = () => {
|
|||
|
||||
<div className="file-actions">
|
||||
<div className="flex gap-1 folderFileActions">
|
||||
<button onClick={() => setIsMoveAllUsersOpen(true)} title="Move All Users">
|
||||
<button onClick={() => setIsMoveAllUsersOpen(true)} title={ translate('::Abp.Identity.OrganizationUnit.MoveAllUsers')}>
|
||||
<MdSupervisedUserCircle size="20" color="#2d6da3" />
|
||||
</button>
|
||||
<button onClick={() => node.edit()} title="Rename">
|
||||
<button onClick={() => node.edit()} title={ translate('::Abp.Identity.OrganizationUnit.Rename')}>
|
||||
<MdEdit size="20" className="text-teal-900" />
|
||||
</button>
|
||||
<button
|
||||
onClick={() => setDeleteRow({ id: node.data.id, name: 'Organization Unit' })}
|
||||
title="Delete"
|
||||
title={ translate('::Delete')}
|
||||
>
|
||||
<MdDelete size="20" className="text-red-500" />
|
||||
</button>
|
||||
|
|
@ -461,7 +461,7 @@ const OrganizationUnits = () => {
|
|||
<Button
|
||||
variant="solid"
|
||||
size="xs"
|
||||
title="Add Unit"
|
||||
title={translate('::Abp.Identity.OrganizationUnit.AddUnit')}
|
||||
onClick={(e) => {
|
||||
e.preventDefault()
|
||||
setDialogItem({
|
||||
|
|
@ -476,7 +476,7 @@ const OrganizationUnits = () => {
|
|||
<Button
|
||||
variant="solid"
|
||||
size="xs"
|
||||
title="Move All Users"
|
||||
title={translate('::Abp.Identity.OrganizationUnit.MoveAllUsers')}
|
||||
onClick={(e) => {
|
||||
e.preventDefault()
|
||||
setIsMoveAllUsersOpen(true)
|
||||
|
|
@ -490,7 +490,7 @@ const OrganizationUnits = () => {
|
|||
<Input
|
||||
className="h-8"
|
||||
type="text"
|
||||
placeholder="Search..."
|
||||
placeholder={translate('::App.Search')}
|
||||
value={treeSearch}
|
||||
onChange={(e) => {
|
||||
setTreeSearch(e.target.value)
|
||||
|
|
@ -523,10 +523,10 @@ const OrganizationUnits = () => {
|
|||
<Tabs defaultValue="users">
|
||||
<TabList>
|
||||
<TabNav value="users" icon={<HiUser />}>
|
||||
Users
|
||||
{translate('::AbpIdentity.Users')}
|
||||
</TabNav>
|
||||
<TabNav value="roles" icon={<HiBadgeCheck />}>
|
||||
Roles
|
||||
{translate('::AbpIdentity.Roles')}
|
||||
</TabNav>
|
||||
</TabList>
|
||||
<TabContent value="users">
|
||||
|
|
@ -594,7 +594,7 @@ const OrganizationUnits = () => {
|
|||
</Table>
|
||||
</AdaptableCard>
|
||||
) : (
|
||||
<div className="p-3">Select an organization unit to see members </div>
|
||||
<div className="p-3">{ translate('::Abp.Identity.OrganizationUnit.Users.Description')}</div>
|
||||
)}
|
||||
</TabContent>
|
||||
<TabContent value="roles">
|
||||
|
|
@ -650,7 +650,7 @@ const OrganizationUnits = () => {
|
|||
</Table>
|
||||
</AdaptableCard>
|
||||
) : (
|
||||
<div className="p-3">Select an organization unit to see roles </div>
|
||||
<div className="p-3">{ translate('::Abp.Identity.OrganizationUnit.Roles.Description')}</div>
|
||||
)}
|
||||
</TabContent>
|
||||
</Tabs>
|
||||
|
|
@ -674,7 +674,7 @@ const OrganizationUnits = () => {
|
|||
<Form>
|
||||
<FormContainer size="sm">
|
||||
<FormItem
|
||||
label="Parent"
|
||||
label={translate('::Abp.Identity.OrganizationUnit.Parent')}
|
||||
invalid={errors.parentId && touched.parentId}
|
||||
errorMessage={errors.parentId}
|
||||
>
|
||||
|
|
@ -689,7 +689,7 @@ const OrganizationUnits = () => {
|
|||
</FormItem>
|
||||
|
||||
<FormItem
|
||||
label="Display Name"
|
||||
label={translate('::Abp.Identity.OrganizationUnit.DisplayName')}
|
||||
invalid={errors.displayName && touched.displayName}
|
||||
errorMessage={errors.displayName}
|
||||
>
|
||||
|
|
@ -724,7 +724,7 @@ const OrganizationUnits = () => {
|
|||
onClose={() => setUserSelectionList([])}
|
||||
onRequestClose={() => setUserSelectionList([])}
|
||||
>
|
||||
<h5 className="mb-4">Select Members</h5>
|
||||
<h5 className="mb-4">{ translate('::Abp.Identity.OrganizationUnit.SelectMembers')}</h5>
|
||||
|
||||
<DataTable<IdentityUserDto>
|
||||
selectable
|
||||
|
|
@ -795,7 +795,7 @@ const OrganizationUnits = () => {
|
|||
onClose={() => setRoleSelectionList([])}
|
||||
onRequestClose={() => setRoleSelectionList([])}
|
||||
>
|
||||
<h5 className="mb-4">Select Roles</h5>
|
||||
<h5 className="mb-4">{ translate('::Abp.Identity.OrganizationUnit.SelectRoles')}</h5>
|
||||
|
||||
<DataTable<IdentityRoleDto>
|
||||
selectable
|
||||
|
|
@ -866,9 +866,9 @@ const OrganizationUnits = () => {
|
|||
onClose={() => setDeleteRow(null)}
|
||||
onRequestClose={() => setDeleteRow(null)}
|
||||
>
|
||||
<h5 className="mb-4">Delete</h5>
|
||||
<h5 className="mb-4">{ translate('::Delete')}</h5>
|
||||
|
||||
<p>Silmek istediğinize emin misiniz?</p>
|
||||
<p>{ translate('::DeleteConfirmation')}</p>
|
||||
|
||||
<div className="text-right mt-6">
|
||||
<Button
|
||||
|
|
@ -878,7 +878,7 @@ const OrganizationUnits = () => {
|
|||
setDeleteRow(null)
|
||||
}}
|
||||
>
|
||||
Cancel
|
||||
{ translate('::Cancel')}
|
||||
</Button>
|
||||
<Button
|
||||
variant="solid"
|
||||
|
|
@ -933,7 +933,7 @@ const OrganizationUnits = () => {
|
|||
}
|
||||
}}
|
||||
>
|
||||
Delete
|
||||
{ translate('::Delete')}
|
||||
</Button>
|
||||
</div>
|
||||
</Dialog>
|
||||
|
|
@ -944,7 +944,7 @@ const OrganizationUnits = () => {
|
|||
onClose={() => setIsMoveAllUsersOpen(false)}
|
||||
onRequestClose={() => setIsMoveAllUsersOpen(false)}
|
||||
>
|
||||
<h5 className="mb-4">Move All Users</h5>
|
||||
<h5 className="mb-4">{translate('::Abp.Identity.OrganizationUnit.MoveAllUsers')}</h5>
|
||||
|
||||
<Formik
|
||||
initialValues={{ id: activeOu, newId: '' }}
|
||||
|
|
|
|||
|
|
@ -1,9 +1,10 @@
|
|||
import React, { useState, useRef, useEffect, SyntheticEvent } from 'react'
|
||||
import { Send, Bot } from 'lucide-react'
|
||||
import { Bot } from 'lucide-react'
|
||||
import { useStoreActions, useStoreState } from '@/store'
|
||||
import { Avatar, Dropdown } from '@/components/ui'
|
||||
import { AiDto, getAi } from '@/proxy/ai'
|
||||
import LoadAiPostsFromLocalStorage from './LoadAiPostsFromLocalStorage'
|
||||
import { useLocalization } from '@/utils/hooks/useLocalization'
|
||||
|
||||
// Types
|
||||
type ChatType = 'chat' | 'query' | 'analyze'
|
||||
|
|
@ -42,6 +43,7 @@ const Assistant = () => {
|
|||
const bottomRef = useRef<HTMLDivElement | null>(null)
|
||||
|
||||
const { VITE_AI_URL } = import.meta.env
|
||||
const { translate } = useLocalization()
|
||||
|
||||
const aiPosts = useStoreState((state) => state.base.messages.aiPosts)
|
||||
|
||||
|
|
@ -152,9 +154,9 @@ const Assistant = () => {
|
|||
}
|
||||
|
||||
const typeLabels: Record<string, string> = {
|
||||
chat: '🗨️ Sohbet',
|
||||
query: '📊 Veritabanı Sorgusu',
|
||||
analyze: '📈 Analiz & Değerlendirme',
|
||||
chat: '🗨️ ' + translate('::AI.SohbetAnswer'),
|
||||
query: '📊 ' + translate('::AI.DatabaseAnswer'),
|
||||
analyze: '📈 ' + translate('::AI.AnalizAnswer'),
|
||||
}
|
||||
|
||||
const cleanedSql = (() => {
|
||||
|
|
@ -263,8 +265,8 @@ const Assistant = () => {
|
|||
{messages.length === 0 && (
|
||||
<div className="text-center text-gray-500 mt-8">
|
||||
<Bot className="w-12 h-12 mx-auto mb-4 text-gray-400" />
|
||||
<p className="mt-2">Hoş Geldiniz!</p>
|
||||
<p className="text-lg font-medium">Kurs AI</p>
|
||||
<p className="mt-2">{translate('::AI.Welcome')}</p>
|
||||
<p className="text-lg font-medium">{translate('::AI.Name')}</p>
|
||||
</div>
|
||||
)}
|
||||
|
||||
|
|
@ -293,7 +295,7 @@ const Assistant = () => {
|
|||
{loading && (
|
||||
<div className="flex items-center justify-center gap-2 text-gray-500">
|
||||
<div className="animate-spin rounded-full h-4 w-4 border-2 border-gray-500 border-t-transparent" />
|
||||
Yanıt bekleniyor...
|
||||
{translate('::AI.WaitAnswer')}
|
||||
</div>
|
||||
)}
|
||||
|
||||
|
|
@ -312,7 +314,7 @@ const Assistant = () => {
|
|||
handleSubmit(e)
|
||||
}
|
||||
}}
|
||||
placeholder="Ask anything"
|
||||
placeholder={translate('::AI.Asking')}
|
||||
rows={2}
|
||||
className="w-full resize-none bg-transparent border-none outline-none text-base placeholder-gray-400"
|
||||
/>
|
||||
|
|
@ -320,7 +322,7 @@ const Assistant = () => {
|
|||
<div className="absolute bottom-1 left-2 flex items-center gap-2 text-sm">
|
||||
<Dropdown
|
||||
placement="top-start"
|
||||
title={bot.find((item) => item.key === selectedBot)?.name || 'Bot Seç'}
|
||||
title={bot.find((item) => item.key === selectedBot)?.name || translate('::AI.SelectModel') }
|
||||
>
|
||||
{bot.map((item) => (
|
||||
<Dropdown.Item key={item.key} eventKey={item.key} onSelect={onBotItemClick}>
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
import type { CommonProps } from '@/@types/common'
|
||||
import Td from '@/components/ui/Table/Td'
|
||||
import Tr from '@/components/ui/Table/Tr'
|
||||
import { useLocalization } from '@/utils/hooks/useLocalization'
|
||||
import useThemeClass from '@/utils/hooks/useThemeClass'
|
||||
import classNames from 'classnames'
|
||||
|
||||
|
|
@ -12,6 +13,7 @@ const TableNoRecords = (props: TableNoRecordsProps): JSX.Element => {
|
|||
const { show, children, className, ...rest } = props
|
||||
|
||||
const { textTheme } = useThemeClass()
|
||||
const { translate } = useLocalization()
|
||||
|
||||
const classNameProps = {
|
||||
className: classNames(textTheme, 'hover:underline', className),
|
||||
|
|
@ -20,7 +22,7 @@ const TableNoRecords = (props: TableNoRecordsProps): JSX.Element => {
|
|||
return show ? (
|
||||
<Tr>
|
||||
<Td colSpan={100} {...classNameProps} {...rest} className="text-center italic">
|
||||
No records!
|
||||
{ translate('::Error:0006')}
|
||||
{children}
|
||||
</Td>
|
||||
</Tr>
|
||||
|
|
|
|||
Loading…
Reference in a new issue