/*
 * HTML Help resources
 * Lithuanian Language Support
 *
 * Copyright 2009 Aurimas Fišeras <aurimas@gmail.com>
 *
 * 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"

/* UTF-8 */
#pragma code_page(65001)

LANGUAGE LANG_LITHUANIAN, SUBLANG_NEUTRAL

STRINGTABLE
BEGIN
    IDS_CONTENTS     "&Turinys"
    IDS_INDEX        "&Rodyklė"
    IDS_SEARCH       "&Paieška"
    IDS_FAVORITES    "&Adresynas"
END

STRINGTABLE
BEGIN
    IDTB_EXPAND      "Rodyti"
    IDTB_CONTRACT    "Slėpti"
    IDTB_STOP        "Stabdyti"
    IDTB_REFRESH     "Atnaujinti"
    IDTB_BACK        "Atgal"
    IDTB_HOME        "Į pradžią"
    IDTB_SYNC        "Sinchronizuoti"
    IDTB_PRINT       "Spausdinti"
    IDTB_OPTIONS     "Parinktys"
    IDTB_FORWARD     "Pirmyn"
    IDTB_NOTES       "IDTB_NOTES"
    IDTB_BROWSE_FWD  "IDTB_BROWSE_FWD"
    IDTB_BROWSE_BACK "IDT_BROWSE_BACK"
    IDTB_CONTENTS    "IDTB_CONTENTS"
    IDTB_INDEX       "IDTB_INDEX"
    IDTB_SEARCH      "IDTB_SEARCH"
    IDTB_HISTORY     "IDTB_HISTORY"
    IDTB_FAVORITES   "IDTB_FAVORITES"
    IDTB_JUMP1       "Nukreipimas1"
    IDTB_JUMP2       "Nukreipimas2"
    IDTB_CUSTOMIZE   "Adaptuoti"
    IDTB_ZOOM        "Keisti mastelį"
    IDTB_TOC_NEXT    "IDTB_TOC_NEXT"
    IDTB_TOC_PREV    "IDTB_TOC_PREV"
END
