From 3c6f40541de9e1cd66c059c28fcbb12f509bdb77 Mon Sep 17 00:00:00 2001
From: Xavier Noria <fxn@hashref.com>
Date: Sun, 14 Sep 2008 23:02:54 +0200
Subject: [PATCH] Catalan locale

---
 README                                |    1 +
 app/views/pages/about.html.erb        |    1 +
 app/views/pages/date_formats.html.erb |   11 +++++++++--
 app/views/pages/time_formats.html.erb |   10 ++++++++--
 4 files changed, 19 insertions(+), 4 deletions(-)

diff --git a/README b/README
index 8c73237..2d2fa17 100644
--- a/README
+++ b/README
@@ -42,6 +42,7 @@ Leandro Marcucci - http://leanucci.com.ar - Spanish (Argentinean) locale
 Masayuki Nakamura - masayuki@japancentre.com - Content translation, Japanese locale
 Prem Sichanugrist - http://sikachu.com - Thai locale
 Simon Tokumine - simon@japancentre.com - Content translation, Japanese locale
+Xavier Noria - fxn@hashref.com - Content translation, Catalan locale
 
 Bugs and Feedback
 ===================
diff --git a/app/views/pages/about.html.erb b/app/views/pages/about.html.erb
index 0a2c9ca..b6e9376 100644
--- a/app/views/pages/about.html.erb
+++ b/app/views/pages/about.html.erb
@@ -19,5 +19,6 @@
     <li><%= link_to "Ninh Bui", "http://www.phusion.nl" %>: Dutch locale, Hosting (<%= link_to "http://i18n-demo.phusion.nl", "http://i18n-demo.phusion.nl", :popup => true %>)</li>
     <li><%= link_to "Prem Sichanugrist", "http://sikachu.com" %>: Thai locale</li>
     <li><%= link_to "Simon Tokumine", "http://www.japancentre.com" %>: Content translation, Japanese locale</li>
+    <li><%= link_to "Xavier Noria", "http://www.hashref.com" %>: Content translation, Catalan locale</li>
   </ul>
 </div>
diff --git a/app/views/pages/date_formats.html.erb b/app/views/pages/date_formats.html.erb
index 217d3bd..5458e67 100644
--- a/app/views/pages/date_formats.html.erb
+++ b/app/views/pages/date_formats.html.erb
@@ -14,8 +14,15 @@
       <td><%= Date.today.to_s(:short) %></td>
     </tr>
     <tr>
-      <th scope="row">Date.today.to_s(:long)</th>
-      <td><%= Date.today.to_s(:long) %></td>
+      <th scope="row" valign="top">Date.today.to_s(:long)</th>
+      <td>
+        <%= Date.today.to_s(:long) %>
+        <% if I18n.locale == 'ca-ES' %>
+        <%# Tell the reader corner cases are covered. %>
+        <br/><%= Date.new(2009, 4, 3).to_s(:long) %>
+        <br/><%= Date.new(11234, 7, 17).to_s(:long) %>
+        <% end %>
+      </td>
     </tr>
     <tr>
       <th scope="row">Date.today.to_s(:long_ordinal)</th>
diff --git a/app/views/pages/time_formats.html.erb b/app/views/pages/time_formats.html.erb
index 584985b..5c0b9f6 100644
--- a/app/views/pages/time_formats.html.erb
+++ b/app/views/pages/time_formats.html.erb
@@ -14,8 +14,14 @@
       <td><%= Time.now.to_s(:short) %></td>
     </tr>
     <tr>
-      <th scope="row">Time.now.to_s(:long)</th>
-      <td><%= Time.now.to_s(:long) %></td>
+      <th scope="row" valign="top">Time.now.to_s(:long)</th>
+      <td>
+         <%= Time.now.to_s(:long) %>
+         <% if I18n.locale == 'ca-ES' %>
+         <br/><%= Date.new(2009, 4, 3).to_time.to_s(:long) %>
+         <br/><%= Date.new(11234, 7, 17).to_time.to_s(:long) %>
+         <% end %>
+      </td>
     </tr>
     <tr>
       <th scope="row">Time.now.to_s(:long_ordinal)</th>
-- 
1.5.4.1


From c5a3d11e22527508be9e7b815e6438120d729d29 Mon Sep 17 00:00:00 2001
From: Xavier Noria <fxn@hashref.com>
Date: Sun, 14 Sep 2008 23:05:53 +0200
Subject: [PATCH] Catalan locale

---
 config/locales/ca-ES.rb |  228 +++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 228 insertions(+), 0 deletions(-)
 create mode 100644 config/locales/ca-ES.rb

diff --git a/config/locales/ca-ES.rb b/config/locales/ca-ES.rb
new file mode 100644
index 0000000..096b60a
--- /dev/null
+++ b/config/locales/ca-ES.rb
@@ -0,0 +1,228 @@
+module CatalanUtils
+  def self.month_needs_apostrophe?(month)
+    # Duen apòstrof abril, agost i octubre.
+    [4, 8, 10].include?(month)
+  end
+  
+  def self.number_needs_apostophre?(n)
+    if n.to_s =~ /\A11(?:\d{3})*\z/
+      # 11, 11_000, 11_000_000, 11_000_000_000, etc.
+      true
+    elsif n.to_s =~ /\A1((?:\d{3})*)\z/ && ($1.length/3).even?
+      # 1, 1_000_000, 1_000_000_000_000, etc.
+      true
+    else
+      false
+    end
+  end
+end
+
+{
+  :'ca-ES' => {
+    :date => {
+      # Aquests formats estan basats en els proposats en el fitxer main/ca.xml de
+      # l'arxiu core.zip de CLDR 1.6.1 (http://unicode.org/Public/cldr/1.6.1/).
+      :formats => {
+        :default  => "%d/%m/%Y",
+        :short    => "%d/%m/%y",
+        :long     => lambda { |date|
+          month = CatalanUtils.month_needs_apostrophe?(date.month) ? "d'%B" : "de %B"
+          year  = CatalanUtils.number_needs_apostophre?(date.year) ? "d'%Y" : "de %Y"
+          "%e #{month} #{year}" # explicit day to avoid leading zero from %d
+        },
+        :only_day => "%e"
+      },
+      # Els noms dels dies de la setmana segueixen les regles de mots
+      # comuns pel que fa a l'ús de majúscules. Per tant, els configurem en
+      # minúscula i és el codi client qui ha de passar a majúscula si cal.
+      :day_names => %w(diumenge dilluns dimarts dimecres dijous divendres dissabte),
+
+      # El punt és opcional en les abreviatures dels dies de la setmana, no el
+      # poso perquè m'agrada més així, però pots fer-ho a la teva aplicació.
+      :abbr_day_names => %w(dg dl dm dc dj dv ds),
+
+      # Els noms dels mesos de l'any segueixen les regles de mots
+      # comuns pel que fa a l'ús de majúscules. Per tant, els configurem en
+      # minúscula i és el codi client qui ha de passar a majúscula si cal.
+      :month_names => %w(~ gener febrer març abril maig juny juliol agost setembre octubre novembre desembre),
+
+      # En canvi si que cal punt en les abreviatures dels mesos. Segons les regles
+      # de formació d'abreviatures alguns mesos no en tenen. Són també les
+      # abreviatures que figuren a main/ca.xml.
+      :abbr_month_names => %w(~ gen. febr. març abr. maig juny jul. ag. set. oct. nov. des),
+      :order => [:day, :month, :year],
+    },
+  
+    :time => {
+      :formats => {
+        :default => "%d/%m/%Y, %H:%M:%S %z",
+        :time    => "%H:%M",
+        :short   => "%d/%m/%y, %H:%M",
+        :long    => lambda { |time|
+          month = CatalanUtils.month_needs_apostrophe?(time.month) ? "d'%B" : "de %B"
+          year  = CatalanUtils.number_needs_apostophre?(time.year) ? "d'%Y" : "de %Y"
+          "%e #{month} #{year} %H:%M" # explicit day to avoid leading zero from %d
+        },
+        :only_second => "%S",
+      
+        :datetime => {
+          :formats => {
+            :default => "%d-%m-%YT%H:%M:%S%Z"
+          }
+        }
+      },
+      :am => 'AM',
+      :pm => 'PM',
+    },
+      
+    :datetime => {
+      :distance_in_words => {
+        :half_a_minute => "mig minut",
+        :less_than_x_seconds => {
+          :one   => "menys d'un segon",
+          :other => "menys de {{count}} segons"
+          # Amb aquest backend no podem apostrofar segons {{count}}.
+        },
+        :x_seconds => {
+          :one   => "1 segon",
+          :other => "{{count}} segons",
+        },
+        :less_than_x_minutes => {
+          :one   => "menys d'un minut",
+          :other => "menys de {{count}} minuts"
+          # Amb aquest backend no podem apostrofar segons {{count}}.
+        },
+        :x_minutes => {
+          :one   => "1 minut",
+          :other => "{{count}} minuts"
+        },
+        :about_x_hours => {
+          :one   =>  "al voltant d'una hora",
+          :other => "al voltant de {{count}} hores"
+          # Amb aquest backend no podem apostrofar segons {{count}}.
+        },
+        :x_days => {
+          :one   =>  "1 dia",
+          :other => "{{count}} dies"
+        },
+        :about_x_months => {
+          :one   =>  "al voltant d'un mes",
+          :other => "al voltant de {{count}} mesos"
+          # Amb aquest backend no podem apostrofar segons {{count}}.
+        },
+        :x_months => {
+          :one   =>  "1 mes",
+          :other => "{{count}} mesos"
+        },
+        :about_x_years => {
+          :one   =>  "al voltant d'un any",
+          :other => "al voltant de {{count}} anys"
+          # Amb aquest backend no podem apostrofar segons {{count}}.
+        },
+        :over_x_years => {
+          :one   =>  "més d'un any",
+          :other => "més de {{count}} anys"
+          # Amb aquest backend no podem apostrofar segons {{count}}.
+        }
+      }
+    },
+      
+    :number => {
+      :format => {
+        :precision => 3,
+        :separator => ',',
+        :delimiter => '.'
+      },
+      :currency => {
+        :format => {
+          :unit      => '€',
+          :precision => 2,
+          :format    => '%n %u'
+        }
+      }
+    },
+        
+    :active_record => {
+      :error => {
+        :header_message => ["No s'ha pogut desar {{object_name}}: 1 error.", "No s'ha pogut desar {{object_name}}: {{count}} errors."],
+        :message        => "Si us plau revisa els següents camps:"
+      },
+      :error_messages => {
+        :inclusion                => "no està inclòs a la llista",
+        :exclusion                => "no es troba disponible",
+        :invalid                  => "no és pas vàlid",
+        :confirmation             => "no coincideix amb la confirmació",
+        :accepted                 => "cal acceptar-lo",
+        :empty                    => "no pot estar buit",
+        :blank                    => "no pot estar en blanc",
+        :too_long                 => "és massa llarg (el màxim són {{count}} caràcters)",
+        :too_short                => "és massa curt (el mínim són {{count}} caràcters)",
+        :wrong_length             => "no té una logitud correcta (cal que siguin {{count}} caràcters)",
+        :taken                    => "no es troba disponible",
+        :not_a_number             => "no és pas un nombre",
+        :greater_than             => "cal que sigui més gran que {{count}}",
+        :greater_than_or_equal_to => "cal que sigui més gran o igual que {{count}}",
+        :equal_to                 => "cal que sigui igual que {{count}}",
+        :less_than                => "cal que sigui més petit que {{count}}",
+        :less_than_or_equal_to    => "cal que sigui més petit o igual que {{count}}",
+        :odd                      => "ha de ser senar",
+        :even                     => "ha de ser parell",
+      }
+    },
+      
+    :txt => {
+      :main_title => "Localitzar Rails",
+      :app_name => "Aplicació de demostració",
+      :sub_title => "com traduir la teva aplicació amb el suport per a i18n de Rails",
+      :contents => "Contingut",
+      :menu => {
+        :introduction => "Introducció",
+        :about => "Sobre l'aplicació",
+        :setup => "Instal·lació",
+        :date_formats => "Formats per a dates",
+        :time_formats => "Formats per a hores"
+      },
+      :about => {
+        :title    => "Sobre aquesta aplicació de demostració",
+        :author   => "Aquesta aplicació de demostració ha estat escrita per {{mail_1}}.",
+        :feedback => "No dubtis a enviar-me qualsevol comentari. Visita també {{blog_href}}, on regularment escric sobre Rails i altres coses.",
+        :licence  => "Aquesta aplicació de demostració i tot el seu contingut es troben sota la llicència {{licence_href}}. Si volguessis usar-la d'una manera no permesa per la llicència si us plau posa't en contacte amb mi per demanar-me permís."
+      },
+      :active_record => {
+        :too_lazy => "Cap exemple per aquí perquè sóc massa gandul com per posar-me a pensar en atributs per a demostrar <strong>tots</strong> els missatges d'error possibles.",
+        :easy_to_understand => "Tanmateix, és molt senzill d'entendre."
+      },
+      :date_formats => {
+        :rails_standards_work => "Els formats estàndards de Rails (Date::DATE_FORMATS) segueixen funcionant:"
+      },
+      :date_helper => {
+        :date_time_title => "Distància dates/temps",
+        :forms_title => "Formularis"
+      },
+      :index => {
+        :others => "altres",
+        :introduction => "Darrerament {{sven_blog}} i {{sven_github}} han treballat de valent per a fer més fàcil la internacionalització i traducció d'aplicacions Rails.",
+        :story_so_far => "Aquesta aplicació serveix per a demostrar com s'usen les funcionalitats que s'han implementat fins ara per a localitzar grans parts de la teva aplicació Rails."
+      },
+      :number_helper => {
+        :note_one => "Nota: <code>number_to_phone</code> no ha estat encara traduïda i és possible que no ho arribi a estar mai &mdash; si més no en el <i>core</i>. Estigues a l'aguait de nous plugins per a internacionalització i localització com ara la nova versió de {{globalize}}, doncs possiblement suportin aquesta mena de coses.",
+        :note_two => "Altra nota: <code>number_to_currency</code>, <code>number_to_percentage</code> i <code>number_to_human_size</code> fan anar <code>number_with_precision</code> internament i <code>number_with_precision</code> a la seva vegada usa <code>number_with_delimiter</code> internament."
+      },
+      :setup => {
+        :freezing_edge_and_adding => "Congelant <i>edge</i> i instal·lant el plugin localized_dates",
+        :you_need_to_be_on_edge => "Per tal d'usar les noves funcionalitats i18n cal que estiguis a <i>edge</i>:",
+        :date_time_formats => "Per a formats de dates i hores cal instal·lar a més a més el plugin {{localized_dates_link}}:",
+        :config_locale => "Configurar la llengua",
+        :best_place => "El millor lloc on posar les diferents traduccions en la meva opinió és <code>config/locales</code>. El plugin localized_dates hi copiarà arxius corresponents a en-US i de-AT. Els pots modificar i estendre, així com afegir altres fitxers per a suportar altres llengües.",
+        :locale => "Aquesta és la configuració pel Català que aquesta aplicació fa servir:",
+        :defaults => "Cal també que configuris la llengua per defecte a <code>config/environment.rb</code> o un inicialitzador.",
+        :locale_structure_title => "Unes paraules sobre l'estructura del fitxer de configuració",
+        :locale_structure_number => "Potser t'has adonat que dins <code>:number</code> hem definit <code>:format</code> i <code>:currency</code>. En general les configuracions segueixen una jerarquia. És a dir, les quantitats amb moneda són nombres, els percentatges també són nombres, etc. <code>:currency</code> pot redefinir el <code>:format</code> heredat (en el nostre cas canviem <code>:precision</code> a 2 en comptes de 3) o estendre'l (hi hem afegit dues opcions més, <code>:unit</code> i <code>:format</code>).",
+        :locale_structure_date_time => "El mateix passa amb dates i hores: Si cal, <code>:datetime</code> i <code>:time_with_zone</code> poden usar-se per a configurar formats espcífics, en comptes de fer anar el de <code>:time</code>. No obstant això, normalment <code>:time</code> ja t'estarà bé."
+      },
+      :time_formats => {
+        :rails_standards_work => "Els formats estàndards de Rails (Time::DATE_FORMATS) segueixen funcionant:"
+      }
+    }
+  }
+}
\ No newline at end of file
-- 
1.5.4.1

