PHP 국제화(i18n): 개발자를 위한 실용 가이드

more

Yee

Aug 03, 2024

cover-img

PHP 웹사이트, 이제 글로벌하게! 더 효율적인 다국어 지원 솔루션

저처럼 Laravel이나 Symfony 같은 대형 프레임워크 없이 '바닐라' PHP 프로젝트를 관리하고 있다면, 다국어(i18n) 지원이 은근히 계속 신경 쓰이는 문제였을 거예요.

전통적인 방법인 gettext는 강력하긴 하지만, 설정이 꽤 번거롭죠.특히 작은 프로젝트에서는 '호미로 할 일을 대포로 하는' 느낌이랄까요? 우리가 진짜 원하는 건, 복잡하지 않으면서도 빠르게 적용할 수 있는 방법이에요.

여러 프로젝트에서 시행착오를 겪은 끝에, PHP 배열 파일과 온라인 번역 도구를 활용한 가벼운 다국어 솔루션을 만들었어요.이 방식은 배포도 간단하고, 유지보수 비용도 정말 낮아요.오늘은 이 솔루션을 아낌없이 모두 공개합니다!

실전 가이드: O.Translator로 PHP 다국어 지원, 이렇게 해결했어요

핵심 아이디어는 아주 간단해요. 각 언어마다 PHP 파일을 하나씩 만들고, 그 파일에서 연관 배열을 return하는 거예요. 이 방법은 직관적이고, 성능 부담도 거의 없어요.

Step 1: 디렉토리 구조 계획하기

깔끔한 디렉토리 구조만 잘 잡아도 반은 성공이야.정리를 위해 모든 언어 파일을 같은 폴더에 두고, 언어 코드를 파일명으로 쓰면 돼. 예를 들면 이렇게:

project_root/
├── index.php         // Your main logic file
├── i18n/             // Folder for all language files
│   ├── lang.cn.php   // Chinese language pack
│   ├── lang.en.php   // English language pack
│   └── lang.fr.php   // French language pack

Step 2: 나만의 '언어 무기고' 만들기

이제 기본 언어 파일을 만들어보자.중국어를 예시로 lang.cn.php 파일을 만들어볼게.이 파일은 간단한 PHP 배열로, 키는 고유 식별자고 값은 실제로 보여줄 텍스트야.

lang.cn.php 예시: 키는 그대로, 값만 언어에 따라 바뀜

Step 3: 번역 마법사 O.Translator 등장

수십, 수백 개 항목을 직접 번역한다고?이런 반복 작업이야말로 개발자들이 제일 싫어하는 거지.여기서 우리의 비밀병기, O.Translator가 등장해.

이건 PHP 파일을 완벽하게 지원하는 전문 온라인 문서 번역 플랫폼이라, 배열을 바로 읽어서 70개가 넘는 언어로 번역해줄 수 있어.

진짜 말도 안 되게 간단해:

  1. **O.Translator 홈페이지**에 들어가서 기본 언어 파일(예: lang.cn.php)을 업로드해.
  2. 영어, 프랑스어처럼 원하는 언어를 선택해.
  3. 번역 버튼을 누르고 잠깐 기다리면, 번역된 lang.en.phplang.fr.php 파일이 바로 준비돼.

내가 제일 감탄한 건 O.Translator가 번역 결과의 일부를 미리보기로 무료 제공해준다는 거야.결과가 마음에 들면, 그때 전체 번역을 결제할지 결정하면 돼.그들 말로는: "마음에 들지 않는 제품엔 절대 돈을 내지 마세요."

4단계: 코드를 실제로 적용하기

이제 모든 준비가 끝났어;마지막 손질만 남았지.이제 메인 index.php 파일을 수정해서, 사용자가 선택한 언어에 따라 자동으로 언어팩을 불러오게 만들어보자.

<?php

// 1. Determine the current language (using a GET parameter for demonstration)
$supported_langs = ['en', 'cn', 'fr'];
$default_lang = 'en';
$lang = isset($_GET['lang']) && in_array($_GET['lang'], $supported_langs) ? $_GET['lang'] : $default_lang;

// 2. Load the corresponding language file
// Use a global variable like $_ or a specific variable like $TEXTS to store the strings
$_ = require_once __DIR__ . "/i18n/lang.{$lang}.php";

?>

HTML 템플릿에서 이렇게 간단하게 텍스트를 불러올 수 있어:

<!DOCTYPE html>
<html lang="<?php echo htmlspecialchars($lang); ?>">
<head>
    <meta charset="UTF-8">
    <title><?php echo htmlspecialchars($_['heading_home']); ?></title>
</head>
<body>
    <header>
      <h1><?php echo htmlspecialchars($_['heading_home']); ?></h1>
      <nav>
        <ul>
          <li><?php echo htmlspecialchars($_['heading_about']); ?></li>
          <li><?php echo htmlspecialchars($_['button_read_more']); ?></li>
        </ul>
      </nav>
    </header>
</body>
</html>

자, 이렇게 해서 간단한 다국어 웹사이트가 완성됐어!

고려사항과 한 단계 더 생각해보기

이 솔루션은 가볍긴 하지만, 실제 운영에 적용하기 전에 몇 가지 생각해볼 점이 있어:

  • 사용자 언어를 어떻게 감지할까? 예제에서는 ?lang=en 같은 GET 파라미터를 사용했어.실제 서비스에서는 $_SESSION, $_COOKIE를 쓰거나 브라우저의 Accept-Language 요청 헤더를 파싱해서 자동으로 언어를 감지할 수도 있어.
  • 성능 고려사항: 소규모나 중간 규모 웹사이트라면 매 요청마다 PHP 파일을 require_once로 불러오는 오버헤드는 거의 무시해도 돼.만약 사이트 트래픽이 많다면, APC나 OPcache 같은 바이트코드 캐싱 기술을 활용해서 추가로 최적화할 수 있어.
  • 확장성: 언어나 텍스트 문자열이 많아질수록 파일을 직접 관리하는 게 점점 복잡해질 수 있어.그럴 땐 PHP의 gettext 확장이나 프레임워크에서 제공하는 로컬라이제이션 컴포넌트 같은 좀 더 전문적인 i18n 솔루션을 고려해봐.
  • 번역 일관성: 브랜드명이나 용어를 모든 언어 버전에서 일관되게 사용하려면 O.Translator의 용어집 기능을 꼭 활용해봐!
  • 상위 전략: 이 글에서는 기술적인 구현 방법에 집중할 거야.웹사이트 다국어화 전체 전략이 궁금하다면, 우리 블로그의 다른 심층 글도 참고해봐.

주제

장면

장면

발행된 글11

추천 읽기