PHP ve Gettext benim sunucuda çalışmıyor

2 Cevap php

Ben bir web sitesi var. Ben gettext benim İngilizce, İsveç ve Norveç siteler gelip böylece işe almak için çalışıyorum. Ben çalışmak için alınamıyor. Neyi yanlış yaptım?

Bu benim yapılandırma kodu:

// define constants ( defualt - danish )
$lang = 'da_DA';
$lang_short = '';
$lang_prefix = 'da';

if ( isset( $_GET['lang'] ) )
{
    switch( $_GET['lang'] )
    {
        case 'en':
            $lang = 'en_EN';
            $lang_short = 'en/';
            $lang_prefix = 'en';
            break;
        case 'se':
            $lang = 'se_SE';
            $lang_short = 'se/';
            $lang_prefix = 'se';
            break;
        case 'no':
            $lang = 'no_NO';
            $lang_short = 'no/';
            $lang_prefix = 'no';
            break;
    }
}
define( 'LANG', $lang_short );
define( 'LANG_PREFIX', $lang_prefix );

putenv("LC_ALL=". $lang );
bindtextdomain('messages', ROOT .'lang/');

Ve benim kaderim /var/www/rssbot.dk/lang/. Ben chmod hakkı, ya da ... yapmak gerekir?

2 Cevap

Bazı gettext locale-gen kullanmak istediğiniz yerelinde her aday olması için gereken yükler bulduk. Bu özellikle Ubuntu için doğru buldum. Sen locale-gen çalıştırdıktan sonra PHP (apache) yeniden başlatmanız gerekebilir.

sudo locale-gen se_SE
sudo locale-gen no_NO

Ben bir test setup (çalışan yerel dosyaları ile) gettext kurulum çalışma olup olmadığını belirlemek olduğunu ettik.

<?php

//Depending on your OS, putenv/setlocale/both will set your language.
putenv('LC_ALL=es_MX');
setlocale(LC_ALL, 'es_MX');

bindtextdomain( "su", "./locale" ); //set the locale folder for a textdomain
bind_textdomain_codeset( "su", "UTF-8" ); //set the codeset for a textdomain
textdomain( "su" ); //choose a textdomain

if( gettext("Hello World!") === "Hola a todos!" ) {
    print "We translated it correctly";
} else {
    print "Gettext setup isn't working";
}

?>

Yanlış gidebilir birkaç şey vardır.

1 - En sistemlerini karşılamak için, aşağıdaki satırları gerekir:

<?php 
$newlocale = setlocale(LC_MESSAGES, "sv_SE"); 
putenv("LANG=$newlocale");
?>

2 - LC_ALL yerine LC_MESSAGES in ile setlocale kullanarak Linux üzerinde, sen yerel sunucuda yüklü olması gerekir!

It can be installed with a command like this one (for Ubuntu)

aptitude install language-pack-sv

Or just re-configured with a command like this one

sudo locale-gen sv_SE

3 - adını belirtin mo dosyaları ve yerel dizin.

<?php
// Use default.mo located at ./locale/LC_MESSAGES/default.mo
bindtextdomain( "domain", "./locale" );
?>

4 - gettext kullanarak () veya (_) ise tek ve çift tırnak karıştırma zaman, sizin iki bindtextdomain kullanmak gerekir!

<?php
// Double quote _("Hello world") is matched
bindtextdomain( "domain", "./locale" );
// Single quote _('Hello world') is matched
bindtextdomain( 'domain', "./locale" );
?>

5 - Kodlama birçok yerde bir sorun olabilir. Senin. Mo dosyası PHP komut daha (örneğin utf-8) aynı kodlama değilse, bu maç olabilir!