From 7ef7e3bbf5ceac0816a5fc8211ba5b40fed8ba09 Mon Sep 17 00:00:00 2001 From: Mathieu MD Date: Tue, 17 Mar 2015 12:35:26 -0700 Subject: [PATCH] 8109: Japanese data localisation --- gramps/gen/datehandler/__init__.py | 1 + gramps/gen/datehandler/_date_ja.py | 264 +++++++++++++++++++++++++ gramps/gen/datehandler/_datehandler.py | 1 - po/ja.po | 100 +++++----- 4 files changed, 315 insertions(+), 51 deletions(-) create mode 100644 gramps/gen/datehandler/_date_ja.py diff --git a/gramps/gen/datehandler/__init__.py b/gramps/gen/datehandler/__init__.py index edfeeed3d..4174cca3f 100644 --- a/gramps/gen/datehandler/__init__.py +++ b/gramps/gen/datehandler/__init__.py @@ -49,6 +49,7 @@ from . import _date_fi from . import _date_fr from . import _date_hr from . import _date_it +from . import _date_ja from . import _date_lt from . import _date_nb from . import _date_nl diff --git a/gramps/gen/datehandler/_date_ja.py b/gramps/gen/datehandler/_date_ja.py new file mode 100644 index 000000000..05d050eeb --- /dev/null +++ b/gramps/gen/datehandler/_date_ja.py @@ -0,0 +1,264 @@ +# -*- coding: utf-8 -*- +# +# Gramps - a GTK+/GNOME based genealogy program +# +# Copyright (C) 2004-2006 Donald N. Allingham +# Copyright (C) 2014 Mathieu MD +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +# + +""" +Japanese-specific classes for parsing and displaying dates. +""" + +#------------------------------------------------------------------------- +# +# Python modules +# +#------------------------------------------------------------------------- + +import re + +#------------------------------------------------------------------------- +# +# GRAMPS modules +# +#------------------------------------------------------------------------- + +from ..lib.date import Date +from ._dateparser import DateParser +from ._datedisplay import DateDisplay +from ._datehandler import register_datehandler +from . import _grampslocale + +#------------------------------------------------------------------------- +# +# Japanese parser +# +#------------------------------------------------------------------------- +class DateParserJA(DateParser): + """ + Convert a text string into a Date object. If the date cannot be + converted, the text string is assigned. + """ + + # modifiers before the date + modifier_to_int = { + '以前' : Date.MOD_BEFORE, + '以降' : Date.MOD_AFTER, + '頃' : Date.MOD_ABOUT, + 'ごろ' : Date.MOD_ABOUT, + } + + month_to_int = DateParser.month_to_int + + quality_to_int = { + 'およそ' : Date.QUAL_ESTIMATED, + 'ごろ' : Date.QUAL_ESTIMATED, + '計算上' : Date.QUAL_CALCULATED, + } + + bce = ["紀元前", "BC"] + DateParser.bce + + def init_strings(self): + """ + This method compiles regular expression strings for matching dates. + """ + DateParser.init_strings(self) + + DateParser.calendar_to_int.update({ + 'グレゴリオ暦' : Date.CAL_GREGORIAN, + 'g' : Date.CAL_GREGORIAN, + 'ユリウス暦' : Date.CAL_JULIAN, + 'j' : Date.CAL_JULIAN, + 'ユダヤ暦' : Date.CAL_HEBREW, + 'h' : Date.CAL_HEBREW, + 'ヒジュラ暦' : Date.CAL_ISLAMIC, + 'i' : Date.CAL_ISLAMIC, + 'フランス革命暦' : Date.CAL_FRENCH, + '共和暦' : Date.CAL_FRENCH, + 'f' : Date.CAL_FRENCH, + 'イラン暦' : Date.CAL_PERSIAN, + 'p' : Date.CAL_PERSIAN, + 'スウェーデン暦' : Date.CAL_SWEDISH, + 's' : Date.CAL_SWEDISH, + }) + + DateParser.month_to_int.update({ + "一月" : 1, + "ichigatsu" : 1, + "睦月" : 1, + "mutsuki" : 1, + "二月" : 2, + "nigatsu" : 2, + "如月" : 2, + "kisaragi" : 2, + "衣更着" : 2, + "kinusaragi" : 2, + "三月" : 3, + "sangatsu" : 3, + "弥生" : 3, + "yayoi" : 3, + "四月" : 4, + "shigatsu" : 4, + "卯月" : 4, + "uzuki" : 4, + "五月" : 5, + "gogatsu" : 5, + "皐月" : 5, + "satsuki" : 5, + "早苗月" : 5, + "sanaetsuki" : 5, + "六月" : 6, + "rokugatsu" : 6, + "水無月" : 6, + "minazuki" : 6, + "七月" : 7, + "shichigatsu" : 7, + "文月" : 7, + "fumizuki" : 7, + "八月" : 8, + "hachigatsu" : 8, + "葉月" : 8, + "hazuki" : 8, + "九月" : 9, + "kugatsu" : 9, + "長月" : 9, + "nagatsuki" : 9, + "十月" : 10, + "jugatsu" : 10, + "jūgatsu" : 10, + "juugatsu" : 10, + "神無月" : 10, + "kannazuki" : 10, + "kaminazuki" : 10, + "神有月" : 10, + "神在月" : 10, + "kamiarizuki" : 10, + "十一月" : 11, + "juichigatsu" : 11, + "jūichigatsu" : 11, + "juuichigatsu" : 11, + "霜月" : 11, + "shimotsuki" : 11, + "十二月" : 12, + "junigatsu" : 12, + "jūnigatsu" : 12, + "juunigatsu" : 12, + "師走" : 12, + "shiwasu" : 12, + }) + + _span_1 = ['から', '~', '〜'] + _span_2 = ['まで', ''] + _range_1 = ['から', 'と', '~', '〜'] + _range_2 = ['までの間', 'の間'] + self._span = re.compile("(%s)\s+(?P.+)\s+(%s)\s+(?P.+)" % + ('|'.join(_span_1), '|'.join(_span_2)), + re.IGNORECASE) + self._range = re.compile("(%s)\s+(?P.+)\s+(%s)\s+(?P.+)" % + ('|'.join(_range_1), '|'.join(_range_2)), + re.IGNORECASE) + +#------------------------------------------------------------------------- +# +# Japanese display +# +#------------------------------------------------------------------------- +class DateDisplayJA(DateDisplay): + """ + Japanese language date display class. + """ + + # Specify what is actually the "System Default". + _locale_tformat = _grampslocale.tformat + _locale_tformat = _locale_tformat.replace('%d', "31") + _locale_tformat = _locale_tformat.replace('%m', "12") + _locale_tformat = _locale_tformat.replace('%Y', "1999") + + # This definition must agree with its "_display_gregorian" method + formats = ("YYYY-MM-DD (ISO)", # 0 + "システムデフォールト (" + _locale_tformat + ")", # 1 + "1999年12月31日", # 2 + "1999年十二月31日", # 3 + ) + + def _display_gregorian(self, date_val, **kwargs): + """ + display gregorian calendar date in different format + """ + # this must agree with its locale-specific "formats" definition + year = self._slash_year(date_val[2], date_val[3]) + if self.format == 0: + # ISO + return self.display_iso(date_val) + + elif self.format == 1: + # System Default + if date_val[2] < 0 or date_val[3]: + return self.display_iso(date_val) + else: + if date_val[0] == date_val[1] == 0: + value = str(date_val[2]) + else: + value = self._tformat.replace('%m', str(date_val[1])) + value = value.replace('%d', str(date_val[0])) + value = value.replace('%Y', str(date_val[2])) + + elif self.format == 2: + # 1999年12月31日 + if date_val[0] == 0: + if date_val[1] == 0: + value = "%s年" % year + else: + value = "%s年%s" % (year, + self.short_months[date_val[1]]) + else: + value = "%s年%s%s日" % (year, + self.short_months[date_val[1]], + date_val[0]) + + elif self.format == 3: + # 1999年十二月31日 + if date_val[0] == 0: + if date_val[1] == 0: + value = "%s年" % year + else: + value = "%s年%s" % (year, + self.long_months[date_val[1]]) + else: + value = "%s年%s%s日" % (year, + self.long_months[date_val[1]], + date_val[0]) + + else: + return self.display_iso(date_val) + + if date_val[2] < 0: + return self._bce_str % value + else: + return value + + display = DateDisplay.display_formatted + +#------------------------------------------------------------------------- +# +# Register classes +# +#------------------------------------------------------------------------- + +register_datehandler(('ja_JP', 'ja', 'japanese', 'Japanese'), + DateParserJA, DateDisplayJA) diff --git a/gramps/gen/datehandler/_datehandler.py b/gramps/gen/datehandler/_datehandler.py index 54fbbb98b..30e477aa2 100644 --- a/gramps/gen/datehandler/_datehandler.py +++ b/gramps/gen/datehandler/_datehandler.py @@ -83,7 +83,6 @@ LANG_TO_DISPLAY = { 'en' : DateDisplayEn, 'en_GB' : DateDisplayEn, 'English_United States' : DateDisplayEn, - 'ja_JP' : DateDisplay, 'ko_KR' : DateDisplay, 'nb_NO' : DateDisplay, } diff --git a/po/ja.po b/po/ja.po index 7bca1aadb..b6adcec0d 100644 --- a/po/ja.po +++ b/po/ja.po @@ -1211,7 +1211,7 @@ msgstr "日付" #: ../gramps/gen/datehandler/_datedisplay.py:348 msgid "{date_quality}from {date_start} to {date_stop}{nonstd_calendar_and_ny}" -msgstr "" +msgstr "{nonstd_calendar_and_ny}{date_start}から{date_stop}まで{date_quality}" #. If there is no special inflection for "between " in your #. language, don't translate this string. @@ -1235,7 +1235,7 @@ msgstr "日付" #: ../gramps/gen/datehandler/_datedisplay.py:370 msgid "{date_quality}between {date_start} and {date_stop}{nonstd_calendar_and_ny}" -msgstr "" +msgstr "{nonstd_calendar_and_ny}{date_start}と{date_stop}の間{date_quality}" #. If there is no special inflection for "before/after/around " in your #. language, don't translate this string. @@ -1291,51 +1291,51 @@ msgstr "" #. DateDisplayer code! #: ../gramps/gen/datehandler/_datestrings.py:65 msgid "localized lexeme inflections||January" -msgstr "" +msgstr "一月" #: ../gramps/gen/datehandler/_datestrings.py:66 msgid "localized lexeme inflections||February" -msgstr "" +msgstr "二月" #: ../gramps/gen/datehandler/_datestrings.py:67 msgid "localized lexeme inflections||March" -msgstr "" +msgstr "三月" #: ../gramps/gen/datehandler/_datestrings.py:68 msgid "localized lexeme inflections||April" -msgstr "" +msgstr "四月" #: ../gramps/gen/datehandler/_datestrings.py:69 msgid "localized lexeme inflections||May" -msgstr "" +msgstr "五月" #: ../gramps/gen/datehandler/_datestrings.py:70 msgid "localized lexeme inflections||June" -msgstr "" +msgstr "六月" #: ../gramps/gen/datehandler/_datestrings.py:71 msgid "localized lexeme inflections||July" -msgstr "" +msgstr "七月" #: ../gramps/gen/datehandler/_datestrings.py:72 msgid "localized lexeme inflections||August" -msgstr "" +msgstr "八月" #: ../gramps/gen/datehandler/_datestrings.py:73 msgid "localized lexeme inflections||September" -msgstr "" +msgstr "九月" #: ../gramps/gen/datehandler/_datestrings.py:74 msgid "localized lexeme inflections||October" -msgstr "" +msgstr "十月" #: ../gramps/gen/datehandler/_datestrings.py:75 msgid "localized lexeme inflections||November" -msgstr "" +msgstr "十一月" #: ../gramps/gen/datehandler/_datestrings.py:76 msgid "localized lexeme inflections||December" -msgstr "" +msgstr "十二月" #. TRANSLATORS: see #. http://gramps-project.org/wiki/index.php?title=Translating_Gramps#Translating_dates @@ -1343,51 +1343,51 @@ msgstr "" #. DateDisplayer code! #: ../gramps/gen/datehandler/_datestrings.py:83 msgid "localized lexeme inflections - short month form||Jan" -msgstr "" +msgstr "1月" #: ../gramps/gen/datehandler/_datestrings.py:84 msgid "localized lexeme inflections - short month form||Feb" -msgstr "" +msgstr "2月" #: ../gramps/gen/datehandler/_datestrings.py:85 msgid "localized lexeme inflections - short month form||Mar" -msgstr "" +msgstr "3月" #: ../gramps/gen/datehandler/_datestrings.py:86 msgid "localized lexeme inflections - short month form||Apr" -msgstr "" +msgstr "4月" #: ../gramps/gen/datehandler/_datestrings.py:87 msgid "localized lexeme inflections - short month form||May" -msgstr "" +msgstr "5月" #: ../gramps/gen/datehandler/_datestrings.py:88 msgid "localized lexeme inflections - short month form||Jun" -msgstr "" +msgstr "6月" #: ../gramps/gen/datehandler/_datestrings.py:89 msgid "localized lexeme inflections - short month form||Jul" -msgstr "" +msgstr "7月" #: ../gramps/gen/datehandler/_datestrings.py:90 msgid "localized lexeme inflections - short month form||Aug" -msgstr "" +msgstr "8月" #: ../gramps/gen/datehandler/_datestrings.py:91 msgid "localized lexeme inflections - short month form||Sep" -msgstr "" +msgstr "9月" #: ../gramps/gen/datehandler/_datestrings.py:92 msgid "localized lexeme inflections - short month form||Oct" -msgstr "" +msgstr "10月" #: ../gramps/gen/datehandler/_datestrings.py:93 msgid "localized lexeme inflections - short month form||Nov" -msgstr "" +msgstr "11月" #: ../gramps/gen/datehandler/_datestrings.py:94 msgid "localized lexeme inflections - short month form||Dec" -msgstr "" +msgstr "12月" #. TRANSLATORS: see #. http://gramps-project.org/wiki/index.php?title=Translating_Gramps#Translating_dates @@ -1698,53 +1698,53 @@ msgstr "" msgid "Persian month lexeme|Esfand" msgstr "" -#: ../gramps/gen/datehandler/_datestrings.py:209 +#: /gramps/gen/datehandler/_datestrings.py:10024 msgid "date modifier|before " -msgstr "" +msgstr "以前 " -#: ../gramps/gen/datehandler/_datestrings.py:210 +#: /gramps/gen/datehandler/_datestrings.py:10025 msgid "date modifier|after " -msgstr "" +msgstr "以降 " -#: ../gramps/gen/datehandler/_datestrings.py:211 +#: /gramps/gen/datehandler/_datestrings.py:10026 msgid "date modifier|about " -msgstr "" +msgstr "頃 " -#: ../gramps/gen/datehandler/_datestrings.py:215 +#: /gramps/gen/datehandler/_datestrings.py:10027 msgid "date quality|estimated " -msgstr "" +msgstr "位 " -#: ../gramps/gen/datehandler/_datestrings.py:216 +#: /gramps/gen/datehandler/_datestrings.py:10028 msgid "date quality|calculated " -msgstr "" +msgstr "計算上 " -#: ../gramps/gen/datehandler/_datestrings.py:222 +#: /gramps/gen/datehandler/_datestrings.py:10029 msgid "Sunday" -msgstr "" +msgstr "日曜日" -#: ../gramps/gen/datehandler/_datestrings.py:223 +#: /gramps/gen/datehandler/_datestrings.py:10030 msgid "Monday" -msgstr "" +msgstr "月曜日" -#: ../gramps/gen/datehandler/_datestrings.py:224 +#: /gramps/gen/datehandler/_datestrings.py:10031 msgid "Tuesday" -msgstr "" +msgstr "火曜日" -#: ../gramps/gen/datehandler/_datestrings.py:225 +#: /gramps/gen/datehandler/_datestrings.py:10032 msgid "Wednesday" -msgstr "" +msgstr "水曜日" -#: ../gramps/gen/datehandler/_datestrings.py:226 +#: /gramps/gen/datehandler/_datestrings.py:10033 msgid "Thursday" -msgstr "" +msgstr "木曜日" -#: ../gramps/gen/datehandler/_datestrings.py:227 +#: /gramps/gen/datehandler/_datestrings.py:10034 msgid "Friday" -msgstr "" +msgstr "金曜日" -#: ../gramps/gen/datehandler/_datestrings.py:228 +#: /gramps/gen/datehandler/_datestrings.py:10035 msgid "Saturday" -msgstr "" +msgstr "土曜日" #: ../gramps/gen/db/base.py:1635 msgid "Add child to family"