Php birden fazla dil çevirmek

5 Cevap php

Ben dillerde bir dizi girişi kabul etmelidir küçük bir çözümleyici üzerinde çalışıyorum. Ben girişi ayrıştırma anahtar kelimeler / çapa olarak görev yapacak belki 50 dizeleri var gidiyorum. PHP, ne bu tercüme anahtar kelimeleri düzenlemek için en iyi yolu olurdu?

Aklıma gelen olası bir çözüm, bir ilişkisel dizi kullanmaktır. Bu gibi:

$lang = array('us' => array('totalDebt' => 'Total Debt', 'color' => 'Color'),
              'gb' => array('totalDebt' => 'Total Debt', 'color' => 'Colour'))

Daha sonra aşağıdaki kullanarak erişebilir ki:

$langCode = 'en';
$debtPos = strpos($lang[$langCode]['totalDebt']);

Dilde bir demet tercüme kısa dizeleri bir grup ile başa çıkmak için daha iyi, kanıtlanmış yöntemler var mı?

5 Cevap

Tam bir çeviri çözüm için gettext gibi bir çözüm üzerinde bakabilirsiniz.

you solution is good enough (fast, cheap on resources) for small dictionaries. I didn't understand what you tried to do using the strpos() function.

Terim genellikle geri dönüş İngilizce olan, dilde mevcuttur gelmez çevirmek istiyorsanız geri dönüş çeşit kullanmayı unutmayın.

Bu programcılar kodunu değiştirmek zorunda kalmazsınız bir yerelleştirme dosyası ekleyerek ek diller için izin verir, çünkü genelde insanlar kendi uygulama l10n (veya benzer bir şey) kullanın. Bu basit bir script Ama eğer, o zaman full on localization abartılı olur.

Ancak $lang dizisi genellikle farklı dosyalarda inşa edilmiş, diğer OS projelerde kullanılan çözümünüzü gördük. Örneğin:

<?php // lang.us.php
$LANG['us'] = array(
                    'totalDebt' => 'Total Debt',
                    'color' => 'Color',
                   );

ve böylece lang.gb.php için, lang.de.php vs

Peter dediği gibi, doğru bir fikri var, ancak farklı dosyalar halinde dilleri ayrı ettik. PHP her dilde her kelimenin dizisini saklamak zorunda anlamına gelir. Eğer bir seferde sadece tek bir dili yükleme olacak, çünkü çok iç içe $lang['us'] seviye atlayabilirsiniz.

Hatta dilleri "genişletmek" olabilir:

<?php // lang.en-gb.php
$lang = array(
    'color' => "Colour",
    'totalDebt' => "Total Debt",
    ...
);
?>

<?php // lang.en-us.php
include('lang.en-gb.php');

$lang['color'] = "Color";
// don't need to redefine "totalDebt"
?>

Hatta sizin için tüm bu işler temel bir sınıf oluşturarak düşünebilirsiniz: Bir terim belirli bir dil, vb tanımlı değilse, "hata" işleme var, doğru dosyayı seçin, yerel algılamak

Muhtemelen bu sonuçta kod karartmak gibi 'totaldebt' => 'Toplam Borç' istiyorum, ve sadece hash anahtarı olarak 'Toplam Borç' saklamak daha yavaştır yok. Şeyler yapmanın Gettext yolu sadece bir işlevi dizeleri sarılmasıdır.

böylece yerine:

echo "Color";

Yapmanız:

echo t("Color");

t () fonksiyonu global tanımlanmış dil bakmak ve mümkünse değişiklik yapacak. Bir noktada, sen gettext kullanmak ve bu şekilde yaparak uyumlu olacak isteyebilirsiniz.