Dilde Websites PHP Diziler vs PHP Gettext Uzantısı kullanılarak?

5 Cevap php

Şimdiye kadar gettext kullanarak yerine dizilerin hakkında gördüm sadece 2 iyi şeyler ben "tebrik", "sub-array" (ya da her neyse onun adı) oluşturmak zorunda kalmamasıdır. Ve ben "varsayılan dil" için bir klasör oluşturmak zorunda değilsiniz.

Çok dilli web siteleri için gettext ve php dizileri kullanarak diğer artıları ve cos var mı?

USING GETTEXT:

spanish/messages.po:

#: test.php:3
msgid "Hello World!"
msgstr "Hola Mundo"

index.php:

<?php echo _("Hello World!"); ?>

index.php?lang=spanish:

<?php echo _("Hello World!"); ?> turns to Hola Mundo

USING PHP ARRAYS:

lang.en.php

<?php
$lang = array(
    "greeting" => "Hello World",
);
?>

lang.es.php

<?php
$lang = array(
    "greeting" => "Hola Mundo",
);
?>

index.php:

<?php echo $lang['greeting']; ?> greeting turns to Hello World

index.php?lang=spanish

<?php echo $lang['greeting']; ?> greeting turns to Hola Mundo

(Ben ilk gettext ile başladı, ama benim paylaşılan ücretsiz hosting Zymic desteklenen değildi. Ben Zend_translate kullanmak istemedim, benim basit bir görev için çok karmaşık buldum, bu yüzden sonunda php {[(0 kullanarak sona erdi )]}, ama birisi bana sonra ben diziler kullanmalısınız)

5 Cevap

Eğer printf ve uluslararası çoğul formları gibi tutucuları için destek almak gettext GNU kullanma. Yer tutucular sipariş çeviri değiştirilebilir veya atlanabilir.

PHP belgelerine Örnek:


<?php
setlocale(LC_ALL, 'cs_CZ');
printf(ngettext("%d window", "%d windows", 1), 1); // gives "1 okno"
printf(ngettext("%d window", "%d windows", 2), 2); // gives "2 okna"
printf(ngettext("%d window", "%d windows", 5), 5); // gives "5 oke"
?>

Başka yanlısı @ middus tarafından işaret olarak terminoloji yönetimi, çeviriler bellek ve makine çevirisi için standart araçları kullanabilirsiniz olmasıdır.

Paylaşılan ortamlar için büyük bir php-gettext library Danilo Segan orada olduğunu.

I gettext, ben iyi sonuçlar ile 5 yıldır PHP bu yapıyorum kullanmanızı öneririz.

Eğer echo _('my text to translate') kullanmak ve bunun için bir çeviri varsa şeyden önce, iyi bir çıkış, orijinal dizesi görürsünüz. echo $translation['were is my translation'] ve orada yok gibi dizileri kullanarak, sadece bir şey göreceksiniz. ama echo _(''); iyi bir fikir değildir poEdit kullanarak yapıyor, dikkat, poEdit kitlenizi göstermek istemiyorum, büyük olasılıkla, bu yüzden bir proje bilgileri için msgid "" kullanır boş dizeler çevirmek için çalışmıyorum dikkat etmelisiniz :)

Ayrıca çok hızlı ve çoğul ve şeyler için bazı ek özelliklere sahip, aynı zamanda, örneğin poEdit size tekrar tekrar aynı şeyler çevirmek gerekir böylece bir çeviri db alarak hayatı kolaylaştırır, zaten yaptım bu doldurulmuş olacak ve olarak işaretlenmiş "Doğru olup olmadığını kontrol". Çok rahat.

theby middus dizileri kullanırken kolay bir php dosyası üzerine yazabilirsiniz iken po dosyasını derlemek zorunda dezavantajı söz - iyi sadece senin de mo dosyanın üzerine ve poEdit kullanıyorsanız, bu dosyayı kaydettikten sonra derleme yapar. Yani aslında kaydetmek ve bir php dosyası düzenleme ile olduğu gibi, Sam dosyayı kopyalamak çarptı.

Ama gerçek olumsuz kullanmak eğer, mod_php. Ben herhangi bir sabit bir sorun yoktu ama mod_php bu ÅŸan değildir ile farkında olun.

Bu mod_php'yi veya kullanırken Apache'yi yeniden başlatmak zorunda sadece bu genelde sizin gettext çağrılar (bazen hiç çeviriler bazen hiçbir içeriği ile sevgili beyaz sayfa ile sonuna kadar, iade) başarısız olacaktır. Ama mod_itk gibi bir şey (I cgi / fastcgi için bunu yapabilirsiniz inanıyorum) kullanarak alışkanlık da artık bu sorun var.

Gettext () kullanmak için en belirgin yanlısı nereye ait kaynak dize konumlandırılmış tabii ki. Yani Bu yazmak çok daha mantıklı

echo _("This is a string");

göre

echo $lang['a_string'];

Eğer her türlü çeviri için yeni bir değişken yer tutucu zanaat olduğunu cabası. Gettext () ile çeviri dize kendisi indeksi gibi davranır.

Bence bu böyle php gibi dinamik bir dil için bir ikili biçimi (Gettext ait. Mo dosyaları) kullanmak çok mantıklı değil.

Ancak, gettext yanlısı bir yazılımınızın çevirmenler kullanabilirler araçları büyük bir ekosistemin varlığı (örneğin Poedit). Olumsuz her zaman sadece anında bir dizi içeren bir php dosyasını değiştirebilirsiniz yaparken dağıtmadan önce. Mo için. Po derlemek zorunda olmasıdır.

Başka con zaten kabul ettik gibi, php bütün tesislerdeki mevcut değildir, değildir.

Kullanıcı açılan veya herhangi bir yerde herhangi bir dil seçtiğinde sonra gibi oturumunda seçilen dil id kaydetmek,

$ _SESSION ['Dil'] = 1;

Şimdi oturumda saklanan dil kimliği dayalı veritabanı tablo 'içeriği' den veri almak.

Burada daha fazla ayrıntı

http://skillrow.com/multilingual-website-in-php-2/