View | Details | Raw Unified | Return to bug 15395
Collapse All | Expand All

(-)a/Koha/I18N.pm (-18 / +27 lines)
Lines 24-30 use C4::Languages; Link Here
24
use C4::Context;
24
use C4::Context;
25
25
26
use Encode;
26
use Encode;
27
use Locale::Messages qw(:locale_h nl_putenv);
27
use Locale::Messages qw(:locale_h nl_putenv setlocale LC_MESSAGES);
28
use Koha::Cache::Memory::Lite;
28
use Koha::Cache::Memory::Lite;
29
29
30
use parent 'Exporter';
30
use parent 'Exporter';
Lines 50-73 sub init { Link Here
50
    my $cache = Koha::Cache::Memory::Lite->get_instance();
50
    my $cache = Koha::Cache::Memory::Lite->get_instance();
51
    my $cache_key = 'i18n:initialized';
51
    my $cache_key = 'i18n:initialized';
52
    unless ($cache->get_from_cache($cache_key)) {
52
    unless ($cache->get_from_cache($cache_key)) {
53
        my $langtag = C4::Languages::getlanguage;
54
        my @subtags = split /-/, $langtag;
55
        my ($language, $region) = @subtags;
56
        if ($region && length $region == 4) {
57
            $region = $subtags[2];
58
        }
59
        Locale::Messages->select_package('gettext_pp');
53
        Locale::Messages->select_package('gettext_pp');
60
        my $locale = $language;
54
        my @system_locales = grep { chomp; not (/^C/ || $_ eq 'POSIX') } qx/locale -a/;
61
        if ($region) {
55
        if (@system_locales) {
62
            $locale .= '_' . $region;
56
            # LANG needs to be set to a valid locale,
57
            # otherwise LANGUAGE is ignored
58
            nl_putenv('LANG=' . $system_locales[0]);
59
            setlocale(LC_MESSAGES, '');
60
61
            my $langtag = C4::Languages::getlanguage;
62
            my @subtags = split /-/, $langtag;
63
            my ($language, $region) = @subtags;
64
            if ($region && length $region == 4) {
65
                $region = $subtags[2];
66
            }
67
            my $locale = $language;
68
            if ($region) {
69
                $locale .= '_' . $region;
70
            }
71
72
            nl_putenv("LANGUAGE=$locale");
73
            nl_putenv('OUTPUT_CHARSET=UTF-8');
74
75
            my $directory = _base_directory();
76
            textdomain($textdomain);
77
            bindtextdomain($textdomain, $directory);
78
        } else {
79
            warn "No locale installed. Localization cannot work and is therefore disabled";
63
        }
80
        }
64
        nl_putenv("LANGUAGE=$locale");
65
        nl_putenv("LANG=$locale");
66
        nl_putenv('OUTPUT_CHARSET=utf-8');
67
68
        my $directory = _base_directory();
69
        textdomain($textdomain);
70
        bindtextdomain($textdomain, $directory);
71
81
72
        $cache->set_in_cache($cache_key, 1);
82
        $cache->set_in_cache($cache_key, 1);
73
    }
83
    }
74
- 

Return to bug 15395