###############################################################################
# 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
###############################################################################

TITLE_WSEXPLORER=Explorador de Servi\u00e7os da Web

# Tree Nodes
ALT_OPEN=Abrir
ALT_CLOSE=Anterior

# Perspective Toolbar
ALT_BACK=        Voltar
ALT_FORWARD=Avan\u00e7ar
ALT_ACTION_ENGINE=Gravador de A\u00e7\u00e3o
ALT_UDDI_PERSPECTIVE=P\u00e1gina do UDDI
ALT_WSIL_PERSPECTIVE=P\u00e1gina do WSIL
ALT_WSDL_PERSPECTIVE=P\u00e1gina do WSDL
ALT_FAVORITES_PERSPECTIVE=Favoritos

# Toolbars
ALT_DOUBLE_CLICK_TO_MAXIMIZE=Clique Duplo para Maximizar
ALT_DOUBLE_CLICK_TO_RESTORE=Clique Duplo para Restaurar

# SetDefaultViewTool
ALT_BACK_TO_TOP=Voltar ao in\u00edcio da p\u00e1gina

# Common Actions
ALT_REFRESH=Atualizar
ALT_CLEAR=Limpar
ALT_RESULTS=Resultados

# Common Labels
ALT_NAVIGATOR=Navegador
ALT_ACTIONS=A\u00e7\u00f5es
ALT_STATUS=Status
ALT_OTHER_ACTIONS=Outras A\u00e7\u00f5es
FORM_BUTTON_GO=&nbsp;&nbsp;Ir&nbsp;&nbsp;
FORM_BUTTON_RESET=Redefinir
FORM_BUTTON_CANCEL=Cancelar
FORM_LABEL_ACTIONS=A\u00e7\u00f5es
FORM_LABEL_ACTIONS_NONE=Nenhum(a)

# Placeholder for blank table entries
TABLE_BLANK_PLACEHOLDER=--

# Common Form Control Titles
FORM_CONTROL_TITLE_SELECT_ALL_CHECK_BOX=Selecionar Tudo
FORM_CONTROL_TITLE_SELECT_ROW_CHECK_BOX=Selecionar linha

# Common Messages
MSG_ERROR_UNEXPECTED=IWAB0135E Ocorreu um erro inesperado.
MSG_ERROR_NO_ACTION_SELECTED=IWAB0124E Selecione uma a\u00e7\u00e3o.
MSG_ERROR_NO_NODE_SELECTED=IWAB0125E Selecione um n\u00f3.
MSG_SUBMIT_IN_PROGRESS=Aguarde. A opera\u00e7\u00e3o ainda est\u00e1 em progresso.
MSG_LOAD_IN_PROGRESS=Aguarde enquanto o formul\u00e1rio \u00e9 carregado...

#LaunchWebServiceWizardAction
ALT_LAUNCH_WEB_SERVICE_WIZARD=Ativar Assistente para Servi\u00e7os da Web
FORM_LABEL_CHOOSE_WIZARD=Selecionar um assistente para ativa\u00e7\u00e3o:
FORM_RADIO_WEB_SERVICE_CLIENT_WIZARD=Cliente de Servi\u00e7o da Web
FORM_RADIO_WEB_SERVICE_SKELETON_WIZARD=Esqueleto de Servi\u00e7o da Web
MSG_ERROR_WIZARD_ALREADY_RUNNING=IWAB0126E Um assistente para servi\u00e7o da Web j\u00e1 est\u00e1 em progresso.  Finalizar com o assistente existente antes de ativar um novo.
MSG_ERROR_WSDL_URL_IS_UNREACHABLE=IWAB0127E O documento WSDL n\u00e3o \u00e9 alcan\u00e7\u00e1vel.

# ImportToFileSystemAction
ALT_WSIL_IMPORT_TO_FS=Importar WSIL Para o Sistema de Arquivos
ALT_WSDL_IMPORT_TO_FS=Importar WSDL para o Sistema de Arquivos
MSG_ERROR_RETRIEVING_WSDL_DOC=IWAB0128E Imposs\u00edvel recuperar documento WSDL.
MSG_ERROR_RETRIEVING_WSIL_DOC=IWAB0129E Imposs\u00edvel recuperar documento WSIL.
MSG_IMPORT_WSDL_SUCCESSFUL=Documento WSDL importado com \u00eaxito.
MSG_IMPORT_WSIL_SUCCESSFUL=Documento WSIL importado com \u00eaxito.

# ImportToWorkbenchAction
ALT_IMPORT_WSDL_TO_WORKBENCH=Importar WSDL Para Workbench
FORM_LABEL_IMPORT_TO_WORKBENCH_DESC=Selecione um projeto do workbench no qual ir\u00e1 salvar o arquivo WSDL. Voc\u00ea tamb\u00e9m poder\u00e1 alterar o nome do arquivo WSDL.
WEB_PROJECT_NAME=Projeto Web:
WORKBENCH_PROJECT_NAME=Projeto do Workbench:
LABEL_IMPORT_WSDL=Importar documento WSDL
LABEL_IMPORT_TO_WSIL=Importar como uma refer\u00eancia de servi\u00e7o para um documento WSIL
IMPORTED_WSDL_FILE_NAME=Nome do arquivo WSDL:
WSIL_FILE_NAME=Nome do arquivo WSIL:
MSG_ERROR_FILE_OVERWRITE_DISABLED=Imposs\u00edvel criar o arquivo "%2" relativo ao caminho "%1" porque sobrescrever arquivo automaticamente n\u00e3o foi ativado. Deseja ativ\u00e1-lo para este arquivo?
MSG_ERROR_INVALID_WORKBENCH_PROJECT=IWAB0130E Selecione um projeto do workbench.
MSG_ERROR_INVALID_WSDL_FILE_NAME=IWAB0131E Nome de arquivo inv\u00e1lido.
MSG_ERROR_INVALID_WSIL_FILE_NAME=IWAB0470E Nome de arquivo WSIL inv\u00e1lido.
MSG_ERROR_NO_IMPORT_OPTION_SELECTED=IWAB0471E Nenhuma op\u00e7\u00e3o de importa\u00e7\u00e3o est\u00e1 selecionada.  Escolha pelo menos uma op\u00e7\u00e3o de importa\u00e7\u00e3o.
MSG_ERROR_WRITING_TEMP_FILE_TO_FS=IWAB0132E Imposs\u00edvel gravar no arquivo tempor\u00e1rio.
MSG_INFO_IMPORT_TO_WORKBENCH_SUCCESSFUL=IWAB0314I %1 foi importado com \u00eaxito para o workbench.
MSG_INFO_IMPORT_SERVICE_REF_TO_WSIL_SUCCESSFUL=IWAB0472I A refer\u00eancia de servi\u00e7o foi importada com \u00eaxito para %1.

# CheckWorkbenchFileReadOnlyAction
MSG_ERROR_FILE_CHECKOUT_DISABLED=Imposs\u00edvel criar o arquivo "%2" relativo ao caminho "%1" porque registro de sa\u00edda de arquivo autom\u00e1tico n\u00e3o foi ativado. Deseja ativ\u00e1-lo para este arquivo?

# ClearNodeAction
MSG_INFO_NODE_CLEARED=IWAB0133I %1 limpo.

# Table twistees
ALT_TWIST_OPENED=Ocultar
ALT_TWIST_CLOSED=Expandir

# WSDL Browser
FORM_LINK_BROWSE=Procurar..
TITLE_WSDL_BROWSER=Navegador do WSDL - %1
FORM_LABEL_WSDL_SOURCE=Selecione uma origem do WSDL:
FORM_LABEL_WSDL_SOURCE_WEBPROJECTS=Projetos da Web
FORM_LABEL_WSDL_SOURCE_FAVORITES=Favoritos
FORM_LABEL_WEB_PROJECT=Projeto da Web
FORM_LABEL_WSDL_URL=URL do WSDL
FORM_BUTTON_REFRESH=Atualizar
ALT_WSDL_BROWSER=Navegador do WSDL
WSDL_TYPE_SERVICE_INTERFACES=Interfaces de Servi\u00e7o
WSDL_TYPE_SERVICES=Servi\u00e7os

# Calendar Browser
TITLE_CALENDAR_BROWSER=Navegador do Calend\u00e1rio
# 2 character abbreviations for days of the week.
FORM_LABEL_SH_SUNDAY=Dom
FORM_LABEL_SH_MONDAY=Seg
FORM_LABEL_SH_TUESDAY=Ter
FORM_LABEL_SH_WEDNESDAY=Qua
FORM_LABEL_SH_THURSDAY=Qui
FORM_LABEL_SH_FRIDAY=Sex
FORM_LABEL_SH_SATURDAY=S\u00e1b
# Months of the year
FORM_LABEL_MONTH=M\u00eas:
FORM_LABEL_JANUARY=Janeiro
FORM_LABEL_FEBRUARY=Fevereiro
FORM_LABEL_MARCH=Mar\u00e7o
FORM_LABEL_APRIL=Abri
FORM_LABEL_MAY=Maio
FORM_LABEL_JUNE=Junho
FORM_LABEL_JULY=Julho
FORM_LABEL_AUGUST=Agosto
FORM_LABEL_SEPTEMBER=Setembro
FORM_LABEL_OCTOBER=Outubro
FORM_LABEL_NOVEMBER=Novembro
FORM_LABEL_DECEMBER=Dezembro
FORM_LABEL_YEAR=Ano:
FORM_LABEL_TIME=Hora:
FORM_LINK_TODAY=Hoje
FORM_LINK_PREVIOUS_YEAR=<<
FORM_LINK_PREVIOUS_MONTH=<
FORM_LINK_NEXT_MONTH=>
FORM_LINK_NEXT_YEAR=>>
ALT_PREVIOUS_YEAR=Ano Anterior
ALT_PREVIOUS_MONTH=M\u00eas Anterior
ALT_NEXT_MONTH=Pr\u00f3ximo M\u00eas
ALT_NEXT_YEAR=Pr\u00f3ximo Ano
ALT_TODAY=Hoje
ALT_CALENDAR_BROWSER=Navegador do Calend\u00e1rio
MSG_ERROR_INVALID_TIME_FORMAT=IWAB0368E A hora n\u00e3o foi formatada como HH:MM:SS[.SSS]. Deseja utilizar a hora atual?

# Action engine
TITLE_ACTION_RECORDER=Gravador de A\u00e7\u00e3o
FORM_LABEL_MODE=Modo:
FORM_LABEL_MODE_PLAY=Reproduzir
FORM_LABEL_MODE_STOP=Parar
FORM_LABEL_MODE_RECORD=Registro
FORM_LABEL_SAVE=Salvar
FORM_LABEL_PLAY_FILE=Arquivo play:
MSG_ERROR_INVALID_PLAY_FILE=IWAB0362E Inserir um arquivo play.

# Frame titles
FRAME_TITLE_PERSPECTIVE_WORKAREA=\u00c1rea de Trabalho Interna do Explorador de Servi\u00e7os da Web
FRAME_TITLE_PERSPECTIVE_TOOLBAR=Barra de Ferramentas do Explorador de Servi\u00e7os da Web
FRAME_TITLE_PERSPECTIVE_CONTENT=Conte\u00fado da P\u00e1gina do Explorador de Servi\u00e7os da Web
FRAME_TITLE_WSDL_TOOLBAR=Barras de Ferramentas do Navegador do WSDL
FRAME_TITLE_WSDL_CONTENT=Conte\u00fado do Navegador do WSDL

# Form titles
FORM_TITLE_PAGE_LOADER=Carregador de P\u00e1gina
FORM_TITLE_PAGE_CONTENT=Conte\u00fado da P\u00e1gina Carregada
FORM_TITLE_LAUNCH_WEBSERVICE_WIZARD=Ativar Formul\u00e1rio do Assistente para Servi\u00e7os da Web
FORM_TITLE_IMPORT_TO_WORKBENCH=Importar Formul\u00e1rio do Workbench
