Çok dilli bir site şablonu için en effient yolu

3 Cevap php

Ben bir İngilizce / Fransızca web sitesi inşa ediyorum ve böyle bir iş için en iyi uygulama olup olmadığını merak ediyorum.

  1. Siteyi çoğaltarak ve içeride uygun site ile bir Fransız ve İngiliz klasör yapma.

  2. Using PHP to swap the content with html tags. eg. if($lang=='en'):

  3. Hem HTML etiketlerini aynı bırakarak sadece içeriği takas php kullanın. örn. biryere ifadeler eğer. Bu verimlilik için kötü olurdu?

Başka bir öneri mutluluk duyacağız

3 Cevap

Biz (varsa) bizim site bu gibi çalışır uluslararası gittiğinde için yerinde bir çerçeve var ...

Klasör yapısı;

/
  lang/
    english/
      images/
      text/
    dutch/
      images/
      text/

Diline özgüdür herhangi bir metin veya görüntüleri doğrudan sayfasından kaldırılır ve sabitler tarafından değiştirilir. örneğin, giriş ekranında, biz bırakın;

echo TEXT_LOGIN_WELCOME;

; / lang / english / metin / login.php olarak tanımlanan

define('TEXT_LOGIN_WELCOME', 'Welcome, please login:');

ama içinde / lang / dutch / metin / login.php onu tanımlanan gibi;

define('TEXT_LOGIN_WELCOME', 'Welcome, please login (in dutch):');

;-)

Her dil, dosyası için kullanılan sayfasında tam olarak aynı adlı tanımlamak bir kamu bakan sayfasını yüklediğinizde bu yüzden, biz sadece kullanıcı konuşuyor hangi dili anlamaya ihtiyacımız var ve ilgili dil dosyasını tanımlamak içerebilir.

Bu sistem hakkında iyi bir şey, tüm dil bilgisi merkeziyetçi olmasıdır. Yeni bir dil eklemek gerektiğinde, sadece ana (english?) Klasörünü kopyalayın yeniden adlandırın, yukarı şeyi zip ve onların sihirli çalışmak için bir çeviri hizmetine göndermek. Tabii ki, bu sistemin olumsuz dil ve büyümek içerik hem de bakım ... Herkes bu konuda herhangi bir parlak fikir varsa o zaman ben bunları duymak isteriz!

Eğer IP tarafından bir kullanıcının konumunu tahmin gerek sona varsa Btw, sen geoIP kontrol etmek isteyebilirsiniz.

Bir çiftleşmiş sistemi kullanın. Smarty Template Engine muhtemelen en iyi bilinen PHP olanlardan biridir. Bir şablon sistemi aynı zamanda da bir farklı içerik sayfaları için bolca aynı şablonu kullanmanızı sağlar içeriğin (gelen ekran kodunu ayırarak çok daha kolay sayfaları korumak yapar, başarmak için çalışıyoruz kesin amaca hizmet etmez, sadece benzer doğa).

1 - tüm siteyi çoğaltarak 2 klasörler içine her kod touch-up tekrarlamak sizi zorlar: - [

2 - Senin gibi somenting kastediyorsan

<?php if($lang=='en') { ?>  
  <p>English text</p>  
<? } else { ?>  
  <p>Text français</p>  
<? } ?>

This solution is perfect to manage two languages in the same page.
But you still have duplicated tags.

3 - Change only content it's really satisfaction.
Maybe proliferate of if statements can weigh down php compiling... I don't know.
Anyway document can be more concise with this approach:

<?php            
  function interpreter($buffer) {
    $pieces = explode('#', $buffer);

    if (isset($_GET['lang'])) $begin=$_GET['lang'];
    else $begin = 1;  // 1 to display français, 2 to display english

    $tot = count($pieces);          

    for ($i=$begin; $i<$tot; $i+=3) {  // remove one language
    unset($pieces[$i]); }

    foreach ($pieces as $value) {  // recompose the text
    $output .= $value; }

    return $output;
  }

  ob_start("interpreter");      
?>

<a href="?lang=#1#2#">#Français#English#</a>
<p>#English text#Texte français#.</p>

<?php ob_end_flush() ?>

The text between ob_start and ob_end_flush is parsed AFTER php compiling.
That means are affected strings coming eg. from echo statement, not inside < ?php ?> tags.
Also content coming from php include IS affected.
But NOT external css or javascript.

Keep attention delimiter # isn't a caracter yet used elsewhere.
Maybe you'll prefer to replace with || or ^^

Tabii ki ileride size 3 dilde veya daha fazla içine bu çözüm uyarlayabilirsiniz. Eğer büyük bir sitenin çok hatlarında "Üçüncü dil çeviri #" girmek zorunda ama belki MatW gelen çözüm size uyuyor.