거

다국어 사용방법

· 2024-11-29 (금) 11:51:12 · 4602 · 9

다국어 사용방법 공유드립니다.

 

1. 클래스 추가

#/lang/I18n.php

<?php

class I18n {
    private $language;       // 현재 언어 코드
    private $translations;   // 번역 데이터 배열
    private $langDirectory;  // 언어 파일이 위치한 디렉토리

    public function __construct($defaultLanguage = 'ko', $langDirectory = __DIR__) {
        $this->langDirectory = rtrim($langDirectory, '/');
        $this->translations = [];

        // 세션 시작
        if (session_status() === PHP_SESSION_NONE) {
            session_start();
        }

        // 세션에서 언어 설정 로드
        $this->language = $_SESSION['language'] ?? $defaultLanguage;
        $this->loadLanguageFile();
    }

    // 언어 파일 로드
    private function loadLanguageFile() {
        $filePath = "{$this->langDirectory}/{$this->language}.php";
        if (file_exists($filePath)) {
            $this->translations = include($filePath);
        } else {
            throw new Exception("Language file '{$filePath}' not found.");
        }
    }

    // 현재 언어 설정
    public function setLanguage($language) {
        $this->language = $language;
        $_SESSION['language'] = $language; // 세션에 저장
        $this->loadLanguageFile();
    }

    // 현재 언어 가져오기
    public function getLanguage() {
        return $this->language;
    }

    // 번역 함수
    public function __($key, $params=[]) {
        if (isset($this->translations[$key])) {
            $message = $this->translations[$key];
            if (!empty($params)) {
                return vsprintf($message, $params);
            }
            return $message;
        }
        return $key; // 키가 없으면 키 자체 반환
    }
}

2. 언어파일 추가

<?php
#/lang/en.php
return [
    'greeting' => 'Hello, %s! Welcome to %s.',
    'items_in_cart' => 'You have %d items in your cart.',
];
<?php
#/lang/ko.php
return [
    'greeting' => '%s님, 안녕하세요! %s에 오신 것을 환영합니다.',
    'items_in_cart' => '장바구니에 %d개의 상품이 있습니다.',
];

 

3. extend 추가

#extend/i18n.extend.php
<?php
include G5_PATH.'/lang/I18n.php';
$i18n = new I18n();
function __($key, $params=[]) {
    global $i18n;
    return $i18n->__($key, $params);
}

 

사용예제 

1. 언어변경

$i18n->setLanguage('en');

 

2. 텍스트출력
echo __('greeting', ['John Doe', 'gnuboard']);

|

댓글 9개

감사합니다

2024-11-30 (토) 13:59:56

감사합니다 ^^

감사합니다.

2024-12-02 (월) 09:49:27

감사합니다~

감사합니다.

감사합니다.

안녕하세요 혹시 이거 어떻게 사용 하는 거예요

이번에 한글 하고 영어 이렇게 사용 하려고 하는데 어떻게 사용하는지 궁금 합니다.

그리고 메뉴등 전체 페이지가 바귀는 것인지요

안녕하세요 혹시 이거 어떻게 사용 하는 거예요

이번에 한글 하고 영어 이렇게 사용 하려고 하는데 어떻게 사용하는지 궁금 합니다.

그리고 메뉴등 전체 페이지가 바귀는 것인지요

2025-01-20 (월) 15:08:52

@꿈의세계 

안녕하세요 해당 코드 적용시 메뉴등 전체 페이지가 변경되지는 않습니다. /lang 디렉토리에 정의된 언어에 대해서만 적용가능합니다. 

 

만약 메뉴에 적용하고 싶으시면 lang/ko.php /lang/en.php에 메뉴명을 정의하시고 메뉴 출력하는 부분에 '__()'함수를 사용하시면 됩니다.

 

예)

/lang/en.php

return [
'about' => 'about',
]

 

/lang/ko.php

return [
'about' => '소개',
]

 

// 메뉴 출력

echo __('about'); // 한글설정이라면 '소개',  영서 설정이라면 'about' 출력

댓글을 작성하시려면 로그인이 필요합니다.

그누보드5 팁자료실

2,788건
+
제목 글쓴이 날짜 조회
24-12-28 조회 3,047
24-12-26 조회 3,698
24-12-25 조회 3,044
24-12-24 조회 3,585
24-12-24 조회 2,876
24-12-19 조회 3,357
24-12-17 조회 3,150
24-12-17 조회 2,958
24-12-16 조회 2,970
24-12-14 조회 3,564
24-12-14 조회 3,316
24-12-12 조회 3,347
24-12-10 조회 3,116
24-12-03 조회 3,504
24-12-01 조회 3,087
24-11-30 조회 3,175
24-11-29 조회 4,603
24-11-28 조회 3,025
24-11-25 조회 2,840
24-11-22 조회 2,900
24-11-20 조회 3,222
24-11-19 조회 2,832
24-11-16 조회 3,370
24-11-13 조회 2,887
24-11-11 조회 3,361
24-11-09 조회 3,191
24-11-04 조회 3,799
24-11-02 조회 3,189
24-10-28 조회 3,542
24-10-24 조회 3,565