Products ve Services sayfaları translation düzenlemesi
This commit is contained in:
parent
f7d278695b
commit
7cbd593679
11 changed files with 668 additions and 309 deletions
198
My_workflow.json
198
My_workflow.json
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"name": "My workflow",
|
||||
"name": "Kadifeteks Workflow",
|
||||
"nodes": [
|
||||
{
|
||||
"parameters": {
|
||||
|
|
@ -21,7 +21,7 @@
|
|||
},
|
||||
{
|
||||
"parameters": {
|
||||
"jsCode": "const q = $('Webhook').item.json.body.question.toLowerCase();\n\nif (q.includes(\"tahmin\") || q.includes(\"gelecek\") || q.includes(\"trend\")) {\n return [{ json: { type: \"analyze\", question: q } }];\n}\n\nif (q.includes(\"getir\") || q.includes(\"liste\") || q.includes(\"kaç\")) {\n return [{ json: { type: \"query\", question: q } }];\n}\n\nreturn [{ json: { type: \"chat\", question: q } }];"
|
||||
"jsCode": "const q = $('Webhook').item.json.body.question.toLowerCase();\n\nif (q.includes(\"tahmin\") || q.includes(\"gelecek\") || q.includes(\"trend\")) {\n return [{ json: { type: \"analyze\", question: q } }];\n}\n\nif (q.includes(\"getir\") || q.includes(\"liste\") || q.includes(\"kaç\") || q.includes(\"göster\")) {\n return [{ json: { type: \"query\", question: q } }];\n}\n\nreturn [{ json: { type: \"chat\", question: q } }];"
|
||||
},
|
||||
"type": "n8n-nodes-base.code",
|
||||
"typeVersion": 2,
|
||||
|
|
@ -211,26 +211,6 @@
|
|||
"id": "0f14a81e-5f75-4093-ab93-a24a3315ebda",
|
||||
"name": "AI Query"
|
||||
},
|
||||
{
|
||||
"parameters": {
|
||||
"modelName": "models/gemini-2.0-flash",
|
||||
"options": {}
|
||||
},
|
||||
"type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
|
||||
"typeVersion": 1,
|
||||
"position": [
|
||||
80,
|
||||
40
|
||||
],
|
||||
"id": "3b370555-d453-4eaf-8cf7-c04722350774",
|
||||
"name": "Google Gemini Chat Model2",
|
||||
"credentials": {
|
||||
"googlePalmApi": {
|
||||
"id": "g7Ev8dkuHaLU7JbG",
|
||||
"name": "Google Gemini(PaLM) Api account"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"parameters": {
|
||||
"options": {}
|
||||
|
|
@ -253,32 +233,12 @@
|
|||
"type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
|
||||
"typeVersion": 1.3,
|
||||
"position": [
|
||||
-700,
|
||||
340
|
||||
-660,
|
||||
260
|
||||
],
|
||||
"id": "72d1f63a-4385-4892-a37c-396b07a7e40c",
|
||||
"name": "Simple Memory"
|
||||
},
|
||||
{
|
||||
"parameters": {
|
||||
"modelName": "models/gemini-2.0-flash",
|
||||
"options": {}
|
||||
},
|
||||
"type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
|
||||
"typeVersion": 1,
|
||||
"position": [
|
||||
100,
|
||||
480
|
||||
],
|
||||
"id": "922eb62e-090d-4bee-80e4-a6c82a155922",
|
||||
"name": "Google Gemini Chat Model4",
|
||||
"credentials": {
|
||||
"googlePalmApi": {
|
||||
"id": "g7Ev8dkuHaLU7JbG",
|
||||
"name": "Google Gemini(PaLM) Api account"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"parameters": {
|
||||
"promptType": "define",
|
||||
|
|
@ -343,26 +303,6 @@
|
|||
"alwaysOutputData": true,
|
||||
"onError": "continueRegularOutput"
|
||||
},
|
||||
{
|
||||
"parameters": {
|
||||
"modelName": "models/gemini-2.0-flash",
|
||||
"options": {}
|
||||
},
|
||||
"type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
|
||||
"typeVersion": 1,
|
||||
"position": [
|
||||
100,
|
||||
-260
|
||||
],
|
||||
"id": "0cddf53c-45c8-4bbb-89e2-41f08ed25999",
|
||||
"name": "Google Gemini Chat Model1",
|
||||
"credentials": {
|
||||
"googlePalmApi": {
|
||||
"id": "g7Ev8dkuHaLU7JbG",
|
||||
"name": "Google Gemini(PaLM) Api account"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"parameters": {
|
||||
"assignments": {
|
||||
|
|
@ -410,7 +350,7 @@
|
|||
},
|
||||
{
|
||||
"parameters": {
|
||||
"functionCode": "import matplotlib.pyplot as plt\nimport io\nimport base64\nimport json\n\n# items listesindeki verilere ulaşırken hata kontrolü ekleyelim\nif len(items) > 0:\n question = items[0].get('question', 'Soru sağlanmadı') # Webhook'tan gelen soru\n sql = items[0].get('sql', 'SQL Sorgusu sağlanmadı') # AI Query'den gelen SQL sorgusu\nelse:\n question = \"Soru sağlanmadı\"\n sql = \"SQL Sorgusu sağlanmadı\"\n\n# SQL Query node'undan alınan sonuçlar\nresultItems = [\n {key: item[key] for key in item if key not in [\"question\", \"sql\"]}\n for item in items\n]\n\n# Dinamik sütun isimlerini almak için ilk öğeyi kullanıyoruz\nif resultItems and isinstance(resultItems[0], dict):\n columns = list(resultItems[0].keys()) # İlk öğedeki tüm sütunları alıyoruz\n\n # Dinamik olarak etiket ve veri sütunlarını belirliyoruz\n labels_column = None\n data_column = None\n\n # Etiket sütunu genellikle metin türünde (string) olacak, veri sütunu ise sayısal türde (int, float) olacak\n for col in columns:\n # Etiket sütunu olarak metin (string) türünde olan sütunu seçiyoruz\n if isinstance(resultItems[0].get(col), str):\n labels_column = col\n\n # Veri sütunu olarak sayısal (int veya float) türünde olan sütunu seçiyoruz\n elif isinstance(resultItems[0].get(col), (int, float)):\n data_column = col\n\n # Etiket ve veri sütunları bulunursa, verileri çekiyoruz\n labels = [item.get(labels_column, \"Bilinmeyen\") for item in resultItems if item.get(labels_column) is not None]\n data = [item.get(data_column, 0) for item in resultItems if item.get(data_column) is not None]\n\nelse:\n labels, data = [], [] # Eğer veri boşsa, etiketsiz ve veri içermeyen bir liste döneriz\n\n# **Önemli**: labels ve data uzunluklarını kontrol etme\nif len(labels) != len(data):\n print(f\"Veri uyumsuzluğu: labels uzunluğu: {len(labels)}, data uzunluğu: {len(data)}\")\n # Aynı uzunluktaki verilere göre filtreleme yapabilirsiniz\n min_length = min(len(labels), len(data))\n labels = labels[:min_length]\n data = data[:min_length]\n\n# Eğer etiketsiz veya veri boşsa, görsel oluşturma\nif not labels or not data:\n print(\"Etiketler veya veri listesi boş. Grafik oluşturulamaz.\")\n base64_image = None\nelse:\n # Grafik oluşturucu fonksiyonu\n def generate_base64_image(labels, data):\n # Grafik boyutunu ve başlıkları ayarlama\n fig, ax = plt.subplots(figsize=(10, 6)) # Grafik boyutunu ayarlama\n bars = ax.bar(labels, data, width=0.6) # Bar grafiği çizme\n\n # Etiketleri döndürme ve sıkışıklığı engelleme\n plt.xticks(rotation=45, ha='right')\n plt.tight_layout()\n\n # Verileri çubukların üstüne yerleştirme (değerlerin büyük olmasını engellemek için formatlama)\n for bar in bars:\n height = bar.get_height() # Her çubuğun yüksekliği\n # Burada sayıları doğru bir formatta gösteriyoruz\n formatted_height = f\"{height:,.0f}\" # Sayıyı binlik ayraçlarla biçimlendiriyoruz\n ax.text(bar.get_x() + bar.get_width() / 2, height, formatted_height, \n ha='center', va='bottom', fontsize=10, color='black')\n\n # Base64 olarak görseli kaydetme\n buf = io.BytesIO()\n plt.savefig(buf, format='png', dpi=72) # Görseli base64'e dönüştürmek için\n buf.seek(0)\n base64_image = base64.b64encode(buf.read()).decode('utf-8')\n buf.close()\n plt.close()\n\n return base64_image\n\n # Grafik görselini base64 formatında almak\n base64_image = generate_base64_image(labels, data)\n\n# Sonuçları döndür\nreturn [{\n \"type\": \"query\",\n \"question\": question,\n \"sql\": sql,\n \"answer\": resultItems,\n \"chart\": base64_image, # Grafik base64 formatında dönüyor\n}]\n"
|
||||
"functionCode": "import matplotlib.pyplot as plt\nimport io\nimport base64\nimport json\n\n# items listesindeki verilere ulaşırken hata kontrolü ekleyelim\nif len(items) > 0:\n question = items[0].get('question', 'Soru sağlanmadı') # Webhook'tan gelen soru\n sql = items[0].get('sql', 'SQL Sorgusu sağlanmadı') # AI Query'den gelen SQL sorgusu\nelse:\n question = \"Soru sağlanmadı\"\n sql = \"SQL Sorgusu sağlanmadı\"\n\n# SQL Query node'undan alınan sonuçlar\nresultItems = [\n {key: item[key] for key in item if key not in [\"question\", \"sql\"]}\n for item in items\n]\n\n# Dinamik sütun isimlerini almak için ilk öğeyi kullanıyoruz\nif resultItems and isinstance(resultItems[0], dict):\n columns = list(resultItems[0].keys()) # İlk öğedeki tüm sütunları alıyoruz\n\n # Dinamik olarak etiket ve veri sütunlarını belirliyoruz\n labels_column = None\n data_column = None\n\n # Etiket sütunu genellikle metin türünde (string) olacak, veri sütunu ise sayısal türde (int, float) olacak\n for col in columns:\n # Etiket sütunu olarak metin (string) türünde olan sütunu seçiyoruz\n if isinstance(resultItems[0].get(col), str):\n labels_column = col\n\n # Veri sütunu olarak sayısal (int veya float) türünde olan sütunu seçiyoruz\n elif isinstance(resultItems[0].get(col), (int, float)):\n data_column = col\n\n # Etiket ve veri sütunları bulunursa, verileri çekiyoruz\n labels = [item.get(labels_column, \"Bilinmeyen\") for item in resultItems if item.get(labels_column) is not None]\n data = [item.get(data_column, 0) for item in resultItems if item.get(data_column) is not None]\n\nelse:\n labels, data = [], [] # Eğer veri boşsa, etiketsiz ve veri içermeyen bir liste döneriz\n\n# **Önemli**: labels ve data uzunluklarını kontrol etme\nif len(labels) != len(data):\n print(f\"Veri uyumsuzluğu: labels uzunluğu: {len(labels)}, data uzunluğu: {len(data)}\")\n # Aynı uzunluktaki verilere göre filtreleme yapabilirsiniz\n min_length = min(len(labels), len(data))\n labels = labels[:min_length]\n data = data[:min_length]\n\nbase64_image = None\n\n# Eğer etiketsiz veya veri boşsa, görsel oluşturma\nif not labels or not data:\n print(\"Etiketler veya veri listesi boş. Grafik oluşturulamaz.\")\nelse:\n # Grafik oluşturucu fonksiyonu\n def generate_base64_image(labels, data):\n # Grafik boyutunu ve başlıkları ayarlama\n fig, ax = plt.subplots(figsize=(10, 6)) # Grafik boyutunu ayarlama\n bars = ax.bar(labels, data, width=0.6) # Bar grafiği çizme\n\n # Etiketleri döndürme ve sıkışıklığı engelleme\n plt.xticks(rotation=45, ha='right')\n plt.tight_layout()\n\n # Verileri çubukların üstüne yerleştirme (değerlerin büyük olmasını engellemek için formatlama)\n for bar in bars:\n height = bar.get_height() # Her çubuğun yüksekliği\n # Burada sayıları doğru bir formatta gösteriyoruz\n formatted_height = f\"{height:,.0f}\" # Sayıyı binlik ayraçlarla biçimlendiriyoruz\n ax.text(bar.get_x() + bar.get_width() / 2, height, formatted_height, \n ha='center', va='bottom', fontsize=10, color='black')\n\n # Base64 olarak görseli kaydetme\n buf = io.BytesIO()\n plt.savefig(buf, format='png', dpi=72) # Görseli base64'e dönüştürmek için\n buf.seek(0)\n base64_image = base64.b64encode(buf.read()).decode('utf-8')\n buf.close()\n plt.close()\n\n return base64_image\n\n # Grafik görselini base64 formatında almak\n if len(resultItems[0].keys()) <= 3:\n base64_image = generate_base64_image(labels, data)\n\n# Sonuçları döndür\nreturn [{\n \"type\": \"query\",\n \"question\": question,\n \"sql\": sql,\n \"answer\": resultItems,\n \"chart\": base64_image, # Grafik base64 formatında dönüyor\n}]\n"
|
||||
},
|
||||
"type": "n8n-nodes-python.pythonFunction",
|
||||
"typeVersion": 1,
|
||||
|
|
@ -433,6 +373,66 @@
|
|||
],
|
||||
"id": "b9c551d0-5011-492a-9ae1-9a585b059073",
|
||||
"name": "Analyze Python"
|
||||
},
|
||||
{
|
||||
"parameters": {
|
||||
"modelName": "models/gemini-2.0-flash",
|
||||
"options": {}
|
||||
},
|
||||
"type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
|
||||
"typeVersion": 1,
|
||||
"position": [
|
||||
60,
|
||||
-320
|
||||
],
|
||||
"id": "5ca631b2-0132-4cd3-b8c2-40408600f798",
|
||||
"name": "Google Gemini Chat Model",
|
||||
"credentials": {
|
||||
"googlePalmApi": {
|
||||
"id": "g7Ev8dkuHaLU7JbG",
|
||||
"name": "Google Gemini(PaLM) Api account"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"parameters": {
|
||||
"modelName": "models/gemini-2.0-flash",
|
||||
"options": {}
|
||||
},
|
||||
"type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
|
||||
"typeVersion": 1,
|
||||
"position": [
|
||||
100,
|
||||
100
|
||||
],
|
||||
"id": "61fa96f5-e48c-41ea-ad41-a721810f9512",
|
||||
"name": "Google Gemini Chat Model1",
|
||||
"credentials": {
|
||||
"googlePalmApi": {
|
||||
"id": "g7Ev8dkuHaLU7JbG",
|
||||
"name": "Google Gemini(PaLM) Api account"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"parameters": {
|
||||
"modelName": "models/gemini-2.0-flash",
|
||||
"options": {}
|
||||
},
|
||||
"type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
|
||||
"typeVersion": 1,
|
||||
"position": [
|
||||
40,
|
||||
480
|
||||
],
|
||||
"id": "479edfdb-252e-42a4-8292-7b35119a492d",
|
||||
"name": "Google Gemini Chat Model2",
|
||||
"credentials": {
|
||||
"googlePalmApi": {
|
||||
"id": "g7Ev8dkuHaLU7JbG",
|
||||
"name": "Google Gemini(PaLM) Api account"
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"pinData": {},
|
||||
|
|
@ -538,17 +538,6 @@
|
|||
]
|
||||
]
|
||||
},
|
||||
"Google Gemini Chat Model2": {
|
||||
"ai_languageModel": [
|
||||
[
|
||||
{
|
||||
"node": "AI Query",
|
||||
"type": "ai_languageModel",
|
||||
"index": 0
|
||||
}
|
||||
]
|
||||
]
|
||||
},
|
||||
"AI Query": {
|
||||
"main": [
|
||||
[
|
||||
|
|
@ -602,17 +591,6 @@
|
|||
]
|
||||
]
|
||||
},
|
||||
"Google Gemini Chat Model4": {
|
||||
"ai_languageModel": [
|
||||
[
|
||||
{
|
||||
"node": "AI Analyze",
|
||||
"type": "ai_languageModel",
|
||||
"index": 0
|
||||
}
|
||||
]
|
||||
]
|
||||
},
|
||||
"AI Analyze": {
|
||||
"main": [
|
||||
[
|
||||
|
|
@ -651,17 +629,6 @@
|
|||
]
|
||||
]
|
||||
},
|
||||
"Google Gemini Chat Model1": {
|
||||
"ai_languageModel": [
|
||||
[
|
||||
{
|
||||
"node": "AI Chat",
|
||||
"type": "ai_languageModel",
|
||||
"index": 0
|
||||
}
|
||||
]
|
||||
]
|
||||
},
|
||||
"Edit Fields1": {
|
||||
"main": [
|
||||
[
|
||||
|
|
@ -684,13 +651,46 @@
|
|||
],
|
||||
[]
|
||||
]
|
||||
},
|
||||
"Google Gemini Chat Model": {
|
||||
"ai_languageModel": [
|
||||
[
|
||||
{
|
||||
"node": "AI Chat",
|
||||
"type": "ai_languageModel",
|
||||
"index": 0
|
||||
}
|
||||
]
|
||||
]
|
||||
},
|
||||
"Google Gemini Chat Model1": {
|
||||
"ai_languageModel": [
|
||||
[
|
||||
{
|
||||
"node": "AI Query",
|
||||
"type": "ai_languageModel",
|
||||
"index": 0
|
||||
}
|
||||
]
|
||||
]
|
||||
},
|
||||
"Google Gemini Chat Model2": {
|
||||
"ai_languageModel": [
|
||||
[
|
||||
{
|
||||
"node": "AI Analyze",
|
||||
"type": "ai_languageModel",
|
||||
"index": 0
|
||||
}
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
"active": true,
|
||||
"settings": {
|
||||
"executionOrder": "v1"
|
||||
},
|
||||
"versionId": "8231e31d-59e4-488a-b55f-b7b23209223d",
|
||||
"versionId": "3ad2edbb-1c87-4819-a5ed-6cf4c542b4aa",
|
||||
"meta": {
|
||||
"templateCredsSetupCompleted": true,
|
||||
"instanceId": "98a3b71e44c71f7839b97fa3055c6c36b0c5f88cbb523bd18d164bd856e39632"
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
<meta charset="UTF-8" />
|
||||
<link rel="icon" type="image/svg+xml" href="/favicon.ico" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>Sözsoft Bilişim Hizmetleri</title>
|
||||
<title>Sözsoft</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="root"></div>
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ const Hero: React.FC = () => {
|
|||
|
||||
<div className="relative container mx-auto px-4 pt-32 pb-16">
|
||||
<div className="max-w-4xl mx-auto text-center text-white">
|
||||
<h1 className="text-5xl md:text-6xl font-bold mb-6 leading-tight">
|
||||
<h1 className="text-3xl md:text-6xl font-bold mb-6 leading-tight">
|
||||
{t('hero.title')}
|
||||
</h1>
|
||||
|
||||
|
|
|
|||
|
|
@ -54,7 +54,7 @@ const Header: React.FC = () => {
|
|||
key={link.path}
|
||||
to={link.path}
|
||||
className={`font-medium text-sm text-white hover:text-blue-400 transition-colors ${
|
||||
link.name === "Demo" ? "bg-blue-600 rounded px-2 py-1" : ""
|
||||
link.name === "Giriş" || link.name === "Login" ? "bg-blue-600 rounded px-2 py-1" : ""
|
||||
}`}
|
||||
>
|
||||
{link.name}
|
||||
|
|
@ -90,7 +90,7 @@ const Header: React.FC = () => {
|
|||
key={link.path}
|
||||
to={link.path}
|
||||
className={`font-medium text-white hover:text-blue-400 transition-colors ${
|
||||
link.name === "Demo" ? "bg-blue-600 rounded px-2 py-1" : ""
|
||||
link.name === "Giriş" || link.name === "Login" ? "bg-blue-600 rounded px-2 py-1" : ""
|
||||
}`}
|
||||
onClick={toggleMenu}
|
||||
>
|
||||
|
|
|
|||
|
|
@ -15,12 +15,12 @@ const translations = {
|
|||
"nav.about": "Hakkımızda",
|
||||
"nav.products": "Ürünler",
|
||||
"nav.services": "Hizmetler",
|
||||
"nav.demo": "Demo",
|
||||
"nav.demo": "Giriş",
|
||||
"nav.blog": "Blog",
|
||||
"nav.contact": "İletişim",
|
||||
|
||||
// Hero Section
|
||||
"hero.title": "Dünyanın Lider Dil Kursu Yazılımı",
|
||||
"hero.title": "Türkiye'nin Lider Dil Kursu Yazılımı",
|
||||
"hero.subtitle":
|
||||
"20 yılı aşkın tecrübemizle, yabancı dil okulları ve kurslar için özel olarak geliştirdiğimiz yazılım çözümlerimizle işletmenizi dijital dünyada bir adım öne taşıyoruz.",
|
||||
"hero.cta.consultation": "Ücretsiz Demo İsteyin",
|
||||
|
|
@ -130,57 +130,51 @@ const translations = {
|
|||
"services.title": "Hizmetlerimiz",
|
||||
"services.subtitle":
|
||||
"İşletmenizin dijital dönüşüm yolculuğunda ihtiyaç duyduğu tüm teknoloji çözümleri",
|
||||
"services.software.title": "Özel Yazılım Geliştirme",
|
||||
"services.software.title": "Yazılım Kurulum ve Entegrasyon",
|
||||
"services.software.desc":
|
||||
"İşletmenizin ihtiyaçlarına özel yazılım çözümleri",
|
||||
"services.web.title": "Web Uygulamaları",
|
||||
"services.web.desc": "Modern ve kullanıcı dostu web uygulamaları",
|
||||
"services.mobile.title": "Mobil Uygulamalar",
|
||||
"services.mobile.desc": "iOS ve Android için native uygulamalar",
|
||||
"services.database.title": "Veritabanı Çözümleri",
|
||||
"services.database.desc": "Güvenli ve ölçeklenebilir veritabanı sistemleri",
|
||||
"services.software.features.analysis": "Analiz ve Planlama",
|
||||
"services.software.features.design": "Tasarım ve Mimari",
|
||||
"services.software.features.development": "Yazılım Geliştirme",
|
||||
"services.software.features.testing": "Test ve Kalite Güvencesi",
|
||||
"services.software.features.maintenance": "Bakım ve Destek",
|
||||
"services.web.features.frontend": "Frontend Geliştirme",
|
||||
"services.web.features.backend": "Backend Geliştirme",
|
||||
"services.web.features.api": "API Geliştirme",
|
||||
"services.web.features.seo": "SEO Optimizasyonu",
|
||||
"Kurumunuza özel kurulum ve entegrasyon hizmetleri",
|
||||
"services.web.title": "Kullanıcı Eğitimi",
|
||||
"services.web.desc": "Kapsamlı eğitim ve destek hizmetleri",
|
||||
"services.mobile.title": "Güvenlik Hizmetleri",
|
||||
"services.mobile.desc": "Verilerinizin güvenliği için kapsamlı çözümler",
|
||||
"services.database.title": "Hosting ve Barındırma",
|
||||
"services.database.desc": "Güvenilir hosting ve barındırma hizmetleri",
|
||||
"services.software.features.analysis": "Sistem kurulumu ve yapılandırma",
|
||||
"services.software.features.design": "Mevcut verilerinizin aktarımı",
|
||||
"services.software.features.development": "Özel raporlama ayarları",
|
||||
"services.software.features.testing": "Kullanıcı yetkilendirme",
|
||||
"services.software.features.maintenance": "Şube entegrasyonları",
|
||||
"services.web.features.frontend": "Uzaktan eğitim (5 saat)",
|
||||
"services.web.features.backend": "Yerinde eğitim seçeneği",
|
||||
"services.web.features.api": "Kullanım kılavuzları",
|
||||
"services.web.features.seo": "Sürekli teknik destek",
|
||||
"services.web.features.performance": "Performans Optimizasyonu",
|
||||
"services.mobile.features.design": "Mobil Uygulama Tasarımı",
|
||||
"services.mobile.features.native": "Native Mobil Uygulama Geliştirme",
|
||||
"services.mobile.features.cross":
|
||||
"Cross-Platform Mobil Uygulama Geliştirme",
|
||||
"services.mobile.features.push": "Push Bildirim Entegrasyonu",
|
||||
"services.mobile.features.store": "App Store ve Google Play Yayınlama",
|
||||
"services.database.features.design": "Veritabanı Tasarımı",
|
||||
"services.database.features.optimization": "Veritabanı Optimizasyonu",
|
||||
"services.database.features.migration": "Veritabanı Taşıma",
|
||||
"services.database.features.backup": "Veritabanı Yedekleme",
|
||||
"services.database.features.recovery": "Veritabanı Kurtarma",
|
||||
"services.integration.title": "Sistem Entegrasyonu",
|
||||
"services.integration.desc":
|
||||
"Farklı sistemler arasında veri akışı ve entegrasyon çözümleri",
|
||||
"services.integration.features.api": "API Entegrasyonu",
|
||||
"services.integration.features.middleware": "Middleware Geliştirme",
|
||||
"services.integration.features.legacy": "Legacy Sistem Entegrasyonu",
|
||||
"services.integration.features.realtime":
|
||||
"Gerçek Zamanlı Veri Entegrasyonu",
|
||||
"services.integration.features.monitoring":
|
||||
"Entegrasyon İzleme ve Yönetimi",
|
||||
"services.consulting.title": "Teknoloji Danışmanlığı",
|
||||
"services.consulting.desc":
|
||||
"İşletmenizin teknoloji stratejisi ve yol haritası için uzman danışmanlık",
|
||||
"services.consulting.features.tech": "Teknoloji Stratejisi",
|
||||
"services.consulting.features.project": "Proje Yönetimi Danışmanlığı",
|
||||
"services.consulting.features.digital": "Dijital Dönüşüm Danışmanlığı",
|
||||
"services.consulting.features.risk": "Risk Yönetimi Danışmanlığı",
|
||||
"services.consulting.features.training": "Teknoloji Eğitimleri",
|
||||
"services.mobile.features.design": "Veri yedekleme hizmeti",
|
||||
"services.mobile.features.native": "IP kısıtlama ayarları",
|
||||
"services.mobile.features.cross": "Kullanıcı erişim kontrolü",
|
||||
"services.mobile.features.push": "SSL sertifika yönetimi",
|
||||
"services.mobile.features.store": "Güvenlik duvarı yapılandırması",
|
||||
"services.database.features.design": "Yüksek performanslı sunucular",
|
||||
"services.database.features.optimization": "7/24 sunucu izleme",
|
||||
"services.database.features.migration": "Otomatik yedekleme",
|
||||
"services.database.features.backup": "DDoS koruması",
|
||||
"services.database.features.recovery": "Teknik destek",
|
||||
"services.integration.title": "SMS ve İletişim Hizmetleri",
|
||||
"services.integration.desc": "Toplu iletişim çözümleri",
|
||||
"services.integration.features.api": "Toplu SMS paketleri",
|
||||
"services.integration.features.middleware": "E-posta entegrasyonu",
|
||||
"services.integration.features.legacy": "Otomatik bildirimler",
|
||||
"services.integration.features.realtime": "Veli bilgilendirme sistemi",
|
||||
"services.integration.features.monitoring": "SMS şablonları",
|
||||
"services.consulting.title": "Bakım ve Destek",
|
||||
"services.consulting.desc": "Sürekli teknik destek ve bakım hizmetleri",
|
||||
"services.consulting.features.tech": "7/24 teknik destek",
|
||||
"services.consulting.features.project": "Periyodik bakım",
|
||||
"services.consulting.features.digital": "Sistem güncellemeleri",
|
||||
"services.consulting.features.risk": "Sorun giderme",
|
||||
"services.consulting.features.training": "Performans optimizasyonu",
|
||||
"services.security.title": "Siber Güvenlik",
|
||||
"services.security.desc":
|
||||
"İşletmenizin dijital varlıklarını siber tehditlere karşı koruma",
|
||||
"services.security.desc": "İşletmenizin dijital varlıklarını siber tehditlere karşı koruma",
|
||||
"services.security.features.analysis": "Güvenlik Açığı Analizi",
|
||||
"services.security.features.penetration": "Sızma Testleri",
|
||||
"services.security.features.firewall": "Güvenlik Duvarı Yönetimi",
|
||||
|
|
@ -195,6 +189,88 @@ const translations = {
|
|||
"services.maintenance.features.updates": "Güncelleme Yönetimi",
|
||||
"services.maintenance.features.support": "Teknik Destek",
|
||||
|
||||
// Services Page - Support Plans
|
||||
"services.support.title": "Destek Paketleri",
|
||||
"services.support.branchRemote.title": "Şube Uzaktan Destek",
|
||||
"services.support.branchRemote.price": "4,200 ₺",
|
||||
"services.support.branchRemote.period": "/ Ay",
|
||||
"services.support.branchRemote.features.priority": "7/24 öncelikli destek",
|
||||
"services.support.branchRemote.features.remote": "Uzaktan sorun çözümü",
|
||||
"services.support.branchRemote.features.optimization": "Sistem optimizasyonu",
|
||||
"services.support.branchRemote.features.maintenance": "Düzenli bakım",
|
||||
"services.support.branchRemote.features.consulting": "Özel danışmanlık",
|
||||
"services.support.backup.title": "Veri Yedekleme",
|
||||
"services.support.backup.price": "1,700 ₺",
|
||||
"services.support.backup.period": "/ Yıl",
|
||||
"services.support.backup.features.daily": "Günlük yedekleme",
|
||||
"services.support.backup.features.encrypted": "Şifreli depolama",
|
||||
"services.support.backup.features.recovery": "Hızlı veri kurtarma",
|
||||
"services.support.backup.features.verification": "Yedek doğrulama",
|
||||
"services.support.backup.features.access": "7/24 erişim",
|
||||
"services.support.sms.title": "SMS Paketleri",
|
||||
"services.support.sms.price": "750 ₺",
|
||||
"services.support.sms.period": "'den başlayan",
|
||||
"services.support.sms.features.packages": "5.000 SMS'den başlayan paketler",
|
||||
"services.support.sms.features.bulk": "Toplu gönderim",
|
||||
"services.support.sms.features.template": "Şablon yönetimi",
|
||||
"services.support.sms.features.reporting": "Raporlama",
|
||||
"services.support.sms.features.api": "API desteği",
|
||||
"services.support.contactButton": "İletişime Geçin",
|
||||
|
||||
|
||||
// Products Page - Modules
|
||||
"products.modules.sales.title": "Satış ve Reklam Yönetimi",
|
||||
"products.modules.sales.features.appointment": "Randevu takibi",
|
||||
"products.modules.sales.features.meeting": "Görüşme takibi",
|
||||
"products.modules.sales.features.campaign": "Kampanya yönetimi",
|
||||
"products.modules.sales.features.adStats": "Reklam geri dönüş istatistikleri",
|
||||
"products.modules.sales.features.applicant": "Aday başvuru takibi",
|
||||
"products.modules.sales.features.corporate": "Kurumsal satış yönetimi",
|
||||
"products.modules.sales.features.consultant": "Danışman performans takibi",
|
||||
"products.modules.student.title": "Öğrenci Yönetimi",
|
||||
"products.modules.student.features.sales": "Program satışları ve takibi",
|
||||
"products.modules.student.features.contract": "Kayıt sözleşmesi ve evrak yönetimi",
|
||||
"products.modules.student.features.installment": "Taksit ve ödeme planı",
|
||||
"products.modules.student.features.level": "Seviye takibi",
|
||||
"products.modules.student.features.attendance": "Yoklama takibi",
|
||||
"products.modules.student.features.exam": "Sınav sonuçları",
|
||||
"products.modules.student.features.homework": "Ödev takibi",
|
||||
"products.modules.accounting.title": "Muhasebe Yönetimi",
|
||||
"products.modules.accounting.features.cash": "Anlık kasa takibi",
|
||||
"products.modules.accounting.features.bank": "Banka hesap takibi",
|
||||
"products.modules.accounting.features.current": "Cari hesap yönetimi",
|
||||
"products.modules.accounting.features.teacherFee": "Öğretmen ücretleri hesaplama",
|
||||
"products.modules.accounting.features.consultantCommission": "Danışman prim hesaplama",
|
||||
"products.modules.accounting.features.personnelSalary": "Personel maaş yönetimi",
|
||||
"products.modules.accounting.features.incomeExpense": "Gelir/gider tablosu",
|
||||
"products.modules.reporting.title": "Raporlama ve Analiz",
|
||||
"products.modules.reporting.features.dynamic": "Dinamik raporlama",
|
||||
"products.modules.reporting.features.ready": "İstatistiki hazır raporlar",
|
||||
"products.modules.reporting.features.periodic": "Periyodik mail bildirimleri",
|
||||
"products.modules.reporting.features.performance": "Performans analizleri",
|
||||
"products.modules.reporting.features.branch": "Şube bazlı raporlar",
|
||||
"products.modules.reporting.features.financial": "Finansal analizler",
|
||||
"products.modules.reporting.features.studentSuccess": "Öğrenci başarı takibi",
|
||||
|
||||
// Products Page - Pricing
|
||||
"products.pricing.title": "Lisans Seçenekleri",
|
||||
"products.pricing.user.title": "Kullanıcı Lisansı",
|
||||
"products.pricing.user.price": "750 ₺",
|
||||
"products.pricing.user.period": "/ Ay",
|
||||
"products.pricing.user.yearlyPrice": "2,900 ₺ / Yıl",
|
||||
"products.pricing.user.description": "Şube personelleri için temel kullanıcı lisansı",
|
||||
"products.pricing.teacher.title": "Öğretmen Lisansı",
|
||||
"products.pricing.teacher.price": "350 ₺",
|
||||
"products.pricing.teacher.period": "/ Ay",
|
||||
"products.pricing.teacher.yearlyPrice": "1,400 ₺ / Yıl",
|
||||
"products.pricing.teacher.description": "Öğretmenler için özel yetkilendirilmiş lisans",
|
||||
"products.pricing.founder.title": "Kurucu Lisansı",
|
||||
"products.pricing.founder.price": "300 ₺",
|
||||
"products.pricing.founder.period": "/ Ay",
|
||||
"products.pricing.founder.yearlyPrice": "1,100 ₺ / Yıl",
|
||||
"products.pricing.founder.description": "iOS ve Android üzerinden yönetim imkanı",
|
||||
|
||||
|
||||
// Contact Page
|
||||
"contact.title": "İletişim",
|
||||
"contact.subtitle": "Sorularınız için bizimle iletişime geçin",
|
||||
|
|
@ -223,7 +299,7 @@ const translations = {
|
|||
"about.stats.support": "7/24 Destek",
|
||||
"about.stats.countries": "Ülke",
|
||||
"about.description.part1":
|
||||
"Sözsoft Bilişim Hizmetleri, eğitim sektörünün dijital dönüşümüne katkı sağlamak amacıyla 2012 yılında kursyazilimi.com markasıyla kurulmuştur. Kuruluşumuzun temelinde, 15 yılı aşkın yazılım tecrübesi ve farklı sektörlerde edinilen güçlü bir birikim yatmaktadır. Uzun yıllar boyunca tekstil sektörünün önde gelen markalarına büyük ölçekli yazılım çözümleri sunan uzman kadromuz, bu tecrübesini eğitim sektörünün dinamik ihtiyaçlarıyla harmanlayarak yenilikçi projelere imza atmaktadır. Sözsoft, sadece yazılım geliştirmekle kalmaz; kurumlara özel, sürdürülebilir ve kullanıcı dostu sistemler geliştirerek gerçek iş değeri yaratmayı hedefler. “Alışılagelmişin dışında ayrıcalıklı hizmet ve her an ulaşılabilirlik” ilkesiyle hareket eden ekibimiz, eğitim kurumlarının operasyonel süreçlerini dijitalleştirerek, verimliliklerini artırmalarına ve çağın gerekliliklerine uyum sağlamalarına destek olmaktadır. Bugün Sözsoft, Türkiye’nin dört bir yanındaki eğitim kurumlarının güvenilir teknoloji çözüm ortağı olmanın gururunu taşımaktadır.",
|
||||
"Sözsoft Bilişim Hizmetleri, eğitim sektörünün dijital dönüşümüne katkı sağlamak amacıyla 2012 yılında sozsoft.com markasıyla kurulmuştur. Kuruluşumuzun temelinde, 15 yılı aşkın yazılım tecrübesi ve farklı sektörlerde edinilen güçlü bir birikim yatmaktadır. Uzun yıllar boyunca tekstil sektörünün önde gelen markalarına büyük ölçekli yazılım çözümleri sunan uzman kadromuz, bu tecrübesini eğitim sektörünün dinamik ihtiyaçlarıyla harmanlayarak yenilikçi projelere imza atmaktadır. Sözsoft, sadece yazılım geliştirmekle kalmaz; kurumlara özel, sürdürülebilir ve kullanıcı dostu sistemler geliştirerek gerçek iş değeri yaratmayı hedefler. “Alışılagelmişin dışında ayrıcalıklı hizmet ve her an ulaşılabilirlik” ilkesiyle hareket eden ekibimiz, eğitim kurumlarının operasyonel süreçlerini dijitalleştirerek, verimliliklerini artırmalarına ve çağın gerekliliklerine uyum sağlamalarına destek olmaktadır. Bugün Sözsoft, Türkiye’nin dört bir yanındaki eğitim kurumlarının güvenilir teknoloji çözüm ortağı olmanın gururunu taşımaktadır.",
|
||||
"about.description.motto":
|
||||
'"Tutkumuz teknoloji, hedefimiz sürdürülebilir verimliliktir."',
|
||||
"about.description.part2":
|
||||
|
|
@ -318,7 +394,7 @@ const translations = {
|
|||
"nav.about": "About Us",
|
||||
"nav.products": "Products",
|
||||
"nav.services": "Services",
|
||||
"nav.demo": "Demo",
|
||||
"nav.demo": "Login",
|
||||
"nav.blog": "Blog",
|
||||
"nav.contact": "Contact",
|
||||
|
||||
|
|
@ -388,7 +464,7 @@ const translations = {
|
|||
"products.title": "Our Products",
|
||||
"products.subtitle":
|
||||
"Software solutions developed specifically for your business needs",
|
||||
"products.kurs.title": "ERP Solution",
|
||||
"products.kurs.title": "Course Management Automation",
|
||||
"products.kurs.desc":
|
||||
"Manage all your business processes from a single platform.",
|
||||
"products.crm.title": "CRM System",
|
||||
|
|
@ -500,6 +576,88 @@ const translations = {
|
|||
"services.maintenance.features.updates": "Update Management",
|
||||
"services.maintenance.features.support": "Technical Support",
|
||||
|
||||
// Services Page - Support Plans
|
||||
"services.support.title": "Support Packages",
|
||||
"services.support.branchRemote.title": "Branch Remote Support",
|
||||
"services.support.branchRemote.price": "₺4,200",
|
||||
"services.support.branchRemote.period": "/ Month",
|
||||
"services.support.branchRemote.features.priority": "24/7 priority support",
|
||||
"services.support.branchRemote.features.remote": "Remote troubleshooting",
|
||||
"services.support.branchRemote.features.optimization": "System optimization",
|
||||
"services.support.branchRemote.features.maintenance": "Regular maintenance",
|
||||
"services.support.branchRemote.features.consulting": "Specialized consulting",
|
||||
"services.support.backup.title": "Data Backup",
|
||||
"services.support.backup.price": "₺1,700",
|
||||
"services.support.backup.period": "/ Year",
|
||||
"services.support.backup.features.daily": "Daily backup",
|
||||
"services.support.backup.features.encrypted": "Encrypted storage",
|
||||
"services.support.backup.features.recovery": "Fast data recovery",
|
||||
"services.support.backup.features.verification": "Backup verification",
|
||||
"services.support.backup.features.access": "24/7 access",
|
||||
"services.support.sms.title": "SMS Packages",
|
||||
"services.support.sms.price": "₺750",
|
||||
"services.support.sms.period": "starting from",
|
||||
"services.support.sms.features.packages": "Packages starting from 5,000 SMS",
|
||||
"services.support.sms.features.bulk": "Bulk sending",
|
||||
"services.support.sms.features.template": "Template management",
|
||||
"services.support.sms.features.reporting": "Reporting",
|
||||
"services.support.sms.features.api": "API support",
|
||||
"services.support.contactButton": "Get in Touch",
|
||||
|
||||
|
||||
// Products Page - Modules
|
||||
"products.modules.sales.title": "Sales and Advertising Management",
|
||||
"products.modules.sales.features.appointment": "Appointment tracking",
|
||||
"products.modules.sales.features.meeting": "Meeting tracking",
|
||||
"products.modules.sales.features.campaign": "Campaign management",
|
||||
"products.modules.sales.features.adStats": "Advertising return statistics",
|
||||
"products.modules.sales.features.applicant": "Applicant tracking",
|
||||
"products.modules.sales.features.corporate": "Corporate sales management",
|
||||
"products.modules.sales.features.consultant": "Consultant performance tracking",
|
||||
"products.modules.student.title": "Student Management",
|
||||
"products.modules.student.features.sales": "Program sales and tracking",
|
||||
"products.modules.student.features.contract": "Registration contract and document management",
|
||||
"products.modules.student.features.installment": "Installment and payment plan",
|
||||
"products.modules.student.features.level": "Level tracking",
|
||||
"products.modules.student.features.attendance": "Attendance tracking",
|
||||
"products.modules.student.features.exam": "Exam results",
|
||||
"products.modules.student.features.homework": "Homework tracking",
|
||||
"products.modules.accounting.title": "Accounting Management",
|
||||
"products.modules.accounting.features.cash": "Instant cash tracking",
|
||||
"products.modules.accounting.features.bank": "Bank account tracking",
|
||||
"products.modules.accounting.features.current": "Current account management",
|
||||
"products.modules.accounting.features.teacherFee": "Teacher fee calculation",
|
||||
"products.modules.accounting.features.consultantCommission": "Consultant commission calculation",
|
||||
"products.modules.accounting.features.personnelSalary": "Personnel salary management",
|
||||
"products.modules.accounting.features.incomeExpense": "Income/expense statement",
|
||||
"products.modules.reporting.title": "Reporting and Analysis",
|
||||
"products.modules.reporting.features.dynamic": "Dynamic reporting",
|
||||
"products.modules.reporting.features.ready": "Ready statistical reports",
|
||||
"products.modules.reporting.features.periodic": "Periodic email notifications",
|
||||
"products.modules.reporting.features.performance": "Performance analysis",
|
||||
"products.modules.reporting.features.branch": "Branch-based reports",
|
||||
"products.modules.reporting.features.financial": "Financial analysis",
|
||||
"products.modules.reporting.features.studentSuccess": "Student success tracking",
|
||||
|
||||
// Products Page - Pricing
|
||||
"products.pricing.title": "License Options",
|
||||
"products.pricing.user.title": "User License",
|
||||
"products.pricing.user.price": "₺750",
|
||||
"products.pricing.user.period": "/ Month",
|
||||
"products.pricing.user.yearlyPrice": "₺2,900 / Year",
|
||||
"products.pricing.user.description": "Basic user license for branch personnel",
|
||||
"products.pricing.teacher.title": "Teacher License",
|
||||
"products.pricing.teacher.price": "₺350",
|
||||
"products.pricing.teacher.period": "/ Month",
|
||||
"products.pricing.teacher.yearlyPrice": "₺1,400 / Year",
|
||||
"products.pricing.teacher.description": "Special authorized license for teachers",
|
||||
"products.pricing.founder.title": "Founder License",
|
||||
"products.pricing.founder.price": "₺300",
|
||||
"products.pricing.founder.period": "/ Month",
|
||||
"products.pricing.founder.yearlyPrice": "₺1,100 / Year",
|
||||
"products.pricing.founder.description": "Management capability via iOS and Android",
|
||||
|
||||
|
||||
// Contact Page
|
||||
"contact.title": "Contact",
|
||||
"contact.subtitle": "Get in touch with us for any inquiries",
|
||||
|
|
@ -528,7 +686,7 @@ const translations = {
|
|||
"about.stats.support": "24/7 Support",
|
||||
"about.stats.countries": "Countries",
|
||||
"about.description.part1":
|
||||
"Sözsoft Information Technologies was founded in 2012 under the brand kursyazilimi.com to contribute to the digital transformation of the education sector. Our foundation is built on over 15 years of software experience and a strong background gained across various industries. Our expert team, which has developed large-scale software solutions for leading textile companies for many years, now channels its experience into the dynamic needs of the education sector by delivering innovative projects. At Sözsoft, we don’t just develop software; we aim to create real business value by building sustainable and user-friendly systems tailored to institutions. Guided by the principle of 'exclusive service beyond the ordinary and constant accessibility', our team supports educational institutions in digitizing their operational processes to enhance efficiency and adapt to the demands of the modern age. Today, Sözsoft proudly serves as a trusted technology partner for educational institutions across Turkey.",
|
||||
"Sözsoft Information Technologies was founded in 2012 under the brand sozsoft.com to contribute to the digital transformation of the education sector. Our foundation is built on over 15 years of software experience and a strong background gained across various industries. Our expert team, which has developed large-scale software solutions for leading textile companies for many years, now channels its experience into the dynamic needs of the education sector by delivering innovative projects. At Sözsoft, we don’t just develop software; we aim to create real business value by building sustainable and user-friendly systems tailored to institutions. Guided by the principle of 'exclusive service beyond the ordinary and constant accessibility', our team supports educational institutions in digitizing their operational processes to enhance efficiency and adapt to the demands of the modern age. Today, Sözsoft proudly serves as a trusted technology partner for educational institutions across Turkey.",
|
||||
"about.description.motto":
|
||||
'"Our passion is technology, our goal is sustainable efficiency."',
|
||||
"about.description.part2":
|
||||
|
|
|
|||
|
|
@ -1,98 +1,168 @@
|
|||
import React from 'react';
|
||||
import { ArrowRight, CheckCircle } from 'lucide-react';
|
||||
import { Link } from 'react-router-dom';
|
||||
import { useLanguage } from '../context/LanguageContext';
|
||||
import React from "react";
|
||||
import {
|
||||
ArrowRight,
|
||||
BarChart,
|
||||
BookOpen,
|
||||
CheckCircle,
|
||||
CreditCard,
|
||||
Users,
|
||||
} from "lucide-react";
|
||||
import { Link } from "react-router-dom";
|
||||
import { useLanguage } from "../context/LanguageContext";
|
||||
|
||||
const Products: React.FC = () => {
|
||||
const { t } = useLanguage();
|
||||
|
||||
const products = [
|
||||
{
|
||||
title: t('products.kurs.title'),
|
||||
description: t('products.kurs.desc'),
|
||||
image: 'https://images.pexels.com/photos/3183183/pexels-photo-3183183.jpeg?auto=compress&cs=tinysrgb&w=1920',
|
||||
title: t("products.kurs.title"),
|
||||
description: t("products.kurs.desc"),
|
||||
image:
|
||||
"https://images.pexels.com/photos/3183183/pexels-photo-3183183.jpeg?auto=compress&cs=tinysrgb&w=1920",
|
||||
features: [
|
||||
t('products.kurs.features.inventory'),
|
||||
t('products.kurs.features.purchasing'),
|
||||
t('products.kurs.features.sales'),
|
||||
t('products.kurs.features.accounting'),
|
||||
t('products.kurs.features.reporting'),
|
||||
t('products.kurs.features.mobile')
|
||||
]
|
||||
t("products.kurs.features.inventory"),
|
||||
t("products.kurs.features.purchasing"),
|
||||
t("products.kurs.features.sales"),
|
||||
t("products.kurs.features.accounting"),
|
||||
t("products.kurs.features.reporting"),
|
||||
t("products.kurs.features.mobile"),
|
||||
],
|
||||
},
|
||||
];
|
||||
|
||||
const modules = [
|
||||
{
|
||||
image:
|
||||
"https://images.pexels.com/photos/3183183/pexels-photo-3183183.jpeg?auto=compress&cs=tinysrgb&w=1920",
|
||||
title: t("products.modules.sales.title"),
|
||||
icon: <Users className="w-16 h-16 text-white" />,
|
||||
features: [
|
||||
t("products.modules.sales.features.appointment"),
|
||||
t("products.modules.sales.features.meeting"),
|
||||
t("products.modules.sales.features.campaign"),
|
||||
t("products.modules.sales.features.adStats"),
|
||||
t("products.modules.sales.features.applicant"),
|
||||
t("products.modules.sales.features.corporate"),
|
||||
t("products.modules.sales.features.consultant"),
|
||||
],
|
||||
color: "bg-blue-600",
|
||||
},
|
||||
{
|
||||
title: t('products.crm.title'),
|
||||
description: t('products.crm.desc'),
|
||||
image: 'https://images.pexels.com/photos/3184291/pexels-photo-3184291.jpeg?auto=compress&cs=tinysrgb&w=1920',
|
||||
description: t("products.crm.desc"),
|
||||
image:
|
||||
"https://images.pexels.com/photos/3184291/pexels-photo-3184291.jpeg?auto=compress&cs=tinysrgb&w=1920",
|
||||
title: t("products.modules.student.title"),
|
||||
icon: <BookOpen className="w-16 h-16 text-white" />,
|
||||
features: [
|
||||
t('products.crm.features.tracking'),
|
||||
t('products.crm.features.opportunities'),
|
||||
t('products.crm.features.email'),
|
||||
t('products.crm.features.tasks'),
|
||||
t('products.crm.features.calendar'),
|
||||
t('products.crm.features.analytics')
|
||||
]
|
||||
t("products.modules.student.features.sales"),
|
||||
t("products.modules.student.features.contract"),
|
||||
t("products.modules.student.features.installment"),
|
||||
t("products.modules.student.features.level"),
|
||||
t("products.modules.student.features.attendance"),
|
||||
t("products.modules.student.features.exam"),
|
||||
t("products.modules.student.features.homework"),
|
||||
],
|
||||
color: "bg-purple-600",
|
||||
},
|
||||
{
|
||||
title: t('products.ecommerce.title'),
|
||||
description: t('products.ecommerce.desc'),
|
||||
image: 'https://images.pexels.com/photos/3183132/pexels-photo-3183132.jpeg?auto=compress&cs=tinysrgb&w=1920',
|
||||
description: t("products.ecommerce.desc"),
|
||||
image:
|
||||
"https://images.pexels.com/photos/3183132/pexels-photo-3183132.jpeg?auto=compress&cs=tinysrgb&w=1920",
|
||||
title: t("products.modules.accounting.title"),
|
||||
icon: <CreditCard className="w-16 h-16 text-white" />,
|
||||
features: [
|
||||
t('products.ecommerce.features.responsive'),
|
||||
t('products.ecommerce.features.payment'),
|
||||
t('products.ecommerce.features.inventory'),
|
||||
t('products.ecommerce.features.seo'),
|
||||
t('products.ecommerce.features.analytics'),
|
||||
t('products.ecommerce.features.marketplace')
|
||||
]
|
||||
t("products.modules.accounting.features.cash"),
|
||||
t("products.modules.accounting.features.bank"),
|
||||
t("products.modules.accounting.features.current"),
|
||||
t("products.modules.accounting.features.teacherFee"),
|
||||
t("products.modules.accounting.features.consultantCommission"),
|
||||
t("products.modules.accounting.features.personnelSalary"),
|
||||
t("products.modules.accounting.features.incomeExpense"),
|
||||
],
|
||||
color: "bg-green-600",
|
||||
},
|
||||
{
|
||||
title: t('products.hr.title'),
|
||||
description: t('products.hr.desc'),
|
||||
image: 'https://images.pexels.com/photos/3184292/pexels-photo-3184292.jpeg?auto=compress&cs=tinysrgb&w=1920',
|
||||
description: t("products.hr.desc"),
|
||||
image:
|
||||
"https://images.pexels.com/photos/3184292/pexels-photo-3184292.jpeg?auto=compress&cs=tinysrgb&w=1920",
|
||||
title: t("products.modules.reporting.title"),
|
||||
icon: <BarChart className="w-16 h-16 text-white" />,
|
||||
features: [
|
||||
t('products.hr.features.personnel'),
|
||||
t('products.hr.features.leave'),
|
||||
t('products.hr.features.performance'),
|
||||
t('products.hr.features.payroll'),
|
||||
t('products.hr.features.training'),
|
||||
t('products.hr.features.digital')
|
||||
]
|
||||
}
|
||||
t("products.modules.reporting.features.dynamic"),
|
||||
t("products.modules.reporting.features.ready"),
|
||||
t("products.modules.reporting.features.periodic"),
|
||||
t("products.modules.reporting.features.performance"),
|
||||
t("products.modules.reporting.features.branch"),
|
||||
t("products.modules.reporting.features.financial"),
|
||||
t("products.modules.reporting.features.studentSuccess"),
|
||||
],
|
||||
color: "bg-red-600",
|
||||
},
|
||||
];
|
||||
|
||||
const pricing = [
|
||||
{
|
||||
title: t("products.pricing.user.title"),
|
||||
price: t("products.pricing.user.price"),
|
||||
period: t("products.pricing.user.period"),
|
||||
yearlyPrice: t("products.pricing.user.yearlyPrice"),
|
||||
description: t("products.pricing.user.description"),
|
||||
},
|
||||
{
|
||||
title: t("products.pricing.teacher.title"),
|
||||
price: t("products.pricing.teacher.price"),
|
||||
period: t("products.pricing.teacher.period"),
|
||||
yearlyPrice: t("products.pricing.teacher.yearlyPrice"),
|
||||
description: t("products.pricing.teacher.description"),
|
||||
},
|
||||
{
|
||||
title: t("products.pricing.founder.title"),
|
||||
price: t("products.pricing.founder.price"),
|
||||
period: t("products.pricing.founder.period"),
|
||||
yearlyPrice: t("products.pricing.founder.yearlyPrice"),
|
||||
description: t("products.pricing.founder.description"),
|
||||
},
|
||||
];
|
||||
|
||||
return (
|
||||
<div className="min-h-screen bg-gray-50">
|
||||
{/* Hero Section */}
|
||||
<div className="relative bg-blue-900 text-white py-24">
|
||||
<div className="absolute inset-0 opacity-20" style={{
|
||||
backgroundImage: 'url("https://images.pexels.com/photos/3183150/pexels-photo-3183150.jpeg?auto=compress&cs=tinysrgb&w=1920")',
|
||||
backgroundSize: 'cover',
|
||||
backgroundPosition: 'center',
|
||||
}}></div>
|
||||
<div
|
||||
className="absolute inset-0 opacity-20"
|
||||
style={{
|
||||
backgroundImage:
|
||||
'url("https://images.pexels.com/photos/3183150/pexels-photo-3183150.jpeg?auto=compress&cs=tinysrgb&w=1920")',
|
||||
backgroundSize: "cover",
|
||||
backgroundPosition: "center",
|
||||
}}
|
||||
></div>
|
||||
<div className="container mx-auto pt-16 px-4 relative">
|
||||
<h1 className="text-5xl font-bold mb-6">{t('products.title')}</h1>
|
||||
<p className="text-xl max-w-3xl">
|
||||
{t('products.subtitle')}
|
||||
</p>
|
||||
<h1 className="text-5xl font-bold mb-6">{t("products.title")}</h1>
|
||||
<p className="text-xl max-w-3xl">{t("products.subtitle")}</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Products Grid */}
|
||||
<div className="py-16">
|
||||
<div className="py-10">
|
||||
<div className="container mx-auto px-4">
|
||||
<div className="grid grid-cols-1 lg:grid-cols-2 gap-8">
|
||||
<div className="grid grid-cols-1 lg:grid-cols-1 gap-8">
|
||||
{products.map((product, index) => (
|
||||
<div key={index} className="bg-white rounded-xl shadow-lg overflow-hidden">
|
||||
<div
|
||||
key={index}
|
||||
className="bg-white rounded-xl shadow-lg overflow-hidden"
|
||||
>
|
||||
<div className="aspect-w-16 aspect-h-9">
|
||||
<img
|
||||
src={product.image}
|
||||
<img
|
||||
src={product.image}
|
||||
alt={product.title}
|
||||
className="object-cover w-full h-64"
|
||||
/>
|
||||
</div>
|
||||
<div className="p-8">
|
||||
<h2 className="text-2xl font-bold text-gray-900 mb-4">{product.title}</h2>
|
||||
<h2 className="text-2xl font-bold text-gray-900 mb-4">
|
||||
{product.title}
|
||||
</h2>
|
||||
<p className="text-gray-600 mb-6">{product.description}</p>
|
||||
<div className="space-y-3">
|
||||
{product.features.map((feature, fIndex) => (
|
||||
|
|
@ -102,13 +172,6 @@ const Products: React.FC = () => {
|
|||
</div>
|
||||
))}
|
||||
</div>
|
||||
<Link
|
||||
to="/contact"
|
||||
className="mt-8 flex items-center space-x-2 bg-blue-600 text-white px-6 py-3 rounded-lg hover:bg-blue-700 transition-colors"
|
||||
>
|
||||
<span>{t('common.learnMore')}</span>
|
||||
<ArrowRight size={20} />
|
||||
</Link>
|
||||
</div>
|
||||
</div>
|
||||
))}
|
||||
|
|
@ -116,18 +179,60 @@ const Products: React.FC = () => {
|
|||
</div>
|
||||
</div>
|
||||
|
||||
{/* Modules Grid */}
|
||||
<div className="py-10">
|
||||
<div className="container mx-auto px-4">
|
||||
<div className="grid grid-cols-1 md:grid-cols-2 gap-8">
|
||||
{modules.map((module, index) => (
|
||||
<div
|
||||
key={index}
|
||||
className={`${module.color} rounded-xl p-8 text-white`}
|
||||
>
|
||||
<div className="mb-6">{module.icon}</div>
|
||||
<h3 className="text-2xl font-bold mb-6">{module.title}</h3>
|
||||
<ul className="space-y-3">
|
||||
{module.features.map((feature, fIndex) => (
|
||||
<li key={fIndex} className="flex items-center space-x-2">
|
||||
<CheckCircle className="w-5 h-5 flex-shrink-0" />
|
||||
<span>{feature}</span>
|
||||
</li>
|
||||
))}
|
||||
</ul>
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Pricing Section */}
|
||||
<div className="py-10 bg-white">
|
||||
<div className="container mx-auto px-4">
|
||||
<h2 className="text-3xl font-bold text-center mb-10">
|
||||
{t("products.pricing.title")}
|
||||
</h2>
|
||||
<div className="grid grid-cols-1 md:grid-cols-3 gap-8">
|
||||
{pricing.map((plan, index) => (
|
||||
<div key={index} className="bg-white rounded-xl shadow-lg p-8 hover:shadow-xl transition-shadow">
|
||||
<h3 className="text-xl font-bold mb-4">{plan.title}</h3>
|
||||
<p className="text-gray-600 mb-8">{plan.description}</p>
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Call to Action */}
|
||||
<div className="bg-blue-900 text-white py-16">
|
||||
<div className="container mx-auto px-4 text-center">
|
||||
<h2 className="text-3xl font-bold mb-6">{t('products.cta.title')}</h2>
|
||||
<h2 className="text-3xl font-bold mb-6">{t("products.cta.title")}</h2>
|
||||
<p className="text-xl mb-8 max-w-2xl mx-auto">
|
||||
{t('products.cta.description')}
|
||||
{t("products.cta.description")}
|
||||
</p>
|
||||
<Link
|
||||
to="/demo"
|
||||
<Link
|
||||
to="/contact"
|
||||
className="bg-white text-blue-900 px-8 py-3 rounded-lg font-semibold hover:bg-blue-50 transition-colors"
|
||||
>
|
||||
{t('products.cta.demo')}
|
||||
{t("products.cta.demo")}
|
||||
</Link>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -135,4 +240,4 @@ const Products: React.FC = () => {
|
|||
);
|
||||
};
|
||||
|
||||
export default Products;
|
||||
export default Products;
|
||||
|
|
|
|||
|
|
@ -1,7 +1,17 @@
|
|||
import React from 'react';
|
||||
import { Code2, Database, Globe2, Smartphone, Server, Users, Shield, Settings } from 'lucide-react';
|
||||
import { Link } from 'react-router-dom';
|
||||
import { useLanguage } from '../context/LanguageContext';
|
||||
import React from "react";
|
||||
import {
|
||||
Code2,
|
||||
Database,
|
||||
Globe2,
|
||||
Smartphone,
|
||||
Server,
|
||||
Users,
|
||||
Shield,
|
||||
Settings,
|
||||
CheckCircle,
|
||||
} from "lucide-react";
|
||||
import { Link } from "react-router-dom";
|
||||
import { useLanguage } from "../context/LanguageContext";
|
||||
|
||||
const Services: React.FC = () => {
|
||||
const { t } = useLanguage();
|
||||
|
|
@ -9,92 +19,133 @@ const Services: React.FC = () => {
|
|||
const services = [
|
||||
{
|
||||
icon: <Code2 className="w-12 h-12 text-blue-600" />,
|
||||
title: t('services.software.title'),
|
||||
description: t('services.software.desc'),
|
||||
title: t("services.software.title"),
|
||||
description: t("services.software.desc"),
|
||||
features: [
|
||||
t('services.software.features.analysis'),
|
||||
t('services.software.features.design'),
|
||||
t('services.software.features.development'),
|
||||
t('services.software.features.testing'),
|
||||
t('services.software.features.maintenance')
|
||||
]
|
||||
t("services.software.features.analysis"),
|
||||
t("services.software.features.design"),
|
||||
t("services.software.features.development"),
|
||||
t("services.software.features.testing"),
|
||||
t("services.software.features.maintenance"),
|
||||
],
|
||||
},
|
||||
{
|
||||
icon: <Globe2 className="w-12 h-12 text-purple-600" />,
|
||||
title: t('services.web.title'),
|
||||
description: t('services.web.desc'),
|
||||
icon: <Users className="w-12 h-12 text-purple-600" />,
|
||||
title: t("services.web.title"),
|
||||
description: t("services.web.desc"),
|
||||
features: [
|
||||
t('services.web.features.frontend'),
|
||||
t('services.web.features.backend'),
|
||||
t('services.web.features.api'),
|
||||
t('services.web.features.seo'),
|
||||
t('services.web.features.performance')
|
||||
]
|
||||
t("services.web.features.frontend"),
|
||||
t("services.web.features.backend"),
|
||||
t("services.web.features.api"),
|
||||
t("services.web.features.seo"),
|
||||
t("services.web.features.performance"),
|
||||
],
|
||||
},
|
||||
{
|
||||
icon: <Smartphone className="w-12 h-12 text-green-600" />,
|
||||
title: t('services.mobile.title'),
|
||||
description: t('services.mobile.desc'),
|
||||
icon: <Shield className="w-12 h-12 text-green-600" />,
|
||||
title: t("services.mobile.title"),
|
||||
description: t("services.mobile.desc"),
|
||||
features: [
|
||||
t('services.mobile.features.design'),
|
||||
t('services.mobile.features.native'),
|
||||
t('services.mobile.features.cross'),
|
||||
t('services.mobile.features.push'),
|
||||
t('services.mobile.features.store')
|
||||
]
|
||||
t("services.mobile.features.design"),
|
||||
t("services.mobile.features.native"),
|
||||
t("services.mobile.features.cross"),
|
||||
t("services.mobile.features.push"),
|
||||
t("services.mobile.features.store"),
|
||||
],
|
||||
},
|
||||
{
|
||||
icon: <Database className="w-12 h-12 text-red-600" />,
|
||||
title: t('services.database.title'),
|
||||
description: t('services.database.desc'),
|
||||
icon: <Server className="w-12 h-12 text-red-600" />,
|
||||
title: t("services.database.title"),
|
||||
description: t("services.database.desc"),
|
||||
features: [
|
||||
t('services.database.features.design'),
|
||||
t('services.database.features.optimization'),
|
||||
t('services.database.features.migration'),
|
||||
t('services.database.features.backup'),
|
||||
t('services.database.features.recovery')
|
||||
]
|
||||
t("services.database.features.design"),
|
||||
t("services.database.features.optimization"),
|
||||
t("services.database.features.migration"),
|
||||
t("services.database.features.backup"),
|
||||
t("services.database.features.recovery"),
|
||||
],
|
||||
},
|
||||
{
|
||||
icon: <Server className="w-12 h-12 text-yellow-600" />,
|
||||
title: t('services.integration.title'),
|
||||
description: t('services.integration.desc'),
|
||||
icon: <Globe2 className="w-12 h-12 text-yellow-600" />,
|
||||
title: t("services.integration.title"),
|
||||
description: t("services.integration.desc"),
|
||||
features: [
|
||||
t('services.integration.features.api'),
|
||||
t('services.integration.features.middleware'),
|
||||
t('services.integration.features.legacy'),
|
||||
t('services.integration.features.realtime'),
|
||||
t('services.integration.features.monitoring')
|
||||
]
|
||||
t("services.integration.features.api"),
|
||||
t("services.integration.features.middleware"),
|
||||
t("services.integration.features.legacy"),
|
||||
t("services.integration.features.realtime"),
|
||||
t("services.integration.features.monitoring"),
|
||||
],
|
||||
},
|
||||
{
|
||||
icon: <Users className="w-12 h-12 text-indigo-600" />,
|
||||
title: t('services.consulting.title'),
|
||||
description: t('services.consulting.desc'),
|
||||
icon: <Settings className="w-12 h-12 text-indigo-600" />,
|
||||
title: t("services.consulting.title"),
|
||||
description: t("services.consulting.desc"),
|
||||
features: [
|
||||
t('services.consulting.features.tech'),
|
||||
t('services.consulting.features.project'),
|
||||
t('services.consulting.features.digital'),
|
||||
t('services.consulting.features.risk'),
|
||||
t('services.consulting.features.training')
|
||||
]
|
||||
}
|
||||
t("services.consulting.features.tech"),
|
||||
t("services.consulting.features.project"),
|
||||
t("services.consulting.features.digital"),
|
||||
t("services.consulting.features.risk"),
|
||||
t("services.consulting.features.training"),
|
||||
],
|
||||
},
|
||||
];
|
||||
|
||||
const supportPlans = [
|
||||
{
|
||||
title: t("services.support.branchRemote.title"),
|
||||
price: t("services.support.branchRemote.price"),
|
||||
period: t("services.support.branchRemote.period"),
|
||||
features: [
|
||||
t("services.support.branchRemote.features.priority"),
|
||||
t("services.support.branchRemote.features.remote"),
|
||||
t("services.support.branchRemote.features.optimization"),
|
||||
t("services.support.branchRemote.features.maintenance"),
|
||||
t("services.support.branchRemote.features.consulting"),
|
||||
],
|
||||
},
|
||||
{
|
||||
title: t("services.support.backup.title"),
|
||||
price: t("services.support.backup.price"),
|
||||
period: t("services.support.backup.period"),
|
||||
features: [
|
||||
t("services.support.backup.features.daily"),
|
||||
t("services.support.backup.features.encrypted"),
|
||||
t("services.support.backup.features.recovery"),
|
||||
t("services.support.backup.features.verification"),
|
||||
t("services.support.backup.features.access"),
|
||||
],
|
||||
},
|
||||
{
|
||||
title: t("services.support.sms.title"),
|
||||
price: t("services.support.sms.price"),
|
||||
period: t("services.support.sms.period"),
|
||||
features: [
|
||||
t("services.support.sms.features.packages"),
|
||||
t("services.support.sms.features.bulk"),
|
||||
t("services.support.sms.features.template"),
|
||||
t("services.support.sms.features.reporting"),
|
||||
t("services.support.sms.features.api"),
|
||||
],
|
||||
},
|
||||
];
|
||||
|
||||
return (
|
||||
<div className="min-h-screen bg-gray-50">
|
||||
{/* Hero Section */}
|
||||
<div className="relative bg-blue-900 text-white py-24">
|
||||
<div className="absolute inset-0 opacity-20" style={{
|
||||
backgroundImage: 'url("https://images.pexels.com/photos/3183173/pexels-photo-3183173.jpeg?auto=compress&cs=tinysrgb&w=1920")',
|
||||
backgroundSize: 'cover',
|
||||
backgroundPosition: 'center',
|
||||
}}></div>
|
||||
<div
|
||||
className="absolute inset-0 opacity-20"
|
||||
style={{
|
||||
backgroundImage:
|
||||
'url("https://images.pexels.com/photos/3183173/pexels-photo-3183173.jpeg?auto=compress&cs=tinysrgb&w=1920")',
|
||||
backgroundSize: "cover",
|
||||
backgroundPosition: "center",
|
||||
}}
|
||||
></div>
|
||||
<div className="container mx-auto pt-16 px-4 relative">
|
||||
<h1 className="text-5xl font-bold mb-6">{t('services.title')}</h1>
|
||||
<p className="text-xl max-w-3xl">
|
||||
{t('services.subtitle')}
|
||||
</p>
|
||||
<h1 className="text-5xl font-bold mb-6">{t("services.title")}</h1>
|
||||
<p className="text-xl max-w-3xl">{t("services.subtitle")}</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
|
@ -103,13 +154,21 @@ const Services: React.FC = () => {
|
|||
<div className="container mx-auto px-4">
|
||||
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8">
|
||||
{services.map((service, index) => (
|
||||
<div key={index} className="bg-white rounded-xl shadow-lg p-8 hover:shadow-xl transition-shadow">
|
||||
<div
|
||||
key={index}
|
||||
className="bg-white rounded-xl shadow-lg p-8 hover:shadow-xl transition-shadow"
|
||||
>
|
||||
<div className="mb-6">{service.icon}</div>
|
||||
<h3 className="text-2xl font-bold text-gray-900 mb-4">{service.title}</h3>
|
||||
<h3 className="text-2xl font-bold text-gray-900 mb-4">
|
||||
{service.title}
|
||||
</h3>
|
||||
<p className="text-gray-600 mb-6">{service.description}</p>
|
||||
<ul className="space-y-2">
|
||||
{service.features.map((feature, fIndex) => (
|
||||
<li key={fIndex} className="flex items-center text-gray-700">
|
||||
<li
|
||||
key={fIndex}
|
||||
className="flex items-center text-gray-700"
|
||||
>
|
||||
<span className="w-2 h-2 bg-blue-600 rounded-full mr-2"></span>
|
||||
{feature}
|
||||
</li>
|
||||
|
|
@ -121,18 +180,55 @@ const Services: React.FC = () => {
|
|||
</div>
|
||||
</div>
|
||||
|
||||
{/* Support Plans */}
|
||||
<div className="bg-white py-10">
|
||||
<div className="container mx-auto px-4">
|
||||
<h2 className="text-3xl font-bold text-center mb-10">
|
||||
{t("services.support.title")}
|
||||
</h2>
|
||||
<div className="grid grid-cols-1 md:grid-cols-3 gap-8">
|
||||
{supportPlans.map((plan, index) => (
|
||||
<div
|
||||
key={index}
|
||||
className="bg-white rounded-xl shadow-lg p-8 border border-gray-200"
|
||||
>
|
||||
<h3 className="text-xl font-bold mb-4">{plan.title}</h3>
|
||||
|
||||
<ul className="space-y-3 mb-8">
|
||||
{plan.features.map((feature, fIndex) => (
|
||||
<li
|
||||
key={fIndex}
|
||||
className="flex items-center space-x-2 text-gray-700"
|
||||
>
|
||||
<CheckCircle className="w-5 h-5 text-green-500 flex-shrink-0" />
|
||||
<span>{feature}</span>
|
||||
</li>
|
||||
))}
|
||||
</ul>
|
||||
<Link
|
||||
to="/contact"
|
||||
className="block text-center bg-blue-600 text-white px-6 py-3 rounded-lg hover:bg-blue-700 transition-colors"
|
||||
>
|
||||
{t("services.support.contactButton")}
|
||||
</Link>
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Call to Action */}
|
||||
<div className="bg-blue-900 text-white py-16">
|
||||
<div className="container mx-auto px-4 text-center">
|
||||
<h2 className="text-3xl font-bold mb-6">{t('services.cta.title')}</h2>
|
||||
<h2 className="text-3xl font-bold mb-6">{t("services.cta.title")}</h2>
|
||||
<p className="text-xl mb-8 max-w-2xl mx-auto">
|
||||
{t('services.cta.description')}
|
||||
{t("services.cta.description")}
|
||||
</p>
|
||||
<Link
|
||||
<Link
|
||||
to="/contact"
|
||||
className="bg-white text-blue-900 px-8 py-3 rounded-lg font-semibold hover:bg-blue-50 transition-colors"
|
||||
>
|
||||
{t('services.cta.contact')}
|
||||
{t("services.cta.contact")}
|
||||
</Link>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -140,4 +236,4 @@ const Services: React.FC = () => {
|
|||
);
|
||||
};
|
||||
|
||||
export default Services;
|
||||
export default Services;
|
||||
|
|
|
|||
|
|
@ -82,7 +82,7 @@ define(['./workbox-54d0af47'], (function (workbox) { 'use strict';
|
|||
"revision": "3ca0b8505b4bec776b69afdba2768812"
|
||||
}, {
|
||||
"url": "index.html",
|
||||
"revision": "0.v26qf4kt408"
|
||||
"revision": "0.8un1j0slu5o"
|
||||
}], {});
|
||||
workbox.cleanupOutdatedCaches();
|
||||
workbox.registerRoute(new workbox.NavigationRoute(workbox.createHandlerBoundToURL("index.html"), {
|
||||
|
|
|
|||
|
|
@ -75,7 +75,7 @@ const SideNav = () => {
|
|||
style={sideNavCollapse ? sideNavCollapseStyle : sideNavStyle}
|
||||
className={classNames('side-nav', sideNavColor(), !sideNavCollapse && 'side-nav-expand')}
|
||||
>
|
||||
<div className="side-nav-header">
|
||||
<div className="side-nav-header py-2">
|
||||
<Logo
|
||||
mode={logoMode()}
|
||||
type={sideNavCollapse ? 'streamline' : 'full'}
|
||||
|
|
|
|||
|
|
@ -96,7 +96,7 @@ const StackedSideNavMini = (props: StackedSideNavMiniProps) => {
|
|||
<Logo mode={logoMode()} type="streamline" className={SIDE_NAV_CONTENT_GUTTER} />
|
||||
<ScrollBar autoHide direction={direction}>
|
||||
<Menu
|
||||
className="px-4 pb-4"
|
||||
className="px-4 pb-4 py-1"
|
||||
variant={navMode}
|
||||
defaultActiveKeys={activeKeys || [includedRouteTree.key]}
|
||||
>
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ export const NAV_MODE_DARK = 'dark'
|
|||
export const NAV_MODE_THEMED = 'themed'
|
||||
export const NAV_MODE_TRANSPARENT = 'transparent'
|
||||
|
||||
export const SIDE_NAV_WIDTH = 290
|
||||
export const SIDE_NAV_WIDTH = 330
|
||||
export const SIDE_NAV_COLLAPSED_WIDTH = 80
|
||||
export const SPLITTED_SIDE_NAV_MINI_WIDTH = 80
|
||||
export const SPLITTED_SIDE_NAV_SECONDARY_WIDTH = 250
|
||||
|
|
|
|||
Loading…
Reference in a new issue