Gettext PHP ile i18n desteği ekleme?

1 Cevap php

Ben hep gettext duydum -. Bunu temin string argüman dayalı bir çeviri arama için Unix komutunun çeşit bulunuyor, ve sonra bir pot dosyası üretir biliyorum ama birisi bu halledilir nasıl meslekten olmayan açısından bana açıklayabilir Bir web çerçeve?

Bazı kurulan çerçeve bunu yaptı nasıl bakıyor etrafında alabilirsiniz, ama aslında benim kendi çözüm sağlamak şeylerin içine defterleri önce sadece resme biraz daha net yardımcı olabilir çünkü bir rahip olmayan kimse açıklama yardımcı olacaktır.

1 Cevap

Gettext sistem aynı cümle için farklı dillerde çevirilerini içeren kaynak metin dosyalarından oluşturulan ikili dosyaları bir dizi dizeleri yankıları.

Arama anahtar bir "taban" dil cümlesidir.

kaynak kodu gibi bir şey olacak

echo _("Hello, world!");

her dil için size anahtar ve tercüme sürümü (printf fonksiyonları ile kullanılabilir% s not) ile karşılık gelen bir metin dosyası olacak

french
msgid "Hello, world!"
msgstr "Salut, monde!"
msgid "My name is %s"
msgstr "Mon nom est %s"

italian
msgid "Hello, world!"
msgstr "Ciao, mondo!"
msgid "My name is %s"
msgstr "Il mio nome è %s"

Bunlar bölgeselleştirmelerini oluşturmak için geçmesi gereken temel adımlardır

  • tüm metin çıktı gettext işlevleri (gettext (), ngettext () _ ()) kullanmanız gerekir
  • php dosyalarını ayrıştırmak ve tabanı oluşturmak için xgettext (* nix) kullanın. po metin dosyası
  • poedit. po dosyalarına çeviri metinler eklemek için kullanın
  • . po dosyasından ikili. mo dosyası oluşturmak için msgfmt (* nix) kullanın
  • gibi bir dizin yapısı içinde. mo dosyaları koymak

locale / de_DE / LC_MESSAGES / myPHPApp.mo

locale / en_EN / LC_MESSAGES / myPHPApp.mo

locale / it_IT / LC_MESSAGES / myPHPApp.mo

o zaman php script kullanılması gereken yerel ayarlamanız gerekir

Php manuel örnek bu bölümü için çok açıktır

<?php
// Set language to German
setlocale(LC_ALL, 'de_DE');

// Specify location of translation tables
bindtextdomain("myPHPApp", "./locale");

// Choose domain
textdomain("myPHPApp");

// Translation is looking for in ./locale / de_DE / LC_MESSAGES / myPHPApp.mo now

// Print a test message
echo gettext("Welcome to My PHP Application");

// Or use the alias _() for gettext()
echo _("Have a nice day");
?>

Her zaman php manuel bakıştan here iyi bir öğretici için