FastCube的多語言化

FastCube 2.10

它的多語言機制沒有嚴格使用ResoureString來處理,如果是那樣,直接用Acro Multi-Language Suite元件處理就可以了(Hook了LoadString這個API)。

FastCube的多語言機制是一種靜態的字典,類似xml格式,如:

{******************************************}
{                                          }
{                FastCube 2                }
{          Language resource file          }
{                                          }
{         Copyright (c) 2001-2016          }
{     by Oleg Pryalkov, Paul Ishenin,      }
{            Fast Reports Inc.             }
{                                          }
{******************************************}

unit fcxrcStrings;

interface
{$H+}
implementation

uses fcxRes;

const resXML: AnsiString =
'<?xml version="1.0" encoding="utf-8"?><Resources CodePage="1252"><StrRes Name="SOkBtn" Text="OK"/><StrRes Name="SCancelBtn" Text="Cancel"/><StrRes Nam' + 
'e="sApplyBtn" Text="Apply"/><StrRes Name="sEditBtn" Text="Edit ..."/><StrRes Name="sAddBtn" Text="Add ..."/><StrRes Name="sDeleteBtn" Text="Delete"/><' + 
'StrRes Name="SDataOverflow" Text="Data overflow error!"/><StrRes Name="sDemoBlocked" Text="This function is blocked in this demo!"/><StrRes Name="sChe' + 
'ckBtn" Text="Check"/><StrRes Name="sNoErrors" Text="Errors not found"/><StrRes Name="sConfirmClearSchema" Text="Do you want to clear grid layout?"/><S' + 
'trRes Name="sNull" Text="Null"/><StrRes Name="sTrue" Text="True"/><StrRes Name="sFalse" Text="False"/><StrRes Name="SDayPrefix" Text="Day_"/><StrRes N' + 
'ame="SMonthPrefix" Text="Month_"/><StrRes Name="SQuarterPrefix" Text="Quarter_"/><StrRes Name="SYearPrefix" Text="Year_"/><StrRes Name="SDayOfWeekPref' + 
'ix" Text="Day_of_week_"/><StrRes Name="sHalfYearPrefix" Text="Half_year_"/><StrRes Name="SHourPrefix" Text="Hour_"/><StrRes Name="SMinutePrefix" Text=' + 
'"Minute_"/><StrRes Name="SSecondPrefix" Text="Second_"/><StrRes Name="SMillisecondPrefix" Text="Millisecond_"/><StrRes Name="sDateAttributeLabelPrefix' + 
'" Text="Date_"/><StrRes Name="sTimeAttributeLabelPrefix" Text="Time_"/><StrRes Name="SCounter" Text="(counter)"/><StrRes Name="SMeasures" Text="Measur' + 
'es"/><StrRes Name="SCounterItem" Text="System counter"/><StrRes Name="sError" Text="??.?? %"/><StrRes Name="sUnknown" Text="???"/><StrRes Name="sBadVa' + 
'lue" Text="?error?"/><StrRes Name="sFileLockError" Text="Unable to create file %s. Posible it locked by another application."/><StrRes Name="sDataSetU' + 
'nAssigned" Text="DataSet is not defined!"/><StrRes Name="sDataSetOpenError" Text="Error of opening %s!"/><StrRes Name="sCellAlreadyExist" Text="Data c' + 
'ell already exist"/><StrRes Name="sUnknownCubeFormat" Text="Unknown cube format!"/><StrRes Name="STotal" Text="Total"/><StrRes Name="sGrandTotal" Text' + 
'="Grand total"/><StrRes Name="STotalBy" Text="Total by "/><StrRes Name="SNothing" Text="Value"/><StrRes Name="sSchemaFilter" Text="Cube schema files|*' + 
'.mds"/><StrRes Name="sCubeFilter" Text="Cube files|*.mdc"/><StrRes Name="sChartTemplateFilter" Text="Chart template files|*.mdt"/><StrRes Name="sXLSFi' + 
'lter" Text="Excel files|*.xls"/><StrRes Name="sDOCFilter" Text="Word files|*.doc"/><StrRes Name="sHTMLFilter" Text="HTML files|*.html"/><StrRes Name="' + 
'sXMLFilter" Text="XML files|*.xml"/><StrRes Name="sEditMeasure" Text="Edit Measure"/><StrRes Name="sEditMeasures" Text="Edit Measures"/><StrRes Name="' + 
'sMeasure" Text="Measure"/><StrRes Name="sMeasures" Text="Measures"/><StrRes Name="sName" Text="Name"/><StrRes Name="sCaption" Text="Caption"/><StrRes ' + 
'Name="sAggregate" Text="Aggregate:"/><StrRes Name="sUseDifferentAggregateForTotals" Text="Use different aggregate for totals"/><StrRes Name="sCalcTota' + 
'lsOnTotals" Text="Calculate totals on totals"/><StrRes Name="sUseXAxisTotalsAsBase" Text="Use column totals as base"/><StrRes Name="sTotalsConflictRes' + 
'olving" Text="Totals conflict resolution"/><StrRes Name="sTotalPosition" Text="Total position"/><StrRes Name="sAdditionalTotals" Text="Additional Tota' + 
'ls"/><StrRes Name="sEmptyCell" Text="Empty Cell"/><StrRes Name="sUseXAxisTotal" Text="Use Column Total"/><StrRes Name="sUseYAxisTotal" Text="Use Row T' + 
'otal"/><StrRes Name="sDigitsAfter" Text="Precision:"/><StrRes Name="sAggAlreadyExist" Text="Aggregate is already exist!"/><StrRes Name="sField" Text="' + 
'Aggregate of field:"/><StrRes Name="sFormula" Text="Calculation formula:"/><StrRes Name="sCalcOrder" Text="Calculation order:"/><StrRes Name="sFilter"' + 
' Text="Filter:"/><StrRes Name="sEditor" Text="Editor ..."/><StrRes Name="sFuncNotAllWithDate" Text="It is impossible to use this function with Date!"/' + 
'><StrRes Name="sFuncNotAll" Text="It is impossible to use this function with this field!"/><StrRes Name="sFuncNotAllWithCalc" Text="It is impossible t' + 
'o use this function with Calculation Measure!"/><StrRes Name="sIncorrectPrecision" Text="Incorrect precision [%d]. Precision should be integer value &' + 
'#38;#62;= 0! "/><StrRes Name="sIncorrectCalcOrder" Text="Incorrect calculation order [%d]. Calculation order should be between %d and %d!"/><StrRes Na' + 
'me="sDisplayFormat" Text="Display Format"/><StrRes Name="sClearAll" Text="Clear all"/><StrRes Name="sInverse" Text="Inverse"/><StrRes Name="sFieldForm' + 
'Caption" Text="Field list"/><StrRes Name="sFieldFormDragLabel" Text="Move to grid"/><StrRes Name="sFieldformAddBtn" Text="Add to"/><StrRes Name="sFiel' + 
'dFormAreaText" Text="Filters''#$D#$A''Rows''#$D#$A''Columns''#$D#$A''Measures"/><StrRes Name="sFieldFormRename" Text="Rename"/><StrRes Name="sDefCubeCaption' + 
'" Text="&#60;no caption&#62;"/><StrRes Name="sFieldLabelChangeCaption" Text="Change field caption"/><StrRes Name="sFieldLabelChangePropmpt" Text="Inpu' + 
't new field caption"/><StrRes Name="sCubeChangeCaption" Text="Change cube caption"/><StrRes Name="sCubeChangePropmpt" Text="Input new cube caption"/><' + 
'StrRes Name="sInfoFormCaption" Text="Cube information"/><StrRes Name="sInfoFormSliceGeometry" Text="Slice geometry"/><StrRes Name="sInfoFormSourceRowC' + 
'ount" Text="Source row count"/><StrRes Name="sInfoFormRowDimCount" Text="Count of row dimensions"/><StrRes Name="sInfoFormColDimCount" Text="Count of ' + 
'column dimesions"/><StrRes Name="sInfoFormFactsCount" Text="Count of measures"/><StrRes Name="sInfoFormFilterCount" Text="Count of filter fields"/><St' + 
'rRes Name="sInfoFormColCount" Text="Column count"/><StrRes Name="sInfoFormRowCount" Text="Row count"/><StrRes Name="sInfoFormTimeChar" Text="Time char' + 
'acteristics (sec.)"/><StrRes Name="sInfoFormFullTime" Text="Full loading time"/><StrRes Name="sInfoFormDBOpenTime" Text="Opening data sources"/><StrRe' + 
's Name="sInfoFormOpenTime" Text="Preparing to loading"/><StrRes Name="sInfoFormDBMoveTime" Text="Data fetch"/><StrRes Name="sInfoFormDBGetDataTime" Te' + 
'xt="Getting values"/><StrRes Name="sInfoFormConvertTime" Text="Converting values"/><StrRes Name="sInfoFormDBCloseTime" Text="Closing data sources"/><S' + 
'trRes Name="sInfoFormSortTime" Text="Sorting data"/><StrRes Name="sInfoFormDataBuildTime" Text="Calculation measures"/><StrRes Name="sInfoFormTimeSour' + 
'ces" Text="Processing sources"/><StrRes Name="sInfoFormTimeAxisX" Text="Building X axis"/><StrRes Name="sInfoFormTimeAxisY" Text="Building Y axis"/><S' + 
'trRes Name="sInfoFormTimeFacts" Text="Building measures"/><StrRes Name="sInfoFormTimeLinks" Text="Filling links"/><StrRes Name="sInfoFormTimeUniques" ' + 
'Text="Filling unique values"/><StrRes Name="sSave" Text="Save"/><StrRes Name="sLoad" Text="Load"/><StrRes Name="sCubeSave" Text="Save cube"/><StrRes N' + 
'ame="sCubeLoad" Text="Load cube"/><StrRes Name="sCubeLoadAdditional" Text="Load additional cube"/><StrRes Name="sClearGrid" Text="Clear grid"/><StrRes' + 
' Name="sSchemaSave" Text="Save schema"/><StrRes Name="sSchemaLoad" Text="Load schema"/><StrRes Name="sExportTo" Text="Export to ..."/><StrRes Name="sS' + 
'howHints" Text="Show hints"/><StrRes Name="sHideRowZeros" Text="Hide row zeros"/><StrRes Name="sHideColZeros" Text="Hide column zeros"/><StrRes Name="' + 
'sRowSort" Text="Row sort type"/><StrRes Name="sColSort" Text="Column sort type"/><StrRes Name="sDataMarker" Text="Data marker"/><StrRes Name="sIncDeci' + 
'mal" Text="Increase precision"/><StrRes Name="sDecDecimal" Text="Decrease precision"/><StrRes Name="sAlignment" Text="Alignment"/><StrRes Name="sRemov' + 
'eToPage" Text="Move items to page area"/><StrRes Name="sDisplayAs" Text="Display as"/><StrRes Name="sFieldList" Text="Field list"/><StrRes Name="sInfo' + 
'rmation" Text="Information"/><StrRes Name="sFloatYAxis" Text="Y Axis floating"/><StrRes Name="sTranspose" Text="Transpose"/><StrRes Name="sSortByValue' + 
's" Text="Sort by axis values"/><StrRes Name="sSortByTotals" Text="Sort by measure totals"/><StrRes Name="sSortByXSelection" Text="Sort by focused row"' + 
'/><StrRes Name="sSortByYSelection" Text="Sort by focused column"/><StrRes Name="sOriginalValue" Text="Original value"/><StrRes Name="sRowPercentTotal"' + 
' Text="Total percent by row"/><StrRes Name="sColPercentTotal" Text="Total percent by column"/><StrRes Name="sRowPercentGroup" Text="Group percent by r' + 
'ow"/><StrRes Name="sColPercentGroup" Text="Group percent by column"/><StrRes Name="sGrandTotalPercent" Text="Grand total percent"/><StrRes Name="sRowR' + 
'ank" Text="Rank by row"/><StrRes Name="sColRank" Text="Rank by column"/><StrRes Name="sSelect" Text="Select"/><StrRes Name="sSelectRow" Text="Select r' + 
'ow"/><StrRes Name="sSelectCol" Text="Select column"/><StrRes Name="sSelectAll" Text="Select all"/><StrRes Name="sCopy" Text="Copy"/><StrRes Name="sDel' + 
'eteMeasure" Text="Delete measure"/><StrRes Name="sProperties" Text="Properties..."/><StrRes Name="sQuarter_1" Text="Quarter 1"/><StrRes Name="sQuarter' + 
'_2" Text="Quarter 2"/><StrRes Name="sQuarter_3" Text="Quarter 3"/><StrRes Name="sQuarter_4" Text="Quarter 4"/><StrRes Name="sSumPrefix" Text="Sum of "' + 
'/><StrRes Name="sCountPrefix" Text="Count of "/><StrRes Name="sMinPrefix" Text="Minimum of "/><StrRes Name="sMaxPrefix" Text="Maximum of "/><StrRes Na' + 
'me="sAvgPrefix" Text="Average of "/><StrRes Name="sMulPrefix" Text="Multiplication of "/><StrRes Name="sVariancePrefix" Text="Variance of "/><StrRes N' + 
'ame="sStdDevPrefix" Text="Std Dev of "/><StrRes Name="sVarianceSPrefix" Text="Variance S of "/><StrRes Name="sStdDevSPrefix" Text="Std DevS of "/><Str' + 
'Res Name="sFuncPrefix" Text="Calculation "/><StrRes Name="sCountOfUniquePrefix" Text="Count unique of "/><StrRes Name="sFuncDetPrefix" Text="Calculati' + 
'on (detail) "/><StrRes Name="sListOfValuesCaption" Text="List of values"/><StrRes Name="sMedianPrefix" Text="Median "/><StrRes Name="sWeightedMeanPref' + 
'ix" Text="Weighted arithmetic mean of "/><StrRes Name="sWeightedMeanCaption" Text="Weighted arithmetic mean"/><StrRes Name="sFactsRegion" Text="Move m' + 
'easure fields here"/><StrRes Name="sRowsRegion" Text="Move row fields here"/><StrRes Name="sFiltersRegion" Text="Move filter fields here"/><StrRes Nam' + 
'e="sColsRegion" Text="Move column fields here"/><StrRes Name="sServiceRegion" Text="Service"/><StrRes Name="sSumCaption" Text="Sum"/><StrRes Name="sCo' + 
'untCaption" Text="Count"/><StrRes Name="sMinCaption" Text="Minimum"/><StrRes Name="sMaxCaption" Text="Maximum"/><StrRes Name="sAvgCaption" Text="Avera' + 
'ge"/><StrRes Name="sMulCaption" Text="Multiplication "/><StrRes Name="sVarianceCaption" Text="Variance"/><StrRes Name="sStdDevCaption" Text="Std Dev"/' + 
'><StrRes Name="sVarianceSCaption" Text="VarianceS"/><StrRes Name="sStdDevSCaption" Text="Std DevS"/><StrRes Name="sFuncCaption" Text="Calculation"/><S' + 
'trRes Name="sCountOfUniqueCaption" Text="Count unique"/><StrRes Name="sFuncDetCaption" Text="Calculation (detail)"/><StrRes Name="sMedianCaption" Text' + 
'="Median"/><StrRes Name="sLinkToSelf" Text="Reference to self! Code=%d."/><StrRes Name="sParentNotFound" Text="Parent not fount! Code=%d."/><StrRes Na' + 
'me="sLoopLink" Text="Circular reference! Code=%d."/><StrRes Name="sAllValues" Text="All values"/><StrRes Name="sErBadLexem" Text="Uncorrert lexema!"/>' + 
'<StrRes Name="sErCommentNotClosed" Text="Unfinished comment!"/><StrRes Name="sErMixDigitChar" Text="Mixing digit with char!"/><StrRes Name="sErUnfinis' + 
'hedIdent" Text="Declaration of identifier is not finished"/><StrRes Name="sDetailGridCaption" Text="Cell details"/><StrRes Name="sLeftJustify" Text="L' + 
'eft justify"/><StrRes Name="sCenter" Text="Center"/><StrRes Name="sRightJustify" Text="Right justify"/><StrRes Name="sPopupHint8" Text="Full expand"/>' + 
'<StrRes Name="sPopupHint9" Text="Full collapse"/><StrRes Name="sFormulaEditor" Text="Formula Editor"/><StrRes Name="sScriptErrorsFound" Text="Found er' + 
'rors [%s]. Save anyway?"/><StrRes Name="sChartDataManagerCaption" Text="Data Management"/><StrRes Name="sErrorFieldAfterHierarchi" Text="Moving fields' + 
' behind hierarchi field temporary unavailable!"/><StrRes Name="sChartSaveTemplate" Text="Save chart template"/><StrRes Name="sChartOpenTemplate" Text=' + 
'"Open chart template"/><StrRes Name="sChartStyle" Text="Chart style"/><StrRes Name="sChartByRows" Text="By Rows"/><StrRes Name="sChartByCols" Text="By' + 
' Columns"/><StrRes Name="sChartMarks" Text="Marks"/><StrRes Name="sChartLegend" Text="Legend"/><StrRes Name="sChartDataManager" Text="Data managment"/' + 
'><StrRes Name="sChartStyleBar" Text="Bar style"/><StrRes Name="sChartStyleLine" Text="Line style"/><StrRes Name="sChartStylePoint" Text="Point style"/' + 
'><StrRes Name="sChartStyleArea" Text="Area style"/><StrRes Name="sChartStylePie" Text="Pie style"/><StrRes Name="sChartLegendLeft" Text="Left"/><StrRe' + 
's Name="sChartLegendRight" Text="Right"/><StrRes Name="sChartLegendTop" Text="Top"/><StrRes Name="sChartLegendBottom" Text="Bottom"/><StrRes Name="sAu' + 
'toSize_Default" Text="Default"/><StrRes Name="sAutoSize_BySlice" Text="By sizes of grid"/><StrRes Name="sAutoSize_ColWidth" Text="Auto width"/><StrRes' + 
' Name="sAutoSize_ColWidthRestrict" Text="Auto width with restriction"/><StrRes Name="sAutoSize_RowHeight" Text="Auto height"/><StrRes Name="sAutoSize_' + 
'ByMemoSize" Text="By nested memo sizes"/><StrRes Name="propCube" Text="Multidimensional data source"/><StrRes Name="propPaintSizes" Text="Size calcula' + 
'tion algorithm and values for it"/><StrRes Name="propShowNames" Text="Determines if the cross will show field names"/><StrRes Name="propAutoSizeStyle"' + 
' Text="Size calculation algorithm"/><StrRes Name="propDefaultColWidth" Text="Width used for all cells when AutoSizeStyle=ssDefault"/><StrRes Name="pro' + 
'pDefaultRowHeight" Text="Height used for all cells when AutoSizeStyle=ssDefault"/><StrRes Name="propMaxColWidth" Text="Maximum column width constraint' + 
' which applied when AutoSizeStyle=ssAutoColWidthRestrict"/><StrRes Name="propFileName" Text="File name of existed cube"/><StrRes Name="sConvFieldName"' + 
' Text="Field name"/><StrRes Name="sConvFieldType" Text="Type"/><StrRes Name="sConvFieldSize" Text="Size"/><StrRes Name="sConvFieldCaption" Text="Capti' + 
'on"/><StrRes Name="sConvFieldConv" Text="Use converter"/><StrRes Name="sConvFieldNewType" Text="Target type"/><StrRes Name="sConvFieldNewSize" Text="T' + 
'arget size"/><StrRes Name="sConvEditField" Text="Edit Field"/><StrRes Name="sConvSaveToFile" Text="Save To File"/><StrRes Name="sConvLoadFromFile" Tex' + 
't="Load From File"/><StrRes Name="sConvNoType" Text="Need target type!"/><StrRes Name="sConvNoSize" Text="Target size must be &#62; 0!"/><StrRes Name=' + 
'"dmSelectExample" Text="Show Example"/><StrRes Name="dmSchema" Text="Schemas"/><StrRes Name="dmFRPreview" Text="Preview in FastReport"/><StrRes Name="' + 
'dmCrossTbl" Text="Cross table"/><StrRes Name="dmChart" Text="Chart"/><StrRes Name="dmSourceTbl" Text="Sources table"/><StrRes Name="dmSelectExample" T' + 
'ext="Select Example"/><StrRes Name="dmConf" Text="democonfen.txt"/><StrRes Name="sPercentFormat" Text="Percent Format"/><StrRes Name="sDefaultFormat" ' + 
'Text="Default Format"/><StrRes Name="sChartRealTimeChange" Text="Auto apply changes"/><StrRes Name="sChartDataSource" Text="Chart data source properti' + 
'es"/><StrRes Name="sChartSeriesAxis" Text="Use as series:"/><StrRes Name="sChartValuesAxis" Text="Use as categories:"/><StrRes Name="sChartSeriesField' + 
'Count" Text="Field count for Series:"/><StrRes Name="sChartValuesFieldCount" Text="Field count for Categories:"/><StrRes Name="sChartMeasureFieldIndex' + 
'" Text="Measure index:"/><StrRes Name="sChartFrozen" Text="Frozen chart"/><StrRes Name="sChartDataProperty" Text="Chart properties"/><StrRes Name="sAx' + 
'isX" Text="Dimensions from columns"/><StrRes Name="sAxisY" Text="Dimensions from rows"/><StrRes Name="sChartByAxisAxis" Text="Series and categories fr' + 
'om dimensions"/><StrRes Name="sChartByAxisMeasures" Text="Series from measures, categories from dimensions"/><StrRes Name="sChartByMeasuresAxis" Text=' + 
'"Series from dimensions, categories from measures"/><StrRes Name="sChartPropsAreNotCorrect" Text="Chart properties are not correct"/><StrRes Name="sSc' + 
'riptErrorFilter" Text="Error during filter calculation:"/><StrRes Name="sScriptErrorCalc" Text="Error during script calculation:"/><StrRes Name="sErro' + 
'rStr" Text="Error"/><StrRes Name="SWeekNumberPrefix" Text="Week_number"/><StrRes Name="SDayOfYearPrefix" Text="Day_of_year_"/><StrRes Name="sFirstValu' + 
'e" Text="First value"/><StrRes Name="sFirstValuePrefix" Text="First value of"/><StrRes Name="sMeasureName" Text="Measure name"/><StrRes Name="sListOfU' + 
'niquePrefix" Text="List unique of "/><StrRes Name="sListOfUniqueCaption" Text="List unique"/><StrRes Name="sExportCloneMasterValue" Text="Clone Master' + 
' Value"/><StrRes Name="sCopyWithHeader" Text="Copy with headers"/><StrRes Name="fkCustom" Text="Custom"/><StrRes Name="sChartStyleHorizBar" Text="Hori' + 
'z Bar style"/><StrRes Name="sChartStackType" Text="Multiple Bar"/><StrRes Name="sChartStackNone" Text="None"/><StrRes Name="sChartStackSide" Text="Sid' + 
'e"/><StrRes Name="sChartStackStacked" Text="Stacked"/><StrRes Name="sChartStackStacked100" Text="Stacked 100%"/><StrRes Name="sChartStackSideAll" Text' + 
'="Side All"/><StrRes Name="sChartStackSelfStack" Text="Self Stack"/><StrRes Name="sLastValue" Text="Last value"/><StrRes Name="sLastValuePrefix" Text=' + 
'"Last value of "/><StrRes Name="obfrcCube" Text="FastCube 2 Cube object"/><StrRes Name="obfrcChartView" Text="FastCube 2 Chart object"/><StrRes Name="' + 
'obfrcCrossView" Text="FastCube 2 Cross-tab object"/><StrRes Name="sMeasureEditor" Text="Measure Editor"/><StrRes Name="sGeneral" Text="General"/><StrR' + 
'es Name="sCaption" Text="Caption"/><StrRes Name="sAggregate" Text="Aggregate"/><StrRes Name="sFieldBased" Text="Field Based"/><StrRes Name="sBaseField' + 
'" Text="Base Field"/><StrRes Name="sExtraField" Text="Extra Field"/><StrRes Name="sCalculated" Text="Calculated"/><StrRes Name="sFunction" Text="Funct' + 
'ion"/><StrRes Name="sOrder" Text="Order"/><StrRes Name="sCalcAllCells" Text="Calc all cells"/><StrRes Name="sTotals" Text="Totals"/><StrRes Name="sFil' + 
'tering" Text="Filtering"/><StrRes Name="sStyle" Text="Style"/><StrRes Name="sFillStyle" Text="Fill Style"/><StrRes Name="sFillColor" Text="Fill Color ' + 
'%d"/><StrRes Name="sTextStyle" Text="Text Style"/><StrRes Name="sTextColor" Text="Text Color"/><StrRes Name="sRange" Text="Range"/><StrRes Name="sExam' + 
'ple" Text="Example"/><StrRes Name="sAdd" Text="Add"/><StrRes Name="sDelete" Text="Delete"/><StrRes Name="sMoveUp" Text="Move Up"/><StrRes Name="sMoveD' + 
'own" Text="Move Down"/><StrRes Name="sExampleString" Text="Example string"/><StrRes Name="sBold" Text="Bold"/><StrRes Name="sItalic" Text="Italic"/><S' + 
'trRes Name="sUnderline" Text="Underline"/><StrRes Name="sStrikeOut" Text="Strike Out"/><StrRes Name="sSolidColor" Text="Solid color"/><StrRes Name="sH' + 
'orzGradient" Text="Horizontal gradient"/><StrRes Name="sVertGradient" Text="Vertical gradient"/><StrRes Name="sHorzCenterGradient" Text="Horz-Center g' + 
'radient"/><StrRes Name="sVertCenterGradient" Text="Vert-Center gradient"/><StrRes Name="sDiag1Gradient" Text="Diagonal gradient 1"/><StrRes Name="sDia' + 
'g2Gradient" Text="Diagonal gradient 2"/><StrRes Name="sDiag1CenterGradient" Text="Diag-Center gradient 1"/><StrRes Name="sDiag2CenterGradient" Text="D' + 
'iag-Center gradient 2"/><StrRes Name="sCorner1Gradient" Text="Corner gradient 1"/><StrRes Name="sCorner2Gradient" Text="Corner gradient 2"/><StrRes Na' + 
'me="sCorner3Gradient" Text="Corner gradient 3"/><StrRes Name="sCorner4Gradient" Text="Corner gradient 4"/><StrRes Name="sCenterGradient" Text="Center ' + 
'gradient"/><StrRes Name="sConfirmDelete" Text="Confirm deletion"/><StrRes Name="sDimensionEditor" Text="Dimension Editor"/><StrRes Name="sUseTotalPosi' + 
'tionFromMeasure" Text="Use total position from measure"/><StrRes Name="sSortDirection" Text="Sort direction"/><StrRes Name="sExpand" Text="Expand"/><S' + 
'trRes Name="sCollapse" Text="Collapse"/><StrRes Name="sExpandGroup" Text="Expand group"/><StrRes Name="sCollapseGroup" Text="Collapse group"/><StrRes ' + 
'Name="sExpandAll" Text="Expand all"/><StrRes Name="sCollapseAll" Text="Collapse all"/><StrRes Name="sMoveToGroup" Text="Move to group"/><StrRes Name="' + 
'sMoveFromGroup" Text="Move from group"/><StrRes Name="sDeleteGroup" Text="Delete group"/><StrRes Name="sRenameGroup" Text="Rename group..."/><StrRes N' + 
'ame="sFilterOutThisItem" Text="Filter out this item"/><StrRes Name="sFilterOutAllOtherItems" Text="Filter out all other items"/><StrRes Name="sHideNod' + 
'e" Text="Hide node"/><StrRes Name="sShowHiddenNodes" Text="Show hidden nodes"/><StrRes Name="sShowTopN" Text="Show Top N..."/><StrRes Name="sClearTopN' + 
'" Text="Clear Top N"/><StrRes Name="sActiveTopN" Text="Active Top N filters: %d"/><StrRes Name="sAxisType" Text="Axis type"/><StrRes Name="sBefore" Te' + 
'xt="Before"/><StrRes Name="sAfter" Text="After"/><StrRes Name="sHide" Text="Hide"/><StrRes Name="sFromMeasure" Text="From measure"/><StrRes Name="sSta' + 
'ndard" Text="Standard"/><StrRes Name="sTreeLike" Text="Tree like"/><StrRes Name="sCreateNew" Text="Create new"/><StrRes Name="sNewGroup" Text="New gro' + 
'up"/><StrRes Name="sCreateANewGroup" Text="Create a new group"/><StrRes Name="sEnterANewGroupName" Text="Enter a new group name:"/><StrRes Name="sSort' + 
'" Text="Sort"/><StrRes Name="sRename" Text="Rename..."/><StrRes Name="sMoveToPage" Text="Move to page"/><StrRes Name="sClearFilter" Text="Clear filter' + 
'"/><StrRes Name="sSplits" Text="Splits"/><StrRes Name="sCreateNewGroup" Text="Create new group..."/><StrRes Name="sCreateOtherGroup" Text="Create &#60' + 
';other&#62; group..."/><StrRes Name="sCreateCustomGroup" Text="Create custom group..."/><StrRes Name="sAddNewMeasure" Text="Add new measure..."/><StrR' + 
'es Name="sOther" Text="Other"/><StrRes Name="sEnterOtherGroupCaption" Text="Enter &#38;#60;other&#38;#62; group caption:"/><StrRes Name="sAscending" T' + 
'ext="Ascending"/><StrRes Name="sDescending" Text="Descending"/><StrRes Name="sDay" Text="Day"/><StrRes Name="sMonth" Text="Month"/><StrRes Name="sQuar' + 
'ter" Text="Quarter"/><StrRes Name="sYear" Text="Year"/><StrRes Name="sDayOfWeek" Text="Day of week"/><StrRes Name="sWeekNumber" Text="Week number"/><S' + 
'trRes Name="sDayOfYear" Text="Day of year"/><StrRes Name="sHalfYear" Text="Half year"/><StrRes Name="sHour" Text="Hour"/><StrRes Name="sMinute" Text="' + 
'Minute"/><StrRes Name="sSecond" Text="Second"/><StrRes Name="sMillisecond" Text="Millisecond"/><StrRes Name="sTimeSplits" Text="Splits of time"/><StrR' + 
'es Name="sDateSplits" Text="Splits of date"/><StrRes Name="sDateAttribute" Text="Date attribute"/><StrRes Name="sTimeAttribute" Text="Time attribute"/' + 
'><StrRes Name="sCalcForSelection" Text="Calc for selection"/><StrRes Name="sScale" Text="Scale"/><StrRes Name="sScaleSlider" Text="Scale slider"/><Str' + 
'Res Name="sDimension" Text="Dimension"/><StrRes Name="sShow" Text="Show"/><StrRes Name="sCreateOthers" Text="Create &#60;others&#62;"/><StrRes Name="s' + 
'TopMax" Text="most"/><StrRes Name="sTopMin" Text="least"/><StrRes Name="sStylesEditor" Text="Styles Editor"/><StrRes Name="sCaptionArea" Text="Caption' + 
' area"/><StrRes Name="sHeaderArea" Text="Header area"/><StrRes Name="sHeaderCells" Text="Header cells"/><StrRes Name="sHeaderCellsSelected" Text="Head' + 
'er cells (selected)"/><StrRes Name="sDataArea" Text="Data area"/><StrRes Name="sDataCells" Text="Data cells"/><StrRes Name="sDataCellsSelected" Text="' + 
'Data cells (selected)"/><StrRes Name="sActiveDimension" Text="Active dimension"/><StrRes Name="sInactiveDimension" Text="Inactive dimension"/><StrRes ' + 
'Name="sDataCellsTotals" Text="Data cells (totals)"/><StrRes Name="sFieldsItem" Text="Fields item"/><StrRes Name="sStatusArea" Text="Status area"/><Str' + 
'Res Name="sHighlightRuleEditor" Text="Highlight rule editor"/><StrRes Name="sRangeHighlightCaption" Text="Highlight cells matched condition"/><StrRes ' + 
'Name="sRule" Text="Rule (applies in order)"/><StrRes Name="sCellValueBetween" Text="Cell value between %f and %f"/><StrRes Name="sCellValueBeyond" Tex' + 
't="Cell value beyond %f and %f"/><StrRes Name="sCellValueEqual" Text="Cell value = %f"/><StrRes Name="sCellValueNotEqual" Text="Cell value &#60;&#62; ' + 
'%f"/><StrRes Name="sCellValueGreater" Text="Cell value &#62; %f"/><StrRes Name="sCellValueLess" Text="Cell value &#60; %f"/><StrRes Name="sCellValueGr' + 
'eaterOrEqual" Text="Cell value &#62;= %f"/><StrRes Name="sCellValueLessOrEqual" Text="Cell value &#60;= %f"/><StrRes Name="sCellTextContains" Text="Ce' + 
'll text contains ''%s''"/><StrRes Name="sCellTextNotContains" Text="Cell text not contains ''%s''"/><StrRes Name="sCellTextStartsWith" Text="Cell text sta' + 
'rts with ''%s''"/><StrRes Name="sCellTextEndsWith" Text="Cell text ends with ''%s''"/><StrRes Name="sCellValueIsNull" Text="Cell value is null"/><StrRes N' + 
'ame="sCellValueIsNotNull" Text="Cell value is not null"/><StrRes Name="sCellValue" Text="Value"/><StrRes Name="sCellText" Text="Text"/><StrRes Name="s' + 
'CellDate" Text="Date"/><StrRes Name="sCellNull" Text="Empty"/><StrRes Name="sCellNotNull" Text="Not empty"/><StrRes Name="sBetween" Text="between"/><S' + 
'trRes Name="sBeyond" Text="beyond"/><StrRes Name="sEqual" Text="equal"/><StrRes Name="sNotEqual" Text="not equal"/><StrRes Name="sGreater" Text="great' + 
'er"/><StrRes Name="sLess" Text="less"/><StrRes Name="sGreaterOrEqual" Text="greater or equal"/><StrRes Name="sLessOrEqual" Text="less or equal"/><StrR' + 
'es Name="sContains" Text="contains"/><StrRes Name="sNotContains" Text="not contains"/><StrRes Name="sStartsWith" Text="starts with"/><StrRes Name="sEn' + 
'dsWith" Text="ends with"/><StrRes Name="sAnd" Text="and"/><StrRes Name="sOr" Text="or"/><StrRes Name="sEditStyle" Text="Style..."/><StrRes Name="sStyl' + 
'eEditor" Text="Style editor"/><StrRes Name="sApplyTo" Text="Apply to"/><StrRes Name="sToCells" Text="Cells"/><StrRes Name="sToTotals" Text="Totals"/><' + 
'StrRes Name="sToGrandTotal" Text="Grand Total"/><StrRes Name="sContinuousHighlightCaption" Text="Highlight all cells dependent on value"/><StrRes Name' + 
'="sHighlightKind" Text="Highlight type"/><StrRes Name="sTwoColorScale" Text="Two color scale"/><StrRes Name="sThreeColorScale" Text="Three color scale' + 
'"/><StrRes Name="sBarChart" Text="Bar"/><StrRes Name="sIconSet" Text="Icon set"/><StrRes Name="sMinValue" Text="Minimal value"/><StrRes Name="sMinValu' + 
'eByRow" Text="Minimal value by row"/><StrRes Name="sMinValueByCol" Text="Minimal value by col"/><StrRes Name="sMidValue" Text="Average value"/><StrRes' + 
' Name="sMaxValue" Text="Maximal value"/><StrRes Name="sMaxValueByRow" Text="Maximal value by row"/><StrRes Name="sMaxValueByCol" Text="Maximal value b' + 
'y col"/><StrRes Name="sType" Text="Type"/><StrRes Name="sValue" Text="Value"/><StrRes Name="sColor" Text="Color"/><StrRes Name="sNumber" Text="Number"' + 
'/><StrRes Name="sPercentByRow" Text="Percent by row"/><StrRes Name="sPercentByCol" Text="Percent by col"/><StrRes Name="sPercentileByRow" Text="Percen' + 
'tile by row"/><StrRes Name="sPercentileByCol" Text="Percentile by col"/><StrRes Name="sBarColor" Text="Bar color"/><StrRes Name="sTheShortestBar" Text' + 
'="The shortest bar"/><StrRes Name="sTheLongestBar" Text="The longest bar"/><StrRes Name="sShowCellValue" Text="Show cell value"/><StrRes Name="sGradie' + 
'ntDraw" Text="Draw gradient"/><StrRes Name="sFrameColor" Text="Frame color"/><StrRes Name="sIfValue" Text="if value"/><StrRes Name="sIfValue1" Text="i' + 
'f %s %g"/><StrRes Name="sReverseOrder" Text="Reverse order"/><StrRes Name="sIcon" Text="Icon"/><StrRes Name="sNoIcon" Text="No icon"/><StrRes Name="sC' + 
'ustom" Text="Custom"/><StrRes Name="sString" Text="String"/><StrRes Name="sNumeric" Text="Numeric"/><StrRes Name="sDateTime" Text="DateTime"/><StrRes ' + 
'Name="sSkipNullPoints" Text="Skip null points"/><StrRes Name="sBaseAxisDataType" Text="Data type for base axis"/><StrRes Name="sRangeEditor" Text="Ran' + 
'ge editor"/><StrRes Name="sCustomFilter" Text="Custom filter..."/><StrRes Name="sShowAvailable" Text="Show available"/><StrRes Name="dtMeasures" Text=' + 
'"Measures"/><StrRes Name="dtDimensions" Text="Dimensions"/><StrRes Name="dtSliceFields" Text="SliceFields"/><StrRes Name="sAxisProperties" Text="Axis ' + 
'properties..."/><StrRes Name="sAxisEditor" Text="Axis editor"/><StrRes Name="sGrandTotalPosition" Text="Grand total position"/><StrRes Name="sAddition' + 
'alGrandTotals" Text="Additional grand totals"/><StrRes Name="sDistinctField" Text="Distinct Field"/><StrRes Name="sDistinct" Text="Distinct"/><StrRes ' + 
'Name="sChangeNullToZero" Text="Change Null to Zero"/><StrRes Name="sClear" Text="clear"/><StrRes Name="sExpression" Text="Expression"/><StrRes Name="s' + 
'ScriptFunction" Text="Script Function"/><StrRes Name="sCalculation" Text="Calculation"/><StrRes Name="sFilterCalculation" Text="Filter Calculation"/><' + 
'StrRes Name="sExpressionEditor" Text="Expression Editor"/><StrRes Name="sIgnorecase" Text="Ignore Case"/></Resources>' + 
' ';

initialization
  fcxResources.AddXML(resXML);

end.

處理字典的機制是在fcxRes.pas文件的TfcxResources類,具體是其Get和GetAnsi兩個方法:

  TfcxResources = class(TObject)
  private
    FNames: TStringList;
    FValues: TWideStrings;
    FLanguages: TStringList;
    FHelpFile: String;
    FCP: Cardinal;
    procedure BuildLanguagesList;
  public
    constructor Create;
    destructor Destroy; override;
    function Get(const StrName: String): String;
    function GetAnsi(const StrName: String): String;
    procedure Add(const Ref, Str: String);
    procedure AddW(const Ref: String; Str: WideString);
    procedure AddStrings(const Str: String);
    procedure AddXML(const Str: AnsiString);
    procedure Clear;
    procedure LoadFromFile(const FileName: String);
    procedure LoadFromStream(Stream: TStream);
    procedure Help(Sender: TObject); overload;

    property Languages: TStringList read FLanguages;
    property HelpFile: String read FHelpFile write FHelpFile;
  end;

這種機制,軟件要按不同的語言編譯成不用的exe發行版。比如早期的windows,分英文版,中文簡體版,中文繁體版....後來都不分了,All in one都支持,用戶自己選擇。

Acro Multi-Language Suite元件就是支持這種All in one的動態切換語言的模式。要適應Fast Cube元件,可以Hook前面說的Get和Get Ansi函數,具體如下:

unit wxhHookRes_FastCube;

interface

implementation
uses
  fcxRes,acroDDetours,acroMultiResource;

type
  TwxhMultiProc_Get=function(const StrName: String): String of Object;
  TwxhMultifcxResources=class(TfcxResources)
  public
    function Get(const StrName: String): String;
    function GetAnsi(const StrName: String): String;
  end;
var
  gOldProc_Get:TMethod;
  gOldProc_GetAnsi:TMethod;

{ TwxhMultifcxResources }

function TwxhMultifcxResources.Get(const StrName: String): String;
begin
  Result:=TwxhMultiProc_Get(gOldProc_Get)(StrName);
  Result:=acroMultiResource.ResourceStorage.GetDisplayValue(Result);
end;

function TwxhMultifcxResources.GetAnsi(const StrName: String): String;
begin
  Result:=TwxhMultiProc_Get(gOldProc_GetAnsi)(StrName);
  Result:=acroMultiResource.ResourceStorage.GetDisplayValue(Result);
end;

initialization
  gOldProc_Get.Data:=fcxRes.fcxResources;
  gOldProc_Get.Code:=acroDDetours.InterceptCreate(@fcxRes.TfcxResources.Get,@TwxhMultifcxResources.Get);
  gOldProc_GetAnsi.Data:=fcxRes.fcxResources;
  gOldProc_GetAnsi.Code:=acroDDetours.InterceptCreate(@fcxRes.TfcxResources.GetAnsi,@TwxhMultifcxResources.GetAnsi);
end.

完美,給張最後效果截圖:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章