671 lines
27 KiB
TypeScript
671 lines
27 KiB
TypeScript
export const enUS = {
|
|
common: {
|
|
cancel: 'Cancel',
|
|
confirm: 'Confirm',
|
|
delete: 'Delete',
|
|
close: 'Close',
|
|
clear: 'Clear'
|
|
},
|
|
app: {
|
|
projectConflict: {
|
|
title: 'Project Already Open',
|
|
desc: 'Project "{name}" is already active in another tab. Editing is blocked here to avoid IndexedDB conflicts.',
|
|
countdown: 'This page will try to close automatically in {seconds} seconds. You can open another project in a new tab first.',
|
|
opened: '(Opened)',
|
|
lastEdited: 'Last edited: {time}',
|
|
openDefault: 'Open Default Project',
|
|
createAndOpen: 'Create and Open'
|
|
}
|
|
},
|
|
home: {
|
|
title: 'Calculation Entry',
|
|
subtitle: 'Project Budget · Quick Calc · Import Data',
|
|
projectCalcTab: 'Project Calculation',
|
|
quickCalcTab: 'Quick Calculation',
|
|
cards: {
|
|
heroTitle: 'One-Click Smart Budget',
|
|
heroSubTitle: 'Accelerate standards adoption',
|
|
heroDesc: 'Cost consulting fee calculator for transport construction projects',
|
|
projectBudget: 'Project Budget',
|
|
projectBudgetDesc: 'For full project-level calculation across multiple contracts with import/export support',
|
|
quickCalc: 'Quick Calc',
|
|
quickCalcDesc: 'Suitable for single service trial, select industry, consultation type, engineering specialty, input base number and get results in seconds',
|
|
importData: 'Import Data',
|
|
importDataDesc: 'Import ".zw" package to restore project state and continue work quickly',
|
|
enter: 'Enter',
|
|
pickFile: 'Choose File',
|
|
pickExisting: 'Choose Existing'
|
|
},
|
|
dialog: {
|
|
newProject: 'New Project',
|
|
chooseIndustryDesc: 'Choose an industry and enter project calculation directly.',
|
|
industry: 'Industry',
|
|
selectIndustry: 'Select industry',
|
|
entering: 'Entering...',
|
|
enterProjectCalc: 'Enter Project Calculation',
|
|
confirmImport: 'Confirm Import',
|
|
confirmImportDesc: 'Import "{file}" and enter workspace immediately, overriding current project data.',
|
|
confirmImportAction: 'Import',
|
|
chooseExistingProject: 'Choose Existing Project',
|
|
chooseExistingProjectDesc: 'Select a project from the list and enter workspace directly.',
|
|
noProjectYet: 'No project available. Create a new project first.'
|
|
}
|
|
},
|
|
tab: {
|
|
toolbar: {
|
|
light: 'Light',
|
|
dark: 'Dark',
|
|
language: 'Lang',
|
|
importExport: 'Import/Export',
|
|
importData: 'Import',
|
|
exportData: 'Export',
|
|
exportReport: 'Export Report',
|
|
userGuide: 'Guide',
|
|
reset: 'Reset',
|
|
resetting: 'Resetting...',
|
|
projectList: 'Projects',
|
|
projectCount: 'Projects: {count}',
|
|
createProject: 'New Project',
|
|
backHome: 'Back Home',
|
|
resetAll: 'Reset All',
|
|
opened: '(Opened)',
|
|
lastEdited: 'Last edited: {time}'
|
|
},
|
|
menu: {
|
|
closeAll: 'Close All',
|
|
closeLeft: 'Close Left',
|
|
closeRight: 'Close Right',
|
|
closeOther: 'Close Others'
|
|
},
|
|
dialog: {
|
|
resetTitle: 'Confirm Reset',
|
|
resetDesc: 'All project data will be cleared and the default page will be restored. Continue?',
|
|
confirmReset: 'Confirm Reset',
|
|
importOverrideTitle: 'Confirm Override Import',
|
|
importOverrideDesc: 'Use "{file}" to override all local data for current project. Continue?',
|
|
confirmOverride: 'Confirm Override',
|
|
newProjectTitle: 'New Project',
|
|
newProjectDesc: 'Choose an industry, then open the new project calculation page in a new tab.',
|
|
createAndOpen: 'Create & Open',
|
|
creating: 'Creating...',
|
|
projectLimitTitle: 'Project Limit Reached',
|
|
projectLimitDesc: 'Project count has reached {max}. Delete one project before adding a new one.',
|
|
iKnow: 'OK',
|
|
deleteProjectTitle: 'Confirm Delete Project',
|
|
deleteCurrentProjectDesc: 'Delete current project "{name}"? Data will be cleared and you will return to home.',
|
|
deleteProjectDesc: 'Delete project "{name}"? This will remove local data for that project.'
|
|
},
|
|
guide: {
|
|
title: 'User Guide',
|
|
later: 'Later',
|
|
prev: 'Prev',
|
|
next: 'Next',
|
|
finish: 'Finish and Disable Auto Popup',
|
|
jumpToStep: 'Jump to step {index}',
|
|
steps: {
|
|
step1: {
|
|
title: 'Welcome',
|
|
description: 'This guide covers major features and the full workflow. It is recommended to go through it in order.',
|
|
point1: 'The top area is the tab bar, for quick switching between project, segment, and pricing pages.',
|
|
point2: 'Tables and forms on the page auto-save locally. No manual save is needed.',
|
|
point3: 'You can reopen this tutorial anytime from the top-right "Guide" button.'
|
|
},
|
|
step2: {
|
|
title: 'Project Card and Four Modules',
|
|
description: 'The default "Project Card" tab is the entry. The left flow line contains four project-level modules.',
|
|
point1: 'Basic Info: fill project name and project scale details.',
|
|
point2: 'Contract Segment Management: create, sort, search, import/export segments.',
|
|
point3: 'Consult Category Factor / Major Factor: maintain budget values and remarks.'
|
|
},
|
|
step3: {
|
|
title: 'Fill Basic Info',
|
|
description: 'Complete project-level data in "Basic Info" first, then continue to segment-level calculations.',
|
|
point1: 'Project name is used in export file names and page display.',
|
|
point2: 'Project detail table supports direct edit, copy/paste, and undo/redo.',
|
|
point3: 'Group rows auto-summarize, and the pinned top row shows grand total.'
|
|
},
|
|
step4: {
|
|
title: 'Contract Segment Management',
|
|
description: 'Manage the full lifecycle of contract segments in this module.',
|
|
point1: '"Add Segment" creates a new one; top-right actions on each card support edit/delete.',
|
|
point2: 'Search and grid/list switch are supported; drag-sort is available when not searching.',
|
|
point3: 'The more menu supports import/export; click a card to enter segment details.'
|
|
},
|
|
step5: {
|
|
title: 'Contract Segment Detail',
|
|
description: 'Inside a segment, the left flow line includes scale info and consulting services.',
|
|
point1: 'Scale Info: fill segment scale data by engineering major.',
|
|
point2: 'Consulting Services: choose services from dictionary and generate fee details.',
|
|
point3: 'Each segment page has isolated cache and does not interfere with others.'
|
|
},
|
|
step6: {
|
|
title: 'Service and Pricing Pages',
|
|
description: 'The consulting service page manages service details and opens specific pricing method pages.',
|
|
point1: 'Click "Browse" to select services, then confirm to generate detail rows.',
|
|
point2: 'In detail table, "Edit" opens service pricing page, and "Clear" resets that service calculation.',
|
|
point3: 'Pricing page includes investment scale, land scale, workload, and hourly methods.'
|
|
},
|
|
step7: {
|
|
title: 'Factor Maintenance',
|
|
description: 'Project-level factors adjust budget values and can be maintained on two factor pages.',
|
|
point1: 'Consult Category Factor page: maintain budget values and notes by consult category.',
|
|
point2: 'Major Factor page: maintain budget values and notes by major tree.',
|
|
point3: 'Batch paste and undo/redo are supported for efficient multi-row updates.'
|
|
},
|
|
step8: {
|
|
title: 'Data Management and Recovery',
|
|
description: 'Top toolbar handles full import/export and reset initialization.',
|
|
point1: '"Import/Export" operates on full-project data package.',
|
|
point2: '"Reset" clears all local data and restores default page.',
|
|
point3: 'It is recommended to export a backup before major changes.'
|
|
}
|
|
}
|
|
},
|
|
toast: {
|
|
export: 'Export Report',
|
|
success: 'Export Success',
|
|
failed: 'Export Failed'
|
|
},
|
|
messages: {
|
|
defaultProjectLabel: 'Default Project',
|
|
defaultProjectName: 'Cost Project',
|
|
projectNamePrefix: 'Project-{id}',
|
|
contractFallbackName: 'Contract-{index}',
|
|
reportFileSuffix: 'Budget Report',
|
|
reportGenerating: 'Generating report file...',
|
|
reportExportDone: 'Report export completed',
|
|
reportExportFailedRetry: 'Report export failed, please retry',
|
|
importFailedTitle: 'Import Failed',
|
|
importProjectIdMissing: 'This package does not contain project ID (legacy export). Import is blocked to avoid cross-project overwrite.',
|
|
importProjectMismatch: 'This package belongs to another project and cannot override current project.',
|
|
importInvalidFile: 'File is invalid, corrupted, or modified.',
|
|
importWriteError: 'An error occurred while writing local data.',
|
|
openFile: 'Open file'
|
|
}
|
|
},
|
|
typeLine: {
|
|
copy: 'Copy',
|
|
copied: 'Copied',
|
|
copyFailed: 'Copy failed',
|
|
brandAlt: 'Zhongwei',
|
|
supportText: 'This website is supported by Zhongwei Engineering Consulting Co., Ltd.',
|
|
aboutTitle: 'About Us',
|
|
companyName: 'Zhongwei Engineering Consulting Co., Ltd.',
|
|
openOfficialSiteAria: 'Open official website',
|
|
officialSiteTitle: 'Official Website',
|
|
aboutParagraph1: 'Zhongwei Engineering Consulting Co., Ltd. was founded in 2009, focusing on whole-process consulting for project cost and cost control. It is a preferred audit vendor for Guangdong government. The company serves multi-domain and diverse clients, with cumulative project investment over one trillion CNY, deep participation in major national projects such as the Hong Kong-Zhuhai-Macao Bridge and Hengqin Campus of the University of Macau, and participation in over 30 national/provincial/municipal standards.',
|
|
aboutParagraph2: 'Based in the Greater Bay Area and expanding globally, the company has offices in Macau and Sri Lanka, with cross-border and overseas delivery capabilities. With 15 years of expertise and trillion-level project experience, it provides precise and reliable engineering consulting services.'
|
|
},
|
|
agGrid: {
|
|
resetDefault: 'Reset to default'
|
|
},
|
|
ht: {
|
|
title: 'Contract Segments',
|
|
projectTotalBudget: 'Project Total Budget: {amount}',
|
|
budgetLoading: 'Calculating...',
|
|
selectedCount: '{count} selected',
|
|
exportSelected: 'Export Selected',
|
|
deleteSelected: 'Delete Selected',
|
|
cancelSelect: 'Cancel',
|
|
addContract: 'Add Segment',
|
|
batchDelete: 'Batch Delete',
|
|
exportContracts: 'Export Segments',
|
|
importContracts: 'Import Segments',
|
|
searchPlaceholder: 'Search by segment name or ID',
|
|
clearFilter: 'Clear Filter',
|
|
searchingHint: 'Searching ({filtered} / {total}), drag sorting is disabled',
|
|
selectModeExportHint: 'Export mode: select segments and click "Export Selected"',
|
|
selectModeDeleteHint: 'Delete mode: select segments and click "Delete Selected"',
|
|
setupRequiredHint: 'Set project industry in "Basic Info" before adding or importing segments',
|
|
listLayout: 'List',
|
|
gridLayout: 'Grid',
|
|
dragSort: 'Drag to Sort',
|
|
dragSortSearchOff: 'Drag Sort (Disabled in Search)',
|
|
edit: 'Edit',
|
|
remove: 'Delete',
|
|
idLabel: 'ID: {id}',
|
|
contractBudget: 'Budget: {amount}',
|
|
contractBudgetLine: 'Segment Budget: {amount}',
|
|
createdAt: 'Created: {time}',
|
|
emptyTitle: 'No Contract Segments',
|
|
emptyDesc: 'Add one to get started',
|
|
notFound: 'No matching contract segment',
|
|
backToTop: 'Back to Top',
|
|
editContract: 'Edit Segment',
|
|
createContract: 'New Segment',
|
|
contractTabTitle: 'Segment {name}',
|
|
contractName: 'Segment Name',
|
|
contractNamePlaceholder: 'Enter segment name',
|
|
save: 'Save',
|
|
ok: 'OK',
|
|
toastSuccessTitle: 'Success',
|
|
createSuccess: 'Created successfully',
|
|
editSuccess: 'Updated successfully',
|
|
deleteSuccess: 'Deleted successfully',
|
|
sortDone: 'Sort completed',
|
|
exportSuccess: 'Exported successfully ({count} segments)',
|
|
importSuccess: 'Imported successfully ({count} segments)',
|
|
deleteBatchSuccess: 'Deleted successfully ({count} segments)',
|
|
tipTitle: 'Notice',
|
|
exportFailedTitle: 'Export Failed',
|
|
importFailedTitle: 'Import Failed',
|
|
batchDeleteFailedTitle: 'Batch Delete Failed',
|
|
retry: 'Please try again.',
|
|
selectAtLeastOne: 'Please select at least one contract segment.',
|
|
noContractsToDelete: 'No contract segment found to delete.',
|
|
industryMissingForExport: 'Project industry is missing. Please set it in "Basic Info" first.',
|
|
importIndustryMismatch: 'Industry mismatch (package: {importIndustry}, current: {currentIndustry}).',
|
|
importCurrentIndustryMissing: 'Current project industry is not set. Please set it in "Basic Info" first.',
|
|
importPackageIndustryMissing: 'Import package missing industry info. Re-export with latest version and try again.',
|
|
importFileInvalid: 'Invalid or corrupted file, or not a contract-segment package.',
|
|
deleteSingleTitle: 'Confirm Delete Segment',
|
|
deleteSingleDesc: 'Delete "{name}" and all related service/pricing data. Continue?',
|
|
deleteBatchTitle: 'Confirm Batch Delete',
|
|
deleteBatchDesc: 'Delete {count} segments and related service/pricing data. Continue?'
|
|
},
|
|
htCard: {
|
|
title: 'Segment: {name}',
|
|
subtitle: 'Segment ID: {id}',
|
|
metaBudget: 'Segment Budget: {amount}',
|
|
currencySuffix: 'CNY',
|
|
categories: {
|
|
baseInfo: 'Basic Info',
|
|
scaleInfo: 'Scale Info',
|
|
services: 'Consulting Services',
|
|
consultFactor: 'Consult Category Factor',
|
|
majorFactor: 'Major Factor',
|
|
additionalFee: 'Additional Fee',
|
|
reserveFee: 'Reserve Fee',
|
|
summary: 'Summary'
|
|
}
|
|
},
|
|
htBaseInfo: {
|
|
title: 'Basic Info',
|
|
defaultQuality: 'The comprehensive evaluation of cost consulting services should reach "Good" or a score of 90.',
|
|
qualityLabel: 'Quality Requirement',
|
|
qualityPlaceholder: 'Enter quality requirement',
|
|
durationLabel: 'Duration Requirement',
|
|
durationPlaceholder: 'Enter duration requirement'
|
|
},
|
|
htFactors: {
|
|
consultCategoryTitle: 'Consult Category Factor Details',
|
|
majorTitle: 'Major Factor Details'
|
|
},
|
|
htFee: {
|
|
additionalTitle: 'Additional Work Fee',
|
|
reserveTitle: 'Reserve Fee'
|
|
},
|
|
htInfo: {
|
|
scaleDetailTitle: 'Contract Scale Details'
|
|
},
|
|
htFeeRate: {
|
|
baseLabel: 'Base (total budget of all service fees)',
|
|
reserveBaseLabel: 'Base (consulting services total + additional work fee total)',
|
|
rateLabel: 'Rate (%)',
|
|
ratePlaceholder: 'Enter rate, suggested 1 ~ 5',
|
|
budgetFeeLabel: 'Budget Fee (Auto)',
|
|
remarkLabel: 'Remark',
|
|
remarkPlaceholder: 'Enter remark'
|
|
},
|
|
htZxFw: {
|
|
title: 'Consulting Service Details',
|
|
warning: 'Please review and adjust recommended limits/special values in the specification, then update final fee if needed.',
|
|
editTabTitle: 'Service Edit-{name}',
|
|
subtotal: 'Subtotal',
|
|
edit: 'Edit',
|
|
resetDefault: 'Reset',
|
|
delete: 'Remove',
|
|
processDraft: 'Draft',
|
|
processReview: 'Review',
|
|
columns: {
|
|
code: 'Code',
|
|
name: 'Name',
|
|
process: 'Process',
|
|
investScale: 'Investment Scale',
|
|
landScale: 'Land Scale',
|
|
workload: 'Workload',
|
|
hourly: 'Hourly',
|
|
subtotal: 'Subtotal',
|
|
finalFee: 'Final Fee ✎',
|
|
finalFeeTooltip: 'This column supports manual edits and will auto-sync to the fixed subtotal row.',
|
|
remark: 'Remark',
|
|
actions: 'Actions'
|
|
},
|
|
dialog: {
|
|
resetTitle: 'Confirm Reset to Default',
|
|
resetDesc: 'This will recalculate default data from latest scale/factor values and overwrite current data for "{name}". Continue?',
|
|
confirmReset: 'Confirm Reset',
|
|
deleteTitle: 'Confirm Delete Service',
|
|
deleteDesc: 'This will logically remove "{name}". Existing entered data is kept and will restore if re-selected. Continue?'
|
|
}
|
|
},
|
|
htSummary: {
|
|
title: 'Contract Summary',
|
|
total: 'Total',
|
|
remark: 'Remark',
|
|
placeholder: 'Fill consulting services / additional work fee / reserve fee first',
|
|
additionalPrefix: 'Additional Work Fee',
|
|
reservePrefix: 'Reserve Fee',
|
|
explainByRate: 'By rate {rate}%, calculated {fee} CNY',
|
|
explainByHourly: 'By hourly method, calculated {fee} CNY',
|
|
explainByQuantity: 'By quantity-unit-price method, calculated {fee} CNY',
|
|
columns: {
|
|
code: 'Code',
|
|
name: 'Name',
|
|
investScale: 'Investment Scale',
|
|
landScale: 'Land Scale',
|
|
workload: 'Workload',
|
|
hourly: 'Hourly',
|
|
subtotal: 'Subtotal',
|
|
finalFee: 'Final Fee'
|
|
}
|
|
},
|
|
htFeeGrid: {
|
|
subtotal: 'Subtotal',
|
|
currentRow: 'Current Row',
|
|
unnamed: 'Unnamed',
|
|
edit: 'Edit',
|
|
clear: 'Clear',
|
|
add: 'Add',
|
|
editTabTitle: 'Fee Edit-{name}',
|
|
columns: {
|
|
name: 'Name',
|
|
rateFee: 'Rate Fee',
|
|
hourlyFee: 'Hourly',
|
|
quantityUnitPriceFee: 'Quantity Unit Price',
|
|
subtotal: 'Subtotal',
|
|
actions: 'Actions'
|
|
},
|
|
dialog: {
|
|
clearTitle: 'Confirm Clear',
|
|
clearDesc: 'This will clear editable and auto-calculated data for "{name}" and its edit page. Continue?',
|
|
confirmClear: 'Confirm Clear'
|
|
}
|
|
},
|
|
xmFactorGrid: {
|
|
clickToInput: 'Click to input',
|
|
columns: {
|
|
standardFactor: 'Standard Factor',
|
|
budgetValue: 'Budget Value',
|
|
remark: 'Remark',
|
|
groupName: 'Major Code and Major Name'
|
|
}
|
|
},
|
|
serviceSelector: {
|
|
title: 'Select Services',
|
|
clear: 'Clear',
|
|
empty: 'No services'
|
|
},
|
|
zxFwView: {
|
|
contractPrefix: 'Contract: {name}',
|
|
calcSuffix: ' Calculation',
|
|
contractId: 'Contract ID: {id}',
|
|
workContentTitle: 'Work Content',
|
|
categories: {
|
|
investmentScale: 'Investment Scale',
|
|
landScale: 'Land Scale',
|
|
workload: 'Workload',
|
|
hourly: 'Hourly',
|
|
workContent: 'Work Content'
|
|
},
|
|
unavailable: {
|
|
investmentScaleTitle: 'Investment Scale Not Applicable',
|
|
investmentScaleMessage: 'Scale method is not enabled for this service, so Investment Scale is not editable.',
|
|
landScaleTitle: 'Land Scale Not Applicable',
|
|
landScaleMessage: 'This service only supports Investment Scale, so Land Scale is not editable.',
|
|
workloadTitle: 'Workload Not Applicable',
|
|
workloadMessage: 'Workload method is not enabled for this service, so Workload is not editable.',
|
|
hourlyTitle: 'Hourly Not Applicable',
|
|
hourlyMessage: 'Hourly method is not enabled for this service, so Hourly is not editable.'
|
|
}
|
|
},
|
|
htFeeDetail: {
|
|
subtotal: 'Subtotal',
|
|
currentRow: 'Current Row',
|
|
clickToInput: 'Click to input',
|
|
addRow: 'Add Row',
|
|
columns: {
|
|
no: 'No.',
|
|
feeItem: 'Fee Item',
|
|
unit: 'Unit',
|
|
quantity: 'Quantity',
|
|
unitPrice: 'Unit Price (CNY)',
|
|
budgetFee: 'Budget Fee (CNY)',
|
|
remark: 'Remark',
|
|
actions: 'Actions'
|
|
},
|
|
dialog: {
|
|
deleteTitle: 'Confirm Delete Row',
|
|
deleteDesc: 'Delete row "{name}"?'
|
|
}
|
|
},
|
|
workContent: {
|
|
title: 'Work Content',
|
|
addCustom: 'Add Custom Content',
|
|
clickToInput: 'Click to input',
|
|
clickToInputContent: 'Click to input work content',
|
|
currentRow: 'Current Row',
|
|
unnamed: 'Unnamed',
|
|
ungrouped: 'Ungrouped',
|
|
type: {
|
|
basic: 'Basic Work',
|
|
optional: 'Optional Work',
|
|
daily: 'Daily Advisory',
|
|
special: 'Special Advisory',
|
|
additional: 'Additional Work',
|
|
custom: 'Custom'
|
|
},
|
|
columns: {
|
|
no: 'No.',
|
|
content: 'Content',
|
|
type: 'Type',
|
|
remark: 'Remark',
|
|
actions: 'Actions'
|
|
},
|
|
dialog: {
|
|
deleteTitle: 'Confirm Delete Row',
|
|
deleteDesc: 'Delete row "{name}"?'
|
|
}
|
|
},
|
|
quickCalc: {
|
|
projectName: 'Quick Calculation',
|
|
catalogEyebrow: 'Category List',
|
|
formEyebrow: 'Parameter Form',
|
|
industryLabel: 'Industry {name}',
|
|
selectIndustry: 'Select industry',
|
|
saving: 'Saving...',
|
|
synced: 'Industry synced',
|
|
notSelectedIndustry: 'Industry not selected',
|
|
notSelected: 'Not selected',
|
|
consultCategory: 'Consult Category',
|
|
majorCategory: 'Major',
|
|
types: {
|
|
consult: {
|
|
label: 'Consult Category (Common)',
|
|
hint: 'Select consult category first, then complete scale and budget parameters.'
|
|
},
|
|
general: {
|
|
label: 'General Major',
|
|
hint: 'Cross-industry common compensation and other expense majors.'
|
|
},
|
|
road: {
|
|
label: 'Highway Major',
|
|
hint: 'Shown by default when industry is Highway Engineering.'
|
|
},
|
|
railway: {
|
|
label: 'Railway Major',
|
|
hint: 'Shown by default when industry is Railway Engineering.'
|
|
},
|
|
waterway: {
|
|
label: 'Waterway Major',
|
|
hint: 'Shown by default when industry is Waterway Engineering.'
|
|
}
|
|
},
|
|
fields: {
|
|
industry: 'Industry',
|
|
code: 'Code',
|
|
investScale: 'Investment Scale (10k CNY)',
|
|
landScale: 'Land Scale (mu)',
|
|
formula: 'Formula',
|
|
amount: 'Amount (CNY)',
|
|
consultFactor: 'Consult Category Factor',
|
|
majorFactor: 'Major Factor',
|
|
workEnvCoefficient: 'Work environment coefficient',
|
|
workEnvCoefficientPlaceholder: 'Default 1',
|
|
budgetAmount: 'Budget Amount (CNY)'
|
|
},
|
|
sections: {
|
|
currentSelection: 'Current Selection',
|
|
basicInfo: 'Basic Info',
|
|
scaleBase: 'Scale Base',
|
|
benchmarkBudget: 'Benchmark Budget',
|
|
serviceBudget: 'Service Budget',
|
|
},
|
|
empty: {
|
|
selectIndustry: 'Select an industry first. Then choose consult category and matched majors will appear.',
|
|
selectConsult: 'Select a consult category first. Matched general and major categories will then appear.',
|
|
scaleUnavailable: 'The selected consult category does not support scale method, so major categories are hidden.',
|
|
consultCostOnly: 'The selected consult category is priced by industry summary. Major factor is auto-applied by industry.'
|
|
},
|
|
placeholder: {
|
|
selectConsultFirst: 'Select consult category first',
|
|
scaleUnavailable: 'Current category does not support scale method',
|
|
selectMajorFirst: 'Select major first',
|
|
preferLandScale: 'Current major is priced by land scale',
|
|
investUnavailable: 'Current major does not support investment scale',
|
|
consultCostOnly: 'Current category supports investment scale only',
|
|
landUnavailable: 'Current major does not support land scale',
|
|
input: 'Please input',
|
|
selectScaleFirst: 'Select and input a scale value first'
|
|
}
|
|
},
|
|
methodUnavailable: {
|
|
defaultTitle: 'This Service Is Not Applicable to Current Pricing Method'
|
|
},
|
|
xmCard: {
|
|
categories: {
|
|
info: 'Basic Info',
|
|
scaleInfo: 'Scale Info',
|
|
consultCategoryFactor: 'Consult Category Factor',
|
|
majorFactor: 'Major Factor',
|
|
contract: 'Contract Segment Management'
|
|
}
|
|
},
|
|
htFeeMethodTypeLine: {
|
|
feeDetail: 'Fee Details',
|
|
unnamed: 'Unnamed',
|
|
title: 'Segment: {contractName} · {rowName}',
|
|
contractId: 'Contract ID: {id}',
|
|
quantityUnitPrice: 'Quantity Unit Price'
|
|
},
|
|
pricingScale: {
|
|
totalInvestmentByIndustry: '{industryName} Total Investment',
|
|
totalInvestment: 'Total Investment',
|
|
clickToInput: 'Click to input',
|
|
projectLabel: 'Project {index}',
|
|
columns: {
|
|
investAmount: 'Cost Amount (10k CNY)',
|
|
landArea: 'Land Area (mu)',
|
|
benchmarkBudget: 'Benchmark Budget (CNY)',
|
|
basicWork: 'Basic Work',
|
|
optionalWork: 'Optional Work',
|
|
subtotal: 'Subtotal',
|
|
budgetFee: 'Budget Fee',
|
|
consultCategoryFactor: 'Consult Category Factor',
|
|
majorFactor: 'Major Factor',
|
|
workStageFactor: 'Work Stage Factor (Draft/Review)',
|
|
workRatio: 'Work Ratio (%)',
|
|
total: 'Total',
|
|
remark: 'Remark',
|
|
majorGroup: 'Major Code and Major Name'
|
|
},
|
|
tooltip: {
|
|
resetInvestAmount: 'Click ↻ to restore default cost amount for this column',
|
|
resetLandArea: 'Click ↻ to restore default land area for this column',
|
|
resetConsultCategoryFactor: 'Click ↻ to restore default consult category factor for this column',
|
|
resetMajorFactor: 'Click ↻ to restore default major factor for this column'
|
|
}
|
|
},
|
|
pricingPane: {
|
|
projectCount: 'Project Count',
|
|
clearTitle: 'Confirm Clear Current Details',
|
|
confirmClear: 'Confirm Clear',
|
|
useDefault: 'Use Default Data',
|
|
overrideTitle: 'Confirm Override Current Details',
|
|
confirmOverride: 'Confirm Override',
|
|
investment: {
|
|
title: 'Investment Scale Details',
|
|
clearDesc: 'This will clear current investment scale details. Continue?',
|
|
overrideDesc: 'Use contract default data to override current investment scale details. Continue?'
|
|
},
|
|
land: {
|
|
title: 'Land Scale Details',
|
|
clearDesc: 'This will clear current land scale details. Continue?',
|
|
overrideDesc: 'Use contract default data to override current land scale details. Continue?'
|
|
}
|
|
},
|
|
workloadPricing: {
|
|
title: 'Workload Details',
|
|
unavailableTitle: 'Workload Method Not Applicable',
|
|
unavailableMessage: 'No workload tasks are associated with this service. No input is needed.',
|
|
clickToInput: 'Click to input',
|
|
none: 'N/A',
|
|
total: 'Grand Total',
|
|
columns: {
|
|
code: 'Code',
|
|
name: 'Name',
|
|
budgetBase: 'Budget Base',
|
|
budgetReferenceUnitPrice: 'Budget Reference Unit Price',
|
|
budgetAdoptedUnitPrice: 'Budget Adopted Unit Price',
|
|
workload: 'Workload',
|
|
consultCategoryFactor: 'Consult Category Factor',
|
|
serviceFee: 'Service Fee (CNY)',
|
|
remark: 'Remark'
|
|
}
|
|
},
|
|
hourlyFeeGrid: {
|
|
title: 'Hourly Method Details',
|
|
clickToInput: 'Click to input',
|
|
total: 'Grand Total',
|
|
columns: {
|
|
code: 'Code',
|
|
name: 'Personnel Name',
|
|
referenceUnitPrice: 'Budget Reference Unit Price',
|
|
laborBudgetUnitPrice: 'Labor Budget Unit Price (CNY/workday)',
|
|
compositeBudgetUnitPrice: 'Composite Budget Unit Price (CNY/workday)',
|
|
adoptedBudgetUnitPrice: 'Adopted Budget Unit Price (CNY/workday)',
|
|
personnelCount: 'Personnel Count',
|
|
workdayCount: 'Workday Count',
|
|
serviceBudget: 'Service Budget (CNY)',
|
|
remark: 'Remark'
|
|
}
|
|
},
|
|
xmScaleGrid: {
|
|
syncToastTitle: 'Consulting Services Synced',
|
|
syncToastDesc: 'Scale info synced to consulting services ({serviceCount} services, {methodCount} pricing pages, {rowCount} rows)'
|
|
},
|
|
xmInfo: {
|
|
defaultProjectName: 'xxx Cost Consulting Service',
|
|
defaultDesc: 'When providing cost consulting services, penalties should be graded by service quality. For scores >=85 and <90, penalty is 10% of budget fee; >=80 and <85: 20%; >=75 and <80: 30%; >=70 and <75: 40%; <70: 50% or above.',
|
|
industryHint: 'Changing industry requires reset and re-selection',
|
|
industryHintAria: 'Industry hint',
|
|
createFromHomeFirst: 'Please create a project from Home before entering this page.',
|
|
fields: {
|
|
projectName: 'Project Name',
|
|
projectIndustry: 'Industry',
|
|
overview: 'Project Overview',
|
|
preparedBy: 'Prepared By',
|
|
reviewedBy: 'Reviewed By',
|
|
preparedCompany: 'Prepared Company',
|
|
preparedDate: 'Prepared Date',
|
|
desc: 'Other Notes'
|
|
},
|
|
placeholders: {
|
|
overview: 'Enter project overview',
|
|
preparedBy: 'Enter preparer',
|
|
reviewedBy: 'Enter reviewer',
|
|
preparedCompany: 'Enter prepared company'
|
|
}
|
|
}
|
|
} as const
|