# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#  http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.

#fields
field.title.employees.employeeId=Employee ID
field.title.employees.salutation=Salutation
field.title.employees.firstname=Firstname
field.title.employees.lastname=Lastname
field.title.employees.dateOfBirth=Date of Birth
field.title.employees.departmentId=Department
field.title.employees.gender=Gender
field.title.employees.phoneNumber=Phone
field.title.employees.email=E-Mail
field.title.employees.retired=Retired
field.title.employees.updateTimestamp=Last change
field.title.departments.name=Department
field.title.departments.head=Head of Dept.

#options
option.employee.gender.male=Male
option.employee.gender.female=Female

#labels
application.title=Employee Management Application
label.employees=List of employees
label.employees.beanList=Employees (Bean-List)
label.employees.reader=Employees (DBReader)
label.delete=Delete
label.edit=Edit
label.employee.edit=Employee details
label.employee.add=Add employee
label.department=Department
label.user.Name=Name
label.user.Pwd=Password

page.label.login=Login
page.label.loginHint=Hint: enter any non null username and password.
page.label.logininfo=You are logged in as:
page.label.search=Search employee
page.label.list=Select employee
page.label.update=Edit employee details
page.label.add=Add new employee

#button labels
button.label.login=Login
button.label.search=Search
button.label.save=Save
button.label.cancel=Cancel
button.label.delete=Delete

#link labels
link.label.addemployee=Add new employee
link.label.edit=Edit
link.label.delete=Delete
link.label.logout=Logout
link.label.search=Search

##-- errors
errors.prefix=<span style="color:red;font-weight:bold;">
errors.suffix=</span>

error.invalidpassword=The username is invalid (At least one character is required!)
error.web.recordsDontMatch=The form submitted is invalid for the current context.
error.web.columnNotFound=The column {0} has not been found!
error.web.fieldError=Field {0}: {1}
error.web.input.integerFormat=Invalid Integer format
error.web.input.numberFormat=Invalid number format
error.web.input.dateFormat=Invalid date format
error.web.input.date.notime=No time specified.
error.web.input.required=This field is required 
error.web.input.outOfRange=The value must be in the range of {0} and {1}.
error.web.input.textTooShort=The value must contain at least {0} characters. 
