/*
 * Portuguese resources for oleacc
 *
 * Copyright 2009 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 "oleacc.h"

#pragma code_page(65001)

LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN

STRINGTABLE
{
    0 "objeto desconhecido" /* undocumented */
    ROLE_SYSTEM_TITLEBAR    "barra de título"
    ROLE_SYSTEM_MENUBAR     "barra de menu"
    ROLE_SYSTEM_SCROLLBAR   "barra de rolagem"
    ROLE_SYSTEM_GRIP        "grip"
    ROLE_SYSTEM_SOUND       "som"
    ROLE_SYSTEM_CURSOR      "cursor"
    ROLE_SYSTEM_CARET       "caret"
    ROLE_SYSTEM_ALERT       "alerta"
    ROLE_SYSTEM_WINDOW      "janela"
    ROLE_SYSTEM_CLIENT      "cliente"
    ROLE_SYSTEM_MENUPOPUP   "menu popup"
    ROLE_SYSTEM_MENUITEM    "item do menu"
    ROLE_SYSTEM_TOOLTIP     "dica"
    ROLE_SYSTEM_APPLICATION "aplicativo"
    ROLE_SYSTEM_DOCUMENT    "documento"
    ROLE_SYSTEM_PANE        "painel"
    ROLE_SYSTEM_CHART       "gráfico"
    ROLE_SYSTEM_DIALOG      "diálogo"
    ROLE_SYSTEM_BORDER      "margem"
    ROLE_SYSTEM_GROUPING    "agrupamento"
    ROLE_SYSTEM_SEPARATOR   "separador"
    ROLE_SYSTEM_TOOLBAR     "barra de ferramentas"
    ROLE_SYSTEM_STATUSBAR   "barra de estado"
    ROLE_SYSTEM_TABLE        "tabela"
    ROLE_SYSTEM_COLUMNHEADER "cabeçalho da coluna"
    ROLE_SYSTEM_ROWHEADER    "cabeçalho da linha"
    ROLE_SYSTEM_COLUMN       "coluna"
    ROLE_SYSTEM_ROW          "linha"
    ROLE_SYSTEM_CELL         "célula"
    ROLE_SYSTEM_LINK         "link"
    ROLE_SYSTEM_HELPBALLOON  "balão de ajuda"
    ROLE_SYSTEM_CHARACTER    "caractere"
    ROLE_SYSTEM_LIST         "lista"
    ROLE_SYSTEM_LISTITEM     "item da lista"
    ROLE_SYSTEM_OUTLINE      "contorno"
    ROLE_SYSTEM_OUTLINEITEM  "item de contorno"
    ROLE_SYSTEM_PAGETAB      "tab de página"
    ROLE_SYSTEM_PROPERTYPAGE "página de propriedades"
    ROLE_SYSTEM_INDICATOR    "indicador"
    ROLE_SYSTEM_GRAPHIC      "gráfico"
    ROLE_SYSTEM_STATICTEXT   "texto estático"
    ROLE_SYSTEM_TEXT         "texto"
    ROLE_SYSTEM_PUSHBUTTON   "push button"
    ROLE_SYSTEM_CHECKBUTTON  "check button"
    ROLE_SYSTEM_RADIOBUTTON  "radio button"
    ROLE_SYSTEM_COMBOBOX     "combo box"
    ROLE_SYSTEM_DROPLIST     "drop down"
    ROLE_SYSTEM_PROGRESSBAR  "barra de progresso"
    ROLE_SYSTEM_DIAL         "dial"
    ROLE_SYSTEM_HOTKEYFIELD  "hot key field"
    ROLE_SYSTEM_SLIDER       "slider"
    ROLE_SYSTEM_SPINBUTTON   "spin box"
    ROLE_SYSTEM_DIAGRAM      "diagrama"
    ROLE_SYSTEM_ANIMATION    "animação"
    ROLE_SYSTEM_EQUATION     "equação"
    ROLE_SYSTEM_BUTTONDROPDOWN "drop down button"
    ROLE_SYSTEM_BUTTONMENU   "menu button"
    ROLE_SYSTEM_BUTTONDROPDOWNGRID "grid drop down button"
    ROLE_SYSTEM_WHITESPACE   "espaço em branco"
    ROLE_SYSTEM_PAGETABLIST  "page tab list"
    ROLE_SYSTEM_CLOCK        "relógio"
    ROLE_SYSTEM_SPLITBUTTON  "split button"
    ROLE_SYSTEM_IPADDRESS    "endereço IP"
    ROLE_SYSTEM_OUTLINEBUTTON "outline button"
}

LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE

STRINGTABLE
{
    0 "objecto desconhecido" /* undocumented */
    ROLE_SYSTEM_TITLEBAR    "barra de título"
    ROLE_SYSTEM_MENUBAR     "barra de menu"
    ROLE_SYSTEM_SCROLLBAR   "barra de scroll"
    ROLE_SYSTEM_GRIP        "grip"
    ROLE_SYSTEM_SOUND       "som"
    ROLE_SYSTEM_CURSOR      "cursor"
    ROLE_SYSTEM_CARET       "caret"
    ROLE_SYSTEM_ALERT       "alerta"
    ROLE_SYSTEM_WINDOW      "janela"
    ROLE_SYSTEM_CLIENT      "cliente"
    ROLE_SYSTEM_MENUPOPUP   "popup menu"
    ROLE_SYSTEM_MENUITEM    "item do menu"
    ROLE_SYSTEM_TOOLTIP     "dica"
    ROLE_SYSTEM_APPLICATION "aplicação"
    ROLE_SYSTEM_DOCUMENT    "documento"
    ROLE_SYSTEM_PANE        "painel"
    ROLE_SYSTEM_CHART       "gráfico"
    ROLE_SYSTEM_DIALOG      "diálogo"
    ROLE_SYSTEM_BORDER      "margem"
    ROLE_SYSTEM_GROUPING    "agrupamento"
    ROLE_SYSTEM_SEPARATOR   "separador"
    ROLE_SYSTEM_TOOLBAR     "barra de ferramentas"
    ROLE_SYSTEM_STATUSBAR   "barra de estado"
    ROLE_SYSTEM_TABLE        "tabela"
    ROLE_SYSTEM_COLUMNHEADER "cabeçalho da coluna"
    ROLE_SYSTEM_ROWHEADER    "cabeçalho da linha"
    ROLE_SYSTEM_COLUMN       "coluna"
    ROLE_SYSTEM_ROW          "linha"
    ROLE_SYSTEM_CELL         "célula"
    ROLE_SYSTEM_LINK         "ligação"
    ROLE_SYSTEM_HELPBALLOON  "balão de ajuda"
    ROLE_SYSTEM_CHARACTER    "caracter"
    ROLE_SYSTEM_LIST         "lista"
    ROLE_SYSTEM_LISTITEM     "item da lista"
    ROLE_SYSTEM_OUTLINE      "delinear"
    ROLE_SYSTEM_OUTLINEITEM  "item delinear"
    ROLE_SYSTEM_PAGETAB      "tab de página"
    ROLE_SYSTEM_PROPERTYPAGE "página de propriedades"
    ROLE_SYSTEM_INDICATOR    "indicador"
    ROLE_SYSTEM_GRAPHIC      "gráfico"
    ROLE_SYSTEM_STATICTEXT   "texto estático"
    ROLE_SYSTEM_TEXT         "texto"
    ROLE_SYSTEM_PUSHBUTTON   "push button"
    ROLE_SYSTEM_CHECKBUTTON  "check button"
    ROLE_SYSTEM_RADIOBUTTON  "radio button"
    ROLE_SYSTEM_COMBOBOX     "combo box"
    ROLE_SYSTEM_DROPLIST     "drop down"
    ROLE_SYSTEM_PROGRESSBAR  "barra de progresso"
    ROLE_SYSTEM_DIAL         "dial"
    ROLE_SYSTEM_HOTKEYFIELD  "hot key field"
    ROLE_SYSTEM_SLIDER       "slider"
    ROLE_SYSTEM_SPINBUTTON   "spin box"
    ROLE_SYSTEM_DIAGRAM      "diagrama"
    ROLE_SYSTEM_ANIMATION    "animação"
    ROLE_SYSTEM_EQUATION     "equação"
    ROLE_SYSTEM_BUTTONDROPDOWN "drop down button"
    ROLE_SYSTEM_BUTTONMENU   "menu button"
    ROLE_SYSTEM_BUTTONDROPDOWNGRID "grid drop down button"
    ROLE_SYSTEM_WHITESPACE   "espaço em branco"
    ROLE_SYSTEM_PAGETABLIST  "page tab list"
    ROLE_SYSTEM_CLOCK        "relógio"
    ROLE_SYSTEM_SPLITBUTTON  "split button"
    ROLE_SYSTEM_IPADDRESS    "endereço IP"
    ROLE_SYSTEM_OUTLINEBUTTON "outline button"
}
