Align brand search SEO with Grace Salmoun
هذا الالتزام موجود في:
@@ -7,6 +7,7 @@ import { SiteShell } from "@/components/site-shell";
|
||||
import {
|
||||
getBasePath,
|
||||
getDirection,
|
||||
getResumePath,
|
||||
portfolioContent,
|
||||
resumeFile,
|
||||
sharedProfile,
|
||||
@@ -25,6 +26,7 @@ export function HomePage({ language }: { language: Language }) {
|
||||
? "لوحة بورتفوليو لمجمع إعلامي ومبنى التلفزيون"
|
||||
: "Portfolio board for Media Complex and TV Building";
|
||||
const basePath = getBasePath(language);
|
||||
const resumePath = getResumePath(language);
|
||||
const hasResume = resumeFile.available;
|
||||
const contactCards = [
|
||||
{
|
||||
@@ -91,7 +93,7 @@ export function HomePage({ language }: { language: Language }) {
|
||||
{t.ui.downloadCv}
|
||||
</Link>
|
||||
) : (
|
||||
<Link href={`${basePath}/resume`} className="button-secondary hero-action-link">
|
||||
<Link href={resumePath} className="button-secondary hero-action-link">
|
||||
{t.ui.onlineResume}
|
||||
</Link>
|
||||
)}
|
||||
@@ -322,7 +324,7 @@ export function HomePage({ language }: { language: Language }) {
|
||||
</div>
|
||||
|
||||
<div className="grid gap-5 sm:grid-cols-2">
|
||||
<Link href={`${basePath}/resume`} className="soft-card content-stack-default block">
|
||||
<Link href={resumePath} className="soft-card content-stack-default block">
|
||||
<p className="eyebrow-note">{t.ui.onlineResume}</p>
|
||||
<p className="type-card-title display-face text-[var(--color-ink)]">
|
||||
{t.ui.viewFullResume}
|
||||
|
||||
@@ -5,18 +5,15 @@ import { usePathname } from "next/navigation";
|
||||
import { portfolioContent, type Language } from "@/data/portfolio";
|
||||
|
||||
export function LanguageToggle({ language }: { language: Language }) {
|
||||
const pathname = usePathname() ?? `/${language}`;
|
||||
const pathname = usePathname() ?? (language === "ar" ? "/ar" : "/");
|
||||
const nextLanguage = language === "en" ? "ar" : "en";
|
||||
const { languageLabel, languageToggleAriaLabel } = portfolioContent[language].ui;
|
||||
const segments = pathname.split("/").filter(Boolean);
|
||||
|
||||
if (segments[0] === "en" || segments[0] === "ar") {
|
||||
segments[0] = nextLanguage;
|
||||
} else {
|
||||
segments.unshift(nextLanguage);
|
||||
}
|
||||
|
||||
const nextPath = `/${segments.join("/")}`;
|
||||
const contentSegments = segments[0] === "en" || segments[0] === "ar" ? segments.slice(1) : segments;
|
||||
const nextPath =
|
||||
nextLanguage === "ar"
|
||||
? `/ar${contentSegments.length ? `/${contentSegments.join("/")}` : ""}`
|
||||
: `/${contentSegments.join("/")}` || "/";
|
||||
|
||||
return (
|
||||
<Link
|
||||
|
||||
@@ -32,7 +32,7 @@ export function Navbar({ language }: { language: Language }) {
|
||||
<div className="logo-shell navbar-logo-shell overflow-hidden rounded-[20px] border p-2">
|
||||
<Image
|
||||
src={sharedProfile.logoImage}
|
||||
alt={language === "ar" ? "شعار غريس بطرس سلمون" : "Grace Butrus Salmoun logo"}
|
||||
alt={language === "ar" ? "شعار غريس بطرس سلمون" : "Grace Salmoun logo"}
|
||||
width={60}
|
||||
height={60}
|
||||
className="navbar-logo-image h-[60px] w-[60px] rounded-[14px] object-contain"
|
||||
|
||||
@@ -2,7 +2,7 @@ import Link from "next/link";
|
||||
import { JsonLd } from "@/components/json-ld";
|
||||
import { SectionHeading } from "@/components/section-heading";
|
||||
import { SiteShell } from "@/components/site-shell";
|
||||
import { portfolioContent, resumeFile, sharedProfile, type Language } from "@/data/portfolio";
|
||||
import { getBasePath, portfolioContent, resumeFile, sharedProfile, type Language } from "@/data/portfolio";
|
||||
import { getResumeStructuredData } from "@/data/seo";
|
||||
|
||||
export function ResumePageContent({ language }: { language: Language }) {
|
||||
@@ -11,6 +11,7 @@ export function ResumePageContent({ language }: { language: Language }) {
|
||||
const address = language === "ar" ? sharedProfile.addressAr : sharedProfile.address;
|
||||
const hasResume = resumeFile.available;
|
||||
const structuredData = getResumeStructuredData(language);
|
||||
const portfolioPath = getBasePath(language);
|
||||
|
||||
return (
|
||||
<SiteShell language={language}>
|
||||
@@ -41,7 +42,7 @@ export function ResumePageContent({ language }: { language: Language }) {
|
||||
{t.ui.resumeUnavailable}
|
||||
</p>
|
||||
)}
|
||||
<Link href={`/${language}`} className="button-secondary">
|
||||
<Link href={portfolioPath} className="button-secondary">
|
||||
{t.ui.backToPortfolio}
|
||||
</Link>
|
||||
</div>
|
||||
|
||||
المرجع في مشكلة جديدة
حظر مستخدم