= gettext - gettext for Ruby
Gettext gem is a pure Ruby Localization(L10n) library and tool
which is modeled after the GNU gettext package.
This library was called as "Ruby-GetText-Package". Since 2.3.0, this
library is called just "gettext". You can call this library as
"gettext gem" or "Ruby gettext" to distinguish from GNU gettext.
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://ruby-gettext.github.com/]
* on github[http://github.com/ruby-gettext/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 rxgettext 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 rxgettext/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
* rxgettext
* Copyright (C) 2001-2009 Masao Mutoh
* Copyright (C) 2001,2002 Yasushi Shoji
* 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
* Kouhei Sutou
=== Old maintainer
* Masao Mutoh