| 
			
				|  | CalendarXP.net Support Most forums here are private and invisible to public.
 
 |  
 
	
		| View previous topic :: View next topic |  
		| Author | Message |  
		| massimogentilini 
 
 
 Joined: 17 Jul 2006
 Posts: 7
 
 
 | 
			
				|  Posted: Wed Sep 27, 2006 8:06 am    Post subject: Problem with JavaScript encoding |   |  
				| 
 |  
				| We've developed a dynamic localize calendar aspx page to automatically localize calendar 
 
  	  | Code: |  	  | private void Page_Load(object sender, System.EventArgs e)
 {
 // Localize calendar funcions
 // This dynamically generated javascript file contains all the information about the
 // culture for the calendar
 Response.Clear();
 Response.ContentType = "application/x-javascript";
 // Response.Charset = "";
 //Response.Charset = "utf-8";
 //Response.ContentEncoding = System.Text.Encoding.UTF8;
 
 CultureInfo ci = LoggedUserManager.CurrentUser.Culture;
 StringBuilder sb = new StringBuilder();
 
 
 // var giDatePos=0;   // date format sequence  0: D-M-Y ; 1: M-D-Y; 2: Y-M-D
 // Need to find the proper date format for the culture
 
 sb.Append(System.Environment.NewLine);
 DateTimeFormatInfo cf = ci.DateTimeFormat;
 string calDateFormat = " giDatePos=0;"; // Fallback in case of strange situations
 if(cf.ShortDatePattern.ToUpper().StartsWith("Y"))
 calDateFormat = " giDatePos=2;";
 if(cf.ShortDatePattern.ToUpper().StartsWith("M"))
 calDateFormat = " giDatePos=1;";
 sb.Append(calDateFormat);
 
 // Oversimplification: split according to date separator and use always the middle field
 // to check for month lenght and padding. Checked ONLY with English, Slovak, Czech, Svedish, Russian, Polish and Italian
 string[] dateTest = cf.ShortDatePattern.Split(ci.DateTimeFormat.DateSeparator.ToCharArray());
 if(dateTest[1].Trim().Length == 1) // Manage cultures with non 0 padding like slovak
 sb.Append("gbPadZero=false;");
 
 if(dateTest[1].StartsWith(" "))
 sb.Append(" gsSplit=\"" + ci.DateTimeFormat.DateSeparator + " \";");
 else
 //var gsSplit="/";   // separator of date string. If set it to empty string, then giMonthMode and gbPadZero will be fixed to 0 and true.
 sb.Append(" gsSplit=\"" + ci.DateTimeFormat.DateSeparator + "\";");
 
 
 //var gMonths=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];
 sb.Append(System.Environment.NewLine)
 .Append(" gMonths=[");
 for(int i=0; i<ci.DateTimeFormat.AbbreviatedMonthNames.Length-1; i++)
 sb.Append("\"" + ci.DateTimeFormat.AbbreviatedMonthNames[i].ToString() + "\",");
 sb.Remove(sb.Length-1,1); // remove last comma
 sb.Append("];");
 
 
 //var gWeekDay=["Su","Mo","Tu","We","Th","Fr","Sa"];   // weekday caption from Sunday to Saturday
 sb.Append(System.Environment.NewLine)
 .Append(" gWeekDay=[");
 for(int i=0; i<ci.DateTimeFormat.AbbreviatedDayNames.Length; i++)
 if(ci.DateTimeFormat.AbbreviatedDayNames[i].ToString().Length > 2) // Manage situation for days with a single letter name (sunday in polish)
 sb.Append("\"" + ci.DateTimeFormat.AbbreviatedDayNames[i].ToString().Substring(0,2) + "\",");
 else
 sb.Append("\"" + ci.DateTimeFormat.AbbreviatedDayNames[i].ToString() + "\",");
 sb.Remove(sb.Length-1,1); // remove last comma
 sb.Append("];");
 
 // Generic functions, needed to properly align and define the calendar localization
 sb.Append(System.Environment.NewLine)
 .Append(" giFirstDOW=1;")
 .Append(System.Environment.NewLine)
 .Append(" giSat=(6-giFirstDOW)%7;")
 .Append(System.Environment.NewLine)
 .Append(" giSun=(7-giFirstDOW)%7;")
 .Append(System.Environment.NewLine)
 .Append(" gsOutOfRange=\"Invalid date!\";") // TODO, localize in multilanguage file as usual
 .Append(System.Environment.NewLine);
 
 sb.Append(System.Environment.NewLine);
 byte[] buf = System.Text.Encoding.UTF8.GetBytes(sb.ToString());
 Response.AddHeader("Content-Length", buf.Length.ToString());
 Response.OutputStream.Write(buf, 0, buf.Length);
 
 }
 
 
 | 
 
 and reference it using this
 
 
  	  | Code: |  	  | <iframe width=174 height=189 name="gToday:normal:agenda.js:gfPop:LocalizeCalendar.aspx" id="gToday:normal:agenda.js:gfPop:LocalizeCalendar.aspx" src="calendar/ipopeng.htm" scrolling="no" frameborder="0" style="visibility:visible; z-index:999; position:absolute; top:-500px; left:-500px;"></iframe> | 
 
 Problem is that for the Czech culture it do not correctly show the day names, probably for some problem in the UTF encoding or character escaping.
 
 We believe it's some problem related to IE6 and specific to this browser, because the same code works perfectly with IE7, Opera and Firefox.
 
 Do you have any suggestion about how to set the encoding for JavaScript dynamically generated pages?
 
 BTW: if someone uses this code and maybe improves it please let me know!
 
 Ciao
 Massimo
 |  |  
		| Back to top |  |  
		|  |  
		| massimogentilini 
 
 
 Joined: 17 Jul 2006
 Posts: 7
 
 
 | 
			
				|  Posted: Wed Sep 27, 2006 9:16 am    Post subject: |   |  
				| 
 |  
				| Sorry, already solved. 
 You need to pass utf-8 as the fifth parameter in the iframe part:
 
 gToday:normal:agenda.js:gfPop:LocalizeCalendar.aspx:utf-8
 
 Ciao
 Massimo[/b]
 |  |  
		| Back to top |  |  
		|  |  
		| calendarxp Site Admin
 
 
 Joined: 30 Jan 2005
 Posts: 409
 
 
 | 
			
				|  Posted: Wed Sep 27, 2006 12:36 pm    Post subject: |   |  
				| 
 |  
				| Yes, that's the correct solution that we were about to suggest. Good to know you found it sooner. :) _________________
 Copyright 2003-2011 Idemfactor Solutions, Inc. All rights reserved.
 |  |  
		| Back to top |  |  
		|  |  
		|  |  
  
	| 
 
 | You cannot post new topics in this forum You cannot reply to topics in this forum
 You cannot edit your posts in this forum
 You cannot delete your posts in this forum
 You cannot vote in polls in this forum
 You cannot attach files in this forum
 You cannot download files in this forum
 
 |  
 Copyright 2003- Idemfactor Solutions, Inc. All rights reserved.
 Powered by phpBB © 2001, 2005 phpBB Group
 
 |