# PrinterDialog.properties -- Default property file for PrinterDialog
# Copyright (C) 2006 Free Software Foundation, Inc.
# 
# This file is part of GNU Classpath.
# 
# GNU Classpath is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
# 
# GNU Classpath is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# General Public License for more details.
# 
# You should have received a copy of the GNU General Public License
# along with GNU Classpath; see the file COPYING.  If not, write to the
# Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
# 02110-1301 USA.
# 
# Linking this library statically or dynamically with other modules is
# making a combined work based on this library.  Thus, the terms and
# conditions of the GNU General Public License cover the whole
# combination.
# 
# As a special exception, the copyright holders of this library give you
# permission to link this library with independent modules to produce an
# executable, regardless of the license terms of these independent
# modules, and to copy and distribute the resulting executable under
# terms of your choice, provided that you also meet, for each linked
# independent module, the terms and conditions of the license of that
# module.  An independent module is a module which is not derived from
# or based on this library.  If you modify this library, you may extend
# this exception to your version of the library, but you are not
# obligated to do so.  If you do not wish to do so, delete this
# exception statement from your version.
#
rbt.onesided=Onesided
rbt.calendar=Calendar
rbt.duplex=Duplex
rbt.blackwhite=Black&White
rbt.color=Color
rbt.low=Low
rbt.normal=Normal
rbt.high=High
rbt.all=All
rbt.pages=Pages
rbt.portrait=Portrait
rbt.landscape=Landscape
rbt.revportrait=Reversed Portrait
rbt.revlandscape=Reversed Landscape
cb.cover=Cover page
cb.sort=Sort
cb.output=Redirect output in file
lb.size=Size:
lb.source=Source:
lb.left=left (mm)
lb.right=right (mm)
lb.top=top (mm)
lb.bottom=bottom (mm)
lb.name=Name:
lb.status=Status:
lb.typ=Typ:
lb.info=Info:
lb.to=to
lb.copies=Number of copies:
lb.jobname=Job name:
lb.username=User name:
lb.priority=Priority:
lb.acceptingjobs=Printer is accepting jobs
lb.notacceptingjobs=Printer is not accepting jobs
lb.automatically=Automatically Select
bt.attributes=Attributes...
bt.print=Print
bt.OK=OK
bt.cancel=Cancel
# names of the panel titles
title.medias=Medias
title.printservice=Printservice
title.orientation=Orientation
title.color=Color
title.sides=Sides
title.copies=Copies
title.quality=Quality
title.jobattributes=Job-Attributes
title.margins=Margins
title.printdialog=Printing
title.pagedialog=Printing
title.printrange=Printrange
# names of the main tabs
tab.general=General
tab.pagesetup=Page setup
tab.appearance=Appearance
