/*
 * Program Manager
 * Portuguese Language Support
 *
 * Copyright 1999 Gustavo Junior Alves <alves@correionet.com.br>
 * Copyright 2003 Marcelo Duarte
 * Copyright 2004 Américo José Melo
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
 */

#include "progman.h"

#pragma code_page(65001)

LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN

/* Menu */
MAIN_MENU MENU 
{
 POPUP "&Arquivo" {
   MENUITEM "&Novo...",              PM_NEW
   MENUITEM "A&brir\tEnter",             PM_OPEN
   MENUITEM "&Mover...\tF7",             PM_MOVE,      GRAYED
   MENUITEM "&Copiar...\tF8",             PM_COPY,      GRAYED
   MENUITEM "&Excluir\tEntf",           PM_DELETE
   MENUITEM "&Atributos...\tAlt+Enter",       PM_ATTRIBUTES
   MENUITEM SEPARATOR
   MENUITEM "&Executar...",          PM_EXECUTE
   MENUITEM SEPARATOR
   MENUITEM "Sai&r do Windows...",             PM_EXIT
 }
 POPUP "&Opções" {
   MENUITEM "&Auto organizar",  PM_AUTO_ARRANGE
   MENUITEM "&Minimizar na execução",    PM_MIN_ON_RUN
   MENUITEM "&Salvar alterações ao sair", PM_SAVE_SETTINGS
 }
 POPUP "&Janelas" {
   MENUITEM "&Cascata\tShift+F5",       PM_OVERLAP
   MENUITEM "&Lado a lado \tShift+F4",  PM_SIDE_BY_SIDE
   MENUITEM "&Organizar ícones",       PM_ARRANGE
 }
 
POPUP "Aj&uda" {
   MENUITEM "&Conteúdo",         PM_CONTENTS
   MENUITEM "&Pesquisa...",           PM_SEARCH
   MENUITEM SEPARATOR
   MENUITEM "&Ajuda da ajuda",     PM_HELPONHELP
   MENUITEM "&Tutorial",         PM_TUTORIAL
   MENUITEM SEPARATOR

   POPUP "&Informações..." {
     MENUITEM "&Licença",        PM_LICENSE
     MENUITEM "&SEM GARANTIA",    PM_NO_WARRANTY
     MENUITEM "&Sobre o WINE",     PM_ABOUT_WINE
   }
 }
}

LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE

/* Menu */
MAIN_MENU MENU 
{
 POPUP "&Ficheiro" {
   MENUITEM "&Novo...",              PM_NEW
   MENUITEM "A&brir\tEnter",             PM_OPEN
   MENUITEM "&Mover...\tF7",             PM_MOVE,      GRAYED
   MENUITEM "&Copiar...\tF8",             PM_COPY,      GRAYED
   MENUITEM "&Excluir\tEntf",           PM_DELETE
   MENUITEM "&Atributos...\tAlt+Enter",       PM_ATTRIBUTES
   MENUITEM SEPARATOR
   MENUITEM "&Executar...",          PM_EXECUTE
   MENUITEM SEPARATOR
   MENUITEM "Sai&r do Windows...",             PM_EXIT
 }
 POPUP "&Opções" {
   MENUITEM "&Auto organizar",  PM_AUTO_ARRANGE
   MENUITEM "&Minimizar na execução",    PM_MIN_ON_RUN
   MENUITEM "&Gravar alterações ao sair", PM_SAVE_SETTINGS
 }
 POPUP "&Janelas" {
   MENUITEM "&Cascata\tShift+F5",       PM_OVERLAP
   MENUITEM "&Lado a lado \tShift+F4",  PM_SIDE_BY_SIDE
   MENUITEM "&Organizar ícones",       PM_ARRANGE
 }
 
POPUP "Aj&uda" {
   MENUITEM "&Conteúdo",         PM_CONTENTS
   MENUITEM "&Pesquisa...",           PM_SEARCH
   MENUITEM SEPARATOR
   MENUITEM "&Ajuda da ajuda",     PM_HELPONHELP
   MENUITEM "&Tutorial",         PM_TUTORIAL
   MENUITEM SEPARATOR

   POPUP "&Informações..." {
     MENUITEM "&Licença",        PM_LICENSE
     MENUITEM "&SEM GARANTIA",    PM_NO_WARRANTY
     MENUITEM "&Acerca do WINE",     PM_ABOUT_WINE
   }
 }
}


/* Dialog `New' */

LANGUAGE LANG_PORTUGUESE, SUBLANG_NEUTRAL

DIALOG_NEW DIALOG 0, 0, 170, 65
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Novo"
{
RADIOBUTTON   "",                 PM_NEW_GROUP,    10, 15,  10, 15
LTEXT         "&Grupo de programa",   -1,    20, 18,  80, 15
RADIOBUTTON   "",                 PM_NEW_PROGRAM,  10, 35,  10, 15
LTEXT         "&Programa", -1,  20, 38,  80, 15
DEFPUSHBUTTON "OK",          IDOK,           105,  5,  60, 15, WS_TABSTOP
PUSHBUTTON    "Cancelar",      IDCANCEL,       105, 25,  60, 15, WS_TABSTOP
PUSHBUTTON    "Aj&uda",        PM_HELP,        105, 45,  60, 15, WS_TABSTOP
}


/* Dialog `Move' */

LANGUAGE LANG_PORTUGUESE, SUBLANG_NEUTRAL

DIALOG_MOVE DIALOG 0, 0, 250, 65
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Mover programa"
{
LTEXT         "Mover programa:",    -1,            5,  5,  90, 15
LTEXT         "",                     PM_PROGRAM,         95,  5,  90, 15
LTEXT         "Do grupo:", -1,            5, 13,  90, 15
LTEXT         "",                     PM_FROM_GROUP,      95, 13,  90, 15
LTEXT         "&Para o grupo:",   PM_TO_GROUP_TXT,     5, 28, 140, 15
COMBOBOX                              PM_TO_GROUP,         5, 38, 140, 50, WS_TABSTOP | CBS_DROPDOWNLIST
DEFPUSHBUTTON "OK",              IDOK,              185,  5,  60, 15, WS_TABSTOP
PUSHBUTTON    "Cancelar",          IDCANCEL,          185, 25,  60, 15, WS_TABSTOP
PUSHBUTTON    "Aj&uda",            PM_HELP,           185, 45,  60, 15, WS_TABSTOP
}


/* Dialog `Copy' */

LANGUAGE LANG_PORTUGUESE, SUBLANG_NEUTRAL

DIALOG_COPY DIALOG 0, 0, 250, 65
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Copiar programa"
{
LTEXT         "Copiar programa:",    -1,            5,  5,  90, 15
LTEXT         "",                     PM_PROGRAM,         95,  5,  90, 15
LTEXT         "Do grupo:", -1,            5, 13,  90, 15
LTEXT         "",                     PM_FROM_GROUP,      95, 13,  90, 15
LTEXT         "&Para o grupo:",   PM_TO_GROUP_TXT,     5, 28, 140, 15
COMBOBOX                              PM_TO_GROUP,         5, 38, 140, 50, WS_TABSTOP | CBS_DROPDOWNLIST
DEFPUSHBUTTON "OK",              IDOK,              185,  5,  60, 15, WS_TABSTOP
PUSHBUTTON    "Cancelar",          IDCANCEL,          185, 25,  60, 15, WS_TABSTOP
PUSHBUTTON    "Aj&uda",            PM_HELP,           185, 45,  60, 15, WS_TABSTOP
}


/* Dialog `Group attributes' */

LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN

DIALOG_GROUP DIALOG 0, 0, 230, 65
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Atributos do grupo de programas"
{
LTEXT     "&Descrição:", PM_DESCRIPTION_TXT,   05, 18,  50, 10
EDITTEXT                            PM_DESCRIPTION,       60, 18,  90, 15, WS_TABSTOP
LTEXT     "&Grupo de arquivo:",        PM_FILE_TXT,          05, 38,  50, 10
EDITTEXT                            PM_FILE,              60, 38,  90, 15, WS_TABSTOP
DEFPUSHBUTTON "OK",            IDOK,                155,  5,  60, 15, WS_TABSTOP
PUSHBUTTON    "Cancelar",        IDCANCEL,            155, 25,  60, 15, WS_TABSTOP
PUSHBUTTON    "Aj&uda",          PM_HELP,             155, 45,  60, 15, WS_TABSTOP
}

LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE

DIALOG_GROUP DIALOG 0, 0, 230, 65
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Atributos do grupo de programas"
{
LTEXT     "&Descrição:", PM_DESCRIPTION_TXT,   05, 18,  50, 10
EDITTEXT                            PM_DESCRIPTION,       60, 18,  90, 15, WS_TABSTOP
LTEXT     "&Grupo de ficheiro:",        PM_FILE_TXT,          05, 38,  50, 10
EDITTEXT                            PM_FILE,              60, 38,  90, 15, WS_TABSTOP
DEFPUSHBUTTON "OK",            IDOK,                155,  5,  60, 15, WS_TABSTOP
PUSHBUTTON    "Cancelar",        IDCANCEL,            155, 25,  60, 15, WS_TABSTOP
PUSHBUTTON    "Aj&uda",          PM_HELP,             155, 45,  60, 15, WS_TABSTOP
}


/* Dialog `Program attributes' */

LANGUAGE LANG_PORTUGUESE, SUBLANG_NEUTRAL

DIALOG_PROGRAM DIALOG 0, 0, 250, 105
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Atributos de programa"
{
LTEXT         "&Descrição:",  PM_DESCRIPTION_TXT,   05, 10,  60, 10
EDITTEXT                                   PM_DESCRIPTION,       80, 10,  90, 15, WS_TABSTOP
LTEXT         "&Linha de comando:", PM_COMMAND_LINE_TXT,  05, 25,  60, 10
EDITTEXT                                   PM_COMMAND_LINE,      80, 25,  90, 15, WS_TABSTOP
LTEXT         "&Pasta de trabalho:",    PM_DIRECTORY_TXT,     05, 40,  60, 10
EDITTEXT                                   PM_DIRECTORY,         80, 40,  90, 15, WS_TABSTOP
LTEXT         "&Tecla de atalho:",      PM_HOT_KEY_TXT,       05, 55,  60, 10
EDITTEXT                                   PM_HOT_KEY,           80, 55,  90, 15, WS_TABSTOP
ICON          "",                          PM_ICON,              20, 70
CHECKBOX      "",                          PM_SYMBOL,            80, 75,  10, 10, WS_TABSTOP
LTEXT         "Executar &minimizado",       -1,             95, 75,  75, 10
DEFPUSHBUTTON "OK",                   IDOK,                185,  5,  60, 15, WS_TABSTOP
PUSHBUTTON    "Cancelar",               IDCANCEL,            185, 25,  60, 15, WS_TABSTOP
PUSHBUTTON    "P&rocurar...",               PM_BROWSE,           185, 45,  60, 15, WS_TABSTOP
PUSHBUTTON    "Alt&erar ícone...", PM_OTHER_SYMBOL,     185, 65,  60, 15, WS_TABSTOP
PUSHBUTTON    "Aj&uda",                 PM_HELP,             185, 85,  60, 15, WS_TABSTOP
}


/* Dialog `Symbol' */

LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN

DIALOG_SYMBOL DIALOG 0, 0, 200, 85
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Alterar ícone"
{
LTEXT     "&Nome do arquivo:",    PM_ICON_FILE_TXT,    5, 15,  40, 10
EDITTEXT                         PM_ICON_FILE,       45, 15,  85, 15, WS_TABSTOP
LTEXT     "Ícone &atual:", PM_SYMBOL_LIST_TXT,  5, 30, 125, 10
COMBOBOX                         PM_SYMBOL_LIST,      5, 40, 125, 50,
   CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | CBS_OWNERDRAWFIXED | WS_TABSTOP
DEFPUSHBUTTON "OK",         IDOK,              135,  5,  60, 15, WS_TABSTOP
PUSHBUTTON    "Cancelar",     IDCANCEL,          135, 25,  60, 15, WS_TABSTOP
PUSHBUTTON    "&Procurar...",    PM_BROWSE,         135, 45,  60, 15, WS_TABSTOP
PUSHBUTTON    "Aj&uda",       PM_HELP,           135, 65,  60, 15, WS_TABSTOP
}

LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE

DIALOG_SYMBOL DIALOG 0, 0, 200, 85
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Alterar ícone"
{
LTEXT     "&Nome do ficheiro:",    PM_ICON_FILE_TXT,    5, 15,  40, 10
EDITTEXT                         PM_ICON_FILE,       45, 15,  85, 15, WS_TABSTOP
LTEXT     "Ícone &actual:", PM_SYMBOL_LIST_TXT,  5, 30, 125, 10
COMBOBOX                         PM_SYMBOL_LIST,      5, 40, 125, 50,
   CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | CBS_OWNERDRAWFIXED | WS_TABSTOP
DEFPUSHBUTTON "OK",         IDOK,              135,  5,  60, 15, WS_TABSTOP
PUSHBUTTON    "Cancelar",     IDCANCEL,          135, 25,  60, 15, WS_TABSTOP
PUSHBUTTON    "&Procurar...",    PM_BROWSE,         135, 45,  60, 15, WS_TABSTOP
PUSHBUTTON    "Aj&uda",       PM_HELP,           135, 65,  60, 15, WS_TABSTOP
}


/* Dialog `Execute' */

LANGUAGE LANG_PORTUGUESE, SUBLANG_NEUTRAL

DIALOG_EXECUTE DIALOG 0, 0, 200, 85
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Executar programa"
{
LTEXT     "&Linha de comando:", -1,   05, 15, 120, 10
EDITTEXT                               PM_COMMAND, 05, 25, 120, 15, WS_TABSTOP
CHECKBOX      "",                      PM_SYMBOL,  05, 45,  10, 10, WS_TABSTOP
LTEXT         "Executar &minimizado",   -1,   20, 45, 120, 10
DEFPUSHBUTTON "OK",               IDOK,      135,  5,  60, 15, WS_TABSTOP
PUSHBUTTON    "Cancelar",           IDCANCEL,  135, 25,  60, 15, WS_TABSTOP
PUSHBUTTON    "&Procurar...",          PM_BROWSE, 135, 45,  60, 15, WS_TABSTOP
PUSHBUTTON    "Aj&uda",             PM_HELP,   135, 65,  60, 15, WS_TABSTOP
}


/* Strings */

LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN

STRINGTABLE DISCARDABLE
{
IDS_PROGRAM_MANAGER,		"Gerenciador de programas"
IDS_ERROR,			"ERRO"
IDS_WARNING,			"AVISO"
IDS_INFO,			"Informação"
IDS_DELETE,			"Excluir"
IDS_DELETE_GROUP_s,		"Excluir grupo '%s' ?"
IDS_DELETE_PROGRAM_s,		"Excluir programa '%s' ?"
IDS_NOT_IMPLEMENTED,		"Não implementado"
IDS_FILE_READ_ERROR_s,		"Erro lendo '%s'."
IDS_FILE_WRITE_ERROR_s,		"Erro escrevendo '%s'."
IDS_GRPFILE_READ_ERROR_s,	"O arquivo de grupo '%s' não pode ser aberto.\nDeverá ser tentado outras vezes?"
IDS_OUT_OF_MEMORY,		"Sem memória."
IDS_WINHELP_ERROR,		"Ajuda não disponível."
IDS_UNKNOWN_FEATURE_s,		"Recurso desconhecido em %s"
IDS_FILE_NOT_OVERWRITTEN_s,	"Arquivo '%s' existe. Não sobreescrevendo."
IDS_SAVE_GROUP_AS_s,		"Salvar grupo como '%s' para prevenir a sobreescrita dos arquivos originais."
IDS_NO_HOT_KEY,			"Nenhuma"
IDS_ALL_FILES,			"Todos os arquivos (*.*)"
IDS_PROGRAMS,			"Programas"
IDS_LIBRARIES_DLL,		"Bibliotecas (*.dll)"
IDS_SYMBOL_FILES,		"Arquivos de ícones"
IDS_SYMBOLS_ICO,		"Ícones (*.ico)"
}

LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE

STRINGTABLE DISCARDABLE
{
IDS_PROGRAM_MANAGER,		"Gerênciador de programas"
IDS_ERROR,			"ERRO"
IDS_WARNING,			"AVISO"
IDS_INFO,			"Informação"
IDS_DELETE,			"Excluir"
IDS_DELETE_GROUP_s,		"Excluir grupo '%s' ?"
IDS_DELETE_PROGRAM_s,		"Excluir programa '%s' ?"
IDS_NOT_IMPLEMENTED,		"Não implementado"
IDS_FILE_READ_ERROR_s,		"Erro ao ler '%s'."
IDS_FILE_WRITE_ERROR_s,		"Erro ao escrever '%s'."
IDS_GRPFILE_READ_ERROR_s,	"O ficheiro de grupo '%s' não pode ser aberto.\nDeverá tentar outras vezes?"
IDS_OUT_OF_MEMORY,		"Sem memória."
IDS_WINHELP_ERROR,		"Ajuda não disponível."
IDS_UNKNOWN_FEATURE_s,		"Recurso desconhecido em %s"
IDS_FILE_NOT_OVERWRITTEN_s,	"Ficheiro '%s' existe. Não sobreescrever."
IDS_SAVE_GROUP_AS_s,		"Gravar grupo como '%s' para prevenir a sobreescrita dos ficheiros originais."
IDS_NO_HOT_KEY,			"Nenhuma"
IDS_ALL_FILES,			"Todos os ficheiros (*.*)"
IDS_PROGRAMS,			"Programas"
IDS_LIBRARIES_DLL,		"Bibliotecas (*.dll)"
IDS_SYMBOL_FILES,		"Ficheiros de ícones"
IDS_SYMBOLS_ICO,		"Ícones (*.ico)"
}

STRINGTABLE DISCARDABLE LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE
{
IDS_LICENSE_CAPTION,            "Licença do Wine"
IDS_LICENSE,
"O Wine é software livre; você pode redistribuí-lo e/ou \
modificá-lo sob os termos da GNU Lesser General Public \
License tal como publicado pela Free Software Foundation; seja a \
versão 2.1 da Licença, ou (por sua escolha) outra versão mais recente.\n\n\
O Wine é distribuído na esperança que seja útil, \
mas SEM QUALQUER GARANTIA; nem sequer a garantia implícita de \
MERCANTIBILIDADE ou FEITO PARA UM PROPÓSITO ESPECÍFICO.  veja a GNU \
Lesser General Public License para mais detalhes.\n\n\
Deverá ter recebido uma cópia da GNU Lesser General Public \
License com o Wine; se não, escreva à Free Software \
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA."

IDS_WARRANTY_CAPTION, "SEM GARANTIA"
IDS_WARRANTY,
"O Wine é distribuído na esperança que seja útil, \
mas SEM QUALQUER GARANTIA; nem sequer a garantia implícita de \
MERCANTIBILIDADE ou FEITO PARA UM PROPÓSITO ESPECÍFICO.  veja a GNU \
Lesser General Public License para mais detalhes."
}
