댓글 검색 목록

[php] PHP로 다국어 지원을 구현하는 2 가지 방법

페이지 정보

작성자 운영자 작성일 20-04-20 13:43 조회 1,474 댓글 0

언어 장벽 강화 


PHP에서 다국어 지원을 구현하는 방법에 대한 튜토리얼에 오신 것을 환영합니다. PHP에서 언어 장벽을 없애기 위해서는 두 가지 일반적인 전략이 있습니다.

  • 모든 HTML 텍스트를 PHP 변수에 넣고 번역을 작성하십시오.
  • 템플리트 시스템 작성 및 적절한 로케일 파일로드

운 좋게도 실제로는 복잡한 과정이 아니라 조직의 고통에 더 가깝습니다.이 가이드에서 이 작업을 수행하는 방법에 대한 예를 살펴 보겠습니다. 알아 보려면 계속 읽으십시오!


ⓘ이 튜토리얼을 시작할 때 모든 예제 소스 코드가 포함 된 zip 파일을 포함 시켰으므로 모든 내용을 복사하여 붙여 넣을 필요가 없습니다.


다운로드 


먼저 약속 된 모든 예제 소스 코드에 대한 다운로드 링크가 있습니다.


소스 코드 다운로드 


소스 코드를 다운로드하려면 여기를 클릭하십시오. MIT 라이센스에 따라 릴리스되었으므로 그 위에 빌드하거나 자신의 프로젝트에서 자유롭게 사용하십시오.


빠른 시작 


  • 폴더에 다운로드하여 압축을 풉니다.
  • 관련된 데이터베이스가 없으므로 포함 된 각 파일을 따라 가십시오.

변수 교체 


모든 HTML 텍스트를 "추출"하고 변수에 넣어 소위 더 쉬운 방법부터 시작하겠습니다. 이것은 처리 할 내용이 너무 많지 않으면 실제로 매우 빠르게 구현 할 수 있는 구식 방법입니다.


HTML 페이지 


<?php // 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 ?> <!DOCTYPE html> <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><?=$page[0]?></strong> <div> <?=$page[1]?>: <span onclick="changelang('en-us')">[<?=$page[2]?>]</span> <span onclick="changelang('zh-CHS')">[<?=$page[3]?>]</span> </div> </header> <div id="page-body"> <?=$page[4]?> </div> <footer id="page-footer"> <?=$page[5]?> </footer> </body> </html> 


HTML에서 유의해야 할 사항 :


  • HTML의 모든 텍스트는 $page PHP 변수로 대체됩니다.
  • 대신 텍스트가 개별 파일로 저장됩니다. 1c-lang-en-us.php는 영어를 포함하고 1c-lang-zh-CHS.php는 중국어를 포함합니다.
  • PHP 세션을 시작해야 하며 $_SESSION['lang'] 플래그는 사용자가 선호하는 언어를 나타냅니다. 선택한 언어 파일이 로드 되어 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로 할 일은 없습니다.


언어 파일 


<?php $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 &copy; My Website" ]; ?> 


<?php $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 호출을 발생 시키고 언어 설정을 서버로 보낸 다음 페이지를 다시 로드 합니다.


<?php session_start(); $_SESSION['lang'] = $_POST['lang']; echo "OK"; ?> 


서버 측에서는 $_SESSION['lang'] 설정을 업데이트하기 만하면 됩니다.


템플릿 시스템 


계속해서 두 번째 방법을 사용하여 HTML을 세그먼트로 "분할"하고 효과적으로 템플릿 / 로캘 시스템을 만듭니다.


템플릿 클래스 


<?php // 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을 다섯 부분으로 나눕니다.


  • 페이지 상단 및 하단 – 내용이나 텍스트가 없는 <head> 및 <body> 섹션입니다.
  • 언어 별 상단 및 하단 – <header> 및 <footer> 섹션입니다.
  • 본문 자체 – 주요 내용 영역.

이런 방식으로 언어 나 지역마다 디자인이나 템플릿이 다를 수 있습니다. 기본 시스템은 여전히 ​​동일합니다.


HTML TOP & BOTTOM 


<!DOCTYPE html> <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 &copy; 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> 


이 파일은 사용자 정의 된 파일을 찾을 수 없는 페이지입니다.


짜 맞추다 


<?php require "2a-class-template.php"; $pageLib->load("index"); ?> 


<?php require "2a-class-template.php"; $pageLib->load("index", "zh-CHS"); ?> 


그러나 모든 것이 제자리에 있으면 load(PAGE, LANGUAGE) 함수를 호출하기 만하면 됩니다.


공연 & 캐싱 


당신은“Ha! 너무 멍청 해 너무 많은 템플릿 파일을 로드 하는 속도가 느립니다”– 전체 페이지를 캐시 하는 작은 업그레이드 버전입니다.


캐시가 있는 템플릿 클래스 


<?php // 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의 몇 줄만 추가하면 전체 페이지를 캐시 폴더에 저장하고 그 이후부터 로드 할 수 있습니다. 모든 템플릿 파일을 다시 로드해야 하는 귀중한 시스템 리소스를 효과적으로 절약 할 수 있습니다.


유용한 비트 


이것이 이 프로젝트의 전부이며, 여기에 도움이 될만한 추가 정보에 대한 작은 섹션이 있습니다.


어떤게 더 좋아? 


글쎄, 각 방법에는 장단점이 있습니다.


  • 처리 할 내용이 너무 많지 않으면 텍스트 대체 방법을 기존 프로젝트에 구현하는 것이 더 쉽습니다.
  • 그러나 텍스트 교체의 문제점은 유연성이 크지 않다는 것입니다. 모든 언어는 HTML 디자인과 레이아웃이 동일합니다.
  • 처음에는 템플릿 시스템을 만드는 것이 번거롭습니다. 그러나 일단 당신이 그것을 가지고, 새로운 페이지를 만드는 것은 산들 바람입니다.
  • 템플릿 시스템도 매우 유연합니다. 서로 다른 언어 (예 : http://jp.my-site.com, http://fr.my-site.com)의 하위 도메인을 만들 수 있습니다. – 모두 다른 페이지와 디자인을 제공 할 수 있지만 실제로는 동일한 백본 시스템.

따라서 전적으로 원하는 결과를 얻습니다.


대안 – Google 번역 


모두 기술의 힘을 환영합니다. 웹 사이트에서 자동으로 번역을 수행 할 수 있는 오래된 Google – Google Translate API가 제공하는 대안이 있습니다. 그렇습니다. 번역은 지금도 여전히 기이합니다 ... 완성하기까지 몇 년이 걸릴 수 있습니다.


참조 및 링크 


SEO에 대해 걱정되는 경우 다음을 참조 할 수 있는 몇 가지 링크가 있습니다.



댓글목록 0

등록된 댓글이 없습니다.

웹학교 로고

온라인 코딩학교

코리아뉴스 2001 - , All right reserved.