###############################################################################
# Copyright (c) 2000, 2007 IBM Corporation and others.
#
# This program and the accompanying materials
# are made available under the terms of the Eclipse Public License 2.0
# which accompanies this distribution, and is available at
# https://www.eclipse.org/legal/epl-2.0/
#
# SPDX-License-Identifier: EPL-2.0
#
# Contributors:
#     IBM Corporation - initial API and implementation
###############################################################################
Image_analyzer 				= Image Analyzer
None 						= None
White 						= White
Black 						= Black
Red 						= Red
Green 						= Green
Blue 						= Blue
X_scale 					= X Scale
Y_scale 					= Y Scale
Alpha_K 					= Alpha-K
Display 					= Display
Incremental 				= Incremental
Transparent 				= Transparent
Transparent_lc 				= transparent
Mask 						= Mask
Background 					= Background
Save_group                  = Save
Animation 					= Animation
Previous 					= < &Previous
Next 						= &Next >
Animate 					= &Animate
Type_initial 				= Type:
Type_string 				= Type: {0}
Type_index 					= Type: {0} [{1,number,integer} of {2,number,integer}]
Size_initial 				= Size:
Size_value 					= Size: {0,number,integer} x {1,number,integer}
Depth_initial 				= Depth:
Depth_value 				= Depth: {0} (Display: {1})
Transparent_pixel_initial 	= Transparent pixel:
Transparent_pixel_value		= Transparent pixel: {0}
Time_to_load_initial 		= Time to load:
Time_to_load_value			= Time to load: {0} ms
Animation_size_initial 		= Animation size:
Animation_size_value 		= Animation size: {0,number,integer} x {1,number,integer}
Background_pixel_initial 	= Background pixel:
Background_pixel_value 		= Background pixel: {0}
Image_location_initial 		= Image location:
Image_location_value 		= Image location: ({0,number,integer}, {1,number,integer})
Disposal_initial 			= Disposal:
Disposal_value 				= Disposal: {0,number,integer} ({1})
Delay_initial 				= Delay:
Delay_value 				= Delay: {0,number,integer} ms (using {1,number,integer} ms)
Delay_used 					= Delay: {0,number,integer} ms
Repeats_initial 			= Repeats:
Repeats_value 				= Repeats: {0,number,integer}
Repeats_forever 			= Repeats: {0,number,integer} (forever)
Compression    				= Compression:
Palette_initial 			= Palette:
Palette_direct 				= Palette: Direct
Palette_value 				= Palette size: {0,number,integer}
Max_length_string 			= Transparent pixel: -1 (none)
Pixel_data_initial 			= Pixel data:
Pixel_data_value 			= Pixel data:  Bytes per line: {0,number,integer}  \
							  Scanline pad: {1,number,integer} {2}  {3}
Depth_info 					= Depth: {0,number,integer} -- {1}
One_byte 					= 1 byte per pixel
Multi_bytes 				= {0,number,integer} bytes per pixel
Multi_pixels 				= {0,number,integer} pixels per byte {1}
Scroll_for_alpha			= (Scroll down to see alpha data)
File 						= &File
OpenFile 					= &Open File...\tCtrl+O
OpenURL						= Open &URL...\tCtrl+U
Reopen 						= &Reopen
LoadFile 					= &Load File...\tCtrl+L
Save 						= &Save\tCtrl+S
Save_as 					= Save &As...
Save_mask_as 				= Save &Mask As...
Print 						= &Print\tCtrl+P
Exit 						= E&xit
Alpha 						= Alpha
OpenURLDialog				= Open URL
EnterURL					= Enter the URL for an image (bmp, gif, ico, jfif, jpeg, jpg, png, tif, tiff):
All_images 					= All Image Files
Loading_lc 					= loading
Saving_lc 					= saving
Unknown_extension 			= Unknown file extension: {0}\nPlease use bmp, gif, ico, jfif, jpeg, jpg, png, tif, or tiff.
Overwrite 					= Overwrite {0}?
Save_all					= Save all {0} images into a multi-image file?
Analyzer_on 				= Image Analyzer on: {0}
Reloading_lc 				= reloading
Color_at 					= Image color at ({0,number,integer}, {1,number,integer}) \
							  - pixel {2,number,integer} [0x{3}] - is {4} [0x{5}] {6}
RGB							= RGB '{'{0}, {1}, {2}'}'
RGBA						= RGBA '{'{0}, {1}, {2}, {3}'}'
Color_at_transparent		= (transparent)
Creating_image 				= Creating image # {0,number,integer} from 
OK							= OK
Cancel						= Cancel
Stop 						= &Stop
Creating_from 				= Creating image read from
Bytes_per_line 				= Bytes per line:
Scanline_pad 				= Scanline pad:
Printing_error				= Printing error: 
Error 						= Error {0} file\n{1}\n\n
Unsupported_lc 				= unsupported
None_lc 					= none
Background_lc 				= background
Previous_lc 				= previous
Unspecified_lc 				= unspecified
Unknown_ac 					= UNKNOWN
Forever_lc 					= forever
Save_as_type				= Save As BMP Type...
Save_as_type_label			= Select the type of BMP to save as:
Save_as_type_no_compress	= No Compression
Save_as_type_rle_compress	= RLE Compression
Save_as_type_os2			= OS/2 BMP
