Skip to content

Commit 27110e0

Browse files
committed
[ADD] add English and Russian locale support
- Add en and ru locales to next.config.js - Add language switcher with 3 languages (O'zbek, English, Русский) - Add locale-aware footer, SEO meta, edit link translations - Create _meta.en.json and _meta.ru.json for all 11 directories - Create translated structural pages (home, overview, categories) - Create stub pages for untranslated articles with redirect to Uzbek version
1 parent ebb494e commit 27110e0

File tree

191 files changed

+3873
-6
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

191 files changed

+3873
-6
lines changed

next.config.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ const withNextra = require('nextra')({
1313
const config = {
1414
output: 'standalone',
1515
i18n: {
16-
locales: ['en-UZ'],
16+
locales: ['en-UZ', 'en', 'ru'],
1717
defaultLocale: 'en-UZ',
1818
},
1919
reactStrictMode: true,

pages/_document.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import * as React from 'react';
1111
class Document extends NextDocument {
1212
render() {
1313
return (
14-
<Html lang="en">
14+
<Html lang={this.props.locale || 'en'}>
1515
<Head>
1616
<style id="stitches" />
1717
{/* Global Site Tag (gtag.js) - Google Analytics */}

pages/_meta.en.json

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
{
2+
"index": { "title": "Home", "type": "page" },
3+
"guides": { "title": "Documentation", "type": "page" },
4+
"tutorials": { "title": "Articles", "type": "page" },
5+
"consultation": { "title": "Consultation", "type": "page" },
6+
"404": { "type": "page", "theme": { "timestamp": false } },
7+
"500": { "type": "page", "theme": { "timestamp": false, "layout": "full" } }
8+
}

pages/_meta.ru.json

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
{
2+
"index": { "title": "Главная", "type": "page" },
3+
"guides": { "title": "Документация", "type": "page" },
4+
"tutorials": { "title": "Статьи", "type": "page" },
5+
"consultation": { "title": "Консультация", "type": "page" },
6+
"404": { "type": "page", "theme": { "timestamp": false } },
7+
"500": { "type": "page", "theme": { "timestamp": false, "layout": "full" } }
8+
}

pages/consultation.en.mdx

Lines changed: 170 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,170 @@
1+
---
2+
image: https://raw.githubusercontent.com/devops-journey-uz/assets/main/images/company/consultation.png
3+
title: "Consultation"
4+
showFooter: false
5+
---
6+
7+
import Image from 'next/image'
8+
9+
<section className="py-12">
10+
<div className="max-w-7xl mx-auto px-4">
11+
<div className="bg-green-50 dark:bg-gray-800 rounded-xl shadow-lg p-6 border border-green-300 dark:border-gray-700 mb-12">
12+
<p className="text-lg text-gray-800 dark:text-gray-200">
13+
Get consultations with experts and solve technical issues in your business quickly and effectively. Each expert has experience in their field and has worked on real projects.
14+
</p>
15+
16+
<h3 className="mt-6 font-bold text-green-700 dark:text-green-400">
17+
Who is it for
18+
</h3>
19+
<ul className="mt-2 space-y-2">
20+
{[
21+
"IT companies and teams",
22+
"Startups and new business owners",
23+
"Large and medium business representatives",
24+
"Entrepreneurs developing their own projects"
25+
].map((item, idx) => (
26+
<li key={idx} className="flex items-center text-gray-800 dark:text-gray-200">
27+
<span className="inline-block w-3 h-3 mr-2 bg-green-500 rounded-full"></span>
28+
{item}
29+
</li>
30+
))}
31+
</ul>
32+
33+
<h3 className="mt-6 font-bold text-green-700 dark:text-green-400">
34+
Responsibilities and limitations
35+
</h3>
36+
<ul className="mt-2 space-y-2">
37+
{[
38+
"Onboarding process: the project will be studied before providing a solution.",
39+
"Confidentiality policy is followed by both parties.",
40+
"Agreements can be made for work beyond consultation.",
41+
"You set the work agreements with the proposed experts yourself."
42+
].map((item, idx) => (
43+
<li key={idx} className="flex items-center text-gray-800 dark:text-gray-200">
44+
<span className="inline-block w-3 h-3 mr-2 bg-green-500 rounded-full"></span>
45+
{item}
46+
</li>
47+
))}
48+
</ul>
49+
</div>
50+
<h2 className="text-center text-2xl sm:text-4xl font-extrabold text-gray-800 dark:text-white mb-12">
51+
EXPERTS
52+
</h2>
53+
54+
<div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-8">
55+
{[
56+
{
57+
name: "Akhmad Kadirov",
58+
role: "Software Engineer",
59+
img: "https://raw.githubusercontent.com/devops-journey-uz/assets/main/images/tutorials/authors/akhmadiy.jpeg",
60+
experience: "7 years+",
61+
workplaces: "Payme",
62+
consultTime: "60 min",
63+
price: "900,000 UZS",
64+
linkedin: "https://www.linkedin.com/in/akhmadiy/",
65+
email: "mailto:akhmadiy@gmail.com?subject=Consultation request&body=Hello, I would like to book a consultation..."
66+
},
67+
{
68+
name: "Mansur Jo'rayev",
69+
role: "SRE Engineer",
70+
img: "https://raw.githubusercontent.com/devops-journey-uz/assets/main/images/tutorials/authors/mansur_jurayev.jpeg",
71+
experience: "4 years+",
72+
workplaces: "Ucell, DavrBank, Fincube",
73+
consultTime: "60 min",
74+
price: "1,200,000 UZS",
75+
linkedin: "https://www.linkedin.com/in/mansur-juraev",
76+
email: "mailto:jurayevmansurbek667@gmail.com?subject=Consultation request&body=Hello, I would like to book a consultation..."
77+
},
78+
{
79+
name: "Manuchehr Usmonov",
80+
role: "Hardware and Software engineer",
81+
img: "https://raw.githubusercontent.com/devops-journey-uz/assets/main/images/tutorials/authors/manuchehr_usmonov.jpg",
82+
experience: "10 years+",
83+
workplaces: "Personal business, IT-Park, Uzinfocom",
84+
consultTime: "60 min",
85+
price: "1,200,000 UZS",
86+
linkedin: "https://manu.uz/",
87+
email: "mailto:yetimdasturhi@gmail.com?subject=Consultation request&body=Hello, I would like to book a consultation..."
88+
},
89+
{
90+
name: "Husniddin Qurbonboyev",
91+
role: "Senior Node.js Engineer",
92+
img: "https://raw.githubusercontent.com/devops-journey-uz/assets/main/images/tutorials/authors/Husniddin_Qurbonboyev.png",
93+
experience: "7 years+",
94+
workplaces: "Click, Epam, Payme",
95+
consultTime: "60 min",
96+
price: "1,000,000 UZS",
97+
linkedin: "https://www.linkedin.com/in/husniddin-qurbonboyev-8906b5168/",
98+
email: "mailto:qhd1996@gmail.com?subject=Consultation request&body=Hello, I would like to book a consultation..."
99+
},
100+
{
101+
name: "Otabek Ismoilov",
102+
role: "DevOps Engineer",
103+
img: "https://raw.githubusercontent.com/devops-journey-uz/assets/main/images/tutorials/authors/otabek_ismoilov.jpg",
104+
experience: "3 years+",
105+
workplaces: "Ucell, Aloqabank, Fincube",
106+
consultTime: "60 min",
107+
price: "800,000 UZS",
108+
linkedin: "https://www.linkedin.com/in/otabek-ismoilov/",
109+
email: "mailto:ismoilovdev@gmail.com?subject=Consultation request&body=Hello, I would like to book a consultation..."
110+
},
111+
{
112+
name: "Sherzod Kuvandikov",
113+
role: "DevOps Engineer | CKA",
114+
img: "https://raw.githubusercontent.com/devops-journey-uz/assets/main/images/tutorials/authors/sherzod_kuvandikov.jpg",
115+
experience: "4 years+",
116+
workplaces: "Texnomart, Optochka, iTech Art Group",
117+
consultTime: "60 min",
118+
price: "800,000 UZS",
119+
linkedin: "https://www.linkedin.com/in/shkuvandikov/",
120+
email: "mailto:shkuvandikov@gmail.com?subject=Consultation request&body=Hello, I would like to book a consultation..."
121+
},
122+
].map((expert, index) => (
123+
<div
124+
key={index}
125+
className="bg-white w-64 dark:bg-gray-800 rounded-xl shadow-lg p-3 py-6 hover:shadow-2xl transition-transform transform hover:-translate-y-2 border border-green-500 flex flex-col justify-between"
126+
>
127+
<div className="flex flex-col items-center space-y-2">
128+
<div className="w-24 h-24 rounded-full overflow-hidden border-4 border-green-500">
129+
<Image src={expert.img} alt={expert.name} width={96} height={96} />
130+
</div>
131+
<h4 className="text-lg font-bold text-gray-800 dark:text-gray-100">{expert.name}</h4>
132+
<h5 className="text-sm text-gray-600 dark:text-gray-400">{expert.role}</h5>
133+
</div>
134+
135+
<div className="mt-4 space-y-2 text-sm">
136+
<div className="bg-gray-100 dark:bg-gray-700 p-3 rounded-lg">
137+
<span className="font-semibold text-green-600">Experience:</span>
138+
<span className="ml-2 text-gray-800 dark:text-gray-200">{expert.experience}</span>
139+
</div>
140+
<div className="bg-gray-100 dark:bg-gray-700 p-3 rounded-lg">
141+
<span className="font-semibold text-green-600">Workplaces:</span>
142+
<span className="ml-2 text-gray-800 dark:text-gray-200">{expert.workplaces}</span>
143+
</div>
144+
<div className="bg-gray-100 dark:bg-gray-700 p-3 rounded-lg">
145+
<span className="font-semibold text-green-600">Duration:</span>
146+
<span className="ml-2 text-gray-800 dark:text-gray-200">{expert.consultTime}</span>
147+
</div>
148+
<div className="bg-gray-100 dark:bg-gray-700 p-3 rounded-lg">
149+
<span className="font-semibold text-green-600">Price:</span>
150+
<span className="ml-2 text-gray-800 dark:text-gray-200">{expert.price}</span>
151+
</div>
152+
</div>
153+
154+
<div className="flex justify-center space-x-3 mt-4">
155+
<a href={expert.linkedin} target="_blank" rel="noopener noreferrer">
156+
<button className="bg-green-500 text-white px-4 py-2 rounded-md text-sm font-semibold hover:bg-green-600 hover:scale-105 transform transition">
157+
LinkedIn
158+
</button>
159+
</a>
160+
<a href={expert.email}>
161+
<button className="bg-green-500 text-white px-4 py-2 rounded-md text-sm font-semibold hover:bg-green-600 hover:scale-105 transform transition">
162+
Book
163+
</button>
164+
</a>
165+
</div>
166+
</div>
167+
))}
168+
</div>
169+
</div>
170+
</section>

pages/consultation.ru.mdx

Lines changed: 170 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,170 @@
1+
---
2+
image: https://raw.githubusercontent.com/devops-journey-uz/assets/main/images/company/consultation.png
3+
title: "Консультация"
4+
showFooter: false
5+
---
6+
7+
import Image from 'next/image'
8+
9+
<section className="py-12">
10+
<div className="max-w-7xl mx-auto px-4">
11+
<div className="bg-green-50 dark:bg-gray-800 rounded-xl shadow-lg p-6 border border-green-300 dark:border-gray-700 mb-12">
12+
<p className="text-lg text-gray-800 dark:text-gray-200">
13+
Получите консультацию у экспертов и решите технические проблемы вашего бизнеса быстро и эффективно. Каждый эксперт имеет опыт в своей области и работал над реальными проектами.
14+
</p>
15+
16+
<h3 className="mt-6 font-bold text-green-700 dark:text-green-400">
17+
Для кого
18+
</h3>
19+
<ul className="mt-2 space-y-2">
20+
{[
21+
"IT компании и команды",
22+
"Стартапы и новые владельцы бизнеса",
23+
"Представители крупного и среднего бизнеса",
24+
"Предприниматели, развивающие собственные проекты"
25+
].map((item, idx) => (
26+
<li key={idx} className="flex items-center text-gray-800 dark:text-gray-200">
27+
<span className="inline-block w-3 h-3 mr-2 bg-green-500 rounded-full"></span>
28+
{item}
29+
</li>
30+
))}
31+
</ul>
32+
33+
<h3 className="mt-6 font-bold text-green-700 dark:text-green-400">
34+
Ответственность и ограничения
35+
</h3>
36+
<ul className="mt-2 space-y-2">
37+
{[
38+
"Процесс онбординга: проект будет изучен перед предоставлением решения.",
39+
"Политика конфиденциальности соблюдается обеими сторонами.",
40+
"Возможны договорённости о работе за пределами консультации.",
41+
"Вы сами устанавливаете условия работы с предложенными экспертами."
42+
].map((item, idx) => (
43+
<li key={idx} className="flex items-center text-gray-800 dark:text-gray-200">
44+
<span className="inline-block w-3 h-3 mr-2 bg-green-500 rounded-full"></span>
45+
{item}
46+
</li>
47+
))}
48+
</ul>
49+
</div>
50+
<h2 className="text-center text-2xl sm:text-4xl font-extrabold text-gray-800 dark:text-white mb-12">
51+
ЭКСПЕРТЫ
52+
</h2>
53+
54+
<div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-8">
55+
{[
56+
{
57+
name: "Akhmad Kadirov",
58+
role: "Software Engineer",
59+
img: "https://raw.githubusercontent.com/devops-journey-uz/assets/main/images/tutorials/authors/akhmadiy.jpeg",
60+
experience: "7 лет+",
61+
workplaces: "Payme",
62+
consultTime: "60 мин",
63+
price: "900 000 сум",
64+
linkedin: "https://www.linkedin.com/in/akhmadiy/",
65+
email: "mailto:akhmadiy@gmail.com?subject=Запрос на консультацию&body=Здравствуйте, я хотел бы записаться на консультацию..."
66+
},
67+
{
68+
name: "Mansur Jo'rayev",
69+
role: "SRE Engineer",
70+
img: "https://raw.githubusercontent.com/devops-journey-uz/assets/main/images/tutorials/authors/mansur_jurayev.jpeg",
71+
experience: "4 года+",
72+
workplaces: "Ucell, DavrBank, Fincube",
73+
consultTime: "60 мин",
74+
price: "1 200 000 сум",
75+
linkedin: "https://www.linkedin.com/in/mansur-juraev",
76+
email: "mailto:jurayevmansurbek667@gmail.com?subject=Запрос на консультацию&body=Здравствуйте, я хотел бы записаться на консультацию..."
77+
},
78+
{
79+
name: "Manuchehr Usmonov",
80+
role: "Hardware and Software engineer",
81+
img: "https://raw.githubusercontent.com/devops-journey-uz/assets/main/images/tutorials/authors/manuchehr_usmonov.jpg",
82+
experience: "10 лет+",
83+
workplaces: "Личный бизнес, IT-Park, Uzinfocom",
84+
consultTime: "60 мин",
85+
price: "1 200 000 сум",
86+
linkedin: "https://manu.uz/",
87+
email: "mailto:yetimdasturhi@gmail.com?subject=Запрос на консультацию&body=Здравствуйте, я хотел бы записаться на консультацию..."
88+
},
89+
{
90+
name: "Husniddin Qurbonboyev",
91+
role: "Senior Node.js Engineer",
92+
img: "https://raw.githubusercontent.com/devops-journey-uz/assets/main/images/tutorials/authors/Husniddin_Qurbonboyev.png",
93+
experience: "7 лет+",
94+
workplaces: "Click, Epam, Payme",
95+
consultTime: "60 мин",
96+
price: "1 000 000 сум",
97+
linkedin: "https://www.linkedin.com/in/husniddin-qurbonboyev-8906b5168/",
98+
email: "mailto:qhd1996@gmail.com?subject=Запрос на консультацию&body=Здравствуйте, я хотел бы записаться на консультацию..."
99+
},
100+
{
101+
name: "Otabek Ismoilov",
102+
role: "DevOps Engineer",
103+
img: "https://raw.githubusercontent.com/devops-journey-uz/assets/main/images/tutorials/authors/otabek_ismoilov.jpg",
104+
experience: "3 года+",
105+
workplaces: "Ucell, Aloqabank, Fincube",
106+
consultTime: "60 мин",
107+
price: "800 000 сум",
108+
linkedin: "https://www.linkedin.com/in/otabek-ismoilov/",
109+
email: "mailto:ismoilovdev@gmail.com?subject=Запрос на консультацию&body=Здравствуйте, я хотел бы записаться на консультацию..."
110+
},
111+
{
112+
name: "Sherzod Kuvandikov",
113+
role: "DevOps Engineer | CKA",
114+
img: "https://raw.githubusercontent.com/devops-journey-uz/assets/main/images/tutorials/authors/sherzod_kuvandikov.jpg",
115+
experience: "4 года+",
116+
workplaces: "Texnomart, Optochka, iTech Art Group",
117+
consultTime: "60 мин",
118+
price: "800 000 сум",
119+
linkedin: "https://www.linkedin.com/in/shkuvandikov/",
120+
email: "mailto:shkuvandikov@gmail.com?subject=Запрос на консультацию&body=Здравствуйте, я хотел бы записаться на консультацию..."
121+
},
122+
].map((expert, index) => (
123+
<div
124+
key={index}
125+
className="bg-white w-64 dark:bg-gray-800 rounded-xl shadow-lg p-3 py-6 hover:shadow-2xl transition-transform transform hover:-translate-y-2 border border-green-500 flex flex-col justify-between"
126+
>
127+
<div className="flex flex-col items-center space-y-2">
128+
<div className="w-24 h-24 rounded-full overflow-hidden border-4 border-green-500">
129+
<Image src={expert.img} alt={expert.name} width={96} height={96} />
130+
</div>
131+
<h4 className="text-lg font-bold text-gray-800 dark:text-gray-100">{expert.name}</h4>
132+
<h5 className="text-sm text-gray-600 dark:text-gray-400">{expert.role}</h5>
133+
</div>
134+
135+
<div className="mt-4 space-y-2 text-sm">
136+
<div className="bg-gray-100 dark:bg-gray-700 p-3 rounded-lg">
137+
<span className="font-semibold text-green-600">Опыт:</span>
138+
<span className="ml-2 text-gray-800 dark:text-gray-200">{expert.experience}</span>
139+
</div>
140+
<div className="bg-gray-100 dark:bg-gray-700 p-3 rounded-lg">
141+
<span className="font-semibold text-green-600">Места работы:</span>
142+
<span className="ml-2 text-gray-800 dark:text-gray-200">{expert.workplaces}</span>
143+
</div>
144+
<div className="bg-gray-100 dark:bg-gray-700 p-3 rounded-lg">
145+
<span className="font-semibold text-green-600">Длительность:</span>
146+
<span className="ml-2 text-gray-800 dark:text-gray-200">{expert.consultTime}</span>
147+
</div>
148+
<div className="bg-gray-100 dark:bg-gray-700 p-3 rounded-lg">
149+
<span className="font-semibold text-green-600">Цена:</span>
150+
<span className="ml-2 text-gray-800 dark:text-gray-200">{expert.price}</span>
151+
</div>
152+
</div>
153+
154+
<div className="flex justify-center space-x-3 mt-4">
155+
<a href={expert.linkedin} target="_blank" rel="noopener noreferrer">
156+
<button className="bg-green-500 text-white px-4 py-2 rounded-md text-sm font-semibold hover:bg-green-600 hover:scale-105 transform transition">
157+
LinkedIn
158+
</button>
159+
</a>
160+
<a href={expert.email}>
161+
<button className="bg-green-500 text-white px-4 py-2 rounded-md text-sm font-semibold hover:bg-green-600 hover:scale-105 transform transition">
162+
Записаться
163+
</button>
164+
</a>
165+
</div>
166+
</div>
167+
))}
168+
</div>
169+
</div>
170+
</section>

pages/guides/_meta.en.json

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
{
2+
"overview": "Home",
3+
"ci-cd": "▶️ CI/CD",
4+
"konteyner": "▶️ Containers",
5+
"k8s": "▶️ Kubernetes(k8s)",
6+
"database": "▶️ Database",
7+
"web-server": "▶️ Web Servers",
8+
"cloud": "▶️ Cloud",
9+
"monitoring": "▶️ Monitoring"
10+
}

pages/guides/_meta.ru.json

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
{
2+
"overview": "Главная",
3+
"ci-cd": "▶️ CI/CD",
4+
"konteyner": "▶️ Контейнеры",
5+
"k8s": "▶️ Kubernetes(k8s)",
6+
"database": "▶️ Базы данных",
7+
"web-server": "▶️ Веб серверы",
8+
"cloud": "▶️ Облако",
9+
"monitoring": "▶️ Мониторинг"
10+
}

0 commit comments

Comments
 (0)