###############################################################################
# Copyright (c) 2000, 2007 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
###############################################################################
error.CouldNotLoadResources = Unable to load resources
window.title = SWT Controls
custom.window.title = SWT Custom Controls

Text_Buttons		= Text Buttons
Size 				= Size
Alignment			= Alignment
Left				= Left
Right				= Right
Up					= Up
Down				= Down
Center				= Center
One					= One
Two					= Two
Three				= Three
Image_Buttons		= Image Buttons
Image_Text_Buttons	= Image and Text Buttons
Control_Example		= Control Example
Parameters			= Parameters
Other				= Other
Enabled				= Enabled
Visible				= Visible
BackgroundColor		= Background Color
BackgroundImage		= Background Image
PopupMenu			= Popup Menu
Preferred 			= Preferred
Styles	 			= Styles
Menu_Styles	 		= Menu Styles
MenuItem_Styles	 	= MenuItem Styles
Background_Mode		= Background Mode on Parent
Listeners			= Listeners
Select_Listeners	= Select Listeners
Listen				= Listen
Clear				= Clear
Set_Get				= Set/Get API
Parameter_Info		= {0}   e.g. {1} 
Info_int			= 4
Info_intA			= 0,1,2
Info_long			= 4
Info_longA			= 0,1,2
Info_char			= c
Info_charA			= a,b,c
Info_boolean		= true
Info_booleanA		= true,true,false
Info_String			= hello
Info_StringA		= hello,there
Info_Point			= 0,0
Info_TabItem		= Tab 0
Info_TabItemA		= Tab 0,Tab 2
Info_TableItem		= Index:2
Info_TableItemA		= Index:2,Index:4
Info_TreeItem		= Node 1
Info_TreeItemA		= Node 1,Node 3
Select_All			= Select All
Deselect_All		= Deselect All
OK					= OK
FillDamage			= Fill Damaged Area With Color
Title_Text			= Title Text
Text_Labels			= Text Labels
Image_Labels		= Image Labels
Custom_Labels		= Custom Labels
Custom_Combo		= Custom Combo
One_Two_Three		= One Two Three
Text_ToolBar 		= Text ToolBar
Image_ToolBar 		= Image ToolBar
ImageText_ToolBar	= Image and Text ToolBar
Maximum				= Maximum
Minimum				= Minimum
Selection			= Selection
Increment			= Increment
Page_Increment		= Page Increment
Thumb				= Thumb
Digits				= Digits
Tree_With_Images	= Tree With Images
Dialog_Type			= Dialog Type
Create_Dialog		= Create Dialog
Button_Styles		= Button Styles
Icon_Styles			= Icon Styles
Modal_Styles		= Modal Styles
File_Dialog_Styles	= File Dialog Styles
Item_Styles			= Item Styles
Dialog_Result		= Dialog Result
ColorDialog			= ColorDialog
DirectoryDialog		= DirectoryDialog
FileDialog			= FileDialog
FontDialog			= FontDialog
PrintDialog			= PrintDialog
MessageBox			= MessageBox
Multi_line			= A multi line text widget.
Example_string		= The quick brown fox jumps over the lazy dog.
Header_Visible		= Header Visible
Sort_Indicator		= Sort Indicator
Header_Images		= Header Images
Sub_Images			= Sub Images
Lines_Visible		= Lines Visible
Moveable_Columns	= Moveable Columns
Resizable_Columns	= Resizable Columns
Multiple_Columns	= Multiple Columns
Locked				= Locked
Combo_child			= Combo Child
Node_1				= Node 1
Node_2				= Node 2
Node_3				= Node 3
Node_4				= Node 4
Node_1_1			= Node 1.1
Node_2_1			= Node 2.1
Node_3_1			= Node 3.1
Node_2_2			= Node 2.2
Node_2_2_1			= Node 2.2.1
Parent				= Parent
No_Parent			= No Parent
Decoration_Styles	= Decoration Styles
Create_Shell		= Create Shell
Close_All_Shells	= Close All Shells
Push				= Push
Radio				= Radio
Check				= Check
Cascade				= Cascade
Drop_Down			= Drop Down
Images_failed		= Warning: Failed to load images
readme_txt			= readme.txt
Index				= Index:
Title				= Title:
Close				= Close
Result				= Result: {0}
FilterName_0		= Text Files
FilterName_1		= Batch Files
FilterName_2		= Doc Files
FilterName_3		= All Files
TableTitle_0		= Name
TableTitle_1		= Type
TableTitle_2		= Size
TableTitle_3		= Modified
TableLine0_0		= <empty>
TableLine0_1		= classes
TableLine0_2		= 0
TableLine0_3		= today
TableLine1_0		= <empty>
TableLine1_1		= databases
TableLine1_2		= 2556
TableLine1_3		= tomorrow
TableLine2_0		= <empty>
TableLine2_1		= images
TableLine2_2		= 91571
TableLine2_3		= yesterday
ListData0_0			= Line 1
ListData0_1			= Line 2
ListData0_2			= Line 3
ListData0_3			= Line 4
ListData0_4			= Line 5
ListData0_5			= Line 6
ListData0_6			= Line 7
ListData0_7			= Line 8
ListData0_8			= Longest Line In List
ListData1_0			= Apples
ListData1_1			= Oranges
ListData1_2			= Bananas
ListData1_3			= Grapefruit
ListData1_4			= Peaches
ListData1_5			= Kiwi
ListData1_6			= Apricots
ListData1_7			= Strawberries
ListData1_8			= The Longest String
DropDownData_0		= Apples
DropDownData_1		= Oranges
DropDownData_2		=
DropDownData_3		= Grapefruit
DropDownData_4		= Peaches
DropDownData_5		= Kiwi
DropDownData_6		=
DropDownData_7		= Strawberries
DropDownData_8		= The Longest String
Colors 				= Colors and Font
Change				= &Change...
Defaults			= &Defaults
Foreground_Color	= Foreground Color
Background_Color	= Background Color
Font				= Font
Item_Foreground_Color	= Item 0 Foreground Color
Item_Background_Color	= Item 0 Background Color
Item_Font				= Item 0 Font
Cell_Foreground_Color	= Item 0 Col 1 Foreground Color
Cell_Background_Color	= Item 0 Col 1 Background Color
Cell_Font				= Item 0 Col 1 Font
Wrap_Text			= Jack and Jill went up the hill to fetch a pail of water, \
					  Jack fell down and broke his crown and Jill came tumbling after!
Foreground_Style	= Foreground
Background_Style 	= Background
StyledText_Styles	= Text Styles
StyledText_Style_Instructions	= Select text, then style.
Bold				= Bold
Italic				= Italic
Underline			= Underline
Strikeout			= Strikeout
Fill_X				= Horizontal Fill
Fill_Y				= Vertical Fill
Pack_Columns		= Pack Columns
TabItem1_0			= Tab 0
TabItem1_1			= Tab 1
TabItem1_2			= Tab 2
TabItem_content		= TabItem Content
CTabItem1_0			= CTabItem 0
CTabItem1_1			= CTabItem 1
CTabItem1_2			= CTabItem 2 has a long name
CItem_Colors		= CTabItem Colors
CTabItem_content	= CTabItem Content
Set_Simple_Tabs		= Simple Tabs
Set_Single_Tabs		= Single Tab
Set_Min_Visible     = Minimize
Set_Max_Visible     = Maximize
Set_Unselected_Close_Visible = Close on Unselected Tabs
Set_Unselected_Image_Visible = Image on Unselected Tabs
Selection_Foreground_Color = Selection Foreground Color
Selection_Background_Color = Selection Background Color
Set_Image			= Set Image
TableTree_column	= Column
MenuItem_Cut		= Cu&t	Ctrl+X
MenuItem_Copy		= &Copy	Ctrl+C
MenuItem_Paste		= &Paste	Ctrl+V
MenuItem_SelectAll	= Select &All	Ctrl+A
Orientation 		= Orientation
Default 			= Default (Inherit)
Images				= Images
Accelerators		= Accelerators
Mnemonics			= Mnemonics
SubMenu				= Sub-Menu
SubSubMenu			= Sub-Sub-Menu
1Radio				= Radio1
2Radio				= Radio2
1RadioWithMnemonic	= Radio&1
2RadioWithMnemonic	= Radio&2
PushWithMnemonic	= &Push
RadioWithMnemonic	= &Radio
CheckWithMnemonic	= &Check
CascadeWithMnemonic	= C&ascade
PopupMenuHere		= Popup Menu Here
LinkText=Visit the <A HREF=\"www.eclipse.org\">Eclipse.org</A> project and the <A HREF=\"www.eclipse.org\\swt">SWT</A> homepage.
Tooltip				= Tooltip:  {0}
Item1_Text			= What is your favorite button?
Item2_Text			= What is your favorite icon?
ToolTip_Title		= Foxes vs. Dogs
No_Icon				= No Icon
Show_In_Tray		= Show In Tray
