/*
 * WineMine
 * Portuguese Language Support
 *
 * Copyright 2003 Marcelo Duarte
 * Copyright 2004 Américo José Melo
 * 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

STRINGTABLE {
     IDS_APPNAME, "WineMine"
     IDS_NOBODY,  "Ninguém"
     IDS_ABOUT,   "Copyright 2000 Joshua Thielen"
}

MENU_WINEMINE MENU
{
    POPUP "&Opções" {
        MENUITEM "&Novo\tF2",           IDM_NEW
        MENUITEM SEPARATOR
        MENUITEM "&Marcas", IDM_MARKQ
        MENUITEM SEPARATOR
        MENUITEM "&Principiante",      IDM_BEGINNER
        MENUITEM "&Intermediário",      IDM_ADVANCED
        MENUITEM "&Experiente",        IDM_EXPERT
        MENUITEM "Personali&zar...",        IDM_CUSTOM
        MENUITEM SEPARATOR
        MENUITEM "Sai&r\tAlt+X",       IDM_EXIT
    }
    POPUP "Aj&uda" {
        MENUITEM "&Melhores tempos",    IDM_TIMES
        MENUITEM "&Sobre",         IDM_ABOUT
    }
}

LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE

STRINGTABLE {
     IDS_APPNAME, "WineMine"
     IDS_NOBODY,  "Ninguém"
     IDS_ABOUT,   "Direitos de autor 2000, Joshua Thielen"
}

MENU_WINEMINE MENU
{
    POPUP "&Opções" {
        MENUITEM "&Novo\tF2",           IDM_NEW
        MENUITEM SEPARATOR
        MENUITEM "&Marcas", IDM_MARKQ
        MENUITEM SEPARATOR
        MENUITEM "&Principiante",      IDM_BEGINNER
        MENUITEM "&Intermediário",      IDM_ADVANCED
        MENUITEM "&Experiente",        IDM_EXPERT
        MENUITEM "Personali&zar...",        IDM_CUSTOM
        MENUITEM SEPARATOR
        MENUITEM "Sai&r\tAlt+X",       IDM_EXIT
    }
    POPUP "Aj&uda" {
        MENUITEM "&Melhores tempos",    IDM_TIMES
        MENUITEM "&Acerca",         IDM_ABOUT
    }
}


LANGUAGE LANG_PORTUGUESE, SUBLANG_NEUTRAL

DLG_TIMES DIALOG 0, 0, 170, 80
STYLE  DS_MODALFRAME | DS_3DLOOK |
    WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_POPUP
CAPTION "Melhores tempos"
{
    GROUPBOX        "Melhores tempos", -1,  10,  10, 150,  45
    LTEXT           "Principiante",      -1,  20,  20,  50,   8
    LTEXT           "Intermediário",      -1,  20,  30,  50,   8
    LTEXT           "Experiente",        -1,  20,  40,  50,   8
    LTEXT           "999",          IDC_TIME1,  80,  20,  15,   8
    LTEXT           "999",          IDC_TIME2,  80,  30,  15,   8
    LTEXT           "999",          IDC_TIME3,  80,  40,  15,   8
    LTEXT           "",             IDC_NAME1,  100,  20,  55,   8
    LTEXT           "",             IDC_NAME2,  100,  30,  55,   8
    LTEXT           "",             IDC_NAME3,  100,  40,  55,   8
    DEFPUSHBUTTON   "OK",                IDOK,  60,  60,  50,  15
}


LANGUAGE LANG_PORTUGUESE, SUBLANG_NEUTRAL

DLG_CONGRATS DIALOG  0, 0, 160, 60
STYLE  DS_MODALFRAME | DS_3DLOOK |
    WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_POPUP
CAPTION "Parabéns!"
{
    LTEXT           "Por favor, indique o seu nome", -1,  10,  10, 150,  10
    EDITTEXT                              IDC_EDITNAME,  25,  20, 110,  12
    DEFPUSHBUTTON   "OK",                         IDOK,  60,  40,  40,  15
}

DLG_CUSTOM DIALOG  0, 0, 100, 100
STYLE  DS_MODALFRAME | DS_3DLOOK |
    WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_POPUP
CAPTION "Jogo personalizado"
{
    LTEXT           "Linhas",   -1,   5,   5,  30,  10
    LTEXT           "Colunas",   -1,   5,  35,  30,  10
    LTEXT           "Minas",  -1,   5,  65,  30,  10
    EDITTEXT              IDC_EDITROWS,   5,  15,  20,  12, ES_NUMBER
    EDITTEXT              IDC_EDITCOLS,   5,  45,  20,  12, ES_NUMBER
    EDITTEXT             IDC_EDITMINES,   5,  75,  20,  12, ES_NUMBER
    DEFPUSHBUTTON   "OK",     IDOK,      40,  30,  50,  15
    PUSHBUTTON      "Cancelar", IDCANCEL,  40,  50,  50,  15
}
