Gerçekten aşağıdaki yaklaşımı seviyorum:
bir dosya çevirmen kendisidir:
class Translator{
private static $strs = array();
private static $currlang = 'en';
public static function loadTranslation($lang, $strs){
if (empty(self::$strs[$lang]))
self::$strs[$lang] = array();
self::$strs[$lang] = array_merge(self::$strs[$lang], $strs);
}
public static function setDefaultLang($lang){
self::$currlang = $lang;
}
public static function translate($key, $lang=""){
if ($lang == "") $lang = self::$currlang;
$str = self::$strs[$lang][$key];
if (empty($str)){
$str = "$lang.$key";
}
return $str;
}
public static function freeUnused(){
foreach(self::$strs as $lang => $data){
if ($lang != self::$currlang){
$lstr = self::$strs[$lang]['langname'];
self::$strs[$lang] = array();
self::$strs[$lang]['langname'] = $lstr;
}
}
}
public static function getLangList(){
$list = array();
foreach(self::$strs as $lang => $data){
$h['name'] = $lang;
$h['desc'] = self::$strs[$lang]['langname'];
$h['current'] = $lang == self::$currlang;
$list[] = $h;
}
return $list;
}
public static function &getAllStrings($lang){
return self::$strs[$lang];
}
}
function generateTemplateStrings($arr){
$trans = array();
foreach($arr as $totrans){
$trans[$totrans] = Translator::translate($totrans);
}
return $trans;
}
dil dosyaları basitçe include()
d olabilir ve bu gibi bakabilirsiniz:
en.php:
Translator::loadTranslation('en', array(
'textfield_1' => 'This is some Textfield',
'another_textfield ' => 'This is a longer Text showing how this is used',
));
de.php:
Translator::loadTranslation('de', array(
'textfield_1' => 'Dies ist ein Textfeld',
'another_textfield ' => 'Dies ist ein längerer Text, welcher aufzeigt, wie das hier funktioniert.',
));
Eğer sen birini yapın böyle bir dize çevirebilir app:
$string = Translator::translate('textfield_1')
veya dizeleri bile bir demet:
$strings = generateTemplateStrings(array('textfield_1', 'another_textfield'));
Dil dosyaları sadece dahil edilebilir, çünkü çok kolay yığını ve, diyelim ki, önce ve sonra yeni dizeleri eklemek veya çalışmaz zaten tanımlanmış olanlar (yerine ya submodüller dosyaları dahil küresel bir dosyayı ekleyebilirsiniz define()
-yöntemi).
Saf PHP Çünkü, hatta opcode-önbelleğe çok kolay olabilir.
Geri dil dosyasına çevrilen CSV dosyası dönüştürme: Ben bile bir dosyadan çevrilmemiş dizeleri içeren ve daha iyi CSV dosyaları oluşturmak etrafında komut dosyaları var.
Ben 2004 yılından beri verimli kullanımı bu çözüm var ve ben bu ile çok çok mutluyum.
Tabii ki, hatta örneğin pluralizing için sözleşmeler ile uzatabilirsiniz. Intl-uzatma akla geliyor - sayı biçimlerini yerelleştirme olsa başka araçlar kullanarak yapmak gerekiyor şeydir.