PHP и Gettext не работают на моем сервере - PullRequest
6 голосов
/ 26 мая 2010

У меня есть сайт. Я пытаюсь заставить gettext работать, чтобы мои сайты на английском, Швеции и Норвегии могли появляться Я не могу заставить его работать. Что я сделал не так?

Это мой код конфигурации:

// 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/');

И мой путь /var/www/rssbot.dk/lang/. Должен ли я сделать chmod правильно, или ...?

Ответы [ 2 ]

4 голосов
/ 19 ноября 2010

Я обнаружил, что для некоторых установок gettext необходимо запустить locale-gen для каждой локали, которую вы хотите использовать. Я обнаружил, что это верно для Ubuntu, в частности. Вам может понадобиться перезапустить PHP (apache) после запуска locale-gen.

sudo locale-gen se_SE
sudo locale-gen no_NO

У меня есть тестовая настройка (с рабочими файлами локалей), которая может определить, работает ли настройка gettext.

<?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";
}

?>
0 голосов
/ 03 декабря 2010

Есть несколько вещей, которые могут пойти не так.

1- Для размещения большинства систем вам понадобятся следующие строки:

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

2- В Linux при использовании setlocale с LC_ALL вместо LC_MESSAGES вам необходимо установить локаль на сервере!

Может быть установлен с помощью такой команды (для Ubuntu)

aptitude install language-pack-sv

Или просто перенастроить с помощью такой команды

sudo locale-gen sv_SE

3- Укажите имя файла .mo и каталог локали

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

4- При смешивании одинарных и двойных кавычек при использовании gettext () или _ () вам нужно будет использовать два bindtextdomain!

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

5- Кодировка может быть проблемой во многих местах. Если ваш файл .mo находится не в той же кодировке (например, utf-8), что и ваш PHP-скрипт, он может не совпадать!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...