# Noob: HOWTO Externalize Strings?

**URL:** <https://www.ruby-forum.com/t/noob-howto-externalize-strings/88122>\
**Category:** Rails\
**Created:** [March 8, 2007, 11:25am UTC](https://www.ruby-forum.com/t/noob-howto-externalize-strings/88122 "2007-03-08T11:25:27Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![Thogra](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/ea666f/32.png) [@Thogra](https://www.ruby-forum.com/u/Thogra)\
**Post date:** [March 8, 2007, 11:25am UTC](https://www.ruby-forum.com/t/noob-howto-externalize-strings/88122/1 "2007-03-08T11:25:27Z")

</div>

Hi all,

I’m totally new to Rails and was wondering how to externalize message  
strings in a file so I can use them throughout my application. Is  
there something already provided with Rails ?

Thanks

Thogra

---

<div class="post-metadata">

**Author:** ![Thogra](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/ea666f/32.png) [@Thogra](https://www.ruby-forum.com/u/Thogra)\
**Post date:** [March 8, 2007, 12:02pm UTC](https://www.ruby-forum.com/t/noob-howto-externalize-strings/88122/2 "2007-03-08T12:02:31Z")

</div>

Thogra

> I’m totally new to Rails and was wondering how to externalize  
> message  
> strings in a file

In environment.rb:

# load the strings file :

APP\_TEXT = YAML::load(File.open("#{RAILS\_ROOT}/config/messages.yml"))  
rescue {}

In config/message.yml:  
db\_save:  
success: Success  
failure: Failure

In views/controller: example:  
…  
flash[:notice] = tx\_(‘db\_save/success’)  
…

In application.rb

def dev?  
@is\_dev||=(ENV[‘RAILS\_ENV’]==‘development’)  
end  
def tx\_(key)  
a,b = key.split(’/’)  
APP\_TEXT[a][b]+(dev? ? ‘°’ : ‘’)  
end  
helper\_method :tx\_, :dev?

Note: this version adds a little ° after externalized string when in  
dev mode =\> you can see what’s hardcoded, and what’s externalized.

Alain

---

<div class="post-metadata">

**Author:** ![Thogra](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/ea666f/32.png) [@Thogra](https://www.ruby-forum.com/u/Thogra)\
**Post date:** [March 8, 2007, 1:26pm UTC](https://www.ruby-forum.com/t/noob-howto-externalize-strings/88122/3 "2007-03-08T13:26:53Z")

</div>

Thanks Alain, this helped me a lot !!

---

<div class="post-metadata">

**Author:** ![Thogra](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/ea666f/32.png) [@Thogra](https://www.ruby-forum.com/u/Thogra)\
**Post date:** [March 8, 2007, 4:42pm UTC](https://www.ruby-forum.com/t/noob-howto-externalize-strings/88122/4 "2007-03-08T16:42:21Z")

</div>

I was excpecting the ‘tx\_(key)’ method to be available in functional  
test as well if defined in application.rb. But it isn’t.

Do I have to duplicate the method(s) ? If, what would be the right  
place for it ? test\_helper.rb ?
