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="<no caption>"/><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 > 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 <' +
';other> 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 &#60;other&#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 <others>"/><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 <> ' +
'%f"/><StrRes Name="sCellValueGreater" Text="Cell value > %f"/><StrRes Name="sCellValueLess" Text="Cell value < %f"/><StrRes Name="sCellValueGr' +
'eaterOrEqual" Text="Cell value >= %f"/><StrRes Name="sCellValueLessOrEqual" Text="Cell value <= %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.
完美,给张最后效果截图: