###############################################################################
# Copyright (c) 2001, 2004 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
#     Jens Lukowski/Innoopract - initial renaming/restructuring
#     
###############################################################################
Invalid_character_('<')_fo_ERROR_=IWAK0028E Invalid character ('<') found
Invalid_character_('>')_fo_ERROR_=IWAK0029E Invalid character ('>') found
Invalid_character_('&')_fo_ERROR_=IWAK0030E Invalid character ('&') found
Original_Error__UI_=Original Error:
Program_Error__ModelManage_EXC_=IWAK0031E Program Error: ModelManagerImpl::saveModel. Model should be in the cache
Invalid_character_('__')_f_EXC_=IWAK0032E Invalid character ('\"') found
Unkown_internal_scanner_er_ERROR_=IWAK0033E Unkown internal scanner error
Internal_error__unknown_st_ERROR_=IWAK0034E Internal error: unknown state
Error__could_not_match_inp_ERROR_=IWAK0035E Error: could not match input
Error__pushback_value_was__ERROR_=IWAK0036E Error: pushback value was too large
An_I/O_error_occured_while_EXC_=IWAK0037E An I/O error occured while scanning :
3concat=File not found : \"{0}\"
5concat=Error opening file \"{0}\"
ul_____(template)_UI_=ul     (template)
<ul>_n__<li>_Item_one_</li_UI_=<ul>\n  <li> Item one </li>\n  <li> Item two </li>\n</ul>\n
dl_____(template)_UI_=dl     (template)
<dl>_n__<dt>_First_definit_UI_=<dl>\n  <dt> First definition  <dd>  First explanation\n  <dt> Second definition <dd> Second explanation\n</dl>\n
table_____(template)_UI_=table     (template)
<table_border>_n__<tr>_n___UI_=<table border>\n  <tr>\n    <th>Column 1 Heading</th>\n    <th>Column 2 Heading</th>\n  </tr>\n  <tr>\n    <td>Row 1: Col 1</td>\n    <td>Row 1: Col 2</td>\n  </tr>\n</table>\n
ol_____(template)_UI_=ol     (template)
<ol>_n__<li>_Item_one_</li_UI_=<ol>\n  <li> Item one </li>\n  <li> Item two </li>\n</ol>\n
html____(template)_UI_=html    (template)
<html>_n<head>_n<title>Ins_UI_=<html>\n<head>\n<title>Insert title here</title>\n</head>\n<body>\n<|c>\n</body>\n</html>
script_____(commented)_UI_=script     (commented)
style_____(commented)_UI_=style     (commented)
img_____(map)_UI=img     (map)
Usage___java_HTMLTokenizer_EXC_=IWAK0038E Usage : java HTMLTokenizer <inputfile>
## on the following line, just translate: "place title here" and "place content here"
__>_n_t_t<TITLE><|c>place__UI_=\">\n\t\t<TITLE><|c>place title here</TITLE>\n\t</HEAD>\n\t<BODY>\n\t\tplace content here\n\t</BODY>\n</HTML>
A_model's_id_can_not_be_nu_EXC_=IWAK0039E A model's id can not be null
Flatmodel_constructor_doesn__t_know_how_to_deal_with_non-string_4=Flatmodel constructor doesn\'t know how to deal with non-string
unexpected_ModelManager_Impl_1=unexpected ModelManager Impl
continuous_1=continuous
paged_2=paged
visual_3=visual
aural_4=aural
tactile_5=tactile
grid_6=grid
bitmap_7=bitmap
interactive_8=interactive
static_9=static
all_10=all
Cleaning_up_element_{0}=Cleaning up element \"{0}\"
Uppercasing_attribute_name_{0}=Uppercasing attribute name \"{0}\"
Lowercasing_attribute_name_{0}=Lowercasing attribute name \"{0}\"
Uppercasing_tag_name_{0}=Uppercasing tag name \"{0}\"
Lowercasing_tag_name_{0}=Lowercasing tag name \"{0}\"
Inserting_missing_end_tag_{0}=Inserting missing end tag \"{0}\"
Inserting_missing_start_tag_{0}=Inserting missing start tag \"{0}\"
Inserting_default_attribute_value_{0}=Inserting default attribute value \"{0}\"
Quoting_attribute_value_{0}=Quoting attribute value \"{0}\"
Formatting_start_tag_of_element_{0}=Formatting start tag of element \"{0}\"
Formatting_end_tag_of_element_{0}=Formatting end tag of element \"{0}\"
Formatting_element_{0}=Formatting element \"{0}\"
Formatting_indentation_before_element_{0}=Formatting indentation before element \"{0}\"
Formatting_indentation_after_element_{0}=Formatting indentation after element \"{0}\"
Formatting_element_{0}=Formatting element \"{0}\"
StructuredDocumentBuilder.0=Updating builders
ModelPlugin.0=Structured Builder
Text_Change_UI_=Text Change
