This was one of the reasons why we had to change the implementation.
Browser locales are not allowed to have environment attached especially then when you have multiple servers with probably different environment settings.

But as it's a BC break it was not allowed for 1.6...
1.7 (trunk) behaves different.

$locale->setLocale('browser');

This is exactly what I said before... when you need the locales from browser use the locale 'browser'.

Greetings
Thomas Weidner, I18N Team Leader, Zend Framework
http://www.thomasweidner.com

----- Original Message ----- From: "Robert Castley" <[EMAIL PROTECTED]>
To: <fw-general@lists.zend.com>
Sent: Wednesday, November 12, 2008 4:22 PM
Subject: RE: [fw-general] Problem with Zend_Locale, UTF-8, setLocale on Windows


Hi,

I am using exactly the same ZF application code on Linux & Windows.

If I run the following code (taken from the manual) on Windows:

$locale = new Zend_Locale();
// Return all default locales
$found = $locale->getDefault();
print_r($found);

// Return only browser locales
$found2 = $locale->getDefault(Zend_Locale::BROWSER,TRUE);
print_r($found2);

I get returned;

Array ( [en] => 1 [de_AT] => 1 [de] => 1 [en_GB] => 0.3 )
Array ( [en] => 1 [de_AT] => 1 [de] => 1 [en_GB] => 0.3 )

If I run it on Unix I get returned:

Array ( [de_AT] => 1 [de] => 1 [en_GB] => 0.3 [en] => 0.3 )
Array ( [de_AT] => 1 [de] => 1 [en_GB] => 0.3 [en] => 0.3 )

I am using the same browser to access both systems (FF 3 with languages set
as Austrain, German, English).

Now ... If I go and edit Zend/Locale.php and change:

           $languages = $this->getBrowser();
           if ((empty($languages) === true) or ($fastsearch === false)) {
               $languages = $this->getEnvironment() + $languages;
               $languages = $this->getFramework() + $languages;
           }

To this:

           $languages = $this->getBrowser();
           if ((empty($languages) === true) or ($fastsearch === false)) {
               //$languages = $this->getEnvironment() + $languages;
               $languages = $this->getFramework() + $languages;
           }

I get the following on Windows:

Array ( [de_AT] => 1 [de] => 1 [en_GB] => 0.3 [en] => 0.3 )
Array ( [de_AT] => 1 [de] => 1 [en_GB] => 0.3 [en] => 0.3 )

Which is correct!

Even if I use a:

$locale->setLocale('browser');

It still does work as expected.

It seems that somehow the Locale.php code is getting the browser settings
but then appending the environment settings.

- Robert

-----Original Message-----
From: Thomas Weidner [mailto:[EMAIL PROTECTED]
Sent: 12 November 2008 14:56
To: fw-general@lists.zend.com
Subject: Re: [fw-general] Problem with Zend_Locale, UTF-8, setLocale on
Windows

Eigher you use browser settings which means that you stick on
HTTP_ACCEPT_LANGUAGE or you stick with environment, which means LC_ALL.

The browser uses the locale 'browser' within Zend_Locale.
Also Zend_Locale has no getList() method.

As you mentioned "Registry Locale"... do you mean setting the Zend_Locale
object to Zend_Registry with the key Zend_Locale ?
This is named "Application wide locale" and available with 1.7. This will
not work in 1.6.2.
You can read about this here:
http://framework.zend.com/manual/en/zend.translate.using.html#zend.translate
.using.languages.automatic

Greetings
Thomas Weidner, I18N Team Leader, Zend Framework
http://www.thomasweidner.com

----- Original Message -----
From: "Robert Castley" <[EMAIL PROTECTED]>
To: <fw-general@lists.zend.com>
Sent: Wednesday, November 12, 2008 3:34 PM
Subject: [fw-general] Problem with Zend_Locale, UTF-8, setLocale on Windows


Hi,

It seems that in 1.6.2 Zend_Locale doesn't handle well under Windows.

Zend_Locale is using

$language = setlocale(LC_ALL, 0);

in the getEnvironment function

Using the same browser to access two systems I get:

On my Windows  ZF system this will return:
Array

(

   [0] => LC_COLLATE=C

   [1] => LC_CTYPE=English_United Kingdom.1252

   [2] => LC_MONETARY=C

   [3] => LC_NUMERIC=C

   [4] => LC_TIME=C

)


On my Linux ZF system this will return:

Array

(

   [0] => C

)


Now running my language debugger I see the following:

Windows System:


_SERVER["HTTP_ACCEPT_LANGUAGE"]=de-at,de;q=0.7,en-gb;q=0.3



Registry contains:

Display getList():

Array

(

   [en] => en

   [de] => de

   [es] => es

   [fr] => fr

   [it] => it

)

Translate save: Save

Registry Locale: en


On Windows it is failing to detect the correct Browser Language setting.

Using the same browser and pointing at a Linux system I get:


_SERVER["HTTP_ACCEPT_LANGUAGE"]=de-at,de;q=0.7,en-gb;q=0.3



Registry contains:

Display getList():

Array

(

   [de] => de

   [en] => en

   [es] => es

   [fr] => fr

   [it] => it

)

Translate save: Speichern

Registry Locale: de


Which is correct!

The only thing I could find on Google was this which handles setting the
character set for Linux and the codepage for Windows:

https://code.zikula.org/svn/core/development/zikula-1/includes/pnLang.php

<https://code.zikula.org/svn/core/development/zikula-1/includes/pnLang.php>

Look in the function pnSetLocale.

- Robert




________________________________________________________________________
This email has been scanned for all known viruses by the MessageLabs Email

Security Service and the Macro 4 plc internal virus protection system.
________________________________________________________________________


________________________________________________________________________
This email has been scanned for all known viruses by the MessageLabs Email
Security Service and the Macro 4 plc internal virus protection system.
________________________________________________________________________


________________________________________________________________________
This email has been scanned for all known viruses by the MessageLabs Email Security Service and the Macro 4 plc internal virus protection system. ________________________________________________________________________

Reply via email to