Laravel

Lingo.dev CLI를 사용한 Laravel AI 번역

Laravel란 무엇인가요?

Laravel은 표현력이 풍부하고 우아한 구문을 가진 PHP 웹 애플리케이션 프레임워크입니다. 최신 웹 애플리케이션을 구축하기 위한 라우팅, 인증, 세션, 캐싱 기능을 기본으로 제공합니다.

Lingo.dev CLI란 무엇인가요?

Lingo.dev는 AI 기반 번역 플랫폼입니다. Lingo.dev CLI는 소스 파일을 읽고, 번역 가능한 콘텐츠를 대규모 언어 모델로 전송한 후, 번역된 파일을 프로젝트에 다시 작성합니다.

이 가이드에 대하여

이 가이드는 Laravel 애플리케이션에서 Lingo.dev CLI를 설정하는 방법을 설명합니다. 로컬라이제이션을 지원하는 Laravel 프로젝트를 생성하고, 번역 파이프라인을 구성하며, 언어 전환을 구현하는 방법을 배우게 됩니다.

1단계. Laravel 프로젝트 설정

  1. PHP와 Composer를 설치합니다:

    /bin/bash -c "$(curl -fsSL https://php.new/install/mac/8.4)"
    
  2. Laravel을 전역으로 설치합니다:

    composer global require laravel/installer
    
  3. 새 Laravel 프로젝트를 생성합니다:

    laravel new example-app
    

    메시지가 표시되면:

    • 프로젝트 유형으로 "None"을 선택합니다
    • 데이터베이스로 "SQLite"를 선택합니다
  4. 프로젝트 디렉토리로 이동합니다:

    cd example-app
    

2단계. 소스 콘텐츠 생성

  1. Laravel의 기본 언어 파일을 게시합니다:

    php artisan lang:publish
    

    이렇게 하면 lang/en/auth.php와 같은 번역 파일이 포함된 lang/en 디렉토리가 생성됩니다.

3단계. CLI 구성

프로젝트 루트에 i18n.json 파일을 생성합니다:

{
  "$schema": "https://lingo.dev/schema/i18n.json",
  "version": "1.10",
  "locale": {
    "source": "en",
    "targets": ["es"]
  },
  "buckets": {
    "php": {
      "include": ["lang/[locale]/*.php"]
    }
  }
}

이 파일은 다음을 정의합니다:

  • Lingo.dev CLI가 번역해야 하는 파일
  • 번역할 언어

이 경우, 구성은 PHP 언어 파일을 영어에서 스페인어로 번역합니다.

다음 사항에 유의해야 합니다:

  • [locale]는 런타임에 대체되는 플레이스홀더입니다. 이를 통해 콘텐츠가 한 위치(예: lang/en/auth.php)에서 읽혀지고 다른 위치(예: lang/es/auth.php)에 작성되도록 보장합니다.
  • Lingo.dev CLI는 이 패턴과 일치하는 언어 디렉토리의 모든 PHP 파일을 번역합니다.

자세한 내용은 i18n.json 구성을 참조하세요.

4단계. 콘텐츠 번역하기

  1. Lingo.dev 계정에 가입하세요.

  2. CLI를 통해 Lingo.dev에 로그인하세요:

    npx lingo.dev@latest login
    
  3. 번역 파이프라인을 실행하세요:

    npx lingo.dev@latest run
    

    CLI는 번역된 콘텐츠를 저장하기 위한 lang/es/ 디렉토리와 번역된 내용을 추적하기 위한(불필요한 재번역을 방지하기 위해) i18n.lock 파일을 생성합니다.

5단계. 번역 사용하기

  1. 라우트에서 로케일을 설정하는 미들웨어를 생성하세요:

    php artisan make:middleware SetLocaleFromRoute
    
  2. 생성된 app/Http/Middleware/SetLocaleFromRoute.php 파일을 업데이트하세요:

    <?php
    namespace App\Http\Middleware;
    
    use Closure;
    use Illuminate\Http\Request;
    use Illuminate\Support\Facades\App;
    use Symfony\Component\HttpFoundation\Response;
    
    class SetLocaleFromRoute
    {
        /**
         * Handle an incoming request.
         *
         * @param  \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response)  $next
         */
        public function handle(Request $request, Closure $next): Response
        {
            // 'locale' comes from the {locale} route parameter
            if ($locale = $request->route('locale')) {
                App::setLocale($locale); // sets the locale for this request
            }
    
            return $next($request);
        }
    }
    
  3. bootstrap/app.php에 미들웨어를 등록하세요:

    <?php
    
    use Illuminate\Foundation\Application;
    use Illuminate\Foundation\Configuration\Exceptions;
    use Illuminate\Foundation\Configuration\Middleware;
    use App\Http\Middleware\SetLocaleFromRoute;
    
    return Application::configure(basePath: dirname(__DIR__))
        ->withRouting(
            web: __DIR__.'/../routes/web.php',
            commands: __DIR__.'/../routes/console.php',
            health: '/up',
        )
        ->withMiddleware(function (Middleware $middleware) {
            $middleware->alias([
                'setLocale' => SetLocaleFromRoute::class,
            ]);
        })
        ->withExceptions(function (Exceptions $exceptions): void {
            //
        })->create();
    
  4. routes/web.php에서 로케일 접두사가 있는 라우트를 구성하세요:

    <?php
    
    use Illuminate\Support\Facades\Route;
    
    Route::redirect('/', '/en'); // default to English
    
    Route::prefix('{locale}')
        ->whereIn('locale', ['en', 'es'])
        ->middleware('setLocale')
        ->group(function () {
            Route::get('/', function () {
                return view('welcome');
            })->name('home');
        });
    
  5. 뷰에서 지역화된 콘텐츠를 표시하려면 __ 헬퍼 함수를 사용하세요:

    <!DOCTYPE html>
    <html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
        <head>
            <meta charset="utf-8">
            <meta name="viewport" content="width=device-width, initial-scale=1">
            <title>{{ config('app.name', 'Laravel') }}</title>
        </head>
        <body>
            <nav>
              <a href="{{ route('home', ['locale' => 'en']) }}" class="underline mr-4">English</a>
              <a href="{{ route('home', ['locale' => 'es']) }}" class="underline">Español</a>
            </nav>
    
            <p class="mb-6">{{ __('auth.throttle') }}</p>
        </body>
    </html>
    
  6. 개발 서버를 시작합니다:

    npm install
    npm run build
    composer run dev
    
  7. 다음 URL로 이동합니다: