diff options
| author | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2017-12-29 19:02:04 +0000 |
|---|---|---|
| committer | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2017-12-29 19:02:04 +0000 |
| commit | 25c7a118f07d2dea9a8e6f6619ab51447f953068 (patch) | |
| tree | 7f0a6d836df9ada52a62253c83f2ee953749b7e5 /src/plugins/Input | |
| parent | ccf395b7843bc027a61b14e83505840650039406 (diff) | |
| download | qmmp-25c7a118f07d2dea9a8e6f6619ab51447f953068.tar.gz qmmp-25c7a118f07d2dea9a8e6f6619ab51447f953068.tar.bz2 qmmp-25c7a118f07d2dea9a8e6f6619ab51447f953068.zip | |
added mpeg plugin
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@7807 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src/plugins/Input')
47 files changed, 8476 insertions, 1 deletions
diff --git a/src/plugins/Input/Input.pro b/src/plugins/Input/Input.pro index eef480670..18caadb88 100644 --- a/src/plugins/Input/Input.pro +++ b/src/plugins/Input/Input.pro @@ -1,7 +1,7 @@ include(../../../qmmp.pri) TEMPLATE = subdirs -SUBDIRS += mad vorbis cue sndfile wavpack +SUBDIRS += mpeg vorbis cue sndfile wavpack contains(CONFIG, FLAC_PLUGIN){ SUBDIRS += flac diff --git a/src/plugins/Input/mpeg/CMakeLists.txt b/src/plugins/Input/mpeg/CMakeLists.txt new file mode 100644 index 000000000..34f13bfb9 --- /dev/null +++ b/src/plugins/Input/mpeg/CMakeLists.txt @@ -0,0 +1,52 @@ +project(libmad) + +include_directories(${CMAKE_CURRENT_BINARY_DIR}) + +# libqmmp +include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../../../) +link_directories(${CMAKE_CURRENT_BINARY_DIR}/../../../qmmp) + +# libmad +pkg_search_module(MAD libmad mad) + +include_directories(${MAD_INCLUDE_DIRS} ${TAGLIB_INCLUDE_DIRS}) +link_directories(${MAD_LIBRARY_DIRS} ${TAGLIB_LIBRARY_DIRS}) +ADD_DEFINITIONS(${MAD_CFLAGS} ${TAGLIB_CFLAGS}) + +SET(libmad_SRCS + decoder_mad.cpp + decodermadfactory.cpp + settingsdialog.cpp + tagextractor.cpp + mpegmetadatamodel.cpp + replaygainreader.cpp +) + +SET(libmad_HDRS + decoder_mad.h + tagextractor.h + replaygainreader.h +) + +SET(libmad_RCCS translations/translations.qrc) + +QT5_ADD_RESOURCES(libmad_RCC_SRCS ${libmad_RCCS}) + +# user interface + + +SET(libmad_UIS + settingsdialog.ui +) + +QT5_WRAP_UI(libmad_UIS_H ${libmad_UIS}) +# Don't forget to include output directory, otherwise +# the UI file won't be wrapped! +include_directories(${CMAKE_CURRENT_BINARY_DIR}) + +IF(MAD_FOUND) +ADD_LIBRARY(mad MODULE ${libmad_SRCS} ${libmad_UIS_H} ${libmad_RCC_SRCS} ${libmad_HDRS}) +add_dependencies(mad qmmp) +target_link_libraries(mad Qt5::Widgets -lqmmp ${MAD_LDFLAGS} ${TAGLIB_LDFLAGS}) +install(TARGETS mad DESTINATION ${LIB_DIR}/qmmp/Input) +ENDIF(MAD_FOUND) diff --git a/src/plugins/Input/mpeg/decoder_mad.cpp b/src/plugins/Input/mpeg/decoder_mad.cpp new file mode 100644 index 000000000..d7625fc70 --- /dev/null +++ b/src/plugins/Input/mpeg/decoder_mad.cpp @@ -0,0 +1,554 @@ +/*************************************************************************** + * Based on mq3 and madplay projects * + * * + * Copyright (c) 2000-2001 Brad Hughes <bhughes@trolltech.com> * + * Copyright (C) 2000-2004 Robert Leslie <rob@mars.org> * + * Copyright (C) 2009-2018 Ilya Kotov forkotov02@ya.ru * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program 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 General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#include <taglib/id3v2header.h> +#include <taglib/tbytevector.h> +#include <math.h> +#include <stdio.h> +#include "tagextractor.h" +#include "decoder_mad.h" + +#define XING_MAGIC (('X' << 24) | ('i' << 16) | ('n' << 8) | 'g') +#define XING_MAGIC2 (('I' << 24) | ('n' << 16) | ('f' << 8) | 'o') +#define LAME_MAGIC (('L' << 24) | ('A' << 16) | ('M' << 8) | 'E') +#define INPUT_BUFFER_SIZE (32*1024) + +DecoderMAD::DecoderMAD(QIODevice *i) : Decoder(i) +{ + m_inited = false; + m_totalTime = 0; + m_channels = 0; + m_bitrate = 0; + m_freq = 0; + m_len = 0; + m_input_buf = 0; + m_input_bytes = 0; + m_skip_frames = 0; + m_eof = false; + m_skip_bytes = 0; + m_play_bytes = -1; +} + +DecoderMAD::~DecoderMAD() +{ + deinit(); + if (m_input_buf) + { + qDebug("DecoderMAD: deleting input_buf"); + delete [] m_input_buf; + m_input_buf = 0; + } +} + +bool DecoderMAD::initialize() +{ + m_inited = false; + m_totalTime = 0; + m_channels = 0; + m_bitrate = 0; + m_freq = 0; + m_len = 0; + m_input_bytes = 0; + + if (!input()) + { + qWarning("DecoderMAD: cannot initialize. No input."); + return false; + } + + if (!m_input_buf) + m_input_buf = new char[INPUT_BUFFER_SIZE]; + + if (input()->isSequential ()) //for streams only + { + TagExtractor extractor(input()); + if(!extractor.id3v2tag().isEmpty()) + addMetaData(extractor.id3v2tag()); + } + + mad_stream_init(&m_stream); + mad_frame_init(&m_frame); + mad_synth_init(&m_synth); + + if (!findHeader()) + { + qDebug("DecoderMAD: Can't find a valid MPEG header."); + return false; + } + mad_stream_buffer(&m_stream, (unsigned char *) m_input_buf, m_input_bytes); + m_stream.error = MAD_ERROR_BUFLEN; + mad_frame_mute (&m_frame); + m_stream.next_frame = 0; + m_stream.sync = 0; + ChannelMap map; + if(m_channels == 1) + map << Qmmp::CHAN_FRONT_LEFT; + else + map << Qmmp::CHAN_FRONT_LEFT << Qmmp::CHAN_FRONT_RIGHT; + configure(m_freq, map, Qmmp::PCM_FLOAT); + m_inited = true; + return true; +} + +void DecoderMAD::deinit() +{ + if (!m_inited) + return; + + mad_synth_finish(&m_synth); + mad_frame_finish(&m_frame); + mad_stream_finish(&m_stream); + + m_inited = false; + m_totalTime = 0; + m_channels = 0; + m_bitrate = 0; + m_freq = 0; + m_len = 0; + m_input_bytes = 0; + m_skip_frames = 0; + m_eof = false; + if(m_xing.lame) + { + delete m_xing.lame; + m_xing.lame = 0; + } +} + +bool DecoderMAD::findXingHeader(struct mad_bitptr ptr, unsigned int bitlen) +{ + if (bitlen < 64) + return false; + + quint32 xing_magic = mad_bit_read(&ptr, 32); + if(xing_magic != XING_MAGIC && xing_magic != XING_MAGIC2) + return false; + + m_xing.flags = mad_bit_read(&ptr, 32); + bitlen -= 64; + + if (m_xing.flags & XING_FRAMES) + { + if (bitlen < 32) + return false; + + m_xing.frames = mad_bit_read(&ptr, 32); + bitlen -= 32; + + if(!m_xing.frames) + { + qDebug("DecoderMAD: invalid xing header (zero number of frames)"); + return false; + } + } + + if (m_xing.flags & XING_BYTES) + { + if (bitlen < 32) + return false; + + m_xing.bytes = mad_bit_read(&ptr, 32); + bitlen -= 32; + + if(!m_xing.bytes) + { + qDebug("DecoderMAD: invalid xing header (zero number of bytes)"); + return false; + } + } + + if (m_xing.flags & XING_TOC) + { + if (bitlen < 800) + return false; + + for (int i = 0; i < 100; ++i) + m_xing.toc[i] = mad_bit_read(&ptr, 8); + + bitlen -= 800; + } + + if (m_xing.flags & XING_SCALE) + { + if (bitlen < 32) + return false; + + m_xing.scale = mad_bit_read(&ptr, 32); + bitlen -= 32; + } + + m_xing.lame = findLameHeader(ptr, bitlen); + return true; +} + +DecoderMAD::LameHeader* DecoderMAD::findLameHeader(mad_bitptr ptr, unsigned int bitlen) +{ + if(bitlen < 272) + return 0; + + if(mad_bit_read (&ptr, 32) != LAME_MAGIC) + return 0; + + LameHeader header; + mad_bit_skip (&ptr, 40); //version + + header.revision = mad_bit_read (&ptr, 4); + if (header.revision == 15) + return 0; + + mad_bit_skip(&ptr, 12); //VBR,Lowpass filter value + header.peak = mad_bit_read(&ptr, 32) << 5; //Peak amplitude + mad_bit_skip(&ptr, 32); //Replay Gain + mad_bit_skip(&ptr, 16); //Encoding flags, ATH Type, bitrate + header.start_delay = mad_bit_read (&ptr, 12); //Start delay + header.end_padding = mad_bit_read (&ptr, 12); //End padding + mad_bit_skip (&ptr, 8); //Misc + header.gain = mad_bit_read (&ptr, 8); //MP3 Gain + mad_bit_skip (&ptr, 64); //Preset and surroud info, MusicLength, Music CRC + return new LameHeader(header); +} + +bool DecoderMAD::findHeader() +{ + bool result = false; + int count = 0; + bool has_xing = false; + bool is_vbr = false; + mad_timer_t duration = mad_timer_zero; + struct mad_header header; + mad_header_init (&header); + uint id3v2Size = 0; + + forever + { + m_input_bytes = 0; + if (m_stream.error == MAD_ERROR_BUFLEN || !m_stream.buffer) + { + size_t remaining = 0; + + if (m_stream.next_frame) + { + remaining = m_stream.bufend - m_stream.next_frame; + memmove (m_input_buf, m_stream.next_frame, remaining); + } + + m_input_bytes = input()->read(m_input_buf + remaining, INPUT_BUFFER_SIZE - remaining); + + if (m_input_bytes <= 0) + break; + + mad_stream_buffer(&m_stream, (unsigned char *) m_input_buf + remaining, m_input_bytes); + m_stream.error = MAD_ERROR_NONE; + } + + if (mad_header_decode(&header, &m_stream) < 0) + { + if(m_stream.error == MAD_ERROR_LOSTSYNC) + { + uint tagSize = findID3v2((uchar *)m_stream.this_frame, + (ulong) (m_stream.bufend - m_stream.this_frame)); + if (tagSize > 0) + { + mad_stream_skip(&m_stream, tagSize); + id3v2Size = tagSize; + } + continue; + } + else if (m_stream.error == MAD_ERROR_BUFLEN || MAD_RECOVERABLE(m_stream.error)) + continue; + else + { + qDebug ("DecoderMAD: Can't decode header: %s", mad_stream_errorstr(&m_stream)); + break; + } + } + result = true; + + if (input()->isSequential()) + break; + + count ++; + //try to detect xing header + if (count == 1) + { + m_frame.header = header; + if (mad_frame_decode(&m_frame, &m_stream) != -1 && + findXingHeader(m_stream.anc_ptr, m_stream.anc_bitlen)) + { + is_vbr = true; + + qDebug("DecoderMAD: Xing header found"); + + if (m_xing.flags & XING_FRAMES) + { + has_xing = true; + count = m_xing.frames; + + if(m_xing.lame) + { + qDebug("DecoderMAD: LAME header found"); + m_skip_bytes = m_xing.lame->start_delay * sizeof(float) * MAD_NCHANNELS(&header); + m_play_bytes = (m_xing.frames * 1152 - m_xing.lame->start_delay - m_xing.lame->end_padding) * + sizeof(float) * MAD_NCHANNELS(&header); + qDebug("DecoderMAD: samples to skip: %d, padding: %d", + m_xing.lame->start_delay, m_xing.lame->end_padding); + } + break; + } + } + } + //try to detect VBR + if (!is_vbr && !(count > 15)) + { + if (m_bitrate && header.bitrate != m_bitrate) + { + qDebug ("DecoderMAD: VBR detected"); + is_vbr = true; + } + else + m_bitrate = header.bitrate; + } + else if (!is_vbr) + { + qDebug ("DecoderMAD: Fixed rate detected"); + break; + } + mad_timer_add (&duration, header.duration); + } + + if (!result) + return false; + + if (!is_vbr && !input()->isSequential()) + { + double time = ((input()->size() - id3v2Size) * 8.0) / (header.bitrate); + double timefrac = (double)time - ((long)(time)); + mad_timer_set(&duration, (long)time, (long)(timefrac*100), 100); + } + else if (has_xing) + { + mad_timer_multiply (&header.duration, count); + duration = header.duration; + } + + m_totalTime = mad_timer_count(duration, MAD_UNITS_MILLISECONDS); + qDebug ("DecoderMAD: Total time: %ld", long(m_totalTime)); + m_freq = header.samplerate; + m_channels = MAD_NCHANNELS(&header); + m_bitrate = header.bitrate / 1000; + mad_header_finish(&header); + input()->seek(0); + m_input_bytes = 0; + return true; +} + +qint64 DecoderMAD::totalTime() const +{ + if (!m_inited) + return 0; + return m_totalTime; +} + +int DecoderMAD::bitrate() const +{ + return int(m_bitrate); +} + +qint64 DecoderMAD::read(unsigned char *data, qint64 size) +{ + while(m_skip_bytes > 0) + { + if(!decodeFrame()) + return 0; + + qint64 l = madOutputFloat((float*)data, size / sizeof(float)) * sizeof(float); + + if(m_skip_bytes > l) + { + m_skip_bytes -= l; + continue; + } + else if(m_skip_bytes < l) + { + l -= m_skip_bytes; + memmove(data, data + m_skip_bytes, l); + m_skip_bytes = 0; + m_play_bytes -= l; + return l; + } + } + + if(!decodeFrame()) + return 0; + + qint64 l = madOutputFloat((float*)data, size / sizeof(float)) * sizeof(float); + + if(m_play_bytes > 0) + { + if(m_play_bytes > l) + m_play_bytes -= l; + else + { + l -= m_play_bytes; + m_play_bytes = 0; + } + + } + return l; +} + +void DecoderMAD::seek(qint64 pos) +{ + if(m_totalTime > 0) + { + qint64 seek_pos = qint64(pos * input()->size() / m_totalTime); + input()->seek(seek_pos); + mad_frame_mute(&m_frame); + mad_synth_mute(&m_synth); + m_stream.error = MAD_ERROR_BUFLEN; + m_stream.sync = 0; + m_input_bytes = 0; + m_stream.next_frame = 0; + m_skip_frames = 2; + m_skip_bytes = 0; + m_play_bytes = -1; + } +} + +bool DecoderMAD::fillBuffer() +{ + if (m_stream.next_frame) + { + m_input_bytes = &m_input_buf[m_input_bytes] - (char *) m_stream.next_frame; + memmove(m_input_buf, m_stream.next_frame, m_input_bytes); + } + int len = input()->read((char *) m_input_buf + m_input_bytes, INPUT_BUFFER_SIZE - m_input_bytes); + if (!len) + { + qDebug("DecoderMAD: end of file"); + return false; + } + else if(len < 0) + { + qWarning("DecoderMAD: error"); + return false; + } + m_input_bytes += len; + mad_stream_buffer(&m_stream, (unsigned char *) m_input_buf, m_input_bytes); + return true; +} + +uint DecoderMAD::findID3v2(uchar *data, ulong size) //retuns ID3v2 tag size +{ + if (size < 10) + return 0; + + if (((data[0] == 'I' && data[1] == 'D' && data[2] == '3') || //ID3v2 tag + (data[0] == '3' && data[1] == 'D' && data[2] == 'I')) && //ID3v2 footer + data[3] < 0xff && data[4] < 0xff && data[6] < 0x80 && + data[7] < 0x80 && data[8] < 0x80 && data[9] < 0x80) + { + TagLib::ByteVector byteVector((char *)data, size); + TagLib::ID3v2::Header header(byteVector); + return header.tagSize(); + } + return 0; +} + +bool DecoderMAD::decodeFrame() +{ + forever + { + if(((m_stream.error == MAD_ERROR_BUFLEN) || !m_stream.buffer) && !m_eof) + { + m_eof = !fillBuffer(); + } + if(mad_frame_decode(&m_frame, &m_stream) < 0) + { + switch((int) m_stream.error) + { + case MAD_ERROR_LOSTSYNC: + { + //skip ID3v2 tag + uint tagSize = findID3v2((uchar *)m_stream.this_frame, + (ulong) (m_stream.bufend - m_stream.this_frame)); + if (tagSize > 0) + { + mad_stream_skip(&m_stream, tagSize); + qDebug("DecoderMAD: %d bytes skipped", tagSize); + } + continue; + } + case MAD_ERROR_BUFLEN: + if(m_eof) + return false; + continue; + default: + if (!MAD_RECOVERABLE(m_stream.error)) + return false; + else + continue; + } + } + if(m_skip_frames) + { + m_skip_frames--; + continue; + } + mad_synth_frame(&m_synth, &m_frame); + break; + } + return true; +} + +qint64 DecoderMAD::madOutputFloat(float *data, qint64 samples) +{ + float *data_it = data; + unsigned int samples_per_channel, channels; + mad_fixed_t const *left, *right; + + samples_per_channel = m_synth.pcm.length; + channels = m_synth.pcm.channels; + left = m_synth.pcm.samples[0]; + right = m_synth.pcm.samples[1]; + m_bitrate = m_frame.header.bitrate / 1000; + qint64 output_samples = 0; + + if(samples_per_channel * channels > samples) + { + qWarning("DecoderMad: input buffer is too small"); + samples_per_channel = samples / channels; + } + + while (samples_per_channel--) + { + *data_it++ = mad_f_todouble(*left++); + output_samples++; + if (channels == 2) + { + *data_it++ = mad_f_todouble(*right++); + output_samples++; + } + } + return output_samples; +} diff --git a/src/plugins/Input/mpeg/decoder_mad.h b/src/plugins/Input/mpeg/decoder_mad.h new file mode 100644 index 000000000..3cf1c1b35 --- /dev/null +++ b/src/plugins/Input/mpeg/decoder_mad.h @@ -0,0 +1,120 @@ +/*************************************************************************** + * Based on mq3 and madplay projects * + * * + * Copyright (c) 2000-2001 Brad Hughes <bhughes@trolltech.com> * + * Copyright (C) 2000-2004 Robert Leslie <rob@mars.org> * + * Copyright (C) 2009-2018 Ilya Kotov forkotov02@ya.ru * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program 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 General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#ifndef DECODER_MAD_H +#define DECODER_MAD_H + +class QIODevice; +class DecoderMAD; + +#include <qmmp/decoder.h> +#include "decodermpegfactory.h" + +extern "C" +{ +#include <mad.h> +} + +class DecoderMAD : public Decoder +{ +public: + DecoderMAD(QIODevice *i); + virtual ~DecoderMAD(); + + // standard decoder API + bool initialize(); + qint64 totalTime() const; + int bitrate() const; + qint64 read(unsigned char *data, qint64 size); + void seek(qint64); + +private: + //LAME header + struct LameHeader + { + unsigned char revision; + unsigned char flags; + mad_fixed_t peak; + unsigned short start_delay; + unsigned short end_padding; + qint8 gain; + }; + // helper functions + bool decodeFrame(); + qint64 madOutputFloat(float *data, qint64 samples); + bool fillBuffer(); + void deinit(); + bool findHeader(); + bool findXingHeader(struct mad_bitptr, unsigned int bitlen); + LameHeader *findLameHeader(struct mad_bitptr ptr, unsigned int bitlen); + uint findID3v2(uchar *data, ulong size); + bool m_inited, m_eof; + qint64 m_totalTime; + int m_channels, m_skip_frames; + uint m_bitrate; + long m_freq, m_len; + + // file input buffer + char *m_input_buf; + qint64 m_input_bytes; + + // MAD decoder + + //xing header + struct XingHeader + { + int flags; + unsigned long frames; + unsigned long bytes; + unsigned char toc[100]; + long scale; + LameHeader *lame; + + XingHeader() + { + flags = 0; + frames = 0; + bytes = 0; + scale = 0; + lame = 0; + } + }; + XingHeader m_xing; + + enum + { + XING_FRAMES = 0x0001, + XING_BYTES = 0x0002, + XING_TOC = 0x0004, + XING_SCALE = 0x0008 + }; + + struct mad_stream m_stream; + struct mad_frame m_frame; + struct mad_synth m_synth; + qint64 m_skip_bytes, m_play_bytes; + +}; + + +#endif // DECODER_MAD_H diff --git a/src/plugins/Input/mpeg/decoder_mpg123.cpp b/src/plugins/Input/mpeg/decoder_mpg123.cpp new file mode 100644 index 000000000..4451ff47b --- /dev/null +++ b/src/plugins/Input/mpeg/decoder_mpg123.cpp @@ -0,0 +1,199 @@ +/*************************************************************************** + * Copyright (C) 2011-2018 by Ilya Kotov * + * forkotov02@ya.ru * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program 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 General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#include <taglib/id3v2header.h> +#include <taglib/tbytevector.h> +#include <qmmp/buffer.h> +#include <qmmp/output.h> +#include <math.h> +#include <stdio.h> +#include "tagextractor.h" +#include "decoder_mpg123.h" + +ssize_t mpg123_read_cb (void *src, void *buf, size_t size) +{ + DecoderMPG123 *d = (DecoderMPG123 *) src; + return d->input()->read((char *)buf, size); +} + +off_t mpg123_seek_cb(void *src, off_t offset, int whence) +{ + DecoderMPG123 *d = (DecoderMPG123 *) src; + if (d->input()->isSequential()) + return -1; + + long start = 0; + switch (whence) + { + case SEEK_END: + start = d->input()->size(); + break; + + case SEEK_CUR: + start = d->input()->pos(); + break; + + case SEEK_SET: + default: + start = 0; + } + + if (!d->input()->seek(start + offset)) + return -1; + return d->input()->pos(); +} + +DecoderMPG123::DecoderMPG123(QIODevice *i) : Decoder(i) +{ + m_totalTime = 0; + m_rate = 0; + m_frame_info.bitrate = 0; + m_mpg123_encoding = MPG123_ENC_SIGNED_16; + m_handle = 0; +} + +DecoderMPG123::~DecoderMPG123() +{ + cleanup(m_handle); + m_handle = 0; +} + +bool DecoderMPG123::initialize() +{ + if (input()->isSequential ()) //for streams only + { + TagExtractor extractor(input()); + if(!extractor.id3v2tag().isEmpty()) + addMetaData(extractor.id3v2tag()); + } + + int err = mpg123_init(); + if(err != MPG123_OK) + { + qWarning("DecoderMPG123: basic setup goes wrong: %s", mpg123_plain_strerror(err)); + return false; + } + int channels = 0; + + if(!(m_handle = mpg123_new(0, &err))) + { + qWarning("DecoderMPG123: basic setup goes wrong: %s", mpg123_plain_strerror(err)); + return false; + } + + mpg123_param (m_handle, MPG123_ADD_FLAGS, MPG123_SEEKBUFFER | MPG123_FUZZY, 0); + + if((err = mpg123_replace_reader_handle(m_handle, mpg123_read_cb, mpg123_seek_cb, 0)) != MPG123_OK) + { + qWarning("DecoderMPG123: mpg123 error: %s", mpg123_plain_strerror(err)); + cleanup(m_handle); + m_handle = 0; + return false; + } + setMPG123Format(MPG123_ENC_FLOAT_32); + + if((err = mpg123_open_handle(m_handle, this)) != MPG123_OK) + { + qWarning("DecoderMPG123: mpg123 error: %s", mpg123_plain_strerror(err)); + cleanup(m_handle); + m_handle = 0; + return false; + } + + if((err = mpg123_getformat(m_handle, &m_rate, &channels, &m_mpg123_encoding)) != MPG123_OK) + { + qWarning("DecoderMPG123: mpg123 error: %s", mpg123_plain_strerror(err)); + cleanup(m_handle); + m_handle = 0; + return false; + } + //check format + if(m_mpg123_encoding != MPG123_ENC_FLOAT_32) + { + cleanup(m_handle); + qWarning("DecoderMPG123: bad encoding: 0x%x!\n", m_mpg123_encoding); + m_handle = 0; + return false; + } + + if(!input()->isSequential()) + { + if((err = mpg123_scan(m_handle)) != MPG123_OK) + qWarning("DecoderMPG123: mpg123 error: %s", mpg123_plain_strerror(err)); + //duration + m_totalTime = (qint64) mpg123_length(m_handle) * 1000 / m_rate; + } + else + m_totalTime = 0; + + configure(m_rate, channels, Qmmp::PCM_FLOAT); + return true; +} + +qint64 DecoderMPG123::totalTime() const +{ + return m_totalTime; +} + +int DecoderMPG123::bitrate() const +{ + return m_frame_info.bitrate; +} + +qint64 DecoderMPG123::read(unsigned char *data, qint64 size) +{ + size_t done = 0; + int err = mpg123_read(m_handle, data, size, &done); + if(err != MPG123_DONE && err != MPG123_OK) + { + qWarning("DecoderMPG123: decoder error: %s", mpg123_plain_strerror(err)); + return -1; + } + mpg123_info(m_handle, &m_frame_info); + return done; +} + +void DecoderMPG123::seek(qint64 pos) +{ + if(m_totalTime > 0) + { + mpg123_seek(m_handle, pos * m_rate / 1000, SEEK_SET); + } +} + +void DecoderMPG123::cleanup(mpg123_handle *handle) +{ + if(handle) + { + mpg123_close(handle); + mpg123_delete(handle); + } +} + +void DecoderMPG123::setMPG123Format(int encoding) +{ + int sample_rates[] = { 8000, 11025, 12000, 16000, 22050, 24000, 32000, 44100, 48000 }; + + /* Ensure that this output format will not change (it could, when we allow it). */ + mpg123_format_none(m_handle); + for(unsigned int i = 0; i < sizeof(sample_rates)/sizeof(int); ++i) + mpg123_format(m_handle, sample_rates[i], MPG123_MONO | MPG123_STEREO, encoding); + m_mpg123_encoding = encoding; +} diff --git a/src/plugins/Input/mpeg/decoder_mpg123.h b/src/plugins/Input/mpeg/decoder_mpg123.h new file mode 100644 index 000000000..54fc1e751 --- /dev/null +++ b/src/plugins/Input/mpeg/decoder_mpg123.h @@ -0,0 +1,55 @@ +/*************************************************************************** + * Copyright (C) 2011-2018 by Ilya Kotov * + * forkotov02@ya.ru * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program 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 General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#ifndef DECODER_MPG123_H +#define DECODER_MPG123_H + +class QIODevice; + +#include <mpg123.h> +#include <qmmp/decoder.h> +#include "decodermpegfactory.h" + +class DecoderMPG123 : public Decoder +{ +public: + DecoderMPG123(QIODevice *i); + virtual ~DecoderMPG123(); + + // standard decoder API + bool initialize(); + qint64 totalTime() const; + int bitrate() const; + qint64 read(unsigned char *data, qint64 size); + qint64 read(float *data, qint64 samples); + void seek(qint64); + +private: + void cleanup(mpg123_handle *handle); + void setMPG123Format(int encoding); + mpg123_handle *m_handle; + mpg123_frameinfo m_frame_info; + qint64 m_totalTime; + long m_rate; + int m_mpg123_encoding; +}; + + +#endif // DECODER_MPG123_H diff --git a/src/plugins/Input/mpeg/decodermpegfactory.cpp b/src/plugins/Input/mpeg/decodermpegfactory.cpp new file mode 100644 index 000000000..70aef6488 --- /dev/null +++ b/src/plugins/Input/mpeg/decodermpegfactory.cpp @@ -0,0 +1,301 @@ +/*************************************************************************** + * Copyright (C) 2008-2018 by Ilya Kotov * + * forkotov02@ya.ru * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program 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 General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#include <QDialog> +#include <QMessageBox> +#include <QSettings> +#include <QTranslator> +#include <QFile> +#include <QTextCodec> +#include <mad.h> +#include <taglib/tag.h> +#include <taglib/fileref.h> +#include <taglib/id3v1tag.h> +#include <taglib/id3v2tag.h> +#include <taglib/apetag.h> +#include <taglib/tfile.h> +#include <taglib/mpegfile.h> +#include <taglib/tfilestream.h> +#include "mpegmetadatamodel.h" +#include "replaygainreader.h" +#include "settingsdialog.h" +#include "decoder_mad.h" +#include "decoder_mpg123.h" +#include "decodermpegfactory.h" + +// DecoderMPEGFactory + +DecoderMPEGFactory::DecoderMPEGFactory() +{ + //detecting rusxmms patch + m_using_rusxmms = false; + char str[] = { char(0xF2), char(0xE5), char(0xF1), char(0xF2), '\0'}; + QTextCodec *codec = QTextCodec::codecForName ("windows-1251"); + TagLib::String tstr(str); + if(codec->toUnicode(str) == QString::fromUtf8(tstr.toCString(true))) + { + qDebug("DecoderMADFactory: found taglib with rusxmms patch"); + m_using_rusxmms = true; + } +} + +bool DecoderMPEGFactory::canDecode(QIODevice *input) const +{ + char buf[8192]; + qint64 buf_at = sizeof(buf); + + if(input->peek(buf, sizeof(buf)) != sizeof(buf)) + return false; + + if (!memcmp(buf, "FLV", 3)) //skip Macromedia Flash Video + return false; + + if (!memcmp(buf + 8, "WAVE", 4)) + return !memcmp(buf + 20, "U" ,1); + + if(!memcmp(buf, "ID3", 3)) + { + TagLib::ByteVector byteVector(buf, sizeof(buf)); + TagLib::ID3v2::Header header(byteVector); + + //skip id3v2tag if possible + if(input->isSequential()) + { + if(header.tagSize() >= sizeof(buf)) + return false; + + buf_at = sizeof(buf) - header.tagSize(); + memmove(buf, buf + header.tagSize() + header.tagSize(), sizeof(buf) - header.tagSize()); + } + else + { + input->seek(header.tagSize()); + buf_at = input->read(buf, sizeof(buf)); + input->seek(0); //restore inital position + } + } + + if(buf_at > 0) + { + struct mad_stream stream; + struct mad_header header; + int dec_res; + + mad_stream_init (&stream); + mad_header_init (&header); + mad_stream_buffer (&stream, (unsigned char *) buf, buf_at); + stream.error = MAD_ERROR_NONE; + + while ((dec_res = mad_header_decode(&header, &stream)) == -1 + && MAD_RECOVERABLE(stream.error)) + ; + return dec_res != -1 ? true: false; + } + return false; +} + +const DecoderProperties DecoderMPEGFactory::properties() const +{ + DecoderProperties properties; + properties.name = tr("MPEG Plugin"); + properties.shortName = "mpeg"; + properties.filters << "*.mp1" << "*.mp2" << "*.mp3" << "*.wav"; + properties.description = tr("MPEG Files"); + properties.contentTypes << "audio/mp3" << "audio/mpeg"; + properties.hasAbout = true; + properties.hasSettings = true; + return properties; +} + +Decoder *DecoderMPEGFactory::create(const QString &url, QIODevice *input) +{ + QSettings settings(Qmmp::configFile(), QSettings::IniFormat); + Decoder *d = 0; + if(settings.value("MPEG/decoder", "mad").toString() == "mpg123") + { + qDebug("DecoderMPEGFactory: using mpg123 decoder"); + d = new DecoderMPG123(input); + } + else + { + qDebug("DecoderMPEGFactory: using MAD decoder"); + d = new DecoderMAD(input); + } + + if(!url.contains("://")) //local file + { + ReplayGainReader rg(url); + d->setReplayGainInfo(rg.replayGainInfo()); + } + return d; +} + +QList<FileInfo *> DecoderMPEGFactory::createPlayList(const QString &fileName, bool useMetaData, QStringList *) +{ + FileInfo *info = new FileInfo(fileName); + TagLib::Tag *tag = 0; + + TagLib::FileStream stream(QStringToFileName(fileName), true); + TagLib::MPEG::File fileRef(&stream, TagLib::ID3v2::FrameFactory::instance()); + + if (useMetaData) + { + QSettings settings(Qmmp::configFile(), QSettings::IniFormat); + settings.beginGroup("MPEG"); + + QTextCodec *codec = 0; + + uint tag_array[3]; + tag_array[0] = settings.value("tag_1", SettingsDialog::ID3v2).toInt(); + tag_array[1] = settings.value("tag_2", SettingsDialog::APE).toInt(); + tag_array[2] = settings.value("tag_3", SettingsDialog::ID3v1).toInt(); + + QByteArray name; + for (int i = 0; i < 3; ++i) + { + switch ((uint) tag_array[i]) + { + case SettingsDialog::ID3v1: + codec = QTextCodec::codecForName(settings.value("ID3v1_encoding","ISO-8859-1") + .toByteArray ()); + tag = fileRef.ID3v1Tag(); + break; + case SettingsDialog::ID3v2: + name = settings.value("ID3v2_encoding","UTF-8").toByteArray (); + if (name.contains("UTF")) + codec = QTextCodec::codecForName ("UTF-8"); + else + codec = QTextCodec::codecForName(name); + tag = fileRef.ID3v2Tag(); + break; + case SettingsDialog::APE: + codec = QTextCodec::codecForName ("UTF-8"); + tag = fileRef.APETag(); + break; + case SettingsDialog::Disabled: + break; + } + if (tag && !tag->isEmpty()) + break; + } + settings.endGroup(); + + if(m_using_rusxmms) + codec = QTextCodec::codecForName ("UTF-8"); + + if (!codec) + codec = QTextCodec::codecForName ("UTF-8"); + + if (tag && codec) + { + bool utf = codec->name ().contains("UTF"); + TagLib::String album = tag->album(); + TagLib::String artist = tag->artist(); + TagLib::String comment = tag->comment(); + TagLib::String genre = tag->genre(); + TagLib::String title = tag->title(); + + info->setMetaData(Qmmp::ALBUM, + codec->toUnicode(album.toCString(utf)).trimmed()); + info->setMetaData(Qmmp::ARTIST, + codec->toUnicode(artist.toCString(utf)).trimmed()); + info->setMetaData(Qmmp::COMMENT, + codec->toUnicode(comment.toCString(utf)).trimmed()); + info->setMetaData(Qmmp::GENRE, + codec->toUnicode(genre.toCString(utf)).trimmed()); + info->setMetaData(Qmmp::TITLE, + codec->toUnicode(title.toCString(utf)).trimmed()); + info->setMetaData(Qmmp::YEAR, + tag->year()); + info->setMetaData(Qmmp::TRACK, + tag->track()); + + if(tag == fileRef.ID3v2Tag()) + { + if(!fileRef.ID3v2Tag()->frameListMap()["TPE2"].isEmpty()) + { + TagLib::String albumArtist; + albumArtist = fileRef.ID3v2Tag()->frameListMap()["TPE2"].front()->toString(); + info->setMetaData(Qmmp::ALBUMARTIST, + codec->toUnicode(albumArtist.toCString(utf)).trimmed()); + } + if(!fileRef.ID3v2Tag()->frameListMap()["TCOM"].isEmpty()) + { + TagLib::String composer; + composer = fileRef.ID3v2Tag()->frameListMap()["TCOM"].front()->toString(); + info->setMetaData(Qmmp::COMPOSER, + codec->toUnicode(composer.toCString(utf)).trimmed()); + } + if(!fileRef.ID3v2Tag()->frameListMap()["TPOS"].isEmpty()) + { + TagLib::String disc = fileRef.ID3v2Tag()->frameListMap()["TPOS"].front()->toString(); + info->setMetaData(Qmmp::DISCNUMBER, QString(disc.toCString()).trimmed()); + } + } + else if(tag == fileRef.APETag()) + { + TagLib::APE::Item fld; + if(!(fld = fileRef.APETag()->itemListMap()["ALBUM ARTIST"]).isEmpty()) + info->setMetaData(Qmmp::ALBUMARTIST, + QString::fromUtf8(fld.toString().toCString(true)).trimmed()); + if(!(fld = fileRef.APETag()->itemListMap()["COMPOSER"]).isEmpty()) + info->setMetaData(Qmmp::COMPOSER, + QString::fromUtf8(fld.toString().toCString(true)).trimmed()); + } + } + } + if (fileRef.audioProperties()) + info->setLength(fileRef.audioProperties()->length()); + QList <FileInfo*> list; + list << info; + return list; +} + +MetaDataModel* DecoderMPEGFactory::createMetaDataModel(const QString &path, QObject *parent) +{ + return new MPEGMetaDataModel(m_using_rusxmms, path, parent); +} + +void DecoderMPEGFactory::showSettings(QWidget *parent) +{ + SettingsDialog *s = new SettingsDialog(m_using_rusxmms, parent); + s->show(); +} + +void DecoderMPEGFactory::showAbout(QWidget *parent) +{ + QMessageBox::about (parent, tr("About MPEG Audio Plugin"), + tr("Qmmp MPEG Audio Plugin")+"\n"+ + tr("Compiled against libmad version:")+" "+ + QString("%1.%2.%3%4").arg(MAD_VERSION_MAJOR) + .arg(MAD_VERSION_MINOR) + .arg(MAD_VERSION_PATCH).arg(MAD_VERSION_EXTRA)+"\n"+ + tr("Written by: Ilya Kotov <forkotov02@ya.ru>")+"\n"+ + tr("Source code based on mq3 and madplay projects") + ); +} + +QTranslator *DecoderMPEGFactory::createTranslator(QObject *parent) +{ + QTranslator *translator = new QTranslator(parent); + QString locale = Qmmp::systemLanguageID(); + translator->load(QString(":/mad_plugin_") + locale); + return translator; +} diff --git a/src/plugins/Input/mpeg/decodermpegfactory.h b/src/plugins/Input/mpeg/decodermpegfactory.h new file mode 100644 index 000000000..5fd13dbe4 --- /dev/null +++ b/src/plugins/Input/mpeg/decodermpegfactory.h @@ -0,0 +1,55 @@ +/*************************************************************************** + * Copyright (C) 2006-2018 by Ilya Kotov * + * forkotov02@ya.ru * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program 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 General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ +#ifndef DECODERMPEGFACTORY_H +#define DECODERMPEGFACTORY_H + +#include <QObject> +#include <QString> +#include <QIODevice> +#include <QWidget> + +#include <qmmp/decoder.h> +#include <qmmp/output.h> +#include <qmmp/decoderfactory.h> +#include <qmmp/metadatamodel.h> + +class DecoderMPEGFactory : public QObject, + DecoderFactory +{ +Q_OBJECT +Q_PLUGIN_METADATA(IID "org.qmmp.qmmp.DecoderFactoryInterface.1.0") +Q_INTERFACES(DecoderFactory) + +public: + DecoderMPEGFactory(); + bool canDecode(QIODevice *input) const; + const DecoderProperties properties() const; + Decoder *create(const QString &path, QIODevice *input); + QList<FileInfo *> createPlayList(const QString &fileName, bool useMetaData, QStringList *); + MetaDataModel* createMetaDataModel(const QString &path, QObject *parent = 0); + void showSettings(QWidget *parent); + void showAbout(QWidget *parent); + QTranslator *createTranslator(QObject *parent); + +private: + bool m_using_rusxmms; +}; + +#endif diff --git a/src/plugins/Input/mpeg/mpeg.pro b/src/plugins/Input/mpeg/mpeg.pro new file mode 100644 index 000000000..e7d50b22e --- /dev/null +++ b/src/plugins/Input/mpeg/mpeg.pro @@ -0,0 +1,34 @@ +include(../../plugins.pri) + +TARGET = $$PLUGINS_PREFIX/Input/mpeg + +HEADERS += decodermpegfactory.h \ + decoder_mad.h \ + decoder_mpg123.h \ + settingsdialog.h \ + tagextractor.h \ + mpegmetadatamodel.h \ + replaygainreader.h + +SOURCES += decoder_mad.cpp \ + decoder_mpg123.cpp \ + decodermpegfactory.cpp \ + settingsdialog.cpp \ + tagextractor.cpp \ + mpegmetadatamodel.cpp \ + replaygainreader.cpp + +FORMS += settingsdialog.ui + +RESOURCES = translations/translations.qrc + +unix { + target.path = $$LIB_DIR/qmmp/Input + INSTALLS += target + LIBS += -lmad + PKGCONFIG += taglib mad libmpg123 +} + +win32 { + LIBS += -lmad -ltag.dll +} diff --git a/src/plugins/Input/mpeg/mpegmetadatamodel.cpp b/src/plugins/Input/mpeg/mpegmetadatamodel.cpp new file mode 100644 index 000000000..65f2c94d6 --- /dev/null +++ b/src/plugins/Input/mpeg/mpegmetadatamodel.cpp @@ -0,0 +1,407 @@ +/*************************************************************************** + * Copyright (C) 2009-2018 by Ilya Kotov * + * forkotov02@ya.ru * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program 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 General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#include <QTextCodec> +#include <QSettings> + +#include <taglib/tag.h> +#include <taglib/fileref.h> +#include <taglib/id3v1tag.h> +#include <taglib/id3v2tag.h> +#include <taglib/apetag.h> +#include <taglib/tfile.h> +#include <taglib/mpegfile.h> +#include <taglib/mpegheader.h> +#include <taglib/mpegproperties.h> +#include <taglib/textidentificationframe.h> +#include <taglib/attachedpictureframe.h> + +#include "mpegmetadatamodel.h" + +MPEGMetaDataModel::MPEGMetaDataModel(bool using_rusxmms, const QString &path, QObject *parent) : MetaDataModel(parent) +{ + m_file = new TagLib::MPEG::File(QStringToFileName(path)); + m_tags << new MpegFileTagModel(using_rusxmms, m_file, TagLib::MPEG::File::ID3v1); + m_tags << new MpegFileTagModel(using_rusxmms, m_file, TagLib::MPEG::File::ID3v2); + m_tags << new MpegFileTagModel(using_rusxmms, m_file, TagLib::MPEG::File::APE); +} + +MPEGMetaDataModel::~MPEGMetaDataModel() +{ + while(!m_tags.isEmpty()) + delete m_tags.takeFirst(); + delete m_file; +} + +QHash<QString, QString> MPEGMetaDataModel::audioProperties() +{ + QHash<QString, QString> ap; + QString text; + QString v; + switch((int)m_file->audioProperties()->version()) + { + case TagLib::MPEG::Header::Version1: + v = "1"; + break; + case TagLib::MPEG::Header::Version2: + v = "2"; + break; + case TagLib::MPEG::Header::Version2_5: + v = "2.5"; + } + text = QString("MPEG-%1 layer %2").arg(v).arg(m_file->audioProperties()->layer()); + ap.insert(tr("Format"), text); + text = QString("%1").arg(m_file->audioProperties()->bitrate()); + ap.insert(tr("Bitrate"), text+" "+tr("kbps")); + text = QString("%1").arg(m_file->audioProperties()->sampleRate()); + ap.insert(tr("Sample rate"), text+" "+tr("Hz")); + switch (m_file->audioProperties()->channelMode()) + { + case TagLib::MPEG::Header::Stereo: + ap.insert(tr("Mode"), "Stereo"); + break; + case TagLib::MPEG::Header::JointStereo: + ap.insert(tr("Mode"), "Joint stereo"); + break; + case TagLib::MPEG::Header::DualChannel: + ap.insert(tr("Mode"), "Dual channel"); + break; + case TagLib::MPEG::Header::SingleChannel: + ap.insert(tr("Mode"), "Single channel"); + break; + } + text = QString("%1 "+tr("KB")).arg(m_file->length()/1024); + ap.insert(tr("File size"), text); + if (m_file->audioProperties()->protectionEnabled()) + ap.insert(tr("Protection"), tr("Yes")); + else + ap.insert(tr("Protection"), tr("No")); + if (m_file->audioProperties()->isCopyrighted()) + ap.insert(tr("Copyright"), tr("Yes")); + else + ap.insert(tr("Copyright"), tr("No")); + if (m_file->audioProperties()->isOriginal()) + ap.insert(tr("Original"), tr("Yes")); + else + ap.insert(tr("Original"), tr("No")); + return ap; +} + +QList<TagModel* > MPEGMetaDataModel::tags() +{ + return m_tags; +} + +QPixmap MPEGMetaDataModel::cover() +{ + if(!m_file->ID3v2Tag()) + return QPixmap(); + TagLib::ID3v2::FrameList frames = m_file->ID3v2Tag()->frameListMap()["APIC"]; + if(frames.isEmpty()) + return QPixmap(); + + for(TagLib::ID3v2::FrameList::Iterator it = frames.begin(); it != frames.end(); ++it) + { + TagLib::ID3v2::AttachedPictureFrame *frame = dynamic_cast<TagLib::ID3v2::AttachedPictureFrame *>(*it); + if(frame && frame->type() == TagLib::ID3v2::AttachedPictureFrame::FrontCover) + { + QPixmap cover; + cover.loadFromData((const uchar *)frame->picture().data(), + frame->picture().size()); + return cover; + } + } + //fallback image + for(TagLib::ID3v2::FrameList::Iterator it = frames.begin(); it != frames.end(); ++it) + { + TagLib::ID3v2::AttachedPictureFrame *frame = dynamic_cast<TagLib::ID3v2::AttachedPictureFrame *>(*it); + if(frame) + { + QPixmap cover; + cover.loadFromData((const uchar *)frame->picture().data(), + frame->picture().size()); + return cover; + } + } + return QPixmap(); +} + +MpegFileTagModel::MpegFileTagModel(bool using_rusxmms, TagLib::MPEG::File *file, TagLib::MPEG::File::TagTypes tagType) + : TagModel() +{ + m_tagType = tagType; + m_file = file; + m_using_rusxmms = using_rusxmms; + QSettings settings(Qmmp::configFile(), QSettings::IniFormat); + settings.beginGroup("MPEG"); + if (m_tagType == TagLib::MPEG::File::ID3v1) + { + m_tag = m_file->ID3v1Tag(); + m_codec = QTextCodec::codecForName(settings.value("ID3v1_encoding", "ISO-8859-1").toByteArray ()); + if (!m_codec) + QTextCodec::codecForName ("ISO-8859-1"); + } + else if (m_tagType == TagLib::MPEG::File::ID3v2) + { + m_tag = m_file->ID3v2Tag(); + m_codec = QTextCodec::codecForName(settings.value("ID3v2_encoding", "UTF-8").toByteArray ()); + if (!m_codec) + QTextCodec::codecForName ("UTF-8"); + } + else + { + m_tag = m_file->APETag(); + m_codec = QTextCodec::codecForName ("UTF-8"); + } + if(m_using_rusxmms) + { + m_codec = QTextCodec::codecForName ("UTF-8"); + } + settings.endGroup(); +} + +MpegFileTagModel::~MpegFileTagModel() +{} + +const QString MpegFileTagModel::name() +{ + if (m_tagType == TagLib::MPEG::File::ID3v1) + return "ID3v1"; + else if (m_tagType == TagLib::MPEG::File::ID3v2) + return "ID3v2"; + return "APE"; +} + +QList<Qmmp::MetaData> MpegFileTagModel::keys() +{ + QList<Qmmp::MetaData> list = TagModel::keys(); + if (m_tagType == TagLib::MPEG::File::ID3v2) + return list; + else if(m_tagType == TagLib::MPEG::File::APE) + { + list.removeAll(Qmmp::DISCNUMBER); + return list; + } + list.removeAll(Qmmp::COMPOSER); + list.removeAll(Qmmp::ALBUMARTIST); + list.removeAll(Qmmp::DISCNUMBER); + return list; +} + +const QString MpegFileTagModel::value(Qmmp::MetaData key) +{ + QTextCodec *codec = m_codec; + + if (m_tag) + { + bool utf = codec->name().contains("UTF"); + if (utf) + codec = QTextCodec::codecForName ("UTF-8"); + + TagLib::String str; + switch((int) key) + { + case Qmmp::TITLE: + str = m_tag->title(); + break; + case Qmmp::ARTIST: + str = m_tag->artist(); + break; + case Qmmp::ALBUMARTIST: + if(m_tagType == TagLib::MPEG::File::ID3v2 && + !m_file->ID3v2Tag()->frameListMap()["TPE2"].isEmpty()) + { + str = m_file->ID3v2Tag()->frameListMap()["TPE2"].front()->toString(); + } + else if(m_tagType == TagLib::MPEG::File::APE && + !m_file->APETag()->itemListMap()["ALBUM ARTIST"].isEmpty()) + { + str = m_file->APETag()->itemListMap()["ALBUM ARTIST"].toString(); + } + break; + case Qmmp::ALBUM: + str = m_tag->album(); + break; + case Qmmp::COMMENT: + str = m_tag->comment(); + break; + case Qmmp::GENRE: + str = m_tag->genre(); + break; + case Qmmp::COMPOSER: + if(m_tagType == TagLib::MPEG::File::ID3v2 && + !m_file->ID3v2Tag()->frameListMap()["TCOM"].isEmpty()) + { + str = m_file->ID3v2Tag()->frameListMap()["TCOM"].front()->toString(); + } + else if(m_tagType == TagLib::MPEG::File::APE && + !m_file->APETag()->itemListMap()["COMPOSER"].isEmpty()) + { + str = m_file->APETag()->itemListMap()["COMPOSER"].toString(); + } + break; + case Qmmp::YEAR: + return QString::number(m_tag->year()); + case Qmmp::TRACK: + return QString::number(m_tag->track()); + case Qmmp::DISCNUMBER: + if(m_tagType == TagLib::MPEG::File::ID3v2 + && !m_file->ID3v2Tag()->frameListMap()["TPOS"].isEmpty()) + str = m_file->ID3v2Tag()->frameListMap()["TPOS"].front()->toString(); + } + return codec->toUnicode(str.toCString(utf)).trimmed(); + } + return QString(); +} + +void MpegFileTagModel::setValue(Qmmp::MetaData key, const QString &value) +{ + if(!m_tag) + return; + TagLib::String::Type type = TagLib::String::Latin1; + + if (m_tagType == TagLib::MPEG::File::ID3v1) + { + if(m_codec->name().contains("UTF") && !m_using_rusxmms) //utf is unsupported + return; + + if(m_using_rusxmms) + type = TagLib::String::UTF8; + } + else if (m_tagType == TagLib::MPEG::File::ID3v2) + { + if (m_codec->name().contains("UTF")) + { + type = TagLib::String::UTF8; + if (m_codec->name().contains("UTF-16")) + type = TagLib::String::UTF16; + else if (m_codec->name().contains("UTF-16LE")) + type = TagLib::String::UTF16LE; + else if (m_codec->name().contains("UTF-16BE")) + type = TagLib::String::UTF16BE; + + m_codec = QTextCodec::codecForName ("UTF-8"); + TagLib::ID3v2::FrameFactory *factory = TagLib::ID3v2::FrameFactory::instance(); + factory->setDefaultTextEncoding(type); + m_file->setID3v2FrameFactory(factory); + type = TagLib::String::UTF8; + } + //save additional tags + TagLib::ByteVector id3v2_key; + if(key == Qmmp::ALBUMARTIST) + id3v2_key = "TPE2"; //album artist + else if (key == Qmmp::COMPOSER) + id3v2_key = "TCOM"; //composer + else if (key == Qmmp::DISCNUMBER) + id3v2_key = "TPOS"; //disc number + + if (!id3v2_key.isEmpty()) + { + TagLib::String composer = TagLib::String(m_codec->fromUnicode(value).constData(), type); + TagLib::ID3v2::Tag *id3v2_tag = dynamic_cast<TagLib::ID3v2::Tag *>(m_tag); + if(value.isEmpty()) + id3v2_tag->removeFrames(id3v2_key); + else if(!id3v2_tag->frameListMap()[id3v2_key].isEmpty()) + id3v2_tag->frameListMap()[id3v2_key].front()->setText(composer); + else + { + TagLib::ID3v2::TextIdentificationFrame *frame; + frame = new TagLib::ID3v2::TextIdentificationFrame(id3v2_key, type); + frame->setText(composer); + id3v2_tag->addFrame(frame); + } + return; + } + } + else if(m_tagType == TagLib::MPEG::File::APE) + { + type = TagLib::String::UTF8; + } + + TagLib::String str = TagLib::String(m_codec->fromUnicode(value).constData(), type); + + if(m_tagType == TagLib::MPEG::File::APE) + { + if(key == Qmmp::COMPOSER) + { + m_file->APETag()->addValue("COMPOSER", str, true); + return; + } + else if(key == Qmmp::ALBUMARTIST) + { + m_file->APETag()->addValue("ALBUM ARTIST", str, true); + return; + } + } + + switch((int) key) + { + case Qmmp::TITLE: + m_tag->setTitle(str); + break; + case Qmmp::ARTIST: + m_tag->setArtist(str); + break; + case Qmmp::ALBUM: + m_tag->setAlbum(str); + break; + case Qmmp::COMMENT: + m_tag->setComment(str); + break; + case Qmmp::GENRE: + m_tag->setGenre(str); + break; + case Qmmp::YEAR: + m_tag->setYear(value.toInt()); + break; + case Qmmp::TRACK: + m_tag->setTrack(value.toInt()); + } +} + +bool MpegFileTagModel::exists() +{ + return (m_tag != 0); +} + +void MpegFileTagModel::create() +{ + if (m_tag) + return; + if (m_tagType == TagLib::MPEG::File::ID3v1) + m_tag = m_file->ID3v1Tag(true); + else if (m_tagType == TagLib::MPEG::File::ID3v2) + m_tag = m_file->ID3v2Tag(true); + else if (m_tagType == TagLib::MPEG::File::APE) + m_tag = m_file->APETag(true); +} + +void MpegFileTagModel::remove() +{ + m_tag = 0; +} + +void MpegFileTagModel::save() +{ + if(m_tag) + m_file->save(m_tagType, false); + else + m_file->strip(m_tagType); +} diff --git a/src/plugins/Input/mpeg/mpegmetadatamodel.h b/src/plugins/Input/mpeg/mpegmetadatamodel.h new file mode 100644 index 000000000..30191cdb7 --- /dev/null +++ b/src/plugins/Input/mpeg/mpegmetadatamodel.h @@ -0,0 +1,66 @@ +/*************************************************************************** + * Copyright (C) 2009-2018 by Ilya Kotov * + * forkotov02@ya.ru * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program 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 General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#ifndef MPEGMETADATAMODEL_H +#define MPEGMETADATAMODEL_H + +#include <qmmp/metadatamodel.h> +#include <taglib/mpegfile.h> + +class QTextCodec; + +class MPEGMetaDataModel : public MetaDataModel +{ +Q_OBJECT +public: + MPEGMetaDataModel(bool using_rusxmms, const QString &path, QObject *parent); + ~MPEGMetaDataModel(); + QHash<QString, QString> audioProperties(); + QList<TagModel* > tags(); + QPixmap cover(); + +private: + QList<TagModel* > m_tags; + TagLib::MPEG::File *m_file; +}; + +class MpegFileTagModel : public TagModel +{ +public: + MpegFileTagModel(bool using_rusxmms, TagLib::MPEG::File *file, TagLib::MPEG::File::TagTypes tagType); + ~MpegFileTagModel(); + const QString name(); + QList<Qmmp::MetaData> keys(); + const QString value(Qmmp::MetaData key); + void setValue(Qmmp::MetaData key, const QString &value); + bool exists(); + void create(); + void remove(); + void save(); + +private: + bool m_using_rusxmms; + QTextCodec *m_codec; + TagLib::MPEG::File *m_file; + TagLib::Tag *m_tag; + TagLib::MPEG::File::TagTypes m_tagType; +}; + +#endif // MPEGMETADATAMODEL_H diff --git a/src/plugins/Input/mpeg/replaygainreader.cpp b/src/plugins/Input/mpeg/replaygainreader.cpp new file mode 100644 index 000000000..e66734562 --- /dev/null +++ b/src/plugins/Input/mpeg/replaygainreader.cpp @@ -0,0 +1,91 @@ +/*************************************************************************** + * Copyright (C) 2009-2018 by Ilya Kotov * + * forkotov02@ya.ru * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program 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 General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#include <QtGlobal> +#include <taglib/mpegfile.h> +#include <taglib/id3v2tag.h> +#include <taglib/tag.h> +#include <taglib/id3v1tag.h> +#include <taglib/id3v2header.h> +#include <taglib/textidentificationframe.h> +#include <taglib/tfilestream.h> +#include <taglib/id3v2framefactory.h> +#include "replaygainreader.h" + +ReplayGainReader::ReplayGainReader(const QString &path) +{ + TagLib::FileStream stream(QStringToFileName(path), true); + TagLib::MPEG::File fileRef(&stream, TagLib::ID3v2::FrameFactory::instance()); + if(fileRef.ID3v2Tag()) + readID3v2(fileRef.ID3v2Tag()); + if(m_values.isEmpty() && fileRef.APETag()) + readAPE(fileRef.APETag()); +} + +QMap <Qmmp::ReplayGainKey, double> ReplayGainReader::replayGainInfo() const +{ + return m_values; +} + +void ReplayGainReader::readID3v2(TagLib::ID3v2::Tag *tag) +{ + TagLib::ID3v2::UserTextIdentificationFrame* frame = 0; + TagLib::ID3v2::FrameList frames = tag->frameList("TXXX"); + for(TagLib::ID3v2::FrameList::Iterator it = frames.begin(); it != frames.end(); ++it) + { + frame = dynamic_cast<TagLib::ID3v2::UserTextIdentificationFrame*>(*it); + if(frame && frame->fieldList().size() >= 2) + { + TagLib::String desc = frame->description().upper(); + if (desc == "REPLAYGAIN_TRACK_GAIN") + setValue(Qmmp::REPLAYGAIN_TRACK_GAIN, TStringToQString(frame->fieldList()[1])); + else if (desc == "REPLAYGAIN_TRACK_PEAK") + setValue(Qmmp::REPLAYGAIN_TRACK_PEAK, TStringToQString(frame->fieldList()[1])); + else if (desc == "REPLAYGAIN_ALBUM_GAIN") + setValue(Qmmp::REPLAYGAIN_ALBUM_GAIN, TStringToQString(frame->fieldList()[1])); + else if (desc == "REPLAYGAIN_ALBUM_PEAK") + setValue(Qmmp::REPLAYGAIN_ALBUM_PEAK, TStringToQString(frame->fieldList()[1])); + } + } +} + +void ReplayGainReader::readAPE(TagLib::APE::Tag *tag) +{ + TagLib::APE::ItemListMap items = tag->itemListMap(); + if (items.contains("REPLAYGAIN_TRACK_GAIN")) + setValue(Qmmp::REPLAYGAIN_TRACK_GAIN,TStringToQString(items["REPLAYGAIN_TRACK_GAIN"].values()[0])); + if (items.contains("REPLAYGAIN_TRACK_PEAK")) + setValue(Qmmp::REPLAYGAIN_TRACK_PEAK,TStringToQString(items["REPLAYGAIN_TRACK_PEAK"].values()[0])); + if (items.contains("REPLAYGAIN_ALBUM_GAIN")) + setValue(Qmmp::REPLAYGAIN_ALBUM_GAIN,TStringToQString(items["REPLAYGAIN_ALBUM_GAIN"].values()[0])); + if (items.contains("REPLAYGAIN_ALBUM_PEAK")) + setValue(Qmmp::REPLAYGAIN_ALBUM_PEAK,TStringToQString(items["REPLAYGAIN_ALBUM_PEAK"].values()[0])); +} + +void ReplayGainReader::setValue(Qmmp::ReplayGainKey key, QString value) +{ + value.remove(" dB"); + if(value.isEmpty()) + return; + bool ok; + double v = value.toDouble(&ok); + if(ok) + m_values[key] = v; +} diff --git a/src/plugins/Input/mpeg/replaygainreader.h b/src/plugins/Input/mpeg/replaygainreader.h new file mode 100644 index 000000000..d0bfa8f6a --- /dev/null +++ b/src/plugins/Input/mpeg/replaygainreader.h @@ -0,0 +1,46 @@ +/*************************************************************************** + * Copyright (C) 2009-2018 by Ilya Kotov * + * forkotov02@ya.ru * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program 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 General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#ifndef REPLAYGAINREADER_H +#define REPLAYGAINREADER_H + +#include <QMap> +#include <QString> +#include <taglib/apetag.h> +#include <taglib/id3v2tag.h> +#include <qmmp/qmmp.h> + +/** + @author Ilya Kotov <forkotov02@ya.ru> +*/ +class ReplayGainReader +{ +public: + ReplayGainReader(const QString &path); + QMap <Qmmp::ReplayGainKey, double> replayGainInfo() const; + +private: + void readID3v2(TagLib::ID3v2::Tag *tag); + void readAPE(TagLib::APE::Tag *tag); + void setValue(Qmmp::ReplayGainKey key, QString value); + QMap <Qmmp::ReplayGainKey, double> m_values; +}; + +#endif // REPLAYGAINREADER_H diff --git a/src/plugins/Input/mpeg/settingsdialog.cpp b/src/plugins/Input/mpeg/settingsdialog.cpp new file mode 100644 index 000000000..056cae3ab --- /dev/null +++ b/src/plugins/Input/mpeg/settingsdialog.cpp @@ -0,0 +1,118 @@ +/*************************************************************************** + * Copyright (C) 2006-2018 by Ilya Kotov * + * forkotov02@ya.ru * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program 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 General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ +#include <QTextCodec> +#include <QSettings> +#include <QFile> +#include <qmmp/qmmp.h> +#include "settingsdialog.h" + +SettingsDialog::SettingsDialog(bool using_rusxmms, QWidget *parent) + : QDialog(parent) +{ + m_ui.setupUi(this); + setAttribute(Qt::WA_DeleteOnClose); + findCodecs(); + foreach (QTextCodec *codec, codecs) + { + m_ui.id3v1EncComboBox->addItem(codec->name()); + m_ui.id3v2EncComboBox->addItem(codec->name()); + } + QSettings settings(Qmmp::configFile(), QSettings::IniFormat); + settings.beginGroup("MPEG"); + + QString decoderName = settings.value("decoder", "mad").toString(); + m_ui.madRadioButton->setChecked(true); + m_ui.mpg123RadioButton->setChecked(decoderName == "mpg123"); + + int pos = m_ui.id3v1EncComboBox->findText + (settings.value("ID3v1_encoding","ISO-8859-1").toString()); + m_ui.id3v1EncComboBox->setCurrentIndex(pos); + pos = m_ui.id3v2EncComboBox->findText + (settings.value("ID3v2_encoding","UTF-8").toString()); + m_ui.id3v2EncComboBox->setCurrentIndex(pos); + + m_ui.firstTagComboBox->setCurrentIndex(settings.value("tag_1", ID3v2).toInt()); + m_ui.secondTagComboBox->setCurrentIndex(settings.value("tag_2", APE).toInt()); + m_ui.thirdTagComboBox->setCurrentIndex(settings.value("tag_3", ID3v1).toInt()); + + settings.endGroup(); + + if(using_rusxmms) + { + m_ui.id3v1EncComboBox->setEnabled(false); + m_ui.id3v2EncComboBox->setEnabled(false); + } +} + + +SettingsDialog::~SettingsDialog() +{} + +void SettingsDialog::accept() +{ + QSettings settings(Qmmp::configFile(), QSettings::IniFormat); + settings.beginGroup("MPEG"); + settings.setValue("decoder", m_ui.mpg123RadioButton->isChecked() ? "mpg123" : "mad"); + settings.setValue("ID3v1_encoding", m_ui.id3v1EncComboBox->currentText()); + settings.setValue("ID3v2_encoding", m_ui.id3v2EncComboBox->currentText()); + settings.setValue("tag_1", m_ui.firstTagComboBox->currentIndex()); + settings.setValue("tag_2", m_ui.secondTagComboBox->currentIndex()); + settings.setValue("tag_3", m_ui.thirdTagComboBox->currentIndex()); + settings.endGroup(); + QDialog::accept(); +} + +void SettingsDialog::findCodecs() +{ + QMap<QString, QTextCodec *> codecMap; + QRegExp iso8859RegExp("ISO[- ]8859-([0-9]+).*"); + + foreach (int mib, QTextCodec::availableMibs()) + { + QTextCodec *codec = QTextCodec::codecForMib(mib); + + QString sortKey = codec->name().toUpper(); + int rank; + + if (sortKey.startsWith("UTF-8")) + { + rank = 1; + } + else if (sortKey.startsWith("UTF-16")) + { + rank = 2; + } + else if (iso8859RegExp.exactMatch(sortKey)) + { + if (iso8859RegExp.cap(1).size() == 1) + rank = 3; + else + rank = 4; + } + else + { + rank = 5; + } + sortKey.prepend(QChar('0' + rank)); + + codecMap.insert(sortKey, codec); + } + codecs = codecMap.values(); +} diff --git a/src/plugins/Input/mpeg/settingsdialog.h b/src/plugins/Input/mpeg/settingsdialog.h new file mode 100644 index 000000000..cdebaa15a --- /dev/null +++ b/src/plugins/Input/mpeg/settingsdialog.h @@ -0,0 +1,49 @@ +/*************************************************************************** + * Copyright (C) 2009-2018 by Ilya Kotov * + * forkotov02@ya.ru * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program 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 General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ +#ifndef SETTINGSDIALOG_H +#define SETTINGSDIALOG_H + +#include <QDialog> +#include "ui_settingsdialog.h" + +/** + @author Ilya Kotov <forkotov02@ya.ru> +*/ +class SettingsDialog : public QDialog +{ +Q_OBJECT +public: + SettingsDialog(bool using_rusxmms, QWidget *parent = 0); + + ~SettingsDialog(); + + enum TagType {ID3v1 = 0, ID3v2, APE, Disabled}; + +public slots: + void accept(); + +private: + void findCodecs(); + Ui::SettingsDialog m_ui; + QList<QTextCodec *> codecs; + +}; + +#endif diff --git a/src/plugins/Input/mpeg/settingsdialog.ui b/src/plugins/Input/mpeg/settingsdialog.ui new file mode 100644 index 000000000..818c802a6 --- /dev/null +++ b/src/plugins/Input/mpeg/settingsdialog.ui @@ -0,0 +1,336 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>SettingsDialog</class> + <widget class="QDialog" name="SettingsDialog"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>302</width> + <height>358</height> + </rect> + </property> + <property name="windowTitle"> + <string>MPEG Plugin Settings</string> + </property> + <layout class="QVBoxLayout" name="verticalLayout"> + <property name="leftMargin"> + <number>6</number> + </property> + <property name="rightMargin"> + <number>6</number> + </property> + <property name="bottomMargin"> + <number>6</number> + </property> + <item> + <widget class="QGroupBox" name="groupBox_3"> + <property name="title"> + <string>Decoder</string> + </property> + <layout class="QHBoxLayout" name="horizontalLayout"> + <item> + <widget class="QRadioButton" name="madRadioButton"> + <property name="text"> + <string>MAD</string> + </property> + </widget> + </item> + <item> + <widget class="QRadioButton" name="mpg123RadioButton"> + <property name="text"> + <string>MPG123</string> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item> + <widget class="QGroupBox" name="groupBox_2"> + <property name="title"> + <string>Tag Priority</string> + </property> + <layout class="QGridLayout" name="gridLayout_2"> + <item row="0" column="0"> + <widget class="QLabel" name="label_15_2"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>First:</string> + </property> + <property name="alignment"> + <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set> + </property> + </widget> + </item> + <item row="0" column="1" colspan="2"> + <widget class="QComboBox" name="firstTagComboBox"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="currentIndex"> + <number>0</number> + </property> + <item> + <property name="text"> + <string>ID3v1</string> + </property> + </item> + <item> + <property name="text"> + <string>ID3v2</string> + </property> + </item> + <item> + <property name="text"> + <string>APE</string> + </property> + </item> + <item> + <property name="text"> + <string>Disabled</string> + </property> + </item> + </widget> + </item> + <item row="1" column="0"> + <widget class="QLabel" name="label_15_3"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Maximum" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>Second:</string> + </property> + <property name="alignment"> + <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set> + </property> + </widget> + </item> + <item row="1" column="1" colspan="2"> + <widget class="QComboBox" name="secondTagComboBox"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="currentIndex"> + <number>0</number> + </property> + <item> + <property name="text"> + <string>ID3v1</string> + </property> + </item> + <item> + <property name="text"> + <string>ID3v2</string> + </property> + </item> + <item> + <property name="text"> + <string>APE</string> + </property> + </item> + <item> + <property name="text"> + <string>Disabled</string> + </property> + </item> + </widget> + </item> + <item row="2" column="0"> + <widget class="QLabel" name="label_15_4"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>Third:</string> + </property> + <property name="alignment"> + <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set> + </property> + </widget> + </item> + <item row="2" column="1" colspan="2"> + <widget class="QComboBox" name="thirdTagComboBox"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="currentIndex"> + <number>0</number> + </property> + <item> + <property name="text"> + <string>ID3v1</string> + </property> + </item> + <item> + <property name="text"> + <string>ID3v2</string> + </property> + </item> + <item> + <property name="text"> + <string>APE</string> + </property> + </item> + <item> + <property name="text"> + <string>Disabled</string> + </property> + </item> + </widget> + </item> + <item row="0" column="3" rowspan="3"> + <spacer name="horizontalSpacer"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + </layout> + </widget> + </item> + <item> + <widget class="QGroupBox" name="groupBox"> + <property name="title"> + <string>Encodings</string> + </property> + <layout class="QGridLayout" name="gridLayout_3"> + <item row="0" column="0"> + <widget class="QLabel" name="label_17_2_2"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Maximum" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>ID3v1 encoding:</string> + </property> + <property name="alignment"> + <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set> + </property> + </widget> + </item> + <item row="0" column="1"> + <widget class="QComboBox" name="id3v1EncComboBox"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + </widget> + </item> + <item row="1" column="0"> + <widget class="QLabel" name="label_18_2_2"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Maximum" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>ID3v2 encoding:</string> + </property> + <property name="alignment"> + <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set> + </property> + </widget> + </item> + <item row="1" column="1"> + <widget class="QComboBox" name="id3v2EncComboBox"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + </widget> + </item> + <item row="0" column="2" rowspan="2"> + <spacer name="horizontalSpacer_2"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + </layout> + </widget> + </item> + <item> + <widget class="QDialogButtonBox" name="buttonBox"> + <property name="standardButtons"> + <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set> + </property> + </widget> + </item> + </layout> + </widget> + <resources/> + <connections> + <connection> + <sender>buttonBox</sender> + <signal>rejected()</signal> + <receiver>SettingsDialog</receiver> + <slot>reject()</slot> + <hints> + <hint type="sourcelabel"> + <x>168</x> + <y>351</y> + </hint> + <hint type="destinationlabel"> + <x>70</x> + <y>244</y> + </hint> + </hints> + </connection> + <connection> + <sender>buttonBox</sender> + <signal>accepted()</signal> + <receiver>SettingsDialog</receiver> + <slot>accept()</slot> + <hints> + <hint type="sourcelabel"> + <x>257</x> + <y>336</y> + </hint> + <hint type="destinationlabel"> + <x>302</x> + <y>319</y> + </hint> + </hints> + </connection> + </connections> +</ui> diff --git a/src/plugins/Input/mpeg/tagextractor.cpp b/src/plugins/Input/mpeg/tagextractor.cpp new file mode 100644 index 000000000..1e1557947 --- /dev/null +++ b/src/plugins/Input/mpeg/tagextractor.cpp @@ -0,0 +1,124 @@ +/*************************************************************************** + * Copyright (C) 2008-2018 by Ilya Kotov * + * forkotov02@ya.ru * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program 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 General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#include <QIODevice> +#include <QSettings> +#include <QByteArray> +#include <QBuffer> +#include <QTextCodec> +#include <QSettings> +#include <QDir> +#include <stdlib.h> + +#include "tagextractor.h" + +TagExtractor::TagExtractor(QIODevice *d) +{ + m_d = d; +} + + +TagExtractor::~TagExtractor() +{ +} + +const QMap<Qmmp::MetaData, QString> TagExtractor::id3v2tag() +{ + QByteArray array = m_d->peek(2048); + int offset = array.indexOf("ID3"); + if (offset < 0) + return m_tag; + ID3v2Tag taglib_tag(&array, offset); + if (taglib_tag.isEmpty()) + return m_tag; + + TagLib::String album = taglib_tag.album(); + TagLib::String artist = taglib_tag.artist(); + TagLib::String comment = taglib_tag.comment(); + TagLib::String genre = taglib_tag.genre(); + TagLib::String title = taglib_tag.title(); + + QSettings settings(Qmmp::configFile(), QSettings::IniFormat); + settings.beginGroup("MPEG"); + QByteArray name = settings.value("ID3v2_encoding","UTF-8").toByteArray (); + bool utf = false; + QTextCodec *codec = 0; + if (name.contains("UTF")) + { + codec = QTextCodec::codecForName ("UTF-8"); + utf = true; + } + else + codec = QTextCodec::codecForName(name); + settings.endGroup(); + + if (!codec) + codec = QTextCodec::codecForName ("UTF-8"); + + m_tag.insert(Qmmp::ALBUM, + codec->toUnicode(album.toCString(utf)).trimmed()); + m_tag.insert(Qmmp::ARTIST, + codec->toUnicode(artist.toCString(utf)).trimmed()); + m_tag.insert(Qmmp::COMMENT, + codec->toUnicode(comment.toCString(utf)).trimmed()); + m_tag.insert(Qmmp::GENRE, + codec->toUnicode(genre.toCString(utf)).trimmed()); + m_tag.insert(Qmmp::TITLE, + codec->toUnicode(title.toCString(utf)).trimmed()); + m_tag.insert(Qmmp::YEAR, + QString::number(taglib_tag.year())); + m_tag.insert(Qmmp::TRACK, + QString::number(taglib_tag.track())); + + if(!taglib_tag.frameListMap()["TCOM"].isEmpty()) + { + TagLib::String composer = taglib_tag.frameListMap()["TCOM"].front()->toString(); + m_tag.insert(Qmmp::COMPOSER, codec->toUnicode(composer.toCString(utf)).trimmed()); + } + if(!taglib_tag.frameListMap()["TPOS"].isEmpty()) + { + TagLib::String disc = taglib_tag.frameListMap()["TPOS"].front()->toString(); + m_tag.insert(Qmmp::DISCNUMBER, QString(disc.toCString()).trimmed()); + } + return m_tag; +} + +ID3v2Tag::ID3v2Tag(QByteArray *array, long offset) : TagLib::ID3v2::Tag() +{ + m_buf = new QBuffer(array); + m_buf->open(QIODevice::ReadOnly); + m_offset = offset; + read(); +} + +void ID3v2Tag::read () +{ + m_buf->seek(m_offset); + uint to_read = TagLib::ID3v2::Header::size(); + if (to_read > 2048 - uint(m_offset)) + return; + header()->setData(TagLib::ByteVector(m_buf->read(to_read).data(), to_read)); + to_read = header()->tagSize(); + if (!to_read || 2048 < m_offset + TagLib::ID3v2::Header::size()) + return; + QByteArray array = m_buf->read(to_read); + TagLib::ByteVector v(array.data(), array.size()); + parse(v); +} diff --git a/src/plugins/Input/mpeg/tagextractor.h b/src/plugins/Input/mpeg/tagextractor.h new file mode 100644 index 000000000..9b142c26f --- /dev/null +++ b/src/plugins/Input/mpeg/tagextractor.h @@ -0,0 +1,68 @@ +/*************************************************************************** + * Copyright (C) 2008-2018 by Ilya Kotov * + * forkotov02@ya.ru * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program 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 General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ +#ifndef TAGEXTRACTOR_H +#define TAGEXTRACTOR_H + +#include <QMap> + +#include <taglib/tag.h> +#include <taglib/fileref.h> +#include <taglib/id3v1tag.h> +#include <taglib/id3v2tag.h> +#include <taglib/id3v2header.h> + +#include <qmmp/qmmp.h> + +class QIODevice; +class QBuffer; +class QByteArray; + +/** + @author Ilya Kotov <forkotov02@ya.ru> +*/ +class TagExtractor +{ +public: + TagExtractor(QIODevice *d); + + ~TagExtractor(); + + const QMap<Qmmp::MetaData, QString> id3v2tag(); + +private: + QMap<Qmmp::MetaData, QString> m_tag; + QIODevice *m_d; + +}; + +class ID3v2Tag : public TagLib::ID3v2::Tag +{ +public: + ID3v2Tag(QByteArray *array, long offset); + +protected: + void read (); + +private: + QBuffer *m_buf; + long m_offset; +}; + +#endif diff --git a/src/plugins/Input/mpeg/translations/mpeg_plugin_bg.ts b/src/plugins/Input/mpeg/translations/mpeg_plugin_bg.ts new file mode 100644 index 000000000..4ccc8c5f2 --- /dev/null +++ b/src/plugins/Input/mpeg/translations/mpeg_plugin_bg.ts @@ -0,0 +1,206 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0" language="bg"> +<context> + <name>DecoderMPEGFactory</name> + <message> + <location filename="../decodermpegfactory.cpp" line="117"/> + <source>MPEG Plugin</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="120"/> + <source>MPEG Files</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="284"/> + <source>About MPEG Audio Plugin</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="285"/> + <source>Qmmp MPEG Audio Plugin</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="286"/> + <source>Compiled against libmad version:</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="290"/> + <source>Written by: Ilya Kotov <forkotov02@ya.ru></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="291"/> + <source>Source code based on mq3 and madplay projects</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>MPEGMetaDataModel</name> + <message> + <location filename="../mpegmetadatamodel.cpp" line="70"/> + <source>Format</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="72"/> + <source>Bitrate</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="72"/> + <source>kbps</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="74"/> + <source>Sample rate</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="74"/> + <source>Hz</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="78"/> + <location filename="../mpegmetadatamodel.cpp" line="81"/> + <location filename="../mpegmetadatamodel.cpp" line="84"/> + <location filename="../mpegmetadatamodel.cpp" line="87"/> + <source>Mode</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="90"/> + <source>KB</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="91"/> + <source>File size</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="93"/> + <location filename="../mpegmetadatamodel.cpp" line="95"/> + <source>Protection</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="93"/> + <location filename="../mpegmetadatamodel.cpp" line="97"/> + <location filename="../mpegmetadatamodel.cpp" line="101"/> + <source>Yes</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="95"/> + <location filename="../mpegmetadatamodel.cpp" line="99"/> + <location filename="../mpegmetadatamodel.cpp" line="103"/> + <source>No</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="97"/> + <location filename="../mpegmetadatamodel.cpp" line="99"/> + <source>Copyright</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="101"/> + <location filename="../mpegmetadatamodel.cpp" line="103"/> + <source>Original</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>SettingsDialog</name> + <message> + <location filename="../settingsdialog.ui" line="14"/> + <source>MPEG Plugin Settings</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="29"/> + <source>Decoder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="35"/> + <source>MAD</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="42"/> + <source>MPG123</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="52"/> + <source>Tag Priority</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="64"/> + <source>First:</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="84"/> + <location filename="../settingsdialog.ui" line="133"/> + <location filename="../settingsdialog.ui" line="182"/> + <source>ID3v1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="89"/> + <location filename="../settingsdialog.ui" line="138"/> + <location filename="../settingsdialog.ui" line="187"/> + <source>ID3v2</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="94"/> + <location filename="../settingsdialog.ui" line="143"/> + <location filename="../settingsdialog.ui" line="192"/> + <source>APE</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="99"/> + <location filename="../settingsdialog.ui" line="148"/> + <location filename="../settingsdialog.ui" line="197"/> + <source>Disabled</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="113"/> + <source>Second:</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="162"/> + <source>Third:</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="221"/> + <source>Encodings</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="233"/> + <source>ID3v1 encoding:</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="259"/> + <source>ID3v2 encoding:</source> + <translation type="unfinished"></translation> + </message> +</context> +</TS> diff --git a/src/plugins/Input/mpeg/translations/mpeg_plugin_cs.ts b/src/plugins/Input/mpeg/translations/mpeg_plugin_cs.ts new file mode 100644 index 000000000..70862992e --- /dev/null +++ b/src/plugins/Input/mpeg/translations/mpeg_plugin_cs.ts @@ -0,0 +1,206 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0" language="cs"> +<context> + <name>DecoderMPEGFactory</name> + <message> + <location filename="../decodermpegfactory.cpp" line="117"/> + <source>MPEG Plugin</source> + <translation type="unfinished">Modul MPEG</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="120"/> + <source>MPEG Files</source> + <translation type="unfinished">Soubory MPEG</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="284"/> + <source>About MPEG Audio Plugin</source> + <translation type="unfinished">O modulu MPEG</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="285"/> + <source>Qmmp MPEG Audio Plugin</source> + <translation type="unfinished">Vstupní modul Qmmp MPEG</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="286"/> + <source>Compiled against libmad version:</source> + <translation type="unfinished">Zkompilováno s libmad verze:</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="290"/> + <source>Written by: Ilya Kotov <forkotov02@ya.ru></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="291"/> + <source>Source code based on mq3 and madplay projects</source> + <translation type="unfinished">Zdrojový kód je založen na projektech mq3 a madplay</translation> + </message> +</context> +<context> + <name>MPEGMetaDataModel</name> + <message> + <location filename="../mpegmetadatamodel.cpp" line="70"/> + <source>Format</source> + <translation>Formát</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="72"/> + <source>Bitrate</source> + <translation>Datový tok</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="72"/> + <source>kbps</source> + <translation>kbps</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="74"/> + <source>Sample rate</source> + <translation>Vzorkovací frekvence</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="74"/> + <source>Hz</source> + <translation>Hz</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="78"/> + <location filename="../mpegmetadatamodel.cpp" line="81"/> + <location filename="../mpegmetadatamodel.cpp" line="84"/> + <location filename="../mpegmetadatamodel.cpp" line="87"/> + <source>Mode</source> + <translation>Režim</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="90"/> + <source>KB</source> + <translation>KiB</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="91"/> + <source>File size</source> + <translation>Velikost souboru</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="93"/> + <location filename="../mpegmetadatamodel.cpp" line="95"/> + <source>Protection</source> + <translation>Ochrana</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="93"/> + <location filename="../mpegmetadatamodel.cpp" line="97"/> + <location filename="../mpegmetadatamodel.cpp" line="101"/> + <source>Yes</source> + <translation>Ano</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="95"/> + <location filename="../mpegmetadatamodel.cpp" line="99"/> + <location filename="../mpegmetadatamodel.cpp" line="103"/> + <source>No</source> + <translation>Ne</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="97"/> + <location filename="../mpegmetadatamodel.cpp" line="99"/> + <source>Copyright</source> + <translation>Copyright</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="101"/> + <location filename="../mpegmetadatamodel.cpp" line="103"/> + <source>Original</source> + <translation>Originál</translation> + </message> +</context> +<context> + <name>SettingsDialog</name> + <message> + <location filename="../settingsdialog.ui" line="14"/> + <source>MPEG Plugin Settings</source> + <translation>Nastavení pluginu MPEG</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="29"/> + <source>Decoder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="35"/> + <source>MAD</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="42"/> + <source>MPG123</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="52"/> + <source>Tag Priority</source> + <translation>Priorita tagu</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="64"/> + <source>First:</source> + <translation>První:</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="84"/> + <location filename="../settingsdialog.ui" line="133"/> + <location filename="../settingsdialog.ui" line="182"/> + <source>ID3v1</source> + <translation>ID3v1</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="89"/> + <location filename="../settingsdialog.ui" line="138"/> + <location filename="../settingsdialog.ui" line="187"/> + <source>ID3v2</source> + <translation>ID3v2</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="94"/> + <location filename="../settingsdialog.ui" line="143"/> + <location filename="../settingsdialog.ui" line="192"/> + <source>APE</source> + <translation>APE</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="99"/> + <location filename="../settingsdialog.ui" line="148"/> + <location filename="../settingsdialog.ui" line="197"/> + <source>Disabled</source> + <translation>Zakázáno</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="113"/> + <source>Second:</source> + <translation>Druhý:</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="162"/> + <source>Third:</source> + <translation>Třetí:</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="221"/> + <source>Encodings</source> + <translation>Kódování</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="233"/> + <source>ID3v1 encoding:</source> + <translation>Kódování ID3v1:</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="259"/> + <source>ID3v2 encoding:</source> + <translation>Kódování ID3v2:</translation> + </message> +</context> +</TS> diff --git a/src/plugins/Input/mpeg/translations/mpeg_plugin_de.ts b/src/plugins/Input/mpeg/translations/mpeg_plugin_de.ts new file mode 100644 index 000000000..46ebc4793 --- /dev/null +++ b/src/plugins/Input/mpeg/translations/mpeg_plugin_de.ts @@ -0,0 +1,206 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0" language="de"> +<context> + <name>DecoderMPEGFactory</name> + <message> + <location filename="../decodermpegfactory.cpp" line="117"/> + <source>MPEG Plugin</source> + <translation type="unfinished">MPEG-Modul</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="120"/> + <source>MPEG Files</source> + <translation type="unfinished">MPEG-Dateien</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="284"/> + <source>About MPEG Audio Plugin</source> + <translation type="unfinished">Über MPEG-Audiomodul</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="285"/> + <source>Qmmp MPEG Audio Plugin</source> + <translation type="unfinished">Qmmp MPEG-Audiomodul</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="286"/> + <source>Compiled against libmad version:</source> + <translation type="unfinished">Kompiliert gegen libmad-Version:</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="290"/> + <source>Written by: Ilya Kotov <forkotov02@ya.ru></source> + <translation type="unfinished">Geschrieben von: Ilya Kotov <forkotov02@ya.ru></translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="291"/> + <source>Source code based on mq3 and madplay projects</source> + <translation type="unfinished">Basiert auf Code von den mq3- und madplay-Projekten</translation> + </message> +</context> +<context> + <name>MPEGMetaDataModel</name> + <message> + <location filename="../mpegmetadatamodel.cpp" line="70"/> + <source>Format</source> + <translation>Format</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="72"/> + <source>Bitrate</source> + <translation>Bitrate</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="72"/> + <source>kbps</source> + <translation>KBit/s</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="74"/> + <source>Sample rate</source> + <translation>Abtastrate</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="74"/> + <source>Hz</source> + <translation>Hz</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="78"/> + <location filename="../mpegmetadatamodel.cpp" line="81"/> + <location filename="../mpegmetadatamodel.cpp" line="84"/> + <location filename="../mpegmetadatamodel.cpp" line="87"/> + <source>Mode</source> + <translation>Modus</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="90"/> + <source>KB</source> + <translation>KB</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="91"/> + <source>File size</source> + <translation>Dateigröße</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="93"/> + <location filename="../mpegmetadatamodel.cpp" line="95"/> + <source>Protection</source> + <translation>Geschützt</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="93"/> + <location filename="../mpegmetadatamodel.cpp" line="97"/> + <location filename="../mpegmetadatamodel.cpp" line="101"/> + <source>Yes</source> + <translation>Ja</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="95"/> + <location filename="../mpegmetadatamodel.cpp" line="99"/> + <location filename="../mpegmetadatamodel.cpp" line="103"/> + <source>No</source> + <translation>Nein</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="97"/> + <location filename="../mpegmetadatamodel.cpp" line="99"/> + <source>Copyright</source> + <translation>Copyright</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="101"/> + <location filename="../mpegmetadatamodel.cpp" line="103"/> + <source>Original</source> + <translation>Original</translation> + </message> +</context> +<context> + <name>SettingsDialog</name> + <message> + <location filename="../settingsdialog.ui" line="14"/> + <source>MPEG Plugin Settings</source> + <translation>Einstellungen MPEG-Modul</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="29"/> + <source>Decoder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="35"/> + <source>MAD</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="42"/> + <source>MPG123</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="52"/> + <source>Tag Priority</source> + <translation>Schlagwortpriorität</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="64"/> + <source>First:</source> + <translation>Erster:</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="84"/> + <location filename="../settingsdialog.ui" line="133"/> + <location filename="../settingsdialog.ui" line="182"/> + <source>ID3v1</source> + <translation>ID3v1</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="89"/> + <location filename="../settingsdialog.ui" line="138"/> + <location filename="../settingsdialog.ui" line="187"/> + <source>ID3v2</source> + <translation>ID3v2</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="94"/> + <location filename="../settingsdialog.ui" line="143"/> + <location filename="../settingsdialog.ui" line="192"/> + <source>APE</source> + <translation>APE</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="99"/> + <location filename="../settingsdialog.ui" line="148"/> + <location filename="../settingsdialog.ui" line="197"/> + <source>Disabled</source> + <translation>Deaktiviert</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="113"/> + <source>Second:</source> + <translation>Zweiter:</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="162"/> + <source>Third:</source> + <translation>Dritter:</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="221"/> + <source>Encodings</source> + <translation>Kodierungen</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="233"/> + <source>ID3v1 encoding:</source> + <translation>ID3v1-Kodierung:</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="259"/> + <source>ID3v2 encoding:</source> + <translation>ID3v2-Kodierung:</translation> + </message> +</context> +</TS> diff --git a/src/plugins/Input/mpeg/translations/mpeg_plugin_el.ts b/src/plugins/Input/mpeg/translations/mpeg_plugin_el.ts new file mode 100644 index 000000000..ed4f418c7 --- /dev/null +++ b/src/plugins/Input/mpeg/translations/mpeg_plugin_el.ts @@ -0,0 +1,206 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0" language="el"> +<context> + <name>DecoderMPEGFactory</name> + <message> + <location filename="../decodermpegfactory.cpp" line="117"/> + <source>MPEG Plugin</source> + <translation type="unfinished">Πρόσθετο MPEG</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="120"/> + <source>MPEG Files</source> + <translation type="unfinished">Αρχεία MPEG</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="284"/> + <source>About MPEG Audio Plugin</source> + <translation type="unfinished">Σχετικά με το πρόσθετο ήχου MPEG</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="285"/> + <source>Qmmp MPEG Audio Plugin</source> + <translation type="unfinished">Qmmp πρόσθετο ήχου MPEG</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="286"/> + <source>Compiled against libmad version:</source> + <translation type="unfinished">Μεταγλωττίστηκε χρησιμοποιώντας την έκδοση της βιβλιοθήκης libmad:</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="290"/> + <source>Written by: Ilya Kotov <forkotov02@ya.ru></source> + <translation type="unfinished">Γράφτηκε από τον: Ilya Kotov <forkotov02@hotmail.ru></translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="291"/> + <source>Source code based on mq3 and madplay projects</source> + <translation type="unfinished">Ο πηγαίος κώδικας έχει βασιστεί στα έργα mq3 και madplay</translation> + </message> +</context> +<context> + <name>MPEGMetaDataModel</name> + <message> + <location filename="../mpegmetadatamodel.cpp" line="70"/> + <source>Format</source> + <translation>Μορφή</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="72"/> + <source>Bitrate</source> + <translation>Ρυθμός bit</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="72"/> + <source>kbps</source> + <translation>kbps</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="74"/> + <source>Sample rate</source> + <translation>Ρυθμός δειγματοληψίας</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="74"/> + <source>Hz</source> + <translation>Hz</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="78"/> + <location filename="../mpegmetadatamodel.cpp" line="81"/> + <location filename="../mpegmetadatamodel.cpp" line="84"/> + <location filename="../mpegmetadatamodel.cpp" line="87"/> + <source>Mode</source> + <translation>Λειτουργία</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="90"/> + <source>KB</source> + <translation>KB</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="91"/> + <source>File size</source> + <translation>Μέγεθος αρχείου</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="93"/> + <location filename="../mpegmetadatamodel.cpp" line="95"/> + <source>Protection</source> + <translation>Προστασία</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="93"/> + <location filename="../mpegmetadatamodel.cpp" line="97"/> + <location filename="../mpegmetadatamodel.cpp" line="101"/> + <source>Yes</source> + <translation>Ναι</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="95"/> + <location filename="../mpegmetadatamodel.cpp" line="99"/> + <location filename="../mpegmetadatamodel.cpp" line="103"/> + <source>No</source> + <translation>Όχι</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="97"/> + <location filename="../mpegmetadatamodel.cpp" line="99"/> + <source>Copyright</source> + <translation>Πνευματικά δικαιώματα</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="101"/> + <location filename="../mpegmetadatamodel.cpp" line="103"/> + <source>Original</source> + <translation>Αρχικό</translation> + </message> +</context> +<context> + <name>SettingsDialog</name> + <message> + <location filename="../settingsdialog.ui" line="14"/> + <source>MPEG Plugin Settings</source> + <translation>Ρυθμίσεις πρόσθετου MPEG</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="29"/> + <source>Decoder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="35"/> + <source>MAD</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="42"/> + <source>MPG123</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="52"/> + <source>Tag Priority</source> + <translation>Προτεραιότητα ετικέτας</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="64"/> + <source>First:</source> + <translation>Πρώτη:</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="84"/> + <location filename="../settingsdialog.ui" line="133"/> + <location filename="../settingsdialog.ui" line="182"/> + <source>ID3v1</source> + <translation>ID3v1</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="89"/> + <location filename="../settingsdialog.ui" line="138"/> + <location filename="../settingsdialog.ui" line="187"/> + <source>ID3v2</source> + <translation>ID3v2</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="94"/> + <location filename="../settingsdialog.ui" line="143"/> + <location filename="../settingsdialog.ui" line="192"/> + <source>APE</source> + <translation>APE</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="99"/> + <location filename="../settingsdialog.ui" line="148"/> + <location filename="../settingsdialog.ui" line="197"/> + <source>Disabled</source> + <translation>Απενεργοποιημένο</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="113"/> + <source>Second:</source> + <translation>Δεύτερη:</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="162"/> + <source>Third:</source> + <translation>Τρίτη</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="221"/> + <source>Encodings</source> + <translation>Κωδικοποιήσεις</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="233"/> + <source>ID3v1 encoding:</source> + <translation>Κωδικοποίηση ID3v1:</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="259"/> + <source>ID3v2 encoding:</source> + <translation>Κωδικοποίηση ID3v2:</translation> + </message> +</context> +</TS> diff --git a/src/plugins/Input/mpeg/translations/mpeg_plugin_en.ts b/src/plugins/Input/mpeg/translations/mpeg_plugin_en.ts new file mode 100644 index 000000000..b5208a9fe --- /dev/null +++ b/src/plugins/Input/mpeg/translations/mpeg_plugin_en.ts @@ -0,0 +1,206 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0" language="en_US"> +<context> + <name>DecoderMPEGFactory</name> + <message> + <location filename="../decodermpegfactory.cpp" line="117"/> + <source>MPEG Plugin</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="120"/> + <source>MPEG Files</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="284"/> + <source>About MPEG Audio Plugin</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="285"/> + <source>Qmmp MPEG Audio Plugin</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="286"/> + <source>Compiled against libmad version:</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="290"/> + <source>Written by: Ilya Kotov <forkotov02@ya.ru></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="291"/> + <source>Source code based on mq3 and madplay projects</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>MPEGMetaDataModel</name> + <message> + <location filename="../mpegmetadatamodel.cpp" line="70"/> + <source>Format</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="72"/> + <source>Bitrate</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="72"/> + <source>kbps</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="74"/> + <source>Sample rate</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="74"/> + <source>Hz</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="78"/> + <location filename="../mpegmetadatamodel.cpp" line="81"/> + <location filename="../mpegmetadatamodel.cpp" line="84"/> + <location filename="../mpegmetadatamodel.cpp" line="87"/> + <source>Mode</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="90"/> + <source>KB</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="91"/> + <source>File size</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="93"/> + <location filename="../mpegmetadatamodel.cpp" line="95"/> + <source>Protection</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="93"/> + <location filename="../mpegmetadatamodel.cpp" line="97"/> + <location filename="../mpegmetadatamodel.cpp" line="101"/> + <source>Yes</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="95"/> + <location filename="../mpegmetadatamodel.cpp" line="99"/> + <location filename="../mpegmetadatamodel.cpp" line="103"/> + <source>No</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="97"/> + <location filename="../mpegmetadatamodel.cpp" line="99"/> + <source>Copyright</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="101"/> + <location filename="../mpegmetadatamodel.cpp" line="103"/> + <source>Original</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>SettingsDialog</name> + <message> + <location filename="../settingsdialog.ui" line="14"/> + <source>MPEG Plugin Settings</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="29"/> + <source>Decoder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="35"/> + <source>MAD</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="42"/> + <source>MPG123</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="52"/> + <source>Tag Priority</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="64"/> + <source>First:</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="84"/> + <location filename="../settingsdialog.ui" line="133"/> + <location filename="../settingsdialog.ui" line="182"/> + <source>ID3v1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="89"/> + <location filename="../settingsdialog.ui" line="138"/> + <location filename="../settingsdialog.ui" line="187"/> + <source>ID3v2</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="94"/> + <location filename="../settingsdialog.ui" line="143"/> + <location filename="../settingsdialog.ui" line="192"/> + <source>APE</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="99"/> + <location filename="../settingsdialog.ui" line="148"/> + <location filename="../settingsdialog.ui" line="197"/> + <source>Disabled</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="113"/> + <source>Second:</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="162"/> + <source>Third:</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="221"/> + <source>Encodings</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="233"/> + <source>ID3v1 encoding:</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="259"/> + <source>ID3v2 encoding:</source> + <translation type="unfinished"></translation> + </message> +</context> +</TS> diff --git a/src/plugins/Input/mpeg/translations/mpeg_plugin_es.ts b/src/plugins/Input/mpeg/translations/mpeg_plugin_es.ts new file mode 100644 index 000000000..aebbd365e --- /dev/null +++ b/src/plugins/Input/mpeg/translations/mpeg_plugin_es.ts @@ -0,0 +1,206 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0" language="es"> +<context> + <name>DecoderMPEGFactory</name> + <message> + <location filename="../decodermpegfactory.cpp" line="117"/> + <source>MPEG Plugin</source> + <translation type="unfinished">Módulo MPEG</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="120"/> + <source>MPEG Files</source> + <translation type="unfinished">Archivos MPEG</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="284"/> + <source>About MPEG Audio Plugin</source> + <translation type="unfinished">Acerca del módulo de audio MPEG</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="285"/> + <source>Qmmp MPEG Audio Plugin</source> + <translation type="unfinished">Módulo de audio MPEG para Qmmp</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="286"/> + <source>Compiled against libmad version:</source> + <translation type="unfinished">Compilado con libmad version:</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="290"/> + <source>Written by: Ilya Kotov <forkotov02@ya.ru></source> + <translation type="unfinished">Escrito por: Ilya Kotov <forkotov02@ya.ru></translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="291"/> + <source>Source code based on mq3 and madplay projects</source> + <translation type="unfinished">Código fuente basado sobre proyectos mq3 y madplay</translation> + </message> +</context> +<context> + <name>MPEGMetaDataModel</name> + <message> + <location filename="../mpegmetadatamodel.cpp" line="70"/> + <source>Format</source> + <translation>Formato</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="72"/> + <source>Bitrate</source> + <translation>Tasa de bits</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="72"/> + <source>kbps</source> + <translation>kbps</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="74"/> + <source>Sample rate</source> + <translation>Frecuencia</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="74"/> + <source>Hz</source> + <translation>Hz</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="78"/> + <location filename="../mpegmetadatamodel.cpp" line="81"/> + <location filename="../mpegmetadatamodel.cpp" line="84"/> + <location filename="../mpegmetadatamodel.cpp" line="87"/> + <source>Mode</source> + <translation>Modo</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="90"/> + <source>KB</source> + <translation>KB</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="91"/> + <source>File size</source> + <translation>Tamaño del archivo</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="93"/> + <location filename="../mpegmetadatamodel.cpp" line="95"/> + <source>Protection</source> + <translation>Protección</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="93"/> + <location filename="../mpegmetadatamodel.cpp" line="97"/> + <location filename="../mpegmetadatamodel.cpp" line="101"/> + <source>Yes</source> + <translation>Sí</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="95"/> + <location filename="../mpegmetadatamodel.cpp" line="99"/> + <location filename="../mpegmetadatamodel.cpp" line="103"/> + <source>No</source> + <translation>No</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="97"/> + <location filename="../mpegmetadatamodel.cpp" line="99"/> + <source>Copyright</source> + <translation>Copyright</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="101"/> + <location filename="../mpegmetadatamodel.cpp" line="103"/> + <source>Original</source> + <translation>Original</translation> + </message> +</context> +<context> + <name>SettingsDialog</name> + <message> + <location filename="../settingsdialog.ui" line="14"/> + <source>MPEG Plugin Settings</source> + <translation>Configuración del módulo MPEG</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="29"/> + <source>Decoder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="35"/> + <source>MAD</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="42"/> + <source>MPG123</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="52"/> + <source>Tag Priority</source> + <translation>Prioridad de etiquetas</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="64"/> + <source>First:</source> + <translation>Primera:</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="84"/> + <location filename="../settingsdialog.ui" line="133"/> + <location filename="../settingsdialog.ui" line="182"/> + <source>ID3v1</source> + <translation>ID3v1</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="89"/> + <location filename="../settingsdialog.ui" line="138"/> + <location filename="../settingsdialog.ui" line="187"/> + <source>ID3v2</source> + <translation>ID3v2</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="94"/> + <location filename="../settingsdialog.ui" line="143"/> + <location filename="../settingsdialog.ui" line="192"/> + <source>APE</source> + <translation>APE</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="99"/> + <location filename="../settingsdialog.ui" line="148"/> + <location filename="../settingsdialog.ui" line="197"/> + <source>Disabled</source> + <translation>Deshabilitado</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="113"/> + <source>Second:</source> + <translation>Segunda:</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="162"/> + <source>Third:</source> + <translation>Tercera:</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="221"/> + <source>Encodings</source> + <translation>Codificaciones</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="233"/> + <source>ID3v1 encoding:</source> + <translation>Codificación ID3v1:</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="259"/> + <source>ID3v2 encoding:</source> + <translation>Codificación ID3v2:</translation> + </message> +</context> +</TS> diff --git a/src/plugins/Input/mpeg/translations/mpeg_plugin_fi.ts b/src/plugins/Input/mpeg/translations/mpeg_plugin_fi.ts new file mode 100644 index 000000000..4c5233829 --- /dev/null +++ b/src/plugins/Input/mpeg/translations/mpeg_plugin_fi.ts @@ -0,0 +1,206 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0" language="fi"> +<context> + <name>DecoderMPEGFactory</name> + <message> + <location filename="../decodermpegfactory.cpp" line="117"/> + <source>MPEG Plugin</source> + <translation type="unfinished">MPEG-liitännäinen</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="120"/> + <source>MPEG Files</source> + <translation type="unfinished">MPEG-tiedostot</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="284"/> + <source>About MPEG Audio Plugin</source> + <translation type="unfinished">Tietoja - MPEG-ääniliitännäinen</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="285"/> + <source>Qmmp MPEG Audio Plugin</source> + <translation type="unfinished">Qmmp:n MPEG-ääniliitännäinen</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="286"/> + <source>Compiled against libmad version:</source> + <translation type="unfinished">Koostettu vasten libmadin versiota:</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="290"/> + <source>Written by: Ilya Kotov <forkotov02@ya.ru></source> + <translation type="unfinished">Toteuttanut: Ilya Kotov <forkotov02@ya.ru></translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="291"/> + <source>Source code based on mq3 and madplay projects</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>MPEGMetaDataModel</name> + <message> + <location filename="../mpegmetadatamodel.cpp" line="70"/> + <source>Format</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="72"/> + <source>Bitrate</source> + <translation>Bittinopeus</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="72"/> + <source>kbps</source> + <translation>kbps</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="74"/> + <source>Sample rate</source> + <translation>Näytteenottotaajuus</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="74"/> + <source>Hz</source> + <translation>Hz</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="78"/> + <location filename="../mpegmetadatamodel.cpp" line="81"/> + <location filename="../mpegmetadatamodel.cpp" line="84"/> + <location filename="../mpegmetadatamodel.cpp" line="87"/> + <source>Mode</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="90"/> + <source>KB</source> + <translation>kt</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="91"/> + <source>File size</source> + <translation>Tiedostokoko</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="93"/> + <location filename="../mpegmetadatamodel.cpp" line="95"/> + <source>Protection</source> + <translation>Suojaus</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="93"/> + <location filename="../mpegmetadatamodel.cpp" line="97"/> + <location filename="../mpegmetadatamodel.cpp" line="101"/> + <source>Yes</source> + <translation>Kyllä</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="95"/> + <location filename="../mpegmetadatamodel.cpp" line="99"/> + <location filename="../mpegmetadatamodel.cpp" line="103"/> + <source>No</source> + <translation>Ei</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="97"/> + <location filename="../mpegmetadatamodel.cpp" line="99"/> + <source>Copyright</source> + <translation>Tekijänoikeus</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="101"/> + <location filename="../mpegmetadatamodel.cpp" line="103"/> + <source>Original</source> + <translation>Alkuperäinen</translation> + </message> +</context> +<context> + <name>SettingsDialog</name> + <message> + <location filename="../settingsdialog.ui" line="14"/> + <source>MPEG Plugin Settings</source> + <translation>MPEG-liitännäisen asetukset</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="29"/> + <source>Decoder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="35"/> + <source>MAD</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="42"/> + <source>MPG123</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="52"/> + <source>Tag Priority</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="64"/> + <source>First:</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="84"/> + <location filename="../settingsdialog.ui" line="133"/> + <location filename="../settingsdialog.ui" line="182"/> + <source>ID3v1</source> + <translation>ID3v1</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="89"/> + <location filename="../settingsdialog.ui" line="138"/> + <location filename="../settingsdialog.ui" line="187"/> + <source>ID3v2</source> + <translation>ID3v2</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="94"/> + <location filename="../settingsdialog.ui" line="143"/> + <location filename="../settingsdialog.ui" line="192"/> + <source>APE</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="99"/> + <location filename="../settingsdialog.ui" line="148"/> + <location filename="../settingsdialog.ui" line="197"/> + <source>Disabled</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="113"/> + <source>Second:</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="162"/> + <source>Third:</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="221"/> + <source>Encodings</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="233"/> + <source>ID3v1 encoding:</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="259"/> + <source>ID3v2 encoding:</source> + <translation type="unfinished"></translation> + </message> +</context> +</TS> diff --git a/src/plugins/Input/mpeg/translations/mpeg_plugin_fr.ts b/src/plugins/Input/mpeg/translations/mpeg_plugin_fr.ts new file mode 100644 index 000000000..b3df8b8a2 --- /dev/null +++ b/src/plugins/Input/mpeg/translations/mpeg_plugin_fr.ts @@ -0,0 +1,206 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0" language="fr"> +<context> + <name>DecoderMPEGFactory</name> + <message> + <location filename="../decodermpegfactory.cpp" line="117"/> + <source>MPEG Plugin</source> + <translation type="unfinished">Greffon MPEG</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="120"/> + <source>MPEG Files</source> + <translation type="unfinished">Fichiers MPEG</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="284"/> + <source>About MPEG Audio Plugin</source> + <translation type="unfinished">À propos du greffon audio MPEG</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="285"/> + <source>Qmmp MPEG Audio Plugin</source> + <translation type="unfinished">Greffon audio MPEG pour Qmmp</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="286"/> + <source>Compiled against libmad version:</source> + <translation type="unfinished">Compilé contre libmad version :</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="290"/> + <source>Written by: Ilya Kotov <forkotov02@ya.ru></source> + <translation type="unfinished">Écrit par : Ilya Kotov <forkotov02@ya.ru></translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="291"/> + <source>Source code based on mq3 and madplay projects</source> + <translation type="unfinished">Code source basé sur les projets mq3 et madplay</translation> + </message> +</context> +<context> + <name>MPEGMetaDataModel</name> + <message> + <location filename="../mpegmetadatamodel.cpp" line="70"/> + <source>Format</source> + <translation>Format</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="72"/> + <source>Bitrate</source> + <translation>Débit binaire</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="72"/> + <source>kbps</source> + <translation>kbps</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="74"/> + <source>Sample rate</source> + <translation>Taux d’échantillonnage</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="74"/> + <source>Hz</source> + <translation>Hz</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="78"/> + <location filename="../mpegmetadatamodel.cpp" line="81"/> + <location filename="../mpegmetadatamodel.cpp" line="84"/> + <location filename="../mpegmetadatamodel.cpp" line="87"/> + <source>Mode</source> + <translation>Mode</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="90"/> + <source>KB</source> + <translation>Ko</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="91"/> + <source>File size</source> + <translation>Taille du fichier</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="93"/> + <location filename="../mpegmetadatamodel.cpp" line="95"/> + <source>Protection</source> + <translation>Protection</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="93"/> + <location filename="../mpegmetadatamodel.cpp" line="97"/> + <location filename="../mpegmetadatamodel.cpp" line="101"/> + <source>Yes</source> + <translation>Oui</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="95"/> + <location filename="../mpegmetadatamodel.cpp" line="99"/> + <location filename="../mpegmetadatamodel.cpp" line="103"/> + <source>No</source> + <translation>Non</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="97"/> + <location filename="../mpegmetadatamodel.cpp" line="99"/> + <source>Copyright</source> + <translation>Copyright</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="101"/> + <location filename="../mpegmetadatamodel.cpp" line="103"/> + <source>Original</source> + <translation>Original</translation> + </message> +</context> +<context> + <name>SettingsDialog</name> + <message> + <location filename="../settingsdialog.ui" line="14"/> + <source>MPEG Plugin Settings</source> + <translation>Configuration du greffon MPEG</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="29"/> + <source>Decoder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="35"/> + <source>MAD</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="42"/> + <source>MPG123</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="52"/> + <source>Tag Priority</source> + <translation>Priorité d'étiquette</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="64"/> + <source>First:</source> + <translation>Premier :</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="84"/> + <location filename="../settingsdialog.ui" line="133"/> + <location filename="../settingsdialog.ui" line="182"/> + <source>ID3v1</source> + <translation>ID3v1</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="89"/> + <location filename="../settingsdialog.ui" line="138"/> + <location filename="../settingsdialog.ui" line="187"/> + <source>ID3v2</source> + <translation>ID3v2</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="94"/> + <location filename="../settingsdialog.ui" line="143"/> + <location filename="../settingsdialog.ui" line="192"/> + <source>APE</source> + <translation>APE</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="99"/> + <location filename="../settingsdialog.ui" line="148"/> + <location filename="../settingsdialog.ui" line="197"/> + <source>Disabled</source> + <translation>Désactivé</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="113"/> + <source>Second:</source> + <translation>Deuxième :</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="162"/> + <source>Third:</source> + <translation>Troisième :</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="221"/> + <source>Encodings</source> + <translation>Encodages</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="233"/> + <source>ID3v1 encoding:</source> + <translation>Encodage ID3v1 :</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="259"/> + <source>ID3v2 encoding:</source> + <translation>Encodage ID3v2 :</translation> + </message> +</context> +</TS> diff --git a/src/plugins/Input/mpeg/translations/mpeg_plugin_gl_ES.ts b/src/plugins/Input/mpeg/translations/mpeg_plugin_gl_ES.ts new file mode 100644 index 000000000..5079eec87 --- /dev/null +++ b/src/plugins/Input/mpeg/translations/mpeg_plugin_gl_ES.ts @@ -0,0 +1,206 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0" language="gl_ES"> +<context> + <name>DecoderMPEGFactory</name> + <message> + <location filename="../decodermpegfactory.cpp" line="117"/> + <source>MPEG Plugin</source> + <translation type="unfinished">Engadido MPEG</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="120"/> + <source>MPEG Files</source> + <translation type="unfinished">Ficheiros MPEG</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="284"/> + <source>About MPEG Audio Plugin</source> + <translation type="unfinished">Sobre o engadido MPEG</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="285"/> + <source>Qmmp MPEG Audio Plugin</source> + <translation type="unfinished">Engadido audio MPEG de Qmmp</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="286"/> + <source>Compiled against libmad version:</source> + <translation type="unfinished">Compilado coa versión libmad:</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="290"/> + <source>Written by: Ilya Kotov <forkotov02@ya.ru></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="291"/> + <source>Source code based on mq3 and madplay projects</source> + <translation type="unfinished">Código fonte baseado nos proxectos mq3 e madplay</translation> + </message> +</context> +<context> + <name>MPEGMetaDataModel</name> + <message> + <location filename="../mpegmetadatamodel.cpp" line="70"/> + <source>Format</source> + <translation>Formato</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="72"/> + <source>Bitrate</source> + <translation>Taxa de bits</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="72"/> + <source>kbps</source> + <translation>kbps</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="74"/> + <source>Sample rate</source> + <translation>Frecuencia de mostra</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="74"/> + <source>Hz</source> + <translation>Hz</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="78"/> + <location filename="../mpegmetadatamodel.cpp" line="81"/> + <location filename="../mpegmetadatamodel.cpp" line="84"/> + <location filename="../mpegmetadatamodel.cpp" line="87"/> + <source>Mode</source> + <translation>Modo</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="90"/> + <source>KB</source> + <translation>KB</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="91"/> + <source>File size</source> + <translation>Tamaño de ficheiro</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="93"/> + <location filename="../mpegmetadatamodel.cpp" line="95"/> + <source>Protection</source> + <translation>Protección</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="93"/> + <location filename="../mpegmetadatamodel.cpp" line="97"/> + <location filename="../mpegmetadatamodel.cpp" line="101"/> + <source>Yes</source> + <translation>Si</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="95"/> + <location filename="../mpegmetadatamodel.cpp" line="99"/> + <location filename="../mpegmetadatamodel.cpp" line="103"/> + <source>No</source> + <translation>Non</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="97"/> + <location filename="../mpegmetadatamodel.cpp" line="99"/> + <source>Copyright</source> + <translation>Copyright</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="101"/> + <location filename="../mpegmetadatamodel.cpp" line="103"/> + <source>Original</source> + <translation>Orixinal</translation> + </message> +</context> +<context> + <name>SettingsDialog</name> + <message> + <location filename="../settingsdialog.ui" line="14"/> + <source>MPEG Plugin Settings</source> + <translation>Preferencias do engadido MPEG</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="29"/> + <source>Decoder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="35"/> + <source>MAD</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="42"/> + <source>MPG123</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="52"/> + <source>Tag Priority</source> + <translation>Prioridade de etiquetas</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="64"/> + <source>First:</source> + <translation>Primeira:</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="84"/> + <location filename="../settingsdialog.ui" line="133"/> + <location filename="../settingsdialog.ui" line="182"/> + <source>ID3v1</source> + <translation>ID3v1</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="89"/> + <location filename="../settingsdialog.ui" line="138"/> + <location filename="../settingsdialog.ui" line="187"/> + <source>ID3v2</source> + <translation>ID3v2</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="94"/> + <location filename="../settingsdialog.ui" line="143"/> + <location filename="../settingsdialog.ui" line="192"/> + <source>APE</source> + <translation>APE</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="99"/> + <location filename="../settingsdialog.ui" line="148"/> + <location filename="../settingsdialog.ui" line="197"/> + <source>Disabled</source> + <translation>Desactivado</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="113"/> + <source>Second:</source> + <translation>Segunda:</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="162"/> + <source>Third:</source> + <translation>Terceira:</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="221"/> + <source>Encodings</source> + <translation>Codificacións</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="233"/> + <source>ID3v1 encoding:</source> + <translation>Codificación ID3v1:</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="259"/> + <source>ID3v2 encoding:</source> + <translation>Codificación ID3v2:</translation> + </message> +</context> +</TS> diff --git a/src/plugins/Input/mpeg/translations/mpeg_plugin_he.ts b/src/plugins/Input/mpeg/translations/mpeg_plugin_he.ts new file mode 100644 index 000000000..185f592be --- /dev/null +++ b/src/plugins/Input/mpeg/translations/mpeg_plugin_he.ts @@ -0,0 +1,206 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0" language="he"> +<context> + <name>DecoderMPEGFactory</name> + <message> + <location filename="../decodermpegfactory.cpp" line="117"/> + <source>MPEG Plugin</source> + <translation type="unfinished">תוסף MPEG</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="120"/> + <source>MPEG Files</source> + <translation type="unfinished">קבצי MPEG</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="284"/> + <source>About MPEG Audio Plugin</source> + <translation type="unfinished">אודות תוסף שמע MPEG</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="285"/> + <source>Qmmp MPEG Audio Plugin</source> + <translation type="unfinished">תוסף שמע MPEG של Qmmp</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="286"/> + <source>Compiled against libmad version:</source> + <translation type="unfinished">הודר כנגדlibmad גירסה:</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="290"/> + <source>Written by: Ilya Kotov <forkotov02@ya.ru></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="291"/> + <source>Source code based on mq3 and madplay projects</source> + <translation type="unfinished">קוד מקור מבוסס על המיזמים mq3 וגם madplay</translation> + </message> +</context> +<context> + <name>MPEGMetaDataModel</name> + <message> + <location filename="../mpegmetadatamodel.cpp" line="70"/> + <source>Format</source> + <translation>פורמט</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="72"/> + <source>Bitrate</source> + <translation>שיעור סיביות</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="72"/> + <source>kbps</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="74"/> + <source>Sample rate</source> + <translation>שיעור דגימה</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="74"/> + <source>Hz</source> + <translation>הרץ</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="78"/> + <location filename="../mpegmetadatamodel.cpp" line="81"/> + <location filename="../mpegmetadatamodel.cpp" line="84"/> + <location filename="../mpegmetadatamodel.cpp" line="87"/> + <source>Mode</source> + <translation>מצב</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="90"/> + <source>KB</source> + <translation>ק״ב</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="91"/> + <source>File size</source> + <translation>גודל קובץ</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="93"/> + <location filename="../mpegmetadatamodel.cpp" line="95"/> + <source>Protection</source> + <translation>הגנה</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="93"/> + <location filename="../mpegmetadatamodel.cpp" line="97"/> + <location filename="../mpegmetadatamodel.cpp" line="101"/> + <source>Yes</source> + <translation>כן</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="95"/> + <location filename="../mpegmetadatamodel.cpp" line="99"/> + <location filename="../mpegmetadatamodel.cpp" line="103"/> + <source>No</source> + <translation>לא</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="97"/> + <location filename="../mpegmetadatamodel.cpp" line="99"/> + <source>Copyright</source> + <translation>זכויות יוצרים</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="101"/> + <location filename="../mpegmetadatamodel.cpp" line="103"/> + <source>Original</source> + <translation>מקורי</translation> + </message> +</context> +<context> + <name>SettingsDialog</name> + <message> + <location filename="../settingsdialog.ui" line="14"/> + <source>MPEG Plugin Settings</source> + <translation>הגדרות תוסף MPEG</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="29"/> + <source>Decoder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="35"/> + <source>MAD</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="42"/> + <source>MPG123</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="52"/> + <source>Tag Priority</source> + <translation>עדיפות תגית</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="64"/> + <source>First:</source> + <translation>ראשונה:</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="84"/> + <location filename="../settingsdialog.ui" line="133"/> + <location filename="../settingsdialog.ui" line="182"/> + <source>ID3v1</source> + <translation>ID3v1</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="89"/> + <location filename="../settingsdialog.ui" line="138"/> + <location filename="../settingsdialog.ui" line="187"/> + <source>ID3v2</source> + <translation>ID3v2</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="94"/> + <location filename="../settingsdialog.ui" line="143"/> + <location filename="../settingsdialog.ui" line="192"/> + <source>APE</source> + <translation>APE</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="99"/> + <location filename="../settingsdialog.ui" line="148"/> + <location filename="../settingsdialog.ui" line="197"/> + <source>Disabled</source> + <translation>מנוטרלת</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="113"/> + <source>Second:</source> + <translation>שניה:</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="162"/> + <source>Third:</source> + <translation>שלישית:</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="221"/> + <source>Encodings</source> + <translation>קידוד</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="233"/> + <source>ID3v1 encoding:</source> + <translation>קידוד ID3v1:</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="259"/> + <source>ID3v2 encoding:</source> + <translation>קידוד ID3v2:</translation> + </message> +</context> +</TS> diff --git a/src/plugins/Input/mpeg/translations/mpeg_plugin_hu.ts b/src/plugins/Input/mpeg/translations/mpeg_plugin_hu.ts new file mode 100644 index 000000000..b6288a31e --- /dev/null +++ b/src/plugins/Input/mpeg/translations/mpeg_plugin_hu.ts @@ -0,0 +1,206 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0" language="hu_HU"> +<context> + <name>DecoderMPEGFactory</name> + <message> + <location filename="../decodermpegfactory.cpp" line="117"/> + <source>MPEG Plugin</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="120"/> + <source>MPEG Files</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="284"/> + <source>About MPEG Audio Plugin</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="285"/> + <source>Qmmp MPEG Audio Plugin</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="286"/> + <source>Compiled against libmad version:</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="290"/> + <source>Written by: Ilya Kotov <forkotov02@ya.ru></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="291"/> + <source>Source code based on mq3 and madplay projects</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>MPEGMetaDataModel</name> + <message> + <location filename="../mpegmetadatamodel.cpp" line="70"/> + <source>Format</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="72"/> + <source>Bitrate</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="72"/> + <source>kbps</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="74"/> + <source>Sample rate</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="74"/> + <source>Hz</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="78"/> + <location filename="../mpegmetadatamodel.cpp" line="81"/> + <location filename="../mpegmetadatamodel.cpp" line="84"/> + <location filename="../mpegmetadatamodel.cpp" line="87"/> + <source>Mode</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="90"/> + <source>KB</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="91"/> + <source>File size</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="93"/> + <location filename="../mpegmetadatamodel.cpp" line="95"/> + <source>Protection</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="93"/> + <location filename="../mpegmetadatamodel.cpp" line="97"/> + <location filename="../mpegmetadatamodel.cpp" line="101"/> + <source>Yes</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="95"/> + <location filename="../mpegmetadatamodel.cpp" line="99"/> + <location filename="../mpegmetadatamodel.cpp" line="103"/> + <source>No</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="97"/> + <location filename="../mpegmetadatamodel.cpp" line="99"/> + <source>Copyright</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="101"/> + <location filename="../mpegmetadatamodel.cpp" line="103"/> + <source>Original</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>SettingsDialog</name> + <message> + <location filename="../settingsdialog.ui" line="14"/> + <source>MPEG Plugin Settings</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="29"/> + <source>Decoder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="35"/> + <source>MAD</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="42"/> + <source>MPG123</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="52"/> + <source>Tag Priority</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="64"/> + <source>First:</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="84"/> + <location filename="../settingsdialog.ui" line="133"/> + <location filename="../settingsdialog.ui" line="182"/> + <source>ID3v1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="89"/> + <location filename="../settingsdialog.ui" line="138"/> + <location filename="../settingsdialog.ui" line="187"/> + <source>ID3v2</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="94"/> + <location filename="../settingsdialog.ui" line="143"/> + <location filename="../settingsdialog.ui" line="192"/> + <source>APE</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="99"/> + <location filename="../settingsdialog.ui" line="148"/> + <location filename="../settingsdialog.ui" line="197"/> + <source>Disabled</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="113"/> + <source>Second:</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="162"/> + <source>Third:</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="221"/> + <source>Encodings</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="233"/> + <source>ID3v1 encoding:</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="259"/> + <source>ID3v2 encoding:</source> + <translation type="unfinished"></translation> + </message> +</context> +</TS> diff --git a/src/plugins/Input/mpeg/translations/mpeg_plugin_id.ts b/src/plugins/Input/mpeg/translations/mpeg_plugin_id.ts new file mode 100644 index 000000000..f0e33d4f3 --- /dev/null +++ b/src/plugins/Input/mpeg/translations/mpeg_plugin_id.ts @@ -0,0 +1,206 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0" language="id"> +<context> + <name>DecoderMPEGFactory</name> + <message> + <location filename="../decodermpegfactory.cpp" line="117"/> + <source>MPEG Plugin</source> + <translation type="unfinished">Plugin MPEG</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="120"/> + <source>MPEG Files</source> + <translation type="unfinished">File MPEG</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="284"/> + <source>About MPEG Audio Plugin</source> + <translation type="unfinished">Tentang Plugin Audio MPEG</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="285"/> + <source>Qmmp MPEG Audio Plugin</source> + <translation type="unfinished">Plugin Audio MPEG Qmmp</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="286"/> + <source>Compiled against libmad version:</source> + <translation type="unfinished">Dikompilasi terhadap versi libmad:</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="290"/> + <source>Written by: Ilya Kotov <forkotov02@ya.ru></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="291"/> + <source>Source code based on mq3 and madplay projects</source> + <translation type="unfinished">Kode sumber berdasarkan pada mq3 dan proyek madplay</translation> + </message> +</context> +<context> + <name>MPEGMetaDataModel</name> + <message> + <location filename="../mpegmetadatamodel.cpp" line="70"/> + <source>Format</source> + <translation>Format</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="72"/> + <source>Bitrate</source> + <translation>Bitrate</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="72"/> + <source>kbps</source> + <translation>kbps</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="74"/> + <source>Sample rate</source> + <translation>Sample rate</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="74"/> + <source>Hz</source> + <translation>Hz</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="78"/> + <location filename="../mpegmetadatamodel.cpp" line="81"/> + <location filename="../mpegmetadatamodel.cpp" line="84"/> + <location filename="../mpegmetadatamodel.cpp" line="87"/> + <source>Mode</source> + <translation>Mode</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="90"/> + <source>KB</source> + <translation>KB</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="91"/> + <source>File size</source> + <translation>Ukuran file</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="93"/> + <location filename="../mpegmetadatamodel.cpp" line="95"/> + <source>Protection</source> + <translation>Perlindungan</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="93"/> + <location filename="../mpegmetadatamodel.cpp" line="97"/> + <location filename="../mpegmetadatamodel.cpp" line="101"/> + <source>Yes</source> + <translation>Ya</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="95"/> + <location filename="../mpegmetadatamodel.cpp" line="99"/> + <location filename="../mpegmetadatamodel.cpp" line="103"/> + <source>No</source> + <translation>Tidak</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="97"/> + <location filename="../mpegmetadatamodel.cpp" line="99"/> + <source>Copyright</source> + <translation>Hak cipta</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="101"/> + <location filename="../mpegmetadatamodel.cpp" line="103"/> + <source>Original</source> + <translation>Asli</translation> + </message> +</context> +<context> + <name>SettingsDialog</name> + <message> + <location filename="../settingsdialog.ui" line="14"/> + <source>MPEG Plugin Settings</source> + <translation>Setelan Plugin MPEG</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="29"/> + <source>Decoder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="35"/> + <source>MAD</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="42"/> + <source>MPG123</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="52"/> + <source>Tag Priority</source> + <translation>Prioritas Tag</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="64"/> + <source>First:</source> + <translation>Pertama:</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="84"/> + <location filename="../settingsdialog.ui" line="133"/> + <location filename="../settingsdialog.ui" line="182"/> + <source>ID3v1</source> + <translation>ID3v1</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="89"/> + <location filename="../settingsdialog.ui" line="138"/> + <location filename="../settingsdialog.ui" line="187"/> + <source>ID3v2</source> + <translation>ID3v2</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="94"/> + <location filename="../settingsdialog.ui" line="143"/> + <location filename="../settingsdialog.ui" line="192"/> + <source>APE</source> + <translation>APE</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="99"/> + <location filename="../settingsdialog.ui" line="148"/> + <location filename="../settingsdialog.ui" line="197"/> + <source>Disabled</source> + <translation>Dinonaktifkan</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="113"/> + <source>Second:</source> + <translation>Detik:</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="162"/> + <source>Third:</source> + <translation>Ketiga:</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="221"/> + <source>Encodings</source> + <translation>Pengkodean</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="233"/> + <source>ID3v1 encoding:</source> + <translation>Pengkodean ID3v1:</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="259"/> + <source>ID3v2 encoding:</source> + <translation>Pengkodean ID3v2:</translation> + </message> +</context> +</TS> diff --git a/src/plugins/Input/mpeg/translations/mpeg_plugin_it.ts b/src/plugins/Input/mpeg/translations/mpeg_plugin_it.ts new file mode 100644 index 000000000..947657dc8 --- /dev/null +++ b/src/plugins/Input/mpeg/translations/mpeg_plugin_it.ts @@ -0,0 +1,206 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0" language="it"> +<context> + <name>DecoderMPEGFactory</name> + <message> + <location filename="../decodermpegfactory.cpp" line="117"/> + <source>MPEG Plugin</source> + <translation type="unfinished">Modulo MPEG</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="120"/> + <source>MPEG Files</source> + <translation type="unfinished">Brani MPEG</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="284"/> + <source>About MPEG Audio Plugin</source> + <translation type="unfinished">Info sul modulo audio MPEG</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="285"/> + <source>Qmmp MPEG Audio Plugin</source> + <translation type="unfinished">Modulo audio MPEG per Qmmp</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="286"/> + <source>Compiled against libmad version:</source> + <translation type="unfinished">Compilato con libmad-Version:</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="290"/> + <source>Written by: Ilya Kotov <forkotov02@ya.ru></source> + <translation type="unfinished">Autore: Ilya Kotov <forkotov02@ya.ru></translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="291"/> + <source>Source code based on mq3 and madplay projects</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>MPEGMetaDataModel</name> + <message> + <location filename="../mpegmetadatamodel.cpp" line="70"/> + <source>Format</source> + <translation>Formato</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="72"/> + <source>Bitrate</source> + <translation>bit al secondo</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="72"/> + <source>kbps</source> + <translation>kbps</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="74"/> + <source>Sample rate</source> + <translation>Campionamento</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="74"/> + <source>Hz</source> + <translation>Hz</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="78"/> + <location filename="../mpegmetadatamodel.cpp" line="81"/> + <location filename="../mpegmetadatamodel.cpp" line="84"/> + <location filename="../mpegmetadatamodel.cpp" line="87"/> + <source>Mode</source> + <translation>Modo</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="90"/> + <source>KB</source> + <translation>KB</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="91"/> + <source>File size</source> + <translation>Dimensione file</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="93"/> + <location filename="../mpegmetadatamodel.cpp" line="95"/> + <source>Protection</source> + <translation>Protezione</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="93"/> + <location filename="../mpegmetadatamodel.cpp" line="97"/> + <location filename="../mpegmetadatamodel.cpp" line="101"/> + <source>Yes</source> + <translation>Sì</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="95"/> + <location filename="../mpegmetadatamodel.cpp" line="99"/> + <location filename="../mpegmetadatamodel.cpp" line="103"/> + <source>No</source> + <translation>No</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="97"/> + <location filename="../mpegmetadatamodel.cpp" line="99"/> + <source>Copyright</source> + <translation>Copyright</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="101"/> + <location filename="../mpegmetadatamodel.cpp" line="103"/> + <source>Original</source> + <translation>Originale</translation> + </message> +</context> +<context> + <name>SettingsDialog</name> + <message> + <location filename="../settingsdialog.ui" line="14"/> + <source>MPEG Plugin Settings</source> + <translation>Impostazioni modulo MPEG</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="84"/> + <location filename="../settingsdialog.ui" line="133"/> + <location filename="../settingsdialog.ui" line="182"/> + <source>ID3v1</source> + <translation>ID3v1</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="89"/> + <location filename="../settingsdialog.ui" line="138"/> + <location filename="../settingsdialog.ui" line="187"/> + <source>ID3v2</source> + <translation>ID3v2</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="233"/> + <source>ID3v1 encoding:</source> + <translation>Codifica ID3v1:</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="259"/> + <source>ID3v2 encoding:</source> + <translation>Codifica ID3v2:</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="52"/> + <source>Tag Priority</source> + <translation>Priorità etichettatura</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="29"/> + <source>Decoder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="35"/> + <source>MAD</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="42"/> + <source>MPG123</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="64"/> + <source>First:</source> + <translation>Prima:</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="94"/> + <location filename="../settingsdialog.ui" line="143"/> + <location filename="../settingsdialog.ui" line="192"/> + <source>APE</source> + <translation>APE</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="99"/> + <location filename="../settingsdialog.ui" line="148"/> + <location filename="../settingsdialog.ui" line="197"/> + <source>Disabled</source> + <translation>Disabilitata</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="113"/> + <source>Second:</source> + <translation>Seconda:</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="162"/> + <source>Third:</source> + <translation>Terza:</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="221"/> + <source>Encodings</source> + <translation>Codifiche</translation> + </message> +</context> +</TS> diff --git a/src/plugins/Input/mpeg/translations/mpeg_plugin_ja.ts b/src/plugins/Input/mpeg/translations/mpeg_plugin_ja.ts new file mode 100644 index 000000000..762c48b2a --- /dev/null +++ b/src/plugins/Input/mpeg/translations/mpeg_plugin_ja.ts @@ -0,0 +1,206 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0" language="ja_JP"> +<context> + <name>DecoderMPEGFactory</name> + <message> + <location filename="../decodermpegfactory.cpp" line="117"/> + <source>MPEG Plugin</source> + <translation type="unfinished">MPEG プラグイン</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="120"/> + <source>MPEG Files</source> + <translation type="unfinished">MPEG ファイル</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="284"/> + <source>About MPEG Audio Plugin</source> + <translation type="unfinished">MPEG 音響プラグインについて</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="285"/> + <source>Qmmp MPEG Audio Plugin</source> + <translation type="unfinished">QMMP MPEG 音響プラグイン</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="286"/> + <source>Compiled against libmad version:</source> + <translation type="unfinished">コンパイル時に使われた libmad の版はつぎのとおり:</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="290"/> + <source>Written by: Ilya Kotov <forkotov02@ya.ru></source> + <translation type="unfinished">制作: Илья Котов (Ilya Kotov) <forkotov02@ya.ru></translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="291"/> + <source>Source code based on mq3 and madplay projects</source> + <translation type="unfinished">ソースコードは mq3 と madplay の両プロジェクトから流用</translation> + </message> +</context> +<context> + <name>MPEGMetaDataModel</name> + <message> + <location filename="../mpegmetadatamodel.cpp" line="70"/> + <source>Format</source> + <translation>形式</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="72"/> + <source>Bitrate</source> + <translation>ビットレート</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="72"/> + <source>kbps</source> + <translation>キロビット毎秒</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="74"/> + <source>Sample rate</source> + <translation>サンプルレート</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="74"/> + <source>Hz</source> + <translation>Hz</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="78"/> + <location filename="../mpegmetadatamodel.cpp" line="81"/> + <location filename="../mpegmetadatamodel.cpp" line="84"/> + <location filename="../mpegmetadatamodel.cpp" line="87"/> + <source>Mode</source> + <translation>モード</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="90"/> + <source>KB</source> + <translation>KiB</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="91"/> + <source>File size</source> + <translation>ファイルの大きさ</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="93"/> + <location filename="../mpegmetadatamodel.cpp" line="95"/> + <source>Protection</source> + <translation>保護</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="93"/> + <location filename="../mpegmetadatamodel.cpp" line="97"/> + <location filename="../mpegmetadatamodel.cpp" line="101"/> + <source>Yes</source> + <translation>する</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="95"/> + <location filename="../mpegmetadatamodel.cpp" line="99"/> + <location filename="../mpegmetadatamodel.cpp" line="103"/> + <source>No</source> + <translation>しない</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="97"/> + <location filename="../mpegmetadatamodel.cpp" line="99"/> + <source>Copyright</source> + <translation>著作権</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="101"/> + <location filename="../mpegmetadatamodel.cpp" line="103"/> + <source>Original</source> + <translation>原作</translation> + </message> +</context> +<context> + <name>SettingsDialog</name> + <message> + <location filename="../settingsdialog.ui" line="14"/> + <source>MPEG Plugin Settings</source> + <translation>MPEG プラグイン設定</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="29"/> + <source>Decoder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="35"/> + <source>MAD</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="42"/> + <source>MPG123</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="52"/> + <source>Tag Priority</source> + <translation>タグ優先度</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="64"/> + <source>First:</source> + <translation>第一:</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="84"/> + <location filename="../settingsdialog.ui" line="133"/> + <location filename="../settingsdialog.ui" line="182"/> + <source>ID3v1</source> + <translation>ID3v1</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="89"/> + <location filename="../settingsdialog.ui" line="138"/> + <location filename="../settingsdialog.ui" line="187"/> + <source>ID3v2</source> + <translation>ID3v2</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="94"/> + <location filename="../settingsdialog.ui" line="143"/> + <location filename="../settingsdialog.ui" line="192"/> + <source>APE</source> + <translation>APE</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="99"/> + <location filename="../settingsdialog.ui" line="148"/> + <location filename="../settingsdialog.ui" line="197"/> + <source>Disabled</source> + <translation>無効</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="113"/> + <source>Second:</source> + <translation>第二:</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="162"/> + <source>Third:</source> + <translation>第三:</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="221"/> + <source>Encodings</source> + <translation>文字符号化の形式</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="233"/> + <source>ID3v1 encoding:</source> + <translation>ID3v1 用文字符号化形式:</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="259"/> + <source>ID3v2 encoding:</source> + <translation>ID3v2 用文字符号化形式:</translation> + </message> +</context> +</TS> diff --git a/src/plugins/Input/mpeg/translations/mpeg_plugin_kk.ts b/src/plugins/Input/mpeg/translations/mpeg_plugin_kk.ts new file mode 100644 index 000000000..59a24131a --- /dev/null +++ b/src/plugins/Input/mpeg/translations/mpeg_plugin_kk.ts @@ -0,0 +1,206 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0" language="kk_KZ"> +<context> + <name>DecoderMPEGFactory</name> + <message> + <location filename="../decodermpegfactory.cpp" line="117"/> + <source>MPEG Plugin</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="120"/> + <source>MPEG Files</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="284"/> + <source>About MPEG Audio Plugin</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="285"/> + <source>Qmmp MPEG Audio Plugin</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="286"/> + <source>Compiled against libmad version:</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="290"/> + <source>Written by: Ilya Kotov <forkotov02@ya.ru></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="291"/> + <source>Source code based on mq3 and madplay projects</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>MPEGMetaDataModel</name> + <message> + <location filename="../mpegmetadatamodel.cpp" line="70"/> + <source>Format</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="72"/> + <source>Bitrate</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="72"/> + <source>kbps</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="74"/> + <source>Sample rate</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="74"/> + <source>Hz</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="78"/> + <location filename="../mpegmetadatamodel.cpp" line="81"/> + <location filename="../mpegmetadatamodel.cpp" line="84"/> + <location filename="../mpegmetadatamodel.cpp" line="87"/> + <source>Mode</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="90"/> + <source>KB</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="91"/> + <source>File size</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="93"/> + <location filename="../mpegmetadatamodel.cpp" line="95"/> + <source>Protection</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="93"/> + <location filename="../mpegmetadatamodel.cpp" line="97"/> + <location filename="../mpegmetadatamodel.cpp" line="101"/> + <source>Yes</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="95"/> + <location filename="../mpegmetadatamodel.cpp" line="99"/> + <location filename="../mpegmetadatamodel.cpp" line="103"/> + <source>No</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="97"/> + <location filename="../mpegmetadatamodel.cpp" line="99"/> + <source>Copyright</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="101"/> + <location filename="../mpegmetadatamodel.cpp" line="103"/> + <source>Original</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>SettingsDialog</name> + <message> + <location filename="../settingsdialog.ui" line="14"/> + <source>MPEG Plugin Settings</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="29"/> + <source>Decoder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="35"/> + <source>MAD</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="42"/> + <source>MPG123</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="52"/> + <source>Tag Priority</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="64"/> + <source>First:</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="84"/> + <location filename="../settingsdialog.ui" line="133"/> + <location filename="../settingsdialog.ui" line="182"/> + <source>ID3v1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="89"/> + <location filename="../settingsdialog.ui" line="138"/> + <location filename="../settingsdialog.ui" line="187"/> + <source>ID3v2</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="94"/> + <location filename="../settingsdialog.ui" line="143"/> + <location filename="../settingsdialog.ui" line="192"/> + <source>APE</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="99"/> + <location filename="../settingsdialog.ui" line="148"/> + <location filename="../settingsdialog.ui" line="197"/> + <source>Disabled</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="113"/> + <source>Second:</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="162"/> + <source>Third:</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="221"/> + <source>Encodings</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="233"/> + <source>ID3v1 encoding:</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="259"/> + <source>ID3v2 encoding:</source> + <translation type="unfinished"></translation> + </message> +</context> +</TS> diff --git a/src/plugins/Input/mpeg/translations/mpeg_plugin_lt.ts b/src/plugins/Input/mpeg/translations/mpeg_plugin_lt.ts new file mode 100644 index 000000000..c73586a37 --- /dev/null +++ b/src/plugins/Input/mpeg/translations/mpeg_plugin_lt.ts @@ -0,0 +1,206 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0" language="lt"> +<context> + <name>DecoderMPEGFactory</name> + <message> + <location filename="../decodermpegfactory.cpp" line="117"/> + <source>MPEG Plugin</source> + <translation type="unfinished">MPEG įskiepis</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="120"/> + <source>MPEG Files</source> + <translation type="unfinished">MPEG bylos</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="284"/> + <source>About MPEG Audio Plugin</source> + <translation type="unfinished">Apie MPEG audio įskiepį</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="285"/> + <source>Qmmp MPEG Audio Plugin</source> + <translation type="unfinished">Qmmp MPEG įskiepis</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="286"/> + <source>Compiled against libmad version:</source> + <translation type="unfinished">Sukurta libmad pagrindu:</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="290"/> + <source>Written by: Ilya Kotov <forkotov02@ya.ru></source> + <translation type="unfinished">Sukūrė: Ilya Kotov <forkotov02@ya.ru></translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="291"/> + <source>Source code based on mq3 and madplay projects</source> + <translation type="unfinished">Kodas sukurtas mq3 ir madplay projektų kodais </translation> + </message> +</context> +<context> + <name>MPEGMetaDataModel</name> + <message> + <location filename="../mpegmetadatamodel.cpp" line="70"/> + <source>Format</source> + <translation>Formatas</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="72"/> + <source>Bitrate</source> + <translation>Kokybė</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="72"/> + <source>kbps</source> + <translation>kbps</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="74"/> + <source>Sample rate</source> + <translation>Dažnis</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="74"/> + <source>Hz</source> + <translation>Hz</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="78"/> + <location filename="../mpegmetadatamodel.cpp" line="81"/> + <location filename="../mpegmetadatamodel.cpp" line="84"/> + <location filename="../mpegmetadatamodel.cpp" line="87"/> + <source>Mode</source> + <translation>Metodas</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="90"/> + <source>KB</source> + <translation>КB</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="91"/> + <source>File size</source> + <translation>Bylos dydis</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="93"/> + <location filename="../mpegmetadatamodel.cpp" line="95"/> + <source>Protection</source> + <translation>Apsauga</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="93"/> + <location filename="../mpegmetadatamodel.cpp" line="97"/> + <location filename="../mpegmetadatamodel.cpp" line="101"/> + <source>Yes</source> + <translation>Taip</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="95"/> + <location filename="../mpegmetadatamodel.cpp" line="99"/> + <location filename="../mpegmetadatamodel.cpp" line="103"/> + <source>No</source> + <translation>Ne</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="97"/> + <location filename="../mpegmetadatamodel.cpp" line="99"/> + <source>Copyright</source> + <translation>Copyright</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="101"/> + <location filename="../mpegmetadatamodel.cpp" line="103"/> + <source>Original</source> + <translation>Originalas</translation> + </message> +</context> +<context> + <name>SettingsDialog</name> + <message> + <location filename="../settingsdialog.ui" line="84"/> + <location filename="../settingsdialog.ui" line="133"/> + <location filename="../settingsdialog.ui" line="182"/> + <source>ID3v1</source> + <translation>ID3v1</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="89"/> + <location filename="../settingsdialog.ui" line="138"/> + <location filename="../settingsdialog.ui" line="187"/> + <source>ID3v2</source> + <translation>ID3v2</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="233"/> + <source>ID3v1 encoding:</source> + <translation>ID3v1 koduotė:</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="259"/> + <source>ID3v2 encoding:</source> + <translation>ID3v2 koduotė:</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="14"/> + <source>MPEG Plugin Settings</source> + <translation>MPEG įskiepio nustatymai</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="29"/> + <source>Decoder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="35"/> + <source>MAD</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="42"/> + <source>MPG123</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="52"/> + <source>Tag Priority</source> + <translation>Tag pirmenybė</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="64"/> + <source>First:</source> + <translation>Pirmas:</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="94"/> + <location filename="../settingsdialog.ui" line="143"/> + <location filename="../settingsdialog.ui" line="192"/> + <source>APE</source> + <translation>APE</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="99"/> + <location filename="../settingsdialog.ui" line="148"/> + <location filename="../settingsdialog.ui" line="197"/> + <source>Disabled</source> + <translation>Išjungta</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="113"/> + <source>Second:</source> + <translation>Antras:</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="162"/> + <source>Third:</source> + <translation>Trečias:</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="221"/> + <source>Encodings</source> + <translation>Koduotės</translation> + </message> +</context> +</TS> diff --git a/src/plugins/Input/mpeg/translations/mpeg_plugin_nl.ts b/src/plugins/Input/mpeg/translations/mpeg_plugin_nl.ts new file mode 100644 index 000000000..eb4188712 --- /dev/null +++ b/src/plugins/Input/mpeg/translations/mpeg_plugin_nl.ts @@ -0,0 +1,206 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0" language="nl"> +<context> + <name>DecoderMPEGFactory</name> + <message> + <location filename="../decodermpegfactory.cpp" line="117"/> + <source>MPEG Plugin</source> + <translation type="unfinished">MPEG Module</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="120"/> + <source>MPEG Files</source> + <translation type="unfinished">MPEG Bestanden</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="284"/> + <source>About MPEG Audio Plugin</source> + <translation type="unfinished">Over de MPEG Audio Module</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="285"/> + <source>Qmmp MPEG Audio Plugin</source> + <translation type="unfinished">MPEG Audio Module voor Qmmp</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="286"/> + <source>Compiled against libmad version:</source> + <translation type="unfinished">Gecompileerd tegen libmad met versie:</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="290"/> + <source>Written by: Ilya Kotov <forkotov02@ya.ru></source> + <translation type="unfinished">Auteur: Ilya Kotov <forkotov02@ya.ru></translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="291"/> + <source>Source code based on mq3 and madplay projects</source> + <translation type="unfinished">Broncode gebasseerd op 'mq3' en 'madplay' projecten</translation> + </message> +</context> +<context> + <name>MPEGMetaDataModel</name> + <message> + <location filename="../mpegmetadatamodel.cpp" line="70"/> + <source>Format</source> + <translation>Formaat</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="72"/> + <source>Bitrate</source> + <translation>Bitsnelheid</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="72"/> + <source>kbps</source> + <translation></translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="74"/> + <source>Sample rate</source> + <translation>Sample frequentie</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="74"/> + <source>Hz</source> + <translation></translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="78"/> + <location filename="../mpegmetadatamodel.cpp" line="81"/> + <location filename="../mpegmetadatamodel.cpp" line="84"/> + <location filename="../mpegmetadatamodel.cpp" line="87"/> + <source>Mode</source> + <translation>Stand</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="90"/> + <source>KB</source> + <translation></translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="91"/> + <source>File size</source> + <translation>Bestandsgrootte</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="93"/> + <location filename="../mpegmetadatamodel.cpp" line="95"/> + <source>Protection</source> + <translation>Bescherming</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="93"/> + <location filename="../mpegmetadatamodel.cpp" line="97"/> + <location filename="../mpegmetadatamodel.cpp" line="101"/> + <source>Yes</source> + <translation>Ja</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="95"/> + <location filename="../mpegmetadatamodel.cpp" line="99"/> + <location filename="../mpegmetadatamodel.cpp" line="103"/> + <source>No</source> + <translation>Nee</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="97"/> + <location filename="../mpegmetadatamodel.cpp" line="99"/> + <source>Copyright</source> + <translation></translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="101"/> + <location filename="../mpegmetadatamodel.cpp" line="103"/> + <source>Original</source> + <translation>Origineel</translation> + </message> +</context> +<context> + <name>SettingsDialog</name> + <message> + <location filename="../settingsdialog.ui" line="14"/> + <source>MPEG Plugin Settings</source> + <translation>MPEG Module Instellingen</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="84"/> + <location filename="../settingsdialog.ui" line="133"/> + <location filename="../settingsdialog.ui" line="182"/> + <source>ID3v1</source> + <translation></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="89"/> + <location filename="../settingsdialog.ui" line="138"/> + <location filename="../settingsdialog.ui" line="187"/> + <source>ID3v2</source> + <translation></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="233"/> + <source>ID3v1 encoding:</source> + <translation>ID3v1 codering:</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="259"/> + <source>ID3v2 encoding:</source> + <translation>ID3v2 codering:</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="52"/> + <source>Tag Priority</source> + <translation>Tag prioriteit</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="29"/> + <source>Decoder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="35"/> + <source>MAD</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="42"/> + <source>MPG123</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="64"/> + <source>First:</source> + <translation>Primair:</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="94"/> + <location filename="../settingsdialog.ui" line="143"/> + <location filename="../settingsdialog.ui" line="192"/> + <source>APE</source> + <translation></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="99"/> + <location filename="../settingsdialog.ui" line="148"/> + <location filename="../settingsdialog.ui" line="197"/> + <source>Disabled</source> + <translation>Uitgeschakeld</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="113"/> + <source>Second:</source> + <translation>Secundair:</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="162"/> + <source>Third:</source> + <translation>Tertiair:</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="221"/> + <source>Encodings</source> + <translation>Codering</translation> + </message> +</context> +</TS> diff --git a/src/plugins/Input/mpeg/translations/mpeg_plugin_pl_PL.ts b/src/plugins/Input/mpeg/translations/mpeg_plugin_pl_PL.ts new file mode 100644 index 000000000..4b7bb1c2c --- /dev/null +++ b/src/plugins/Input/mpeg/translations/mpeg_plugin_pl_PL.ts @@ -0,0 +1,206 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0" language="pl_PL"> +<context> + <name>DecoderMPEGFactory</name> + <message> + <location filename="../decodermpegfactory.cpp" line="117"/> + <source>MPEG Plugin</source> + <translation type="unfinished">Wtyczka MPEG</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="120"/> + <source>MPEG Files</source> + <translation type="unfinished">Pliki MPEG</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="284"/> + <source>About MPEG Audio Plugin</source> + <translation type="unfinished">O wtyczce Audio MPEG</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="285"/> + <source>Qmmp MPEG Audio Plugin</source> + <translation type="unfinished">Wtyczka MPEG Audio dla Qmmp</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="286"/> + <source>Compiled against libmad version:</source> + <translation type="unfinished">Skompilowane przy użyciu biblioteki libmad w wersji:</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="290"/> + <source>Written by: Ilya Kotov <forkotov02@ya.ru></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="291"/> + <source>Source code based on mq3 and madplay projects</source> + <translation type="unfinished">Kod źródłowy oparty na projektach mq3 oraz madplay</translation> + </message> +</context> +<context> + <name>MPEGMetaDataModel</name> + <message> + <location filename="../mpegmetadatamodel.cpp" line="70"/> + <source>Format</source> + <translation>Format</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="72"/> + <source>Bitrate</source> + <translation>Szybkość transmisji</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="72"/> + <source>kbps</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="74"/> + <source>Sample rate</source> + <translation>Próbkowanie</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="74"/> + <source>Hz</source> + <translation>Hz</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="78"/> + <location filename="../mpegmetadatamodel.cpp" line="81"/> + <location filename="../mpegmetadatamodel.cpp" line="84"/> + <location filename="../mpegmetadatamodel.cpp" line="87"/> + <source>Mode</source> + <translation>Tryb</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="90"/> + <source>KB</source> + <translation>KB</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="91"/> + <source>File size</source> + <translation>Wielkość pliku</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="93"/> + <location filename="../mpegmetadatamodel.cpp" line="95"/> + <source>Protection</source> + <translation>Zabezpieczenie</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="93"/> + <location filename="../mpegmetadatamodel.cpp" line="97"/> + <location filename="../mpegmetadatamodel.cpp" line="101"/> + <source>Yes</source> + <translation>Tak</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="95"/> + <location filename="../mpegmetadatamodel.cpp" line="99"/> + <location filename="../mpegmetadatamodel.cpp" line="103"/> + <source>No</source> + <translation>Nie</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="97"/> + <location filename="../mpegmetadatamodel.cpp" line="99"/> + <source>Copyright</source> + <translation>Prawa autorskie</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="101"/> + <location filename="../mpegmetadatamodel.cpp" line="103"/> + <source>Original</source> + <translation>Oryginał</translation> + </message> +</context> +<context> + <name>SettingsDialog</name> + <message> + <location filename="../settingsdialog.ui" line="14"/> + <source>MPEG Plugin Settings</source> + <translation>Ustawienia wtyczki MPEG</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="29"/> + <source>Decoder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="35"/> + <source>MAD</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="42"/> + <source>MPG123</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="52"/> + <source>Tag Priority</source> + <translation>Priorytet tagów</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="64"/> + <source>First:</source> + <translation>Pierwszy:</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="84"/> + <location filename="../settingsdialog.ui" line="133"/> + <location filename="../settingsdialog.ui" line="182"/> + <source>ID3v1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="89"/> + <location filename="../settingsdialog.ui" line="138"/> + <location filename="../settingsdialog.ui" line="187"/> + <source>ID3v2</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="94"/> + <location filename="../settingsdialog.ui" line="143"/> + <location filename="../settingsdialog.ui" line="192"/> + <source>APE</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="99"/> + <location filename="../settingsdialog.ui" line="148"/> + <location filename="../settingsdialog.ui" line="197"/> + <source>Disabled</source> + <translation>Wyłączone</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="113"/> + <source>Second:</source> + <translation>Drugi:</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="162"/> + <source>Third:</source> + <translation>Trzeci:</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="221"/> + <source>Encodings</source> + <translation>Kodowania</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="233"/> + <source>ID3v1 encoding:</source> + <translation>Kodowanie ID3v1:</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="259"/> + <source>ID3v2 encoding:</source> + <translation>Kodowanie ID3v2:</translation> + </message> +</context> +</TS> diff --git a/src/plugins/Input/mpeg/translations/mpeg_plugin_pt.ts b/src/plugins/Input/mpeg/translations/mpeg_plugin_pt.ts new file mode 100644 index 000000000..ca9d97497 --- /dev/null +++ b/src/plugins/Input/mpeg/translations/mpeg_plugin_pt.ts @@ -0,0 +1,206 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0" language="pt"> +<context> + <name>DecoderMPEGFactory</name> + <message> + <location filename="../decodermpegfactory.cpp" line="117"/> + <source>MPEG Plugin</source> + <translation type="unfinished">Suplemento MPEG</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="120"/> + <source>MPEG Files</source> + <translation type="unfinished">Ficheiros MPEG</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="284"/> + <source>About MPEG Audio Plugin</source> + <translation type="unfinished">Sobre o suplemento MPEG Audio</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="285"/> + <source>Qmmp MPEG Audio Plugin</source> + <translation type="unfinished">Suplemento Qmmp MPEG Audio</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="286"/> + <source>Compiled against libmad version:</source> + <translation type="unfinished">Compilado com a versão libmad:</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="290"/> + <source>Written by: Ilya Kotov <forkotov02@ya.ru></source> + <translation type="unfinished">Desenvolvido por: Ilya Kotov <forkotov02@ya.ru></translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="291"/> + <source>Source code based on mq3 and madplay projects</source> + <translation type="unfinished">Baseado no código fonte dos projetos mq3 e madplay</translation> + </message> +</context> +<context> + <name>MPEGMetaDataModel</name> + <message> + <location filename="../mpegmetadatamodel.cpp" line="70"/> + <source>Format</source> + <translation>Formato</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="72"/> + <source>Bitrate</source> + <translation>Taxa de dados</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="72"/> + <source>kbps</source> + <translation>kbps</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="74"/> + <source>Sample rate</source> + <translation>Frequência</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="74"/> + <source>Hz</source> + <translation>Hz</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="78"/> + <location filename="../mpegmetadatamodel.cpp" line="81"/> + <location filename="../mpegmetadatamodel.cpp" line="84"/> + <location filename="../mpegmetadatamodel.cpp" line="87"/> + <source>Mode</source> + <translation>Modo</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="90"/> + <source>KB</source> + <translation>KB</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="91"/> + <source>File size</source> + <translation>Tamanho do ficheiro</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="93"/> + <location filename="../mpegmetadatamodel.cpp" line="95"/> + <source>Protection</source> + <translation>Proteção</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="93"/> + <location filename="../mpegmetadatamodel.cpp" line="97"/> + <location filename="../mpegmetadatamodel.cpp" line="101"/> + <source>Yes</source> + <translation>Sim</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="95"/> + <location filename="../mpegmetadatamodel.cpp" line="99"/> + <location filename="../mpegmetadatamodel.cpp" line="103"/> + <source>No</source> + <translation>Não</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="97"/> + <location filename="../mpegmetadatamodel.cpp" line="99"/> + <source>Copyright</source> + <translation>Copyright</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="101"/> + <location filename="../mpegmetadatamodel.cpp" line="103"/> + <source>Original</source> + <translation>Original</translation> + </message> +</context> +<context> + <name>SettingsDialog</name> + <message> + <location filename="../settingsdialog.ui" line="14"/> + <source>MPEG Plugin Settings</source> + <translation>Definições</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="29"/> + <source>Decoder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="35"/> + <source>MAD</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="42"/> + <source>MPG123</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="52"/> + <source>Tag Priority</source> + <translation>Prioridade das etiquetas</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="64"/> + <source>First:</source> + <translation>Primeiro:</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="84"/> + <location filename="../settingsdialog.ui" line="133"/> + <location filename="../settingsdialog.ui" line="182"/> + <source>ID3v1</source> + <translation>ID3v1</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="89"/> + <location filename="../settingsdialog.ui" line="138"/> + <location filename="../settingsdialog.ui" line="187"/> + <source>ID3v2</source> + <translation>ID3v2</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="94"/> + <location filename="../settingsdialog.ui" line="143"/> + <location filename="../settingsdialog.ui" line="192"/> + <source>APE</source> + <translation>APE</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="99"/> + <location filename="../settingsdialog.ui" line="148"/> + <location filename="../settingsdialog.ui" line="197"/> + <source>Disabled</source> + <translation>Desativada</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="113"/> + <source>Second:</source> + <translation>Segundo:</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="162"/> + <source>Third:</source> + <translation>Terceiro:</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="221"/> + <source>Encodings</source> + <translation>Codificação</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="233"/> + <source>ID3v1 encoding:</source> + <translation>Codificação ID3v1:</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="259"/> + <source>ID3v2 encoding:</source> + <translation>Codificação ID3v2:</translation> + </message> +</context> +</TS> diff --git a/src/plugins/Input/mpeg/translations/mpeg_plugin_pt_BR.ts b/src/plugins/Input/mpeg/translations/mpeg_plugin_pt_BR.ts new file mode 100644 index 000000000..6b87e4031 --- /dev/null +++ b/src/plugins/Input/mpeg/translations/mpeg_plugin_pt_BR.ts @@ -0,0 +1,206 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0" language="pt_BR"> +<context> + <name>DecoderMPEGFactory</name> + <message> + <location filename="../decodermpegfactory.cpp" line="117"/> + <source>MPEG Plugin</source> + <translation type="unfinished">Plugin MPEG</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="120"/> + <source>MPEG Files</source> + <translation type="unfinished">Arquivos MPEG</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="284"/> + <source>About MPEG Audio Plugin</source> + <translation type="unfinished">Sobre o plugin MPEG Audio</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="285"/> + <source>Qmmp MPEG Audio Plugin</source> + <translation type="unfinished">Plugin Qmmp MPEG Audio</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="286"/> + <source>Compiled against libmad version:</source> + <translation type="unfinished">Compilado com a versão libmad:</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="290"/> + <source>Written by: Ilya Kotov <forkotov02@ya.ru></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="291"/> + <source>Source code based on mq3 and madplay projects</source> + <translation type="unfinished">Baseado no código fonte dos projetos mq3 e madplay</translation> + </message> +</context> +<context> + <name>MPEGMetaDataModel</name> + <message> + <location filename="../mpegmetadatamodel.cpp" line="70"/> + <source>Format</source> + <translation>Formato</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="72"/> + <source>Bitrate</source> + <translation>Taxa de dados</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="72"/> + <source>kbps</source> + <translation>kbps</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="74"/> + <source>Sample rate</source> + <translation>Frequência</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="74"/> + <source>Hz</source> + <translation>Hz</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="78"/> + <location filename="../mpegmetadatamodel.cpp" line="81"/> + <location filename="../mpegmetadatamodel.cpp" line="84"/> + <location filename="../mpegmetadatamodel.cpp" line="87"/> + <source>Mode</source> + <translation>Modo</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="90"/> + <source>KB</source> + <translation>KB</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="91"/> + <source>File size</source> + <translation>Tamanho do arquivo</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="93"/> + <location filename="../mpegmetadatamodel.cpp" line="95"/> + <source>Protection</source> + <translation>Proteção</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="93"/> + <location filename="../mpegmetadatamodel.cpp" line="97"/> + <location filename="../mpegmetadatamodel.cpp" line="101"/> + <source>Yes</source> + <translation>Sim</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="95"/> + <location filename="../mpegmetadatamodel.cpp" line="99"/> + <location filename="../mpegmetadatamodel.cpp" line="103"/> + <source>No</source> + <translation>Não</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="97"/> + <location filename="../mpegmetadatamodel.cpp" line="99"/> + <source>Copyright</source> + <translation>Direitos autorais</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="101"/> + <location filename="../mpegmetadatamodel.cpp" line="103"/> + <source>Original</source> + <translation>Original</translation> + </message> +</context> +<context> + <name>SettingsDialog</name> + <message> + <location filename="../settingsdialog.ui" line="14"/> + <source>MPEG Plugin Settings</source> + <translation>Preferências do plugin MPEG</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="29"/> + <source>Decoder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="35"/> + <source>MAD</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="42"/> + <source>MPG123</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="52"/> + <source>Tag Priority</source> + <translation>Prioridade das etiquetas</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="64"/> + <source>First:</source> + <translation>Primeiro:</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="84"/> + <location filename="../settingsdialog.ui" line="133"/> + <location filename="../settingsdialog.ui" line="182"/> + <source>ID3v1</source> + <translation>ID3v1</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="89"/> + <location filename="../settingsdialog.ui" line="138"/> + <location filename="../settingsdialog.ui" line="187"/> + <source>ID3v2</source> + <translation>ID3v2</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="94"/> + <location filename="../settingsdialog.ui" line="143"/> + <location filename="../settingsdialog.ui" line="192"/> + <source>APE</source> + <translation>APE</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="99"/> + <location filename="../settingsdialog.ui" line="148"/> + <location filename="../settingsdialog.ui" line="197"/> + <source>Disabled</source> + <translation>Desativada</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="113"/> + <source>Second:</source> + <translation>Segundo:</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="162"/> + <source>Third:</source> + <translation>Terceiro:</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="221"/> + <source>Encodings</source> + <translation>Codificação</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="233"/> + <source>ID3v1 encoding:</source> + <translation>Codificação ID3v1:</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="259"/> + <source>ID3v2 encoding:</source> + <translation>Codificação ID3v2:</translation> + </message> +</context> +</TS> diff --git a/src/plugins/Input/mpeg/translations/mpeg_plugin_ru.ts b/src/plugins/Input/mpeg/translations/mpeg_plugin_ru.ts new file mode 100644 index 000000000..ded965774 --- /dev/null +++ b/src/plugins/Input/mpeg/translations/mpeg_plugin_ru.ts @@ -0,0 +1,206 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0" language="ru"> +<context> + <name>DecoderMPEGFactory</name> + <message> + <location filename="../decodermpegfactory.cpp" line="117"/> + <source>MPEG Plugin</source> + <translation type="unfinished">Модуль MPEG</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="120"/> + <source>MPEG Files</source> + <translation type="unfinished">Файлы MPEG</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="284"/> + <source>About MPEG Audio Plugin</source> + <translation type="unfinished">Об аудио-модуле MPEG</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="285"/> + <source>Qmmp MPEG Audio Plugin</source> + <translation type="unfinished">Аудио-модуль MPEG для Qmmp</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="286"/> + <source>Compiled against libmad version:</source> + <translation type="unfinished">Собрано с версией libmad:</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="290"/> + <source>Written by: Ilya Kotov <forkotov02@ya.ru></source> + <translation type="unfinished">Разработчик: Илья Котов <forkotov02@ya.ru></translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="291"/> + <source>Source code based on mq3 and madplay projects</source> + <translation type="unfinished">Исходный код снован на проектах mq3 и madplay</translation> + </message> +</context> +<context> + <name>MPEGMetaDataModel</name> + <message> + <location filename="../mpegmetadatamodel.cpp" line="70"/> + <source>Format</source> + <translation>Формат</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="72"/> + <source>Bitrate</source> + <translation>Битовая частота</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="72"/> + <source>kbps</source> + <translation>кбит/с</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="74"/> + <source>Sample rate</source> + <translation>Дискретизация</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="74"/> + <source>Hz</source> + <translation>Гц</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="78"/> + <location filename="../mpegmetadatamodel.cpp" line="81"/> + <location filename="../mpegmetadatamodel.cpp" line="84"/> + <location filename="../mpegmetadatamodel.cpp" line="87"/> + <source>Mode</source> + <translation>Режим</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="90"/> + <source>KB</source> + <translation>КБ</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="91"/> + <source>File size</source> + <translation>Размер файла</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="93"/> + <location filename="../mpegmetadatamodel.cpp" line="95"/> + <source>Protection</source> + <translation>Защита</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="93"/> + <location filename="../mpegmetadatamodel.cpp" line="97"/> + <location filename="../mpegmetadatamodel.cpp" line="101"/> + <source>Yes</source> + <translation>Да</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="95"/> + <location filename="../mpegmetadatamodel.cpp" line="99"/> + <location filename="../mpegmetadatamodel.cpp" line="103"/> + <source>No</source> + <translation>Нет</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="97"/> + <location filename="../mpegmetadatamodel.cpp" line="99"/> + <source>Copyright</source> + <translation>Авторские права</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="101"/> + <location filename="../mpegmetadatamodel.cpp" line="103"/> + <source>Original</source> + <translation>Оригинальный</translation> + </message> +</context> +<context> + <name>SettingsDialog</name> + <message> + <location filename="../settingsdialog.ui" line="14"/> + <source>MPEG Plugin Settings</source> + <translation>Настройка модуля MPEG</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="29"/> + <source>Decoder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="35"/> + <source>MAD</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="42"/> + <source>MPG123</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="52"/> + <source>Tag Priority</source> + <translation>Приоритет тегов</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="64"/> + <source>First:</source> + <translation>Первый:</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="84"/> + <location filename="../settingsdialog.ui" line="133"/> + <location filename="../settingsdialog.ui" line="182"/> + <source>ID3v1</source> + <translation>ID3v1</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="89"/> + <location filename="../settingsdialog.ui" line="138"/> + <location filename="../settingsdialog.ui" line="187"/> + <source>ID3v2</source> + <translation>ID3v2</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="94"/> + <location filename="../settingsdialog.ui" line="143"/> + <location filename="../settingsdialog.ui" line="192"/> + <source>APE</source> + <translation>APE</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="99"/> + <location filename="../settingsdialog.ui" line="148"/> + <location filename="../settingsdialog.ui" line="197"/> + <source>Disabled</source> + <translation>Выключен</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="113"/> + <source>Second:</source> + <translation>Второй:</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="162"/> + <source>Third:</source> + <translation>Третий:</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="221"/> + <source>Encodings</source> + <translation>Кодировки</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="233"/> + <source>ID3v1 encoding:</source> + <translation>Кодировка ID3v1:</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="259"/> + <source>ID3v2 encoding:</source> + <translation>Кодировка ID3v2:</translation> + </message> +</context> +</TS> diff --git a/src/plugins/Input/mpeg/translations/mpeg_plugin_sk.ts b/src/plugins/Input/mpeg/translations/mpeg_plugin_sk.ts new file mode 100644 index 000000000..c659c4dcc --- /dev/null +++ b/src/plugins/Input/mpeg/translations/mpeg_plugin_sk.ts @@ -0,0 +1,206 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0" language="sk_SK"> +<context> + <name>DecoderMPEGFactory</name> + <message> + <location filename="../decodermpegfactory.cpp" line="117"/> + <source>MPEG Plugin</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="120"/> + <source>MPEG Files</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="284"/> + <source>About MPEG Audio Plugin</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="285"/> + <source>Qmmp MPEG Audio Plugin</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="286"/> + <source>Compiled against libmad version:</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="290"/> + <source>Written by: Ilya Kotov <forkotov02@ya.ru></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="291"/> + <source>Source code based on mq3 and madplay projects</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>MPEGMetaDataModel</name> + <message> + <location filename="../mpegmetadatamodel.cpp" line="70"/> + <source>Format</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="72"/> + <source>Bitrate</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="72"/> + <source>kbps</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="74"/> + <source>Sample rate</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="74"/> + <source>Hz</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="78"/> + <location filename="../mpegmetadatamodel.cpp" line="81"/> + <location filename="../mpegmetadatamodel.cpp" line="84"/> + <location filename="../mpegmetadatamodel.cpp" line="87"/> + <source>Mode</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="90"/> + <source>KB</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="91"/> + <source>File size</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="93"/> + <location filename="../mpegmetadatamodel.cpp" line="95"/> + <source>Protection</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="93"/> + <location filename="../mpegmetadatamodel.cpp" line="97"/> + <location filename="../mpegmetadatamodel.cpp" line="101"/> + <source>Yes</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="95"/> + <location filename="../mpegmetadatamodel.cpp" line="99"/> + <location filename="../mpegmetadatamodel.cpp" line="103"/> + <source>No</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="97"/> + <location filename="../mpegmetadatamodel.cpp" line="99"/> + <source>Copyright</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="101"/> + <location filename="../mpegmetadatamodel.cpp" line="103"/> + <source>Original</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>SettingsDialog</name> + <message> + <location filename="../settingsdialog.ui" line="14"/> + <source>MPEG Plugin Settings</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="29"/> + <source>Decoder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="35"/> + <source>MAD</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="42"/> + <source>MPG123</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="52"/> + <source>Tag Priority</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="64"/> + <source>First:</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="84"/> + <location filename="../settingsdialog.ui" line="133"/> + <location filename="../settingsdialog.ui" line="182"/> + <source>ID3v1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="89"/> + <location filename="../settingsdialog.ui" line="138"/> + <location filename="../settingsdialog.ui" line="187"/> + <source>ID3v2</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="94"/> + <location filename="../settingsdialog.ui" line="143"/> + <location filename="../settingsdialog.ui" line="192"/> + <source>APE</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="99"/> + <location filename="../settingsdialog.ui" line="148"/> + <location filename="../settingsdialog.ui" line="197"/> + <source>Disabled</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="113"/> + <source>Second:</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="162"/> + <source>Third:</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="221"/> + <source>Encodings</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="233"/> + <source>ID3v1 encoding:</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="259"/> + <source>ID3v2 encoding:</source> + <translation type="unfinished"></translation> + </message> +</context> +</TS> diff --git a/src/plugins/Input/mpeg/translations/mpeg_plugin_sr_BA.ts b/src/plugins/Input/mpeg/translations/mpeg_plugin_sr_BA.ts new file mode 100644 index 000000000..28a38cc3d --- /dev/null +++ b/src/plugins/Input/mpeg/translations/mpeg_plugin_sr_BA.ts @@ -0,0 +1,206 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0" language="sr_BA"> +<context> + <name>DecoderMPEGFactory</name> + <message> + <location filename="../decodermpegfactory.cpp" line="117"/> + <source>MPEG Plugin</source> + <translation type="unfinished">МПЕГ прикључак</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="120"/> + <source>MPEG Files</source> + <translation type="unfinished">МПЕГ фајлови</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="284"/> + <source>About MPEG Audio Plugin</source> + <translation type="unfinished">О МПЕГ прикључку</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="285"/> + <source>Qmmp MPEG Audio Plugin</source> + <translation type="unfinished">Кумп МПЕГ прикључак</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="286"/> + <source>Compiled against libmad version:</source> + <translation type="unfinished">Компилован на libmad издању:</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="290"/> + <source>Written by: Ilya Kotov <forkotov02@ya.ru></source> + <translation type="unfinished">Аутор: Ilya Kotov <forkotov02@ya.ru></translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="291"/> + <source>Source code based on mq3 and madplay projects</source> + <translation type="unfinished">Заснован на пројектима mq3 и madplay</translation> + </message> +</context> +<context> + <name>MPEGMetaDataModel</name> + <message> + <location filename="../mpegmetadatamodel.cpp" line="70"/> + <source>Format</source> + <translation>Формат</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="72"/> + <source>Bitrate</source> + <translation>Битски проток</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="72"/> + <source>kbps</source> + <translation>kb/s</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="74"/> + <source>Sample rate</source> + <translation>Узорковање</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="74"/> + <source>Hz</source> + <translation>Hz</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="78"/> + <location filename="../mpegmetadatamodel.cpp" line="81"/> + <location filename="../mpegmetadatamodel.cpp" line="84"/> + <location filename="../mpegmetadatamodel.cpp" line="87"/> + <source>Mode</source> + <translation>Режим</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="90"/> + <source>KB</source> + <translation>KB</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="91"/> + <source>File size</source> + <translation>Величина</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="93"/> + <location filename="../mpegmetadatamodel.cpp" line="95"/> + <source>Protection</source> + <translation>Заштита</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="93"/> + <location filename="../mpegmetadatamodel.cpp" line="97"/> + <location filename="../mpegmetadatamodel.cpp" line="101"/> + <source>Yes</source> + <translation>Да</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="95"/> + <location filename="../mpegmetadatamodel.cpp" line="99"/> + <location filename="../mpegmetadatamodel.cpp" line="103"/> + <source>No</source> + <translation>Не</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="97"/> + <location filename="../mpegmetadatamodel.cpp" line="99"/> + <source>Copyright</source> + <translation>Ауторско право</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="101"/> + <location filename="../mpegmetadatamodel.cpp" line="103"/> + <source>Original</source> + <translation>Оригинал</translation> + </message> +</context> +<context> + <name>SettingsDialog</name> + <message> + <location filename="../settingsdialog.ui" line="14"/> + <source>MPEG Plugin Settings</source> + <translation>Поставке МПЕГ прикључка</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="29"/> + <source>Decoder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="35"/> + <source>MAD</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="42"/> + <source>MPG123</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="52"/> + <source>Tag Priority</source> + <translation>Приоритет ознака</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="64"/> + <source>First:</source> + <translation>Прва:</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="84"/> + <location filename="../settingsdialog.ui" line="133"/> + <location filename="../settingsdialog.ui" line="182"/> + <source>ID3v1</source> + <translation>ИД3в1</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="89"/> + <location filename="../settingsdialog.ui" line="138"/> + <location filename="../settingsdialog.ui" line="187"/> + <source>ID3v2</source> + <translation>ИД3в2</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="94"/> + <location filename="../settingsdialog.ui" line="143"/> + <location filename="../settingsdialog.ui" line="192"/> + <source>APE</source> + <translation>ЕЈП</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="99"/> + <location filename="../settingsdialog.ui" line="148"/> + <location filename="../settingsdialog.ui" line="197"/> + <source>Disabled</source> + <translation>онемогућена</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="113"/> + <source>Second:</source> + <translation>Друга:</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="162"/> + <source>Third:</source> + <translation>Трећа:</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="221"/> + <source>Encodings</source> + <translation>Кодирање</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="233"/> + <source>ID3v1 encoding:</source> + <translation>ИД3в1 кодирање:</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="259"/> + <source>ID3v2 encoding:</source> + <translation>ИД3в2 кодирање:</translation> + </message> +</context> +</TS> diff --git a/src/plugins/Input/mpeg/translations/mpeg_plugin_sr_RS.ts b/src/plugins/Input/mpeg/translations/mpeg_plugin_sr_RS.ts new file mode 100644 index 000000000..ef0a63c69 --- /dev/null +++ b/src/plugins/Input/mpeg/translations/mpeg_plugin_sr_RS.ts @@ -0,0 +1,206 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0" language="sr_RS"> +<context> + <name>DecoderMPEGFactory</name> + <message> + <location filename="../decodermpegfactory.cpp" line="117"/> + <source>MPEG Plugin</source> + <translation type="unfinished">МПЕГ прикључак</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="120"/> + <source>MPEG Files</source> + <translation type="unfinished">МПЕГ фајлови</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="284"/> + <source>About MPEG Audio Plugin</source> + <translation type="unfinished">О МПЕГ прикључку</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="285"/> + <source>Qmmp MPEG Audio Plugin</source> + <translation type="unfinished">Кумп МПЕГ прикључак</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="286"/> + <source>Compiled against libmad version:</source> + <translation type="unfinished">Компилован на libmad издању:</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="290"/> + <source>Written by: Ilya Kotov <forkotov02@ya.ru></source> + <translation type="unfinished">Аутор: Ilya Kotov <forkotov02@ya.ru></translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="291"/> + <source>Source code based on mq3 and madplay projects</source> + <translation type="unfinished">Заснован на пројектима mq3 и madplay</translation> + </message> +</context> +<context> + <name>MPEGMetaDataModel</name> + <message> + <location filename="../mpegmetadatamodel.cpp" line="70"/> + <source>Format</source> + <translation>Формат</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="72"/> + <source>Bitrate</source> + <translation>Битски проток</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="72"/> + <source>kbps</source> + <translation>kb/s</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="74"/> + <source>Sample rate</source> + <translation>Узорковање</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="74"/> + <source>Hz</source> + <translation>Hz</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="78"/> + <location filename="../mpegmetadatamodel.cpp" line="81"/> + <location filename="../mpegmetadatamodel.cpp" line="84"/> + <location filename="../mpegmetadatamodel.cpp" line="87"/> + <source>Mode</source> + <translation>Режим</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="90"/> + <source>KB</source> + <translation>KB</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="91"/> + <source>File size</source> + <translation>Величина</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="93"/> + <location filename="../mpegmetadatamodel.cpp" line="95"/> + <source>Protection</source> + <translation>Заштита</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="93"/> + <location filename="../mpegmetadatamodel.cpp" line="97"/> + <location filename="../mpegmetadatamodel.cpp" line="101"/> + <source>Yes</source> + <translation>Да</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="95"/> + <location filename="../mpegmetadatamodel.cpp" line="99"/> + <location filename="../mpegmetadatamodel.cpp" line="103"/> + <source>No</source> + <translation>Не</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="97"/> + <location filename="../mpegmetadatamodel.cpp" line="99"/> + <source>Copyright</source> + <translation>Ауторско право</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="101"/> + <location filename="../mpegmetadatamodel.cpp" line="103"/> + <source>Original</source> + <translation>Оригинал</translation> + </message> +</context> +<context> + <name>SettingsDialog</name> + <message> + <location filename="../settingsdialog.ui" line="14"/> + <source>MPEG Plugin Settings</source> + <translation>Поставке МПЕГ прикључка</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="29"/> + <source>Decoder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="35"/> + <source>MAD</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="42"/> + <source>MPG123</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="52"/> + <source>Tag Priority</source> + <translation>Приоритет ознака</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="64"/> + <source>First:</source> + <translation>Прва:</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="84"/> + <location filename="../settingsdialog.ui" line="133"/> + <location filename="../settingsdialog.ui" line="182"/> + <source>ID3v1</source> + <translation>ИД3в1</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="89"/> + <location filename="../settingsdialog.ui" line="138"/> + <location filename="../settingsdialog.ui" line="187"/> + <source>ID3v2</source> + <translation>ИД3в2</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="94"/> + <location filename="../settingsdialog.ui" line="143"/> + <location filename="../settingsdialog.ui" line="192"/> + <source>APE</source> + <translation>ЕЈП</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="99"/> + <location filename="../settingsdialog.ui" line="148"/> + <location filename="../settingsdialog.ui" line="197"/> + <source>Disabled</source> + <translation>онемогућена</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="113"/> + <source>Second:</source> + <translation>Друга:</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="162"/> + <source>Third:</source> + <translation>Трећа:</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="221"/> + <source>Encodings</source> + <translation>Кодирање</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="233"/> + <source>ID3v1 encoding:</source> + <translation>ИД3в1 кодирање:</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="259"/> + <source>ID3v2 encoding:</source> + <translation>ИД3в2 кодирање:</translation> + </message> +</context> +</TS> diff --git a/src/plugins/Input/mpeg/translations/mpeg_plugin_tr.ts b/src/plugins/Input/mpeg/translations/mpeg_plugin_tr.ts new file mode 100644 index 000000000..3ed31f662 --- /dev/null +++ b/src/plugins/Input/mpeg/translations/mpeg_plugin_tr.ts @@ -0,0 +1,206 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0" language="tr_TR"> +<context> + <name>DecoderMPEGFactory</name> + <message> + <location filename="../decodermpegfactory.cpp" line="117"/> + <source>MPEG Plugin</source> + <translation type="unfinished">MPEG Eklentisi</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="120"/> + <source>MPEG Files</source> + <translation type="unfinished">MPEG Dosyaları</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="284"/> + <source>About MPEG Audio Plugin</source> + <translation type="unfinished">MPEG Ses Eklentisi Hakkında</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="285"/> + <source>Qmmp MPEG Audio Plugin</source> + <translation type="unfinished">Qmmp MPEG Ses Eklentisi</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="286"/> + <source>Compiled against libmad version:</source> + <translation type="unfinished">Derlendiği libmad sürümü:</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="290"/> + <source>Written by: Ilya Kotov <forkotov02@ya.ru></source> + <translation type="unfinished">Yazan: Ilya Kotov <forkotov02@ya.ru></translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="291"/> + <source>Source code based on mq3 and madplay projects</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>MPEGMetaDataModel</name> + <message> + <location filename="../mpegmetadatamodel.cpp" line="70"/> + <source>Format</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="72"/> + <source>Bitrate</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="72"/> + <source>kbps</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="74"/> + <source>Sample rate</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="74"/> + <source>Hz</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="78"/> + <location filename="../mpegmetadatamodel.cpp" line="81"/> + <location filename="../mpegmetadatamodel.cpp" line="84"/> + <location filename="../mpegmetadatamodel.cpp" line="87"/> + <source>Mode</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="90"/> + <source>KB</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="91"/> + <source>File size</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="93"/> + <location filename="../mpegmetadatamodel.cpp" line="95"/> + <source>Protection</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="93"/> + <location filename="../mpegmetadatamodel.cpp" line="97"/> + <location filename="../mpegmetadatamodel.cpp" line="101"/> + <source>Yes</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="95"/> + <location filename="../mpegmetadatamodel.cpp" line="99"/> + <location filename="../mpegmetadatamodel.cpp" line="103"/> + <source>No</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="97"/> + <location filename="../mpegmetadatamodel.cpp" line="99"/> + <source>Copyright</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="101"/> + <location filename="../mpegmetadatamodel.cpp" line="103"/> + <source>Original</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>SettingsDialog</name> + <message> + <location filename="../settingsdialog.ui" line="14"/> + <source>MPEG Plugin Settings</source> + <translation>MPEG Eklenti Ayarları</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="29"/> + <source>Decoder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="35"/> + <source>MAD</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="42"/> + <source>MPG123</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="52"/> + <source>Tag Priority</source> + <translation>Etiket Önceliği</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="64"/> + <source>First:</source> + <translation>İlk:</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="84"/> + <location filename="../settingsdialog.ui" line="133"/> + <location filename="../settingsdialog.ui" line="182"/> + <source>ID3v1</source> + <translation>ID3v1</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="89"/> + <location filename="../settingsdialog.ui" line="138"/> + <location filename="../settingsdialog.ui" line="187"/> + <source>ID3v2</source> + <translation>ID3v2</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="94"/> + <location filename="../settingsdialog.ui" line="143"/> + <location filename="../settingsdialog.ui" line="192"/> + <source>APE</source> + <translation>APE</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="99"/> + <location filename="../settingsdialog.ui" line="148"/> + <location filename="../settingsdialog.ui" line="197"/> + <source>Disabled</source> + <translation>Etkisiz</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="113"/> + <source>Second:</source> + <translation>İkinci:</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="162"/> + <source>Third:</source> + <translation>Üçüncü:</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="221"/> + <source>Encodings</source> + <translation>Kodlamalar</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="233"/> + <source>ID3v1 encoding:</source> + <translation>ID3v1 kodlaması:</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="259"/> + <source>ID3v2 encoding:</source> + <translation>ID3v2 kodlaması:</translation> + </message> +</context> +</TS> diff --git a/src/plugins/Input/mpeg/translations/mpeg_plugin_uk_UA.ts b/src/plugins/Input/mpeg/translations/mpeg_plugin_uk_UA.ts new file mode 100644 index 000000000..91d889f17 --- /dev/null +++ b/src/plugins/Input/mpeg/translations/mpeg_plugin_uk_UA.ts @@ -0,0 +1,206 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0" language="uk"> +<context> + <name>DecoderMPEGFactory</name> + <message> + <location filename="../decodermpegfactory.cpp" line="117"/> + <source>MPEG Plugin</source> + <translation type="unfinished">Модуль MPEG</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="120"/> + <source>MPEG Files</source> + <translation type="unfinished">Файли MPEG</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="284"/> + <source>About MPEG Audio Plugin</source> + <translation type="unfinished">Про аудіо-модуль MPEG</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="285"/> + <source>Qmmp MPEG Audio Plugin</source> + <translation type="unfinished">Аудіо-модуль MPEG для Qmmp</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="286"/> + <source>Compiled against libmad version:</source> + <translation type="unfinished">Зібрано з версією libmad:</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="290"/> + <source>Written by: Ilya Kotov <forkotov02@ya.ru></source> + <translation type="unfinished">Розробник: Ілля Котов <forkotov02@ya.ru></translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="291"/> + <source>Source code based on mq3 and madplay projects</source> + <translation type="unfinished">Вихідні коди базуються на проектах mq3 та madplay</translation> + </message> +</context> +<context> + <name>MPEGMetaDataModel</name> + <message> + <location filename="../mpegmetadatamodel.cpp" line="70"/> + <source>Format</source> + <translation>Формат</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="72"/> + <source>Bitrate</source> + <translation>Бітрейт</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="72"/> + <source>kbps</source> + <translation>Кб/с</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="74"/> + <source>Sample rate</source> + <translation>Частота</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="74"/> + <source>Hz</source> + <translation>Гц</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="78"/> + <location filename="../mpegmetadatamodel.cpp" line="81"/> + <location filename="../mpegmetadatamodel.cpp" line="84"/> + <location filename="../mpegmetadatamodel.cpp" line="87"/> + <source>Mode</source> + <translation>Режим</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="90"/> + <source>KB</source> + <translation>Кб</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="91"/> + <source>File size</source> + <translation>Розмір файла</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="93"/> + <location filename="../mpegmetadatamodel.cpp" line="95"/> + <source>Protection</source> + <translation>Захищено</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="93"/> + <location filename="../mpegmetadatamodel.cpp" line="97"/> + <location filename="../mpegmetadatamodel.cpp" line="101"/> + <source>Yes</source> + <translation>Так</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="95"/> + <location filename="../mpegmetadatamodel.cpp" line="99"/> + <location filename="../mpegmetadatamodel.cpp" line="103"/> + <source>No</source> + <translation>Ні</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="97"/> + <location filename="../mpegmetadatamodel.cpp" line="99"/> + <source>Copyright</source> + <translation>Авторське право</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="101"/> + <location filename="../mpegmetadatamodel.cpp" line="103"/> + <source>Original</source> + <translation>Оригінал</translation> + </message> +</context> +<context> + <name>SettingsDialog</name> + <message> + <location filename="../settingsdialog.ui" line="84"/> + <location filename="../settingsdialog.ui" line="133"/> + <location filename="../settingsdialog.ui" line="182"/> + <source>ID3v1</source> + <translation></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="89"/> + <location filename="../settingsdialog.ui" line="138"/> + <location filename="../settingsdialog.ui" line="187"/> + <source>ID3v2</source> + <translation></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="233"/> + <source>ID3v1 encoding:</source> + <translation>Кодування ID3v1:</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="259"/> + <source>ID3v2 encoding:</source> + <translation>Кодування ID3v2:</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="14"/> + <source>MPEG Plugin Settings</source> + <translation>Налаштування модуля MPEG</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="29"/> + <source>Decoder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="35"/> + <source>MAD</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="42"/> + <source>MPG123</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="52"/> + <source>Tag Priority</source> + <translation>Пріоритет тегу</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="64"/> + <source>First:</source> + <translation>Перший:</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="94"/> + <location filename="../settingsdialog.ui" line="143"/> + <location filename="../settingsdialog.ui" line="192"/> + <source>APE</source> + <translation>APE</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="99"/> + <location filename="../settingsdialog.ui" line="148"/> + <location filename="../settingsdialog.ui" line="197"/> + <source>Disabled</source> + <translation>Вимкнути</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="113"/> + <source>Second:</source> + <translation>Другий:</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="162"/> + <source>Third:</source> + <translation>Третій:</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="221"/> + <source>Encodings</source> + <translation>Кодування</translation> + </message> +</context> +</TS> diff --git a/src/plugins/Input/mpeg/translations/mpeg_plugin_zh_CN.ts b/src/plugins/Input/mpeg/translations/mpeg_plugin_zh_CN.ts new file mode 100644 index 000000000..4a72af084 --- /dev/null +++ b/src/plugins/Input/mpeg/translations/mpeg_plugin_zh_CN.ts @@ -0,0 +1,206 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0" language="zh_CN"> +<context> + <name>DecoderMPEGFactory</name> + <message> + <location filename="../decodermpegfactory.cpp" line="117"/> + <source>MPEG Plugin</source> + <translation type="unfinished">MPEG 插件</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="120"/> + <source>MPEG Files</source> + <translation type="unfinished">MPEG 文件</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="284"/> + <source>About MPEG Audio Plugin</source> + <translation type="unfinished">关于 MPEG 音频插件</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="285"/> + <source>Qmmp MPEG Audio Plugin</source> + <translation type="unfinished">Qmmp MPEG 音频插件</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="286"/> + <source>Compiled against libmad version:</source> + <translation type="unfinished">编译基于 libmad 版本:</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="290"/> + <source>Written by: Ilya Kotov <forkotov02@ya.ru></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="291"/> + <source>Source code based on mq3 and madplay projects</source> + <translation type="unfinished">源代码基于mq3及madplay项目</translation> + </message> +</context> +<context> + <name>MPEGMetaDataModel</name> + <message> + <location filename="../mpegmetadatamodel.cpp" line="70"/> + <source>Format</source> + <translation>格式</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="72"/> + <source>Bitrate</source> + <translation>比特率</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="72"/> + <source>kbps</source> + <translation>千比特每秒</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="74"/> + <source>Sample rate</source> + <translation>取样率</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="74"/> + <source>Hz</source> + <translation>赫兹</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="78"/> + <location filename="../mpegmetadatamodel.cpp" line="81"/> + <location filename="../mpegmetadatamodel.cpp" line="84"/> + <location filename="../mpegmetadatamodel.cpp" line="87"/> + <source>Mode</source> + <translation>风格</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="90"/> + <source>KB</source> + <translation>千字节</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="91"/> + <source>File size</source> + <translation>文件大小</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="93"/> + <location filename="../mpegmetadatamodel.cpp" line="95"/> + <source>Protection</source> + <translation>保护</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="93"/> + <location filename="../mpegmetadatamodel.cpp" line="97"/> + <location filename="../mpegmetadatamodel.cpp" line="101"/> + <source>Yes</source> + <translation>是</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="95"/> + <location filename="../mpegmetadatamodel.cpp" line="99"/> + <location filename="../mpegmetadatamodel.cpp" line="103"/> + <source>No</source> + <translation>否</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="97"/> + <location filename="../mpegmetadatamodel.cpp" line="99"/> + <source>Copyright</source> + <translation>版权</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="101"/> + <location filename="../mpegmetadatamodel.cpp" line="103"/> + <source>Original</source> + <translation>原创</translation> + </message> +</context> +<context> + <name>SettingsDialog</name> + <message> + <location filename="../settingsdialog.ui" line="14"/> + <source>MPEG Plugin Settings</source> + <translation>MPEG 插件设置</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="29"/> + <source>Decoder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="35"/> + <source>MAD</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="42"/> + <source>MPG123</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="52"/> + <source>Tag Priority</source> + <translation>标签优先</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="64"/> + <source>First:</source> + <translation>第一:</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="84"/> + <location filename="../settingsdialog.ui" line="133"/> + <location filename="../settingsdialog.ui" line="182"/> + <source>ID3v1</source> + <translation>ID3v1</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="89"/> + <location filename="../settingsdialog.ui" line="138"/> + <location filename="../settingsdialog.ui" line="187"/> + <source>ID3v2</source> + <translation>ID3v2</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="94"/> + <location filename="../settingsdialog.ui" line="143"/> + <location filename="../settingsdialog.ui" line="192"/> + <source>APE</source> + <translation>APE</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="99"/> + <location filename="../settingsdialog.ui" line="148"/> + <location filename="../settingsdialog.ui" line="197"/> + <source>Disabled</source> + <translation>无效</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="113"/> + <source>Second:</source> + <translation>第二:</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="162"/> + <source>Third:</source> + <translation>第三:</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="221"/> + <source>Encodings</source> + <translation>编码</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="233"/> + <source>ID3v1 encoding:</source> + <translation>ID3v1 编码:</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="259"/> + <source>ID3v2 encoding:</source> + <translation>ID3v2 编码:</translation> + </message> +</context> +</TS> diff --git a/src/plugins/Input/mpeg/translations/mpeg_plugin_zh_TW.ts b/src/plugins/Input/mpeg/translations/mpeg_plugin_zh_TW.ts new file mode 100644 index 000000000..f378fd6f6 --- /dev/null +++ b/src/plugins/Input/mpeg/translations/mpeg_plugin_zh_TW.ts @@ -0,0 +1,206 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0" language="zh_TW"> +<context> + <name>DecoderMPEGFactory</name> + <message> + <location filename="../decodermpegfactory.cpp" line="117"/> + <source>MPEG Plugin</source> + <translation type="unfinished">MPEG 外掛</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="120"/> + <source>MPEG Files</source> + <translation type="unfinished">MPEG 檔案</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="284"/> + <source>About MPEG Audio Plugin</source> + <translation type="unfinished">關於 MPEG 聲訊插件</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="285"/> + <source>Qmmp MPEG Audio Plugin</source> + <translation type="unfinished">Qmmp MPEG 聲訊插件</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="286"/> + <source>Compiled against libmad version:</source> + <translation type="unfinished">編譯基於 libmad 的版本:</translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="290"/> + <source>Written by: Ilya Kotov <forkotov02@ya.ru></source> + <translation type="unfinished">作者:Ilya Kotov <forkotov02@ya.ru></translation> + </message> + <message> + <location filename="../decodermpegfactory.cpp" line="291"/> + <source>Source code based on mq3 and madplay projects</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>MPEGMetaDataModel</name> + <message> + <location filename="../mpegmetadatamodel.cpp" line="70"/> + <source>Format</source> + <translation>格式</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="72"/> + <source>Bitrate</source> + <translation>比特率</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="72"/> + <source>kbps</source> + <translation>kbps</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="74"/> + <source>Sample rate</source> + <translation>取樣率</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="74"/> + <source>Hz</source> + <translation>Hz</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="78"/> + <location filename="../mpegmetadatamodel.cpp" line="81"/> + <location filename="../mpegmetadatamodel.cpp" line="84"/> + <location filename="../mpegmetadatamodel.cpp" line="87"/> + <source>Mode</source> + <translation>風格</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="90"/> + <source>KB</source> + <translation>KB</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="91"/> + <source>File size</source> + <translation>文件大小</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="93"/> + <location filename="../mpegmetadatamodel.cpp" line="95"/> + <source>Protection</source> + <translation>保護</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="93"/> + <location filename="../mpegmetadatamodel.cpp" line="97"/> + <location filename="../mpegmetadatamodel.cpp" line="101"/> + <source>Yes</source> + <translation>是</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="95"/> + <location filename="../mpegmetadatamodel.cpp" line="99"/> + <location filename="../mpegmetadatamodel.cpp" line="103"/> + <source>No</source> + <translation>否</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="97"/> + <location filename="../mpegmetadatamodel.cpp" line="99"/> + <source>Copyright</source> + <translation>版權</translation> + </message> + <message> + <location filename="../mpegmetadatamodel.cpp" line="101"/> + <location filename="../mpegmetadatamodel.cpp" line="103"/> + <source>Original</source> + <translation>原創</translation> + </message> +</context> +<context> + <name>SettingsDialog</name> + <message> + <location filename="../settingsdialog.ui" line="14"/> + <source>MPEG Plugin Settings</source> + <translation>MPEG 插件設定</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="29"/> + <source>Decoder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="35"/> + <source>MAD</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="42"/> + <source>MPG123</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="52"/> + <source>Tag Priority</source> + <translation>標簽優先</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="64"/> + <source>First:</source> + <translation>第一:</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="84"/> + <location filename="../settingsdialog.ui" line="133"/> + <location filename="../settingsdialog.ui" line="182"/> + <source>ID3v1</source> + <translation>ID3v1</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="89"/> + <location filename="../settingsdialog.ui" line="138"/> + <location filename="../settingsdialog.ui" line="187"/> + <source>ID3v2</source> + <translation>ID3v2</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="94"/> + <location filename="../settingsdialog.ui" line="143"/> + <location filename="../settingsdialog.ui" line="192"/> + <source>APE</source> + <translation>APE</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="99"/> + <location filename="../settingsdialog.ui" line="148"/> + <location filename="../settingsdialog.ui" line="197"/> + <source>Disabled</source> + <translation>無效</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="113"/> + <source>Second:</source> + <translation>第二:</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="162"/> + <source>Third:</source> + <translation>第三:</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="221"/> + <source>Encodings</source> + <translation>編碼</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="233"/> + <source>ID3v1 encoding:</source> + <translation>ID3v1 編碼:</translation> + </message> + <message> + <location filename="../settingsdialog.ui" line="259"/> + <source>ID3v2 encoding:</source> + <translation>ID3v2 編碼:</translation> + </message> +</context> +</TS> diff --git a/src/plugins/Input/mpeg/translations/translations.qrc b/src/plugins/Input/mpeg/translations/translations.qrc new file mode 100644 index 000000000..029b94e13 --- /dev/null +++ b/src/plugins/Input/mpeg/translations/translations.qrc @@ -0,0 +1,32 @@ +<!DOCTYPE RCC> +<RCC version="1.0"> + <qresource> + <file>mpeg_plugin_ru.qm</file> + <file>mpeg_plugin_uk_UA.qm</file> + <file>mpeg_plugin_zh_CN.qm</file> + <file>mpeg_plugin_zh_TW.qm</file> + <file>mpeg_plugin_tr.qm</file> + <file>mpeg_plugin_cs.qm</file> + <file>mpeg_plugin_pt_BR.qm</file> + <file>mpeg_plugin_pt.qm</file> + <file>mpeg_plugin_de.qm</file> + <file>mpeg_plugin_pl_PL.qm</file> + <file>mpeg_plugin_fr.qm</file> + <file>mpeg_plugin_it.qm</file> + <file>mpeg_plugin_kk.qm</file> + <file>mpeg_plugin_lt.qm</file> + <file>mpeg_plugin_hu.qm</file> + <file>mpeg_plugin_nl.qm</file> + <file>mpeg_plugin_ja.qm</file> + <file>mpeg_plugin_sk.qm</file> + <file>mpeg_plugin_es.qm</file> + <file>mpeg_plugin_he.qm</file> + <file>mpeg_plugin_gl_ES.qm</file> + <file>mpeg_plugin_sr_BA.qm</file> + <file>mpeg_plugin_sr_RS.qm</file> + <file>mpeg_plugin_bg.qm</file> + <file>mpeg_plugin_el.qm</file> + <file>mpeg_plugin_id.qm</file> + <file>mpeg_plugin_fi.qm</file> + </qresource> +</RCC> |
