# NLS_MESSAGEFORMAT_VAR          needed to handle quotes correctly

###############################################################################
# Copyright (c) 2005 IBM Corporation and others.
# All rights reserved. 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/
# 
# Contributors:
#     IBM Corporation - initial API and implementation
###############################################################################


! Please do not translate following strings  in this file (appears exactly, case sensitive) :
! WITH
! SQL
! SELECT
! FULLSELECT
! UNION
! CASE
! CAST

! plugin.xml
!
! Menu action labels
!
_UI_PLUGIN_PROVIDER            = Eclipse Data Tools Platform
_UI_PLUGIN_NAME                = SQL Builder
_NL1_PLUGIN_NAME 			   = SQL Builder Nl1 Fragment
_UI_BUILDER_NAME               = SQL Query Builder

!
! SQL Statement actions
!
datatools_sqlbuilder_sqlstatement_actions_new = New...
datatools_sqlbuilder_sqlstatement_actions_newSQLStatement = New SQL Statement...
datatools_sqlbuilder_sqlstatement_actions_newSQLStatement_tooltip = Create a New Query Statement
datatools_sqlbuilder_sqlstatement_actions_openwith = Open With
datatools_sqlbuilder_sqlstatement_actions_sqlbuilder = SQL Query Builder
datatools_sqlbuilder_sqlstatement_actions_sqleditor = SQL Editor

!SQL Editor
datatools_sqlbuilder_sqleditor_tooltip = Open SQL Editor
datatools_sqlbuilder_sqleditor_title = &SQL Editor

## Resources for the standard editor actions

ContentAssistProposal_label       =Co&ntent Assist@Ctrl+SPACE
ContentAssistProposal_tooltip     =Content Assist
ContentAssistProposal_image       =
ContentAssistProposal_description =Content Assist

ContentTip_label       =Content Tip@Ctrl+SHIFT+SPACE
ContentTip_tooltip     =Content Tip
ContentTip_image       =
ContentTip_description =Content Tip

# Preference page name
SQLBuilder.PreferencePageName = SQL Query Builder

# Editor name for the editor which implements sqleditor's SQLBuilder extension point
SQLEditor.SQLBuilderName = SQL Query Builder