Hi,
you guys helped me very much the last time,
maybe you could help me again with a more general issue.
I would like to overwrite the translate method (and t alias) within
Rails' core I18n module.
I tried several things, first of all this one...
module I18n
class << self
alias_method :old_translate, :translate
def translate(key, options = {})
# my own translate method
options[:default] = 'blabla'
end
alias_method :t, :translate
end
end
This is required in my init.rb and even used, but only within my own
plugin. All the translate calls within my Rails app do not use it.
I also tried naming my module I18nHacks and using "extend I18n" or
"class << I18n".
How could I do this? Could you also drop some words about what
possibilities there are in general for extending/overwriting other
module's stuff?
Thank you so much!
Don
On 30 Dez. 2008, 20:09, Don Darone <[email protected]> wrote:
> Thanks for your replies.
>
> Guess I wasn't sure on how to use with_options.
>
> I made a small plugin with the methods I asked for.
> I tried to put in on git hub (first time working with)
> underhttp://github.com/DonDarone/localization_scopes/tree/master
>
> So check it out!
> All kinds of construcitve comments appreciated :-)
>
> Don
>
> On 30 Dez., 17:39, "Iain Hecker" <[email protected]> wrote:
>
> > Hi,
>
> > I've experimented with automatic scopes for views, but I lacked a good
> > way of deciding which scope to use, especially in the case of
> > partials. Say you have a product partial in the products controller.
> > How should that be scoped? You can scope per action, which can be
> > desirable (the submit button gets another text if it is edit or new)
> > or general for one that partial, but that means that you'd have to
> > translate double. If it is dependent on the file it is in, you cannot
> > make a distinction any more.
>
> > The first can be done with something like:
>
> > def t_with_view_scope(key, options = {})
> > t_without_view_scope(key, options) if options[:scope]
> > scope = __FILE__.sub(/.*\/app\//, "").sub(/\..*/,'').gsub(/\//,".")
> > # remove directory structure untill app and remove extension and
> > replace dir-separators with dots
> > t_without_view_scope(key, options.merge(:scope => scope))
> > end
>
> > The second:
>
> > def t_with_view_scope(key, options = {})
> > t_without_view_scope(key, options) if options[:scope]
> > scope = params[:controller] + '.' + params[:action]
> > t_without_view_scope(key, options.merge(:scope => scope))
> > end
>
> > alias_method_chain :t, :view_scope
>
> > (just out of the top of my head, so there might be problems with this code)
>
> > Cheers,
> > iain
>
> > On Tue, Dec 30, 2008 at 13:49, Sven Fuchs <[email protected]>
> > wrote:
>
> > > Hi Don,
>
> > > not sure, but here's a quick answer.
>
> > > How about using with_options?
>
> > > with_options :scope => :scope do |s|
> > > s.t(:key)
> > > end
>
> > > calls t(:key, :scope => :scope)
>
> > > On 30.12.2008, at 13:14, Don Darone wrote:
>
> > > > Hi,
>
> > > > we recently switched to Rails 2.2 and with that, also from the
> > > > simple_localization plugin to Rails core localization.
>
> > > > Since the plugin had two nice features that I couldn't find yet in
> > > > Rails core, I was wondering whether some of you already addressed
> > > > them.
>
> > > > In Rails localization you can add a scope to a single translation
> > > > using t(:my_key, :scope => 'general.scope')
>
> > > > 1. Scope blocks
> > > > In simple_localization you could open a block and let every
> > > > translation in there have the same scope, which was quite helpful
> > > > sometimes:
> > > > l_scope 'general_scope' do
> > > > t(:my_key)
> > > > t(:next_key)
> > > > t(:other_key)
> > > > end
> > > > (I omitted the Erb stuff to just give the idea).
>
> > > > 2. Scope contexts
> > > > In simple_localization you could use another method called lc to use
> > > > the scope of the context you are in, which was determined by the file
> > > > it was in. For example in a settings_controller, you could use lc
> > > > (:heading) which would correspond to t(:heading, :scope => 'settings')
> > > > for Rails core.
>
> > > > In a views/settings/list.html.erb you could to lc(:heading) to
> > > > automatically get a scope 'settings.list', like calling t
> > > > (:heading, :scope => 'settings.list')
>
> > > > I found these features very cool and was just wondering whether some
> > > > of you would miss them, too ;-)
>
> > > > Thanks for your comments!
>
> > > > Don
>
>
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"rails-i18n" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/rails-i18n?hl=en
-~----------~----~----~----~------~----~------~--~---