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