Re[2]: [PHP] How to do i18n better?
Hi Ash, Yepp, it's understood. But how exactly did you store the language-specific strings: in an array or using another way? -- With best regards from Ukraine, Andre Skype: Francophile; WlmMSN: arthaelon @ yandex.ru; Jabber: arthaelon @ jabber.org Yahoo! messenger: andre.polykanine; ICQ: 191749952 Twitter: m_elensule - Original message - From: Ashley Sheridan a...@ashleysheridan.co.uk To: Jason Pruim li...@pruimphotography.com Date: Tuesday, April 20, 2010, 2:17:47 AM Subject: [PHP] How to do i18n better? On Mon, 2010-04-19 at 19:17 -0400, Jason Pruim wrote: On Apr 18, 2010, at 6:55 PM, Andre Polykanine wrote: Hi everyone, I posted this in the PHP-i18n list, however got no answer so trying here). We are making a blog platform (http://oire.org/) which is provided in several languages (currently they are Russian, Ukrainian, and English). Now the i18n process is made as follows: we set a cookie on the site and depending on it we select the language to display the site in. We have three (currently) interface files: rus.lng, ukr.lng, and enu.lng (for English US). the format is the following: define (MSG379, Welcome!); etc. I know that PHP does support somehow exporting the strings into a .pod file. Maybe it would be better to do that? If so, how can I do it? Could you suggest me maybe a better solution than we currently have? Thanks a lot! I've never actually had to do this... But one idea that I came up with is using the browser language in taking a best guess at what language to display... In other words, if the user's browser language is set to Chinese, you can be fairly certain they read Chinese :) And now that I typed that out, I realize that may not be what you are really looking for... And that's when we get into the part where I can't help alot because I've never had to do it :) So good luck! :) That's the check I did on the last site i worked on (vicestyle.com) The user agent string is checked for a language and the site uses that. If none is found (bearing in mind that there's no hard and fast rule about what can go into a UA string) then it defaults to English. Links within the site itself allow the user to change their language afterwards, and you could store that in a cookie to it remembers their choice. Thanks, Ash http://www.ashleysheridan.co.uk -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
Re: Re[2]: [PHP] How to do i18n better?
On Tue, 2010-04-20 at 13:34 +0300, Andre Polykanine wrote: Hi Ash, Yepp, it's understood. But how exactly did you store the language-specific strings: in an array or using another way? -- With best regards from Ukraine, Andre Skype: Francophile; WlmMSN: arthaelon @ yandex.ru; Jabber: arthaelon @ jabber.org Yahoo! messenger: andre.polykanine; ICQ: 191749952 Twitter: m_elensule - Original message - From: Ashley Sheridan a...@ashleysheridan.co.uk To: Jason Pruim li...@pruimphotography.com Date: Tuesday, April 20, 2010, 2:17:47 AM Subject: [PHP] How to do i18n better? On Mon, 2010-04-19 at 19:17 -0400, Jason Pruim wrote: On Apr 18, 2010, at 6:55 PM, Andre Polykanine wrote: Hi everyone, I posted this in the PHP-i18n list, however got no answer so trying here). We are making a blog platform (http://oire.org/) which is provided in several languages (currently they are Russian, Ukrainian, and English). Now the i18n process is made as follows: we set a cookie on the site and depending on it we select the language to display the site in. We have three (currently) interface files: rus.lng, ukr.lng, and enu.lng (for English US). the format is the following: define (MSG379, Welcome!); etc. I know that PHP does support somehow exporting the strings into a .pod file. Maybe it would be better to do that? If so, how can I do it? Could you suggest me maybe a better solution than we currently have? Thanks a lot! I've never actually had to do this... But one idea that I came up with is using the browser language in taking a best guess at what language to display... In other words, if the user's browser language is set to Chinese, you can be fairly certain they read Chinese :) And now that I typed that out, I realize that may not be what you are really looking for... And that's when we get into the part where I can't help alot because I've never had to do it :) So good luck! :) That's the check I did on the last site i worked on (vicestyle.com) The user agent string is checked for a language and the site uses that. If none is found (bearing in mind that there's no hard and fast rule about what can go into a UA string) then it defaults to English. Links within the site itself allow the user to change their language afterwards, and you could store that in a cookie to it remembers their choice. Thanks, Ash http://www.ashleysheridan.co.uk The differences were stored in an array with a file per language like so: $lang['Welcome'] = 'Welcome'; $lang['Contact'] = 'Contact'; and in a a different file for German maybe: $lang['Welcome'] = 'Willkommen'; $lang['Contact'] = 'Kontakt'; Thanks, Ash http://www.ashleysheridan.co.uk -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP] How to do i18n better?
Ashley Sheridan wrote: That's the check I did on the last site i worked on (vicestyle.com) The user agent string is checked for a language and the site uses that. If none is found (bearing in mind that there's no hard and fast rule about what can go into a UA string) then it defaults to English. The language preference is not set in the UA string, it is set in the Accept-Language header along with the priority. Links within the site itself allow the user to change their language afterwards, and you could store that in a cookie to it remembers their choice. The standard in Apache is 'prefer-language'. -- Per Jessen, Zürich (12.4°C) -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP] How to do i18n better?
On Tue, 2010-04-20 at 20:27 +0200, Per Jessen wrote: Ashley Sheridan wrote: That's the check I did on the last site i worked on (vicestyle.com) The user agent string is checked for a language and the site uses that. If none is found (bearing in mind that there's no hard and fast rule about what can go into a UA string) then it defaults to English. The language preference is not set in the UA string, it is set in the Accept-Language header along with the priority. Links within the site itself allow the user to change their language afterwards, and you could store that in a cookie to it remembers their choice. The standard in Apache is 'prefer-language'. -- Per Jessen, Zürich (12.4°C) I wasn't aware of that one, but I know most browsers send a language with part of the UA string Thanks, Ash http://www.ashleysheridan.co.uk
Re: [PHP] How to do i18n better?
Ashley Sheridan wrote: On Tue, 2010-04-20 at 20:27 +0200, Per Jessen wrote: Ashley Sheridan wrote: That's the check I did on the last site i worked on (vicestyle.com) The user agent string is checked for a language and the site uses that. If none is found (bearing in mind that there's no hard and fast rule about what can go into a UA string) then it defaults to English. The language preference is not set in the UA string, it is set in the Accept-Language header along with the priority. [snip] I wasn't aware of that one, but I know most browsers send a language with part of the UA string Thanks, Ash Accept-Language, the 'prefer-language' cookie, the various apache config options etc. are all part of the Apache content-negotiation setup/framework. On our website(s), I rely entirely on Accept-Language. In the very rare case where it isn't set, I set a default based on the IP-address of the client. -- Per Jessen, Zürich (8.4°C) -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP] How to do i18n better?
Consider checking out http://php.net/gettext - it's the set of functions in PHP for i18n. With regards to language switching, you should consider using a url hierarchy for it, instead of just serving all pages with changing content. Regards Peter -- hype WWW: http://plphp.dk / http://plind.dk LinkedIn: http://www.linkedin.com/in/plind Flickr: http://www.flickr.com/photos/fake51 BeWelcome: Fake51 Couchsurfing: Fake51 /hype -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP] How to do i18n better?
On 19 April 2010 00:55, Andre Polykanine an...@oire.org wrote: Now the i18n process is made as follows: we set a cookie on the site and depending on it we select the language to display the site in. We have three (currently) interface files: rus.lng, ukr.lng, and enu.lng (for English US). the format is the following: define (MSG379, Welcome!); You might want to consider making the language dependent on the URL, e.g. http://site.com/ru/pagename for Russian. Doing it this way certainly isn't a bad solution, but I do strongly recommend against using define() and using anonymous translation keys. Usually, you have one base language (which is usually English due to its lack of special characters and ubiquity) from which you work. You then either simplify your keys, e.g. 'user_welcome' = 'Welcome, %1$s!', or make the keys the proper base language strings so you can wrap everything in a language function. In the latter case, you might have something like p?= _('Welcome, %1$s!', $username); ?/p, and then if the current language is not English, the _() function will make the appropriate lookup. The advantage of this is you won't need to have a tertiary source to tell you which MSG### corresponds to which piece of text. Michiel
Re[2]: [PHP] How to do i18n better?
Hello Peter, Regarding the URL switching suggested by you and Michiel, how do I do this if I have a rather complicated .htaccess file? For instance, a blog entry URL is formed as follows: http://oire.org/menelion/entry/190/ which is phisically http://oire.org/oire.php?o=menelione=190 If I need to insert the locale somewhere inhere, sorry, I just don't know how to do that) -- With best regards from Ukraine, Andre Skype: Francophile; WlmMSN: arthaelon @ yandex.ru; Jabber: arthaelon @ jabber.org Yahoo! messenger: andre.polykanine; ICQ: 191749952 Twitter: m_elensule - Original message - From: Peter Lind peter.e.l...@gmail.com To: Andre Polykanine an...@oire.org Date: Monday, April 19, 2010, 11:10:59 AM Subject: [PHP] How to do i18n better? Consider checking out http://php.net/gettext - it's the set of functions in PHP for i18n. With regards to language switching, you should consider using a url hierarchy for it, instead of just serving all pages with changing content. Regards Peter -- hype WWW: http://plphp.dk / http://plind.dk LinkedIn: http://www.linkedin.com/in/plind Flickr: http://www.flickr.com/photos/fake51 BeWelcome: Fake51 Couchsurfing: Fake51 /hype -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP] How to do i18n better?
Andre Polykanine wrote: etc. I know that PHP does support somehow exporting the strings into a .pod file. Maybe it would be better to do that? If so, how can I do it? Could you suggest me maybe a better solution than we currently have? For mostly dynamic messages or pages, I would take a look at the gettext() mechanism: http://php.net/manual/en/book.gettext.php -- Per Jessen, Zürich (14.9°C) -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP] How to do i18n better?
Michiel Sikma wrote: On 19 April 2010 00:55, Andre Polykanine an...@oire.org wrote: Now the i18n process is made as follows: we set a cookie on the site and depending on it we select the language to display the site in. We have three (currently) interface files: rus.lng, ukr.lng, and enu.lng (for English US). the format is the following: define (MSG379, Welcome!); You might want to consider making the language dependent on the URL, e.g. http://site.com/ru/pagename for Russian. Doing it this way certainly isn't a bad solution, but I do strongly recommend against using define() and using anonymous translation keys. Usually, you have one base language (which is usually English due to its lack of special characters and ubiquity) from which you work. You then either simplify your keys, e.g. 'user_welcome' = 'Welcome, %1$s!', or make the keys the proper base language strings so you can wrap everything in a language function. In the latter case, you might have something like p?= _('Welcome, %1$s!', $username); ?/p, and then if the current language is not English, the _() function will make the appropriate lookup. Unless you have namespaces (and I can't remember if they completed namespaced based functions) then don't use something so commuon as a function named underscore :/ Cheers, Rob. -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP] How to do i18n better?
On 19 April 2010 15:56, Robert Cummings rob...@interjinn.com wrote: Unless you have namespaces (and I can't remember if they completed namespaced based functions) then don't use something so commuon as a function named underscore :/ Cheers, Rob. You might want to have a look at http://pl2.php.net/_ Regards Peter -- hype WWW: http://plphp.dk / http://plind.dk LinkedIn: http://www.linkedin.com/in/plind Flickr: http://www.flickr.com/photos/fake51 BeWelcome: Fake51 Couchsurfing: Fake51 /hype -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP] How to do i18n better?
Peter Lind wrote: On 19 April 2010 15:56, Robert Cummings rob...@interjinn.com wrote: Unless you have namespaces (and I can't remember if they completed namespaced based functions) then don't use something so commuon as a function named underscore :/ Cheers, Rob. You might want to have a look at http://pl2.php.net/_ Ah, never mind *lol* :) See Tedd... I don't know everything :D Cheers, Rob. -- http://www.interjinn.com Application and Templating Framework for PHP -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
Re: Re[2]: [PHP] How to do i18n better?
On 19 April 2010 12:54, Andre Polykanine an...@oire.org wrote: Hello Peter, Regarding the URL switching suggested by you and Michiel, how do I do this if I have a rather complicated .htaccess file? For instance, a blog entry URL is formed as follows: http://oire.org/menelion/entry/190/ which is phisically http://oire.org/oire.php?o=menelione=190 If I need to insert the locale somewhere inhere, sorry, I just don't know how to do that) Switch your url structure to something like /en/menelion/entry/190/ and map that to /oire.php?o=menelione=190l=en You can still default to one language and leave the language bit out of that - but when switching to a language explicitly, having that as part of the url helps. Regards Peter -- hype WWW: http://plphp.dk / http://plind.dk LinkedIn: http://www.linkedin.com/in/plind Flickr: http://www.flickr.com/photos/fake51 BeWelcome: Fake51 Couchsurfing: Fake51 /hype -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP] How to do i18n better?
On 19 April 2010 15:56, Robert Cummings rob...@interjinn.com wrote: -snip- Unless you have namespaces (and I can't remember if they completed namespaced based functions) then don't use something so commuon as a function named underscore :/ Cheers, Rob. No, you're actually absolutely right about that, since I had a custom function in mind when I wrote that example code, not PHP's built in gettext function ;) I use frameworks so I end up doing $this-lang() or something similar myself. Michiel
Re: [PHP] How to do i18n better?
On Apr 18, 2010, at 6:55 PM, Andre Polykanine wrote: Hi everyone, I posted this in the PHP-i18n list, however got no answer so trying here). We are making a blog platform (http://oire.org/) which is provided in several languages (currently they are Russian, Ukrainian, and English). Now the i18n process is made as follows: we set a cookie on the site and depending on it we select the language to display the site in. We have three (currently) interface files: rus.lng, ukr.lng, and enu.lng (for English US). the format is the following: define (MSG379, Welcome!); etc. I know that PHP does support somehow exporting the strings into a .pod file. Maybe it would be better to do that? If so, how can I do it? Could you suggest me maybe a better solution than we currently have? Thanks a lot! I've never actually had to do this... But one idea that I came up with is using the browser language in taking a best guess at what language to display... In other words, if the user's browser language is set to Chinese, you can be fairly certain they read Chinese :) And now that I typed that out, I realize that may not be what you are really looking for... And that's when we get into the part where I can't help alot because I've never had to do it :) So good luck! :) -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP] How to do i18n better?
On Mon, 2010-04-19 at 19:17 -0400, Jason Pruim wrote: On Apr 18, 2010, at 6:55 PM, Andre Polykanine wrote: Hi everyone, I posted this in the PHP-i18n list, however got no answer so trying here). We are making a blog platform (http://oire.org/) which is provided in several languages (currently they are Russian, Ukrainian, and English). Now the i18n process is made as follows: we set a cookie on the site and depending on it we select the language to display the site in. We have three (currently) interface files: rus.lng, ukr.lng, and enu.lng (for English US). the format is the following: define (MSG379, Welcome!); etc. I know that PHP does support somehow exporting the strings into a .pod file. Maybe it would be better to do that? If so, how can I do it? Could you suggest me maybe a better solution than we currently have? Thanks a lot! I've never actually had to do this... But one idea that I came up with is using the browser language in taking a best guess at what language to display... In other words, if the user's browser language is set to Chinese, you can be fairly certain they read Chinese :) And now that I typed that out, I realize that may not be what you are really looking for... And that's when we get into the part where I can't help alot because I've never had to do it :) So good luck! :) That's the check I did on the last site i worked on (vicestyle.com) The user agent string is checked for a language and the site uses that. If none is found (bearing in mind that there's no hard and fast rule about what can go into a UA string) then it defaults to English. Links within the site itself allow the user to change their language afterwards, and you could store that in a cookie to it remembers their choice. Thanks, Ash http://www.ashleysheridan.co.uk
Re: [PHP] How to do i18n better?
At 12:17 AM +0100 4/20/10, Ashley Sheridan wrote: Links within the site itself allow the user to change their language afterwards, and you could store that in a cookie to it remembers their choice. Thanks, Ash Ash: This is something I found interesting. http://php1.net/c/language-example/ Click the flag of your choice. However, I have no idea of the quality of the translation. Cheers, tedd -- --- http://sperling.com http://ancientstones.com http://earthstones.com -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP] How to do i18n better?
Hi everyone, I posted this in the PHP-i18n list, however got no answer so trying here). We are making a blog platform (http://oire.org/) which is provided in several languages (currently they are Russian, Ukrainian, and English). Now the i18n process is made as follows: we set a cookie on the site and depending on it we select the language to display the site in. We have three (currently) interface files: rus.lng, ukr.lng, and enu.lng (for English US). the format is the following: define (MSG379, Welcome!); etc. I know that PHP does support somehow exporting the strings into a .pod file. Maybe it would be better to do that? If so, how can I do it? Could you suggest me maybe a better solution than we currently have? Thanks a lot! -- With best regards from Ukraine, Andre http://oire.org/ - The Fantasy blogs of Oire Skype: Francophile; WlmMSN: arthaelon @ yandex.ru; Jabber: arthaelon @ jabber.org Twitter: http://twitter.com/m_elensule -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP] How to do i18n better?
Andre Polykanine wrote: Hi everyone, I posted this in the PHP-i18n list, however got no answer so trying here). We are making a blog platform (http://oire.org/) which is provided in several languages (currently they are Russian, Ukrainian, and English). Now the i18n process is made as follows: we set a cookie on the site and depending on it we select the language to display the site in. We have three (currently) interface files: rus.lng, ukr.lng, and enu.lng (for English US). the format is the following: define (MSG379, Welcome!); etc. I know that PHP does support somehow exporting the strings into a .pod file. Maybe it would be better to do that? If so, how can I do it? Could you suggest me maybe a better solution than we currently have? Thanks a lot! A lot of systems just use conditional includes and a language array. So the following: Some main file: ?php $lang = tell_me_what_the_lang_code_is(); require_once( lang/messages.$lang.php ); ? And then in lang/messages.eng.php: ?php $messages['Welcome!']= 'Welcome!'; $messages['login-label'] = 'Login:'; $messages['blah-blah'] = 'Blah blah'; ? And then in lang/messages.fra.php you might have: ?php $messages['Welcome!']= 'Bienvenu!'; $messages['login-label'] = 'Accès :'; $messages['blah-blah'] = 'Le blah blah'; ? There's lots of variations on this also, but the above is a very common method. Cheers, Rob. -- http://www.interjinn.com Application and Templating Framework for PHP -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php