Chris Armstrong
2007-Nov-04 21:49 UTC
Problems with flash messages and characters like ü ö ä
Hello,
Maybe somebody in here can help me. I''m developing an application with
different language support. I use globalize-rails
(http://www.globalize-rails.org) and as i''m from Switzerland i use
de-CH
as default language.
Of course de-CH has special characters like ü, ö, ä.
My problem is now that when i use special characters in the flash
variable i get some strange errors back. But only in the flash[:notice]
string and not in the flash[:error] string.
The error happens at following point:
flash[:notice] = "Das Produkt wurde erfolgreich über!".t
When i take the ü out of the string then it works.
The strange thing is that the ü in the second flash string does not
produce a problem:
flash[:error] = "Das Produkt konnte nicht angelegt über werden!".t
This is a really strange error and it turns me round the bend since 2
days.
It would be great if somebody could give me some hints where the problem
could be located.
Thanks for your help.
Here the error message:
C:/INSTAN~2/rails_apps/bonuspoints/app/controllers/admin_controller.rb:18:
syntax error, unexpected tCONSTANT, expecting kEND
flash[:error] = "Das Produkt konnte nicht
hinzugef�gt werden!".t
^
C:/INSTAN~2/rails_apps/bonuspoints/app/controllers/admin_controller.rb:26:
syntax error, unexpected tIDENTIFIER, expecting kEND
administrator = Administrator.find(:first, :conditions =>
["username = BINARY ? AND password = BINARY ?",
^
C:/INSTAN~2/rails_apps/bonuspoints/app/controllers/admin_controller.rb:26:
syntax error, unexpected tIDENTIFIER, expecting kDO or ''{'' or
''(''
administrator = Administrator.find(:first, :conditions =>
["username = BINARY ? AND password = BINARY ?",
^
C:/INSTAN~2/rails_apps/bonuspoints/app/controllers/admin_controller.rb:27:
syntax error, unexpected '']'', expecting kEND
params[:administrator][:username],
params[:administrator][:password]])
^
C:/INSTAN~2/rails_apps/bonuspoints/app/controllers/admin_controller.rb:71:
syntax error, unexpected $end, expecting kEND
Here the admin controller
class AdminController < ApplicationController
before_filter :authenticate_administrator, :except => [:login]
# Pick a unique cookie name to distinguish our session data from
others''
session :session_key => ''_bonuspoints_admin_session_id''
def new_product
@product = Product.new
if request.post?
params[:product][''picture_data'']
@params[:file][:content].read
params[:product][''picture_name'']
@params[:file][:content].original_filename.chomp
params[:product][''picture_content_type'']
@params[:file][:content].content_type.chomp
@product = Product.new(params[:product])
if @product.save
flash[:notice] = "Das Produkt wurde erfolgreich
hinzugefügt!".t
redirect_to :action => ''list_product''
else
flash[:error] = "Das Produkt konnte nicht hinzugefügt
werden!".t
render :action => ''new_product''
end
end
end
def login
if request.post?
administrator = Administrator.find(:first, :conditions =>
["username = BINARY ? AND password = BINARY ?",
params[:administrator][:username],
params[:administrator][:password]])
if administrator
session[:administrator] = administrator
redirect_to :controller => ''admin'', :action
=>
''stats_overview''
else
flash[:error] = "Die Anmeldung ist fehlgeschlagen!"
render :action => ''login''
end
end
end
def logout
session[:administrator] = nil
flash[:notice] = "Sie haben sich erfolgreich abgemeldet!"
redirect_to :action => ''login''
end
protected
def authenticate_administrator
unless session[:administrator]
flash[:error] = "Sie sind zur Zeit nicht angemeldet!"
redirect_to :controller => ''admin'', :action
=> ''login''
end
end
def stream_csv
filename = params[:action] + ".csv"
#this is required if you want this to work with IE
if request.env[''HTTP_USER_AGENT''] =~ /msie/i
headers[''Pragma''] = ''cache''
headers["Content-type"] = "text/plain"
headers[''Cache-Control''] =
''private''
headers[''Content-Disposition''] = "attachment;
filename=\"#{filename}\""
headers[''Expires''] = "0"
else
headers["Content-Type"] ||= ''text/csv''
headers["Content-Disposition"] = "attachment;
filename=\"#{filename}\""
end
render :text => Proc.new { |response, output|
csv = FasterCSV.new(output, :col_sep => ";", :row_sep =>
"\r\n")
yield csv }
end
end
Here the application controller:
# Filters added to this controller apply to all controllers in the
application.
# Likewise, all the methods added will be available for all controllers.
class ApplicationController < ActionController::Base
before_filter :set_charset, :set_locale
model :cart
def set_charset
content_type = headers["Content-Type"] ||
"text/html"
if /^text\//.match(content_type)
headers["Content-Type"] = "#{content_type};
charset=utf-8"
end
#content_type = headers["Content-Type"] ||
"text/html"
#if /^text\//.match(content_type)
# headers["Content-Type"] = "#{content_type};
charset=iso-8859-1"
#end
end
def set_locale
#Locale.set ''de-CH''
if !params[:locale].nil? &&
LOCALES.keys.include?(params[:locale])
Locale.set LOCALES[params[:locale]]
else
redirect_to params.merge( ''locale'' =>
Locale.base_language.code )
end
end
protected
def authenticate
unless session[:user]
flash[:error] = "Sie sind zur Zeit nicht angemeldet!".t
redirect_to :controller => ''user'', :action
=> ''login''
end
end
# used for calculating the points of the user
def calculate_user_points
if session[:user]
@debited_transactions = Accounttransaction.find(:all,
:conditions =>
"user_id=''#{session[:user][:id]}''")
@pending_transactions = Accounttransaction.find(:all,
:conditions => "user_id=''#{session[:user][:id]}'' and
pending_status=''P''")
@accepted_transactions = Accounttransaction.find(:all,
:conditions => "user_id=''#{session[:user][:id]}'' and
pending_status=''A''")
@declined_transactions = Accounttransaction.find(:all,
:conditions => "user_id=''#{session[:user][:id]}'' and
pending_status=''D''")
@total_point_credit count_point_credit(@accepted_transactions)
@total_point_debit count_point_debit(@debited_transactions)
@total_point_pending count_point_credit(@pending_transactions)
@total_point_declined count_point_credit(@declined_transactions)
end
end
# used to count total points
def count_point_credit(records)
total_credit = 0
records.each do |r|
total_credit += r.points_credited.to_i
end
return total_credit
end
def count_point_debit(records)
total_debit = 0
records.each do |r|
total_debit += r.points_debited.to_i
end
return total_debit
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@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---