<?xml version="1.0" encoding="UTF-8"?>
<feed xml:lang="en-US" xmlns="http://www.w3.org/2005/Atom">
  <id>tag:www.globalize-rails.org,2005:/home</id>
  <link type="text/html" href="http://www.globalize-rails.org" rel="alternate"/>
  <link type="application/atom+xml" href="http://www.globalize-rails.org/home.atom" rel="self"/>
  <title>Globalize &#187; Home</title>
  <updated>2008-06-26T13:44:31+02:00</updated>
  <entry>
    <id>tag:www.globalize-rails.org,2005:Wikipage/1</id>
    <published>2008-06-25T00:37:40+02:00</published>
    <updated>2008-06-26T13:44:31+02:00</updated>
    <link type="text/html" href="http://www.globalize-rails.org/home" rel="alternate"/>
    <title>Home</title>
    <content type="html">&lt;h2&gt;Globalize for Rails 1.2 released!&lt;/h2&gt;

&lt;p&gt;The Globalize&amp;#8217;s developer team is happy to annouce the official release of Globalize for Rails 1.2&lt;/p&gt;

&lt;p&gt;Besides being compatible with the latest shiny &amp;#38; jaw-dropping Ruby on Rails 1.2 release this Globalize release adds two new major features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.artweb-design.de/2007/1/31/upcoming-globalize-feature-an-alternative-way-of-storing-model-translations"&gt;alternative way of storing ModelTranslations in the model table&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;namespaced ViewTranslations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For a smooth upgrade please note that a minor change to the database schema is required.&lt;/p&gt;

&lt;p&gt;&lt;span class="caps"&gt;NOTE&lt;/span&gt;: If you install the plugin via script/plugin install, then your schema will be automatically updated (default rails environment).&lt;/p&gt;

&lt;p&gt;You can also accomplish this by running the included Rake task:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;rake globalize:upgrade_schema_to_1_dot_2&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;(This in fact doesn&amp;#8217;t do anything more than add a string column &amp;#8216;namespace&amp;#8217; to the table globalize_translations, so you could do that manually, too.)&lt;/p&gt;

&lt;p class="meta"&gt;Posted on 01 Mar 2007&lt;/p&gt;

&lt;h2&gt;Overview for busy people&lt;/h2&gt;

&lt;strong&gt;Globalize&lt;/strong&gt; implements three basic types of translation:

&lt;ol&gt;
&lt;li&gt;Dates, currencies, etc: language dependent, but also (often) country/locale dependent. This feature provides convenient methods for relevant data types. &lt;code&gt;12345.67.localize&lt;/code&gt; &amp;rarr; &lt;code&gt;12.345,67&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Content in the database, for specific fields in specific tables: once the &lt;code&gt;translates&lt;/code&gt; method is added to the relevant model, the fields indicated with that method call gain the ability to have translated content sitting in the database. An operator (possibly the developer) will need to add these translated texts.&lt;/li&gt;
&lt;li&gt;Arbitrary strings: any string that you would like, with added flexiblity for including parameters (for example: &amp;#8216;one&amp;#8217; in the singular form of a phrase and an actual number for the plural form)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Using these three mechanisms, all user-facing content ought to be translatable.&lt;/p&gt;

&lt;p&gt;For a quick overview of Globalize usage see: &lt;a href="/pages/how-to-use-globalize"&gt;How to use&lt;/a&gt;. For more walkthroughs, articles and howtos see: &lt;a href="/pages/documentation"&gt;Documentation&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;Screencast(s)&lt;/h2&gt;

&lt;p&gt;We&amp;#8217;d like to publish a screencast here &amp;#8211; or better yet, a short screencast for each of several aspects of using Globalize.&lt;/p&gt;

&lt;p&gt;If you&amp;#8217;re volunteering for this, please contact us.&lt;/p&gt;

</content>
    <author>
      <name>Sven</name>
      <email>svenfuchs@artweb-design.de</email>
    </author>
  </entry>
  <entry>
    <id>tag:www.globalize-rails.org,2005:Wikipage/2</id>
    <published>2008-06-25T00:38:15+02:00</published>
    <updated>2008-06-26T12:41:51+02:00</updated>
    <link type="text/html" href="http://www.globalize-rails.org/home/pages/features" rel="alternate"/>
    <title>Features</title>
    <content type="html">&lt;h2&gt;Translation&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Supports translation of views and db content.&lt;/li&gt;
	&lt;li&gt;Supports pluralization, even in languages with multiple plural forms like Polish, via the String division method (&amp;#8217;/&amp;#8217;).&lt;/li&gt;
	&lt;li&gt;Automatic routing to locale-specific templates (e.g. show.es-ES.rhtml).&lt;/li&gt;
	&lt;li&gt;Automatically chooses locale-specific ActionMailer template.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Easy to Use&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;It&amp;#8217;s transparent: You&amp;#8217;ll mostly just use &lt;code&gt;Locale.set&lt;/code&gt;, &lt;code&gt;"string".t&lt;/code&gt;, and &lt;code&gt;translates :field&lt;/code&gt;. The rest is automatic.&lt;/li&gt;
	&lt;li&gt;All translation and localization data is in three database tables: &lt;code&gt;globalize_countries&lt;/code&gt;, &lt;code&gt;globalize_languages&lt;/code&gt;, and &lt;code&gt;globalize_translations&lt;/code&gt;.&lt;/li&gt;
	&lt;li&gt;Comes with a free &lt;code&gt;Currency&lt;/code&gt; class, especially designed for Rails. Prints out numbers correctly for each locale, and supports currency formatting (&#165;2300.00, 23&amp;nbsp;000,00&amp;nbsp;kr). Values are stored internally and in the database as integers, for maximum precision.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Built-in Data&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Comprehensive list of 7599 languages and 239 countries, with pluralization rules, native language names (Spanish is Espa&#241;ol) and number formatting.&lt;/li&gt;
	&lt;li&gt;Supplies Time#localize and Date#localize to print out times and dates in strftime format in 92 languages. Other languages can be added by simply supplying translations.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Efficiency&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Efficient querying for db translations. One DB call loads models and translations for current language.   &lt;/li&gt;
	&lt;li&gt;Additionally, there&amp;#8217;s a &lt;em&gt;piggyback&lt;/em&gt; feature for associations. So, &lt;code&gt;Product.find(:all, :include_translated =&amp;gt; :manufacturer)&lt;/code&gt; is one DB call, but gives you &lt;code&gt;product.manufacturer_name&lt;/code&gt; in your current language.&lt;/li&gt;
	&lt;li&gt;Caches view translations to cut down on db queries.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Databases&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Supports PostgreSQL, MySQL and Sqlite3&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And, it&amp;#8217;s ridiculously easy to add to your app.&lt;/p&gt;

&lt;h1&gt;Comparison to others&lt;/h1&gt;

&lt;p&gt;Globalize is generally said to be the most powerful all-in-one solution for Internationalization of Ruby on Rails applications.&lt;/p&gt;

&lt;p&gt;(more to come soon &amp;#8230; until then please refer to &lt;a href="http://wiki.rubyonrails.org/rails/pages/InternationalizationComparison"&gt;the comparison&lt;/a&gt; on the Rails wiki.)&lt;/p&gt;

</content>
    <author>
      <name>Sven</name>
      <email>svenfuchs@artweb-design.de</email>
    </author>
  </entry>
  <entry>
    <id>tag:www.globalize-rails.org,2005:Wikipage/3</id>
    <published>2008-06-25T00:38:39+02:00</published>
    <updated>2008-06-25T00:38:39+02:00</updated>
    <link type="text/html" href="http://www.globalize-rails.org/home/pages/getting-started" rel="alternate"/>
    <title>Getting started</title>
    <content type="html">&lt;h2&gt;Get Globalize!&lt;/h2&gt;

&lt;p&gt;Generally we recommend using the Rails plugin install script via Subversion:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;script/plugin install &lt;a href="http://svn.globalize-rails.org/svn/globalize/branches/for-1.2"&gt;http://svn.globalize-rails.org/svn/globalize/branches/for-1.2&lt;/a&gt; (this is for Rails 1.2)&lt;/li&gt;
	&lt;li&gt;script/plugin install &lt;a href="http://svn.globalize-rails.org/svn/globalize/branches/for-1.1"&gt;http://svn.globalize-rails.org/svn/globalize/branches/for-1.1&lt;/a&gt; (this is for Rails 1.1)&lt;/li&gt;
	&lt;li&gt;script/plugin install &lt;a href="http://svn.globalize-rails.org/svn/globalize/trunk"&gt;http://svn.globalize-rails.org/svn/globalize/trunk&lt;/a&gt; (this is edge Globalize)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you have problems with Subversions, e.g. because you&amp;#8217;re behind a restrictive firewall, you might want to use the tar files:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://globalize.artweb-design.de/20070316/globalize_for-1_2.tar.gz"&gt;http://globalize.artweb-design.de/20070316/globalize_for-1_2.tar.gz&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://globalize.artweb-design.de/20070316/globalize_for-1_1.tar.gz"&gt;http://globalize.artweb-design.de/20070316/globalize_for-1_1.tar.gz&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://globalize.artweb-design.de/20070316/globalize_trunk.tar.gz"&gt;http://globalize.artweb-design.de/20070316/globalize_trunk.tar.gz&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;How to install&lt;/h2&gt;

&lt;p&gt;From your rails app root directory:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;script/plugin install &lt;a href="svn://svn.globalize-rails.org/globalize/branches/for-1.1"&gt;svn://svn.globalize-rails.org/globalize/branches/for-1.1&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;rake globalize:setup&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;...and you&amp;#8217;re globalized, dude!&lt;/p&gt;

Also, you might want to:
&lt;ul&gt;
&lt;li&gt;Get edge Globalize instead of stable: svn://svn.globalize-rails.org/globalize/trunk&lt;/li&gt;
	&lt;li&gt;Add &lt;code&gt;include Globalize&lt;/code&gt; to your &lt;code&gt;environment.rb&lt;/code&gt; file, so that you won&amp;#8217;t have to type &lt;code&gt;Globalize::Locale.set&lt;/code&gt; all the time. Instead, you can just type &lt;code&gt;Locale.set&lt;/code&gt;.&lt;/li&gt;
	&lt;li&gt;Add Language and Country fixtures if your code references any models provided Globalize. Look in &lt;code&gt;vendor/plugins/globalize/test/fixtures&lt;/code&gt; for a template.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Optionally, try:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;rake globalize:test&lt;/code&gt;&lt;br /&gt;globalize plugin testing has it&amp;#8217;s own database.yml file, so make sure to configure it before running the tests. it&amp;#8217;s found in the directory &lt;code&gt;RAILS_ROOT/vendor/plugins/globalize/test/config&lt;/code&gt;&lt;/li&gt;
	&lt;li&gt;&lt;code&gt;rake doc:plugins&lt;/code&gt;&lt;br /&gt;This creates &lt;code&gt;HTML&lt;/code&gt; documentation in the &lt;code&gt;RAILS_ROOT/doc/plugins/globalize&lt;/code&gt; directory.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Get started&lt;/h2&gt;

&lt;p&gt;There are several walkthrough- or howto-style articles available, each taking a different approach. We don&amp;#8217;t garantuee for the freshness of the presented information though.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.artweb-design.de/articles/2006/11/10/get-on-rails-with-globalize-comprehensive-writeup"&gt;Sven&amp;#8217;s Globalize Writeup&lt;/a&gt; &amp;#8211; has sometimes been refered to as &amp;#8220;the best documentation available for Globalize&amp;#8221; &lt;/li&gt;
	&lt;li&gt;&lt;a href="/pages/example-application"&gt;Example Application&lt;/a&gt; &amp;#8211; takes you step by step through the process of creating a Globalized example application&lt;/li&gt;
	&lt;li&gt;&lt;a href="/pages/unit-tested-example"&gt;Unit-tested Example&lt;/a&gt; &amp;#8211; a walkthrough using a test-driven approach by Josh Harvey&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Also relevant:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.saimonmoore.net/2007/3/17/globalize-internal-storage-mechanism"&gt;The Internal Storage Mechanism For Globalize for Rails Model Translations&lt;/a&gt; &amp;#8211; Saimon&amp;#8217;s comprehensive intro and overview to Globalize&amp;#8217;s alternative model translations storage mechanism&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Find more howtos, tutorials and articles in the &lt;a href="/pages/documentation"&gt;documentation section&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Also, be sure to subscribe to our &lt;a href="/pages/community#mailinglist"&gt;mailing list&lt;/a&gt; and check out our &lt;a href="/pages/documentation"&gt;documentation&lt;/a&gt;&lt;/p&gt;

</content>
    <author>
      <name>Sven</name>
      <email>svenfuchs@artweb-design.de</email>
    </author>
  </entry>
  <entry>
    <id>tag:www.globalize-rails.org,2005:Wikipage/4</id>
    <published>2008-06-25T00:38:57+02:00</published>
    <updated>2008-07-31T20:36:23+02:00</updated>
    <link type="text/html" href="http://www.globalize-rails.org/home/pages/documentation" rel="alternate"/>
    <title>Documentation</title>
    <content type="html">&lt;h2&gt;Frequently Asked Questions&lt;/h2&gt;

&lt;p&gt;You can find our &lt;a href="/pages/frequently-asked-questions"&gt;FAQ here&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;API Docs&lt;/h2&gt;

&lt;p&gt;Our &lt;a href="http://globalize.rubyforge.org/"&gt;API docs are here&lt;/a&gt; (currently not up to date though, sorry)&lt;/p&gt;

&lt;h2&gt;Howtos&lt;/h2&gt;

&lt;p&gt;There are several walkthrough- or howto-style articles available, each taking a different approach. We don&amp;#8217;t guarantee the freshness of the presented information though.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.artweb-design.de/articles/2006/11/10/get-on-rails-with-globalize-comprehensive-writeup"&gt;Sven&amp;#8217;s Globalize Writeup&lt;/a&gt; &amp;#8211; has sometimes been refered to as &amp;#8220;the best documentation available for Globalize&amp;#8221; &lt;/li&gt;
	&lt;li&gt;&lt;a href="/pages/example-application"&gt;Example Application&lt;/a&gt; &amp;#8211; takes you step by step through the process of creating a Globalized example application&lt;/li&gt;
	&lt;li&gt;&lt;a href="/pages/unit-tested-example"&gt;Unit-tested Example&lt;/a&gt; &amp;#8211; a walkthrough using a test-driven approach&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Overviews&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.jvoorhis.com/media/globalizing-rails.pdf"&gt;Jeremy Voorhis&amp;#8217; Canada on Rails slides&lt;/a&gt; &amp;#8211; a presentation&amp;#8217;s slides, cool for a short overview [pdf]&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Recipes&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a&gt;HowTo: recipes&lt;/a&gt; &amp;#8211; some tips, tricks and recipes&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://www.saimonmoore.net/2007/3/17/globalize-internal-storage-mechanism"&gt;The Internal Storage Mechanism For Globalize for Rails Model Translations&lt;/a&gt; &amp;#8211; Saimon&amp;#8217;s comprehensive intro and overview to Globalize&amp;#8217;s alternative model translations storage mechanism&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://www.saimonmoore.net/2007/3/17/tools-for-migrating-to-internal-storage"&gt;Making migrating to Globalize&amp;#8217;s internal storage mechanism easy&lt;/a&gt; &amp;#8211; when you&amp;#8217;re already using the default storage method for model translations: how do you migrate to the alternative mechanism easily?&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://www.saimonmoore.net/2007/3/18/namespaced-view-translations"&gt;Namespaced View Translations&lt;/a&gt; &amp;#8211; Saimon&amp;#8217;s intro to namespacing viewtranslations with Globalize&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Troubleshooting&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="/pages/troubleshooting"&gt;Troubleshooting&lt;/a&gt; &amp;#8211; some things that might go wrong and what to do about them&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Internals&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="/pages/how-globalize-works"&gt;How Globalize works&lt;/a&gt; &amp;#8211; explanation of the database tables (partly dated and incomplete)&lt;/li&gt;
&lt;/ul&gt;
</content>
    <author>
      <name>Sven</name>
      <email>svenfuchs@artweb-design.de</email>
    </author>
  </entry>
  <entry>
    <id>tag:www.globalize-rails.org,2005:Wikipage/5</id>
    <published>2008-06-25T00:39:23+02:00</published>
    <updated>2008-06-25T00:39:23+02:00</updated>
    <link type="text/html" href="http://www.globalize-rails.org/home/pages/community" rel="alternate"/>
    <title>Community</title>
    <content type="html">&lt;h2&gt;Mailinglist&lt;/h2&gt;

&lt;p&gt;Our mailing list is the best place to ask questions and get support, give feedback, point us to problems or generally have some fun ;-)&lt;/p&gt;

&lt;p&gt;To join the mailinglist send a message to &lt;a href="mailto:users-subscribe@list.globalize-rails.org"&gt;users-subscribe@list.globalize-rails.org&lt;/a&gt;. You will get a confirmation message before you join. To unsubscribe, send a message to &lt;a href="mailto:users-unsubscribe@list.globalize-rails.org"&gt;users-unsubscribe@list.globalize-rails.org&lt;/a&gt; from the address you have subscribed with.&lt;/p&gt;

&lt;p&gt;And yes, our mailing list is archived. You can find the archive at &lt;a href="http://www.nabble.com/Globalize-rails.org-f17045.html"&gt;http://www.nabble.com/Globalize-rails.org-f17045.html&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;Issue tracker&lt;/h2&gt;

&lt;p&gt;You can use our &lt;a href="http://bugs.globalize-rails.org/"&gt;issue tracker&lt;/a&gt; to report bugs, check for existing issues, recent developments and browse the Subversion source code repository.&lt;/p&gt;

&lt;h2&gt;Team &amp;#38; Acknowledgements&lt;/h2&gt;

&lt;p&gt;Globalize has intially been build by &lt;a href="http://shnoo.gr"&gt;Josh Harvey&lt;/a&gt; but since the developer team has expanded. You can find out more about the dev core team and Globalize&amp;#8217;s history &lt;a href="/pages/acknowledgements"&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;Who&amp;#8217;s using it?&lt;/h2&gt;

&lt;p&gt;You can find some projects that use Globalize here: &lt;a href="/pages/globalize-powered-sites"&gt;Globalize powered sites&lt;/a&gt;&lt;/p&gt;

</content>
    <author>
      <name>Sven</name>
      <email>svenfuchs@artweb-design.de</email>
    </author>
  </entry>
  <entry>
    <id>tag:www.globalize-rails.org,2005:Wikipage/6</id>
    <published>2008-06-25T00:39:53+02:00</published>
    <updated>2008-06-25T00:39:53+02:00</updated>
    <link type="text/html" href="http://www.globalize-rails.org/home/pages/example-application" rel="alternate"/>
    <title>Example application</title>
    <content type="html">&lt;p&gt;&lt;strong&gt;NOTE&lt;/strong&gt;&lt;br /&gt;If you want the latest &lt;span class="caps"&gt;API&lt;/span&gt; reference for globalize plugin, run &lt;code&gt;rake doc:plugins&lt;/code&gt; to generate rdoc documentation. You can find it later in &lt;code&gt;app/doc/plugins/globalize&lt;/code&gt; directory.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NOTE&lt;/strong&gt;&lt;br /&gt;You need to apply some changes below to &lt;a href="http://wiki.globalize-rails.org/wiki/pages/Examplary+application+Oracle"&gt;make it work with Oracle&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;2. Creating rails application&lt;/h2&gt;

&lt;p&gt;Firstly create a very simple rails app (just one table) to work with.&lt;br /&gt;&lt;pre&gt;&lt;code&gt;rails globalize&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;This should create a skeleton of your application.&lt;/p&gt;

&lt;p&gt;Now you need to create a database to work with, i.e. &amp;#8220;globalize_development&amp;#8221; and configure &lt;code&gt;config/database.yml&lt;/code&gt; file correctly.&lt;/p&gt;

&lt;p&gt;Next create the only model:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;script/generate model Product&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;This will create also a migrate file &lt;code&gt;db/migrate/001_create_products.rb&lt;/code&gt;, which you can use to create &lt;code&gt;products&lt;/code&gt; table.&lt;br /&gt;&lt;pre&gt;&lt;code&gt;
class CreateProducts &amp;lt; ActiveRecord::Migration
  def self.up
    create_table :products do |t|
      t.column :name, :string
      t.column :company, :string
      t.column :description, :text
      t.column :price, :integer, :default =&amp;gt; 0
      t.column :created_on, :date
      t.column :updated_on, :date
    end
  end
  def self.down
    drop_table :products
  end
end
&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Run&lt;br /&gt;&lt;pre&gt;&lt;code&gt;rake migrate&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;and if there were no errors you should have new &lt;code&gt;products&lt;/code&gt; table in your database.&lt;/p&gt;

&lt;p&gt;Now you can add some functionality to your app:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;
script/generate scaffold admin/product
script/generate controller product
&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;The first line will generate the whole admin panel for your &lt;code&gt;products&lt;/code&gt; table and the second one will add a controller, which will be used by &amp;#8220;user&amp;#8221; part of the app.&lt;/p&gt;

&lt;p&gt;Now it&amp;#8217;s time for some cosmetic changes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;remove created_on and updated_on input elements from &lt;code&gt;app/views/admin/products/_form.rhtml&lt;/code&gt; partial &amp;#8211; you don&amp;#8217;t need them as they these fields are updated automatically&lt;/li&gt;
	&lt;li&gt;copy index, list and show actions from &lt;code&gt;app/controllers/admin/products_controller.rb&lt;/code&gt; to &lt;code&gt;app/controllers/product_controller.rb&lt;/code&gt;&lt;/li&gt;
	&lt;li&gt;copy &lt;code&gt;list.rhtml&lt;/code&gt; and &lt;code&gt;show.rhtml&lt;/code&gt; files from &lt;code&gt;app/views/admin/products/&lt;/code&gt; to &lt;code&gt;app/views/product/&lt;/code&gt;&lt;/li&gt;
	&lt;li&gt;remove &lt;code&gt;edit&lt;/code&gt;, &lt;code&gt;destroy&lt;/code&gt; and &lt;code&gt;new&lt;/code&gt; functionality from &lt;code&gt;list.rhtml&lt;/code&gt; and &lt;code&gt;show.rhtml&lt;/code&gt; files you&amp;#8217;ve just copied&lt;/li&gt;
	&lt;li&gt;delete or rename &lt;code&gt;public/index.html&lt;/code&gt;&lt;/li&gt;
	&lt;li&gt;add layouts for admin and user parts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Next add routing rules for user and admin parts. Add these 2 lines to your &lt;code&gt;config/routes.rb&lt;/code&gt; file:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;
# You can have the root of your site routed by hooking up '' 
# -- just remember to delete public/index.html.
map.connect '', :controller =&amp;gt; 'product', :action =&amp;gt; 'index'
map.connect 'admin', :controller =&amp;gt; 'admin/products', :action =&amp;gt; 'index'
&lt;/code&gt;&lt;/pre&gt;&lt;/p&gt;

&lt;p&gt;Now you&amp;#8217;ve got your own basic rails app with full &lt;span class="caps"&gt;CRUD&lt;/span&gt; functionality for admin and read functionality for user.&lt;/p&gt;

&lt;h2&gt;3. Installing globalize plugin&lt;/h2&gt;

&lt;p&gt;To install the plugin just type:&lt;br /&gt;script/plugin install &lt;a href="svn://svn.globalize-rails.org/globalize/branches/for-1.1"&gt;svn://svn.globalize-rails.org/globalize/branches/for-1.1&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now go to &lt;code&gt;vendor/plugins&lt;/code&gt; and rename &lt;code&gt;for-1.1&lt;/code&gt; directory to &lt;code&gt;globalize&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Now run:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;rake globalize:setup&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;and you&amp;#8217;ve just finished installing globalize!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NOTE&lt;/strong&gt;&lt;br /&gt;You can run &lt;code&gt;rake -T&lt;/code&gt; to see all available rake tasks &amp;#8211; including these added by globalize.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;WARNING&lt;/strong&gt;&lt;br /&gt;In current revision (197) there&amp;#8217;s a problem with &lt;code&gt;built_in&lt;/code&gt; column in &lt;code&gt;globalize_translation&lt;/code&gt; table, which causes all translations added by the user to be marked as built in.&lt;br /&gt;I&amp;#8217;m not sure if it&amp;#8217;s just problem with my configuration, but to check if you also have this problem, type this in the console:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;
include Globalize
Locale.set "en-US" 
Locale.set_translation("foo", "bar")
ViewTranslation.find(:first, :conditions =&amp;gt; "tr_key = 'foo'").built_in?
&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;If you get false, then your translation is not being set as built-in and everything is ok. &lt;br /&gt;If not, close the console and open the file &lt;code&gt;vendor/plugins/globalize/tasks/data.rake&lt;/code&gt; and change line #63:&lt;br /&gt;&lt;code&gt;t.column :built_in, :boolean, :default =&amp;gt; true&lt;/code&gt;&lt;br /&gt;to&lt;br /&gt;&lt;code&gt;t.column :built_in, :boolean#, :default =&amp;gt; true&lt;/code&gt;&lt;br /&gt;Now run&lt;br /&gt;&lt;pre&gt;&lt;code&gt;
rake globalize:teardown
rake globalize:setup
&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Open the console and set all fields in globalize_translation table as built_in&lt;br /&gt;&lt;pre&gt;&lt;code&gt;
include Globalize
ViewTranslation.update_all "built_in = true" 
&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Now it should work correctly: all translations that already exist in the table should be marked as built-in and all new translations added by you won&amp;#8217;t be anymore.&lt;br /&gt;Note that due to the unorthodox way Globalize handles the database (without migrations), this change won&amp;#8217;t be reflected in &lt;code&gt;schema.rb&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;4. Making your application globalized&lt;/h2&gt;

&lt;h3&gt;4.1 Configuration&lt;/h3&gt;

&lt;p&gt;First you need to set the base language. Add these lines to &lt;code&gt;config/environment.rb&lt;/code&gt; file:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;
# Include your application configuration below
include Globalize
Locale.set_base_language 'en-US'
LOCALES = {'pl' =&amp;gt; 'pl-PL',
           'en' =&amp;gt; 'en-US',
           'es' =&amp;gt; 'es-ES',
           'fr' =&amp;gt; 'fr-FR'}.freeze
&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Of course you can select any language as your base language. In &lt;span class="caps"&gt;LOCALES&lt;/span&gt; hash we will store all available locales for this app. Remember to restart the server after you made changes in &lt;code&gt;environment.rb&lt;/code&gt; file.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NOTE&lt;/strong&gt;&lt;br /&gt;It&amp;#8217;s important to never change the base language once you&amp;#8217;ve started populating the database.&lt;/p&gt;

&lt;p&gt;You can pass the information about the language, which should be displayed, in the session variable or in the url. Here just the second method is presented, as it allows you i.e. to bookmark the page in selected language etc.&lt;/p&gt;

&lt;p&gt;Now you need to modify your &lt;code&gt;config/routes.rb&lt;/code&gt; file a bit. Add this line before the lines you added before:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;
map.connect ':locale/:controller/:action/:id'
&lt;/code&gt;&lt;/pre&gt;&lt;/p&gt;

&lt;p&gt;You also need to set the current language somewhere. Edit your &lt;code&gt;app/controllers/application.rb&lt;/code&gt; file:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;
class ApplicationController &amp;lt; ActionController::Base
  before_filter :set_locale
  def set_locale
    if !params[:locale].nil? &amp;#38;&amp;#38; LOCALES.keys.include?(params[:locale])
      Locale.set LOCALES[params[:locale]]
    else
      redirect_to params.merge( 'locale' =&amp;gt; Locale.base_language.code )
    end
  end
end
&lt;/code&gt;&lt;/pre&gt;&lt;/p&gt;

&lt;p&gt;Try to display your main page again &amp;#8211; you should see &amp;#8220;en&amp;#8221; in the url before the controller name.&lt;/p&gt;

&lt;p&gt;Now just add possibility to switch between languages and move to the next chapter.&lt;/p&gt;

&lt;p&gt;To switch between languages you can use i.e. following link:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;
&amp;lt;%= link_to "pl", {:controller =&amp;gt; controller.controller_name, :action =&amp;gt; controller.action_name, :locale =&amp;gt; 'pl', :id =&amp;gt; params[:id]} %&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;This will display current page in selected language, but it will only work with the default route.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NOTE&lt;/strong&gt;&lt;br /&gt;You could iterate through &lt;span class="caps"&gt;LOCALE&lt;/span&gt; hash to create a link for every supported language or create select input field.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NOTE by &lt;a href="http://www.marc-andre.ca"&gt;Marc-Andr&#233; Lafortune&lt;/a&gt; &lt;/strong&gt;&lt;br /&gt;I prefer to use the preferences set in the user&amp;#8217;s client to determine the default locale. The user can then decide to override it by clicking on a button you provide, in which case I want to store that in a cookie so that preference is remembered forever. Here&amp;#8217;s my filter:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;
# Will set the cookie 'locale' if (and only if) an explicit parameter 'locale'
# is passed (and is acceptable)
# If no cookie exists, we look through the list of desired languages for the
# first one we can accept.
#  
  def set_locale
    accept_locales = LOCALES.keys # change this line as needed, must be an array of strings
    cookies[:locale] = params[:locale] if accept_locales.include?(params[:locale])
    Locale.set(cookies[:locale] || (request.env["HTTP_ACCEPT_LANGUAGE"] || "").scan(/[^,;]+/).find{|l| accept_locales.include?(l)})
  end
&lt;/code&gt;&lt;/pre&gt;&lt;/p&gt;

&lt;h3&gt;4.2 Translating static content.&lt;/h3&gt;

&lt;p&gt;First you need to generate translate controller.&lt;br /&gt;&lt;pre&gt;&lt;code&gt;
script/generate controller admin/translate
&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Now edit your new controller:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;
class Admin::TranslateController &amp;lt; ApplicationController
  def index    
    @view_translations = ViewTranslation.find(:all, :conditions =&amp;gt; [ 'built_in IS NULL AND language_id = ?', Locale.language.id ], :order =&amp;gt; 'text')
  end
  def translation_text
    @translation = ViewTranslation.find(params[:id])
    render :text =&amp;gt; @translation.text || ""  
  end
  def set_translation_text
    @translation = ViewTranslation.find(params[:id])
    previous = @translation.text
    @translation.text = params[:value]
    @translation.text = previous unless @translation.save
    render :partial =&amp;gt; "translation_text", :object =&amp;gt; @translation.text  
  end
end
&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Let&amp;#8217;s focus on the index action. We fetch all non-built-in translations for current locale and order them by &lt;code&gt;text&lt;/code&gt; column. This will put all untranslated fields at the beginning of &lt;code&gt;@view_translation&lt;/code&gt; array.&lt;br /&gt;You can change the conditions i.e.:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;
  def index
    @view_translations = ViewTranslation.find(:all, 
      :conditions =&amp;gt; [ 'text IS NULL AND language_id = ?', Locale.language.id ], :order =&amp;gt; 'tr_key')
  end
&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;This way you&amp;#8217;ll get untranslated fields only.&lt;br /&gt;Remember to set &lt;code&gt;admin&lt;/code&gt; layout for this controller.&lt;/p&gt;

&lt;p&gt;Now create &lt;code&gt;app/views/admin/translate/_translation_text.rhtml&lt;/code&gt; partial, which is used in &lt;code&gt;translation_text&lt;/code&gt; action.&lt;br /&gt;&lt;pre&gt;&lt;code&gt;
&amp;lt;%= translation_text || '[no translation]' %&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;To translate the static content you can use in_place_editor helper, which is built-in in Rails 1.1. Just remember to add &lt;br /&gt;&lt;pre&gt;&lt;code&gt;
&amp;lt;%= javascript_include_tag :defaults %&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;in the layout file for the admin part (e.g. create an application-wide &lt;code&gt;app/views/layouts/application.rhtml&lt;/code&gt; layout &amp;#8211; you can copy most of the generated &lt;code&gt;products.rhtml&lt;/code&gt; layout there, just change the title and add the javascript tag).&lt;/p&gt;

&lt;p&gt;Next create &lt;code&gt;app/views/admin/translate/_translation_form.rhtml&lt;/code&gt; partial for the form, which will be used to provide translations.&lt;br /&gt;&lt;pre&gt;&lt;code&gt;
&amp;lt;!--[form:translate]--&amp;gt;
&amp;lt;p&amp;gt;
&amp;lt;label for="tr_&amp;lt;%= tr.id %&amp;gt;"&amp;gt;&amp;lt;%=tr.tr_key%&amp;gt;&amp;lt;/label&amp;gt;
&amp;lt;br /&amp;gt;
&amp;lt;span id="tr_&amp;lt;%= tr.id %&amp;gt;"&amp;gt;
&amp;lt;%= render :partial =&amp;gt; 'translation_text', :object =&amp;gt; tr.text %&amp;gt;
&amp;lt;/span&amp;gt;
&amp;lt;%= in_place_editor "tr_#{tr.id}", 
    :url =&amp;gt; { :action =&amp;gt; :set_translation_text, :id =&amp;gt; tr.id },
    :load_text_url =&amp;gt; url_for({ :action =&amp;gt; :translation_text, :id =&amp;gt; tr.id })%&amp;gt;
&amp;lt;/p&amp;gt;
&amp;lt;!--[eoform:translate]--&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NOTE&lt;/strong&gt;&lt;br /&gt;If you want more information about in_place_editor helper look &lt;a href="http://api.rubyonrails.com/classes/ActionView/Helpers/JavaScriptMacrosHelper.html#M000461"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;In the next step we will use 2 useful helpers. Add the following code to &lt;code&gt;app/helpers/application_helper.rb&lt;/code&gt; file:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;
  def base_language_only
    yield if Locale.base?
  end
  def not_base_language
    yield unless Locale.base?
  end
&lt;/code&gt;&lt;/pre&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NOTE&lt;/strong&gt;&lt;br /&gt;These helpers come from Jeremy Voorhis&#8217; Canada on Rails slides, which you can find &lt;a href="http://www.jvoorhis.com/media/globalizing-rails.pdf"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Still in &lt;code&gt;app/views/admin/translate&lt;/code&gt;, create &lt;code&gt;index.rhtml&lt;/code&gt; and edit it:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;
&amp;lt;% base_language_only do -%&amp;gt;
&amp;lt;div id="language"&amp;gt;&amp;lt;h1&amp;gt;Please choose language for translation&amp;lt;/h1&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;% end -%&amp;gt;
&amp;lt;% not_base_language do -%&amp;gt;
&amp;lt;div id="language"&amp;gt;&amp;lt;h1&amp;gt;&amp;lt;%= "Language: " + Locale.language.native_name %&amp;gt;&amp;lt;/h1&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;div&amp;gt;
&amp;lt;% @view_translations.each do |tr| -%&amp;gt;
  &amp;lt;%= render :partial =&amp;gt; 'translation_form', :locals =&amp;gt; {:tr =&amp;gt; tr}%&amp;gt;
&amp;lt;% end -%&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;% end  -%&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/p&gt;

&lt;p&gt;We don&amp;#8217;t want to translate english strings to english again, so the translation forms will only be displayed if current language is different than the base one.&lt;/p&gt;

&lt;p&gt;Add a new product if you haven&amp;#8217;t done this already &amp;#8211; go to &lt;code&gt;localhost:3000/admin/&lt;/code&gt;, press &amp;#8216;New product&amp;#8217; and fill out the form.&lt;/p&gt;

&lt;p&gt;Open &lt;code&gt;app/views/product/list.rhtml&lt;/code&gt; and &lt;code&gt;show.rhtml&lt;/code&gt; and add &lt;code&gt;.t&lt;/code&gt; method to all strings you want to translate i.e. change &lt;code&gt;'Show'&lt;/code&gt; to &lt;code&gt;'Show'.t&lt;/code&gt; etc. This way you&amp;#8217;ll get translated user part of the application.&lt;/p&gt;

&lt;p&gt;To add these strings to the database they must be displayed first, so go to &lt;code&gt;localhost:3000/pl/product&lt;/code&gt;. Next go to &lt;code&gt;localhost:3000/pl/admin/translate&lt;/code&gt;. You should see the list of strings to which you&amp;#8217;ve added &lt;code&gt;.t&lt;/code&gt; method. Translate them and go to &lt;code&gt;localhost:3000/pl/product&lt;/code&gt; again.&lt;/p&gt;

&lt;strong&gt;NOTE&lt;/strong&gt;&lt;br /&gt;If you don&amp;#8217;t get any strings on &lt;code&gt;localhost:3000/pl/admin/translate&lt;/code&gt; page to translate, make sure that:
&lt;ul&gt;
&lt;li&gt;you&amp;#8217;re not displaying that page with the base locale&lt;/li&gt;
	&lt;li&gt;you added &lt;code&gt;.t&lt;/code&gt; method to the strings&lt;/li&gt;
	&lt;li&gt;you displayed pages, to which you added &lt;code&gt;.t&lt;/code&gt; method&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;NOTE&lt;/strong&gt;&lt;br /&gt;Here&amp;#8217;s useful thread showing how to add untranslated strings automatically: &lt;a href="http://rubyforge.org/pipermail/railsi18n-discussion/2006-August/000124.html"&gt;http://rubyforge.org/pipermail/railsi18n-discussion/2006-August/000124.html&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;4.3 Translating model data.&lt;/h3&gt;

&lt;p&gt;First you need to decide which fields you want to translate. In our Product model we&amp;#8217;ll translate &lt;code&gt;name&lt;/code&gt; and &lt;code&gt;description&lt;/code&gt; fields.&lt;/p&gt;

&lt;p&gt;Add this line to &lt;code&gt;app/models/product.rb&lt;/code&gt;:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;
translates :name, :description
&lt;/code&gt;&lt;/pre&gt;&lt;/p&gt;

&lt;p&gt;We will allow adding new products only for the base language. Modify &lt;code&gt;app/views/admin/products/list.rhtml&lt;/code&gt; file:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;
&amp;lt;% base_language_only do -%&amp;gt;
&amp;lt;%= link_to 'New product', :action =&amp;gt; 'new' %&amp;gt;
&amp;lt;% end -%&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/p&gt;

&lt;p&gt;In the same directory create new file &lt;code&gt;_translation_form.rhtml&lt;/code&gt;. Copy contents of &lt;code&gt;_form.rhtml&lt;/code&gt; partial to this new file, but remove company and price input fields as they won&amp;#8217;t be translated. As you may have already figured out this form will be used to provide translations for the Product model.&lt;/p&gt;

&lt;p&gt;Now create another file &lt;code&gt;_translation_data.rhtml&lt;/code&gt; and put the following code inside:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;
&amp;lt;div&amp;gt;
  &amp;lt;b&amp;gt;Name:&amp;lt;/b&amp;gt; &amp;lt;%=h @product.name %&amp;gt;
  &amp;lt;b&amp;gt;Description:&amp;lt;/b&amp;gt; &amp;lt;%=h @product.description %&amp;gt;
&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;This file will be used as the reference and will show data in the base language.&lt;/p&gt;

&lt;p&gt;Now it&amp;#8217;s time to modify &lt;code&gt;edit.rhtml&lt;/code&gt; file.&lt;br /&gt;&lt;pre&gt;&lt;code&gt;
&amp;lt;h1&amp;gt;Editing product&amp;lt;/h1&amp;gt;
&amp;lt;% base_language_only do -%&amp;gt;
  &amp;lt;%= start_form_tag :action =&amp;gt; 'update', :id =&amp;gt; @product %&amp;gt;
    &amp;lt;%= render :partial =&amp;gt; 'form' %&amp;gt;
    &amp;lt;%= submit_tag 'Edit' %&amp;gt;
  &amp;lt;%= end_form_tag %&amp;gt;
&amp;lt;% end -%&amp;gt;
&amp;lt;% not_base_language do -%&amp;gt;
&amp;lt;div style="float:left;"&amp;gt;
  &amp;lt;h2&amp;gt;&amp;lt;%= Locale.language.native_name%&amp;gt;&amp;lt;/h2&amp;gt;
  &amp;lt;%= start_form_tag( {:action =&amp;gt; 'update', :id =&amp;gt; @product} ) %&amp;gt;
    &amp;lt;%= render :partial =&amp;gt; 'translation_form' %&amp;gt;
    &amp;lt;%= submit_tag 'save translation' %&amp;gt;
  &amp;lt;%= end_form_tag %&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div style="float:right;"&amp;gt;
  &amp;lt;% @product.switch_language(Locale.base_language.code) do -%&amp;gt;
    &amp;lt;h2&amp;gt;&amp;lt;%= Locale.base_language.native_name%&amp;gt;&amp;lt;/h2&amp;gt;
    &amp;lt;%= render :partial =&amp;gt; 'translation_data' %&amp;gt;
  &amp;lt;% end -%&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;% end -%&amp;gt;
&amp;lt;%= link_to 'Show', :action =&amp;gt; 'show', :id =&amp;gt; @product %&amp;gt; | 
&amp;lt;%= link_to 'Back', :action =&amp;gt; 'list' %&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Navigate to &lt;code&gt;localhost:3000/pl/admin/products&lt;/code&gt;, find the product you added, and click on Edit.&lt;br /&gt;If the current language is the base one, the full version of the edit form is displayed. If not, the translation form is displayed on the left and the original data on the right, as the reference for the translator.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NOTE&lt;/strong&gt;&lt;br /&gt;&lt;code&gt;.switch_language&lt;/code&gt; method used in this code is provided by &lt;code&gt;globalize_extension&lt;/code&gt; plugin written by Olivier Amblet from Liquid Concept, which can be found &lt;a href="http://opensvn.liquid-concept.com/trac/globalize_extension"&gt;here&lt;/a&gt;. It provides many other useful extensions for globalize plugin. Just install it into your &lt;code&gt;vendor/plugins&lt;/code&gt; directory&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NOTE&lt;/strong&gt;&lt;br /&gt;If you&amp;#8217;re going to translate many models it would probably be good idea to put the code above into a partial and just pass an object to translate:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;
render :partial "translation_page", :locals =&amp;gt; {:object =&amp;gt; @product}
&lt;/code&gt;&lt;/pre&gt;&lt;/p&gt;

&lt;p&gt;To inform user that the text hasn&amp;#8217;t been yet translated you can use the following helper (also from Jeremy Voorhis&#8217; slides mentioned above):&lt;br /&gt;&lt;pre&gt;&lt;code&gt;
  def translation_availability_for object_name, facet, message = nil
    not_base_language do
      message ||= content_tag 'p', '(Translation not available)'.t
      object = instance_variable_get "@#{object_name}" 
      message if object &amp;#38;&amp;#38; !object.send( facet ).blank? &amp;#38;&amp;#38;
      object.send( "#{facet}_is_base?" )
    end
  end
&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Here&amp;#8217;s the example of its usage:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;
&amp;lt;%= translation_availability_for :product, :description %&amp;gt;
&amp;lt;%=h @product.description %&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/p&gt;

&lt;h3&gt;4.4 Translating dates&lt;/h3&gt;

&lt;p&gt;To translate dates you can use &lt;code&gt;localize&lt;/code&gt; method or its shorter form &lt;code&gt;loc&lt;/code&gt;. It takes format string as the paramater, exactly the same as &lt;code&gt;strftime&lt;/code&gt; method.&lt;br /&gt;I.e.&lt;br /&gt;&lt;pre&gt;&lt;code&gt;
Product.find(:first).created_on.loc("%A %d-%B-%Y")
&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;should give &amp;#8220;Wednesday 14-June-2006&amp;#8221; for English language and &amp;#8220;&#346;roda 14-Czerwiec-2006&amp;#8221; for Polish.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;countries&lt;/code&gt; table has field &lt;code&gt;date_format&lt;/code&gt;, which you can use to specify custom format for different languages. Example for Polish language:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;
country = Country.find(:first, :conditions =&amp;gt; "code = 'PL'")
country.update_attribute(:date_format, "%d/%m/%y")
&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Globalize uses cache to minimize database usage, so sometimes you need to clear it to make changes visible:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;
Locale.clear_cache
Locale.set "pl-PL" 
Locale.country.date_format
&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Now you can just use&lt;br /&gt;&lt;pre&gt;&lt;code&gt;
product.created_on.loc(Locale.country.date_format)
&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;and you&amp;#8217;ll get different date format for every language.&lt;/p&gt;

&lt;p&gt;In a template use for example:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;
@product.send(column.name).localize("%d %B %Y") if column.name.to_s == 'created_on' 
&lt;/pre&gt;&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;4.5 Translating error messages&lt;/h3&gt;

&lt;p&gt;Globalize provides modified version of &lt;code&gt;error_messages_for&lt;/code&gt; helper. Unfortunatelly it doesn&amp;#8217;t have translated error messages in the database yet. But you can easily add them by yourself. Here&amp;#8217;s how to do it.&lt;/p&gt;

&lt;p&gt;&amp;#8212;-&lt;br /&gt;&lt;em&gt;I couldn&amp;#8217;t find any way to do it on this page, so I came up with my own solution, using the rails console script. Fairly simple:&lt;/em&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;
Locale.set 'pl-PL' # you might want to iterate throught LOCALES.each_value here
ActiveRecord::Errors.default_error_messages.each_value do |error_msg|
  error_msg.translate
end
&lt;/code&gt;&lt;/pre&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Benol&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;and if your base language isn&amp;#8217;t English?&lt;br /&gt;&amp;#8212;-&lt;/p&gt;

&lt;h3&gt;4.6 Translating currency&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;WARNING&lt;/strong&gt;&lt;br /&gt;Current implementation of Currency class has some bugs. They should be fixed in the next revision.&lt;/p&gt;

Globalize provides specialized class to represent money in ActiveRecord models &amp;#8211; Globalize::Currency.&lt;br /&gt;To use it you need to modify &lt;code&gt;app/models/product.rb&lt;/code&gt; file. Add the following line:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;
composed_of :price, :class_name =&amp;gt; "Globalize::Currency", :mapping =&amp;gt; [ %w(price cents) ]
&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Now &lt;code&gt;product.price&lt;/code&gt; will return Globalize:Currency object. To display the actual value you&amp;#8217;ve got 2 possibilities:
&lt;ul&gt;
&lt;li&gt;.to_s method&lt;/li&gt;
	&lt;li&gt;.format method, which can take optional parameters: if :code =&gt; true is specified, format using international 3-letter currency code; if :country is specified as well, use that country&#8217;s currency code for formatting&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Text by: &lt;a href="http://www.globalize-rails.org/wiki/pages/szymek"&gt;szymek&lt;/a&gt; (83.15.148.82)&lt;/p&gt;

</content>
    <author>
      <name>Sven</name>
      <email>svenfuchs@artweb-design.de</email>
    </author>
  </entry>
  <entry>
    <id>tag:www.globalize-rails.org,2005:Wikipage/7</id>
    <published>2008-06-25T00:40:35+02:00</published>
    <updated>2008-06-25T00:40:35+02:00</updated>
    <link type="text/html" href="http://www.globalize-rails.org/home/pages/unit-tested-example" rel="alternate"/>
    <title>Unit tested example</title>
    <content type="html">&lt;p&gt;Here&amp;#8217;s a Unit Test (you do know &lt;a href="http://manuals.rubyonrails.com/read/book/5"&gt;how to test your Rails app&lt;/a&gt;, right?) which shows a way to work with the Globalize plugin. Far easier than playing around in the &lt;a href="http://wiki.rubyonrails.com/rails/pages/Console"&gt;console&lt;/a&gt; to see if you can get it to work.&lt;/p&gt;

&lt;h2&gt;Ensure compatability&lt;/h2&gt;

&lt;p&gt;Globalize uses its own models &amp;#8211; e.g. Language, Country and Translation. If you have models or database tables with these names, they might conflict with testing later on. Better now create a migration to rename these tables and then rename the models, and you&amp;#8217;ll be fine.&lt;/p&gt;

&lt;h2&gt;Install Globalize&lt;/h2&gt;

&lt;p&gt;In your &lt;span class="caps"&gt;RAILS&lt;/span&gt;_ROOT, execute the following to install the Globalize plugin.&lt;/p&gt;

&lt;p&gt;script/plugin install http://svn.globalize-rails.org/svn/globalize/globalize/trunk&lt;/p&gt;

&lt;h2&gt;Create the model&lt;/h2&gt;

&lt;p&gt;The test assumes the presence of a model called Newsitem. So go ahead and generate the model and modify it like so:&lt;/p&gt;

&lt;code&gt;&lt;pre&gt;
class Newsitem &amp;lt; ActiveRecord::Base
  translates    :title, :excerpt, :body
end
&lt;/pre&gt;&lt;/code&gt;
&lt;p&gt;See the Globalize &lt;span class="caps"&gt;API&lt;/span&gt; docs for &lt;a href="http://globalize-docs.diluvia.net/classes/Globalize/DbTranslate/ClassMethods.html#M000008"&gt;translates&lt;/a&gt;. Basically, it means Globalize will give the specified columns special treatment.&lt;/p&gt;

&lt;h2&gt;Create the table&lt;/h2&gt;

&lt;p&gt;The following &lt;a href="http://rails.rubyonrails.com/classes/ActiveRecord/Migration.html"&gt;migration&lt;/a&gt; might help you create the table:&lt;/p&gt;

&lt;code&gt;&lt;pre&gt;
class AddNewsTable &amp;lt; ActiveRecord::Migration
  def self.up
    create_table :newsitems do |t|
      t.column :title, :string
      t.column :excerpt, :string
      t.column :body, :text
      t.column :lock_version, :integer, :default =&amp;gt; 0
      t.column :user_id, :integer
      t.column :updated_at, :datetime
      t.column :created_at, :datetime
    end
  end
  def self.down
    drop_table :newsitems
  end
end
&lt;/pre&gt;&lt;/code&gt;
&lt;p&gt;You&amp;#8217;re ready to migrate the table into your database by running &lt;code&gt;rake migrate&lt;/code&gt;. Of course, not all columns are needed for this example, but it might be an incentive to find the meaning of &lt;a href="http://rails.rubyonrails.com/classes/ActiveRecord/Locking.html"&gt;one&lt;/a&gt; or &lt;a href="http://rails.rubyonrails.com/classes/ActiveRecord/Timestamp.html"&gt;two&lt;/a&gt; things in the Rails &lt;span class="caps"&gt;API&lt;/span&gt;.&lt;/p&gt;

&lt;h2&gt;Globalize it&lt;/h2&gt;

&lt;code&gt;&lt;pre&gt;
script/generate globalize tiny
rake migrate
&lt;/pre&gt;&lt;/code&gt;
&lt;p&gt;This &lt;em&gt;will&lt;/em&gt; take a while. You have been warned.&lt;/p&gt;

&lt;h2&gt;Setup the test fixtures&lt;/h2&gt;

&lt;p&gt;You need to tell globalize which languages/countries it should know about. The previous migration made sure to fill up the globalize tables with a large number of preconfigured languages and countries all ready for you to use in your development database.&lt;/p&gt;

&lt;p&gt;However as we are using the test database, you&amp;#8217;ll need to create fixtures for the globalize tables. You can either create them from scratch (Have a look at the globalize tables in your dev tables) or copy over the fixtures used in globalize&amp;#8217;s own test which are located in the test directory&lt;br /&gt;&lt;pre&gt;&lt;code&gt;
vendor/plugins/globalize/test/fixtures/globalize_languages.yml
#You only really need the languages fixtures but chances are
#you'll want to copy over these two as well for more tests
vendor/plugins/globalize/test/fixtures/globalize_countries.yml
vendor/plugins/globalize/test/fixtures/globalize_translations.yml
&lt;/pre&gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The globalize test fixtures do not include dutch so you&amp;#8217;ll have to add it in for the newsitem_test (or you could just modify the test to use any of the languages in the fixtures):&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;
#globalize_languages.yml
...
dutch:
  id: 7
  iso_639_1: nl
  iso_639_2: nld
  english_name: Dutch
  native_name: Nederlands
  scope: L
  macro_language: false
  pluralization: 'c == 1 ? 1 : 2'
#globalize_countries.yml
...
holland:
  id: 6
  code: NL
  english_name: Netherlands
  currency_format: '&#8364; %n'
  currency_code: EUR
  thousands_sep: '.'
  decimal_sep: ','
  currency_decimal_sep: '.'
&lt;/pre&gt;&lt;/code&gt;
&lt;h2&gt;The Unit Test&lt;/h2&gt;

&lt;p&gt;First of all, this is not a real unit test. It&amp;#8217;s just an easy way to show you how to work with Globalize.&lt;/p&gt;

&lt;p&gt;When you generated your model, the rails command was smart enough to create a test for it. You can find the test in &lt;span class="caps"&gt;RAILS&lt;/span&gt;_ROOT/test/unit/newsitem_test.rb. Just copy the paste below and replace the content of the original file with it.&lt;/p&gt;

&lt;code&gt;&lt;pre&gt;
require File.dirname(__FILE__) + '/../test_helper'
class NewsitemTest &amp;lt; Test::Unit::TestCase
  def test_add_content_translations
    Newsitem.delete_all
    Globalize::Locale.set_base_language('en-US')
    # create a row in the base language
    Globalize::Locale.set('en-US')
    assert_nothing_raised() do
      assert_kind_of Newsitem, Newsitem.create!(:title =&amp;gt; 'US Title',
                                                :excerpt =&amp;gt; 'US excerpt',
                                                :body =&amp;gt; 'US body copy')
    end
    assert_equal 1, Newsitem.find(:all).size
    # retrieve row
    newsitem = Newsitem.find(:first)
    assert_kind_of Newsitem, newsitem
    assert_equal 'US Title', newsitem.title
    # create a translation by switching the locale and updating attributes
    Globalize::Locale.set('nl-NL')
    # newsitem.title = 'NL Titel'
    # newsitem.excerpt = 'NL samenvatting.'
    # newsitem.body = 'NL Broodtekst.'
    # assert_nothing_raised() {newsitem.save!}
    # either use the commented out code above or the line below
    # You cannot fetch a row in one language and save it in another.
    # So just switch language, fetch again, and then update_attributes
    newsitem = Newsitem.find(:first)
    newsitem.update_attributes(:title =&amp;gt; 'NL Titel',
                                :excerpt =&amp;gt; 'NL samenvatting.',
                                :body =&amp;gt; 'NL broodtekst')
    # check if the translated row has been saved
    assert_equal 'NL Titel', newsitem.title
    # check if the base language row still exists
    Globalize::Locale.set('en-US')
    # now see if the example from the wiki gives the expected result
    newsitem = Newsitem.find(:first)
    assert_equal 'US Title', newsitem.title
    Globalize::Locale.set('nl-NL')
    newsitem = Newsitem.find(newsitem.id)
    assert_equal 'NL Titel', newsitem.title
  end
  def test_add_string_translations
    Globalize::Locale.set_base_language('en-US')
    Globalize::Locale.set('en-US')
    language = Globalize::Language.pick 'nl-NL'
    Globalize::Locale.set_translation(
      "This is written in English",
      language,
      "Dit is geschreven in het Nederlands" 
    )
    assert_equal 'This is written in English', "This is written in English".t
    Globalize::Locale.set('nl-NL')
    assert_equal 'Dit is geschreven in het Nederlands', "This is written in English".t
  end
end
&lt;/pre&gt;&lt;/code&gt;
&lt;h2&gt;Run the test&lt;/h2&gt;

&lt;p&gt;From your &lt;span class="caps"&gt;RAILS&lt;/span&gt;_ROOT, run the test. The expected result should be something like shown below.&lt;/p&gt;

&lt;code&gt;&lt;pre&gt;
aluminum:~/dev/projects/my_app/trunk charles$ ruby test/unit/newsitem_test.rb 
Loaded suite test/unit/newsitem_test
Started
..
Finished in 1.986655 seconds.
2 tests, 10 assertions, 0 failures, 0 errors
aluminum:~/dev/projects/my_app/trunk charles$
&lt;/pre&gt;&lt;/code&gt;
&lt;h2&gt;Help!&lt;/h2&gt;

&lt;p&gt;If you have more questions, you can find us in #globalize on Freenode or on the Rails mailing list. Make sure the first word of your subject line is Globalize, so your message is easier to spot.&lt;/p&gt;

</content>
    <author>
      <name>Sven</name>
      <email>svenfuchs@artweb-design.de</email>
    </author>
  </entry>
  <entry>
    <id>tag:www.globalize-rails.org,2005:Wikipage/8</id>
    <published>2008-06-25T00:40:56+02:00</published>
    <updated>2008-06-25T00:40:56+02:00</updated>
    <link type="text/html" href="http://www.globalize-rails.org/home/pages/frequently-asked-questions" rel="alternate"/>
    <title>Frequently asked questions</title>
    <content type="html">&lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; The best way to get help now is on the &lt;a href="/pages/community#mailingList" class="existingWikiWord"&gt;MailingList&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q&lt;/strong&gt;: Do methods like &lt;code&gt;truncate&lt;/code&gt; still work on translated/unicode strings?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A&lt;/strong&gt;: Good question, I haven&amp;#8217;t looked into this much, but it&amp;#8217;s more of a Ruby thing. Ruby doesn&amp;#8217;t seem to handle &lt;code&gt;String#length&lt;/code&gt; correctly for unicode strings, although I believe there are libraries that correct this. Better Unicode support is also planned for future Ruby releases. &amp;#8212;JH&lt;/p&gt;

&lt;p&gt;Meanwhile &lt;code&gt;Globalize&lt;/code&gt; code doesn&amp;#8217;t care that &lt;code&gt;String.length&lt;/code&gt; returns size of string in bytes.&lt;br /&gt;E.g. there is no support for multibyte &lt;code&gt;UTF8&lt;/code&gt; chars in methods &lt;code&gt;globalize/rails/active_record.rb&lt;/code&gt;:&lt;br /&gt;&lt;code&gt;ActiveRecord::Errors#add_on_boundary_breaking&lt;/code&gt;,&lt;br /&gt;&lt;code&gt;ActiveRecord::Validations#validates_length_of&lt;/code&gt;,&lt;br /&gt;or &lt;code&gt;globalize/models/language.rb&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Globalize::Language#after_initialize:&lt;/code&gt;&lt;br /&gt;&lt;pre&gt;
&lt;code&gt;
   if !pluralization.nil? &amp;#38;&amp;#38; pluralization.size &amp;gt; 200
      raise SecurityError, "Pluralization field for #{self.english_name} language " + "contains potentially harmful code. " + "Must be less than 200 characters in length. Was #{pluralization.size} characters." 
   end
&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/p&gt;

&lt;p&gt;Be honest, say &lt;code&gt;validates_bytes_length_of&lt;/code&gt;, &amp;#8220;must be less then 200 &lt;strong&gt;bytes&lt;/strong&gt;&amp;#8221; or address this issue.&lt;/p&gt;

&lt;hr /&gt;
&lt;p&gt;&lt;strong&gt;Q&lt;/strong&gt;: The installation looks too easy. In fact, I tried it out.&lt;/p&gt;

&lt;p&gt;I see this:&lt;br /&gt;&lt;pre&gt;
242:~/CD/railsdemos oracle$ rails globize  
...
242:~/CD/railsdemos oracle$ cd globize
242:~/CD/railsdemos/globize oracle$  script/plugin install svn://www.diluvia.net/rails-plugins/globalize/trunk
/opt/local/lib/ruby/1.8/open-uri.rb:87:in `initialize': No such file or directory - svn://www.diluvia.net/rails-plugins/globalize/trunk (Errno::ENOENT)
    from /opt/local/lib/ruby/1.8/open-uri.rb:87:in `open_uri_original_open'
...
    from     from script/plugin:3
&lt;/pre&gt;&lt;/p&gt;

&lt;p&gt;What am I doing wrong?&lt;/p&gt;

&lt;p&gt;-Dan&lt;br /&gt;&lt;a href="mailto:Dan.Bikle@gmail.com"&gt;Dan.Bikle@gmail.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A&lt;/strong&gt;: Dan, do you have &lt;code&gt;subversion&lt;/code&gt; installed? Is it in your path? Also, which version of Ruby are you running?&lt;/p&gt;

&lt;hr /&gt;
&lt;p&gt;&lt;strong&gt;Q&lt;/strong&gt;: I&amp;#8217;ve also go a weird error, when using &lt;code&gt;PostGreSQL 8.0&lt;/code&gt;. Everything works fine on my &lt;code&gt;debian&lt;/code&gt; server (live box), but on my &lt;code&gt;Ubuntu&lt;/code&gt; box (devel box) things are a little screwy.&lt;/p&gt;

&lt;p&gt;Everytime I try to &lt;code&gt;rake migrate&lt;/code&gt; I get the following error:&lt;/p&gt;

&lt;pre&gt;
 RuntimeError: ERROR     C55000  Mcurrval of sequence "globalize_countries_id_seq" is not yet defined in this session    Fsequence.c        L598    Rcurrval: SELECT currval('public.globalize_countries_id_seq')
&lt;/pre&gt;
&lt;p&gt;Anyone have any idea what I&amp;#8217;m doing wrong ?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A&lt;/strong&gt;: Which versions of Rails, Globalize and Postgresql do you have?&amp;#8212;JH&lt;/p&gt;

&lt;hr /&gt;
&lt;p&gt;I got the data to load by modifying the migration to ignore the row id. Here is a patch:&lt;br /&gt;&lt;pre&gt;
--- 002_globalize_migration.rb.orig     2005-12-30 17:38:33.000000000 +0800
+++ 002_globalize_migration.rb  2005-12-29 02:24:22.000000000 +0800
@@ -72,13 +72,20 @@
       reader = CSV::Reader.create(data)
       columns = reader.shift.map {|column_name| cnx.quote_column_name(column_name) }
+      columns.shift # added for PostgreSQL
       column_clause = columns.join(', ')
       reader.each do |row|
         next if row.first.nil? # skip blank lines
         raise "No table name defined" if !table_name
         raise "No header defined" if !column_clause
-        values_clause = row.map {|v| cnx.quote(v).gsub('
', " 
").gsub('
', " 
") }.join(', ')
+
+       # Changed for PostgreSQL
+        #values_clause = row.map {|v| cnx.quote(v).gsub('
', " 
").gsub('
', " 
") }.join(', ')
+        values = row.map {|v| cnx.quote(v).gsub('
', " 
").gsub('
', " 
") }
+       values.shift
+        values_clause = values.join(', ')
+
         sql = "INSERT INTO #{table_name} (#{column_clause}) VALUES (#{values_clause})" 
         cnx.insert(sql)
       end
&lt;/pre&gt;&lt;br /&gt;&amp;#8212;Jake Morrison&lt;/p&gt;

&lt;hr /&gt;&lt;br /&gt;I had the same trouble with Postgres. The issue is that Postgres does not define currval() before the sequence is used. What I did was add a call to set the values on the sequences after the creation of the tables (around line 55):
&lt;pre&gt;
    # Added for PostgresSQL
    tables = ['globalize_countries', 'globalize_translations', 'globalize_languages']
    tables.each do |table|
      sql = "SELECT setval('#{table}_id_seq', 1)" 
      ActiveRecord::Base.connection.execute(sql)
    end
&lt;/pre&gt;
&lt;p&gt;-Daniel Wiesmann&lt;br /&gt;&lt;hr /&gt;&lt;/p&gt;

&lt;p&gt;Why is :select not allowed in the replacement for ActiveRecord::find? (in Globalize::DbTranslate)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Because Globalize modifies the &lt;code&gt;:select&lt;/code&gt; portion of the query, so overriding it would break the functionality. &amp;#8212;JH&lt;/strong&gt;&lt;/p&gt;

&lt;hr /&gt;
&lt;p&gt;I can see that I&amp;#8217;m to use &amp;#8220;string&amp;#8221;.t to translate strings in my app, but where do I actually put the translated strings? Am I just blind, or is this not covered anywhere?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The translated strings go in the &lt;code&gt;globalize_translations&lt;/code&gt; table in the db. Use &lt;code&gt;Globalize::Locale.set_translation(key, *translations)&lt;/code&gt; to write new translations to the db. &amp;#8212;JH&lt;/strong&gt;&lt;/p&gt;

&lt;hr /&gt;&lt;br /&gt;rails validation error gives me a &amp;#8217;%d&amp;#8217; i.s.o a number&lt;br /&gt;&lt;pre&gt;
There were problems with the following fields:
    * Desc short is too short (min is %d characters)
&lt;/pre&gt;
&lt;p&gt;&lt;span class="caps"&gt;BTW&lt;/span&gt; is is an idea to have these validation errors also in the translation database?&lt;/p&gt;

&lt;p&gt;_cies breijs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Answer:&lt;/strong&gt; Actually, I&amp;#8217;ve been seeing that, too&amp;#8212;I&amp;#8217;m going to look into it. &amp;#8212;JH&lt;/p&gt;

&lt;hr /&gt;
&lt;p&gt;i think this is an error generating an other error.&lt;br /&gt;when i get globalize out of the plugin-path and environment.rb i get to see a normal error.&lt;/p&gt;

&lt;pre&gt;
ActionView::ActionViewError (No rhtml, rxml, or delegate template found for /usr/local/lib/ruby/gems/1.8/gems/actionpack-1.11.2/lib/action_controller/templates/rescues/diagnostics.rhtml):
    /usr/local/lib/ruby/gems/1.8/gems/actionpack-1.11.2/lib/action_view/base.rb:281:in `pick_template_extension'
    /usr/local/lib/ruby/gems/1.8/gems/actionpack-1.11.2/lib/action_view/base.rb:195:in `globalize_old_render_file'
    /vendor/plugins/globalize/lib/globalize/rails/action_view.rb:15:in `render_file'
    /usr/local/lib/ruby/gems/1.8/gems/actionpack-1.11.2/lib/action_controller/rescue.rb:73:in `rescue_action_locally'
    /usr/local/lib/ruby/gems/1.8/gems/actionpack-1.11.2/lib/action_controller/rescue.rb:31:in `rescue_action'
    /usr/local/lib/ruby/gems/1.8/gems/actionpack-1.11.2/lib/action_controller/rescue.rb:108:in `perform_action'
    /usr/local/lib/ruby/gems/1.8/gems/actionpack-1.11.2/lib/action_controller/base.rb:369:in `send'
    /usr/local/lib/ruby/gems/1.8/gems/actionpack-1.11.2/lib/action_controller/base.rb:369:in `process_without_session_management_support'
    /usr/local/lib/ruby/gems/1.8/gems/actionpack-1.11.2/lib/action_controller/session_management.rb:116:in `process'
    /usr/local/lib/ruby/gems/1.8/gems/rails-1.0.0/lib/dispatcher.rb:38:in `dispatch'
    /usr/local/lib/ruby/gems/1.8/gems/rails-1.0.0/lib/fcgi_handler.rb:141:in `process_request'
    /usr/local/lib/ruby/gems/1.8/gems/rails-1.0.0/lib/fcgi_handler.rb:53:in `process!'
    /usr/local/lib/ruby/gems/1.8/gems/rails-1.0.0/lib/fcgi_handler.rb:52:in `each_cgi'
    /usr/local/lib/ruby/gems/1.8/gems/fcgi-0.8.6.1/./fcgi.rb:597:in `each'
    /usr/local/lib/ruby/gems/1.8/gems/fcgi-0.8.6.1/./fcgi.rb:597:in `each_cgi'
    /usr/local/lib/ruby/gems/1.8/gems/rails-1.0.0/lib/fcgi_handler.rb:52:in `process!'
    /usr/local/lib/ruby/gems/1.8/gems/rails-1.0.0/lib/fcgi_handler.rb:22:in `process!'
    dispatch.fcgi:24
&lt;/pre&gt;
&lt;p&gt;_cies breijs.&lt;/p&gt;

&lt;hr /&gt;
&lt;p&gt;&lt;strong&gt;Is there a way to make globalization work with pagination? I&amp;#8217;m getting an error about :select, which was explained, but any ways to get it to work?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Answer:&lt;/strong&gt; Good question, I&amp;#8217;m looking into it. &amp;#8212;JH&lt;br /&gt;&lt;hr /&gt;&lt;/p&gt;

&lt;p&gt;Any plan to make this module install via rubygem?&lt;br /&gt;&lt;br /&gt;&amp;#8212;CC&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Answer:&lt;/strong&gt; Not at this point. Since it&amp;#8217;s a per application modification, I&amp;#8217;m not sure how that would work. &amp;#8212;JH&lt;br /&gt;&lt;hr /&gt;&lt;/p&gt;

&lt;p&gt;I have installed globalize according to the instruction provided in the home page. I populated the development database and test database. When I test run the test_plugins, I got an error loading sqlite3 as the following.&lt;/p&gt;

&lt;pre&gt;
/usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:21:in `require__': no such file to load -- sqlite3 (MissingSourceFile)
&lt;/pre&gt;
&lt;p&gt;Why do I have to have sqlite installed? I use mysql only. Any idea how to workaround this? &lt;br /&gt;&lt;br /&gt;&amp;#8212;CC&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Answer:&lt;/strong&gt; You don&amp;#8217;t really have to have sqlite installed. That&amp;#8217;s just the default so that it will work out of the box with no extra db setup. Just change the globalize/test/config/database.yml file to reflect your mysql globalize test db. &amp;#8212;JH&lt;/p&gt;

&lt;hr /&gt;&lt;br /&gt;Are translations by language or by locale? As far as I can see they are by language, i.e., &lt;br /&gt;&lt;pre&gt;
Locale.set("en-CA")
Locale.set_translation("a test","Canadian test")
Locale.set("en-US")
Locale.set_translation("a test","American test")
&lt;/pre&gt; &lt;br /&gt;ends up with only one translation, and &lt;br /&gt;&lt;pre&gt;
&amp;lt;% Locale.set("en-CA") %&amp;gt;
&amp;lt;%= "a test".t %&amp;gt;&amp;lt;br/&amp;gt;
&amp;lt;% Locale.set("en-US") %&amp;gt;
&amp;lt;%= "a test".t %&amp;gt;&amp;lt;br/&amp;gt;
&lt;/pre&gt;&lt;br /&gt;prints out&lt;br /&gt;&lt;pre&gt;
American test
American test
&lt;/pre&gt;&lt;br /&gt;Am I missing something? Thanks, &lt;br&gt;&lt;br /&gt;Dave&lt;br /&gt;
&lt;p&gt;&lt;strong&gt;Answer:&lt;/strong&gt; Yes, translations are keyed by language, however a language can be a localized dialect, such as en-CA (this is standardized as &lt;span class="caps"&gt;RFC 3066&lt;/span&gt;, and the Language model has a column for it). All you have to do is add rows to the globalize_languages table for the dialects you need. Then, when you do something like Locale.set(&amp;#8216;en-CA&amp;#8217;), the referenced language will be the new en-CA language you added. &amp;#8212;JH&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;More:&lt;/strong&gt; I have run into a problem with this. The translation &lt;br /&gt;cacheing uses the language first, then the locale &lt;br /&gt;&lt;span class="caps"&gt;RFC 3066&lt;/span&gt; locale. That is, cache_key in &lt;br /&gt;Globalize::DbViewTranslator&lt;br /&gt;&lt;pre&gt;
  def cache_key(key, language, idx)
    [ key, language.code, idx ].join(':')
  end
&lt;/pre&gt;&lt;br /&gt;uses language.code, which is defined like this:&lt;br /&gt;&lt;pre&gt;
  def code; iso_639_1 || iso_639_3 || rfc_3066; end
&lt;/pre&gt;&lt;br /&gt;So it seems that either code needs to try rfc_3066 first, or cache_key does, i.e.&lt;br /&gt;&lt;pre&gt;
  def code; rfc_3066 || iso_639_1 || iso_639_3; end
&lt;/pre&gt;&lt;br /&gt;Or you have to null out the iso_639_1 and iso_639_3 fields&lt;br /&gt;if you are going to use rfc_3066. I have modified &lt;code&gt;code&lt;/code&gt; on my site. &amp;#8212;Jake Morrison&lt;/p&gt;

&lt;hr&gt;&lt;br /&gt;I already have a small web app which is translated into a number of langs (about 7). It&amp;#8217;s perl on top of mysql. I&amp;#8217;m looking at maybe migrating to &lt;span class="caps"&gt;ROR&lt;/span&gt; in future.
&lt;p&gt;My app is organised in a very simple way &amp;#8211; I have a table called &lt;code&gt;sitetext&lt;/code&gt;:&lt;/p&gt;


	
		id 
		en 
		fr 
		es 
		de 
		cn 
	



&lt;p&gt;this handles the majority of small words and phrases used. I use substitution like $VAR to make things flexible. There are other tables too that work similarly.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;How is underlying content organised in globalize? How hard would it be to write a script to migrate my content?&lt;/li&gt;
	&lt;li&gt;Also, suppose a pages content changes &amp;#8211; the author changes the english text. Does globalise track the fact that other langs are out of date? This is the way I will definitely need to go in future.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;thanks&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Answer:&lt;/strong&gt; I don&amp;#8217;t understand how you&amp;#8217;re currently doing it, but you should definitely be able to write a migration script. As for question &lt;strong&gt;2&lt;/strong&gt;, Globalize is not currently tracking that, but it&amp;#8217;s in the works.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;response&lt;/strong&gt;&lt;br /&gt;My current layout is just one col in a table per language, plus an id &amp;#8211; that&amp;#8217;s what I meant. How is the database laid out in your code? is it documented somewhere here (even just an sql script or something?) thanks for the answer.&lt;/p&gt;

&lt;hr&gt;&lt;br /&gt;Jan 05, 2006:
&lt;p&gt;I&amp;#8217;m using ubuntu &amp;#8220;hoary&amp;#8221;, ruby 1.83, rails 1.0, postgres 7.4.7, and globalize svn version 155.  The first two steps in the installation worked fine, but the third, &amp;#8220;rake migrate&amp;#8221; failed, in the same way described by Jake Morrison in his post above.  I also had success by changing my  db/migrate/001_globalize_migration.rb script as Jake described, after dropping the tables created in the database on the first attempt of running &amp;#8220;rake migrate&amp;#8221;&lt;/p&gt;

&lt;p&gt;It&amp;#8217;d be nice to patch the file.  I suspect that the patched file would run on mysql also &amp;#8211; the generated sql is standard sql.&lt;/p&gt;

&lt;p&gt;OK, off to testing out globalizing my app.&lt;/p&gt;

&lt;p&gt;Thanks for writing Globalize!&lt;/p&gt;

&lt;hr&gt;
&lt;p&gt;2006-01-25:&lt;/p&gt;

&lt;p&gt;The plugin seems to be very useful. Only I&amp;#8217;m worried that storing both app-translations (interface) and user-translations (user data) in the same database/table might make development as well as deployment harder. How do you handle this?&lt;/p&gt;

&lt;p&gt;I imagine there could be benefits of a &lt;span class="caps"&gt;YAML&lt;/span&gt; based (or similar) solution for the view translations, and maybe even the languages and countries tables. (Version control, separation of user data and app data and more.) (Note that this is ment as a question, not a flame.)&lt;/p&gt;

&lt;p&gt;2006-01-31&lt;/p&gt;

&lt;p&gt;I would like to feed all translation strings from external script in shell, but I have no idea how to make it&amp;#8230; I can load those data only from controller and browser, but it is not efficient :(&lt;/p&gt;

&lt;pre&gt;
class WelcomeController &amp;lt; ApplicationController
  include Globalize
  def load
      Locale.set_base_language('en')
      rows = [
        {:key=&amp;gt;'title', :language=&amp;gt;'pl', :translations=&amp;gt;['Tytu&#322;', 'Tytu&#322;y', 'Tytu&#322;y', 'Tytu&#322;y', 'Tytu&#322;&#243;w']},
        {:key=&amp;gt;'title', :language=&amp;gt;'en', :translations=&amp;gt;['The title', 'The titles']},
        {:key=&amp;gt;'title', :language=&amp;gt;'de', :translations=&amp;gt;['Der Titel']},
      ]
      for row in rows
        Locale.set(row[:language])
        Locale.set_translation(row[:key], Locale.language, row[:translations]) 
      end
  end
end
&lt;/pre&gt;
&lt;p&gt;There would be very usefull to have an option for extract all globalize strings into one place (like gettext). And, after translation, upgrade the database with one script.&lt;/p&gt;

&lt;p&gt;2006-02-07&lt;/p&gt;

&lt;p&gt;I have been trying &lt;strong&gt;using Globalize plugin from external Ruby script&lt;/strong&gt;, but it I do not know how. I created folder &amp;#8216;work&amp;#8217; in my RoR application and I try to use script from this place:&lt;/p&gt;

&lt;p&gt;1st try:&lt;br /&gt;&lt;pre&gt;
require File.dirname(__FILE__) + '/../vendor/plugins/globalize/init.rb')
&lt;/pre&gt;&lt;br /&gt;does not work:&lt;br /&gt;&lt;pre&gt;
undefined local variable or method `directory' for main:Object (NameError)
&lt;/pre&gt;&lt;/p&gt;

&lt;p&gt;2nd try:&lt;br /&gt;&lt;pre&gt;
require 'active_record'
def directory_binding
  directory = File.dirname(__FILE__)+"/../vendor/plugins/globalize/lib/" 
  Dir.chdir(directory)
  binding
end
eval(IO.read(File.dirname(__FILE__) + '/../vendor/plugins/globalize/init.rb'), directory_binding)
&lt;/pre&gt;&lt;br /&gt;also does not work:&lt;br /&gt;&lt;pre&gt;
./globalize/rails/action_view.rb:4:in `alias_method': undefined method `render_file' for class `ActionView::Base'
&lt;/pre&gt;&lt;/p&gt;

&lt;hr&gt;&lt;br /&gt;2006-02-21
&lt;p&gt;I really need some help in using the Globalize plugin. I&amp;#8217;m currently developing on &lt;span class="caps"&gt;OSX 10&lt;/span&gt;.4.4, RoR 1.0, Postgres 8.0, and Ruby 1.8.2_4. My problem is making Globalize work with my models. Here a sample of my code:&lt;/p&gt;

&lt;p&gt;environment.rb:&lt;br /&gt;&lt;pre&gt;
include Globalize
&lt;/pre&gt;&lt;/p&gt;

&lt;p&gt;controllers/application.rb:&lt;br /&gt;&lt;pre&gt;
class ApplicationController &amp;lt; ActionController::Base
  Locale.set_base_language('en-US')
end
&lt;/pre&gt;&lt;/p&gt;

&lt;p&gt;models/trial.rb:&lt;br /&gt;&lt;pre&gt;
class Trial &amp;lt; ActiveRecord::Base
  translates :name
end
&lt;/pre&gt;&lt;/p&gt;

&lt;p&gt;trial_controller.rb:&lt;br /&gt;&lt;pre&gt;
class TrialController &amp;lt; ApplicationController
  def index
    Locale.set('en-US')
    Trial.create(:name =&amp;gt; 'One')
    Locale.set('es-ES')
    trial = Trial.find(1)
    trial.name = 'Uno'
    if trial.save
       render_text("#{trial.name")
    end
  end
end
&lt;/pre&gt;&lt;/p&gt;

&lt;p&gt;When running the app I get this error:&lt;br /&gt;&lt;pre&gt;
RuntimeError: ERROR    C42601    Msyntax error at or near "WHERE"    P20 
Fscan.l    L639    Ryyerror: UPDATE trials SET  WHERE id = 1
&lt;/pre&gt;&lt;/p&gt;

&lt;p&gt;Looking at it closely, it seems that on the intiall save on the &lt;br /&gt;database, no data is being saved on the globalize_translation table so &lt;br /&gt;when I try to update the data from my trials table no value is being &lt;br /&gt;passed.&lt;/p&gt;

&lt;p&gt;I know that I have configured the app properly because data is being &lt;br /&gt;passed to the globalized_translation folder when I do &amp;#8220;foo&amp;#8221;.t on the views but I &lt;br /&gt;really can&amp;#8217;t make it work with my models.&lt;/p&gt;

&lt;hr /&gt;
&lt;p&gt;&lt;strong&gt;Q&lt;/strong&gt;: How do i prevent the base language text from being displayed when there&amp;#8217;s no translation available for the current language?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q&lt;/strong&gt;: How do i find out (at runtime) if a model has a translation in the current language?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A&lt;/strong&gt;: Globalize adds the methods &lt;code&gt;xxx_is_base?&lt;/code&gt; to ActiveRecord, where &lt;code&gt;xxx&lt;/code&gt; stands for the attribute name. before using the attribute, first check if it&amp;#8217;s translated.&lt;/p&gt;

&lt;p&gt;Example:&lt;br /&gt;I have lots of &lt;code&gt;Page&lt;/code&gt; objects, the property &lt;code&gt;content&lt;/code&gt; is translated into several languages. To display all the pages that still need to be translated, do the following:&lt;/p&gt;

&lt;pre&gt;
# somewhere in the controller
include Globalize
Locale.set_base_language('en')
Locale.set('es')
@pages = Page.find(:all)
# in the view
&amp;lt;%
@pages.each do |page|
  if page.content_is_base? %&amp;gt;
    &amp;lt;%= puts 'Page still needs to be translated!' %&amp;gt;
&amp;lt;% end %&amp;gt;
(not tested, hope there's no bug.)
&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Q&lt;/strong&gt;: When I do a rake migrate I get this error.  How do I fix it?&lt;/p&gt;

&lt;pre&gt;
rake migrate
(in /home/brian/pken)
rake aborted!
undefined method `namespace' for #&amp;lt;Object:0x400b59c0&amp;gt;
&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;A&lt;/strong&gt;: You need to update rake to 0.7 which adds namespace support. `sudo gem update rake` will do that for you.&lt;/p&gt;

&lt;hr /&gt;&lt;br /&gt;2006-05-15
&lt;p&gt;&lt;strong&gt;Q&lt;/strong&gt; How much effort would it be to implement Oracle support? What are the DB-depencies?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q&lt;/strong&gt; Is possible to implement a runtime &lt;span class="caps"&gt;URL&lt;/span&gt; name translation?&lt;br /&gt;...&lt;br /&gt;map.connect /:language/ &lt;ins&gt; &amp;#8220;restaurant&amp;#8221;.t &lt;/ins&gt; &amp;#8221;/&amp;#8221; + &amp;#8220;parmesan&amp;#8221;.t&lt;br /&gt;...&lt;br /&gt;So that /en/restaurant/parmesan and /it/ristorante/parmigiano are logically the same page?&lt;/p&gt;

&lt;p&gt;&amp;#8212;&gt; that would be amazing!&lt;br /&gt;or some other possibility to support localizing urls, too. how are you guys doing this?&lt;br /&gt;&lt;a href="http://rails.techno-weenie.net/question/2006/5/23/url_reverse_translation"&gt;http://rails.techno-weenie.net/question/2006/5/23/url_reverse_translation&lt;/a&gt;&lt;/p&gt;

</content>
    <author>
      <name>Sven</name>
      <email>svenfuchs@artweb-design.de</email>
    </author>
  </entry>
  <entry>
    <id>tag:www.globalize-rails.org,2005:Wikipage/9</id>
    <published>2008-06-25T00:41:12+02:00</published>
    <updated>2008-06-25T00:41:12+02:00</updated>
    <link type="text/html" href="http://www.globalize-rails.org/home/pages/acknowledgements" rel="alternate"/>
    <title>Acknowledgements</title>
    <content type="html">&lt;p&gt;This project grew out of many discussions I had with Josh Sierles. A lot of the view translation stuff is inspired by Per Wigren&amp;#8217;s &lt;span class="caps"&gt;MLR&lt;/span&gt; code. I also used a lot of his localization data to populate the &lt;code&gt;globalize&lt;/code&gt; tables. I have no idea how he compiled all that data, but it&amp;#8217;s great stuff.&lt;/p&gt;

&lt;p&gt;A lot of people have helped iron out initial bugs (and I&amp;#8217;m sure there will be many more opportunities to do the same), but I&amp;#8217;d like to thank Andreas Roedl especially, for the many hours he&amp;#8217;s put in.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.jvoorhis.com/"&gt;Jeremy Voorhis&lt;/a&gt; and &lt;a href="http://www.miettes.ch"&gt;Olivier Amblet&lt;/a&gt; and &lt;a href="http://www.sans-savoir.net"&gt;Yann Lugrin&lt;/a&gt; (&lt;a href="http://liquid-concept.ch"&gt;http://liquid-concept.ch&lt;/a&gt;) are the core dev faithful. Obviously, I wouldn&amp;#8217;t be doing this if it weren&amp;#8217;t for the phenom that is &lt;a href="http://www.rubyonrails.com/"&gt;Ruby on Rails&lt;/a&gt;. Thanks, &lt;a href="http://www.loudthinking.com/"&gt;DHH&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;All code and accompanying documentation was originally written and is copyrighted by Josh Harvey. It is released under the &lt;span class="caps"&gt;MIT&lt;/span&gt; license.&lt;/p&gt;

</content>
    <author>
      <name>Sven</name>
      <email>svenfuchs@artweb-design.de</email>
    </author>
  </entry>
  <entry>
    <id>tag:www.globalize-rails.org,2005:Wikipage/10</id>
    <published>2008-06-25T00:41:28+02:00</published>
    <updated>2008-06-25T00:41:28+02:00</updated>
    <link type="text/html" href="http://www.globalize-rails.org/home/pages/how-to-use-globalize" rel="alternate"/>
    <title>How to use globalize</title>
    <content type="html">&lt;h2&gt;In your models&lt;/h2&gt;

&lt;pre&gt;&lt;code&gt;
  class Product &amp;lt; ActiveRecord::Base
    translates :name, :description, :specs
  end
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Create a row and its translation:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;
  Locale.set_base_language('en-US')
  Locale.set('en-US')
  Product.create!(:name =&amp;gt; 'Meatballs')
  Locale.set('es-ES')
  prod = Product.find(1)
  prod.name = 'Alb&#243;ndigas'
  prod.save
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Then:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;
  Locale.set("en-US")
  prod = Product.find(1) 
  prod.name -&amp;gt; "Meatballs" 
  Locale.set("es-ES")
  prod = Product.find(1) 
  prod.name -&amp;gt; "Alb&#243;ndigas" 
&lt;/code&gt;&lt;/pre&gt;

&lt;h2&gt;In your views (or anywhere else)&lt;/h2&gt;

&lt;pre&gt;&lt;code&gt;
  Locale.set("he-IL")
  &amp;lt;%= "Thanks for ordering!".t %&amp;gt; -&amp;gt; "&#1514;&#1493;&#1491;&#1492; &#1506;&#1500; &#1492;&#1492;&#1494;&#1502;&#1504;&#1492;!" 
  &amp;lt;%= "You've got %d items in your cart" / 5 %&amp;gt; -&amp;gt; "&#1497;&#1513; 5 &#1502;&#1493;&#1510;&#1512;&#1497;&#1501; &#1489;&#1505;&#1500; &#1513;&#1500;&#1498;" 
  Locale.set("es-ES")
  &amp;lt;%= Time.now.localize("%d %B %Y") %&amp;gt; -&amp;gt; "17 Octubre 2005" 
  &amp;lt;%= 12345.45.localize %&amp;gt; -&amp;gt; "12.345,45" 
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;There&amp;#8217;s more, see &lt;a href="/pages/features" class="existingWikiWord"&gt;Features&lt;/a&gt;.&lt;/p&gt;

</content>
    <author>
      <name>Sven</name>
      <email>svenfuchs@artweb-design.de</email>
    </author>
  </entry>
  <entry>
    <id>tag:www.globalize-rails.org,2005:Wikipage/11</id>
    <published>2008-06-25T00:42:03+02:00</published>
    <updated>2008-06-25T00:42:03+02:00</updated>
    <link type="text/html" href="http://www.globalize-rails.org/home/pages/globalize-powered-sites" rel="alternate"/>
    <title>Globalize powered sites</title>
    <content type="html">&lt;ul&gt;
    &lt;li&gt;&lt;a href="http://rashgash.com"&gt;Rash Gash Guitars&lt;/a&gt; &amp;#8212; This is the reason Globalize exists. I needed the site to work in English and Hebrew.&lt;/li&gt;
    &lt;li&gt;&lt;a href="http://www.crispynews.com"&gt;CrispyNews&lt;/a&gt; &amp;#8212; Create your own community news site! We&amp;#8217;ve gotten alot of international interest in our application, but we only support english. We&amp;#8217;re currently installing globalize and our intention is to have a globalization module that&amp;#8217;ll let anyone port crispynews into their own language. &lt;br /&gt;&lt;br /&gt;Update: Globalize was successfully installed, and we&amp;#8217;ve even extended it into an interesting &amp;#8220;fun project&amp;#8221; which retreives automatic translations from sites like Babelfish and Google translate for phrases that have not been translated yet. The translations are not really usable without significant modification, but those interested in making similar enhancements can read the article &lt;a href="http://blog.kenlet.com/articles/2006/03/31/internationalization-with-the-help-of-google-translate"&gt;Internationalization with Rails, Globalize and Google&lt;/a&gt; We chose it over some other Ruby globalization libraries because of its rails-y feel. We look forward to continually incorporating future versions as they make further optimizations and improvements are released. &amp;#8211; &lt;em&gt;crispynews coders&lt;/em&gt;.&lt;/li&gt;
    &lt;li&gt;&lt;a href="http://www.oleb.net/southamerica"&gt;South America Travelogue&lt;/a&gt; &amp;#8212; Photos, travel stories and a map of my 8-month backpacking trip through South America. All in English and German using Globalize &amp;#8211; &lt;em&gt;Ole Begemann&lt;/em&gt;.&lt;/li&gt;
    &lt;li&gt;&lt;a href="http://www.latvijapasaule.lv"&gt;Equal project&lt;/a&gt; &amp;#8212; This is Latvia&amp;#8217;s government project site.&lt;/li&gt;
    &lt;li&gt;&lt;a href="http://media.nikefootball.com/"&gt;media.nikefootball.com&lt;/a&gt; &amp;#8211; provides multimedia content to the press for Nike&amp;#8217;s 2006 football campaign. Also the subject of screenshots in Jeremy Voorhis&amp;#8217; slides from the Canada on Rails Globalize talk.&lt;/li&gt;
    &lt;li&gt;&lt;a href="http://www.trikr.net/"&gt;www.trikr.net&lt;/a&gt; &amp;#8211; A collaborate project time tracker tool.&lt;/li&gt;
    &lt;li&gt;&lt;a href="http://www.keysearch.ch"&gt;www.keysearch.ch&lt;/a&gt; &amp;#8212; Banking Executive Search in Switzerland&lt;/li&gt;
    &lt;li&gt;&lt;a href="http://www.sgsm.ch"&gt;www.sgsm.ch&lt;/a&gt; &amp;#8212; Schweizerische Gesellschaft f&#252;r Sportmedizin&lt;/li&gt;
    &lt;li&gt;&lt;a href="http://www.filipcic.com"&gt;Tomislav Filip&#269;i&#263; &amp;#8211; Photography&lt;/a&gt; &amp;#8212; Art photography. In English and Croatian using globalize.&lt;/li&gt;
&lt;/ul&gt;

</content>
    <author>
      <name>Sven</name>
      <email>svenfuchs@artweb-design.de</email>
    </author>
  </entry>
</feed>
