언어 장벽 강화
PHP에서 다국어 지원을 구현하는 방법에 대한 튜토리얼에 오신 것을 환영합니다. PHP에서 언어 장벽을 없애기 위해서는 두 가지 일반적인 전략이 있습니다.
운 좋게도 실제로는 복잡한 과정이 아니라 조직의 고통에 더 가깝습니다.이 가이드에서 이 작업을 수행하는 방법에 대한 예를 살펴 보겠습니다. 알아 보려면 계속 읽으십시오!
ⓘ이 튜토리얼을 시작할 때 모든 예제 소스 코드가 포함 된 zip 파일을 포함 시켰으므로 모든 내용을 복사하여 붙여 넣을 필요가 없습니다.
다운로드
먼저 약속 된 모든 예제 소스 코드에 대한 다운로드 링크가 있습니다.
소스 코드 다운로드
소스 코드를 다운로드하려면 여기를 클릭하십시오. MIT 라이센스에 따라 릴리스되었으므로 그 위에 빌드하거나 자신의 프로젝트에서 자유롭게 사용하십시오.
빠른 시작
변수 교체
모든 HTML 텍스트를 "추출"하고 변수에 넣어 소위 더 쉬운 방법부터 시작하겠습니다. 이것은 처리 할 내용이 너무 많지 않으면 실제로 매우 빠르게 구현 할 수 있는 구식 방법입니다.
HTML 페이지
// INIT - SET LANGUAGE session_start(); if (!isset($_SESSION['lang'])) { $_SESSION['lang'] = "en-us"; } // LOAD LANGUAGE FILE FOR PAGE require "1c-lang-" . $_SESSION['lang'] . ".php"; // HTML OUTPUT // The key here is to put all the text into an array <html lang="<?=$_SESSION['lang']?>"> <head> <title> Multi-Language Demo </title> <link href="1b-theme.css" rel="stylesheet"> <script src="1d-lang.js"></script> </head> <body> <header id="page-head"> <strong>0] =$page[</strong> <div> 1] =$page[: <span onclick="changelang('en-us')">[2] =$page[]</span> <span onclick="changelang('zh-CHS')">[3] =$page[]</span> </div> </header> <div id="page-body"> 4] =$page[ </div> <footer id="page-footer"> 5] =$page[ </footer> </body> </html>
HTML에서 유의해야 할 사항 :
CSS
body, html { font-family: arial, sans-serif; padding: 0; margin: 0; } #page-head { padding: 20px; background: #ffe5e2; } #page-body { padding: 10px; background: #f2f2f2; } #page-footer { padding: 10px; font-size: 0.9em; background: #f6ffe2; }
글쎄, 이것들은 단지 "정규 조"화장품입니다. CSS로 할 일은 없습니다.
언어 파일
$page = [ "My Website", "Change Language", "English", "中文", "<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce dolor leo, commodo vitae nunc lacinia, mollis tristique dui.</p>" . "<p>Phasellus lacus erat, suscipit non tristique a, egestas eu lectus.</p>", "Copyright © My Website" ];
$page = [ "我的网站", "语言", "English", "中文", "<p>煮豆燃豆萁,豆在釜中泣。</p>" . "<p>本是同根生,相煎何太急。</p>", "版权所有: 我的网站" ];
이러한 파일에는 HTML에 삽입 할 텍스트가 포함되어 있습니다.
스위칭 언어
function changelang (lg) { // lang () : change language // PARAM lg : language code // DATA var data = new FormData(); data.append('lang', lg); // AJAX var xhr = new XMLHttpRequest(); xhr.open('POST', "1e-switch.php", true); xhr.onload = function () { if (this.response=="OK") { location.reload(); } else { alert("An error occurred"); console.log(this.response); } }; xhr.send(data); }
언어를 전환하는 메커니즘은 간단합니다. 위의 자바 스크립트 함수는 단순히 AJAX 호출을 발생 시키고 언어 설정을 서버로 보낸 다음 페이지를 다시 로드 합니다.
session_start(); $_SESSION['lang'] = $_POST['lang']; echo "OK";
서버 측에서는 $_SESSION['lang'] 설정을 업데이트하기 만하면 됩니다.
템플릿 시스템
계속해서 두 번째 방법을 사용하여 HTML을 세그먼트로 "분할"하고 효과적으로 템플릿 / 로캘 시스템을 만듭니다.
템플릿 클래스
// PATH - AUTOMATIC // ! Manually put in your absolute path if you are getting path problems define('PATH_LIB', __DIR__ . DIRECTORY_SEPARATOR); define('PATH_PAGES', PATH_LIB . "2-pages" . DIRECTORY_SEPARATOR); // THE TEMPLATE CLASS class Page { function load ($page, $lang="en-us") { // load() : load target page require PATH_PAGES . "2b-page-top.php"; require PATH_PAGES . "2c-$lang-top.php"; $pageFile = PATH_PAGES . "2d-$lang-$page.php"; require file_exists($pageFile) ? $pageFile : PATH_PAGES . "2d-404.php" ; require PATH_PAGES . "2c-$lang-bottom.php"; require PATH_PAGES . "2b-page-bottom.php"; } } $pageLib = new Page();
템플릿 시스템의 백본 역할을 하는 간단한 PHP 라이브러리를 만들어 봅시다. 주어진 언어로 지정된 페이지를 로드하는 단일 기능 만 있습니다. 다음으로 HTML을 다섯 부분으로 나눕니다.
이런 방식으로 언어 나 지역마다 디자인이나 템플릿이 다를 수 있습니다. 기본 시스템은 여전히 동일합니다.
HTML TOP & BOTTOM
<html lang="<?=$lang?>"> <head> <title> Multi-Language Demo </title> <link href="1b-theme.css" rel="stylesheet"> </head> <body>
</body> </html>
이것들은 설명이 필요하며 <head> 및 <body> 섹션 만 있습니다.
영어 랭귀지 및 하단
<header id="page-head"> <strong>My Website</strong> <div> Change Language: <a href="2e-english.php">English</a> <a href="2e-chinese.php">中文</a> </div> </header> <div id="page-body">
</div> <footer id="page-footer"> Copyright © My Website </footer>
영어의 상단 및 하단 섹션.
중국어 언어 TOP & BOTTOM
<header id="page-head"> <strong>我的网站</strong> <div> 语言: <a href="2e-english.php">English</a> <a href="2e-chinese.php">中文</a> </div> </header> <div id="page-body">
</div> <footer id="page-footer"> 版权所有: 我的网站 </footer>
중국어의 상단 및 하단 섹션 – 실제로 언어마다 디자인이나 레이아웃이 다를 수 있습니다.
주요 내용
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce dolor leo, commodo vitae nunc lacinia, mollis tristique dui.</p> <p>Phasellus lacus erat, suscipit non tristique a, egestas eu lectus.</p>
<p>煮豆燃豆萁,豆在釜中泣。</p> <p>本是同根生,相煎何太急。</p>
템플릿 시스템으로 페이지를 만드는 것은 간단합니다. 각 컨텐츠 섹션을 작성하기 만하면 됩니다.
<h1>404</h1> <p> FILE NOT FOUND! </p>
이 파일은 사용자 정의 된 파일을 찾을 수 없는 페이지입니다.
짜 맞추다
require "2a-class-template.php"; $pageLib->load("index");
require "2a-class-template.php"; $pageLib->load("index", "zh-CHS");
그러나 모든 것이 제자리에 있으면 load(PAGE, LANGUAGE) 함수를 호출하기 만하면 됩니다.
공연 & 캐싱
당신은“Ha! 너무 멍청 해 너무 많은 템플릿 파일을 로드 하는 속도가 느립니다”– 전체 페이지를 캐시 하는 작은 업그레이드 버전입니다.
캐시가 있는 템플릿 클래스
// PATH - AUTOMATIC // ! Manually put in your absolute path if you are getting path problems define('PATH_LIB', __DIR__ . DIRECTORY_SEPARATOR); define('PATH_PAGES', PATH_LIB . "2-pages" . DIRECTORY_SEPARATOR); define('PATH_CACHE', PATH_LIB . "3-cache" . DIRECTORY_SEPARATOR); // VERSION TIMESTAMP - YYYYMMDDHHMM // ! Update this whenever you have done modifications define('VER_PAGE', "201904040000"); // THE TEMPLATE CLASS class Page { function load ($page, $lang="en-us") { // load() : load target page // Try to load cached copy $cache = PATH_CACHE . "3b-$lang-$page-" . VER_PAGE . ".html"; if (file_exists($cache)) { require $cache; } // If not, load template and generate cache else { // Start buffer, output HTML ob_start(); require PATH_PAGES . "2b-page-top.php"; require PATH_PAGES . "2c-$lang-top.php"; $pageFile = PATH_PAGES . "2d-$lang-$page.php"; require file_exists($pageFile) ? $pageFile : PATH_PAGES . "2d-404.php" ; require PATH_PAGES . "2c-$lang-bottom.php"; require PATH_PAGES . "2b-page-bottom.php"; // Save the buffer to cache file $stream = fopen($cache, 'w'); fwrite($stream, ob_get_contents()); fclose($stream); } } } $pageLib = new Page();
그래도 ob_start 및 fwrite의 몇 줄만 추가하면 전체 페이지를 캐시 폴더에 저장하고 그 이후부터 로드 할 수 있습니다. 모든 템플릿 파일을 다시 로드해야 하는 귀중한 시스템 리소스를 효과적으로 절약 할 수 있습니다.
유용한 비트
이것이 이 프로젝트의 전부이며, 여기에 도움이 될만한 추가 정보에 대한 작은 섹션이 있습니다.
어떤게 더 좋아?
글쎄, 각 방법에는 장단점이 있습니다.
따라서 전적으로 원하는 결과를 얻습니다.
대안 – Google 번역
모두 기술의 힘을 환영합니다. 웹 사이트에서 자동으로 번역을 수행 할 수 있는 오래된 Google – Google Translate API가 제공하는 대안이 있습니다. 그렇습니다. 번역은 지금도 여전히 기이합니다 ... 완성하기까지 몇 년이 걸릴 수 있습니다.
참조 및 링크
SEO에 대해 걱정되는 경우 다음을 참조 할 수 있는 몇 가지 링크가 있습니다.
등록된 댓글이 없습니다.