PHP ve MySQL bir çok dilli web sitesi yapmak için nasıl

6 Cevap php

Can any body tell me how i make a dynamic multilanguage website in php and mysql.I have no idea abt it.I search on google and do not find good solution. Any one tell me step by step guide if possible made a demo for multilanguage website. Or please refer me any link where tell the detail abt it.How i do it.

Şimdiden teşekkürler.

Son derece takdir.

Best Regard Hasnat

6 Cevap

Kısa cevap: Bir düşünün değişkenler çok ve yapılacak işin bol olduğu gibi hiç kısa cevap vardır. Yani ...

Uzun cevap: Ben de elimden geldiği kadar onu yıkmak için gidiyorum, ama sizinki kadar geniş bir soruya cevap bir "herkes için iyi" yoktur.

Birincisi, eldeki görev değişkenleri:

  1. Dil listesi: sitenizin dil önceden tanımlanmış bir dizi olacak, ya da çeşitli / heterojen olacak? Örneğin, bir site, iki iyi tanımlanmış dilde tamamen iki dilli olabilir (başka bir örnek koymak ya, ben bir İngilizce / Katalanca / İspanyolca site çalıştırmak); veya farklı bölümler (: çoğunlukla homojen, ama bloglar, KB makalelerinde ve bazı belgeler gibi şeyler sözde desteklenen diller bir alt kümesi sadece mevcut bir örnek için, MS'nin sitelerine bakmak), farklı diller mevcut olabilir.

  2. Çeviriler Kaynak: içeriği sizin ya da bazı ortak çalışan tarafından, ilgili her dilde verilir? Veya bazı sürümleri tek bir "temel" bir dilden çeviri yazılımı aracılığıyla çalıştırılır? İlk yaklaşım içeriğini üretmek için ekstra bir sürü iş alır, ama saniye daha yüksek kalitede sonuçlar verir.

  3. Diller kendileri: Eğer 1) ve 2) cevap kez, tam olarak hangi diller ile çalışıyorsanız farkında olmak gerekir. Durumda lehçelerini (ex: ABD İngilizce + İngiltere İngilizce, ya da Arjantin İspanyolca + İspanya İspanyolca) içerdiğini unutmayın, bazı "yinelenen içerik" arama motorları ile ilgili sorunlar, ama (burada da konu dışı olduğu ilgili ayrıntıları karşılaşabilirsiniz sadece ) Eğer potansiyel sorunların farkında böylece söz.

  4. (Örneğin, benim site de tüm ziyaretçi nerede önemsemeden üç dilde sunuyor: ben ne var, yani ne tercih seçin) soyut dilleri hedefliyoruz; ya da daha doğrusu farklı bölgelerde / ülkelerde hedefleme? Sonraki durumda, (bazı isim dilimleri, para, ya da tarih-saat biçimini kongreler gibi) dillerin yanı sıra başka şeyler umurumda gerekebilir gibi şeyler, ekstra karmaşık alabilirsiniz, ama kullanmak mümkün olmanın yararı olsun Ülkeye özgü TLD'ler.

Eğer yukarıda iyi tanımlanmış sonra, en işe başlayalım. Bunlar tanıtıcı yapmak gerekir en önemli görevleri şunlardır:

  1. Dil algılama: en makul yaklaşım, bir GET parametresi (? URL lang = tr-bizim gibi bir şey) kullanmaktır. Ayrıca, hiçbir dil argümanı ile bir URL istendiğinde geri düşmek için bazı çerez ve / veya IP geolocation kullanabilirsiniz. Ayrıca, anlamı varsa, (daha iyi göründüğünü: example.com/index.php?lang=en-us veya example.com/en-us/home?) URL güzelleştirme konuyu düşünün. Şahsen, benim. Htaccess dosyasına güç ModRewrite hibe seviyorum, ama bu sadece Apache tabanlı sunucular üzerinde çalışacağız.

  2. İçerik yönetimi: ne olursa olsun (madde içeriği gibi) DB içerik getiriliyor olsun, dosyaları (kırıntıları, menüler, site genelindeki başlıklar, vb için tipik), veya başka yollarla dahil, her sürümünü ayırmak için bir yol gerekir içeriğin (dil). Burada nasıl yapılabilir bazı örnekler şunlardır:

    • DB içeriği, benim en iyi tavsiye bazı katı alan adlandırma deseni ile gelip ve ona sadık olmaktır. Örneğin benim tüm DB dil-bağımlı alanlar, ben _en, _es, ekleme veya _ca. Bu şekilde, ben $row["title_$lang"] gibi ifadeler doğru içeriği erişebilirsiniz.
    • Yine dosyaları bir dosya adlandırma kuralı sanest yaklaşımdır içerir. Benim durumumda, ben My çağrılar ardından include("some-filename.$lang.php) gibi görünüyorsun dahil vs, .en.php, .ca.htm ile biten dosya isimleri var.
    • (Bir tablonun başlıklarını etiketleme zaman, örneğin) zaman zaman, sizin PHP kodu doğrudan metin küçük parçalar tükürerek olacak. Sen aynı tuşları ile "yığınlar" dizi veya Geert gibi DB tablo önerdi tanımlayan dil başına bir içerme dosyası kullanabilirsiniz. Eski yaklaşım ikincisi (yalnız çalışmıyor özellikle) korumak için daha az iş almalıdır, geliştirmek için daha az iş alır.
  3. Dil seçin: oldukça önemlidir, sizin kullanıcılara URL kendisi GET argümanları verdiği başka kendi dilini seçmek için bir yol vermelidir. Bu sayfa başlangıçta geri kullanıcının tüm bilmiyor bir dile düşmüş olsa bile anlaşılabilir beri birkaç dilde için, "bayrak", genellikle, büyük iş. Daha fazla dil için, bir açılır menü (viewport alan bakımından) daha verimli görünüyor, ancak bazı görsel (örn: metinsel olmayan) eklemek için emin olun ipuçları. Bazı siteler girdikten bir dil almak için zorlamak, ve sadece her dil ana sayfa bağlantıları var. Şahsen, benim üç bayraklar benim sitenin menüsünde üstünde ayakta olan, sadece dil argümanı ile geçerli adresi her işaret değişti. Böyle bir kod oldukça iyi çalışabilir:

    function translatedURI($new_lang) { return str_replace("lang=$lang", "lang=$new_lang", "http://" . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]; }

  4. CMS verdiği: sitenizin (ya da bunun bir parçası vb) CMS çeşit, tartışma panosu kullanılarak ise işler oldukça dağınık alabilirsiniz. Benim kendi deneyimlerinden konuşan, onlar üç bağımsız forumları gibi bakmak (ancak kullanıcılar sadece bunlardan biri kayıt / giriş için gereken böyle bir şekilde, üç ana kategoride (dil başına bir) sitemde bölünmüş bir phpBB forum var onlar gerçekten aynı gemide sadece kategoriler beri), tüm diller erişmek. Ben bu işe için yapmak zorunda tweaks sorunsuz hala devam aklı son kalıntıları tehdit: S. Bu gibi durumlar için, ben dokümanlar ve kullandığınız özel yazılım desteği özellikleri bakarak tavsiye ederiz.

Eh, ben şimdi dışarı gelebilir her şey. Ben senin kollarını yukarı çekmek ve işe almak için yeterli olması gerektiğini düşünüyorum. Eğer yolda bazı duvarına çarptı sonra, eğer, özel sorular ile geri geldi ve ben daha spesifik cevaplar alırsınız eminim.

Umarım bu yardımcı olur.

Ben her zaman kullanmak çözüm mümkün olan tüm iletileri ile, bir veritabanı tablosu oluşturmaktır. Her mesaj için onu aramak için bir kod (kısaltma) kullanın. Yani, örneğin:

lang  id        message
en    login     Login
en    lostpass  Lost your password?
de    login     Anmelden
de    lostpass  Paswort vergessen?
nl    login     Aanmelden
nl    lostpass  Wachtwoord vergeten?

vb çeviriler Looking up Bir MySQL sorgusu kullanarak genellikle yeterince hızlı, ama aynı zamanda bir dizideki tüm mesajları yer ve zaman komut dosyası yükler belleğe yükleyebilirsiniz. Kullanıcılar, her zaman tercih ettikleri dili ayarlamak gerekir, web tarayıcısı tarafından belirlenen dil başlığında körü körüne güvenmeyin.

Sen en kolay dili kullanabilirsiniz PHP Multi Language Class - LangQuery

Size dil verilerinizi kaydedebilirsiniz. Ini dosyaları tarafından sadece onu aramak daha

include("LangQuery.php");

$L=new LangQuery();

// Write Hello World
echo($L('hello_world'));

// Write Hello World Easier - In-line Echo Feature
// You don't have to write echo. Just add '>'
$L('>hello_world');

// Use in Strings
echo("Hello Universe. {$L('hello_world')} Hello Europe");

// Write my age with parameter
$L(">my_age",25);

// Write my name and age with parameters
$L(">my_name_age","Recep",25);

Ben şimdi çok küçük bir CMS dilli gerektiğini tasarlama.

Bana mosts kaygılar, müşteri kendiliğinden bir dil eklemek veya kaldırmak için karar olabilir özelliklerinden biri.

Bu nedenle, ben tablo adlarını değiştirebilir veya dinamik adlarını kullanarak onlara erişmek için Yapamam (ve istiyorum), veritabanı tabloları son ekleri ekleyerek tasarımını amaçlayan, ne de bir dil tanımlanmış veya kaldırıldığında her zaman ekleyerek veya alanları kaldırarak değilim .

Ben veritabanları gibi ve onlar mantain kolay çünkü sadece ben ya, dosyaları kullanmak olmaz.

Ve son olarak, çeviri iki tip düşünüyorum:

  1. Web metin.
  2. İçerik metni.

Bu nedenle, benim tasarım amaçlamaktadır:

  • Tanımlı dilleri ile languajes bir tablo.
  • translations A single table that will have all the messages, as follows:
    • [Pk] içerik tercüme edilecek tablonun table_name isim.
    • [Pk] içerik tercüme edilecek alanın field_name isim.
    • [Pk] tercüme edilecek öğe için row_id satır tanımlayıcıyla.
    • [Pk] metin tercüme edilmiştir ki language dili.
    • text çevrilmiş metin.

Yani her zaman çeviriler tablosunda olacak çünkü alanları tek dil senaryoda içeriğe sahip olacak tablolar, şimdi onun içeriği geçersiz olacağı anlamına gelir.

Yani sql querys karmaşıklığı artacak, ama bana kolay bir şekilde çeviriler korumak için araçlarını geliştirmelerine olanak sağlamaktadır. Çözüm uygulanması sadece zaman da, sql karmaşıklığı, sadece bir kez var olacak. Bu uygulama düzgün tasarlanmış ise, sitenin bakım / uzamayı önemli bir sorun olmak zorunda değildir.

Edit:

Geliştirici arkadaşları ile bazı konuşmadan sonra, ben burada aproaching am çözümü tek bir tabloda çok fazla ücret olduğunu düşünüyorum.

Ben aşağıdaki gibi artık çalışma olacak diğer bir yaklaşım, her bir "çevrilebilir tablonun" için ekstra bir tablo yaratıyor:

  • any_translatable_table: alanlarından herhangi birini çevirmek için gereken tablo
  • any_translatable_table_translations: The table where the translations will be stored.
    • [Pk] içerik tercüme edilecek alanın field_name isim.
    • [Pk] tercüme edilecek öğe için row_id satır tanımlayıcıyla.
    • [Pk] metin tercüme edilmiştir ki language dili.
    • text çevrilmiş metin.

Bu düzen ilk birinden kavramları devralır, ancak bu tablolar başına içeriğin ayırır. Bu alternatif çözüm performansını arttırmak ve (indeksleri problemleri gibi) sorunları izole edebilir.

"Çevrilebilir tabloda" başına ekstra çeviri tablo aynı zamanda özgün bir o yaratılacaktır.

Ve sql querys hakkında, karmaşıklığı hala aynı: İlk yaklaşım çeviriler tabloya aramak için tablo adını gerekiyor, ancak ikinci sadece tablo adı da eki "_Çeviri" ekler.

Ayrıca istenen cümleleri tercüme için PHP ve XML kullanabilirsiniz. Aşağıdaki öğretici http://www.lampcoder.com/create-a-multi-languages-website-using-php-oop-and-xml/ okumak ve belki projede size yardımcı olacaktır.