이 문서는 번역, 번역, 번역, 번역, 번역, 편집, 번역, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집, 편집

MVC 패턴 : 로컬라이제이션에 대한 자연적 적합

MVC 아키텍처는 3 개의 상호 연결 구성 요소로 응용 프로그램을 분할합니다. 모델, 전망 및 컨트롤러. 각 구성 요소가 다른 사람에게 영향을받지 않고 국제화 (i18n) 및 로컬화 (l10n)에 대한 확장 또는 수정 될 수 있기 때문에 이러한 우려의 분리는 특히 귀중합니다.

  • Model: data and business logic을 관리한다. 다국어 앱을 위해, 모델은 데이터베이스, API, 또는 리소스 파일 여부를, 언어 별 콘텐츠를 저장하거나 검색해야 한다.
  • View: 은 발표 레이어를 처리한다. 각 언어에서 콘텐츠를 정확하게 표시하기 위해 로컬 문자열, 날짜/숫자 포맷 및 방향 ‐ 인식 레이아웃 (RTL/LTR) 을 사용.
  • Controller: 사용자 입력을 처리하고, 로컬을 감지하고, 해당 정보를 조회하기 전에 적절한 리소스 또는 데이터를 선택한다.

이 깨끗한 분리는 새로운 리소스 파일이나 항목 만들기로 새로운 언어를 추가 할 수 있다는 것을 의미하며, 해당 리소스를 참조하기 위해 보기 템플릿을 조정하고, 컨트롤러가 올바른 로컬을 선택하도록 보장합니다. 비즈니스 논리 또는 데이터베이스 스키마를 재구성하지 않고 모든.

핵심 현지화 기술

String Storage에 대한 리소스 파일

리소스 파일 (JSON, YAML, XML, 또는 .resx)는 코드에서 언어 별 문자열을 유지. 예를 들어, 라라벨은 파일을 사용; ASP.NET 코어 사용 파일; 그리고 많은 자바 스크립트 프레임 워크는 JSON 번역 파일을 사용. 기본 패턴은 키 값 쌍입니다:

  • 한국어
  • ] 프랑스

리소스 파일을 사용하면 응용 논리를 터치하지 않고 번역자를 위해 트리 바이널을 만들고, 코베이스를 깨끗하게 유지한다.

Locale 탐지 및 협상

응용 프로그램은 사용자의 선호 언어를 자동으로 감지해야합니다. 일반적인 전략은 다음과 같습니다.

  • Browser Accept-Language header: Parsing 사용자가 우선 순위표를 얻기 위해.
  • User Profile settings: 사용자 로그인 후 세션 또는 데이터베이스에서 선택한 locale를 저장합니다.
  • URL 접두사 또는 하위 도메인: 예, 또는 ].
  • 쿠키 또는 로컬 저장: 세션을 통해 사용자의 언어 선택에 대해 설명합니다.

컨트롤러는 협상 알고리즘을 구현해야 합니다. 예를 들어, 사용자의 정확한 선호도를 시도하고 기본 언어로 돌아갑니다. W3C Internationalization Activity (]W3C i18n])는 내용 협상에 대한 자세한 지침을 제공합니다.

, 성별, 및 형식화

로컬라이제이션은 간단한 문자열 교체를 넘어 간다. 다른 언어에는 복잡한 복수 규칙 (예를 들어, "1 항목" vs. "2 항목" 영어,하지만 폴란드어 또는 아랍어의 여러 양식)이 있습니다. 많은 프레임 워크는 내장 된 다중화 규칙을 제공합니다. 라라벨의 , 심폰의 , ICU 메시지 형식. 마찬가지로, 날짜, 시간, 번호 및 통화 형식은 지역 협약 (LT:7])을 존중해야합니다. . ]].

콘텐츠 번역 전략

데이터베이스에 저장된 동적 콘텐츠 (예 : 제품 설명, 블로그 게시물), 당신은 여러 가지 옵션이 있습니다 :

  • Language column: 언어당 하나의 데이터베이스 열(예: ], ]). 단순하지만 많은 언어에 대해 확장 할 수 없습니다.
  • 세율 번역 테이블:] A ] 어떤 번역 가능한 성관계와 다형도 관계로 테이블. 이것은 더 유연하고 데이터베이스 정상화 모범 사례를 따르는 것입니다.
  • JSON 칼럼: 언어 키로 JSON 객체를 저장합니다. 프로토타이핑을 위해 빠른하지만 쿼리 및 유지에 어려울 수 있습니다.

예상된 언어와 콘텐츠 크기와 일치하는 접근 방식을 선택하십시오.

로컬라이제이션을 가진 MVC 통합: Step‐by‐Step Guide

일반적인 PHP 또는 C# MVC 프레임 워크에서 다국어 웹 응용 프로그램을 구축하는 것이 가정 해 봅시다. 다음 단계는 MVC 흐름으로 로컬라이제이션을 와이어하는 방법을 보여줍니다.

1. Multilingual Data를 위한 모형을 디자인하십시오

여러 언어를 지원하는 데 필요한 요소를 정의합니다. 예를 들어, ] 모델은 ]]를 저장하는 모델과 ], ], 를 가진 하나의 ‐to-many 관계를 가질 수 있습니다. Laravel의 Eloquent와 같은 ORM에서 올바른 번역을 자동으로 로드하기 위해 trait 또는 전용 패키지를 사용할 수 있습니다. 마찬가지로, 의 자원 파일은 로컬 키로 구성해야 합니다.

2. Locale 탐지를 위한 관제사를 형성하십시오

기본 컨트롤러(또는 미들웨어)에서 로컬 탐지를 구현합니다. 사용자의 선호도에 따라 애플리케이션의 현재 로컬을 설정합니다. 예를 들어, Laravel:

protected function setLocale(Request $request)
{
 $locale = $request->segment(1); // from URL
 if (in_array($locale, config('app.available_locales'))) {
 app()->setLocale($locale);
 session(['locale' => $locale]);
 }
}

ASP.NET Core에서는 자동 협상을 처리하는 ] 미들웨어를 추가할 수 있습니다. 컨트롤러는 ] 객체를 사용하여 올바른 번역을 반환합니다.

3. Localization 기능을 사용하여 보기 개발

전망에 있는 하드 코딩 문자열 대신, 로컬라이제이션을 사용합니다. 라라벨 블레이드에서는, ]]를 사용합니다. ASP.NET Razor에서 ]. 동적 콘텐츠의 경우, 현재 Locale에 따라 직접 보기 및 디스플레이 필드에 번역된 모델 인스턴스를 전달합니다. 또한 그 날짜와 번호 포맷을 사용하여 또는 를 확인합니다.

예를 들어, Laravel Blade의 간단한 로그인 페이지 스니펫:

<h2>{{ __('auth.login_title') }}</h2>
<form>
 <label>{{ __('auth.email') }}</label>
 <input type="email" name="email">
 <label>{{ __('auth.password') }}</label>
 <input type="password" name="password">
 <button type="submit">{{ __('auth.login_button') }}</button>
</form>

4. Enable 언어 엇바꾸기

이 웹 사이트는 귀하가 웹 사이트를 탐색하는 동안 귀하의 경험을 향상시키기 위해 쿠키를 사용합니다. 이 쿠키들 중에서 필요에 따라 분류 된 쿠키는 웹 사이트의 기본적인 기능을 수행하는 데 필수적이므로 브라우저에 저장됩니다. 또한이 웹 사이트의 사용 방식을 분석하고 이해하는 데 도움이되는 제 3 자 쿠키를 사용합니다. 이 쿠키는 귀하의 동의하에 만 브라우저에 저장됩니다. 이러한 쿠키를 거부 할 수도 있습니다. 이러한 쿠키 중 일부를 선택 해제하면 검색 환경에 영향을 미칠 수 있습니다.

모범 사례 및 고려

협력사

번역을 동기화하십시오. 자원 파일에 대한 버전 컨트롤을 사용하며, 번역 관리 시스템을 사용하여 고려하십시오 (예 : Lokalise, Crowdin) 더 큰 팀. 번역 키를 duplicating 피하십시오. 가능한 한 재사용하십시오.

다국어 사이트 사용자 경험

  • Language selector: clear, 가시 버튼 또는 flag icons 사용 (특정에 대한 alt 텍스트).
  • 선택을 기억하십시오: 세션, 쿠키, 데이터베이스를 통해 사용자의 언어가 지속됩니다.
  • 브라우저 설정: 처음 방문시, 사용 가능한 브라우저의 선호 언어 사용.
  • SEO with hreflang:] HTML []에 있는 ]를 구현하여 각 페이지의 대체 언어 버전에 대한 검색 엔진을 알려줍니다. 예를 들어 ].

성능 최적화

  • Cache 번역: Load resource file into Memory and cache them (예: Laravel’s ]]).
  • Eager 로드 번역: 를 쿼리 할 때 번역 모델, N+1 쿼리 문제를 방지하기 위해 eager 로드를 사용.
  • 로컬 탐지 오버헤드 최소화: 서비스 컨테이너 또는 세션에서 해결된 로컬 저장을 통해 검출 논리를 반복하지 않고 전 세계적으로 사용할 수 있습니다.

접근성 및 포괄적인

로컬 콘텐츠는 접근할 수 있어야 합니다. 언어 속성(]과 ]])이 ] 태그에 올바르게 설정되어 있습니다. 여러 언어에서 적절한 ARIA 라벨을 사용합니다. 각 지원 언어의 스크린 리더와 테스트합니다. W3C Internationalization FAQ]는 문서의 언어 설정에 대한 안내를 제공합니다.

Multilingual MVC 개발 지원 툴 및 프레임 워크

대부분의 현대 MVC 프레임 워크는 견고한 내장 또는 커뮤니티 지원 로컬라이제이션 패키지가 있습니다.

  • 라벨(PHP):]는 JSON 및 PHP 리소스 파일에 대한 로컬라이제이션, 복수화 규칙 및 지원을 포함합니다. 공식 라벨 로컬라이제이션 문서]를 참조하십시오.
  • ASP.NET Core (C#): 및 ] 인터페이스, 자원 파일과 스마트 로컬라이제이션. ASP.NET Core Localization guide]는 종합적이다.
  • 레일에 루비 (Ruby): YAML 파일과 I18n API를 사용하여 광범위한 복수 규칙과 날짜/숫자 포맷. ]Rails Internationalization guide]를 참조하십시오.
  • Django (Python): 템플릿 태그와 함께 gettext 및 번역 문자열을 지원합니다. Django internationalization docs] 모든 것을 커버합니다.
  • Symfony (PHP): XLIFF, YAML, PHP 형식 지원과 번역 구성품을 사용합니다. Symfony 번역를 참조하십시오.

Redux와 같은 React와 같은 프론트엔드 MVC 프레임 워크를 위해 와 같은 라이브러리(ICU 메시지 형식에 따라)는 MVC와 같은 백엔드 구조도 통합합니다.

관련 기사

MVC 패턴을 사용하여 다국어 웹 응용 프로그램을 구축하는 것은 입증, 유지 가능한 접근 방식입니다. MVC에 대한 우려의 분리를 활용하여 개발자는 전체 코디베이스를 재구성하지 않고 로컬라이제이션을 도입할 수 있습니다. 리소스 파일, 로컬 탐지 및 주의적인 데이터베이스 설계는 코어 툴킷을 형성하고, 프레임 워크는 지원 인프라를 제공합니다. 웹이 계속 수요하는 글로벌 도달으로, MVC 아키텍처 내에서 고체 로컬라이제이션 관행에 투자하여 사용자 만족, 접근성, 시장의 배당을 지불합니다.