# 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.

object.noframe=Ihr Browser stellt keine Frames dar. Den Inhalt k\u00F6nnen Sie hier erreichen:
page.noscript=Diese Seite ben\u00F6tigt JavaScript, allerdings ist JavaScript in Ihrem Browser derzeit deaktiviert. Um JavaScript zu aktivieren, lesen Sie ggf. die Anleitung Ihres Browsers.
sheet.ascending=aufsteigend sortiert
sheet.descending=absteigend sortiert
sheet.first=erste Seite
sheet.last=letzte Seite
sheet.selectAll=Alles ausw\u00E4hlen
sheet.next=n\u00E4chste Seite
sheet.empty=Keine Zeilen verf\u00FCgbar
sheet.setPage=Hier klicken, zum Eingeben der anzuzeigenden Seite.
sheet.pageXtoYofZ=Seite {0} von {1}
sheet.setRow=Hier klicken, zum Eingeben der ersten anzuzeigenden Zeile.
sheet.rowXtoYofZ=Zeilen {0} bis {1} von {2}
sheet.pageXofZ=Seite {0} von {1}
sheet.rowXofZ=Zeile {0} von {2}
sheet.pageXtoY=Seite {0}
sheet.rowXtoY=Zeilen {0} bis {1}
sheet.pageX=Seite {0}
sheet.rowX=Zeile {0}
sheet.prev=vorherige Seite
sheet.sorting=nach dieser Spalte sortieren
sheet.toPage=Seite {0}
file.selected={} Dateien ausgew\u00E4hlt
help.title=Hilfe
date.today=Heute
date.cancel=Abbrechen
date.clear=L\u00F6schen
date.week=Woche
