3993: Add Jewish holidays and translate holidays and countries names (part 1), by igal_shapira

svn: r15438
This commit is contained in:
Doug Blank 2010-05-21 12:18:21 +00:00
parent 2a0ae02088
commit 3af2af9dd2
2 changed files with 54 additions and 5 deletions

View File

@ -1,7 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<calendar>
<country name="">
</country>
<country name="United States">
<date name="New Year's Eve" value="*/12/31" type="national" />
<date name="New Year's Day" value="*/1/1" type="national" />
@ -521,4 +519,34 @@
<date name="Възнесение господне" value="2011/6/2" type="religious" />
<date name="Възнесение господне" value="2012/5/24" type="religious" />
</country>
<country name="Jewish Holidays">
<date name="Purim" value="> passover(y)" offset="-30"/>
<date name="Passover" value="> passover(y)" offset="0"/>
<date name="2 of Passover" value="> passover(y)" offset="1"/>
<date name="3 of Passover" value="> passover(y)" offset="2"/>
<date name="4 of Passover" value="> passover(y)" offset="3"/>
<date name="5 of Passover" value="> passover(y)" offset="4"/>
<date name="6 of Passover" value="> passover(y)" offset="5"/>
<date name="7 of Passover" value="> passover(y)" offset="6"/>
<date name="Shavuot" value="> passover(y)" offset="50"/>
<date name="Rosh Ha'Shana" value="> passover(y)" offset="163"/>
<date name="Rosh Ha'Shana 2" value="> passover(y)" offset="164"/>
<date name="Yom Kippur" value="> passover(y)" offset="172"/>
<date name="Sukot" value="> passover(y)" offset="177"/>
<date name="2 of Sukot" value="> passover(y)" offset="178"/>
<date name="3 of Sukot" value="> passover(y)" offset="179"/>
<date name="4 of Sukot" value="> passover(y)" offset="180"/>
<date name="5 of Sukot" value="> passover(y)" offset="181"/>
<date name="6 of Sukot" value="> passover(y)" offset="182"/>
<date name="7 of Sukot" value="> passover(y)" offset="183"/>
<date name="Simhat Tora" value="> passover(y)" offset="184"/>
<date name="Hanuka" value="> hanuka(y)" offset="0"/>
<date name="2 of Hanuka" value="> hanuka(y)" offset="1"/>
<date name="3 of Hanuka" value="> hanuka(y)" offset="2"/>
<date name="4 of Hanuka" value="> hanuka(y)" offset="3"/>
<date name="5 of Hanuka" value="> hanuka(y)" offset="4"/>
<date name="6 of Hanuka" value="> hanuka(y)" offset="5"/>
<date name="7 of Hanuka" value="> hanuka(y)" offset="6"/>
<date name="8 of Hanuka" value="> hanuka(y)" offset="7"/>
</country>
</calendar>

View File

@ -27,6 +27,7 @@
#------------------------------------------------------------------------
from gen.ggettext import gettext as _
from xml.parsers import expat
from gen.lib.calendar import (gregorian_ymd, hebrew_sdn)
import datetime
import math
import const
@ -70,6 +71,26 @@ def easter(year):
day = l + 28 - 31 * (month / 4)
return "%d/%d/%d" % (year, month, day)
def passover(year):
"""
Returns the date of Passover in a given Gregorian year.
"""
heb_year = year + 3760
heb = hebrew_sdn(heb_year, 8, 15) #Passover, 15 Nissan
return "%d/%d/%d" % gregorian_ymd(heb)
def hanuka(year):
"""
Returns the date of first day of Hanuka in a given Gregorian year.
We can't use passover as an offset, because the year length changes.
The hebrew year have 6 possible lengths.
"""
heb_year = year + 3761 #Not 3760, because Hanuka is in Nov/Dec of the previous year
heb = hebrew_sdn(heb_year, 3, 25) #Hanuka, 25 Kislev
return "%d/%d/%d" % gregorian_ymd(heb)
def dst(year, area="us"):
"""
Return Daylight Saving Time start/stop in a given area ("us", "eu").
@ -149,7 +170,7 @@ class HolidayTable(object):
if country_element.get_name() == "country":
country_name = country_element.get_attribute("name")
if country_name not in HolidayTable.__countries:
HolidayTable.__countries.append(country_name)
HolidayTable.__countries.append(_(country_name))
def __init_table(self):
""" Initialize the holiday table structure. """
@ -188,7 +209,7 @@ class HolidayTable(object):
while date.year == year:
holidays = calendar.check_date(date)
for text in holidays:
self.__holidays[date.month][date.day].append(text)
self.__holidays[date.month][date.day].append(_(text))
date = date.fromordinal(date.toordinal() + 1)
def get_holidays(self, month, day):
@ -308,7 +329,7 @@ class _Holidays:
""" Parse the holiday date XML items """
for country_set in self.elements.get_children():
if country_set.get_name() == "country" and \
country_set.get_attribute("name") == self.country:
_(country_set.get_attribute("name")) == self.country:
for date in country_set.get_children():
if date.get_name() == "date":
data = {"value" : "",