Olga, thanks for looking into this and provding a link to Finbarr's blog
sometimes the todo list is too long to track down and reproduce every problem

there were a few problems that were bugs in libast:

* $set==3 (ast) vs $set==1 (default) mismatches noted by Finbarr 

  this is not necessarily a bug, but a strict ast convention that ast
  commands and scripts only look for messages in $set==3; this broke the
  principle of least surprise so ...

  this was fixed by translate() first checking for $set==3 and then $set==1

  this allows ast messages ($set==3) to be included in non-ast message files
  but also allows the "default" $set==1 to be found in files that do not
  have a $set==3 message set

* an underlying problem where ast may recognize a locale that the
  native setlocale()+catopen() do not
  
  in particular ast with ast-locale installed recognizes "fr" as a valid
  locale even though the native setlocale() requires territory qualification
  (e.g. "fr_FR")

  this was fixed by changing the ast local locale vs native standard locale 
logic

  the reason for the locale vs native distinction is that ast provides "local"
  locales on systems that may not otherwise support that locale; e.g., on a 
system
  that does not have the "fr_FR" locale installed you can still get ast-specific
  "fr" locale message translation from the catalogs in the ast-locale package

  ast also provides a "debug" local locale for debugging locale settings and
  message translation; running Finbarr's demo with LC_ALL=debug produces

        ksh93 message translation example
        (demo,3,1)
        (demo,3,2)
        (demo,3,3)(debug,demo,libshell,No Translation available)

  (demo,3,1) means message 1 in set 3 in the demo catalog; 3 is the lookup set,
  if not found then set 1 will be used per the fix above

  (debug,demo,libshell,No Translation available) is for messages that are not
  in the C locale catalogs: search the demo catalog first, then the libshell 
catalog,
  for the message "No Translation available"

* some other bugs were fixed to allow intermingling of standard catgen(1) and
  ast msggen(1) compiled catalogs (these are the file types that catopen() must 
find)

  the reason for msggen(1) is the msggen(1) output is portable to all machine 
architectures
  this is how one ast-locale package can work on all hosttypes; similar 
guarantees
  cannot be made for catgen(1) output from different hosttypes

the final misconception (and this is a results of ast documentation and coding 
bugs)
in Finbarr's example and patch is the locations where ast looks for message 
catalogs

in ast just about every command-related data file lookup is done via the ast 
pathpath()
pathpath() lookups use only the PATH environment variable to search for related 
files
e.g.,
        ../lib/file/magic for the file(1) magic file
        ../lib/<plugin-class>/<plugin-shared-library> for runtime plugins
the idea being, if you have the PATH properly set up to find the std and your 
own ast
commands/scripts, then the related file lookups will work

the message catalog search order is (using NLSPATH notation):
        getenv("NLSPATH")
        pathpath("share/lib/locale/%l/%C/%N")
        pathpath("share/locale/%l/%C/%N")
        pathpath("lib/locale/%l/%C/%N")

so to package a script susbsystem using ksh93 (with the libast fixes mentioned 
above)
        put scripts in $PACKAGEROOT/bin
        put catgen(1) or msggen(1) catalogs in 
$PACKAGEROOT/share/lib/locale/%l/LC_MESSAGES/<script-name>
                (or share/locale/... or lib/locale/...)
        put $PACKAGEROOT/bin in PATH
        set LC_* to a supported locale

if you use catgen(1) then you may have to provide os/architecture specific
catalogs in your package distribution; msggen(1) should work on all 
os/architectures

On Mon, 3 May 2010 02:14:50 +0200 =?KOI8-R?B?z8zYx8Egy9LZ1sHOz9fTy8HR?= wrote:
> David, the problem is the name of the catalog. Instead of using the
> script name it always uses 'libshell' as the catalog name.
> I try to make a patch soon.

> Olga

> On Wed, Aug 12, 2009 at 4:44 PM, David Korn <[email protected]> wrote:
> > cc:  [email protected]
> > Subject: Re: Re: [ast-developers] Seeking help with $"string", ksh -D, 
> > gencat and   NLSPATH
> > --------
> >
> >> On 06/07/2009, Wendy Lin <[email protected]> wrote:
> >> > On 22/05/2009, Finnbarr Murphy <[email protected]> wrote:
> >> >  > In short, as far as I can see,  ksh93 does not appear to support 
> >> > localized
> >> >  > message strings at present.
> >> >
> >> >
> >> > Can this be fixed for the next release, please?
> >
> >> After reading your blog at
> >> http://blog.fpmurphy.com/2009/05/ksh93-message-localization.html I
> >> feel very disappointed about ksh.
> >> If bash 4.0 would support fp math we would immediately migrate to it
> >> because it has the message localisation working.
> >>
> >
> >
> > ksh93 does support localized messages strings in scripts.
> >
> > Any string within a script that needs to be localized has to be
> > written as
> >        $"string"
> > In the C or POSIX locale this will be treated as "string".
> >
> > If you run
> >        ksh -D script
> > it will generate the list of strings that need localization.
> >
> > These can be put into a catalog for the C local.
> >
> > The catalogs for each locale can be created.

_______________________________________________
ast-users mailing list
[email protected]
https://mailman.research.att.com/mailman/listinfo/ast-users

Reply via email to