Message catalogs (I18N) overnight hack

Discussion in 'Ruby' started by Hal E. Fulton, Jun 28, 2003.

  1. Hi, everyone.

    I've been thinking about message catalogs (as in I18N)
    for the last day or so.

    I've hacked something together that works like this:


    require "msgcat"
    MsgCat.load("de_DE")

    puts "Hello, world!"
    puts "Hello, Tom!"
    puts "User adam has opened file garden.eden already."
    puts "User foo has opened file bar already."
    printf "User %s has opened file %s already.\n", "eve", "apple"

    puts "Douglas Adams says that 'the meaning of life' is 42."
    puts "This %1 symbol will be ignored."
    printf "The cost of %s is $%5.2f.\n", "this item", 49.95

    x = "Hello, world!"
    y = x.xlate
    lputs y # Hallo, Welt!

    And the output is:

    Hallo, Welt!
    Hallo, Tom!
    Datei garden.eden wird schon geoeffnet von adam.
    Datei bar wird schon geoeffnet von foo.
    Datei apple wird schon geoeffnet von eve.
    Douglas Adams hat gesagt, dass 'the meaning of life' '42' ist.
    This %1 symbol will be ignored.
    $49.95 ist der Preis von 'this item'.
    Hallo, Welt!

    What do you think?

    It's just an overnight hack. I might clean it up and release it
    if there is interest.

    Here are some highlights and limitations:

    - Obviously I'm fiddling with Kernel#puts, #print, and #printf
    - I didn't think #p should be changed
    - For the heck of it, I added a String#xlate
    - Anything that can't be found in the message list remains
    untranslated
    - For "literal" (untranslated) output, I'm exposing the aliases
    lputs, lprint, and lprintf
    - Parameters may be ordered (since word order differs between
    languages)
    - There are always two catalogs in use -- the primary one is
    called "native.cat" and it allows a lookup into the target
    language in the other catalog
    - The native.cat catalog doesn't have to be in English
    - The message ordering is irrelevant (though they are sorted
    internally by number of parameters to avoid matching problems)
    - Message order does not have to be the same in corresponding
    catalogs (though the ids must correspond)
    - Currently I'm not dealing with character set issues at all
    - There's no real compliance with anyone else's way of doing
    things as yet -- I'm reinventing the wheel until it seems
    better not to
    - The message catalogs are YAML-based (thanks, _why!)
    - I'm planning a little utility to create catalogs
    - Besides a utility, I think a little API for adding messages
    is appropriate
    - I'm thinking of a "logging mode" to aid in extracting message
    strings for translation
    - I'm also thinking of a "warning mode" when an untranslated
    string is found
    - There's error checking possible that I'm not doing yet
    - The MsgCat.detect method will read the $LANG environment
    variable (but so far it ignores the .utf8 or whatever)
    - Right now, message catalogs are searched for only in the
    current directory
    - Internally a message is a Symbol
    - I'm thinking of mputs/mprint/mprintf to take a first arg which
    would explicitly identify the message and bypass the lookup
    - Currently there are some ugly hacks in the code, and it's
    possible to mislead or confuse the matching (e.g., a message
    with parameters with missing numbers, etc.)

    Cheers,
    Hal



    --
    Hal Fulton
     
    Hal E. Fulton, Jun 28, 2003
    #1
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. york
    Replies:
    10
    Views:
    805
    John McGrath
    Oct 23, 2004
  2. Steve Whitlatch

    XML Catalogs on Linux

    Steve Whitlatch, Jan 3, 2004, in forum: XML
    Replies:
    0
    Views:
    900
    Steve Whitlatch
    Jan 3, 2004
  3. Secret Guy
    Replies:
    0
    Views:
    558
    Secret Guy
    Aug 19, 2005
  4. Christian Tismer

    Slogan: Getting Rich Overnight

    Christian Tismer, Aug 9, 2003, in forum: Python
    Replies:
    15
    Views:
    763
  5. Shug
    Replies:
    13
    Views:
    922
    Philipp
    Dec 15, 2006
Loading...

Share This Page