= 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 %{foo}" %{:foo => 1}. 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 ruby setup.rb --help. == 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. _(fruit) cannot be understood by the gettext parser. To help the parser find all your translations, you can add fruit = N_("Apple") 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 * Copyright (C) 2001,2002 Masahiro Sakai * gettext.rb * Copyright (C) 2001-2009 Masao Mutoh * Copyright (C) 2001,2002 Masahiro Sakai * rgettext * Copyright (C) 2001-2009 Masao Mutoh * Copyright (C) 2001,2002 Yasushi Shoji * setup.rb * Copyright (C) 2000-2005 Minero Aoki * This file is released under LGPL. See the top of the install.rb. * Others * Copyright (C) 2001-2009 Masao Mutoh == Translators * Bosnian(bs) - Sanjin Sehic * Bulgarian(bg) - Sava Chankov * Catalan(ca) - Ramon Salvadó * Chinese(Simplified)(zh_CN) * Yang Bob (current) * Yingfeng * Chinese(Traditional)(zh_TW) * Yang Bob (current) * LIN CHUNG-YI * Croatian(hr) - Sanjin Sehic * Czech(cs) - Karel Miarka * Dutch(nl) - Menno Jonkers * Esperanto(eo) - Malte Milatz * Estonian(et) - Erkki Eilonen * French(fr) * Vincent Isambart (current) * David Sulc * Laurent Sansonetti * German(de) * Patrick Lenz (current) * Detlef Reichl * Sven Herzberg * Sascha Ebach * Greek(el) - Vassilis Rizopoulos * Hungarian(hu) - Tamás Tompa * Italian(it) * Marco Lazzeri * Gabriele Renzi * Japanese(ja) - Masao Mutoh * Korean(ko) - Gyoung-Yoon Noh * Latvian(lv) - Aivars Akots * Norwegian(nb) - Runar Ingebrigtsen * Portuguese(Brazil)(pt_BR) * Antonio S. de A. Terceiro (current) * Joao Pedrosa * Russian(ru) - Yuri Kozlov * Serbian(sr) - Slobodan Paunović" * Spanish(es) * David Espada (current) * David Moreno Garza * Swedish(sv) - Nikolai Weibull * Ukrainian(uk) - Alex Rootoff * Vietnamese(vi) - Ngoc Dao Thanh == 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(uk) - 2.0.1 * Vietnamese(vi) - 2.0.1 == Maintainer Masao Mutoh