/*
 * 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 "E&xcluir\tEntf",           PM_DELETE
   MENUITEM "A&tributos...\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
   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 "E&xcluir\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
   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,  60, 10
EDITTEXT                            PM_DESCRIPTION,       70, 18,  90, 15, WS_TABSTOP
LTEXT     "&Grupo de arquivo:",        PM_FILE_TXT,          05, 38,  50, 10
EDITTEXT                            PM_FILE,              70, 38,  90, 15, WS_TABSTOP
DEFPUSHBUTTON "OK",            IDOK,                165,  5,  60, 15, WS_TABSTOP
PUSHBUTTON    "Cancelar",        IDCANCEL,            165, 25,  60, 15, WS_TABSTOP
PUSHBUTTON    "Aj&uda",          PM_HELP,             165, 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,  60, 10
EDITTEXT                            PM_DESCRIPTION,       70, 18,  90, 15, WS_TABSTOP
LTEXT     "&Grupo de ficheiro:",        PM_FILE_TXT,          05, 38,  50, 10
EDITTEXT                            PM_FILE,              70, 38,  90, 15, WS_TABSTOP
DEFPUSHBUTTON "OK",            IDOK,                165,  5,  60, 15, WS_TABSTOP
PUSHBUTTON    "Cancelar",        IDCANCEL,            165, 25,  60, 15, WS_TABSTOP
PUSHBUTTON    "Aj&uda",          PM_HELP,             165, 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
{
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.\nTentar novamente?"
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 foi sobrescrito."
IDS_SAVE_GROUP_AS_s,		"Salvar grupo como '%s' para prevenir a sobrescrita 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
{
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)"
}
