[WG: I18N & L10N] Dates i18n in vm tools

DAVID ROLDAN MARTINEZ darolmar at upvnet.upv.es
Thu Jan 6 04:21:30 PST 2011


        Hi all,

        I'm reviewing dates handling in Sakai tools. The desired behaviour is to adapt dates displayed to users to the preferred timezone of this user. That is, if user A (timezone A), sets date X and user B (timezone B) sees date X, date X should be formatted according to timezone B.

        My knowledge about vm templates technology is quite limited so I appreciate any help you can give me. I started with Resources and Dropbox tool, and have checked that everything is ok. Then I check Assigments and found that is wasn't. This is due to the fact that Resources uses two own macros to generate date and time widget (they are at /resources/sakai_properties.vm):
#macro (resources_dateselectionwidget $prefix $suffix $current_value $dateFormat)
	#set($yearSelected = $current_value.year)
	#set($earliestYear = $yearSelected - 4)
	#set($latestYear = $yearSelected + 4)
	#set($monthSelected = $current_value.month)
	#set($daySelected = $current_value.day)
   
   #chef_dateselectionwidget("${prefix}_year${DOT}${suffix}" "${prefix}_month${DOT}${suffix}" "${prefix}_day${DOT}${suffix}" $earliestYear $latestYear $yearSelected $monthSelected $daySelected $dateFormat "")
#end

#macro(resources_timeSelectionWidget $prefix $suffix $current_value)
	#set($time = $current_value.toStringLocalFull())
	#set($hour = $current_value.breakdownLocal().hour)
	#set($minute = $current_value.breakdownLocal().min)
	#set($timeType = "am")
	
	#if($hour > 12)
		#set($hour = $hour - 12)
		#set($timeType = "pm")
	#elseif($hour == 12)
		#set($timeType = "pm")
	#elseif ($hour == 0)
		#set($hour = 12)
	#end
	
	<select name="${prefix}_hour${DOT}${suffix}" id="${prefix}_hour${DOT}${suffix}">
		#if($hour == 1) <option selected="selected" value="1">1</option> #else <option value="1">1</option> #end
		#if($hour == 2) <option selected="selected" value="2">2</option> #else <option value="2">2</option> #end
		#if($hour == 3) <option selected="selected" value="3">3</option> #else <option value="3">3</option> #end
		#if($hour == 4) <option selected="selected" value="4">4</option> #else <option value="4">4</option> #end
		#if($hour == 5) <option selected="selected" value="5">5</option> #else <option value="5">5</option> #end
		#if($hour == 6) <option selected="selected" value="6">6</option> #else <option value="6">6</option> #end 
		#if($hour == 7) <option selected="selected" value="7">7</option> #else <option value="7">7</option> #end
		#if($hour == 8) <option selected="selected" value="8">8</option> #else <option value="8">8</option> #end
		#if($hour == 9) <option selected="selected" value="9">9</option> #else <option value="9">9</option> #end
		#if($hour == 10) <option selected="selected" value="10">10</option> #else <option value="10">10</option> #end
		#if($hour == 11) <option selected="selected" value="11">11</option> #else <option value="11">11</option> #end
		#if($hour == 12) <option selected="selected" value="12">12</option> #else <option value="12">12</option> #end
	</select>
	<select name="${prefix}_minute${DOT}${suffix}" id="${prefix}_minute${DOT}${suffix}">
		#if($minute == 0) <option selected="selected" value="0">00</option> #else <option value="0">00</option> #end
		#if($minute == 5) <option selected="selected" value="5">05</option> #else <option value="5">05</option> #end
		#if($minute == 10) <option selected="selected" value="10">10</option> #else <option value="10">10</option> #end
		#if($minute == 15) <option selected="selected" value="15">15</option> #else <option value="15">15</option> #end
		#if($minute == 20) <option selected="selected" value="20">20</option> #else <option value="20">20</option> #end
		#if($minute == 25) <option selected="selected" value="25">25</option> #else <option value="25">25</option> #end
		#if($minute == 30) <option selected="selected" value="30">30</option> #else <option value="30">30</option> #end 
		#if($minute == 35) <option selected="selected" value="35">35</option> #else <option value="35">35</option> #end
		#if($minute == 40) <option selected="selected" value="40">40</option> #else <option value="40">40</option> #end
		#if($minute == 45) <option selected="selected" value="45">45</option> #else <option value="45">45</option> #end
		#if($minute == 50) <option selected="selected" value="50">50</option> #else <option value="50">50</option> #end
		#if($minute == 55) <option selected="selected" value="55">55</option> #else <option value="55">55</option> #end
	</select>
	<select name="${prefix}_ampm${DOT}${suffix}" id="${prefix}_ampm${DOT}${suffix}">
		#if($timeType =="am") <option selected="selected">am</option> #else <option>am</option> #end
		#if($timeType =="pm") <option selected="selected">pm</option> #else <option>pm</option> #end
	</select>
#end

        However, assignment and announcement uses directly:
#chef_dateselectionwidget("${prefix}_year${DOT}${suffix}" "${prefix}_month${DOT}${suffix}" "${prefix}_day${DOT}${suffix}" $earliestYear $latestYear $yearSelected $monthSelected $daySelected 

         And here is the problem. Resources uses $current_value, which an instance of org.sakaiproject.api.time.Time and org.sakaiproject.api.time.TimeBreakDown. Both of them, together with TimeService, take in consideration preferred timezones. That's why resources is correctly i18n (from the point of view of date handling) and assignment and announcment not.
 
         At this point, I think we should consider to move a macro similar to resources to velocity/tool/src/templates/vm/VM_chef_library.vm so that all templates can make use of this new macro instead of chef_dateselectionwidge.

         In the meantime, I've been trying to adapt this macro to assignment. My modifications works fine if resubmission are allowed but it doesn't is resubmission are disallowed. I know that this is because of the read/write proccess in state and context, but don't know how to solve this. I've wasted more than 5 hours debugging but haven't reach any conclussion.

          I would appreciate any help or guidance.
 
         Thank you very much in advance.

         David 


More information about the i18n mailing list