Where to put localization strings


#1

Hello!

I have a model that validates presence of the attribute title

class Entry < ActiveRecord::Base
validates_presence_of :title
:message => ‘empty title is a no no’
end

I also have a test of this valitation.

class EntryTest < Test::Unit::TestCase
fixtures :entries

def test_validate_title
first = entries(1)
first.title = ‘’
assert !first.save
assert_equal 1, first.errors.count
assert_equal ‘empty title is a no no’, first.errors.on(:title)
end
end

The thing is I want to replace the hard coded message strings with a
constant. Where should I put this constant according to best practice?
I’m thinking of creating a new module for this, but maybe there’s a
better way?

Best regards

Hans-Eric Grönlund - a newly hatched rails enthusiast


#2

I would suggest installing the localization generator… I forget the
exact name but in can easily be found by ‘gem search localization -r’

or by following this link http://rubyforge.org/projects/localization

From this amazing generator, you simply create one yaml file for each
external language you want to support.

in your specific example, you could do something like:
class Entry < ActiveRecord::Base
validates_presence_of :title
:message => l(empty_string_message)

where l() is a helper method in the localization gem that automatically
converts to the language specified in your environment

Then your test case would be something like like:

assert_equal l(empty_string_message), first.errors.on(:title)

I hope this helps and I am pretty new to rails myself but this gem is a
beauty and it couldn’t be simpler to work with!

ilan

Hans-Eric Grönlund wrote:

Hello!

I have a model that validates presence of the attribute title

class Entry < ActiveRecord::Base
validates_presence_of :title
:message => ‘empty title is a no no’
end

I also have a test of this valitation.

class EntryTest < Test::Unit::TestCase
fixtures :entries

def test_validate_title
first = entries(1)
first.title = ‘’
assert !first.save
assert_equal 1, first.errors.count
assert_equal ‘empty title is a no no’, first.errors.on(:title)
end
end

The thing is I want to replace the hard coded message strings with a
constant. Where should I put this constant according to best practice?
I’m thinking of creating a new module for this, but maybe there’s a
better way?

Best regards

Hans-Eric Grönlund - a newly hatched rails enthusiast