Re: [fwd] Re: [rt-devel] Language detection bug (from: [email protected])

[email protected] ("Sean M. Burke") Fri, 07 Feb 2003 15:10:58 -0900
Newsgroups perl.i18n
Message-ID <[email protected]>
At 2/7/2003 01:13 PM -0500, Jesse Vincent wrote:
>So, some folks are having issues with RT's automatic language detection, 
>which uses Locale::Maketext's infrastructure to do the right thing to 
>guess what the right translation to serve up is. Anyone have comments on 
>what Andrew's seeing?

OK, two things:

1) I just remembered that someone reported a bug where Locale::Maketext 
occasionally mishandled some MIME headers -- I think it was something like 
some Mozilla emitting "Accept-Language: foo;q=.123, bar" and not seeing the 
"foo".  Since you doing are using Locale::Maketext for REAL WORK, I'll try 
to fix this ASAP and get out a new version.

2) Short story:
If you have a lexicon for a language form whose tag is "xx-yy", of course 
you're calling it xx_yy.pm.  But if there's not already a xx.pm, you should 
make there be one, even if it consists of just "package Whatever::xx; use 
base qw(Whatever::xx_yy); 1;".
(Or of course you could just mv xx_yy.pm xx.pm.)

Caveat to short story:
I'm assuming that your xx-yy isn't a weird form of xx that would befuddle 
people who say "I understand xx".  In theory, this is an iffy 
assumption.  In practice, it's a pretty solid assumption.


Long story:
I don't have Locale::Maketext try to implement the thing where if you ask 
for XX, and it doesn't see an xx.pm, it will dish out 
xx-[anything].pm.  The main reason I don't do that it that it's nontrivial 
to have Perl ask "What Foo::Bar::xx_* classes are available?".  A 
mitigating reason is that if I DO ask that, and I get back 
qw(Foo::Bar::xx_yy Foo::Bar::xx_zz), I'm a bit unhappy having to decide 
which to use.  I mean, if someone accepts "en", and I have "en-us" and 
"en-jm" (Jamaican English), /I/ can presume that en-us is probably safer to 
give them; but I don't know of a simple algorithm to do that.  So instead, 
I make the programmer go to the bother of making an en.pm and making it 
synonymous with en_us.pm, etc.

Incidentally, one that that Locale::Maketext does do, is the reverse: if a 
user accepts en-ca, Locale::Maketext will say "OK, I can also just give 
then en.pm".  That is, this accept list:
Accept-Language: en-CA, es-MX
is treated as if it were really:
Accept-Language: en-CA, es-MX, en, es

I suppose I could have easly made it instead work so it would instead read 
it as:
Accept-Language: en-CA, en, es-MX, es
I'm not particularly attached to either way; I bet there's theoretical and 
practical arguments both ways.  Does anyone have a preference?  It's all 
negotiable.


--
Sean M. Burke  [email protected]  http://search.cpan.org/~sburke/