# 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.
DeleteDialog.UseTreeDeleteControl=Use Tree Delete Control
EntryExistsCopyStrategyDialogImpl.IgnoreEntryAndContinue=Ignore entry and continue
EntryExistsCopyStrategyDialogImpl.OverwriteEntryAndContinue=Overwrite entry and continue
EntryExistsCopyStrategyDialogImpl.RenameEntryAndContinue=Rename entry and continue
EntryExistsCopyStrategyDialogImpl.SelectCopyStrategy=Select copy strategy
EntryExistsCopyStrategyDialogImpl.SelectCopyStrategyDescription=The entry {0} already exists. Please select how to proceed.
EntryExistsCopyStrategyDialogImpl.StopCopyProcess=Stop copy process
FilterDialog.FilterEditor=Filter Editor
FilterDialog.Format=Format
FilterWidgetDialog.EnterValidFilter=Please enter a valid filter.
HexDialog.CantReadFile=Can't read file
HexDialog.CantWriteToFile=Can't write to file
HexDialog.EditAsText=Edit as Text...
HexDialog.HexEditor=Hex Editor
HexDialog.LoadData=Load Data
HexDialog.LoadDataButton=Load Data...
HexDialog.SaveData=Save Data
HexDialog.SaveDataButton=Save Data...
MoveEntriesDialog.MoveEntries=Move Entries
MoveEntriesDialog.MoveEntriesDescription=Please enter/select the parent DN where the selected entries should be moved to.
MultivaluedDialog.MultivaluedEditor=Multivalued Editor
RenameEntryDialog.RenameEntry=Rename Entry
RenameEntryDialog.RenameEntryDescription=Please enter the new RDN of the selected entry.
ScopeDialog.CopiedEntriesAndDirectChildren=O&ne Level (The copied entries and their direct children)
ScopeDialog.CopiedEntryAndDirectChildren=O&ne Level (The copied entry and its direct children)
ScopeDialog.OnlyCopiedEntries=&Object (Only the copied entries)
ScopeDialog.OnlyCopiedEntry=&Object (Only the copied entry)
ScopeDialog.SelectCopyDepth=Please select the copy depth
ScopeDialog.WholeSubtree=&Subtree (The whole subtree)
ScopeDialog.WholeSubtrees=&Subtree (The whole subtrees)
SimulateRenameDialogImpl.SimulateButton=Press OK to simulate the move/rename operation by searching/copying/deleting.
SimulateRenameDialogImpl.SimulateRename=Simulate moving/renaming?
SimulateRenameDialogImpl.SimulateRenameDescription1=You are trying to move/rename {0} to {1}.
SimulateRenameDialogImpl.SimulateRenameDescription2=The LDAP server {0} doesn't support moving/renaming of non-leaf entries.
TextDialog.TextEditor=Text Editor
TextDialog.WrapLines=Wrap lines