clusteramaryllis / laravel-gettext

https://packagist.org/packages/clusteramaryllis/gettext
GNU General Public License v2.0
4 stars 5 forks source link

How do I change languages? #1

Closed coldKingdom closed 9 years ago

coldKingdom commented 9 years ago

Hello!

I'm sorry for probably being stupid, but how do I change the language?

I have set the language to 'sv' in app.php, but it's still in English. Trying to do a set_locale results in undefined function.

Thank you in advance!

clusteramaryllis commented 9 years ago

might want to ask you first, what version did you use of this package?

coldKingdom commented 9 years ago

Sorry, I use 1.1.0.

clusteramaryllis commented 9 years ago

Whoops, sorry. It should be fixed on 1.1.1

well if you change locale in app.php, to change language you can use e.g.

set_locale(LC_ALL, \Config::get('app.locale'));
coldKingdom commented 9 years ago

It's alright :)

Seems to be working now, except that I don't get the Swedish language to be loaded. I have translated all the strings and saved it, tried restarting Apache for caching issues. But no luck.

Any ideas? :)

clusteramaryllis commented 9 years ago

I tried some sample

1) create view on: resources/views/test.blade.php

{!! _('We have e-mailed your password reset link!') !!}

2) run php artisan vendor:publish to publish the config

3) add some locale in config/gettext.php in languages array

    'languages' => [
        'en' => [
            'locale' => 'en_US',
            'encoding' => 'utf-8',
            'plural_forms' => "nplurals=2; plural=(n != 1);",
        ],
        'sv' => [
            'locale' => 'sv_SE', // usually use IDLanguage_IDCountry format like suggested in phptal.org/manual/en/split/gettext.html
            'encoding' => 'utf-8',
            'plural_forms' => "nplurals=2; plural=(n != 1);",
        ],
    ],

4) run php artisan gettext:create --sources="resources\views". This will generate .po files in

resources\locale\en_US\LC_MESSAGES\messages.po
resources\locale\sv_SE\LC_MESSAGES\messages.po

& scan files on resources/views directory.

5) I usually edit .po files using PoEdit (clicking update, start translating, and save). It will generate .mo file in the same place.

6) simple test in my route

Route::get('lang/{id}', function($id) {

    $lang = Config::get('gettext.languages.'.$id);

    set_locale(LC_ALL, $lang['locale'].'.'.$lang['encoding']); // e.g. sv_SE.utf-8
    bindtextdomain('messages', base_path('resources/locale')); // locate to correct path
    textdomain('messages'); // set default domain

    return view('test');
});

7) Test seems working

This test is on WINDOWS machine. Should be working on UNIX also since Unit Test passing on travis.

coldKingdom commented 9 years ago

Thank you very much!

I really appreciate your help. For a newbie like me, it's not really obvious to set bindtextdomain and textdomain, didn't even realize set_locale existed before I looked in your tests. :)

It would be nice to add these explanations to the readme file.

Good work!