#*************************************************************
#*
#* Licensed to the Apache Software Foundation (ASF) under one
#* or more contributor license agreements.  See the NOTICE file
#* distributed with this work for additional information
#* regarding copyright ownership.  The ASF licenses this file
#* to you under the Apache License, Version 2.0 (the
#* "License"); you may not use this file except in compliance
#* with the License.  You may obtain a copy of the License at
#*
#*   http://www.apache.org/licenses/LICENSE-2.0
#*
#* Unless required by applicable law or agreed to in writing,
#* software distributed under the License is distributed on an
#* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
#* KIND, either express or implied.  See the License for the
#* specific language governing permissions and limitations
#* under the License.
#*
#************************************************************
msgid ""
msgstr ""
"Project-Id-Version: AOO-4-xx\n"
"POT-Creation-Date: \n"
"PO-Revision-Date: \n"
"Last-Translator: genLang (build process)\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=iso-8859-1\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: genLang\n"


#: source/framework/mediacontrol.src#AVMEDIA_STR_OPEN.String.Text
msgid  "Open"
msgstr "Hape"

#: source/framework/mediacontrol.src#AVMEDIA_STR_INSERT.String.Text
msgid  "Apply"
msgstr "Zbato"

#: source/framework/mediacontrol.src#AVMEDIA_STR_PLAY.String.Text
msgid  "Play"
msgstr "Luaje"

#: source/framework/mediacontrol.src#AVMEDIA_STR_PAUSE.String.Text
msgid  "Pause"
msgstr "Pauzo..."

#: source/framework/mediacontrol.src#AVMEDIA_STR_STOP.String.Text
msgid  "Stop"
msgstr "Ndal"

#: source/framework/mediacontrol.src#AVMEDIA_STR_ENDLESS.String.Text
msgid  "Repeat"
msgstr "Përsërite"

#: source/framework/mediacontrol.src#AVMEDIA_STR_MUTE.String.Text
msgid  "Mute"
msgstr "Ndalo zërin"

#: source/framework/mediacontrol.src#AVMEDIA_STR_ZOOM.String.Text
msgid  "View"
msgstr "Pamja"

#: source/framework/mediacontrol.src#AVMEDIA_STR_ZOOM_50.String.Text
msgid  "50%"
msgstr "50%"

#: source/framework/mediacontrol.src#AVMEDIA_STR_ZOOM_100.String.Text
msgid  "100%"
msgstr "Pamja 100%"

#: source/framework/mediacontrol.src#AVMEDIA_STR_ZOOM_200.String.Text
msgid  "200%"
msgstr "Pamja 200%"

#: source/framework/mediacontrol.src#AVMEDIA_STR_ZOOM_FIT.String.Text
msgid  "Scaled"
msgstr "Thellësi e shkallëzuar"

#: source/framework/mediacontrol.src#AVMEDIA_STR_MEDIAPLAYER.String.Text
msgid  "Media Player"
msgstr "Media objekt"

#: source/viewer/mediawindow.src#AVMEDIA_STR_INSERTMEDIA_DLG.String.Text
msgid  "Insert Movie and Sound"
msgstr "Fil~mi dhevZëri"

#: source/viewer/mediawindow.src#AVMEDIA_STR_OPENMEDIA_DLG.STRING.Text
msgid  "Open Movie and Sound"
msgstr "Fil~mi dhevZëri"

#: source/viewer/mediawindow.src#AVMEDIA_STR_ALL_MEDIAFILES.String.Text
msgid  "All movie and sound files"
msgstr "Të gjithë fajllat video dhe të zërit"

#: source/viewer/mediawindow.src#AVMEDIA_STR_ALL_FILES.String.Text
msgid  "All files (*.*)"
msgstr "Të gjithë fajllat (*.*)"

#: source/viewer/mediawindow.src#AVMEDIA_ERR_URL.ErrorBox.Message
msgid  "The format of the selected file is not supported."
msgstr "Ky verzion i fajlilt grafik nuk mbështetet"
