/*
 * OleView (Pt.rc)
 * Portuguese Language Support
 *
 * Copyright 2008 Ricardo Filipe
 * Copyright 2010 Gustavo Henrique Milaré
 *
 * 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 "resource.h"

#pragma code_page(65001)

LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN

DLG_CREATEINSTON DIALOG 0, 0, 250, 41
STYLE DS_MODALFRAME | DS_NOIDLEMSG | WS_CAPTION | WS_SYSMENU
CAPTION "Conectar-se a outra máquina"
FONT 8, "MS Shell Dlg"
{
    LTEXT   "&Nome da máquina:", -1, 5, 6, 190, 8
    EDITTEXT    IDC_MACHINE, 5, 16, 190, 12, WS_BORDER | WS_TABSTOP | ES_AUTOHSCROLL
    DEFPUSHBUTTON   "&OK", IDOK, 200, 5, 45, 14
    PUSHBUTTON  "&Cancelar", IDCANCEL, 200, 22, 45, 14
}

LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE

DLG_CREATEINSTON DIALOG 0, 0, 250, 41
STYLE DS_MODALFRAME | DS_NOIDLEMSG | WS_CAPTION | WS_SYSMENU
CAPTION "Ligar a outra máquina"
FONT 8, "MS Shell Dlg"
{
    LTEXT   "&Nome da máquina:", -1, 5, 6, 190, 8
    EDITTEXT    IDC_MACHINE, 5, 16, 190, 12, WS_BORDER | WS_TABSTOP | ES_AUTOHSCROLL
    DEFPUSHBUTTON   "&OK", IDOK, 200, 5, 45, 14
    PUSHBUTTON  "&Cancelar", IDCANCEL, 200, 22, 45, 14
}


LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN

DLG_SYSCONF DIALOG 0, 0, 170, 100
STYLE DS_MODALFRAME | DS_NOIDLEMSG | WS_CAPTION | WS_SYSMENU
CAPTION "Configuração do Sistema"
FONT 8, "MS Shell Dlg"
{
    LTEXT   "Configurações do Sistema", -1, 5, 6, 160, 8
    CHECKBOX    "&Ativar COM Distribuídos", IDC_ENABLEDCOM, 5, 20, 160, 10, WS_TABSTOP | WS_GROUP | BS_AUTOCHECKBOX
    CHECKBOX    "Ativar Conexões &Remotas (Win95 apenas)", IDC_ENABLEREMOTE, 5, 35, 160, 10, WS_TABSTOP | WS_GROUP | BS_AUTOCHECKBOX
    LTEXT   "Estas configurações alteram apenas valores de registro.\nNão há consequências no desempenho do Wine.", -1, 5, 50, 160, 40
    DEFPUSHBUTTON   "&OK", IDOK, 70, 80, 45, 14
    PUSHBUTTON  "&Cancelar", IDCANCEL, 120, 80, 45, 14
}

LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE

DLG_SYSCONF DIALOG 0, 0, 170, 100
STYLE DS_MODALFRAME | DS_NOIDLEMSG | WS_CAPTION | WS_SYSMENU
CAPTION "Configuração do Sistema"
FONT 8, "MS Shell Dlg"
{
    LTEXT   "Configurações do Sistema", -1, 5, 6, 160, 8
    CHECKBOX    "&Activar COM Distribuídos", IDC_ENABLEDCOM, 5, 20, 160, 10, WS_TABSTOP | WS_GROUP | BS_AUTOCHECKBOX
    CHECKBOX    "Activar Ligações &Remotas (Win95 apenas)", IDC_ENABLEREMOTE, 5, 35, 160, 10, WS_TABSTOP | WS_GROUP | BS_AUTOCHECKBOX
    LTEXT   "Estas configurações alteram apenas valores de registo.\nNão tem consequências no desempenho do Wine.", -1, 5, 50, 160, 40
    DEFPUSHBUTTON   "&OK", IDOK, 70, 80, 45, 14
    PUSHBUTTON  "&Cancelar", IDCANCEL, 120, 80, 45, 14
}

LANGUAGE LANG_PORTUGUESE, SUBLANG_NEUTRAL

DLG_DEFAULT_IV DIALOG 0, 0, 280, 50
STYLE DS_MODALFRAME | DS_NOIDLEMSG | WS_CAPTION | WS_SYSMENU
CAPTION "Visualizador de Interface Padrão"
FONT 8, "MS Shell Dlg"
{
    LTEXT   "Interface", -1, 5, 6, 50, 8
    LTEXT   "", IDC_LABEL, 60, 6, 145, 8
    LTEXT   "IID:", -1, 5, 16, 50, 8
    LTEXT   "", IDC_IDENTIFIER, 60, 16, 165, 8
    DEFPUSHBUTTON   "&Fechar", IDCANCEL, 230, 6, 45, 14
    PUSHBUTTON  "&Ver informação do tipo", IDC_VIEWTYPEINFO, 6, 31, 70, 14, WS_DISABLED
}

DLG_IPERSIST_IV DIALOG 0, 0, 280, 29
STYLE DS_MODALFRAME | DS_NOIDLEMSG | WS_CAPTION | WS_SYSMENU
CAPTION "Visualizador de Interface IPersist"
FONT 8, "MS Shell Dlg"
{
    LTEXT   "Nome da classe:", -1, 5, 6, 50, 8
    LTEXT   "", IDC_LABEL, 60, 6, 145, 8
    LTEXT   "CLSID:", -1, 5, 16, 50, 8
    LTEXT   "", IDC_IDENTIFIER, 60, 16, 165, 8
    DEFPUSHBUTTON   "&Fechar", IDCANCEL, 230, 6, 45, 14
}

DLG_IPERSISTSTREAM_IV DIALOG 0, 0, 280, 68
STYLE DS_MODALFRAME | DS_NOIDLEMSG | WS_CAPTION | WS_SYSMENU
CAPTION "Visualizador de Interface IPersistStream"
FONT 8, "MS Shell Dlg"
{
    LTEXT   "Nome da classe:", -1, 5, 6, 50, 8
    LTEXT   "", IDC_LABEL, 60, 6, 145, 8
    LTEXT   "CLSID:", -1, 5, 16, 50, 8
    LTEXT   "", IDC_IDENTIFIER, 60, 16, 165, 8
    DEFPUSHBUTTON   "&Fechar", IDCANCEL, 230, 6, 45, 14
    PUSHBUTTON  "É&Sujo", IDC_ISDIRTY_BUTTON, 6, 31, 50, 14
    LTEXT   "???", IDC_ISDIRTY, 60, 34, 145, 8
    PUSHBUTTON  "&TamanhoMáximo", IDC_GETSIZEMAX_BUTTON, 6, 49, 50, 14
    LTEXT   "???", IDC_GETSIZEMAX, 60, 52, 145, 8
}
