/*
 * Portuguese Language Support
 *
 * Copyright 2009 Ricardo Filipe
 *
 * 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

IDM_DEBUG_POPUP MENU
BEGIN
    POPUP ""
    BEGIN
        MENUITEM "&Depuração", ID_DEBUG
    END
END

IDD_CRASH_DLG DIALOGEX 100, 100, 273, 175
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Erro no programa"
FONT 8, "Tahoma"
BEGIN
    LTEXT           "",IDC_STATIC_BG,0,0,273,52,WS_BORDER,0
    LTEXT           "O programa %s encontrou um problema sério e precisa \
                    ser encerrado. Pedimos desculpa pelo incómodo.",
                    IDC_STATIC_TXT1,27,10,224,30
    LTEXT           "Isto pode ter sido causado por um problema no programa ou no Wine. \
                    Pode querer visitar http://appdb.winehq.org para dicas de como correr \
                    esta aplicação.\n\n\
                    Se este problema não existe no Windows e não foi reportado ainda \
                    você pode fazê-lo em http://bugs.winehq.org.",IDC_STATIC_TXT2,27,60,224,100
    DEFPUSHBUTTON   "Fechar", IDOK, 205, 151, 60, 16, WS_TABSTOP
END

STRINGTABLE
BEGIN
    IDS_AUTO_CAPTION     "Erro num programa no Wine"
    IDS_INVALID_PARAMS   "Erros Internos - recebidos parâmetros inválidos"
    IDS_UNIDENTIFIED     "(não identificado)"
END
