more translated strings in gramps34 Chinese date handler
(but it is still not enabled, as it awaits more testing)
This commit is contained in:
parent
fd2db583c1
commit
755eeaf1dc
@ -18,20 +18,17 @@
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
#
|
||||
# DateHandler/_Date_zh.py
|
||||
# $Id$
|
||||
#
|
||||
|
||||
"""
|
||||
Simplified-Chinese-specific classes for parsing and displaying dates.
|
||||
"""
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# Python modules
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
|
||||
"""
|
||||
Chinese-specific classes for parsing and displaying dates.
|
||||
"""
|
||||
|
||||
from __future__ import unicode_literals
|
||||
import re
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
@ -39,7 +36,6 @@ import re
|
||||
# GRAMPS modules
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
|
||||
from gen.lib import Date
|
||||
from _DateParser import DateParser
|
||||
from _DateDisplay import DateDisplay
|
||||
@ -47,147 +43,128 @@ from _DateHandler import register_datehandler
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# Chinese parser
|
||||
# Simplified-Chinese parser
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
class DateParserZH(DateParser):
|
||||
class DateParserZH_CN(DateParser):
|
||||
"""
|
||||
Convert a text string into a Date object. If the date cannot be
|
||||
converted, the text string is assigned.
|
||||
"""
|
||||
|
||||
# translate english strings into chinese
|
||||
|
||||
# modifiers before the date
|
||||
modifier_to_int = {
|
||||
u'before' : Date.MOD_BEFORE, u'bef' : Date.MOD_BEFORE,
|
||||
u'bef.' : Date.MOD_BEFORE, u'after' : Date.MOD_AFTER,
|
||||
u'aft' : Date.MOD_AFTER, u'aft.' : Date.MOD_AFTER,
|
||||
u'about' : Date.MOD_ABOUT, u'abt.' : Date.MOD_ABOUT,
|
||||
u'abt' : Date.MOD_ABOUT, u'circa' : Date.MOD_ABOUT,
|
||||
u'c.' : Date.MOD_ABOUT, u'around' : Date.MOD_ABOUT,
|
||||
'以前' : Date.MOD_BEFORE,
|
||||
'以后' : Date.MOD_AFTER,
|
||||
'大约' : Date.MOD_ABOUT,
|
||||
}
|
||||
|
||||
month_to_int = DateParser.month_to_int
|
||||
|
||||
month_to_int[u"正"] = 1
|
||||
month_to_int[u"一"] = 1
|
||||
month_to_int[u"zhēngyuè"] = 1
|
||||
month_to_int[u"二"] = 2
|
||||
month_to_int[u"èryuè"] = 2
|
||||
month_to_int[u"三"] = 3
|
||||
month_to_int[u"sānyuè"] = 3
|
||||
month_to_int[u"四"] = 4
|
||||
month_to_int[u"sìyuè"] = 4
|
||||
month_to_int[u"五"] = 5
|
||||
month_to_int[u"wǔyuè"] = 5
|
||||
month_to_int[u"六"] = 6
|
||||
month_to_int[u"liùyuè"] = 6
|
||||
month_to_int[u"七"] = 7
|
||||
month_to_int[u"qīyuè"] = 7
|
||||
month_to_int[u"八"] = 8
|
||||
month_to_int[u"bāyuè"] = 8
|
||||
month_to_int[u"九"] = 9
|
||||
month_to_int[u"jiǔyuè"] = 9
|
||||
month_to_int[u"十"] = 10
|
||||
month_to_int[u"shíyuè"] = 10
|
||||
month_to_int[u"十一"] = 11
|
||||
month_to_int[u"shíyīyuè"] = 11
|
||||
month_to_int[u"十二"] = 12
|
||||
month_to_int[u"shí'èryuè"] = 12
|
||||
month_to_int[u"假閏"] = 13
|
||||
month_to_int[u"jiǎ rùn yùe"] = 13
|
||||
|
||||
# translate english strings into chinese
|
||||
month_to_int["正"] = 1
|
||||
month_to_int["一"] = 1
|
||||
month_to_int["zhēngyuè"] = 1
|
||||
month_to_int["二"] = 2
|
||||
month_to_int["èryuè"] = 2
|
||||
month_to_int["三"] = 3
|
||||
month_to_int["sānyuè"] = 3
|
||||
month_to_int["四"] = 4
|
||||
month_to_int["sìyuè"] = 4
|
||||
month_to_int["五"] = 5
|
||||
month_to_int["wǔyuè"] = 5
|
||||
month_to_int["六"] = 6
|
||||
month_to_int["liùyuè"] = 6
|
||||
month_to_int["七"] = 7
|
||||
month_to_int["qīyuè"] = 7
|
||||
month_to_int["八"] = 8
|
||||
month_to_int["bāyuè"] = 8
|
||||
month_to_int["九"] = 9
|
||||
month_to_int["jiǔyuè"] = 9
|
||||
month_to_int["十"] = 10
|
||||
month_to_int["shíyuè"] = 10
|
||||
month_to_int["十一"] = 11
|
||||
month_to_int["shíyīyuè"] = 11
|
||||
month_to_int["十二"] = 12
|
||||
month_to_int["shí'èryuè"] = 12
|
||||
month_to_int["假閏"] = 13
|
||||
month_to_int["jiǎ rùn yùe"] = 13
|
||||
|
||||
calendar_to_int = {
|
||||
'gregorian' : Date.CAL_GREGORIAN,
|
||||
'阳历' : Date.CAL_GREGORIAN,
|
||||
'g' : Date.CAL_GREGORIAN,
|
||||
'julian' : Date.CAL_JULIAN,
|
||||
'儒略历' : Date.CAL_JULIAN,
|
||||
'j' : Date.CAL_JULIAN,
|
||||
'hebrew' : Date.CAL_HEBREW,
|
||||
'希伯来历' : Date.CAL_HEBREW,
|
||||
'h' : Date.CAL_HEBREW,
|
||||
'islamic' : Date.CAL_ISLAMIC,
|
||||
'伊斯兰历' : Date.CAL_ISLAMIC,
|
||||
'i' : Date.CAL_ISLAMIC,
|
||||
'french' : Date.CAL_FRENCH,
|
||||
'french republican': Date.CAL_FRENCH,
|
||||
'法国共和历' : Date.CAL_FRENCH,
|
||||
'f' : Date.CAL_FRENCH,
|
||||
'persian' : Date.CAL_PERSIAN,
|
||||
'伊郎历' : Date.CAL_PERSIAN,
|
||||
'p' : Date.CAL_PERSIAN,
|
||||
'swedish' : Date.CAL_SWEDISH,
|
||||
'瑞典历' : Date.CAL_SWEDISH,
|
||||
's' : Date.CAL_SWEDISH,
|
||||
}
|
||||
|
||||
# translate english strings into chinese
|
||||
|
||||
quality_to_int = {
|
||||
u'estimated' : Date.QUAL_ESTIMATED,
|
||||
u'est.' : Date.QUAL_ESTIMATED,
|
||||
u'est' : Date.QUAL_ESTIMATED,
|
||||
u'calc.' : Date.QUAL_CALCULATED,
|
||||
u'calc' : Date.QUAL_CALCULATED,
|
||||
u'calculated' : Date.QUAL_CALCULATED,
|
||||
'据估计' : Date.QUAL_ESTIMATED,
|
||||
'据计算' : Date.QUAL_CALCULATED,
|
||||
}
|
||||
|
||||
# translate english strings into chinese
|
||||
|
||||
bce = [u"before calendar", u"negative year"] + DateParser.bce
|
||||
# FIXME translate these English strings into simplified-Chinese ones
|
||||
bce = ["before calendar", "negative year"] + DateParser.bce
|
||||
|
||||
def init_strings(self):
|
||||
"""
|
||||
This method compiles regular expression strings for matching dates.
|
||||
|
||||
Most of the re's in most languages can stay as is. span and range
|
||||
most likely will need to change. Whatever change is done, this method
|
||||
may be called first as DateParser.init_strings(self) so that the
|
||||
invariant expresions don't need to be repeteadly coded. All differences
|
||||
can be coded after DateParser.init_strings(self) call, that way they
|
||||
override stuff from this method. See DateParserRU() as an example.
|
||||
"""
|
||||
DateParser.init_strings(self)
|
||||
|
||||
# day: 日 ; month : 月 ; year : 年
|
||||
|
||||
# See DateParser class; translate english strings (from/to, between/and) into chinese
|
||||
# do not translate <start> and <stop>
|
||||
|
||||
self._span = re.compile(u"(from)\s+(?P<start>.+)\s+to\s+(?P<stop>.+)",
|
||||
re.IGNORECASE)
|
||||
self._range = re.compile(u"(bet|bet.|between)\s+(?P<start>.+)\s+and\s+(?P<stop>.+)",
|
||||
re.IGNORECASE)
|
||||
_span_1 = ['自']
|
||||
_span_2 = ['至']
|
||||
_range_1 = ['介于']
|
||||
_range_2 = ['与']
|
||||
self._span = re.compile("(%s)\s+(?P<start>.+)\s+(%s)\s+(?P<stop>.+)" %
|
||||
('|'.join(_span_1), '|'.join(_span_2)),
|
||||
re.IGNORECASE)
|
||||
self._range = re.compile("(%s)\s+(?P<start>.+)\s+(%s)\s+(?P<stop>.+)" %
|
||||
('|'.join(_range_1), '|'.join(_range_2)),
|
||||
re.IGNORECASE)
|
||||
|
||||
#def _parse_lunisolar(self, date_val=text):
|
||||
#text = text.strip() # otherwise spaces can make it a bad date
|
||||
#date = Date(self._qual_str, self._mod_str, self._cal_str, text, self._ny_str)
|
||||
#return unicode(text)
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# Chinese display
|
||||
# Simplified-Chinese display
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
class DateDisplayZH(DateDisplay):
|
||||
class DateDisplayZH_CN(DateDisplay):
|
||||
"""
|
||||
Chinese language date display class.
|
||||
Simplified-Chinese language date display class.
|
||||
"""
|
||||
|
||||
# translate english strings into chinese
|
||||
|
||||
long_months = ( u"", u"January", u"February", u"March", u"April", u"May",
|
||||
u"June", u"July", u"August", u"September", u"October",
|
||||
u"November", u"December" )
|
||||
# this is used to display the 12 gregorian months
|
||||
long_months = ( "", "正月", "二月", "三月", "四月", "五月",
|
||||
"六月", "七月", "八月", "九月", "十月",
|
||||
"十一月", "十二月" )
|
||||
|
||||
short_months = ( u"", u"Jan", u"Feb", u"Mar", u"Apr", u"May", u"Jun",
|
||||
u"Jul", u"Aug", u"Sep", u"Oct", u"Nov", u"Dec" )
|
||||
short_months = ( "", "一月", "二月", "三月", "四月", "五月", "六月",
|
||||
"七月", "八月", "九月", "十月", "十一月", "十二月" )
|
||||
|
||||
formats = (
|
||||
"年年年年-月月-日日 (ISO)", "数字格式", "月 日,年",
|
||||
"月 日,年", "日 月 年", "日 月 年",
|
||||
)
|
||||
# this must agree with DateDisplayEn's "formats" definition
|
||||
# (since no locale-specific _display_gregorian exists, here)
|
||||
|
||||
calendar = (
|
||||
"", u"Julian", u"Hebrew", u"French Republican",
|
||||
u"Persian", u"Islamic", u"Swedish"
|
||||
"", "儒略历", "希伯来历", "法国共和历",
|
||||
"伊郎历", "伊斯兰历", "瑞典历"
|
||||
)
|
||||
|
||||
_mod_str = ("", u"before ", u"after ", u"around ", "", "", "")
|
||||
_mod_str = ("", "以前 ", "以后 ", "大约 ", "", "", "")
|
||||
|
||||
_qual_str = ("", u"estimated ", u"calculated ", "")
|
||||
_qual_str = ("", "据估计 ", "据计算 ", "")
|
||||
|
||||
# FIXME translate these English strings into simplified-Chinese ones
|
||||
_bce_str = "%s B.C.E."
|
||||
|
||||
|
||||
@ -195,7 +172,6 @@ class DateDisplayZH(DateDisplay):
|
||||
"""
|
||||
Return a text string representing the date.
|
||||
"""
|
||||
|
||||
mod = date.get_modifier()
|
||||
cal = date.get_calendar()
|
||||
qual = date.get_quality()
|
||||
@ -209,45 +185,28 @@ class DateDisplayZH(DateDisplay):
|
||||
elif start == Date.EMPTY:
|
||||
return ""
|
||||
elif mod == Date.MOD_SPAN:
|
||||
date1 = self.display_cal[cal](start)
|
||||
date2 = self.display_cal[cal](date.get_stop_date())
|
||||
d1 = self.display_cal[cal](start)
|
||||
d2 = self.display_cal[cal](date.get_stop_date())
|
||||
scal = self.format_extras(cal, newyear)
|
||||
# translate english strings into chinese
|
||||
return "%s%s %s %s %s%s" % (qual_str, u'from', date1, u'to',
|
||||
date2, scal)
|
||||
return "%s%s %s %s %s%s" % (qual_str, '自', d1, '至', d2, scal)
|
||||
elif mod == Date.MOD_RANGE:
|
||||
date1 = self.display_cal[cal](start)
|
||||
date2 = self.display_cal[cal](date.get_stop_date())
|
||||
d1 = self.display_cal[cal](start)
|
||||
d2 = self.display_cal[cal](date.get_stop_date())
|
||||
scal = self.format_extras(cal, newyear)
|
||||
# translate english strings into chinese
|
||||
return "%s%s %s %s %s%s" % (qual_str, u'between', date1, u'and',
|
||||
date2, scal)
|
||||
return "%s%s %s %s %s%s之间" % (qual_str, '介于', d1, '与',
|
||||
d2, scal)
|
||||
else:
|
||||
text = self.display_cal[date.get_calendar()](start)
|
||||
scal = self.format_extras(cal, newyear)
|
||||
return "%s%s%s%s" % (qual_str, (self._mod_str)[mod], text,
|
||||
scal)
|
||||
|
||||
#def _display_chinese(self, date_val):
|
||||
#self._tformat = '%Y年%m月%d日'
|
||||
#year = self._slash_year(date_val[2], date_val[3])
|
||||
#if date_val[3]:
|
||||
#return self.display_iso(date_val)
|
||||
#else:
|
||||
#if date_val[0] == date_val[1] == 0:
|
||||
#value = u'%Y年' % date_val[2]
|
||||
#else:
|
||||
#value = self._tformat.replace('%m月', str(self.lunisolar[date_val[1]]))
|
||||
#value = u'%m月' % date_val[1]
|
||||
#value = u'%d日' % date_val[0]
|
||||
#value = u'%Y年' % date_val[2]
|
||||
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# Register classes
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
|
||||
register_datehandler(('zh_CN', 'zh_TW', 'zh_SG', 'zh_HK', 'zh', 'chinese', 'Chinese'),
|
||||
DateParserZH, DateDisplayZH)
|
||||
register_datehandler(('zh_CN', 'zh_SG', 'zh_TW', 'zh_HK',
|
||||
'zh', 'chinese', 'Chinese'),
|
||||
DateParserZH_CN, DateDisplayZH_CN)
|
||||
|
Loading…
Reference in New Issue
Block a user