diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 1c9929c34..0ff499ac9 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -14,8 +14,8 @@ A clear and concise description of what the bug is. Steps to reproduce the behavior: 1. Go to '...' -2. Click on '....' -3. Scroll down to '....' +2. Click on '...' +3. Scroll down to '...' 4. See error **Expected behavior** @@ -38,7 +38,7 @@ If applicable, add screenshots to help explain your problem. - Browser [e.g. chrome, safari] - Browser version [e.g. 22] -**Debug logs (please attach if it can be usefull)** +**Debug logs (please attach if it can be useful)** Look at https://jcorporation.github.io/myMPD/debug @@ -47,7 +47,7 @@ Look at https://jcorporation.github.io/myMPD/debug - Browser error console - Browser network console -**Configuration (please attach if it can be usefull)** +**Configuration (please attach if it can be useful)** - tarball of /var/lib/mympd/state (``tar -cf mympd_state.tar /var/lib/mympd/state``) - tarball of /var/lib/mympd/config (``tar -cf mympd_config.tar /var/lib/mympd/config``) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3dd110cb4..b93d6147d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,20 @@ https://github.com/jcorporation/myMPD/ *** +## myMPD v10.1.1 (2022-11-13) + +This is a small bugfix release. + +### Changelog + +- Feat: add es-ES translation +- Upd: translations +- Upd: man pages +- Fix: remove song progress indicator in queue view after switching to new song #881 +- Fix: arch, gentoo and rpm packaging #886 #887 + +*** + ## myMPD v10.1.0 (2022-11-06) This minor release adds support of new MPD 0.24 features. The javascript frontend is now documented with jsDoc and linted with the typescript compiler. diff --git a/CMakeLists.txt b/CMakeLists.txt index 7aeb24cb5..3c9a14f7a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -8,13 +8,10 @@ cmake_policy(SET CMP0003 NEW) # myMPD is written in C # supported compilers: gcc, clang -project(mympd C) - -# update myMPD version here and run ./build.sh setversion to update -# the source files -set(CPACK_PACKAGE_VERSION_MAJOR "10") -set(CPACK_PACKAGE_VERSION_MINOR "1") -set(CPACK_PACKAGE_VERSION_PATCH "0") +project(mympd + VERSION 10.1.1 + LANGUAGES C +) # output binaries in bin directory set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) @@ -196,6 +193,9 @@ if(MYMPD_EMBEDDED_ASSETS) if(EXISTS "${PROJECT_BINARY_DIR}/htdocs/assets/i18n/en-US.json.gz") set(I18N_en_US "ON") endif() + if(EXISTS "${PROJECT_BINARY_DIR}/htdocs/assets/i18n/es-ES.json.gz") + set(I18N_es_ES "ON") + endif() if(EXISTS "${PROJECT_BINARY_DIR}/htdocs/assets/i18n/es-VE.json.gz") set(I18N_es_VE "ON") endif() @@ -232,28 +232,28 @@ configure_file(contrib/initscripts/mympd.openrc.in contrib/initscripts/mympd.ope if(CMAKE_BUILD_TYPE MATCHES "(Release|Debug)") # set strict global compile flags add_compile_options( - "-fstack-protector-strong" - "-ffunction-sections" "-fdata-sections" + "-ffunction-sections" + "-fstack-protector-strong" + "-pedantic" "-Wall" "-Werror" - "-Wvla" - "-Winit-self" - "-Wuninitialized" "-Wextra" - "-pedantic" - "-Wunused-parameter" - "-Wshadow" - "-Wwrite-strings" "-Wformat" "-Wformat-security" - "-Wstrict-prototypes" + "-Winit-self" + "-Wmissing-include-dirs" + "-Wnested-externs" "-Wold-style-definition" "-Wredundant-decls" - "-Wnested-externs" - "-Wmissing-include-dirs" - "-Wundef" + "-Wshadow" "-Wsign-compare" + "-Wstrict-prototypes" + "-Wundef" + "-Wuninitialized" + "-Wunused-parameter" + "-Wvla" + "-Wwrite-strings" ) # check for supported compiler flags @@ -289,6 +289,7 @@ if(MYMPD_ENABLE_LIBASAN) "-fsanitize=enum" "-fsanitize=float-cast-overflow" "-fsanitize=float-divide-by-zero" + "-fsanitize=integer-divide-by-zero" "-fsanitize=nonnull-attribute" "-fsanitize=null" "-fsanitize=object-size" @@ -296,7 +297,6 @@ if(MYMPD_ENABLE_LIBASAN) "-fsanitize=returns-nonnull-attribute" "-fsanitize=shift" "-fsanitize=signed-integer-overflow" - "-fsanitize=integer-divide-by-zero" "-fsanitize=undefined" "-fsanitize=unreachable" "-fsanitize=vla-bound" @@ -336,7 +336,7 @@ endif() if(CMAKE_BUILD_TYPE STREQUAL "Release") add_link_options( "-pie" - "-Wl,-z,relro,-z,now,--gc-sections" + "-Wl,-z,relro,-z,now,--gc-sections,--as-needed" ) if(MYMPD_STRIP_BINARY) message("Generating stripped binary") diff --git a/SECURITY.md b/SECURITY.md index 6c3dc48a4..b9248aa05 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -2,10 +2,11 @@ ## Supported Versions -| Version | Supported | +| VERSION | SUPPORTED | | ------- | --------- | | Latest Release | :white_check_mark: | ## Reporting a Vulnerability + Please write a mail to: . I will respond as fast as possible. diff --git a/build.sh b/build.sh index 54e5a6fbd..95c6bd714 100755 --- a/build.sh +++ b/build.sh @@ -62,7 +62,7 @@ cd "$STARTPATH" || exit 1 umask 0022 #get myMPD version -VERSION=$(grep CPACK_PACKAGE_VERSION_ CMakeLists.txt | cut -d\" -f2 | tr '\n' '.' | sed 's/\.$//') +VERSION=$(grep " VERSION" CMakeLists.txt | sed 's/ VERSION //') COPYRIGHT="myMPD ${VERSION} | (c) 2018-2022 Juergen Mang | SPDX-License-Identifier: GPL-3.0-or-later | https://github.com/jcorporation/mympd" #check for command @@ -286,7 +286,7 @@ createassets() { } buildrelease() { - echo "Compiling myMPD" + echo "Compiling myMPD v${VERSION}" cmake -B release -DCMAKE_INSTALL_PREFIX:PATH=/usr -DCMAKE_BUILD_TYPE=Release . make -C release } @@ -356,7 +356,7 @@ copyassets() { } builddebug() { - echo "Compiling myMPD" + echo "Compiling myMPD v${VERSION}" if [ "$ACTION" = "memcheck" ] then MYMPD_ENABLE_LIBASAN=ON @@ -723,7 +723,7 @@ pkgarch() { then echo "Checking package with namcap" namcap PKGBUILD - namcap mympd-*.pkg.tar.xz + namcap "mympd-${VERSION}"*.pkg.tar.* else echo_warn "namcap not found, can't check package" fi @@ -796,7 +796,7 @@ installdeps() { elif [ -f /etc/arch-release ] then #arch - pacman -S gcc cmake perl openssl libid3tag flac lua pkgconf pcre2 gzip jq + pacman -Sy gcc base-devel cmake perl openssl libid3tag flac lua pkgconf pcre2 gzip jq elif [ -f /etc/alpine-release ] then #alpine @@ -987,9 +987,9 @@ createi18n() { #Update serviceworker TO_CACHE="" for CODE in $(jq -r "select(.missingPhrases < 100) | keys[]" "$STARTPATH/src/i18n/json/i18n.json" | grep -v "default") - do - TO_CACHE="${TO_CACHE}\nsubdir + '/assets/i18n/${CODE}.json'," - done + do + TO_CACHE="${TO_CACHE}\nsubdir + '/assets/i18n/${CODE}.json'," + done sed -e "s|__VERSION__|${VERSION}|g" -e "s|__I18NASSETS__|${TO_CACHE}|g" htdocs/sw.js.in > htdocs/sw.js } diff --git a/contrib/initscripts/mympd.openrc.in b/contrib/initscripts/mympd.openrc.in index 60a868ab2..1a6817c04 100755 --- a/contrib/initscripts/mympd.openrc.in +++ b/contrib/initscripts/mympd.openrc.in @@ -13,6 +13,6 @@ start_stop_daemon_args="" pidfile="/run/$name.pid" depend() { - need net - after firewall + need net + after firewall } diff --git a/contrib/man/mympd-script.1 b/contrib/man/mympd-script.1 index 0b4e17a8b..71ff61a1a 100644 --- a/contrib/man/mympd-script.1 +++ b/contrib/man/mympd-script.1 @@ -1,20 +1,35 @@ .\" Manpage for mympd-script. .\" Contact to correct errors or typos. -.TH man 1 "06 Nov 2022" "10.1.0" "mympd-script man page" +.TH man 1 "13 Nov 2022" "10.1.1" "mympd-script man page" + .SH NAME -mympd-script \- execute lua scripts through myMPD +mympd-script + .SH SYNOPSIS -mympd [/path/to/mympd.conf] -.SH DESCRIPTION -myMPD is a standalone and lightweight web-based MPD client. +mympd-script [arguments] -mympd-script is a small commandline tool to submit scripts to myMPD. It reads the script from STDIN and submits it to myMPD for execution. Key=Value parameters can be used to fill the arguments table in the Lua script. +.SH DESCRIPTION +mympd-script is a small commandline tool to execute myMPD scripts. .SH OPTIONS -Look at https://github.com/jcorporation/myMPD/wiki/Scripting -.SH BUGS -Look at https://github.com/jcorporation/myMPD/issues +.TP +\fBuri\fR +myMPD listening uri, e.g. "https://localhost" +.TP +\fBpartition\fR +MPD partition, e.g. "default" +.TP +\fBscriptname\fR +script to execute, use "-" to read the script from stdin. +.TP +\fBarguments\fR +optional space separated key=value pairs to fill the arguments table in the Lua script. + .SH AUTHOR Juergen Mang (mail@jcgames.de) +.SH BUGS +If you find a bug, please report it at https://github.com/jcorporation/myMPD/issues + +.SH SEE ALSO https://github.com/jcorporation/myMPD diff --git a/contrib/man/mympd-script.1.in b/contrib/man/mympd-script.1.in index 48c23a1d0..4553586e2 100644 --- a/contrib/man/mympd-script.1.in +++ b/contrib/man/mympd-script.1.in @@ -1,20 +1,35 @@ .\" Manpage for mympd-script. .\" Contact to correct errors or typos. .TH man 1 "__DATE_F3__" "__VERSION__" "mympd-script man page" + .SH NAME -mympd-script \- execute lua scripts through myMPD +mympd-script + .SH SYNOPSIS -mympd [/path/to/mympd.conf] -.SH DESCRIPTION -myMPD is a standalone and lightweight web-based MPD client. +mympd-script [arguments] -mympd-script is a small commandline tool to submit scripts to myMPD. It reads the script from STDIN and submits it to myMPD for execution. Key=Value parameters can be used to fill the arguments table in the Lua script. +.SH DESCRIPTION +mympd-script is a small commandline tool to execute myMPD scripts. .SH OPTIONS -Look at https://github.com/jcorporation/myMPD/wiki/Scripting -.SH BUGS -Look at https://github.com/jcorporation/myMPD/issues +.TP +\fBuri\fR +myMPD listening uri, e.g. "https://localhost" +.TP +\fBpartition\fR +MPD partition, e.g. "default" +.TP +\fBscriptname\fR +script to execute, use "-" to read the script from stdin. +.TP +\fBarguments\fR +optional space separated key=value pairs to fill the arguments table in the Lua script. + .SH AUTHOR Juergen Mang (mail@jcgames.de) +.SH BUGS +If you find a bug, please report it at https://github.com/jcorporation/myMPD/issues + +.SH SEE ALSO https://github.com/jcorporation/myMPD diff --git a/contrib/man/mympd.1 b/contrib/man/mympd.1 index e8f6d405f..bd774ce26 100644 --- a/contrib/man/mympd.1 +++ b/contrib/man/mympd.1 @@ -1,12 +1,12 @@ .\" Manpage for mympd. .\" Contact to correct errors or typos. -.TH man 1 "06 Nov 2022" "10.1.0" "mympd man page" +.TH man 1 "13 Nov 2022" "10.1.1" "mympd man page" .SH NAME myMPD \- standalone and mobile friendly web mpd client .SH SYNOPSIS -mympd +mympd [options] .SH DESCRIPTION myMPD is a standalone and lightweight web-based MPD client. It's tuned for minimal resource usage and requires only very few dependencies. Therefore myMPD is ideal for raspberry pis and similar devices. @@ -49,4 +49,8 @@ sets a pin for myMPD settings .SH AUTHOR Juergen Mang (mail@jcgames.de) +.SH BUGS +If you find a bug, please report it at https://github.com/jcorporation/myMPD/issues + +.SH SEE ALSO https://github.com/jcorporation/myMPD diff --git a/contrib/man/mympd.1.in b/contrib/man/mympd.1.in index 928ded9ec..05499320c 100644 --- a/contrib/man/mympd.1.in +++ b/contrib/man/mympd.1.in @@ -6,7 +6,7 @@ myMPD \- standalone and mobile friendly web mpd client .SH SYNOPSIS -mympd +mympd [options] .SH DESCRIPTION myMPD is a standalone and lightweight web-based MPD client. It's tuned for minimal resource usage and requires only very few dependencies. Therefore myMPD is ideal for raspberry pis and similar devices. @@ -49,4 +49,8 @@ sets a pin for myMPD settings .SH AUTHOR Juergen Mang (mail@jcgames.de) +.SH BUGS +If you find a bug, please report it at https://github.com/jcorporation/myMPD/issues + +.SH SEE ALSO https://github.com/jcorporation/myMPD diff --git a/contrib/packaging/alpine/APKBUILD b/contrib/packaging/alpine/APKBUILD index a28a5aefa..74b55a6da 100644 --- a/contrib/packaging/alpine/APKBUILD +++ b/contrib/packaging/alpine/APKBUILD @@ -6,7 +6,7 @@ # Maintainer: Juergen Mang # pkgname=mympd -pkgver=10.1.0 +pkgver=10.1.1 pkgrel=0 pkgdesc="myMPD is a standalone and mobile friendly web-based MPD client." url="https://jcorporation.github.io/myMPD/" @@ -22,10 +22,10 @@ options="!check" #no test suite build() { - cmake -B "$builddir/release" -DCMAKE_INSTALL_PREFIX:PATH=/usr -DCMAKE_BUILD_TYPE=Release -DMYMPD_MANPAGES=OFF -DMYMPD_STRIP_BINARY=OFF "$builddir" - make -C "$builddir/release" + cmake -B "$builddir/release" -DCMAKE_INSTALL_PREFIX:PATH=/usr -DCMAKE_BUILD_TYPE=Release -DMYMPD_MANPAGES=OFF -DMYMPD_STRIP_BINARY=OFF "$builddir" + make -C "$builddir/release" } package() { - make -C "$builddir/release" DESTDIR="$pkgdir" install + make -C "$builddir/release" DESTDIR="$pkgdir" install } diff --git a/contrib/packaging/alpine/APKBUILD.in b/contrib/packaging/alpine/APKBUILD.in index 4c10bba4a..c4f06fadf 100644 --- a/contrib/packaging/alpine/APKBUILD.in +++ b/contrib/packaging/alpine/APKBUILD.in @@ -22,10 +22,10 @@ options="!check" #no test suite build() { - cmake -B "$builddir/release" -DCMAKE_INSTALL_PREFIX:PATH=/usr -DCMAKE_BUILD_TYPE=Release -DMYMPD_MANPAGES=OFF -DMYMPD_STRIP_BINARY=OFF "$builddir" - make -C "$builddir/release" + cmake -B "$builddir/release" -DCMAKE_INSTALL_PREFIX:PATH=/usr -DCMAKE_BUILD_TYPE=Release -DMYMPD_MANPAGES=OFF -DMYMPD_STRIP_BINARY=OFF "$builddir" + make -C "$builddir/release" } package() { - make -C "$builddir/release" DESTDIR="$pkgdir" install + make -C "$builddir/release" DESTDIR="$pkgdir" install } diff --git a/contrib/packaging/arch/PKGBUILD b/contrib/packaging/arch/PKGBUILD index 52211219f..4e88cfee0 100644 --- a/contrib/packaging/arch/PKGBUILD +++ b/contrib/packaging/arch/PKGBUILD @@ -1,32 +1,37 @@ -# Maintainer: Juergen Mang -# Website: https://github.com/jcorporation/myMPD -# PKGBUILD Based on https://github.com/CultofRobots/archphile-custom/tree/master/mympd +# Maintainer: Juergen Mang pkgname=mympd -_pkgname=myMPD -pkgver=10.1.0 +pkgver=10.1.1 pkgrel=1 pkgdesc="A standalone and mobile friendly web-based MPD client." arch=('i686' 'x86_64' 'armv6h' 'armv7h' 'aarch64') url="https://jcorporation.github.io/myMPD/" -license=('GPL3') -depends=('pcre2' 'openssl' 'libid3tag' 'flac' 'lua') -makedepends=('cmake' 'perl' 'gzip' 'jq') -optdepends=() -provides=() -conflicts=() -replaces=() -backup=() +license=(GPL3) +depends=('flac' 'libid3tag' 'lua' 'openssl' 'pcre2') +makedepends=('cmake' 'gzip' 'jq' 'perl') install=archlinux.install -source=("mympd_${pkgver}.orig.tar.gz") +source=("${pkgname}_${pkgver}.orig.tar.gz") sha256sums=('SKIP') options=(debug strip) build() { - cmake -B release -DCMAKE_INSTALL_PREFIX:PATH=/usr -DCMAKE_BUILD_TYPE=Release -DMYMPD_STRIP_BINARY=OFF "${srcdir}" - make -C release + local cmake_options=( + -B build + -S "${srcdir}" + -DCMAKE_BUILD_TYPE=Release + -DCMAKE_INSTALL_PREFIX=/usr + -Wno-dev + ) + + cmake "${cmake_options[@]}" + cmake --build build +} + +check() { + ctest --test-dir build --output-on-failure } package() { - make -C release DESTDIR="$pkgdir/" install + DESTDIR="$pkgdir" cmake --install build + install -vDm 644 "${srcdir}"/{CHANGELOG,README}.md -t "$pkgdir/usr/share/doc/$pkgname/" } diff --git a/contrib/packaging/arch/PKGBUILD.in b/contrib/packaging/arch/PKGBUILD.in index 84a71d54f..4bae8f66e 100644 --- a/contrib/packaging/arch/PKGBUILD.in +++ b/contrib/packaging/arch/PKGBUILD.in @@ -1,32 +1,37 @@ -# Maintainer: Juergen Mang -# Website: https://github.com/jcorporation/myMPD -# PKGBUILD Based on https://github.com/CultofRobots/archphile-custom/tree/master/mympd +# Maintainer: Juergen Mang pkgname=mympd -_pkgname=myMPD pkgver=__VERSION__ pkgrel=1 pkgdesc="A standalone and mobile friendly web-based MPD client." arch=('i686' 'x86_64' 'armv6h' 'armv7h' 'aarch64') url="https://jcorporation.github.io/myMPD/" -license=('GPL3') -depends=('pcre2' 'openssl' 'libid3tag' 'flac' 'lua') -makedepends=('cmake' 'perl' 'gzip' 'jq') -optdepends=() -provides=() -conflicts=() -replaces=() -backup=() +license=(GPL3) +depends=('flac' 'libid3tag' 'lua' 'openssl' 'pcre2') +makedepends=('cmake' 'gzip' 'jq' 'perl') install=archlinux.install -source=("mympd_${pkgver}.orig.tar.gz") +source=("${pkgname}_${pkgver}.orig.tar.gz") sha256sums=('SKIP') options=(debug strip) build() { - cmake -B release -DCMAKE_INSTALL_PREFIX:PATH=/usr -DCMAKE_BUILD_TYPE=Release -DMYMPD_STRIP_BINARY=OFF "${srcdir}" - make -C release + local cmake_options=( + -B build + -S "${srcdir}" + -DCMAKE_BUILD_TYPE=Release + -DCMAKE_INSTALL_PREFIX=/usr + -Wno-dev + ) + + cmake "${cmake_options[@]}" + cmake --build build +} + +check() { + ctest --test-dir build --output-on-failure } package() { - make -C release DESTDIR="$pkgdir/" install + DESTDIR="$pkgdir" cmake --install build + install -vDm 644 "${srcdir}"/{CHANGELOG,README}.md -t "$pkgdir/usr/share/doc/$pkgname/" } diff --git a/contrib/packaging/arch/archlinux.install b/contrib/packaging/arch/archlinux.install index df9d5e89a..c9f986f81 100644 --- a/contrib/packaging/arch/archlinux.install +++ b/contrib/packaging/arch/archlinux.install @@ -1,4 +1,3 @@ -# # SPDX-License-Identifier: GPL-3.0-or-later # myMPD (c) 2018-2022 Juergen Mang # https://github.com/jcorporation/mympd diff --git a/contrib/packaging/debian/changelog b/contrib/packaging/debian/changelog index 27fd7112e..148186a0d 100644 --- a/contrib/packaging/debian/changelog +++ b/contrib/packaging/debian/changelog @@ -1,5 +1,5 @@ -mympd (10.1.0-1) unstable; urgency=medium +mympd (10.1.1-1) unstable; urgency=medium * Release from master - -- Juergen Mang Sun, 06 Nov 2022 12:11:34 +0100 + -- Juergen Mang Sun, 13 Nov 2022 12:11:15 +0100 diff --git a/contrib/packaging/debian/source/lintian-overrides b/contrib/packaging/debian/source/lintian-overrides deleted file mode 100644 index eaa143b7a..000000000 --- a/contrib/packaging/debian/source/lintian-overrides +++ /dev/null @@ -1,9 +0,0 @@ -# Long lines in minified javascript files -mympd source: source-is-missing dist/htdocs/sw.min.js -mympd source: source-is-missing dist/htdocs/js/i18n.min.js -mympd source: source-is-missing dist/htdocs/js/keymap.min.js -mympd source: source-is-missing dist/htdocs/js/long-press-event.min.js - -mympd source: source-is-missing htdocs/js/ligatures.js line length is * -mympd source: source-is-missing htdocs/test/api.js line length is * -mympd source: source-is-missing htdocs/test/blns.js line length is * diff --git a/contrib/packaging/gentoo/media-sound/mympd/mympd-10.1.0.ebuild b/contrib/packaging/gentoo/media-sound/mympd/mympd-10.1.0.ebuild deleted file mode 100644 index e093a3256..000000000 --- a/contrib/packaging/gentoo/media-sound/mympd/mympd-10.1.0.ebuild +++ /dev/null @@ -1,69 +0,0 @@ -# Copyright 1999-2021 Gentoo Authors -# Distributed under the terms of the GNU General Public License v2 - -EAPI=7 - -inherit eutils cmake systemd - -MY_PN="myMPD" - -DESCRIPTION="myMPD is a standalone and mobile friendly web-based MPD client" -HOMEPAGE="https://jcorporation.github.io/myMPD" -SRC_URI="https://github.com/jcorporation/${MY_PN}/archive/v${PV}.tar.gz -> ${PN}-${PV}.tar.gz" - -LICENSE="GPL-3" -SLOT="0" -KEYWORDS="~amd64 ~x86 ~arm ~arm64" -IUSE="+flac +id3tag +ssl +lua systemd" - -BDEPEND=" - >=dev-util/cmake-3.13 - dev-lang/perl - app-misc/jq" - -RDEPEND=" - acct-group/mympd - acct-user/mympd - id3tag? ( media-libs/libid3tag ) - flac? ( media-libs/flac ) - ssl? ( >=dev-libs/openssl-1.1 ) - lua? ( >=dev-lang/lua-5.3 ) - systemd? ( sys-apps/systemd ) - dev-libs/libpcre2" - -QA_PRESTRIPPED=" - usr/bin/mympd - usr/bin/mympd-script" - -S="${WORKDIR}/${MY_PN}-${PV}" - -src_compile() { - default - MYMPD_ENABLE_SSL=$(usex ssl "ON" "OFF") - MYMPD_ENABLE_LIBID3TAG=$(usex id3tag "ON" "OFF") - MYMPD_ENABLE_FLAC=$(usex flac "ON" "OFF") - MYMPD_ENABLE_LUA=$(usex lua "ON" "OFF") - cmake -B release -DCMAKE_INSTALL_PREFIX:PATH=/usr -DCMAKE_BUILD_TYPE=Release \ - -DMYMPD_ENABLE_SSL=$MYMPD_ENABLE_SSL -DMYMPD_ENABLE_LIBID3TAG=$MYMPD_ENABLE_LIBID3TAG \ - -DMYMPD_ENABLE_FLAC=$MYMPD_ENABLE_FLAC -DMYMPD_ENABLE_LUA=$MYMPD_ENABLE_LUA . - make -C release || die -} - -src_install() { - cd release - dobin bin/mympd - if use lua; then - dobin bin/mympd-script - fi - newinitd "contrib/initscripts/mympd.openrc" "${PN}" - if use systemd; then - systemd_newunit contrib/initscripts/mympd.service mympd.service - fi - dodoc ${S}/README.md -} - -pkg_postinst() { - elog - elog "myMPD installed" - elog -} diff --git a/contrib/packaging/gentoo/media-sound/mympd/mympd-10.1.1.ebuild b/contrib/packaging/gentoo/media-sound/mympd/mympd-10.1.1.ebuild new file mode 100644 index 000000000..25d1566a6 --- /dev/null +++ b/contrib/packaging/gentoo/media-sound/mympd/mympd-10.1.1.ebuild @@ -0,0 +1,69 @@ +# Copyright 1999-2021 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=7 + +inherit eutils cmake systemd + +MY_PN="myMPD" + +DESCRIPTION="myMPD is a standalone and mobile friendly web-based MPD client" +HOMEPAGE="https://jcorporation.github.io/myMPD" +SRC_URI="https://github.com/jcorporation/${MY_PN}/archive/v${PV}.tar.gz -> ${PN}-${PV}.tar.gz" + +LICENSE="GPL-3" +SLOT="0" +KEYWORDS="~amd64 ~x86 ~arm ~arm64" +IUSE="+flac +id3tag +ssl +lua systemd" + +BDEPEND=" + >=dev-util/cmake-3.13 + dev-lang/perl + app-misc/jq" + +RDEPEND=" + acct-group/mympd + acct-user/mympd + id3tag? ( media-libs/libid3tag ) + flac? ( media-libs/flac ) + ssl? ( >=dev-libs/openssl-1.1 ) + lua? ( >=dev-lang/lua-5.3 ) + systemd? ( sys-apps/systemd ) + dev-libs/libpcre2" + +QA_PRESTRIPPED=" + usr/bin/mympd + usr/bin/mympd-script" + +S="${WORKDIR}/${MY_PN}-${PV}" + +src_compile() { + default + MYMPD_ENABLE_SSL=$(usex ssl "ON" "OFF") + MYMPD_ENABLE_LIBID3TAG=$(usex id3tag "ON" "OFF") + MYMPD_ENABLE_FLAC=$(usex flac "ON" "OFF") + MYMPD_ENABLE_LUA=$(usex lua "ON" "OFF") + cmake -B release -DCMAKE_INSTALL_PREFIX:PATH=/usr -DCMAKE_BUILD_TYPE=Release \ + -DMYMPD_ENABLE_SSL=$MYMPD_ENABLE_SSL -DMYMPD_ENABLE_LIBID3TAG=$MYMPD_ENABLE_LIBID3TAG \ + -DMYMPD_ENABLE_FLAC=$MYMPD_ENABLE_FLAC -DMYMPD_ENABLE_LUA=$MYMPD_ENABLE_LUA . + make -C release || die +} + +src_install() { + cd release + dobin bin/mympd + if use lua; then + dobin bin/mympd-script + fi + newinitd "contrib/initscripts/mympd.openrc" "${PN}" + if use systemd; then + systemd_newunit contrib/initscripts/mympd.service mympd.service + fi + dodoc ${S}/README.md +} + +pkg_postinst() { + elog + elog "myMPD installed" + elog +} diff --git a/contrib/packaging/openwrt/Makefile b/contrib/packaging/openwrt/Makefile index d288a0521..edbb97074 100644 --- a/contrib/packaging/openwrt/Makefile +++ b/contrib/packaging/openwrt/Makefile @@ -8,7 +8,7 @@ include $(TOPDIR)/rules.mk PKG_NAME := mympd -PKG_VERSION := 10.1.0 +PKG_VERSION := 10.1.1 PKG_RELEASE := 1 PKG_SOURCE := $(PKG_NAME)-$(PKG_VERSION).tar.gz @@ -24,10 +24,10 @@ PKG_BUILD_DIR := $(BUILD_DIR)/myMPD-$(PKG_VERSION) PKG_BUILD_PARALLEL := 1 PKG_FORTIFY_SOURCE := 0 PKG_CONFIG_DEPENDS := \ - CONFIG_MYMPD_FLAC \ - CONFIG_MYMPD_ID3TAG \ - CONFIG_MYMPD_LUA \ - CONFIG_MYMPD_SSL + CONFIG_MYMPD_FLAC \ + CONFIG_MYMPD_ID3TAG \ + CONFIG_MYMPD_LUA \ + CONFIG_MYMPD_SSL CMAKE_BINARY_SUBDIR := release @@ -48,43 +48,43 @@ Standalone and mobile friendly web MPD client with a tiny footprint and advanced endef define Package/mympd/config - if PACKAGE_mympd + if PACKAGE_mympd - config MYMPD_FLAC - bool "Extracting cover images from FLAC files" - default y + config MYMPD_FLAC + bool "Extracting cover images from FLAC files" + default y - config MYMPD_ID3TAG - bool "Extracting cover images from ID3 tags" - default y + config MYMPD_ID3TAG + bool "Extracting cover images from ID3 tags" + default y - config MYMPD_LUA - bool "LUA scripts support" - default n + config MYMPD_LUA + bool "LUA scripts support" + default n - config MYMPD_SSL - bool "HTTPS support (with OpenSSL)" - default n + config MYMPD_SSL + bool "HTTPS support (with OpenSSL)" + default n - endif + endif endef CMAKE_OPTIONS += \ - -DCMAKE_BUILD_TYPE=Release \ - -DMYMPD_ENABLE_FLAC=$(if $(CONFIG_MYMPD_FLAC),ON,OFF) \ - -DMYMPD_ENABLE_LIBID3TAG=$(if $(CONFIG_MYMPD_ID3TAG),ON,OFF) \ - -DMYMPD_ENABLE_LUA=$(if $(CONFIG_MYMPD_LUA),ON,OFF) \ - -DMYMPD_ENABLE_SSL=$(if $(CONFIG_MYMPD_SSL),ON,OFF) + -DCMAKE_BUILD_TYPE=Release \ + -DMYMPD_ENABLE_FLAC=$(if $(CONFIG_MYMPD_FLAC),ON,OFF) \ + -DMYMPD_ENABLE_LIBID3TAG=$(if $(CONFIG_MYMPD_ID3TAG),ON,OFF) \ + -DMYMPD_ENABLE_LUA=$(if $(CONFIG_MYMPD_LUA),ON,OFF) \ + -DMYMPD_ENABLE_SSL=$(if $(CONFIG_MYMPD_SSL),ON,OFF) define Package/mympd/install - $(INSTALL_DIR) $(1)/usr/bin - $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/mympd $(1)/usr/bin/ - $(if $(CONFIG_MYMPD_LUA),$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/mympd-script $(1)/usr/bin/) - - $(INSTALL_DIR) $(1)/etc/config - $(INSTALL_CONF) ./files/mympd.config $(1)/etc/config/mympd - $(INSTALL_DIR) $(1)/etc/init.d - $(INSTALL_BIN) ./files/mympd.init $(1)/etc/init.d/mympd + $(INSTALL_DIR) $(1)/usr/bin + $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/mympd $(1)/usr/bin/ + $(if $(CONFIG_MYMPD_LUA),$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/mympd-script $(1)/usr/bin/) + + $(INSTALL_DIR) $(1)/etc/config + $(INSTALL_CONF) ./files/mympd.config $(1)/etc/config/mympd + $(INSTALL_DIR) $(1)/etc/init.d + $(INSTALL_BIN) ./files/mympd.init $(1)/etc/init.d/mympd endef $(eval $(call BuildPackage,mympd)) diff --git a/contrib/packaging/openwrt/Makefile.in b/contrib/packaging/openwrt/Makefile.in index 9e5d51467..0d3e143c7 100644 --- a/contrib/packaging/openwrt/Makefile.in +++ b/contrib/packaging/openwrt/Makefile.in @@ -24,10 +24,10 @@ PKG_BUILD_DIR := $(BUILD_DIR)/myMPD-$(PKG_VERSION) PKG_BUILD_PARALLEL := 1 PKG_FORTIFY_SOURCE := 0 PKG_CONFIG_DEPENDS := \ - CONFIG_MYMPD_FLAC \ - CONFIG_MYMPD_ID3TAG \ - CONFIG_MYMPD_LUA \ - CONFIG_MYMPD_SSL + CONFIG_MYMPD_FLAC \ + CONFIG_MYMPD_ID3TAG \ + CONFIG_MYMPD_LUA \ + CONFIG_MYMPD_SSL CMAKE_BINARY_SUBDIR := release @@ -48,43 +48,43 @@ Standalone and mobile friendly web MPD client with a tiny footprint and advanced endef define Package/mympd/config - if PACKAGE_mympd + if PACKAGE_mympd - config MYMPD_FLAC - bool "Extracting cover images from FLAC files" - default y + config MYMPD_FLAC + bool "Extracting cover images from FLAC files" + default y - config MYMPD_ID3TAG - bool "Extracting cover images from ID3 tags" - default y + config MYMPD_ID3TAG + bool "Extracting cover images from ID3 tags" + default y - config MYMPD_LUA - bool "LUA scripts support" - default n + config MYMPD_LUA + bool "LUA scripts support" + default n - config MYMPD_SSL - bool "HTTPS support (with OpenSSL)" - default n + config MYMPD_SSL + bool "HTTPS support (with OpenSSL)" + default n - endif + endif endef CMAKE_OPTIONS += \ - -DCMAKE_BUILD_TYPE=Release \ - -DMYMPD_ENABLE_FLAC=$(if $(CONFIG_MYMPD_FLAC),ON,OFF) \ - -DMYMPD_ENABLE_LIBID3TAG=$(if $(CONFIG_MYMPD_ID3TAG),ON,OFF) \ - -DMYMPD_ENABLE_LUA=$(if $(CONFIG_MYMPD_LUA),ON,OFF) \ - -DMYMPD_ENABLE_SSL=$(if $(CONFIG_MYMPD_SSL),ON,OFF) + -DCMAKE_BUILD_TYPE=Release \ + -DMYMPD_ENABLE_FLAC=$(if $(CONFIG_MYMPD_FLAC),ON,OFF) \ + -DMYMPD_ENABLE_LIBID3TAG=$(if $(CONFIG_MYMPD_ID3TAG),ON,OFF) \ + -DMYMPD_ENABLE_LUA=$(if $(CONFIG_MYMPD_LUA),ON,OFF) \ + -DMYMPD_ENABLE_SSL=$(if $(CONFIG_MYMPD_SSL),ON,OFF) define Package/mympd/install - $(INSTALL_DIR) $(1)/usr/bin - $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/mympd $(1)/usr/bin/ - $(if $(CONFIG_MYMPD_LUA),$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/mympd-script $(1)/usr/bin/) - - $(INSTALL_DIR) $(1)/etc/config - $(INSTALL_CONF) ./files/mympd.config $(1)/etc/config/mympd - $(INSTALL_DIR) $(1)/etc/init.d - $(INSTALL_BIN) ./files/mympd.init $(1)/etc/init.d/mympd + $(INSTALL_DIR) $(1)/usr/bin + $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/mympd $(1)/usr/bin/ + $(if $(CONFIG_MYMPD_LUA),$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/mympd-script $(1)/usr/bin/) + + $(INSTALL_DIR) $(1)/etc/config + $(INSTALL_CONF) ./files/mympd.config $(1)/etc/config/mympd + $(INSTALL_DIR) $(1)/etc/init.d + $(INSTALL_BIN) ./files/mympd.init $(1)/etc/init.d/mympd endef $(eval $(call BuildPackage,mympd)) diff --git a/contrib/packaging/openwrt/files/mympd.config b/contrib/packaging/openwrt/files/mympd.config index b6ad93e26..d24e6dbfb 100644 --- a/contrib/packaging/openwrt/files/mympd.config +++ b/contrib/packaging/openwrt/files/mympd.config @@ -1,23 +1,23 @@ # Consult documentation at https://jcorporation.github.io/myMPD/configuration config mympd main - # CAUTION: there can be a lot of writes to workdir directory - # and if it's on raw flash, this can kill it very fast. - option workdir '/var/lib/mympd' - option mpd_host 'localhost' - option mpd_port '6600' - option acl '' - option http_host '0.0.0.0' - option http_port '80' - option loglevel '5' + # CAUTION: there can be a lot of writes to workdir directory + # and if it's on raw flash, this can kill it very fast. + option workdir '/var/lib/mympd' + option mpd_host 'localhost' + option mpd_port '6600' + option acl '' + option http_host '0.0.0.0' + option http_port '80' + option loglevel '5' - # Requires enabled MYMPD_LUA at compilation time - option lualibs 'all' - option scriptacl '+127.0.0.1' + # Requires enabled MYMPD_LUA at compilation time + option lualibs 'all' + option scriptacl '+127.0.0.1' - # Requires enabled MYMPD_SSL at compilation time - option ssl 'false' - option ssl_port '443' - option ssl_san '' - option custom_cert 'false' - option ssl_cert '' - option ssl_key '' + # Requires enabled MYMPD_SSL at compilation time + option ssl 'false' + option ssl_port '443' + option ssl_san '' + option custom_cert 'false' + option ssl_cert '' + option ssl_key '' diff --git a/contrib/packaging/openwrt/files/mympd.init b/contrib/packaging/openwrt/files/mympd.init index c65647861..4fc4e1b06 100644 --- a/contrib/packaging/openwrt/files/mympd.init +++ b/contrib/packaging/openwrt/files/mympd.init @@ -4,46 +4,46 @@ USE_PROCD=1 START=94 start_service() { - config_load /etc/config/mympd - - local tempdir=$(mktemp -d) - local configdir=${tempdir}/config - local statedir=${tempdir}/state - - mkdir -p -m 755 ${configdir} ${statedir} - - [ -z "${mpd_host}" ] && mpd_host='localhost' - config_get main mpd_host > ${statedir}/mpd_host - [ -z "${mpd_port}" ] && mpd_port='6600' - config_get main mpd_port > ${statedir}/mpd_port - - config_get main acl > ${configdir}/acl - config_get main http_host > ${configdir}/http_host - config_get main http_port > ${configdir}/http_port - config_get main loglevel > ${configdir}/loglevel - - config_get main lualibs > ${configdir}/lualibs - config_get main scriptacl > ${configdir}/scriptacl - - config_get main ssl > ${configdir}/ssl - config_get main ssl_port > ${configdir}/ssl_port - config_get main ssl_san > ${configdir}/ssl_san - config_get main custom_cert > ${configdir}/custom_cert - config_get main ssl_cert > ${configdir}/ssl_cert - config_get main ssl_key > ${configdir}/ssl_key - - local workdir - config_get workdir main workdir - [ -z "${workdir}" ] && workdir='/var/lib/mympd' - mkdir -p -m 755 ${workdir} - cp -f -R ${tempdir}/* ${workdir}/ - rm -f -R ${tempdir} - chown -R mympd:mympd ${workdir} - - procd_open_instance mympd - procd_set_param file /etc/config/mympd - procd_set_param command /usr/bin/mympd -w ${workdir} - procd_set_param stdout 1 - procd_set_param stderr 1 - procd_close_instance mympd + config_load /etc/config/mympd + + local tempdir=$(mktemp -d) + local configdir=${tempdir}/config + local statedir=${tempdir}/state + + mkdir -p -m 755 ${configdir} ${statedir} + + [ -z "${mpd_host}" ] && mpd_host='localhost' + config_get main mpd_host > ${statedir}/mpd_host + [ -z "${mpd_port}" ] && mpd_port='6600' + config_get main mpd_port > ${statedir}/mpd_port + + config_get main acl > ${configdir}/acl + config_get main http_host > ${configdir}/http_host + config_get main http_port > ${configdir}/http_port + config_get main loglevel > ${configdir}/loglevel + + config_get main lualibs > ${configdir}/lualibs + config_get main scriptacl > ${configdir}/scriptacl + + config_get main ssl > ${configdir}/ssl + config_get main ssl_port > ${configdir}/ssl_port + config_get main ssl_san > ${configdir}/ssl_san + config_get main custom_cert > ${configdir}/custom_cert + config_get main ssl_cert > ${configdir}/ssl_cert + config_get main ssl_key > ${configdir}/ssl_key + + local workdir + config_get workdir main workdir + [ -z "${workdir}" ] && workdir='/var/lib/mympd' + mkdir -p -m 755 ${workdir} + cp -f -R ${tempdir}/* ${workdir}/ + rm -f -R ${tempdir} + chown -R mympd:mympd ${workdir} + + procd_open_instance mympd + procd_set_param file /etc/config/mympd + procd_set_param command /usr/bin/mympd -w ${workdir} + procd_set_param stdout 1 + procd_set_param stderr 1 + procd_close_instance mympd } diff --git a/contrib/packaging/rpm/mympd.spec b/contrib/packaging/rpm/mympd.spec index 15532fba8..f3ea45dc9 100644 --- a/contrib/packaging/rpm/mympd.spec +++ b/contrib/packaging/rpm/mympd.spec @@ -4,7 +4,7 @@ # (c) 2018-2022 Juergen Mang Name: mympd -Version: 10.1.0 +Version: 10.1.1 Release: 0 License: GPL-3.0-or-later Group: Productivity/Multimedia/Sound/Players @@ -31,7 +31,10 @@ myMPD is a standalone and lightweight web-based MPD client. It's tuned for minimal resource usage and requires only very few dependencies. Therefore myMPD is ideal for raspberry pis and similar devices. -%debug_package +%if 0%{?disturl:1} + # build debug package in obs + %debug_package +%endif %prep %setup -q -n %{name}-%{version} @@ -67,5 +70,5 @@ fi %license LICENSE.md %changelog -* Sun Nov 06 2022 Juergen Mang 10.1.0-0 +* Sun Nov 13 2022 Juergen Mang 10.1.1-0 - Version from master diff --git a/contrib/packaging/rpm/mympd.spec.in b/contrib/packaging/rpm/mympd.spec.in index 4542b8f47..b27ab9cb7 100644 --- a/contrib/packaging/rpm/mympd.spec.in +++ b/contrib/packaging/rpm/mympd.spec.in @@ -31,7 +31,10 @@ myMPD is a standalone and lightweight web-based MPD client. It's tuned for minimal resource usage and requires only very few dependencies. Therefore myMPD is ideal for raspberry pis and similar devices. -%debug_package +%if 0%{?disturl:1} + # build debug package in obs + %debug_package +%endif %prep %setup -q -n %{name}-%{version} diff --git a/dist/rax/CMakeLists.txt b/dist/rax/CMakeLists.txt index 99b26db1a..d20de1620 100644 --- a/dist/rax/CMakeLists.txt +++ b/dist/rax/CMakeLists.txt @@ -11,6 +11,12 @@ target_sources(rax PUBLIC rax.h ) + +target_include_directories(rax + PRIVATE + ${PROJECT_SOURCE_DIR} +) + if(CMAKE_BUILD_TYPE MATCHES "(Release|Debug)") target_compile_options(rax PRIVATE diff --git a/dist/rax/rax_malloc.h b/dist/rax/rax_malloc.h index b65543bf3..9c5b461ab 100644 --- a/dist/rax/rax_malloc.h +++ b/dist/rax/rax_malloc.h @@ -38,7 +38,7 @@ #ifndef RAX_ALLOC_H #define RAX_ALLOC_H -#include "../../src/lib/mem.h" +#include "src/lib/mem.h" #define rax_malloc malloc_assert #define rax_realloc realloc_assert diff --git a/dist/sds/CMakeLists.txt b/dist/sds/CMakeLists.txt index aba348b77..a85f51ecc 100644 --- a/dist/sds/CMakeLists.txt +++ b/dist/sds/CMakeLists.txt @@ -11,3 +11,8 @@ target_sources(sds PUBLIC sds.h ) + +target_include_directories(sds + PRIVATE + ${PROJECT_SOURCE_DIR} +) diff --git a/dist/sds/sdsalloc.h b/dist/sds/sdsalloc.h index cef3a6392..5a4032a03 100644 --- a/dist/sds/sdsalloc.h +++ b/dist/sds/sdsalloc.h @@ -37,7 +37,7 @@ * the include of your alternate allocator if needed (not needed in order * to use the default libc allocator). */ -#include "../../src/lib/mem.h" +#include "src/lib/mem.h" #define s_malloc malloc_assert #define s_realloc realloc_assert diff --git a/docs/_includes/version b/docs/_includes/version index 3b9bddfcc..8af8c37db 100644 --- a/docs/_includes/version +++ b/docs/_includes/version @@ -1 +1 @@ -10.1.0 \ No newline at end of file +10.1.1 \ No newline at end of file diff --git a/docs/installation/compiling/index.md b/docs/installation/compiling/index.md index 353da4f7a..a8177ac82 100644 --- a/docs/installation/compiling/index.md +++ b/docs/installation/compiling/index.md @@ -17,6 +17,7 @@ title: Compiling Get the appropriated tarball or clone the git repository and checkout the wanted branch. **Example: Clone and use devel branch:** + ``` git clone https://github.com/jcorporation/myMPD.git git checkout devel diff --git a/docs/installation/docker.md b/docs/installation/docker.md index 3bd43a463..c1f368d92 100644 --- a/docs/installation/docker.md +++ b/docs/installation/docker.md @@ -21,6 +21,7 @@ Use ``docker pull ghcr.io/jcorporation/mympd/mympd:latest`` to use the latest im ## Usage Docker Compose: + ``` --- version: "3.x" @@ -42,6 +43,7 @@ services: ``` Docker CLI: + ``` docker run -d \ --name=mympd \ diff --git a/docs/references/custom-navbar-icons.md b/docs/references/custom-navbar-icons.md index 69b384f1a..55e5d5b3a 100644 --- a/docs/references/custom-navbar-icons.md +++ b/docs/references/custom-navbar-icons.md @@ -14,6 +14,7 @@ The navbar icons can be customized. You must edit the file `/var/lib/mympd/state {: .table .table-sm } Default navbar definition: + ``` [ { diff --git a/docs/references/feature-matrix.md b/docs/references/feature-matrix.md index f89cbff55..95102d50b 100644 --- a/docs/references/feature-matrix.md +++ b/docs/references/feature-matrix.md @@ -18,9 +18,9 @@ myMPD support only MPD 0.21.0 and above. | Consume OneShot | 0.24.0 | OneShot mode for consume | | Queue save modes | 0.24.0 | Save queue as new playlist, replace playlist or append to playlist | | Advanced queue search | 0.24.0 | Queue sorting and priority filter | -| Add after current song (position/whence arg for load/searchadd) | 0.23.5 | Adds items to the queue after current playing song| +| Add after current song (position/whence arg for load/searchadd) | 0.23.5 | Adds items to the queue after current playing song | | Insert into playlist (position arg for playlistadd) | 0.23.5 | Inserts songs into a playlist | -| Remove range in playlist (range arg for playlistdelete) | 0.23.3 | Removes a range of songs in a playlist| -| Partitions | 0.22.0 | Concurrent partition support| +| Remove range in playlist (range arg for playlistdelete) | 0.23.3 | Removes a range of songs in a playlist | +| Partitions | 0.22.0 | Concurrent partition support | | Embedded albumart (readpicture) | 0.22.0 | myMPD can read pictures tags directly if it has access to the musicdirectory | {: .table .table-sm } diff --git a/docs/references/local-playback.md b/docs/references/local-playback.md index 18233c21f..6b442d0a8 100644 --- a/docs/references/local-playback.md +++ b/docs/references/local-playback.md @@ -17,13 +17,13 @@ MPD configuration: ``` audio_output { - type "httpd" - name "HTTP Stream" - encoder "lame" #to support safari on ios - port "8000" - bitrate "128" - format "44100:16:1" - always_on "yes" - tags "yes" + type "httpd" + name "HTTP Stream" + encoder "lame" #to support safari on ios + port "8000" + bitrate "128" + format "44100:16:1" + always_on "yes" + tags "yes" } ``` diff --git a/docs/references/smart-playlists.md b/docs/references/smart-playlists.md index 3e4bb5599..ee37bbedf 100644 --- a/docs/references/smart-playlists.md +++ b/docs/references/smart-playlists.md @@ -6,9 +6,9 @@ title: Smart playlists In the default configuration there are three smart playlists: - 1. Best Rated - 2. Most Played - 3. Newest Songs +1. Best Rated +2. Most Played +3. Newest Songs Additionally there is a smart playlist generation rule that creates one smart playlist per genre. @@ -33,13 +33,13 @@ myMPD creates per default three smart playlists. Smart playlists are defined in ### Sticker based - - myMPDsmart-bestRated: `{"type": "sticker", "sticker": "like", "maxentries": 200, "minvalue": 2, "sort": ""}` - - myMPDsmart-mostPlayed: `{"type": "sticker", "sticker": "playCount", "maxentries": 200, "minvalue": 10,"sort": ""}` +- myMPDsmart-bestRated: `{"type": "sticker", "sticker": "like", "maxentries": 200, "minvalue": 2, "sort": ""}` +- myMPDsmart-mostPlayed: `{"type": "sticker", "sticker": "playCount", "maxentries": 200, "minvalue": 10,"sort": ""}` ### Newest songs - - myMPDsmart-newestSongs: `{"type": "newest", "timerange": 604800, "sort":""}` +- myMPDsmart-newestSongs: `{"type": "newest", "timerange": 604800, "sort":""}` ### Saved search - - savedSearch: `{"type":"search", "expression":"((Artist contains 'test'))", "sort":"Album"}` +- savedSearch: `{"type":"search", "expression":"((Artist contains 'test'))", "sort":"Album"}` diff --git a/docs/references/translating_status.md b/docs/references/translating_status.md index 55484b4b4..cbab30810 100644 --- a/docs/references/translating_status.md +++ b/docs/references/translating_status.md @@ -1,8 +1,9 @@ -- es-VE: 517 missing phrases -- fi-FI: 513 missing phrases -- fr-FR: 20 missing phrases -- it-IT: 20 missing phrases -- ja-JP: 73 missing phrases -- ko-KR: 137 missing phrases -- nl-NL: 20 missing phrases -- zh-CN: 71 missing phrases +- es-ES: 757 missing phrases +- es-VE: 516 missing phrases +- fi-FI: 512 missing phrases +- fr-FR: 19 missing phrases +- it-IT: 19 missing phrases +- ja-JP: fully translated +- ko-KR: 136 missing phrases +- nl-NL: 19 missing phrases +- zh-CN: 70 missing phrases diff --git a/docs/references/webradios.md b/docs/references/webradios.md index 0995c5e85..7974ba923 100644 --- a/docs/references/webradios.md +++ b/docs/references/webradios.md @@ -32,6 +32,7 @@ MPD loads this playlist with the curl plugin, myMPD calculates the correct http ``` ### Example + ``` #EXTM3U #EXTINF:-1,SWR 1 BW diff --git a/docs/scripting/index.md b/docs/scripting/index.md index abb7f3d6c..0c03110dd 100644 --- a/docs/scripting/index.md +++ b/docs/scripting/index.md @@ -79,6 +79,7 @@ mympd_api("MYMPD_API_PLAYER_PLAY") ### With arguments Script should be called with an argument named playlist. + ``` -- load a playlist mympd_api("MYMPD_API_QUEUE_REPLACE_PLAYLIST", "plist", arguments["playlist"]) diff --git a/htdocs/js/QueueCurrent.js b/htdocs/js/QueueCurrent.js index d35a1ac26..2d60de352 100644 --- a/htdocs/js/QueueCurrent.js +++ b/htdocs/js/QueueCurrent.js @@ -349,6 +349,7 @@ function queueSetCurrentSong() { posTd.textContent = getData(old, 'songpos') + 1; } old.classList.remove('queue-playing'); + old.style.removeProperty('background'); } //set playing row setPlayingRow(); diff --git a/htdocs/js/popover.js b/htdocs/js/popover.js index e48147701..14085c9f3 100644 --- a/htdocs/js/popover.js +++ b/htdocs/js/popover.js @@ -341,6 +341,7 @@ function addMenuItemsNavbarActions(popoverBody, el) { addMenuItem(popoverBody, {"cmd": "appGoto", "options": ["Browse", "Database", undefined]}, 'Show browse database'); addMenuItem(popoverBody, {"cmd": "appGoto", "options": ["Browse", "Playlists", undefined]}, 'Show browse playlists'); addMenuItem(popoverBody, {"cmd": "appGoto", "options": ["Browse", "Filesystem", undefined]}, 'Show browse filesystem'); + addMenuItem(popoverBody, {"cmd": "appGoto", "options": ["Browse", "Radio", undefined]}, 'Show browse webradio'); break; } } diff --git a/htdocs/js/version.js b/htdocs/js/version.js index bc4a391f9..6bc497fd9 100644 --- a/htdocs/js/version.js +++ b/htdocs/js/version.js @@ -1 +1 @@ -const myMPDversion = '10.1.0'; +const myMPDversion = '10.1.1'; diff --git a/src/compile_time.h.in b/src/compile_time.h.in index d47b7d31d..6b0d34a03 100644 --- a/src/compile_time.h.in +++ b/src/compile_time.h.in @@ -30,6 +30,7 @@ //translation files #cmakedefine I18N_de_DE #cmakedefine I18N_en_US +#cmakedefine I18N_es_ES #cmakedefine I18N_es_VE #cmakedefine I18N_fi_FI #cmakedefine I18N_fr_FR @@ -40,10 +41,7 @@ #cmakedefine I18N_zh_CN //myMPD version from cmake -#define MYMPD_VERSION_MAJOR ${CPACK_PACKAGE_VERSION_MAJOR} -#define MYMPD_VERSION_MINOR ${CPACK_PACKAGE_VERSION_MINOR} -#define MYMPD_VERSION_PATCH ${CPACK_PACKAGE_VERSION_PATCH} -#define MYMPD_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}" +#define MYMPD_VERSION "${PROJECT_VERSION}" //default paths from cmake #define MYMPD_DOC_ROOT "${MYMPD_DOC_ROOT}" diff --git a/src/i18n/i18n.txt b/src/i18n/i18n.txt index 1154b9b4a..6ca70d0af 100644 --- a/src/i18n/i18n.txt +++ b/src/i18n/i18n.txt @@ -1,5 +1,6 @@ de-DE:Deutsch en-US:English +es-ES:Español es-VE:Español fi-FI:Finnish fr-FR:Français diff --git a/src/i18n/ignore_phrases.txt b/src/i18n/ignore_phrases.txt new file mode 100644 index 000000000..eea968aa9 --- /dev/null +++ b/src/i18n/ignore_phrases.txt @@ -0,0 +1 @@ +icon- \ No newline at end of file diff --git a/src/i18n/json/de-DE.json b/src/i18n/json/de-DE.json index f2d0b3101..542991831 100644 --- a/src/i18n/json/de-DE.json +++ b/src/i18n/json/de-DE.json @@ -3,7 +3,6 @@ "1 - Alert": "1 - Alarm", "2 - Critical": "2 - Kritisch", "3 - Error": "3 - Fehler", - "32 bit floating": "32 bit floating", "4 - Warn": "4 - Warnung", "5 - Notice": "5 - Hinweis", "6 - Info": "6 - Info", @@ -27,7 +26,6 @@ "Add view to homescreen": "Ansicht zum Homescreen hinzufügen", "Adding random songs to queue failed": "Zufällige Lieder konnten nicht zur Warteschlange hinzugefügt werden", "Adding timer failed": "Timer konnte nicht hinzugefügt werden", - "Adding songs from jukebox to queue failed": "Es konnten keine Lieder von der Jukebox zur Warteschlange hinzugefügt werden", "Advanced": "Erweitert", "Advanced Audio Coding": "Advanced Audio Coding", "Album": "Album", @@ -39,7 +37,6 @@ "Albumart": "Albumcover", "Albumcache not ready": "Albumcache ist noch nicht initialisiert", "Albums": "Alben", - "All": "Alle", "Alternative stream uri": "Alternative Stream URL", "Alternative streams": "Alternative Streams", "Any Tag": "Alle Tags", @@ -76,7 +73,6 @@ "Browse directories": "Verzeichnisse anzeigen", "Browse radio-browser.info": "Suche auf radio-browser.info", "Browser default": "Browsereinstellung", - "Browser has no MediaSession support": "Browser unterstützt keine MediaSession", "Browser specific setting": "Browserspezifische Einstellung", "CSS filter": "CSS Filter", "Cache update is already running": "Cache update läuft bereits", @@ -90,7 +86,6 @@ "Can not open script directory": "Skriptverzeichnis konnte nicht geöffnet werden", "Can not open scriptfile": "Skript konnte nicht geöffnet werden", "Can not open webradios directory": "Konnte das Webradio Verzeichnis nicht öffnen", - "Can not parse response from %{uri} to json object": "Antwort von %{uri} konnte nicht zu einem JSON Objekt geparsed werden", "Can not parse script arguments": "Skriptargumente konnten nicht eingelesen werden", "Can not parse settings": "Einstellungen können nicht geladen werden", "Can not parse smart playlist file": "Intelligente Wiedergabeliste konnte nicht geparsed werden", @@ -104,7 +99,6 @@ "Cancel": "Abbrechen", "Check WebradioDB": "WebradioDB prüfen", "Checking...": "Überprüfe...", - "Choose a playlist": "Wiedergabeliste wählen", "Choose a playlist or enter a new playlist name": "Wiedergabeliste wählen oder neuen Namen eingeben", "Clear": "Leeren", "Clear app cache and reload": "Browser Cache löschen und neu laden", @@ -147,7 +141,6 @@ "Could not save trigger": "Konnte Trigger nicht speichern", "Could not save webradio favorite": "Konnte Webradio Favorit nicht speichern", "Country": "Land", - "Create new": "Neu erstellen", "Crop": "Abschneiden", "Crop queue": "Warteschlange abschneiden", "Crossfade": "Crossfade", @@ -186,14 +179,11 @@ "Description": "Beschreibung", "Dialogs": "Dialoge", "Directory": "Verzeichnis", - "Disable consume mode": "Deaktiviere Konsumieren", "Disable random": "Deaktiviere Zufallswiedergabe", "Disable repeat": "Deaktiviere Wiederholen", "Disable single mode": "Beende Single Modus", - "Disable single oneshot": "Beende Single Modus Oneshot", "Disabled": "Deaktiviert", "Disc": "CD", - "Discnum": "CD %{smart_count}", "Display tags": "Tags zum Anzeigen", "Display tags in rows for small displays": "Zeige Tags in Zeilen für kleine Displays", "Do you really want to clear the playlist?": "Willst du wirklich die Wiedergabeliste \"%{playlist}\" leeren?", @@ -204,7 +194,6 @@ "Do you really want to delete the timer?": "Willst du den Timer wirklich löschen?", "Do you really want to delete the trigger?": "Willst du den Trigger wirklich löschen?", "Documentation": "Dokumentation", - "DSD": "DSD", "Download": "Herunterladen", "Download booklet": "Booklet herunterladen", "Duplicate home icon": "Kopieren", @@ -226,13 +215,9 @@ "Empty response from webradiodb backend": "Leere Antwort vom WebradioDB Backend", "Empty uri": "Leere Url", "Enable": "Aktivieren", - "Enable consume mode": "Aktiviere Konsumieren", - "Enable consume oneshot": "Aktiviere Konsumieren Oneshot", "Enable jukebox if playlist is database": "Jukebox muss aktiviert sein, wenn als Wiedergabeliste die Datenbank ausgewählt ist.", "Enable random": "Aktiviere Zufallswiedergabe", "Enable repeat": "Aktiviere Wiederholen", - "Enable single mode": "Aktiviere Single Modus", - "Enable single oneshot": "Aktiviere Single Modus Oneshot", "Enabled": "Aktiv", "Enforce mobile view": "Erzwinge mobile Ansicht", "Enforce uniqueness": "Erzwinge Eindeutigkeit", @@ -258,7 +243,6 @@ "Execute": "Ausführen", "Execute script": "Skript ausführen", "Executes a system command and capture its output.": "Executes a system command and capture its output.", - "Existing playlist": "Vorhandene Wiedergabeliste", "Expression": "Suchausdruck", "External link": "Externer Link", "Facilities": "Kategorie", @@ -382,7 +366,6 @@ "Love song": "Gefällt mir", "Lua is not compiled in": "Lua ist nicht verfügbar", "Lyrics": "Liedtext", - "Modal shortcut": "Dialog öffnen", "MPD connection": "MPD Verbindung", "MPD connection error: %{error}": "MPD Verbindungsfehler: %{error}", "MPD disconnected": "MPD nicht verbunden", @@ -416,7 +399,6 @@ "Missing translations": "Für die ausgewählte Sprache fehlt %{smart_count} Übersetzung |||| Für die ausgewählte Sprache fehlen %{smart_count} Übersetzungen", "Mixramp db": "Mixramp DB", "Mixramp delay": "Mixramp Verzögerung", - "Modal": "Dialog", "Mon": "Mo", "Monkey Audio": "Monkey Audio", "Most played": "Am Öftesten gespielt", @@ -439,7 +421,6 @@ "Neighbors are disabled": "Kein Neighbor Plugin aktiviert", "New mount": "Neuer Einhängepunkt", "New partition": "Neue Partition", - "New playlist": "Neue Wiedergabelist", "New script": "Neues Skript", "New timer": "Neuer Timer", "New trigger": "Neuer Trigger", @@ -476,9 +457,7 @@ "Open documentation": "Gehe zur Dokumentation", "Open external link": "Externen Link öffnen", "Open folder": "Verzeichnis öffnen", - "Open in new window": "In neuem Fenster öffnen", "Open maintenance": "Öffne Wartung", - "Open modal": "Dialog anzeigen", "Open parent folder": "Gehe zum darüberliegenden Verzeichnis", "Open queue settings": "Öffne Wiedergabeeinstellungen", "Open settings": "Öffne Einstellungen", @@ -508,7 +487,6 @@ "Playback statistics are disabled": "Wiedergabestatistiken sind deaktiviert", "Playlist": "Wiedergabeliste", "Playlist directory": "Wiedergabelisten Verzeichnis", - "Playlist directory not found": "Wiedergabelisten Verzeichnis nicht gefunden", "Playlist is empty": "Wiedergabelist ist leer", "Playlist to small, disabling jukebox unique constraints temporarily": "Die Wiedergabeliste ist zu klein, die Jukebox Regeln werden deaktiviert", "Playlists": "Wiedergabelisten", @@ -551,7 +529,6 @@ "Resize": "Größe ändern", "Sat": "Sa", "Save": "Speichern", - "Save mode": "Speichermodus", "Save as smart playlist": "Als intelligente Wiedergabeliste speichern", "Save queue": "Warteschlange speichern", "Save smart playlist": "Intelligente Wiedergabeliste sichern", @@ -561,7 +538,6 @@ "Script %{script} executed successfully": "Skript %{script} erfolgreich gestartet", "Script arguments": "Skriptparameter", "Script name": "Skriptname", - "Scripting": "Skripting", "Scripts": "Skripte", "Search": "Suchen", "Search queue": "Warteschlange durchsuchen", @@ -597,7 +573,6 @@ "Shuffle": "Mischen", "Shuffle playlist": "Wiedergabeliste mischen", "Shuffle queue": "Warteschlange mischen", - "Shuffled playlist successfully": "Wiedergabeliste erfolgreich gemischt", "Shuffling playlist failed": "Fehler beim Mischen der Wiedergabeliste", "Single": "Single Modus", "Smart playlist": "Intelligente Wiedergabeliste", @@ -617,7 +592,6 @@ "Sort by tag": "Sortiere nach Tag", "Sort order of the script, 0 disables listing in main menu": "Sortierreihenfolge der Skripts, 0 deaktiviert die Anzeige im Hauptmenü", "Sort playlist": "Wiedergabeliste sortieren", - "Sorted playlist successfully": "Wiedergabeliste erfolgreich sortiert", "Sorting playlist failed": "Fehler beim Sortieren der Wiedergabeliste", "Specify": "Manuell", "Start": "Start", @@ -632,7 +606,6 @@ "Stop playback": "Wiedergabe anhalten", "Stop playback after current song": "Wiedergabe nach aktuellem Lied beenden", "Stop playing": "Stop", - "Stream": "Stream", "Stream URI": "Stream URL", "Stream port": "Stream Port", "Successfully added random songs to queue": "Zufällige Lieder wurden zur Warteschlange hinzugefügt", @@ -680,7 +653,6 @@ "Tue": "Di", "Type": "Typ", "Type or select picture": "Bild wählen oder URL eingeben", - "Unknown queue save mode": "Unbekannter Modus für \"Warteschlange speichern\"", "Unknown request": "Unbekannter Befehl", "Unknown smart playlist type": "Unbekannter intelligenter Wiedergabenlisten Typ", "Unknown table %{table}": "Unbekannte Tabelle %{table}", @@ -727,7 +699,6 @@ "Webradio favorite successfully saved": "Webradio Favorit erfolgreich gespeichert", "Webradio favorites": "Webradio Favoriten", "WebradioDB": "WebradioDB", - "Webradioformat": "%{codec} / %{bitrate} kbit", "Webradios": "Webradios", "Webserver": "Webserver", "Websocket connection closed": "Websocket Verbindung geschlossen", @@ -741,7 +712,6 @@ "Yes, clear it": "Ja, leeren", "Yes, delete it": "Ja, löschen", "Yes, do it": "Ja, tu es", - "bit": "Bit", "clickcount": "Klick Anzahl", "contains": "enthält", "country": "Land", @@ -769,7 +739,6 @@ "starts_with": "beginnt mit", "state": "Status", "sticker": "Sticker", - "stickerElapsed": "Letzte Position", "stickerLastPlayed": "Zuletzt gespielt", "stickerLastSkipped": "Zuletzt übersprungen", "stickerLike": "Wertung", @@ -792,25 +761,32 @@ "Reset": "Zurücksetzen", "This partition": "Aktuelle Partition", "Unknown partition": "Ungültige Partition", - "icon-all": "Alle", - "icon-action": "Aktionen", - "icon-alert": "Warnungen", - "icon-av": "Audio/Video", - "icon-communication": "Kommunikation", - "icon-content": "Inhalt", - "icon-device": "Geräte", - "icon-editor": "Editor", - "icon-file": "Datei", - "icon-hardware": "Hardware", - "icon-home": "Home", - "icon-image": "Bild", - "icon-maps": "Karten", - "icon-navigation": "Navigation", - "icon-notification": "Hinweise", - "icon-places": "Orte", - "icon-search": "Suche", - "icon-social": "Sozial", - "icon-toggle": "Toggle", + "Disable single oneshot": "Beende Single Modus Oneshot", + "Enable single mode": "Aktiviere Single Modus", + "Enable single oneshot": "Aktiviere Single Modus Oneshot", + "32 bit floating": "32 bit floating", + "Browser has no MediaSession support": "Browser unterstützt keine MediaSession", + "Can not parse response from %{uri} to json object": "Antwort von %{uri} konnte nicht zu einem JSON Objekt geparsed werden", + "Choose a playlist": "Wiedergabeliste wählen", + "Create new": "Neu erstellen", + "Disable consume mode": "Deaktiviere Konsumieren", + "Discnum": "CD %{smart_count}", + "DSD": "DSD", + "Enable consume mode": "Aktiviere Konsumieren", + "Enable consume oneshot": "Aktiviere Konsumieren Oneshot", + "Existing playlist": "Vorhandene Wiedergabeliste", + "New playlist": "Neue Wiedergabelist", + "Open in new window": "In neuem Fenster öffnen", + "Playlist directory not found": "Wiedergabelisten Verzeichnis nicht gefunden", + "Save mode": "Speichermodus", + "Scripting": "Skripting", + "Shuffled playlist successfully": "Wiedergabeliste erfolgreich gemischt", + "Sorted playlist successfully": "Wiedergabeliste erfolgreich sortiert", + "Stream": "Stream", + "Unknown queue save mode": "Unbekannter Modus für \"Warteschlange speichern\"", + "Webradioformat": "%{codec} / %{bitrate} kbit", + "bit": "Bit", + "stickerElapsed": "Letzte Position", "mpd_database": "Datenbank aktualisiert", "mpd_message": "Message", "mpd_mixer": "Mixer", @@ -824,6 +800,15 @@ "mpd_sticker": "Sticker", "mpd_stored_playlist": "Wiedergabeliste", "mpd_subscription": "Subscription", + "mympd_connected": "Verbunden", + "mympd_disconnected": "Getrennt", + "mympd_feedback": "Feedback", + "mympd_scrobble": "Scrobble", + "mympd_start": "Start", + "mympd_stop": "Stop", + "Adding songs from jukebox to queue failed": "Es konnten keine Lieder von der Jukebox zur Warteschlange hinzugefügt werden", + "Modal": "Dialog", + "Open modal": "Dialog anzeigen", "modalConnection": "MPD Verbindung", "modalSettings": "Einstellungen", "modalMaintenance": "Wartung", @@ -832,10 +817,24 @@ "modalTrigger": "Trigger", "modalMounts": "Einhängepunkte", "modalAbout": "Über myMPD", - "mympd_connected": "Verbunden", - "mympd_disconnected": "Getrennt", - "mympd_feedback": "Feedback", - "mympd_scrobble": "Scrobble", - "mympd_start": "Start", - "mympd_stop": "Stop" + "Modal shortcut": "Dialog öffnen", + "icon-all": "Alle", + "icon-action": "Aktionen", + "icon-alert": "Warnungen", + "icon-av": "Audio/Video", + "icon-communication": "Kommunikation", + "icon-content": "Inhalt", + "icon-device": "Geräte", + "icon-editor": "Editor", + "icon-file": "Datei", + "icon-hardware": "Hardware", + "icon-home": "Home", + "icon-image": "Bild", + "icon-maps": "Karten", + "icon-navigation": "Navigation", + "icon-notification": "Hinweise", + "icon-places": "Orte", + "icon-search": "Suche", + "icon-social": "Sozial", + "icon-toggle": "Toggle" } diff --git a/src/i18n/json/en-US.json b/src/i18n/json/en-US.json index cc351beb2..d0e32f1ef 100644 --- a/src/i18n/json/en-US.json +++ b/src/i18n/json/en-US.json @@ -58,7 +58,6 @@ "mpd_sticker": "Sticker", "mpd_stored_playlist": "Playlist", "mpd_subscription": "Subscription", - "mpd_update": "Database update", "modalConnection": "Connection", "modalSettings": "Settings", "modalMaintenance": "Maintenance", diff --git a/src/i18n/json/es-ES.json b/src/i18n/json/es-ES.json new file mode 100644 index 000000000..9922f4192 --- /dev/null +++ b/src/i18n/json/es-ES.json @@ -0,0 +1,840 @@ +{ + "0 - Emerg": "\n0 - Emerg\n", + "1 - Alert": "1 - Alerta", + "2 - Critical": "2 - Crítico", + "3 - Error": "3 - Error", + "4 - Warn": "4 - Advertencia", + "5 - Notice": "5 - Aviso", + "6 - Info": "6 - Info", + "7 - Debug": "7 - Debug", + "A smart playlist with this name already exists": "Ya existe una lista de reproducción inteligente con este nombre", + "About": "Acerca de", + "Action": "Acción", + "Actions": "Acciones", + "Active partition": "Partición activa", + "Add": "Añadir", + "Add after current playing song": "Añadir después de la canción reproduciéndose actualmente", + "Add random": "Añadir aleatoriamente", + "Add smart playlist": "Añadir lista de reproducción inteligente", + "Add stream": "Añadir flujo", + "Add to": "Añadir a", + "Add to WebradioDB": "Añadir a WebradioDB", + "Add to favorites": "Añadir a favoritos", + "Add to homescreen": "Añadir a la pantalla inicial", + "Add to playlist": "Añadir a la lista de reproducción", + "Add to queue": "Añadir a la cola", + "Add view to homescreen": "Añadir vista a la pantalla inicial", + "Adding random songs to queue failed": "Fallo al añadir canciones aleatorias a la cola", + "Adding timer failed": "Fallo al añadir temporizador", + "Advanced": "Avanzado", + "Advanced Audio Coding": "Codificación de Audio avanzada", + "Album": "Álbum", + "Album cache is NULL": "La caché del Álbum es NULL", + "Album details": "Detalles del Álbum", + "AlbumArtist": "AlbumArtist", + "AlbumArtistSort": "AlbumArtistSort", + "AlbumSort": "AlbumSort", + "Albumart": "Albumart", + "Albumcache not ready": "Albumcache no está listo", + "Albums": "Álbumes", + "Alternative stream uri": "URI del flujo alternativo", + "Alternative streams": "Flujos alternativos", + "Any Tag": "Cualquier Etiqueta", + "App": "App", + "Appearance": "Apariencia", + "Append": "Añadir", + "Append and play": "Añadir y reproducir", + "Append to queue": "Añadir a la cola", + "Append to queue and play": "Añadir a la cola y reproducir", + "Apply": "Aplicar", + "Applying settings": "Aplicando configuraciones", + "Are you sure?": "¿Estas seguro?", + "Arguments": "Argumentos", + "Artist": "Artista", + "ArtistSort": "ArtistSort", + "Artists": "Artistas", + "Attribute": "Atributo", + "AudioFormat": "AudioFormat", + "Authentication required": "Autenticación requerida", + "Auto": "Auto", + "Autodetect": "Autodetectar", + "Autoplay": "Reproducción automática", + "Backend uri": "URI del Backend", + "Background": "Segundo plano", + "Background color": "Color de segundo plano", + "Best rated": "Mejor valorados", + "Binary limit": "Límite binario", + "BinaryLimitHelpText": "BinaryLimitHelpText", + "Bitrate": "Tasa de bits", + "Booklet": "Libreto", + "Booklet filename": "Nombre del fichero del libreto", + "Browse": "Navegar", + "Browse WebradioDB": "Navegar por WebradioDB", + "Browse directories": "Navegar por los directorios", + "Browse radio-browser.info": "Navegar por radio-browser.info", + "Browser default": "Navegación por defecto", + "Browser specific setting": "Configuraciones específicas del Navegador", + "CSS filter": "Filtro CSS", + "Cache update is already running": "La actualización de la caché ya se está ejecutando", + "Calculate": "Calcular", + "Can not crop the queue": "No se puede recortar la cola", + "Can not delete home icon": "No se puede eliminar el icono de inicio", + "Can not get home icon": "No se puede obtener el icono de inicio", + "Can not get lyrics for stream uri": "", + "Can not move home icon": "", + "Can not open directory pics": "", + "Can not open script directory": "", + "Can not open scriptfile": "", + "Can not open webradios directory": "", + "Can not parse script arguments": "", + "Can not parse settings": "", + "Can not parse smart playlist file": "", + "Can not parse webradio favorite file": "", + "Can not read smart playlist file": "", + "Can not save home icon": "", + "Can't create mympd_script thread": "", + "Can't save settings": "", + "Can't set playback options": "", + "Can't set playback options: MPD not connected": "", + "Cancel": "", + "Check WebradioDB": "", + "Checking...": "", + "Choose a playlist or enter a new playlist name": "", + "Clear": "", + "Clear app cache and reload": "", + "Clear covercache": "", + "Clear jukebox queue": "", + "Clear playlist": "", + "Clear queue": "", + "Cleared the playlist %{playlist}": "", + "Click album play button": "", + "Click filesystem playlist": "", + "Click folder": "", + "Click playlist": "", + "Click quick play button": "", + "Click song": "", + "Click song in queue": "", + "Click webradio": "", + "Click webradio favorite": "", + "Close": "", + "Cloud": "", + "Codec": "", + "Color": "", + "Columns": "", + "Comment": "", + "Comments": "", + "Composer": "", + "ComposerSort": "", + "Conductor": "", + "Connected to MPD": "", + "Connected to myMPD": "", + "Connection": "", + "Consume": "", + "Consume must be enabled": "", + "Could not delete script": "", + "Could not delete trigger": "", + "Could not delete webradio favorite": "", + "Could not find album": "", + "Could not get local ip": "", + "Could not remove song from jukebox queue": "", + "Could not save script": "", + "Could not save trigger": "", + "Could not save webradio favorite": "", + "Country": "", + "Crop": "", + "Crop queue": "", + "Crossfade": "", + "Cuesheet": "", + "Current partition": "", + "Current search": "", + "DB play time": "", + "DB updated": "", + "Dark": "", + "Database": "", + "Database statistics": "", + "Database successfully updated": "", + "Database update already started": "", + "Database update failed": "", + "Database update finished": "", + "Database update started": "", + "Date": "", + "Days": "", + "Default": "", + "Default actions": "", + "Default image": "", + "Default image dark": "", + "Default image light": "", + "Definition": "", + "Delete": "", + "Delete all playlists": "", + "Delete all smart playlists": "", + "Delete empty playlists": "", + "Delete home icon": "", + "Delete playlist": "", + "Delete playlists": "", + "Delete webradio favorite": "", + "Deleting smart playlist failed": "", + "Dependent on the size of your music collection this can take a while": "", + "Descending": "", + "Description": "", + "Dialogs": "", + "Directory": "", + "Disable random": "", + "Disable repeat": "", + "Disable single mode": "", + "Disabled": "", + "Disc": "", + "Display tags": "", + "Display tags in rows for small displays": "", + "Do you really want to clear the playlist?": "", + "Do you really want to clear the queue?": "", + "Do you really want to delete the partition?": "", + "Do you really want to delete the playlist?": "", + "Do you really want to delete the script?": "", + "Do you really want to delete the timer?": "", + "Do you really want to delete the trigger?": "", + "Documentation": "", + "Download": "", + "Download booklet": "", + "Duplicate home icon": "", + "Duration": "", + "Each ": "", + "Each 1": "", + "Each 3600": "", + "Each 60": "", + "Each 604800": "", + "Each 86400": "", + "Edit attributes": "", + "Edit home icon": "", + "Edit playlist": "", + "Edit smart playlist": "", + "Edit webradio favorite": "", + "Elements per page": "", + "Empty list": "", + "Empty response from radio-browser.info": "", + "Empty response from webradiodb backend": "", + "Empty uri": "", + "Enable": "", + "Enable jukebox if playlist is database": "", + "Enable random": "", + "Enable repeat": "", + "Enabled": "", + "Enforce mobile view": "", + "Enforce uniqueness": "", + "Ensemble": "", + "Enter": "", + "Enter pin": "", + "Error clearing the covercache": "", + "Error connection to radio-browser.info": "", + "Error cropping the covercache": "", + "Error executing script %{script}": "", + "Error executing script %{script}: Can not open or read script file": "", + "Error executing script %{script}: Error in garbage collector": "", + "Error executing script %{script}: Error while running the message handler": "", + "Error executing script %{script}: Memory allocation error": "", + "Error executing script %{script}: Runtime error": "", + "Error executing script %{script}: Syntax error during precompilation": "", + "Error executing timer start play": "", + "Error getting MPD status": "", + "Error getting mympd state for script execution": "", + "Error in response to command: %{command}": "", + "Error loading stream": "", + "Event": "", + "Execute": "", + "Execute script": "", + "Executes a system command and capture its output.": "", + "Expression": "", + "External link": "", + "Facilities": "", + "Failed to set like, unknown error": "", + "Failed to set song priority": "", + "Favorite and WebradioDb entry are different": "", + "Favorite is uptodate": "", + "Features": "", + "Fetch myMPD settings": "", + "Fileformat": "", + "Filename": "", + "Filenames": "", + "Filesystem": "", + "Filetype": "", + "Filling jukebox queue": "", + "Filling jukebox queue failed, disabling jukebox": "", + "Filter": "", + "Fingerprint": "", + "Fingerprint command not supported": "", + "First page": "", + "Focus search": "", + "Footer": "", + "Force smart playlist update": "", + "Force update": "", + "Format": "", + "Free Lossless Audio Codec": "", + "Fri": "", + "From": "", + "Fullscreen": "", + "Further Features": "", + "General": "", + "Generate smart playlist per": "", + "Genre": "", + "Goto album": "", + "Goto artist": "", + "Goto playing song": "", + "Goto view": "", + "Grouping": "", + "HTTP client": "", + "Hate song": "", + "Help to improve myMPD": "", + "Highlight color": "", + "Home": "", + "Homeicon": "", + "Homepage": "", + "Homescreen": "", + "Homescreen welcome": "", + "Hours": "", + "IP-Address": "", + "Image": "", + "Import script": "", + "Info": "", + "Initializes the mympd_state lua table": "", + "Initializing myMPD": "", + "Insert API call": "", + "Insert after current playing song": "", + "Insert at start of playlist": "", + "Insert function": "", + "Insert mode": "", + "Interval": "", + "Invalid API request": "", + "Invalid MPD host": "", + "Invalid MPD password": "", + "Invalid MPD port": "", + "Invalid URI": "", + "Invalid backend uri": "", + "Invalid binary limit": "", + "Invalid column": "", + "Invalid filename": "", + "Invalid mount point": "", + "Invalid music directory": "", + "Invalid name": "", + "Invalid number": "", + "Invalid partition name": "", + "Invalid pin": "", + "Invalid playlist directory": "", + "Invalid prefix": "", + "Invalid response": "", + "Invalid scale ratio": "", + "Invalid script API request": "", + "Invalid script argument": "", + "Invalid script content": "", + "Invalid script name": "", + "Invalid script order": "", + "Invalid session": "", + "Invalid stream port": "", + "Invalid timeout": "", + "Invalid timer interval": "", + "Invalid trigger name": "", + "Invalid type": "", + "Invalid volume level": "", + "JavaScript error": "", + "Jukebox": "", + "Jukebox Queue": "", + "Jukebox is disabled": "", + "Jukebox mode": "", + "Keep queue length": "", + "Keepalive": "", + "Label": "", + "Language": "", + "Last modified": "", + "Last page": "", + "Last played list count": "", + "Last played older than": "", + "LastModified": "", + "LastPlayed": "", + "License": "", + "Ligature": "", + "Light": "", + "Like": "", + "Listenbrainz Token": "", + "Lists": "", + "Loading...": "", + "Local playback": "", + "Locale": "", + "Location": "", + "Login": "", + "Loglevel": "", + "Logout": "", + "Lookup at musicbrainz": "", + "Love song": "", + "Lua is not compiled in": "", + "Lyrics": "", + "MPD connection": "", + "MPD connection error: %{error}": "", + "MPD disconnected": "", + "MPD does not support mounts": "", + "MPD does not support partitions": "", + "MPD does not support playlists": "", + "MPD host": "", + "MPD password": "", + "MPD port": "", + "MPD stickers are disabled": "", + "MPD uptime": "", + "MPD version is outdated": "", + "MPEG-1 Audio Layer III": "", + "MPEG-4": "", + "MUSICBRAINZ_ALBUMARTISTID": "", + "MUSICBRAINZ_ALBUMID": "", + "MUSICBRAINZ_ARTISTID": "", + "MUSICBRAINZ_RELEASETRACKID": "", + "MUSICBRAINZ_TRACKID": "", + "MUSICBRAINZ_WORKID": "", + "MaintainEnableTagsText": "", + "Maintenance": "", + "Manage partitions": "", + "Manually add webradio favorite": "", + "Max. songs": "", + "Media session": "", + "Method not supported": "", + "Min. value": "", + "Minimum one weekday must be selected": "", + "Minutes": "", + "Missing translations": "", + "Mixramp db": "", + "Mixramp delay": "", + "Mon": "", + "Monkey Audio": "", + "Most played": "", + "Mount point": "", + "Mounts": "", + "Move": "", + "Move an output to this partition": "", + "Movement": "", + "MovementNumber": "", + "Musepack": "", + "Music directory": "", + "Music directory not available": "", + "Music directory not found": "", + "MusicBrainz": "", + "Must be a number": "", + "Must be a number and equal or greater than zero": "", + "Must be a number and greater than zero": "", + "Name": "", + "Navigation": "", + "Neighbors are disabled": "", + "New mount": "", + "New partition": "", + "New script": "", + "New timer": "", + "New trigger": "", + "Newest songs": "", + "Next": "", + "Next page": "", + "Next song": "", + "No action selected": "", + "No albumart found by mpd": "", + "No arguments": "", + "No current song": "", + "No lyrics found": "", + "No outputs found": "", + "No response for method %{method}": "", + "No script selected": "", + "No search expression defined": "", + "None": "", + "Not playing": "", + "Notifications": "", + "Notifications are blocked": "", + "Num entries": "", + "Num songs": "", + "Off": "", + "Offset": "", + "Ogg Vorbis": "", + "On": "", + "On page notifications": "", + "One shot and delete": "", + "One shot and disable": "", + "Oneshot": "", + "Open MPD connection": "", + "Open about": "", + "Open directory": "", + "Open documentation": "", + "Open external link": "", + "Open folder": "", + "Open maintenance": "", + "Open parent folder": "", + "Open queue settings": "", + "Open settings": "", + "Options": "", + "Opus Audio": "", + "Order": "", + "Output": "", + "Output attributes": "", + "Outputs": "", + "Outputs moved to current partition": "", + "Partition": "", + "Partition name": "", + "Partition switched": "", + "Partitions": "", + "Performer": "", + "Picture": "", + "Pictures": "", + "Pin": "", + "Play": "", + "Play after current playing song": "", + "Play count": "", + "Play time": "", + "Playback": "", + "Playback controls": "", + "Playback settings": "", + "Playback statistics": "", + "Playback statistics are disabled": "", + "Playlist": "", + "Playlist directory": "", + "Playlist is empty": "", + "Playlist to small, disabling jukebox unique constraints temporarily": "", + "Playlists": "", + "Playlists deleted": "", + "Pos": "", + "Preview": "", + "Previous": "", + "Previous page": "", + "Previous song": "", + "Priority": "", + "Priority must be in range 0 - 255": "", + "Protocol version": "", + "Quantity": "", + "Queue": "", + "Quick play": "", + "Quick play button": "", + "Quick remove button": "", + "Random": "", + "Reload": "", + "Remove": "", + "Remove all downwards": "", + "Remove all upwards": "", + "Rename playlist": "", + "Renaming playlist failed": "", + "Repeat": "", + "Repeat current song": "", + "Repeat current song once": "", + "Repeat each": "", + "Replace": "", + "Replace and play": "", + "Replace queue": "", + "Replace queue and play": "", + "Replace queue with playlist": "", + "Replaced the playlist %{playlist}": "", + "Replaced the queue": "", + "Replaygain": "", + "Rescan database": "", + "Rescan directory": "", + "Reset to default": "", + "Resize": "", + "Sat": "", + "Save": "", + "Save as smart playlist": "", + "Save queue": "", + "Save smart playlist": "", + "Saved smart playlist": "", + "Scale ratio": "", + "Script": "", + "Script %{script} executed successfully": "", + "Script arguments": "", + "Script name": "", + "Scripts": "", + "Search": "", + "Search queue": "", + "Seconds": "", + "Select a playlist": "", + "Select function": "", + "Select method": "", + "Select tag to search": "", + "Select view": "", + "Session removed": "", + "Session successfully created": "", + "Set": "", + "Set priority": "", + "Set song priority": "", + "Settings": "", + "Shortcuts": "", + "Show": "", + "Show all albums from artist": "", + "Show attributes": "", + "Show browse database": "", + "Show browse filesystem": "", + "Show browse playlists": "", + "Show browse webradio": "", + "Show cover": "", + "Show home": "", + "Show jukebox queue": "", + "Show last played": "", + "Show or hide": "", + "Show playback": "", + "Show playback settings in footer": "", + "Show queue": "", + "Show search": "", + "Shuffle": "", + "Shuffle playlist": "", + "Shuffle queue": "", + "Shuffling playlist failed": "", + "Single": "", + "Smart playlist": "", + "Smart playlist %{playlist} updated": "", + "Smart playlists": "", + "Smart playlists are disabled": "", + "Smart playlists prefix": "", + "Smart playlists update failed": "", + "Smart playlists update started": "", + "Smart playlists updated": "", + "Song": "", + "Song change": "", + "Song details": "", + "Songs": "", + "Sort": "", + "Sort by": "", + "Sort by tag": "", + "Sort order of the script, 0 disables listing in main menu": "", + "Sort playlist": "", + "Sorting playlist failed": "", + "Specify": "", + "Start": "", + "Start playback": "", + "Start playing newly added song failed": "", + "Startup": "", + "Startup view": "", + "Statistics": "", + "Sticker": "", + "Sticker cache is NULL": "", + "Stop": "", + "Stop playback": "", + "Stop playback after current song": "", + "Stop playing": "", + "Stream URI": "", + "Stream port": "", + "Successfully added random songs to queue": "", + "Successfully cleared covercache": "", + "Successfully croped covercache": "", + "Successfully renamed playlist": "", + "Sun": "", + "Switch single mode": "", + "Switch to": "", + "Synced lyrics": "", + "Synced lyrics extension": "", + "Synced lyrics vorbis comment": "", + "Tab": "", + "Tags": "", + "Tags to browse": "", + "Tags to search": "", + "Tags to use": "", + "Temporary setting": "", + "Theme": "", + "Thu": "", + "Thumbnail names": "", + "Thumbnail size": "", + "Timeout": "", + "Timer": "", + "Timer with given id not found": "", + "Timerange (days)": "", + "Title": "", + "To": "", + "To top": "", + "Toggle autoscrolling": "", + "Toggle consume": "", + "Toggle play": "", + "Toggle play / pause": "", + "Toggle random": "", + "Toggle repeat": "", + "Too many home icons": "", + "Too many results, list is cropped": "", + "Too many timers defined": "", + "Too many triggers defined": "", + "Too many worker threads are already running": "", + "Track": "", + "Trigger": "", + "Trigger name": "", + "Trigger not found": "", + "Tue": "", + "Type": "", + "Type or select picture": "", + "Unknown request": "", + "Unknown smart playlist type": "", + "Unknown table %{table}": "", + "Unmount": "", + "Unsynced lyrics": "", + "Unsynced lyrics extension": "", + "Unsynced lyrics vorbis comment": "", + "Update": "", + "Update WebradioDB": "", + "Update database": "", + "Update directory": "", + "Update from WebradioDB": "", + "Update interval": "", + "Update of album cache failed": "", + "Update of sticker cache failed": "", + "Update smart playlist": "", + "Update smart playlists": "", + "Updated album cache": "", + "Updated sticker cache": "", + "Updated the playlist %{playlist}": "", + "Updated the queue": "", + "Updating MPD database": "", + "Updating smart playlist %{playlist} failed": "", + "Uri": "", + "Uri not found in WebradioDB": "", + "Use ligature": "", + "Value": "", + "Version": "", + "View": "", + "View playlist": "", + "Volume": "", + "Volume control": "", + "Volume down": "", + "Volume max.": "", + "Volume min.": "", + "Volume step": "", + "Volume up": "", + "Volumecontrol disabled": "", + "WAVE Audio File": "", + "WavPack": "", + "Web notifications": "", + "Webradio": "", + "Webradio details": "", + "Webradio favorite successfully saved": "", + "Webradio favorites": "", + "WebradioDB": "", + "Webradios": "", + "Webserver": "", + "Websocket connection closed": "", + "Websocket connection failed, trying to reconnect": "", + "Websocket is disconnected": "", + "Wed": "", + "Weekdays": "", + "Weeks": "", + "Windows Media Audio": "", + "Work": "", + "Yes, clear it": "", + "Yes, delete it": "", + "Yes, do it": "", + "clickcount": "", + "contains": "", + "country": "", + "current": "", + "homepage": "", + "http://uri.to/stream.mp3": "", + "kB": "", + "kHz": "", + "kbit": "", + "language": "", + "lastchangetime": "", + "lastcheckok": "", + "myMPD CA": "", + "myMPD installed as app": "", + "myMPD menu": "", + "myMPD uptime": "", + "name": "", + "never": "", + "newest": "", + "on": "", + "pause and stop": "", + "pause only": "", + "plugin": "", + "search": "", + "starts_with": "", + "state": "", + "sticker": "", + "stickerLastPlayed": "", + "stickerLastSkipped": "", + "stickerLike": "", + "stickerPlayCount": "", + "stickerSkipCount": "", + "stop only": "", + "tags": "", + "url_resolved": "", + "votes": "", + "Invalid deletion criteria": "", + "All partitions": "", + "Default partition can not be deleted": "", + "Error saving partition settings": "", + "OverridesStreamPort": "", + "Partitions can only be deleted from default partition": "", + "Partition must be connected": "", + "Partition name invalid": "", + "Partition not found": "", + "Partition specific setting": "", + "Reset": "", + "This partition": "", + "Unknown partition": "", + "Disable single oneshot": "", + "Enable single mode": "", + "Enable single oneshot": "", + "32 bit floating": "", + "Browser has no MediaSession support": "", + "Can not parse response from %{uri} to json object": "", + "Choose a playlist": "", + "Create new": "", + "Disable consume mode": "", + "Discnum": "", + "DSD": "", + "Enable consume mode": "", + "Enable consume oneshot": "", + "Existing playlist": "", + "New playlist": "", + "Open in new window": "", + "Playlist directory not found": "", + "Save mode": "", + "Scripting": "", + "Shuffled playlist successfully": "", + "Sorted playlist successfully": "", + "Stream": "", + "Unknown queue save mode": "", + "Webradioformat": "", + "bit": "", + "stickerElapsed": "", + "mpd_database": "", + "mpd_message": "", + "mpd_mixer": "", + "mpd_mount": "", + "mpd_neighbor": "", + "mpd_options": "", + "mpd_output": "", + "mpd_partition": "", + "mpd_player": "", + "mpd_queue": "", + "mpd_sticker": "", + "mpd_stored_playlist": "", + "mpd_subscription": "", + "mympd_connected": "", + "mympd_disconnected": "", + "mympd_feedback": "", + "mympd_scrobble": "", + "mympd_start": "", + "mympd_stop": "", + "Adding songs from jukebox to queue failed": "", + "Modal": "", + "Open modal": "", + "modalConnection": "", + "modalSettings": "", + "modalMaintenance": "", + "modalScripts": "", + "modalTimer": "", + "modalTrigger": "", + "modalMounts": "", + "modalAbout": "", + "Modal shortcut": "", + "icon-all": "", + "icon-action": "", + "icon-alert": "", + "icon-av": "", + "icon-communication": "", + "icon-content": "", + "icon-device": "", + "icon-editor": "", + "icon-file": "", + "icon-hardware": "", + "icon-home": "", + "icon-image": "", + "icon-maps": "", + "icon-navigation": "", + "icon-notification": "", + "icon-places": "", + "icon-search": "", + "icon-social": "", + "icon-toggle": "" +} diff --git a/src/i18n/json/es-VE.json b/src/i18n/json/es-VE.json index c87fbaa01..0a69c028c 100644 --- a/src/i18n/json/es-VE.json +++ b/src/i18n/json/es-VE.json @@ -14,7 +14,6 @@ "Active partition": "", "Add": "Agregar", "Add after current playing song": "Añadir despues de la canción actual", - "Add external link": "", "Add random": "Agregar aleatorio", "Add smart playlist": "Agregar Lista de reproducción inteligente", "Add stream": "Agregar fuente", @@ -27,7 +26,6 @@ "Add view to homescreen": "", "Adding random songs to queue failed": "Error al agregar canciones aleatorias a la cola de reproducción", "Adding timer failed": "Fallo al agregar Temporizador", - "Adding songs from jukebox to queue failed": "", "Advanced": "Avanzado", "Advanced Audio Coding": "", "Album": "Álbum", @@ -39,7 +37,6 @@ "Albumart": "Carátula del álbum", "Albumcache not ready": "", "Albums": "Álbumes", - "All": "", "Alternative stream uri": "", "Alternative streams": "", "Any Tag": "Cualquier etiqueta", @@ -576,7 +573,6 @@ "Shuffle": "Aleatorio", "Shuffle playlist": "Mezclar aleatoriamente la lista de reproducción", "Shuffle queue": "Cola de reproducción aleatoria", - "Shuffled playlist successfully": "Lista de reproducción mezclada aleatoriamente", "Shuffling playlist failed": "", "Single": "Individual", "Smart playlist": "Lista de reproducción inteligente", @@ -596,7 +592,6 @@ "Sort by tag": "Ordenar por etiqueta", "Sort order of the script, 0 disables listing in main menu": "", "Sort playlist": "Ordenar lista de reproducción", - "Sorted playlist successfully": "Lista de reproducción ordenada", "Sorting playlist failed": "", "Specify": "Especificar", "Start": "Iniciar", @@ -717,7 +712,6 @@ "Yes, clear it": "", "Yes, delete it": "", "Yes, do it": "", - "bits": "Bits", "clickcount": "", "contains": "contiene", "country": "", @@ -766,5 +760,81 @@ "Partition specific setting": "", "Reset": "", "This partition": "", - "Unknown partition": "" + "Unknown partition": "", + "Disable single oneshot": "", + "Enable single mode": "", + "Enable single oneshot": "", + "32 bit floating": "", + "Browser has no MediaSession support": "", + "Can not parse response from %{uri} to json object": "", + "Choose a playlist": "", + "Create new": "", + "Disable consume mode": "", + "Discnum": "", + "DSD": "", + "Enable consume mode": "", + "Enable consume oneshot": "", + "Existing playlist": "", + "New playlist": "", + "Open in new window": "", + "Playlist directory not found": "", + "Save mode": "", + "Scripting": "", + "Shuffled playlist successfully": "Lista de reproducción mezclada aleatoriamente", + "Sorted playlist successfully": "Lista de reproducción ordenada", + "Stream": "", + "Unknown queue save mode": "", + "Webradioformat": "", + "bit": "", + "stickerElapsed": "", + "mpd_database": "", + "mpd_message": "", + "mpd_mixer": "", + "mpd_mount": "", + "mpd_neighbor": "", + "mpd_options": "", + "mpd_output": "", + "mpd_partition": "", + "mpd_player": "", + "mpd_queue": "", + "mpd_sticker": "", + "mpd_stored_playlist": "", + "mpd_subscription": "", + "mympd_connected": "", + "mympd_disconnected": "", + "mympd_feedback": "", + "mympd_scrobble": "", + "mympd_start": "", + "mympd_stop": "", + "Adding songs from jukebox to queue failed": "", + "Modal": "", + "Open modal": "", + "modalConnection": "", + "modalSettings": "", + "modalMaintenance": "", + "modalScripts": "", + "modalTimer": "", + "modalTrigger": "", + "modalMounts": "", + "modalAbout": "", + "Modal shortcut": "", + "icon-all": "", + "icon-action": "", + "icon-alert": "", + "icon-av": "", + "icon-communication": "", + "icon-content": "", + "icon-device": "", + "icon-editor": "", + "icon-file": "", + "icon-hardware": "", + "icon-home": "", + "icon-image": "", + "icon-maps": "", + "icon-navigation": "", + "icon-notification": "", + "icon-places": "", + "icon-search": "", + "icon-social": "", + "icon-toggle": "" } diff --git a/src/i18n/json/fi-FI.json b/src/i18n/json/fi-FI.json index 550fa6bf1..0ef9e3fb3 100644 --- a/src/i18n/json/fi-FI.json +++ b/src/i18n/json/fi-FI.json @@ -14,7 +14,6 @@ "Active partition": "", "Add": "Lisää", "Add after current playing song": "Lisää soivan kappaleen jälkeen", - "Add external link": "", "Add random": "Lisää satunnainen", "Add smart playlist": "Lisää älykäs soittolista", "Add stream": "Lisää streami", @@ -27,7 +26,6 @@ "Add view to homescreen": "", "Adding random songs to queue failed": "Satunnaisten kappaleiden lisääminen jonoon epäonnistui", "Adding timer failed": "Ajastimen lisäys epäonnistui", - "Adding songs from jukebox to queue failed": "", "Advanced": "Lisäasetukset", "Advanced Audio Coding": "", "Album": "Albumi", @@ -39,7 +37,6 @@ "Albumart": "Albumcover", "Albumcache not ready": "", "Albums": "Albumit", - "All": "", "Alternative stream uri": "", "Alternative streams": "", "Any Tag": "Mikä tahansa tagi", @@ -576,7 +573,6 @@ "Shuffle": "Sekoita", "Shuffle playlist": "Sekoita soittolista", "Shuffle queue": "Sekoita Jono", - "Shuffled playlist successfully": "Soittolista sekoitetttu onnistuneesti", "Shuffling playlist failed": "", "Single": "Yksittäistoisto", "Smart playlist": "Älykäs soittolista", @@ -596,7 +592,6 @@ "Sort by tag": "Lahittele tagin mukaan", "Sort order of the script, 0 disables listing in main menu": "", "Sort playlist": "Järjestä soittolista", - "Sorted playlist successfully": "Soittolista järjestetty onnistuneesti", "Sorting playlist failed": "", "Specify": "Määritä", "Start": "Aloita", @@ -717,7 +712,6 @@ "Yes, clear it": "", "Yes, delete it": "", "Yes, do it": "", - "bits": "bittiä", "clickcount": "", "contains": "sisältää", "country": "", @@ -766,5 +760,81 @@ "Partition specific setting": "", "Reset": "", "This partition": "", - "Unknown partition": "" + "Unknown partition": "", + "Disable single oneshot": "", + "Enable single mode": "", + "Enable single oneshot": "", + "32 bit floating": "", + "Browser has no MediaSession support": "", + "Can not parse response from %{uri} to json object": "", + "Choose a playlist": "", + "Create new": "", + "Disable consume mode": "", + "Discnum": "", + "DSD": "", + "Enable consume mode": "", + "Enable consume oneshot": "", + "Existing playlist": "", + "New playlist": "", + "Open in new window": "", + "Playlist directory not found": "", + "Save mode": "", + "Scripting": "", + "Shuffled playlist successfully": "Soittolista sekoitetttu onnistuneesti", + "Sorted playlist successfully": "Soittolista järjestetty onnistuneesti", + "Stream": "", + "Unknown queue save mode": "", + "Webradioformat": "", + "bit": "", + "stickerElapsed": "", + "mpd_database": "", + "mpd_message": "", + "mpd_mixer": "", + "mpd_mount": "", + "mpd_neighbor": "", + "mpd_options": "", + "mpd_output": "", + "mpd_partition": "", + "mpd_player": "", + "mpd_queue": "", + "mpd_sticker": "", + "mpd_stored_playlist": "", + "mpd_subscription": "", + "mympd_connected": "", + "mympd_disconnected": "", + "mympd_feedback": "", + "mympd_scrobble": "", + "mympd_start": "", + "mympd_stop": "", + "Adding songs from jukebox to queue failed": "", + "Modal": "", + "Open modal": "", + "modalConnection": "", + "modalSettings": "", + "modalMaintenance": "", + "modalScripts": "", + "modalTimer": "", + "modalTrigger": "", + "modalMounts": "", + "modalAbout": "", + "Modal shortcut": "", + "icon-all": "", + "icon-action": "", + "icon-alert": "", + "icon-av": "", + "icon-communication": "", + "icon-content": "", + "icon-device": "", + "icon-editor": "", + "icon-file": "", + "icon-hardware": "", + "icon-home": "", + "icon-image": "", + "icon-maps": "", + "icon-navigation": "", + "icon-notification": "", + "icon-places": "", + "icon-search": "", + "icon-social": "", + "icon-toggle": "" } diff --git a/src/i18n/json/fr-FR.json b/src/i18n/json/fr-FR.json index 324519fc4..1dbcb08fa 100644 --- a/src/i18n/json/fr-FR.json +++ b/src/i18n/json/fr-FR.json @@ -14,7 +14,6 @@ "Active partition": "Partition active", "Add": "Ajouter", "Add after current playing song": "Ajouter après la chanson en cours", - "Add external link": "Ajouter un lien externe", "Add random": "Ajout aléatoire", "Add smart playlist": "Ajouter une liste de lecture intelligente", "Add stream": "Ajouter flux", @@ -27,7 +26,6 @@ "Add view to homescreen": "Ajouter la vue à l'écran d'accueil", "Adding random songs to queue failed": "Echec de l'ajout de chansons aléatoire à la file de lecture", "Adding timer failed": "Echec de l'ajout de la programmation", - "Addings songs from jukebox to queue failed": "L'ajout de chansons du jukebox vers la file de lecture a échoué", "Advanced": "Avancé", "Advanced Audio Coding": "Configuration audio avancée", "Album": "Album", @@ -39,7 +37,6 @@ "Albumart": "Jaquette", "Albumcache not ready": "Le cache des albums n'est pas prêt", "Albums": "Albums", - "All": "Tout", "Alternative stream uri": "URI alternatif pour le stream", "Alternative streams": "Streams alternatifs", "Any Tag": "N'importe quelle métadonnée", @@ -89,7 +86,6 @@ "Can not open script directory": "Impossible d'ouvrir le répertoire des scripts", "Can not open scriptfile": "Impossible d'ouvrir le fichier de script", "Can not open webradios directory": "Impossible d'ouvrir le répertoire des webradio", - "Can not parse response to json object": "Impossible d'analyser la réponse dans un objet json", "Can not parse script arguments": "Impossible d'analyser les arguments du script", "Can not parse settings": "Impossible d'analyser les paramètres", "Can not parse smart playlist file": "Impossible d'analyser le fichier de liste de lecture intelligente", @@ -183,7 +179,6 @@ "Description": "Description", "Dialogs": "Dialogues", "Directory": "Répertoire", - "Disable consume": "Désactiver mode consommation", "Disable random": "Désactiver mode aléatoire", "Disable repeat": "Désactiver mode répétition", "Disable single mode": "Désactiver mode unique", @@ -220,7 +215,6 @@ "Empty response from webradiodb backend": "Réponse vide reçue du backend webradiodb", "Empty uri": "URI vide", "Enable": "Activer", - "Enable consume": "Activer mode consommation", "Enable jukebox if playlist is database": "Activer le mode jukebox si la playlist provient de la base de données", "Enable random": "Activer mode aléatoire", "Enable repeat": "Activer mode répétition", @@ -247,7 +241,6 @@ "Error loading stream": "Erreur au chargement du flux", "Event": "Évènement", "Execute": "Exécuter", - "Execute Script": "Exécuter le script", "Execute script": "Exécuter le script", "Executes a system command and capture its output.": "Exécute une commande système et capture sa sortie", "Expression": "Expression", @@ -495,7 +488,6 @@ "Playlist": "Liste de lecture", "Playlist directory": "Répertoire des listes de lectures", "Playlist is empty": "La liste de lecture est vide", - "Playlist name": "Nom de la liste de lecture", "Playlist to small, disabling jukebox unique constraints temporarily": "Liste de lecture trop petite, désactivation temporaire de la contrainte unique du jukebox", "Playlists": "Listes de lecture", "Playlists deleted": "Listes de lecture supprimées", @@ -581,7 +573,6 @@ "Shuffle": "Mélanger", "Shuffle playlist": "Mélanger la liste de lecture", "Shuffle queue": "Mélanger la file de lecture", - "Shuffled playlist succesfully": "Liste de lecture mélangée", "Shuffling playlist failed": "Mélange de la liste de lecture échoué", "Single": "Mode unique", "Smart playlist": "Liste de lecture intelligente", @@ -601,7 +592,6 @@ "Sort by tag": "Trier par métadonnée", "Sort order of the script, 0 disables listing in main menu": "Ordre de tri du script, 0 désactive le listing dans le menu principal", "Sort playlist": "Trier la liste de lecture", - "Sorted playlist succesfully": "Liste de lecture triée", "Sorting playlist failed": "Échec du tri de la liste de lecture", "Specify": "Préciser", "Start": "Début", @@ -722,8 +712,6 @@ "Yes, clear it": "Oui, effacer", "Yes, delete it": "Oui, supprimer", "Yes, do it": "Oui, confirmer", - "Zoom": "Zoom", - "bits": "Bits", "clickcount": "Nombre de clicks", "contains": "contient", "country": "pays", @@ -818,7 +806,6 @@ "mympd_scrobble": "Scrobble", "mympd_start": "Démarré", "mympd_stop": "Arrêté", - "Add modal shortcut": "Ajouter raccourci vers mode", "Adding songs from jukebox to queue failed": "L'ajout de chansons du jukebox vers la file de lecture a échoué", "Modal": "Mode", "Open modal": "Ouvrir mode", @@ -830,5 +817,24 @@ "modalTrigger": "Déclencheur", "modalMounts": "Points de montage", "modalAbout": "À propos de myMPD", - "Modal shortcut": "Raccourci" -} \ No newline at end of file + "Modal shortcut": "Raccourci", + "icon-all": "", + "icon-action": "", + "icon-alert": "", + "icon-av": "", + "icon-communication": "", + "icon-content": "", + "icon-device": "", + "icon-editor": "", + "icon-file": "", + "icon-hardware": "", + "icon-home": "", + "icon-image": "", + "icon-maps": "", + "icon-navigation": "", + "icon-notification": "", + "icon-places": "", + "icon-search": "", + "icon-social": "", + "icon-toggle": "" +} diff --git a/src/i18n/json/i18n.json b/src/i18n/json/i18n.json index b0b4dc665..5183360f8 100644 --- a/src/i18n/json/i18n.json +++ b/src/i18n/json/i18n.json @@ -1,10 +1,10 @@ { "default": {"desc":"Browser default", "missingPhrases": 0}, - "de-DE": {"desc":"Deutsch (de-DE)", "missingPhrases": 1}, + "de-DE": {"desc":"Deutsch (de-DE)", "missingPhrases": 0}, "en-US": {"desc":"English (en-US)", "missingPhrases": 0}, - "fr-FR": {"desc":"Français (fr-FR)", "missingPhrases": 20}, - "it-IT": {"desc":"Italiano (it-IT)", "missingPhrases": 20}, - "ja-JP": {"desc":"日本語 (ja-JP)", "missingPhrases": 73}, - "nl-NL": {"desc":"Nederlands (nl-NL)", "missingPhrases": 20}, - "zh-CN": {"desc":"简体中文 (zh-CN)", "missingPhrases": 71} + "fr-FR": {"desc":"Français (fr-FR)", "missingPhrases": 19}, + "it-IT": {"desc":"Italiano (it-IT)", "missingPhrases": 19}, + "ja-JP": {"desc":"日本語 (ja-JP)", "missingPhrases": 0}, + "nl-NL": {"desc":"Nederlands (nl-NL)", "missingPhrases": 19}, + "zh-CN": {"desc":"简体中文 (zh-CN)", "missingPhrases": 70} } diff --git a/src/i18n/json/it-IT.json b/src/i18n/json/it-IT.json index 8ce1348a8..da4d2e286 100644 --- a/src/i18n/json/it-IT.json +++ b/src/i18n/json/it-IT.json @@ -14,7 +14,6 @@ "Active partition": "Partizione attiva", "Add": "Aggiungi", "Add after current playing song": "Aggiungi dopo il brano corrente", - "Add external link": "Aggiungi un link esterno", "Add random": "Aggiunta casuale", "Add smart playlist": "Aggiungi playlist smart", "Add stream": "Aggiungi flusso", @@ -27,7 +26,6 @@ "Add view to homescreen": "Aggiungi la vista alla schermata iniziale", "Adding random songs to queue failed": "Impossibile aggiungere brani casuali alla coda", "Adding timer failed": "Impossibile aggiungere il timer", - "Addings songs from jukebox to queue failed": "Impossibile aggiungere brani dal jukebox alla coda", "Advanced": "Avanzato", "Advanced Audio Coding": "Codifica Audio Avanzata", "Album": "Album", @@ -39,7 +37,6 @@ "Albumart": "Copertina", "Albumcache not ready": "Albumcache non pronta", "Albums": "Album", - "All": "Tutti", "Alternative stream uri": "Uri alternativo del flusso", "Alternative streams": "Flussi alternativi", "Any Tag": "Qualunque tag", @@ -89,7 +86,6 @@ "Can not open script directory": "Impossibile aprire la cartella dello script", "Can not open scriptfile": "Impossibile aprire il file dello script", "Can not open webradios directory": "Impossibile aprire la cartella delle webradio", - "Can not parse response to json object": "Impossibile analizzare la risposta all'oggetto json", "Can not parse script arguments": "Impossibile analizzare gli argomenti dello script", "Can not parse settings": "Impossibile analizzare le impostazioni", "Can not parse smart playlist file": "Impossibile analizzare il file della smart playlist", @@ -183,7 +179,6 @@ "Description": "Descrizione", "Dialogs": "Dialoghi", "Directory": "Cartella", - "Disable consume": "Disabilita Comsuma", "Disable random": "Disabilita casuale", "Disable repeat": "Disabilita ripetizione", "Disable single mode": "Disabilita modo singolo", @@ -220,7 +215,6 @@ "Empty response from webradiodb backend": "Risposta vuota dal backend di webradiodb", "Empty uri": "Uri vuoto", "Enable": "Abilita", - "Enable consume": "Abilita Consuma", "Enable jukebox if playlist is database": "Abilita il jukebox se la playlist è un database", "Enable random": "Abilita casuale", "Enable repeat": "Abilita ripetizione", @@ -247,7 +241,6 @@ "Error loading stream": "Errore caricamento flusso", "Event": "Evento", "Execute": "Esegui", - "Execute Script": "Esegui lo Script", "Execute script": "Esegui lo script", "Executes a system command and capture its output.": "Esegu un comando di sistema e cattura il suo risultato.", "Expression": "Espressione", @@ -495,7 +488,6 @@ "Playlist": "Playlist", "Playlist directory": "Cartella playlist", "Playlist is empty": "La playlist è vuota", - "Playlist name": "Nome playlist", "Playlist to small, disabling jukebox unique constraints temporarily": "Playlist troppo piccola, i vincoli del jukebox sono temporaneamnte disabilitati", "Playlists": "Playlists", "Playlists deleted": "Playlists cancellate", @@ -581,7 +573,6 @@ "Shuffle": "Rimescola", "Shuffle playlist": "Rimescola la lista di riproduzione", "Shuffle queue": "Rimescola la coda", - "Shuffled playlist succesfully": "Playlist rimescolata con successo", "Shuffling playlist failed": "Rimescolamento playlist fallito", "Single": "Singolo", "Smart playlist": "Playlist smart", @@ -601,7 +592,6 @@ "Sort by tag": "Ordina per tag", "Sort order of the script, 0 disables listing in main menu": "Ordinamento degli script, 0 disabilita l'elenco nel menù pricipale", "Sort playlist": "Ordina la playlist", - "Sorted playlist succesfully": "Playlist ordinata con successo", "Sorting playlist failed": "Fallito ordinamento playlist", "Specify": "Specificare", "Start": "Avvia", @@ -722,8 +712,6 @@ "Yes, clear it": "Sì, svuota", "Yes, delete it": "Sì, cancella", "Yes, do it": "Sì, procedi", - "Zoom": "Zoom", - "bits": "bit", "clickcount": "clickcount", "contains": "contiene", "country": "paese", @@ -818,7 +806,6 @@ "mympd_scrobble": "mympd_scrobble", "mympd_start": "mympd_avvio", "mympd_stop": "mympd_stop", - "Add modal shortcut": "Aggiungi scorciatoia modale", "Adding songs from jukebox to queue failed": "Impossibile aggiungere brani dal jukebox alla coda", "Modal": "Modale", "Open modal": "Apri modale", @@ -830,5 +817,24 @@ "modalTrigger": "TriggerModale", "modalMounts": "MontaggiModali", "modalAbout": "InformazioniModali", - "Modal shortcut": "Scorciatoia modale" -} \ No newline at end of file + "Modal shortcut": "Scorciatoia modale", + "icon-all": "", + "icon-action": "", + "icon-alert": "", + "icon-av": "", + "icon-communication": "", + "icon-content": "", + "icon-device": "", + "icon-editor": "", + "icon-file": "", + "icon-hardware": "", + "icon-home": "", + "icon-image": "", + "icon-maps": "", + "icon-navigation": "", + "icon-notification": "", + "icon-places": "", + "icon-search": "", + "icon-social": "", + "icon-toggle": "" +} diff --git a/src/i18n/json/ja-JP.json b/src/i18n/json/ja-JP.json index 389f31ae8..ee056659a 100644 --- a/src/i18n/json/ja-JP.json +++ b/src/i18n/json/ja-JP.json @@ -14,7 +14,6 @@ "Active partition": "アクティブなパーティション", "Add": "追加", "Add after current playing song": "再生中の曲の後に追加", - "Add external link": "外部リンクを追加", "Add random": "ランダムに追加", "Add smart playlist": "スマートプレイリストを追加", "Add stream": "ストリームを追加", @@ -27,7 +26,6 @@ "Add view to homescreen": "画面をホームに追加", "Adding random songs to queue failed": "再生待ちへのランダムな曲の追加に失敗しました", "Adding timer failed": "タイマーの追加に失敗しました", - "Adding songs from jukebox to queue failed": "ジュークボックスから再生待ちへの曲の追加に失敗しました", "Advanced": "高度な設定", "Advanced Audio Coding": "高度なオーディオコーディング", "Album": "アルバム", @@ -39,7 +37,6 @@ "Albumart": "アルバムアート", "Albumcache not ready": "アルバムキャッシュがまだありません", "Albums": "アルバム", - "All": "すべて", "Alternative stream uri": "代替ストリームURI", "Alternative streams": "代替ストリーム", "Any Tag": "いずれかのタグ", @@ -89,7 +86,6 @@ "Can not open script directory": "スクリプトディレクトリを開けません", "Can not open scriptfile": "スクリプトファイルを開けません", "Can not open webradios directory": "ウェブラジオディレクトリを開けません", - "Can not parse response to json object": "レスポンスをJSONオブジェクトにパースできません", "Can not parse script arguments": "スクリプトの引数をパースできません", "Can not parse settings": "設定をパースできません", "Can not parse smart playlist file": "スマートプレイリストファイルをパースできません", @@ -183,7 +179,6 @@ "Description": "説明", "Dialogs": "ダイアログ", "Directory": "ディレクトリ", - "Disable consume": "再生したら削除を無効化", "Disable random": "ランダム再生を無効化", "Disable repeat": "リピート再生を無効化", "Disable single mode": "シングルモードを無効化", @@ -220,7 +215,6 @@ "Empty response from webradiodb backend": "WebradioDBバックエンドからのレスポンスが空です", "Empty uri": "空のURI", "Enable": "有効化", - "Enable consume": "再生したら削除を有効化", "Enable jukebox if playlist is database": "プレイリストがデータベースの時はジュークボックスを有効化", "Enable random": "ランダム再生を有効化", "Enable repeat": "リピート再生を有効化", @@ -247,7 +241,6 @@ "Error loading stream": "ストリームの読み込み中にエラーが発生しました", "Event": "イベント", "Execute": "実行", - "Execute Script": "スクリプトを実行", "Execute script": "スクリプトを実行", "Executes a system command and capture its output.": "システムコマンドを実行してその出力をキャプチャーします。", "Expression": "式", @@ -495,7 +488,6 @@ "Playlist": "プレイリスト", "Playlist directory": "プレイリストディレクトリ", "Playlist is empty": "プレイリストが空です", - "Playlist name": "プレイリスト名", "Playlist to small, disabling jukebox unique constraints temporarily": "プレイリストが小さすぎるため、ジュークボックスの重複排除の制限を一時的に無効にします", "Playlists": "プレイリスト", "Playlists deleted": "プレイリストを削除しました", @@ -581,7 +573,6 @@ "Shuffle": "シャッフル", "Shuffle playlist": "プレイリストをシャッフル", "Shuffle queue": "再生待ちをシャッフル", - "Shuffled playlist succesfully": "プレイリストをシャッフルしました", "Shuffling playlist failed": "プレイリストのシャッフルに失敗しました", "Single": "シングル", "Smart playlist": "スマートプレイリスト", @@ -601,7 +592,6 @@ "Sort by tag": "タグで並べ替え", "Sort order of the script, 0 disables listing in main menu": "スクリプトの順番を並べ替えます。0にするとメインメニューに表示されなくなります", "Sort playlist": "プレイリストを並べ替え", - "Sorted playlist succesfully": "プレイリストを並べ替えました", "Sorting playlist failed": "プレイリストの並べ替えに失敗しました", "Specify": "指定", "Start": "開始", @@ -722,7 +712,6 @@ "Yes, clear it": "はい、消去します", "Yes, delete it": "はい、削除します", "Yes, do it": "はい、実行します", - "bits": "bits", "clickcount": "クリック回数", "contains": "含む", "country": "国", @@ -774,5 +763,78 @@ "Unknown partition": "不明なパーティション", "Disable single oneshot": "シングルの1度だけ再生を無効化", "Enable single mode": "シングルモードを有効化", - "Enable single oneshot": "シングルの一度だけ再生を有効化" + "Enable single oneshot": "シングルの一度だけ再生を有効化", + "32 bit floating": "32bit浮動小数点", + "Browser has no MediaSession support": "このブラウザーはMediaSessionに対応していません", + "Can not parse response from %{uri} to json object": "%{uri}からのレスポンスをJSONオブジェクトにパースできません", + "Choose a playlist": "プレイリストを選択", + "Create new": "新規作成", + "Disable consume mode": "再生したら削除を無効化", + "Discnum": "ディスク番号", + "DSD": "DSD", + "Enable consume mode": "再生したら削除を有効化", + "Enable consume oneshot": "再生したら削除を一度だけ有効化", + "Existing playlist": "既存のプレイリスト", + "New playlist": "新規プレイリスト", + "Open in new window": "新規ウィンドウで開く", + "Playlist directory not found": "プレイリストディレクトリが見つかりません", + "Save mode": "保存モード", + "Scripting": "スクリプト操作", + "Shuffled playlist successfully": "プレイリストをシャッフルしました", + "Sorted playlist successfully": "プレイリストを並べ替えました", + "Stream": "ストリーム", + "Unknown queue save mode": "再生待ちの保存モードが不明です", + "Webradioformat": "ウェブラジオ形式", + "bit": "bit", + "stickerElapsed": "経過", + "mpd_database": "データベースが変更されました", + "mpd_message": "メッセージ", + "mpd_mixer": "ミキサー", + "mpd_mount": "マウント", + "mpd_neighbor": "隣接", + "mpd_options": "オプション", + "mpd_output": "出力", + "mpd_partition": "パーティション", + "mpd_player": "プレイヤー", + "mpd_queue": "再生待ち", + "mpd_sticker": "ステッカー", + "mpd_stored_playlist": "プレイリスト", + "mpd_subscription": "登録", + "mympd_connected": "接続しました", + "mympd_disconnected": "切断されました", + "mympd_feedback": "フィードバック", + "mympd_scrobble": "Scrobble", + "mympd_start": "開始", + "mympd_stop": "停止", + "Adding songs from jukebox to queue failed": "ジュークボックスから再生待ちへの曲の追加に失敗しました", + "Modal": "モーダル", + "Open modal": "モーダルを開く", + "modalConnection": "接続", + "modalSettings": "設定", + "modalMaintenance": "メンテナンス", + "modalScripts": "スクリプト", + "modalTimer": "タイマー", + "modalTrigger": "トリガー", + "modalMounts": "マウント", + "modalAbout": "myMPDについて", + "Modal shortcut": "モーダルショートカット", + "icon-all": "すべて", + "icon-action": "アクション", + "icon-alert": "アラート", + "icon-av": "音声/動画", + "icon-communication": "コミュニケーション", + "icon-content": "コンテンツ", + "icon-device": "デバイス", + "icon-editor": "エディター", + "icon-file": "ファイル", + "icon-hardware": "ハードウェア", + "icon-home": "ホーム", + "icon-image": "イメージ", + "icon-maps": "マップ", + "icon-navigation": "ナビゲーション", + "icon-notification": "通知", + "icon-places": "場所", + "icon-search": "検索", + "icon-social": "ソーシャル", + "icon-toggle": "切り替え" } diff --git a/src/i18n/json/ko-KR.json b/src/i18n/json/ko-KR.json index 3ca2c63e8..357cd7607 100644 --- a/src/i18n/json/ko-KR.json +++ b/src/i18n/json/ko-KR.json @@ -14,7 +14,6 @@ "Active partition": "", "Add": "추가", "Add after current playing song": "지금 연주 중인 곡 다음에 추가", - "Add external link": "", "Add random": "무작위 추가", "Add smart playlist": "스마트 연주목록 추가", "Add stream": "스트림 추가", @@ -27,7 +26,6 @@ "Add view to homescreen": "홈 화면에 보기 추가", "Adding random songs to queue failed": "순서에 무작위 곡 추가 실패", "Adding timer failed": "타이머를 추가할 수 없음", - "Adding songs from jukebox to queue failed": "뮤직박스의 곡을 연주순서에 추가할 수 없음", "Advanced": "고급", "Advanced Audio Coding": "", "Album": "음반", @@ -39,7 +37,6 @@ "Albumart": "음반 표지", "Albumcache not ready": "앨범 캐시 준비 안 됨", "Albums": "음반", - "All": "모두", "Alternative stream uri": "", "Alternative streams": "", "Any Tag": "모든 태그", @@ -576,7 +573,6 @@ "Shuffle": "뒤섞기", "Shuffle playlist": "연주목록 뒤섞기", "Shuffle queue": "순서 뒤섞기", - "Shuffled playlist successfully": "연주목록을 뒤섞음", "Shuffling playlist failed": "", "Single": "한 곡만", "Smart playlist": "스마트 연주목록", @@ -596,7 +592,6 @@ "Sort by tag": "태그로 정렬", "Sort order of the script, 0 disables listing in main menu": "스크립트 분류 순서, 0은 주 메뉴에 안 보임", "Sort playlist": "연주목록 정렬", - "Sorted playlist successfully": "연주목록 정렬함", "Sorting playlist failed": "", "Specify": "지정", "Start": "시작", @@ -717,7 +712,6 @@ "Yes, clear it": "예, 지웁니다", "Yes, delete it": "예, 지웁니다", "Yes, do it": "예, 합니다", - "bits": "비트", "clickcount": "클릭 수", "contains": "내용", "country": "국가", @@ -766,5 +760,81 @@ "Partition specific setting": "", "Reset": "", "This partition": "", - "Unknown partition": "" + "Unknown partition": "", + "Disable single oneshot": "", + "Enable single mode": "", + "Enable single oneshot": "", + "32 bit floating": "", + "Browser has no MediaSession support": "", + "Can not parse response from %{uri} to json object": "", + "Choose a playlist": "", + "Create new": "", + "Disable consume mode": "", + "Discnum": "", + "DSD": "", + "Enable consume mode": "", + "Enable consume oneshot": "", + "Existing playlist": "", + "New playlist": "", + "Open in new window": "", + "Playlist directory not found": "", + "Save mode": "", + "Scripting": "", + "Shuffled playlist successfully": "연주목록을 뒤섞음", + "Sorted playlist successfully": "연주목록 정렬함", + "Stream": "", + "Unknown queue save mode": "", + "Webradioformat": "", + "bit": "", + "stickerElapsed": "", + "mpd_database": "", + "mpd_message": "", + "mpd_mixer": "", + "mpd_mount": "", + "mpd_neighbor": "", + "mpd_options": "", + "mpd_output": "", + "mpd_partition": "", + "mpd_player": "", + "mpd_queue": "", + "mpd_sticker": "", + "mpd_stored_playlist": "", + "mpd_subscription": "", + "mympd_connected": "", + "mympd_disconnected": "", + "mympd_feedback": "", + "mympd_scrobble": "", + "mympd_start": "", + "mympd_stop": "", + "Adding songs from jukebox to queue failed": "뮤직박스의 곡을 연주순서에 추가할 수 없음", + "Modal": "", + "Open modal": "", + "modalConnection": "", + "modalSettings": "", + "modalMaintenance": "", + "modalScripts": "", + "modalTimer": "", + "modalTrigger": "", + "modalMounts": "", + "modalAbout": "", + "Modal shortcut": "", + "icon-all": "", + "icon-action": "", + "icon-alert": "", + "icon-av": "", + "icon-communication": "", + "icon-content": "", + "icon-device": "", + "icon-editor": "", + "icon-file": "", + "icon-hardware": "", + "icon-home": "", + "icon-image": "", + "icon-maps": "", + "icon-navigation": "", + "icon-notification": "", + "icon-places": "", + "icon-search": "", + "icon-social": "", + "icon-toggle": "" } diff --git a/src/i18n/json/nl-NL.json b/src/i18n/json/nl-NL.json index fd0e35fa2..235a68c57 100644 --- a/src/i18n/json/nl-NL.json +++ b/src/i18n/json/nl-NL.json @@ -14,7 +14,6 @@ "Active partition": "Actieve partitie", "Add": "Toevoegen", "Add after current playing song": "Als volgende afspelen", - "Add external link": "Externe link toevoegen", "Add random": "Voeg willekeurige toe", "Add smart playlist": "Slimme afspeellijst toevoegen", "Add stream": "Stream toevoegen", @@ -27,7 +26,6 @@ "Add view to homescreen": "Weergave toevegen aan startscherm", "Adding random songs to queue failed": "Toevoegen willekeurig nummer mislukt", "Adding timer failed": "Toevoegen timer mislukt", - "Addings songs from jukebox to queue failed": "Toevoegen van Jukebox-nummers naar wachtrij mislukt", "Advanced": "Geavanceerd", "Advanced Audio Coding": "Geavanceerde audio codering", "Album": "Album", @@ -39,7 +37,6 @@ "Albumart": "Albumcover", "Albumcache not ready": "Albumcache nog niet beschikbaar", "Albums": "Albums", - "All": "Alles", "Alternative stream uri": "URL van alternatieve stream", "Alternative streams": "Alternatieve streams", "Any Tag": "Alle tags", @@ -89,7 +86,6 @@ "Can not open script directory": "Kan scriptmap niet openen", "Can not open scriptfile": "Kan script niet openen", "Can not open webradios directory": "Kan de map webradio niet openen", - "Can not parse response to json object": "Antwoord niet geparsed", "Can not parse script arguments": "Kan scriptargumenten niet parsen", "Can not parse settings": "Laden instellingen mislukt ", "Can not parse smart playlist file": "Kan slimme afspeellijst niet inlezen", @@ -183,7 +179,6 @@ "Description": "Beschrijving", "Dialogs": "Dialoog", "Directory": "Map", - "Disable consume": "Consumeren uitschakelen", "Disable random": "Willekeurig uitschakelen", "Disable repeat": "Herhalen uitschakelen", "Disable single mode": "Single modus uitschakelen", @@ -220,7 +215,6 @@ "Empty response from webradiodb backend": "Leeg antwoord van WebradioDB backend", "Empty uri": "Lege URL", "Enable": "Inschakelen", - "Enable consume": "Consumeren inschakelen", "Enable jukebox if playlist is database": "Jukebox inschakelen wanneer database als afspeellijst is geselecteerd", "Enable random": "Willekeurig inschakelen", "Enable repeat": "Herhalen inschakelen", @@ -247,7 +241,6 @@ "Error loading stream": "Fout bij laden stream", "Event": "Gebeurtenis", "Execute": "Uitvoeren", - "Execute Script": "Script uitvoeren", "Execute script": "Voer script uit", "Executes a system command and capture its output.": "Voer systeemcommando uit en lees de output", "Expression": "Zoekexpressie", @@ -495,7 +488,6 @@ "Playlist": "Afspeellijst", "Playlist directory": "Map afspeellijsten", "Playlist is empty": "Afspeellijst is leeg", - "Playlist name": "Naam afspeellijst", "Playlist to small, disabling jukebox unique constraints temporarily": "Afspeellijst te klein, voorwaarden Jukebox tijdelijk uitgeschakeld", "Playlists": "Afspeellijsten", "Playlists deleted": "Afspeellijsten gedeletet", @@ -581,7 +573,6 @@ "Shuffle": "Shuffle", "Shuffle playlist": "Shuffle afspeellijst", "Shuffle queue": "Wachtrij shufflen", - "Shuffled playlist succesfully": "Afspeellijst geshuffled", "Shuffling playlist failed": "Afspeellijst shuffling mislukt", "Single": "Single modus", "Smart playlist": "Slimmme afspeellijst", @@ -601,7 +592,6 @@ "Sort by tag": "Sorteer op tag", "Sort order of the script, 0 disables listing in main menu": "Sorteervolgorde van het script, 0 schakelt lijst in hoofdmenu uit", "Sort playlist": "Sorteer afspeellijst", - "Sorted playlist succesfully": "Afspeellijst gesorteerd", "Sorting playlist failed": "Afspeellijst sorteren mislukt", "Specify": "Specifiek", "Start": "Start", @@ -722,8 +712,6 @@ "Yes, clear it": "Ja, wissen", "Yes, delete it": "Ja, deleten", "Yes, do it": "Ja, doe het", - "Zoom": "Zoom", - "bits": "bits", "clickcount": "aantal kliks", "contains": "bevat", "country": "Land", @@ -818,7 +806,6 @@ "mympd_scrobble": "Scrobble", "mympd_start": "Start", "mympd_stop": "Stop", - "Add modal shortcut": "Open dialoog", "Adding songs from jukebox to queue failed": "Toevoegen van Jukebox-nummers naar wachtrij mislukt", "Modal": "Dialoog", "Open modal": "Dialoog openen", @@ -830,5 +817,24 @@ "modalTrigger": "Trigger", "modalMounts": "Monteringspunt", "modalAbout": "Over myMPD", - "Modal shortcut": "Open dialoog" -} \ No newline at end of file + "Modal shortcut": "Open dialoog", + "icon-all": "", + "icon-action": "", + "icon-alert": "", + "icon-av": "", + "icon-communication": "", + "icon-content": "", + "icon-device": "", + "icon-editor": "", + "icon-file": "", + "icon-hardware": "", + "icon-home": "", + "icon-image": "", + "icon-maps": "", + "icon-navigation": "", + "icon-notification": "", + "icon-places": "", + "icon-search": "", + "icon-social": "", + "icon-toggle": "" +} diff --git a/src/i18n/json/zh-CN.json b/src/i18n/json/zh-CN.json index def98aed8..cd74f8994 100644 --- a/src/i18n/json/zh-CN.json +++ b/src/i18n/json/zh-CN.json @@ -14,7 +14,6 @@ "Active partition": "活动分区", "Add": "添加", "Add after current playing song": "添加到当前播放曲目之后", - "Add external link": "添加外部链接", "Add random": "随机添加", "Add smart playlist": "添加智能播放列表", "Add stream": "添加流媒体", @@ -27,7 +26,6 @@ "Add view to homescreen": "添加视图到主页", "Adding random songs to queue failed": "添加随机曲目到播放队列失败", "Adding timer failed": "添加计时器失败", - "Adding songs from jukebox to queue failed": "从音乐盒添加歌曲到播放队列失败", "Advanced": "高级", "Advanced Audio Coding": "高级音频编码", "Album": "专辑", @@ -39,7 +37,6 @@ "Albumart": "专辑封面", "Albumcache not ready": "专辑缓存未准备好", "Albums": "专辑", - "All": "全部", "Alternative stream uri": "备用流媒体 URL", "Alternative streams": "备用流媒体", "Any Tag": "任何标签", @@ -78,7 +75,7 @@ "Browser default": "浏览器默认", "Browser specific setting": "浏览器指定设置", "CSS filter": "CSS 过滤", - "Cache update is already running": "缓存更新已在进行中", + "Cache update is already running": "缓存更新已在进行中", "Calculate": "计算", "Can not crop the queue": "未能裁剪播放队列", "Can not delete home icon": "未能删除主页图标", @@ -185,7 +182,6 @@ "Disable random": "禁用随机", "Disable repeat": "禁用重复", "Disable single mode": "禁用单曲模式", - "Disable single oneshot": "单次禁用单曲", "Disabled": "禁用", "Disc": "碟片", "Display tags": "显示标签", @@ -222,8 +218,6 @@ "Enable jukebox if playlist is database": "如果播放列表是数据库则启用音乐盒", "Enable random": "启用随机", "Enable repeat": "启用重复", - "Enable single mode": "启用单曲模式", - "Enable single oneshot": "单次启用单曲", "Enabled": "启用", "Enforce mobile view": "强制移动端视图", "Enforce uniqueness": "强制唯一", @@ -579,7 +573,6 @@ "Shuffle": "乱序", "Shuffle playlist": "乱序播放列表", "Shuffle queue": "乱序播放队列", - "Shuffled playlist successfully": "播放列表乱序成功", "Shuffling playlist failed": "播放列表乱序失败", "Single": "单曲", "Smart playlist": "智能播放列表", @@ -599,7 +592,6 @@ "Sort by tag": "根据标签排序", "Sort order of the script, 0 disables listing in main menu": "脚本排序顺序, 0 禁用主菜单列表", "Sort playlist": "播放列表排序", - "Sorted playlist successfully": "播放列表排序成功", "Sorting playlist failed": "播放列表排序失败", "Specify": "指定", "Start": "开始", @@ -720,7 +712,6 @@ "Yes, clear it": "确定清除", "Yes, delete it": "确定删除", "Yes, do it": "确定执行", - "bits": "bits", "clickcount": "点击率", "contains": "包含", "country": "国家", @@ -757,7 +748,7 @@ "tags": "标签", "url_resolved": "URL", "votes": "投票", - "Invalid deletion criteria": "无效删除依据", + "Invalid deletion criteria": "无效删除依据", "All partitions": "全部分区", "Default partition can not be deleted": "不能删除默认分区", "Error saving partition settings": "保存分区设置出错", @@ -769,5 +760,81 @@ "Partition specific setting": "分区详细设置", "Reset": "重置", "This partition": "本分区", - "Unknown partition": "未知分区" + "Unknown partition": "未知分区", + "Disable single oneshot": "单次禁用单曲", + "Enable single mode": "启用单曲模式", + "Enable single oneshot": "单次启用单曲", + "32 bit floating": "", + "Browser has no MediaSession support": "", + "Can not parse response from %{uri} to json object": "", + "Choose a playlist": "", + "Create new": "", + "Disable consume mode": "", + "Discnum": "", + "DSD": "", + "Enable consume mode": "", + "Enable consume oneshot": "", + "Existing playlist": "", + "New playlist": "", + "Open in new window": "", + "Playlist directory not found": "", + "Save mode": "", + "Scripting": "", + "Shuffled playlist successfully": "播放列表乱序成功", + "Sorted playlist successfully": "播放列表排序成功", + "Stream": "", + "Unknown queue save mode": "", + "Webradioformat": "", + "bit": "", + "stickerElapsed": "", + "mpd_database": "", + "mpd_message": "", + "mpd_mixer": "", + "mpd_mount": "", + "mpd_neighbor": "", + "mpd_options": "", + "mpd_output": "", + "mpd_partition": "", + "mpd_player": "", + "mpd_queue": "", + "mpd_sticker": "", + "mpd_stored_playlist": "", + "mpd_subscription": "", + "mympd_connected": "", + "mympd_disconnected": "", + "mympd_feedback": "", + "mympd_scrobble": "", + "mympd_start": "", + "mympd_stop": "", + "Adding songs from jukebox to queue failed": "从音乐盒添加歌曲到播放队列失败", + "Modal": "", + "Open modal": "", + "modalConnection": "", + "modalSettings": "", + "modalMaintenance": "", + "modalScripts": "", + "modalTimer": "", + "modalTrigger": "", + "modalMounts": "", + "modalAbout": "", + "Modal shortcut": "", + "icon-all": "", + "icon-action": "", + "icon-alert": "", + "icon-av": "", + "icon-communication": "", + "icon-content": "", + "icon-device": "", + "icon-editor": "", + "icon-file": "", + "icon-hardware": "", + "icon-home": "", + "icon-image": "", + "icon-maps": "", + "icon-navigation": "", + "icon-notification": "", + "icon-places": "", + "icon-search": "", + "icon-social": "", + "icon-toggle": "" } diff --git a/src/i18n/translate.pl b/src/i18n/translate.pl index 700bb4c1f..a95c07565 100755 --- a/src/i18n/translate.pl +++ b/src/i18n/translate.pl @@ -1,5 +1,6 @@ #!/usr/bin/perl -w # +# Translation phrases maintenance script # Extracts the phrases from source, compares it to already translated phrases # writes the i18n.json and reports the differences @@ -8,6 +9,7 @@ my $verbose = defined($ARGV[0]) ? 1 : 0; my $phrases; +my $ignore; my $i18n; my $desc; my @langs = (); @@ -27,6 +29,14 @@ } close $file; +#ignore phrases +open $file, "src/i18n/ignore_phrases.txt" or die "Can't open file \"src/i18n/ignore_phrases.txt\": $!"; +while (my $line = <$file>) { + chomp($line); + $ignore->{$line} = 1; +} +close $file; + #phrases from src my @dirs = ("src/", "src/mpd_client/", "src/mpd_worker/", "src/mympd_api/", "src/web_server/", "htdocs/js/"); my @files = ("htdocs/index.html"); @@ -42,34 +52,43 @@ closedir $dir; } +#add a phrase +sub add_phrase { + my $p = $_[0]; + if (not defined($ignore->{$p})) { + $phrases->{$p} = 1; + } +} + +#Parse file for phrases for my $filename (@files) { open my $file, $filename or die "Can't open file \"$filename\": $!"; while (my $line = <$file>) { if ($filename =~ /\.c$/) { while ($line =~ /JSONRPC_SEVERITY_\w+,\s+"([^"]+)"(\)|,)/g) { - $phrases->{$1} = 1; + add_phrase($1); } while ($line =~ /JSONRPC_SEVERITY_\w+,\s+\S+,\s+"([^"]+)"(\)|,)/g) { - $phrases->{$1} = 1; + add_phrase($1); } } elsif ($filename =~ /\.js$/) { while ($line =~ /\"data-(\w+-)?phrase\":\s*"([^"]+)"/g) { - $phrases->{$2} = 1; + add_phrase($2); } while ($line =~ /(\s+|\(|\+)tn?\('([^']+)'/g) { - $phrases->{$2} = 1; + add_phrase($2); } while ($line =~ /"desc":\s*"([^"]+)"/g) { - $phrases->{$1} = 1; + add_phrase($1); } while ($line =~ /(elCreateTextTnNr|elCreateTextTn)\('\w+', \{[^}]*\}, '([^']+)'/g) { - $phrases->{$2} = 1; + add_phrase($2); } } elsif ($filename =~ /\.html$/) { while ($line =~ /data-(\w+-)?phrase="([^"]+)"/g) { - $phrases->{$2} = 1; + add_phrase($2); } } } diff --git a/src/lib/cert.c b/src/lib/cert.c index 7055d9ba5..ad069b3a6 100644 --- a/src/lib/cert.c +++ b/src/lib/cert.c @@ -338,8 +338,10 @@ static sds get_san(sds buffer) { list_init(&san); MYMPD_LOG_DEBUG("Adding DNS:localhost to SAN"); list_push(&san, "DNS:localhost", 0, NULL, NULL); - list_push(&san, "DNS:ip6-localhost", 0, NULL, NULL); - list_push(&san, "DNS:ip6-loopback", 0, NULL, NULL); + #ifdef MYMPD_ENABLE_IPV6 + list_push(&san, "DNS:ip6-localhost", 0, NULL, NULL); + list_push(&san, "DNS:ip6-loopback", 0, NULL, NULL); + #endif //Retrieve short hostname char hostbuffer[256]; /* Flawfinder: ignore */ diff --git a/src/web_server/embedded_files.c b/src/web_server/embedded_files.c index 433d6e59b..be7fdd1e0 100644 --- a/src/web_server/embedded_files.c +++ b/src/web_server/embedded_files.c @@ -32,6 +32,9 @@ INCBIN(ligatures_json, "../htdocs/assets/ligatures.json.gz"); #ifdef I18N_en_US INCBIN(i18n_en_US_json, "../htdocs/assets/i18n/en-US.json.gz"); #endif +#ifdef I18N_es_ES + INCBIN(i18n_es_ES_json, "../htdocs/assets/i18n/es-ES.json.gz"); +#endif #ifdef I18N_es_VE INCBIN(i18n_es_VE_json, "../htdocs/assets/i18n/es-VE.json.gz"); #endif diff --git a/src/web_server/utility.c b/src/web_server/utility.c index 4aad5e2d3..30eba400c 100644 --- a/src/web_server/utility.c +++ b/src/web_server/utility.c @@ -276,6 +276,9 @@ bool webserver_serve_embedded_files(struct mg_connection *nc, sds uri) { #ifdef I18N_en_US {"/assets/i18n/en-US.json", "application/json", true, true, i18n_en_US_json_data, i18n_en_US_json_size}, #endif + #ifdef I18N_es_ES + {"/assets/i18n/es-ES.json", "application/json", true, true, i18n_es_ES_json_data, i18n_es_ES_json_size}, + #endif #ifdef I18N_es_VE {"/assets/i18n/es-VE.json", "application/json", true, true, i18n_es_VE_json_data, i18n_es_VE_json_size}, #endif