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의 용어집 기능을 꼭 활용해봐!
- 상위 전략: 이 글에서는 기술적인 구현 방법에 집중할 거야.웹사이트 다국어화 전체 전략이 궁금하다면, 우리 블로그의 다른 심층 글도 참고해봐.