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 -~----------~----~----~----~------~----~------~--~---