Home > gettext

gettext

Gettext is a project mainly written in Ruby, based on the View license.

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

= 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 <sava.chankov at gmail.com>
  • Catalan(ca) - Ramon Salvadó
  • Chinese(Simplified)(zh_CN)
    • Yang Bob <bob.yang.dev at gmail.com> (current)
    • Yingfeng
  • Chinese(Traditional)(zh_TW)
    • Yang Bob <bob.yang.dev at gmail.com> (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 <vincent.isambart at gmail.com> (current)
    • David Sulc
    • Laurent Sansonetti <laurent.sansonetti at gmail.com>
  • German(de)
    • Patrick Lenz (current)
    • Detlef Reichl <detlef.reichl at gmx.org>
    • Sven Herzberg
    • Sascha Ebach
  • Greek(el) - Vassilis Rizopoulos
  • Hungarian(hu) - Tamás Tompa
  • Italian(it)
    • Marco Lazzeri <marco.lazzeri at gmail.com>
    • Gabriele Renzi
  • Japanese(ja) - Masao Mutoh
  • Korean(ko) - Gyoung-Yoon Noh
  • Latvian(lv) - Aivars Akots <aivars.akots at gmail.com>
  • Norwegian(nb) - Runar Ingebrigtsen
  • Portuguese(Brazil)(pt_BR)
    • Antonio S. de A. Terceiro (current)
    • Joao Pedrosa
  • Russian(ru) - Yuri Kozlov <kozlov.y at gmail.com>
  • Serbian(sr) - Slobodan Paunović" <slobodan.paunovic at gmail.com>
  • Spanish(es)
    • David Espada (current)
    • David Moreno Garza
  • Swedish(sv) - Nikolai Weibull <mailing-lists.ruby-talk at rawuncut.elitemail.org>
  • 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

Previous:dotfiles