PHP 국제화(i18n): 개발자를 위한 실용 가이드
Yee
Aug 03, 2024

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개가 넘는 언어로 번역해줄 수 있어.
진짜 말도 안 되게 간단해:
- **O.Translator 홈페이지**에 방문해서 기본 언어 파일(예:
lang.cn.php)을 업로드해보세요. - 영어, 프랑스어처럼 원하는 언어를 선택해.
- 번역 버튼을 누르고 잠깐 기다리면, 번역된
lang.en.php랑lang.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의 용어집 기능을 꼭 활용해보세요.
- 상위 전략: 이 글에서는 기술적인 구현 방법에 집중할 거야.웹사이트 국제화 전체 전략이 궁금하다면, 다른 심층 글도 한 번 읽어보세요.
