calendarui/regionalplugins/calenregionalutil/src/calenlunarlocalizer.cpp
changeset 49 5de72ea7a065
parent 23 fd30d51f876b
child 55 2c54b51f39c4
equal deleted inserted replaced
37:360d55486d7f 49:5de72ea7a065
    15 *
    15 *
    16 */
    16 */
    17 
    17 
    18 
    18 
    19 
    19 
    20 
    20 #include <qdatetime.h>
    21 
    21 #include <qstringlist.h>
    22 #include <avkon.rsg>
    22 #include <hbi18ndef.h>
       
    23 #include <hbglobal.h>
       
    24 
    23 #include <badesca.h> 
    25 #include <badesca.h> 
    24 #include <eikenv.h>
    26 #include <eikenv.h>
    25 #include <StringLoader.h>
       
    26 #include <bautils.h>
    27 #include <bautils.h>
    27 #include <data_caging_path_literals.hrh>
    28 #include <data_caging_path_literals.hrh>
    28 
       
    29 #include <calenregionalutil.rsg>
       
    30 
    29 
    31 #include "calendarui_debug.h"
    30 #include "calendarui_debug.h"
    32 
    31 
    33 #include "CalenLunarLocalizer.h"
    32 #include "CalenLunarLocalizer.h"
    34 #include "CalenLunarInfo.h"
    33 #include "CalenLunarInfo.h"
    41 const TInt KCharTen = 0x5341;
    40 const TInt KCharTen = 0x5341;
    42 const TInt KCharTwenty= 0x5eff;
    41 const TInt KCharTwenty= 0x5eff;
    43 _LIT(KChineseDigits, 
    42 _LIT(KChineseDigits, 
    44      "\x0030\x4e00\x4e8c\x4e09\x56db\x4e94\x516d\x4e03\x516b\x4e5d");
    43      "\x0030\x4e00\x4e8c\x4e09\x56db\x4e94\x516d\x4e03\x516b\x4e5d");
    45 
    44 
    46 _LIT( KResourceChinesePluginFile, "calenregionalutil.rsc" );
       
    47 #define KResourcePath KDC_RESOURCE_FILES_DIR
       
    48 
    45 
    49 
    46 
    50 // -----------------------------------------------------------------------------
    47 // -----------------------------------------------------------------------------
    51 // CCalenLunarLocalizer::NewL
    48 // CCalenLunarLocalizer::NewL
    52 // -----------------------------------------------------------------------------
    49 // -----------------------------------------------------------------------------
    70 //
    67 //
    71 EXPORT_C CCalenLunarLocalizer::~CCalenLunarLocalizer()
    68 EXPORT_C CCalenLunarLocalizer::~CCalenLunarLocalizer()
    72     {
    69     {
    73     TRACE_ENTRY_POINT;
    70     TRACE_ENTRY_POINT;
    74     
    71     
    75     delete iFestivalNames;
       
    76     delete iSolarTermNames;
       
    77     delete iHeavenlyStemNames;
       
    78     delete iTerrestialBranchNames;
       
    79     delete iAnimalYearNames;
       
    80     delete iGregorianDateFormat;
       
    81     delete iRowFormatter;
    72     delete iRowFormatter;
    82     
       
    83     if( iResourceFileOffset )
       
    84         {
       
    85         CCoeEnv::Static()->DeleteResourceFile( iResourceFileOffset );
       
    86         }
       
    87     TRACE_EXIT_POINT;
    73     TRACE_EXIT_POINT;
    88     }
    74     }
    89 
    75 
    90 // -----------------------------------------------------------------------------
    76 // -----------------------------------------------------------------------------
    91 // CCalenLunarLocalizer::CCalenLunarLocalizer
    77 // CCalenLunarLocalizer::CCalenLunarLocalizer
   100 // -----------------------------------------------------------------------------
    86 // -----------------------------------------------------------------------------
   101 // CCalenLunarLocalizer::ConstructL
    87 // CCalenLunarLocalizer::ConstructL
   102 // -----------------------------------------------------------------------------
    88 // -----------------------------------------------------------------------------
   103 //
    89 //
   104 EXPORT_C void CCalenLunarLocalizer::ConstructL()
    90 EXPORT_C void CCalenLunarLocalizer::ConstructL()
   105     {
    91 {
   106     TRACE_ENTRY_POINT;
    92 	iRowFormatter = CCalenExtraRowFormatter::NewL();
   107     
    93 
   108     iRowFormatter = CCalenExtraRowFormatter::NewL();
    94 	iFestivalNames.append(hbTrId("txt_calendar_preview_title_spring_fest"));
   109     
    95 	iFestivalNames.append(hbTrId("txt_calendar_preview_title_lantern_fest"));
   110     TFileName dllName;
    96 	iFestivalNames.append(hbTrId("txt_calendar_preview_title_dragon_fest"));
   111     // Get the complate path of the DLL from where it is currently loaded
    97 	iFestivalNames.append(hbTrId("txt_calendar_preview_title_seventh_night_fest"));
   112     Dll::FileName( dllName );
    98 	iFestivalNames.append(hbTrId("txt_calendar_preview_title_ghost_fest"));
   113     
    99 	iFestivalNames.append(hbTrId("txt_calendar_preview_title_mid_autumn_fest"));
   114     TFileName resourceFilename;
   100 	iFestivalNames.append(hbTrId("txt_calendar_preview_title_double_fest"));
   115     resourceFilename.Append(dllName.Mid(0,2));
   101 	iFestivalNames.append(hbTrId("txt_calendar_preview_title_eigth_day_fest"));
   116     resourceFilename.Append(KResourcePath);
   102 	iFestivalNames.append(hbTrId("txt_calendar_preview_title_new_year_fest"));
   117     resourceFilename.Append(KResourceChinesePluginFile);
   103 
   118     BaflUtils::NearestLanguageFile( CEikonEnv::Static()->FsSession(), resourceFilename );
   104 	iSolarTermNames.append(hbTrId("txt_calendar_preview_title_li_chun"));
   119     // Add the resource file.
   105 	iSolarTermNames.append(hbTrId("txt_calendar_preview_title_yu_shui"));
   120     iResourceFileOffset = CEikonEnv::Static()->AddResourceFileL( resourceFilename );
   106 	iSolarTermNames.append(hbTrId("txt_calendar_preview_title_jing_zhe"));
   121 
   107 	iSolarTermNames.append(hbTrId("txt_calendar_preview_title_chun_fen"));
   122     iFestivalNames = iEikEnv->ReadDesCArrayResourceL(R_CALEN_CHI_FESTIVALS);
   108 	iSolarTermNames.append(hbTrId("txt_calendar_preview_title_qing_ming"));
   123     iSolarTermNames = iEikEnv->ReadDesCArrayResourceL(R_CALEN_CHI_SOLAR_ITEMS);
   109 	iSolarTermNames.append(hbTrId("txt_calendar_preview_title_gu_yu"));
   124     iHeavenlyStemNames = iEikEnv->ReadDesCArrayResourceL(R_CALEN_CHI_HEAV_STEMS);
   110 	iSolarTermNames.append(hbTrId("txt_calendar_preview_title_li_xia"));
   125     iTerrestialBranchNames = iEikEnv->ReadDesCArrayResourceL(R_CALEN_CHI_TERR_BRANCHES);
   111 	iSolarTermNames.append(hbTrId("txt_calendar_preview_title_xiao_man"));
   126     iAnimalYearNames = iEikEnv->ReadDesCArrayResourceL(R_CALEN_CHI_ANIMAL_YEARS);
   112 	iSolarTermNames.append(hbTrId("txt_calendar_preview_title_mang_zhong"));
   127 
   113 	iSolarTermNames.append(hbTrId("txt_calendar_preview_title_xia_zhi"));
   128     iGregorianDateFormat = StringLoader::LoadL(R_QTN_DATE_USUAL_WITH_ZERO);
   114 	iSolarTermNames.append(hbTrId("txt_calendar_preview_title_xiao_shu"));
   129 
   115 	iSolarTermNames.append(hbTrId("txt_calendar_preview_title_da_shu"));
   130     
   116 	iSolarTermNames.append(hbTrId("txt_calendar_preview_title_li_qiu"));
   131     TRACE_EXIT_POINT;
   117 	iSolarTermNames.append(hbTrId("txt_calendar_preview_title_chu_shu"));
   132     }
   118 	iSolarTermNames.append(hbTrId("txt_calendar_preview_title_bai_lu"));
       
   119 	iSolarTermNames.append(hbTrId("txt_calendar_preview_title_qiu_fen"));
       
   120 	iSolarTermNames.append(hbTrId("txt_calendar_preview_title_han_lu"));
       
   121 	iSolarTermNames.append(hbTrId("txt_calendar_preview_title_shaung_jiang"));
       
   122 	iSolarTermNames.append(hbTrId("txt_calendar_preview_title_li_dong"));
       
   123 	iSolarTermNames.append(hbTrId("txt_calendar_preview_title_xiao_xue"));
       
   124 	iSolarTermNames.append(hbTrId("txt_calendar_preview_title_da_xue"));
       
   125 	iSolarTermNames.append(hbTrId("txt_calendar_preview_title_dong_zhi"));
       
   126 	iSolarTermNames.append(hbTrId("txt_calendar_preview_title_xiao_han"));
       
   127 	iSolarTermNames.append(hbTrId("txt_calendar_preview_title_da_han"));
       
   128 
       
   129 	iHeavenlyStemNames.append(hbTrId("txt_calendar_preview_title_jia"));
       
   130 	iHeavenlyStemNames.append(hbTrId("txt_calendar_preview_title_yi"));
       
   131 	iHeavenlyStemNames.append(hbTrId("txt_calendar_preview_title_bing"));
       
   132 	iHeavenlyStemNames.append(hbTrId("txt_calendar_preview_title_ding"));
       
   133 	iHeavenlyStemNames.append(hbTrId("txt_calendar_preview_title_wu"));
       
   134 	iHeavenlyStemNames.append(hbTrId("txt_calendar_preview_title_ji"));
       
   135 	iHeavenlyStemNames.append(hbTrId("txt_calendar_preview_title_geng"));
       
   136 	iHeavenlyStemNames.append(hbTrId("txt_calendar_preview_title_xing"));
       
   137 	iHeavenlyStemNames.append(hbTrId("txt_calendar_preview_title_reng"));
       
   138 	iHeavenlyStemNames.append(hbTrId("txt_calendar_preview_title_gui"));
       
   139 
       
   140 	iTerrestialBranchNames.append(hbTrId("txt_calendar_preview_title_tbranch_zi"));
       
   141 	iTerrestialBranchNames.append(hbTrId("txt_calendar_preview_title_tbranch_chou"));
       
   142 	iTerrestialBranchNames.append(hbTrId("txt_calendar_preview_title_tbranch_yin"));
       
   143 	iTerrestialBranchNames.append(hbTrId("txt_calendar_preview_title_tbranch_mao"));
       
   144 	iTerrestialBranchNames.append(hbTrId("txt_calendar_preview_title_tbranch_chen"));
       
   145 	iTerrestialBranchNames.append(hbTrId("txt_calendar_preview_title_tbranch_si"));
       
   146 	iTerrestialBranchNames.append(hbTrId("txt_calendar_preview_title_tbranch_wu"));
       
   147 	iTerrestialBranchNames.append(hbTrId("txt_calendar_preview_title_tbranch_wei"));
       
   148 	iTerrestialBranchNames.append(hbTrId("txt_calendar_preview_title_tbranch_shen"));
       
   149 	iTerrestialBranchNames.append(hbTrId("txt_calendar_preview_title_tbranch_you"));
       
   150 	iTerrestialBranchNames.append(hbTrId("txt_calendar_preview_title_tbranch_xu"));
       
   151 	iTerrestialBranchNames.append(hbTrId("txt_calendar_preview_title_tbranch_hai"));
       
   152 
       
   153 	iAnimalYearNames.append(hbTrId("txt_calendar_preview_title_year_of_the_rat"));
       
   154 	iAnimalYearNames.append(hbTrId("txt_calendar_preview_title_year_of_the_ox"));
       
   155 	iAnimalYearNames.append(hbTrId("txt_calendar_preview_title_year_of_the_tiger"));
       
   156 	iAnimalYearNames.append(hbTrId("txt_calendar_preview_title_year_of_the_rabbit"));
       
   157 	iAnimalYearNames.append(hbTrId("txt_calendar_preview_title_year_of_the_dragon"));
       
   158 	iAnimalYearNames.append(hbTrId("txt_calendar_preview_title_year_of_the_snake"));
       
   159 	iAnimalYearNames.append(hbTrId("txt_calendar_preview_title_year_of_the_horse"));
       
   160 	iAnimalYearNames.append(hbTrId("txt_calendar_preview_title_year_of_the_sheep"));
       
   161 	iAnimalYearNames.append(hbTrId("txt_calendar_preview_title_year_of_the_monkey"));
       
   162 	iAnimalYearNames.append(hbTrId("txt_calendar_preview_title_year_of_the_rooster"));
       
   163 	iAnimalYearNames.append(hbTrId("txt_calendar_preview_title_year_of_the_dog"));
       
   164 	iAnimalYearNames.append(hbTrId("txt_calendar_preview_title_year_of_the_pig"));
       
   165 	
       
   166 }
   133 
   167 
   134 // -----------------------------------------------------------------------------
   168 // -----------------------------------------------------------------------------
   135 // CCalenLunarLocalizer::LocalizeL
   169 // CCalenLunarLocalizer::LocalizeL
   136 // -----------------------------------------------------------------------------
   170 // -----------------------------------------------------------------------------
   137 //
   171 //
   138 EXPORT_C CCalenLunarLocalizedInfo* CCalenLunarLocalizer::LocalizeL( TCalenLunarInfo& aInfo )
   172 EXPORT_C CCalenLunarLocalizedInfo* CCalenLunarLocalizer::LocalizeL( TCalenLunarInfo& aInfo )
   139     {
   173 {
   140     TRACE_ENTRY_POINT;
   174 	CCalenLunarLocalizedInfo* localized = CCalenLunarLocalizedInfo::NewL();
   141    
   175 	CleanupStack::PushL( localized );
   142     
   176 
   143     CCalenLunarLocalizedInfo* localized = CCalenLunarLocalizedInfo::NewL();
   177 
   144     CleanupStack::PushL( localized );
   178 	if ( aInfo.HasFestival() ) 
   145 
   179 	{
   146     if ( aInfo.HasFestival() ) 
   180 		QString festival = iFestivalNames.at(aInfo.iFestival);
   147         {
   181 		localized->iFestival.Set( static_cast<const TUint16*>(festival.utf16()),festival.length());
   148         localized->iFestival.Set( iFestivalNames->MdcaPoint( aInfo.iFestival ) );
   182 	}
   149         }
   183 
   150     
   184 	if ( aInfo.HasSolarTerm() ) 
   151     if ( aInfo.HasSolarTerm() ) 
   185 	{
   152         {
   186 		QString solarTerm = iSolarTermNames.at(aInfo.iSolarTerm);
   153         localized->iSolarTerm.Set( iSolarTermNames->MdcaPoint( aInfo.iSolarTerm ) );
   187 		localized->iSolarTerm.Set( static_cast<const TUint16*>(solarTerm.utf16()),solarTerm.length());
   154         }
   188 	}
   155 
   189 
   156     // Animal year
   190 	// Animal year
   157     localized->iAnimalYear.Set( iAnimalYearNames->MdcaPoint( aInfo.AnimalYear() ) );
   191 	QString animalYear = iAnimalYearNames.at(aInfo.AnimalYear());
   158     
   192 	localized->iAnimalYear.Set( static_cast<const TUint16*>(animalYear.utf16()),animalYear.length());
   159 
   193 
   160     // Lunar year    
   194 	// Lunar year
   161     CPtrCArray* yearSubs = new (ELeave) CPtrCArray(2);
   195 	QString heavenlyStemNames = iHeavenlyStemNames.at(aInfo.iHeavenlyStem);
   162     CleanupStack::PushL( yearSubs );
   196 	QString terrestialBranchNames = iTerrestialBranchNames.at(aInfo.iTerrestialBranch);
   163     yearSubs->AppendL( iHeavenlyStemNames->MdcaPoint( aInfo.iHeavenlyStem ) );
   197 	QString lunarYear = hbTrId("txt_calendar_info_lunar_year").arg(heavenlyStemNames).arg(terrestialBranchNames);
   164     yearSubs->AppendL( iTerrestialBranchNames->MdcaPoint( aInfo.iTerrestialBranch ) );
   198 	localized->iLunarYear = static_cast<const TUint16*> (lunarYear.utf16()), lunarYear.length();
   165 
   199 
   166     HBufC* tmp = StringLoader::LoadLC( R_CALE_LUNAR_YEAR, *yearSubs);
   200 	LocalizeMonthAndDayL(localized, aInfo);
   167     RDebug::Print( *tmp );
   201 
   168     localized->iLunarYear = *tmp;
   202 	QString monthAndDay = QString::fromUtf16(localized->LunarMonthAndDay().Ptr(),localized->LunarMonthAndDay().Length());
   169     CleanupStack::PopAndDestroy( tmp );
   203 	QString yearString = QString::fromUtf16(localized->LunarYear().Ptr(),localized->LunarYear().Length());
   170     CleanupStack::PopAndDestroy( yearSubs );
   204 	QString fullLunarDate = hbTrId("txt_calendar_info_lunar_full_date").arg(monthAndDay).arg(yearString);
   171 
   205 	
   172     RDebug::Print( localized->iLunarYear );
   206 	localized->iFullLunarDate = static_cast<const TUint16*> (fullLunarDate.utf16()), fullLunarDate.length();
   173 
   207 
   174     LocalizeMonthAndDayL(localized, aInfo);
   208 	QString format(r_qtn_date_usual_with_zero);
   175     
   209 	TBuf<100> gregFormatBuf;
   176     // Full lunar date
   210 	gregFormatBuf = static_cast<const TUint16*> (format.utf16()), format.length();
   177     CPtrCArray* subs = new (ELeave) CPtrCArray(2);
   211 	
   178     CleanupStack::PushL( subs );
   212 	aInfo.iGregorianDate.FormatL( localized->iGregorianDate, gregFormatBuf );
   179     subs->AppendL( localized->LunarMonthAndDay() );
   213 
   180     subs->AppendL( localized->LunarYear() );
   214 	CleanupStack::Pop( localized );
   181     
   215 	
   182     tmp = StringLoader::LoadLC( R_CALE_LUNAR_FULL_DATE, *subs );
   216 	return localized;
   183     localized->iFullLunarDate = *tmp;
   217 }
   184     CleanupStack::PopAndDestroy( tmp );
       
   185     CleanupStack::PopAndDestroy( subs );
       
   186     
       
   187     
       
   188     aInfo.iGregorianDate.FormatL( localized->iGregorianDate, 
       
   189                                  *iGregorianDateFormat );
       
   190     CleanupStack::Pop( localized );
       
   191     
       
   192     
       
   193     
       
   194     TRACE_EXIT_POINT;
       
   195     return localized;
       
   196     }
       
   197 
   218 
   198 
   219 
   199 // -----------------------------------------------------------------------------
   220 // -----------------------------------------------------------------------------
   200 // CCalenLunarLocalizer::GetExtraRowTextL
   221 // CCalenLunarLocalizer::GetExtraRowTextL
   201 // -----------------------------------------------------------------------------
   222 // -----------------------------------------------------------------------------
   225 // CCalenLunarLocalizer::LocalizeMonthAndDayL
   246 // CCalenLunarLocalizer::LocalizeMonthAndDayL
   226 // -----------------------------------------------------------------------------
   247 // -----------------------------------------------------------------------------
   227 //
   248 //
   228 void CCalenLunarLocalizer::LocalizeMonthAndDayL(CCalenLunarLocalizedInfo* aLocInfo,
   249 void CCalenLunarLocalizer::LocalizeMonthAndDayL(CCalenLunarLocalizedInfo* aLocInfo,
   229                                                 TCalenLunarInfo& aInfo)
   250                                                 TCalenLunarInfo& aInfo)
   230     {
   251 {
   231     // Lunar Month and Day
   252 	TBuf<10> month;
   232     TInt dateResource = aInfo.iLunarDate.iLeapMonth ? R_CALE_LUNAR_LEAP_DATE : R_CALE_LUNAR_DATE;
   253 	TBuf<10> day;
   233     TBuf<10> month;
   254 	GetChineseMonth(aInfo.iLunarDate, month);
   234     TBuf<10> day;
   255 	GetChineseDay(aInfo.iLunarDate, day);
   235     GetChineseMonth(aInfo.iLunarDate, month);
   256 
   236     GetChineseDay(aInfo.iLunarDate, day);
   257 	QString formattedString;
   237 
   258 	if(aInfo.iLunarDate.iLeapMonth) {
   238     CPtrCArray* monthAndDaySubs = new (ELeave) CPtrCArray(2);
   259 		formattedString = hbTrId(
   239     CleanupStack::PushL( monthAndDaySubs );
   260 						"txt_calendar_info_lunar_leap_date").arg(
   240     monthAndDaySubs->AppendL(month);
   261 						QString((QChar*)month.Ptr(),month.Length())).arg(
   241     monthAndDaySubs->AppendL(day);
   262 						QString((QChar*)day.Ptr(),day.Length()));
   242     
   263 	}else {
   243     HBufC* tmp = StringLoader::LoadLC( dateResource, *monthAndDaySubs );
   264 		formattedString = hbTrId(
   244     aLocInfo->iLunarMonthAndDay = *tmp;
   265 						"txt_calendar_info_lunar_date").arg(
   245     CleanupStack::PopAndDestroy( tmp );
   266 						QString((QChar*)month.Ptr(),month.Length())).arg(
   246     CleanupStack::PopAndDestroy( monthAndDaySubs );
   267 						QString((QChar*)day.Ptr(),day.Length()));
   247     }
   268 	}
       
   269 	aLocInfo->iLunarMonthAndDay = static_cast<const TUint16*> (
       
   270 							formattedString.utf16()), formattedString.length();
       
   271 }
   248 
   272 
   249 // -----------------------------------------------------------------------------
   273 // -----------------------------------------------------------------------------
   250 // CCalenLunarLocalizer::GetChineseMonth
   274 // CCalenLunarLocalizer::GetChineseMonth
   251 // -----------------------------------------------------------------------------
   275 // -----------------------------------------------------------------------------
   252 //
   276 //