# messages.properties
#
#/*******************************************************************************
# * Copyright (c) 2008 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
# *******************************************************************************/

# Area Labels
area=Fl\u00e4che
areaUNIT=km^2
areaTT=Fl\u00e4che

# Road Labels
roadName=Stra\u00dfenname
roadNameUNIT=
roadNameTT=Der Name der Stra\u00dfe.
roadClass=Klasse
roadClassUNIT=
roadClassTT=Die Art der Stra\u00dfe.
numberCrossings=Anzahl der Kreuzungen
numberCrossingsUNIT=Kreuzungen
numberCorssingsTT=Die Anzahl der Kreuzungen.

# Population Labels
count=Anzahl
countUNIT=PM
countTT=Die Anzahl der Bev\u00f6lkerungsmitgliedern
populationIdentifier=Bev\u00f6lkerung
populationIdentifierUNIT=
populationIdentifierTT=Der Name der Bev\u00f6lkerung.
name=Name
nameUNIT=
nameTT=Der Name
populatedArea=Fl\u00e4che
populatedAreaUNIT=km^2
populatedAreaTT=Der bei der Berechnung der Bev\u00f6lkerungsdichte zu benutzende Wert (\u00fcberschreibt Fl\u00e4chen-Bereich).

# Relationships
borderLength=Grenzl\u00e4nge
borderLengthUNIT=km
borderLengthTT=Die L\u00e4nge der Grenze zwischen zwei geografischen Regionen.
adjacent=Angrenzend
adjacentUNIT=
adjacentTT=Wenn Wahr dann sind die zwei Knoten benachbart
relationship=Beziehung
relationshipUNIT=
relationshipTT=Die Art der Beziehung

 
