# diseasewizardmessages.properties
#
#/*******************************************************************************
# * Copyright (c) 2011 IBM Corporation and others.
# * All rights reserved. This program and the accompanying materials
# * are made available under the terms of the Eclipse Public License v1.0
# * which accompanies this distribution, and is available at
# * http://www.eclipse.org/legal/epl-v10.html
# *
# * Contributors:
# *     IBM Corporation - initial API and implementation
# *******************************************************************************/

# New Food Production Wizard

FoodProd.wizard_title = New Population Transformer
FoodProd.page_description = Define transformation from source to target
FoodProd.DC_DESCRIPTION = Population Transformer "{0}"
FoodProd.page_title = Population Transformer
FoodProd.FOOD = Target
FoodProd.SOURCE = Source

FPC.0 = Pick a Population Transformer
NFPWiz.wizard_title = New Population Transformer
NFPWiz.page_title = Create a new Population Transformer
NFPWiz.page_description = Create a new Population Transformer and fill in its parameters

sourcePopulationName = Source Population Name
sourcePopulationNameTT = Specify Source Population Name
sourcePopulationNameUNIT = 

targetPopulationName = Target Population Name
targetPopulationNameTT = Specify Target Population Name
targetPopulationNameUNIT = 

foodYieldPopulationMultiplier = Food Yield Multiplier
foodYieldPopulationMultiplierTT = Specify Food Yield Multiplier
foodYieldPopulationMultiplierUNIT = 

targetURI = Target Location
targetURITT = Target Location
targetURIUNIT = 

sourceProcessingRate = Source Processing Capacity
sourceProcessingRateTT = Source Processing Rate (Units/Time Period)
sourceProcessingRateUNIT = Units/TP

timePeriod=Time Period
timePeriodTT=Time Period (Default is on day in msec)
timePeriodUNIT=msec

name=Name
nameTT=Name of this Food Transformer
nameUNIT=

sourceDecorator=Source Disease
sourceDecoratorTT=Diseases of the Source Population
sourceDecoratorUNIT=

targetDecorator=Target Disease
targetDecoratorTT=Diseases of the Target Population
targetDecoratorUNIT=

stateTransitionsMap=Disease Mapping
stateTransitionsMapTT=Mapping between the disease states of the source and food
stateTransitionsMapUNIT=

consumptionRate = Consumption Rate
consumptionRateTT = Rate of Food Consumption
consumptionRateUNIT = Units/TP

wasteRate = Waste Rate
wasteRateTT = Rate by which Food is Wasted
wasteRateUNIT = Units/TP

maxVolumeOfStocks = Maximum Volume of Stocks
maxVolumeOfStocksTT = Excess Foof is Wasted
maxVolumeOfStocksUNIT = Units

consumptionType = Consumption Type
relativeConsumption = Relative
absoluteConsumption = Absolute
consumptionPerPerson = Per Person

FoodProd.NFoodWizErr0=Source Population Name is Required
FoodProd.NFoodWizErr1=Source Processing Rate is Required
FoodProd.NFoodWizErr2=Processing Rate must be > 0
FoodProd.NFoodWizErr3=Processing Rate must be a valid number (double)
FoodProd.NFoodWizErr4=Target Population Name is Required
FoodProd.NFoodWizErr5=Target Yield Multiplier is Required
FoodProd.NFoodWizErr6=Target Yield Multiplier must be > 0
FoodProd.NFoodWizErr7=Target Yield Multiplier must be a valid number (double)

