Есть несколько вещей, которые могут пойти не так.
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-скрипт, он может не совпадать!