9시에 칸 바이어를 위해 프랑스어로 로드된 요트 리스팅이 정오에 포르토 체르보 중개인이 링크를 공유할 때 이탈리아어로 전환되고, 그날 저녁 아테네의 그리스 차터 클라이언트가 열 때 혼합 언어 혼란으로 빠져들게 됩니다. 지난해 우리는 6개의 지중해 시장을 서빙하는 중개 플랫폼을 출시했습니다 — 프랑스 리비에라, 이탈리아 해안, 그리스 제도, 터키 마리나, 발레아레스, 그리고 영국 해외 거주자 허브. 요구사항에서 '번역 버튼만 추가하세요'라고 했습니다. 현실은 달랐습니다: 터키의 통화법을 존중하는 동적 가격 책정, 이탈리아 버전이 순위를 매길 때 프랑스 SEO를 잠식하지 않는 URL 구조, 그리고 관할권에 따라 의미가 바뀌는 차터 약관. 요트 가용성 복사본을 변경한 그리스 복수형 규칙으로 2주를 잃었습니다. 중앙값 리스팅이 €8M이고 잘못된 언어의 이탈률이 수수료 손실을 초래할 때 실제로 작동하는 것은 다음과 같습니다.

목차

지중해 요트 중개업소를 위한 다언어 웹사이트 구축

지중해 요트 중개업소가 다언어 사이트가 필요한 이유

Allied Market Research에 따르면 지중해 요트 시장은 2026년까지 $12.3 billion에 도달할 것으로 예상됩니다. 하지만 대부분의 에이전시가 놓치는 것은 다음과 같습니다: 이 시장은 근본적으로 언어로 분열되어 있습니다. 모나코에 등재된 45미터 Benetti는 독일어로 검색하는 독일 산업가, 아랍어로 찾아보는 사우디 바이어, 영어로 찾는 영국 은퇴자가 발견할 수 있어야 합니다.

나는 중개업소가 영어 콘텐츠만 제공했기 때문에 6자리 수수료를 잃는 경우를 봤습니다. 앙티브의 한 중개인은 리스팅이 프랑스 Google 검색 결과에 표시되었기 때문에 그들의 가장 큰 경쟁자가 프랑스어 사용 클라이언트를 얻고 있다고 말했습니다. 이것은 기술 문제가 아닙니다 — 기술 솔루션을 가진 비즈니스 문제입니다.

숫자가 이를 뒷받침합니다:

시장 세그먼트 필요한 언어 바이어 인구통계
프랑스 리비에라 FR, EN, RU, AR 유럽 HNWIs, 중동 바이어
이탈리아 해안 IT, EN, DE, FR 북유럽 차터 클라이언트
그리스 제도 EL, EN, DE, FR 차터 중심, 계절 관광
터키 리비에라 TR, EN, DE, RU 예산 의식 차터 시장
발레아레스 제도 ES, EN, DE, FR 혼합 중개 및 차터
크로아티아 해안 HR, EN, DE, IT 신흥 시장, 빠른 성장

1~2개의 이 언어만 제공하고 있다면, 돈을 테이블에 남겨두고 있습니다. 마침표.

올바른 기술 스택 선택

요트 중개 사이트의 경우, 두 가지 매우 다른 콘텐츠 유형을 처리하는 스택이 필요합니다: 정적 마케팅 콘텐츠(회사 소개 페이지, 서비스 설명, 팀 약력) 및 동적 리스팅 데이터(요트 사양, 가격 책정, 가용성, 사진).

나는 Next.js와 Astro 모두에서 이를 구축했으며, 요구사항에 따라 둘 다 잘 작동합니다. 저장된 검색, 비교 도구, 실시간 가용성 있는 문의 양식 등 과도한 상호작용이 필요한 경우 — Next.js가 더 나은 선택입니다. 사이트가 주로 덜 동적인 동작을 가진 쇼케이스라면, Astro의 island 아키텍처가 즉시 놀라운 성능을 제공합니다.

스택이 이 특정 사용 사례에 대해 어떻게 비교되는지는 다음과 같습니다:

기능 Next.js (App Router) Astro Remix
i18n 라우팅 내장 미들웨어 수동 또는 플러그인 수동
정적 생성 탁월함 탁월함 제한적
동적 리스팅 기본 SSR/ISR 요청 시 엔드포인트 기본 SSR
CMS 통합 탁월함 탁월함 좋음
Edge 렌더링 Vercel Edge, Cloudflare Cloudflare, Netlify Cloudflare
번역 라이브러리 next-intl, next-i18next astro-i18n, paraglide remix-i18next
빌드 시간 (500 리스팅 × 6 언어) ISR로 ~4분 전체 정적 ~8분 N/A (SSR)

headless CMS 레이어의 경우, 리스팅 데이터를 마케팅 콘텐츠와 분리하는 것을 강력히 권장합니다. 리스팅 데이터에는 목적별 요트 관리 시스템(Yatco API, NauticEd 또는 사용자 정의 Supabase 백엔드 같은)을 사용하고, 다른 모든 것에는 Sanity 또는 Contentful 같은 headless CMS를 사용합니다.

Headless가 중요한 이유

요트 데이터는 이상합니다. 청중에 따라 미터 또는 피트의 사양, 유로 또는 달러의 가격, 지속적으로 업데이트되는 엔진 시간, 매일 변경되는 가용성 캘린더가 있습니다. 모든 것을 기본 CMS 내에서 관리하려고 하는 것은 악몽입니다. headless 접근 방식은 전문 API에서 리스팅 데이터를 가져오고 CMS에서 마케팅 콘텐츠를 가져오도록 한 다음 빌드 시간 또는 요청 시간에 결합할 수 있습니다.

다언어 요트 리스팅을 위한 URL 전략

이것이 대부분의 프로젝트가 초기에 잘못되는 곳입니다. 다언어 사이트의 URL 구조는 나중에 역전시키기 가장 어려운 결정 중 하나입니다. 세 가지 접근법이 있습니다:

서브디렉토리 패턴 (권장)

https://yachtbroker.com/en/yachts/benetti-45m-2022
https://yachtbroker.com/fr/yachts/benetti-45m-2022
https://yachtbroker.com/de/yachten/benetti-45m-2022

이것은 90%의 요트 중개업소에 권장합니다. 단일 도메인, 공유 도메인 권위, Next.js 미들웨어 또는 Astro의 내장 i18n 라우팅으로 구현하기 쉽습니다.

서브도메인 패턴

https://en.yachtbroker.com/yachts/benetti-45m-2022
https://fr.yachtbroker.com/yachts/benetti-45m-2022

일부 더 큰 중개업소는 조직상의 이유로 이를 선호합니다. 각 서브도메인은 독립적으로 배포할 수 있습니다. 하지만 통합 도메인 권위를 잃고, 관리할 더 많은 인프라가 있습니다.

ccTLD 패턴

https://yachtbroker.fr/yachts/benetti-45m-2022
https://yachtbroker.de/yachten/benetti-45m-2022

각 국가에서 별도의 법인을 보유한 경우에만 의미가 있습니다. 비용이 많이 들고 복잡하며, Burgess 또는 Fraser 수준의 운영이 아닌 한 거의 가치가 없습니다.

슬러그 번역

사람들을 혼동시키는 세부사항: URL 슬러그를 번역해야 합니까? 요트 이름의 경우, 아닙니다 — 일관성 있게 유지합니다. "Benetti Oasis 40M"은 모든 언어에서 그렇게 불립니다. 하지만 카테고리 경로는? 예, 번역합니다.

// next.config.js - Next.js i18n 라우팅
const nextConfig = {
  i18n: {
    locales: ['en', 'fr', 'de', 'it', 'es', 'el'],
    defaultLocale: 'en',
    localeDetection: true,
  },
};

Next.js App Router에서 next-intl을 가진 번역된 경로의 경우:

// src/navigation.ts
import { createLocalizedPathnameNavigation } from 'next-intl/navigation';

export const localePrefix = 'always';

export const pathnames = {
  '/yachts': {
    en: '/yachts',
    fr: '/yachts',
    de: '/yachten',
    it: '/yacht',
    es: '/yates',
    el: '/skafi',
  },
  '/yachts/[slug]': {
    en: '/yachts/[slug]',
    fr: '/yachts/[slug]',
    de: '/yachten/[slug]',
    it: '/yacht/[slug]',
    es: '/yates/[slug]',
    el: '/skafi/[slug]',
  },
};

export const { Link, redirect, usePathname, useRouter } =
  createLocalizedPathnameNavigation({ locales, localePrefix, pathnames });

지중해 요트 중개업소를 위한 다언어 웹사이트 구축 - 아키텍처

요트 리스팅 데이터 번역

이것이 핵심 도전입니다. 요트 리스팅에는 각각 다른 번역 접근 방식이 필요한 세 가지 콘텐츠 유형이 있습니다:

1. 구조화된 데이터 (번역하지 말고, 현지화하세요)

길이, 빔, 흘수, 엔진 동력 같은 사양 — 이것들은 번역이 필요하지 않습니다. 그들은 현지화가 필요합니다. 유럽인에게 미터를 표시하고, 미국인에게 피트를 표시합니다. 일부 시장에 킬로와트를, 다른 시장에 마력을 표시합니다.

// utils/localize-specs.ts
const UNIT_PREFERENCES: Record<string, UnitSystem> = {
  en: 'imperial',
  'en-GB': 'metric', // 영국 시장은 요트에 미터를 사용합니다
  fr: 'metric',
  de: 'metric',
  it: 'metric',
  es: 'metric',
  el: 'metric',
};

export function localizeLength(meters: number, locale: string): string {
  const system = UNIT_PREFERENCES[locale] || 'metric';
  if (system === 'imperial') {
    const feet = meters * 3.28084;
    return `${feet.toFixed(0)} ft`;
  }
  return `${meters.toFixed(1)} m`;
}

2. 열거된 필드 (번역 키 사용)

선체 유형, 연료 유형, 요트 범주 — 이것들은 자유 텍스트 번역이 아닌 번역 키를 사용해야 하는 고정 옵션입니다.

// messages/en.json
{
  "yacht": {
    "hullType": {
      "monohull": "Monohull",
      "catamaran": "Catamaran",
      "trimaran": "Trimaran"
    },
    "fuelType": {
      "diesel": "Diesel",
      "electric": "Electric",
      "hybrid": "Hybrid"
    }
  }
}
// messages/fr.json
{
  "yacht": {
    "hullType": {
      "monohull": "Monocoque",
      "catamaran": "Catamaran",
      "trimaran": "Trimaran"
    },
    "fuelType": {
      "diesel": "Diesel",
      "electric": "Électrique",
      "hybrid": "Hybride"
    }
  }
}

3. 자유 텍스트 설명 (어려운 부분)

요트 설명은 마케팅 복사본입니다. 중개인이 작성합니다 — 일반적으로 영어 또는 프랑스어로 — 그리고 산업 용어, 감정적 언어, 그리고 특정 주장으로 가득합니다. 기계 번역만으로는 €5 million 리스팅에 충분하지 않습니다.

다음이 권장하는 접근 방식입니다:

  1. 원본 언어 설명을 저장하세요 CMS/데이터베이스에
  2. AI 번역을 첫 번째 패스로 사용 — GPT-4o 또는 Claude는 2026년에 요트 용어를 놀랍도록 잘 처리합니다
  3. 가격 임계값을 초과하는 리스팅에 플래그를 지정하세요(예: €1M+) 인간 검토용
  4. 번역된 설명을 캐시하세요 모든 요청에서 재번역 비용을 지불하지 않도록
// services/translate-listing.ts
import { openai } from '@ai-sdk/openai';
import { generateText } from 'ai';

export async function translateDescription(
  text: string,
  sourceLang: string,
  targetLang: string
): Promise<string> {
  const cached = await getFromCache(text, targetLang);
  if (cached) return cached;

  const { text: translated } = await generateText({
    model: openai('gpt-4o'),
    system: `You are a professional yacht broker translator. 
      Translate yacht listing descriptions from ${sourceLang} to ${targetLang}. 
      Preserve technical terminology. Maintain the luxury marketing tone. 
      Keep brand names, model names, and proper nouns unchanged.`,
    prompt: text,
  });

  await saveToCache(text, targetLang, translated);
  return translated;
}

이 접근 방식의 비용은 최소한입니다. GPT-4o로 500단어 요트 설명을 번역하는 데는 대략 $0.01-0.02가 소요됩니다. 500 리스팅 × 6 언어로도 초기 번역 패스에 $30-60만 보입니다. 프리미엄 리스팅의 인간 검토는 비용을 추가하지만, 단일 요트 판매가 $50K-200K의 수수료를 생성할 때는 절대 가치가 있습니다.

i18n 구현 패턴

나는 Next.js App Router와 next-intl을 가진 실제 구현 패턴을 안내하겠습니다. 왜냐하면 그것은 우리의 headless CMS 프로젝트 대부분이 사용하는 스택이기 때문입니다.

프로젝트 구조

src/
├── app/
│   └── [locale]/
│       ├── layout.tsx
│       ├── page.tsx
│       └── yachts/
│           ├── page.tsx
│           └── [slug]/
│               └── page.tsx
├── messages/
│   ├── en.json
│   ├── fr.json
│   ├── de.json
│   ├── it.json
│   ├── es.json
│   └── el.json
├── middleware.ts
└── i18n.ts

로캘 감지를 위한 미들웨어

// middleware.ts
import createMiddleware from 'next-intl/middleware';
import { locales, localePrefix, pathnames } from './navigation';

export default createMiddleware({
  locales,
  localePrefix,
  pathnames,
  defaultLocale: 'en',
  localeDetection: true,
});

export const config = {
  matcher: ['/((?!api|_next|_vercel|.*\\..*).*)'],
};

번역이 있는 요트 리스팅 페이지

// app/[locale]/yachts/[slug]/page.tsx
import { useTranslations } from 'next-intl';
import { getYachtBySlug } from '@/lib/yachts';
import { localizeLength, localizePrice } from '@/utils/localize';

export async function generateMetadata({ params: { locale, slug } }) {
  const yacht = await getYachtBySlug(slug);
  const t = await getTranslations({ locale, namespace: 'yacht' });
  
  return {
    title: `${yacht.name} — ${localizeLength(yacht.lengthMeters, locale)} ${t('forSale')}`,
    alternates: {
      languages: {
        'en': `/en/yachts/${slug}`,
        'fr': `/fr/yachts/${slug}`,
        'de': `/de/yachten/${slug}`,
        'it': `/it/yacht/${slug}`,
        'es': `/es/yates/${slug}`,
        'el': `/el/skafi/${slug}`,
      },
    },
  };
}

export default async function YachtPage({ params: { locale, slug } }) {
  const yacht = await getYachtBySlug(slug);
  const t = useTranslations('yacht');
  const description = await getTranslatedDescription(yacht.id, locale);

  return (
    <article>
      <h1>{yacht.name}</h1>
      <dl>
        <dt>{t('specs.length')}</dt>
        <dd>{localizeLength(yacht.lengthMeters, locale)}</dd>
        <dt>{t('specs.year')}</dt>
        <dd>{yacht.year}</dd>
        <dt>{t('specs.price')}</dt>
        <dd>{localizePrice(yacht.priceEur, locale)}</dd>
        <dt>{t('specs.hullType')}</dt>
        <dd>{t(`hullType.${yacht.hullType}`)}</dd>
      </dl>
      <div dangerouslySetInnerHTML={{ __html: description }} />
    </article>
  );
}

통화 및 단위 현지화 처리

지중해의 요트 가격은 거의 항상 유로로 나열되지만, 다른 시장의 바이어는 현지 통화로 참조 가격을 보기를 기대합니다. 다음이 이를 처리하는 방법입니다:

// utils/localize-price.ts
const CURRENCY_BY_LOCALE: Record<string, string> = {
  en: 'EUR',      // 국제 영어는 Med 시장에서 EUR로 기본값
  'en-US': 'USD',
  fr: 'EUR',
  de: 'EUR',
  it: 'EUR',
  es: 'EUR',
  el: 'EUR',
  tr: 'EUR',      // 터키 시장도 여전히 EUR로 가격을 책정합니다
  ar: 'USD',      // 중동 바이어는 USD를 선호합니다
};

export function localizePrice(
  priceEur: number,
  locale: string,
  exchangeRates?: Record<string, number>
): string {
  const currency = CURRENCY_BY_LOCALE[locale] || 'EUR';
  let amount = priceEur;

  if (currency !== 'EUR' && exchangeRates) {
    amount = priceEur * (exchangeRates[currency] || 1);
  }

  return new Intl.NumberFormat(locale, {
    style: 'currency',
    currency,
    maximumFractionDigits: 0,
  }).format(amount);
}

중요한 주의: 변환된 가격을 표시할 때 항상 "EUR의 가격" 또는 동등한 면책조항을 표시합니다. 요트 판매 계약은 특정 통화로 표기되며, 문맥 없이 변환된 가격을 표시하면 법적 문제가 발생할 수 있습니다.

다언어 요트 웹사이트를 위한 SEO

이것이 실제 보상이 일어나는 곳입니다. 적절한 다언어 SEO는 Azimut 68 리스팅이 뮌헨에서 "Azimut 68 kaufen"을 검색할 때 표시되고 파리에서 "Azimut 68 à vendre"를 검색할 때도 표시된다는 의미입니다.

hreflang 태그

이것들은 절대적으로 필요합니다. 모든 페이지는 모든 언어 버전을 가리키는 hreflang 태그가 필요합니다:

<link rel="alternate" hreflang="en" href="https://broker.com/en/yachts/azimut-68-2023" />
<link rel="alternate" hreflang="fr" href="https://broker.com/fr/yachts/azimut-68-2023" />
<link rel="alternate" hreflang="de" href="https://broker.com/de/yachten/azimut-68-2023" />
<link rel="alternate" hreflang="x-default" href="https://broker.com/en/yachts/azimut-68-2023" />

언어별 구조화된 데이터

각 언어 버전에 대해 현지화된 설명이 있는 Product 스키마를 사용합니다. Google은 언어별 구조화된 데이터를 명시적으로 지원하며, 다양한 Google 도메인에서 리치 결과에 리스팅이 나타나도록 도와줍니다.

사이트맵 전략

언어별 별도 사이트맵을 생성하고 사이트맵 인덱스에서 참조합니다:

<!-- sitemap-index.xml -->
<sitemapindex>
  <sitemap><loc>https://broker.com/sitemap-en.xml</loc></sitemap>
  <sitemap><loc>https://broker.com/sitemap-fr.xml</loc></sitemap>
  <sitemap><loc>https://broker.com/sitemap-de.xml</loc></sitemap>
</sitemapindex>

성능 고려사항

30개 이상의 고해상도 사진이 있는 요트 리스팅 페이지, 번역된 콘텐츠, 현지화된 사양은 빠르게 무거워질 수 있습니다. 중요한 것은:

  • ISR (Incremental Static Regeneration): 리스팅 페이지를 60분마다 재생성합니다. 요트 리스팅은 초 단위로 변경되지 않지만, 가격 책정과 가용성은 매일 변할 수 있습니다.
  • 번역 캐싱: 같은 설명을 두 번 번역하지 마세요. Redis 또는 간단한 데이터베이스 테이블을 사용하여 번역을 캐시합니다.
  • 이미지 최적화: 이것이 종종 가장 큰 승리입니다. 단일 요트 갤러리는 2GB의 소스 이미지를 포함할 수 있습니다. Next.js Image 또는 자동 형식 협상(WebP/AVIF)을 가진 CDN을 사용합니다.
  • 로캘별 번들 분할: 영어 사용자를 위해 프랑스어 번역을 로드하지 마세요. next-intlparaglide 모두 이를 자동으로 처리합니다.

최근 프로젝트에서 이 최적화는 Largest Contentful Paint를 모든 로캘에서 4.2s에서 1.1s로 가져왔습니다. 이탈률이 직접 손실된 수수료와 관련이 있을 때 이는 중요합니다.

실제 아키텍처 예제

지중해 중개 사이트를 위해 사용한 아키텍처는 다음과 같습니다:

┌─────────────┐     ┌──────────────┐     ┌─────────────┐
│   Sanity     │     │  Yacht API   │     │  Redis      │
│  (Marketing  │     │  (Listings,  │     │  (Translation│
│   content)   │     │   specs)     │     │   cache)    │
└──────┬───────┘     └──────┬───────┘     └──────┬──────┘
       │                    │                    │
       └────────────┬───────┘────────────────────┘
                    │
            ┌───────▼───────┐
            │   Next.js     │
            │   App Router  │
            │   + next-intl │
            └───────┬───────┘
                    │
            ┌───────▼───────┐
            │   Vercel      │
            │   Edge Network│
            └───────────────┘

Sanity는 마케팅 페이지, 팀 약력, 블로그 게시물을 처리합니다 — 모두 기본 다언어 지원이 있습니다. 요트 API(타사 서비스 또는 사용자 정의 Supabase 백엔드)는 리스팅 데이터를 제공합니다. Redis는 AI 생성 번역을 캐시합니다. Next.js는 로캘 인식 라우팅으로 모두를 함께 연결합니다.

이와 같은 아키텍처가 필요한 것처럼 들린다면, 프로젝트에 대해 이야기하고 싶습니다. 우리는 지중해 중개업소를 위해 몇 가지를 구축했으며 패턴을 다이얼했습니다.

자주 묻는 질문

지중해 요트 웹사이트는 얼마나 많은 언어를 지원해야 합니까? 최소한 영어와 주요 시장의 현지 언어가 필요합니다. 진지한 중개업소의 경우, 기본선으로 영어, 프랑스어, 독일어, 이탈리아어를 권장합니다 — 이것이 대략 80%의 지중해 요트 바이어를 포함합니다. €5M 이상의 초고급 세그먼트를 대상으로 하는 경우 러시아어와 아랍어를 추가합니다.

요트 리스팅에 기계 번역 또는 전문 번역가를 사용해야 합니까? 둘 다. 모든 리스팅에 AI 번역(GPT-4o 또는 Claude)을 첫 번째 패스로 사용한 다음 가격 임계값을 초과하는 리스팅을 인간 번역가가 검토하도록 합니다. 500단어 설명의 경우, AI 번역은 $0.02 미만이 소요되고 90%의 방법을 얻습니다. 프리미엄 리스팅에 대한 인간 검토는 설명당 $20-50이 소요되지만 높은 가치 판매의 정확성을 보장합니다.

다언어 요트 웹사이트에 가장 좋은 CMS는 무엇입니까? Sanity와 Contentful 모두 즉시 다언어 콘텐츠를 잘 처리합니다. Sanity의 문서 수준 현지화는 더 많은 유연성을 제공하는 반면, Contentful의 필드 수준 현지화는 설정하기가 더 간단합니다. 요트 리스팅 데이터 자체의 경우, 일반 목적 CMS에 모든 것을 강제하지 않고 별도의 전문 시스템을 권장합니다. 자세한 내용은 headless CMS 개발 페이지를 확인하세요.

다양한 단위 시스템에서 요트 측정값을 어떻게 처리합니까? 모든 측정값을 메트릭(미터, 킬로와트)으로 데이터베이스에 저장합니다. 사용자의 로캘을 기반으로 디스플레이 레이어에서만 임페리얼로 변환합니다. 유럽의 요트 산업은 보편적으로 메트릭을 사용하지만, 미국 바이어는 피트와 마력을 기대합니다. 일관된 형식을 위해 Intl.NumberFormat API를 사용합니다.

hreflang 태그가 요트 SEO에 정말 중요합니까? 절대적으로. hreflang 태그가 없으면 Google이 프랑스 리스팅을 독일 검색자에게 표시할 수 있고, 더 나쁘게는 번역된 페이지를 중복 콘텐츠로 취급할 수 있습니다. 우리는 이전에 잘못된 중개 사이트에서 hreflang을 올바르게 구현한 후 유기 트래픽이 40-60% 증가했습니다.

다언어 요트 중개 웹사이트를 구축하는 데 얼마나 드나요? 4-6개 언어, CMS 통합, 요트 리스팅 관리가 있는 제대로 구축된 다언어 요트 사이트는 일반적으로 복잡성에 따라 $30,000-80,000입니다. 가장 큰 비용 드라이버는 언어의 수, 사용자 정의 검색/필터 기능, 기존 요트 관리 시스템과의 통합입니다. 더 구체적인 견적은 가격 페이지를 방문하세요.

나중에 요트 웹사이트에 언어를 추가할 수 있습니까? 예, 처음부터 올바르게 구축된 경우. 적절한 i18n 아키텍처로, 새로운 언어를 추가하면 새로운 번역 파일을 만들고, 정적 UI 문자열을 번역하고, 리스팅 설명을 번역 파이프라인을 통해 실행하게 됩니다. 라우팅과 인프라가 이미 처리되어야 합니다. 현재 사이트가 처음부터 i18n을 염두에 두고 구축되지 않은 경우, 개조가 더 어렵습니다 — 하지만 여전히 가능합니다.

아랍어와 같은 우-좌 언어는 요트 웹사이트의 경우 어떻습니까? 아랍어는 지중해 요트 판매, 특히 €10M+ 세그먼트에서 점점 더 중요해지고 있습니다. CSS는 RTL 레이아웃을 지원해야 합니다 — 논리적 속성을 사용하세요(margin-left 대신 margin-inline-start) 그리고 철저히 테스트하세요. Next.js는 로캘별로 전환된 dir 속성이 있는 RTL을 지원합니다. 개발 시간을 추가하지만, 중동 바이어는 유의미하고 성장하는 시장 세그먼트를 나타냅니다.