Localized Templates on edge rails

9 views
Skip to first unread message

José Valim

unread,
Jan 30, 2009, 12:33:04 PM1/30/09
to Ruby on Rails: Core
Hi guys,

I just saw that localized templates is now part of rails core (http://
github.com/rails/rails/commit/
a98cd7ca9b2f24a4500963e58ba5c37d6bdf9259). But I would like to discuss
how it was implemented.

I'm the maintainer of Localized Templates plugin (http://github.com/
josevalim/localized_templates/) and before implement it we had a
discussion on I18n group how it should work.

The first version of Localized Templates had the same "schema" as in
Rails core. Assuming MessagesController, index action and locale pt-
BR, our localized file would be:

app/views/messages/index.pt-BR.html.erb (controller/action.locale)

But the suggestions in I18n group defined a schema like this:

app/views/pt-BR/messages/index.html.erb (locale/controller/
action)

I already worked with both schemas and I personally think that "locale/
controller/action" is much better. I've talked with 5 or 6 other
people that were also using Localized Templates and they all had the
same point of view.

There are two main reasons:

1. It's easier to translate: in "locale/controller/action" schema,
to create a new language we just have to copy and paste the locale
root and start to translate. When using Rails current schema, we have
to go in each controller folder and rename all files... at the end I
was seriously thinking in developing a rake task that could do it for
me.

2. It's easier to mantain: in Rails current schema we usually end up
with our controllers folders full of files (4 locales x 4 files = 16
files). In the second schema everything is organized by locale roots.

Anyway, I brought this discussion to know what people think about both
schemas and which one would be the best for Rails core.

Well, that's all. :)

Cheers,

José Valim.

Clemens Kofler

unread,
Jan 31, 2009, 5:32:11 AM1/31/09
to Ruby on Rails: Core
I agree with José - for the same reasons he mentioned. Maybe it makes
sense to just drop the current implementation and include the
localized templates plugin (if that's possible)?

- Clemens

Sven Fuchs

unread,
Jan 31, 2009, 8:02:34 AM1/31/09
to rubyonra...@googlegroups.com
Not sure. I think this largely depends on how many views you want to
translate. If there are only some (e.g. ActionMailer notification
views) that you want to translate as a whole while everything else
uses the usual way of translating with I18n.t then having an extra
directory seems like overkill to me ... and the current implementation
much nicer.

Why not ship the current implementation as a simple way with Rails
core and still have José's plugin available for people who want to
rely on this approach for most of their views? Do these approaches
necessarily clash?

DHH

unread,
Jan 31, 2009, 9:18:29 AM1/31/09
to Ruby on Rails: Core
> Not sure. I think this largely depends on how many views you want to  
> translate. If there are only some (e.g. ActionMailer notification  
> views) that you want to translate as a whole while everything else  
> uses the usual way of translating with I18n.t then having an extra  
> directory seems like overkill to me ... and the current implementation  
> much nicer.
>
> Why not ship the current implementation as a simple way with Rails  
> core and still have José's plugin available for people who want to  
> rely on this approach for most of their views? Do these approaches  
> necessarily clash?

Agree with Sven. The current approach is an extraction from how I was
translating Basecamp. The vast majority of pages would be translated
inline with <%= t %> calls, but a handful of pages, like a help screen
or a blank slate, was easier to translate in its entirety.

The current approach is meant as a companion for an application that's
mostly using the <%= t %> approach to translation, but just has a few
complete translations. If that pattern doesn't fit your translation
style and you'd rather translate every single view in its entirety,
then I think the localized templates plugin is a fine approach to
continue using.

José Valim

unread,
Jan 31, 2009, 9:28:29 AM1/31/09
to Ruby on Rails: Core
Thanks for the feedback guys.

In fact, the approaches do not clash.
It would be hard to do in Rails 2.2, but in Rails 2.3 it's much
easier.

Anyway, since we are on the subject, what do you think of adding
Localized Rescue to core also?

This way we could have "public/404.en.html" and "public/404.pt-
BR.html".
I think this is the only missing part of Localized Templates.

Gist is here: http://gist.github.com/55555

jrom

unread,
Jan 31, 2009, 9:27:35 AM1/31/09
to Ruby on Rails: Core
Agreeing with David and Sven, but add some points: if you use the
locale/controller/action schema, you'll find a lot of rails apps with
just the "en" directory in app/views, which would mean an uglier
directory structure... And while translating the last rails app I've
done, just using some t(...)'s was enough in 98% of the cases...

José Valim

unread,
Jan 31, 2009, 6:43:21 PM1/31/09
to Ruby on Rails: Core
jrom, this is actually not a problem, because in Localized Templates
if the view cannot be found in "locale/controller/action", it will
look for it on "controller/action". :)

DHH

unread,
Jan 31, 2009, 7:28:39 PM1/31/09
to Ruby on Rails: Core
> Anyway, since we are on the subject, what do you think of adding
> Localized Rescue to core also?
>
> This way we could have "public/404.en.html" and "public/404.pt-
> BR.html".
> I think this is the only missing part of Localized Templates.
>
> Gist is here:http://gist.github.com/55555

I like that. Do turn it into a patch.

José Valim

unread,
Feb 1, 2009, 3:55:06 AM2/1/09
to Ruby on Rails: Core

jrom

unread,
Feb 2, 2009, 12:19:16 PM2/2/09
to Ruby on Rails: Core
Thanks for the clarification. Anyway, it would mess the directory
structure by merging locale with the default rails tree. "app/views/
controller/action[.locale]" just feels better to me.
Reply all
Reply to author
Forward
0 new messages