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.8,
  "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'은 {locale} 라우트 파라미터에서 가져옵니다
            if ($locale = $request->route('locale')) {
                App::setLocale($locale); // 이 요청에 대한 로케일 설정
            }
    
            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'); // 기본값은 영어
    
    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로 이동하세요: