The following module was proposed for inclusion in the Module List:

  modid:       Locale::KeyedText
  DSLIP:       cdpOp
  description: Refer to user messages in programs by keys
  userid:      DUNCAND (Darren Duncan)
  chapterid:   13 (Internationalization_Locale)
  communities:
    [EMAIL PROTECTED]

  similar:
    Locale::gettext, Locale::PGetText, others

  rationale:

    Many times during a program's operation, the program (or a module
    it uses) will need to display a message to the user, or generate a
    message to be shown to the user. Often this is an error message of
    some kind, but it could also be a prompt message for interactive
    systems.

    Modern programs or database systems often refer to an error
    condition by an internal code which is guaranteed to be unique for a
    situation, and this is mapped to a user-readable message at some
    point. For example, Oracle databases often have error codes in a
    format like 'ORA-03542'. Any application receiving such a code can
    identify it easily in its conditional logic, using a simple
    'equals', and then the application can "do the right thing". No
    parsing or ambiguity involved. By contrast, if a program simply
    returned words for the user, such as 'error opening file', programs
    would have a harder time figuring out the best way to deal with it.
    But for displaying to users, easy messages are better. Also,
    different users have their own languages, and users with either
    different skill levels or different security privileges, should be
    shown different messages for the same error conditions. Developers
    get more details, joe public gets very little.

    I have found that when it comes to getting the most accurate, the
    most accurate program text for users, we still get the best results
    by having a human being write out that text themselves.

    What my module does is associate a set of key-codes, which are
    hard-coded into your application or module, each with one or more
    text strings to show human users. This association would normally be
    stored in a Perl file that defines and returns an anonymous hash
    definition. While it is obvious that people who would be writing the
    text would have to know how to edit Perl files, this shouldn't be a
    problem because my module is only meant to be used with user text
    that is associated with hard-coded program conditions. In other
    words, this user text is *part of the program*, and not the
    program's users' own data. At the same time, this information is in
    separate resource files used by the program, so that if you wanted
    to upgrade or localize what text the user sees, you only have to
    update said separate resource files, and not change your main
    program.

    I was inspired to have this organization partly by how Mac OS X
    manages its resources. It is the standard practice for Mac OS X
    programs, including the operating system itself, to have the user
    language data in separate files (usually XML files I think) from the
    main program binary. Each user language is in a separate file, and
    adding a localization to a Mac OS X program is as simple as adding a
    language file to the program package. No recompilation necessary.
    This is something that end users could do, although program package
    installers usually do it. An os-level preference / control-panel
    displays a list of all the languages your programs do or might have,
    and lets you arrange the list in order of preference. When you open
    a program, it will search for language files specific to the program
    in the order you chose so to pick a supported language closest to
    your preference. Presumably the messages in these files are looked
    up by the program using keys. Mac OS X (and the previous non-Unix
    Mac OS) handles lots of other program resources as data files as
    well, making them easy to upgrade.

    My module aims to bring this sort of functionality to Perl modules
    or programs. Your module or program can be distributed with one or
    more resource files containing text for users, and your program
    would use associated keys internally.

    It is strongly suggested (but not required) that each Perl module
    which uses this would come up with keys which are unique across all
    Perl modules (perhaps the key name can start with the module name?).
    An advantage of this is that, for example, your module could come
    with a set of user messages, but another module or program which
    uses yours may wish to override some of your messages, showing other
    messages instead which are more appropriate to the context in which
    they are using your module. One can override simply by using the
    same key code with a new user message in one of their own resource
    files. At some appropriate place, usually in the main program, my
    module can be given input that says what resource files it should
    use and in what order they should be consulted. When my module is
    told to fetch the user message for a certain code, it returns the
    first one it finds. This also works for the multiple language or
    permissions issue; simply order the files appropriately in the
    search list. The analogy is similar to inheriting from multiple
    modules which have the same method names as you or each other, or
    having multiple search directories in your path that modules could
    be installed in.

    Generally, when a program module would return a code-key to
    indicate a condition, often it will also provide some variable
    values to be interpolated into the user strings; my module would
    also handle this.

    My module never outputs anything by itself to the user, and only
    implements deterministic functionality, returning its results.

    One of the main distinctions of my approach over similar modules is
    that text is always looked up by a key which is not meant to be
    meaningful for a user. Whereas, with the other modules it looks like
    you are supposed to pass in english text and they translate it,
    which could produce ambiguous results or associations. Or
    alternately, the other modules require your text data to be stored
    in a format other than Perl files. Or alternately they have a
    compiled C component or otherwise have external dependencies; my
    module has no external dependencies (it is very simple). There are
    other differences.

    I know that Tim Bunce recently suggested that this new module idea
    of mine could be quite popular, implying something like it didn't
    exist yet. Or perhaps he was just talking about my distributing a
    predefined set of error messages that could be used with any
    database-using module. I'm not sure.

    In any event, I welcome any feedback as to whether what I describe
    seems to be already implemented, or not. Or alternately, whether you
    have trouble understanding what I am proposing. But this is meant to
    be a simple module in any event, and a small module.

  enteredby:   DUNCAND (Darren Duncan)
  enteredon:   Mon Jun  2 21:03:07 2003 GMT

The resulting entry would be:

Locale::
::KeyedText       cdpOp Refer to user messages in programs by keys   DUNCAND


Thanks for registering,
-- 
The PAUSE

PS: The following links are only valid for module list maintainers:

Registration form with editing capabilities:
  
https://pause.perl.org/pause/authenquery?ACTION=add_mod&USERID=5a400000_e6b45ee0b9055fa1&SUBMIT_pause99_add_mod_preview=1
Immediate (one click) registration:
  
https://pause.perl.org/pause/authenquery?ACTION=add_mod&USERID=5a400000_e6b45ee0b9055fa1&SUBMIT_pause99_add_mod_insertit=1

Reply via email to