Hi,
I am using Globalize plug-in extensively and I made some "tuning" to
it.
1. First I have added a method to search for strings that should be
translated (not visiting every page from the site).
2. Then I added a new method to be able to pass an array of arguments to
a string like: "%s likes %s and %s gave him %d bottles of %s".t /John
/milk /Doe /5 /beer This result into many strings added to the DB
because .t method is called for each replacement.
I added .t_p method that works like:
"%s likes %s and %s gave him %d bottles of %s".t_p("John",
"milk",
"Doe", 5, "beer")
3. Then a simple class with one method to auto translates strings using
bublefish powered by Systran.
All are very simple codes, but I think that it might help on a starting
project with globalize.
Codes:
2. In core_ext.rb add this:
def translate_p(arg = nil, default= nil)
Locale.translate(self, default, arg)
enD
alias :t_p :translate_p
Then in db_view_translator.rb change the fetch methid with this one:
def fetch(key, language, default = nil, arg = nil) # :nodoc:
# hack for "%d %d".t / [1,2]
if arg.kind_of?(Array)
real_default = default || key
result = fetch_from_cache(key, language, real_default, 1)
arg.each do |x|
if x.kind_of?(Numeric)
result.sub!(''%d'',x.to_s)
else
result.sub!(''%s'',x.to_s)
end
end
return result
# end of hack
else
# use argument as pluralization number, if number
num = arg.kind_of?(Numeric) ? arg : nil
# if there''s no translation, use default or original key
real_default = default || key
result = fetch_from_cache(key, language, real_default, num)
if num
return result.sub(''%d'', num.to_s)
else
return arg.nil? ? result : result.sub(''%s'',
arg.to_s)
end
end
end
1.add this to any controller and call it
def get_translateable_strings
Locale.clear_cache
Locale.translator.cache_reset
@strs = []
#getting untraslated strings from views (.rhtml files)
Dir.glob("#{RAILS_ROOT}/app/views/**/*.rhtml").collect do |f|
ll = File.read(f).scan(/[\"]([^\"]*)[\"]\.[t|t_p]/)
@strs << ll
ll =
File.read(f).scan(/[\'']([^\'']*)[\'']\.[t|t_p]/)
@strs << ll
end
#getting untraslated strings from helpers
Dir.glob("#{RAILS_ROOT}/app/helpers/**/*.rb").collect do |f|
ll = File.read(f).scan(/[\"]([^\"]*)[\"]\.[t|t_p]/)
@strs << ll
ll =
File.read(f).scan(/[\'']([^\'']*)[\'']\.[t|t_p]/)
@strs << ll
end
#getting untraslated strings from controllers
Dir.glob("#{RAILS_ROOT}/app/controllers/**/*.rb").collect do |f|
ll = File.read(f).scan(/[\"]([^\"]*)[\"]\.[t|t_p]/)
@strs << ll
ll =
File.read(f).scan(/[\'']([^\'']*)[\'']\.[t|t_p]/)
@strs << ll
end
#getting untraslated strings from environment.rb
Dir.glob("#{RAILS_ROOT}/config/environment.rb").collect do |f|
ll = File.read(f).scan(/[\"]([^\"]*)[\"]\.[t|t_p]/)
@strs << ll
end
@new_strs=Array.new
@new_strs=@strs.flatten.uniq.sort
LOCALES.values.each do |loc|
Locale.set "#{loc}"
@new_strs.each do |str|
str.to_s.translate
end
#translate error messages
ActiveRecord::Errors.default_error_messages.each_value do
|error_msg|
error_msg.translate
end
end
3.
require ''net/http''
require ''uri''
class Systran
TRANSLATOR_ENGINE = "http://www.babelfish.altavista.com/tr"
#Available options for trans_key:
#zh_en=>Chinese-simp to English
#zt_en=>Chinese-trad to English
#en_zh=>English to Chinese-simp
#en_zt=>English to Chinese-trad
#en_nl=>English to Dutch
#en_fr=>English to French
#en_de=>English to German
#en_el=>English to Greek
#en_it=>English to Italian
#en_ja=>English to Japanese
#en_ko=>English to Korean
#en_pt=>English to Portuguese
#en_ru=>English to Russian
#en_es=>English to Spanish
#nl_en=>Dutch to English
#nl_fr=>Dutch to French
#fr_nl=>French to Dutch
#fr_en=>French to English
#fr_de=>French to German
#fr_el=>French to Greek
#fr_it=>French to Italian
#fr_pt=>French to Portuguese
#fr_es=>French to Spanish
#de_en=>German to English
#de_fr=>German to French
#el_en=>Greek to English
#el_fr=>Greek to French
#it_en=>Italian to English
#it_fr=>Italian to French
#ja_en=>Japanese to English
#ko_en=>Korean to English
#pt_en=>Portuguese to English
#pt_fr=>Portuguese to French
#ru_en=>Russian to English
#es_en=>Spanish to English
#es_fr=>Spanish to French
def self.translate_string(string, trans_key)
url = URI.parse(TRANSLATOR_ENGINE)
http = Net::HTTP.post_form(url,
{"doit"=>"done",
"intl"=>"1",
"tt"=>"urltext",
"trtext"=>"#{string}",
"lp"=>"#{trans_key}",
"btnTrTxt"=>"Translate"})
begin
doc = http.body.split(''<input type=hidden name="q"
value="'')
doc = doc[1].split(''"><input type='')
rescue
doc = http.body.split(''<td bgcolor=white class=s><div
style=padding:10px;>'')
doc = doc[1].split(''</div></td>'')
end
@translated_text=doc[0].to_s
return @translated_text
end
end
--
Posted via http://www.ruby-forum.com/.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Talk" group.
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk
-~----------~----~----~----~------~----~------~--~---