= gettext - Ruby-GetText-Package

Ruby-GetText-Package is a Localization(L10n) library and tool  
which is modeled after the GNU gettext package.

This library translates original messages to localized  
messages using client-side locale information(environment  
variable or CGI variable).

The tools for developers support creating, useing, and modifying  
localized message files(message catalogs).

((*Rails*))
Rails support has been removed.  
Rails / ActiveRecord specific code now lives in locale_rails[http://github.com/mutoh/locale_rails/tree/master], gettext_rails[http://github.com/mutoh/gettext_rails/tree/master] and gettext_activerecord[http://github.com/mutoh/gettext_activerecord/tree/master].

== Website
* homepage[http://www.yotabanana.com/hiki/ruby-gettext.html]
* on rubyforge[http://gettext/rubyforge.org/]
* on github[http://github.com/gettext/]

== Features
* Translate singular/plural messages with simple APIs(similar to GNU gettext)

* Thread safety. Message resources are shared from all threads, but 
  returns translated messages of the current thread's locale.

* Tools to find message IDs
  * Extract message IDs to po-files using rgettext from 
    * ruby scripts 
    * glade-2 XML file(.glade)
    * ERB file(.rhtml, .erb)
    * Anything (with your own parsers)
    * The po-files are compatible to GNU gettext.

  * rmsgfmt creates a mo-file from a po-file.
    The mo-file is compatible to GNU gettext(msgfmt).

  * Using rgettext/rmsgfmt as Rake tasks

* textdomain's scope is adapt to ruby class/module mechanism.
  * A class/module can have plural textdomains.
  * a message is looked up in its class/module and ancestors.

* CGI support (gettext/cgi)
  * Locale is retrieved from client informations using Ruby-Locale.
    (HTTP_ACCEPT_LANGUAGE, HTTP_ACCEPT_CHARSET, QUERY_STRING(lang), Cookies(lang)).

* String%() is extended to use named argument such as <tt>%{foo}" %{:foo => 1}</tt>.
  Notes that Ruby-1.9.x supports this format by itself.

== Requirements
* {Ruby 1.8.3 or later}[http://www.ruby-lang.org]
* {Rubygems}[http://www.rubygems.org/]
* {locale gem}[http://rubyforge.org/projects/locale/]
  * $ gem install locale
* (for development only)
  * {GNU gettext 0.10.35 or later}[http://www.gnu.org/software/gettext/gettext.html]
  * {Racc-1.4.3 or later}[http://www.ruby-lang.org/raa/list.rhtml?name=racc]
    * (for compiling src/rmsgfmt.ry only)

== Install
* Uninstall old gettext if exists. (You need to do this when updating 1.93.0 -> 2.0.1)
    (sudo/su on POSIX system)
    gem uninstall gettext

* gem
    #from rubyforge 
    (sudo/su on POSIX system)
    gem install gettext

* download tar-ball
    # De-Compress archive and enter its top directory.
    (sudo/su on POSIX system)
    ruby setup.rb

You can also install files in your favorite directory by  
supplying setup.rb some options. Try <tt>ruby setup.rb --help</tt>.

== Usage
===Translation
- _: Basic translation method
  Translates the message.
    _("Hello")

The gettext methods comes in 3 combinable flavors
- n: Pluralized
  Returns singular or plural form, depending on how many you have.
    n_("Apple", "%{num} Apples", 3)
    n_(["Apple", "%{num} Apples"], 3)

- p: context aware
  A context is a prefix to your translation, usefull when one word has different meanings, depending on its context.
    p_("Printer","Open") <=> p_("File","Open")
    is the same as s_("Printer|Open")  <=> s_("File|Open")

- s: without context
  If a translation could not be found, return the msgid without context.
    s_("Printer|Open") => "Öffnen" #translation found
    s_("Printer|Open") => "Open"   #translation not found

- combinations
    np_("Fruit", "Apple", "%{num} Apples", 3)
    ns_("Fruit|Apple","%{num} Apples", 3)

    np_(["Fruit","Apple","%{num} Apples"], 3)
    ns_(["Fruit|Apple","%{num} Apples"], 3)

- N_, Nn_: Makes dynamic translation messages readable for the gettext parser.
  <tt>_(fruit)</tt> cannot be understood by the gettext parser. To help the parser find all your translations,
  you can add <tt>fruit = N_("Apple")</tt> which does not translate, but tells the parser: "Apple" needs translation.

    fruit = N_("Apple")   # same as fruit = "Apple"
    _(fruit)              # does a normal translation

    fruits = Nn_("Apple", "%{num} Apples")
    n_(fruits, 3)

=== Bind textdomains to the classes.
A textdomain has a translation file in each language.
A module/class can have multi textdomains. This means the 
libraries/applications can have their own textdomains.

 class Foo
   include GetText
   bindtextdomain "your_app_domain_name"
 end

 class Book
   include GetText
   bindtextdomain "general"
   bindtextdomain "book"
 end

=== Locale
If you need to set the locale by yourself, then use:
  GetText.locale = "en_US" # translate into english from now on
  GetText.locale # => en_US
Or
  include GetText
  set_locale "en_US"

For more details and options, have a look at the samples folder or
consult the tutorial[http://www.yotabanana.com/hiki/ruby-gettext-howto.html].

== License
This program is licenced under the same licence as Ruby(See COPYING) or 
LGPL(Lesser General Public License: http://www.gnu.org/licenses/lgpl-3.0.txt).  

* mofile.rb
  * Copyright (C) 2001-2009 Masao Mutoh <mutoh at highwhay.ne.jp>
  * Copyright (C) 2001,2002 Masahiro Sakai <s01397ms at sfc.keio.ac.jp>

* gettext.rb
  * Copyright (C) 2001-2009 Masao Mutoh <mutoh at highwhay.ne.jp>
  * Copyright (C) 2001,2002 Masahiro Sakai <s01397ms at sfc.keio.ac.jp>

* rgettext 
  * Copyright (C) 2001-2009 Masao Mutoh <mutoh at highwhay.ne.jp>
  * Copyright (C) 2001,2002 Yasushi Shoji <yashi at atmark-techno.com>

* setup.rb
  * Copyright (C) 2000-2005 Minero Aoki <aamine at loveruby.net>
  * This file is released under LGPL. See the top of the install.rb.

* Others
  * Copyright (C) 2001-2009 Masao Mutoh <mutoh at highwhay.ne.jp>


== Translators
* Bosnian(bs)                - Sanjin Sehic <saserr at gmail.com>
* Bulgarian(bg)              - Sava Chankov <sava.chankov at gmail.com>
* Catalan(ca)                - Ramon Salvadó <rsalvado at gnuine.com>
* Chinese(Simplified)(zh_CN)
  * Yang Bob <bob.yang.dev at gmail.com> (current)
  * Yingfeng <blogyingfeng at gmail.com>
* Chinese(Traditional)(zh_TW)
  * Yang Bob <bob.yang.dev at gmail.com> (current)
  * LIN CHUNG-YI <xmarsh at gmail.com>
* Croatian(hr)               - Sanjin Sehic <saserr at gmail.com>
* Czech(cs)                  - Karel Miarka <kajism at yahoo.com>
* Dutch(nl)                  - Menno Jonkers <ruby-gettext at jonkers.com>
* Esperanto(eo)              - Malte Milatz <malte at gmx-topmail.de>
* Estonian(et)               - Erkki Eilonen <erkki at itech.ee>
* French(fr)
  * Vincent Isambart <vincent.isambart at gmail.com> (current)
  * David Sulc <davidsulc at gmail.com>
  * Laurent Sansonetti <laurent.sansonetti at gmail.com>
* German(de)
  * Patrick Lenz <patrick at limited-overload.de> (current)
  * Detlef Reichl <detlef.reichl at gmx.org>
  * Sven Herzberg <herzi at abi02.de>
  * Sascha Ebach <se at digitale-wertschoepfung.de>
* Greek(el)                  - Vassilis Rizopoulos <damphyr at gmx.net>
* Hungarian(hu)              - Tamás Tompa <tompata at gmail.com>
* Italian(it)
  * Marco Lazzeri <marco.lazzeri at gmail.com>
  * Gabriele Renzi <surrender_it at yahoo.it>
* Japanese(ja)               - Masao Mutoh <mutomasa at gmail.com>
* Korean(ko)                 - Gyoung-Yoon Noh <nohmad at gmail.com>
* Latvian(lv)                - Aivars Akots <aivars.akots at gmail.com>
* Norwegian(nb)              - Runar Ingebrigtsen <runar at mopo.no>
* Portuguese(Brazil)(pt_BR)  
  * Antonio S. de A. Terceiro <terceiro at softwarelivre.org> (current)
  * Joao Pedrosa <joaopedrosa at gmail.com>
* Russian(ru)                - Yuri Kozlov <kozlov.y at gmail.com>
* Serbian(sr)                - Slobodan Paunović" <slobodan.paunovic at gmail.com>
* Spanish(es)
  * David Espada <davinci at escomposlinux.org> (current)
  * David Moreno Garza <damog at damog.net>
* Swedish(sv)                - Nikolai Weibull <mailing-lists.ruby-talk at rawuncut.elitemail.org>
* Ukrainian(ua)              - Alex Rootoff <rootoff at pisem.net>
* Vietnamese(vi)             - Ngoc Dao Thanh <ngocdaothanh at gmail.com>

== Status of translations
* Bosnian(bs)               - 1.90.0 (old)
* Bulgarian(bg)             - 2.0.1
* Catalan(ca)               - 2.0.1
* Croatian(hr)              - 1.90.0 (old)
* Chinese(zh_CN)            - 2.0.1
* Chinese(zh_TW)            - 2.0.1
* Czech(cs)                 - 1.9.0 (old)
* Dutch(nl)                 - 1.90.0 (old)
* English(default)          - 2.1.0
* Esperanto(eo)             - 2.0.1
* Estonian(et)              - 2.0.1
* French(fr)                - 2.0.1 
* German(de)                - 2.0.1
* Greek(el)                 - 2.0.1 
* Hungarian(hu)             - 2.0.1
* Italian(it)               - 1.6.0 (old)
* Japanese(ja)              - 2.1.0
* Korean(ko)                - 1.9.0 (old)
* Latvian(lv)               - 2.0.1 
* Norwegian(nb)             - 2.0.1
* Portuguese(Brazil)(pt_BR) - 2.0.1
* Russian(ru)               - 2.0.1
* Serbian(sr)               - 2.0.1
* Spanish(es)               - 2.0.1
* Swedish(sv)               - 0.8.0 (too much old)
* Ukrainian(ua)             - 2.0.1
* Vietnamese(vi)            - 2.0.1

== Maintainer
Masao Mutoh <mutomasa at gmail.com>