2

I need to get my php code multilingual. The translations are POEdit.com exports. Because I want to display single and plurals I have to use gettext (the php array export of POEditor does not support plurals).

My problem:

Gettext does always return the input string (msgid), not the translated text.

My setup:

  • Windows 7 64-Bit german system locale
  • EasyPHP Devserver
    • Apache 2.4.18
    • PHP 5.6.17 + gettext enabled

Folders and Files:

web root           = C:\Users\SM\PhpstormProjects\website
locales            = C:\Users\SM\PhpstormProjects\website\src\i18n
polish translation = C:\Users\SM\PhpstormProjects\website\src\i18n\plk\LC_MESSAGES\messages.mo

PHP Code:

define('_LOCALES_DIR', 'C:\Users\SM\PhpstormProjects\website\src\i18n');

$locale = "plk";
$domain = "messages";

$rv['putenv']                  = putenv("LC_ALL=" . $locale);
$rv['setlocale']               = setlocale(LC_ALL, $locale);
$rv['bindtextdomain']          = bindtextdomain($domain, _LOCALES_DIR);
$rv['bind_textdomain_codeset'] = bind_textdomain_codeset($domain,"UTF-8");
$rv['textdomain']              = textdomain($domain);

print_r($rv);

echo "pl: " . gettext("Benutzername");

PHP Output:

Array ( 
    [putenv] => 1 
    [setlocale] => Polish_Poland.1250 
    [bindtextdomain] => C:\Users\SM\PhpstormProjects\website\src\i18n
    [bind_textdomain_codeset] => UTF-8 
    [textdomain] => messages 
) 

pl: Benutzername 

Expected output: "pl: użytkownik"

The .po file looks like this:

msgid ""
msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: POEditor.com\n"
"Project-Id-Version: website\n"
"Language: pl\n"
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 &&     (n%100<10 || n%100>=20) ? 1 : 2);\n"

#: 
msgctxt "Usermanagement"
msgid "E-Mail"
msgstr "e-mail"

#: 
msgctxt "Usermanagement"
msgid "Passwort"
msgstr "hasło"

#: 
msgctxt "Usermanagement"
msgid "Benutzername"
msgstr "użytkownik"

What I tried:

  • The return value of the setlocale("plk") ist "Polish_Poland.1250" so I tried to rename the "i18n/plk" folder to "i18n/Polish_Poland.1250" without luck.
  • use Polish_Poland.1250 as input language
  • Polish is only an example, tried it with different languages
  • added ".UTF8" and ".UTF-8" to the locale
  • tried php-gettext
  • checked the installed locales with the help of this script: https://stackoverflow.com/a/23286243

But always the same result :(

Does one of you have any ideas what am I doing wrong or could trie to get it to work?


UPDATE 2016-07-15 12:45:

One of my mistakes is the missing context, I had to use gettext() like this gettext("Usermanagement\004Benutzername");. Now it loads text from the mo files, but the wrong one. It always loads the mo file located in the "i18n/de_DE" folder. (Remember de_DE is the default language of my Windows installation). Even setlocale returns the entered locale (setlocales way to tell he successfully changed the locale), always de_DE is used. :/

I also tried additionally to set these to environment variables without any luck:

$rv['putenv=LANG']     = putenv('LANG='.$locale);
$rv['putenv=LANGUAGE'] = putenv('LANGUAGE='.$locale);
Community
  • 1
  • 1
soulflyman
  • 500
  • 1
  • 5
  • 16
  • I know this an old thread but is there a reason to use 'plk' instead of `pl_PL` because I found most language have a notation like `ll_CC` where l lowercase, C Uppercase? – user10089632 Mar 28 '18 at 08:32

0 Answers0