Komut destekleyen çeviriler oluşturmak için iyi bir yoldur?

4 Cevap php

Ben bir açık kaynak CMS kuruyorum ve sadece bölgeselleştirmelerini eklemek için en iyi yol olduğu merak ediyordu? Zaten lang.en.php benzer dosyalarına karar verdi. Ben diziler varsayalım, ama hangi formda istiyorsunuz?

$lang['xyz'] = "Text goes here!";
$lang['Text goes here!'] = "Translated text!";

Yoksa benim özel ayrıştırıcı oluşturmak ve bu gibi bir dosyaya bölgeselleştirmelerini eklemek gerekir:

"Text goes here!" = "Translated text!";

Ve sonra sadece bunu ayrıştırmak.

Ne önerirsiniz? Ben aramak için çalıştı ama hiçbir sonuç benim için.

Martti Laine

4 Cevap

Ben Masaüstü uygulamalar için Gettext kitaplık özel çözümleyici benzer bir şey biliyorum. Gettext PHP bir modül var, ama varsayılan olarak çoğu PHP yüklemelerinin eğer emin değilim.

Temelde, bir işlev adı tr("How are you?") ile onunla her dize yazmak istiyorum. Sonra çevirmek için bir işlev oluşturun:

include('lang.es.php');
function tr($txt) {
   global $tr;
   if(array_key_exists($txt,$tr)) {
     return $tr($txt);
   }
   return $txt;
}

Ve lang.es.php in vardır:

$tr = array();
$tr["How are you?"] = "¿Como Estas?";

Muhtemelen tercüme edilmemelidir değişkenler, veya uygun isimler için printf(tr("How are you, %s?"), $name); yapmak isterim.

Ben Joomla şekilde kullanmak gerektiğini düşünüyorum. Dil dosyaları ini uzantısı olmalıdır:

FOO=translation
BAR=translation2

o zaman parse_ini_file fonksiyonu ile dosyayı ayrıştırmak ve çeviri dizi olsun:

$dictionary=parse_ini_file("english.ini");

    function translate($text)
    {
       global $dictionary;
       if(isset($dictionary[strtoupper($text)])) return $dictionary[strtoupper($text)];
       else return $text;
    }

Bu gerçekten I deleted 45 comments çevirmek amacıyla bir dizi satır yüzlerce gerekiyor, bunu düşünüyorum gibi basit değil, ya da I deleted 192 comments? vb

translate('I deleted %d comments', $number);: Eğer bir tercüme işlevi diyebiliriz eğer çok faydalı olacaktır

<?php
    $dict = parse_ini_file('lang.ini');

    function translate($text){
        global $dict;
        $args = func_get_args();
        if(isset($dict[$text])){
            // I am not sure how to convert %d in $args[.], maybe someone else could provide a regular expression for this.
        } else {
            return $text;
        }
    }
?>

Nasıl çoğul yönetecek?

Bazı diller çok zor çoğul kuralları var: example here

In Polish we use e.g. plik (file) this way:

      1 plik
      2,3,4 pliki
      5-21 pliko'w
      22-24 pliki
      25-31 pliko'w

Bu nedenle, ben her şeyi sizin için yapılmıştır çünkü gettext kullanmanızı öneririm.