SPUG: My two perl gizmos (CPAN module paralysis)
Jonathan Gardner
jgardn at alumni.washington.edu
Thu Dec 19 11:08:20 CST 2002
On Thursday 19 December 2002 06:17 am, Fred Morris wrote:
> Very briefly, here are short synopses of the two modules which I have
> contemplated submitting to CPAN. I know that left to my own devices, that
> will never happen.
>
> Both of these modules are utilized in a working application which gets
> daily use.
>
> Maybe this'll encourage others to share theirs, and we can get together and
> at least get the peer review issue out of the way (there are a number of
> impediments standing between me and CPAN, peer review is only one). Or,
> maybe somebody will be interested enough to say "hey, I could use that!".
> Be aware, neither of them is packaged for distribution at the moment
> although anyone who's competent with Perl should have no problem getting
> them to work; they do have POD.
>
>
> A CANONICALIZED STRING CONSTANT RESOLVER
>
> Problem:
>
> Generally speaking, localization. This means for languages, but also for
> different parts of an application, or different applications of reusable
> parts.
>
> Utility:
>
> I find it useful, but mostly I just think it's cool. The overhead for this
> might be somewhat large in a occasionally-used Perl script, but with
> mod_perl a persistent hash is constructed of particular fully-qualified
> names which have already been resolved.
>
> Synopsis:
>
> The constants are all retrieved with a function call which takes as a
> parameter a key which will resolve to a constant (or filter, I lied).
>
> So, you define something like
>
> Success => { 'string', 'Done!' }
>
> You reference it in different places as
>
> $cliches->cliche( 'SomeModule.Frotzify.Success' )
> $cliches->cliche( 'ThisModule.Frappe.Success' )
>
> You may decide that when you Frappe you want a different message or when
> you Stir in SomeModule the same thing is needed, and so you define
> overloads (overrides?):
>
> Frappe.Success => { 'string', 'Cheers!' }
> SomeModule.Stir.Success => { 'string', 'Mixed!' }
>
The only thing weird about what I see is that you might as well define
"$Success" and let namespaces do the rest for you. For instance, you can do:
$main::Success = "Done!";
$Frappe::Success = "Cheers!";
$SomeModule::Stir::Success = "Mixed!";
And just use "$Success" in the appropriate place.
As far as a way to do translations efficiently and well... Qt is a C++ widget
library for Windows and X. It is probably the best platform to program for
localization and translation.
Qt uses a function called tr() (which unfortunately is a builtin in perl). You
pass in the string, and then define localization later. If we changed the
name to trn():
$cliches->cliche(trn("Done!"));
Later on, you can ask the module that defined trn() what string were used in
your program. With a list of all of your strings, you can translate it to a
different language or localization, put that into a file, and tell the module
to use that localization.
The problem is that you want to use a finite number of strings. For instance:
trn("Hello, $first_name")
is never going to get translated except for a finite number of $first_name.
The way to work around that is to do something like:
sprintf(trn("Hello, \%s!"), $first_name)
or something more ingenious, which probably exists in perl already.
Anyway, it's a couple of pennies, if that.
--
Jonathan Gardner
jgardn at alumni.washington.edu
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
POST TO: spug-list at pm.org PROBLEMS: owner-spug-list at pm.org
Subscriptions; Email to majordomo at pm.org: ACTION LIST EMAIL
Replace ACTION by subscribe or unsubscribe, EMAIL by your Email-address
For daily traffic, use spug-list for LIST ; for weekly, spug-list-digest
Seattle Perl Users Group (SPUG) Home Page: http://seattleperl.org
More information about the spug-list
mailing list