diff --git a/.circleci/config.yml b/.circleci/config.yml index 9e92613921b..dcd894d821b 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -76,6 +76,7 @@ jobs: --source Perl \ -I lib \ -j 9 \ + t/critic.t \ t/pgtap/* \ t/pgtap/unused-tags/* \ t/script/MergeDuplicateArtistCredits.t \ diff --git a/admin/CompileSchemaScripts.pl b/admin/CompileSchemaScripts.pl index a68f178274d..c44318ba177 100755 --- a/admin/CompileSchemaScripts.pl +++ b/admin/CompileSchemaScripts.pl @@ -21,12 +21,12 @@ my $scripts = $upgrade_data->{$schema_version}->{$script_name}; my $filename = "$FindBin::Bin/sql/updates/schema-change/$schema_version.$script_name.sql"; my $data = join("\n", '-- Generated by CompileSchemaScripts.pl from:', map { '-- ' . $_ } @$scripts) . "\n"; - $data .= <<~'EOSQL'; + $data .= <<~'SQL'; \\set ON_ERROR_STOP 1 BEGIN; SET search_path = musicbrainz, public; SET LOCAL statement_timeout = 0; - EOSQL + SQL for my $script (@$scripts) { my @script_data = read_file("$FindBin::Bin/sql/updates/$script"); $data .= "--------------------------------------------------------------------------------\n"; @@ -37,8 +37,8 @@ } } } - $data .= <<~'EOSQL'; + $data .= <<~'SQL'; COMMIT; - EOSQL + SQL write_file($filename, \$data); } diff --git a/admin/sql/CreateFunctions.sql b/admin/sql/CreateFunctions.sql index dcc3d75c214..89f4372ddb4 100644 --- a/admin/sql/CreateFunctions.sql +++ b/admin/sql/CreateFunctions.sql @@ -1356,150 +1356,6 @@ BEGIN END; $$ LANGUAGE 'plpgsql'; -CREATE OR REPLACE FUNCTION unique_primary_area_alias() -RETURNS trigger AS $$ -BEGIN - IF NEW.primary_for_locale THEN - UPDATE area_alias SET primary_for_locale = FALSE - WHERE locale = NEW.locale AND id != NEW.id - AND area = NEW.area; - END IF; - RETURN NEW; -END; -$$ LANGUAGE 'plpgsql'; - -CREATE OR REPLACE FUNCTION unique_primary_artist_alias() -RETURNS trigger AS $$ -BEGIN - IF NEW.primary_for_locale THEN - UPDATE artist_alias SET primary_for_locale = FALSE - WHERE locale = NEW.locale AND id != NEW.id - AND artist = NEW.artist; - END IF; - RETURN NEW; -END; -$$ LANGUAGE 'plpgsql'; - -CREATE OR REPLACE FUNCTION unique_primary_event_alias() -RETURNS trigger AS $$ -BEGIN - IF NEW.primary_for_locale THEN - UPDATE event_alias SET primary_for_locale = FALSE - WHERE locale = NEW.locale AND id != NEW.id - AND event = NEW.event; - END IF; - RETURN NEW; -END; -$$ LANGUAGE 'plpgsql'; - -CREATE OR REPLACE FUNCTION unique_primary_genre_alias() -RETURNS trigger AS $$ -BEGIN - IF NEW.primary_for_locale THEN - UPDATE genre_alias SET primary_for_locale = FALSE - WHERE locale = NEW.locale AND id != NEW.id - AND genre = NEW.genre; - END IF; - RETURN NEW; -END; -$$ LANGUAGE 'plpgsql'; - -CREATE OR REPLACE FUNCTION unique_primary_instrument_alias() -RETURNS trigger AS $$ -BEGIN - IF NEW.primary_for_locale THEN - UPDATE instrument_alias SET primary_for_locale = FALSE - WHERE locale = NEW.locale AND id != NEW.id - AND instrument = NEW.instrument; - END IF; - RETURN NEW; -END; -$$ LANGUAGE 'plpgsql'; - -CREATE OR REPLACE FUNCTION unique_primary_label_alias() -RETURNS trigger AS $$ -BEGIN - IF NEW.primary_for_locale THEN - UPDATE label_alias SET primary_for_locale = FALSE - WHERE locale = NEW.locale AND id != NEW.id - AND label = NEW.label; - END IF; - RETURN NEW; -END; -$$ LANGUAGE 'plpgsql'; - -CREATE OR REPLACE FUNCTION unique_primary_place_alias() -RETURNS trigger AS $$ -BEGIN - IF NEW.primary_for_locale THEN - UPDATE place_alias SET primary_for_locale = FALSE - WHERE locale = NEW.locale AND id != NEW.id - AND place = NEW.place; - END IF; - RETURN NEW; -END; -$$ LANGUAGE 'plpgsql'; - -CREATE OR REPLACE FUNCTION unique_primary_recording_alias() -RETURNS trigger AS $$ -BEGIN - IF NEW.primary_for_locale THEN - UPDATE recording_alias SET primary_for_locale = FALSE - WHERE locale = NEW.locale AND id != NEW.id - AND recording = NEW.recording; - END IF; - RETURN NEW; -END; -$$ LANGUAGE 'plpgsql'; - -CREATE OR REPLACE FUNCTION unique_primary_release_alias() -RETURNS trigger AS $$ -BEGIN - IF NEW.primary_for_locale THEN - UPDATE release_alias SET primary_for_locale = FALSE - WHERE locale = NEW.locale AND id != NEW.id - AND release = NEW.release; - END IF; - RETURN NEW; -END; -$$ LANGUAGE 'plpgsql'; - -CREATE OR REPLACE FUNCTION unique_primary_release_group_alias() -RETURNS trigger AS $$ -BEGIN - IF NEW.primary_for_locale THEN - UPDATE release_group_alias SET primary_for_locale = FALSE - WHERE locale = NEW.locale AND id != NEW.id - AND release_group = NEW.release_group; - END IF; - RETURN NEW; -END; -$$ LANGUAGE 'plpgsql'; - -CREATE OR REPLACE FUNCTION unique_primary_series_alias() -RETURNS trigger AS $$ -BEGIN - IF NEW.primary_for_locale THEN - UPDATE series_alias SET primary_for_locale = FALSE - WHERE locale = NEW.locale AND id != NEW.id - AND series = NEW.series; - END IF; - RETURN NEW; -END; -$$ LANGUAGE 'plpgsql'; - -CREATE OR REPLACE FUNCTION unique_primary_work_alias() -RETURNS trigger AS $$ -BEGIN - IF NEW.primary_for_locale THEN - UPDATE work_alias SET primary_for_locale = FALSE - WHERE locale = NEW.locale AND id != NEW.id - AND work = NEW.work; - END IF; - RETURN NEW; -END; -$$ LANGUAGE 'plpgsql'; - CREATE OR REPLACE FUNCTION simplify_search_hints() RETURNS trigger AS $$ BEGIN diff --git a/admin/sql/CreateTriggers.sql b/admin/sql/CreateTriggers.sql index 3248af3c8ab..dbb1f570888 100644 --- a/admin/sql/CreateTriggers.sql +++ b/admin/sql/CreateTriggers.sql @@ -10,9 +10,6 @@ CREATE TRIGGER b_upd_area_alias BEFORE UPDATE ON area_alias CREATE TRIGGER b_upd_area_tag BEFORE UPDATE ON area_tag FOR EACH ROW EXECUTE PROCEDURE b_upd_last_updated_table(); -CREATE TRIGGER unique_primary_for_locale BEFORE UPDATE OR INSERT ON area_alias - FOR EACH ROW EXECUTE PROCEDURE unique_primary_area_alias(); - CREATE TRIGGER search_hint BEFORE UPDATE OR INSERT ON area_alias FOR EACH ROW EXECUTE PROCEDURE simplify_search_hints(3); @@ -55,9 +52,6 @@ CREATE TRIGGER del_collection_sub_on_delete BEFORE DELETE ON editor_collection CREATE TRIGGER del_collection_sub_on_private BEFORE UPDATE ON editor_collection FOR EACH ROW EXECUTE PROCEDURE del_collection_sub_on_private(); -CREATE TRIGGER unique_primary_for_locale BEFORE UPDATE OR INSERT ON artist_alias - FOR EACH ROW EXECUTE PROCEDURE unique_primary_artist_alias(); - CREATE TRIGGER search_hint BEFORE UPDATE OR INSERT ON artist_alias FOR EACH ROW EXECUTE PROCEDURE simplify_search_hints(3); @@ -88,9 +82,6 @@ CREATE TRIGGER b_upd_event_alias BEFORE UPDATE ON event_alias CREATE TRIGGER end_date_implies_ended BEFORE UPDATE OR INSERT ON event_alias FOR EACH ROW EXECUTE PROCEDURE end_date_implies_ended(); -CREATE TRIGGER unique_primary_for_locale BEFORE UPDATE OR INSERT ON event_alias - FOR EACH ROW EXECUTE PROCEDURE unique_primary_event_alias(); - CREATE TRIGGER search_hint BEFORE UPDATE OR INSERT ON event_alias FOR EACH ROW EXECUTE PROCEDURE simplify_search_hints(2); @@ -103,9 +94,6 @@ CREATE TRIGGER b_upd_genre BEFORE UPDATE ON genre CREATE TRIGGER b_upd_genre_alias BEFORE UPDATE ON genre_alias FOR EACH ROW EXECUTE PROCEDURE b_upd_last_updated_table(); -CREATE TRIGGER unique_primary_for_locale BEFORE UPDATE OR INSERT ON genre_alias - FOR EACH ROW EXECUTE PROCEDURE unique_primary_genre_alias(); - CREATE TRIGGER b_upd_instrument BEFORE UPDATE ON instrument FOR EACH ROW EXECUTE PROCEDURE b_upd_last_updated_table(); @@ -118,9 +106,6 @@ CREATE TRIGGER b_upd_instrument_alias BEFORE UPDATE ON instrument_alias CREATE TRIGGER b_upd_instrument_tag BEFORE UPDATE ON instrument_tag FOR EACH ROW EXECUTE PROCEDURE b_upd_last_updated_table(); -CREATE TRIGGER unique_primary_for_locale BEFORE UPDATE OR INSERT ON instrument_alias - FOR EACH ROW EXECUTE PROCEDURE unique_primary_instrument_alias(); - CREATE TRIGGER search_hint BEFORE UPDATE OR INSERT ON instrument_alias FOR EACH ROW EXECUTE PROCEDURE simplify_search_hints(2); @@ -340,9 +325,6 @@ CREATE TRIGGER end_date_implies_ended BEFORE UPDATE OR INSERT ON label_alias CREATE TRIGGER b_upd_label_alias BEFORE UPDATE ON label_alias FOR EACH ROW EXECUTE PROCEDURE b_upd_last_updated_table(); -CREATE TRIGGER unique_primary_for_locale BEFORE UPDATE OR INSERT ON label_alias - FOR EACH ROW EXECUTE PROCEDURE unique_primary_label_alias(); - CREATE TRIGGER search_hint BEFORE UPDATE OR INSERT ON label_alias FOR EACH ROW EXECUTE PROCEDURE simplify_search_hints(2); @@ -391,9 +373,6 @@ CREATE TRIGGER end_date_implies_ended BEFORE UPDATE OR INSERT ON place_alias CREATE TRIGGER b_upd_place_alias BEFORE UPDATE ON place_alias FOR EACH ROW EXECUTE PROCEDURE b_upd_last_updated_table(); -CREATE TRIGGER unique_primary_for_locale BEFORE UPDATE OR INSERT ON place_alias - FOR EACH ROW EXECUTE PROCEDURE unique_primary_place_alias(); - CREATE TRIGGER search_hint BEFORE UPDATE OR INSERT ON place_alias FOR EACH ROW EXECUTE PROCEDURE simplify_search_hints(2); @@ -418,9 +397,6 @@ CREATE TRIGGER end_date_implies_ended BEFORE UPDATE OR INSERT ON recording_alias CREATE TRIGGER b_upd_recording_alias BEFORE UPDATE ON recording_alias FOR EACH ROW EXECUTE PROCEDURE b_upd_last_updated_table(); -CREATE TRIGGER unique_primary_for_locale BEFORE UPDATE OR INSERT ON recording_alias - FOR EACH ROW EXECUTE PROCEDURE unique_primary_recording_alias(); - CREATE TRIGGER search_hint BEFORE UPDATE OR INSERT ON recording_alias FOR EACH ROW EXECUTE PROCEDURE simplify_search_hints(2); @@ -445,9 +421,6 @@ CREATE TRIGGER end_date_implies_ended BEFORE UPDATE OR INSERT ON release_alias CREATE TRIGGER b_upd_release_alias BEFORE UPDATE ON release_alias FOR EACH ROW EXECUTE PROCEDURE b_upd_last_updated_table(); -CREATE TRIGGER unique_primary_for_locale BEFORE UPDATE OR INSERT ON release_alias - FOR EACH ROW EXECUTE PROCEDURE unique_primary_release_alias(); - CREATE TRIGGER search_hint BEFORE UPDATE OR INSERT ON release_alias FOR EACH ROW EXECUTE PROCEDURE simplify_search_hints(2); @@ -508,9 +481,6 @@ CREATE TRIGGER end_date_implies_ended BEFORE UPDATE OR INSERT ON release_group_a CREATE TRIGGER b_upd_release_group_alias BEFORE UPDATE ON release_group_alias FOR EACH ROW EXECUTE PROCEDURE b_upd_last_updated_table(); -CREATE TRIGGER unique_primary_for_locale BEFORE UPDATE OR INSERT ON release_group_alias - FOR EACH ROW EXECUTE PROCEDURE unique_primary_release_group_alias(); - CREATE TRIGGER search_hint BEFORE UPDATE OR INSERT ON release_group_alias FOR EACH ROW EXECUTE PROCEDURE simplify_search_hints(2); @@ -529,9 +499,6 @@ CREATE TRIGGER b_upd_series_tag BEFORE UPDATE ON series_tag CREATE TRIGGER end_date_implies_ended BEFORE UPDATE OR INSERT ON series_alias FOR EACH ROW EXECUTE PROCEDURE end_date_implies_ended(); -CREATE TRIGGER unique_primary_for_locale BEFORE UPDATE OR INSERT ON series_alias - FOR EACH ROW EXECUTE PROCEDURE unique_primary_series_alias(); - CREATE TRIGGER search_hint BEFORE UPDATE OR INSERT ON series_alias FOR EACH ROW EXECUTE PROCEDURE simplify_search_hints(2); @@ -569,9 +536,6 @@ CREATE TRIGGER b_upd_work_alias BEFORE UPDATE ON work_alias CREATE TRIGGER end_date_implies_ended BEFORE UPDATE OR INSERT ON work_alias FOR EACH ROW EXECUTE PROCEDURE end_date_implies_ended(); -CREATE TRIGGER unique_primary_for_locale BEFORE UPDATE OR INSERT ON work_alias - FOR EACH ROW EXECUTE PROCEDURE unique_primary_work_alias(); - CREATE TRIGGER search_hint BEFORE UPDATE OR INSERT ON work_alias FOR EACH ROW EXECUTE PROCEDURE simplify_search_hints(2); diff --git a/admin/sql/DropFunctions.sql b/admin/sql/DropFunctions.sql index 956d08437bb..7ed45a6d8bb 100644 --- a/admin/sql/DropFunctions.sql +++ b/admin/sql/DropFunctions.sql @@ -102,17 +102,5 @@ DROP FUNCTION simplify_search_hints(); DROP FUNCTION track_count_matches_cdtoc(medium, int); DROP FUNCTION trg_delete_unused_tag(); DROP FUNCTION trg_delete_unused_tag_ref(); -DROP FUNCTION unique_primary_area_alias(); -DROP FUNCTION unique_primary_artist_alias(); -DROP FUNCTION unique_primary_event_alias(); -DROP FUNCTION unique_primary_genre_alias(); -DROP FUNCTION unique_primary_instrument_alias(); -DROP FUNCTION unique_primary_label_alias(); -DROP FUNCTION unique_primary_place_alias(); -DROP FUNCTION unique_primary_recording_alias(); -DROP FUNCTION unique_primary_release_alias(); -DROP FUNCTION unique_primary_release_group_alias(); -DROP FUNCTION unique_primary_series_alias(); -DROP FUNCTION unique_primary_work_alias(); DROP FUNCTION whitespace_collapsed(TEXT); DROP AGGREGATE array_accum (anyelement); diff --git a/admin/sql/DropTriggers.sql b/admin/sql/DropTriggers.sql index f10906dee07..5b2afc4d57c 100644 --- a/admin/sql/DropTriggers.sql +++ b/admin/sql/DropTriggers.sql @@ -4,7 +4,6 @@ DROP TRIGGER b_upd_area ON area; DROP TRIGGER b_upd_area_alias ON area_alias; DROP TRIGGER b_upd_area_tag ON area_tag; -DROP TRIGGER unique_primary_for_locale ON area_alias; DROP TRIGGER search_hint ON area_alias; DROP TRIGGER end_date_implies_ended ON area_alias; DROP TRIGGER end_date_implies_ended ON area; @@ -19,7 +18,6 @@ DROP TRIGGER b_upd_artist_alias ON artist_alias; DROP TRIGGER replace_old_sub_on_add ON editor_subscribe_collection; DROP TRIGGER del_collection_sub_on_delete ON editor_collection; DROP TRIGGER del_collection_sub_on_private ON editor_collection; -DROP TRIGGER unique_primary_for_locale ON artist_alias; DROP TRIGGER search_hint ON artist_alias; DROP TRIGGER b_upd_artist_tag ON artist_tag; DROP TRIGGER b_upd_editor ON editor; @@ -30,17 +28,14 @@ DROP TRIGGER b_upd_event ON event; DROP TRIGGER end_date_implies_ended ON event; DROP TRIGGER b_upd_event_alias ON event_alias; DROP TRIGGER end_date_implies_ended ON event_alias; -DROP TRIGGER unique_primary_for_locale ON event_alias; DROP TRIGGER search_hint ON event_alias; DROP TRIGGER b_upd_event_tag ON event_tag; DROP TRIGGER b_upd_genre ON genre; DROP TRIGGER b_upd_genre_alias ON genre_alias; -DROP TRIGGER unique_primary_for_locale ON genre_alias; DROP TRIGGER b_upd_instrument ON instrument; DROP TRIGGER end_date_implies_ended ON instrument_alias; DROP TRIGGER b_upd_instrument_alias ON instrument_alias; DROP TRIGGER b_upd_instrument_tag ON instrument_tag; -DROP TRIGGER unique_primary_for_locale ON instrument_alias; DROP TRIGGER search_hint ON instrument_alias; DROP TRIGGER b_upd_l_area_area ON l_area_area; DROP TRIGGER b_upd_l_area_artist ON l_area_artist; @@ -114,7 +109,6 @@ DROP TRIGGER b_upd_label ON label; DROP TRIGGER end_date_implies_ended ON label; DROP TRIGGER end_date_implies_ended ON label_alias; DROP TRIGGER b_upd_label_alias ON label_alias; -DROP TRIGGER unique_primary_for_locale ON label_alias; DROP TRIGGER search_hint ON label_alias; DROP TRIGGER b_upd_label_tag ON label_tag; DROP TRIGGER end_date_implies_ended ON link; @@ -131,7 +125,6 @@ DROP TRIGGER b_upd_place ON place; DROP TRIGGER end_date_implies_ended ON place; DROP TRIGGER end_date_implies_ended ON place_alias; DROP TRIGGER b_upd_place_alias ON place_alias; -DROP TRIGGER unique_primary_for_locale ON place_alias; DROP TRIGGER search_hint ON place_alias; DROP TRIGGER b_upd_place_tag ON place_tag; DROP TRIGGER a_ins_recording ON recording; @@ -140,7 +133,6 @@ DROP TRIGGER a_upd_recording ON recording; DROP TRIGGER a_del_recording ON recording; DROP TRIGGER end_date_implies_ended ON recording_alias; DROP TRIGGER b_upd_recording_alias ON recording_alias; -DROP TRIGGER unique_primary_for_locale ON recording_alias; DROP TRIGGER search_hint ON recording_alias; DROP TRIGGER b_upd_recording_tag ON recording_tag; DROP TRIGGER a_ins_release ON release; @@ -149,7 +141,6 @@ DROP TRIGGER a_del_release ON release; DROP TRIGGER b_upd_release ON release; DROP TRIGGER end_date_implies_ended ON release_alias; DROP TRIGGER b_upd_release_alias ON release_alias; -DROP TRIGGER unique_primary_for_locale ON release_alias; DROP TRIGGER search_hint ON release_alias; DROP TRIGGER a_ins_release_event ON release_country; DROP TRIGGER a_upd_release_event ON release_country; @@ -170,14 +161,12 @@ DROP TRIGGER a_del_release_group_secondary_type_join ON release_group_secondary_ DROP TRIGGER b_upd_release_group_secondary_type_join ON release_group_secondary_type_join; DROP TRIGGER end_date_implies_ended ON release_group_alias; DROP TRIGGER b_upd_release_group_alias ON release_group_alias; -DROP TRIGGER unique_primary_for_locale ON release_group_alias; DROP TRIGGER search_hint ON release_group_alias; DROP TRIGGER b_upd_release_group_tag ON release_group_tag; DROP TRIGGER b_upd_series ON series; DROP TRIGGER b_upd_series_alias ON series_alias; DROP TRIGGER b_upd_series_tag ON series_tag; DROP TRIGGER end_date_implies_ended ON series_alias; -DROP TRIGGER unique_primary_for_locale ON series_alias; DROP TRIGGER search_hint ON series_alias; DROP TRIGGER b_upd_tag_relation ON tag_relation; DROP TRIGGER a_ins_track ON track; @@ -190,7 +179,6 @@ DROP TRIGGER a_ins_work ON work; DROP TRIGGER b_upd_work ON work; DROP TRIGGER b_upd_work_alias ON work_alias; DROP TRIGGER end_date_implies_ended ON work_alias; -DROP TRIGGER unique_primary_for_locale ON work_alias; DROP TRIGGER search_hint ON work_alias; DROP TRIGGER b_upd_work_tag ON work_tag; DROP TRIGGER inserting_edits_requires_confirmed_email_address ON edit; diff --git a/admin/sql/updates/20210916-mbs-11896.sql b/admin/sql/updates/20210916-mbs-11896.sql new file mode 100644 index 00000000000..ffad0b5ecf9 --- /dev/null +++ b/admin/sql/updates/20210916-mbs-11896.sql @@ -0,0 +1,31 @@ +\set ON_ERROR_STOP 1 + +BEGIN; + +DROP TRIGGER IF EXISTS unique_primary_for_locale ON area_alias; +DROP TRIGGER IF EXISTS unique_primary_for_locale ON artist_alias; +DROP TRIGGER IF EXISTS unique_primary_for_locale ON event_alias; +DROP TRIGGER IF EXISTS unique_primary_for_locale ON genre_alias; +DROP TRIGGER IF EXISTS unique_primary_for_locale ON instrument_alias; +DROP TRIGGER IF EXISTS unique_primary_for_locale ON label_alias; +DROP TRIGGER IF EXISTS unique_primary_for_locale ON place_alias; +DROP TRIGGER IF EXISTS unique_primary_for_locale ON recording_alias; +DROP TRIGGER IF EXISTS unique_primary_for_locale ON release_alias; +DROP TRIGGER IF EXISTS unique_primary_for_locale ON release_group_alias; +DROP TRIGGER IF EXISTS unique_primary_for_locale ON series_alias; +DROP TRIGGER IF EXISTS unique_primary_for_locale ON work_alias; + +DROP FUNCTION IF EXISTS unique_primary_area_alias(); +DROP FUNCTION IF EXISTS unique_primary_artist_alias(); +DROP FUNCTION IF EXISTS unique_primary_event_alias(); +DROP FUNCTION IF EXISTS unique_primary_genre_alias(); +DROP FUNCTION IF EXISTS unique_primary_instrument_alias(); +DROP FUNCTION IF EXISTS unique_primary_label_alias(); +DROP FUNCTION IF EXISTS unique_primary_place_alias(); +DROP FUNCTION IF EXISTS unique_primary_recording_alias(); +DROP FUNCTION IF EXISTS unique_primary_release_alias(); +DROP FUNCTION IF EXISTS unique_primary_release_group_alias(); +DROP FUNCTION IF EXISTS unique_primary_series_alias(); +DROP FUNCTION IF EXISTS unique_primary_work_alias(); + +COMMIT; diff --git a/admin/sql/updates/schema-change/27.slave.sql b/admin/sql/updates/schema-change/27.slave.sql new file mode 100644 index 00000000000..725f745eaa2 --- /dev/null +++ b/admin/sql/updates/schema-change/27.slave.sql @@ -0,0 +1,127 @@ +-- Generated by CompileSchemaScripts.pl from: +-- 20210526-a_upd_release_event.sql +-- 20210606-mbs-11682.sql +\\set ON_ERROR_STOP 1 +BEGIN; +SET search_path = musicbrainz, public; +SET LOCAL statement_timeout = 0; +-------------------------------------------------------------------------------- +SELECT '20210526-a_upd_release_event.sql'; + + +CREATE OR REPLACE FUNCTION a_upd_release_event() +RETURNS TRIGGER AS $$ +BEGIN + IF ( + NEW.release != OLD.release OR + NEW.date_year IS DISTINCT FROM OLD.date_year OR + NEW.date_month IS DISTINCT FROM OLD.date_month OR + NEW.date_day IS DISTINCT FROM OLD.date_day + ) THEN + PERFORM set_release_first_release_date(OLD.release); + IF NEW.release != OLD.release THEN + PERFORM set_release_first_release_date(NEW.release); + END IF; + + PERFORM set_release_group_first_release_date(release_group) + FROM release + WHERE release.id IN (NEW.release, OLD.release); + + PERFORM set_releases_recordings_first_release_dates(ARRAY[NEW.release, OLD.release]); + END IF; + + IF TG_TABLE_NAME = 'release_country' THEN + IF NEW.country != OLD.country THEN + INSERT INTO artist_release_pending_update VALUES (OLD.release); + END IF; + END IF; + + RETURN NULL; +END; +$$ LANGUAGE 'plpgsql'; + +-------------------------------------------------------------------------------- +SELECT '20210606-mbs-11682.sql'; + + +CREATE OR REPLACE FUNCTION apply_artist_release_pending_updates() +RETURNS trigger AS $$ +DECLARE + release_ids INTEGER[]; + release_id INTEGER; +BEGIN + -- DO NOT modify any replicated tables in this function; it's used + -- by a trigger on slaves. + WITH pending AS ( + DELETE FROM artist_release_pending_update + RETURNING release + ) + SELECT array_agg(DISTINCT release) + INTO release_ids + FROM pending; + + IF coalesce(array_length(release_ids, 1), 0) > 0 THEN + -- If the user hasn't generated `artist_release`, then we + -- shouldn't update or insert to it. MBS determines whether to + -- use this table based on it being non-empty, so a partial + -- table would manifest as partial data on the website and + -- webservice. + PERFORM 1 FROM artist_release LIMIT 1; + IF FOUND THEN + DELETE FROM artist_release WHERE release = any(release_ids); + + FOREACH release_id IN ARRAY release_ids LOOP + -- We handle each release ID separately because the + -- `get_artist_release_rows` query can be planned much + -- more efficiently that way. + INSERT INTO artist_release + SELECT * FROM get_artist_release_rows(release_id); + END LOOP; + END IF; + END IF; + + RETURN NULL; +END; +$$ LANGUAGE 'plpgsql'; + +CREATE OR REPLACE FUNCTION apply_artist_release_group_pending_updates() +RETURNS trigger AS $$ +DECLARE + release_group_ids INTEGER[]; + release_group_id INTEGER; +BEGIN + -- DO NOT modify any replicated tables in this function; it's used + -- by a trigger on slaves. + WITH pending AS ( + DELETE FROM artist_release_group_pending_update + RETURNING release_group + ) + SELECT array_agg(DISTINCT release_group) + INTO release_group_ids + FROM pending; + + IF coalesce(array_length(release_group_ids, 1), 0) > 0 THEN + -- If the user hasn't generated `artist_release_group`, then we + -- shouldn't update or insert to it. MBS determines whether to + -- use this table based on it being non-empty, so a partial + -- table would manifest as partial data on the website and + -- webservice. + PERFORM 1 FROM artist_release_group LIMIT 1; + IF FOUND THEN + DELETE FROM artist_release_group WHERE release_group = any(release_group_ids); + + FOREACH release_group_id IN ARRAY release_group_ids LOOP + -- We handle each release group ID separately because + -- the `get_artist_release_group_rows` query can be + -- planned much more efficiently that way. + INSERT INTO artist_release_group + SELECT * FROM get_artist_release_group_rows(release_group_id); + END LOOP; + END IF; + END IF; + + RETURN NULL; +END; +$$ LANGUAGE 'plpgsql'; + +COMMIT; diff --git a/admin/sql/updates/schema-change/27.standalone.sql b/admin/sql/updates/schema-change/27.standalone.sql new file mode 100644 index 00000000000..b1ccf3aa091 --- /dev/null +++ b/admin/sql/updates/schema-change/27.standalone.sql @@ -0,0 +1,58 @@ +-- Generated by CompileSchemaScripts.pl from: +-- 20210702-mbs-11760.sql +-- 20210916-mbs-11896.sql +\\set ON_ERROR_STOP 1 +BEGIN; +SET search_path = musicbrainz, public; +SET LOCAL statement_timeout = 0; +-------------------------------------------------------------------------------- +SELECT '20210702-mbs-11760.sql'; + + +CREATE CONSTRAINT TRIGGER delete_unused_tag +AFTER DELETE ON event_tag DEFERRABLE INITIALLY DEFERRED +FOR EACH ROW EXECUTE PROCEDURE trg_delete_unused_tag_ref(); + +CREATE CONSTRAINT TRIGGER delete_unused_tag +AFTER DELETE ON place_tag DEFERRABLE INITIALLY DEFERRED +FOR EACH ROW EXECUTE PROCEDURE trg_delete_unused_tag_ref(); + +CREATE CONSTRAINT TRIGGER delete_unused_tag +AFTER DELETE ON recording_tag DEFERRABLE INITIALLY DEFERRED +FOR EACH ROW EXECUTE PROCEDURE trg_delete_unused_tag_ref(); + +CREATE CONSTRAINT TRIGGER delete_unused_tag +AFTER DELETE ON release_tag DEFERRABLE INITIALLY DEFERRED +FOR EACH ROW EXECUTE PROCEDURE trg_delete_unused_tag_ref(); + +-------------------------------------------------------------------------------- +SELECT '20210916-mbs-11896.sql'; + + +DROP TRIGGER IF EXISTS unique_primary_for_locale ON area_alias; +DROP TRIGGER IF EXISTS unique_primary_for_locale ON artist_alias; +DROP TRIGGER IF EXISTS unique_primary_for_locale ON event_alias; +DROP TRIGGER IF EXISTS unique_primary_for_locale ON genre_alias; +DROP TRIGGER IF EXISTS unique_primary_for_locale ON instrument_alias; +DROP TRIGGER IF EXISTS unique_primary_for_locale ON label_alias; +DROP TRIGGER IF EXISTS unique_primary_for_locale ON place_alias; +DROP TRIGGER IF EXISTS unique_primary_for_locale ON recording_alias; +DROP TRIGGER IF EXISTS unique_primary_for_locale ON release_alias; +DROP TRIGGER IF EXISTS unique_primary_for_locale ON release_group_alias; +DROP TRIGGER IF EXISTS unique_primary_for_locale ON series_alias; +DROP TRIGGER IF EXISTS unique_primary_for_locale ON work_alias; + +DROP FUNCTION IF EXISTS unique_primary_area_alias(); +DROP FUNCTION IF EXISTS unique_primary_artist_alias(); +DROP FUNCTION IF EXISTS unique_primary_event_alias(); +DROP FUNCTION IF EXISTS unique_primary_genre_alias(); +DROP FUNCTION IF EXISTS unique_primary_instrument_alias(); +DROP FUNCTION IF EXISTS unique_primary_label_alias(); +DROP FUNCTION IF EXISTS unique_primary_place_alias(); +DROP FUNCTION IF EXISTS unique_primary_recording_alias(); +DROP FUNCTION IF EXISTS unique_primary_release_alias(); +DROP FUNCTION IF EXISTS unique_primary_release_group_alias(); +DROP FUNCTION IF EXISTS unique_primary_series_alias(); +DROP FUNCTION IF EXISTS unique_primary_work_alias(); + +COMMIT; diff --git a/bin/delete-old-fullexports b/bin/delete-old-fullexports index 3c172241298..b8204a27f09 100755 --- a/bin/delete-old-fullexports +++ b/bin/delete-old-fullexports @@ -12,10 +12,10 @@ my $just_echo; use Getopt::Long; Getopt::Long::Configure(qw( no_ignore_case )); GetOptions( - "k" => \$show_kept, - "r" => \$show_removed, - "n" => \$dry_run, - "e" => \$just_echo, + 'k' => \$show_kept, + 'r' => \$show_removed, + 'n' => \$dry_run, + 'e' => \$just_echo, ) or exit 2; my $errors = 0; @@ -50,8 +50,8 @@ sub prune_dir print "Removing $fullexport/$dir\n" if $show_removed; next if $dry_run; - my @echo = ($just_echo ? ("echo") : ()); - system @echo, "/bin/rm", "-rf", "$fullexport/$dir"; + my @echo = ($just_echo ? ('echo') : ()); + system @echo, '/bin/rm', '-rf', "$fullexport/$dir"; unless ($? == 0) { diff --git a/bin/runexclusive b/bin/runexclusive index 2fd436981c9..b73b85f86dc 100755 --- a/bin/runexclusive +++ b/bin/runexclusive @@ -10,16 +10,16 @@ my $timeout; use Getopt::Long; GetOptions( - "lockfile|f=s" => \$lockfile, - "wait|w" => sub { $wait = 1 }, - "nowait|no-wait|n" => sub { $wait = 0 }, - "timeout|t=i" => \$timeout, + 'lockfile|f=s' => \$lockfile, + 'wait|w' => sub { $wait = 1 }, + 'nowait|no-wait|n' => sub { $wait = 0 }, + 'timeout|t=i' => \$timeout, ) or exit 2; defined($lockfile) or die "No lockfile defined\n"; use Fcntl qw( LOCK_EX LOCK_NB ); -open(my $fh, ">", $lockfile) or die $!; +open(my $fh, '>', $lockfile) or die $!; $SIG{ALRM} = sub {}; alarm($timeout) if $timeout; diff --git a/lib/DBDefs.pm.sample b/lib/DBDefs.pm.sample index 30542d29da9..d30f87aec20 100644 --- a/lib/DBDefs.pm.sample +++ b/lib/DBDefs.pm.sample @@ -39,7 +39,7 @@ use MusicBrainz::Server::DatabaseConnectionFactory; # The server root, i.e. the parent directory of admin, bin, lib, root, etc. # By default, this uses the path of lib/DBDefs/Default.pm, minus '/lib/DBDefs/Default.pm' -# sub MB_SERVER_ROOT { "/home/httpd/musicbrainz/musicbrainz-server" } +# sub MB_SERVER_ROOT { '/home/httpd/musicbrainz/musicbrainz-server' } # Where static files are located # sub STATIC_FILES_DIR { my $self= shift; $self->MB_SERVER_ROOT . '/root/static' } @@ -51,19 +51,19 @@ use MusicBrainz::Server::DatabaseConnectionFactory; MusicBrainz::Server::DatabaseConnectionFactory->register_databases( # How to connect when we need read-write access to the database READWRITE => { - database => "musicbrainz_db", - username => "musicbrainz", - password => "musicbrainz", -# host => "", -# port => "", + database => 'musicbrainz_db', + username => 'musicbrainz', + password => 'musicbrainz', +# host => '', +# port => '', }, # How to connect to a test database TEST => { - database => "musicbrainz_test", - username => "musicbrainz", - password => "musicbrainz", -# host => "", -# port => "", + database => 'musicbrainz_test', + username => 'musicbrainz', + password => 'musicbrainz', +# host => '', +# port => '', }, # How to connect to a Selenium test database. This database is created # (and dropped) automatically by t/selenium.js, and uses the TEST @@ -72,42 +72,42 @@ MusicBrainz::Server::DatabaseConnectionFactory->register_databases( database => 'musicbrainz_selenium', schema => 'musicbrainz', username => 'musicbrainz', -# host => "", -# port => "", +# host => '', +# port => '', }, # How to connect for read-only access. See "REPLICATION_TYPE" (below) READONLY => { - database => "musicbrainz_db", - username => "musicbrainz", - password => "musicbrainz", -# host => "", -# port => "", + database => 'musicbrainz_db', + username => 'musicbrainz', + password => 'musicbrainz', +# host => '', +# port => '', }, # How to connect for administrative access SYSTEM => { - database => "template1", - username => "postgres", -# password => "", -# host => "", -# port => "", + database => 'template1', + username => 'postgres', +# password => '', +# host => '', +# port => '', }, # How to connect when running maintenance scripts located under admin/. # This defaults to READWRITE if left undefined, but should be configured if # READWRITE points to a connection pooler that doesn't support session-based features. # MAINTENANCE => { -# database => "musicbrainz_db", -# username => "musicbrainz", -# password => "musicbrainz", -# host => "", -# port => "5432", +# database => 'musicbrainz_db', +# username => 'musicbrainz', +# password => 'musicbrainz', +# host => '', +# port => '5432', # }, # How to connect when running development scripts that query the production database. # PROD_STANDBY => { -# database => "musicbrainz_db", -# username => "musicbrainz_ro", -# password => "", -# host => "", -# port => "5432", +# database => 'musicbrainz_db', +# username => 'musicbrainz_ro', +# password => '', +# host => '', +# port => '5432', # }, ); @@ -137,25 +137,25 @@ sub DB_SCHEMA_SEQUENCE { 26 } # the replication packets. Enter the access token below: # NOTE: DO NOT EXPOSE THIS ACCESS TOKEN PUBLICLY! # -# sub REPLICATION_ACCESS_TOKEN { "" } +# sub REPLICATION_ACCESS_TOKEN { '' } ################################################################################ # GPG Signature ################################################################################ # Location of the public key file -# sub GPG_PUB_KEY { "" } +# sub GPG_PUB_KEY { '' } # Define how validation deals with the missing signature file: # FAIL - validation fails if signature file is missing # PASS - validation passes if signature file is missing -# sub GPG_MISSING_SIGNATURE_MODE { "PASS" } +# sub GPG_MISSING_SIGNATURE_MODE { 'PASS' } # Key identifiers (compatible with --recipient in GPG) for # signatures and encryption of data dumps and packets. Should # only be required on the master server. -# sub GPG_SIGN_KEY { "" } -# sub GPG_ENCRYPT_KEY { "" } +# sub GPG_SIGN_KEY { '' } +# sub GPG_ENCRYPT_KEY { '' } ################################################################################ # HTTP Server Names @@ -166,11 +166,11 @@ sub DB_SCHEMA_SEQUENCE { 26 } # Additionally you should set the environment variable # MUSICBRAINZ_USE_PROXY=1 when using a reverse proxy to make the server # aware of it when generating things like the canonical url in catalyst. -sub WEB_SERVER { "www.musicbrainz.example.com" } +sub WEB_SERVER { 'www.musicbrainz.example.com' } # Relevant only if SSL redirects are enabled -# sub WEB_SERVER_SSL { "localhost" } -# sub SEARCH_SERVER { "search.musicbrainz.org" } -# sub SEARCH_ENGINE { "SOLR" } +# sub WEB_SERVER_SSL { 'localhost' } +# sub SEARCH_SERVER { 'search.musicbrainz.org' } +# sub SEARCH_ENGINE { 'SOLR' } # Used, for example, to have emails sent from the beta server list the # main server # sub WEB_SERVER_USED_IN_EMAIL { my $self = shift; $self->WEB_SERVER } @@ -184,7 +184,7 @@ sub WEB_SERVER { "www.musicbrainz.example.com" } # Mail Settings ################################################################################ -# sub SMTP_SERVER { "localhost" } +# sub SMTP_SERVER { 'localhost' } # This value should be set to some secret value for your server. Any old # string of stuff should do; something suitably long and random, like for @@ -192,7 +192,7 @@ sub WEB_SERVER { "www.musicbrainz.example.com" } # value (the empty string). This is so an attacker can't just look in CVS and # see the default secret value, and then use it to attack your server. -# sub SMTP_SECRET_CHECKSUM { "" } +# sub SMTP_SECRET_CHECKSUM { '' } # sub EMAIL_VERIFICATION_TIMEOUT { 604800 } # one week ################################################################################ @@ -231,12 +231,12 @@ sub WEB_SERVER { "www.musicbrainz.example.com" } ################################################################################ # Documentation Server Settings ################################################################################ -# sub WIKITRANS_SERVER { "wiki.musicbrainz.org" } +# sub WIKITRANS_SERVER { 'wiki.musicbrainz.org' } # The path to MediaWiki's api.php file. This is required to automatically # determine which documentation pages need to be updated in the # transclusion table. -# sub WIKITRANS_SERVER_API { "wiki.musicbrainz.org/api.php" } +# sub WIKITRANS_SERVER_API { 'wiki.musicbrainz.org/api.php' } # To enable documentation search on your server, create your own Google Custom # Search engine and enter its ID as the value of GOOGLE_CUSTOM_SEARCH. @@ -307,7 +307,7 @@ sub WEB_SERVER { "www.musicbrainz.example.com" } # The session store holds user login sessions. Session::Store::MusicBrainz # uses DATASTORE_REDIS_ARGS to connect to and store sessions in Redis. -# sub SESSION_STORE { "Session::Store::MusicBrainz" } +# sub SESSION_STORE { 'Session::Store::MusicBrainz' } # sub SESSION_STORE_ARGS { return {} } # sub SESSION_EXPIRE { return 36000; } # 10 hours @@ -337,7 +337,7 @@ sub WEB_SERVER { "www.musicbrainz.example.com" } # sub WEB_SESSION_SECONDS_TO_LIVE { 3600 * 3 } # The cookie name to use -# sub SESSION_COOKIE { "AF_SID" } +# sub SESSION_COOKIE { 'AF_SID' } # The domain into which the session cookie is written # sub SESSION_DOMAIN { undef } @@ -391,8 +391,8 @@ sub WEB_SERVER { "www.musicbrainz.example.com" } # internet archive private/public keys (for coverartarchive.org). # sub COVER_ART_ARCHIVE_ACCESS_KEY { }; # sub COVER_ART_ARCHIVE_SECRET_KEY { }; -# sub COVER_ART_ARCHIVE_UPLOAD_PREFIXER { shift; sprintf("//%s.s3.us.archive.org/", shift) }; -# sub COVER_ART_ARCHIVE_DOWNLOAD_PREFIX { "//coverartarchive.org" }; +# sub COVER_ART_ARCHIVE_UPLOAD_PREFIXER { shift; sprintf('//%s.s3.us.archive.org/', shift) }; +# sub COVER_ART_ARCHIVE_DOWNLOAD_PREFIX { '//coverartarchive.org' }; # Mapbox access token must be set to display area/place maps. # sub MAPBOX_MAP_ID { 'mapbox/streets-v11' } diff --git a/lib/DBDefs/Default.pm b/lib/DBDefs/Default.pm index 08d7c282a8b..ddbf4d7c54f 100644 --- a/lib/DBDefs/Default.pm +++ b/lib/DBDefs/Default.pm @@ -70,25 +70,25 @@ sub REPLICATION_TYPE { RT_STANDALONE } # the replication packets. Enter the access token below: # NOTE: DO NOT EXPOSE THIS ACCESS TOKEN PUBLICLY! # -sub REPLICATION_ACCESS_TOKEN { "" } +sub REPLICATION_ACCESS_TOKEN { '' } ################################################################################ # GPG Signature ################################################################################ # Location of the public key file to use for verifying packets. -sub GPG_PUB_KEY { "" } +sub GPG_PUB_KEY { '' } # Define how validation deals with the missing signature file: # FAIL - validation fails if signature file is missing # PASS - validation passes if signature file is missing -sub GPG_MISSING_SIGNATURE_MODE { "PASS" } +sub GPG_MISSING_SIGNATURE_MODE { 'PASS' } # Key identifiers (compatible with --recipient in GPG) for # signatures and encryption of data dumps and packets. Should # only be required on the master server. -sub GPG_SIGN_KEY { "" } -sub GPG_ENCRYPT_KEY { "" } +sub GPG_SIGN_KEY { '' } +sub GPG_ENCRYPT_KEY { '' } ################################################################################ # HTTP Server Names @@ -99,11 +99,11 @@ sub GPG_ENCRYPT_KEY { "" } # Additionally you should set the environment variable # MUSICBRAINZ_USE_PROXY=1 when using a reverse proxy to make the server # aware of it when generating things like the canonical url in catalyst. -sub WEB_SERVER { "localhost:5000" } +sub WEB_SERVER { 'localhost:5000' } # Relevant only if SSL redirects are enabled -sub WEB_SERVER_SSL { "localhost" } -sub SEARCH_SERVER { "search.musicbrainz.org" } -sub SEARCH_ENGINE { "SOLR" } +sub WEB_SERVER_SSL { 'localhost' } +sub SEARCH_SERVER { 'search.musicbrainz.org' } +sub SEARCH_ENGINE { 'SOLR' } # Whether to use x-accel-redirect for webservice searches, # using /internal/search as the internal redirect sub SEARCH_X_ACCEL_REDIRECT { 0 } @@ -117,13 +117,13 @@ sub IS_BETA { 0 } sub BETA_REDIRECT_HOSTNAME { '' } # The base URI to use for JSON-LD (RDF) identifiers. Includes scheme. -sub JSON_LD_ID_BASE_URI { "http://musicbrainz.org" } +sub JSON_LD_ID_BASE_URI { 'http://musicbrainz.org' } # The server to use for rel="canonical" links. Includes scheme. -sub CANONICAL_SERVER { "https://musicbrainz.org" } +sub CANONICAL_SERVER { 'https://musicbrainz.org' } # The server used to link to CritiqueBrainz users and reviews. -sub CRITIQUEBRAINZ_SERVER { "https://critiquebrainz.org" } +sub CRITIQUEBRAINZ_SERVER { 'https://critiquebrainz.org' } # The URL where static resources are located, excluding the trailing slash. sub STATIC_RESOURCES_LOCATION { '//' . shift->WEB_SERVER . '/static/build' } @@ -132,7 +132,7 @@ sub STATIC_RESOURCES_LOCATION { '//' . shift->WEB_SERVER . '/static/build' } # Mail Settings ################################################################################ -sub SMTP_SERVER { "localhost" } +sub SMTP_SERVER { 'localhost' } # This value should be set to some secret value for your server. Any old # string of stuff should do; something suitably long and random, like for @@ -140,7 +140,7 @@ sub SMTP_SERVER { "localhost" } # value (the empty string). This is so an attacker can't just look in CVS and # see the default secret value, and then use it to attack your server. -sub SMTP_SECRET_CHECKSUM { "" } +sub SMTP_SECRET_CHECKSUM { '' } sub EMAIL_VERIFICATION_TIMEOUT { 604800 } # one week ################################################################################ @@ -188,12 +188,12 @@ sub LWP_USER_AGENT { ################################################################################ # Documentation Server Settings ################################################################################ -sub WIKITRANS_SERVER { "wiki.musicbrainz.org" } +sub WIKITRANS_SERVER { 'wiki.musicbrainz.org' } # The path to MediaWiki's api.php file. This is required to automatically # determine which documentation pages need to be updated in the # transclusion table. -sub WIKITRANS_SERVER_API { "wiki.musicbrainz.org/api.php" } +sub WIKITRANS_SERVER_API { 'wiki.musicbrainz.org/api.php' } # To enable documentation search on your server, create your own Google Custom # Search engine and enter its ID as the value of GOOGLE_CUSTOM_SEARCH. @@ -264,7 +264,7 @@ sub ENTITY_CACHE_TTL { # The session store holds user login sessions. Session::Store::MusicBrainz # uses DATASTORE_REDIS_ARGS to connect to and store sessions in Redis. -sub SESSION_STORE { "Session::Store::MusicBrainz" } +sub SESSION_STORE { 'Session::Store::MusicBrainz' } sub SESSION_STORE_ARGS { return {} } sub SESSION_EXPIRE { return 36000; } # 10 hours @@ -294,7 +294,7 @@ sub DATASTORE_REDIS_ARGS { sub WEB_SESSION_SECONDS_TO_LIVE { 3600 * 3 } # The cookie name to use -sub SESSION_COOKIE { "AF_SID" } +sub SESSION_COOKIE { 'AF_SID' } # The domain into which the session cookie is written sub SESSION_DOMAIN { undef } @@ -365,8 +365,8 @@ sub RECAPTCHA_PRIVATE_KEY { return undef } # internet archive private/public keys (for coverartarchive.org). sub COVER_ART_ARCHIVE_ACCESS_KEY { }; sub COVER_ART_ARCHIVE_SECRET_KEY { }; -sub COVER_ART_ARCHIVE_UPLOAD_PREFIXER { shift; sprintf("//%s.s3.us.archive.org/", shift) }; -sub COVER_ART_ARCHIVE_DOWNLOAD_PREFIX { "//coverartarchive.org" }; +sub COVER_ART_ARCHIVE_UPLOAD_PREFIXER { shift; sprintf('//%s.s3.us.archive.org/', shift) }; +sub COVER_ART_ARCHIVE_DOWNLOAD_PREFIX { '//coverartarchive.org' }; sub COVER_ART_ARCHIVE_IA_DOWNLOAD_PREFIX { '//archive.org/download' }; sub COVER_ART_ARCHIVE_IA_METADATA_PREFIX { 'https://archive.org/metadata' }; diff --git a/lib/MusicBrainz/Script/EntityDump.pm b/lib/MusicBrainz/Script/EntityDump.pm index 9a0e0d16eca..67cb4ed37ab 100644 --- a/lib/MusicBrainz/Script/EntityDump.pm +++ b/lib/MusicBrainz/Script/EntityDump.pm @@ -174,7 +174,7 @@ sub collections { # Need a custom query here to exclude private collections. my $collection_rows = $c->sql->select_list_of_hashes( - "SELECT * FROM editor_collection WHERE id = any(?) and public = 't' ORDER BY id", + q{SELECT * FROM editor_collection WHERE id = any(?) and public = 't' ORDER BY id}, pluck('collection', $entity_collection_rows), ); @@ -208,7 +208,7 @@ sub relationships { if (defined $relationships_cardinality) { $joins .= "JOIN link ON link.id = $table.link\n"; - $joins .= "JOIN link_type ON link_type.id = link.link_type"; + $joins .= 'JOIN link_type ON link_type.id = link.link_type'; $conditions .= "\n"; $conditions .= "AND link_type.${column}_cardinality = ?"; push @values, $relationships_cardinality; diff --git a/lib/MusicBrainz/Script/FixLinkDuplicates.pm b/lib/MusicBrainz/Script/FixLinkDuplicates.pm index aed459827b5..7254204016e 100644 --- a/lib/MusicBrainz/Script/FixLinkDuplicates.pm +++ b/lib/MusicBrainz/Script/FixLinkDuplicates.pm @@ -69,7 +69,7 @@ sub remove_duplicates my $count = 0; printf "%s : Replace links %s with %s\n", - scalar localtime, join(", ", @remove_ids), $keep_id if $self->verbose; + scalar localtime, join(', ', @remove_ids), $keep_id if $self->verbose; my $rows = $self->c->sql->select_list_of_hashes( 'SELECT entity_type0, entity_type1 @@ -86,13 +86,13 @@ sub remove_duplicates $count += $self->remove_one_duplicate($table, $keep_id, $remove_id); } - my $query = "DELETE FROM link_attribute WHERE link IN (" . placeholders (@remove_ids) . ")"; + my $query = 'DELETE FROM link_attribute WHERE link IN (' . placeholders (@remove_ids) . ')'; $count += $self->sql_do($query, @remove_ids); - $query = "DELETE FROM link_attribute_credit WHERE link IN (" . placeholders (@remove_ids) . ")"; + $query = 'DELETE FROM link_attribute_credit WHERE link IN (' . placeholders (@remove_ids) . ')'; $count += $self->sql_do($query, @remove_ids); - $query = "DELETE FROM link WHERE id IN (" . placeholders (@remove_ids) . ")"; + $query = 'DELETE FROM link WHERE id IN (' . placeholders (@remove_ids) . ')'; $count += $self->sql_do($query, @remove_ids); return $count; } @@ -112,7 +112,7 @@ sub run { # and where the actual attributes are the same, including credits # (not that, at time of this writing, credits are fully implemented) # And when we do, we should keep the oldest one (i.e., earliest 'created' date) - my $query = " + my $query = ' SELECT array_agg(id ORDER BY created ASC) FROM (SELECT link.*,array_agg((attribute_type, credited_as) ORDER BY attribute_type) AS attributes FROM link @@ -122,7 +122,7 @@ sub run { GROUP BY link_type, attribute_count, ended, attributes, begin_date_year, begin_date_month, begin_date_day, end_date_year, end_date_month, end_date_day - HAVING count(id) > 1"; + HAVING count(id) > 1'; my $rows = $self->c->sql->select_single_column_array($query); @@ -131,7 +131,7 @@ sub run { for my $link (@$rows) { if ($self->limit > 0 && $count >= $self->limit) { - print localtime() . " : Removed limit of " . $self->limit . ", stopping until next invocation\n"; + print localtime() . ' : Removed limit of ' . $self->limit . ", stopping until next invocation\n"; last; } my ($keep, @drop) = @$link; @@ -145,17 +145,17 @@ sub run { if ($self->summary) { printf "%s : Found %d duplicated link%s.\n", scalar localtime, - scalar @$rows, ((scalar @$rows)==1 ? "" : "s"); + scalar @$rows, ((scalar @$rows)==1 ? '' : 's'); printf "%s : Processed %d link%s.\n", scalar localtime, - $count, ($count==1 ? "" : "s"); + $count, ($count==1 ? '' : 's'); printf "%s : Successfully removed %d duplicate%s.\n", scalar localtime, - $removed, ($removed==1 ? "" : "s") + $removed, ($removed==1 ? '' : 's') if !$self->dry_run; printf "%s : Touched %d row%s total.\n", scalar localtime, - $total_row_changes, ($total_row_changes==1 ? "" : "s") + $total_row_changes, ($total_row_changes==1 ? '' : 's') if !$self->dry_run; } diff --git a/lib/MusicBrainz/Script/MBDump.pm b/lib/MusicBrainz/Script/MBDump.pm index 2b5df6c7743..fafa5ff08bf 100644 --- a/lib/MusicBrainz/Script/MBDump.pm +++ b/lib/MusicBrainz/Script/MBDump.pm @@ -101,7 +101,7 @@ sub begin_dump { my $schema_sequence = $replication_control->{current_schema_sequence}; my $dbdefs_schema_sequence = DBDefs->DB_SCHEMA_SEQUENCE; $schema_sequence - or die "Don't know what schema sequence number we're using"; + or die q(Don't know what schema sequence number we're using); $schema_sequence == $dbdefs_schema_sequence or die "Stored schema sequence ($schema_sequence) does not match " . "DBDefs->DB_SCHEMA_SEQUENCE ($dbdefs_schema_sequence)"; diff --git a/lib/MusicBrainz/Script/RebuildCoverArt.pm b/lib/MusicBrainz/Script/RebuildCoverArt.pm index 0498042bd62..aba94e11f0c 100644 --- a/lib/MusicBrainz/Script/RebuildCoverArt.pm +++ b/lib/MusicBrainz/Script/RebuildCoverArt.pm @@ -42,11 +42,11 @@ sub run { my $self = shift; - die "Can't work on a read-only database (DB_READ_ONLY is set)" + die q{Can't work on a read-only database (DB_READ_ONLY is set)} if DBDefs->DB_READ_ONLY; printf STDERR "You do not have both AWS_PUBLIC and AWS_PRIVATE defined in DBDefs.\n" . - "You will not be able to find artwork from Amazon until these are set." + 'You will not be able to find artwork from Amazon until these are set.' unless (DBDefs->AWS_PUBLIC && DBDefs->AWS_PRIVATE); $self->ensure_release_cover_art; @@ -77,11 +77,11 @@ sub run $self->sql->commit; if ($art) { - log_debug { sprintf "Cover art for %d is %s", $release->id, $art->image_uri }; + log_debug { sprintf 'Cover art for %d is %s', $release->id, $art->image_uri }; $updated++; } else { - log_warning { sprintf "Could not find cover art for %d", $release->id }; + log_warning { sprintf 'Could not find cover art for %d', $release->id }; } $seen{$release->id} = 1; @@ -92,16 +92,16 @@ sub run $self->sql->finish; log_notice { - sprintf "Examined %d (%.2f%%) cover art rows, last updated between %s and %s. ". - "Updated %d releases.", + sprintf 'Examined %d (%.2f%%) cover art rows, last updated between %s and %s. '. + 'Updated %d releases.', $seen, ($seen / $total) * 100, - ($first // "(never updated)"), ($last // "(never updated)"), + ($first // '(never updated)'), ($last // '(never updated)'), $updated }; log_notice { - sprintf "A complete pass of all %d releases will take up to approximately %.2f days.", + sprintf 'A complete pass of all %d releases will take up to approximately %.2f days.', $total, (((($total * 2) / 60) / 60) / 24) }; diff --git a/lib/MusicBrainz/Script/RemoveBarcodeCoverArt.pm b/lib/MusicBrainz/Script/RemoveBarcodeCoverArt.pm index 74ffa137113..750c3ed5cdb 100644 --- a/lib/MusicBrainz/Script/RemoveBarcodeCoverArt.pm +++ b/lib/MusicBrainz/Script/RemoveBarcodeCoverArt.pm @@ -19,7 +19,7 @@ sub find_releases # Find all releases that have a cover art URL but no URL relationship # that would explain it. - my $query = " + my $query = q{ SELECT r_id FROM ( SELECT @@ -34,7 +34,7 @@ sub find_releases GROUP BY release.id ) s WHERE NOT (url_link_types && ?); - "; + }; $self->c->model('Release')->query_to_list($query, [\@url_types], sub { my ($model, $row) = @_; @@ -71,7 +71,7 @@ sub run $self->c->model('CoverArt')->cache_cover_art($release); $self->sql->commit; - log_debug { sprintf "Cover art removed for %d", $release->id }; + log_debug { sprintf 'Cover art removed for %d', $release->id }; $removed++; $seen{$release->id} = 1; @@ -82,7 +82,7 @@ sub run $self->sql->finish; log_notice { - sprintf "Examined %d (%.2f%%) releases, removed %d cover art urls.", + sprintf 'Examined %d (%.2f%%) releases, removed %d cover art urls.', $seen, $total != 0 ? ($seen / $total) * 100 : 100, $removed diff --git a/lib/MusicBrainz/Script/RemoveEmpty.pm b/lib/MusicBrainz/Script/RemoveEmpty.pm index 08ada7aa4e7..205b5a9f27d 100644 --- a/lib/MusicBrainz/Script/RemoveEmpty.pm +++ b/lib/MusicBrainz/Script/RemoveEmpty.pm @@ -156,10 +156,10 @@ sub run { if ($self->summary) { printf "%s : Found %d unused $entity%s.\n", scalar localtime, - $count, ($count==1 ? "" : "s"); + $count, ($count==1 ? '' : 's'); printf "%s : Successfully removed %d $entity%s\n", scalar localtime, - $removed, ($removed==1 ? "" : "s") + $removed, ($removed==1 ? '' : 's') if !$self->dry_run; } } diff --git a/lib/MusicBrainz/Script/RemoveExpiredSessions.pm b/lib/MusicBrainz/Script/RemoveExpiredSessions.pm index f63f2eeb9aa..9af89eb56b8 100644 --- a/lib/MusicBrainz/Script/RemoveExpiredSessions.pm +++ b/lib/MusicBrainz/Script/RemoveExpiredSessions.pm @@ -53,7 +53,7 @@ sub run { my $now = time + 5; # five seconds grace period for server differences printf qq(Fetching entries from database; prefix used is "%s".\n), $store->_namespace if $self->verbose; - my @keys = $r->_connection->keys($store->_namespace . "expires:*"); + my @keys = $r->_connection->keys($store->_namespace . 'expires:*'); # KEYS is very heavy, but our current Redis doesn't have SCAN my $considered = scalar @keys; if ($considered == 0) { diff --git a/lib/MusicBrainz/Script/Role/IncrementalDump.pm b/lib/MusicBrainz/Script/Role/IncrementalDump.pm index 7d676b897af..1b828cad276 100644 --- a/lib/MusicBrainz/Script/Role/IncrementalDump.pm +++ b/lib/MusicBrainz/Script/Role/IncrementalDump.pm @@ -450,7 +450,7 @@ sub run_incremental_dump { if (defined $last_processed_seq) { if ($current_seq == $last_processed_seq) { - log("Up-to-date."); + log('Up-to-date.'); last; } } else { @@ -476,12 +476,12 @@ sub run_incremental_dump { if (($current_seq - $last_processed_seq) > 2) { log("ERROR: Table $dump_schema.tmp_checked_entities " . - "is not empty, and the script is more than two " . - "replication packets behind. You should check " . - "that a previous run of the script didn't " . - "unexpectedly die; this script will not run again " . + 'is not empty, and the script is more than two ' . + 'replication packets behind. You should check ' . + q(that a previous run of the script didn't ) . + 'unexpectedly die; this script will not run again ' . "until $dump_schema.tmp_checked_entities is " . - "cleared."); + 'cleared.'); exit 1; } exit 0; diff --git a/lib/MusicBrainz/Server.pm b/lib/MusicBrainz/Server.pm index 886dae6fb78..f7d3e430933 100644 --- a/lib/MusicBrainz/Server.pm +++ b/lib/MusicBrainz/Server.pm @@ -56,7 +56,7 @@ __PACKAGE__->config( name => 'MusicBrainz::Server', default_view => 'Default', encoding => 'UTF-8', - "View::Default" => { + 'View::Default' => { expose_methods => [qw( boolean_to_json comma_list @@ -154,12 +154,12 @@ __PACKAGE__->config->{form} = { }; if ($ENV{'MUSICBRAINZ_RUNNING_TESTS'}) { - push @args, "Session::Store::Dummy"; + push @args, 'Session::Store::Dummy'; # /static is usually taken care of by Plack or nginx, but not when running # as part of Test::WWW::Selenium::Catalyst, so we need Static::Simple when # running tests. - push @args, "Static::Simple"; + push @args, 'Static::Simple'; __PACKAGE__->config->{'Plugin::Static::Simple'} = { mime_types => { json => 'application/json; charset=UTF-8', @@ -177,7 +177,7 @@ if (DBDefs->STAT_TTL) { } if (DBDefs->CATALYST_DEBUG) { - push @args, "-Debug"; + push @args, '-Debug'; } if (DBDefs->SESSION_COOKIE) { @@ -191,7 +191,7 @@ if (DBDefs->SESSION_DOMAIN) { __PACKAGE__->config->{session}{cookie_expires} = DBDefs->WEB_SESSION_SECONDS_TO_LIVE; if (DBDefs->USE_ETAGS) { - push @args, "Cache::HTTP"; + push @args, 'Cache::HTTP'; } if ($ENV{'MUSICBRAINZ_USE_TEST_DATABASE'}) @@ -399,7 +399,7 @@ around dispatch => sub { local $SIG{__WARN__} = sub { my $warning = shift; chomp $warning; - $c->log->warn($c->req->method . " " . $c->req->uri . " caused a warning: " . $warning); + $c->log->warn($c->req->method . ' ' . $c->req->uri . ' caused a warning: ' . $warning); }; $c->$orig(@args); @@ -692,8 +692,12 @@ sub set_csp_headers { push @csp_script_src, qw( https://www.google.com/recaptcha/ https://www.gstatic.com/recaptcha/ + https://www.recaptcha.net/recaptcha/ + ); + push @csp_frame_src, qw( + https://www.google.com/recaptcha/ + https://www.recaptcha.net/recaptcha/ ); - push @csp_frame_src, 'https://www.google.com/recaptcha/'; } } diff --git a/lib/MusicBrainz/Server/Constants.pm b/lib/MusicBrainz/Server/Constants.pm index 955b9c95ad1..1298c725563 100644 --- a/lib/MusicBrainz/Server/Constants.pm +++ b/lib/MusicBrainz/Server/Constants.pm @@ -969,7 +969,7 @@ Readonly our $EDITOR_SANITISED_COLUMNS => join(', ', 'editor.id', 'editor.name', '0 AS privs', - "'' AS email", + q('' AS email), 'NULL AS website', 'NULL AS bio', 'editor.member_since', @@ -979,8 +979,8 @@ Readonly our $EDITOR_SANITISED_COLUMNS => join(', ', 'NULL AS birth_date', 'NULL AS gender', 'NULL as area', - "'{CLEARTEXT}mb' AS password", - "md5(editor.name || ':musicbrainz.org:mb') AS ha1", + q('{CLEARTEXT}mb' AS password), + q{md5(editor.name || ':musicbrainz.org:mb') AS ha1}, 'editor.deleted', ); diff --git a/lib/MusicBrainz/Server/Context.pm b/lib/MusicBrainz/Server/Context.pm index 14ca1c8f8ee..b28dc9213ea 100644 --- a/lib/MusicBrainz/Server/Context.pm +++ b/lib/MusicBrainz/Server/Context.pm @@ -102,7 +102,7 @@ sub model my $model = $self->models->{$name}; if (!$model) { my $class_name = $self->data_prefix . "::$name"; - if ($name eq "Email") { + if ($name eq 'Email') { $class_name =~ s/Data::Email/Email/; } load_class($class_name); diff --git a/lib/MusicBrainz/Server/Controller.pm b/lib/MusicBrainz/Server/Controller.pm index 0363d30b4ca..94d892ed158 100644 --- a/lib/MusicBrainz/Server/Controller.pm +++ b/lib/MusicBrainz/Server/Controller.pm @@ -30,7 +30,7 @@ sub not_found : Private sub invalid_mbid { my ($self, $c, $id) = @_; - $c->stash( message => l("'{id}' is not a valid MusicBrainz ID", { id => $id }) ); + $c->stash( message => l(q('{id}' is not a valid MusicBrainz ID), { id => $id }) ); $c->detach('/error_400'); } @@ -104,7 +104,7 @@ sub _insert_edit { num_open_edits => $c->stash->{num_open_edits} ); my $first_edit_id = $c->stash->{edit_ids}->[0]; my @edit_ids = @{$c->stash->{edit_ids}}; - $args{edit_ids} = "#" . join(", #", @edit_ids[0.. ($#edit_ids > 2 ? 2 : $#edit_ids)]) . ($#edit_ids>2?", ...":""); + $args{edit_ids} = '#' . join(', #', @edit_ids[0.. ($#edit_ids > 2 ? 2 : $#edit_ids)]) . ($#edit_ids>2?', ...':''); $args{edit_url} = (($args{num_edits} == 1) ? $c->uri_for_action('/edit/show', [ $first_edit_id ]) @@ -231,7 +231,7 @@ sub _load_paged my ($self, $c, $loader, %opts) = @_; my $prefix = $opts{prefix} || ''; - my $page = $c->request->query_params->{$prefix . "page"}; + my $page = $c->request->query_params->{$prefix . 'page'}; $page = 1 unless is_positive_integer($page); my $LIMIT = $opts{limit} || $self->{paging_limit}; @@ -250,7 +250,7 @@ sub _load_paged $pager->total_entries($total || 0); $pager->current_page($page); - $c->stash( $prefix . "pager" => $pager, + $c->stash( $prefix . 'pager' => $pager, edit_count_limit => $LIMIT_FOR_EDIT_LISTING ); return $data; } diff --git a/lib/MusicBrainz/Server/Controller/Account.pm b/lib/MusicBrainz/Server/Controller/Account.pm index 23dc72b7148..cc999d26001 100644 --- a/lib/MusicBrainz/Server/Controller/Account.pm +++ b/lib/MusicBrainz/Server/Controller/Account.pm @@ -605,7 +605,7 @@ sub register : Path('/register') ForbiddenOnSlaves RequireSSL DenyWhenReadonly S } } - my $captcha_html = ""; + my $captcha_html = ''; $captcha_html = $captcha->get_html_v2(DBDefs->RECAPTCHA_PUBLIC_KEY) if $use_captcha; @@ -660,7 +660,7 @@ sub _send_confirmation_email email => $email, ip => $c->req->address, editor => $editor - ); + ); } else { $c->model('Email')->send_email_verification( email => $email, @@ -703,7 +703,7 @@ sub donation : Local RequireAuth HiddenOnSlaves current_view => 'Node', component_path => 'account/Donation', component_props => { - days => sprintf("%.0f", $result->{days}), + days => sprintf('%.0f', $result->{days}), nag => boolean_to_json($nag), } ); @@ -726,7 +726,7 @@ sub applications : Path('/account/applications') RequireAuth RequireSSL $c->stash( current_view => 'Node', - component_path => 'account/applications/Index.js', + component_path => 'account/applications/Index', component_props => { applications => to_json_array($applications), appsPager => serialize_pager($c->stash->{apps_pager}), diff --git a/lib/MusicBrainz/Server/Controller/Admin/Attributes.pm b/lib/MusicBrainz/Server/Controller/Admin/Attributes.pm index d683a4186d3..28972040828 100644 --- a/lib/MusicBrainz/Server/Controller/Admin/Attributes.pm +++ b/lib/MusicBrainz/Server/Controller/Admin/Attributes.pm @@ -4,7 +4,7 @@ use MusicBrainz::Server::Entity::Util::JSON qw( to_json_array ); use MusicBrainz::Server::Translation qw( l ln ); -no if $] >= 5.018, warnings => "experimental::smartmatch"; +no if $] >= 5.018, warnings => 'experimental::smartmatch'; BEGIN { extends 'MusicBrainz::Server::Controller' }; @@ -36,7 +36,7 @@ sub index : Path('/admin/attributes') Args(0) RequireAuth(account_admin) { $c->stash( current_view => 'Node', - component_path => 'admin/attributes/Index.js', + component_path => 'admin/attributes/Index', component_props => {models => \@models} ); } @@ -55,10 +55,10 @@ sub attribute_index : Chained('attribute_base') PathPart('') RequireAuth(account my @attr = $c->model($model)->get_all(); my %component_paths = ( - Language => "admin/attributes/Language.js", - Script => "admin/attributes/Script.js" + Language => 'admin/attributes/Language', + Script => 'admin/attributes/Script' ); - my $component_path = $component_paths{$model} // "admin/attributes/Attribute.js"; + my $component_path = $component_paths{$model} // 'admin/attributes/Attribute'; $c->stash( current_view => 'Node', @@ -75,10 +75,10 @@ sub create : Chained('attribute_base') RequireAuth(account_admin) SecureForm { my $model = $c->stash->{model}; my %forms = ( - Language => "Admin::Attributes::Language", - Script => "Admin::Attributes::Script" + Language => 'Admin::Attributes::Language', + Script => 'Admin::Attributes::Script' ); - my $form_name = $forms{$model} // "Admin::Attributes"; + my $form_name = $forms{$model} // 'Admin::Attributes'; my $form = $c->form( form => $form_name ); if ($c->form_posted_and_valid($form)) { @@ -97,10 +97,10 @@ sub edit : Chained('attribute_base') Args(1) RequireAuth(account_admin) SecureFo my $attr = $c->model($model)->get_by_id($id); my %forms = ( - Language => "Admin::Attributes::Language", - Script => "Admin::Attributes::Script" + Language => 'Admin::Attributes::Language', + Script => 'Admin::Attributes::Script' ); - my $form_name = $forms{$model} // "Admin::Attributes"; + my $form_name = $forms{$model} // 'Admin::Attributes'; my $form = $c->form( form => $form_name, init_object => $attr ); if ($c->form_posted_and_valid($form)) { @@ -128,7 +128,7 @@ sub delete : Chained('attribute_base') Args(1) RequireAuth(account_admin) Secure component_path => 'admin/attributes/CannotRemoveAttribute', component_props => {message => $error_message} ); - + $c->detach; } @@ -140,7 +140,7 @@ sub delete : Chained('attribute_base') Args(1) RequireAuth(account_admin) Secure component_path => 'admin/attributes/CannotRemoveAttribute', component_props => {message => $error_message} ); - + $c->detach; } if ($c->form_posted_and_valid($form)) { diff --git a/lib/MusicBrainz/Server/Controller/Artist.pm b/lib/MusicBrainz/Server/Controller/Artist.pm index ac5d2565693..a084d682cdd 100644 --- a/lib/MusicBrainz/Server/Controller/Artist.pm +++ b/lib/MusicBrainz/Server/Controller/Artist.pm @@ -282,7 +282,7 @@ sub show : PathPart('') Chained('load') grep { ($_->name) ne $legal_name->name } # A legal name alias marked ended isn't a current legal name grep { !($_->ended) } - grep { ($_->type_name // "") eq 'Legal name' } @$aliases; + grep { ($_->type_name // '') eq 'Legal name' } @$aliases; $c->stash( legal_name_artist_aliases => \@aliases ); $legal_name_artist_aliases = \@aliases; push(@identities, $legal_name); @@ -293,7 +293,7 @@ sub show : PathPart('') Chained('load') sort_by { $coll->getSortKey($_->name) } # A legal name alias marked ended isn't a current legal name grep { !($_->ended) } - grep { ($_->type_name // "") eq 'Legal name' } @$aliases; + grep { ($_->type_name // '') eq 'Legal name' } @$aliases; $c->stash( legal_name_aliases => \@aliases ); $legal_name_aliases = \@aliases; } diff --git a/lib/MusicBrainz/Server/Controller/ArtistCredit.pm b/lib/MusicBrainz/Server/Controller/ArtistCredit.pm index ae8db900687..b1a0fc7ef52 100644 --- a/lib/MusicBrainz/Server/Controller/ArtistCredit.pm +++ b/lib/MusicBrainz/Server/Controller/ArtistCredit.pm @@ -80,7 +80,7 @@ map { }; find_meta(__PACKAGE__)->add_method($_ => $method); - find_meta(__PACKAGE__)->register_method_attributes($method, ["Chained('load')", "PathPart('$url')"]); + find_meta(__PACKAGE__)->register_method_attributes($method, [q{Chained('load')}, "PathPart('$url')"]); } entities_with('artist_credits'); 1; diff --git a/lib/MusicBrainz/Server/Controller/AutoEditorElections.pm b/lib/MusicBrainz/Server/Controller/AutoEditorElections.pm index 504c4936e93..b54d1b9ea29 100644 --- a/lib/MusicBrainz/Server/Controller/AutoEditorElections.pm +++ b/lib/MusicBrainz/Server/Controller/AutoEditorElections.pm @@ -21,7 +21,7 @@ sub index : Path('') $c->stash( current_view => 'Node', - component_path => 'elections/Index.js', + component_path => 'elections/Index', component_props => {elections => to_json_array(\@elections)}, ); } @@ -51,7 +51,7 @@ sub nominate : Path('nominate') Args(1) RequireAuth(auto_editor) SecureForm $c->stash( current_view => 'Node', - component_path => 'elections/Nominate.js', + component_path => 'elections/Nominate', component_props => { candidate => $candidate->TO_JSON, form => $form->TO_JSON, @@ -80,7 +80,7 @@ sub _load { return $election; } else { - $c->stash( message => l("'{id}' is not a valid election ID", { id => $id }) ); + $c->stash( message => l(q('{id}' is not a valid election ID), { id => $id }) ); $c->detach('/error_400'); } } @@ -95,7 +95,7 @@ sub show : Chained('load') PathPart('') Args(0) $c->stash( current_view => 'Node', - component_path => 'elections/Show.js', + component_path => 'elections/Show', component_props => {election => $election->TO_JSON}, ); diff --git a/lib/MusicBrainz/Server/Controller/ISRC.pm b/lib/MusicBrainz/Server/Controller/ISRC.pm index 7e28356a3ff..01c8f4bd818 100644 --- a/lib/MusicBrainz/Server/Controller/ISRC.pm +++ b/lib/MusicBrainz/Server/Controller/ISRC.pm @@ -37,7 +37,7 @@ sub show : Chained('load') PathPart('') $c->model('ArtistCredit')->load(@recordings); $c->stash( current_view => 'Node', - component_path => 'isrc/Index.js', + component_path => 'isrc/Index', component_props => { %{$c->stash->{component_props}}, isrcs => to_json_array($isrcs), diff --git a/lib/MusicBrainz/Server/Controller/ISWC.pm b/lib/MusicBrainz/Server/Controller/ISWC.pm index 63d300a8516..1ad1b5bd09e 100644 --- a/lib/MusicBrainz/Server/Controller/ISWC.pm +++ b/lib/MusicBrainz/Server/Controller/ISWC.pm @@ -41,7 +41,7 @@ sub show : Chained('load') PathPart('') $c->model('Language')->load_for_works(@works); $c->stash( current_view => 'Node', - component_path => 'iswc/Index.js', + component_path => 'iswc/Index', component_props => { %{$c->stash->{component_props}}, iswcs => to_json_array($iswcs), diff --git a/lib/MusicBrainz/Server/Controller/Instrument.pm b/lib/MusicBrainz/Server/Controller/Instrument.pm index 73a6de3fbe5..7d47d858f85 100644 --- a/lib/MusicBrainz/Server/Controller/Instrument.pm +++ b/lib/MusicBrainz/Server/Controller/Instrument.pm @@ -217,7 +217,7 @@ sub list : Path('/instruments') Args(0) { my $entities = {}; for my $i (@sorted) { - my $type = $i->type_id || "unknown"; + my $type = $i->type_id || 'unknown'; push @{ $entities->{$type} }, $i->TO_JSON; } diff --git a/lib/MusicBrainz/Server/Controller/Label.pm b/lib/MusicBrainz/Server/Controller/Label.pm index 649b6053ccb..8bc391958cc 100644 --- a/lib/MusicBrainz/Server/Controller/Label.pm +++ b/lib/MusicBrainz/Server/Controller/Label.pm @@ -132,7 +132,7 @@ sub show : PathPart('') Chained('load') $c->model('Medium')->load_for_releases(@$releases); $c->model('MediumFormat')->load(map { $_->all_mediums } @$releases); $c->model('ReleaseLabel')->load(@$releases); - + my (@renamed_from, @renamed_into); for my $rel (@{ $label->relationships }) { diff --git a/lib/MusicBrainz/Server/Controller/OAuth2.pm b/lib/MusicBrainz/Server/Controller/OAuth2.pm index fcbbd29d413..985acb53fdb 100644 --- a/lib/MusicBrainz/Server/Controller/OAuth2.pm +++ b/lib/MusicBrainz/Server/Controller/OAuth2.pm @@ -561,9 +561,9 @@ sub tokeninfo : Local audience => $application->oauth_id, issued_to => $application->oauth_id, expires_in => $token->expire_time->subtract_datetime_absolute(DateTime->now)->seconds, - access_type => $token->refresh_token ? "offline" : "online", - token_type => "Bearer", - scope => join(" ", @scope), + access_type => $token->refresh_token ? 'offline' : 'online', + token_type => 'Bearer', + scope => join(' ', @scope), }); } diff --git a/lib/MusicBrainz/Server/Controller/Partners.pm b/lib/MusicBrainz/Server/Controller/Partners.pm index 21ca6fb333e..71153b370c5 100644 --- a/lib/MusicBrainz/Server/Controller/Partners.pm +++ b/lib/MusicBrainz/Server/Controller/Partners.pm @@ -7,10 +7,10 @@ sub amazon : Local Args(2) my ($self, $c, $store, $asin) = @_; my $ass_id = DBDefs->AWS_ASSOCIATE_ID($store) - or die "Invalid store"; + or die 'Invalid store'; $c->response->redirect( - sprintf("http://%s/exec/obidos/ASIN/%s/%s?v=glance&s=music", + sprintf('http://%s/exec/obidos/ASIN/%s/%s?v=glance&s=music', $store, $asin, $ass_id)); } diff --git a/lib/MusicBrainz/Server/Controller/Place.pm b/lib/MusicBrainz/Server/Controller/Place.pm index 54eb5553b59..ad6bf631693 100644 --- a/lib/MusicBrainz/Server/Controller/Place.pm +++ b/lib/MusicBrainz/Server/Controller/Place.pm @@ -109,7 +109,7 @@ sub show : PathPart('') Chained('load') { ); $c->stash( - component_path => 'place/PlaceIndex.js', + component_path => 'place/PlaceIndex', component_props => \%props, current_view => 'Node', ); @@ -138,7 +138,7 @@ sub events : Chained('load') ); $c->stash( - component_path => 'place/PlaceEvents.js', + component_path => 'place/PlaceEvents', component_props => \%props, current_view => 'Node', ); @@ -150,7 +150,7 @@ Shows performances linked to a place. =cut -sub performances : Chained('load') { +sub performances : Chained('load') { my ($self, $c) = @_; my $stash = $c->stash; diff --git a/lib/MusicBrainz/Server/Controller/Relationship/LinkType.pm b/lib/MusicBrainz/Server/Controller/Relationship/LinkType.pm index f28866d25c6..e5a1d67541b 100644 --- a/lib/MusicBrainz/Server/Controller/Relationship/LinkType.pm +++ b/lib/MusicBrainz/Server/Controller/Relationship/LinkType.pm @@ -67,7 +67,7 @@ sub type_specific : Chained('/') PathPart('relationships') CaptureArgs(1) { if (!exists $allowed{$types}) { $c->stash( message => l( - "'{types}' is not a valid pair of types for relationships.", + q('{types}' is not a valid pair of types for relationships.), { types => $types } ) ); diff --git a/lib/MusicBrainz/Server/Controller/RelationshipEditor.pm b/lib/MusicBrainz/Server/Controller/RelationshipEditor.pm index deaf2ad3454..0305bf8fdcd 100644 --- a/lib/MusicBrainz/Server/Controller/RelationshipEditor.pm +++ b/lib/MusicBrainz/Server/Controller/RelationshipEditor.pm @@ -94,7 +94,7 @@ sub submit_edits { } elsif ($action eq 'edit') { $rel->{edit_type} = $EDIT_RELATIONSHIP_EDIT; } else { - detach_with_error($c, "Missing field: action"); + detach_with_error($c, 'Missing field: action'); } } diff --git a/lib/MusicBrainz/Server/Controller/Release.pm b/lib/MusicBrainz/Server/Controller/Release.pm index af58f00bd3b..f43af1579ae 100644 --- a/lib/MusicBrainz/Server/Controller/Release.pm +++ b/lib/MusicBrainz/Server/Controller/Release.pm @@ -306,7 +306,7 @@ sub add_cover_art : Chained('load') PathPart('add-cover-art') Edit { my $id = $c->model('CoverArtArchive')->fresh_id; $c->stash({ id => $id, - index_url => DBDefs->COVER_ART_ARCHIVE_DOWNLOAD_PREFIX . "/release/" . $entity->gid . "/", + index_url => DBDefs->COVER_ART_ARCHIVE_DOWNLOAD_PREFIX . '/release/' . $entity->gid . '/', images => \@artwork, mime_types => \@mime_types, access_key => DBDefs->COVER_ART_ARCHIVE_ACCESS_KEY // '', @@ -336,9 +336,9 @@ sub add_cover_art : Chained('load') PathPart('add-cover-art') Edit { release => $entity, cover_art_types => [ grep { defined $_ && looks_like_number($_) } - @{ $form->field("type_id")->value } + @{ $form->field('type_id')->value } ], - cover_art_position => $form->field("position")->value, + cover_art_position => $form->field('position')->value, cover_art_id => $form->field('id')->value, cover_art_comment => $form->field('comment')->value || '', cover_art_mime_type => $form->field('mime_type')->value, @@ -397,7 +397,7 @@ sub reorder_cover_art : Chained('load') PathPart('reorder-cover-art') Edit { edit_type => $EDIT_RELEASE_REORDER_COVER_ART, release => $entity, old => \@positions, - new => $form->field("artwork")->value + new => $form->field('artwork')->value ); }); @@ -579,7 +579,7 @@ around _validate_merge => sub { l('This merge strategy is not applicable to the releases you have selected.') ); $form->field('merge_strategy')->add_error( - l($cannot_merge_reason->{message}, $cannot_merge_reason->{args} // {}), + l($cannot_merge_reason->{message}, $cannot_merge_reason->{vars} // {}), ); return 0; } @@ -613,7 +613,7 @@ sub edit_cover_art : Chained('load') PathPart('edit-cover-art') Args(1) Edit { $c->stash({ artwork => $artwork, images => \@artwork, - index_url => DBDefs->COVER_ART_ARCHIVE_DOWNLOAD_PREFIX . "/release/" . $entity->gid . "/" + index_url => DBDefs->COVER_ART_ARCHIVE_DOWNLOAD_PREFIX . '/release/' . $entity->gid . '/' }); my @type_ids = map { $_->id } $c->model('CoverArtType')->get_by_name(@{ $artwork->types }); @@ -635,7 +635,7 @@ sub edit_cover_art : Chained('load') PathPart('edit-cover-art') Args(1) Edit { artwork_id => $artwork->id, old_types => [ grep { defined $_ && looks_like_number($_) } @type_ids ], old_comment => $artwork->comment, - new_types => [ grep { defined $_ && looks_like_number($_) } @{ $form->field("type_id")->value } ], + new_types => [ grep { defined $_ && looks_like_number($_) } @{ $form->field('type_id')->value } ], new_comment => $form->field('comment')->value || '', ); }); diff --git a/lib/MusicBrainz/Server/Controller/ReleaseEditor.pm b/lib/MusicBrainz/Server/Controller/ReleaseEditor.pm index 0c9c73a92e7..207ea8b6feb 100644 --- a/lib/MusicBrainz/Server/Controller/ReleaseEditor.pm +++ b/lib/MusicBrainz/Server/Controller/ReleaseEditor.pm @@ -158,7 +158,7 @@ sub _process_seeded_data if (my $ac = $params->{artist_credit}) { $result->{artistCredit} = _seeded_hash($c, \&_seeded_artist_credit, - $ac, "artist_credit", \@errors); + $ac, 'artist_credit', \@errors); } if (my $gid = $params->{release_group}) { @@ -248,15 +248,15 @@ sub _process_seeded_data } if (my $events = $params->{events}) { - $result->{events} = _seeded_array($c, \&_seeded_event, $events, "events", \@errors); + $result->{events} = _seeded_array($c, \&_seeded_event, $events, 'events', \@errors); } if (my $labels = $params->{labels}) { - $result->{labels} = _seeded_array($c, \&_seeded_label, $labels, "labels", \@errors); + $result->{labels} = _seeded_array($c, \&_seeded_label, $labels, 'labels', \@errors); } if (my $mediums = $params->{mediums}) { - $result->{mediums} = _seeded_array($c, \&_seeded_medium, $mediums, "mediums", \@errors); + $result->{mediums} = _seeded_array($c, \&_seeded_medium, $mediums, 'mediums', \@errors); my $position = 0; @@ -266,7 +266,7 @@ sub _process_seeded_data } if (my $urls = $params->{urls}) { - $result->{relationships} = _seeded_array($c, \&_seeded_url, $urls, "urls", \@errors); + $result->{relationships} = _seeded_array($c, \&_seeded_url, $urls, 'urls', \@errors); } $result->{editNote} = $params->{edit_note} if $params->{edit_note}; @@ -298,7 +298,7 @@ sub _seeded_hash return unless defined $params; - if (ref($params) eq "HASH") { + if (ref($params) eq 'HASH') { return $parse->($c, $params, $field_name, $errors); } else { push @$errors, "$field_name must be a hash."; @@ -310,10 +310,10 @@ sub _seeded_array { my ($c, $parse, $params, $field_name, $errors) = @_; - unless (ref($params) eq "ARRAY") { + unless (ref($params) eq 'ARRAY') { push @$errors, "$field_name must be an array"; - if (ref($params) eq "HASH") { + if (ref($params) eq 'HASH') { _report_unknown_fields($field_name, $params, $errors); } return undef; @@ -620,7 +620,7 @@ sub _report_unknown_fields my @unknown_keys = sort { $a cmp $b } grep { !exists $valid_keys{$_} } keys %$fields; push @$errors, map { - "Unknown field: " . ($parent ? "$parent." : "") . "$_" + 'Unknown field: ' . ($parent ? "$parent." : '') . "$_" } @unknown_keys; } diff --git a/lib/MusicBrainz/Server/Controller/ReleaseGroup.pm b/lib/MusicBrainz/Server/Controller/ReleaseGroup.pm index 0615dfa6c72..75f9306f200 100644 --- a/lib/MusicBrainz/Server/Controller/ReleaseGroup.pm +++ b/lib/MusicBrainz/Server/Controller/ReleaseGroup.pm @@ -94,7 +94,7 @@ sub show : Chained('load') PathPart('') { ); $c->stash( - component_path => 'release_group/ReleaseGroupIndex.js', + component_path => 'release_group/ReleaseGroupIndex', component_props => \%props, current_view => 'Node', releases_jsonld => { items => $releases }, @@ -148,7 +148,7 @@ with 'MusicBrainz::Server::Controller::Role::Merge' => { sub forward_merge : Chained('/') PathPart('release-group/merge') { # Since Role::Merge is generic it uses release_group rather than release-group # like elsewhere. We should make sure nothing breaks if we expect release-group somewhere - my ($self, $c) = @_; + my ($self, $c) = @_; $c->forward('/release_group/merge'); } diff --git a/lib/MusicBrainz/Server/Controller/Report.pm b/lib/MusicBrainz/Server/Controller/Report.pm index 83b9ca53bfb..807f54eb787 100644 --- a/lib/MusicBrainz/Server/Controller/Report.pm +++ b/lib/MusicBrainz/Server/Controller/Report.pm @@ -15,7 +15,7 @@ sub index : Path('/reports') Args(0) $c->stash( current_view => 'Node', - component_path => 'report/ReportsIndex.js', + component_path => 'report/ReportsIndex', ); } @@ -30,7 +30,7 @@ sub show : Path Args(1) if (!$report->generated) { $c->stash( current_view => 'Node', - component_path => 'report/ReportNotAvailable.js', + component_path => 'report/ReportNotAvailable', ); $c->detach; } diff --git a/lib/MusicBrainz/Server/Controller/Role/Alias.pm b/lib/MusicBrainz/Server/Controller/Role/Alias.pm index fde376855af..9a6811dd333 100644 --- a/lib/MusicBrainz/Server/Controller/Role/Alias.pm +++ b/lib/MusicBrainz/Server/Controller/Role/Alias.pm @@ -52,7 +52,7 @@ sub aliases : Chained('load') PathPart('aliases') $c->stash( # "aliases" needs to remain here for JSON-LD serialization aliases => $aliases, - component_path => 'entity/Aliases.js', + component_path => 'entity/Aliases', component_props => \%props, current_view => 'Node', ); @@ -119,11 +119,12 @@ sub delete_alias : Chained('alias') PathPart('delete') Edit my $type = $self->{entity_name}; my $entity = $c->stash->{ $type }; my $edit = $c->model('Edit')->find_creation_edit($model_to_edit_type{add}->{ $self->{model} }, $alias->id, id_field => 'alias_id'); + my $entity_type = $type eq 'rg' ? 'release_group' : $type; my %props = ( alias => $alias->TO_JSON, entity => $entity->TO_JSON, - type => $type, + type => $entity_type, ); $c->stash( diff --git a/lib/MusicBrainz/Server/Controller/Role/CommonsImage.pm b/lib/MusicBrainz/Server/Controller/Role/CommonsImage.pm index d9daddf45bf..40f57fee5ce 100644 --- a/lib/MusicBrainz/Server/Controller/Role/CommonsImage.pm +++ b/lib/MusicBrainz/Server/Controller/Role/CommonsImage.pm @@ -8,9 +8,9 @@ use Readonly; requires 'load'; -Readonly my $WIKIDATA_PROP_IMAGE => "P18"; -Readonly my $WIKIDATA_PROP_LOGO_IMAGE => "P154"; -Readonly my $WIKIDATA_PROP_LOCATOR_MAP_IMAGE => "P242"; +Readonly my $WIKIDATA_PROP_IMAGE => 'P18'; +Readonly my $WIKIDATA_PROP_LOGO_IMAGE => 'P154'; +Readonly my $WIKIDATA_PROP_LOCATOR_MAP_IMAGE => 'P242'; after load => sub { my ($self, $c) = @_; diff --git a/lib/MusicBrainz/Server/Controller/Role/Details.pm b/lib/MusicBrainz/Server/Controller/Role/Details.pm index 9311fa27485..ce645f5e52b 100644 --- a/lib/MusicBrainz/Server/Controller/Role/Details.pm +++ b/lib/MusicBrainz/Server/Controller/Role/Details.pm @@ -7,7 +7,7 @@ sub details : Chained('load') PathPart { my $entity = $c->stash->{$self->{entity_name}}; $c->stash( - component_path => 'entity/Details.js', + component_path => 'entity/Details', component_props => {entity => $entity->TO_JSON}, current_view => 'Node', ); diff --git a/lib/MusicBrainz/Server/Controller/Role/EditRelationships.pm b/lib/MusicBrainz/Server/Controller/Role/EditRelationships.pm index 46679c15125..bcf5910d145 100644 --- a/lib/MusicBrainz/Server/Controller/Role/EditRelationships.pm +++ b/lib/MusicBrainz/Server/Controller/Role/EditRelationships.pm @@ -118,7 +118,7 @@ role { } my $url_changes = 0; - if ($form_name ne "edit-url") { + if ($form_name ne 'edit-url') { my @urls = grep { !$_->is_empty } $form->field('url')->fields; $url_changes = $self->edit_relationships($c, $form, \@urls, $source); } @@ -213,7 +213,7 @@ role { my $is_series = $unorderable_entity->isa('MusicBrainz::Server::Entity::Series'); if (!$is_series || $unorderable_entity->ordering_type_id == $SERIES_ORDERING_TYPE_MANUAL) { - my $key = join "-", $link_type->id, $unorderable_entity->id; + my $key = join '-', $link_type->id, $unorderable_entity->id; push @{ $reordered_relationships{$key} //= [] }, { relationship => $relationship, diff --git a/lib/MusicBrainz/Server/Controller/Role/Load.pm b/lib/MusicBrainz/Server/Controller/Role/Load.pm index 85d3e2ea4ba..135130d303c 100644 --- a/lib/MusicBrainz/Server/Controller/Role/Load.pm +++ b/lib/MusicBrainz/Server/Controller/Role/Load.pm @@ -8,7 +8,7 @@ use MusicBrainz::Server::Constants qw( :direction %ENTITIES ); use Readonly; use aliased 'MusicBrainz::Server::Entity::RelationshipLinkTypeGroup'; -no if $] >= 5.018, warnings => "experimental::smartmatch"; +no if $] >= 5.018, warnings => 'experimental::smartmatch'; parameter 'model' => ( isa => 'Str', @@ -128,8 +128,8 @@ role ); } else { $lt_group = $lt_groups->[0]; - } - + } + $pager->total_entries($lt_group->total_relationships); $c->stash->{pager} = $pager; $c->stash->{paged_link_type_group} = $lt_group; diff --git a/lib/MusicBrainz/Server/Controller/Role/Merge.pm b/lib/MusicBrainz/Server/Controller/Role/Merge.pm index 236c1315530..3fe34fb841a 100644 --- a/lib/MusicBrainz/Server/Controller/Role/Merge.pm +++ b/lib/MusicBrainz/Server/Controller/Role/Merge.pm @@ -178,7 +178,7 @@ role { toMerge => to_json_array(\@entities), ); $c->stash( - component_path => $c->namespace . '/'. type_to_model($c->namespace) . 'Merge.js', + component_path => $c->namespace . '/'. type_to_model($c->namespace) . 'Merge', component_props => \%props, current_view => 'Node', ); diff --git a/lib/MusicBrainz/Server/Controller/Role/Profile.pm b/lib/MusicBrainz/Server/Controller/Role/Profile.pm index bcb4ace2e8e..947b85d7266 100644 --- a/lib/MusicBrainz/Server/Controller/Role/Profile.pm +++ b/lib/MusicBrainz/Server/Controller/Role/Profile.pm @@ -27,7 +27,7 @@ role { my ($depth, $name, $duration) = @$stat; if ($name eq 'request' && $duration > $threshold) { $c->log->warn( - sprintf("Slow request (%.3fs): %s %s", $duration, $c->req->method, $c->req->uri) + sprintf('Slow request (%.3fs): %s %s', $duration, $c->req->method, $c->req->uri) ); } } diff --git a/lib/MusicBrainz/Server/Controller/Role/Subscribe.pm b/lib/MusicBrainz/Server/Controller/Role/Subscribe.pm index 647c95c542a..530a089df98 100644 --- a/lib/MusicBrainz/Server/Controller/Role/Subscribe.pm +++ b/lib/MusicBrainz/Server/Controller/Role/Subscribe.pm @@ -46,7 +46,7 @@ sub subscribers : Chained('load') RequireAuth { ); $c->stash( - component_path => 'entity/Subscribers.js', + component_path => 'entity/Subscribers', component_props => \%props, current_view => 'Node', ); diff --git a/lib/MusicBrainz/Server/Controller/Role/Tag.pm b/lib/MusicBrainz/Server/Controller/Role/Tag.pm index b2e560e90aa..fe54358b5e0 100644 --- a/lib/MusicBrainz/Server/Controller/Role/Tag.pm +++ b/lib/MusicBrainz/Server/Controller/Role/Tag.pm @@ -46,7 +46,7 @@ sub tags : Chained('load') PathPart('tags') { ); $c->stash( - component_path => 'entity/Tags.js', + component_path => 'entity/Tags', component_props => \%props, current_view => 'Node', ); diff --git a/lib/MusicBrainz/Server/Controller/Root.pm b/lib/MusicBrainz/Server/Controller/Root.pm index fdeb56633fc..52fe0c65a43 100644 --- a/lib/MusicBrainz/Server/Controller/Root.pm +++ b/lib/MusicBrainz/Server/Controller/Root.pm @@ -57,7 +57,7 @@ sub index : Path Args(0) $c->stash( current_view => 'Node', - component_path => 'main/index.js', + component_path => 'main/index', component_props => { blogEntries => $c->model('Blog')->get_latest_entries, newestReleases => to_json_array(\@newest_releases), @@ -377,7 +377,7 @@ sub begin : Private $c->stash->{current_action_requires_auth} = 1; $c->forward('/user/do_login'); my $privs = $attributes->{RequireAuth}; - if ($privs && ref($privs) eq "ARRAY") { + if ($privs && ref($privs) eq 'ARRAY') { foreach my $priv (@$privs) { last unless $priv; my $accessor = "is_$priv"; diff --git a/lib/MusicBrainz/Server/Controller/Search.pm b/lib/MusicBrainz/Server/Controller/Search.pm index 5ddb8484099..b6c4834dd79 100644 --- a/lib/MusicBrainz/Server/Controller/Search.pm +++ b/lib/MusicBrainz/Server/Controller/Search.pm @@ -11,7 +11,7 @@ use MusicBrainz::Server::Form::Search::Search; use Scalar::Util qw( looks_like_number ); use feature 'switch'; -no if $] >= 5.018, warnings => "experimental::smartmatch"; +no if $] >= 5.018, warnings => 'experimental::smartmatch'; sub search : Path('') { @@ -73,7 +73,7 @@ sub search : Path('') ); $c->stash( - component_path => 'search/components/' . type_to_model($type) . 'Results.js', + component_path => 'search/components/' . type_to_model($type) . 'Results', component_props => \%props, current_view => 'Node', ); @@ -98,7 +98,7 @@ sub doc : Private my ($self, $c) = @_; $c->stash( - component_path => 'search/components/DocResults.js', + component_path => 'search/components/DocResults', current_view => 'Node', ); } diff --git a/lib/MusicBrainz/Server/Controller/Statistics.pm b/lib/MusicBrainz/Server/Controller/Statistics.pm index 7187d2e3a4c..045dc01a5e4 100644 --- a/lib/MusicBrainz/Server/Controller/Statistics.pm +++ b/lib/MusicBrainz/Server/Controller/Statistics.pm @@ -98,7 +98,7 @@ sub timeline : Path('timeline/main') sub timeline_redirect : Path('timeline') { my ($self, $c) = @_; - $c->response->redirect($c->uri_for("/statistics/timeline/main"), 303); + $c->response->redirect($c->uri_for('/statistics/timeline/main'), 303); } sub individual_timeline : Path('timeline') Args(1) diff --git a/lib/MusicBrainz/Server/Controller/Tag.pm b/lib/MusicBrainz/Server/Controller/Tag.pm index 3fe93174977..1c4d33941b7 100644 --- a/lib/MusicBrainz/Server/Controller/Tag.pm +++ b/lib/MusicBrainz/Server/Controller/Tag.pm @@ -124,7 +124,7 @@ map { }; find_meta(__PACKAGE__)->add_method($_ => $method); - find_meta(__PACKAGE__)->register_method_attributes($method, ["Chained('load')", "PathPart('$url')"]); + find_meta(__PACKAGE__)->register_method_attributes($method, [q{Chained('load')}, "PathPart('$url')"]); } entities_with('tags'); sub not_found : Private diff --git a/lib/MusicBrainz/Server/Controller/User.pm b/lib/MusicBrainz/Server/Controller/User.pm index da497c44242..46fd5a82514 100644 --- a/lib/MusicBrainz/Server/Controller/User.pm +++ b/lib/MusicBrainz/Server/Controller/User.pm @@ -337,7 +337,7 @@ sub contact : Chained('load') RequireAuth HiddenOnSlaves SecureForm component_path => 'user/UserMessage', component_props => { title => l('Email Sent'), - message => l("Your email has been successfully sent! Click {link|here} to continue to {user}'s profile.", + message => l(q(Your email has been successfully sent! Click {link|here} to continue to {user}'s profile.), { link => $c->uri_for_action('/user/profile', [ $editor->name ]), user => $editor->name @@ -514,7 +514,7 @@ sub ratings : Chained('load') PathPart('ratings') Args(1) HiddenOnSlaves if (!$model || !$c->model($model)->can('rating')) { $c->stash( message => l( - "'{type}' is not an entity type that can have ratings.", + q('{type}' is not an entity type that can have ratings.), { type => $type } ) ); @@ -683,7 +683,7 @@ map { }; find_meta(__PACKAGE__)->add_method($entity_type . '_tag' => $method); - find_meta(__PACKAGE__)->register_method_attributes($method, ["Chained('load_tag')", "PathPart('$url')"]); + find_meta(__PACKAGE__)->register_method_attributes($method, [q{Chained('load_tag')}, "PathPart('$url')"]); } entities_with('tags'); sub privileged : Path('/privileged') diff --git a/lib/MusicBrainz/Server/Controller/WS/2/Area.pm b/lib/MusicBrainz/Server/Controller/WS/2/Area.pm index e3eb0cb1d38..1e136953cd8 100644 --- a/lib/MusicBrainz/Server/Controller/WS/2/Area.pm +++ b/lib/MusicBrainz/Server/Controller/WS/2/Area.pm @@ -75,7 +75,7 @@ sub area_browse : Private if (!is_guid($id)) { - $c->stash->{error} = "Invalid mbid."; + $c->stash->{error} = 'Invalid mbid.'; $c->detach('bad_req'); } diff --git a/lib/MusicBrainz/Server/Controller/WS/2/Artist.pm b/lib/MusicBrainz/Server/Controller/WS/2/Artist.pm index 3e530cb1db8..8a99eae9238 100644 --- a/lib/MusicBrainz/Server/Controller/WS/2/Artist.pm +++ b/lib/MusicBrainz/Server/Controller/WS/2/Artist.pm @@ -129,7 +129,7 @@ sub artist_browse : Private if (!is_guid($id)) { - $c->stash->{error} = "Invalid mbid."; + $c->stash->{error} = 'Invalid mbid.'; $c->detach('bad_req'); } diff --git a/lib/MusicBrainz/Server/Controller/WS/2/Collection.pm b/lib/MusicBrainz/Server/Controller/WS/2/Collection.pm index 7dd326f4cd4..b4a9600a024 100644 --- a/lib/MusicBrainz/Server/Controller/WS/2/Collection.pm +++ b/lib/MusicBrainz/Server/Controller/WS/2/Collection.pm @@ -49,7 +49,7 @@ sub get_collection_from_stash { my $collection = $c->stash->{entity} // $c->detach('not_found'); if (!$collection->public) { $self->authenticate($c, $ACCESS_SCOPE_COLLECTION); - unless ($c->user_exists && + unless ($c->user_exists && $c->model('Collection')->is_collection_collaborator($c->user->id, $collection->id)) { $self->_error($c, 'You do not have permission to view this collection'); } @@ -172,12 +172,12 @@ map { my $method_name = $plural . '_get'; find_meta(__PACKAGE__)->add_method($method_name => $method); - find_meta(__PACKAGE__)->register_method_attributes($method, ["Chained('load')", "PathPart('$plural_url')", "Args(0)"]); + find_meta(__PACKAGE__)->register_method_attributes($method, [q{Chained('load')}, "PathPart('$plural_url')", 'Args(0)']); find_meta(__PACKAGE__)->add_method($plural => $submission_method); find_meta(__PACKAGE__)->register_method_attributes( $submission_method, - ["Chained('load')", "PathPart('$plural_url')", "Args(1)"], + [q{Chained('load')}, "PathPart('$plural_url')", 'Args(1)'], ); } entities_with('collections'); diff --git a/lib/MusicBrainz/Server/Controller/WS/2/DiscID.pm b/lib/MusicBrainz/Server/Controller/WS/2/DiscID.pm index f2b7e6add80..e6aed9bb2ef 100644 --- a/lib/MusicBrainz/Server/Controller/WS/2/DiscID.pm +++ b/lib/MusicBrainz/Server/Controller/WS/2/DiscID.pm @@ -30,7 +30,7 @@ sub discid : Chained('root') PathPart('discid') { if (!is_valid_discid($id) && !(exists $c->req->query_params->{toc})) { - $c->stash->{error} = "Invalid discid."; + $c->stash->{error} = 'Invalid discid.'; $c->detach('bad_req'); } @@ -90,8 +90,8 @@ sub discid : Chained('root') PathPart('discid') { if (my $toc = $c->req->query_params->{toc}) { my $all_formats = 0; - if (exists $c->req->query_params->{"media-format"} && - $c->req->query_params->{'media-format'} eq "all") { + if (exists $c->req->query_params->{'media-format'} && + $c->req->query_params->{'media-format'} eq 'all') { $all_formats = 1; } diff --git a/lib/MusicBrainz/Server/Controller/WS/2/Event.pm b/lib/MusicBrainz/Server/Controller/WS/2/Event.pm index 59945082015..4a4b1ff4360 100644 --- a/lib/MusicBrainz/Server/Controller/WS/2/Event.pm +++ b/lib/MusicBrainz/Server/Controller/WS/2/Event.pm @@ -72,7 +72,7 @@ sub event_browse : Private { my ($limit, $offset) = $self->_limit_and_offset($c); if (!is_guid($id)) { - $c->stash->{error} = "Invalid mbid."; + $c->stash->{error} = 'Invalid mbid.'; $c->detach('bad_req'); } diff --git a/lib/MusicBrainz/Server/Controller/WS/2/ISRC.pm b/lib/MusicBrainz/Server/Controller/WS/2/ISRC.pm index 203f1a62b0f..8f157c0b9f1 100644 --- a/lib/MusicBrainz/Server/Controller/WS/2/ISRC.pm +++ b/lib/MusicBrainz/Server/Controller/WS/2/ISRC.pm @@ -26,7 +26,7 @@ sub isrc : Chained('root') PathPart('isrc') Args(1) if (!is_valid_isrc($isrc_code)) { - $c->stash->{error} = "Invalid isrc."; + $c->stash->{error} = 'Invalid isrc.'; $c->detach('bad_req'); } diff --git a/lib/MusicBrainz/Server/Controller/WS/2/ISWC.pm b/lib/MusicBrainz/Server/Controller/WS/2/ISWC.pm index 7606da5f798..ab0aa2b3540 100644 --- a/lib/MusicBrainz/Server/Controller/WS/2/ISWC.pm +++ b/lib/MusicBrainz/Server/Controller/WS/2/ISWC.pm @@ -26,7 +26,7 @@ sub iswc : Chained('root') PathPart('iswc') Args(1) if (!is_valid_iswc($iswc)) { - $c->stash->{error} = "Invalid iswc."; + $c->stash->{error} = 'Invalid iswc.'; $c->detach('bad_req'); } diff --git a/lib/MusicBrainz/Server/Controller/WS/2/Instrument.pm b/lib/MusicBrainz/Server/Controller/WS/2/Instrument.pm index 5679bf7467b..26ef1e866de 100644 --- a/lib/MusicBrainz/Server/Controller/WS/2/Instrument.pm +++ b/lib/MusicBrainz/Server/Controller/WS/2/Instrument.pm @@ -62,7 +62,7 @@ sub instrument_browse : Private { my ($limit, $offset) = $self->_limit_and_offset($c); if (!is_guid($id)) { - $c->stash->{error} = "Invalid mbid."; + $c->stash->{error} = 'Invalid mbid.'; $c->detach('bad_req'); } diff --git a/lib/MusicBrainz/Server/Controller/WS/2/Label.pm b/lib/MusicBrainz/Server/Controller/WS/2/Label.pm index 43e69c2df82..f71dade6453 100644 --- a/lib/MusicBrainz/Server/Controller/WS/2/Label.pm +++ b/lib/MusicBrainz/Server/Controller/WS/2/Label.pm @@ -83,7 +83,7 @@ sub label_browse : Private if (!is_guid($id)) { - $c->stash->{error} = "Invalid mbid."; + $c->stash->{error} = 'Invalid mbid.'; $c->detach('bad_req'); } diff --git a/lib/MusicBrainz/Server/Controller/WS/2/Place.pm b/lib/MusicBrainz/Server/Controller/WS/2/Place.pm index 932d51701e6..c8b4af6b7be 100644 --- a/lib/MusicBrainz/Server/Controller/WS/2/Place.pm +++ b/lib/MusicBrainz/Server/Controller/WS/2/Place.pm @@ -70,7 +70,7 @@ sub place_browse : Private if (!is_guid($id)) { - $c->stash->{error} = "Invalid mbid."; + $c->stash->{error} = 'Invalid mbid.'; $c->detach('bad_req'); } diff --git a/lib/MusicBrainz/Server/Controller/WS/2/Rating.pm b/lib/MusicBrainz/Server/Controller/WS/2/Rating.pm index 8dd76037ab0..fbaa1d6a64e 100644 --- a/lib/MusicBrainz/Server/Controller/WS/2/Rating.pm +++ b/lib/MusicBrainz/Server/Controller/WS/2/Rating.pm @@ -43,7 +43,7 @@ sub rating_submit : Private { my $type = $node->getLocalName; $self->_error($c, "Entity type '$type' cannot have ratings. " . - "Supported types are: " . join(', ', keys %ratable)) + 'Supported types are: ' . join(', ', keys %ratable)) unless $ratable{$type}; my $gid = $xp->find('@mb:id', $node)->string_value; @@ -55,7 +55,7 @@ sub rating_submit : Private $self->_error($c, "Cannot find $type entity $gid.") unless $entity; my $rating = $xp->find('mb:user-rating', $node)->string_value; - $self->_error($c, "Rating should be an integer between 0 and 100") + $self->_error($c, 'Rating should be an integer between 0 and 100') unless is_integer($rating) && $rating >= 0 && $rating <= 100; # postpone any updates until we've made some effort to parse the whole diff --git a/lib/MusicBrainz/Server/Controller/WS/2/Recording.pm b/lib/MusicBrainz/Server/Controller/WS/2/Recording.pm index 510af338678..baccbab01a7 100644 --- a/lib/MusicBrainz/Server/Controller/WS/2/Recording.pm +++ b/lib/MusicBrainz/Server/Controller/WS/2/Recording.pm @@ -139,7 +139,7 @@ sub recording_browse : Private if (!is_guid($id)) { - $c->stash->{error} = "Invalid mbid."; + $c->stash->{error} = 'Invalid mbid.'; $c->detach('bad_req'); } @@ -207,7 +207,7 @@ sub recording_submit : Private for my $node ($xp->find('/mb:metadata/mb:recording-list/mb:recording')->get_nodelist) { my $id = $xp->find('@mb:id', $node)->string_value or - $self->_error($c, "All releases must have an MBID present"); + $self->_error($c, 'All releases must have an MBID present'); $self->_error($c, "$id is not a valid MBID") unless is_guid($id); @@ -236,7 +236,7 @@ sub recording_submit : Private } if (!$c->user->has_confirmed_email_address) { - $self->_error($c, "You must have a verified email address to submit edits"); + $self->_error($c, 'You must have a verified email address to submit edits'); } $c->model('MB')->with_transaction(sub { diff --git a/lib/MusicBrainz/Server/Controller/WS/2/Release.pm b/lib/MusicBrainz/Server/Controller/WS/2/Release.pm index b2e86309d42..92efdd941e0 100644 --- a/lib/MusicBrainz/Server/Controller/WS/2/Release.pm +++ b/lib/MusicBrainz/Server/Controller/WS/2/Release.pm @@ -222,7 +222,7 @@ sub release_browse : Private if (!is_guid($id)) { - $c->stash->{error} = "Invalid mbid."; + $c->stash->{error} = 'Invalid mbid.'; $c->detach('bad_req'); } @@ -314,7 +314,7 @@ sub release_submit : Private my @submit; for my $node ($xp->find('/mb:metadata/mb:release-list/mb:release')->get_nodelist) { my $id = $xp->find('@mb:id', $node)->string_value or - $self->_error($c, "All releases must have an MBID present"); + $self->_error($c, 'All releases must have an MBID present'); $self->_error($c, "$id is not a valid MBID") unless is_guid($id); diff --git a/lib/MusicBrainz/Server/Controller/WS/2/ReleaseGroup.pm b/lib/MusicBrainz/Server/Controller/WS/2/ReleaseGroup.pm index 81e85b33718..d8f254d5492 100644 --- a/lib/MusicBrainz/Server/Controller/WS/2/ReleaseGroup.pm +++ b/lib/MusicBrainz/Server/Controller/WS/2/ReleaseGroup.pm @@ -8,19 +8,19 @@ use List::AllUtils qw( uniq ); use Readonly; my $ws_defs = Data::OptList::mkopt([ - "release-group" => { + 'release-group' => { method => 'GET', required => [ qw(query) ], optional => [ qw(fmt limit offset) ], }, - "release-group" => { + 'release-group' => { method => 'GET', linked => [ qw(artist release collection) ], inc => [ qw(aliases artist-credits annotation _relations tags user-tags genres user-genres ratings user-ratings) ], optional => [ qw(fmt limit offset) ], }, - "release-group" => { + 'release-group' => { action => '/ws/2/releasegroup/lookup', method => 'GET', inc => [ qw(artists releases artist-credits aliases annotation @@ -95,7 +95,7 @@ sub release_group_browse : Private if (!is_guid($id)) { - $c->stash->{error} = "Invalid mbid."; + $c->stash->{error} = 'Invalid mbid.'; $c->detach('bad_req'); } diff --git a/lib/MusicBrainz/Server/Controller/WS/2/Role/BrowseByCollection.pm b/lib/MusicBrainz/Server/Controller/WS/2/Role/BrowseByCollection.pm index fddf7bb166e..3a37b672d76 100644 --- a/lib/MusicBrainz/Server/Controller/WS/2/Role/BrowseByCollection.pm +++ b/lib/MusicBrainz/Server/Controller/WS/2/Role/BrowseByCollection.pm @@ -20,7 +20,7 @@ sub browse_by_collection { if (!$collection->public) { $self->authenticate($c, $ACCESS_SCOPE_COLLECTION); $self->unauthorized($c) - unless $c->user_exists && + unless $c->user_exists && $c->model('Collection')->is_collection_collaborator($c->user->id, $collection->id); } diff --git a/lib/MusicBrainz/Server/Controller/WS/2/Series.pm b/lib/MusicBrainz/Server/Controller/WS/2/Series.pm index a677a836419..1809cf83488 100644 --- a/lib/MusicBrainz/Server/Controller/WS/2/Series.pm +++ b/lib/MusicBrainz/Server/Controller/WS/2/Series.pm @@ -62,7 +62,7 @@ sub series_browse : Private my ($limit, $offset) = $self->_limit_and_offset($c); if (!is_guid($id)) { - $c->stash->{error} = "Invalid mbid."; + $c->stash->{error} = 'Invalid mbid.'; $c->detach('bad_req'); } diff --git a/lib/MusicBrainz/Server/Controller/WS/2/Tag.pm b/lib/MusicBrainz/Server/Controller/WS/2/Tag.pm index d75a6e9a200..eacadb0b5c9 100644 --- a/lib/MusicBrainz/Server/Controller/WS/2/Tag.pm +++ b/lib/MusicBrainz/Server/Controller/WS/2/Tag.pm @@ -8,7 +8,7 @@ use MusicBrainz::Server::Validation qw( is_guid ); use MusicBrainz::Server::WebService::XML::XPath; use Readonly; -no if $] >= 5.018, warnings => "experimental::smartmatch"; +no if $] >= 5.018, warnings => 'experimental::smartmatch'; my $ws_defs = Data::OptList::mkopt([ tag => { diff --git a/lib/MusicBrainz/Server/Controller/WS/2/Work.pm b/lib/MusicBrainz/Server/Controller/WS/2/Work.pm index 3b9fb5c29bd..3cbaeb34ed5 100644 --- a/lib/MusicBrainz/Server/Controller/WS/2/Work.pm +++ b/lib/MusicBrainz/Server/Controller/WS/2/Work.pm @@ -69,7 +69,7 @@ sub work_browse : Private if (!is_guid($id)) { - $c->stash->{error} = "Invalid mbid."; + $c->stash->{error} = 'Invalid mbid.'; $c->detach('bad_req'); } diff --git a/lib/MusicBrainz/Server/Controller/WS/js.pm b/lib/MusicBrainz/Server/Controller/WS/js.pm index 3a96553529a..2cebc3c093e 100644 --- a/lib/MusicBrainz/Server/Controller/WS/js.pm +++ b/lib/MusicBrainz/Server/Controller/WS/js.pm @@ -37,30 +37,30 @@ use XML::XPath; # This defines what options are acceptable for WS calls my $ws_defs = Data::OptList::mkopt([ - "medium" => { + 'medium' => { method => 'GET', inc => [ qw(recordings rels) ], optional => [ qw(q artist tracks limit page timestamp) ] }, - "tracks" => { + 'tracks' => { method => 'GET', optional => [ qw(q page ) ] }, - "cdstub" => { + 'cdstub' => { method => 'GET', optional => [ qw(q artist tracks limit page timestamp) ] }, - "cover-art-upload" => { + 'cover-art-upload' => { method => 'GET', }, - "entity" => { + 'entity' => { method => 'GET', inc => [ qw(rels) ] }, - "entities" => { + 'entities' => { method => 'GET', }, - "events" => { + 'events' => { method => 'GET' }, ]); @@ -134,7 +134,7 @@ sub cdstub : Chained('root') PathPart Args(1) { my $cdstub = $c->model('CDStub')->get_by_discid($id); my $ret = { - toc => "", + toc => '', tracks => [] }; @@ -230,7 +230,7 @@ sub disc_search { push @query, "artist:($artist)" if $artist; push @query, ($type eq 'release' ? "tracksmedium:($tracks)" : "tracks:($tracks)") if $tracks; - $query = join(" AND ", @query); + $query = join(' AND ', @query); my $no_redirect = 1; my $response = $c->model('Search')->external_search($type, $query, $limit, $page, 1); @@ -519,7 +519,7 @@ sub entity : Chained('root') PathPart('entity') Args(1) } unless (defined $entity) { - $c->stash->{error} = "The requested entity was not found."; + $c->stash->{error} = 'The requested entity was not found.'; $c->detach('not_found'); return; } diff --git a/lib/MusicBrainz/Server/Controller/WS/js/Area.pm b/lib/MusicBrainz/Server/Controller/WS/js/Area.pm index 8e07ac05db1..3c07140a809 100644 --- a/lib/MusicBrainz/Server/Controller/WS/js/Area.pm +++ b/lib/MusicBrainz/Server/Controller/WS/js/Area.pm @@ -8,7 +8,7 @@ with 'MusicBrainz::Server::Controller::WS::js::Role::Autocompletion::PrimaryAlia }; my $ws_defs = Data::OptList::mkopt([ - "area" => { + 'area' => { method => 'GET', required => [ qw(q) ], optional => [ qw(direct limit page timestamp) ] diff --git a/lib/MusicBrainz/Server/Controller/WS/js/Artist.pm b/lib/MusicBrainz/Server/Controller/WS/js/Artist.pm index f8421e8dff8..bbe103e8669 100644 --- a/lib/MusicBrainz/Server/Controller/WS/js/Artist.pm +++ b/lib/MusicBrainz/Server/Controller/WS/js/Artist.pm @@ -8,7 +8,7 @@ with 'MusicBrainz::Server::Controller::WS::js::Role::Autocompletion::PrimaryAlia }; my $ws_defs = Data::OptList::mkopt([ - "artist" => { + 'artist' => { method => 'GET', required => [ qw(q) ], optional => [ qw(direct limit page timestamp) ] diff --git a/lib/MusicBrainz/Server/Controller/WS/js/CheckDuplicates.pm b/lib/MusicBrainz/Server/Controller/WS/js/CheckDuplicates.pm index 44d136c79c5..1e5fa6d7b6f 100644 --- a/lib/MusicBrainz/Server/Controller/WS/js/CheckDuplicates.pm +++ b/lib/MusicBrainz/Server/Controller/WS/js/CheckDuplicates.pm @@ -8,7 +8,7 @@ use aliased 'MusicBrainz::Server::WebService::JSONSerializer'; BEGIN {extends 'MusicBrainz::Server::ControllerBase::WS::js'} my $ws_defs = Data::OptList::mkopt([ - "check_duplicates" => { + 'check_duplicates' => { method => 'GET', required => [qw(type name)], optional => [qw(mbid)] diff --git a/lib/MusicBrainz/Server/Controller/WS/js/Edit.pm b/lib/MusicBrainz/Server/Controller/WS/js/Edit.pm index 18f78ee251e..e3c17cefef8 100644 --- a/lib/MusicBrainz/Server/Controller/WS/js/Edit.pm +++ b/lib/MusicBrainz/Server/Controller/WS/js/Edit.pm @@ -60,7 +60,7 @@ use aliased 'MusicBrainz::Server::Entity::Track'; use aliased 'MusicBrainz::Server::WebService::JSONSerializer'; BEGIN { extends 'MusicBrainz::Server::Controller' } -no if $] >= 5.018, warnings => "experimental::smartmatch"; +no if $] >= 5.018, warnings => 'experimental::smartmatch'; Readonly our $ERROR_NOT_LOGGED_IN => 1; Readonly our $ERROR_NON_EXISTENT_ENTITIES => 2; @@ -411,7 +411,7 @@ sub process_relationship { delete $data->{entities}; delete $data->{linkOrder}; - for my $prop ("entity0", "entity1") { + for my $prop ('entity0', 'entity1') { my $entity_data = $data->{$prop}; if ($entity_data) { @@ -433,10 +433,10 @@ sub process_relationship { if ($previewing && !$entity_data->{gid}) { my $entity_class = "MusicBrainz::Server::Entity::$model"; - my ($entity) = $model eq "URL" ? $c->model('URL')->find_by_url($name) : (); + my ($entity) = $model eq 'URL' ? $c->model('URL')->find_by_url($name) : (); $data->{$prop} = $entity // $entity_class->new(name => $name); - } elsif ($model eq "URL") { + } elsif ($model eq 'URL') { $data->{$prop} = $c->model('URL')->find_or_insert($name); } else { $loader->($entity_data->{gid}, $model, sub { $data->{$prop} = shift }); @@ -725,7 +725,7 @@ sub submit_edits { $response->{entity}->{position} = $entity->position; } }; - } elsif ($edit->isa("MusicBrainz::Server::Edit::Release::AddReleaseLabel")) { + } elsif ($edit->isa('MusicBrainz::Server::Edit::Release::AddReleaseLabel')) { $response->{entity} = { id => $edit->entity_id, labelID => defined($edit->data->{label}) ? $edit->data->{label}{id} : undef, diff --git a/lib/MusicBrainz/Server/Controller/WS/js/Editor.pm b/lib/MusicBrainz/Server/Controller/WS/js/Editor.pm index f6bb85b954b..c62f4357850 100644 --- a/lib/MusicBrainz/Server/Controller/WS/js/Editor.pm +++ b/lib/MusicBrainz/Server/Controller/WS/js/Editor.pm @@ -5,7 +5,7 @@ BEGIN { extends 'MusicBrainz::Server::ControllerBase::WS::js' } use Text::Trim 'trim'; my $ws_defs = Data::OptList::mkopt([ - "editor" => { + 'editor' => { method => 'GET', required => [ qw(q) ], optional => [ qw(direct limit page timestamp) ] diff --git a/lib/MusicBrainz/Server/Controller/WS/js/Event.pm b/lib/MusicBrainz/Server/Controller/WS/js/Event.pm index dc58f4d2923..210a2931419 100644 --- a/lib/MusicBrainz/Server/Controller/WS/js/Event.pm +++ b/lib/MusicBrainz/Server/Controller/WS/js/Event.pm @@ -8,7 +8,7 @@ with 'MusicBrainz::Server::Controller::WS::js::Role::Autocompletion::PrimaryAlia }; my $ws_defs = Data::OptList::mkopt([ - "event" => { + 'event' => { method => 'GET', required => [ qw(q) ], optional => [ qw(direct limit page timestamp) ] diff --git a/lib/MusicBrainz/Server/Controller/WS/js/Genre.pm b/lib/MusicBrainz/Server/Controller/WS/js/Genre.pm index 47e8e2d0bc2..a1399798a44 100644 --- a/lib/MusicBrainz/Server/Controller/WS/js/Genre.pm +++ b/lib/MusicBrainz/Server/Controller/WS/js/Genre.pm @@ -5,7 +5,7 @@ BEGIN { extends 'MusicBrainz::Server::ControllerBase::WS::js' } with 'MusicBrainz::Server::Controller::WS::js::Role::Autocompletion'; my $ws_defs = Data::OptList::mkopt([ - "genre" => { + 'genre' => { method => 'GET', required => [ qw(q) ], optional => [ qw(direct limit page timestamp) ] diff --git a/lib/MusicBrainz/Server/Controller/WS/js/Instrument.pm b/lib/MusicBrainz/Server/Controller/WS/js/Instrument.pm index f8cccf2c4d5..11eef885b67 100644 --- a/lib/MusicBrainz/Server/Controller/WS/js/Instrument.pm +++ b/lib/MusicBrainz/Server/Controller/WS/js/Instrument.pm @@ -8,7 +8,7 @@ with 'MusicBrainz::Server::Controller::WS::js::Role::Autocompletion::PrimaryAlia }; my $ws_defs = Data::OptList::mkopt([ - "instrument" => { + 'instrument' => { method => 'GET', required => [ qw(q) ], optional => [ qw(direct limit page timestamp) ] diff --git a/lib/MusicBrainz/Server/Controller/WS/js/Label.pm b/lib/MusicBrainz/Server/Controller/WS/js/Label.pm index 253d30a7485..da4fa26cdd3 100644 --- a/lib/MusicBrainz/Server/Controller/WS/js/Label.pm +++ b/lib/MusicBrainz/Server/Controller/WS/js/Label.pm @@ -8,7 +8,7 @@ with 'MusicBrainz::Server::Controller::WS::js::Role::Autocompletion::PrimaryAlia }; my $ws_defs = Data::OptList::mkopt([ - "label" => { + 'label' => { method => 'GET', required => [ qw(q) ], optional => [ qw(direct limit page timestamp) ] diff --git a/lib/MusicBrainz/Server/Controller/WS/js/ParseCoordinates.pm b/lib/MusicBrainz/Server/Controller/WS/js/ParseCoordinates.pm index 8169d3b0c25..794d66b4907 100644 --- a/lib/MusicBrainz/Server/Controller/WS/js/ParseCoordinates.pm +++ b/lib/MusicBrainz/Server/Controller/WS/js/ParseCoordinates.pm @@ -7,7 +7,7 @@ use MusicBrainz::Server::Data::Utils qw( trim ); use MusicBrainz::Server::Validation qw( validate_coordinates ); my $ws_defs = Data::OptList::mkopt([ - "parse-coordinates" => { + 'parse-coordinates' => { method => 'GET', required => [ qw(coordinates) ] } diff --git a/lib/MusicBrainz/Server/Controller/WS/js/Place.pm b/lib/MusicBrainz/Server/Controller/WS/js/Place.pm index b26833ed1a3..8057882e371 100644 --- a/lib/MusicBrainz/Server/Controller/WS/js/Place.pm +++ b/lib/MusicBrainz/Server/Controller/WS/js/Place.pm @@ -8,7 +8,7 @@ with 'MusicBrainz::Server::Controller::WS::js::Role::Autocompletion::PrimaryAlia }; my $ws_defs = Data::OptList::mkopt([ - "place" => { + 'place' => { method => 'GET', required => [ qw(q) ], optional => [ qw(direct limit page timestamp) ] diff --git a/lib/MusicBrainz/Server/Controller/WS/js/Recording.pm b/lib/MusicBrainz/Server/Controller/WS/js/Recording.pm index ddada6b7304..e7576d46648 100644 --- a/lib/MusicBrainz/Server/Controller/WS/js/Recording.pm +++ b/lib/MusicBrainz/Server/Controller/WS/js/Recording.pm @@ -8,7 +8,7 @@ with 'MusicBrainz::Server::Controller::WS::js::Role::Autocompletion::PrimaryAlia }; my $ws_defs = Data::OptList::mkopt([ - "recording" => { + 'recording' => { method => 'GET', required => [ qw(q) ], optional => [ qw(a r direct limit page timestamp) ] diff --git a/lib/MusicBrainz/Server/Controller/WS/js/Release.pm b/lib/MusicBrainz/Server/Controller/WS/js/Release.pm index f07f3bd6d1a..68978f069a2 100644 --- a/lib/MusicBrainz/Server/Controller/WS/js/Release.pm +++ b/lib/MusicBrainz/Server/Controller/WS/js/Release.pm @@ -12,12 +12,12 @@ with 'MusicBrainz::Server::Controller::WS::js::Role::Autocompletion::PrimaryAlia }; my $ws_defs = Data::OptList::mkopt([ - "release" => { + 'release' => { method => 'GET', required => [ qw(q) ], optional => [ qw(direct limit page timestamp) ] }, - "release" => { + 'release' => { method => 'GET', inc => [ qw(recordings rels) ] }, @@ -57,7 +57,7 @@ sub release : Chained('root') PathPart('release') Args(1) my ($self, $c, $gid) = @_; if (!is_guid($gid)) { - $c->stash->{error} = "Invalid mbid."; + $c->stash->{error} = 'Invalid mbid.'; $c->detach('bad_req'); } diff --git a/lib/MusicBrainz/Server/Controller/WS/js/ReleaseGroup.pm b/lib/MusicBrainz/Server/Controller/WS/js/ReleaseGroup.pm index f0b64bfeac4..73db8b8cba6 100644 --- a/lib/MusicBrainz/Server/Controller/WS/js/ReleaseGroup.pm +++ b/lib/MusicBrainz/Server/Controller/WS/js/ReleaseGroup.pm @@ -8,7 +8,7 @@ with 'MusicBrainz::Server::Controller::WS::js::Role::Autocompletion::PrimaryAlia }; my $ws_defs = Data::OptList::mkopt([ - "release-group" => { + 'release-group' => { method => 'GET', required => [ qw(q) ], optional => [ qw(direct limit page timestamp) ] diff --git a/lib/MusicBrainz/Server/Controller/WS/js/Series.pm b/lib/MusicBrainz/Server/Controller/WS/js/Series.pm index 021fa90f56b..e18ff210641 100644 --- a/lib/MusicBrainz/Server/Controller/WS/js/Series.pm +++ b/lib/MusicBrainz/Server/Controller/WS/js/Series.pm @@ -8,7 +8,7 @@ with 'MusicBrainz::Server::Controller::WS::js::Role::Autocompletion::PrimaryAlia }; my $ws_defs = Data::OptList::mkopt([ - "series" => { + 'series' => { method => 'GET', required => [ qw(q) ], optional => [ qw(direct limit page timestamp) ] diff --git a/lib/MusicBrainz/Server/Controller/WS/js/Work.pm b/lib/MusicBrainz/Server/Controller/WS/js/Work.pm index 82c7c9c9566..c1852d943ec 100644 --- a/lib/MusicBrainz/Server/Controller/WS/js/Work.pm +++ b/lib/MusicBrainz/Server/Controller/WS/js/Work.pm @@ -8,7 +8,7 @@ with 'MusicBrainz::Server::Controller::WS::js::Role::Autocompletion::PrimaryAlia }; my $ws_defs = Data::OptList::mkopt([ - "work" => { + 'work' => { method => 'GET', required => [ qw(q) ], optional => [ qw(direct limit page timestamp) ] diff --git a/lib/MusicBrainz/Server/ControllerBase/WS/2.pm b/lib/MusicBrainz/Server/ControllerBase/WS/2.pm index 8f011728374..1751eda8efd 100644 --- a/lib/MusicBrainz/Server/ControllerBase/WS/2.pm +++ b/lib/MusicBrainz/Server/ControllerBase/WS/2.pm @@ -47,7 +47,7 @@ sub deny_readonly : Private if (DBDefs->DB_READ_ONLY) { $c->res->status(503); $c->res->content_type($c->stash->{serializer}->mime_type . '; charset=utf-8'); - $c->res->body($c->stash->{serializer}->output_error("The database is currently in readonly mode and cannot handle your request")); + $c->res->body($c->stash->{serializer}->output_error('The database is currently in readonly mode and cannot handle your request')); $c->detach; } } @@ -64,7 +64,7 @@ sub forbidden : Private my ($self, $c) = @_; $c->res->status(401); $c->res->content_type($c->stash->{serializer}->mime_type . '; charset=utf-8'); - $c->res->body($c->stash->{serializer}->output_error("You are not authorized to access this resource.")); + $c->res->body($c->stash->{serializer}->output_error('You are not authorized to access this resource.')); $c->detach; } @@ -73,10 +73,10 @@ sub unauthorized : Private my ($self, $c) = @_; $c->res->status(401); $c->res->content_type($c->stash->{serializer}->mime_type . '; charset=utf-8'); - $c->res->body($c->stash->{serializer}->output_error("Your credentials ". - "could not be verified. Either you supplied the wrong credentials ". - "(e.g., bad password), or your client doesn't understand how to ". - "supply the credentials required.")); + $c->res->body($c->stash->{serializer}->output_error('Your credentials '. + 'could not be verified. Either you supplied the wrong credentials '. + q{(e.g., bad password), or your client doesn't understand how to }. + 'supply the credentials required.')); $c->detach; } @@ -85,13 +85,13 @@ sub not_found : Private my ($self, $c) = @_; $c->res->status(404); $c->res->content_type($c->stash->{serializer}->mime_type . '; charset=utf-8'); - $c->res->body($c->stash->{serializer}->output_error("Not Found")); + $c->res->body($c->stash->{serializer}->output_error('Not Found')); } sub invalid_mbid : Private { my ($self, $c, $id) = @_; - $c->stash->{error} = "Invalid mbid."; + $c->stash->{error} = 'Invalid mbid.'; $c->detach('bad_req'); } @@ -111,7 +111,7 @@ sub not_implemented : Private $c->res->status(501); $c->res->content_type($c->stash->{serializer}->mime_type . '; charset=utf-8'); - $c->res->body($c->stash->{serializer}->output_error("This hasn't been implemented yet.")); + $c->res->body($c->stash->{serializer}->output_error(q(This hasn't been implemented yet.))); } sub begin : Private { @@ -123,7 +123,7 @@ sub begin : Private { sub end : Private { } -sub root : Chained('/') PathPart("ws/2") CaptureArgs(0) +sub root : Chained('/') PathPart('ws/2') CaptureArgs(0) { my ($self, $c) = @_; @@ -298,7 +298,7 @@ sub _limit_and_offset if (!(is_nat($limit) && is_nat($offset))) { $self->_error( - $c, "The 'limit' and 'offset' parameters must be positive integers" + $c, q(The 'limit' and 'offset' parameters must be positive integers) ); } @@ -531,7 +531,7 @@ sub _validate_post $c->detach; } - $self->_error($c, "Please specify the name and version number of your client application.") + $self->_error($c, 'Please specify the name and version number of your client application.') unless $c->req->params->{client}; } @@ -547,13 +547,13 @@ sub _validate_entity if (!$gid || !is_guid($gid)) { - $c->stash->{error} = "Invalid mbid."; + $c->stash->{error} = 'Invalid mbid.'; $c->detach('bad_req'); } if (!$model) { - $c->stash->{error} = "Invalid entity type."; + $c->stash->{error} = 'Invalid entity type.'; $c->detach('bad_req'); } @@ -581,7 +581,7 @@ sub load_relationships { if ($c->stash->{inc}->work_level_rels) { - push(@entities_with_rels, @works); + push(@entities_with_rels, @works); # Avoid returning recording-work relationships for other recordings $c->model('Relationship')->load_subset_cardinal($types, @works); } diff --git a/lib/MusicBrainz/Server/ControllerUtils/SSL.pm b/lib/MusicBrainz/Server/ControllerUtils/SSL.pm index e2ff2a1ff21..03c53fcd594 100644 --- a/lib/MusicBrainz/Server/ControllerUtils/SSL.pm +++ b/lib/MusicBrainz/Server/ControllerUtils/SSL.pm @@ -13,7 +13,7 @@ sub ensure_ssl { if (DBDefs->SSL_REDIRECTS_ENABLED && !$c->request->secure) { $c->response->redirect( - "https://".DBDefs->WEB_SERVER_SSL.$c->request->env->{REQUEST_URI}); + 'https://'.DBDefs->WEB_SERVER_SSL.$c->request->env->{REQUEST_URI}); $c->detach; } } diff --git a/lib/MusicBrainz/Server/CoverArt/Provider/WebService/Amazon.pm b/lib/MusicBrainz/Server/CoverArt/Provider/WebService/Amazon.pm index 04e94fc3142..1fe6860bc45 100644 --- a/lib/MusicBrainz/Server/CoverArt/Provider/WebService/Amazon.pm +++ b/lib/MusicBrainz/Server/CoverArt/Provider/WebService/Amazon.pm @@ -82,11 +82,11 @@ sub lookup_cover_art } my $url = "http://$end_point/onca/xml?" . - "Service=AWSECommerceService&" . - "Operation=ItemLookup&" . + 'Service=AWSECommerceService&' . + 'Operation=ItemLookup&' . "ItemId=$asin&" . - "Version=2011-08-01&" . - "ResponseGroup=Images"; + 'Version=2011-08-01&' . + 'ResponseGroup=Images'; my $cover_art = $self->_lookup_coverart($url) or return; $cover_art->asin($asin); @@ -105,7 +105,7 @@ sub fallback_meta { sub _lookup_coverart { my ($self, $url) = @_; - $url .= "&AssociateTag=" . DBDefs->AMAZON_ASSOCIATE_TAG; + $url .= '&AssociateTag=' . DBDefs->AMAZON_ASSOCIATE_TAG; $url = $self->_aws_signature->addRESTSecret($url); # Respect Amazon SLA diff --git a/lib/MusicBrainz/Server/Data/Alias.pm b/lib/MusicBrainz/Server/Data/Alias.pm index 2dc0a836884..d42397de4f8 100644 --- a/lib/MusicBrainz/Server/Data/Alias.pm +++ b/lib/MusicBrainz/Server/Data/Alias.pm @@ -78,9 +78,9 @@ sub find_by_entity_ids my $key = $self->type; - my $query = "SELECT $key parent_id, " . $self->_columns . " - FROM " . $self->_table . " - WHERE $key IN (" . placeholders(@ids) . ") + my $query = "SELECT $key parent_id, " . $self->_columns . ' + FROM ' . $self->_table . " + WHERE $key IN (" . placeholders(@ids) . ') ORDER BY locale NULLS LAST, begin_date_year NULLS LAST, begin_date_month NULLS LAST, @@ -89,7 +89,7 @@ sub find_by_entity_ids end_date_month NULLS LAST, end_date_day NULLS LAST, sort_name COLLATE musicbrainz, - name COLLATE musicbrainz"; + name COLLATE musicbrainz'; my %ret = map { $_ => [] } @ids; @@ -133,8 +133,8 @@ sub load sub delete { my ($self, @ids) = @_; - my $query = "DELETE FROM " . $self->table . - " WHERE id IN (" . placeholders(@ids) . ")"; + my $query = 'DELETE FROM ' . $self->table . + ' WHERE id IN (' . placeholders(@ids) . ')'; $self->sql->do($query, @ids); return 1; } @@ -142,8 +142,8 @@ sub delete sub delete_entities { my ($self, @ids) = @_; - my $query = "DELETE FROM " . $self->table . - " WHERE " . $self->type . " IN (" . placeholders(@ids) . ")"; + my $query = 'DELETE FROM ' . $self->table . + ' WHERE ' . $self->type . ' IN (' . placeholders(@ids) . ')'; $self->sql->do($query, @ids); return 1; } @@ -165,8 +165,8 @@ sub insert ended => $hash->{ended}, }; - add_partial_date_to_row($row, $hash->{begin_date}, "begin_date"); - add_partial_date_to_row($row, $hash->{end_date}, "end_date"); + add_partial_date_to_row($row, $hash->{begin_date}, 'begin_date'); + add_partial_date_to_row($row, $hash->{end_date}, 'end_date'); push @created, $class->new(id => $self->sql->insert_row($table, $row, 'id')); } @@ -208,7 +208,7 @@ sub merge # Update all aliases to the new entity $self->sql->do("UPDATE $table SET $type = ? - WHERE $type IN (".placeholders(@old_ids).")", $new_id, @old_ids); + WHERE $type IN (".placeholders(@old_ids).')', $new_id, @old_ids); # Insert any aliases from old entity names my $sortnamecol = ($type eq 'artist') ? 'sort_name' : 'name'; @@ -238,9 +238,9 @@ sub update my %row = %$alias_hash; delete @row{qw( begin_date end_date )}; - add_partial_date_to_row(\%row, $alias_hash->{begin_date}, "begin_date") + add_partial_date_to_row(\%row, $alias_hash->{begin_date}, 'begin_date') if exists $alias_hash->{begin_date}; - add_partial_date_to_row(\%row, $alias_hash->{end_date}, "end_date") + add_partial_date_to_row(\%row, $alias_hash->{end_date}, 'end_date') if exists $alias_hash->{end_date}; $row{type} = delete $row{type_id} if exists $row{type_id}; @@ -255,8 +255,8 @@ sub exists { return $self->sql->select_single_value( "SELECT EXISTS ( SELECT TRUE - FROM $table " . - "WHERE name IS NOT DISTINCT FROM ? + FROM $table + WHERE name IS NOT DISTINCT FROM ? AND locale IS NOT DISTINCT FROM ? AND type IS NOT DISTINCT FROM ? AND $table.id IS DISTINCT FROM ? diff --git a/lib/MusicBrainz/Server/Data/Application.pm b/lib/MusicBrainz/Server/Data/Application.pm index b809b3e5ceb..a276f094664 100644 --- a/lib/MusicBrainz/Server/Data/Application.pm +++ b/lib/MusicBrainz/Server/Data/Application.pm @@ -55,10 +55,10 @@ sub get_by_oauth_id sub find_by_owner { my ($self, $editor_id, $limit, $offset) = @_; - my $query = "SELECT " . $self->_columns . " - FROM " . $self->_table . " + my $query = 'SELECT ' . $self->_columns . ' + FROM ' . $self->_table . ' WHERE owner = ? - ORDER BY id"; + ORDER BY id'; $self->query_to_list_limited($query, [$editor_id], $limit, $offset); } @@ -81,7 +81,7 @@ before 'delete' => sub sub delete_editor { my ($self, $editor_id) = @_; - $self->sql->do("DELETE FROM " . $self->_table . " WHERE owner = ?", $editor_id); + $self->sql->do('DELETE FROM ' . $self->_table . ' WHERE owner = ?', $editor_id); } __PACKAGE__->meta->make_immutable; diff --git a/lib/MusicBrainz/Server/Data/Area.pm b/lib/MusicBrainz/Server/Data/Area.pm index 40115ef90b4..cfad2d94153 100644 --- a/lib/MusicBrainz/Server/Data/Area.pm +++ b/lib/MusicBrainz/Server/Data/Area.pm @@ -104,7 +104,7 @@ sub _set_codes $self->sql->do("DELETE FROM $type WHERE area = ?", $area); $self->sql->do( "INSERT INTO $type (area, code) VALUES " . - join(', ', ("(?, ?)") x @$codes), + join(', ', ('(?, ?)') x @$codes), map { $area, $_ } @$codes ) if @$codes; } @@ -152,7 +152,7 @@ sub can_delete return 0 if $self->is_release_country_area($area_id); my $used_in_relationship = used_in_relationship($self->c, area => 'area_row.id'); - return 1 if $self->sql->select_single_value(<<~"EOSQL", $area_id, $STATUS_OPEN); + return 1 if $self->sql->select_single_value(<<~"SQL", $area_id, $STATUS_OPEN); SELECT TRUE FROM area area_row WHERE id = ? @@ -179,7 +179,7 @@ sub can_delete ) OR $used_in_relationship ) - EOSQL + SQL return 0; } @@ -195,7 +195,7 @@ sub delete $self->tags->delete(@area_ids); $self->remove_gid_redirects(@area_ids); for my $code_table (@CODE_TYPES) { - $self->sql->do("DELETE FROM $code_table WHERE area IN (" . placeholders(@area_ids) . ")", @area_ids); + $self->sql->do("DELETE FROM $code_table WHERE area IN (" . placeholders(@area_ids) . ')', @area_ids); } $self->delete_returning_gids(@area_ids); return 1; @@ -226,13 +226,13 @@ sub _merge_impl ); for my $update ( - [ artist => "area" ], - [ artist => "begin_area" ], - [ artist => "end_area" ], - [ label => "area" ], - [ place => "area" ], - [ editor => "area" ], - [ release_country => "country" ] + [ artist => 'area' ], + [ artist => 'begin_area' ], + [ artist => 'end_area' ], + [ label => 'area' ], + [ place => 'area' ], + [ editor => 'area' ], + [ release_country => 'country' ] ) { my ($table, $column) = @$update; $self->sql->do( @@ -311,10 +311,10 @@ sub load_ids my @gids = map { $_->gid } @areas; return () unless @gids; - my $query = " + my $query = ' SELECT gid, id FROM area - WHERE gid IN (" . placeholders(@gids) . ") - "; + WHERE gid IN (' . placeholders(@gids) . ') + '; my %map = map { $_->[0] => $_->[1] } @{ $self->sql->select_list_of_lists($query, @gids) }; @@ -338,10 +338,10 @@ sub get_by_iso_3166_3 { sub _get_by_iso { my ($self, $table, @codes) = @_; - my $query = "SELECT " . $self->_columns . - " FROM " . $self->_table . + my $query = 'SELECT ' . $self->_columns . + ' FROM ' . $self->_table . " JOIN ${table} c ON c.area = area.id" . - " WHERE c.code = any(?)"; + ' WHERE c.code = any(?)'; my %ret = map { $_ => undef } @codes; for my $row (@{ $self->sql->select_list_of_hashes($query, \@codes) }) { @@ -358,12 +358,12 @@ sub _get_by_iso { sub _order_by { my ($self, $order) = @_; - my $order_by = order_by($order, "name", { - "name" => sub { - return "name COLLATE musicbrainz" + my $order_by = order_by($order, 'name', { + 'name' => sub { + return 'name COLLATE musicbrainz' }, - "type" => sub { - return "type, name COLLATE musicbrainz" + 'type' => sub { + return 'type, name COLLATE musicbrainz' } }); diff --git a/lib/MusicBrainz/Server/Data/Artist.pm b/lib/MusicBrainz/Server/Data/Artist.pm index 7e2893abec6..ae8a4bd7a8c 100644 --- a/lib/MusicBrainz/Server/Data/Artist.pm +++ b/lib/MusicBrainz/Server/Data/Artist.pm @@ -97,11 +97,11 @@ after '_delete_from_cache' => sub { sub find_by_subscribed_editor { my ($self, $editor_id, $limit, $offset) = @_; - my $query = "SELECT " . $self->_columns . " - FROM " . $self->_table . " + my $query = 'SELECT ' . $self->_columns . ' + FROM ' . $self->_table . ' JOIN editor_subscribe_artist s ON artist.id = s.artist WHERE s.editor = ? - ORDER BY artist.sort_name COLLATE musicbrainz, artist.id"; + ORDER BY artist.sort_name COLLATE musicbrainz, artist.id'; $self->query_to_list_limited($query, [$editor_id], $limit, $offset); } @@ -111,8 +111,8 @@ sub find_by_area { $containment_query, @containment_query_args, ) = get_area_containment_query('$2', 'any(array[area, begin_area, end_area])', check_all_levels => 1); - my $query = "SELECT " . $self->_columns . " - FROM " . $self->_table . " + my $query = 'SELECT ' . $self->_columns . ' + FROM ' . $self->_table . " WHERE \$1 IN (area, begin_area, end_area) OR EXISTS ( SELECT 1 FROM ($containment_query) ac WHERE ac.descendant IN (area, begin_area, end_area) AND ac.parent = \$1 @@ -128,9 +128,9 @@ sub find_by_instrument { my ($self, $instrument_id, $limit, $offset) = @_; my $query = - "SELECT " . $self->_columns . ", + 'SELECT ' . $self->_columns . q(, array_agg(json_build_object('typeName', link_type.name, 'credit', lac.credited_as)) AS instrument_credits_and_rel_types - FROM " . $self->_table . " + FROM ) . $self->_table . ' JOIN ( SELECT * FROM l_artist_artist UNION ALL @@ -149,7 +149,7 @@ sub find_by_instrument { ) WHERE instrument.id = ? GROUP BY artist.id - ORDER BY artist.sort_name COLLATE musicbrainz"; + ORDER BY artist.sort_name COLLATE musicbrainz'; $self->query_to_list_limited( $query, @@ -167,20 +167,20 @@ sub find_by_instrument { sub find_by_recording { my ($self, $recording_id, $limit, $offset) = @_; - my $query = "SELECT " . $self->_columns . " - FROM " . $self->_table . " + my $query = 'SELECT ' . $self->_columns . ' + FROM ' . $self->_table . ' JOIN artist_credit_name acn ON acn.artist = artist.id JOIN recording ON recording.artist_credit = acn.artist_credit WHERE recording.id = ? - ORDER BY artist.name COLLATE musicbrainz, artist.id"; + ORDER BY artist.name COLLATE musicbrainz, artist.id'; $self->query_to_list_limited($query, [$recording_id], $limit, $offset); } sub find_by_release { my ($self, $release_id, $limit, $offset) = @_; - my $query = "SELECT " . $self->_columns . " - FROM " . $self->_table . " + my $query = 'SELECT ' . $self->_columns . ' + FROM ' . $self->_table . ' WHERE artist.id IN (SELECT artist.id FROM artist JOIN artist_credit_name acn ON acn.artist = artist.id @@ -192,67 +192,67 @@ sub find_by_release JOIN artist_credit_name acn ON acn.artist = artist.id JOIN release ON release.artist_credit = acn.artist_credit WHERE release.id = ?) - ORDER BY artist.name COLLATE musicbrainz, artist.id"; + ORDER BY artist.name COLLATE musicbrainz, artist.id'; $self->query_to_list_limited($query, [($release_id) x 2], $limit, $offset); } sub find_by_release_group { my ($self, $recording_id, $limit, $offset) = @_; - my $query = "SELECT " . $self->_columns . " - FROM " . $self->_table . " + my $query = 'SELECT ' . $self->_columns . ' + FROM ' . $self->_table . ' JOIN artist_credit_name acn ON acn.artist = artist.id JOIN release_group ON release_group.artist_credit = acn.artist_credit WHERE release_group.id = ? - ORDER BY artist.name COLLATE musicbrainz, artist.id"; + ORDER BY artist.name COLLATE musicbrainz, artist.id'; $self->query_to_list_limited($query, [$recording_id], $limit, $offset); } sub find_by_work { my ($self, $work_id, $limit, $offset) = @_; - my $query = "SELECT DISTINCT name COLLATE musicbrainz name_collate, s.* + my $query = 'SELECT DISTINCT name COLLATE musicbrainz name_collate, s.* FROM ( - SELECT " . $self->_columns . " FROM ". $self->_table . " + SELECT ' . $self->_columns . ' FROM '. $self->_table . ' JOIN artist_credit_name acn ON acn.artist = artist.id JOIN recording ON recording.artist_credit = acn.artist_credit JOIN l_recording_work lrw ON lrw.entity0 = recording.id WHERE lrw.entity1 = ? UNION ALL - SELECT " . $self->_columns . " FROM ". $self->_table . " + SELECT ' . $self->_columns . ' FROM '. $self->_table . ' JOIN l_artist_work law ON law.entity0 = artist.id WHERE law.entity1 = ? ) s - ORDER BY name COLLATE musicbrainz, id"; + ORDER BY name COLLATE musicbrainz, id'; $self->query_to_list_limited($query, [($work_id) x 2], $limit, $offset); } sub _order_by { my ($self, $order) = @_; - my $order_by = order_by($order, "name", { - "name" => sub { - return "sort_name COLLATE musicbrainz" + my $order_by = order_by($order, 'name', { + 'name' => sub { + return 'sort_name COLLATE musicbrainz' }, - "area" => sub { - return "area, name COLLATE musicbrainz" + 'area' => sub { + return 'area, name COLLATE musicbrainz' }, - "gender" => sub { - return "gender, sort_name COLLATE musicbrainz" + 'gender' => sub { + return 'gender, sort_name COLLATE musicbrainz' }, - "begin_date" => sub { - return "begin_date_year, begin_date_month, begin_date_day, name COLLATE musicbrainz" + 'begin_date' => sub { + return 'begin_date_year, begin_date_month, begin_date_day, name COLLATE musicbrainz' }, - "begin_area" => sub { - return "begin_area, name COLLATE musicbrainz" + 'begin_area' => sub { + return 'begin_area, name COLLATE musicbrainz' }, - "end_date" => sub { - return "end_date_year, end_date_month, end_date_day, name COLLATE musicbrainz" + 'end_date' => sub { + return 'end_date_year, end_date_month, end_date_day, name COLLATE musicbrainz' }, - "end_area" => sub { - return "end_area, name COLLATE musicbrainz" + 'end_area' => sub { + return 'end_area, name COLLATE musicbrainz' }, - "type" => sub { - return "type, sort_name COLLATE musicbrainz" + 'type' => sub { + return 'type, sort_name COLLATE musicbrainz' } }); @@ -297,7 +297,7 @@ sub can_split # These AND NOT EXISTS clauses are ordered by my estimated likelihood of a # relationship existing for a collaboration, as postgresql will not execute # the later clauses if an earlier one has already excluded the lone artist row. - my $can_split = $self->sql->select_single_value(<<~'EOSQL', $artist_id); + my $can_split = $self->sql->select_single_value(<<~'SQL', $artist_id); SELECT TRUE FROM artist WHERE id = ? AND NOT EXISTS (SELECT TRUE FROM l_artist_url lau WHERE lau.entity0 = artist.id) AND NOT EXISTS ( @@ -320,7 +320,7 @@ sub can_split AND NOT EXISTS (SELECT TRUE FROM l_artist_series las WHERE las.entity0 = artist.id) AND NOT EXISTS (SELECT TRUE FROM l_artist_instrument lai WHERE lai.entity0 = artist.id) AND NOT EXISTS (SELECT TRUE FROM l_area_artist lara WHERE lara.entity1 = artist.id) - EOSQL + SQL return $can_split; } @@ -496,7 +496,7 @@ sub load_related_info { sub load_meta { my $self = shift; - MusicBrainz::Server::Data::Utils::load_meta($self->c, "artist_meta", sub { + MusicBrainz::Server::Data::Utils::load_meta($self->c, 'artist_meta', sub { my ($obj, $row) = @_; $obj->rating($row->{rating}) if defined $row->{rating}; $obj->rating_count($row->{rating_count}) if defined $row->{rating_count}; @@ -529,7 +529,7 @@ sub is_empty { my ($self, $artist_id) = @_; my $used_in_relationship = used_in_relationship($self->c, artist => 'artist_row.id'); - return $self->sql->select_single_value(<<~"EOSQL", $artist_id, $STATUS_OPEN); + return $self->sql->select_single_value(<<~"SQL", $artist_id, $STATUS_OPEN); SELECT TRUE FROM artist artist_row WHERE id = ? @@ -546,7 +546,7 @@ sub is_empty { ) OR $used_in_relationship ) - EOSQL + SQL } __PACKAGE__->meta->make_immutable; diff --git a/lib/MusicBrainz/Server/Data/ArtistCredit.pm b/lib/MusicBrainz/Server/Data/ArtistCredit.pm index d05ceb220c7..906cefe180e 100644 --- a/lib/MusicBrainz/Server/Data/ArtistCredit.pm +++ b/lib/MusicBrainz/Server/Data/ArtistCredit.pm @@ -24,13 +24,13 @@ sub get_by_ids { my ($self, @ids) = @_; my $artist_columns = $self->c->model('Artist')->_columns; - my $query = "SELECT artist, artist_credit_name.name AS ac_name, join_phrase, artist_credit, " . - $artist_columns . ", ac.edits_pending AS ac_edits_pending " . - "FROM artist_credit_name " . - "JOIN artist ON artist.id=artist_credit_name.artist " . - "JOIN artist_credit ac ON ac.id = artist_credit_name.artist_credit " . - "WHERE artist_credit IN (" . placeholders(@ids) . ") " . - "ORDER BY artist_credit, position"; + my $query = "SELECT artist, artist_credit_name.name AS ac_name, join_phrase, artist_credit, + $artist_columns, ac.edits_pending AS ac_edits_pending + FROM artist_credit_name + JOIN artist ON artist.id=artist_credit_name.artist + JOIN artist_credit ac ON ac.id = artist_credit_name.artist_credit + WHERE artist_credit IN (" . placeholders(@ids) . ') + ORDER BY artist_credit, position'; my %result; my %counts; @@ -114,7 +114,7 @@ sub _find my @credits = map { $_->{name} } @names; my @join_phrases = map { $_->{join_phrase} } @names; - my $name = ""; + my $name = ''; my (@joins, @conditions, @args); for my $i (@positions) { my $ac_name = $names[$i]; @@ -138,9 +138,9 @@ sub _find $name .= $ac_name->{join_phrase} if $ac_name->{join_phrase}; } - my $query = "SELECT ac.id FROM artist_credit ac " . - join(" ", @joins) . - " WHERE " . join(" AND ", @conditions) . " AND ac.artist_count = ?"; + my $query = 'SELECT ac.id FROM artist_credit ac ' . + join(' ', @joins) . + ' WHERE ' . join(' AND ', @conditions) . ' AND ac.artist_count = ?'; my $id = $self->sql->select_single_value($query, @args, scalar @credits); @@ -346,7 +346,7 @@ sub related_entities { } my $track_ac_releases = $self->c->sql->select_single_column_array( - "SELECT DISTINCT medium.release FROM track JOIN medium ON track.medium = medium.id WHERE track.artist_credit = ?", + 'SELECT DISTINCT medium.release FROM track JOIN medium ON track.medium = medium.id WHERE track.artist_credit = ?', $ac_id ); diff --git a/lib/MusicBrainz/Server/Data/Artwork.pm b/lib/MusicBrainz/Server/Data/Artwork.pm index 74e6cf2bb93..0619592a36c 100644 --- a/lib/MusicBrainz/Server/Data/Artwork.pm +++ b/lib/MusicBrainz/Server/Data/Artwork.pm @@ -75,7 +75,7 @@ sub find_by_release my @ids = keys %id_to_release; return unless @ids; # nothing to do - my $query = "SELECT + my $query = 'SELECT cover_art_archive.index_listing.id, cover_art_archive.index_listing.release, cover_art_archive.index_listing.comment, @@ -93,8 +93,8 @@ sub find_by_release JOIN cover_art_archive.image_type ON cover_art_archive.index_listing.mime_type = cover_art_archive.image_type.mime_type WHERE cover_art_archive.index_listing.release - IN (" . placeholders(@ids) . ") - ORDER BY cover_art_archive.index_listing.ordering"; + IN (' . placeholders(@ids) . ') + ORDER BY cover_art_archive.index_listing.ordering'; my @artwork = $self->query_to_list($query, \@ids); for my $image (@artwork) { @@ -111,7 +111,7 @@ sub find_front_cover_by_release my @ids = keys %id_to_release; return unless @ids; # nothing to do - my $query = "SELECT + my $query = 'SELECT cover_art_archive.index_listing.id, cover_art_archive.index_listing.release, cover_art_archive.index_listing.comment, @@ -131,8 +131,8 @@ sub find_front_cover_by_release JOIN cover_art_archive.image_type ON cover_art_archive.index_listing.mime_type = cover_art_archive.image_type.mime_type WHERE cover_art_archive.index_listing.release - IN (" . placeholders(@ids) . ") - AND is_front = true"; + IN (' . placeholders(@ids) . ') + AND is_front = true'; my @artwork = $self->query_to_list($query, \@ids); foreach my $image (@artwork) { @@ -150,9 +150,9 @@ sub find_count_by_release my ($self, $release_id) = @_; return unless $release_id; # nothing to do - my $query = "SELECT count(*) + my $query = 'SELECT count(*) FROM cover_art_archive.index_listing - WHERE cover_art_archive.index_listing.release = ?"; + WHERE cover_art_archive.index_listing.release = ?'; return $self->sql->select_single_value($query, $release_id); } @@ -164,7 +164,7 @@ sub load_for_release_groups my @ids = keys %id_to_rg; return unless @ids; # nothing to do - my $query = "SELECT + my $query = 'SELECT DISTINCT ON (release.release_group) cover_art_archive.index_listing.id, cover_art_archive.index_listing.release, @@ -194,12 +194,12 @@ sub load_for_release_groups ON release_group_cover_art.release = musicbrainz.release.id JOIN cover_art_archive.image_type ON cover_art_archive.index_listing.mime_type = cover_art_archive.image_type.mime_type - WHERE release.release_group IN (" . placeholders(@ids) . ") + WHERE release.release_group IN (' . placeholders(@ids) . q{) AND is_front = true AND cover_art_presence != 'darkened' ORDER BY release.release_group, release_group_cover_art.release, release_event.date_year, release_event.date_month, - release_event.date_day"; + release_event.date_day}; for my $row (@{ $self->sql->select_list_of_hashes($query, @ids) }) { my $artwork = $self->_new_from_row($row); diff --git a/lib/MusicBrainz/Server/Data/AutoEditorElection.pm b/lib/MusicBrainz/Server/Data/AutoEditorElection.pm index a99f4fbf2ff..012c9fd641c 100644 --- a/lib/MusicBrainz/Server/Data/AutoEditorElection.pm +++ b/lib/MusicBrainz/Server/Data/AutoEditorElection.pm @@ -55,11 +55,11 @@ sub nominate my $sql = $self->c->sql; return Sql::run_in_transaction(sub { - $sql->do("LOCK TABLE autoeditor_election IN EXCLUSIVE MODE"); + $sql->do('LOCK TABLE autoeditor_election IN EXCLUSIVE MODE'); - my $id = $sql->select_single_value(" - SELECT id FROM " . $self->_table . " - WHERE candidate = ? AND status IN (?, ?, ?)", + my $id = $sql->select_single_value(' + SELECT id FROM ' . $self->_table . ' + WHERE candidate = ? AND status IN (?, ?, ?)', $candidate->id, $ELECTION_SECONDER_1, $ELECTION_SECONDER_2, $ELECTION_OPEN); return $self->_entity_class->new( id => $id ) @@ -91,7 +91,7 @@ sub second $election = $self->get_by_id_locked($election->id); - die "Forbidden" unless $election->can_second($seconder); + die 'Forbidden' unless $election->can_second($seconder); my %update; if ($election->status == $ELECTION_SECONDER_1) { @@ -154,9 +154,9 @@ sub vote die 'Forbidden' unless $election->can_vote($voter); - my $old_vote = $sql->select_single_row_hash(" + my $old_vote = $sql->select_single_row_hash(' SELECT id, vote FROM autoeditor_election_vote - WHERE autoeditor_election = ? AND voter = ?", + WHERE autoeditor_election = ? AND voter = ?', $election->id, $voter->id); if (defined $old_vote && $old_vote->{vote} == $vote) { @@ -164,13 +164,13 @@ sub vote } if (defined $old_vote) { - $self->sql->update_row("autoeditor_election_vote", { + $self->sql->update_row('autoeditor_election_vote', { vote => $vote, vote_time => DateTime->now(), }, { id => $old_vote->{id} }); } else { - $self->sql->insert_row("autoeditor_election_vote", { + $self->sql->insert_row('autoeditor_election_vote', { autoeditor_election => $election->id, voter => $voter->id, vote => $vote, @@ -204,7 +204,7 @@ sub try_to_close my $sql = $self->sql; return Sql::run_in_transaction(sub { - $sql->do("LOCK TABLE autoeditor_election IN EXCLUSIVE MODE"); + $sql->do('LOCK TABLE autoeditor_election IN EXCLUSIVE MODE'); $self->_try_to_close_timeout(); $self->_try_to_close_voting(); @@ -216,10 +216,10 @@ sub _try_to_close_timeout { my ($self) = @_; - my $query = "SELECT " . $self->_columns . " - FROM " . $self->_table . " + my $query = 'SELECT ' . $self->_columns . ' + FROM ' . $self->_table . ' WHERE now() - propose_time > INTERVAL ? AND - status IN (?, ?)"; + status IN (?, ?)'; my @elections = $self->query_to_list( $query, [$PROPOSAL_TIMEOUT, $ELECTION_SECONDER_1, $ELECTION_SECONDER_2], @@ -237,10 +237,10 @@ sub _try_to_close_voting { my ($self) = @_; - my $query = "SELECT " . $self->_columns . " - FROM " . $self->_table . " + my $query = 'SELECT ' . $self->_columns . ' + FROM ' . $self->_table . ' WHERE now() - propose_time > INTERVAL ? AND - status = ?"; + status = ?'; my @elections = $self->query_to_list( $query, [$VOTING_TIMEOUT, $ELECTION_OPEN], @@ -298,8 +298,8 @@ sub load_votes my ($self, $election) = @_; my $sql = $self->c->sql; - my $query = "SELECT * FROM autoeditor_election_vote - WHERE autoeditor_election = ? ORDER BY vote_time"; + my $query = 'SELECT * FROM autoeditor_election_vote + WHERE autoeditor_election = ? ORDER BY vote_time'; for my $row (@{ $self->sql->select_list_of_hashes($query, $election->id) }) { my $vote = MusicBrainz::Server::Entity::AutoEditorElectionVote->new({ election_id => $election->id, @@ -315,9 +315,9 @@ sub load_votes sub get_all { my ($self) = @_; - my $query = "SELECT " . $self->_columns . " - FROM " . $self->_table . " - ORDER BY propose_time DESC"; + my $query = 'SELECT ' . $self->_columns . ' + FROM ' . $self->_table . ' + ORDER BY propose_time DESC'; $self->query_to_list($query); } diff --git a/lib/MusicBrainz/Server/Data/Blog.pm b/lib/MusicBrainz/Server/Data/Blog.pm index a08fdb48c14..85e3cb4ddd1 100644 --- a/lib/MusicBrainz/Server/Data/Blog.pm +++ b/lib/MusicBrainz/Server/Data/Blog.pm @@ -22,7 +22,7 @@ sub get_latest_entries { if (!$entries) { my $xml; try { - $xml = $self->c->lwp->get("http://blog.metabrainz.org/?feed=rss2"); + $xml = $self->c->lwp->get('http://blog.metabrainz.org/?feed=rss2'); }; return undef unless $xml && $xml->is_success; diff --git a/lib/MusicBrainz/Server/Data/CDStub.pm b/lib/MusicBrainz/Server/Data/CDStub.pm index 2cf6bf0b5bd..ba034047719 100644 --- a/lib/MusicBrainz/Server/Data/CDStub.pm +++ b/lib/MusicBrainz/Server/Data/CDStub.pm @@ -77,9 +77,9 @@ sub load sub load_top_cdstubs { my ($self, $limit, $offset) = @_; - my $query = "SELECT " . $self->_columns . " - FROM " . $self->_table . " - ORDER BY lookup_count desc, modify_count DESC"; + my $query = 'SELECT ' . $self->_columns . ' + FROM ' . $self->_table . ' + ORDER BY lookup_count desc, modify_count DESC'; $self->query_to_list_limited($query, [], $LIMIT_TOP_CDSTUBS, $offset); } diff --git a/lib/MusicBrainz/Server/Data/CDStubTrack.pm b/lib/MusicBrainz/Server/Data/CDStubTrack.pm index edea51b11a9..4baca8ee82c 100644 --- a/lib/MusicBrainz/Server/Data/CDStubTrack.pm +++ b/lib/MusicBrainz/Server/Data/CDStubTrack.pm @@ -47,10 +47,10 @@ sub load_for_cdstub my %id_to_cdstub = map { $_->id => $_ } @cdstubs; my @ids = keys %id_to_cdstub; return unless @ids; # nothing to do - my $query = "SELECT " . $self->_columns . " - FROM " . $self->_table . " - WHERE release IN (" . placeholders(@ids) . ") - ORDER BY release, sequence"; + my $query = 'SELECT ' . $self->_columns . ' + FROM ' . $self->_table . ' + WHERE release IN (' . placeholders(@ids) . ') + ORDER BY release, sequence'; my @tracks = $self->query_to_list($query, \@ids); foreach my $track (@tracks) { $id_to_cdstub{$track->cdstub_id}->add_track($track); diff --git a/lib/MusicBrainz/Server/Data/CDTOC.pm b/lib/MusicBrainz/Server/Data/CDTOC.pm index f9dea405e24..f8025999e5e 100644 --- a/lib/MusicBrainz/Server/Data/CDTOC.pm +++ b/lib/MusicBrainz/Server/Data/CDTOC.pm @@ -39,16 +39,16 @@ sub _entity_class sub get_by_discid { my ($self, $discid) = @_; - my @result = $self->_get_by_keys("discid", $discid); + my @result = $self->_get_by_keys('discid', $discid); return $result[0]; } sub find_by_freedbid { my ($self, $freedbid) = @_; - my $query = "SELECT " . $self->_columns . " - FROM " . $self->_table . " - WHERE freedb_id = ?"; + my $query = 'SELECT ' . $self->_columns . ' + FROM ' . $self->_table . ' + WHERE freedb_id = ?'; $self->query_to_list($query, [$freedbid]); } @@ -64,7 +64,7 @@ sub find_or_insert my $cdtoc = MusicBrainz::Server::Entity::CDTOC->new_from_toc($toc); if (!$cdtoc) { - log_error { "Attempt to insert invalid CDTOC; aborting "}; + log_error { 'Attempt to insert invalid CDTOC; aborting '}; return; } diff --git a/lib/MusicBrainz/Server/Data/Collection.pm b/lib/MusicBrainz/Server/Data/Collection.pm index e4af4d390f5..501ec6f5072 100644 --- a/lib/MusicBrainz/Server/Data/Collection.pm +++ b/lib/MusicBrainz/Server/Data/Collection.pm @@ -46,11 +46,11 @@ sub _column_mapping { sub find_by_subscribed_editor { my ($self, $editor_id, $limit, $offset) = @_; - my $query = "SELECT " . $self->_columns . " - FROM " . $self->_table . " + my $query = 'SELECT ' . $self->_columns . ' + FROM ' . $self->_table . ' JOIN editor_subscribe_collection s ON editor_collection.id = s.collection WHERE s.editor = ? AND s.available - ORDER BY name COLLATE musicbrainz, editor_collection.id"; + ORDER BY name COLLATE musicbrainz, editor_collection.id'; $self->query_to_list_limited($query, [$editor_id], $limit, $offset); } @@ -64,7 +64,7 @@ sub add_entities_to_collection { $self->sql->do(" INSERT INTO editor_collection_$type (collection, $type) SELECT DISTINCT add.collection, add.$type - FROM (VALUES " . join(', ', ("(?::integer, ?::integer)") x @ids) . ") add (collection, $type) + FROM (VALUES " . join(', ', ('(?::integer, ?::integer)') x @ids) . ") add (collection, $type) WHERE NOT EXISTS ( SELECT TRUE FROM editor_collection_$type WHERE collection = add.collection AND $type = add.$type @@ -78,7 +78,7 @@ sub remove_entities_from_collection { $self->sql->auto_commit; $self->sql->do("DELETE FROM editor_collection_$type - WHERE collection = ? AND $type IN (" . placeholders(@ids) . ")", + WHERE collection = ? AND $type IN (" . placeholders(@ids) . ')', $collection_id, @ids); } @@ -95,9 +95,9 @@ sub is_collection_collaborator { my ($self, $user_id, $collection_id) = @_; return $self->sql->select_single_value( - "SELECT 1 FROM editor_collection WHERE (id = \$1 AND editor = \$2) OR + 'SELECT 1 FROM editor_collection WHERE (id = $1 AND editor = $2) OR EXISTS (SELECT 1 FROM editor_collection_collaborator ecc - WHERE ecc.collection = \$1 AND ecc.editor = \$2)", + WHERE ecc.collection = $1 AND ecc.editor = $2)', $collection_id, $user_id, ); } @@ -184,8 +184,8 @@ sub merge { map { $_->description } @collections); if ($new_description ne '') { - $self->sql->do("UPDATE editor_collection SET description = ? - WHERE id = ?", + $self->sql->do('UPDATE editor_collection SET description = ? + WHERE id = ?', $new_description, $new_id); } @@ -209,13 +209,13 @@ sub merge_entities { AND (collection, $type) NOT IN ( SELECT DISTINCT ON (collection) collection, $type FROM editor_collection_$type - WHERE $type IN (" . placeholders(@ids) . ") - )", + WHERE $type IN (" . placeholders(@ids) . ') + )', @ids, @ids); # Move all remaining joins to the new release $self->sql->do("UPDATE editor_collection_$type SET $type = ? - WHERE $type IN (".placeholders(@ids).")", + WHERE $type IN (".placeholders(@ids).')', $new_id, @ids); } @@ -223,7 +223,7 @@ sub delete_entities { my ($self, $type, @ids) = @_; $self->sql->do("DELETE FROM editor_collection_$type - WHERE $type IN (".placeholders(@ids).")", @ids); + WHERE $type IN (".placeholders(@ids).')', @ids); } sub find_by { @@ -345,7 +345,7 @@ sub load_entity_count { FROM editor_collection_$_ WHERE collection = col.id), 0)" } entities_with('collections')) . ' ) FROM ( - VALUES '. join(', ', ("(?::integer)") x keys %collection_map) .' + VALUES '. join(', ', ('(?::integer)') x keys %collection_map) .' ) col (id)'; for my $row (@{ $self->sql->select_list_of_lists($query, keys %collection_map) }) { @@ -371,7 +371,7 @@ sub update { !$self->is_empty($old_entity_type, $collection->id)) { my $new_type = $self->c->model('CollectionType')->get_by_id($row->{type}); - die "The collection type must match the type of entities it contains." + die 'The collection type must match the type of entities it contains.' if $old_entity_type ne $new_type->item_entity_type; } diff --git a/lib/MusicBrainz/Server/Data/CommonsImage.pm b/lib/MusicBrainz/Server/Data/CommonsImage.pm index 0fe22153664..4cc81e1c857 100644 --- a/lib/MusicBrainz/Server/Data/CommonsImage.pm +++ b/lib/MusicBrainz/Server/Data/CommonsImage.pm @@ -18,11 +18,11 @@ sub get_commons_image { my ($self, $title, %opts) = @_; my $cache_only = $opts{cache_only} // 0; - my $url_pattern = "https://%s.wikimedia.org/w/api.php?action=query&prop=imageinfo&iiprop=url&redirects&format=json&iiurlwidth=250&titles=%s"; + my $url_pattern = 'https://%s.wikimedia.org/w/api.php?action=query&prop=imageinfo&iiprop=url&redirects&format=json&iiurlwidth=250&titles=%s'; return $self->_fetch_cache_or_url($url_pattern, 'imageinfo', $COMMONS_CACHE_TIMEOUT, - $title, "commons", + $title, 'commons', \&_commons_image_callback, cache_only => $cache_only); } diff --git a/lib/MusicBrainz/Server/Data/CoreEntity.pm b/lib/MusicBrainz/Server/Data/CoreEntity.pm index dcb329fc3f7..9662c5ea767 100644 --- a/lib/MusicBrainz/Server/Data/CoreEntity.pm +++ b/lib/MusicBrainz/Server/Data/CoreEntity.pm @@ -44,7 +44,7 @@ around get_by_gids => sub } if (@missing_gids) { my $sql = "SELECT new_id, gid FROM $table - WHERE gid IN (" . placeholders(@missing_gids) . ")"; + WHERE gid IN (" . placeholders(@missing_gids) . ')'; my $ids = $self->sql->select_list_of_lists($sql, @missing_gids); my $id_map = $self->get_by_ids(map { $_->[0] } @$ids); for my $row (@$ids) { @@ -117,8 +117,8 @@ sub _insert_hook_after { } sub find_by_name { my ($self, $name) = @_; - my $query = "SELECT " . $self->_columns . " FROM " . $self->_table . " - WHERE lower(musicbrainz_unaccent(name)) = lower(musicbrainz_unaccent(?))"; + my $query = 'SELECT ' . $self->_columns . ' FROM ' . $self->_table . ' + WHERE lower(musicbrainz_unaccent(name)) = lower(musicbrainz_unaccent(?))'; $self->query_to_list($query, [$name]); } @@ -133,9 +133,9 @@ sub get_by_ids_sorted_by_name : 'name COLLATE musicbrainz'; my $key = $self->_id_column; - my $query = "SELECT " . $self->_columns . - " FROM " . $self->_table . - " WHERE $key IN (" . placeholders(@ids) . ") " . + my $query = 'SELECT ' . $self->_columns . + ' FROM ' . $self->_table . + " WHERE $key IN (" . placeholders(@ids) . ') ' . " ORDER BY $ordering_condition"; my @result; @@ -153,13 +153,13 @@ sub find_by_names return () unless scalar @names; - my $query = "SELECT " . $self->_columns . ", search_terms.term " - ."FROM " . $self->_table - . ", (VALUES " - . join (",", ("(?)") x scalar(@names)) - . ") search_terms (term)" - ." WHERE lower(musicbrainz_unaccent(name)) = " - ." lower(musicbrainz_unaccent(search_terms.term));"; + my $query = 'SELECT ' . $self->_columns . ', search_terms.term ' + .'FROM ' . $self->_table + . ', (VALUES ' + . join (',', ('(?)') x scalar(@names)) + . ') search_terms (term)' + .' WHERE lower(musicbrainz_unaccent(name)) = ' + .' lower(musicbrainz_unaccent(search_terms.term));'; my $results = $self->c->sql->select_list_of_hashes($query, @names); @@ -204,7 +204,7 @@ sub add_gid_redirects my ($self, %redirects) = @_; my $table = $self->_gid_redirect_table; my $query = "INSERT INTO $table (gid, new_id) VALUES " . - (join ", ", ('(?, ?)') x keys %redirects); + (join ', ', ('(?, ?)') x keys %redirects); $self->sql->do($query, %redirects); } @@ -214,7 +214,7 @@ sub update_gid_redirects my $table = $self->_gid_redirect_table; $self->sql->do(" UPDATE $table SET new_id = ? - WHERE new_id IN (".placeholders(@old_ids).")", $new_id, @old_ids); + WHERE new_id IN (".placeholders(@old_ids).')', $new_id, @old_ids); } sub _delete_and_redirect_gids diff --git a/lib/MusicBrainz/Server/Data/CountryArea.pm b/lib/MusicBrainz/Server/Data/CountryArea.pm index 4d5926c9d15..d785a0a1003 100644 --- a/lib/MusicBrainz/Server/Data/CountryArea.pm +++ b/lib/MusicBrainz/Server/Data/CountryArea.pm @@ -9,9 +9,9 @@ with 'MusicBrainz::Server::Data::Role::SelectAll' => { order_by => [ 'name ASC' around '_get_all_from_db' => sub { my ($orig, $self, $p) = @_; - my $query = "SELECT " . $self->_columns . - " FROM " . $self->_table . " JOIN country_area ca ON ca.area = area.id " . - " ORDER BY " . (join ", ", @{ $p->order_by }); + my $query = 'SELECT ' . $self->_columns . + ' FROM ' . $self->_table . ' JOIN country_area ca ON ca.area = area.id ' . + ' ORDER BY ' . (join ', ', @{ $p->order_by }); $self->query_to_list($query); }; diff --git a/lib/MusicBrainz/Server/Data/CoverArtArchive.pm b/lib/MusicBrainz/Server/Data/CoverArtArchive.pm index 4a72281cca3..1f63d372367 100644 --- a/lib/MusicBrainz/Server/Data/CoverArtArchive.pm +++ b/lib/MusicBrainz/Server/Data/CoverArtArchive.pm @@ -57,7 +57,7 @@ Generate the policy and form values to upload cover art. sub post_fields { my ($self, $bucket, $mbid, $id, $opts) = @_; - my $mime_type = $opts->{mime_type} // "image/jpeg"; + my $mime_type = $opts->{mime_type} // 'image/jpeg'; my $redirect = $opts->{redirect}; my $suffix = $self->c->model('CoverArt')->image_type_suffix($mime_type); @@ -66,10 +66,10 @@ sub post_fields { my $filename = "mbid-$mbid-$id.$suffix"; my %extra_fields = ( - "x-archive-auto-make-bucket" => '1', - "x-archive-meta-collection" => 'coverartarchive', - "x-archive-meta-mediatype" => 'image', - "x-archive-meta-noindex" => 'true', + 'x-archive-auto-make-bucket' => '1', + 'x-archive-meta-collection' => 'coverartarchive', + 'x-archive-meta-mediatype' => 'image', + 'x-archive-meta-noindex' => 'true', ); my $policy = { @@ -93,7 +93,7 @@ sub post_fields { signature => $policy_signature_base64, key => $filename, acl => 'public-read', - "content-type" => $mime_type, + 'content-type' => $mime_type, %extra_fields }; @@ -157,7 +157,7 @@ sub reorder_cover_art { $self->sql->do( 'UPDATE cover_art_archive.cover_art SET ordering = position.ordering ' . - 'FROM (VALUES '. (join ", ", (("(?::bigint, ?::integer)") x (keys %$positions))) . ') ' . + 'FROM (VALUES '. (join ', ', (('(?::bigint, ?::integer)') x (keys %$positions))) . ') ' . 'AS position (id, ordering) WHERE cover_art.id = position.id', %$positions); } @@ -172,9 +172,9 @@ sub merge_releases { # cover_art_presence enum has 'darkened' as max, and 'absent' as min, # so we always want the highest value to be preserved $self->sql->do( - "UPDATE release_meta SET cover_art_presence = (SELECT max(cover_art_presence) + 'UPDATE release_meta SET cover_art_presence = (SELECT max(cover_art_presence) FROM release_meta WHERE id = any(?)) - WHERE id = ?", [ $new_release, @old_releases ], $new_release); + WHERE id = ?', [ $new_release, @old_releases ], $new_release); for my $old_release (@old_releases) { $self->sql->do( diff --git a/lib/MusicBrainz/Server/Data/CoverArtType.pm b/lib/MusicBrainz/Server/Data/CoverArtType.pm index e0d6723057b..8a6b9805caf 100644 --- a/lib/MusicBrainz/Server/Data/CoverArtType.pm +++ b/lib/MusicBrainz/Server/Data/CoverArtType.pm @@ -50,11 +50,11 @@ sub find_by_cover_art_ids my ($self, @ids) = @_; return () unless @ids; - my $query = "SELECT cover_art_type.id AS cover_art_id, " . $self->_columns . " " . - "FROM " . $self->_table . " " . - "JOIN cover_art_archive.cover_art_type " . - "ON cover_art_type.type_id = art_type.id " . - "WHERE cover_art_type.id IN (" . placeholders(@ids) . ")"; + my $query = 'SELECT cover_art_type.id AS cover_art_id, ' . $self->_columns . ' ' . + 'FROM ' . $self->_table . ' ' . + 'JOIN cover_art_archive.cover_art_type ' . + 'ON cover_art_type.type_id = art_type.id ' . + 'WHERE cover_art_type.id IN (' . placeholders(@ids) . ')'; my %map; for my $row (@{ $self->sql->select_list_of_hashes($query, @ids) }) { diff --git a/lib/MusicBrainz/Server/Data/DurationLookup.pm b/lib/MusicBrainz/Server/Data/DurationLookup.pm index f9ef6b52550..e8153f9cbdb 100644 --- a/lib/MusicBrainz/Server/Data/DurationLookup.pm +++ b/lib/MusicBrainz/Server/Data/DurationLookup.pm @@ -70,7 +70,7 @@ sub lookup push @durations, $duration; } - my $dur_string = "'{" . join(",", @durations) . "}'"; + my $dur_string = q('{) . join(',', @durations) . q(}'); $self->query_to_list_limited( "SELECT release, @@ -85,10 +85,10 @@ sub lookup ($all_formats ? '' : ' LEFT JOIN medium_format mf ON m.format = mf.id ') . " WHERE track_count_matches_cdtoc(m, ?) AND toc <@ create_bounding_cube($dur_string, ?) " . - ($all_formats ? '' : ' AND (m.format IS NULL OR mf.has_discids) ') . " + ($all_formats ? '' : ' AND (m.format IS NULL OR mf.has_discids) ') . ' GROUP BY release ORDER BY min_distance, release - LIMIT 25", + LIMIT 25', [$toc_info{tracks}, $fuzzy], $limit, $offset, sub { my ($model, $row) = @_; return { @@ -109,14 +109,14 @@ sub update # 3. there are at most 99 tracks on the disc my $results = $self->sql->select_list_of_hashes( - "SELECT (sum(track.length) < 4800000 AND + 'SELECT (sum(track.length) < 4800000 AND bool_and(track.length IS NOT NULL) AND count(track.id) <= 99) AS should_have_index, medium_index.medium IS NOT NULL AS has_index FROM track LEFT JOIN medium_index ON medium_index.medium = track.medium WHERE track.medium = ? AND track.position > 0 AND track.is_data_track = false - GROUP BY track.medium, medium_index.medium;", $medium_id); + GROUP BY track.medium, medium_index.medium;', $medium_id); return unless @$results; @@ -124,7 +124,7 @@ sub update # get track count, excluding any pregap or data track my $track_count = $self->sql->select_single_value( - "SELECT count(*) FROM track WHERE medium = ? AND position > 0 AND is_data_track = false", + 'SELECT count(*) FROM track WHERE medium = ? AND position > 0 AND is_data_track = false', $medium_id ); @@ -139,7 +139,7 @@ sub update if ($disc{has_index} && ! $disc{should_have_index}) { - $self->sql->delete_row("medium_index", { medium => $medium_id }); + $self->sql->delete_row('medium_index', { medium => $medium_id }); } if ($disc{has_index} && $disc{should_have_index}) diff --git a/lib/MusicBrainz/Server/Data/Edit.pm b/lib/MusicBrainz/Server/Data/Edit.pm index 7a4150ab4ed..666a7c63952 100644 --- a/lib/MusicBrainz/Server/Data/Edit.pm +++ b/lib/MusicBrainz/Server/Data/Edit.pm @@ -68,7 +68,7 @@ sub _new_from_row # Readd the class marker my $class = MusicBrainz::Server::EditRegistry->class_from_type($row->{type}) - or confess"Could not look up class for type ".$row->{type}; + or confess 'Could not look up class for type '.$row->{type}; state $json = JSON::XS->new; my $data = $json->decode($row->{data}); @@ -113,8 +113,8 @@ sub get_by_id_and_lock my ($self, $id) = @_; my $query = - "SELECT id FROM edit " . - "WHERE id = ? FOR UPDATE NOWAIT"; + 'SELECT id FROM edit ' . + 'WHERE id = ? FOR UPDATE NOWAIT'; my $row = $self->sql->select_single_row_hash($query, $id); return unless defined $row; @@ -126,7 +126,7 @@ sub get_max_id { my ($self) = @_; - return $self->sql->select_single_value("SELECT max(id) FROM edit"); + return $self->sql->select_single_value('SELECT max(id) FROM edit'); } sub find @@ -160,7 +160,7 @@ sub find while (my ($param, $value) = each %$p) { my @values = ref($value) ? @$value : ($value); next unless @values; - push @pred, (join " OR ", (("$param = ?") x @values)); + push @pred, (join ' OR ', (("$param = ?") x @values)); push @args, @values; } @@ -247,7 +247,7 @@ sub find_for_subscription my $type = $subscription->type; my $query = 'SELECT ' . $self->_columns . ' FROM ' . $self->_table . " WHERE id IN (SELECT edit FROM edit_$type WHERE $type = ?) " . - " AND id > ? AND status IN (?, ?) ORDER BY id"; + ' AND id > ? AND status IN (?, ?) ORDER BY id'; $self->query_to_list( $query, [ @@ -329,12 +329,12 @@ sub find_creation_edit { my ($self, $create_edit_type, $entity_id, %args) = @_; $args{id_field} ||= 'entity_id'; my $query = - "SELECT " . $self->_columns . " - FROM " . $self->_table . " + 'SELECT ' . $self->_columns . ' + FROM ' . $self->_table . ' WHERE edit.status = ? AND edit.type = ? AND (edit_data.data->>(?::text))::bigint = ? - ORDER BY edit.id ASC LIMIT 1"; + ORDER BY edit.id ASC LIMIT 1'; # NB. This function is used for cover art too, which uses bigint IDs. my ($edit) = $self->query_to_list( $query, @@ -375,10 +375,10 @@ sub subscribed_entity_edits { my $edit_entity_table = 'edit_' . $_; my $edit_status_table = $edit_entity_table; my $editor_subscribe_table = 'editor_subscribe_' . $_; - my $result = <<~"EOSQL"; + my $result = <<~"SQL"; SELECT edit FROM $edit_entity_table JOIN $editor_subscribe_table ON $editor_subscribe_table.$_ = $edit_entity_table.$_ - EOSQL + SQL # Join with the edit table if # (1) this entity doesn't have a materialized edit status (e.g. series), or @@ -408,7 +408,7 @@ sub subscribed_entity_edits { } entities_with('collections')); # FIXME: very similar to $EDIT_IDS_FOR_COLLECTION_SQL, should be generalized - my $query = <<~"EOSQL"; + my $query = <<~"SQL"; SELECT $columns FROM $table JOIN ( $entity_sql @@ -425,7 +425,7 @@ sub subscribed_entity_edits { ) ORDER BY id ASC LIMIT $LIMIT_FOR_EDIT_LISTING - EOSQL + SQL $self->query_to_list_limited($query, \@args, $limit, $offset, undef, dollar_placeholders => 1); @@ -489,13 +489,13 @@ sub merge_entities @ids, @ids); $self->sql->do("UPDATE edit_$type SET $type = ? - WHERE $type IN (".placeholders(@old_ids).")", $new_id, @old_ids); + WHERE $type IN (".placeholders(@old_ids).')', $new_id, @old_ids); } sub _create_instance { my ($self, $previewing, %opts) = @_; - my $type = delete $opts{edit_type} or croak "edit_type required"; + my $type = delete $opts{edit_type} or croak 'edit_type required'; my $editor = delete $opts{editor}; my $editor_id = delete $opts{editor_id}; @@ -503,7 +503,7 @@ sub _create_instance { $editor = $self->c->model('Editor')->get_by_id($editor_id); } - croak "editor required" unless $editor; + croak 'editor required' unless $editor; my $class = MusicBrainz::Server::EditRegistry->class_from_type($type) or confess "Could not lookup edit type for $type"; @@ -572,7 +572,7 @@ sub create { editor => $edit->editor_id, status => $edit->status, type => $edit->edit_type, - open_time => \"now()", + open_time => \'now()', expire_time => \"now() + interval '$interval'", autoedit => $edit->auto_edit, close_time => $edit->close_time @@ -598,7 +598,7 @@ sub create { @$ids or next; my $query = "INSERT INTO edit_$type (edit, $type) VALUES "; - $query .= join ", ", ("(?, ?)") x @$ids; + $query .= join ', ', ('(?, ?)') x @$ids; my @all_ids = ($edit_id) x @$ids; $self->c->sql->do($query, zip @all_ids, @$ids); } @@ -822,7 +822,7 @@ sub _do_reject return $STATUS_APPLIED; } else { - carp("Could not reject " . $edit->id . ": $err"); + carp('Could not reject ' . $edit->id . ": $err"); return $STATUS_ERROR; } }; @@ -834,7 +834,7 @@ sub accept { my ($self, $edit) = @_; - confess "The edit is not open anymore." if $edit->status != $STATUS_OPEN; + confess 'The edit is not open anymore.' if $edit->status != $STATUS_OPEN; $self->_close($edit, sub { $self->_do_accept(shift) }); } @@ -843,7 +843,7 @@ sub reject { my ($self, $edit, $status) = @_; $status ||= $STATUS_FAILEDVOTE; - confess "The edit is not open anymore." + confess 'The edit is not open anymore.' unless $edit->status == $STATUS_OPEN; $self->_close($edit, sub { $self->_do_reject(shift, $status) }); @@ -859,7 +859,7 @@ sub _close { my ($self, $edit, $close_sub) = @_; my $status = &$close_sub($edit); - my $query = "UPDATE edit SET status = ?, close_time = NOW() WHERE id = ?"; + my $query = 'UPDATE edit SET status = ?, close_time = NOW() WHERE id = ?'; $self->c->sql->do($query, $status, $edit->id); $edit->adjust_edit_pending(-1) unless $edit->auto_edit; $edit->status($status); @@ -909,8 +909,8 @@ sub add_link { sub extend_expiration_time { my ($self, @ids) = @_; my $interval = DateTime::Format::Pg->format_interval($MINIMUM_RESPONSE_PERIOD); - $self->sql->do("UPDATE edit SET expire_time = NOW() + interval ? - WHERE id = any(?) AND expire_time < NOW() + interval ?", $interval, \@ids, $interval); + $self->sql->do('UPDATE edit SET expire_time = NOW() + interval ? + WHERE id = any(?) AND expire_time < NOW() + interval ?', $interval, \@ids, $interval); } __PACKAGE__->meta->make_immutable; diff --git a/lib/MusicBrainz/Server/Data/EditNote.pm b/lib/MusicBrainz/Server/Data/EditNote.pm index 6fcd053557d..82e6d91fb54 100644 --- a/lib/MusicBrainz/Server/Data/EditNote.pm +++ b/lib/MusicBrainz/Server/Data/EditNote.pm @@ -118,14 +118,14 @@ sub add_note sub find_by_recipient { my ($self, $recipient_id, $limit, $offset) = @_; - my $query = <<~"EOSQL"; + my $query = <<~"SQL"; SELECT ${\($self->_columns)} FROM edit_note_recipient JOIN ${\($self->_table)} ON ${\($self->_table)}.id = edit_note_recipient.edit_note WHERE recipient = \$1 ORDER BY post_time DESC NULLS LAST, edit DESC LIMIT $LIMIT_FOR_EDIT_LISTING - EOSQL + SQL $self->query_to_list_limited( $query, [$recipient_id], $limit, $offset, undef, dollar_placeholders => 1, diff --git a/lib/MusicBrainz/Server/Data/Editor.pm b/lib/MusicBrainz/Server/Data/Editor.pm index 913dc6e4a35..b8fc2c85d89 100644 --- a/lib/MusicBrainz/Server/Data/Editor.pm +++ b/lib/MusicBrainz/Server/Data/Editor.pm @@ -200,8 +200,8 @@ sub find_by_area { $containment_query, @containment_query_args, ) = get_area_containment_query('$2', 'area', check_all_levels => 1); - my $query = "SELECT " . $self->_columns . " - FROM " . $self->_table . " + my $query = 'SELECT ' . $self->_columns . ' + FROM ' . $self->_table . " WHERE area = \$1 OR EXISTS ( SELECT 1 FROM ($containment_query) ac WHERE ac.descendant = area AND ac.parent = \$1 @@ -216,32 +216,32 @@ sub find_by_area { sub find_by_privileges { my ($self, $privs) = @_; - my $query = "SELECT " . $self->_columns . " - FROM " . $self->_table . " + my $query = 'SELECT ' . $self->_columns . ' + FROM ' . $self->_table . ' WHERE (privs & ?) > 0 - ORDER BY editor.name, editor.id"; + ORDER BY editor.name, editor.id'; $self->query_to_list($query, [$privs]); } sub find_by_subscribed_editor { my ($self, $editor_id, $limit, $offset) = @_; - my $query = "SELECT " . $self->_columns . " - FROM " . $self->_table . " + my $query = 'SELECT ' . $self->_columns . ' + FROM ' . $self->_table . ' JOIN editor_subscribe_editor s ON editor.id = s.subscribed_editor WHERE s.editor = ? - ORDER BY editor.name, editor.id"; + ORDER BY editor.name, editor.id'; $self->query_to_list_limited($query, [$editor_id], $limit, $offset); } sub find_subscribers { my ($self, $editor_id, $limit, $offset) = @_; - my $query = "SELECT " . $self->_columns . " - FROM " . $self->_table . " + my $query = 'SELECT ' . $self->_columns . ' + FROM ' . $self->_table . ' JOIN editor_subscribe_editor s ON editor.id = s.editor WHERE s.subscribed_editor = ? - ORDER BY editor.name, editor.id"; + ORDER BY editor.name, editor.id'; $self->query_to_list_limited($query, [$editor_id], $limit, $offset); } @@ -249,7 +249,7 @@ sub insert { my ($self, $data) = @_; - die "Invalid user name" if $data->{name} =~ qr{^deleted editor \#\d+$}i; + die 'Invalid user name' if $data->{name} =~ qr{^deleted editor \#\d+$}i; my $plaintext = $data->{password}; $data->{password} = hash_password($plaintext); $data->{ha1} = ha1_password($data->{name}, $plaintext); @@ -268,7 +268,7 @@ sub insert sub search_old_editor_names { my ($self, $name, $use_regular_expression) = @_; - my $condition = $use_regular_expression ? "name ~* ?" : "LOWER(name) = LOWER(?)"; + my $condition = $use_regular_expression ? 'name ~* ?' : 'LOWER(name) = LOWER(?)'; my $query = "SELECT name FROM old_editor_name WHERE $condition LIMIT 100"; @{ $self->sql->select_single_column_array($query, $name) }; @@ -277,7 +277,7 @@ sub search_old_editor_names { sub unlock_old_editor_name { my ($self, $name) = @_; - my $query = "DELETE FROM old_editor_name WHERE name = ?"; + my $query = 'DELETE FROM old_editor_name WHERE name = ?'; $self->sql->do($query, $name); } @@ -308,12 +308,12 @@ sub update_password my ($self, $editor_name, $password) = @_; Sql::run_in_transaction(sub { - $self->sql->do(<<~'EOSQL', hash_password($password), $password, $editor_name); + $self->sql->do(<<~'SQL', hash_password($password), $password, $editor_name); UPDATE editor SET password = ?, ha1 = md5(name || ':musicbrainz.org:' || ?), last_login_date = now() WHERE lower(name) = lower(?) - EOSQL + SQL }, $self->sql); } @@ -392,8 +392,8 @@ sub load_preferences my %editors = map { $_->id => $_ } grep { defined } @editors or return; - my $query = sprintf "SELECT editor, name, value ". - "FROM editor_preference WHERE editor IN (%s)", + my $query = sprintf 'SELECT editor, name, value '. + 'FROM editor_preference WHERE editor IN (%s)', placeholders(keys %editors); my $prefs = $self->sql->select_list_of_hashes($query, keys %editors); @@ -462,8 +462,8 @@ sub load_for_collection { return unless $id; # nothing to do $self->load($collection); - my $query = "SELECT " . $self->_columns . ", ep.value AS show_gravatar - FROM " . $self->_table . " + my $query = 'SELECT ' . $self->_columns . ', ep.value AS show_gravatar + FROM ' . $self->_table . " JOIN editor_collection_collaborator ecc ON editor.id = ecc.editor LEFT JOIN editor_preference ep ON ep.editor = editor.id AND ep.name = 'show_gravatar' WHERE ecc.collection = $id @@ -484,12 +484,12 @@ sub editors_with_subscriptions { my ($self, $after, $limit) = @_; my @tables = (entities_with('subscriptions', - take => sub { return "editor_subscribe_" . (shift) }), + take => sub { return 'editor_subscribe_' . (shift) }), entities_with(['subscriptions', 'deleted'], - take => sub { return "editor_subscribe_" . (shift) . "_deleted" })); + take => sub { return 'editor_subscribe_' . (shift) . '_deleted' })); my $ids = join(' UNION ALL ', map { "SELECT editor FROM $_" } @tables); - my $query = "SELECT " . $self->_columns . ", ep.value AS prefs_value - FROM " . $self->_table . " + my $query = 'SELECT ' . $self->_columns . ', ep.value AS prefs_value + FROM ' . $self->_table . " LEFT JOIN editor_preference ep ON ep.editor = editor.id AND ep.name = 'subscriptions_email_period' @@ -520,7 +520,7 @@ sub delete { $editor_id, ) unless $allow_reuse; $self->sql->do( - "UPDATE editor SET name = 'Deleted Editor #' || id, + q{UPDATE editor SET name = 'Deleted Editor #' || id, password = ?, ha1 = '', privs = 0, @@ -532,12 +532,12 @@ sub delete { birth_date = NULL, gender = NULL, deleted = TRUE - WHERE id = ?", + WHERE id = ?}, Authen::Passphrase::RejectAll->new->as_rfc2307, $editor_id ); - $self->sql->do("DELETE FROM editor_preference WHERE editor = ?", $editor_id); + $self->sql->do('DELETE FROM editor_preference WHERE editor = ?', $editor_id); $self->c->model('EditorLanguage')->delete_editor($editor_id); $self->c->model('EditorOAuthToken')->delete_editor($editor_id); @@ -596,16 +596,16 @@ sub delete { # and whether or not they have an index to use, as postgresql will not execute # the later clauses if an earlier one has already excluded the lone editor row. my $should_delete = $self->sql->select_single_value( - "SELECT TRUE FROM editor WHERE id = ? " . - "AND NOT EXISTS (SELECT TRUE FROM edit WHERE editor = editor.id) " . - "AND NOT EXISTS (SELECT TRUE FROM edit_note WHERE editor = editor.id) " . - "AND NOT EXISTS (SELECT TRUE FROM vote WHERE editor = editor.id) " . - "AND NOT EXISTS (SELECT TRUE FROM annotation WHERE editor = editor.id) " . - "AND NOT EXISTS (SELECT TRUE FROM autoeditor_election_vote WHERE voter = editor.id) " . - "AND NOT EXISTS (SELECT TRUE FROM autoeditor_election WHERE candidate = editor.id OR proposer = editor.id OR seconder_1 = editor.id OR seconder_2 = editor.id)", + 'SELECT TRUE FROM editor WHERE id = ? + AND NOT EXISTS (SELECT TRUE FROM edit WHERE editor = editor.id) + AND NOT EXISTS (SELECT TRUE FROM edit_note WHERE editor = editor.id) + AND NOT EXISTS (SELECT TRUE FROM vote WHERE editor = editor.id) + AND NOT EXISTS (SELECT TRUE FROM annotation WHERE editor = editor.id) + AND NOT EXISTS (SELECT TRUE FROM autoeditor_election_vote WHERE voter = editor.id) + AND NOT EXISTS (SELECT TRUE FROM autoeditor_election WHERE candidate = editor.id OR proposer = editor.id OR seconder_1 = editor.id OR seconder_2 = editor.id)', $editor_id); if ($should_delete) { - $self->sql->do("DELETE FROM editor WHERE id = ?", $editor_id); + $self->sql->do('DELETE FROM editor WHERE id = ?', $editor_id); } $self->sql->commit; @@ -780,12 +780,12 @@ sub secondary_counts { sub last_24h_edit_count { my ($self, $editor_id) = @_; + my $query = - "SELECT count(*) + q{SELECT count(*) FROM edit WHERE editor = ? - AND open_time >= (now() - interval '1 day') - "; + AND open_time >= (now() - interval '1 day')}; return $self->sql->select_single_value($query, $editor_id); } diff --git a/lib/MusicBrainz/Server/Data/EditorLanguage.pm b/lib/MusicBrainz/Server/Data/EditorLanguage.pm index 14ea8dd6716..d94084a4379 100644 --- a/lib/MusicBrainz/Server/Data/EditorLanguage.pm +++ b/lib/MusicBrainz/Server/Data/EditorLanguage.pm @@ -93,7 +93,7 @@ sub set_languages { sub delete_editor { my ($self, $editor_id) = @_; - $self->sql->do("DELETE FROM editor_language WHERE editor = ?", $editor_id); + $self->sql->do('DELETE FROM editor_language WHERE editor = ?', $editor_id); } __PACKAGE__->meta->make_immutable; diff --git a/lib/MusicBrainz/Server/Data/EditorOAuthToken.pm b/lib/MusicBrainz/Server/Data/EditorOAuthToken.pm index bace56782f7..a9ee536920e 100644 --- a/lib/MusicBrainz/Server/Data/EditorOAuthToken.pm +++ b/lib/MusicBrainz/Server/Data/EditorOAuthToken.pm @@ -69,25 +69,25 @@ sub get_by_refresh_token sub find_granted_by_editor { my ($self, $editor_id, $limit, $offset) = @_; - my $query = "SELECT application, scope, max(refresh_token) AS refresh_token - FROM " . $self->_table . " + my $query = 'SELECT application, scope, max(refresh_token) AS refresh_token + FROM ' . $self->_table . ' WHERE editor = ? AND access_token IS NOT NULL GROUP BY application, scope - ORDER BY application, scope"; + ORDER BY application, scope'; $self->query_to_list_limited($query, [$editor_id], $limit, $offset); } sub check_granted_token { my ($self, $editor_id, $application_id, $scope, $offline) = @_; - my $query = "SELECT count(*) - FROM " . $self->_table . " + my $query = 'SELECT count(*) + FROM ' . $self->_table . ' WHERE editor = ? AND application = ? AND scope = ? AND - access_token IS NOT NULL"; + access_token IS NOT NULL'; if ($offline) { - $query .= " AND refresh_token IS NOT NULL" + $query .= ' AND refresh_token IS NOT NULL' } return $self->c->sql->select_single_value($query, $editor_id, $application_id, $scope); } @@ -95,15 +95,15 @@ sub check_granted_token sub delete_application { my ($self, $application_id) = @_; - $self->sql->do("DELETE FROM editor_oauth_token WHERE application = ?", $application_id); + $self->sql->do('DELETE FROM editor_oauth_token WHERE application = ?', $application_id); } sub delete_editor { my ($self, $editor_id) = @_; - $self->sql->do("DELETE FROM editor_oauth_token WHERE editor = ?", $editor_id); - $self->sql->do("DELETE FROM editor_oauth_token WHERE application IN ". - "(SELECT id FROM application WHERE owner = ?)", $editor_id); + $self->sql->do('DELETE FROM editor_oauth_token WHERE editor = ?', $editor_id); + $self->sql->do('DELETE FROM editor_oauth_token WHERE application IN '. + '(SELECT id FROM application WHERE owner = ?)', $editor_id); } sub create_authorization_code @@ -152,10 +152,10 @@ sub grant_access_token $self->sql->update_row($self->_table, $update, { id => $token->id }); # delete expired tokens that can't be refreshed in the future - $self->sql->do("DELETE FROM editor_oauth_token + $self->sql->do('DELETE FROM editor_oauth_token WHERE editor = ? AND application = ? AND scope = ? AND expire_time < ? AND refresh_token IS NULL AND - access_token IS NOT NULL", + access_token IS NOT NULL', $token->editor_id, $token->application_id, $token->scope, DateTime->now); } @@ -164,9 +164,9 @@ sub revoke_access { my ($self, $editor_id, $application_id, $scope) = @_; - $self->sql->do("DELETE FROM editor_oauth_token + $self->sql->do('DELETE FROM editor_oauth_token WHERE editor = ? AND application = ? AND scope = ? AND - access_token IS NOT NULL", + access_token IS NOT NULL', $editor_id, $application_id, $scope); } diff --git a/lib/MusicBrainz/Server/Data/EditorSubscriptions.pm b/lib/MusicBrainz/Server/Data/EditorSubscriptions.pm index 4fea40a5e3c..46f2d8b392d 100644 --- a/lib/MusicBrainz/Server/Data/EditorSubscriptions.pm +++ b/lib/MusicBrainz/Server/Data/EditorSubscriptions.pm @@ -22,25 +22,25 @@ sub update_subscriptions $self->sql->do("DELETE FROM $_ WHERE editor = ?", $editor_id) for entities_with(['subscriptions', 'deleted'], - take => sub { "editor_subscribe_" . (shift) . "_deleted" }); + take => sub { 'editor_subscribe_' . (shift) . '_deleted' }); # Remove subscriptions to deleted or private collections $self->sql->do( - "DELETE FROM editor_subscribe_collection - WHERE editor = ? AND NOT available", + 'DELETE FROM editor_subscribe_collection + WHERE editor = ? AND NOT available', $editor_id); $self->sql->do( "UPDATE $_ SET last_edit_sent = ? WHERE editor = ?", $max_id, $editor_id - ) for entities_with('subscriptions', take => sub { "editor_subscribe_" . (shift) }); + ) for entities_with('subscriptions', take => sub { 'editor_subscribe_' . (shift) }); $self->sql->commit; } sub delete_editor { my ($self, $editor_id) = @_; $self->sql->do("DELETE FROM $_ WHERE editor = ?", $editor_id) - for entities_with('subscriptions', take => sub { "editor_subscribe_" . (shift) }); + for entities_with('subscriptions', take => sub { 'editor_subscribe_' . (shift) }); } 1; diff --git a/lib/MusicBrainz/Server/Data/Entity.pm b/lib/MusicBrainz/Server/Data/Entity.pm index b51740070df..24c817d233a 100644 --- a/lib/MusicBrainz/Server/Data/Entity.pm +++ b/lib/MusicBrainz/Server/Data/Entity.pm @@ -15,12 +15,12 @@ with 'MusicBrainz::Server::Data::Role::QueryToList'; sub _columns { - die("Not implemented"); + die('Not implemented'); } sub _table { - die("Not implemented"); + die('Not implemented'); } sub _column_mapping @@ -34,8 +34,8 @@ sub _get_by_keys { @ids = grep { defined && $_ } @ids; return () unless @ids; - my $query = "SELECT " . $self->_columns . - " FROM " . $self->_table . + my $query = 'SELECT ' . $self->_columns . + ' FROM ' . $self->_table . " WHERE $key = any(?)"; $self->query_to_list($query, [\@ids]); @@ -54,8 +54,8 @@ sub get_by_id_locked { return unless $id; my $key = $self->_id_column; - my $query = "SELECT " . $self->_columns . - " FROM " . $self->_table . + my $query = 'SELECT ' . $self->_columns . + ' FROM ' . $self->_table . " WHERE $key = ? FOR UPDATE"; my $rows = $self->c->sql->select_list_of_hashes($query, $id); @@ -129,10 +129,10 @@ sub _get_by_key $query, $id)); } -sub insert { confess "Not implemented" } -sub update { confess "Not implemented" } -sub delete { confess "Not implemented" } -sub merge { confess "Not implemented" } +sub insert { confess 'Not implemented' } +sub update { confess 'Not implemented' } +sub delete { confess 'Not implemented' } +sub merge { confess 'Not implemented' } __PACKAGE__->meta->make_immutable; no Moose; diff --git a/lib/MusicBrainz/Server/Data/EntityAnnotation.pm b/lib/MusicBrainz/Server/Data/EntityAnnotation.pm index 827a0d62e8c..9393e44bea3 100644 --- a/lib/MusicBrainz/Server/Data/EntityAnnotation.pm +++ b/lib/MusicBrainz/Server/Data/EntityAnnotation.pm @@ -50,10 +50,10 @@ sub get_history sub get_latest { my ($self, $id) = @_; - my $query = "SELECT " . $self->_columns . - " FROM " . $self->_table . - " WHERE " . $self->type . " = ?" . - " ORDER BY created DESC, id DESC LIMIT 1"; + my $query = 'SELECT ' . $self->_columns . + ' FROM ' . $self->_table . + ' WHERE ' . $self->type . ' = ?' . + ' ORDER BY created DESC, id DESC LIMIT 1'; my $row = $self->sql->select_single_row_hash($query, $id) or return undef; return $self->_new_from_row($row); @@ -87,12 +87,12 @@ sub edit sub delete { my ($self, @ids) = @_; - my $query = "DELETE FROM " . $self->table . - " WHERE " . $self->type . " IN (" . placeholders(@ids) . ")" . - " RETURNING annotation"; + my $query = 'DELETE FROM ' . $self->table . + ' WHERE ' . $self->type . ' IN (' . placeholders(@ids) . ')' . + ' RETURNING annotation'; my $annotations = $self->sql->select_single_column_array($query, @ids); return 1 unless scalar @$annotations; - $query = "DELETE FROM annotation WHERE id IN (" . placeholders(@$annotations) . ")"; + $query = 'DELETE FROM annotation WHERE id IN (' . placeholders(@$annotations) . ')'; $self->sql->do($query, @$annotations); return 1; } @@ -111,9 +111,9 @@ sub merge SELECT $type, text, row_number() OVER (PARTITION BY $type ORDER BY created DESC) FROM annotation JOIN $table ent_annotation ON ent_annotation.annotation = annotation.id - WHERE $type IN (".placeholders(@ids).") + WHERE $type IN (".placeholders(@ids).') ) s - WHERE row_number = 1", + WHERE row_number = 1', @ids ) }; @@ -122,8 +122,8 @@ sub merge if (keys %entity_to_annotation > 1) { my $new_text = join("\n\n-------\n\n", uniq - grep { $_ ne "" } - map { $entity_to_annotation{$_} // "" } + grep { $_ ne '' } + map { $entity_to_annotation{$_} // '' } @ids); if ($new_text ne '') { $self->c->model('Edit')->create( @@ -137,7 +137,7 @@ sub merge } $self->sql->do("UPDATE $table SET $type = ? - WHERE $type IN (".placeholders(@old_ids).")", $new_id, @old_ids); + WHERE $type IN (".placeholders(@old_ids).')', $new_id, @old_ids); } no Moose; diff --git a/lib/MusicBrainz/Server/Data/EntityTag.pm b/lib/MusicBrainz/Server/Data/EntityTag.pm index d981706b6a9..4a7ab067906 100644 --- a/lib/MusicBrainz/Server/Data/EntityTag.pm +++ b/lib/MusicBrainz/Server/Data/EntityTag.pm @@ -28,13 +28,13 @@ has [qw( tag_table type )] => ( sub find_tags { my ($self, $entity_id) = @_; - my $query = "SELECT tag.name, entity_tag.count, + my $query = 'SELECT tag.name, entity_tag.count, tag.id AS tag_id, genre.id AS genre_id - FROM " . $self->tag_table . " entity_tag + FROM ' . $self->tag_table . ' entity_tag JOIN tag ON tag.id = entity_tag.tag LEFT JOIN genre ON tag.name = genre.name - WHERE " . $self->type . " = ? - ORDER BY entity_tag.count DESC, tag.name COLLATE musicbrainz"; + WHERE ' . $self->type . ' = ? + ORDER BY entity_tag.count DESC, tag.name COLLATE musicbrainz'; $self->query_to_list($query, [$entity_id]); } @@ -42,8 +42,8 @@ sub find_tags { sub find_tag_count { my ($self, $entity_id) = @_; - my $query = "SELECT count(*) FROM " . $self->tag_table . " entity_tag " . - "WHERE " . $self->type . " = ? "; + my $query = 'SELECT count(*) FROM ' . $self->tag_table . ' entity_tag ' . + 'WHERE ' . $self->type . ' = ? '; return $self->sql->select_single_value($query, $entity_id); } @@ -51,22 +51,22 @@ sub find_tag_count sub find_top_tags { my ($self, $entity_id, $limit) = @_; - my $query = " + my $query = ' SELECT name, count, tag_id, genre_id FROM (( SELECT tag.name, entity_tag.count, tag.id AS tag_id, genre.id AS genre_id - FROM " . $self->tag_table . " entity_tag + FROM ' . $self->tag_table . ' entity_tag JOIN tag ON tag.id = entity_tag.tag JOIN genre ON tag.name = genre.name - WHERE " . $self->type . " = ? + WHERE ' . $self->type . ' = ? ORDER BY entity_tag.count DESC, tag.name COLLATE musicbrainz LIMIT ? ) UNION ( SELECT tag.name, entity_tag.count, tag.id AS tag_id, NULL AS genre_id - FROM " . $self->tag_table . " entity_tag + FROM ' . $self->tag_table . ' entity_tag JOIN tag ON tag.id = entity_tag.tag - WHERE " . $self->type . " = ? + WHERE ' . $self->type . ' = ? AND NOT EXISTS ( SELECT 1 FROM genre WHERE genre.name = tag.name @@ -74,7 +74,7 @@ sub find_top_tags ORDER BY entity_tag.count DESC, tag.name COLLATE musicbrainz LIMIT ? )) top_tags - ORDER BY count DESC, name COLLATE musicbrainz"; + ORDER BY count DESC, name COLLATE musicbrainz'; $self->query_to_list($query, [$entity_id, $limit, $entity_id, $limit]); } @@ -84,12 +84,12 @@ sub find_tags_for_entities return unless scalar @ids; - my $query = "SELECT tag.id AS tag_id, tag.name, entity_tag.count, - entity_tag." . $self->type . " AS entity - FROM " . $self->tag_table . " entity_tag + my $query = 'SELECT tag.id AS tag_id, tag.name, entity_tag.count, + entity_tag.' . $self->type . ' AS entity + FROM ' . $self->tag_table . ' entity_tag JOIN tag ON tag.id = entity_tag.tag - WHERE " . $self->type . " IN (" . placeholders(@ids) . ") - ORDER BY entity_tag.count DESC, tag.name COLLATE musicbrainz"; + WHERE ' . $self->type . ' IN (' . placeholders(@ids) . ') + ORDER BY entity_tag.count DESC, tag.name COLLATE musicbrainz'; $self->query_to_list($query, \@ids); } @@ -107,8 +107,8 @@ sub find_user_tags_for_entities FROM $table entity_tag JOIN tag ON tag.id = entity_tag.tag WHERE editor = ? - AND $type IN (" . placeholders(@ids) . ") - ORDER BY tag.name COLLATE musicbrainz"; + AND $type IN (" . placeholders(@ids) . ') + ORDER BY tag.name COLLATE musicbrainz'; $self->query_to_list($query, [$user_id, @ids], sub { my ($model, $row) = @_; @@ -131,13 +131,13 @@ sub find_genres_for_entities return unless scalar @ids; - my $query = "SELECT tag.id AS tag_id, tag.name, entity_tag.count, - entity_tag." . $self->type . " AS entity, genre.id AS genre_id - FROM " . $self->tag_table . " entity_tag + my $query = 'SELECT tag.id AS tag_id, tag.name, entity_tag.count, + entity_tag.' . $self->type . ' AS entity, genre.id AS genre_id + FROM ' . $self->tag_table . ' entity_tag JOIN tag ON tag.id = entity_tag.tag JOIN genre ON tag.name = genre.name - WHERE " . $self->type . " IN (" . placeholders(@ids) . ") - ORDER BY tag.name COLLATE musicbrainz"; + WHERE ' . $self->type . ' IN (' . placeholders(@ids) . ') + ORDER BY tag.name COLLATE musicbrainz'; my @tags = $self->query_to_list($query, \@ids); @@ -161,8 +161,8 @@ sub find_user_genres_for_entities JOIN tag ON tag.id = entity_tag.tag JOIN genre ON tag.name = genre.name WHERE editor = ? - AND $type IN (" . placeholders(@ids) . ") - ORDER BY tag.name COLLATE musicbrainz"; + AND $type IN (" . placeholders(@ids) . ') + ORDER BY tag.name COLLATE musicbrainz'; my @tags = $self->query_to_list($query, [$user_id, @ids], sub { my ($model, $row) = @_; @@ -205,13 +205,13 @@ sub _new_from_row sub delete { my ($self, @entity_ids) = @_; - $self->sql->do(" - DELETE FROM " . $self->tag_table . " - WHERE " . $self->type . " IN (" . placeholders(@entity_ids) . ")", + $self->sql->do(' + DELETE FROM ' . $self->tag_table . ' + WHERE ' . $self->type . ' IN (' . placeholders(@entity_ids) . ')', @entity_ids); - $self->c->sql->do(" - DELETE FROM " . $self->tag_table . "_raw - WHERE " . $self->type . " IN (" . placeholders(@entity_ids) . ")", + $self->c->sql->do(' + DELETE FROM ' . $self->tag_table . '_raw + WHERE ' . $self->type . ' IN (' . placeholders(@entity_ids) . ')', @entity_ids); return 1; } @@ -227,7 +227,7 @@ sub merge { # FIXME: Due to the way DISTINCT ON works, if two entities have different # votes for the same tag by the same editor, the vote that remains on the # merge target is arbitrary. (ORDER BY doesn't work within the sub-select.) - $self->c->sql->do(<<~"EOSQL", \@ids, $new_id); + $self->c->sql->do(<<~"SQL", \@ids, $new_id); WITH deleted_tags AS ( DELETE FROM $assoc_table_raw WHERE $entity_type = any(?) @@ -236,7 +236,7 @@ sub merge { INSERT INTO $assoc_table_raw ($entity_type, editor, tag, is_upvote) SELECT ?, s.editor, s.tag, s.is_upvote FROM (SELECT DISTINCT ON (editor, tag) editor, tag, is_upvote FROM deleted_tags) s - EOSQL + SQL $self->c->sql->do( "DELETE FROM $assoc_table WHERE $entity_type = any(?)", @@ -460,8 +460,8 @@ sub find_entities ? 'sort_name COLLATE musicbrainz' : 'name COLLATE musicbrainz'; my $tag_table = $self->tag_table; - my $query = "SELECT tt.count AS tt_count, " . $self->parent->_columns . " - FROM " . $self->parent->_table . " + my $query = 'SELECT tt.count AS tt_count, ' . $self->parent->_columns . ' + FROM ' . $self->parent->_table . " JOIN $tag_table tt ON " . $self->parent->_id_column . " = tt.$type WHERE tag = ? AND tt.count > 0 @@ -486,8 +486,8 @@ sub find_editor_entities my $tag_table = $self->tag_table . '_raw'; my $is_upvote = $show_downvoted ? 0 : 1; - my $query = "SELECT " . $self->parent->_columns . " - FROM " . $self->parent->_table . " + my $query = 'SELECT ' . $self->parent->_columns . ' + FROM ' . $self->parent->_table . " JOIN $tag_table ttr ON " . $self->parent->_id_column . " = ttr.$type WHERE editor = ? AND tag = ? AND is_upvote = ? ORDER BY name COLLATE musicbrainz, " . $self->parent->_id_column; diff --git a/lib/MusicBrainz/Server/Data/Event.pm b/lib/MusicBrainz/Server/Data/Event.pm index 0302af0c474..3345175c0fd 100644 --- a/lib/MusicBrainz/Server/Data/Event.pm +++ b/lib/MusicBrainz/Server/Data/Event.pm @@ -142,7 +142,7 @@ sub _hash_to_row sub load_meta { my $self = shift; - MusicBrainz::Server::Data::Utils::load_meta($self->c, "event_meta", sub { + MusicBrainz::Server::Data::Utils::load_meta($self->c, 'event_meta', sub { my ($obj, $row) = @_; $obj->rating($row->{rating}) if defined $row->{rating}; $obj->rating_count($row->{rating_count}) if defined $row->{rating_count}; @@ -153,7 +153,7 @@ sub is_empty { my ($self, $event_id) = @_; my $used_in_relationship = used_in_relationship($self->c, event => 'event_row.id'); - return $self->sql->select_single_value(<<~"EOSQL", $event_id, $STATUS_OPEN); + return $self->sql->select_single_value(<<~"SQL", $event_id, $STATUS_OPEN); SELECT TRUE FROM event event_row WHERE id = ? @@ -166,7 +166,7 @@ sub is_empty { ) OR $used_in_relationship ) - EOSQL + SQL } sub load_related_info { @@ -195,7 +195,7 @@ sub find_by_area @area_containment_query_args, ) = get_area_containment_query('$2', 'ea.area'); my $query = - "SELECT " . $self->_columns ." + 'SELECT ' . $self->_columns ." FROM ( SELECT ea.event FROM ( SELECT lae.entity1 AS event, lae.entity0 AS area @@ -209,9 +209,9 @@ sub find_by_area SELECT 1 FROM ($area_containment_query) ac WHERE ac.descendant = ea.area AND ac.parent = \$1 ) - ) s, " . $self->_table . " + ) s, " . $self->_table . ' WHERE event.id = s.event - ORDER BY event.begin_date_year, event.begin_date_month, event.begin_date_day, event.time, event.name COLLATE musicbrainz"; + ORDER BY event.begin_date_year, event.begin_date_month, event.begin_date_day, event.time, event.name COLLATE musicbrainz'; $self->query_to_list_limited( $query, [$area_id, @area_containment_query_args], $limit, $offset, undef, dollar_placeholders => 1, @@ -239,17 +239,17 @@ sub find_by_artist sub _order_by { my ($self, $order) = @_; - $order = (($order // "") eq "") ? "-date" : $order; + $order = (($order // '') eq '') ? '-date' : $order; - my $order_by = order_by($order, "date", { - "date" => sub { - return "begin_date_year, begin_date_month, begin_date_day, time, name COLLATE musicbrainz" + my $order_by = order_by($order, 'date', { + 'date' => sub { + return 'begin_date_year, begin_date_month, begin_date_day, time, name COLLATE musicbrainz' }, - "name" => sub { - return "name COLLATE musicbrainz, begin_date_year, begin_date_month, begin_date_day, time" + 'name' => sub { + return 'name COLLATE musicbrainz, begin_date_year, begin_date_month, begin_date_day, time' }, - "type" => sub { - return "type, begin_date_year, begin_date_month, begin_date_day, time, name COLLATE musicbrainz" + 'type' => sub { + return 'type, begin_date_year, begin_date_month, begin_date_day, time, name COLLATE musicbrainz' }, }); @@ -345,10 +345,10 @@ sub load_ids my @gids = map { $_->gid } @events; return () unless @gids; - my $query = " + my $query = ' SELECT gid, id FROM event - WHERE gid IN (" . placeholders(@gids) . ") - "; + WHERE gid IN (' . placeholders(@gids) . ') + '; my %map = map { $_->[0] => $_->[1] } @{ $self->sql->select_list_of_lists($query, @gids) }; @@ -385,16 +385,16 @@ sub _find_performers my ($self, $ids, $map) = @_; return unless @$ids; - my $query = " + my $query = ' SELECT lae.entity1 AS event, lae.entity0 AS artist, lae.entity0_credit AS credit, array_agg(lt.name) AS roles FROM l_artist_event lae JOIN link l ON lae.link = l.id JOIN link_type lt ON l.link_type = lt.id - WHERE lae.entity1 IN (" . placeholders(@$ids) . ") + WHERE lae.entity1 IN (' . placeholders(@$ids) . ') GROUP BY lae.entity1, lae.entity0, lae.entity0_credit ORDER BY count(*) DESC, artist, credit - "; + '; my $rows = $self->sql->select_list_of_lists($query, @$ids); @@ -446,16 +446,16 @@ sub _find_places my ($self, $ids, $map) = @_; return unless @$ids; - my $query = " + my $query = ' SELECT lep.entity0 AS event, lep.entity1 AS place, lep.entity1_credit AS credit FROM l_event_place lep JOIN link l ON lep.link = l.id JOIN link_type lt ON l.link_type = lt.id - WHERE lep.entity0 IN (" . placeholders(@$ids) . ") + WHERE lep.entity0 IN (' . placeholders(@$ids) . ') GROUP BY lep.entity0, lep.entity1, lep.entity1_credit ORDER BY count(*) DESC, place, credit - "; + '; my $rows = $self->sql->select_list_of_lists($query, @$ids); @@ -477,16 +477,16 @@ sub _find_areas my ($self, $ids, $map) = @_; return unless @$ids; - my $query = " + my $query = ' SELECT lare.entity1 AS event, lare.entity0 AS area, lare.entity0_credit AS credit FROM l_area_event lare JOIN link l ON lare.link = l.id JOIN link_type lt ON l.link_type = lt.id - WHERE lare.entity1 IN (" . placeholders(@$ids) . ") + WHERE lare.entity1 IN (' . placeholders(@$ids) . ') GROUP BY lare.entity1, lare.entity0, lare.entity0_credit ORDER BY count(*) DESC, area, credit - "; + '; my $rows = $self->sql->select_list_of_lists($query, @$ids); diff --git a/lib/MusicBrainz/Server/Data/FileCache.pm b/lib/MusicBrainz/Server/Data/FileCache.pm index 89b6785790f..5485147a670 100644 --- a/lib/MusicBrainz/Server/Data/FileCache.pm +++ b/lib/MusicBrainz/Server/Data/FileCache.pm @@ -51,7 +51,7 @@ sub manifest_signature { if (($time - $instance->manifest_last_checked) > $ttl) { $instance->manifest_last_checked($time); - my $path = DBDefs->STATIC_FILES_DIR . "/build/rev-manifest.json"; + my $path = DBDefs->STATIC_FILES_DIR . '/build/rev-manifest.json'; my @stat = stat($path); my $mtime = $stat[9]; @@ -69,7 +69,7 @@ sub template_signature { my $instance = $self->instance; my $signature_key = 'template' . $template; unless (exists $instance->file_signatures->{$signature_key}) { - $instance->file_signatures->{$signature_key} = file_md5_hex(DBDefs->MB_SERVER_ROOT . "/root/" . $template); + $instance->file_signatures->{$signature_key} = file_md5_hex(DBDefs->MB_SERVER_ROOT . '/root/' . $template); } return $instance->file_signatures->{$signature_key}; diff --git a/lib/MusicBrainz/Server/Data/ISRC.pm b/lib/MusicBrainz/Server/Data/ISRC.pm index 2833f3e23b9..099e21cebc5 100644 --- a/lib/MusicBrainz/Server/Data/ISRC.pm +++ b/lib/MusicBrainz/Server/Data/ISRC.pm @@ -44,10 +44,10 @@ sub find_by_recordings my @ids = ref $_[0] ? @{$_[0]} : @_; return () unless @ids; - my $query = "SELECT ".$self->_columns." - FROM ".$self->_table." - WHERE recording IN (" . placeholders(@ids) . ") - ORDER BY isrc"; + my $query = 'SELECT '.$self->_columns.' + FROM '.$self->_table.' + WHERE recording IN (' . placeholders(@ids) . ') + ORDER BY isrc'; $self->query_to_list($query, \@ids); } @@ -73,10 +73,10 @@ sub find_by_isrc { my ($self, $isrc) = @_; - my $query = "SELECT ".$self->_columns." - FROM ".$self->_table." + my $query = 'SELECT '.$self->_columns.' + FROM '.$self->_table.' WHERE isrc = ? - ORDER BY id"; + ORDER BY id'; $self->query_to_list($query, [$isrc]); } @@ -126,7 +126,7 @@ sub insert my ($self, @isrcs) = @_; $self->sql->do('INSERT INTO isrc (recording, isrc, source) VALUES ' . - (join ",", (("(?, ?, ?)") x @isrcs)), + (join ',', (('(?, ?, ?)') x @isrcs)), map { $_->{recording_id}, $_->{isrc}, $_->{source} || undef } @isrcs); } diff --git a/lib/MusicBrainz/Server/Data/ISWC.pm b/lib/MusicBrainz/Server/Data/ISWC.pm index 0640da7cc65..4ebe11bfb2f 100644 --- a/lib/MusicBrainz/Server/Data/ISWC.pm +++ b/lib/MusicBrainz/Server/Data/ISWC.pm @@ -40,8 +40,8 @@ sub _entity_class sub _find { my ($self, $field, @ids) = @_; - my $query = "SELECT " . $self->_columns ." - FROM " . $self->_table . " + my $query = 'SELECT ' . $self->_columns .' + FROM ' . $self->_table . " WHERE $field = any(?) ORDER BY iswc, id"; @@ -186,7 +186,7 @@ sub insert my ($self, @iswcs) = @_; $self->sql->do('INSERT INTO iswc (work, iswc) VALUES ' . - (join ",", (("(?, ?)") x @iswcs)), + (join ',', (('(?, ?)') x @iswcs)), map { $_->{work_id}, $_->{iswc} } @iswcs); } diff --git a/lib/MusicBrainz/Server/Data/Instrument.pm b/lib/MusicBrainz/Server/Data/Instrument.pm index ccc157eb654..1f8ba1090df 100644 --- a/lib/MusicBrainz/Server/Data/Instrument.pm +++ b/lib/MusicBrainz/Server/Data/Instrument.pm @@ -124,12 +124,12 @@ sub _hash_to_row { sub _order_by { my ($self, $order) = @_; - my $order_by = order_by($order, "name", { - "name" => sub { - return "name COLLATE musicbrainz" + my $order_by = order_by($order, 'name', { + 'name' => sub { + return 'name COLLATE musicbrainz' }, - "type" => sub { - return "type, name COLLATE musicbrainz" + 'type' => sub { + return 'type, name COLLATE musicbrainz' } }); @@ -139,7 +139,7 @@ sub _order_by { sub get_all { my $self = shift; - my $query = "SELECT " . $self->_columns . " FROM " . $self->_table; + my $query = 'SELECT ' . $self->_columns . ' FROM ' . $self->_table; $self->query_to_list($query); } diff --git a/lib/MusicBrainz/Server/Data/Label.pm b/lib/MusicBrainz/Server/Data/Label.pm index ad962d6e911..d6ad4e5cb0c 100644 --- a/lib/MusicBrainz/Server/Data/Label.pm +++ b/lib/MusicBrainz/Server/Data/Label.pm @@ -78,11 +78,11 @@ sub _column_mapping sub find_by_subscribed_editor { my ($self, $editor_id, $limit, $offset) = @_; - my $query = "SELECT " . $self->_columns . " - FROM " . $self->_table . " + my $query = 'SELECT ' . $self->_columns . ' + FROM ' . $self->_table . ' JOIN editor_subscribe_label s ON label.id = s.label WHERE s.editor = ? - ORDER BY label.name COLLATE musicbrainz, label.id"; + ORDER BY label.name COLLATE musicbrainz, label.id'; $self->query_to_list_limited($query, [$editor_id], $limit, $offset); } @@ -92,8 +92,8 @@ sub find_by_area { $containment_query, @containment_query_args, ) = get_area_containment_query('$2', 'area', check_all_levels => 1); - my $query = "SELECT " . $self->_columns . " - FROM " . $self->_table . " + my $query = 'SELECT ' . $self->_columns . ' + FROM ' . $self->_table . " WHERE area = \$1 OR EXISTS ( SELECT 1 FROM ($containment_query) ac WHERE ac.descendant = area AND ac.parent = \$1 @@ -109,35 +109,35 @@ sub find_by_release { my ($self, $release_id, $limit, $offset) = @_; - my $query = "SELECT " . $self->_columns . " - FROM " . $self->_table . " + my $query = 'SELECT ' . $self->_columns . ' + FROM ' . $self->_table . ' JOIN release_label ON release_label.label = label.id WHERE release_label.release = ? - ORDER BY label.name COLLATE musicbrainz"; + ORDER BY label.name COLLATE musicbrainz'; $self->query_to_list_limited($query, [$release_id], $limit, $offset); } sub _order_by { my ($self, $order) = @_; - my $order_by = order_by($order, "name", { - "name" => sub { - return "name COLLATE musicbrainz" + my $order_by = order_by($order, 'name', { + 'name' => sub { + return 'name COLLATE musicbrainz' }, - "label_code" => sub { - return "label_code, name COLLATE musicbrainz" + 'label_code' => sub { + return 'label_code, name COLLATE musicbrainz' }, - "area" => sub { - return "area, name COLLATE musicbrainz" + 'area' => sub { + return 'area, name COLLATE musicbrainz' }, - "begin_date" => sub { - return "begin_date_year, begin_date_month, begin_date_day, name COLLATE musicbrainz" + 'begin_date' => sub { + return 'begin_date_year, begin_date_month, begin_date_day, name COLLATE musicbrainz' }, - "end_date" => sub { - return "end_date_year, end_date_month, end_date_day, name COLLATE musicbrainz" + 'end_date' => sub { + return 'end_date_year, end_date_month, end_date_day, name COLLATE musicbrainz' }, - "type" => sub { - return "type, name COLLATE musicbrainz" + 'type' => sub { + return 'type, name COLLATE musicbrainz' } }); @@ -264,7 +264,7 @@ sub _hash_to_row sub load_meta { my $self = shift; - MusicBrainz::Server::Data::Utils::load_meta($self->c, "label_meta", sub { + MusicBrainz::Server::Data::Utils::load_meta($self->c, 'label_meta', sub { my ($obj, $row) = @_; $obj->rating($row->{rating}) if defined $row->{rating}; $obj->rating_count($row->{rating_count}) if defined $row->{rating_count}; @@ -275,7 +275,7 @@ sub is_empty { my ($self, $label_id) = @_; my $used_in_relationship = used_in_relationship($self->c, label => 'label_row.id'); - return $self->sql->select_single_value(<<~"EOSQL", $label_id, $STATUS_OPEN); + return $self->sql->select_single_value(<<~"SQL", $label_id, $STATUS_OPEN); SELECT TRUE FROM label label_row WHERE id = ? @@ -291,7 +291,7 @@ sub is_empty { ) OR $used_in_relationship ) - EOSQL + SQL } __PACKAGE__->meta->make_immutable; diff --git a/lib/MusicBrainz/Server/Data/Language.pm b/lib/MusicBrainz/Server/Data/Language.pm index ffe5643facf..2efa6743479 100644 --- a/lib/MusicBrainz/Server/Data/Language.pm +++ b/lib/MusicBrainz/Server/Data/Language.pm @@ -57,14 +57,6 @@ sub load_for_works { load_subobjects($self, 'language', map { $_->all_languages } @objs); - for my $work (@objs) { - for my $wl ($work->all_languages) { - if ($wl->language && $wl->language->iso_code_3 eq "zxx") { - $wl->language->name(l("[No lyrics]")); - } - } - } - return; } diff --git a/lib/MusicBrainz/Server/Data/Link.pm b/lib/MusicBrainz/Server/Data/Link.pm index 7f18d46b898..dce2ca427d3 100644 --- a/lib/MusicBrainz/Server/Data/Link.pm +++ b/lib/MusicBrainz/Server/Data/Link.pm @@ -52,7 +52,7 @@ sub _load_attributes my ($self, $data, @ids) = @_; if (@ids) { - my $query = " + my $query = q{ SELECT link, attr.id, @@ -77,8 +77,8 @@ sub _load_attributes LEFT OUTER JOIN link_attribute_credit attr_credit USING (link, attribute_type) LEFT OUTER JOIN instrument ins ON ins.gid = attr.gid LEFT OUTER JOIN instrument_type ins_t ON ins.type = ins_t.id - WHERE link IN (" . placeholders(@ids) . ") - ORDER BY link, attr.name"; + WHERE link IN (} . placeholders(@ids) . ') + ORDER BY link, attr.name'; for my $row (@{ $self->sql->select_list_of_hashes($query, @ids) }) { if (my $link = $data->{ $row->{link} }) { @@ -149,7 +149,7 @@ sub find my ($self, $values) = @_; my (@joins, @conditions, @args); - push @conditions, "link_type = ?"; + push @conditions, 'link_type = ?'; push @args, $values->{link_type_id}; # end_date_implies_ended @@ -160,7 +160,7 @@ sub find $values->{ended} //= 0; - push @conditions, "ended = ?"; + push @conditions, 'ended = ?'; push @args, $values->{ended}; foreach my $date_key (qw( begin_date end_date )) { @@ -177,7 +177,7 @@ sub find my @attrs = @{ $values->{attributes} // [] }; - push @conditions, "attribute_count = ?"; + push @conditions, 'attribute_count = ?'; push @args, scalar(@attrs); my $i = 1; @@ -214,7 +214,7 @@ sub find $i += 1; } - my $query = "SELECT link.id FROM link " . join(" ", @joins) . " WHERE " . join(" AND ", @conditions); + my $query = 'SELECT link.id FROM link ' . join(' ', @joins) . ' WHERE ' . join(' AND ', @conditions); return $self->sql->select_single_value($query, @args); } @@ -232,20 +232,20 @@ sub find_or_insert attribute_count => scalar(@attrs), ended => $values->{ended} }; - add_partial_date_to_row($row, $values->{begin_date}, "begin_date"); - add_partial_date_to_row($row, $values->{end_date}, "end_date"); - $id = $self->sql->insert_row("link", $row, "id"); + add_partial_date_to_row($row, $values->{begin_date}, 'begin_date'); + add_partial_date_to_row($row, $values->{end_date}, 'end_date'); + $id = $self->sql->insert_row('link', $row, 'id'); foreach my $attr (@attrs) { my $attribute_type = $attr->{type}{id}; - $self->sql->insert_row("link_attribute", { + $self->sql->insert_row('link_attribute', { link => $id, attribute_type => $attribute_type, }); if (non_empty($attr->{credited_as})) { - $self->sql->insert_row("link_attribute_credit", { + $self->sql->insert_row('link_attribute_credit', { attribute_type => $attribute_type, link => $id, credited_as => $attr->{credited_as} @@ -253,7 +253,7 @@ sub find_or_insert } if (non_empty($attr->{text_value})) { - $self->sql->insert_row("link_attribute_text_value", { + $self->sql->insert_row('link_attribute_text_value', { link => $id, attribute_type => $attribute_type, text_value => $attr->{text_value} diff --git a/lib/MusicBrainz/Server/Data/LinkAttributeType.pm b/lib/MusicBrainz/Server/Data/LinkAttributeType.pm index 59ff48922ed..1b3cbdb34f2 100644 --- a/lib/MusicBrainz/Server/Data/LinkAttributeType.pm +++ b/lib/MusicBrainz/Server/Data/LinkAttributeType.pm @@ -60,9 +60,9 @@ sub _columns WHERE attribute_type = link_attribute_type.id), false ) AS creditable, ' . - "COALESCE(ins.instrument_comment, '') AS instrument_comment, " . + q{COALESCE(ins.instrument_comment, '') AS instrument_comment, } . 'ins.instrument_type_id, ' . - "COALESCE(ins.instrument_type_name, '') AS instrument_type_name"; + q{COALESCE(ins.instrument_type_name, '') AS instrument_type_name}; } sub _column_mapping @@ -130,7 +130,7 @@ sub insert my ($self, $values) = @_; my $row = $self->_hash_to_row($values); - $row->{id} = $self->sql->select_single_value("SELECT nextval('link_attribute_type_id_seq')"); + $row->{id} = $self->sql->select_single_value(q{SELECT nextval('link_attribute_type_id_seq')}); $row->{gid} = $values->{gid} || generate_gid(); $row->{root} = $row->{parent} ? $self->find_root($row->{parent}) : $row->{id}; $self->sql->insert_row('link_attribute_type', $row); @@ -355,7 +355,7 @@ sub merge_instrument_attributes { $new_link->{attributes} = [values %new_attributes]; my $new_link_id = $self->c->model('Link')->find_or_insert($new_link); - my $relationships = $self->sql->select_list_of_hashes(<<~"EOSQL", $new_link_id, $old_link_id, $new_link_id); + my $relationships = $self->sql->select_list_of_hashes(<<~"SQL", $new_link_id, $old_link_id, $new_link_id); UPDATE l_${entity_type0}_${entity_type1} r1 SET link = ? WHERE link = ? AND NOT EXISTS ( SELECT 1 FROM l_${entity_type0}_${entity_type1} r2 @@ -365,7 +365,7 @@ sub merge_instrument_attributes { AND r2.link_order = r1.link_order ) RETURNING * - EOSQL + SQL # Delete leftover duplicate relationships already using $new_link_id. $self->sql->do("DELETE FROM l_${entity_type0}_${entity_type1} WHERE link = ?", $old_link_id); diff --git a/lib/MusicBrainz/Server/Data/LinkType.pm b/lib/MusicBrainz/Server/Data/LinkType.pm index e357904aaf3..8787f37d277 100644 --- a/lib/MusicBrainz/Server/Data/LinkType.pm +++ b/lib/MusicBrainz/Server/Data/LinkType.pm @@ -47,11 +47,11 @@ sub _load_attributes my ($self, $data, @ids) = @_; if (@ids) { - my $query = " + my $query = ' SELECT * FROM link_type_attribute_type - WHERE link_type IN (" . placeholders(@ids) . ") - ORDER BY link_type"; + WHERE link_type IN (' . placeholders(@ids) . ') + ORDER BY link_type'; for my $row (@{ $self->sql->select_list_of_hashes($query, @ids) }) { my $id = $row->{link_type}; if (exists $data->{$id}) { @@ -97,11 +97,11 @@ around get_by_gid => sub sub find_by_attribute { my ($self, $attribute_id) = @_; - my $query = "SELECT " . $self->_columns . " - FROM " . $self->_table . " + my $query = 'SELECT ' . $self->_columns . ' + FROM ' . $self->_table . ' JOIN link_type_attribute_type ltat ON ltat.link_type = link_type.id WHERE ltat.attribute_type = ? - ORDER BY link_type.name COLLATE musicbrainz"; + ORDER BY link_type.name COLLATE musicbrainz'; $self->query_to_list($query, [$attribute_id]); } @@ -121,7 +121,7 @@ sub get_tree my $extra_condition = ''; unless ($opts{get_deprecated_and_empty}) { - $extra_condition = <<~'EOSQL'; + $extra_condition = <<~'SQL'; AND ( is_deprecated = FALSE OR @@ -129,7 +129,7 @@ sub get_tree SELECT 1 FROM link WHERE link.link_type = lt.id ) ) - EOSQL + SQL } for my $row (@{ @@ -166,7 +166,7 @@ sub get_full_tree my $extra_condition = ''; unless ($get_deprecated_and_empty) { - $extra_condition = <<~'EOSQL'; + $extra_condition = <<~'SQL'; WHERE ( is_deprecated = FALSE OR @@ -174,7 +174,7 @@ sub get_full_tree SELECT 1 FROM link WHERE link.link_type = lt.id ) ) - EOSQL + SQL } for my $row (@{ @@ -300,13 +300,13 @@ sub set_examples { my ($self, $id, $examples) = @_; my $link_table = $self->sql->select_single_value( - "SELECT 'l_' || entity_type0 || '_' || entity_type1 + q(SELECT 'l_' || entity_type0 || '_' || entity_type1 FROM link_type - WHERE id = ?", + WHERE id = ?), $id ); - my $documentation_link_table = sprintf "documentation.%s_example", + my $documentation_link_table = sprintf 'documentation.%s_example', $link_table; $self->sql->do( diff --git a/lib/MusicBrainz/Server/Data/Medium.pm b/lib/MusicBrainz/Server/Data/Medium.pm index 8a5c7d4fa20..f3cc63a14a1 100644 --- a/lib/MusicBrainz/Server/Data/Medium.pm +++ b/lib/MusicBrainz/Server/Data/Medium.pm @@ -96,10 +96,10 @@ sub load_for_releases my @ids = keys %id_to_release; return unless @ids; # nothing to do - my $query = "SELECT " . $self->_columns . " - FROM " . $self->_table . " - WHERE release IN (" . placeholders(@ids) . ") - ORDER BY release, position"; + my $query = 'SELECT ' . $self->_columns . ' + FROM ' . $self->_table . ' + WHERE release IN (' . placeholders(@ids) . ') + ORDER BY release, position'; my @mediums = $self->query_to_list($query, \@ids); foreach my $medium (@mediums) { foreach my $release (@{ $id_to_release{$medium->release_id} }) @@ -117,7 +117,7 @@ sub load_for_releases sub update { my ($self, $medium_id, $medium_hash) = @_; - die "update cannot update tracklist" if exists $medium_hash->{tracklist}; + die 'update cannot update tracklist' if exists $medium_hash->{tracklist}; my $row = $self->_create_row($medium_hash); return unless %$row; @@ -196,7 +196,7 @@ sub find_for_cdstub { 'SELECT ' . join(', ', $self->c->model('Release')->_columns, map { "medium.$_ AS m_$_" } qw( id name track_count release position format edits_pending - )) . " + )) . q( FROM ( SELECT id, ts_rank_cd(mb_simple_tsvector(name), query, 2) AS rank, name @@ -211,7 +211,7 @@ sub find_for_cdstub { WHERE track_count_matches_cdtoc(medium, ?) AND (medium_format.id IS NULL OR medium_format.has_discids) ORDER BY name.rank DESC, name.name COLLATE musicbrainz, - release.artist_credit"; + release.artist_credit); $self->query_to_list( $query, @@ -231,10 +231,10 @@ sub set_lengths_to_cdtoc { my ($self, $medium_id, $cdtoc_id) = @_; my $cdtoc = $self->c->model('CDTOC')->get_by_id($cdtoc_id) - or die "Could not load CDTOC"; + or die 'Could not load CDTOC'; my $medium = $self->get_by_id($medium_id) - or die "Could not load tracklist"; + or die 'Could not load tracklist'; $self->c->model('Track')->load_for_mediums($medium); $self->c->model('ArtistCredit')->load($medium->all_tracks); diff --git a/lib/MusicBrainz/Server/Data/MediumCDTOC.pm b/lib/MusicBrainz/Server/Data/MediumCDTOC.pm index 1d61701cfd2..e361f02a724 100644 --- a/lib/MusicBrainz/Server/Data/MediumCDTOC.pm +++ b/lib/MusicBrainz/Server/Data/MediumCDTOC.pm @@ -45,10 +45,10 @@ sub find_by_medium my ($self, @medium_ids) = @_; return () unless @medium_ids; - my $query = " - SELECT " . $self->_columns . " FROM " . $self->_table . " - WHERE medium IN (" . placeholders(@medium_ids) . ") - ORDER BY id"; + my $query = ' + SELECT ' . $self->_columns . ' FROM ' . $self->_table . ' + WHERE medium IN (' . placeholders(@medium_ids) . ') + ORDER BY id'; $self->query_to_list($query, \@medium_ids); } diff --git a/lib/MusicBrainz/Server/Data/Place.pm b/lib/MusicBrainz/Server/Data/Place.pm index 6778b174e91..7c1759fabb9 100644 --- a/lib/MusicBrainz/Server/Data/Place.pm +++ b/lib/MusicBrainz/Server/Data/Place.pm @@ -154,7 +154,7 @@ sub _hash_to_row sub load_meta { my $self = shift; - MusicBrainz::Server::Data::Utils::load_meta($self->c, "place_meta", sub { + MusicBrainz::Server::Data::Utils::load_meta($self->c, 'place_meta', sub { my ($obj, $row) = @_; $obj->rating($row->{rating}) if defined $row->{rating}; $obj->rating_count($row->{rating_count}) if defined $row->{rating_count}; @@ -165,7 +165,7 @@ sub is_empty { my ($self, $place_id) = @_; my $used_in_relationship = used_in_relationship($self->c, place => 'place_row.id'); - return $self->sql->select_single_value(<<~"EOSQL", $place_id, $STATUS_OPEN); + return $self->sql->select_single_value(<<~"SQL", $place_id, $STATUS_OPEN); SELECT TRUE FROM place place_row WHERE id = ? @@ -178,7 +178,7 @@ sub is_empty { ) OR $used_in_relationship ) - EOSQL + SQL } sub find_by_area { @@ -187,8 +187,8 @@ sub find_by_area { $containment_query, @containment_query_args, ) = get_area_containment_query('$2', 'area', check_all_levels => 1); - my $query = "SELECT " . $self->_columns . " - FROM " . $self->_table . " + my $query = 'SELECT ' . $self->_columns . ' + FROM ' . $self->_table . " WHERE area = \$1 OR EXISTS ( SELECT 1 FROM ($containment_query) ac WHERE ac.descendant = area AND ac.parent = \$1 @@ -202,24 +202,24 @@ sub find_by_area { sub _order_by { my ($self, $order) = @_; - my $order_by = order_by($order, "name", { - "name" => sub { - return "name COLLATE musicbrainz" + my $order_by = order_by($order, 'name', { + 'name' => sub { + return 'name COLLATE musicbrainz' }, - "area" => sub { - return "area, name COLLATE musicbrainz" + 'area' => sub { + return 'area, name COLLATE musicbrainz' }, - "address" => sub { - return "address COLLATE musicbrainz, name COLLATE musicbrainz" + 'address' => sub { + return 'address COLLATE musicbrainz, name COLLATE musicbrainz' }, - "begin_date" => sub { - return "begin_date_year, begin_date_month, begin_date_day, name COLLATE musicbrainz" + 'begin_date' => sub { + return 'begin_date_year, begin_date_month, begin_date_day, name COLLATE musicbrainz' }, - "end_date" => sub { - return "end_date_year, end_date_month, end_date_day, name COLLATE musicbrainz" + 'end_date' => sub { + return 'end_date_year, end_date_month, end_date_day, name COLLATE musicbrainz' }, - "type" => sub { - return "type, name COLLATE musicbrainz" + 'type' => sub { + return 'type, name COLLATE musicbrainz' } }); diff --git a/lib/MusicBrainz/Server/Data/Rating.pm b/lib/MusicBrainz/Server/Data/Rating.pm index 3d0e5f4ccea..6be29bccd44 100644 --- a/lib/MusicBrainz/Server/Data/Rating.pm +++ b/lib/MusicBrainz/Server/Data/Rating.pm @@ -90,7 +90,7 @@ sub load_user_ratings my $type = $self->type; my $query = " SELECT $type AS id, rating FROM ${type}_rating_raw - WHERE editor = ? AND $type IN (".placeholders(@ids).")"; + WHERE editor = ? AND $type IN (".placeholders(@ids).')'; for my $row (@{ $self->sql->select_list_of_hashes($query, $user_id, @ids) }) { my $obj = $id_to_obj{$row->{id}}; @@ -146,9 +146,9 @@ sub merge sub delete { my ($self, @entity_ids) = @_; - $self->c->sql->do(" - DELETE FROM " . $self->type . "_rating_raw - WHERE " . $self->type . " IN (" . placeholders(@entity_ids) . ")", + $self->c->sql->do(' + DELETE FROM ' . $self->type . '_rating_raw + WHERE ' . $self->type . ' IN (' . placeholders(@entity_ids) . ')', @entity_ids); return 1; } diff --git a/lib/MusicBrainz/Server/Data/Recording.pm b/lib/MusicBrainz/Server/Data/Recording.pm index 1bd5a90dcc3..08d83766056 100644 --- a/lib/MusicBrainz/Server/Data/Recording.pm +++ b/lib/MusicBrainz/Server/Data/Recording.pm @@ -70,11 +70,11 @@ sub find_artist_credits_by_artist { my ($self, $artist_id) = @_; - my $query = "SELECT DISTINCT rec.artist_credit + my $query = 'SELECT DISTINCT rec.artist_credit FROM recording rec JOIN artist_credit_name acn ON acn.artist_credit = rec.artist_credit - WHERE acn.artist = ?"; + WHERE acn.artist = ?'; my $ids = $self->sql->select_single_column_array($query, $artist_id); return $self->c->model('ArtistCredit')->find_by_ids($ids); } @@ -85,30 +85,30 @@ sub find_by_artist my (@where_query, @where_args); - push @where_query, "acn.artist = ?"; + push @where_query, 'acn.artist = ?'; push @where_args, $artist_id; if (exists $args{filter}) { my %filter = %{ $args{filter} }; if (exists $filter{name}) { - push @where_query, "(mb_simple_tsvector(recording.name) @@ plainto_tsquery('mb_simple', mb_lower(?)) OR recording.name = ?)"; + push @where_query, q{(mb_simple_tsvector(recording.name) @@ plainto_tsquery('mb_simple', mb_lower(?)) OR recording.name = ?)}; push @where_args, $filter{name}, $filter{name}; } if (exists $filter{artist_credit_id}) { - push @where_query, "recording.artist_credit = ?"; + push @where_query, 'recording.artist_credit = ?'; push @where_args, $filter{artist_credit_id}; } } - my $query = "SELECT DISTINCT " . $self->_columns . ", + my $query = 'SELECT DISTINCT ' . $self->_columns . ', recording.name COLLATE musicbrainz AS name_collate, comment COLLATE musicbrainz AS comment_collate - FROM " . $self->_table . " + FROM ' . $self->_table . ' JOIN artist_credit_name acn ON acn.artist_credit = recording.artist_credit - WHERE " . join(" AND ", @where_query) . " + WHERE ' . join(' AND ', @where_query) . ' ORDER BY recording.name COLLATE musicbrainz, - comment COLLATE musicbrainz"; + comment COLLATE musicbrainz'; $self->query_to_list_limited($query, \@where_args, $limit, $offset); } @@ -116,11 +116,11 @@ sub find_by_artist_credit { my ($self, $artist_credit_id, $limit, $offset) = @_; - my $query = "SELECT " . $self->_columns . ", + my $query = 'SELECT ' . $self->_columns . ', name COLLATE musicbrainz AS name_collate - FROM " . $self->_table . " + FROM ' . $self->_table . ' WHERE artist_credit = ? - ORDER BY name COLLATE musicbrainz"; + ORDER BY name COLLATE musicbrainz'; $self->query_to_list_limited($query, [$artist_credit_id], $limit, $offset); } @@ -128,9 +128,9 @@ sub find_by_instrument { my ($self, $instrument_id, $limit, $offset) = @_; # NOTE: if more tables than l_artist_recording are added here, check admin/BuildSitemaps.pl - my $query = "SELECT " . $self->_columns . ", + my $query = 'SELECT ' . $self->_columns . q{, array_agg(json_build_object('typeName', link_type.name, 'credit', lac.credited_as)) AS instrument_credits_and_rel_types - FROM " . $self->_table . " + FROM } . $self->_table . ' JOIN l_artist_recording ON l_artist_recording.entity1 = recording.id JOIN link ON link.id = l_artist_recording.link JOIN link_type ON link_type.id = link.link_type @@ -143,7 +143,7 @@ sub find_by_instrument { ) WHERE instrument.id = ? GROUP BY recording.id - ORDER BY recording.name COLLATE musicbrainz"; + ORDER BY recording.name COLLATE musicbrainz'; $self->query_to_list_limited( $query, @@ -162,13 +162,13 @@ sub find_by_release { my ($self, $release_id, $limit, $offset) = @_; - my $query = "SELECT " . $self->_columns . " - FROM " . $self->_table . " + my $query = 'SELECT ' . $self->_columns . ' + FROM ' . $self->_table . ' JOIN track ON track.recording = recording.id JOIN medium ON medium.id = track.medium JOIN release ON release.id = medium.release WHERE release.id = ? - ORDER BY recording.name COLLATE musicbrainz"; + ORDER BY recording.name COLLATE musicbrainz'; $self->query_to_list_limited($query, [$release_id], $limit, $offset); } @@ -178,11 +178,11 @@ sub find_by_works my ($self, $work_ids, $limit, $offset) = @_; return ([], 0) unless @$work_ids; - my $query = "SELECT " . $self->_columns . " - FROM ". $self->_table . " + my $query = 'SELECT ' . $self->_columns . ' + FROM '. $self->_table . ' JOIN l_recording_work lrw ON lrw.entity0 = recording.id WHERE lrw.entity1 = any(?) - ORDER BY recording.name COLLATE musicbrainz"; + ORDER BY recording.name COLLATE musicbrainz'; $self->query_to_list_limited($query, [$work_ids], $limit, $offset); } @@ -190,20 +190,20 @@ sub find_by_works sub _order_by { my ($self, $order) = @_; - my $extra_join = ""; - my $also_select = ""; + my $extra_join = ''; + my $also_select = ''; - my $order_by = order_by($order, "name", { - "name" => sub { - return "name COLLATE musicbrainz" + my $order_by = order_by($order, 'name', { + 'name' => sub { + return 'name COLLATE musicbrainz' }, - "artist" => sub { - $extra_join = "JOIN artist_credit ac ON ac.id = recording.artist_credit"; - $also_select = "ac.name AS ac_name"; - return "ac_name COLLATE musicbrainz, recording.name COLLATE musicbrainz"; + 'artist' => sub { + $extra_join = 'JOIN artist_credit ac ON ac.id = recording.artist_credit'; + $also_select = 'ac.name AS ac_name'; + return 'ac_name COLLATE musicbrainz, recording.name COLLATE musicbrainz'; }, - "length" => sub { - return "length, name COLLATE musicbrainz" + 'length' => sub { + return 'length, name COLLATE musicbrainz' }, }); @@ -272,7 +272,7 @@ sub _hash_to_row sub load_meta { my $self = shift; - MusicBrainz::Server::Data::Utils::load_meta($self->c, "recording_meta", sub { + MusicBrainz::Server::Data::Utils::load_meta($self->c, 'recording_meta', sub { my ($obj, $row) = @_; $obj->rating($row->{rating}) if defined $row->{rating}; $obj->rating_count($row->{rating_count}) if defined $row->{rating_count}; @@ -394,7 +394,7 @@ sub appears_on my @ids = map { $_->id } @$recordings; - my $hits_query = <<~'EOSQL'; + my $hits_query = <<~'SQL'; SELECT rec.id AS recording, rgs.hits FROM recording rec, LATERAL ( SELECT count(DISTINCT rg.id) AS hits @@ -405,19 +405,20 @@ sub appears_on WHERE t.recording = rec.id ) rgs WHERE rec.id = any(?) - EOSQL + SQL my %hits_map; for my $row (@{ $self->sql->select_list_of_hashes($hits_query, \@ids) }) { $hits_map{ $row->{recording} } = $row->{hits}; } - my $query = <<~'EOSQL'; + my $query = <<~'SQL'; SELECT rec.id AS recording, rgs.* FROM recording rec, LATERAL ( SELECT DISTINCT rg.id, rg.gid, rg.name, rg.type AS primary_type_id, rg.artist_credit AS artist_credit_id, + rg.edits_pending, rgm.first_release_date_year, rgm.first_release_date_month, rgm.first_release_date_day @@ -437,7 +438,7 @@ sub appears_on rgs.first_release_date_year, rgs.first_release_date_month, rgs.first_release_date_day - EOSQL + SQL my %map; for my $row (@{ $self->sql->select_list_of_hashes($query, $limit, \@ids) }) { diff --git a/lib/MusicBrainz/Server/Data/Relationship.pm b/lib/MusicBrainz/Server/Data/Relationship.pm index cb83d078abf..ce638e5f136 100644 --- a/lib/MusicBrainz/Server/Data/Relationship.pm +++ b/lib/MusicBrainz/Server/Data/Relationship.pm @@ -38,7 +38,7 @@ use List::UtilsBy qw( nsort_by partition_by ); use aliased 'MusicBrainz::Server::Entity::RelationshipTargetTypeGroup'; use aliased 'MusicBrainz::Server::Entity::RelationshipLinkTypeGroup'; -no if $] >= 5.018, warnings => "experimental::smartmatch"; +no if $] >= 5.018, warnings => 'experimental::smartmatch'; extends 'MusicBrainz::Server::Data::Entity'; @@ -90,7 +90,7 @@ sub _new_from_row $info{target_type} = $type0; } else { - carp "Neither relationship end-point matched the object."; + carp 'Neither relationship end-point matched the object.'; } } @@ -126,7 +126,7 @@ sub get_by_ids my ($self, $type0, $type1, @ids) = @_; $self->_check_types($type0, $type1); - my $query = "SELECT * FROM l_${type0}_${type1} WHERE id IN (" . placeholders(@ids) . ")"; + my $query = "SELECT * FROM l_${type0}_${type1} WHERE id IN (" . placeholders(@ids) . ')'; my $rows = $self->sql->select_list_of_hashes($query, @ids) or return undef; return { map { $_->{id} => $self->_new_from_row($_, $type0, $type1) } @$rows }; @@ -150,7 +150,7 @@ sub _load my (@cond, @params, $target, $target_id, $source_id, $query); if ($type eq $type0) { - my $condstring = "entity0 IN (" . placeholders(@ids) . ")"; + my $condstring = 'entity0 IN (' . placeholders(@ids) . ')'; if ($use_cardinality) { $condstring = "($condstring AND entity0_cardinality = 0)"; } @@ -161,7 +161,7 @@ sub _load $source_id = 'entity0'; } if ($type eq $type1) { - my $condstring = "entity1 IN (" . placeholders(@ids) . ")"; + my $condstring = 'entity1 IN (' . placeholders(@ids) . ')'; if ($use_cardinality) { $condstring = "($condstring AND entity1_cardinality = 0)"; } @@ -174,7 +174,7 @@ sub _load # If the source and target types are the same, two possible conditions # will have been added above, so join them with an OR. - @cond = join(" OR ", @cond); + @cond = join(' OR ', @cond); my $select = "l_${type0}_${type1}.* FROM l_${type0}_${type1} JOIN link l ON link = l.id @@ -195,7 +195,7 @@ sub _load $query = "SELECT $select JOIN $target ON $target_id = ${target}.id - WHERE " . join(" AND ", @cond) . " + WHERE " . join(' AND ', @cond) . " ORDER BY $order"; for my $row (@{ $self->sql->select_list_of_hashes($query, @params) }) { @@ -324,7 +324,7 @@ sub load_paged { $condstring .= " AND ${source_column}_cardinality = 0"; } - $query = "SELECT rel.* " . + $query = 'SELECT rel.* ' . "FROM l_${type0}_${type1} rel " . 'JOIN link l ON link = l.id ' . "JOIN $target_type ON rel.$target_column = ${target_type}.id " . @@ -557,7 +557,7 @@ sub merge_entities { ); } - my $relationships = $self->sql->select_list_of_hashes(<<~"EOSQL", \@ids); + my $relationships = $self->sql->select_list_of_hashes(<<~"SQL", \@ids); SELECT * FROM ( SELECT a.*, @@ -581,7 +581,7 @@ sub merge_entities { ) a JOIN link ON link.id = a.link ) b WHERE redundant > 1 - EOSQL + SQL # Given a set of duplicate relationship where only one will be kept, # determine what {entity0,entity1}_credit should be used. Non-empty @@ -718,8 +718,8 @@ sub delete_entities my ($table, $entity0, $entity1) = @$t; $self->sql->do(" DELETE FROM $table a - WHERE $entity0 IN (" . placeholders(@ids) . ") - ", @ids); + WHERE $entity0 IN (" . placeholders(@ids) . ') + ', @ids); } } @@ -768,7 +768,7 @@ sub _check_series_type { $self->c->model('SeriesType')->load($series); if ($series->type->item_entity_type ne $entity_type) { - die "Incorrect entity type for part of series relationship"; + die 'Incorrect entity type for part of series relationship'; } } @@ -777,8 +777,8 @@ sub insert my ($self, $type0, $type1, $values) = @_; $self->_check_types($type0, $type1); - $self->_check_series_type($values->{entity0_id}, $values->{link_type_id}, $type1) if $type0 eq "series"; - $self->_check_series_type($values->{entity1_id}, $values->{link_type_id}, $type0) if $type1 eq "series"; + $self->_check_series_type($values->{entity0_id}, $values->{link_type_id}, $type1) if $type0 eq 'series'; + $self->_check_series_type($values->{entity1_id}, $values->{link_type_id}, $type0) if $type1 eq 'series'; my $row = { link => $self->c->model('Link')->find_or_insert({ @@ -796,11 +796,11 @@ sub insert }; my $id = $self->sql->insert_row("l_${type0}_${type1}", $row, 'id'); - if ($type0 eq "series") { + if ($type0 eq 'series') { $self->c->model('Series')->automatically_reorder($values->{entity0_id}); } - if ($type1 eq "series") { + if ($type1 eq 'series') { $self->c->model('Series')->automatically_reorder($values->{entity1_id}); } @@ -833,8 +833,8 @@ sub update $new->{entity0_credit} = $values->{entity0_credit} if defined $values->{entity0_credit}; $new->{entity1_credit} = $values->{entity1_credit} if defined $values->{entity1_credit}; - my $series0 = $type0 eq "series"; - my $series1 = $type1 eq "series"; + my $series0 = $type0 eq 'series'; + my $series1 = $type1 eq 'series'; my $entity0_changed = $new->{entity0} && $old->{entity0} != $new->{entity0}; my $entity1_changed = $new->{entity1} && $old->{entity1} != $new->{entity1}; my $series0_changed = $series0 && $entity0_changed; @@ -869,13 +869,13 @@ sub delete $self->_check_types($type0, $type1); my $series_col; - $series_col = "entity0" if $type0 eq "series"; - $series_col = "entity1" if $type1 eq "series"; + $series_col = 'entity0' if $type0 eq 'series'; + $series_col = 'entity1' if $type1 eq 'series'; my $deleted = $self->sql->select_list_of_hashes( "DELETE FROM l_${type0}_${type1} " . - "WHERE id IN (" . placeholders(@ids) . ") " . - "RETURNING entity0, entity1", + 'WHERE id IN (' . placeholders(@ids) . ') ' . + 'RETURNING entity0, entity1', @ids, ); @@ -899,7 +899,7 @@ sub adjust_edit_pending my $query = "UPDATE l_${type0}_${type1} SET edits_pending = numeric_larger(0, edits_pending + ?) - WHERE id IN (" . placeholders(@ids) . ")"; + WHERE id IN (" . placeholders(@ids) . ')'; $self->sql->do($query, $adjust, @ids); } @@ -931,11 +931,11 @@ sub reorder { \@ids ); - die "Can only reorder one group of relationships" if @$groups != 1; + die 'Can only reorder one group of relationships' if @$groups != 1; $self->sql->do( - "WITH pos (relationship, link_order) AS ( - VALUES " . join(', ', ('(?::INTEGER, ?::INTEGER)') x @ids) . " + 'WITH pos (relationship, link_order) AS ( + VALUES ' . join(', ', ('(?::INTEGER, ?::INTEGER)') x @ids) . " ) UPDATE l_${type0}_${type1} SET link_order = pos.link_order FROM pos WHERE pos.relationship = id", diff --git a/lib/MusicBrainz/Server/Data/Release.pm b/lib/MusicBrainz/Server/Data/Release.pm index a647ddcbfef..8870fcb93ee 100644 --- a/lib/MusicBrainz/Server/Data/Release.pm +++ b/lib/MusicBrainz/Server/Data/Release.pm @@ -108,11 +108,11 @@ sub _where_filter if (defined $filter) { if (exists $filter->{name}) { - push @query, "(mb_simple_tsvector(release.name) @@ plainto_tsquery('mb_simple', mb_lower(?)) OR release.name = ?)"; + push @query, q{(mb_simple_tsvector(release.name) @@ plainto_tsquery('mb_simple', mb_lower(?)) OR release.name = ?)}; push @params, $filter->{name}, $filter->{name}; } if (exists $filter->{artist_credit_id}) { - push @query, "release.artist_credit = ?"; + push @query, 'release.artist_credit = ?'; push @params, $filter->{artist_credit_id}; } if (exists $filter->{status} && $filter->{status}) { @@ -185,23 +185,23 @@ sub find_artist_credits_by_artist { my ($self, $artist_id) = @_; - my $query = "SELECT DISTINCT rel.artist_credit + my $query = 'SELECT DISTINCT rel.artist_credit FROM release rel JOIN artist_credit_name acn ON acn.artist_credit = rel.artist_credit - WHERE acn.artist = ?"; + WHERE acn.artist = ?'; my $ids = $self->sql->select_single_column_array($query, $artist_id); return $self->c->model('ArtistCredit')->find_by_ids($ids); } sub find_by_area { my ($self, $area_id, $limit, $offset) = @_; - my $query = "SELECT " . $self->_columns . " - FROM " . $self->_table . " + my $query = 'SELECT ' . $self->_columns . ' + FROM ' . $self->_table . ' JOIN release_event ON release.id = release_event.release JOIN area ON release_event.country = area.id WHERE area.id = ? - ORDER BY release.name COLLATE musicbrainz, release.id"; + ORDER BY release.name COLLATE musicbrainz, release.id'; $self->query_to_list_limited($query, [$area_id], $limit, $offset); } @@ -224,7 +224,7 @@ sub _find_by_artist_slow my ($conditions, $extra_joins, $params) = _where_filter($args{filter}, 0); - push @$conditions, "acn.artist = ?"; + push @$conditions, 'acn.artist = ?'; push @$params, $artist_id; my $query; @@ -232,31 +232,31 @@ sub _find_by_artist_slow # MBS-10939: For VA, only order by ID. Sorting by date, country # name, etc. doesn't currently scale at this level and causes # load issues on our DB server. - $query = " - SELECT DISTINCT ON (release.id) " . - $self->_columns . " FROM " . $self->_table . " + $query = ' + SELECT DISTINCT ON (release.id) ' . + $self->_columns . ' FROM ' . $self->_table . ' JOIN artist_credit_name acn ON acn.artist_credit = release.artist_credit - " . join(' ', @$extra_joins) . " - WHERE " . join(" AND ", @$conditions) . " - ORDER BY release.id"; + ' . join(' ', @$extra_joins) . ' + WHERE ' . join(' AND ', @$conditions) . ' + ORDER BY release.id'; } else { - $query = " + $query = ' SELECT * FROM ( SELECT DISTINCT ON (release.id) - " . $self->_columns . ", + ' . $self->_columns . ', date_year, date_month, date_day, area.name AS country_name - FROM " . $self->_table . " + FROM ' . $self->_table . ' JOIN artist_credit_name acn ON acn.artist_credit = release.artist_credit - " . join(' ', @$extra_joins) . " + ' . join(' ', @$extra_joins) . ' LEFT JOIN release_event ON release_event.release = release.id LEFT JOIN area ON area.id = release_event.country - WHERE " . join(" AND ", @$conditions) . " + WHERE ' . join(' AND ', @$conditions) . ' ORDER BY release.id, date_year, date_month, date_day, country_name, barcode, release.name COLLATE musicbrainz ) release ORDER BY date_year, date_month, date_day, - country_name, barcode, name COLLATE musicbrainz"; + country_name, barcode, name COLLATE musicbrainz'; } $self->query_to_list_limited($query, $params, $limit, $offset, undef, cache_hits => 1); } @@ -270,7 +270,7 @@ sub _find_by_artist_fast { push @$conditions, 'ar.artist = ?'; push @$params, $artist_id; - my $inner_query = "FROM artist_release ar " . + my $inner_query = 'FROM artist_release ar ' . join(' ', @$extra_joins) . ' ' . 'WHERE ' . join(' AND ', @$conditions); @@ -316,11 +316,11 @@ sub find_by_artist_credit { my ($self, $artist_credit_id, $limit, $offset) = @_; - my $query = "SELECT " . $self->_columns . ", + my $query = 'SELECT ' . $self->_columns . ', release.name COLLATE musicbrainz AS name_collate - FROM " . $self->_table . " + FROM ' . $self->_table . ' WHERE artist_credit = ? - ORDER BY release.name COLLATE musicbrainz"; + ORDER BY release.name COLLATE musicbrainz'; $self->query_to_list_limited($query, [$artist_credit_id], $limit, $offset); } @@ -329,18 +329,18 @@ sub find_by_instrument { my ($conditions, $extra_joins, $params) = _where_filter($args{filter}, 0); - push @$conditions, "instrument.id = ?"; + push @$conditions, 'instrument.id = ?'; push @$params, $instrument_id; # NOTE: if more tables than l_artist_release are added here, check admin/BuildSitemaps.pl - my $query = " + my $query = ' SELECT * FROM ( - SELECT " . $self->_columns . ", + SELECT ' . $self->_columns . q(, date_year, date_month, date_day, area.name AS country_name, array_agg(json_build_object('typeName', link_type.name, 'credit', lac.credited_as)) AS instrument_credits_and_rel_types - FROM " . $self->_table . " + FROM ) . $self->_table . ' JOIN l_artist_release ON l_artist_release.entity1 = release.id JOIN link ON link.id = l_artist_release.link JOIN link_type ON link_type.id = link.link_type @@ -351,10 +351,10 @@ sub find_by_instrument { lac.link = link_attribute.link AND lac.attribute_type = link_attribute.attribute_type ) - " . join(' ', @$extra_joins) . " + ' . join(' ', @$extra_joins) . ' LEFT JOIN release_event ON release_event.release = release.id LEFT JOIN area ON area.id = release_event.country - WHERE " . join(" AND ", @$conditions) . " + WHERE ' . join(' AND ', @$conditions) . ' GROUP BY release.id, date_year, date_month, date_day, country_name ORDER BY release.id, date_year, date_month, date_day, release.name COLLATE musicbrainz, country_name, @@ -362,7 +362,7 @@ sub find_by_instrument { ) s ORDER BY date_year, date_month, date_day, name COLLATE musicbrainz, country_name, - barcode"; + barcode'; $self->query_to_list_limited($query, $params, $limit, $offset, sub { my ($model, $row) = @_; @@ -378,29 +378,29 @@ sub find_by_label my ($conditions, $extra_joins, $params) = _where_filter($args{filter}, 0); - push @$conditions, "release_label.label = ?"; + push @$conditions, 'release_label.label = ?'; push @$params, $label_id; - my $query = " + my $query = ' SELECT * FROM ( SELECT DISTINCT ON (release.id) - " . $self->_columns . ", + ' . $self->_columns . ', date_year, date_month, date_day, catalog_number, area.name AS country_name - FROM " . $self->_table . " + FROM ' . $self->_table . ' JOIN release_label ON release_label.release = release.id - " . join(' ', @$extra_joins) . " + ' . join(' ', @$extra_joins) . ' LEFT JOIN release_event ON release_event.release = release.id LEFT JOIN area ON area.id = release_event.country - WHERE " . join(" AND ", @$conditions) . " + WHERE ' . join(' AND ', @$conditions) . ' ORDER BY release.id, date_year, date_month, date_day, catalog_number, release.name COLLATE musicbrainz, country_name, barcode ) s ORDER BY date_year, date_month, date_day, catalog_number, name COLLATE musicbrainz, country_name, - barcode"; + barcode'; $self->query_to_list_limited($query, $params, $limit, $offset, undef, cache_hits => 1); } @@ -408,13 +408,13 @@ sub find_by_disc_id { my ($self, $disc_id) = @_; - my $query = " + my $query = ' SELECT * FROM ( SELECT DISTINCT ON (release.id) - " . $self->_columns . ", + ' . $self->_columns . ', date_year, date_month, date_day - FROM " . $self->_table . " + FROM ' . $self->_table . ' JOIN medium ON medium.release = release.id JOIN medium_cdtoc ON medium_cdtoc.medium = medium.id JOIN cdtoc ON medium_cdtoc.cdtoc = cdtoc.id @@ -424,7 +424,7 @@ sub find_by_disc_id release.name COLLATE musicbrainz ) s ORDER BY date_year, date_month, date_day, - name COLLATE musicbrainz"; + name COLLATE musicbrainz'; $self->query_to_list($query, [$disc_id]); } @@ -436,25 +436,25 @@ sub find_by_release_group my ($conditions, $extra_joins, $params) = _where_filter($args{filter}, 0); - push @$conditions, "release_group IN (" . placeholders(@ids) . ")"; + push @$conditions, 'release_group IN (' . placeholders(@ids) . ')'; push @$params, @ids; - my $query = " + my $query = ' SELECT * FROM ( - SELECT DISTINCT ON (release.id) " . $self->_columns . ", + SELECT DISTINCT ON (release.id) ' . $self->_columns . ', date_year, date_month, date_day, area.name AS country_name - FROM " . $self->_table . " - " . join(' ', @$extra_joins) . " + FROM ' . $self->_table . ' + ' . join(' ', @$extra_joins) . ' LEFT JOIN release_event ON release_event.release = release.id LEFT JOIN area ON area.id = release_event.country - WHERE " . join(" AND ", @$conditions) . " + WHERE ' . join(' AND ', @$conditions) . ' ORDER BY release.id, date_year, date_month, date_day, country_name, barcode ) s ORDER BY date_year, date_month, date_day, country_name, barcode - "; + '; $self->query_to_list_limited($query, $params, $limit, $offset); } @@ -465,7 +465,7 @@ sub _find_by_track_artist_slow my ($conditions, $extra_joins, $params) = _where_filter($args{filter}, 0); - push @$conditions, " + push @$conditions, ' release.id IN ( SELECT release FROM medium JOIN track tr @@ -477,25 +477,25 @@ sub _find_by_track_artist_slow SELECT id FROM release JOIN artist_credit_name acn ON release.artist_credit = acn.artist_credit - WHERE acn.artist = ?)"; + WHERE acn.artist = ?)'; push @$params, $artist_id, $artist_id; - my $query = " + my $query = ' SELECT * FROM ( SELECT DISTINCT ON (release.id) - " . $self->_columns . ", + ' . $self->_columns . ', date_year, date_month, date_day - FROM " . $self->_table . " - " . join(' ', @$extra_joins) . " + FROM ' . $self->_table . ' + ' . join(' ', @$extra_joins) . ' LEFT JOIN release_event ON release_event.release = release.id LEFT JOIN area ON area.id = release_event.country - WHERE " . join(" AND ", @$conditions) . " + WHERE ' . join(' AND ', @$conditions) . ' ORDER BY release.id, date_year, date_month, date_day, release.name COLLATE musicbrainz ) s ORDER BY date_year, date_month, date_day, - name COLLATE musicbrainz"; + name COLLATE musicbrainz'; $self->query_to_list_limited($query, $params, $limit, $offset); } @@ -520,28 +520,28 @@ sub find_by_recording my ($conditions, $extra_joins, $params) = _where_filter($args{filter}, 0); - push @$conditions, "track.recording IN (" . placeholders(@ids) . ")"; + push @$conditions, 'track.recording IN (' . placeholders(@ids) . ')'; push @$params, @ids; - my $query = " + my $query = ' SELECT * FROM ( SELECT DISTINCT ON (release.id) - " . $self->_columns . ", + ' . $self->_columns . ', date_year, date_month, date_day - FROM " . $self->_table . " - " . join(' ', @$extra_joins) . " + FROM ' . $self->_table . ' + ' . join(' ', @$extra_joins) . ' JOIN medium ON medium.release = release.id JOIN track ON track.medium = medium.id LEFT JOIN release_event ON release_event.release = release.id LEFT JOIN area ON area.id = release_event.country - WHERE " . join(" AND ", @$conditions) . " + WHERE ' . join(' AND ', @$conditions) . ' ORDER BY release.id, date_year, date_month, date_day, release.name COLLATE musicbrainz ) s ORDER BY date_year, date_month, date_day, name COLLATE musicbrainz - "; + '; $self->query_to_list_limited($query, $params, $limit, $offset); } @@ -552,13 +552,13 @@ sub find_by_recordings return () unless @ids; my $query = - "SELECT DISTINCT ON (release.id, track.recording) " . $self->_columns . ", + 'SELECT DISTINCT ON (release.id, track.recording) ' . $self->_columns . ', track.recording, track.position AS track_position, medium.position AS medium_position, medium.track_count as medium_track_count FROM release JOIN medium ON release.id = medium.release JOIN track ON track.medium = medium.id - WHERE track.recording IN (" . placeholders(@ids) . ")"; + WHERE track.recording IN (' . placeholders(@ids) . ')'; my %map; for my $row (@{ $self->sql->select_list_of_hashes($query, @ids) }) { @@ -580,29 +580,29 @@ sub find_by_country my ($conditions, $extra_joins, $params) = _where_filter($args{filter}, 0); - push @$conditions, "release_event.country = ?"; + push @$conditions, 'release_event.country = ?'; push @$params, $country_id; - my $query = " + my $query = ' SELECT * FROM ( SELECT DISTINCT ON (release.id) - " . $self->_columns . ", + ' . $self->_columns . ', date_year, date_month, date_day, area.name AS country_name - FROM " . $self->_table . " + FROM ' . $self->_table . ' JOIN artist_credit_name acn ON acn.artist_credit = release.artist_credit - " . join(' ', @$extra_joins) . " + ' . join(' ', @$extra_joins) . ' LEFT JOIN ( SELECT release, country, date_year, date_month, date_day FROM release_country ) release_event ON release_event.release = release.id LEFT JOIN area ON area.id = release_event.country - WHERE " . join(" AND ", @$conditions) . " + WHERE ' . join(' AND ', @$conditions) . ' ORDER BY release.id, date_year, date_month, date_day, country_name, barcode, release.name COLLATE musicbrainz ) release ORDER BY date_year, date_month, date_day, - country_name, barcode, name COLLATE musicbrainz"; + country_name, barcode, name COLLATE musicbrainz'; $self->query_to_list_limited($query, $params, $limit, $offset); } @@ -611,13 +611,13 @@ sub find_for_cdtoc { my ($self, $artist_id, $track_count, $limit, $offset) = @_; - my $query = " + my $query = ' SELECT * FROM ( SELECT DISTINCT ON (release.id) - " . $self->_columns . ", + ' . $self->_columns . ', date_year, date_month, date_day - FROM " . $self->_table . " + FROM ' . $self->_table . ' JOIN artist_credit_name acn ON acn.artist_credit = release.artist_credit JOIN medium @@ -633,7 +633,7 @@ sub find_for_cdtoc date_year, date_month, date_day, release.name COLLATE musicbrainz ) s ORDER BY release_group, - date_year, date_month, date_day, name COLLATE musicbrainz"; + date_year, date_month, date_day, name COLLATE musicbrainz'; $self->query_to_list_limited($query, [$track_count, $artist_id], $limit, $offset); } @@ -647,11 +647,11 @@ sub find_gid_for_track # on which the track appears. So only the release MBID is needed. my $query = - "SELECT release.gid + 'SELECT release.gid FROM release JOIN medium ON release.id = medium.release JOIN track ON track.medium = medium.id - WHERE track.id = ?"; + WHERE track.id = ?'; return $self->sql->select_single_value($query, $track_id); } @@ -662,10 +662,10 @@ sub load_with_medium_for_recording my ($conditions, $extra_joins, $params) = _where_filter($args{filter}, 0); - push @$conditions, "track.recording = ?"; + push @$conditions, 'track.recording = ?'; push @$params, $recording_id; - my $query = " + my $query = ' SELECT * FROM ( SELECT DISTINCT ON (release.id) @@ -702,13 +702,13 @@ sub load_with_medium_for_recording JOIN medium ON medium.id = track.medium JOIN release ON release.id = medium.release LEFT JOIN release_event ON release_event.release = release.id - " . join(' ', @$extra_joins) . " - WHERE " . join(" AND ", @$conditions) . " + ' . join(' ', @$extra_joins) . ' + WHERE ' . join(' AND ', @$conditions) . ' ORDER BY release.id, date_year, date_month, date_day, release.name COLLATE musicbrainz ) s ORDER BY date_year, date_month, date_day, - r_name COLLATE musicbrainz"; + r_name COLLATE musicbrainz'; $self->query_to_list_limited($query, $params, $limit, $offset, sub { my ($model, $row) = @_; @@ -742,70 +742,70 @@ sub find_by_medium { sub _order_by { my ($self, $order) = @_; - my $extra_join = ""; - my $also_select = ""; + my $extra_join = ''; + my $also_select = ''; - my $order_by = order_by($order, "date", { - "date" => sub { - return "date_year, date_month, date_day, release.name COLLATE musicbrainz" + my $order_by = order_by($order, 'date', { + 'date' => sub { + return 'date_year, date_month, date_day, release.name COLLATE musicbrainz' }, - "name" => sub { - return "release.name COLLATE musicbrainz, date_year, date_month, date_day" + 'name' => sub { + return 'release.name COLLATE musicbrainz, date_year, date_month, date_day' }, - "country" => sub { - $extra_join = "LEFT JOIN area ON release_event.country = area.id"; - $also_select = "area.name AS country_name"; - return "country_name, date_year, date_month, date_day"; + 'country' => sub { + $extra_join = 'LEFT JOIN area ON release_event.country = area.id'; + $also_select = 'area.name AS country_name'; + return 'country_name, date_year, date_month, date_day'; }, - "artist" => sub { - $extra_join = "JOIN artist_credit ac ON ac.id = release.artist_credit"; - $also_select = "ac.name AS ac_name"; - return "ac_name COLLATE musicbrainz, release.name COLLATE musicbrainz"; + 'artist' => sub { + $extra_join = 'JOIN artist_credit ac ON ac.id = release.artist_credit'; + $also_select = 'ac.name AS ac_name'; + return 'ac_name COLLATE musicbrainz, release.name COLLATE musicbrainz'; }, - "label" => sub { - $extra_join = "LEFT OUTER JOIN + 'label' => sub { + $extra_join = 'LEFT OUTER JOIN (SELECT release, array_agg(label.name COLLATE musicbrainz) AS labels FROM release_label JOIN label ON release_label.label = label.id GROUP BY release) rl - ON rl.release = release.id"; - $also_select = "rl.labels AS labels"; - return "labels, release.name COLLATE musicbrainz"; + ON rl.release = release.id'; + $also_select = 'rl.labels AS labels'; + return 'labels, release.name COLLATE musicbrainz'; }, - "catno" => sub { - $extra_join = "LEFT OUTER JOIN + 'catno' => sub { + $extra_join = 'LEFT OUTER JOIN (SELECT release, array_agg(catalog_number) AS catnos FROM release_label WHERE catalog_number IS NOT NULL GROUP BY release) rl - ON rl.release = release.id"; - $also_select = "catnos"; - return "catnos, release.name COLLATE musicbrainz"; + ON rl.release = release.id'; + $also_select = 'catnos'; + return 'catnos, release.name COLLATE musicbrainz'; }, - "format" => sub { - $extra_join = "LEFT JOIN medium ON medium.release = release.id - LEFT JOIN medium_format ON medium.format = medium_format.id"; - $also_select = "medium_format.name AS medium_format_name"; - return "medium_format_name COLLATE musicbrainz, release.name COLLATE musicbrainz"; + 'format' => sub { + $extra_join = 'LEFT JOIN medium ON medium.release = release.id + LEFT JOIN medium_format ON medium.format = medium_format.id'; + $also_select = 'medium_format.name AS medium_format_name'; + return 'medium_format_name COLLATE musicbrainz, release.name COLLATE musicbrainz'; }, - "tracks" => sub { - $extra_join = "LEFT JOIN + 'tracks' => sub { + $extra_join = 'LEFT JOIN (SELECT medium.release, sum(track_count) AS total_track_count FROM medium GROUP BY medium.release) tc - ON tc.release = release.id"; - $also_select = "total_track_count"; - return "total_track_count, release.name COLLATE musicbrainz"; + ON tc.release = release.id'; + $also_select = 'total_track_count'; + return 'total_track_count, release.name COLLATE musicbrainz'; }, - "barcode" => sub { - return "length(barcode), barcode, release.name COLLATE musicbrainz" + 'barcode' => sub { + return 'length(barcode), barcode, release.name COLLATE musicbrainz' }, }); # Date and release event information should always be included. - if ($also_select ne "") { - $also_select .= ", "; + if ($also_select ne '') { + $also_select .= ', '; } - $also_select .= "date_year, date_month, date_day"; + $also_select .= 'date_year, date_month, date_day'; - $extra_join = "LEFT JOIN release_event ON release_event.release = release.id " . $extra_join; + $extra_join = 'LEFT JOIN release_event ON release_event.release = release.id ' . $extra_join; my $inner_order_by = $order_by =~ s/country_name/area.name/r @@ -940,12 +940,12 @@ sub can_merge { }); } - my $merging_into_empty_medium = $self->sql->select_single_value(<<~"EOSQL", \@old_ids, $new_id); + my $merging_into_empty_medium = $self->sql->select_single_value(<<~"SQL", \@old_ids, $new_id); $mediums_query WHERE s.track_count > 0 AND new_medium.track_count = 0 LIMIT 1 - EOSQL + SQL if ($merging_into_empty_medium) { return (0, { @@ -953,12 +953,12 @@ sub can_merge { }); } - my $medium_track_counts_differ = $self->sql->select_single_value(<<~"EOSQL", \@old_ids, $new_id); + my $medium_track_counts_differ = $self->sql->select_single_value(<<~"SQL", \@old_ids, $new_id); $mediums_query WHERE new_medium.track_count <> s.track_count AND s.track_count > 0 LIMIT 1 - EOSQL + SQL if ($medium_track_counts_differ) { return (0, { @@ -1345,10 +1345,10 @@ sub merge # Set all medium positions in one query; otherwise medium_idx_uniq will # sometimes cause individual reorders to fail when they produce # duplicate positions. (MBS-7736) - my $q = "WITH new_positions (medium, position) AS " . - "(VALUES " . join(', ', ('(?::integer,?::integer)') x keys %positions_by_medium) .") " . - "UPDATE medium SET release = ?, position = new_positions.position " . - "FROM new_positions WHERE medium.id = new_positions.medium"; + my $q = 'WITH new_positions (medium, position) AS ' . + '(VALUES ' . join(', ', ('(?::integer,?::integer)') x keys %positions_by_medium) .') ' . + 'UPDATE medium SET release = ?, position = new_positions.position ' . + 'FROM new_positions WHERE medium.id = new_positions.medium'; $self->sql->do($q, %positions_by_medium, $new_id); if ($update_names) { @@ -1430,10 +1430,10 @@ sub load_ids my @gids = map { $_->gid } @releases; return () unless @gids; - my $query = " + my $query = ' SELECT gid, id FROM release - WHERE gid IN (" . placeholders(@gids) . ") - "; + WHERE gid IN (' . placeholders(@gids) . ') + '; my %map = map { $_->[0] => $_->[1] } @{ $self->sql->select_list_of_lists($query, @gids) }; @@ -1449,7 +1449,7 @@ sub load_meta my %id_to_obj = map { $_->id => $_ } @objs; - MusicBrainz::Server::Data::Utils::load_meta($self->c, "release_meta", sub { + MusicBrainz::Server::Data::Utils::load_meta($self->c, 'release_meta', sub { my ($obj, $row) = @_; $obj->info_url($row->{info_url}) if defined $row->{info_url}; $obj->amazon_asin($row->{amazon_asin}) if defined $row->{amazon_asin}; @@ -1524,7 +1524,7 @@ sub filter_barcode_changes { return @{ $self->c->sql->select_list_of_hashes( 'SELECT DISTINCT change.release, change.barcode - FROM (VALUES ' . join(', ', ("(?::uuid, ?)") x @barcodes) . ') change (release, barcode) + FROM (VALUES ' . join(', ', ('(?::uuid, ?)') x @barcodes) . ') change (release, barcode) LEFT JOIN release_gid_redirect rgr ON rgr.gid = change.release JOIN release ON (release.gid = change.release OR rgr.new_id = release.id) WHERE change.barcode IS DISTINCT FROM release.barcode', @@ -1587,7 +1587,7 @@ sub load_release_events { sub find_release_events { my ($self, @release_ids) = @_; - my $query = " + my $query = ' SELECT * FROM release_event LEFT JOIN area ON release_event.country = area.id @@ -1597,7 +1597,7 @@ sub find_release_events { date_month ASC NULLS LAST, date_day ASC NULLS LAST, area.name COLLATE musicbrainz ASC NULLS LAST - "; + '; my $events = $self->sql->select_list_of_hashes($query, \@release_ids); diff --git a/lib/MusicBrainz/Server/Data/ReleaseGroup.pm b/lib/MusicBrainz/Server/Data/ReleaseGroup.pm index e555b665fff..04ff3f277df 100644 --- a/lib/MusicBrainz/Server/Data/ReleaseGroup.pm +++ b/lib/MusicBrainz/Server/Data/ReleaseGroup.pm @@ -77,7 +77,7 @@ sub _where_filter my $needs_rg_table = 0; if (exists $filter->{name}) { $needs_rg_table = 1 if $using_artist_release_group_table; - push @query, "(mb_simple_tsvector(rg.name) @@ plainto_tsquery('mb_simple', mb_lower(?)) OR rg.name = ?)"; + push @query, q{(mb_simple_tsvector(rg.name) @@ plainto_tsquery('mb_simple', mb_lower(?)) OR rg.name = ?)}; push @params, $filter->{name}, $filter->{name}; } if (exists $filter->{artist_credit_id}) { @@ -136,11 +136,11 @@ sub find_artist_credits_by_artist { my ($self, $artist_id) = @_; - my $query = "SELECT DISTINCT rel.artist_credit + my $query = 'SELECT DISTINCT rel.artist_credit FROM release_group rel JOIN artist_credit_name acn ON acn.artist_credit = rel.artist_credit - WHERE acn.artist = ?"; + WHERE acn.artist = ?'; my $ids = $self->sql->select_single_column_array($query, $artist_id); return $self->c->model('ArtistCredit')->find_by_ids($ids); } @@ -243,15 +243,15 @@ sub _find_by_artist_slow my ($conditions, $extra_joins, $params) = _where_filter($args{filter}, 0); - push @$conditions, "acn.artist = ?"; + push @$conditions, 'acn.artist = ?'; # Show only RGs with official releases by default, plus all-status-less ones so people fix the status unless ($show_all) { - push @$conditions, "(EXISTS (SELECT 1 FROM release WHERE release.release_group = rg.id AND release.status = '1') OR - NOT EXISTS (SELECT 1 FROM release WHERE release.release_group = rg.id AND release.status IS NOT NULL))"; + push @$conditions, q{(EXISTS (SELECT 1 FROM release WHERE release.release_group = rg.id AND release.status = '1') OR + NOT EXISTS (SELECT 1 FROM release WHERE release.release_group = rg.id AND release.status IS NOT NULL))}; } push @$params, $artist_id; - my $query = "SELECT DISTINCT " . $self->_columns . ", + my $query = 'SELECT DISTINCT ' . $self->_columns . ', rgm.first_release_date_year, rgm.first_release_date_month, rgm.first_release_date_day, @@ -266,17 +266,17 @@ sub _find_by_artist_slow WHERE rgstj.release_group = rg.id ORDER BY name ASC ) secondary_types - FROM " . $self->_table . " + FROM ' . $self->_table . ' JOIN artist_credit_name acn ON acn.artist_credit = rg.artist_credit - " . join(' ', @$extra_joins) . " - WHERE " . join(" AND ", @$conditions) . " + ' . join(' ', @$extra_joins) . ' + WHERE ' . join(' AND ', @$conditions) . ' ORDER BY rg.type, secondary_types, rgm.first_release_date_year, rgm.first_release_date_month, rgm.first_release_date_day, - rg.name COLLATE musicbrainz"; + rg.name COLLATE musicbrainz'; $self->query_to_list_limited( $query, $params, @@ -309,7 +309,7 @@ sub _find_by_artist_fast { push @$conditions, 'arg.artist = ?'; push @$params, $artist_id; - my $inner_query = "FROM artist_release_group arg " . + my $inner_query = 'FROM artist_release_group arg ' . join(' ', @$extra_joins) . ' ' . 'WHERE ' . join(' AND ', @$conditions); @@ -416,11 +416,11 @@ sub _find_by_track_artist_slow my $extra_conditions = ''; # Show only RGs with official releases by default, plus all-status-less ones so people fix the status unless ($show_all) { - $extra_conditions = " AND (EXISTS (SELECT 1 FROM release WHERE release.release_group = rg.id AND release.status = '1') OR - NOT EXISTS (SELECT 1 FROM release WHERE release.release_group = rg.id AND release.status IS NOT NULL)) "; + $extra_conditions = q{ AND (EXISTS (SELECT 1 FROM release WHERE release.release_group = rg.id AND release.status = '1') OR + NOT EXISTS (SELECT 1 FROM release WHERE release.release_group = rg.id AND release.status IS NOT NULL)) }; } - my $query = "SELECT DISTINCT " . $self->_columns . ", + my $query = 'SELECT DISTINCT ' . $self->_columns . ', rgm.first_release_date_year, rgm.first_release_date_month, rgm.first_release_date_day, @@ -435,7 +435,7 @@ sub _find_by_track_artist_slow WHERE rgstj.release_group = rg.id ORDER BY name ASC ) secondary_types - FROM " . $self->_table . " + FROM ' . $self->_table . " JOIN artist_credit_name acn ON acn.artist_credit = rg.artist_credit WHERE rg.id IN ( @@ -493,22 +493,22 @@ sub find_by_artist_credit { my ($self, $artist_credit_id, $limit, $offset) = @_; - my $query = "SELECT " . $self->_columns . ", + my $query = 'SELECT ' . $self->_columns . ', rg.name COLLATE musicbrainz AS name_collate - FROM " . $self->_table . " + FROM ' . $self->_table . ' WHERE rg.artist_credit = ? - ORDER BY rg.name COLLATE musicbrainz"; + ORDER BY rg.name COLLATE musicbrainz'; $self->query_to_list_limited($query, [$artist_credit_id], $limit, $offset); } sub find_by_release { my ($self, $release_id, $limit, $offset) = @_; - my $query = "SELECT " . $self->_columns . ", + my $query = 'SELECT ' . $self->_columns . ', rgm.first_release_date_year, rgm.first_release_date_month, rgm.first_release_date_day - FROM " . $self->_table . " + FROM ' . $self->_table . ' JOIN release ON release.release_group = rg.id WHERE release.id = ? ORDER BY @@ -516,7 +516,7 @@ sub find_by_release rgm.first_release_date_year, rgm.first_release_date_month, rgm.first_release_date_day, - rg.name COLLATE musicbrainz"; + rg.name COLLATE musicbrainz'; $self->query_to_list_limited($query, [$release_id], $limit, $offset, sub { my ($model, $row) = @_; my $rg = $model->_new_from_row($row); @@ -528,19 +528,19 @@ sub find_by_release sub find_by_release_gids { my ($self, @release_gids) = @_; - my $query = "SELECT " . $self->_columns . ", + my $query = 'SELECT ' . $self->_columns . ', rgm.first_release_date_year, rgm.first_release_date_month, rgm.first_release_date_day - FROM " . $self->_table . " + FROM ' . $self->_table . ' JOIN release ON release.release_group = rg.id - WHERE release.gid IN (" . placeholders (@release_gids) . ") + WHERE release.gid IN (' . placeholders (@release_gids) . ') ORDER BY rg.type, rgm.first_release_date_year, rgm.first_release_date_month, rgm.first_release_date_day, - rg.name COLLATE musicbrainz"; + rg.name COLLATE musicbrainz'; $self->query_to_list($query, \@release_gids, sub { my ($model, $row) = @_; my $rg = $model->_new_from_row($row); @@ -552,8 +552,8 @@ sub find_by_release_gids sub find_by_recording { my ($self, $recording) = @_; - my $query = "SELECT " . $self->_columns . " - FROM " . $self->_table . " + my $query = 'SELECT ' . $self->_columns . ' + FROM ' . $self->_table . ' JOIN release ON release.release_group = rg.id JOIN medium ON medium.release = release.id JOIN track ON track.medium = medium.id @@ -561,7 +561,7 @@ sub find_by_recording WHERE recording.id = ? ORDER BY rg.type, - rg.name COLLATE musicbrainz"; + rg.name COLLATE musicbrainz'; $self->query_to_list($query, [$recording]); } @@ -569,23 +569,23 @@ sub find_by_recording sub _order_by { my ($self, $order) = @_; - my $extra_join = ""; - my $also_select = ""; + my $extra_join = ''; + my $also_select = ''; - my $order_by = order_by($order, "name", { - "name" => sub { - return "name COLLATE musicbrainz" + my $order_by = order_by($order, 'name', { + 'name' => sub { + return 'name COLLATE musicbrainz' }, - "artist" => sub { - $extra_join = "JOIN artist_credit ac ON ac.id = rg.artist_credit"; - $also_select = "ac.name AS ac_name"; - return "ac_name COLLATE musicbrainz, release_group.name COLLATE musicbrainz"; + 'artist' => sub { + $extra_join = 'JOIN artist_credit ac ON ac.id = rg.artist_credit'; + $also_select = 'ac.name AS ac_name'; + return 'ac_name COLLATE musicbrainz, release_group.name COLLATE musicbrainz'; }, - "primary_type" => sub { - return "primary_type_id, name COLLATE musicbrainz" + 'primary_type' => sub { + return 'primary_type_id, name COLLATE musicbrainz' }, - "year" => sub { - return "first_release_date_year, name COLLATE musicbrainz" + 'year' => sub { + return 'first_release_date_year, name COLLATE musicbrainz' } }); @@ -721,7 +721,7 @@ sub _hash_to_row sub load_meta { my $self = shift; - MusicBrainz::Server::Data::Utils::load_meta($self->c, "release_group_meta", sub { + MusicBrainz::Server::Data::Utils::load_meta($self->c, 'release_group_meta', sub { my ($obj, $row) = @_; $obj->rating($row->{rating}) if defined $row->{rating}; $obj->rating_count($row->{rating_count}) if defined $row->{rating_count}; @@ -734,9 +734,9 @@ sub has_cover_art_set { my ($self, $rg_id) = @_; - my $query = "SELECT release + my $query = 'SELECT release FROM cover_art_archive.release_group_cover_art - WHERE release_group = ?"; + WHERE release_group = ?'; return $self->sql->select_single_value($query, $rg_id); } @@ -744,29 +744,29 @@ sub has_cover_art_set sub set_cover_art { my ($self, $rg_id, $release_id) = @_; - $self->sql->do(" + $self->sql->do(' UPDATE cover_art_archive.release_group_cover_art SET release = ? WHERE release_group = ?; INSERT INTO cover_art_archive.release_group_cover_art (release_group, release) (SELECT ? AS release_group, ? AS release WHERE NOT EXISTS (SELECT 1 FROM cover_art_archive.release_group_cover_art - WHERE release_group = ?));", + WHERE release_group = ?));', $release_id, $rg_id, $rg_id, $release_id, $rg_id); } sub unset_cover_art { my ($self, $rg_id) = @_; - $self->sql->do("DELETE FROM cover_art_archive.release_group_cover_art - WHERE release_group = ?", $rg_id); + $self->sql->do('DELETE FROM cover_art_archive.release_group_cover_art + WHERE release_group = ?', $rg_id); } sub merge_releases { my ($self, $new_id, @old_ids) = @_; my $rg_ids = $self->c->sql->select_list_of_hashes( - "SELECT release_group, id FROM release WHERE id IN (" - . placeholders ($new_id, @old_ids) . ")", $new_id, @old_ids); + 'SELECT release_group, id FROM release WHERE id IN (' + . placeholders ($new_id, @old_ids) . ')', $new_id, @old_ids); my %release_rg; my %release_group_ids; @@ -777,9 +777,9 @@ sub merge_releases { my @release_group_ids = keys %release_group_ids; my $rg_cover_art = $self->c->sql->select_list_of_hashes( - "SELECT release_group, release + 'SELECT release_group, release FROM cover_art_archive.release_group_cover_art - WHERE release_group IN (" . placeholders (@release_group_ids) . ")", + WHERE release_group IN (' . placeholders (@release_group_ids) . ')', @release_group_ids); my %has_cover_art = map { $_->{release_group} => $_->{release} } @$rg_cover_art; @@ -817,7 +817,7 @@ sub is_empty { my $used_in_relationship = used_in_relationship($self->c, release_group => 'release_group_row.id'); - return $self->sql->select_single_value(<<~"EOSQL", $release_group_id, $STATUS_OPEN); + return $self->sql->select_single_value(<<~"SQL", $release_group_id, $STATUS_OPEN); SELECT TRUE FROM release_group release_group_row WHERE id = ? @@ -835,7 +835,7 @@ sub is_empty { ) OR $used_in_relationship ) - EOSQL + SQL } sub series_ordering { diff --git a/lib/MusicBrainz/Server/Data/ReleaseGroupSecondaryType.pm b/lib/MusicBrainz/Server/Data/ReleaseGroupSecondaryType.pm index 08914113fcf..696ee9def71 100644 --- a/lib/MusicBrainz/Server/Data/ReleaseGroupSecondaryType.pm +++ b/lib/MusicBrainz/Server/Data/ReleaseGroupSecondaryType.pm @@ -70,16 +70,16 @@ sub merge_entities my ($self, $new_id, @old_ids) = @_; $self->sql->do( - "DELETE FROM release_group_secondary_type_join " . - "WHERE release_group = any(?)", \@old_ids ); + 'DELETE FROM release_group_secondary_type_join + WHERE release_group = any(?)', \@old_ids ); } sub delete_entities { my ($self, @ids) = @_; $self->sql->do( - "DELETE FROM release_group_secondary_type_join " . - "WHERE release_group = any(?) ", \@ids); + 'DELETE FROM release_group_secondary_type_join + WHERE release_group = any(?)', \@ids); } sub in_use { diff --git a/lib/MusicBrainz/Server/Data/ReleaseLabel.pm b/lib/MusicBrainz/Server/Data/ReleaseLabel.pm index 62d95dc2f71..78efc5c23a5 100644 --- a/lib/MusicBrainz/Server/Data/ReleaseLabel.pm +++ b/lib/MusicBrainz/Server/Data/ReleaseLabel.pm @@ -44,11 +44,11 @@ sub load my %id_to_release = object_to_ids(@releases); my @ids = keys %id_to_release; return unless @ids; # nothing to do - my $query = "SELECT " . $self->_columns . " - FROM " . $self->_table . " + my $query = 'SELECT ' . $self->_columns . ' + FROM ' . $self->_table . ' LEFT JOIN label ON rl.label = label.id - WHERE release IN (" . placeholders(@ids) . ") - ORDER BY release, rl_catalog_number, label.name COLLATE musicbrainz"; + WHERE release IN (' . placeholders(@ids) . ') + ORDER BY release, rl_catalog_number, label.name COLLATE musicbrainz'; my @labels = $self->query_to_list($query, \@ids); foreach my $label (@labels) { foreach (@{ $id_to_release{$label->release_id} }) @@ -89,12 +89,12 @@ sub merge_releases $self->sql->do( 'DELETE FROM release_label - WHERE release IN (' . placeholders(@ids) . ") + WHERE release IN (' . placeholders(@ids) . ') AND id NOT IN ( SELECT DISTINCT ON (label, catalog_number) id FROM release_label - WHERE release IN (" . placeholders(@ids) . ') + WHERE release IN (' . placeholders(@ids) . ') )', @ids, @ids); $self->sql->do('UPDATE release_label SET release = ? diff --git a/lib/MusicBrainz/Server/Data/Role/Alias.pm b/lib/MusicBrainz/Server/Data/Role/Alias.pm index 22b655ad445..cb79fbb25f0 100644 --- a/lib/MusicBrainz/Server/Data/Role/Alias.pm +++ b/lib/MusicBrainz/Server/Data/Role/Alias.pm @@ -12,7 +12,7 @@ parameter 'type' => ( parameter 'table' => ( isa => 'Str', - default => sub { shift->type . "_alias" }, + default => sub { shift->type . '_alias' }, lazy => 1 ); @@ -60,15 +60,15 @@ role my $type = $params->type; my $query = - "WITH search (term) AS (". - " VALUES " . join (",", ("(?)") x scalar @names) . "), " . - " entity_matches (term, entity) AS (" . + 'WITH search (term) AS ('. + ' VALUES ' . join (',', ('(?)') x scalar @names) . '), ' . + ' entity_matches (term, entity) AS (' . " SELECT term, $type FROM ${type}_alias". " JOIN search ON lower(musicbrainz_unaccent(${type}_alias.name)) = lower(musicbrainz_unaccent(term))" . " UNION SELECT term, id FROM $type " . " JOIN search ON lower(musicbrainz_unaccent(${type}.name)) = lower(musicbrainz_unaccent(term)))" . - " SELECT term AS search_term, ".$self->_columns. - " FROM ". $self->_table ." JOIN entity_matches ON entity_matches.entity = $type.id"; + ' SELECT term AS search_term, '.$self->_columns. + ' FROM '. $self->_table ." JOIN entity_matches ON entity_matches.entity = $type.id"; my %ret; for my $row (@{ $self->sql->select_list_of_hashes($query, @names) }) { diff --git a/lib/MusicBrainz/Server/Data/Role/Annotation.pm b/lib/MusicBrainz/Server/Data/Role/Annotation.pm index c38a0d6ec8b..249c64973aa 100644 --- a/lib/MusicBrainz/Server/Data/Role/Annotation.pm +++ b/lib/MusicBrainz/Server/Data/Role/Annotation.pm @@ -10,7 +10,7 @@ parameter 'type' => ( parameter 'table' => ( isa => 'Str', - default => sub { shift->type . "_annotation" }, + default => sub { shift->type . '_annotation' }, lazy => 1 ); diff --git a/lib/MusicBrainz/Server/Data/Role/Area.pm b/lib/MusicBrainz/Server/Data/Role/Area.pm index c76b6678401..1c5ef2e2384 100644 --- a/lib/MusicBrainz/Server/Data/Role/Area.pm +++ b/lib/MusicBrainz/Server/Data/Role/Area.pm @@ -8,10 +8,10 @@ sub find_by_area my ($self, $area_id, $limit, $offset) = @_; my $area_cols = $self->_area_cols; my $name_column = $self->isa('MusicBrainz::Server::Data::Place') ? 'name' : 'name.name'; - my $query = "SELECT " . $self->_columns . " - FROM " . $self->_table . " - WHERE " . join(" OR ", map { $_ . " = ?" } @$area_cols ) . " - ORDER BY name COLLATE musicbrainz, id"; + my $query = 'SELECT ' . $self->_columns . ' + FROM ' . $self->_table . ' + WHERE ' . join(' OR ', map { $_ . ' = ?' } @$area_cols ) . ' + ORDER BY name COLLATE musicbrainz, id'; $self->query_to_list_limited($query, [($area_id) x @$area_cols], $limit, $offset); } diff --git a/lib/MusicBrainz/Server/Data/Role/Collection.pm b/lib/MusicBrainz/Server/Data/Role/Collection.pm index fc9f995fafb..07583535831 100644 --- a/lib/MusicBrainz/Server/Data/Role/Collection.pm +++ b/lib/MusicBrainz/Server/Data/Role/Collection.pm @@ -13,12 +13,12 @@ sub find_by_collection { my $table = $self->_table; my $type = $self->_type; - my $query = " + my $query = ' SELECT * FROM ( - SELECT DISTINCT ON (" . $self->_id_column . ") - " . $self->_columns . - ($also_select ? ", $also_select" : "") . " + SELECT DISTINCT ON (' . $self->_id_column . ') + ' . $self->_columns . + ($also_select ? ", $also_select" : '') . " FROM $table JOIN editor_collection_$type ec ON " . $self->_id_column . " = ec.$type $extra_join diff --git a/lib/MusicBrainz/Server/Data/Role/DeleteAndLog.pm b/lib/MusicBrainz/Server/Data/Role/DeleteAndLog.pm index 681d6f78980..8d9bbbfc4a2 100644 --- a/lib/MusicBrainz/Server/Data/Role/DeleteAndLog.pm +++ b/lib/MusicBrainz/Server/Data/Role/DeleteAndLog.pm @@ -22,9 +22,9 @@ role { my $table = $self->_main_table; - my $query = "DELETE FROM $table WHERE id IN (" .placeholders(@ids) . ") - RETURNING gid AS entity_gid, id AS entity_id, name AS last_known_name"; - $query .= ", comment AS last_known_comment" + my $query = "DELETE FROM $table WHERE id IN (" .placeholders(@ids) . ') + RETURNING gid AS entity_gid, id AS entity_id, name AS last_known_name'; + $query .= ', comment AS last_known_comment' if $ENTITIES{$type}{disambiguation}; state $json = JSON::XS->new; @@ -39,7 +39,7 @@ role { } } @{ $self->sql->select_list_of_hashes($query, @ids) }; - $self->sql->insert_many("deleted_entity", @deleted); + $self->sql->insert_many('deleted_entity', @deleted); return [ map { $_->{gid} } @deleted ]; }; diff --git a/lib/MusicBrainz/Server/Data/Role/Editable.pm b/lib/MusicBrainz/Server/Data/Role/Editable.pm index ef9c042f21f..11bdd141c23 100644 --- a/lib/MusicBrainz/Server/Data/Role/Editable.pm +++ b/lib/MusicBrainz/Server/Data/Role/Editable.pm @@ -18,7 +18,7 @@ role { method 'adjust_edit_pending' => sub { my ($self, $adjust, @ids) = @_; - my $query = "UPDATE $table SET edits_pending = numeric_larger(0, edits_pending + ?) WHERE id IN (" . placeholders(@ids) . ")"; + my $query = "UPDATE $table SET edits_pending = numeric_larger(0, edits_pending + ?) WHERE id IN (" . placeholders(@ids) . ')'; $self->sql->do($query, $adjust, @ids); if ($self->does('MusicBrainz::Server::Data::Role::EntityCache')) { $self->_delete_from_cache(@ids); diff --git a/lib/MusicBrainz/Server/Data/Role/GetByGID.pm b/lib/MusicBrainz/Server/Data/Role/GetByGID.pm index 2b12fa53776..278b555da7b 100644 --- a/lib/MusicBrainz/Server/Data/Role/GetByGID.pm +++ b/lib/MusicBrainz/Server/Data/Role/GetByGID.pm @@ -8,7 +8,7 @@ requires '_get_by_keys'; sub get_by_gid { my ($self, $gid) = @_; return unless is_guid($gid); - my @result = $self->_get_by_keys("gid", $gid); + my @result = $self->_get_by_keys('gid', $gid); if (scalar(@result)) { return $result[0]; } diff --git a/lib/MusicBrainz/Server/Data/Role/IPI.pm b/lib/MusicBrainz/Server/Data/Role/IPI.pm index 8ab5781b908..9162bd116a7 100644 --- a/lib/MusicBrainz/Server/Data/Role/IPI.pm +++ b/lib/MusicBrainz/Server/Data/Role/IPI.pm @@ -23,7 +23,8 @@ role method find_reused_ipis => sub { my ($self, @ipis) = @_; - my $query = "SELECT 'artist' AS entity_type, artist_ipi.ipi, COUNT(*) AS count + + my $query = q{SELECT 'artist' AS entity_type, artist_ipi.ipi, COUNT(*) AS count FROM artist JOIN artist_ipi ON artist.id = artist_ipi.artist WHERE artist_ipi.ipi = any(?) @@ -33,8 +34,9 @@ role FROM label JOIN label_ipi ON label.id = label_ipi.label WHERE label_ipi.ipi = any(?) - GROUP BY label_ipi.ipi"; + GROUP BY label_ipi.ipi}; my $results = $self->sql->select_list_of_hashes($query, \@ipis, \@ipis); + my %reused_ipis; for my $result (@$results) { my $ipi = $result->{ipi}; diff --git a/lib/MusicBrainz/Server/Data/Role/ISNI.pm b/lib/MusicBrainz/Server/Data/Role/ISNI.pm index 86e0d6472bb..c248b54c97e 100644 --- a/lib/MusicBrainz/Server/Data/Role/ISNI.pm +++ b/lib/MusicBrainz/Server/Data/Role/ISNI.pm @@ -23,7 +23,8 @@ role method find_reused_isnis => sub { my ($self, @isnis) = @_; - my $query = "SELECT 'artist' AS entity_type, artist_isni.isni, COUNT(*) AS count + + my $query = q{SELECT 'artist' AS entity_type, artist_isni.isni, COUNT(*) AS count FROM artist JOIN artist_isni ON artist.id = artist_isni.artist WHERE artist_isni.isni = any(?) @@ -33,8 +34,9 @@ role FROM label JOIN label_isni ON label.id = label_isni.label WHERE label_isni.isni = any(?) - GROUP BY label_isni.isni"; + GROUP BY label_isni.isni}; my $results = $self->sql->select_list_of_hashes($query, \@isnis, \@isnis); + my %reused_isnis; for my $result (@$results) { my $isni = $result->{isni}; diff --git a/lib/MusicBrainz/Server/Data/Role/MediaWikiAPI.pm b/lib/MusicBrainz/Server/Data/Role/MediaWikiAPI.pm index 275bf34d94a..035abf6b923 100644 --- a/lib/MusicBrainz/Server/Data/Role/MediaWikiAPI.pm +++ b/lib/MusicBrainz/Server/Data/Role/MediaWikiAPI.pm @@ -53,7 +53,7 @@ sub _get_and_process_json } # decode JSON depending on the action - my $content = decode_json(encode("utf-8", $response->content)); + my $content = decode_json(encode('utf-8', $response->content)); if ($content->{query}) { # Wikipedia (action: query) $content = $content->{query}; diff --git a/lib/MusicBrainz/Server/Data/Role/Merge.pm b/lib/MusicBrainz/Server/Data/Role/Merge.pm index 635be1b89fb..39da325ffdb 100644 --- a/lib/MusicBrainz/Server/Data/Role/Merge.pm +++ b/lib/MusicBrainz/Server/Data/Role/Merge.pm @@ -22,10 +22,10 @@ around merge => sub { unless $new_id && $new_id > 0; my @to_merge = grep { $_ != $new_id } @old_ids - or croak("Attempted to merge empty list of IDs into target"); + or croak('Attempted to merge empty list of IDs into target'); @to_merge == @old_ids - or croak("Attempted to merge an object into itself"); + or croak('Attempted to merge an object into itself'); $self->_merge_impl($new_id, @to_merge); }; diff --git a/lib/MusicBrainz/Server/Data/Role/NewFromRow.pm b/lib/MusicBrainz/Server/Data/Role/NewFromRow.pm index 62268336321..0956846626d 100644 --- a/lib/MusicBrainz/Server/Data/Role/NewFromRow.pm +++ b/lib/MusicBrainz/Server/Data/Role/NewFromRow.pm @@ -5,7 +5,7 @@ use namespace::autoclean; sub _entity_class { - die("Not implemented"); + die('Not implemented'); } sub _column_mapping diff --git a/lib/MusicBrainz/Server/Data/Role/SelectAll.pm b/lib/MusicBrainz/Server/Data/Role/SelectAll.pm index df6ebe302cf..46cec9be355 100644 --- a/lib/MusicBrainz/Server/Data/Role/SelectAll.pm +++ b/lib/MusicBrainz/Server/Data/Role/SelectAll.pm @@ -14,15 +14,15 @@ role method '_get_all_from_db' => sub { my ($self, $p) = @_; - my $query = "SELECT " . $self->_columns . - " FROM " . $self->_table . - " ORDER BY " . (join ", ", @{ $p->order_by }); + my $query = 'SELECT ' . $self->_columns . + ' FROM ' . $self->_table . + ' ORDER BY ' . (join ', ', @{ $p->order_by }); $self->query_to_list($query); }; method '_delete_all_from_cache' => sub { my $self = shift; - $self->c->cache->delete($self->_type . ":all"); + $self->c->cache->delete($self->_type . ':all'); }; # Clear cached data if the list of all entities has changed. @@ -34,7 +34,7 @@ role method 'get_all' => sub { my $self = shift; - my $key = $self->_type . ":all"; + my $key = $self->_type . ':all'; my $cache = $self->c->cache($self->_type); my $all = $cache->get($key); diff --git a/lib/MusicBrainz/Server/Data/Search.pm b/lib/MusicBrainz/Server/Data/Search.pm index d42ff134d6c..f1e635c7633 100644 --- a/lib/MusicBrainz/Server/Data/Search.pm +++ b/lib/MusicBrainz/Server/Data/Search.pm @@ -64,9 +64,9 @@ use MusicBrainz::Server::Constants qw( entities_with $DARTIST_ID $DLABEL_ID ); use MusicBrainz::Server::Data::Utils qw( type_to_model ); use MusicBrainz::Server::ExternalUtils qw( get_chunked_with_retry ); use DateTime::Format::ISO8601; -use feature "switch"; +use feature 'switch'; -no if $] >= 5.018, warnings => "experimental::smartmatch"; +no if $] >= 5.018, warnings => 'experimental::smartmatch'; extends 'MusicBrainz::Server::Data::Entity'; @@ -88,9 +88,9 @@ sub search my @where_args; - if ($type eq "artist") { + if ($type eq 'artist') { - my $where_deleted = "WHERE entity.id != ?"; + my $where_deleted = 'WHERE entity.id != ?'; $deleted_entity = $DARTIST_ID; my $extra_columns = 'entity.gender, entity.area, entity.begin_area, entity.end_area,' if $type eq 'artist'; @@ -137,12 +137,12 @@ sub search $hard_search_limit = $offset * 2; } elsif ($type ~~ [qw(recording release release_group)]) { - my $extra_columns = ""; + my $extra_columns = ''; $extra_columns .= 'entity.type AS primary_type_id,' if ($type eq 'release_group'); - $extra_columns = "entity.length, entity.video," - if ($type eq "recording"); + $extra_columns = 'entity.length, entity.video,' + if ($type eq 'recording'); $extra_columns .= 'entity.language, entity.script, entity.barcode, entity.release_group, entity.status,' @@ -167,9 +167,9 @@ sub search elsif ($type eq 'recording') { if ($where && exists $where->{artist}) { - $join_sql .= " JOIN artist_credit ON artist_credit.id = entity.artist_credit"; + $join_sql .= ' JOIN artist_credit ON artist_credit.id = entity.artist_credit'; $where_sql = 'WHERE artist_credit.name LIKE ?'; - push @where_args, "%".$where->{artist}."%"; + push @where_args, '%'.$where->{artist}.'%'; } } my $extra_groupby_columns = $extra_columns =~ s/[^ ,]+ AS //gr; @@ -209,11 +209,11 @@ sub search } elsif ($type ~~ [qw(area event instrument label place series work)]) { - my $where_deleted = "WHERE entity.id != ?"; - if ($type eq "label") { + my $where_deleted = 'WHERE entity.id != ?'; + if ($type eq 'label') { $deleted_entity = $DLABEL_ID; } else { - $where_deleted = ""; + $where_deleted = ''; } my $extra_columns = ''; @@ -275,7 +275,7 @@ sub search elsif ($type eq 'genre') { - $query = " + $query = q{ SELECT entity.id, entity.gid, @@ -297,29 +297,33 @@ sub search rank DESC, entity.name, entity.gid OFFSET ? - "; + }; $use_hard_search_limit = 0; } - elsif ($type eq "tag") { - $query = " + elsif ($type eq 'tag') { + $query = q{ SELECT tag.id, tag.name, genre.id AS genre_id, ts_rank_cd(mb_simple_tsvector(tag.name), query, 2) AS rank FROM tag LEFT JOIN genre USING (name), plainto_tsquery('mb_simple', mb_lower(?)) AS query WHERE mb_simple_tsvector(tag.name) @@ query ORDER BY rank DESC, tag.name OFFSET ? - "; + }; + $use_hard_search_limit = 0; } elsif ($type eq 'editor') { - $query = "SELECT id, name, ts_rank_cd(mb_simple_tsvector(name), query, 2) AS rank, - email - FROM editor, plainto_tsquery('mb_simple', mb_lower(?)) AS query - WHERE mb_simple_tsvector(name) @@ query - ORDER BY rank DESC - OFFSET ?"; + $query = q{ + SELECT id, name, ts_rank_cd(mb_simple_tsvector(name), query, 2) AS rank, + email + FROM editor, plainto_tsquery('mb_simple', mb_lower(?)) AS query + WHERE mb_simple_tsvector(name) @@ query + ORDER BY rank DESC + OFFSET ? + }; + $use_hard_search_limit = 0; } @@ -472,39 +476,39 @@ sub schema_fixup } if ($type eq 'release') { - if (defined $data->{"release-events"}) + if (defined $data->{'release-events'}) { $data->{events} = []; - for my $release_event_data (@{$data->{"release-events"}}) + for my $release_event_data (@{$data->{'release-events'}}) { my $release_event = MusicBrainz::Server::Entity::ReleaseEvent->new( country => defined($release_event_data->{area}) ? MusicBrainz::Server::Entity::Area->new( gid => $release_event_data->{area}->{id}, - iso_3166_1 => $release_event_data->{area}->{"iso-3166-1-codes"}, + iso_3166_1 => $release_event_data->{area}->{'iso-3166-1-codes'}, name => $release_event_data->{area}->{name} ) : undef, date => MusicBrainz::Server::Entity::PartialDate->new( $release_event_data->{date} )); push @{$data->{events}}, $release_event; } - delete $data->{"release-events"}; + delete $data->{'release-events'}; } if (defined $data->{barcode}) { $data->{barcode} = MusicBrainz::Server::Entity::Barcode->new( $data->{barcode} ); } - if (defined $data->{"text-representation"} && - defined $data->{"text-representation"}->{language}) + if (defined $data->{'text-representation'} && + defined $data->{'text-representation'}->{language}) { $data->{language} = $self->c->model('Language')->find_by_code( - $data->{"text-representation"}{language} + $data->{'text-representation'}{language} ); } - if (defined $data->{"text-representation"} && - defined $data->{"text-representation"}->{script}) + if (defined $data->{'text-representation'} && + defined $data->{'text-representation'}->{script}) { $data->{script} = $self->c->model('Script')->find_by_code( - $data->{"text-representation"}{script} + $data->{'text-representation'}{script} ); } @@ -523,14 +527,14 @@ sub schema_fixup ]; } - if (defined $data->{"media"}) + if (defined $data->{'media'}) { $data->{mediums} = []; - for my $medium_data (@{$data->{"media"}}) + for my $medium_data (@{$data->{'media'}}) { my $format = $medium_data->{format}; my $medium = MusicBrainz::Server::Entity::Medium->new( - track_count => $medium_data->{"track-count"}, + track_count => $medium_data->{'track-count'}, format => $format && MusicBrainz::Server::Entity::MediumFormat->new( name => $format @@ -540,7 +544,7 @@ sub schema_fixup push @{$data->{mediums}}, $medium; } $data->{mediums_loaded} = 1; - delete $data->{"media"}; + delete $data->{'media'}; } my $release_group = delete $data->{'release-group'}; @@ -583,27 +587,27 @@ sub schema_fixup fixup_rg($data, $data); } if ($type eq 'recording' && - defined $data->{"releases"} && - defined $data->{"releases"}->[0] && - defined $data->{"releases"}->[0]->{"media"} && - defined $data->{"releases"}->[0]->{"media"}->[0]) + defined $data->{'releases'} && + defined $data->{'releases'}->[0] && + defined $data->{'releases'}->[0]->{'media'} && + defined $data->{'releases'}->[0]->{'media'}->[0]) { my @releases; - foreach my $release (@{$data->{"releases"}}) + foreach my $release (@{$data->{'releases'}}) { my $medium = MusicBrainz::Server::Entity::Medium->new( - position => $release->{"media"}->[0]->{"position"}, - track_count => $release->{"media"}->[0]->{"track-count"}, + position => $release->{'media'}->[0]->{'position'}, + track_count => $release->{'media'}->[0]->{'track-count'}, tracks => [ MusicBrainz::Server::Entity::Track->new( - position => $release->{"media"}->[0]->{"track-offset"} + 1, + position => $release->{'media'}->[0]->{'track-offset'} + 1, recording => MusicBrainz::Server::Entity::Recording->new( gid => $data->{gid} ) ) ] ); my $release_group = MusicBrainz::Server::Entity::ReleaseGroup->new( - fixup_rg($release->{"release-group"}) + fixup_rg($release->{'release-group'}) ); push @releases, { release => MusicBrainz::Server::Entity::Release->new( @@ -632,12 +636,12 @@ sub schema_fixup $data->{video} = defined $data->{video} && $data->{video} == 1; } - if (defined $data->{"relations"} && - defined $data->{"relations"}->[0]) + if (defined $data->{'relations'} && + defined $data->{'relations'}->[0]) { my @relationships; - foreach my $rel (@{ $data->{"relations"} }) + foreach my $rel (@{ $data->{'relations'} }) { my $target_type; for (entities_with(['mbid', 'relatable'], take => 'url')) { @@ -695,7 +699,7 @@ sub schema_fixup if (defined $data->{'artist_credit'}) { my @credits; - foreach my $namecredit (@{$data->{"artist_credit"}}) + foreach my $namecredit (@{$data->{'artist_credit'}}) { my $artist = MusicBrainz::Server::Entity::Artist->new($namecredit->{artist}); push @credits, MusicBrainz::Server::Entity::ArtistCreditName->new( { @@ -780,7 +784,7 @@ sub escape_query { my $str = shift; - return "" unless defined $str; + return '' unless defined $str; $str =~ s/([+\-&|!(){}\[\]\^"~*?:\\\/])/\\$1/g; return $str; @@ -802,16 +806,16 @@ sub external_search my $dismax = $adv ? 'false' : 'true'; $search_url_string = "http://%s/ws/2/%s/?query=%s&offset=%s&max=%s&fmt=jsonnew&dismax=$dismax&web=1"; } else { - my $endpoint = "advanced"; + my $endpoint = 'advanced'; if (!$adv) { # Solr has a bug where the dismax end point behaves differently # from edismax (advanced) when the query size is 1. This is a fix # for that. See https://issues.apache.org/jira/browse/SOLR-12409 if (split(/[\P{Word}_]+/, $query, 2) == 1) { - $endpoint = "basic"; + $endpoint = 'basic'; } else { - $endpoint = "select"; + $endpoint = 'select'; } } $search_url_string = "http://%s/%s/$endpoint?q=%s&start=%s&rows=%s&wt=mbjson"; @@ -833,7 +837,7 @@ sub external_search { return { code => $response->code, error => $response->content }; } - elsif ($response->status_line eq "200 Assumed OK") + elsif ($response->status_line eq '200 Assumed OK') { if ($response->content =~ /([0-9]{3})/) { @@ -868,7 +872,7 @@ sub external_search # Use types as provided by jsonnew format if ($type ~~ [qw(area artist event instrument label place recording release release-group work annotation cdstub editor)]) { - $xmltype .= "s"; + $xmltype .= 's'; } foreach my $t (@{$data->{$xmltype}}) diff --git a/lib/MusicBrainz/Server/Data/Series.pm b/lib/MusicBrainz/Server/Data/Series.pm index 29b09274cb0..3e194bc8b81 100644 --- a/lib/MusicBrainz/Server/Data/Series.pm +++ b/lib/MusicBrainz/Server/Data/Series.pm @@ -75,12 +75,12 @@ sub _hash_to_row { sub _order_by { my ($self, $order) = @_; - my $order_by = order_by($order, "name", { - "name" => sub { - return "name COLLATE musicbrainz" + my $order_by = order_by($order, 'name', { + 'name' => sub { + return 'name COLLATE musicbrainz' }, - "type" => sub { - return "type, name COLLATE musicbrainz" + 'type' => sub { + return 'type, name COLLATE musicbrainz' } }); @@ -161,7 +161,7 @@ sub update { if ($existing_entity_type ne $new_entity_type) { my ($items, $hits) = $self->c->model('Series')->get_entities($series, 1, 0); - die "Cannot change the entity type of a non-empty series" if scalar(@$items); + die 'Cannot change the entity type of a non-empty series' if scalar(@$items); } } @@ -206,9 +206,9 @@ sub get_entities { my $entity_type = $series->type->item_entity_type; my $model = $self->c->model(type_to_model($entity_type)); - my $query = " + my $query = ' SELECT e.*, es.text_value AS ordering_key - FROM (SELECT " . $model->_columns . " FROM " . $model->_table . ") e + FROM (SELECT ' . $model->_columns . ' FROM ' . $model->_table . ") e JOIN (SELECT * FROM ${entity_type}_series) es ON e.id = es.$entity_type WHERE es.series = ? ORDER BY es.link_order, e.name COLLATE musicbrainz ASC"; @@ -227,11 +227,11 @@ sub get_entities { sub find_by_subscribed_editor { my ($self, $editor_id, $limit, $offset) = @_; - my $query = "SELECT " . $self->_columns . " - FROM " . $self->_table . " + my $query = 'SELECT ' . $self->_columns . ' + FROM ' . $self->_table . ' JOIN editor_subscribe_series s ON series.id = s.series WHERE s.editor = ? - ORDER BY series.name COLLATE musicbrainz, series.id"; + ORDER BY series.name COLLATE musicbrainz, series.id'; $self->query_to_list_limited($query, [$editor_id], $limit, $offset); } @@ -336,7 +336,7 @@ sub automatically_reorder { } @{ $relationships_by_link_order{$link_order} // [] }; unless ($conflicting_relationship) { - push @from_values, "(?, ?)"; + push @from_values, '(?, ?)'; push @from_args, $relationship->id, $link_order; push @{$relationships_by_link_order{$link_order}}, $relationship; } @@ -355,8 +355,8 @@ sub automatically_reorder { $self->c->sql->do(" UPDATE l_${type0}_${type1} SET link_order = x.link_order::integer - FROM (VALUES " . join(", ", @from_values) . ") AS x (relationship, link_order) - WHERE id = x.relationship::integer", + FROM (VALUES " . join(', ', @from_values) . ') AS x (relationship, link_order) + WHERE id = x.relationship::integer', @from_args ); } diff --git a/lib/MusicBrainz/Server/Data/Statistics.pm b/lib/MusicBrainz/Server/Data/Statistics.pm index 0dee83a2632..d7d5edb648f 100644 --- a/lib/MusicBrainz/Server/Data/Statistics.pm +++ b/lib/MusicBrainz/Server/Data/Statistics.pm @@ -86,19 +86,19 @@ sub last_refreshed { } my %stats = ( - "editor.top_recently_active" => { - DESC => "Top recently active editors", + 'editor.top_recently_active' => { + DESC => 'Top recently active editors', CALC => sub { my ($self, $sql) = @_; my $id_edits = $sql->select_list_of_lists( - "SELECT editor, count(edit.id) FROM edit + q{SELECT editor, count(edit.id) FROM edit JOIN editor ON edit.editor = editor.id WHERE status IN (?, ?) AND open_time >= now() - '1 week'::INTERVAL AND cast(privs AS bit(2)) & B'10' = B'00' GROUP BY edit.editor, editor.name ORDER BY count(edit.id) DESC, editor.name COLLATE musicbrainz - LIMIT 25", + LIMIT 25}, $STATUS_OPEN, $STATUS_APPLIED ); @@ -113,18 +113,18 @@ my %stats = ( return \%map; } }, - "editor.top_active" => { - DESC => "Top active editors", + 'editor.top_active' => { + DESC => 'Top active editors', CALC => sub { my ($self, $sql) = @_; my $id_edits = $sql->select_list_of_lists( - "SELECT edit.editor, COUNT(edit.id) + q{SELECT edit.editor, COUNT(edit.id) FROM edit JOIN editor ON edit.editor = editor.id WHERE status = ? AND cast(editor.privs AS bit(2)) & B'10' = B'00' GROUP BY edit.editor, editor.name ORDER BY COUNT(edit.id) DESC, editor.name COLLATE musicbrainz - LIMIT 25", + LIMIT 25}, $STATUS_APPLIED, ); @@ -139,19 +139,19 @@ my %stats = ( return \%map; } }, - "editor.top_recently_active_voters" => { - DESC => "Top recently active voters", + 'editor.top_recently_active_voters' => { + DESC => 'Top recently active voters', CALC => sub { my ($self, $sql) = @_; my $id_edits = $sql->select_list_of_lists( - "SELECT editor, count(vote.id) FROM vote + q{SELECT editor, count(vote.id) FROM vote JOIN editor ON vote.editor = editor.id WHERE NOT superseded AND vote != -1 AND vote_time >= now() - '1 week'::INTERVAL AND cast(privs AS bit(10)) & 2::bit(10) = 0::bit(10) GROUP BY vote.editor, editor.name ORDER BY count(vote.id) DESC, editor.name COLLATE musicbrainz - LIMIT 25" + LIMIT 25} ); my %map; @@ -165,18 +165,18 @@ my %stats = ( return \%map; } }, - "editor.top_active_voters" => { - DESC => "Top active voters", + 'editor.top_active_voters' => { + DESC => 'Top active voters', CALC => sub { my ($self, $sql) = @_; my $id_edits = $sql->select_list_of_lists( - "SELECT editor, count(vote.id) FROM vote + 'SELECT editor, count(vote.id) FROM vote JOIN editor ON vote.editor = editor.id WHERE NOT superseded AND vote != -1 AND cast(privs AS bit(10)) & 2::bit(10) = 0::bit(10) GROUP BY editor, editor.name ORDER BY count(vote.id) DESC, editor.name COLLATE musicbrainz - LIMIT 25" + LIMIT 25' ); my %map; @@ -190,39 +190,39 @@ my %stats = ( return \%map; } }, - "count.mbid" => { - DESC => "Count of all MBIDs known/allocated", - SQL => "SELECT " . + 'count.mbid' => { + DESC => 'Count of all MBIDs known/allocated', + SQL => 'SELECT ' . join(' + ', (map { "(SELECT COUNT(gid) FROM $_)" } entities_with('mbid', take => sub { my $type = shift; return shift->{table} // $type })), (map { "(SELECT COUNT(gid) FROM ${_}_gid_redirect)" } entities_with(['mbid', 'multiple'], take => sub { my $type = shift; return shift->{table} // $type }))) }, - "count.release" => { - DESC => "Count of all releases", - SQL => "SELECT COUNT(*) FROM release", + 'count.release' => { + DESC => 'Count of all releases', + SQL => 'SELECT COUNT(*) FROM release', }, - "count.releasegroup" => { - DESC => "Count of all release groups", - SQL => "SELECT COUNT(*) FROM release_group", + 'count.releasegroup' => { + DESC => 'Count of all release groups', + SQL => 'SELECT COUNT(*) FROM release_group', }, - "count.area" => { - DESC => "Count of all areas", - SQL => "SELECT COUNT(*) FROM area", + 'count.area' => { + DESC => 'Count of all areas', + SQL => 'SELECT COUNT(*) FROM area', }, - "count.country_area" => { - DESC => "Count of all areas eligible for release country use", - SQL => "SELECT COUNT(*) FROM country_area", + 'count.country_area' => { + DESC => 'Count of all areas eligible for release country use', + SQL => 'SELECT COUNT(*) FROM country_area', }, - "count.area.type" => { - DESC => "Distribution of areas by type", + 'count.area.type' => { + DESC => 'Distribution of areas by type', CALC => sub { my ($self, $sql) = @_; my $data = $sql->select_list_of_lists( - "SELECT COALESCE(type.id::text, 'null'), COUNT(area.id) AS count + q{SELECT COALESCE(type.id::text, 'null'), COUNT(area.id) AS count FROM area_type type FULL OUTER JOIN area ON area.type = type.id - GROUP BY type.id", + GROUP BY type.id}, ); my %dist = map { @$_ } @$data; @@ -230,112 +230,110 @@ my %stats = ( +{ map { - "count.area.type.".$_ => $dist{$_} + 'count.area.type.'.$_ => $dist{$_} } keys %dist }; }, }, - "count.artist" => { - DESC => "Count of all artists", - SQL => "SELECT COUNT(*) FROM artist", + 'count.artist' => { + DESC => 'Count of all artists', + SQL => 'SELECT COUNT(*) FROM artist', }, - "count.artist.type.person" => { + 'count.artist.type.person' => { CALC => sub { my ($self, $sql) = @_; my $data = $sql->select_list_of_lists( - "SELECT COALESCE(type::text, 'null'), COUNT(*) AS count + q{SELECT COALESCE(type::text, 'null'), COUNT(*) AS count FROM artist - GROUP BY type - ", + GROUP BY type}, ); my %dist = map { @$_ } @$data; +{ - "count.artist.type.person" => $dist{1} || 0, - "count.artist.type.group" => $dist{2} || 0, - "count.artist.type.other" => $dist{3} || 0, - "count.artist.type.character" => $dist{4} || 0, - "count.artist.type.orchestra" => $dist{5} || 0, - "count.artist.type.choir" => $dist{6} || 0, - "count.artist.type.null" => $dist{null} || 0 + 'count.artist.type.person' => $dist{1} || 0, + 'count.artist.type.group' => $dist{2} || 0, + 'count.artist.type.other' => $dist{3} || 0, + 'count.artist.type.character' => $dist{4} || 0, + 'count.artist.type.orchestra' => $dist{5} || 0, + 'count.artist.type.choir' => $dist{6} || 0, + 'count.artist.type.null' => $dist{null} || 0 }; }, }, - "count.artist.type.group" => { + 'count.artist.type.group' => { PREREQ => [qw[ count.artist.type.person ]], PREREQ_ONLY => 1, }, - "count.artist.type.other" => { + 'count.artist.type.other' => { PREREQ => [qw[ count.artist.type.person ]], PREREQ_ONLY => 1, }, - "count.artist.type.null" => { + 'count.artist.type.null' => { PREREQ => [qw[ count.artist.type.person ]], PREREQ_ONLY => 1, }, - "count.artist.gender.male" => { + 'count.artist.gender.male' => { CALC => sub { my ($self, $sql) = @_; my $data = $sql->select_list_of_lists( - "SELECT COALESCE(gender::text, 'null'), COUNT(*) AS count + q{SELECT COALESCE(gender::text, 'null'), COUNT(*) AS count FROM artist WHERE (type NOT IN (2, 5, 6) OR type IS NULL) - GROUP BY gender - ", + GROUP BY gender}, ); my %dist = map { @$_ } @$data; +{ - "count.artist.gender.male" => $dist{1} || 0, - "count.artist.gender.female" => $dist{2} || 0, - "count.artist.gender.other" => $dist{3} || 0, - "count.artist.gender.not_applicable" => $dist{4} || 0, - "count.artist.gender.null" => $dist{null} || 0 + 'count.artist.gender.male' => $dist{1} || 0, + 'count.artist.gender.female' => $dist{2} || 0, + 'count.artist.gender.other' => $dist{3} || 0, + 'count.artist.gender.not_applicable' => $dist{4} || 0, + 'count.artist.gender.null' => $dist{null} || 0 }; }, }, - "count.artist.gender.female" => { + 'count.artist.gender.female' => { PREREQ => [qw[ count.artist.gender.male ]], PREREQ_ONLY => 1, }, - "count.artist.gender.other" => { + 'count.artist.gender.other' => { PREREQ => [qw[ count.artist.gender.male ]], PREREQ_ONLY => 1, }, - "count.artist.gender.not_applicable" => { + 'count.artist.gender.not_applicable' => { PREREQ => [qw[ count.artist.gender.male ]], PREREQ_ONLY => 1, }, - "count.artist.gender.null" => { + 'count.artist.gender.null' => { PREREQ => [qw[ count.artist.gender.male ]], PREREQ_ONLY => 1, }, - "count.artist.has_credits" => { - DESC => "Artists in at least one artist credit", - SQL => "SELECT COUNT(DISTINCT artist) FROM artist_credit_name", + 'count.artist.has_credits' => { + DESC => 'Artists in at least one artist credit', + SQL => 'SELECT COUNT(DISTINCT artist) FROM artist_credit_name', }, - "count.artist.0credits" => { - DESC => "Artists in no artist credits", - SQL => "SELECT COUNT(DISTINCT artist.id) FROM artist LEFT OUTER JOIN artist_credit_name ON artist.id = artist_credit_name.artist WHERE artist_credit_name.artist_credit IS NULL", + 'count.artist.0credits' => { + DESC => 'Artists in no artist credits', + SQL => 'SELECT COUNT(DISTINCT artist.id) FROM artist LEFT OUTER JOIN artist_credit_name ON artist.id = artist_credit_name.artist WHERE artist_credit_name.artist_credit IS NULL', }, - "count.event" => { - DESC => "Count of all events", - SQL => "SELECT COUNT(*) FROM event", + 'count.event' => { + DESC => 'Count of all events', + SQL => 'SELECT COUNT(*) FROM event', }, - "count.event.type" => { - DESC => "Distribution of events by type", + 'count.event.type' => { + DESC => 'Distribution of events by type', CALC => sub { my ($self, $sql) = @_; my $data = $sql->select_list_of_lists( - "SELECT COALESCE(type.id::text, 'null'), COUNT(event.id) AS count + q{SELECT COALESCE(type.id::text, 'null'), COUNT(event.id) AS count FROM event_type type FULL OUTER JOIN event ON event.type = type.id - GROUP BY type.id", + GROUP BY type.id}, ); my %dist = map { @$_ } @$data; @@ -343,29 +341,29 @@ my %stats = ( +{ map { - "count.event.type.".$_ => $dist{$_} + 'count.event.type.'.$_ => $dist{$_} } keys %dist }; }, }, - "count.genre" => { - DESC => "Count of all genres", - SQL => "SELECT COUNT(*) FROM genre", + 'count.genre' => { + DESC => 'Count of all genres', + SQL => 'SELECT COUNT(*) FROM genre', }, - "count.instrument" => { - DESC => "Count of all instruments", - SQL => "SELECT COUNT(*) FROM instrument", + 'count.instrument' => { + DESC => 'Count of all instruments', + SQL => 'SELECT COUNT(*) FROM instrument', }, - "count.instrument.type" => { - DESC => "Distribution of instruments by type", + 'count.instrument.type' => { + DESC => 'Distribution of instruments by type', CALC => sub { my ($self, $sql) = @_; my $data = $sql->select_list_of_lists( - "SELECT COALESCE(type.id::text, 'null'), COUNT(instrument.id) AS count + q{SELECT COALESCE(type.id::text, 'null'), COUNT(instrument.id) AS count FROM instrument_type type FULL OUTER JOIN instrument ON instrument.type = type.id - GROUP BY type.id", + GROUP BY type.id}, ); my %dist = map { @$_ } @$data; @@ -373,25 +371,25 @@ my %stats = ( +{ map { - "count.instrument.type.".$_ => $dist{$_} + 'count.instrument.type.'.$_ => $dist{$_} } keys %dist }; }, }, - "count.place" => { - DESC => "Count of all places", - SQL => "SELECT COUNT(*) FROM place", + 'count.place' => { + DESC => 'Count of all places', + SQL => 'SELECT COUNT(*) FROM place', }, - "count.place.type" => { - DESC => "Distribution of places by type", + 'count.place.type' => { + DESC => 'Distribution of places by type', CALC => sub { my ($self, $sql) = @_; my $data = $sql->select_list_of_lists( - "SELECT COALESCE(type.id::text, 'null'), COUNT(place.id) AS count + q{SELECT COALESCE(type.id::text, 'null'), COUNT(place.id) AS count FROM place_type type FULL OUTER JOIN place ON place.type = type.id - GROUP BY type.id", + GROUP BY type.id}, ); my %dist = map { @$_ } @$data; @@ -399,71 +397,71 @@ my %stats = ( +{ map { - "count.place.type.".$_ => $dist{$_} + 'count.place.type.'.$_ => $dist{$_} } keys %dist }; }, }, - "count.series" => { - DESC => "Count of all series", - SQL => "SELECT COUNT(*) FROM series", + 'count.series' => { + DESC => 'Count of all series', + SQL => 'SELECT COUNT(*) FROM series', }, - "count.series.type" => { - DESC => "Distribution of series by type", + 'count.series.type' => { + DESC => 'Distribution of series by type', CALC => sub { my ($self, $sql) = @_; my $data = $sql->select_list_of_lists( - "SELECT type.id::text, COUNT(series.id) AS count + 'SELECT type.id::text, COUNT(series.id) AS count FROM series_type type FULL OUTER JOIN series ON series.type = type.id - GROUP BY type.id", + GROUP BY type.id', ); my %dist = map { @$_ } @$data; +{ map { - "count.series.type.".$_ => $dist{$_} + 'count.series.type.'.$_ => $dist{$_} } keys %dist }; }, }, - "count.url" => { + 'count.url' => { DESC => 'Count of all URLs', SQL => 'SELECT count(*) FROM url', }, - "count.coverart" => { + 'count.coverart' => { DESC => 'Count of all cover art images', SQL => 'SELECT count(*) FROM cover_art_archive.cover_art', }, - "count.coverart.type" => { - DESC => "Distribution of cover art by type", + 'count.coverart.type' => { + DESC => 'Distribution of cover art by type', CALC => sub { my ($self, $sql) = @_; my $data = $sql->select_list_of_lists( - "SELECT art_type.name, COUNT(cover_art_type.id) AS count + 'SELECT art_type.name, COUNT(cover_art_type.id) AS count FROM cover_art_archive.cover_art_type JOIN cover_art_archive.art_type ON art_type.id = cover_art_type.type_id - GROUP BY art_type.name", + GROUP BY art_type.name', ); my %dist = map { @$_ } @$data; +{ map { - "count.coverart.type.".$_ => $dist{$_} + 'count.coverart.type.'.$_ => $dist{$_} } keys %dist }; }, }, - "count.release.coverart.amazon" => { - DESC => "Releases whose cover art comes from Amazon", + 'count.release.coverart.amazon' => { + DESC => 'Releases whose cover art comes from Amazon', CALC => sub { my ($self, $sql) = @_; - my $data = $sql->select_list_of_lists(<<~'EOSQL'); + my $data = $sql->select_list_of_lists(<<~'SQL'); SELECT (cover_art_url ~ '^https?://.*.images-amazon.com')::int AS is_amazon, COUNT(*) FROM release_coverart WHERE cover_art_url IS NOT NULL AND NOT EXISTS ( @@ -471,32 +469,32 @@ my %stats = ( JOIN cover_art_archive.cover_art_type cat ON ca.id = cat.id WHERE ca.release = release_coverart.id AND cat.type_id = 1) GROUP BY is_amazon - EOSQL + SQL my %dist = map { @$_ } @$data; +{ - "count.release.coverart.amazon" => $dist{1} // 0, - "count.release.coverart.relationship" => $dist{0} // 0 + 'count.release.coverart.amazon' => $dist{1} // 0, + 'count.release.coverart.relationship' => $dist{0} // 0 }; }, NONREPLICATED => 1, }, - "count.release.coverart.relationship" => { - DESC => "Releases whose cover art comes from relationships", + 'count.release.coverart.relationship' => { + DESC => 'Releases whose cover art comes from relationships', PREREQ => [qw[ count.release.coverart.amazon ]], PREREQ_ONLY => 1, NONREPLICATED => 1, }, - "count.release.coverart.caa" => { - DESC => "Releases whose cover art comes from the CAA", + 'count.release.coverart.caa' => { + DESC => 'Releases whose cover art comes from the CAA', SQL => 'SELECT COUNT(distinct release) FROM cover_art_archive.cover_art ca JOIN cover_art_archive.cover_art_type cat ON ca.id = cat.id WHERE cat.type_id = 1', }, - "count.release.coverart.none" => { + 'count.release.coverart.none' => { PREREQ => [qw[ count.release count.release.coverart.amazon count.release.coverart.caa count.release.coverart.relationship ]], - DESC => "Releases with no cover art", + DESC => 'Releases with no cover art', CALC => sub { my ($self, $sql) = @_; @@ -507,38 +505,38 @@ my %stats = ( }, NONREPLICATED => 1, }, - "count.release.status.statname.has_coverart" => { - DESC => "Count of releases with cover art, by status", + 'count.release.status.statname.has_coverart' => { + DESC => 'Count of releases with cover art, by status', CALC => sub { my ($self, $sql) = @_; my $data = $sql->select_list_of_lists( - "SELECT + q{SELECT coalesce(release_status.name, 'null'), count(DISTINCT cover_art.release) FROM cover_art_archive.cover_art JOIN release ON release.id = cover_art.release FULL OUTER JOIN release_status ON release_status.id = release.status - GROUP BY coalesce(release_status.name, 'null')", + GROUP BY coalesce(release_status.name, 'null')}, ); my %dist = map { @$_ } @$data; +{ map { - "count.release.status.".$_.".has_coverart" => $dist{$_} + 'count.release.status.'.$_. '.has_coverart' => $dist{$_} } keys %dist }; }, }, - "count.release.type.typename.has_coverart" => { - DESC => "Count of releases with cover art, by release group type", + 'count.release.type.typename.has_coverart' => { + DESC => 'Count of releases with cover art, by release group type', CALC => sub { my ($self, $sql) = @_; my $data = $sql->select_list_of_lists( - "SELECT + q{SELECT coalesce(release_group_primary_type.name, 'null'), count(DISTINCT cover_art.release) FROM cover_art_archive.cover_art @@ -547,25 +545,25 @@ my %stats = ( ON release.release_group = release_group.id FULL OUTER JOIN release_group_primary_type ON release_group_primary_type.id = release_group.type - GROUP BY coalesce(release_group_primary_type.name, 'null')" + GROUP BY coalesce(release_group_primary_type.name, 'null')} ); my %dist = map { @$_ } @$data; +{ map { - "count.release.type.".$_.".has_coverart" => $dist{$_} + 'count.release.type.'.$_. '.has_coverart' => $dist{$_} } keys %dist }; }, }, - "count.release.format.fname.has_coverart" => { - DESC => "Count of releases with cover art, by medium format", + 'count.release.format.fname.has_coverart' => { + DESC => 'Count of releases with cover art, by medium format', CALC => sub { my ($self, $sql) = @_; my $data = $sql->select_list_of_lists( - "SELECT + q{SELECT coalesce(medium_format.name, 'null'), count(DISTINCT cover_art.release) FROM cover_art_archive.cover_art @@ -573,34 +571,33 @@ my %stats = ( JOIN medium ON medium.release = release.id FULL OUTER JOIN medium_format ON medium_format.id = medium.format - GROUP BY coalesce(medium_format.name, 'null')", + GROUP BY coalesce(medium_format.name, 'null')}, ); my %dist = map { @$_ } @$data; +{ map { - "count.release.format.".$_.".has_coverart" => $dist{$_} + 'count.release.format.'.$_. '.has_coverart' => $dist{$_} } keys %dist }; }, }, - "count.coverart.per_release.Nimages" => { - DESC => "Distribution of cover art images per release", + 'count.coverart.per_release.Nimages' => { + DESC => 'Distribution of cover art images per release', CALC => sub { my ($self, $sql) = @_; my $max_dist_tail = 30; my $data = $sql->select_list_of_lists( - "SELECT c, COUNT(*) AS freq + 'SELECT c, COUNT(*) AS freq FROM ( SELECT release, COUNT(*) AS c FROM cover_art_archive.cover_art GROUP BY release ) AS t - GROUP BY c - ", + GROUP BY c', ); my %dist = map { $_ => 0 } 1 .. $max_dist_tail; @@ -615,26 +612,26 @@ my %stats = ( +{ map { - "count.coverart.per_release.".$_."images" => $dist{$_} + 'count.coverart.per_release.'.$_. 'images' => $dist{$_} } keys %dist }; }, }, - "count.label" => { - DESC => "Count of all labels", - SQL => "SELECT COUNT(*) FROM label", + 'count.label' => { + DESC => 'Count of all labels', + SQL => 'SELECT COUNT(*) FROM label', }, - "count.label.type" => { - DESC => "Distribution of labels by type", + 'count.label.type' => { + DESC => 'Distribution of labels by type', CALC => sub { my ($self, $sql) = @_; my $data = $sql->select_list_of_lists( - "SELECT COALESCE(type.id::text, 'null'), COUNT(label.id) AS count + q{SELECT COALESCE(type.id::text, 'null'), COUNT(label.id) AS count FROM label_type type FULL OUTER JOIN label ON label.type = type.id - GROUP BY type.id", + GROUP BY type.id}, ); my %dist = map { @$_ } @$data; @@ -642,26 +639,26 @@ my %stats = ( +{ map { - "count.label.type.".$_ => $dist{$_} + 'count.label.type.'.$_ => $dist{$_} } keys %dist }; }, }, - "count.discid" => { - DESC => "Count of all disc IDs", - SQL => "SELECT COUNT(*) FROM cdtoc", + 'count.discid' => { + DESC => 'Count of all disc IDs', + SQL => 'SELECT COUNT(*) FROM cdtoc', }, - "count.edit" => { - DESC => "Count of all edits", - SQL => "SELECT COUNT(*) FROM edit", + 'count.edit' => { + DESC => 'Count of all edits', + SQL => 'SELECT COUNT(*) FROM edit', NONREPLICATED => 1, }, - "count.editor" => { - DESC => "Count of all editors, and assorted sub-pieces", + 'count.editor' => { + DESC => 'Count of all editors, and assorted sub-pieces', CALC => sub { my ($self, $sql) = @_; - my $data = $sql->select_list_of_hashes(qq{ + my $data = $sql->select_list_of_hashes(' WITH tag_editors AS ( SELECT editor FROM artist_tag_raw UNION SELECT editor FROM area_tag_raw @@ -694,9 +691,9 @@ my %stats = ( UNION SELECT editor FROM editor_subscribe_series_deleted ), collection_editors AS (SELECT DISTINCT editor FROM editor_collection - WHERE } . join(' OR ', map { + WHERE ' . join(' OR ', map { "EXISTS (SELECT TRUE FROM editor_collection_$_ WHERE collection=editor_collection.id LIMIT 1)" - } entities_with('collections')) . qq{ ), + } entities_with('collections')) . ' ), voters AS (SELECT DISTINCT editor FROM vote), noters AS (SELECT DISTINCT editor FROM edit_note), application_editors AS (SELECT DISTINCT owner FROM application) @@ -719,22 +716,22 @@ my %stats = ( LEFT JOIN voters ON editor.id = voters.editor LEFT JOIN noters ON editor.id = noters.editor LEFT JOIN application_editors ON editor.id = application_editors.owner - GROUP BY valid, validated, edits, tags, ratings, subscriptions, collections, votes, notes, applications}); + GROUP BY valid, validated, edits, tags, ratings, subscriptions, collections, votes, notes, applications'); my @active_markers = qw(edits tags ratings subscriptions collections votes notes applications); my $stats = { - "count.editor" => sub { return 1 }, - "count.editor.deleted" => sub { return !shift->{valid}}, - "count.editor.valid" => sub { return shift->{valid} }, - "count.editor.valid.inactive" => sub { + 'count.editor' => sub { return 1 }, + 'count.editor.deleted' => sub { return !shift->{valid}}, + 'count.editor.valid' => sub { return shift->{valid} }, + 'count.editor.valid.inactive' => sub { my $row = shift; return $row->{valid} && !$row->{validated} && !(grep { $row->{$_} } @active_markers) }, - "count.editor.valid.active" => sub { + 'count.editor.valid.active' => sub { my $row = shift; return $row->{valid} && (grep { $row->{$_} } @active_markers) }, - "count.editor.valid.validated_only" => sub { + 'count.editor.valid.validated_only' => sub { my $row = shift; return $row->{valid} && $row->{validated} && !(grep { $row->{$_} } @active_markers) } @@ -758,73 +755,72 @@ my %stats = ( PRIVATE => 1, }, - "count.barcode" => { - DESC => "Count of all unique Barcodes", - SQL => "SELECT COUNT(distinct barcode) FROM release", + 'count.barcode' => { + DESC => 'Count of all unique barcodes', + SQL => 'SELECT COUNT(distinct barcode) FROM release', }, - "count.medium" => { - DESC => "Count of all mediums", - SQL => "SELECT COUNT(*) FROM medium", + 'count.medium' => { + DESC => 'Count of all mediums', + SQL => 'SELECT COUNT(*) FROM medium', }, - "count.track" => { - DESC => "Count of all tracks", - SQL => "SELECT COUNT(*) FROM track", + 'count.track' => { + DESC => 'Count of all tracks', + SQL => 'SELECT COUNT(*) FROM track', }, - "count.recording" => { - DESC => "Count of all recordings", - SQL => "SELECT COUNT(*) FROM recording", + 'count.recording' => { + DESC => 'Count of all recordings', + SQL => 'SELECT COUNT(*) FROM recording', }, - "count.recording.standalone" => { - DESC => "Count of all standalone recordings", - SQL => "SELECT COUNT(*) FROM recording WHERE NOT EXISTS ( + 'count.recording.standalone' => { + DESC => 'Count of all standalone recordings', + SQL => 'SELECT COUNT(*) FROM recording WHERE NOT EXISTS ( SELECT 1 FROM track WHERE track.recording = recording.id - )", + )', }, - "count.video" => { - DESC => "Count of all video recordings", - SQL => "SELECT COUNT(*) FROM recording WHERE video", + 'count.video' => { + DESC => 'Count of all video recordings', + SQL => 'SELECT COUNT(*) FROM recording WHERE video', }, - "count.work" => { - DESC => "Count of all works", - SQL => "SELECT COUNT(*) FROM work", + 'count.work' => { + DESC => 'Count of all works', + SQL => 'SELECT COUNT(*) FROM work', }, - "count.work.has_iswc" => { - DESC => "Count of all works with at least one ISWC", - SQL => "SELECT COUNT(DISTINCT work) FROM iswc", + 'count.work.has_iswc' => { + DESC => 'Count of all works with at least one ISWC', + SQL => 'SELECT COUNT(DISTINCT work) FROM iswc', }, - "count.work.language" => { - DESC => "Distribution of works by lyrics language", + 'count.work.language' => { + DESC => 'Distribution of works by lyrics language', CALC => sub { my ($self, $sql) = @_; my $data = $sql->select_list_of_lists( - "SELECT COALESCE(l.iso_code_3::text, 'null'), COUNT(wl.work) AS count + q{SELECT COALESCE(l.iso_code_3::text, 'null'), COUNT(wl.work) AS count FROM work_language wl FULL OUTER JOIN language l ON wl.language=l.id WHERE l.iso_code_2t IS NOT NULL OR l.frequency > 0 - GROUP BY l.iso_code_3 - ", + GROUP BY l.iso_code_3}, ); my %dist = map { @$_ } @$data; +{ map { - "count.work.language.".$_ => $dist{$_} + 'count.work.language.'.$_ => $dist{$_} } keys %dist }; }, }, - "count.work.type" => { - DESC => "Distribution of works by type", + 'count.work.type' => { + DESC => 'Distribution of works by type', CALC => sub { my ($self, $sql) = @_; my $data = $sql->select_list_of_lists( - "SELECT COALESCE(type.id::text, 'null'), COUNT(work.id) AS count + q{SELECT COALESCE(type.id::text, 'null'), COUNT(work.id) AS count FROM work_type type FULL OUTER JOIN work ON work.type = type.id - GROUP BY type.id", + GROUP BY type.id}, ); my %dist = map { @$_ } @$data; @@ -832,94 +828,94 @@ my %stats = ( +{ map { - "count.work.type.".$_ => $dist{$_} + 'count.work.type.'.$_ => $dist{$_} } keys %dist }; }, }, - "count.work.attribute" => { - DESC => "Distribution of works by attributes", + 'count.work.attribute' => { + DESC => 'Distribution of works by attributes', CALC => sub { my ($self, $sql) = @_; my $data = $sql->select_list_of_lists( - "SELECT COALESCE(work_attribute_type.id::text, 'null'), + q{SELECT COALESCE(work_attribute_type.id::text, 'null'), COUNT(DISTINCT work.id) AS count FROM work_attribute FULL OUTER JOIN work_attribute_type ON work_attribute_type.id = work_attribute.work_attribute_type FULL OUTER JOIN work ON work.id = work_attribute.work - GROUP BY work_attribute_type.id", + GROUP BY work_attribute_type.id}, ); my %dist = map { @$_ } @$data; +{ map { - "count.work.attribute.".$_ => $dist{$_} + 'count.work.attribute.'.$_ => $dist{$_} } keys %dist }; }, }, - "count.artistcredit" => { - DESC => "Count of all artist credits", - SQL => "SELECT COUNT(*) FROM artist_credit", + 'count.artistcredit' => { + DESC => 'Count of all artist credits', + SQL => 'SELECT COUNT(*) FROM artist_credit', }, - "count.ipi" => { - DESC => "Count of IPI codes", + 'count.ipi' => { + DESC => 'Count of IPI codes', PREREQ => [qw[ count.ipi.artist count.ipi.label ]], CALC => sub { my ($self, $sql) = @_; - return $self->fetch("count.ipi.artist") + $self->fetch("count.ipi.label"); + return $self->fetch('count.ipi.artist') + $self->fetch('count.ipi.label'); }, }, - "count.ipi.artist" => { - DESC => "Count of artists with an IPI code", - SQL => "SELECT COUNT(DISTINCT artist) FROM artist_ipi", + 'count.ipi.artist' => { + DESC => 'Count of artists with an IPI code', + SQL => 'SELECT COUNT(DISTINCT artist) FROM artist_ipi', }, - "count.ipi.label" => { - DESC => "Count of labels with an IPI code", - SQL => "SELECT COUNT(DISTINCT label) FROM label_ipi", + 'count.ipi.label' => { + DESC => 'Count of labels with an IPI code', + SQL => 'SELECT COUNT(DISTINCT label) FROM label_ipi', }, - "count.isni" => { - DESC => "Count of ISNI codes", + 'count.isni' => { + DESC => 'Count of ISNI codes', PREREQ => [qw[ count.isni.artist count.isni.label ]], CALC => sub { my ($self, $sql) = @_; - return $self->fetch("count.isni.artist") + $self->fetch("count.isni.label"); + return $self->fetch('count.isni.artist') + $self->fetch('count.isni.label'); }, }, - "count.isni.artist" => { - DESC => "Count of artists with an ISNI code", - SQL => "SELECT COUNT(DISTINCT artist) FROM artist_isni", + 'count.isni.artist' => { + DESC => 'Count of artists with an ISNI code', + SQL => 'SELECT COUNT(DISTINCT artist) FROM artist_isni', }, - "count.isni.label" => { - DESC => "Count of labels with an ISNI code", - SQL => "SELECT COUNT(DISTINCT label) FROM label_isni", + 'count.isni.label' => { + DESC => 'Count of labels with an ISNI code', + SQL => 'SELECT COUNT(DISTINCT label) FROM label_isni', }, - "count.isrc.all" => { - DESC => "Count of all ISRCs joined to recordings", - SQL => "SELECT COUNT(*) FROM isrc", + 'count.isrc.all' => { + DESC => 'Count of all ISRCs joined to recordings', + SQL => 'SELECT COUNT(*) FROM isrc', }, - "count.isrc" => { - DESC => "Count of unique ISRCs", - SQL => "SELECT COUNT(distinct isrc) FROM isrc", + 'count.isrc' => { + DESC => 'Count of unique ISRCs', + SQL => 'SELECT COUNT(distinct isrc) FROM isrc', }, - "count.iswc.all" => { - DESC => "Count of all ISWCs", - SQL => "SELECT COUNT(*) FROM iswc", + 'count.iswc.all' => { + DESC => 'Count of all ISWCs', + SQL => 'SELECT COUNT(*) FROM iswc', }, - "count.iswc" => { - DESC => "Count of unique ISWCs", - SQL => "SELECT COUNT(distinct iswc) FROM iswc", + 'count.iswc' => { + DESC => 'Count of unique ISWCs', + SQL => 'SELECT COUNT(distinct iswc) FROM iswc', }, - "count.vote" => { - DESC => "Count of all votes", - SQL => "SELECT COUNT(*) FROM vote", + 'count.vote' => { + DESC => 'Count of all votes', + SQL => 'SELECT COUNT(*) FROM vote', NONREPLICATED => 1, }, - "count.label.country" => { - DESC => "Distribution of labels per country", + 'count.label.country' => { + DESC => 'Distribution of labels per country', CALC => sub { my ($self, $sql) = @_; @@ -947,179 +943,171 @@ my %stats = ( +{ map { - "count.label.country.".$_ => $dist{$_} + 'count.label.country.'.$_ => $dist{$_} } keys %dist }; }, }, - "count.release.country" => { - DESC => "Distribution of releases per country", + 'count.release.country' => { + DESC => 'Distribution of releases per country', CALC => sub { my ($self, $sql) = @_; my $data = $sql->select_list_of_lists( - "SELECT COALESCE(iso.code::text, 'null'), COUNT(r.gid) AS count + q{SELECT COALESCE(iso.code::text, 'null'), COUNT(r.gid) AS count FROM release r LEFT JOIN release_country rc ON r.id = rc.release FULL OUTER JOIN country_area c ON rc.country = c.area LEFT JOIN iso_3166_1 iso ON c.area = iso.area - GROUP BY iso.code - ", + GROUP BY iso.code}, ); my %dist = map { @$_ } @$data; +{ map { - "count.release.country.".$_ => $dist{$_} + 'count.release.country.'.$_ => $dist{$_} } keys %dist }; }, }, - "count.release.format" => { - DESC => "Distribution of releases by format", + 'count.release.format' => { + DESC => 'Distribution of releases by format', CALC => sub { my ($self, $sql) = @_; my $data = $sql->select_list_of_lists( - "SELECT COALESCE(medium_format.id::text, 'null'), count(DISTINCT medium.release) AS count + q{SELECT COALESCE(medium_format.id::text, 'null'), count(DISTINCT medium.release) AS count FROM medium FULL OUTER JOIN medium_format ON medium.format = medium_format.id - GROUP BY medium_format.id - ", + GROUP BY medium_format.id}, ); my %dist = map { @$_ } @$data; +{ map { - "count.release.format.".$_ => $dist{$_} + 'count.release.format.'.$_ => $dist{$_} } keys %dist }; }, }, - "count.medium.format" => { - DESC => "Distribution of mediums by format", + 'count.medium.format' => { + DESC => 'Distribution of mediums by format', CALC => sub { my ($self, $sql) = @_; my $data = $sql->select_list_of_lists( - "SELECT COALESCE(medium_format.id::text, 'null'), count(DISTINCT medium.id) AS count + q{SELECT COALESCE(medium_format.id::text, 'null'), count(DISTINCT medium.id) AS count FROM medium FULL OUTER JOIN medium_format ON medium.format = medium_format.id - GROUP BY medium_format.id - ", + GROUP BY medium_format.id}, ); my %dist = map { @$_ } @$data; +{ map { - "count.medium.format.".$_ => $dist{$_} + 'count.medium.format.'.$_ => $dist{$_} } keys %dist }; }, }, - "count.release.language" => { - DESC => "Distribution of releases by language", + 'count.release.language' => { + DESC => 'Distribution of releases by language', CALC => sub { my ($self, $sql) = @_; my $data = $sql->select_list_of_lists( - "SELECT COALESCE(l.iso_code_3::text, 'null'), COUNT(r.gid) AS count + q{SELECT COALESCE(l.iso_code_3::text, 'null'), COUNT(r.gid) AS count FROM release r FULL OUTER JOIN language l ON r.language=l.id WHERE l.iso_code_2t IS NOT NULL OR l.frequency > 0 - GROUP BY l.iso_code_3 - ", + GROUP BY l.iso_code_3}, ); my %dist = map { @$_ } @$data; +{ map { - "count.release.language.".$_ => $dist{$_} + 'count.release.language.'.$_ => $dist{$_} } keys %dist }; }, }, - "count.release.script" => { - DESC => "Distribution of releases by script", + 'count.release.script' => { + DESC => 'Distribution of releases by script', CALC => sub { my ($self, $sql) = @_; my $data = $sql->select_list_of_lists( - "SELECT COALESCE(s.iso_code::text, 'null'), COUNT(r.gid) AS count + q{SELECT COALESCE(s.iso_code::text, 'null'), COUNT(r.gid) AS count FROM release r FULL OUTER JOIN script s ON r.script=s.id - GROUP BY s.iso_code - ", + GROUP BY s.iso_code}, ); my %dist = map { @$_ } @$data; +{ map { - "count.release.script.".$_ => $dist{$_} + 'count.release.script.'.$_ => $dist{$_} } keys %dist }; }, }, - "count.release.status" => { - DESC => "Distribution of releases by status", + 'count.release.status' => { + DESC => 'Distribution of releases by status', CALC => sub { my ($self, $sql) = @_; my $data = $sql->select_list_of_lists( - "SELECT COALESCE(s.id::text, 'null'), COUNT(r.gid) AS count + q{SELECT COALESCE(s.id::text, 'null'), COUNT(r.gid) AS count FROM release r FULL OUTER JOIN release_status s ON r.status=s.id - GROUP BY s.id - ", + GROUP BY s.id}, ); my %dist = map { @$_ } @$data; +{ map { - "count.release.status.".$_ => $dist{$_} + 'count.release.status.'.$_ => $dist{$_} } keys %dist }; }, }, - "count.release.packaging" => { - DESC => "Distribution of releases by packaging", + 'count.release.packaging' => { + DESC => 'Distribution of releases by packaging', CALC => sub { my ($self, $sql) = @_; my $data = $sql->select_list_of_lists( - "SELECT COALESCE(p.id::text, 'null'), COUNT(r.gid) AS count + q{SELECT COALESCE(p.id::text, 'null'), COUNT(r.gid) AS count FROM release r FULL OUTER JOIN release_packaging p ON r.packaging=p.id - GROUP BY p.id - ", + GROUP BY p.id}, ); my %dist = map { @$_ } @$data; +{ map { - "count.release.packaging.".$_ => $dist{$_} + 'count.release.packaging.'.$_ => $dist{$_} } keys %dist }; }, }, - "count.releasegroup.Nreleases" => { - DESC => "Distribution of releases per releasegroup", + 'count.releasegroup.Nreleases' => { + DESC => 'Distribution of releases per releasegroup', CALC => sub { my ($self, $sql) = @_; my $max_dist_tail = 10; my $data = $sql->select_list_of_lists( - "SELECT release_count, COUNT(*) AS freq + 'SELECT release_count, COUNT(*) AS freq FROM release_group_meta - GROUP BY release_count - ", + GROUP BY release_count', ); my %dist = map { $_ => 0 } 0 .. $max_dist_tail; @@ -1134,57 +1122,57 @@ my %stats = ( +{ map { - "count.releasegroup.".$_."releases" => $dist{$_} + 'count.releasegroup.'.$_.'releases' => $dist{$_} } keys %dist }; }, }, - "count.releasegroup.primary_type" => { - DESC => "Distribution of release groups by primary type", + 'count.releasegroup.primary_type' => { + DESC => 'Distribution of release groups by primary type', CALC => sub { my ($self, $sql) = @_; my $data = $sql->select_list_of_lists( - "SELECT type.id, COUNT(rg.id) AS count + 'SELECT type.id, COUNT(rg.id) AS count FROM release_group_primary_type type LEFT JOIN release_group rg ON rg.type = type.id - GROUP BY type.id", + GROUP BY type.id', ); my %dist = map { @$_ } @$data; +{ map { - "count.releasegroup.primary_type.".$_ => $dist{$_} + 'count.releasegroup.primary_type.'.$_ => $dist{$_} } keys %dist }; }, }, - "count.releasegroup.secondary_type" => { - DESC => "Distribution of release groups by secondary type", + 'count.releasegroup.secondary_type' => { + DESC => 'Distribution of release groups by secondary type', CALC => sub { my ($self, $sql) = @_; my $data = $sql->select_list_of_lists( - "SELECT type.id, COUNT(rg.id) AS count + 'SELECT type.id, COUNT(rg.id) AS count FROM release_group_secondary_type type LEFT JOIN release_group_secondary_type_join type_join ON type.id = type_join.secondary_type JOIN release_group rg ON rg.id = type_join.release_group - GROUP BY type.id", + GROUP BY type.id', ); my %dist = map { @$_ } @$data; +{ map { - "count.releasegroup.secondary_type.".$_ => $dist{$_} + 'count.releasegroup.secondary_type.'.$_ => $dist{$_} } keys %dist }; }, }, - "count.releasegroup.caa" => { - DESC => "Count of release groups that have CAA artwork", + 'count.releasegroup.caa' => { + DESC => 'Count of release groups that have CAA artwork', SQL => q{ SELECT count(DISTINCT release.release_group) FROM cover_art_archive.index_listing @@ -1193,177 +1181,176 @@ my %stats = ( WHERE is_front = true } }, - "count.releasegroup.caa.manually_selected" => { - DESC => "Count of release groups that have CAA artwork manually selected", + 'count.releasegroup.caa.manually_selected' => { + DESC => 'Count of release groups that have CAA artwork manually selected', SQL => 'SELECT count(DISTINCT release_group) FROM cover_art_archive.release_group_cover_art' }, - "count.releasegroup.caa.inferred" => { + 'count.releasegroup.caa.inferred' => { PREREQ => [qw[ count.releasegroup.caa count.releasegroup.caa.manually_selected ]], - DESC => "Releases groups with CAA artwork inferred from release artwork", + DESC => 'Releases groups with CAA artwork inferred from release artwork', CALC => sub { my ($self, $sql) = @_; return $self->fetch('count.releasegroup.caa') - $self->fetch('count.releasegroup.caa.manually_selected'); } }, - "count.release.various" => { - DESC => "Count of all 'Various Artists' releases", + 'count.release.various' => { + DESC => q(Count of all 'Various Artists' releases), SQL => 'SELECT COUNT(*) FROM release JOIN artist_credit ac ON ac.id = artist_credit JOIN artist_credit_name acn ON acn.artist_credit = ac.id WHERE artist_count = 1 AND artist = ' . $VARTIST_ID, }, - "count.release.nonvarious" => { - DESC => "Count of all releases, other than 'Various Artists'", + 'count.release.nonvarious' => { + DESC => q(Count of all releases, other than 'Various Artists'), PREREQ => [qw[ count.release count.release.various ]], CALC => sub { my ($self, $sql) = @_; - $self->fetch("count.release") - - $self->fetch("count.release.various") + $self->fetch('count.release') + - $self->fetch('count.release.various') }, }, - "count.medium.has_discid" => { - DESC => "Count of media with at least one disc ID", - SQL => "SELECT COUNT(DISTINCT medium) - FROM medium_cdtoc", + 'count.medium.has_discid' => { + DESC => 'Count of media with at least one disc ID', + SQL => 'SELECT COUNT(DISTINCT medium) FROM medium_cdtoc', }, - "count.release.has_discid" => { - DESC => "Count of releases with at least one disc ID", - SQL => "SELECT COUNT(DISTINCT medium.release) + 'count.release.has_discid' => { + DESC => 'Count of releases with at least one disc ID', + SQL => 'SELECT COUNT(DISTINCT medium.release) FROM medium_cdtoc - JOIN medium ON medium_cdtoc.medium = medium.id", + JOIN medium ON medium_cdtoc.medium = medium.id', }, - "count.release.has_caa" => { + 'count.release.has_caa' => { DESC => 'Count of releases that have cover art at the Cover Art Archive', SQL => 'SELECT count(DISTINCT release) FROM cover_art_archive.cover_art', PRIVATE => 1, }, - "count.recording.has_isrc" => { - DESC => "Count of recordings with at least one ISRC", - SQL => "SELECT COUNT(DISTINCT recording) FROM isrc", + 'count.recording.has_isrc' => { + DESC => 'Count of recordings with at least one ISRC', + SQL => 'SELECT COUNT(DISTINCT recording) FROM isrc', }, - "count.edit.open" => { - DESC => "Count of open edits", + 'count.edit.open' => { + DESC => 'Count of open edits', CALC => sub { my ($self, $sql) = @_; my $data = $sql->select_list_of_lists( - "SELECT status, COUNT(*) FROM edit GROUP BY status", + 'SELECT status, COUNT(*) FROM edit GROUP BY status', ); my %dist = map { @$_ } @$data; +{ - "count.edit.open" => $dist{$STATUS_OPEN} || 0, - "count.edit.applied" => $dist{$STATUS_APPLIED} || 0, - "count.edit.failedvote" => $dist{$STATUS_FAILEDVOTE} || 0, - "count.edit.faileddep" => $dist{$STATUS_FAILEDDEP} || 0, - "count.edit.error" => $dist{$STATUS_ERROR} || 0, - "count.edit.failedprereq" => $dist{$STATUS_FAILEDPREREQ} || 0, - "count.edit.evalnochange" => 0, - "count.edit.deleted" => $dist{$STATUS_DELETED} || 0, + 'count.edit.open' => $dist{$STATUS_OPEN} || 0, + 'count.edit.applied' => $dist{$STATUS_APPLIED} || 0, + 'count.edit.failedvote' => $dist{$STATUS_FAILEDVOTE} || 0, + 'count.edit.faileddep' => $dist{$STATUS_FAILEDDEP} || 0, + 'count.edit.error' => $dist{$STATUS_ERROR} || 0, + 'count.edit.failedprereq' => $dist{$STATUS_FAILEDPREREQ} || 0, + 'count.edit.evalnochange' => 0, + 'count.edit.deleted' => $dist{$STATUS_DELETED} || 0, }; }, NONREPLICATED => 1, }, - "count.edit.applied" => { - DESC => "Count of applied edits", + 'count.edit.applied' => { + DESC => 'Count of applied edits', PREREQ => [qw[ count.edit.open ]], PREREQ_ONLY => 1, NONREPLICATED => 1, }, - "count.edit.failedvote" => { - DESC => "Count of edits which were voted down", + 'count.edit.failedvote' => { + DESC => 'Count of edits which were voted down', PREREQ => [qw[ count.edit.open ]], PREREQ_ONLY => 1, NONREPLICATED => 1, }, - "count.edit.faileddep" => { - DESC => "Count of edits which failed their dependency check", + 'count.edit.faileddep' => { + DESC => 'Count of edits which failed their dependency check', PREREQ => [qw[ count.edit.open ]], PREREQ_ONLY => 1, NONREPLICATED => 1, }, - "count.edit.error" => { - DESC => "Count of edits which failed because of an internal error", + 'count.edit.error' => { + DESC => 'Count of edits which failed because of an internal error', PREREQ => [qw[ count.edit.open ]], PREREQ_ONLY => 1, NONREPLICATED => 1, }, - "count.edit.failedprereq" => { - DESC => "Count of edits which failed because a prerequisitite moderation failed", + 'count.edit.failedprereq' => { + DESC => 'Count of edits which failed because a prerequisitite moderation failed', PREREQ => [qw[ count.edit.open ]], PREREQ_ONLY => 1, NONREPLICATED => 1, }, - "count.edit.evalnochange" => { - DESC => "Count of evalnochange edits", + 'count.edit.evalnochange' => { + DESC => 'Count of evalnochange edits', PREREQ => [qw[ count.edit.open ]], PREREQ_ONLY => 1, NONREPLICATED => 1, }, - "count.edit.deleted" => { - DESC => "Count of deleted edits", + 'count.edit.deleted' => { + DESC => 'Count of deleted edits', PREREQ => [qw[ count.edit.open ]], PREREQ_ONLY => 1, NONREPLICATED => 1, }, - "count.edit.perday" => { - DESC => "Count of edits per day", - SQL => "SELECT count(id) FROM edit + 'count.edit.perday' => { + DESC => 'Count of edits per day', + SQL => q{SELECT count(id) FROM edit WHERE open_time >= (now() - interval '1 day') - AND editor NOT IN (". $EDITOR_FREEDB .", ". $EDITOR_MODBOT .")", + AND editor NOT IN (}. $EDITOR_FREEDB .', '. $EDITOR_MODBOT .')', NONREPLICATED => 1, }, - "count.edit.perweek" => { - DESC => "Count of edits per week", - SQL => "SELECT count(id) FROM edit + 'count.edit.perweek' => { + DESC => 'Count of edits per week', + SQL => q{SELECT count(id) FROM edit WHERE open_time >= (now() - interval '7 days') - AND editor NOT IN (". $EDITOR_FREEDB .", ". $EDITOR_MODBOT .")", + AND editor NOT IN (}. $EDITOR_FREEDB .', '. $EDITOR_MODBOT .')', NONREPLICATED => 1, }, - "count.edit.type" => { - DESC => "Count of edits by type", + 'count.edit.type' => { + DESC => 'Count of edits by type', CALC => sub { my ($self, $sql) = @_; my $data = $sql->select_list_of_lists( - "SELECT type, count(id) AS count - FROM edit GROUP BY type", + 'SELECT type, count(id) AS count + FROM edit GROUP BY type', ); my %dist = map { @$_ } @$data; +{ map { - "count.edit.type.".$_ => $dist{$_} + 'count.edit.type.'.$_ => $dist{$_} } keys %dist }; } }, - "count.cdstub" => { - DESC => "Count of all existing CD Stubs", - SQL => "SELECT COUNT(*) FROM release_raw", + 'count.cdstub' => { + DESC => 'Count of all existing CD Stubs', + SQL => 'SELECT COUNT(*) FROM release_raw', NONREPLICATED => 1, }, - "count.cdstub.submitted" => { - DESC => "Count of all submitted CD Stubs", - SQL => "SELECT MAX(id) FROM release_raw", + 'count.cdstub.submitted' => { + DESC => 'Count of all submitted CD Stubs', + SQL => 'SELECT MAX(id) FROM release_raw', NONREPLICATED => 1, }, - "count.cdstub.track" => { - DESC => "Count of all CD Stub tracks", - SQL => "SELECT COUNT(*) FROM track_raw", + 'count.cdstub.track' => { + DESC => 'Count of all CD Stub tracks', + SQL => 'SELECT COUNT(*) FROM track_raw', NONREPLICATED => 1, }, - "count.artist.country" => { - DESC => "Distribution of artists per country", + 'count.artist.country' => { + DESC => 'Distribution of artists per country', CALC => sub { my ($self, $sql) = @_; @@ -1391,101 +1378,101 @@ my %stats = ( +{ map { - "count.artist.country.".$_ => $dist{$_} + 'count.artist.country.'.$_ => $dist{$_} } keys %dist }; }, }, - "count.vote.yes" => { - DESC => "Count of 'yes' votes", + 'count.vote.yes' => { + DESC => q(Count of 'yes' votes), CALC => sub { my ($self, $sql) = @_; my $data = $sql->select_list_of_lists( - "SELECT vote, COUNT(*) FROM vote GROUP BY vote", + 'SELECT vote, COUNT(*) FROM vote GROUP BY vote', ); my %dist = map { @$_ } @$data; +{ - "count.vote.yes" => $dist{$VOTE_YES} || 0, - "count.vote.no" => $dist{$VOTE_NO} || 0, - "count.vote.abstain" => $dist{$VOTE_ABSTAIN} || 0, - "count.vote.approve" => $dist{$VOTE_APPROVE} || 0, + 'count.vote.yes' => $dist{$VOTE_YES} || 0, + 'count.vote.no' => $dist{$VOTE_NO} || 0, + 'count.vote.abstain' => $dist{$VOTE_ABSTAIN} || 0, + 'count.vote.approve' => $dist{$VOTE_APPROVE} || 0, }; }, NONREPLICATED => 1, }, - "count.vote.no" => { - DESC => "Count of 'no' votes", + 'count.vote.no' => { + DESC => q(Count of 'no' votes), PREREQ => [qw[ count.vote.yes ]], PREREQ_ONLY => 1, NONREPLICATED => 1, }, - "count.vote.abstain" => { - DESC => "Count of 'abstain' votes", + 'count.vote.abstain' => { + DESC => q(Count of 'abstain' votes), PREREQ => [qw[ count.vote.yes ]], PREREQ_ONLY => 1, NONREPLICATED => 1, }, - "count.vote.approve" => { - DESC => "Count of auto-editor approvals", + 'count.vote.approve' => { + DESC => 'Count of auto-editor approvals', PREREQ => [qw[ count.vote.yes ]], PREREQ_ONLY => 1, NONREPLICATED => 1, }, - "count.vote.perday" => { - DESC => "Count of votes per day", - SQL => "SELECT count(id) FROM vote + 'count.vote.perday' => { + DESC => 'Count of votes per day', + SQL => q{SELECT count(id) FROM vote WHERE vote_time >= (now() - interval '1 day') - AND vote <> ". $VOTE_ABSTAIN, + AND vote <> } . $VOTE_ABSTAIN, NONREPLICATED => 1, }, - "count.vote.perweek" => { - DESC => "Count of votes per week", - SQL => "SELECT count(id) FROM vote + 'count.vote.perweek' => { + DESC => 'Count of votes per week', + SQL => q{SELECT count(id) FROM vote WHERE vote_time >= (now() - interval '7 days') - AND vote <> ". $VOTE_ABSTAIN, + AND vote <> } . $VOTE_ABSTAIN, NONREPLICATED => 1, }, # count active moderators in last week(?) # editing / voting / overall - "count.editor.editlastweek" => { - DESC => "Count of editors who have submitted edits during the last week", + 'count.editor.editlastweek' => { + DESC => 'Count of editors who have submitted edits during the last week', CALC => sub { my ($self, $sql) = @_; my $threshold_id = $sql->select_single_value( - "SELECT MAX(id) FROM edit - WHERE open_time <= (now() - interval '7 days')", + q{SELECT MAX(id) FROM edit + WHERE open_time <= (now() - interval '7 days')}, ); # Active voters my $voters = $sql->select_single_value( - "SELECT COUNT(DISTINCT editor) + 'SELECT COUNT(DISTINCT editor) FROM vote WHERE edit > ? - AND editor != ?", + AND editor != ?', $threshold_id, $EDITOR_FREEDB, ); # Editors my $editors = $sql->select_single_value( - "SELECT COUNT(DISTINCT editor) + 'SELECT COUNT(DISTINCT editor) FROM edit WHERE id > ? - AND editor != ?", + AND editor != ?', $threshold_id, $EDITOR_FREEDB, ); # Either my $both = $sql->select_single_value( - "SELECT COUNT(DISTINCT m) FROM ( + 'SELECT COUNT(DISTINCT m) FROM ( SELECT editor AS m FROM edit WHERE id > ? @@ -1493,28 +1480,28 @@ my %stats = ( SELECT editor AS m FROM vote WHERE edit > ? - ) t WHERE m != ?", + ) t WHERE m != ?', $threshold_id, $threshold_id, $EDITOR_FREEDB, ); +{ - "count.editor.editlastweek" => $editors, - "count.editor.votelastweek" => $voters, - "count.editor.activelastweek"=> $both, + 'count.editor.editlastweek' => $editors, + 'count.editor.votelastweek' => $voters, + 'count.editor.activelastweek'=> $both, }; }, NONREPLICATED => 1, }, - "count.editor.votelastweek" => { - DESC => "Count of editors who have voted on edits during the last week", + 'count.editor.votelastweek' => { + DESC => 'Count of editors who have voted on edits during the last week', PREREQ => [qw[ count.editor.editlastweek ]], PREREQ_ONLY => 1, NONREPLICATED => 1, }, - "count.editor.activelastweek" => { - DESC => "Count of active editors (editing or voting) during the last week", + 'count.editor.activelastweek' => { + DESC => 'Count of active editors (editing or voting) during the last week', PREREQ => [qw[ count.editor.editlastweek ]], PREREQ_ONLY => 1, NONREPLICATED => 1, @@ -1527,9 +1514,9 @@ my %stats = ( # Top 10 voters all time # Tags - "count.tag" => { - DESC => "Count of all tags", - SQL => "SELECT COUNT(*) FROM tag", + 'count.tag' => { + DESC => 'Count of all tags', + SQL => 'SELECT COUNT(*) FROM tag', }, (map { @@ -1547,8 +1534,8 @@ my %stats = ( }) } entities_with(['tags'])), - "count.tag.raw" => { - DESC => "Count of all raw tags", + 'count.tag.raw' => { + DESC => 'Count of all raw tags', PREREQ => [ map { $_ =~ s/_//; "count.tag.raw.$_" } entities_with(['tags']) ], CALC => sub { my ($self, $sql) = @_; @@ -1565,153 +1552,155 @@ my %stats = ( }, # Ratings - "count.rating.artist" => { - DESC => "Count of artist ratings", + 'count.rating.artist' => { + DESC => 'Count of artist ratings', CALC => sub { my ($self, $sql) = @_; my $data = $sql->select_single_row_array( - "SELECT COUNT(*), SUM(rating_count) FROM artist_meta WHERE rating_count > 0", + 'SELECT COUNT(*), SUM(rating_count) FROM artist_meta WHERE rating_count > 0', ); +{ - "count.rating.artist" => $data->[0] || 0, - "count.rating.raw.artist" => $data->[1] || 0, + 'count.rating.artist' => $data->[0] || 0, + 'count.rating.raw.artist' => $data->[1] || 0, }; }, }, - "count.rating.raw.artist" => { - DESC => "Count of all artist raw ratings", + 'count.rating.raw.artist' => { + DESC => 'Count of all artist raw ratings', PREREQ => [qw[ count.rating.artist ]], PREREQ_ONLY => 1, }, - "count.rating.releasegroup" => { - DESC => "Count of release group ratings", + 'count.rating.releasegroup' => { + DESC => 'Count of release group ratings', CALC => sub { my ($self, $sql) = @_; my $data = $sql->select_single_row_array( - "SELECT COUNT(*), SUM(rating_count) FROM release_group_meta WHERE rating_count > 0", + 'SELECT COUNT(*), SUM(rating_count) FROM release_group_meta WHERE rating_count > 0', ); +{ - "count.rating.releasegroup" => $data->[0] || 0, - "count.rating.raw.releasegroup" => $data->[1] || 0, + 'count.rating.releasegroup' => $data->[0] || 0, + 'count.rating.raw.releasegroup' => $data->[1] || 0, }; }, }, - "count.rating.raw.releasegroup" => { - DESC => "Count of all release group raw ratings", + 'count.rating.raw.releasegroup' => { + DESC => 'Count of all release group raw ratings', PREREQ => [qw[ count.rating.releasegroup ]], PREREQ_ONLY => 1, }, - "count.rating.recording" => { - DESC => "Count of recording ratings", + 'count.rating.recording' => { + DESC => 'Count of recording ratings', CALC => sub { my ($self, $sql) = @_; my $data = $sql->select_single_row_array( - "SELECT COUNT(*), SUM(rating_count) FROM recording_meta WHERE rating_count > 0", + 'SELECT COUNT(*), SUM(rating_count) FROM recording_meta WHERE rating_count > 0', ); +{ - "count.rating.recording" => $data->[0] || 0, - "count.rating.raw.recording" => $data->[1] || 0, + 'count.rating.recording' => $data->[0] || 0, + 'count.rating.raw.recording' => $data->[1] || 0, }; }, }, - "count.rating.raw.recording" => { - DESC => "Count of all recording raw ratings", + 'count.rating.raw.recording' => { + DESC => 'Count of all recording raw ratings', PREREQ => [qw[ count.rating.recording ]], PREREQ_ONLY => 1, }, - "count.rating.label" => { - DESC => "Count of label ratings", + 'count.rating.label' => { + DESC => 'Count of label ratings', CALC => sub { my ($self, $sql) = @_; my $data = $sql->select_single_row_array( - "SELECT COUNT(*), SUM(rating_count) FROM label_meta WHERE rating_count > 0", + 'SELECT COUNT(*), SUM(rating_count) FROM label_meta WHERE rating_count > 0', ); +{ - "count.rating.label" => $data->[0] || 0, - "count.rating.raw.label" => $data->[1] || 0, + 'count.rating.label' => $data->[0] || 0, + 'count.rating.raw.label' => $data->[1] || 0, }; }, }, - "count.rating.raw.label" => { - DESC => "Count of all label raw ratings", + 'count.rating.raw.label' => { + DESC => 'Count of all label raw ratings', PREREQ => [qw[ count.rating.label ]], PREREQ_ONLY => 1, }, - "count.rating.place" => { - DESC => "Count of place ratings", + 'count.rating.place' => { + DESC => 'Count of place ratings', CALC => sub { my ($self, $sql) = @_; my $data = $sql->select_single_row_array( - "SELECT COUNT(*), SUM(rating_count) FROM place_meta WHERE rating_count > 0", + 'SELECT COUNT(*), SUM(rating_count) FROM place_meta WHERE rating_count > 0', ); +{ - "count.rating.place" => $data->[0] || 0, - "count.rating.raw.place" => $data->[1] || 0, + 'count.rating.place' => $data->[0] || 0, + 'count.rating.raw.place' => $data->[1] || 0, }; }, }, - "count.rating.raw.place" => { - DESC => "Count of all place raw ratings", + 'count.rating.raw.place' => { + DESC => 'Count of all place raw ratings', PREREQ => [qw[ count.rating.place ]], PREREQ_ONLY => 1, }, - "count.rating.work" => { - DESC => "Count of work ratings", + 'count.rating.work' => { + DESC => 'Count of work ratings', CALC => sub { my ($self, $sql) = @_; my $data = $sql->select_single_row_array( - "SELECT COUNT(*), SUM(rating_count) FROM work_meta WHERE rating_count > 0", + 'SELECT COUNT(*), SUM(rating_count) FROM work_meta WHERE rating_count > 0', ); +{ - "count.rating.work" => $data->[0] || 0, - "count.rating.raw.work" => $data->[1] || 0, + 'count.rating.work' => $data->[0] || 0, + 'count.rating.raw.work' => $data->[1] || 0, }; }, }, - "count.rating.raw.work" => { - DESC => "Count of all work raw ratings", + 'count.rating.raw.work' => { + DESC => 'Count of all work raw ratings', PREREQ => [qw[ count.rating.work ]], PREREQ_ONLY => 1, }, - "count.rating" => { - DESC => "Count of all ratings", - PREREQ => [qw[ count.rating.artist count.rating.label count.rating.releasegroup count.rating.recording count.rating.work ]], + 'count.rating' => { + DESC => 'Count of all ratings', + PREREQ => [qw[ count.rating.artist count.rating.label count.rating.place count.rating.releasegroup count.rating.recording count.rating.work ]], CALC => sub { my ($self, $sql) = @_; return $self->fetch('count.rating.artist') + $self->fetch('count.rating.label') + + $self->fetch('count.rating.place') + $self->fetch('count.rating.releasegroup') + $self->fetch('count.rating.work') + $self->fetch('count.rating.recording'); }, }, - "count.rating.raw" => { - DESC => "Count of all raw ratings", - PREREQ => [qw[ count.rating.raw.artist count.rating.raw.label count.rating.raw.releasegroup count.rating.raw.recording count.rating.raw.work ]], + 'count.rating.raw' => { + DESC => 'Count of all raw ratings', + PREREQ => [qw[ count.rating.raw.artist count.rating.raw.label count.rating.raw.place count.rating.raw.releasegroup count.rating.raw.recording count.rating.raw.work ]], CALC => sub { my ($self, $sql) = @_; return $self->fetch('count.rating.raw.artist') + $self->fetch('count.rating.raw.label') + + $self->fetch('count.rating.raw.place') + $self->fetch('count.rating.raw.releasegroup') + $self->fetch('count.rating.raw.work') + $self->fetch('count.rating.raw.recording'); }, }, - "count.release.Ndiscids" => { - DESC => "Distribution of disc IDs per release (varying disc IDs)", + 'count.release.Ndiscids' => { + DESC => 'Distribution of disc IDs per release (varying disc IDs)', PREREQ => [qw[ count.release count.release.has_discid ]], CALC => sub { my ($self, $sql) = @_; @@ -1719,15 +1708,14 @@ my %stats = ( my $max_dist_tail = 10; my $data = $sql->select_list_of_lists( - "SELECT c, COUNT(*) AS freq + 'SELECT c, COUNT(*) AS freq FROM ( SELECT medium.release, COUNT(*) AS c FROM medium_cdtoc JOIN medium ON medium_cdtoc.medium = medium.id GROUP BY medium.release ) AS t - GROUP BY c - ", + GROUP BY c', ); my %dist = map { $_ => 0 } 1 .. $max_dist_tail; @@ -1740,19 +1728,19 @@ my %stats = ( $dist{$max_dist_tail} += $_->[1]; } - $dist{0} = $self->fetch("count.release") - - $self->fetch("count.release.has_discid"); + $dist{0} = $self->fetch('count.release') + - $self->fetch('count.release.has_discid'); +{ map { - "count.release.".$_."discids" => $dist{$_} + 'count.release.'.$_.'discids' => $dist{$_} } keys %dist }; }, }, - "count.medium.Ndiscids" => { - DESC => "Distribution of disc IDs per medium (varying disc IDs)", + 'count.medium.Ndiscids' => { + DESC => 'Distribution of disc IDs per medium (varying disc IDs)', PREREQ => [qw[ count.medium count.medium.has_discid ]], CALC => sub { my ($self, $sql) = @_; @@ -1760,14 +1748,13 @@ my %stats = ( my $max_dist_tail = 10; my $data = $sql->select_list_of_lists( - "SELECT c, COUNT(*) AS freq + 'SELECT c, COUNT(*) AS freq FROM ( SELECT medium, COUNT(*) AS c FROM medium_cdtoc GROUP BY medium ) AS t - GROUP BY c - ", + GROUP BY c', ); my %dist = map { $_ => 0 } 1 .. $max_dist_tail; @@ -1780,66 +1767,67 @@ my %stats = ( $dist{$max_dist_tail} += $_->[1]; } - $dist{0} = $self->fetch("count.medium") - - $self->fetch("count.medium.has_discid"); + $dist{0} = $self->fetch('count.medium') + - $self->fetch('count.medium.has_discid'); +{ map { - "count.medium.".$_."discids" => $dist{$_} + 'count.medium.'.$_.'discids' => $dist{$_} } keys %dist }; }, }, - "count.quality.release.high" => { - DESC => "Count of high quality releases", + 'count.quality.release.high' => { + DESC => 'Count of high quality releases', CALC => sub { my ($self, $sql) = @_; my $data = $sql->select_list_of_lists( - "SELECT quality, COUNT(*) FROM release GROUP BY quality", + 'SELECT quality, COUNT(*) FROM release GROUP BY quality', ); + my %dist = map { @$_ } @$data; +{ - "count.quality.release.high" => $dist{$QUALITY_HIGH} || 0, - "count.quality.release.low" => $dist{$QUALITY_LOW} || 0, - "count.quality.release.normal" => $dist{$QUALITY_NORMAL} || 0, - "count.quality.release.unknown" => $dist{$QUALITY_UNKNOWN} || 0, - "count.quality.release.default" => ($dist{$QUALITY_UNKNOWN} || 0) + ($dist{$QUALITY_NORMAL} || 0), + 'count.quality.release.high' => $dist{$QUALITY_HIGH} || 0, + 'count.quality.release.low' => $dist{$QUALITY_LOW} || 0, + 'count.quality.release.normal' => $dist{$QUALITY_NORMAL} || 0, + 'count.quality.release.unknown' => $dist{$QUALITY_UNKNOWN} || 0, + 'count.quality.release.default' => ($dist{$QUALITY_UNKNOWN} || 0) + ($dist{$QUALITY_NORMAL} || 0), }; }, }, - "count.quality.release.low" => { - DESC => "Count of low quality releases", + 'count.quality.release.low' => { + DESC => 'Count of low quality releases', PREREQ => [qw[ count.quality.release.high ]], PREREQ_ONLY => 1, }, - "count.quality.release.normal" => { - DESC => "Count of normal quality releases", + 'count.quality.release.normal' => { + DESC => 'Count of normal quality releases', PREREQ => [qw[ count.quality.release.high ]], PREREQ_ONLY => 1, }, - "count.quality.release.unknown" => { - DESC => "Count of unknow quality releases", + 'count.quality.release.unknown' => { + DESC => 'Count of unknow quality releases', PREREQ => [qw[ count.quality.release.high ]], PREREQ_ONLY => 1, }, - "count.quality.release.default" => { - DESC => "Count of default quality releases", + 'count.quality.release.default' => { + DESC => 'Count of default quality releases', PREREQ => [qw[ count.quality.release.high ]], PREREQ_ONLY => 1, }, - "count.recording.Nreleases" => { - DESC => "Distribution of appearances on releases per recording", + 'count.recording.Nreleases' => { + DESC => 'Distribution of appearances on releases per recording', CALC => sub { my ($self, $sql) = @_; my $max_dist_tail = 10; my $data = $sql->select_list_of_lists( - "SELECT c, COUNT(*) AS freq + 'SELECT c, COUNT(*) AS freq FROM ( SELECT r.id, count(distinct release.id) AS c FROM recording r @@ -1848,8 +1836,7 @@ my %stats = ( LEFT JOIN release ON m.release = release.id GROUP BY r.id ) AS t - GROUP BY c - ", + GROUP BY c', ); my %dist = map { $_ => 0 } 0 .. $max_dist_tail; @@ -1864,14 +1851,14 @@ my %stats = ( +{ map { - "count.recording.".$_."releases" => $dist{$_} + 'count.recording.'.$_.'releases' => $dist{$_} } keys %dist }; }, }, - "count.ar.links.table.type_name" => { - DESC => "Count of advanced relationship links by type, inclusive of child counts and exclusive", + 'count.ar.links.table.type_name' => { + DESC => 'Count of advanced relationship links by type, inclusive of child counts and exclusive', CALC => sub { my ($self, $sql) = @_; my %dist; @@ -1886,6 +1873,7 @@ my %stats = ( AS lt ON link.link_type = lt.id GROUP BY lt.name, lt.id, lt.parent", @$t ); + for (@$data) { $dist{ $table . '.' . $_->{name} } = $_->{count}; $dist{ $table . '.' . $_->{name} . '.inclusive' } = $_->{count}; @@ -1907,14 +1895,14 @@ my %stats = ( +{ map { - "count.ar.links.".$_ => $dist{$_} + 'count.ar.links.'.$_ => $dist{$_} } keys %dist }; } }, - "count.ar.links" => { - DESC => "Count of all advanced relationships links", + 'count.ar.links' => { + DESC => 'Count of all advanced relationships links', CALC => sub { my ($self, $sql) = @_; my %r; @@ -1922,8 +1910,7 @@ my %stats = ( for my $t ($self->c->model('Relationship')->all_pairs) { my $table = join('_', 'l', @$t); - my $n = $sql->select_single_value( - "SELECT count(*) FROM $table"); + my $n = $sql->select_single_value("SELECT count(*) FROM $table"); $r{"count.ar.links.$table"} = $n; $r{'count.ar.links'} += $n; } @@ -1941,7 +1928,70 @@ my %stats = ( PREREQ_ONLY => 1 } } MusicBrainz::Server::Data::Relationship->all_pairs - ) + ), + + 'count.collection' => { + DESC => 'Count of all collections', + SQL => 'SELECT COUNT(*) FROM editor_collection', + }, + + 'count.collection.type.release' => { + CALC => sub { + my ($self, $sql) = @_; + + my $data = $sql->select_list_of_lists(<<~'SQL'); + SELECT type, COUNT(*) AS count + FROM editor_collection + GROUP BY type + SQL + + my %dist = map { @$_ } @$data; + + +{ + 'count.collection.type.release' => $dist{1} || 0, + 'count.collection.type.owned' => $dist{2} || 0, + 'count.collection.type.wishlist' => $dist{3} || 0, + 'count.collection.type.release.all' => ($dist{1} || 0) + ($dist{2} || 0) + ($dist{3} || 0), + 'count.collection.type.event' => $dist{4} || 0, + 'count.collection.type.attending' => $dist{5} || 0, + 'count.collection.type.maybe_attending' => $dist{6} || 0, + 'count.collection.type.event.all' => ($dist{4} || 0) + ($dist{5} || 0) + ($dist{6} || 0), + 'count.collection.type.area' => $dist{7} || 0, + 'count.collection.type.artist' => $dist{8} || 0, + 'count.collection.type.instrument' => $dist{9} || 0, + 'count.collection.type.label' => $dist{10} || 0, + 'count.collection.type.place' => $dist{11} || 0, + 'count.collection.type.recording' => $dist{12} || 0, + 'count.collection.type.release_group' => $dist{13} || 0, + 'count.collection.type.series' => $dist{14} || 0, + 'count.collection.type.work' => $dist{15} || 0, + }; + }, + }, + + 'count.collection.public' => { + CALC => sub { + my ($self, $sql) = @_; + + my $data = $sql->select_list_of_lists(<<~'SQL'); + SELECT public, COUNT(*) AS count + FROM editor_collection + GROUP BY public + SQL + + my %dist = map { @$_ } @$data; + + +{ + 'count.collection.public' => $dist{1} || 0, + 'count.collection.private' => $dist{0} || 0, + }; + }, + }, + + 'count.collection.has_collaborators' => { + DESC => 'Count of collections with at least one collaborator', + SQL => 'SELECT COUNT(DISTINCT collection) FROM editor_collection_collaborator', + }, ); sub recalculate { @@ -1966,7 +2016,7 @@ sub recalculate { if (my $calculate = $definition->{CALC}) { my $output = $calculate->($self, $sql); - if (ref($output) eq "HASH") + if (ref($output) eq 'HASH') { $self->insert($output_file, %$output); } else { @@ -1990,7 +2040,7 @@ sub recalculate_all if (%unsatisfiable_prereqs) { printf "Statistics cannot be computed due to missing dependencies\n"; - printf "$_ depends on " . join(", ", @{$unsatisfiable_prereqs{$_}}) . ", but these dependencies do not exist\n" + printf "$_ depends on " . join(', ', @{$unsatisfiable_prereqs{$_}}) . ", but these dependencies do not exist\n" for keys %unsatisfiable_prereqs; exit(1); } @@ -2017,7 +2067,7 @@ sub recalculate_all next if $count; - my $s = join ", ", keys %notdone; + my $s = join ', ', keys %notdone; die "Failed to solve stats dependencies: circular dependency? ($s)"; } } diff --git a/lib/MusicBrainz/Server/Data/Statistics/ByDate.pm b/lib/MusicBrainz/Server/Data/Statistics/ByDate.pm index d4ea6e0569c..e4f6a750ffa 100644 --- a/lib/MusicBrainz/Server/Data/Statistics/ByDate.pm +++ b/lib/MusicBrainz/Server/Data/Statistics/ByDate.pm @@ -20,9 +20,9 @@ sub _entity_class sub get_latest_statistics { my $self = shift; - my $query = "SELECT " . $self->_columns . " - FROM " . $self->_table . " - WHERE date_collected = (SELECT MAX(date_collected) FROM ". $self->_table .")"; + my $query = 'SELECT ' . $self->_columns . ' + FROM ' . $self->_table . ' + WHERE date_collected = (SELECT MAX(date_collected) FROM '. $self->_table .')'; my @statistics = @{ $self->sql->select_list_of_hashes($query) } or return undef; diff --git a/lib/MusicBrainz/Server/Data/Statistics/ByName.pm b/lib/MusicBrainz/Server/Data/Statistics/ByName.pm index 597a1efa59b..15fd625c2e5 100644 --- a/lib/MusicBrainz/Server/Data/Statistics/ByName.pm +++ b/lib/MusicBrainz/Server/Data/Statistics/ByName.pm @@ -21,9 +21,9 @@ sub _entity_class sub get_statistic { my ($self, $statistic) = @_; - my $query = "SELECT " . $self->_columns . " - FROM " . $self->_table . " - WHERE name = ?"; + my $query = 'SELECT ' . $self->_columns . ' + FROM ' . $self->_table . ' + WHERE name = ?'; my @stats = @{ $self->sql->select_list_of_hashes($query, $statistic) }; my $stats = MusicBrainz::Server::Entity::Statistics::ByName->new( diff --git a/lib/MusicBrainz/Server/Data/Subscription.pm b/lib/MusicBrainz/Server/Data/Subscription.pm index b0e9df147dc..63a60e94777 100644 --- a/lib/MusicBrainz/Server/Data/Subscription.pm +++ b/lib/MusicBrainz/Server/Data/Subscription.pm @@ -94,7 +94,7 @@ sub unsubscribe $self->sql->do(" DELETE FROM $table WHERE editor = ? AND $column IN (". - placeholders(@ids) . ")", + placeholders(@ids) . ')', $user_id, @ids); }, $self->c->sql); @@ -121,18 +121,18 @@ sub find_subscribed_editors my $table = $self->table; my $column = $self->column; - my $extra_cond = ""; + my $extra_cond = ''; - $extra_cond = " AND s.available" - if ($column eq "collection"); + $extra_cond = ' AND s.available' + if ($column eq 'collection'); my $editor_model = $self->c->model('Editor'); - my $query = " - SELECT " . $editor_model->_columns . " - FROM " . $editor_model->_table . " + my $query = ' + SELECT ' . $editor_model->_columns . ' + FROM ' . $editor_model->_table . " JOIN $table s ON editor.id = s.editor - WHERE s.$column = ?" . $extra_cond . " - ORDER BY editor.name, editor.id"; + WHERE s.$column = ?" . $extra_cond . ' + ORDER BY editor.name, editor.id'; $editor_model->query_to_list($query, [$entity_id]); } @@ -205,7 +205,7 @@ sub merge my $column = $self->column; $self->sql->do("UPDATE $table SET merged_by_edit = ? - WHERE $column IN (".placeholders(@ids).")", + WHERE $column IN (".placeholders(@ids).')', $edit_id, @ids); } diff --git a/lib/MusicBrainz/Server/Data/Track.pm b/lib/MusicBrainz/Server/Data/Track.pm index 98c8a1d575e..666fdcbf2f2 100644 --- a/lib/MusicBrainz/Server/Data/Track.pm +++ b/lib/MusicBrainz/Server/Data/Track.pm @@ -54,9 +54,9 @@ sub _medium_ids { my ($self, @track_ids) = @_; return $self->sql->select_single_column_array( - "SELECT distinct(medium) + 'SELECT distinct(medium) FROM track - WHERE id IN (" . placeholders(@track_ids) . ")", @track_ids); + WHERE id IN (' . placeholders(@track_ids) . ')', @track_ids); } sub load @@ -91,10 +91,10 @@ sub load_for_mediums my %id_to_medium = object_to_ids(@media); my @ids = keys %id_to_medium; return unless @ids; # nothing to do - my $query = "SELECT " . $self->_columns . " - FROM " . $self->_table . " - WHERE medium IN (" . placeholders(@ids) . ") - ORDER BY medium, position"; + my $query = 'SELECT ' . $self->_columns . ' + FROM ' . $self->_table . ' + WHERE medium IN (' . placeholders(@ids) . ') + ORDER BY medium, position'; my @tracks = $self->query_to_list($query, \@ids); foreach my $track (@tracks) { @@ -115,16 +115,16 @@ sub load_for_medium_paged my $table = $self->_table; my $offset = ($page - 1) * $MAX_INITIAL_TRACKS; - my $total_tracks = $self->sql->select_single_value(<<~'EOSQL', $medium_id); + my $total_tracks = $self->sql->select_single_value(<<~'SQL', $medium_id); SELECT count(*) FROM track WHERE medium = ? - EOSQL + SQL - my @tracks = $self->query_to_list(<<~"EOSQL", [$medium_id, $MAX_INITIAL_TRACKS, $offset]); + my @tracks = $self->query_to_list(<<~"SQL", [$medium_id, $MAX_INITIAL_TRACKS, $offset]); SELECT $columns FROM $table WHERE medium = ? ORDER BY position LIMIT ? OFFSET ? - EOSQL + SQL my $pager = Data::Page->new; $pager->entries_per_page($MAX_INITIAL_TRACKS); @@ -138,22 +138,22 @@ sub find_by_artist_credit { my ($self, $artist_credit_id, $limit, $offset) = @_; - my $query = "SELECT " . $self->_columns . ", + my $query = 'SELECT ' . $self->_columns . ', name COLLATE musicbrainz AS name_collate - FROM " . $self->_table . " + FROM ' . $self->_table . ' WHERE artist_credit = ? - ORDER BY name COLLATE musicbrainz"; + ORDER BY name COLLATE musicbrainz'; $self->query_to_list_limited($query, [$artist_credit_id], $limit, $offset); } sub find_by_recording { my ($self, $recording_id, $limit, $offset) = @_; - my $query = " + my $query = ' SELECT * FROM ( SELECT DISTINCT ON (track.id, medium.id) - " . $self->_columns . ", + ' . $self->_columns . ', medium.id AS m_id, medium.format AS m_format, medium.position AS m_position, medium.name AS m_name, medium.release AS m_release, @@ -179,7 +179,7 @@ sub find_by_recording WHERE track.recording = ? ORDER BY track.id, medium.id, date_year, date_month, date_day, release.name COLLATE musicbrainz ) s - ORDER BY date_year, date_month, date_day, r_name COLLATE musicbrainz"; + ORDER BY date_year, date_month, date_day, r_name COLLATE musicbrainz'; $self->query_to_list_limited( $query, diff --git a/lib/MusicBrainz/Server/Data/URL.pm b/lib/MusicBrainz/Server/Data/URL.pm index a57c84e1c80..26052966c25 100644 --- a/lib/MusicBrainz/Server/Data/URL.pm +++ b/lib/MusicBrainz/Server/Data/URL.pm @@ -161,10 +161,11 @@ my %URL_SPECIALIZATIONS = ( 'SpiritOfMetal' => qr{^https?://(?:www\.)?spirit-of-metal\.com/}i, 'SpiritOfRock' => qr{^https?://(?:www\.)?spirit-of-rock\.com/}i, 'Stage48' => qr{^https?://(?:www\.)?stage48\.net/}i, - 'Tipeee' => qr{^https?://(?:www\.)?tipeee\.com/}i, 'Theatricalia' => qr{^https?://(?:www\.)?theatricalia\.com/}i, 'TheDanceGypsy' => qr{^https?://(?:www\.)?thedancegypsy\.com/}i, 'TheSession' => qr{^https?://(?:www\.)?thesession\.org/}i, + 'Tidal' => qr{^https?://(?:[^/]+\.)?tidal\.com/}i, + 'Tipeee' => qr{^https?://(?:www\.)?tipeee\.com/}i, 'TouhouDB' => qr{^https?://(?:www\.)?touhoudb\.com/}i, 'Traxsource' => qr{^https?://(?:www\.)?traxsource.com/}i, 'TripleJUnearthed' => qr{^https?://(?:www\.)?triplejunearthed\.com/}i, @@ -179,7 +180,8 @@ my %URL_SPECIALIZATIONS = ( 'VGMdb' => qr{^https?://(?:www\.)?vgmdb\.net/}i, 'VIAF' => qr{^https?://(?:www\.)?viaf\.org/}i, 'Videogamin' => qr{^https?://(?:www\.)?videogam\.in/}i, - 'Vimeo' => qr{^https?://(?:www\.)?vimeo\.com/}i, + 'Vimeo' => qr{^https?://(?:www\.)?vimeo\.com/(?!ondemand)}i, + 'VimeoOnDemand' => qr{^https?://(?:www\.)?vimeo\.com/ondemand}i, 'VK' => qr{^https?://(?:www\.)?vk\.com/}i, 'Vkdb' => qr{^https?://(?:www\.)?vkdb\.jp/}i, 'VocaDB' => qr{^https?://(?:www\.)?vocadb\.net/}i, @@ -296,7 +298,7 @@ sub _hash_to_row }); } -sub insert { confess "Should not be used for URLs" } +sub insert { confess 'Should not be used for URLs' } sub find_or_insert { my ($self, $url) = @_; diff --git a/lib/MusicBrainz/Server/Data/Utils.pm b/lib/MusicBrainz/Server/Data/Utils.pm index 38aa2d10dae..644c12ad917 100644 --- a/lib/MusicBrainz/Server/Data/Utils.pm +++ b/lib/MusicBrainz/Server/Data/Utils.pm @@ -183,7 +183,7 @@ sub load_meta for my $row (@{ $c->sql->select_list_of_hashes( "SELECT * FROM $table - WHERE id IN (" . placeholders(@ids) . ")", + WHERE id IN (" . placeholders(@ids) . ')', @ids ) }) { @@ -214,7 +214,7 @@ sub coordinates_to_hash sub placeholders { - return join ",", ("?") x scalar(@_); + return join ',', ('?') x scalar(@_); } sub load_everything_for_edits @@ -228,7 +228,7 @@ sub load_everything_for_edits $c->model('Editor')->load(map { ($_, @{ $_->votes }, @{ $_->edit_notes }) } @$edits); } catch { use Data::Dumper; - croak "Failed loading edits (" . (join ', ', map { $_->id } @$edits) . ")\n" . + croak 'Failed loading edits (' . (join ', ', map { $_->id } @$edits) . ")\n" . "Exception:\n" . Dumper($_) . "\n"; }; } @@ -261,8 +261,8 @@ sub is_valid_token { sub get_area_containment_query { my ($link_type_param, $descendant_param, %args) = @_; - my $levels_condition = $args{check_all_levels} - ? '' + my $levels_condition = $args{check_all_levels} + ? '' : ' JOIN area a ON a.id = ad.parent WHERE a.type IN (1, 2, 3) '; return (" @@ -608,7 +608,7 @@ sub merge_table_attributes { } sub merge_string_attributes { - _merge_attributes(shift, _conditional_merge("!= ''", default => ''), @_); + _merge_attributes(shift, _conditional_merge(q(!= ''), default => ''), @_); } sub merge_boolean_attributes { @@ -621,8 +621,8 @@ sub merge_boolean_attributes { "$_ = ( SELECT bool_or($_) FROM $table - WHERE id IN (" . placeholders(@$all_ids) . ") - )"; + WHERE id IN (" . placeholders(@$all_ids) . ') + )'; } @$columns) . ' WHERE id = ?', (@$all_ids) x @$columns, $new_id) @@ -725,7 +725,7 @@ sub split_relationship_by_attributes { sub non_empty { my $value = shift; - return defined($value) && $value ne ""; + return defined($value) && $value ne ''; } sub boolean_to_json { diff --git a/lib/MusicBrainz/Server/Data/Utils/Uniqueness.pm b/lib/MusicBrainz/Server/Data/Utils/Uniqueness.pm index 0e404ed6591..76403053b04 100644 --- a/lib/MusicBrainz/Server/Data/Utils/Uniqueness.pm +++ b/lib/MusicBrainz/Server/Data/Utils/Uniqueness.pm @@ -34,10 +34,10 @@ sub assert_uniqueness_conserved { } my $query = - "SELECT " . $model->_columns . + 'SELECT ' . $model->_columns . ' FROM ' . $model->_table . " WHERE (name, comment) IN (SELECT $new_name, $new_comment)". - " AND " . $model->_id_column . " != ?"; + ' AND ' . $model->_id_column . ' != ?'; my ($conflict) = $model->query_to_list($query, [@params, $id]); diff --git a/lib/MusicBrainz/Server/Data/Vote.pm b/lib/MusicBrainz/Server/Data/Vote.pm index 76b6d1b26e7..4f47906f7e4 100644 --- a/lib/MusicBrainz/Server/Data/Vote.pm +++ b/lib/MusicBrainz/Server/Data/Vote.pm @@ -58,7 +58,7 @@ sub enter_votes @votes = grep { defined $edits->{ $_->{edit_id} } } @votes; if (any { $_->{vote} == $VOTE_APPROVE && !$edits->{ $_->{edit_id} }->editor_may_approve($editor) } @votes) { # not sufficient to filter the vote because the actual approval is happening elsewhere - confess "Unauthorized editor " . $editor->id . " tried to approve edit #" . $_->{edit_id}; + confess 'Unauthorized editor ' . $editor->id . ' tried to approve edit #' . $_->{edit_id}; } @votes = grep { $_->{vote} == $VOTE_APPROVE || $edits->{ $_->{edit_id} }->editor_may_vote($editor) @@ -97,7 +97,7 @@ sub enter_votes # Insert our new votes $query = 'INSERT INTO vote (editor, edit, vote) VALUES '; - $query .= join ", ", (('(?, ?, ?)') x @votes); + $query .= join ', ', (('(?, ?, ?)') x @votes); $query .= ' RETURNING edit, vote'; my $voted = $self->sql->select_list_of_hashes($query, map { $editor_id, $_->{edit_id}, $_->{vote} } @votes); my %edit_to_vote = map { $_->{edit} => $_->{vote} } @$voted; @@ -131,14 +131,14 @@ sub editor_statistics { my ($self, $editor) = @_; - my $base_query = "SELECT vote, count(vote) AS count " . - "FROM vote " . - "WHERE NOT superseded AND editor = ? "; + my $base_query = 'SELECT vote, count(vote) AS count ' . + 'FROM vote ' . + 'WHERE NOT superseded AND editor = ? '; - my $q_all_votes = $base_query . "GROUP BY vote"; + my $q_all_votes = $base_query . 'GROUP BY vote'; my $q_recent_votes = $base_query . - " AND vote_time > NOW() - INTERVAL '28 day' " . - " GROUP BY vote"; + q{ AND vote_time > NOW() - INTERVAL '28 day' } . + ' GROUP BY vote'; my $all_votes = map_query($self->c->sql, 'vote' => 'count', $q_all_votes, $editor->id); my $recent_votes = map_query($self->c->sql, 'vote' => 'count', $q_recent_votes, $editor->id); @@ -198,10 +198,10 @@ sub load_for_edits my %id_to_edit = map { $_->id => $_ } @edits; my @ids = keys %id_to_edit; return unless @ids; # nothing to do - my $query = "SELECT " . $self->_columns . " - FROM " . $self->_table . " - WHERE edit IN (" . placeholders(@ids) . ") - ORDER BY vote_time"; + my $query = 'SELECT ' . $self->_columns . ' + FROM ' . $self->_table . ' + WHERE edit IN (' . placeholders(@ids) . ') + ORDER BY vote_time'; my @votes = $self->query_to_list($query, \@ids, sub { my ($model, $row) = @_; diff --git a/lib/MusicBrainz/Server/Data/WatchArtist.pm b/lib/MusicBrainz/Server/Data/WatchArtist.pm index f77865650a1..ec6d867495b 100644 --- a/lib/MusicBrainz/Server/Data/WatchArtist.pm +++ b/lib/MusicBrainz/Server/Data/WatchArtist.pm @@ -39,9 +39,9 @@ sub find_watched_artists { sub watch_artist { my ($self, %params) = @_; my $artist_id = delete $params{artist_id} - or confess "Missing required parameter 'artist_id'"; + or confess q(Missing required parameter 'artist_id'); my $editor_id = delete $params{editor_id} - or confess "Missing required parameter 'editor_id'"; + or confess q(Missing required parameter 'editor_id'); try { $self->sql->auto_commit(1); @@ -64,9 +64,9 @@ sub watch_artist { sub stop_watching_artist { my ($self, %params) = @_; my $artist_ids = delete $params{artist_ids} - or confess "Missing required parameter 'artist_ids'"; + or confess q(Missing required parameter 'artist_ids'); my $editor_id = delete $params{editor_id} - or confess "Missing required parameter 'editor_id'"; + or confess q(Missing required parameter 'editor_id'); $self->sql->auto_commit(1); $self->sql->do( @@ -80,9 +80,9 @@ sub stop_watching_artist { sub is_watching { my ($self, %params) = @_; my $artist_id = delete $params{artist_id} - or confess "Missing required parameter 'artist_id'"; + or confess q(Missing required parameter 'artist_id'); my $editor_id = delete $params{editor_id} - or confess "Missing required parameter 'editor_id'"; + or confess q(Missing required parameter 'editor_id'); return $self->sql->select_single_value( 'SELECT 1 FROM editor_watch_artist @@ -97,7 +97,7 @@ sub find_new_releases { my $query = 'SELECT DISTINCT ' . $self->c->model('Release')->_columns . ' - FROM ' . $self->c->model('Release')->_table . " + FROM ' . $self->c->model('Release')->_table . q( JOIN release_group rg ON release_group = rg.id JOIN artist_credit_name acn ON acn.artist_credit = release.artist_credit @@ -113,7 +113,7 @@ sub find_new_releases { COALESCE(date_month, '01') || '-' || COALESCE(date_day, '01'), 'YYYY-MM-DD') BETWEEN (NOW() - ?::INTERVAL) AND - (NOW() + ewp.notification_timeframe)"; + (NOW() + ewp.notification_timeframe)); $self->c->model('Release')->query_to_list( $query, diff --git a/lib/MusicBrainz/Server/Data/WebService.pm b/lib/MusicBrainz/Server/Data/WebService.pm index 67e976ebe8c..6756998f601 100644 --- a/lib/MusicBrainz/Server/Data/WebService.pm +++ b/lib/MusicBrainz/Server/Data/WebService.pm @@ -25,7 +25,7 @@ sub xml_search { my ($self, $resource, $args) = @_; - my $query = ""; + my $query = ''; my $dur = 0; my $offset = 0; my $limit = 0; @@ -41,11 +41,11 @@ sub xml_search $limit = 25 if ($limit < 1 || $limit > 100); - if (defined $args->{query} && $args->{query} ne "") + if (defined $args->{query} && $args->{query} ne '') { if (ref($args->{query})) { return { - error => "Must specify at most 1 query argument", + error => 'Must specify at most 1 query argument', code => HTTP_BAD_REQUEST }; } @@ -77,16 +77,16 @@ sub xml_search } elsif ($resource eq 'release') { - $query = ""; + $query = ''; my $term = escape_query($args->{release}); $term =~ s/\s*(.*?)\s*$/$1/; if ($args->{release}) { - $query = "(" . join(" AND ", split /\s+/, $term) . ")"; + $query = '(' . join(' AND ', split /\s+/, $term) . ')'; } if ($args->{artistid}) { - $query .= " AND arid:" . escape_query($args->{artistid}); + $query .= ' AND arid:' . escape_query($args->{artistid}); } else { @@ -94,54 +94,54 @@ sub xml_search $term =~ s/\s*(.*?)\s*$/$1/; if (not $term =~ /^\s*$/) { - $query .= " AND artist:(" . join(" AND ", split /\s+/, $term) . ")"; + $query .= ' AND artist:(' . join(' AND ', split /\s+/, $term) . ')'; } } if (defined $args->{releasetype} && $args->{releasetype} =~ /^\d+$/) { - $query .= " AND type:" . $args->{releasetype} . "^0.0001"; + $query .= ' AND type:' . $args->{releasetype} . '^0.0001'; } if (defined $args->{releasestatus} && $args->{releasestatus} =~ /^\d+$/) { - $query .= " AND status:" . ($args->{releasestatus} - MusicBrainz::Server::Release::RELEASE_ATTR_SECTION_STATUS_START + 1) . "^0.0001"; + $query .= ' AND status:' . ($args->{releasestatus} - MusicBrainz::Server::Release::RELEASE_ATTR_SECTION_STATUS_START + 1) . '^0.0001'; } if (is_positive_integer($args->{count})) { - $query .= " AND tracks:" . $args->{count}; + $query .= ' AND tracks:' . $args->{count}; } if (is_positive_integer($args->{discids})) { - $query .= " AND discids:" . $args->{discids}; + $query .= ' AND discids:' . $args->{discids}; } if ($args->{date}) { - $query .= " AND date:" . $args->{date}; + $query .= ' AND date:' . $args->{date}; } if ($args->{asin}) { - $query .= " AND asin:" . $args->{asin}; + $query .= ' AND asin:' . $args->{asin}; } if ($args->{lang}) { - $query .= " AND lang:" . $args->{lang}; + $query .= ' AND lang:' . $args->{lang}; } if ($args->{script}) { - $query .= " AND script:" . $args->{script}; + $query .= ' AND script:' . $args->{script}; } } elsif ($resource eq 'recording') { - $query = ""; + $query = ''; my $term = escape_query($args->{track}); $term =~ s/\s*(.*?)\s*$/$1/; if ($args->{track}) { - $query = "(" . join(" AND ", split /\s+/, $term) . ")"; + $query = '(' . join(' AND ', split /\s+/, $term) . ')'; } if ($args->{artistid}) { - $query .= " AND arid:" . escape_query($args->{artistid}); + $query .= ' AND arid:' . escape_query($args->{artistid}); } else { @@ -149,12 +149,12 @@ sub xml_search $term =~ s/\s*(.*?)\s*$/$1/; if (not $term =~ /^\s*$/) { - $query .= " AND artist:(" . join(" AND ", split /\s+/, $term) . ")"; + $query .= ' AND artist:(' . join(' AND ', split /\s+/, $term) . ')'; } } if ($args->{releaseid}) { - $query .= " AND reid:" . escape_query($args->{releaseid}); + $query .= ' AND reid:' . escape_query($args->{releaseid}); } else { @@ -162,25 +162,25 @@ sub xml_search $term =~ s/\s*(.*?)\s*$/$1/; if (not $term =~ /^\s*$/) { - $query .= " AND release:(" . join(" AND ", split /\s+/, $term) . ")"; + $query .= ' AND release:(' . join(' AND ', split /\s+/, $term) . ')'; } } if ($args->{duration}) { my $qdur = int($args->{duration} / 2000); - $query .= " AND (qdur:$qdur OR qdur:" . ($qdur - 1) . " OR qdur:" . ($qdur + 1) . ")" if ($qdur); + $query .= " AND (qdur:$qdur OR qdur:" . ($qdur - 1) . ' OR qdur:' . ($qdur + 1) . ')' if ($qdur); } if (is_non_negative_integer($args->{tracknumber})) { - $query .= " AND tnum:" . $args->{tracknumber}; + $query .= ' AND tnum:' . $args->{tracknumber}; } if ($args->{releasetype}) { - $query .= " AND type:" . $args->{releasetype}; + $query .= ' AND type:' . $args->{releasetype}; } if (is_positive_integer($args->{count})) { - $query .= " AND tracks:" . $args->{count}; + $query .= ' AND tracks:' . $args->{count}; } } elsif ($resource eq 'work') @@ -205,34 +205,34 @@ sub xml_search if ($query =~ /^(?:\s*|"\s*")$/) { return { - error => "You submitted a blank search query. You must include a non-blank 'query=' parameter with your search.", + error => q(You submitted a blank search query. You must include a non-blank 'query=' parameter with your search.), code => HTTP_BAD_REQUEST }; } my $url_ext; if (DBDefs->SEARCH_ENGINE eq 'LUCENE' || DBDefs->SEARCH_SERVER eq DBDefs::Default->SEARCH_SERVER) { - my $format = ($args->{fmt} // "") eq "json" ? "jsonnew" : "xml"; + my $format = ($args->{fmt} // '') eq 'json' ? 'jsonnew' : 'xml'; $url_ext = "/ws/2/$resource/?" . "max=$limit&type=$resource&fmt=$format&offset=$offset" . - "&query=" . uri_escape_utf8($query) . "&dismax=$dismax"; + '&query=' . uri_escape_utf8($query) . "&dismax=$dismax"; } else { - my $format = ($args->{fmt} // "") eq "json" ? "mbjson" : "mbxml"; - my $endpoint = "advanced"; + my $format = ($args->{fmt} // '') eq 'json' ? 'mbjson' : 'mbxml'; + my $endpoint = 'advanced'; if ($dismax eq 'true') { # Solr has a bug where the dismax end point behaves differently # from edismax (advanced) when the query size is 1. This is a fix # for that. See https://issues.apache.org/jira/browse/SOLR-12409 if (split(/[\P{Word}_]+/, $query, 2) == 1) { - $endpoint = "basic"; + $endpoint = 'basic'; } else { - $endpoint = "select"; + $endpoint = 'select'; } } $url_ext = "/$resource/$endpoint?" . "rows=$limit&wt=$format&start=$offset" . - "&q=" . uri_escape_utf8($query); + '&q=' . uri_escape_utf8($query); } if (DBDefs->SEARCH_X_ACCEL_REDIRECT) { @@ -249,7 +249,7 @@ sub xml_search if ($response->code == HTTP_BAD_REQUEST) { return { - error => "Search server could not complete query: Bad request", + error => 'Search server could not complete query: Bad request', code => HTTP_BAD_REQUEST } } diff --git a/lib/MusicBrainz/Server/Data/WikiDoc.pm b/lib/MusicBrainz/Server/Data/WikiDoc.pm index 0a1a1ca0d3d..fe131b5fdad 100644 --- a/lib/MusicBrainz/Server/Data/WikiDoc.pm +++ b/lib/MusicBrainz/Server/Data/WikiDoc.pm @@ -21,7 +21,7 @@ sub _fix_html_links my $wiki_server = DBDefs->WIKITRANS_SERVER; - my $class = $node->attr('class') || ""; + my $class = $node->attr('class') || ''; # Remove the title attribute from all links $node->attr('title', undef); @@ -29,7 +29,7 @@ sub _fix_html_links # if this is not a link to _our_ wikidocs server, don't mess with it. return if ($class =~ m/external/ || $class =~ m/extiw/); - my $href = $node->attr('href') || ""; + my $href = $node->attr('href') || ''; # Remove broken links & links to images in the wiki if ($href =~ m,^(?:https?:)?//$wiki_server/(File|Image):, || $class =~ m/new/) @@ -55,7 +55,7 @@ sub _fix_html_markup my $wiki_server = DBDefs->WIKITRANS_SERVER; my $tree = HTML::TreeBuilder::XPath->new; - $tree->parse_content("<html><body>".$content."</body></html>"); + $tree->parse_content('<html><body>'.$content.'</body></html>'); for my $node ($tree->findnodes( '//span[contains(@class, "editsection")]')->get_nodelist) { @@ -69,16 +69,16 @@ sub _fix_html_markup for my $node ($tree->findnodes('//img')->get_nodelist) { - my $src = $node->attr('src') || ""; + my $src = $node->attr('src') || ''; $node->attr('src', $src) if ($src =~ s,$WIKI_IMAGE_PREFIX,//$wiki_server$WIKI_IMAGE_PREFIX,); # Also re-write srcset values - my $srcset = $node->attr('srcset') || ""; + my $srcset = $node->attr('srcset') || ''; $node->attr('srcset', $srcset) if ($srcset =~ s,$WIKI_IMAGE_PREFIX,//$wiki_server$WIKI_IMAGE_PREFIX,g); } for my $node ($tree->findnodes('//table')->get_nodelist) { - my $class = $node->attr('class') || ""; + my $class = $node->attr('class') || ''; # Special cases where we don't want this class added next if ($class =~ /(\btoc\b|\btbl\b)/); @@ -119,10 +119,10 @@ sub _load_page { my ($self, $id, $version, $index) = @_; - return MusicBrainz::Server::Entity::WikiDocPage->new({ canonical => "MusicBrainz_Documentation" }) - if ($id eq ""); + return MusicBrainz::Server::Entity::WikiDocPage->new({ canonical => 'MusicBrainz_Documentation' }) + if ($id eq ''); - my $doc_url = sprintf "http://%s/%s?action=render&redirect=no", DBDefs->WIKITRANS_SERVER, uri_escape($id); + my $doc_url = sprintf 'http://%s/%s?action=render&redirect=no', DBDefs->WIKITRANS_SERVER, uri_escape($id); if (defined $version) { $doc_url .= "&oldid=$version"; } @@ -132,13 +132,13 @@ sub _load_page return undef unless $response; if (!$response->is_success) { - if ($response->is_redirect && $response->header("Location") =~ /https?:\/\/(.*?)\/(.*)$/) { + if ($response->is_redirect && $response->header('Location') =~ /https?:\/\/(.*?)\/(.*)$/) { return $self->get_page(uri_unescape($2)); } return undef; } - my $content = decode "utf-8", $response->content; + my $content = decode 'utf-8', $response->content; if ($content =~ /<title>Error/s) { return undef; } diff --git a/lib/MusicBrainz/Server/Data/WikiDocIndex.pm b/lib/MusicBrainz/Server/Data/WikiDocIndex.pm index 453303d3a77..eeca1716a62 100644 --- a/lib/MusicBrainz/Server/Data/WikiDocIndex.pm +++ b/lib/MusicBrainz/Server/Data/WikiDocIndex.pm @@ -13,8 +13,8 @@ use MusicBrainz::Server::Replication ':replication_type'; with 'MusicBrainz::Server::Data::Role::Sql'; -Readonly my $CACHE_PREFIX => "wikidoc"; -Readonly my $CACHE_KEY => "wikidoc-index"; +Readonly my $CACHE_PREFIX => 'wikidoc'; +Readonly my $CACHE_KEY => 'wikidoc-index'; sub _load_index_from_db { my $self = shift; @@ -61,14 +61,14 @@ sub set_page_version my $index = $self->_load_index; if (defined $version) { my $query = - qq{INSERT INTO wikidocs.wikidocs_index (revision, page_name) - VALUES (?, ?) - ON CONFLICT (page_name) DO UPDATE - SET revision = EXCLUDED.revision}; + 'INSERT INTO wikidocs.wikidocs_index (revision, page_name) + VALUES (?, ?) + ON CONFLICT (page_name) DO UPDATE + SET revision = EXCLUDED.revision'; $self->sql->do($query, $version, $page); } else { - my $query = "DELETE FROM wikidocs.wikidocs_index WHERE page_name = ?"; + my $query = 'DELETE FROM wikidocs.wikidocs_index WHERE page_name = ?'; $self->sql->do($query, $page); } @@ -98,7 +98,7 @@ sub get_wiki_versions return undef; } - my $doc_url = sprintf "https://%s?action=query&prop=info&format=xml&titles=%s", DBDefs->WIKITRANS_SERVER_API, join('|', @queries); + my $doc_url = sprintf 'https://%s?action=query&prop=info&format=xml&titles=%s', DBDefs->WIKITRANS_SERVER_API, join('|', @queries); my $ua = LWP::UserAgent->new(max_redirect => 0, timeout => 5); $ua->env_proxy; @@ -108,7 +108,7 @@ sub get_wiki_versions return undef; } - my $content = decode "utf-8", $response->content; + my $content = decode 'utf-8', $response->content; # Parse the XML and make it easier to use. my $xml = XMLin( diff --git a/lib/MusicBrainz/Server/Data/WikidataProperties.pm b/lib/MusicBrainz/Server/Data/WikidataProperties.pm index 33247ab23de..2c25f0dfb22 100644 --- a/lib/MusicBrainz/Server/Data/WikidataProperties.pm +++ b/lib/MusicBrainz/Server/Data/WikidataProperties.pm @@ -11,9 +11,9 @@ Readonly my $WIKIDATA_CACHE_TIMEOUT => 60 * 60 * 24 * 3; # 3 days sub get_wikidata_properties { my ($self, $entity, $property) = @_; - my $url_pattern = "https://www.wikidata.org/w/api.php?action=wbgetclaims&format=json&entity=%s%s"; + my $url_pattern = 'https://www.wikidata.org/w/api.php?action=wbgetclaims&format=json&entity=%s%s'; return $self->_fetch_cache_or_url($url_pattern, - "wikidata_property", + 'wikidata_property', $WIKIDATA_CACHE_TIMEOUT, $entity, undef, diff --git a/lib/MusicBrainz/Server/Data/WikipediaExtract.pm b/lib/MusicBrainz/Server/Data/WikipediaExtract.pm index 8c0ae1ceb46..02867cc501d 100644 --- a/lib/MusicBrainz/Server/Data/WikipediaExtract.pm +++ b/lib/MusicBrainz/Server/Data/WikipediaExtract.pm @@ -111,7 +111,7 @@ sub get_extract sub get_extract_by_language { my ($self, $title, $language, %opts) = @_; - my $url_pattern = "https://%s.wikipedia.org/w/api.php?action=query&prop=extracts&exintro=1&format=json&redirects=1&titles=%s"; + my $url_pattern = 'https://%s.wikipedia.org/w/api.php?action=query&prop=extracts&exintro=1&format=json&redirects=1&titles=%s'; return $self->_fetch_cache_or_url($url_pattern, 'extract', $EXTRACT_CACHE_TIMEOUT, $title, $language, @@ -125,11 +125,11 @@ sub get_available_languages for my $link (@$links) { my ($url_pattern, $key, $callback, $language, $ret); if ($link->isa('MusicBrainz::Server::Entity::URL::Wikidata')) { - $url_pattern = "https://www.wikidata.org/w/api.php?action=wbgetentities&format=json&props=sitelinks&ids=%s%s"; + $url_pattern = 'https://www.wikidata.org/w/api.php?action=wbgetentities&format=json&props=sitelinks&ids=%s%s'; $key = 'sitelinks'; $callback = \&_wikidata_languages_callback; } else { - $url_pattern = "https://%s.wikipedia.org/w/api.php?action=query&prop=langlinks&lllimit=max&format=json&redirects=1&titles=%s"; + $url_pattern = 'https://%s.wikipedia.org/w/api.php?action=query&prop=langlinks&lllimit=max&format=json&redirects=1&titles=%s'; $key = 'langlinks'; $callback = \&_wikipedia_languages_callback; $language = $link->language; @@ -158,7 +158,7 @@ sub _wikidata_languages_callback if ($wiki =~ /wiki$/ and $wiki ne 'commonswiki') { my $lang = $wiki =~ s/wiki$//r; my $page = $opts{fetched}{content}{sitelinks}{$wiki}{title}; - push @langs, {"lang" => $lang, "title" => $page} + push @langs, {'lang' => $lang, 'title' => $page} } } return \@langs; @@ -168,7 +168,7 @@ sub _wikidata_languages_callback sub _wikipedia_languages_callback { my (%opts) = @_; - my @langs = map { {"lang" => $_->{lang}, "title" => $_->{"*"}} } @{ $opts{fetched}{content} }; + my @langs = map { {'lang' => $_->{lang}, 'title' => $_->{'*'}} } @{ $opts{fetched}{content} }; return \@langs; } @@ -180,7 +180,7 @@ sub _extract_by_language_callback content => $opts{fetched}{content}, canonical => $opts{fetched}{canonical}, language => $opts{language}, - url => sprintf "https://%s.wikipedia.org/wiki/%s", + url => sprintf 'https://%s.wikipedia.org/wiki/%s', $opts{language}, uri_escape_utf8($opts{fetched}{title} =~ tr/ /_/r) ); @@ -192,7 +192,7 @@ sub _check_for_redirect my ($self, $title, $language, %opts) = @_; return 1 if exists $redirected_languages{$language}; # We use formatversion=2 so that "redirect" is returned as an actual boolean, not the empty string - my $url_pattern = "https://%s.wikipedia.org/w/api.php?action=query&prop=info&format=json&formatversion=2&titles=%s"; + my $url_pattern = 'https://%s.wikipedia.org/w/api.php?action=query&prop=info&format=json&formatversion=2&titles=%s'; my $return = $self->_fetch_cache_or_url($url_pattern, 'redirect', $EXTRACT_CACHE_TIMEOUT, $title, $language, diff --git a/lib/MusicBrainz/Server/Data/Work.pm b/lib/MusicBrainz/Server/Data/Work.pm index 0422d0eafea..9fd0869f961 100644 --- a/lib/MusicBrainz/Server/Data/Work.pm +++ b/lib/MusicBrainz/Server/Data/Work.pm @@ -103,23 +103,23 @@ L<MusicBrainz::Server::Entity::Work> objects. sub find_by_iswc { my ($self, $iswc) = @_; - my $query = "SELECT " . $self->_columns . " - FROM " . $self->_table . " + my $query = 'SELECT ' . $self->_columns . ' + FROM ' . $self->_table . ' JOIN iswc ON work.id = iswc.work WHERE iswc.iswc = ? - ORDER BY work.name COLLATE musicbrainz"; + ORDER BY work.name COLLATE musicbrainz'; $self->query_to_list($query, [$iswc]); } sub _order_by { my ($self, $order) = @_; - my $order_by = order_by($order, "name", { - "name" => sub { - return "name COLLATE musicbrainz" + my $order_by = order_by($order, 'name', { + 'name' => sub { + return 'name COLLATE musicbrainz' }, - "type" => sub { - return "type, name COLLATE musicbrainz" + 'type' => sub { + return 'type, name COLLATE musicbrainz' }, }); @@ -219,7 +219,7 @@ sub _hash_to_row sub load_meta { my $self = shift; - MusicBrainz::Server::Data::Utils::load_meta($self->c, "work_meta", sub { + MusicBrainz::Server::Data::Utils::load_meta($self->c, 'work_meta', sub { my ($obj, $row) = @_; $obj->rating($row->{rating}) if defined $row->{rating}; $obj->rating_count($row->{rating_count}) if defined $row->{rating_count}; @@ -252,10 +252,10 @@ sub load_ids my @gids = map { $_->gid } @works; return () unless @gids; - my $query = " + my $query = ' SELECT gid, id FROM work - WHERE gid IN (" . placeholders(@gids) . ") - "; + WHERE gid IN (' . placeholders(@gids) . ') + '; my %map = map { $_->[0] => $_->[1] } @{ $self->sql->select_list_of_lists($query, @gids) }; @@ -337,16 +337,16 @@ sub _find_writers my ($self, $ids, $map) = @_; return unless @$ids; - my $query = " + my $query = ' SELECT law.entity1 AS work, law.entity0 AS artist, law.entity0_credit AS credit, array_agg(lt.name) AS roles FROM l_artist_work law JOIN link l ON law.link = l.id JOIN link_type lt ON l.link_type = lt.id - WHERE law.entity1 IN (" . placeholders(@$ids) . ") + WHERE law.entity1 IN (' . placeholders(@$ids) . ') GROUP BY law.entity1, law.entity0, law.entity0_credit ORDER BY count(*) DESC, artist, credit - "; + '; my $rows = $self->sql->select_list_of_lists($query, @$ids); @@ -394,15 +394,15 @@ sub _find_recording_artists my ($self, $ids, $map) = @_; return unless @$ids; - my $query = " + my $query = ' SELECT lrw.entity1 AS work, r.artist_credit FROM l_recording_work lrw JOIN recording r ON lrw.entity0 = r.id LEFT JOIN track t ON r.id = t.recording - WHERE lrw.entity1 IN (" . placeholders(@$ids) . ") + WHERE lrw.entity1 IN (' . placeholders(@$ids) . ') GROUP BY lrw.entity1, r.artist_credit ORDER BY count(*) DESC, artist_credit - "; + '; my $rows = $self->sql->select_list_of_lists($query, @$ids); @@ -429,7 +429,7 @@ sub is_empty { my ($self, $work_id) = @_; my $used_in_relationship = used_in_relationship($self->c, work => 'work_row.id'); - return $self->sql->select_single_value(<<~"EOSQL", $work_id, $STATUS_OPEN); + return $self->sql->select_single_value(<<~"SQL", $work_id, $STATUS_OPEN); SELECT TRUE FROM work work_row WHERE id = ? @@ -442,7 +442,7 @@ sub is_empty { ) OR $used_in_relationship ) - EOSQL + SQL } sub set_attributes { diff --git a/lib/MusicBrainz/Server/Database.pm b/lib/MusicBrainz/Server/Database.pm index fffb0b32362..5a2fe735451 100644 --- a/lib/MusicBrainz/Server/Database.pm +++ b/lib/MusicBrainz/Server/Database.pm @@ -46,7 +46,7 @@ sub shell_args } else { require String::ShellQuote; - return join " ", map { String::ShellQuote::shell_quote($_) } @args; + return join ' ', map { String::ShellQuote::shell_quote($_) } @args; } } diff --git a/lib/MusicBrainz/Server/Edit.pm b/lib/MusicBrainz/Server/Edit.pm index c372f1e16d4..429994ff9e3 100644 --- a/lib/MusicBrainz/Server/Edit.pm +++ b/lib/MusicBrainz/Server/Edit.pm @@ -267,7 +267,7 @@ sub adjust_edit_pending while ( my ($model_name, $ids) = each %$to_inc) { my $model = $self->c->model($model_name); $model->does('MusicBrainz::Server::Data::Role::Editable') - or croak "Model must do MusicBrainz::Server::Data::Role::Editable"; + or croak 'Model must do MusicBrainz::Server::Data::Role::Editable'; $model->adjust_edit_pending($adjust, @$ids); } } diff --git a/lib/MusicBrainz/Server/Edit/Alias/Add.pm b/lib/MusicBrainz/Server/Edit/Alias/Add.pm index 6e65ce7c738..16093437ee7 100644 --- a/lib/MusicBrainz/Server/Edit/Alias/Add.pm +++ b/lib/MusicBrainz/Server/Edit/Alias/Add.pm @@ -159,6 +159,6 @@ role { }; }; -sub edit_template_react { "AddRemoveAlias" }; +sub edit_template_react { 'AddRemoveAlias' }; 1; diff --git a/lib/MusicBrainz/Server/Edit/Alias/Delete.pm b/lib/MusicBrainz/Server/Edit/Alias/Delete.pm index ddd5d587518..0ef65091804 100644 --- a/lib/MusicBrainz/Server/Edit/Alias/Delete.pm +++ b/lib/MusicBrainz/Server/Edit/Alias/Delete.pm @@ -94,7 +94,7 @@ sub initialize }); } -sub edit_template_react { "AddRemoveAlias" }; +sub edit_template_react { 'AddRemoveAlias' }; __PACKAGE__->meta->make_immutable; no Moose; diff --git a/lib/MusicBrainz/Server/Edit/Alias/Edit.pm b/lib/MusicBrainz/Server/Edit/Alias/Edit.pm index 68f969e415a..d16c41210c2 100644 --- a/lib/MusicBrainz/Server/Edit/Alias/Edit.pm +++ b/lib/MusicBrainz/Server/Edit/Alias/Edit.pm @@ -22,7 +22,7 @@ use MusicBrainz::Server::Entity::Util::JSON qw( to_json_object ); use aliased 'MusicBrainz::Server::Entity::PartialDate'; -no if $] >= 5.018, warnings => "experimental::smartmatch"; +no if $] >= 5.018, warnings => 'experimental::smartmatch'; extends 'MusicBrainz::Server::Edit::WithDifferences'; with 'MusicBrainz::Server::Edit::Alias'; @@ -169,7 +169,7 @@ sub initialize { my ($self, %opts) = @_; my $alias = delete $opts{alias}; - die "You must specify the alias object to edit" unless defined $alias; + die 'You must specify the alias object to edit' unless defined $alias; my $entity = delete $opts{entity} or die 'Missing "entity" argument'; $self->enforce_dependencies(\%opts); @@ -189,7 +189,7 @@ sub current_instance { $self->_load_alias; } -sub edit_template_react { "EditAlias" }; +sub edit_template_react { 'EditAlias' }; around TO_JSON => sub { my ($orig, $self) = @_; diff --git a/lib/MusicBrainz/Server/Edit/Area/Create.pm b/lib/MusicBrainz/Server/Edit/Area/Create.pm index 65d6c5107b6..34d53317ebc 100644 --- a/lib/MusicBrainz/Server/Edit/Area/Create.pm +++ b/lib/MusicBrainz/Server/Edit/Area/Create.pm @@ -52,9 +52,9 @@ sub foreign_keys before initialize => sub { my ($self, %opts) = @_; - die "You must specify iso_3166_1" unless defined $opts{iso_3166_1}; - die "You must specify iso_3166_2" unless defined $opts{iso_3166_2}; - die "You must specify iso_3166_3" unless defined $opts{iso_3166_3}; + die 'You must specify iso_3166_1' unless defined $opts{iso_3166_1}; + die 'You must specify iso_3166_2' unless defined $opts{iso_3166_2}; + die 'You must specify iso_3166_3' unless defined $opts{iso_3166_3}; }; sub build_display_data diff --git a/lib/MusicBrainz/Server/Edit/Area/Edit.pm b/lib/MusicBrainz/Server/Edit/Area/Edit.pm index d70a235fe1b..4d750e88117 100644 --- a/lib/MusicBrainz/Server/Edit/Area/Edit.pm +++ b/lib/MusicBrainz/Server/Edit/Area/Edit.pm @@ -22,7 +22,7 @@ use MooseX::Types::Structured qw( Dict Optional ); use aliased 'MusicBrainz::Server::Entity::Area'; use aliased 'MusicBrainz::Server::Entity::PartialDate'; -no if $] >= 5.018, warnings => "experimental::smartmatch"; +no if $] >= 5.018, warnings => 'experimental::smartmatch'; extends 'MusicBrainz::Server::Edit::Generic::Edit'; with 'MusicBrainz::Server::Edit::CheckForConflicts'; @@ -132,13 +132,13 @@ sub _mapping begin_date => date_closure('begin_date'), end_date => date_closure('end_date'), iso_3166_1 => sub { - return $self->c->sql->select_single_column_array("SELECT code FROM iso_3166_1 WHERE area = ?", shift->id); + return $self->c->sql->select_single_column_array('SELECT code FROM iso_3166_1 WHERE area = ?', shift->id); }, iso_3166_2 => sub { - return $self->c->sql->select_single_column_array("SELECT code FROM iso_3166_2 WHERE area = ?", shift->id); + return $self->c->sql->select_single_column_array('SELECT code FROM iso_3166_2 WHERE area = ?', shift->id); }, iso_3166_3 => sub { - return $self->c->sql->select_single_column_array("SELECT code FROM iso_3166_3 WHERE area = ?", shift->id); + return $self->c->sql->select_single_column_array('SELECT code FROM iso_3166_3 WHERE area = ?', shift->id); }, ); } diff --git a/lib/MusicBrainz/Server/Edit/Artist/Create.pm b/lib/MusicBrainz/Server/Edit/Artist/Create.pm index 6566a2d0d0f..ad5dc69a16f 100644 --- a/lib/MusicBrainz/Server/Edit/Artist/Create.pm +++ b/lib/MusicBrainz/Server/Edit/Artist/Create.pm @@ -51,8 +51,8 @@ has '+data' => ( before initialize => sub { my ($self, %opts) = @_; - die "You must specify ipi_codes" unless defined $opts{ipi_codes}; - die "You must specify isni_codes" unless defined $opts{isni_codes}; + die 'You must specify ipi_codes' unless defined $opts{ipi_codes}; + die 'You must specify isni_codes' unless defined $opts{isni_codes}; }; around initialize => sub { diff --git a/lib/MusicBrainz/Server/Edit/Artist/Edit.pm b/lib/MusicBrainz/Server/Edit/Artist/Edit.pm index 3fc19168bb9..2b9c095f0e3 100644 --- a/lib/MusicBrainz/Server/Edit/Artist/Edit.pm +++ b/lib/MusicBrainz/Server/Edit/Artist/Edit.pm @@ -27,7 +27,7 @@ use aliased 'MusicBrainz::Server::Entity::Artist'; use aliased 'MusicBrainz::Server::Entity::Area'; use aliased 'MusicBrainz::Server::Entity::PartialDate'; -no if $] >= 5.018, warnings => "experimental::smartmatch"; +no if $] >= 5.018, warnings => 'experimental::smartmatch'; extends 'MusicBrainz::Server::Edit::Generic::Edit'; with 'MusicBrainz::Server::Edit::Artist'; @@ -44,7 +44,7 @@ with 'MusicBrainz::Server::Edit::Role::AllowAmending' => { sub edit_name { N_l('Edit artist') } sub edit_type { $EDIT_ARTIST_EDIT } -sub edit_template_react { "EditArtist" } +sub edit_template_react { 'EditArtist' } sub _edit_model { 'Artist' } @@ -219,7 +219,7 @@ around allow_auto_edit => sub { return 0; } } - + if (defined $self->data->{new}{isni_codes}) { # If there's already ISNIs for the artist, not an autoedit if (@{ $self->data->{old}{isni_codes} // [] }) { diff --git a/lib/MusicBrainz/Server/Edit/Event/Edit.pm b/lib/MusicBrainz/Server/Edit/Event/Edit.pm index a0f7278c808..e9687182ec4 100644 --- a/lib/MusicBrainz/Server/Edit/Event/Edit.pm +++ b/lib/MusicBrainz/Server/Edit/Event/Edit.pm @@ -28,7 +28,7 @@ use MooseX::Types::Structured qw( Dict Optional ); use aliased 'MusicBrainz::Server::Entity::Event'; use aliased 'MusicBrainz::Server::Entity::PartialDate'; -no if $] >= 5.018, warnings => "experimental::smartmatch"; +no if $] >= 5.018, warnings => 'experimental::smartmatch'; extends 'MusicBrainz::Server::Edit::Generic::Edit'; with 'MusicBrainz::Server::Edit::CheckForConflicts'; @@ -41,7 +41,7 @@ with 'MusicBrainz::Server::Edit::Role::DatePeriod'; sub edit_name { N_l('Edit event') } sub edit_type { $EDIT_EVENT_EDIT } -sub edit_template_react { "EditEvent" } +sub edit_template_react { 'EditEvent' } sub _edit_model { 'Event' } diff --git a/lib/MusicBrainz/Server/Edit/Generic/Delete.pm b/lib/MusicBrainz/Server/Edit/Generic/Delete.pm index 723c7dcd044..d2befeaa926 100644 --- a/lib/MusicBrainz/Server/Edit/Generic/Delete.pm +++ b/lib/MusicBrainz/Server/Edit/Generic/Delete.pm @@ -81,7 +81,7 @@ sub build_display_data sub initialize { my ($self, %args) = @_; - my $entity = delete $args{to_delete} or die "Required 'to_delete' object"; + my $entity = delete $args{to_delete} or die q(Required 'to_delete' object); $self->data({ name => $entity->name, diff --git a/lib/MusicBrainz/Server/Edit/Generic/Edit.pm b/lib/MusicBrainz/Server/Edit/Generic/Edit.pm index eefd1014416..3655a789a53 100644 --- a/lib/MusicBrainz/Server/Edit/Generic/Edit.pm +++ b/lib/MusicBrainz/Server/Edit/Generic/Edit.pm @@ -51,7 +51,7 @@ sub initialize { my ($self, %opts) = @_; my $entity = delete $opts{to_edit}; - die "You must specify the object to edit" unless defined $entity; + die 'You must specify the object to edit' unless defined $entity; my $entity_properties = $ENTITIES{model_to_type($self->_edit_model)}; diff --git a/lib/MusicBrainz/Server/Edit/Generic/Merge.pm b/lib/MusicBrainz/Server/Edit/Generic/Merge.pm index 48f7db8ebee..8278ba453a2 100644 --- a/lib/MusicBrainz/Server/Edit/Generic/Merge.pm +++ b/lib/MusicBrainz/Server/Edit/Generic/Merge.pm @@ -64,17 +64,38 @@ sub build_display_data { my ($self, $loaded) = @_; my $model = $self->_merge_model; + my @releases = values %{ $loaded->{Release} }; + + # For release merges, we need to load additional data + # before turning the releases to JSON + if ($model eq 'Release') { + $self->c->model('Label')->load( + grep { $_->label_id && !defined($_->label) } + map { $_->all_labels } + @releases + ); + + $self->c->model('Medium')->load_for_releases( + grep { $_->medium_count < 1 } + @releases + ); - my $new_entity = ( + $self->c->model('MediumFormat')->load( + grep { $_->format_id && !defined($_->format) } + map { $_->all_mediums } + @releases + ); + + $self->c->model('Release')->load_release_events( + @releases + ); + } + + my $new_entity = to_json_object( $loaded->{$model}{ $self->new_entity->{id} } || $self->_build_missing_entity($loaded, $self->new_entity) ); - # XXX: root/edit/details/merge_releases.tt is not converted to React yet. - if ($model ne 'Release') { - $new_entity = to_json_object($new_entity); - } - my $data = { new => $new_entity, old => [] @@ -84,9 +105,7 @@ sub build_display_data my $ent = $loaded->{$model}{ $old->{id} } || $self->_build_missing_entity($loaded, $old); - push @{ $data->{old} }, ( - $model ne 'Release' ? to_json_object($ent) : $ent - ); + push @{ $data->{old} }, to_json_object($ent); } return $data; diff --git a/lib/MusicBrainz/Server/Edit/Historic.pm b/lib/MusicBrainz/Server/Edit/Historic.pm index 0451f64222f..d41ff164999 100644 --- a/lib/MusicBrainz/Server/Edit/Historic.pm +++ b/lib/MusicBrainz/Server/Edit/Historic.pm @@ -66,7 +66,7 @@ sub _decode_value my ($scheme, $data) = $value =~ /\A\x1B(\w+);(.*)\z/s or return $value; - return uri_unescape($data) if $scheme eq "URI"; + return uri_unescape($data) if $scheme eq 'URI'; die "Unknown encoding scheme '$scheme'"; } diff --git a/lib/MusicBrainz/Server/Edit/Historic/EditTrackNum.pm b/lib/MusicBrainz/Server/Edit/Historic/EditTrackNum.pm index 6f711155713..07633db9481 100644 --- a/lib/MusicBrainz/Server/Edit/Historic/EditTrackNum.pm +++ b/lib/MusicBrainz/Server/Edit/Historic/EditTrackNum.pm @@ -55,7 +55,7 @@ sub upgrade my $self = shift; unless (looks_like_number($self->new_value) && looks_like_number($self->previous_value)) { - die "This data is corrupt and cannot be upgraded"; + die 'This data is corrupt and cannot be upgraded'; } $self->data({ diff --git a/lib/MusicBrainz/Server/Edit/Historic/Utils.pm b/lib/MusicBrainz/Server/Edit/Historic/Utils.pm index 3e43fa2721d..6d08843aa5c 100644 --- a/lib/MusicBrainz/Server/Edit/Historic/Utils.pm +++ b/lib/MusicBrainz/Server/Edit/Historic/Utils.pm @@ -60,7 +60,7 @@ sub upgrade_release_status # Status' have their own table, so they don't have the 100 offset as before. # They are also indexed from 1, not 0 - return unless defined $status_id && $status_id ne ""; + return unless defined $status_id && $status_id ne ''; return $status_id - 99; } @@ -86,7 +86,7 @@ sub get_historic_type { if (!$type_id) { return undef; } - + my $loaded_type = to_json_object($loaded->{ReleaseGroupType}{ $type_id }); if ($loaded_type) { diff --git a/lib/MusicBrainz/Server/Edit/Instrument/Edit.pm b/lib/MusicBrainz/Server/Edit/Instrument/Edit.pm index d866492729d..d601e5c7a29 100644 --- a/lib/MusicBrainz/Server/Edit/Instrument/Edit.pm +++ b/lib/MusicBrainz/Server/Edit/Instrument/Edit.pm @@ -26,7 +26,7 @@ with 'MusicBrainz::Server::Edit::Role::AlwaysAutoEdit'; sub edit_name { N_l('Edit instrument') } sub edit_type { $EDIT_INSTRUMENT_EDIT } -sub edit_template_react { "EditInstrument" } +sub edit_template_react { 'EditInstrument' } sub _edit_model { 'Instrument' } diff --git a/lib/MusicBrainz/Server/Edit/Label/Create.pm b/lib/MusicBrainz/Server/Edit/Label/Create.pm index 6975e258828..0e4958c03bd 100644 --- a/lib/MusicBrainz/Server/Edit/Label/Create.pm +++ b/lib/MusicBrainz/Server/Edit/Label/Create.pm @@ -50,8 +50,8 @@ has '+data' => ( before initialize => sub { my ($self, %opts) = @_; - die "You must specify ipi_codes" unless defined $opts{ipi_codes}; - die "You must specify isni_codes" unless defined $opts{isni_codes}; + die 'You must specify ipi_codes' unless defined $opts{ipi_codes}; + die 'You must specify isni_codes' unless defined $opts{isni_codes}; }; sub foreign_keys diff --git a/lib/MusicBrainz/Server/Edit/Label/Edit.pm b/lib/MusicBrainz/Server/Edit/Label/Edit.pm index b4ea5c47034..2f6a5ecf038 100644 --- a/lib/MusicBrainz/Server/Edit/Label/Edit.pm +++ b/lib/MusicBrainz/Server/Edit/Label/Edit.pm @@ -26,7 +26,7 @@ use MooseX::Types::Structured qw( Dict Optional ); use aliased 'MusicBrainz::Server::Entity::Label'; use aliased 'MusicBrainz::Server::Entity::Area'; -no if $] >= 5.018, warnings => "experimental::smartmatch"; +no if $] >= 5.018, warnings => 'experimental::smartmatch'; extends 'MusicBrainz::Server::Edit::Generic::Edit'; with 'MusicBrainz::Server::Edit::Label'; @@ -192,7 +192,7 @@ around allow_auto_edit => sub { return 0; } } - + if (defined $self->data->{new}{isni_codes}) { # If there's already ISNIs for the label, not an autoedit if (@{ $self->data->{old}{isni_codes} // [] }) { diff --git a/lib/MusicBrainz/Server/Edit/Medium.pm b/lib/MusicBrainz/Server/Edit/Medium.pm index fc39c28eaa5..6323c87268c 100644 --- a/lib/MusicBrainz/Server/Edit/Medium.pm +++ b/lib/MusicBrainz/Server/Edit/Medium.pm @@ -16,14 +16,14 @@ sub check_tracks_against_format { return unless any { $_->{is_data_track} } @tracklist; my $format = $self->c->model('MediumFormat')->get_by_id($format_id); - die "Format does not support pregap or data tracks" unless $format->has_discids; + die 'Format does not support pregap or data tracks' unless $format->has_discids; my $data_tracks_started; for (@tracklist) { if ($_->{is_data_track}) { $data_tracks_started = 1; } elsif ($data_tracks_started) { - die "All data tracks must be contiguous at the end of the medium"; + die 'All data tracks must be contiguous at the end of the medium'; } } } diff --git a/lib/MusicBrainz/Server/Edit/Medium/AddDiscID.pm b/lib/MusicBrainz/Server/Edit/Medium/AddDiscID.pm index b18cbd03a1c..532842c93f7 100644 --- a/lib/MusicBrainz/Server/Edit/Medium/AddDiscID.pm +++ b/lib/MusicBrainz/Server/Edit/Medium/AddDiscID.pm @@ -51,7 +51,7 @@ method alter_edit_pending sub initialize { my ($self, %opts) = @_; - my $release_name = delete $opts{release_name} // ""; + my $release_name = delete $opts{release_name} // ''; # For linkedEntities to work with edit previews my $fake_release_id = 1000000000000; @@ -104,7 +104,7 @@ method build_display_data ($loaded) Medium->new( release_id => $self->release_id, release => $loaded->{Release}{ $self->release_id } // Release->new( - id => $self->release_id, + id => $self->release_id, name => $self->data->{release}{name}, ), $pos ? ( position => $pos ) : (), diff --git a/lib/MusicBrainz/Server/Edit/Medium/Edit.pm b/lib/MusicBrainz/Server/Edit/Medium/Edit.pm index 86dd10a1b88..b18ae3a9dfd 100644 --- a/lib/MusicBrainz/Server/Edit/Medium/Edit.pm +++ b/lib/MusicBrainz/Server/Edit/Medium/Edit.pm @@ -146,7 +146,7 @@ sub initialize my $entity = delete $opts{to_edit}; my $tracklist = delete $opts{tracklist}; - my $delete_tracklist = delete $opts{delete_tracklist}; + my $delete_tracklist = delete $opts{delete_tracklist}; my $data; $self->check_tracks_against_format($tracklist, $opts{format_id}); @@ -162,7 +162,7 @@ sub initialize } else { - die "You must specify the object to edit" unless defined $entity; + die 'You must specify the object to edit' unless defined $entity; unless ($entity->release) { $self->c->model('Release')->load($entity); diff --git a/lib/MusicBrainz/Server/Edit/Medium/Util.pm b/lib/MusicBrainz/Server/Edit/Medium/Util.pm index ad65eecba1a..e5c0798820e 100644 --- a/lib/MusicBrainz/Server/Edit/Medium/Util.pm +++ b/lib/MusicBrainz/Server/Edit/Medium/Util.pm @@ -65,16 +65,16 @@ sub check_track_hash { my $tracks = shift; my @track_ids = grep { defined $_ } map { $_->{id} } @$tracks; - die "Track IDs are not unique (MBS-7303)" + die 'Track IDs are not unique (MBS-7303)' unless scalar @track_ids == scalar uniq @track_ids; my @track_pos = sort { $a <=> $b } map { $_->{position} } @$tracks; - die "No tracks" unless @track_pos; - die "Track positions not given for all tracks" + die 'No tracks' unless @track_pos; + die 'Track positions not given for all tracks' unless all { defined $_ } @track_pos; - die "Track positions are not unique (MBS-7721)" + die 'Track positions are not unique (MBS-7721)' unless scalar @track_pos == scalar uniq @track_pos; - die "Track positions are non-contiguous (MBS-7846)" + die 'Track positions are non-contiguous (MBS-7846)' unless ($track_pos[0] == 0 || $track_pos[0] == 1) && scalar @track_pos == $track_pos[-1] - $track_pos[0] + 1; } diff --git a/lib/MusicBrainz/Server/Edit/Place/Create.pm b/lib/MusicBrainz/Server/Edit/Place/Create.pm index 8faadae0024..3a89dff0624 100644 --- a/lib/MusicBrainz/Server/Edit/Place/Create.pm +++ b/lib/MusicBrainz/Server/Edit/Place/Create.pm @@ -76,7 +76,7 @@ sub build_display_data }; } -sub edit_template_react { "AddPlace" } +sub edit_template_react { 'AddPlace' } before restore => sub { my ($self, $data) = @_; diff --git a/lib/MusicBrainz/Server/Edit/Place/Edit.pm b/lib/MusicBrainz/Server/Edit/Place/Edit.pm index e458d7cee09..8a81c5ff388 100644 --- a/lib/MusicBrainz/Server/Edit/Place/Edit.pm +++ b/lib/MusicBrainz/Server/Edit/Place/Edit.pm @@ -30,7 +30,7 @@ use aliased 'MusicBrainz::Server::Entity::Area'; use aliased 'MusicBrainz::Server::Entity::PartialDate'; use aliased 'MusicBrainz::Server::Entity::Coordinates'; -no if $] >= 5.018, warnings => "experimental::smartmatch"; +no if $] >= 5.018, warnings => 'experimental::smartmatch'; extends 'MusicBrainz::Server::Edit::Generic::Edit'; with 'MusicBrainz::Server::Edit::CheckForConflicts'; @@ -186,7 +186,7 @@ sub _edit_hash { return $self->merge_changes; } -sub edit_template_react { "EditPlace" } +sub edit_template_react { 'EditPlace' } around extract_property => sub { my ($orig, $self) = splice(@_, 0, 2); diff --git a/lib/MusicBrainz/Server/Edit/Recording/Create.pm b/lib/MusicBrainz/Server/Edit/Recording/Create.pm index 224704c759a..39b508ac945 100644 --- a/lib/MusicBrainz/Server/Edit/Recording/Create.pm +++ b/lib/MusicBrainz/Server/Edit/Recording/Create.pm @@ -25,7 +25,7 @@ with 'MusicBrainz::Server::Edit::Role::AlwaysAutoEdit'; sub edit_type { $EDIT_RECORDING_CREATE } sub edit_name { N_l('Add standalone recording') } -sub edit_template_react { "AddStandaloneRecording" } +sub edit_template_react { 'AddStandaloneRecording' } sub _create_model { 'Recording' } sub recording_id { return shift->entity_id } diff --git a/lib/MusicBrainz/Server/Edit/Recording/Edit.pm b/lib/MusicBrainz/Server/Edit/Recording/Edit.pm index 34ef935e230..50c3e5a68f4 100644 --- a/lib/MusicBrainz/Server/Edit/Recording/Edit.pm +++ b/lib/MusicBrainz/Server/Edit/Recording/Edit.pm @@ -26,7 +26,7 @@ use MusicBrainz::Server::Entity::Util::JSON qw( to_json_object ); use MusicBrainz::Server::Track; use MusicBrainz::Server::Translation qw( N_l ); -no if $] >= 5.018, warnings => "experimental::smartmatch"; +no if $] >= 5.018, warnings => 'experimental::smartmatch'; extends 'MusicBrainz::Server::Edit::Generic::Edit'; with 'MusicBrainz::Server::Edit::Recording::RelatedEntities'; @@ -43,7 +43,7 @@ use aliased 'MusicBrainz::Server::Entity::Recording'; sub edit_type { $EDIT_RECORDING_EDIT } sub edit_name { N_l('Edit recording') } -sub edit_template_react { "EditRecording" } +sub edit_template_react { 'EditRecording' } sub _edit_model { 'Recording' } sub recording_id { return shift->entity_id } diff --git a/lib/MusicBrainz/Server/Edit/Recording/RemoveISRC.pm b/lib/MusicBrainz/Server/Edit/Recording/RemoveISRC.pm index fec4b1f1f93..c85aeec4a34 100644 --- a/lib/MusicBrainz/Server/Edit/Recording/RemoveISRC.pm +++ b/lib/MusicBrainz/Server/Edit/Recording/RemoveISRC.pm @@ -74,7 +74,7 @@ sub initialize { my ($self, %opts) = @_; - my $isrc = $opts{isrc} or die "Required 'isrc' object missing"; + my $isrc = $opts{isrc} or die q(Required 'isrc' object missing); $self->c->model('Recording')->load($isrc) unless defined $isrc->recording; $self->data({ isrc => { diff --git a/lib/MusicBrainz/Server/Edit/Relationship.pm b/lib/MusicBrainz/Server/Edit/Relationship.pm index ce31b051a34..51f021d1c2d 100644 --- a/lib/MusicBrainz/Server/Edit/Relationship.pm +++ b/lib/MusicBrainz/Server/Edit/Relationship.pm @@ -13,7 +13,7 @@ use namespace::autoclean; use MusicBrainz::Server::Translation 'l'; -no if $] >= 5.018, warnings => "experimental::smartmatch"; +no if $] >= 5.018, warnings => 'experimental::smartmatch'; sub edit_category { l('Relationship') } @@ -100,7 +100,7 @@ sub serialize_link_attributes { sub editor_may_edit_types { my ($self, $type0, $type1) = @_; - my $types = join "_", sort($type0, $type1); + my $types = join '_', sort($type0, $type1); if ($types ~~ [qw(area_area area_url)]) { return $self->editor->is_location_editor; } elsif ($types ~~ [qw(area_instrument instrument_instrument instrument_url)]) { diff --git a/lib/MusicBrainz/Server/Edit/Relationship/Create.pm b/lib/MusicBrainz/Server/Edit/Relationship/Create.pm index 91c296c80ba..7826e2624bf 100644 --- a/lib/MusicBrainz/Server/Edit/Relationship/Create.pm +++ b/lib/MusicBrainz/Server/Edit/Relationship/Create.pm @@ -67,9 +67,9 @@ sub link_type { shift->data->{link_type} } sub initialize { my ($self, %opts) = @_; - my $e0 = delete $opts{entity0} or die "No entity0"; - my $e1 = delete $opts{entity1} or die "No entity1"; - my $lt = delete $opts{link_type} or die "No link type"; + my $e0 = delete $opts{entity0} or die 'No entity0'; + my $e1 = delete $opts{entity1} or die 'No entity1'; + my $lt = delete $opts{link_type} or die 'No link type'; my $link_type_id = $lt->id; die "Link type $link_type_id is only used for grouping" unless $lt->description; @@ -82,7 +82,7 @@ sub initialize } } - die "Entities in a relationship cannot be the same" + die 'Entities in a relationship cannot be the same' if $lt->entity0_type eq $lt->entity1_type && $e0->id == $e1->id; $opts{entity0} = { diff --git a/lib/MusicBrainz/Server/Edit/Relationship/Delete.pm b/lib/MusicBrainz/Server/Edit/Relationship/Delete.pm index 63dea33fe3b..4762b173cab 100644 --- a/lib/MusicBrainz/Server/Edit/Relationship/Delete.pm +++ b/lib/MusicBrainz/Server/Edit/Relationship/Delete.pm @@ -29,7 +29,7 @@ with 'MusicBrainz::Server::Edit::Relationship::RelatedEntities'; with 'MusicBrainz::Server::Edit::Role::Preview'; sub edit_type { $EDIT_RELATIONSHIP_DELETE } -sub edit_name { N_l("Remove relationship") } +sub edit_name { N_l('Remove relationship') } sub edit_kind { 'remove' } sub edit_template_react { 'RemoveRelationship' } diff --git a/lib/MusicBrainz/Server/Edit/Relationship/Edit.pm b/lib/MusicBrainz/Server/Edit/Relationship/Edit.pm index e4e67836189..92c920efea0 100644 --- a/lib/MusicBrainz/Server/Edit/Relationship/Edit.pm +++ b/lib/MusicBrainz/Server/Edit/Relationship/Edit.pm @@ -33,7 +33,7 @@ with 'MusicBrainz::Server::Edit::Role::Preview'; with 'MusicBrainz::Server::Edit::Role::DatePeriod'; sub edit_type { $EDIT_RELATIONSHIP_EDIT } -sub edit_name { N_l("Edit relationship") } +sub edit_name { N_l('Edit relationship') } sub edit_kind { 'edit' } sub edit_template_react { 'EditRelationship' } diff --git a/lib/MusicBrainz/Server/Edit/Relationship/Reorder.pm b/lib/MusicBrainz/Server/Edit/Relationship/Reorder.pm index fbb63d92289..495bf91c6bb 100644 --- a/lib/MusicBrainz/Server/Edit/Relationship/Reorder.pm +++ b/lib/MusicBrainz/Server/Edit/Relationship/Reorder.pm @@ -195,7 +195,7 @@ sub initialize { my $relationship = delete $_->{relationship}; my $link = $relationship->link; - die "Relationship link type mismatch" if $link->type_id != $lt->id; + die 'Relationship link type mismatch' if $link->type_id != $lt->id; $_->{relationship} = { id => $relationship->id, diff --git a/lib/MusicBrainz/Server/Edit/Release.pm b/lib/MusicBrainz/Server/Edit/Release.pm index 594ac14ceb0..1be30507f88 100644 --- a/lib/MusicBrainz/Server/Edit/Release.pm +++ b/lib/MusicBrainz/Server/Edit/Release.pm @@ -17,7 +17,7 @@ sub check_event_countries { for (@$events) { my $country_id = $_->{country_id} // 'undef'; if (exists $countries->{$country_id}) { - die "Duplicate release country: " . $country_id; + die "Duplicate release country: $country_id"; } $countries->{$country_id} = 1; } diff --git a/lib/MusicBrainz/Server/Edit/Release/AddCoverArt.pm b/lib/MusicBrainz/Server/Edit/Release/AddCoverArt.pm index 4221c8c2639..9c1d0867000 100644 --- a/lib/MusicBrainz/Server/Edit/Release/AddCoverArt.pm +++ b/lib/MusicBrainz/Server/Edit/Release/AddCoverArt.pm @@ -119,7 +119,7 @@ sub build_display_data { my $suffix = $self->data->{cover_art_mime_type} ? $self->c->model('CoverArt')->image_type_suffix($self->data->{cover_art_mime_type}) - : "jpg"; + : 'jpg'; my $artwork = Artwork->new(release => $artwork_release, id => $self->data->{cover_art_id}, diff --git a/lib/MusicBrainz/Server/Edit/Release/Create.pm b/lib/MusicBrainz/Server/Edit/Release/Create.pm index e8397e38e75..b351f81c638 100644 --- a/lib/MusicBrainz/Server/Edit/Release/Create.pm +++ b/lib/MusicBrainz/Server/Edit/Release/Create.pm @@ -62,7 +62,7 @@ after 'initialize' => sub { $self->check_event_countries($self->data->{events} // []); - croak "No release_group_id specified" unless $self->data->{release_group_id}; + croak 'No release_group_id specified' unless $self->data->{release_group_id}; }; sub foreign_keys diff --git a/lib/MusicBrainz/Server/Edit/Release/DeleteReleaseLabel.pm b/lib/MusicBrainz/Server/Edit/Release/DeleteReleaseLabel.pm index 7c2427fc588..e68a3a6e54b 100644 --- a/lib/MusicBrainz/Server/Edit/Release/DeleteReleaseLabel.pm +++ b/lib/MusicBrainz/Server/Edit/Release/DeleteReleaseLabel.pm @@ -101,7 +101,7 @@ sub initialize { my ($self, %opts) = @_; my $release_label = delete $opts{release_label}; - die "You must specify the release label object to delete" + die 'You must specify the release label object to delete' unless defined $release_label; unless ($release_label->release) { diff --git a/lib/MusicBrainz/Server/Edit/Release/Edit.pm b/lib/MusicBrainz/Server/Edit/Release/Edit.pm index 07f4e6a75df..4f5770e605b 100644 --- a/lib/MusicBrainz/Server/Edit/Release/Edit.pm +++ b/lib/MusicBrainz/Server/Edit/Release/Edit.pm @@ -31,7 +31,7 @@ use MusicBrainz::Server::Entity::PartialDate; use MusicBrainz::Server::Entity::Util::JSON qw( to_json_array to_json_object ); use MusicBrainz::Server::Translation qw( N_l ); -no if $] >= 5.018, warnings => "experimental::smartmatch"; +no if $] >= 5.018, warnings => 'experimental::smartmatch'; extends 'MusicBrainz::Server::Edit::Generic::Edit'; with 'MusicBrainz::Server::Edit::Role::EditArtistCredit'; diff --git a/lib/MusicBrainz/Server/Edit/Release/EditReleaseLabel.pm b/lib/MusicBrainz/Server/Edit/Release/EditReleaseLabel.pm index ac6b31e4f52..13768a4b5e3 100644 --- a/lib/MusicBrainz/Server/Edit/Release/EditReleaseLabel.pm +++ b/lib/MusicBrainz/Server/Edit/Release/EditReleaseLabel.pm @@ -16,7 +16,7 @@ use MusicBrainz::Server::Translation qw( N_l l lp ); use MusicBrainz::Server::Entity::Util::MediumFormat qw( combined_medium_format_name ); use Scalar::Util qw( looks_like_number ); -no if $] >= 5.018, warnings => "experimental::smartmatch"; +no if $] >= 5.018, warnings => 'experimental::smartmatch'; extends 'MusicBrainz::Server::Edit::WithDifferences'; with 'MusicBrainz::Server::Edit::Role::Preview'; @@ -201,7 +201,7 @@ sub initialize { my ($self, %opts) = @_; my $release_label = delete $opts{release_label}; - die "You must specify the release label object to edit" + die 'You must specify the release label object to edit' unless defined $release_label; unless ($release_label->release) { diff --git a/lib/MusicBrainz/Server/Edit/Release/Merge.pm b/lib/MusicBrainz/Server/Edit/Release/Merge.pm index 4e619c8c00a..c25ce4c8eb7 100644 --- a/lib/MusicBrainz/Server/Edit/Release/Merge.pm +++ b/lib/MusicBrainz/Server/Edit/Release/Merge.pm @@ -5,7 +5,7 @@ use 5.18.2; use Moose; use List::AllUtils qw( any ); use MusicBrainz::Server::Constants qw( $EDIT_RELEASE_MERGE ); -use MusicBrainz::Server::Data::Utils qw( localized_note ); +use MusicBrainz::Server::Data::Utils qw( boolean_to_json localized_note ); use MusicBrainz::Server::Edit::Exceptions; use MusicBrainz::Server::Edit::Types qw( ArtistCreditDefinition @@ -14,6 +14,7 @@ use MusicBrainz::Server::Edit::Types qw( RecordingMergesArray ); use MusicBrainz::Server::Edit::Utils qw( large_spread ); +use MusicBrainz::Server::Entity::Util::JSON qw( to_json_array to_json_object ); use MusicBrainz::Server::Translation qw( N_l ); use Try::Tiny; @@ -140,6 +141,7 @@ sub _build_recording_merges { sub edit_name { N_l('Merge releases') } sub edit_type { $EDIT_RELEASE_MERGE } sub _merge_model { 'Release' } +sub edit_template_react { 'MergeReleases' } sub release_ids { @{ shift->_entity_ids } } @@ -188,7 +190,7 @@ sub alter_edit_pending my @recording_ids = map { $_->{id} } map { $_->{destination}, @{ $_->{sources} } } @{ $self->recording_merges // [] }; return { Release => [ $self->release_ids ], - @recording_ids ? (Recording => [ @recording_ids ]) : (), + @recording_ids ? (Recording => [ @recording_ids ]) : (), } } @@ -240,40 +242,22 @@ override build_display_data => sub my $data = super(); - $self->c->model('Label')->load( - grep { $_->label_id && !defined($_->label) } - map { $_->all_labels } - values %{ $loaded->{Release} } - ); - - $self->c->model('Medium')->load_for_releases( - grep { $_->medium_count < 1 } - values %{ $loaded->{Release} } - ); - - $self->c->model('MediumFormat')->load( - grep { $_->format_id && !defined($_->format) } - map { $_->all_mediums } - values %{ $loaded->{Release} } - ); - - $self->c->model('Release')->load_release_events( - values %{ $loaded->{Release} } - ); - if ($self->data->{merge_strategy} == $MusicBrainz::Server::Data::Release::MERGE_APPEND) { $data->{changes} = [ map +{ - release => $loaded->{Release}{ $_->{release}{id} } - || Release->new( name => $_->{release}{name} ), - mediums => $_->{mediums} + release => to_json_object( + $loaded->{Release}{ $_->{release}{id} } + || Release->new( name => $_->{release}{name} ) + ), + mediums => to_json_array($_->{mediums}) }, @{ $self->data->{medium_changes} } ]; - $data->{empty_releases} = [ - map +{ - release => $loaded->{Release}{ $_->{id} } // Release->new(name => $_->{name}), - }, grep { defined $_->{mediums} && scalar @{ $_->{mediums} } == 0 } @{ $self->data->{old_entities} } - ]; + $data->{empty_releases} = to_json_array([ + map { + $loaded->{Release}{ $_->{id} } // + Release->new(name => $_->{name}), + } grep { defined $_->{mediums} && scalar @{ $_->{mediums} } == 0 } @{ $self->data->{old_entities} } + ]); } elsif ($self->data->{merge_strategy} == $MusicBrainz::Server::Data::Release::MERGE_MERGE) { my $recording_merges = $self->recording_merges; @@ -289,15 +273,23 @@ override build_display_data => sub ) } @{$_->{sources}}]; { - medium => $_->{medium}, - track => $_->{track}, - destination => $destination, - sources => $sources, - large_spread => (large_spread(map { $_->length } $destination, @{$sources}) ? 1 : 0), + medium => to_json_object($_->{medium}), + track => to_json_object($_->{track}), + destination => to_json_object($destination), + sources => to_json_array($sources), + large_spread => boolean_to_json(large_spread(map { $_->length } $destination, @{$sources}) ? 1 : 0), } } @{$recording_merges}] if defined $recording_merges; } + $data->{merge_strategy} = $self->data->{merge_strategy} == $MusicBrainz::Server::Data::Release::MERGE_APPEND + ? 'append' + : 'merge'; + + $data->{edit_version} = $self->data->{_edit_version}; + + $data->{cannot_merge_recordings_reason} = $self->{cannot_merge_recordings_reason}; + return $data; }; diff --git a/lib/MusicBrainz/Server/Edit/Release/RemoveCoverArt.pm b/lib/MusicBrainz/Server/Edit/Release/RemoveCoverArt.pm index 47a50f08706..34666452d84 100644 --- a/lib/MusicBrainz/Server/Edit/Release/RemoveCoverArt.pm +++ b/lib/MusicBrainz/Server/Edit/Release/RemoveCoverArt.pm @@ -42,7 +42,7 @@ has '+data' => ( sub initialize { my ($self, %opts) = @_; my $release = $opts{release} or die 'Release missing'; - my $cover_art = $opts{to_delete} or die "Required 'to_delete' object"; + my $cover_art = $opts{to_delete} or die q(Required 'to_delete' object); my %type_map = map { $_->name => $_ } $self->c->model('CoverArtType')->get_by_name(@{ $cover_art->types }); diff --git a/lib/MusicBrainz/Server/Edit/Release/ReorderCoverArt.pm b/lib/MusicBrainz/Server/Edit/Release/ReorderCoverArt.pm index e732a9603ff..69466411197 100644 --- a/lib/MusicBrainz/Server/Edit/Release/ReorderCoverArt.pm +++ b/lib/MusicBrainz/Server/Edit/Release/ReorderCoverArt.pm @@ -78,7 +78,7 @@ sub accept { my @current_ids = sort(map { $_->id } @$current); my @edit_ids = sort(map { $_->{id} } @{ $self->data->{old} }); - if (join(",", @current_ids) ne join (",", @edit_ids)) + if (join(',', @current_ids) ne join (',', @edit_ids)) { MusicBrainz::Server::Edit::Exceptions::FailedDependency ->throw('Cover art has been added or removed since this edit was created, which conflicts ' . diff --git a/lib/MusicBrainz/Server/Edit/Release/ReorderMediums.pm b/lib/MusicBrainz/Server/Edit/Release/ReorderMediums.pm index 8fbbe9adcd4..78dda9bb481 100644 --- a/lib/MusicBrainz/Server/Edit/Release/ReorderMediums.pm +++ b/lib/MusicBrainz/Server/Edit/Release/ReorderMediums.pm @@ -90,10 +90,10 @@ sub build_display_data { map { my $entity = $loaded->{Medium}{ $_->{medium_id} }; { - old => $_->{old} ? $_->{old} : "new", + old => $_->{old} ? $_->{old} : 'new', # For some reason older edits have old as int but new as string new => $_->{new} + 0, - title => $entity ? $entity->name : "" + title => $entity ? $entity->name : '' } } sort { $a->{new} <=> $b->{new} } @@ -121,12 +121,12 @@ sub accept { my $new_positions = [values %medium_positions]; my $possible_conflicts = - $self->c->sql->select_list_of_hashes(<<~'EOSQL', $self->release_id, $new_positions); + $self->c->sql->select_list_of_hashes(<<~'SQL', $self->release_id, $new_positions); SELECT id, position FROM medium WHERE release = ? AND position = any(?) - EOSQL + SQL for my $row (@$possible_conflicts) { unless (exists $medium_positions{$row->{id}}) { diff --git a/lib/MusicBrainz/Server/Edit/ReleaseGroup/Create.pm b/lib/MusicBrainz/Server/Edit/ReleaseGroup/Create.pm index 963b4a2ea22..9295a2ae63e 100644 --- a/lib/MusicBrainz/Server/Edit/ReleaseGroup/Create.pm +++ b/lib/MusicBrainz/Server/Edit/ReleaseGroup/Create.pm @@ -91,7 +91,7 @@ sub _insert_hash return $data; } -sub edit_template_react { "AddReleaseGroup" } +sub edit_template_react { 'AddReleaseGroup' } before accept => sub { my ($self) = @_; diff --git a/lib/MusicBrainz/Server/Edit/ReleaseGroup/Delete.pm b/lib/MusicBrainz/Server/Edit/ReleaseGroup/Delete.pm index c87aa4f9435..485c6535a4a 100644 --- a/lib/MusicBrainz/Server/Edit/ReleaseGroup/Delete.pm +++ b/lib/MusicBrainz/Server/Edit/ReleaseGroup/Delete.pm @@ -9,7 +9,7 @@ with 'MusicBrainz::Server::Edit::ReleaseGroup::RelatedEntities'; with 'MusicBrainz::Server::Edit::ReleaseGroup'; sub edit_type { $EDIT_RELEASEGROUP_DELETE } -sub edit_name { N_l("Remove release group") } +sub edit_name { N_l('Remove release group') } sub _delete_model { 'ReleaseGroup' } sub release_group_id { shift->entity_id } diff --git a/lib/MusicBrainz/Server/Edit/ReleaseGroup/Edit.pm b/lib/MusicBrainz/Server/Edit/ReleaseGroup/Edit.pm index cbe674d5f39..829ed503051 100644 --- a/lib/MusicBrainz/Server/Edit/ReleaseGroup/Edit.pm +++ b/lib/MusicBrainz/Server/Edit/ReleaseGroup/Edit.pm @@ -30,7 +30,7 @@ use Scalar::Util qw( looks_like_number ); use aliased 'MusicBrainz::Server::Entity::ReleaseGroup'; -no if $] >= 5.018, warnings => "experimental::smartmatch"; +no if $] >= 5.018, warnings => 'experimental::smartmatch'; extends 'MusicBrainz::Server::Edit::Generic::Edit'; with 'MusicBrainz::Server::Edit::ReleaseGroup::RelatedEntities'; @@ -44,7 +44,7 @@ with 'MusicBrainz::Server::Edit::Role::EditArtistCredit'; with 'MusicBrainz::Server::Edit::Role::Preview'; sub edit_type { $EDIT_RELEASEGROUP_EDIT } -sub edit_name { N_l("Edit release group") } +sub edit_name { N_l('Edit release group') } sub _edit_model { 'ReleaseGroup' } sub release_group_id { shift->data->{entity}{id} } @@ -230,7 +230,7 @@ sub _edit_hash return $data; } -sub edit_template_react { "EditReleaseGroup" } +sub edit_template_react { 'EditReleaseGroup' } before accept => sub { my ($self) = @_; @@ -240,7 +240,7 @@ before accept => sub { if (my $type_id = $self->data->{new}{type_id}) { if (!$self->c->model('ReleaseGroupType')->get_by_id($type_id)) { MusicBrainz::Server::Edit::Exceptions::FailedDependency->throw( - "This edit changes the release group's primary type to a type that no longer exists." + q(This edit changes the release group's primary type to a type that no longer exists.) ); } } diff --git a/lib/MusicBrainz/Server/Edit/ReleaseGroup/Merge.pm b/lib/MusicBrainz/Server/Edit/ReleaseGroup/Merge.pm index b4a94e87a43..22b0f2b09a3 100644 --- a/lib/MusicBrainz/Server/Edit/ReleaseGroup/Merge.pm +++ b/lib/MusicBrainz/Server/Edit/ReleaseGroup/Merge.pm @@ -10,7 +10,7 @@ with 'MusicBrainz::Server::Edit::ReleaseGroup::RelatedEntities' => { }; with 'MusicBrainz::Server::Edit::ReleaseGroup'; -sub edit_name { N_l("Merge release groups") } +sub edit_name { N_l('Merge release groups') } sub edit_type { $EDIT_RELEASEGROUP_MERGE } sub _merge_model { 'ReleaseGroup' } sub release_group_ids { @{ shift->_entity_ids } } diff --git a/lib/MusicBrainz/Server/Edit/Role/IPI.pm b/lib/MusicBrainz/Server/Edit/Role/IPI.pm index 9848361ec9e..c973e1bead4 100644 --- a/lib/MusicBrainz/Server/Edit/Role/IPI.pm +++ b/lib/MusicBrainz/Server/Edit/Role/IPI.pm @@ -74,7 +74,7 @@ after post_insert => sub { editor_id => $EDITOR_MODBOT, text => $edit_note } - ); + ); } if ($label_dupe_count) { diff --git a/lib/MusicBrainz/Server/Edit/Role/ISNI.pm b/lib/MusicBrainz/Server/Edit/Role/ISNI.pm index 761d007763a..f1a88fdc9e0 100644 --- a/lib/MusicBrainz/Server/Edit/Role/ISNI.pm +++ b/lib/MusicBrainz/Server/Edit/Role/ISNI.pm @@ -74,7 +74,7 @@ after post_insert => sub { editor_id => $EDITOR_MODBOT, text => $edit_note } - ); + ); } if ($label_dupe_count) { diff --git a/lib/MusicBrainz/Server/Edit/Role/Insert.pm b/lib/MusicBrainz/Server/Edit/Role/Insert.pm index 39b6e2e5188..46fc2d9af6a 100644 --- a/lib/MusicBrainz/Server/Edit/Role/Insert.pm +++ b/lib/MusicBrainz/Server/Edit/Role/Insert.pm @@ -16,7 +16,7 @@ override 'to_hash' => sub { my $self = shift; my $hash = super(@_); - die "Role::Insert used without setting entity_id!" + die 'Role::Insert used without setting entity_id!' unless $self->entity_id; $hash->{entity_id} = $self->entity_id; $hash->{entity_gid} = $self->entity_gid if $self->entity_gid; diff --git a/lib/MusicBrainz/Server/Edit/Role/ValueSet.pm b/lib/MusicBrainz/Server/Edit/Role/ValueSet.pm index 0985f4c3d57..5fd080c4059 100644 --- a/lib/MusicBrainz/Server/Edit/Role/ValueSet.pm +++ b/lib/MusicBrainz/Server/Edit/Role/ValueSet.pm @@ -24,7 +24,7 @@ role { before initialize => sub { my ($self, %opts) = @_; - die "You must specify " . $prop_name unless defined $opts{$prop_name}; + die 'You must specify ' . $prop_name unless defined $opts{$prop_name}; }; around new_data => sub { diff --git a/lib/MusicBrainz/Server/Edit/Series/Create.pm b/lib/MusicBrainz/Server/Edit/Series/Create.pm index 7761359a6fd..06264f54838 100644 --- a/lib/MusicBrainz/Server/Edit/Series/Create.pm +++ b/lib/MusicBrainz/Server/Edit/Series/Create.pm @@ -70,7 +70,7 @@ sub build_display_data { }; } -sub edit_template_react { "AddSeries" } +sub edit_template_react { 'AddSeries' } __PACKAGE__->meta->make_immutable; no Moose; diff --git a/lib/MusicBrainz/Server/Edit/Series/Edit.pm b/lib/MusicBrainz/Server/Edit/Series/Edit.pm index fcc917db46c..289c994367f 100644 --- a/lib/MusicBrainz/Server/Edit/Series/Edit.pm +++ b/lib/MusicBrainz/Server/Edit/Series/Edit.pm @@ -17,7 +17,7 @@ use MooseX::Types::Structured qw( Dict Optional ); use aliased 'MusicBrainz::Server::Entity::Series'; -no if $] >= 5.018, warnings => "experimental::smartmatch"; +no if $] >= 5.018, warnings => 'experimental::smartmatch'; extends 'MusicBrainz::Server::Edit::Generic::Edit'; with 'MusicBrainz::Server::Edit::Series'; @@ -148,7 +148,7 @@ sub _changes_ordering_type { return ($self->data->{old}{ordering_type_id} // 0) != ($self->data->{new}{ordering_type_id} // 0); } -sub edit_template_react { "EditSeries" } +sub edit_template_react { 'EditSeries' } __PACKAGE__->meta->make_immutable; no Moose; diff --git a/lib/MusicBrainz/Server/Edit/URL/Edit.pm b/lib/MusicBrainz/Server/Edit/URL/Edit.pm index 6eabf276a42..0035a54c031 100644 --- a/lib/MusicBrainz/Server/Edit/URL/Edit.pm +++ b/lib/MusicBrainz/Server/Edit/URL/Edit.pm @@ -14,7 +14,7 @@ use MusicBrainz::Server::Edit::Utils qw( changed_display_data ); use MusicBrainz::Server::Entity::Util::JSON qw( to_json_object ); use MusicBrainz::Server::Translation qw( l N_l ); -no if $] >= 5.018, warnings => "experimental::smartmatch"; +no if $] >= 5.018, warnings => 'experimental::smartmatch'; extends 'MusicBrainz::Server::Edit::Generic::Edit'; with 'MusicBrainz::Server::Edit::URL'; diff --git a/lib/MusicBrainz/Server/Edit/WikiDoc/Change.pm b/lib/MusicBrainz/Server/Edit/WikiDoc/Change.pm index 64683f4c4ed..1682a94ab6e 100644 --- a/lib/MusicBrainz/Server/Edit/WikiDoc/Change.pm +++ b/lib/MusicBrainz/Server/Edit/WikiDoc/Change.pm @@ -14,7 +14,7 @@ with 'MusicBrainz::Server::Edit::WikiDoc'; with 'MusicBrainz::Server::Edit::Role::AlwaysAutoEdit'; sub edit_type { $EDIT_WIKIDOC_CHANGE } -sub edit_name { N_l("Change WikiDoc") } +sub edit_name { N_l('Change WikiDoc') } sub edit_kind { 'other' } sub edit_template_react { 'ChangeWikiDoc' } diff --git a/lib/MusicBrainz/Server/Edit/Work/Create.pm b/lib/MusicBrainz/Server/Edit/Work/Create.pm index 63a336c3985..012b15e7452 100644 --- a/lib/MusicBrainz/Server/Edit/Work/Create.pm +++ b/lib/MusicBrainz/Server/Edit/Work/Create.pm @@ -5,7 +5,7 @@ use MooseX::Types::Moose qw( ArrayRef Int Maybe Str ); use MooseX::Types::Structured qw( Dict Optional ); use MusicBrainz::Server::Constants qw( $EDIT_WORK_CREATE ); use MusicBrainz::Server::Edit::Types qw( Nullable ); -use MusicBrainz::Server::Entity::Util::JSON qw( to_json_object ); +use MusicBrainz::Server::Entity::Util::JSON qw( to_json_array to_json_object ); use MusicBrainz::Server::Translation qw( l N_l ); extends 'MusicBrainz::Server::Edit::Generic::Create'; @@ -71,22 +71,13 @@ sub build_display_data if (defined $data->{language_id}) { my $language = $loaded->{Language}{$data->{language_id}}; - if ($language->iso_code_3 eq "zxx") { - $language->name(l("[No lyrics]")); - } $display->{language} = to_json_object($language); } if (defined $data->{languages}) { - $display->{languages} = [ - map { - my $language = $loaded->{Language}{$_}; - if ($language && $language->iso_code_3 eq "zxx") { - $language->name(l("[No lyrics]")); - } - $language ? $language->name : l('[removed]') - } @{ $data->{languages} } - ]; + $display->{languages} = to_json_array([ + map { $loaded->{Language}{$_} } @{ $data->{languages} } + ]); } return $display; diff --git a/lib/MusicBrainz/Server/Edit/Work/Edit.pm b/lib/MusicBrainz/Server/Edit/Work/Edit.pm index deed486578f..f3c4b13b025 100644 --- a/lib/MusicBrainz/Server/Edit/Work/Edit.pm +++ b/lib/MusicBrainz/Server/Edit/Work/Edit.pm @@ -16,7 +16,7 @@ use MusicBrainz::Server::Edit::Utils qw( changed_display_data ); use MusicBrainz::Server::Edit::Exceptions; -use MusicBrainz::Server::Entity::Util::JSON qw( to_json_object ); +use MusicBrainz::Server::Entity::Util::JSON qw( to_json_array to_json_object ); use MusicBrainz::Server::Translation qw( l N_l ); use Set::Scalar; @@ -177,14 +177,8 @@ sub build_display_data if (exists $data->{new}{languages}) { for my $side (qw( old new )) { - $display->{languages}{$side} = [ - map { - my $language = $loaded->{Language}{$_}; - if ($language && $language->iso_code_3 eq "zxx") { - $language->name(l("[No lyrics]")); - } - $language ? $language->name : l('[removed]'); - } @{ $data->{$side}{languages} // [] } + $display->{languages}{$side} = to_json_array[ + map { $loaded->{Language}{$_} } @{ $data->{$side}{languages} // [] } ]; } } diff --git a/lib/MusicBrainz/Server/Edit/Work/Merge.pm b/lib/MusicBrainz/Server/Edit/Work/Merge.pm index 72a90a6e45e..5bfd007fb7c 100644 --- a/lib/MusicBrainz/Server/Edit/Work/Merge.pm +++ b/lib/MusicBrainz/Server/Edit/Work/Merge.pm @@ -9,7 +9,7 @@ with 'MusicBrainz::Server::Edit::Work::RelatedEntities'; with 'MusicBrainz::Server::Edit::Work'; sub edit_type { $EDIT_WORK_MERGE } -sub edit_name { N_l("Merge works") } +sub edit_name { N_l('Merge works') } sub work_ids { @{ shift->_entity_ids } } sub _merge_model { 'Work' } diff --git a/lib/MusicBrainz/Server/Edit/Work/RemoveISWC.pm b/lib/MusicBrainz/Server/Edit/Work/RemoveISWC.pm index eeb2d3bc062..3fd1d5c2102 100644 --- a/lib/MusicBrainz/Server/Edit/Work/RemoveISWC.pm +++ b/lib/MusicBrainz/Server/Edit/Work/RemoveISWC.pm @@ -76,7 +76,7 @@ sub build_display_data { sub initialize { my ($self, %opts) = @_; - my $iswc = $opts{iswc} or die "Required 'iswc' object missing"; + my $iswc = $opts{iswc} or die q(Required 'iswc' object missing); $self->c->model('Work')->load($iswc) unless defined $iswc->work; $self->data({ iswc => { diff --git a/lib/MusicBrainz/Server/EditQueue.pm b/lib/MusicBrainz/Server/EditQueue.pm index e8edda2fc11..e2bbf1b7274 100644 --- a/lib/MusicBrainz/Server/EditQueue.pm +++ b/lib/MusicBrainz/Server/EditQueue.pm @@ -58,7 +58,7 @@ sub process_edits $self->log->debug("Selecting eligible edit IDs\n"); my $interval = DateTime::Format::Pg->format_interval($MINIMUM_RESPONSE_PERIOD); - my $edit_ids = $sql->select_single_column_array(" + my $edit_ids = $sql->select_single_column_array(' SELECT id FROM edit LEFT JOIN ( @@ -74,7 +74,7 @@ sub process_edits AND (expire_time < now() OR (vote_info.yes_votes >= ? AND vote_info.no_votes = 0) OR (vote_info.no_votes >= ? AND vote_info.yes_votes = 0 AND vote_info.first_no_vote < NOW() - interval ?)) - ORDER BY id", + ORDER BY id', $VOTE_NO, $VOTE_YES, $VOTE_NO, $STATUS_OPEN, $REQUIRED_VOTES, $REQUIRED_VOTES, $interval); @@ -84,7 +84,7 @@ sub process_edits capture_exceptions(sub { my $action; Sql::run_in_transaction(sub { - $action = $self->_process_edit($edit_id) || "no change" + $action = $self->_process_edit($edit_id) || 'no change' }, $sql); $stats{$action} += 1; }, sub { @@ -164,7 +164,7 @@ sub _process_open_edit $edit->id, { editor_id => $EDITOR_MODBOT, - text => "This edit failed because it affected high quality data and did not receive any votes." + text => 'This edit failed because it affected high quality data and did not receive any votes.' } ); $self->c->model('Edit')->reject($edit, $status); diff --git a/lib/MusicBrainz/Server/EditSearch/Predicate/AppliedEdits.pm b/lib/MusicBrainz/Server/EditSearch/Predicate/AppliedEdits.pm index 30f4b83cb5a..98e144d8f80 100644 --- a/lib/MusicBrainz/Server/EditSearch/Predicate/AppliedEdits.pm +++ b/lib/MusicBrainz/Server/EditSearch/Predicate/AppliedEdits.pm @@ -12,7 +12,7 @@ extends 'MusicBrainz::Server::EditSearch::Predicate::ID'; sub combine_with_query { my ($self, $query) = @_; - my $subquery = "(SELECT COUNT(*) FROM edit H WHERE H.editor = edit.editor AND H.status = ?)"; + my $subquery = '(SELECT COUNT(*) FROM edit H WHERE H.editor = edit.editor AND H.status = ?)'; my $sql; given ($self->operator) { diff --git a/lib/MusicBrainz/Server/EditSearch/Predicate/Date.pm b/lib/MusicBrainz/Server/EditSearch/Predicate/Date.pm index c3f5f710e4d..fc9b84d9bd9 100644 --- a/lib/MusicBrainz/Server/EditSearch/Predicate/Date.pm +++ b/lib/MusicBrainz/Server/EditSearch/Predicate/Date.pm @@ -22,8 +22,8 @@ override combine_with_query => sub { if ($self->operator eq '=') { $query->add_where([ 'edit.' . $self->field_name . ' BETWEEN '. - "date_trunc('day', ? AT TIME ZONE 'UTC') AND " . - "date_trunc('day', ? AT TIME ZONE 'UTC') + interval '1 day'", + q(date_trunc('day', ? AT TIME ZONE 'UTC') AND ) . + q(date_trunc('day', ? AT TIME ZONE 'UTC') + interval '1 day'), [ $self->sql_arguments->[0], @{ $self->sql_arguments } ] ]); } diff --git a/lib/MusicBrainz/Server/EditSearch/Predicate/EditorFlag.pm b/lib/MusicBrainz/Server/EditSearch/Predicate/EditorFlag.pm index 1c35b2cff2c..c65a404d0e2 100644 --- a/lib/MusicBrainz/Server/EditSearch/Predicate/EditorFlag.pm +++ b/lib/MusicBrainz/Server/EditSearch/Predicate/EditorFlag.pm @@ -34,10 +34,10 @@ sub combine_with_query { return unless @flags; $query->add_where([ - "EXISTS (SELECT 1 FROM editor WHERE id = edit.editor AND privs & (" . join(" | ", map { "?::integer" } @flags) . ") " . + 'EXISTS (SELECT 1 FROM editor WHERE id = edit.editor AND privs & (' . join(' | ', map { '?::integer' } @flags) . ') ' . ($self->operator eq '=' ? '!=' : $self->operator eq '!=' ? '=' : die 'Shouldnt get here') - . " 0)", + . ' 0)', \@flags, ]); } diff --git a/lib/MusicBrainz/Server/EditSearch/Predicate/ID.pm b/lib/MusicBrainz/Server/EditSearch/Predicate/ID.pm index fe34b5fabb5..416df4896fc 100644 --- a/lib/MusicBrainz/Server/EditSearch/Predicate/ID.pm +++ b/lib/MusicBrainz/Server/EditSearch/Predicate/ID.pm @@ -4,7 +4,7 @@ use MusicBrainz::Server::Validation qw( is_database_row_id is_integer ); use namespace::autoclean; use feature 'switch'; -no if $] >= 5.018, warnings => "experimental::smartmatch"; +no if $] >= 5.018, warnings => 'experimental::smartmatch'; with 'MusicBrainz::Server::EditSearch::Predicate'; diff --git a/lib/MusicBrainz/Server/EditSearch/Predicate/ReleaseLanguage.pm b/lib/MusicBrainz/Server/EditSearch/Predicate/ReleaseLanguage.pm index 31553b2087c..0e2aee3bd4b 100644 --- a/lib/MusicBrainz/Server/EditSearch/Predicate/ReleaseLanguage.pm +++ b/lib/MusicBrainz/Server/EditSearch/Predicate/ReleaseLanguage.pm @@ -10,7 +10,7 @@ sub combine_with_query { $query->add_where([ 'EXISTS (SELECT 1 FROM edit_release A JOIN release B ON A.release = B.id WHERE A.edit = edit.id AND ' . - join(' ', "B.language", $self->operator, + join(' ', 'B.language', $self->operator, $self->operator eq '=' ? 'any(?)' : $self->operator eq '!=' ? 'all(?)' : die q(Shouldn't get here)) . ')', $self->sql_arguments diff --git a/lib/MusicBrainz/Server/EditSearch/Predicate/ReleaseQuality.pm b/lib/MusicBrainz/Server/EditSearch/Predicate/ReleaseQuality.pm index e776075b185..1b568b8f6fd 100644 --- a/lib/MusicBrainz/Server/EditSearch/Predicate/ReleaseQuality.pm +++ b/lib/MusicBrainz/Server/EditSearch/Predicate/ReleaseQuality.pm @@ -10,7 +10,7 @@ sub combine_with_query { $query->add_where([ 'EXISTS (SELECT 1 FROM edit_release A JOIN release B ON A.release = B.id WHERE A.edit = edit.id AND ' . - join(' ', "B.quality", $self->operator, + join(' ', 'B.quality', $self->operator, $self->operator eq '=' ? 'any(?)' : $self->operator eq '!=' ? 'all(?)' : die q(Shouldn't get here)) . ')', $self->sql_arguments diff --git a/lib/MusicBrainz/Server/EditSearch/Predicate/Role/EntityArea.pm b/lib/MusicBrainz/Server/EditSearch/Predicate/Role/EntityArea.pm index 0b12e806b5d..e7255a8ac44 100644 --- a/lib/MusicBrainz/Server/EditSearch/Predicate/Role/EntityArea.pm +++ b/lib/MusicBrainz/Server/EditSearch/Predicate/Role/EntityArea.pm @@ -41,7 +41,7 @@ role { $clause .= "JOIN $extra_join C ON B.$type_col = C.$extra_col "; } - $clause .= "WHERE A.edit = edit.id AND "; + $clause .= 'WHERE A.edit = edit.id AND '; $query->add_where([ $clause . join(' ', "$final_table_alias.$column", $self->operator, diff --git a/lib/MusicBrainz/Server/EditSearch/Predicate/Role/Subscribed.pm b/lib/MusicBrainz/Server/EditSearch/Predicate/Role/Subscribed.pm index cfb88dd8a5b..9cc2935585b 100644 --- a/lib/MusicBrainz/Server/EditSearch/Predicate/Role/Subscribed.pm +++ b/lib/MusicBrainz/Server/EditSearch/Predicate/Role/Subscribed.pm @@ -3,7 +3,7 @@ use 5.10.0; use MooseX::Role::Parameterized; use namespace::autoclean; -no if $] >= 5.018, warnings => "experimental::smartmatch"; +no if $] >= 5.018, warnings => 'experimental::smartmatch'; parameter type => ( isa => 'Str', diff --git a/lib/MusicBrainz/Server/EditSearch/Predicate/Role/User.pm b/lib/MusicBrainz/Server/EditSearch/Predicate/Role/User.pm index 475c8228310..ce889de24ea 100644 --- a/lib/MusicBrainz/Server/EditSearch/Predicate/Role/User.pm +++ b/lib/MusicBrainz/Server/EditSearch/Predicate/Role/User.pm @@ -49,7 +49,7 @@ role { $query->add_where([ $sql, [ $self->user->id ] ]); } elsif ($self->operator eq 'limited') { # Please keep the logic in sync with Report::LimitedEditors and Entity::Editor - $sql = " + $sql = q{ edit.editor != ? AND ( NOT EXISTS ( @@ -75,7 +75,7 @@ role { AND member_since > NOW() - INTERVAL '2 weeks' ) ) - "; + }; $query->add_where([ $sql, [ $EDITOR_MODBOT, $STATUS_APPLIED ] ]); } elsif ($self->operator eq 'not_edit_author') { $query->add_where([ diff --git a/lib/MusicBrainz/Server/EditSearch/Predicate/VoteCount.pm b/lib/MusicBrainz/Server/EditSearch/Predicate/VoteCount.pm index 147ce429b6b..0629467d8de 100644 --- a/lib/MusicBrainz/Server/EditSearch/Predicate/VoteCount.pm +++ b/lib/MusicBrainz/Server/EditSearch/Predicate/VoteCount.pm @@ -16,12 +16,12 @@ has vote => ( sub combine_with_query { my ($self, $query) = @_; - my $sql = "COALESCE(( + my $sql = 'COALESCE(( SELECT SUM(CASE WHEN vote = ? THEN 1 ELSE 0 END) FROM vote WHERE superseded = FALSE AND edit = edit.id GROUP BY edit - ), 0)"; + ), 0)'; if ($self->operator eq 'BETWEEN') { $sql .= ' BETWEEN SYMMETRIC ? AND ?'; diff --git a/lib/MusicBrainz/Server/EditSearch/Predicate/Voter.pm b/lib/MusicBrainz/Server/EditSearch/Predicate/Voter.pm index 120de6bba9c..fa8b9936882 100644 --- a/lib/MusicBrainz/Server/EditSearch/Predicate/Voter.pm +++ b/lib/MusicBrainz/Server/EditSearch/Predicate/Voter.pm @@ -45,17 +45,17 @@ sub voter_clause { my $sql = 'vote.editor '; if ($self->operator eq 'subscribed') { - $sql .= "IN ( + $sql .= 'IN ( SELECT subscribed_editor FROM editor_subscribe_editor WHERE editor = ? - )"; + )'; } elsif ($self->operator eq 'not_subscribed') { - $sql .= "NOT IN ( + $sql .= 'NOT IN ( SELECT subscribed_editor FROM editor_subscribe_editor WHERE editor = ? - )"; + )'; } elsif ($self->operator eq '!=' || $self->operator eq 'not_me') { $sql .= '!= ?'; } else { @@ -84,8 +84,8 @@ sub combine_with_query { if (@votes && $no_vote_option) { $query->add_where([ join(' OR ', - sprintf($sql, "vote.vote = any(?)"), - sprintf("NOT $sql", "TRUE") + sprintf($sql, 'vote.vote = any(?)'), + sprintf("NOT $sql", 'TRUE') ), [ $voter_id, @@ -95,7 +95,7 @@ sub combine_with_query { ]); } elsif (@votes && !$no_vote_option) { $query->add_where([ - sprintf($sql, "vote.vote = any(?)"), + sprintf($sql, 'vote.vote = any(?)'), [ $voter_id, \@votes, @@ -103,7 +103,7 @@ sub combine_with_query { ]); } elsif (!@votes && $no_vote_option) { $query->add_where([ - sprintf("NOT $sql", "TRUE"), + sprintf("NOT $sql", 'TRUE'), [ $voter_id, ] diff --git a/lib/MusicBrainz/Server/Email.pm b/lib/MusicBrainz/Server/Email.pm index b222060f984..1058fb3a1e3 100644 --- a/lib/MusicBrainz/Server/Email.pm +++ b/lib/MusicBrainz/Server/Email.pm @@ -43,7 +43,7 @@ sub _encode_header { my $header = shift; if ($header =~ /[^\x20-\x7E]/) { - return encode("MIME-Q", $header); + return encode('MIME-Q', $header); } else { return $header; } @@ -70,16 +70,16 @@ sub _create_email my ($self, $headers, $body) = @_; # Add a Message-Id header if there isn't one. - if ( !(grep { "$_" eq "Message-Id" } @$headers) ) { + if ( !(grep { "$_" eq 'Message-Id' } @$headers) ) { push @$headers, 'Message-Id', _message_id('uncategorized-email-%d', time()); } return Email::MIME->create( header => $headers, body => encode('utf-8', $body), attributes => { - content_type => "text/plain", - charset => "UTF-8", - encoding => "quoted-printable", + content_type => 'text/plain', + charset => 'UTF-8', + encoding => 'quoted-printable', }); } @@ -87,10 +87,10 @@ sub _create_message_to_editor_email { my ($self, %opts) = @_; - my $from = $opts{from} or die "Missing 'from' argument"; - my $to = $opts{to} or die "Missing 'to' argument"; - my $subject = $opts{subject} or die "Missing 'subject' argument"; - my $message = $opts{message} or die "Missing 'message' argument"; + my $from = $opts{from} or die q(Missing 'from' argument); + my $to = $opts{to} or die q(Missing 'to' argument); + my $subject = $opts{subject} or die q(Missing 'subject' argument); + my $message = $opts{message} or die q(Missing 'message' argument); my $time = $opts{time} || time(); @@ -272,9 +272,9 @@ sub _create_no_vote_email { my ($self, %opts) = @_; - my $edit_id = $opts{edit_id} or die "Missing 'edit_id' argument"; - my $voter = $opts{voter} or die "Missing 'voter' argument"; - my $editor = $opts{editor} or die "Missing 'editor' argument"; + my $edit_id = $opts{edit_id} or die q(Missing 'edit_id' argument); + my $voter = $opts{voter} or die q(Missing 'voter' argument); + my $editor = $opts{editor} or die q(Missing 'editor' argument); my @headers = ( 'To' => _user_address($opts{editor}), @@ -363,10 +363,10 @@ sub _create_edit_note_email { my ($self, %opts) = @_; - my $from_editor = $opts{from_editor} or die "Missing 'from_editor' argument"; - my $edit_id = $opts{edit_id} or die "Missing 'edit_id' argument"; - my $editor = $opts{editor} or die "Missing 'editor' argument"; - my $note_text = $opts{note_text} or die "Missing 'note_text' argument"; + my $from_editor = $opts{from_editor} or die q(Missing 'from_editor' argument); + my $edit_id = $opts{edit_id} or die q(Missing 'edit_id' argument); + my $editor = $opts{editor} or die q(Missing 'editor' argument); + my $note_text = $opts{note_text} or die q(Missing 'note_text' argument); my $own_edit = $opts{own_edit}; if ($from_editor->id == $EDITOR_MODBOT) { @@ -528,42 +528,42 @@ sub send_election_nomination { my ($self, $election) = @_; - return $self->_send_election_mail("Nomination", $election); + return $self->_send_election_mail('Nomination', $election); } sub send_election_voting_open { my ($self, $election) = @_; - return $self->_send_election_mail("VotingOpen", $election); + return $self->_send_election_mail('VotingOpen', $election); } sub send_election_timeout { my ($self, $election) = @_; - return $self->_send_election_mail("Timeout", $election); + return $self->_send_election_mail('Timeout', $election); } sub send_election_canceled { my ($self, $election) = @_; - return $self->_send_election_mail("Canceled", $election); + return $self->_send_election_mail('Canceled', $election); } sub send_election_accepted { my ($self, $election) = @_; - return $self->_send_election_mail("Accepted", $election); + return $self->_send_election_mail('Accepted', $election); } sub send_election_rejected { my ($self, $election) = @_; - return $self->_send_election_mail("Rejected", $election); + return $self->_send_election_mail('Rejected', $election); } sub send_edit_note @@ -611,7 +611,7 @@ sub send_editor_report { if ($opts{reveal_address}) { $body .= "You can reply to this message directly.\n"; } else { - $body .= "The reporter chose not to reveal their email address. "; + $body .= 'The reporter chose not to reveal their email address. '; $body .= "You’ll have to contact them through their user page if necessary.\n"; } diff --git a/lib/MusicBrainz/Server/Email/Role.pm b/lib/MusicBrainz/Server/Email/Role.pm index 372216e1ea0..9c2d6659168 100644 --- a/lib/MusicBrainz/Server/Email/Role.pm +++ b/lib/MusicBrainz/Server/Email/Role.pm @@ -63,9 +63,9 @@ sub create_email { header => \@headers, body => encode('utf-8', $self->body), attributes => { - content_type => "text/plain", - charset => "UTF-8", - encoding => "quoted-printable", + content_type => 'text/plain', + charset => 'UTF-8', + encoding => 'quoted-printable', } ); } diff --git a/lib/MusicBrainz/Server/Entity/Artwork.pm b/lib/MusicBrainz/Server/Entity/Artwork.pm index e8a63f13dbb..31595ab7d4b 100644 --- a/lib/MusicBrainz/Server/Entity/Artwork.pm +++ b/lib/MusicBrainz/Server/Entity/Artwork.pm @@ -109,7 +109,7 @@ sub filename return undef unless $self->release->gid && $self->suffix; - return sprintf("mbid-%s-%d.%s", $self->release->gid, $self->id, $self->suffix); + return sprintf('mbid-%s-%d.%s', $self->release->gid, $self->id, $self->suffix); } sub image { diff --git a/lib/MusicBrainz/Server/Entity/Barcode.pm b/lib/MusicBrainz/Server/Entity/Barcode.pm index 9472d94a7c2..b1a88ed0ac4 100644 --- a/lib/MusicBrainz/Server/Entity/Barcode.pm +++ b/lib/MusicBrainz/Server/Entity/Barcode.pm @@ -39,7 +39,7 @@ around BUILDARGS => sub { sub new_from_row { my ($class, $row, $prefix) = @_; - return $class->new($row->{$prefix."barcode"}); + return $class->new($row->{$prefix.'barcode'}); } __PACKAGE__->meta->make_immutable; diff --git a/lib/MusicBrainz/Server/Entity/CDTOC.pm b/lib/MusicBrainz/Server/Entity/CDTOC.pm index 426c92d6eef..78d62284a18 100644 --- a/lib/MusicBrainz/Server/Entity/CDTOC.pm +++ b/lib/MusicBrainz/Server/Entity/CDTOC.pm @@ -103,14 +103,14 @@ sub new_from_toc return unless $leadout_offset > $track_offsets[-1]; - my $message = ""; - $message .= sprintf("%02X", $first_track); - $message .= sprintf("%02X", $last_track); - $message .= sprintf("%08X", $leadout_offset); - $message .= sprintf("%08X", ($track_offsets[$_-1] || 0)) for 1 .. 99; + my $message = ''; + $message .= sprintf('%02X', $first_track); + $message .= sprintf('%02X', $last_track); + $message .= sprintf('%08X', $leadout_offset); + $message .= sprintf('%08X', ($track_offsets[$_-1] || 0)) for 1 .. 99; my $discid = sha1_base64($message); - $discid .= "="; # bring up to 28 characters, like the client + $discid .= '='; # bring up to 28 characters, like the client $discid =~ tr[+/=][._-]; my @lengths = map { @@ -139,7 +139,7 @@ sub _compute_freedb_id my $t = int($frames[-1]/75) - int($frames[0]/75); - sprintf "%08x", ((($n % 0xFF) << 24) | ($t << 8) | $tracks); + sprintf '%08x', ((($n % 0xFF) << 24) | ($t << 8) | $tracks); } with 'MusicBrainz::Server::Entity::Role::TOC'; diff --git a/lib/MusicBrainz/Server/Entity/CommonsImage.pm b/lib/MusicBrainz/Server/Entity/CommonsImage.pm index 3ab50c22912..b07c205d0f8 100644 --- a/lib/MusicBrainz/Server/Entity/CommonsImage.pm +++ b/lib/MusicBrainz/Server/Entity/CommonsImage.pm @@ -20,7 +20,7 @@ has 'thumb_url' => ( sub page_url { my $self = shift; - return sprintf "https://commons.wikimedia.org/wiki/%s", $self->title; + return sprintf 'https://commons.wikimedia.org/wiki/%s', $self->title; } sub TO_JSON { diff --git a/lib/MusicBrainz/Server/Entity/EditNote.pm b/lib/MusicBrainz/Server/Entity/EditNote.pm index 42aff0d2bc2..a54db248049 100644 --- a/lib/MusicBrainz/Server/Entity/EditNote.pm +++ b/lib/MusicBrainz/Server/Entity/EditNote.pm @@ -9,6 +9,7 @@ use namespace::autoclean; use MusicBrainz::Server::Constants qw( $EDITOR_MODBOT ); use MusicBrainz::Server::Data::Utils qw( datetime_to_iso8601 ); use MusicBrainz::Server::Entity::Types; +use MusicBrainz::Server::Entity::Util::JSON qw( to_json_object ); use MusicBrainz::Server::Filters qw( format_editnote ); use MusicBrainz::Server::Types qw( DateTime ); @@ -125,7 +126,7 @@ around TO_JSON => sub { my $json = $self->$orig; $json->{editor_id} = $self->editor_id + 0; - $json->{editor} = $self->editor->TO_JSON; + $json->{editor} = to_json_object($self->editor); $json->{post_time} = datetime_to_iso8601($self->post_time); $json->{formatted_text} = $self->editor_id == $EDITOR_MODBOT ? $self->localize : format_editnote($self->text); diff --git a/lib/MusicBrainz/Server/Entity/ISNI.pm b/lib/MusicBrainz/Server/Entity/ISNI.pm index e13b875a518..fffd471b4ab 100644 --- a/lib/MusicBrainz/Server/Entity/ISNI.pm +++ b/lib/MusicBrainz/Server/Entity/ISNI.pm @@ -11,7 +11,7 @@ has 'isni' => ( sub url { my ($self) = @_; - return "http://www.isni.org/" . $self->isni; + return 'http://www.isni.org/' . $self->isni; } sub TO_JSON { diff --git a/lib/MusicBrainz/Server/Entity/Label.pm b/lib/MusicBrainz/Server/Entity/Label.pm index 954db49e26f..beb65975193 100644 --- a/lib/MusicBrainz/Server/Entity/Label.pm +++ b/lib/MusicBrainz/Server/Entity/Label.pm @@ -29,9 +29,9 @@ sub format_label_code { my $self = shift; if ($self->label_code) { - return sprintf "LC %05d", $self->label_code; + return sprintf 'LC %05d', $self->label_code; } - return ""; + return ''; } sub is_special_purpose { diff --git a/lib/MusicBrainz/Server/Entity/Relationship.pm b/lib/MusicBrainz/Server/Entity/Relationship.pm index 1d99e039b5a..7c87be7cee0 100644 --- a/lib/MusicBrainz/Server/Entity/Relationship.pm +++ b/lib/MusicBrainz/Server/Entity/Relationship.pm @@ -223,7 +223,7 @@ sub _interpolate { my ($name, $alt) = @_; # placeholders for entity names which are processed elsewhere - return "{$name}" if $name eq "entity0" || $name eq "entity1"; + return "{$name}" if $name eq 'entity0' || $name eq 'entity1'; delete $extra_attrs{$name} unless $for_grouping; if (!$alt) { diff --git a/lib/MusicBrainz/Server/Entity/Release.pm b/lib/MusicBrainz/Server/Entity/Release.pm index 1bb9abc5174..56bbfc096b5 100644 --- a/lib/MusicBrainz/Server/Entity/Release.pm +++ b/lib/MusicBrainz/Server/Entity/Release.pm @@ -169,19 +169,19 @@ sub combined_track_count { my ($self) = @_; my @mediums = @{$self->mediums}; - return "" if !@mediums; + return '' if !@mediums; my @counts; foreach my $medium (@mediums) { push @counts, $medium->track_count; } - return join " + ", @counts; + return join ' + ', @counts; } sub combined_format_name { my ($self) = @_; my @mediums = @{$self->mediums}; - return "" if !@mediums; + return '' if !@mediums; return combined_medium_format_name(map { $_->l_format_name() || lp('(unknown)', 'medium format') } @mediums ); } diff --git a/lib/MusicBrainz/Server/Entity/Role/OptionsTree.pm b/lib/MusicBrainz/Server/Entity/Role/OptionsTree.pm index e8b0296314f..a4705b53ce8 100644 --- a/lib/MusicBrainz/Server/Entity/Role/OptionsTree.pm +++ b/lib/MusicBrainz/Server/Entity/Role/OptionsTree.pm @@ -71,11 +71,11 @@ role { method sorted_children => sub { my ($self, $coll) = @_; - $coll or die "No collator given"; + $coll or die 'No collator given'; my $attr = $params->sort_criterion; return sort_by { - (sprintf "%+012d", $_->child_order) . + (sprintf '%+012d', $_->child_order) . $coll->getSortKey($_->$attr) } $self->all_children; diff --git a/lib/MusicBrainz/Server/Entity/Series.pm b/lib/MusicBrainz/Server/Entity/Series.pm index 5aac1bed756..f4f83a082ff 100644 --- a/lib/MusicBrainz/Server/Entity/Series.pm +++ b/lib/MusicBrainz/Server/Entity/Series.pm @@ -3,7 +3,7 @@ package MusicBrainz::Server::Entity::Series; use Moose; use MusicBrainz::Server::Entity::Types; -no if $] >= 5.018, warnings => "experimental::smartmatch"; +no if $] >= 5.018, warnings => 'experimental::smartmatch'; extends 'MusicBrainz::Server::Entity::CoreEntity'; with 'MusicBrainz::Server::Entity::Role::Taggable'; diff --git a/lib/MusicBrainz/Server/Entity/URL.pm b/lib/MusicBrainz/Server/Entity/URL.pm index 0df46344d00..5783cf25a73 100644 --- a/lib/MusicBrainz/Server/Entity/URL.pm +++ b/lib/MusicBrainz/Server/Entity/URL.pm @@ -111,7 +111,7 @@ sub href_url { if ($self->url_is_scheme_independent) { $url = $url->clone; - $url->scheme(""); + $url->scheme(''); } return $url->as_string; diff --git a/lib/MusicBrainz/Server/Entity/URL/CDJapan.pm b/lib/MusicBrainz/Server/Entity/URL/CDJapan.pm index c7790655998..de803b3f263 100644 --- a/lib/MusicBrainz/Server/Entity/URL/CDJapan.pm +++ b/lib/MusicBrainz/Server/Entity/URL/CDJapan.pm @@ -5,10 +5,6 @@ use Moose; extends 'MusicBrainz::Server::Entity::URL'; with 'MusicBrainz::Server::Entity::URL::Sidebar'; -override href_url => sub { - shift->url->as_string =~ s{^http:}{https:}r; -}; - sub sidebar_name { 'CDJapan' } __PACKAGE__->meta->make_immutable; diff --git a/lib/MusicBrainz/Server/Entity/URL/Tidal.pm b/lib/MusicBrainz/Server/Entity/URL/Tidal.pm new file mode 100644 index 00000000000..3e94b4d6084 --- /dev/null +++ b/lib/MusicBrainz/Server/Entity/URL/Tidal.pm @@ -0,0 +1,24 @@ +package MusicBrainz::Server::Entity::URL::Tidal; + +use Moose; + +extends 'MusicBrainz::Server::Entity::URL'; +with 'MusicBrainz::Server::Entity::URL::Sidebar'; + +sub sidebar_name { 'Tidal' }; + +sub url_is_scheme_independent { 1 } + +__PACKAGE__->meta->make_immutable; +no Moose; +1; + +=head1 COPYRIGHT AND LICENSE + +Copyright (C) 2020 MetaBrainz Foundation + +This file is part of MusicBrainz, the open internet music database, +and is licensed under the GPL version 2, or (at your option) any +later version: http://www.gnu.org/licenses/gpl-2.0.txt + +=cut diff --git a/lib/MusicBrainz/Server/Entity/URL/VimeoOnDemand.pm b/lib/MusicBrainz/Server/Entity/URL/VimeoOnDemand.pm new file mode 100644 index 00000000000..618f6b315e2 --- /dev/null +++ b/lib/MusicBrainz/Server/Entity/URL/VimeoOnDemand.pm @@ -0,0 +1,22 @@ +package MusicBrainz::Server::Entity::URL::VimeoOnDemand; + +use Moose; + +extends 'MusicBrainz::Server::Entity::URL'; +with 'MusicBrainz::Server::Entity::URL::Sidebar'; + +sub sidebar_name { 'Vimeo On Demand' } + +__PACKAGE__->meta->make_immutable; +no Moose; +1; + +=head1 COPYRIGHT AND LICENSE + +Copyright (C) 2021 MetaBrainz Foundation + +This file is part of MusicBrainz, the open internet music database, +and is licensed under the GPL version 2, or (at your option) any +later version: http://www.gnu.org/licenses/gpl-2.0.txt + +=cut diff --git a/lib/MusicBrainz/Server/Entity/Util/MediumFormat.pm b/lib/MusicBrainz/Server/Entity/Util/MediumFormat.pm index e51f996ed61..d21c5dad5a6 100644 --- a/lib/MusicBrainz/Server/Entity/Util/MediumFormat.pm +++ b/lib/MusicBrainz/Server/Entity/Util/MediumFormat.pm @@ -10,7 +10,7 @@ use Sub::Exporter -setup => { exports => [qw( sub combined_medium_format_name { my (@medium_format_names) = @_; - return "" if !@medium_format_names; + return '' if !@medium_format_names; my %formats_count; my @formats_order; foreach my $format_name (@medium_format_names) { @@ -30,7 +30,7 @@ sub combined_medium_format_name } push @formats, $format; } - return join " + ", @formats; + return join ' + ', @formats; } 1; diff --git a/lib/MusicBrainz/Server/ExternalUtils.pm b/lib/MusicBrainz/Server/ExternalUtils.pm index d213063519d..58ebdb9926e 100644 --- a/lib/MusicBrainz/Server/ExternalUtils.pm +++ b/lib/MusicBrainz/Server/ExternalUtils.pm @@ -17,7 +17,7 @@ sub get_chunked_with_retry { # delayed, and the LWP timeout fires causing the response to only be # partially completed. In this case, the X-Died header is set. If this # happens, we retry the request. - my $x_died = $response->headers->header("X-Died"); + my $x_died = $response->headers->header('X-Died'); $response = undef if ($x_died && $x_died =~ /read timeout/); } return $response; diff --git a/lib/MusicBrainz/Server/Filters.pm b/lib/MusicBrainz/Server/Filters.pm index 8cbe61ce1f4..1b05884829c 100644 --- a/lib/MusicBrainz/Server/Filters.pm +++ b/lib/MusicBrainz/Server/Filters.pm @@ -50,7 +50,7 @@ sub format_wikitext 'utf-8', Text::WikiFormat::format( encode('utf-8' => $text), {}, { - prefix => "//wiki.musicbrainz.org/", + prefix => '//wiki.musicbrainz.org/', extended => 1, nofollow_extended => 1, absolute_links => 1, @@ -81,7 +81,7 @@ sub _display_trimmed { # shorten url's that are longer 50 characters my $display_url = length($url) > 50 - ? encode_square_brackets(encode_entities(substr($url, 0, 48))) . "…" + ? encode_square_brackets(encode_entities(substr($url, 0, 48))) . '…' : $encoded_url; $encoded_url = "http://$encoded_url" diff --git a/lib/MusicBrainz/Server/Form.pm b/lib/MusicBrainz/Server/Form.pm index e7028c4ba7b..da67b2f22e7 100644 --- a/lib/MusicBrainz/Server/Form.pm +++ b/lib/MusicBrainz/Server/Form.pm @@ -18,7 +18,7 @@ sub _init_from_object $node ||= $self; return unless $item; - warn "HFH: init_from_object ", $self->name, "\n" if $self->verbose; + warn 'HFH: init_from_object ', $self->name, "\n" if $self->verbose; my $my_value; for my $field ( $node->fields ) { next if $field->parent && $field->parent != $node; diff --git a/lib/MusicBrainz/Server/Form/CDStub.pm b/lib/MusicBrainz/Server/Form/CDStub.pm index 87fb4391e27..e746221776b 100644 --- a/lib/MusicBrainz/Server/Form/CDStub.pm +++ b/lib/MusicBrainz/Server/Form/CDStub.pm @@ -80,7 +80,7 @@ sub validate my $self = shift; if ($self->field('multiple_artists')->value) { $self->field('artist')->add_error(l('You may not specify a release artist while also specifying track artists.')) - if $self->field('artist')->value && $self->field('artist')->value ne "Various Artists"; + if $self->field('artist')->value && $self->field('artist')->value ne 'Various Artists'; for my $field ($self->field('tracks')->fields) { $field = $field->field('artist'); diff --git a/lib/MusicBrainz/Server/Form/Field/ArtistCredit.pm b/lib/MusicBrainz/Server/Form/Field/ArtistCredit.pm index b1f4d23d13a..369d0d4cd4b 100644 --- a/lib/MusicBrainz/Server/Form/Field/ArtistCredit.pm +++ b/lib/MusicBrainz/Server/Form/Field/ArtistCredit.pm @@ -73,7 +73,7 @@ around 'validate_field' => sub { # properly (i.e. environments where AC fields aren't generated). unless ($artists || $self->form->init_object) { - $self->add_error(l("Artist credit field is required")); + $self->add_error(l('Artist credit field is required')); } return !$self->has_errors; diff --git a/lib/MusicBrainz/Server/Form/Field/PartialDate.pm b/lib/MusicBrainz/Server/Form/Field/PartialDate.pm index 007c5bf5a91..ed861b90a44 100644 --- a/lib/MusicBrainz/Server/Form/Field/PartialDate.pm +++ b/lib/MusicBrainz/Server/Form/Field/PartialDate.pm @@ -62,7 +62,7 @@ sub validate { return 1 if is_valid_partial_date($year, $month, $day); - return $self->add_error(l("invalid date")); + return $self->add_error(l('invalid date')); } 1; diff --git a/lib/MusicBrainz/Server/Form/Recording.pm b/lib/MusicBrainz/Server/Form/Recording.pm index 5687a31294e..5e9fa05e316 100644 --- a/lib/MusicBrainz/Server/Form/Recording.pm +++ b/lib/MusicBrainz/Server/Form/Recording.pm @@ -62,8 +62,8 @@ after 'validate' => sub { if ($self->used_by_tracks && defined($length->value) && $length->value != $length->init_value) { $length->add_error(l( - "This recording’s duration is determined by the tracks that are " . - "linked to it, and cannot be changed directly." + 'This recording’s duration is determined by the tracks that are ' . + 'linked to it, and cannot be changed directly.' )); } }; diff --git a/lib/MusicBrainz/Server/Form/Role/UserProfile.pm b/lib/MusicBrainz/Server/Form/Role/UserProfile.pm index 8a61a3df288..10a47639eb8 100644 --- a/lib/MusicBrainz/Server/Form/Role/UserProfile.pm +++ b/lib/MusicBrainz/Server/Form/Role/UserProfile.pm @@ -91,7 +91,7 @@ sub validate_birth_date { $field->field('year')->add_error(l('Birth year must be after 1900')); } - return $field->add_error(l("invalid date")) unless Date::Calc::check_date($year, $month, $day); + return $field->add_error(l('invalid date')) unless Date::Calc::check_date($year, $month, $day); } 1; diff --git a/lib/MusicBrainz/Server/Form/User/Register.pm b/lib/MusicBrainz/Server/Form/User/Register.pm index 07f8b75553b..c120863d8de 100644 --- a/lib/MusicBrainz/Server/Form/User/Register.pm +++ b/lib/MusicBrainz/Server/Form/User/Register.pm @@ -14,7 +14,7 @@ my $text_too_long_message = N_l('The value of this field cannot be longer than { sub localize_method_with_text_maxlength { my ($self, $message, @args) = @_; - + if ($message eq $text_too_long_message) { return l($message, { max => $args[0], actual => $args[1] }); } diff --git a/lib/MusicBrainz/Server/Form/Utils.pm b/lib/MusicBrainz/Server/Form/Utils.pm index 13f522a642c..62571a012d6 100644 --- a/lib/MusicBrainz/Server/Form/Utils.pm +++ b/lib/MusicBrainz/Server/Form/Utils.pm @@ -26,7 +26,7 @@ use Sub::Exporter -setup => { sub language_options { my $c = shift; - my $context = shift // ""; + my $context = shift // ''; # group list of languages in <optgroups>. # most frequently used languages have hardcoded value 2. @@ -36,16 +36,16 @@ sub language_options { my $skip = 0; my @languages = $c->model('Language')->get_all; - if ($context eq "editor") { + if ($context eq 'editor') { for my $language (@languages) { if ($language->iso_code_3 && $language->iso_code_3 eq 'mul') { $language->frequency($skip); } } - } elsif ($context eq "work") { + } elsif ($context eq 'work') { for my $language (@languages) { - if ($language->iso_code_3 && $language->iso_code_3 eq "zxx") { - $language->name(l("[No lyrics]")); + if ($language->iso_code_3 && $language->iso_code_3 eq 'zxx') { + $language->name(l('[No lyrics]')); $language->frequency($frequent); } } diff --git a/lib/MusicBrainz/Server/Log.pm b/lib/MusicBrainz/Server/Log.pm index 7fd56a93cd7..1bcefa90ec0 100644 --- a/lib/MusicBrainz/Server/Log.pm +++ b/lib/MusicBrainz/Server/Log.pm @@ -39,7 +39,7 @@ sub logger { $logger } sub _prefix_message { my %args = @_; - return sprintf "[%s] %s", $args{level}, $args{message}; + return sprintf '[%s] %s', $args{level}, $args{message}; } sub _truncate_message { @@ -80,7 +80,7 @@ sub log_assertion (&$) { my ($package, $filename, $line) = caller(0); log_error { "Failed assertion: $message ($filename:$line)" }; log_debug { - "Stacktrace: " . + 'Stacktrace: ' . Devel::StackTrace->new( ignore_class => 'MusicBrainz::Server::Log' )->as_string } } diff --git a/lib/MusicBrainz/Server/PagedReport.pm b/lib/MusicBrainz/Server/PagedReport.pm index d69bea0cc99..18029062e9d 100644 --- a/lib/MusicBrainz/Server/PagedReport.pm +++ b/lib/MusicBrainz/Server/PagedReport.pm @@ -30,7 +30,7 @@ use strict; package MusicBrainz::Server::PagedReport; use Storable qw( freeze thaw ); -my $intlen = length(pack "i", 0); +my $intlen = length(pack 'i', 0); ################################################################################ # Save @@ -60,9 +60,9 @@ sub Print my $pos = tell $dat; die if $pos < 0; - print $dat pack("i", length($record)), $record + print $dat pack('i', length($record)), $record or die $!; - print $idx pack "i", $pos + print $idx pack 'i', $pos or die $!; ++$self->{NUM}; @@ -117,7 +117,7 @@ sub Seek } else { read($idx, my $idxpos, $intlen) or die $!; - seek($dat, unpack("i", $idxpos), 0) + seek($dat, unpack('i', $idxpos), 0) or die $!; } @@ -137,7 +137,7 @@ sub Get read($dat, my $reclen, $intlen) or die $!; - read($dat, my $record, unpack("i", $reclen)) + read($dat, my $record, unpack('i', $reclen)) or die $!; ++$self->{CUR}; diff --git a/lib/MusicBrainz/Server/Plugin/Diff.pm b/lib/MusicBrainz/Server/Plugin/Diff.pm index eb929fc1210..f6d3b26904b 100644 --- a/lib/MusicBrainz/Server/Plugin/Diff.pm +++ b/lib/MusicBrainz/Server/Plugin/Diff.pm @@ -15,7 +15,7 @@ use Scalar::Util qw( blessed ); use MusicBrainz::Server::Translation qw( l ); use MusicBrainz::Server::Validation qw( encode_entities trim_in_place ); -no if $] >= 5.018, warnings => "experimental::smartmatch"; +no if $] >= 5.018, warnings => 'experimental::smartmatch'; sub new { my ($class, $context) = @_; @@ -56,7 +56,7 @@ sub _html_token { sub _split_text { my ($text, $split) = @_; - defined $split or confess "No split pattern"; + defined $split or confess 'No split pattern'; $split = "($split)" unless $split eq ''; # the capture group becomes a separate part of the split output return split /$split/, $text; diff --git a/lib/MusicBrainz/Server/Plugin/FormRenderer.pm b/lib/MusicBrainz/Server/Plugin/FormRenderer.pm index b265efcfb06..5e4994cacd1 100644 --- a/lib/MusicBrainz/Server/Plugin/FormRenderer.pm +++ b/lib/MusicBrainz/Server/Plugin/FormRenderer.pm @@ -45,7 +45,7 @@ sub _lookup_field sub _id { my ($self, $field) = @_; - return $self->{id_prefix} . "id-" . $field->html_name; + return $self->{id_prefix} . 'id-' . $field->html_name; } sub _render_input @@ -53,7 +53,7 @@ sub _render_input my ($self, $field, $type, %attrs) = @_; return unless ref $field; if ($field->required && $type !~ /^hidden|image|submit|reset|button$/) { - $attrs{required} = "required"; + $attrs{required} = 'required'; } my $class = delete $attrs{class} || ''; return $self->h->input({ @@ -173,7 +173,7 @@ sub select my $option_html = $self->h->option( { - %$option, selected => $selected ? "selected" : undef, + %$option, selected => $selected ? 'selected' : undef, }, $self->h->entity_encode($label)); if ($grp) @@ -199,15 +199,15 @@ sub select if (!$field->required || delete $attrs->{no_default}) { unshift @options, $self->h->option({ - selected => !defined $field->value ? "selected" : undef, + selected => !defined $field->value ? 'selected' : undef, }, ' ') } return $self->h->select({ id => $self->_id($field), name => $field->html_name, - multiple => $field->multiple ? "multiple" : undef, - disabled => $field->disabled ? "disabled" : undef, + multiple => $field->multiple ? 'multiple' : undef, + disabled => $field->disabled ? 'disabled' : undef, class => $attrs->{class}, %{ $attrs || {} } }, \@options); @@ -225,7 +225,7 @@ sub radio id => $self->_id($field) . "-$option" , name => $field->html_name, checked => $field->value && $value eq $field->value ? 'checked' : undef, - disabled => $field->disabled ? "disabled" : undef, + disabled => $field->disabled ? 'disabled' : undef, value => $value, %{ $attrs || {} } }); @@ -236,7 +236,7 @@ sub checkbox my ($self, $field_name, $attrs) = @_; my $field = $self->_lookup_field($field_name) or return; return $self->_render_input($field, 'checkbox', - checked => $field->value ? "checked" : undef, + checked => $field->value ? 'checked' : undef, value => $field->checkbox_value, %$attrs ); diff --git a/lib/MusicBrainz/Server/Release.pm b/lib/MusicBrainz/Server/Release.pm index f4ec02eac08..cf2d36ab277 100644 --- a/lib/MusicBrainz/Server/Release.pm +++ b/lib/MusicBrainz/Server/Release.pm @@ -50,23 +50,23 @@ use constant RELEASE_ATTR_SECTION_STATUS_START => RELEASE_ATTR_OFFICIAL; use constant RELEASE_ATTR_SECTION_STATUS_END => RELEASE_ATTR_PSEUDO_RELEASE; my %AlbumAttributeNames = ( - 0 => [ "Non-Album Track", "Non-Album Tracks", l("(Special case)")], - 1 => [ "Album", "Albums", l("An album release primarily consists of previously unreleased material. This includes album re-issues, with or without bonus tracks.")], - 2 => [ "Single", "Singles", l("A single typically has one main song and possibly a handful of additional tracks or remixes of the main track. A single is usually named after its main song.")], - 3 => [ "EP", "EPs", l("An EP is an Extended Play release and often contains the letters EP in the title.")], - 4 => [ "Compilation", "Compilations", l("A compilation is a collection of previously released tracks by one or more artists.")], - 5 => [ "Soundtrack", "Soundtracks", l("A soundtrack is the musical score to a movie, TV series, stage show, computer game etc.")], - 6 => [ "Spokenword", "Spokenword", l("Non-music spoken word releases.")], - 7 => [ "Interview", "Interviews", l("An interview release contains an interview with the Artist.")], - 8 => [ "Audiobook", "Audiobooks", l("An audiobook is a book read by a narrator without music.")], - 9 => [ "Live", "Live Releases", l("A release that was recorded live.")], - 10 => [ "Remix", "Remixes", l("A release that was (re)mixed from previously released material.")], - 11 => [ "Other", "Other Releases", l("Any release that does not fit any of the categories above.")], + 0 => [ 'Non-Album Track', 'Non-Album Tracks', l('(Special case)')], + 1 => [ 'Album', 'Albums', l('An album release primarily consists of previously unreleased material. This includes album re-issues, with or without bonus tracks.')], + 2 => [ 'Single', 'Singles', l('A single typically has one main song and possibly a handful of additional tracks or remixes of the main track. A single is usually named after its main song.')], + 3 => [ 'EP', 'EPs', l('An EP is an Extended Play release and often contains the letters EP in the title.')], + 4 => [ 'Compilation', 'Compilations', l('A compilation is a collection of previously released tracks by one or more artists.')], + 5 => [ 'Soundtrack', 'Soundtracks', l('A soundtrack is the musical score to a movie, TV series, stage show, computer game etc.')], + 6 => [ 'Spokenword', 'Spokenword', l('Non-music spoken word releases.')], + 7 => [ 'Interview', 'Interviews', l('An interview release contains an interview with the Artist.')], + 8 => [ 'Audiobook', 'Audiobooks', l('An audiobook is a book read by a narrator without music.')], + 9 => [ 'Live', 'Live Releases', l('A release that was recorded live.')], + 10 => [ 'Remix', 'Remixes', l('A release that was (re)mixed from previously released material.')], + 11 => [ 'Other', 'Other Releases', l('Any release that does not fit any of the categories above.')], - 100 => [ "Official", "Official", l("Any release officially sanctioned by the artist and/or their record company. (Most releases will fit into this category.)") ], - 101 => [ "Promotion", "Promotions", l("A giveaway release or a release intended to promote an upcoming official release. (e.g. prerelease albums or releases included with a magazine)")], - 102 => [ "Bootleg", "Bootlegs", l("An unofficial/underground release that was not sanctioned by the artist and/or the record company.")], - 103 => [ "Pseudo-Release", "PseudoReleases", l("A pseudo-release is a duplicate release for translation/transliteration purposes.")] + 100 => [ 'Official', 'Official', l('Any release officially sanctioned by the artist and/or their record company. (Most releases will fit into this category.)') ], + 101 => [ 'Promotion', 'Promotions', l('A giveaway release or a release intended to promote an upcoming official release. (e.g. prerelease albums or releases included with a magazine)')], + 102 => [ 'Bootleg', 'Bootlegs', l('An unofficial/underground release that was not sanctioned by the artist and/or the record company.')], + 103 => [ 'Pseudo-Release', 'PseudoReleases', l('A pseudo-release is a duplicate release for translation/transliteration purposes.')] ); sub attribute_name { $AlbumAttributeNames{$_[0]}->[0]; } diff --git a/lib/MusicBrainz/Server/Replication/Packet.pm b/lib/MusicBrainz/Server/Replication/Packet.pm index fc6d44bc749..40f4ab6deb2 100644 --- a/lib/MusicBrainz/Server/Replication/Packet.pm +++ b/lib/MusicBrainz/Server/Replication/Packet.pm @@ -47,7 +47,7 @@ sub retrieve_remote_file { # Fetch the file and inform the user about what is being done print localtime() . " : Downloading $url to $file\n"; - my $f_url_token = $url . "?token=" . uri_escape(DBDefs->REPLICATION_ACCESS_TOKEN); + my $f_url_token = $url . '?token=' . uri_escape(DBDefs->REPLICATION_ACCESS_TOKEN); my $f_resp = $ua->mirror($f_url_token, $file); # We do not want to validate signature for non-existent files @@ -58,7 +58,7 @@ sub retrieve_remote_file { # Fetch file signature and inform the user about what is being done print localtime() . " : Downloading $url to $signature\n"; - my $s_url_token = $url . "?token=" . uri_escape(DBDefs->REPLICATION_ACCESS_TOKEN); + my $s_url_token = $url . '?token=' . uri_escape(DBDefs->REPLICATION_ACCESS_TOKEN); my $s_resp = $ua->mirror($s_url_token, $signature); validate_file_signature($file, $signature); diff --git a/lib/MusicBrainz/Server/Report.pm b/lib/MusicBrainz/Server/Report.pm index e2b3f755dbe..7c3b371895d 100644 --- a/lib/MusicBrainz/Server/Report.pm +++ b/lib/MusicBrainz/Server/Report.pm @@ -43,7 +43,7 @@ sub _load { ($self->inflate_rows($rows, $c), $hits); } -sub ordering { "row_number" } +sub ordering { 'row_number' } sub inflate_rows { my ($self, $rows) = @_; diff --git a/lib/MusicBrainz/Server/Report/ASINsWithMultipleReleases.pm b/lib/MusicBrainz/Server/Report/ASINsWithMultipleReleases.pm index 708f2398377..cb1ef01cea2 100644 --- a/lib/MusicBrainz/Server/Report/ASINsWithMultipleReleases.pm +++ b/lib/MusicBrainz/Server/Report/ASINsWithMultipleReleases.pm @@ -9,7 +9,7 @@ sub table { 'asins_with_multiple_releases' } sub component_name { 'AsinsWithMultipleReleases' } sub query { - " SELECT r.id AS release_id, q.id AS url_id, + q{ SELECT r.id AS release_id, q.id AS url_id, row_number() OVER ( ORDER BY q.count DESC, q.url, ac.name COLLATE musicbrainz, r.name COLLATE musicbrainz @@ -27,7 +27,7 @@ sub query { ) AS q JOIN l_release_url lru ON lru.entity1 = q.id JOIN release r ON r.id = lru.entity0 - JOIN artist_credit ac ON r.artist_credit = ac.id"; + JOIN artist_credit ac ON r.artist_credit = ac.id}; } __PACKAGE__->meta->make_immutable; diff --git a/lib/MusicBrainz/Server/Report/ArtistCreditsWithDubiousTrailingPhrases.pm b/lib/MusicBrainz/Server/Report/ArtistCreditsWithDubiousTrailingPhrases.pm index f6bd2338b70..73131f123e6 100644 --- a/lib/MusicBrainz/Server/Report/ArtistCreditsWithDubiousTrailingPhrases.pm +++ b/lib/MusicBrainz/Server/Report/ArtistCreditsWithDubiousTrailingPhrases.pm @@ -4,14 +4,14 @@ use Moose; with 'MusicBrainz::Server::Report::ArtistCreditReport', 'MusicBrainz::Server::Report::FilterForEditor::ArtistCreditID'; -sub query {<<~'EOSQL'} +sub query {<<~'SQL'} SELECT ac.id AS artist_credit_id, ac.name, row_number() OVER (ORDER BY ac.id) FROM artist_credit ac JOIN artist_credit_name acn ON acn.artist_credit = ac.id WHERE acn.position = (ac.artist_count - 1) AND acn.join_phrase ~* '(?:ft\.?|feat\.?|[;:,])\s*$' - EOSQL + SQL __PACKAGE__->meta->make_immutable; no Moose; diff --git a/lib/MusicBrainz/Server/Report/ArtistsContainingDisambiguationComments.pm b/lib/MusicBrainz/Server/Report/ArtistsContainingDisambiguationComments.pm index 257b6aa515b..1edd57eedc4 100644 --- a/lib/MusicBrainz/Server/Report/ArtistsContainingDisambiguationComments.pm +++ b/lib/MusicBrainz/Server/Report/ArtistsContainingDisambiguationComments.pm @@ -5,11 +5,11 @@ with 'MusicBrainz::Server::Report::ArtistReport', 'MusicBrainz::Server::Report::FilterForEditor::ArtistID'; sub query { - "SELECT artist.id AS artist_id, + q{SELECT artist.id AS artist_id, row_number() OVER (ORDER BY artist.name COLLATE musicbrainz) FROM artist WHERE (name LIKE '%(%' OR name LIKE '%)%') - AND name NOT LIKE '(%'"; + AND name NOT LIKE '(%'}; } __PACKAGE__->meta->make_immutable; diff --git a/lib/MusicBrainz/Server/Report/ArtistsDisambiguationSameName.pm b/lib/MusicBrainz/Server/Report/ArtistsDisambiguationSameName.pm index 68f2a8ac9be..39d83ff6c95 100644 --- a/lib/MusicBrainz/Server/Report/ArtistsDisambiguationSameName.pm +++ b/lib/MusicBrainz/Server/Report/ArtistsDisambiguationSameName.pm @@ -5,13 +5,13 @@ with 'MusicBrainz::Server::Report::ArtistReport', 'MusicBrainz::Server::Report::FilterForEditor::ArtistID'; sub query { - " + ' SELECT artist.id AS artist_id, row_number() OVER (ORDER BY artist.name COLLATE musicbrainz, artist.id) FROM artist WHERE artist.name = artist.comment - " + ' } __PACKAGE__->meta->make_immutable; diff --git a/lib/MusicBrainz/Server/Report/ArtistsThatMayBeGroups.pm b/lib/MusicBrainz/Server/Report/ArtistsThatMayBeGroups.pm index 54f29d63492..22d69a1ea19 100644 --- a/lib/MusicBrainz/Server/Report/ArtistsThatMayBeGroups.pm +++ b/lib/MusicBrainz/Server/Report/ArtistsThatMayBeGroups.pm @@ -5,14 +5,14 @@ with 'MusicBrainz::Server::Report::ArtistReport', 'MusicBrainz::Server::Report::FilterForEditor::ArtistID'; sub query { - "SELECT DISTINCT ON (artist.id) artist.id AS artist_id, + q{SELECT DISTINCT ON (artist.id) artist.id AS artist_id, row_number() OVER (ORDER BY artist.name COLLATE musicbrainz, artist.id) FROM artist JOIN l_artist_artist ON l_artist_artist.entity1=artist.id JOIN link ON link.id=l_artist_artist.link JOIN link_type ON link_type.id=link.link_type WHERE (artist.type NOT IN (2, 5, 6) OR artist.type IS NULL) - AND link_type.name IN ('collaboration', 'member of band', 'conductor position')" + AND link_type.name IN ('collaboration', 'member of band', 'conductor position')} } __PACKAGE__->meta->make_immutable; diff --git a/lib/MusicBrainz/Server/Report/ArtistsThatMayBePersons.pm b/lib/MusicBrainz/Server/Report/ArtistsThatMayBePersons.pm index 65867584eec..c7ef3745e99 100644 --- a/lib/MusicBrainz/Server/Report/ArtistsThatMayBePersons.pm +++ b/lib/MusicBrainz/Server/Report/ArtistsThatMayBePersons.pm @@ -5,7 +5,7 @@ with 'MusicBrainz::Server::Report::ArtistReport', 'MusicBrainz::Server::Report::FilterForEditor::ArtistID'; sub query { - " + q{ WITH groups AS ( SELECT DISTINCT ON (artist.id) artist.id, artist.name FROM artist @@ -39,7 +39,7 @@ WITH groups AS ( SELECT * FROM groups) SELECT DISTINCT ON (artists.id) artists.id AS artist_id, row_number() OVER (ORDER BY artists.name COLLATE musicbrainz, artists.id) FROM artists - "; + }; } __PACKAGE__->meta->make_immutable; diff --git a/lib/MusicBrainz/Server/Report/ArtistsWithMultipleOccurrencesInArtistCredits.pm b/lib/MusicBrainz/Server/Report/ArtistsWithMultipleOccurrencesInArtistCredits.pm index 9e4680e974d..2b395f42619 100644 --- a/lib/MusicBrainz/Server/Report/ArtistsWithMultipleOccurrencesInArtistCredits.pm +++ b/lib/MusicBrainz/Server/Report/ArtistsWithMultipleOccurrencesInArtistCredits.pm @@ -5,7 +5,7 @@ with 'MusicBrainz::Server::Report::ArtistReport', 'MusicBrainz::Server::Report::FilterForEditor::ArtistID'; sub query { - "SELECT artist AS artist_id, + 'SELECT artist AS artist_id, row_number() OVER (ORDER BY artist.name COLLATE musicbrainz) FROM ( SELECT DISTINCT artist @@ -13,7 +13,7 @@ sub query { GROUP BY artist_credit, artist HAVING count(position) > 1 ) q - JOIN artist ON artist.id = q.artist"; + JOIN artist ON artist.id = q.artist'; } diff --git a/lib/MusicBrainz/Server/Report/ArtistsWithNoSubscribers.pm b/lib/MusicBrainz/Server/Report/ArtistsWithNoSubscribers.pm index a923b9242ac..40f165e6ea6 100644 --- a/lib/MusicBrainz/Server/Report/ArtistsWithNoSubscribers.pm +++ b/lib/MusicBrainz/Server/Report/ArtistsWithNoSubscribers.pm @@ -4,13 +4,13 @@ use Moose; with 'MusicBrainz::Server::Report::ArtistReport'; sub query { - "SELECT artist.id AS artist_id, + 'SELECT artist.id AS artist_id, row_number() OVER (ORDER BY count(distinct release_group.id) DESC, artist.edits_pending DESC) FROM artist LEFT JOIN editor_subscribe_artist ON artist.id=editor_subscribe_artist.artist JOIN artist_credit_name ON artist.id = artist_credit_name.artist LEFT JOIN release_group ON release_group.artist_credit = artist_credit_name.artist_credit - WHERE editor_subscribe_artist.editor IS NULL GROUP BY artist_id"; + WHERE editor_subscribe_artist.editor IS NULL GROUP BY artist_id'; } __PACKAGE__->meta->make_immutable; diff --git a/lib/MusicBrainz/Server/Report/CatNoLooksLikeASIN.pm b/lib/MusicBrainz/Server/Report/CatNoLooksLikeASIN.pm index 0184f6a8b0e..20f08f5d42e 100644 --- a/lib/MusicBrainz/Server/Report/CatNoLooksLikeASIN.pm +++ b/lib/MusicBrainz/Server/Report/CatNoLooksLikeASIN.pm @@ -7,7 +7,7 @@ with 'MusicBrainz::Server::Report::ReleaseReport', sub component_name { 'CatNoLooksLikeAsin' } sub query { - " + q{ SELECT r.id AS release_id, rl.catalog_number, row_number() OVER (ORDER BY ac.name COLLATE musicbrainz, r.name COLLATE musicbrainz) @@ -17,7 +17,7 @@ sub query { ON r.id = rl.release JOIN artist_credit ac ON r.artist_credit = ac.id WHERE rl.catalog_number ~ '^B0[0-9A-Z]{8}\$' - " + } } __PACKAGE__->meta->make_immutable; diff --git a/lib/MusicBrainz/Server/Report/CatNoLooksLikeISRC.pm b/lib/MusicBrainz/Server/Report/CatNoLooksLikeISRC.pm index 48979c8c466..7bcffcdaf74 100644 --- a/lib/MusicBrainz/Server/Report/CatNoLooksLikeISRC.pm +++ b/lib/MusicBrainz/Server/Report/CatNoLooksLikeISRC.pm @@ -7,7 +7,7 @@ with 'MusicBrainz::Server::Report::ReleaseReport', sub component_name { 'CatNoLooksLikeIsrc' } sub query { - " + q{ SELECT r.id AS release_id, rl.catalog_number, row_number() OVER (ORDER BY ac.name COLLATE musicbrainz, r.name COLLATE musicbrainz) @@ -17,7 +17,7 @@ sub query { ON r.id = rl.release JOIN artist_credit ac ON r.artist_credit = ac.id WHERE rl.catalog_number ~ '^[A-Z]{2}-?[A-Z0-9]{3}-?[0-9]{2}-?[0-9]{5}\$' - " + } } __PACKAGE__->meta->make_immutable; diff --git a/lib/MusicBrainz/Server/Report/CatNoLooksLikeLabelCode.pm b/lib/MusicBrainz/Server/Report/CatNoLooksLikeLabelCode.pm index 865eed98c4f..7cd9795004b 100644 --- a/lib/MusicBrainz/Server/Report/CatNoLooksLikeLabelCode.pm +++ b/lib/MusicBrainz/Server/Report/CatNoLooksLikeLabelCode.pm @@ -7,7 +7,7 @@ with 'MusicBrainz::Server::Report::ReleaseReport', sub component_name { 'CatNoLooksLikeLabelCode' } sub query { - " + q{ SELECT r.id AS release_id, rl.catalog_number, row_number() OVER (ORDER BY ac.name COLLATE musicbrainz, r.name COLLATE musicbrainz) @@ -17,7 +17,7 @@ sub query { ON r.id = rl.release JOIN artist_credit ac ON r.artist_credit = ac.id WHERE rl.catalog_number ~ '^LC[\\s-]*\\d{4,5}\$' - " + } } __PACKAGE__->meta->make_immutable; diff --git a/lib/MusicBrainz/Server/Report/CollaborationRelationships.pm b/lib/MusicBrainz/Server/Report/CollaborationRelationships.pm index 5baa38c146d..2b59269b4d2 100644 --- a/lib/MusicBrainz/Server/Report/CollaborationRelationships.pm +++ b/lib/MusicBrainz/Server/Report/CollaborationRelationships.pm @@ -6,7 +6,7 @@ with 'MusicBrainz::Server::Report::QueryReport', 'MusicBrainz::Server::Report::FilterForEditor'; sub query { - " + q{ SELECT artist0.id AS id0, artist0.name AS name0, artist1.id AS id1, artist1.name AS name1, row_number() OVER ( @@ -22,7 +22,7 @@ sub query { WHERE link_type.name = 'collaboration' AND l_artist_url.id IS NULL - "; + }; } sub inflate_rows diff --git a/lib/MusicBrainz/Server/Report/DeprecatedRelationshipReport.pm b/lib/MusicBrainz/Server/Report/DeprecatedRelationshipReport.pm index 5307d13f71d..b164596077c 100644 --- a/lib/MusicBrainz/Server/Report/DeprecatedRelationshipReport.pm +++ b/lib/MusicBrainz/Server/Report/DeprecatedRelationshipReport.pm @@ -21,7 +21,7 @@ sub query { if ($first) { $first = 0; } else { - $query .= " UNION "; + $query .= ' UNION '; } $query .= "SELECT link_type.name AS name, link_type.gid AS gid, $type_column AS entity @@ -29,15 +29,15 @@ sub query { JOIN link ON link.link_type = link_type.id JOIN $table l_table ON l_table.link = link.id WHERE (link_type.is_deprecated OR link_type.description = '')"; - + # For URL relationships, ignore ended ones (that means the link is no longer # valid, yet being kept for history) if (grep(/^$table/, @url_table_names)) { $query .= ' AND link.ended IS FALSE'; } - + } - $query .= ") l ON l.entity = entity.id"; + $query .= ') l ON l.entity = entity.id'; return $query; } diff --git a/lib/MusicBrainz/Server/Report/DiscogsLinksWithMultipleArtists.pm b/lib/MusicBrainz/Server/Report/DiscogsLinksWithMultipleArtists.pm index 8d04e293d07..9a0a9a83ec0 100644 --- a/lib/MusicBrainz/Server/Report/DiscogsLinksWithMultipleArtists.pm +++ b/lib/MusicBrainz/Server/Report/DiscogsLinksWithMultipleArtists.pm @@ -9,7 +9,7 @@ with 'MusicBrainz::Server::Report::ArtistReport', 'MusicBrainz::Server::Report::FilterForEditor::ArtistID'; sub query { - " + q{ SELECT a.id AS artist_id, q.id AS url_id, q.count, row_number() OVER (ORDER BY q.count DESC, q.url, a.name COLLATE musicbrainz) @@ -26,7 +26,7 @@ sub query { ) AS q JOIN l_artist_url lau ON lau.entity1 = q.id JOIN artist a ON a.id = lau.entity0 - "; + }; } __PACKAGE__->meta->make_immutable; diff --git a/lib/MusicBrainz/Server/Report/DiscogsLinksWithMultipleLabels.pm b/lib/MusicBrainz/Server/Report/DiscogsLinksWithMultipleLabels.pm index 6da38403248..154ae94f1ea 100644 --- a/lib/MusicBrainz/Server/Report/DiscogsLinksWithMultipleLabels.pm +++ b/lib/MusicBrainz/Server/Report/DiscogsLinksWithMultipleLabels.pm @@ -9,7 +9,7 @@ with 'MusicBrainz::Server::Report::LabelReport', 'MusicBrainz::Server::Report::FilterForEditor::LabelID'; sub query { - " + q{ SELECT l.id AS label_id, q.id AS url_id, row_number() OVER (ORDER BY q.count DESC, q.url, l.name COLLATE musicbrainz) @@ -26,7 +26,7 @@ sub query { ) AS q JOIN l_label_url llu ON llu.entity1 = q.id JOIN label l ON l.id = llu.entity0 - "; + }; } __PACKAGE__->meta->make_immutable; diff --git a/lib/MusicBrainz/Server/Report/DiscogsLinksWithMultipleReleaseGroups.pm b/lib/MusicBrainz/Server/Report/DiscogsLinksWithMultipleReleaseGroups.pm index e0725a53793..f3848fdbf23 100644 --- a/lib/MusicBrainz/Server/Report/DiscogsLinksWithMultipleReleaseGroups.pm +++ b/lib/MusicBrainz/Server/Report/DiscogsLinksWithMultipleReleaseGroups.pm @@ -6,7 +6,7 @@ with 'MusicBrainz::Server::Report::ReleaseGroupReport', 'MusicBrainz::Server::Report::FilterForEditor::ReleaseGroupID'; sub query { - " + q{ SELECT r.id AS release_group_id, q.id AS url_id, row_number() OVER (ORDER BY q.count DESC, q.url, ac.name COLLATE musicbrainz, r.name COLLATE musicbrainz) @@ -24,7 +24,7 @@ sub query { JOIN l_release_group_url lru ON lru.entity1 = q.id JOIN release_group r ON r.id = lru.entity0 JOIN artist_credit ac ON r.artist_credit = ac.id - "; + }; } __PACKAGE__->meta->make_immutable; diff --git a/lib/MusicBrainz/Server/Report/DiscogsLinksWithMultipleReleases.pm b/lib/MusicBrainz/Server/Report/DiscogsLinksWithMultipleReleases.pm index 9ebbe5b52ee..a4487af364a 100644 --- a/lib/MusicBrainz/Server/Report/DiscogsLinksWithMultipleReleases.pm +++ b/lib/MusicBrainz/Server/Report/DiscogsLinksWithMultipleReleases.pm @@ -6,7 +6,7 @@ with 'MusicBrainz::Server::Report::ReleaseReport', 'MusicBrainz::Server::Report::FilterForEditor::ReleaseID'; sub query { - " + q{ SELECT r.id AS release_id, q.id AS url_id, row_number() OVER (ORDER BY q.count DESC, q.url, ac.name COLLATE musicbrainz, r.name COLLATE musicbrainz) @@ -24,7 +24,7 @@ sub query { JOIN l_release_url lru ON lru.entity1 = q.id JOIN release r ON r.id = lru.entity0 JOIN artist_credit ac ON r.artist_credit = ac.id - "; + }; } __PACKAGE__->meta->make_immutable; diff --git a/lib/MusicBrainz/Server/Report/DuplicateArtists.pm b/lib/MusicBrainz/Server/Report/DuplicateArtists.pm index feb0c9f5793..4edd745aee2 100644 --- a/lib/MusicBrainz/Server/Report/DuplicateArtists.pm +++ b/lib/MusicBrainz/Server/Report/DuplicateArtists.pm @@ -40,7 +40,7 @@ sub run } my $aliases = $sql->select_list_of_hashes( - "SELECT artist.gid, artist.id, artist.name, artist.sort_name, + q{SELECT artist.gid, artist.id, artist.name, artist.sort_name, musicbrainz_unaccent(alias.name) AS alias, CASE WHEN artist.comment = '' THEN @@ -50,7 +50,7 @@ sub run (artist.comment != '') AS has_comment, artist.type FROM artist - JOIN artist_alias alias ON alias.artist = artist.id" + JOIN artist_alias alias ON alias.artist = artist.id} ); for my $r (@$aliases) { @@ -90,7 +90,7 @@ sub inflate_rows ]; } -sub ordering { "key" } +sub ordering { 'key' } sub load_filtered { my ($self, $c, $editor_id, $limit, $offset) = @_; diff --git a/lib/MusicBrainz/Server/Report/DuplicateEvents.pm b/lib/MusicBrainz/Server/Report/DuplicateEvents.pm index 2a34723f308..486c0fe6bad 100644 --- a/lib/MusicBrainz/Server/Report/DuplicateEvents.pm +++ b/lib/MusicBrainz/Server/Report/DuplicateEvents.pm @@ -4,7 +4,7 @@ use Moose; with 'MusicBrainz::Server::Report::EventReport', 'MusicBrainz::Server::Report::FilterForEditor::EventID'; -sub query { " +sub query { q{ WITH duplicates AS ( SELECT event.begin_date_year AS begin_date_year, event.begin_date_month AS begin_date_month, event.begin_date_day AS begin_date_day, l_event_place.entity1 AS entity1 @@ -36,7 +36,7 @@ SELECT event.id AS event_id, AND lep2.entity1 = duplicates.entity1 AND e2.comment = '' ) -"; +}; } __PACKAGE__->meta->make_immutable; diff --git a/lib/MusicBrainz/Server/Report/DuplicateRelationshipsArtists.pm b/lib/MusicBrainz/Server/Report/DuplicateRelationshipsArtists.pm index de9f948293f..538b28b9aaf 100644 --- a/lib/MusicBrainz/Server/Report/DuplicateRelationshipsArtists.pm +++ b/lib/MusicBrainz/Server/Report/DuplicateRelationshipsArtists.pm @@ -5,7 +5,7 @@ with 'MusicBrainz::Server::Report::ArtistReport', 'MusicBrainz::Server::Report::FilterForEditor::ArtistID'; sub query { - " + ' SELECT q.entity AS artist_id, row_number() OVER (ORDER BY artist.name COLLATE musicbrainz) FROM ( SELECT link.link_type, lxx.entity1, lxx.entity0 AS entity @@ -38,7 +38,7 @@ SELECT q.entity AS artist_id, row_number() OVER (ORDER BY artist.name COLLATE mu JOIN artist ON q.entity = artist.id GROUP BY q.entity, artist.name - "; + '; } __PACKAGE__->meta->make_immutable; diff --git a/lib/MusicBrainz/Server/Report/DuplicateRelationshipsLabels.pm b/lib/MusicBrainz/Server/Report/DuplicateRelationshipsLabels.pm index dad68d659ee..0f755bc1569 100644 --- a/lib/MusicBrainz/Server/Report/DuplicateRelationshipsLabels.pm +++ b/lib/MusicBrainz/Server/Report/DuplicateRelationshipsLabels.pm @@ -5,7 +5,7 @@ with 'MusicBrainz::Server::Report::LabelReport', 'MusicBrainz::Server::Report::FilterForEditor::LabelID'; sub query { - " + ' SELECT q.entity AS label_id, row_number() OVER (ORDER BY label.name COLLATE musicbrainz) FROM ( @@ -67,7 +67,7 @@ SELECT q.entity AS label_id, row_number() OVER (ORDER BY label.name COLLATE musi JOIN label ON q.entity = label.id GROUP BY q.entity, label.name - "; + '; } __PACKAGE__->meta->make_immutable; diff --git a/lib/MusicBrainz/Server/Report/DuplicateRelationshipsRecordings.pm b/lib/MusicBrainz/Server/Report/DuplicateRelationshipsRecordings.pm index 705adacd681..4ee02413dd8 100644 --- a/lib/MusicBrainz/Server/Report/DuplicateRelationshipsRecordings.pm +++ b/lib/MusicBrainz/Server/Report/DuplicateRelationshipsRecordings.pm @@ -5,7 +5,7 @@ with 'MusicBrainz::Server::Report::RecordingReport', 'MusicBrainz::Server::Report::FilterForEditor::RecordingID'; sub query { - " + ' SELECT q.entity AS recording_id, row_number() OVER (ORDER BY recording.name COLLATE musicbrainz) FROM ( @@ -68,7 +68,7 @@ SELECT q.entity AS recording_id, row_number() OVER (ORDER BY recording.name COLL JOIN recording ON q.entity = recording.id GROUP BY q.entity, recording.name - "; + '; } __PACKAGE__->meta->make_immutable; diff --git a/lib/MusicBrainz/Server/Report/DuplicateRelationshipsReleaseGroups.pm b/lib/MusicBrainz/Server/Report/DuplicateRelationshipsReleaseGroups.pm index 3796c732bbc..f5dd2746773 100644 --- a/lib/MusicBrainz/Server/Report/DuplicateRelationshipsReleaseGroups.pm +++ b/lib/MusicBrainz/Server/Report/DuplicateRelationshipsReleaseGroups.pm @@ -5,7 +5,7 @@ with 'MusicBrainz::Server::Report::ReleaseGroupReport', 'MusicBrainz::Server::Report::FilterForEditor::ReleaseGroupID'; sub query { - " + ' SELECT q.entity AS release_group_id, row_number() OVER (ORDER BY release_group.name COLLATE musicbrainz) FROM ( @@ -67,7 +67,7 @@ SELECT q.entity AS release_group_id, row_number() OVER (ORDER BY release_group.n JOIN release_group ON q.entity = release_group.id GROUP BY q.entity, release_group.name - "; + '; } __PACKAGE__->meta->make_immutable; diff --git a/lib/MusicBrainz/Server/Report/DuplicateRelationshipsReleases.pm b/lib/MusicBrainz/Server/Report/DuplicateRelationshipsReleases.pm index 8f016e10351..92cd6748b61 100644 --- a/lib/MusicBrainz/Server/Report/DuplicateRelationshipsReleases.pm +++ b/lib/MusicBrainz/Server/Report/DuplicateRelationshipsReleases.pm @@ -5,7 +5,7 @@ with 'MusicBrainz::Server::Report::ReleaseReport', 'MusicBrainz::Server::Report::FilterForEditor::ReleaseID'; sub query { - " + ' SELECT q.entity AS release_id, row_number() OVER (ORDER BY release.name COLLATE musicbrainz) FROM ( @@ -67,7 +67,7 @@ SELECT q.entity AS release_id, row_number() OVER (ORDER BY release.name COLLATE JOIN release ON q.entity = release.id GROUP BY q.entity, release.name - "; + '; } __PACKAGE__->meta->make_immutable; diff --git a/lib/MusicBrainz/Server/Report/DuplicateRelationshipsWorks.pm b/lib/MusicBrainz/Server/Report/DuplicateRelationshipsWorks.pm index 0d775c7755e..157c504c405 100644 --- a/lib/MusicBrainz/Server/Report/DuplicateRelationshipsWorks.pm +++ b/lib/MusicBrainz/Server/Report/DuplicateRelationshipsWorks.pm @@ -5,7 +5,7 @@ with 'MusicBrainz::Server::Report::WorkReport', 'MusicBrainz::Server::Report::FilterForEditor::WorkID'; sub query { - " + ' SELECT q.entity AS work_id, row_number() OVER (ORDER BY work.name COLLATE musicbrainz) FROM ( @@ -60,7 +60,7 @@ SELECT q.entity AS work_id, row_number() OVER (ORDER BY work.name COLLATE musicb JOIN work ON q.entity = work.id GROUP BY q.entity, work.name - "; + '; } __PACKAGE__->meta->make_immutable; diff --git a/lib/MusicBrainz/Server/Report/DuplicateReleaseGroups.pm b/lib/MusicBrainz/Server/Report/DuplicateReleaseGroups.pm index 8abf0baf489..1328a80ec7b 100644 --- a/lib/MusicBrainz/Server/Report/DuplicateReleaseGroups.pm +++ b/lib/MusicBrainz/Server/Report/DuplicateReleaseGroups.pm @@ -5,7 +5,7 @@ with 'MusicBrainz::Server::Report::ReleaseGroupReport', 'MusicBrainz::Server::Report::FilterForEditor::ReleaseGroupID'; sub query { - " + q{ WITH normalised_names AS ( SELECT musicbrainz_unaccent(regexp_replace(lower(rg.name), ' \((disc [0-9]+|bonus disc)(: .*)?\)\$', '')) AS normalised_name, rg.artist_credit FROM release_group rg @@ -23,7 +23,7 @@ SELECT q.rgid AS release_group_id, q.key, row_number() OVER (ORDER BY ac COLLATE GROUP BY artist_credit.name COLLATE musicbrainz, nn.normalised_name||nn.artist_credit, artist_credit.name, release_group.id, release_group.name ) q - "; + }; } __PACKAGE__->meta->make_immutable; diff --git a/lib/MusicBrainz/Server/Report/FeaturingRecordings.pm b/lib/MusicBrainz/Server/Report/FeaturingRecordings.pm index 5ae37bc7ddb..f55d668f4f3 100644 --- a/lib/MusicBrainz/Server/Report/FeaturingRecordings.pm +++ b/lib/MusicBrainz/Server/Report/FeaturingRecordings.pm @@ -6,7 +6,7 @@ with 'MusicBrainz::Server::Report::RecordingReport', 'MusicBrainz::Server::Report::FilterForEditor::RecordingID'; sub query { - " + q{ SELECT r.id AS recording_id, row_number() OVER (ORDER BY ac.name COLLATE musicbrainz, r.name COLLATE musicbrainz) @@ -14,7 +14,7 @@ sub query { JOIN artist_credit ac ON r.artist_credit = ac.id WHERE r.name COLLATE musicbrainz ~* E' \\\\(((f|w)/|(feat|feat|ft|συμμ)(\\\\.|.)|(duet with|συμμετέχει|featuring|featuring) )' - "; + }; } __PACKAGE__->meta->make_immutable; diff --git a/lib/MusicBrainz/Server/Report/FeaturingReleaseGroups.pm b/lib/MusicBrainz/Server/Report/FeaturingReleaseGroups.pm index 3ee95d7ae4f..6bc5333e10c 100644 --- a/lib/MusicBrainz/Server/Report/FeaturingReleaseGroups.pm +++ b/lib/MusicBrainz/Server/Report/FeaturingReleaseGroups.pm @@ -6,7 +6,7 @@ with 'MusicBrainz::Server::Report::ReleaseGroupReport', 'MusicBrainz::Server::Report::FilterForEditor::ReleaseGroupID'; sub query { - " + q{ SELECT rg.id AS release_group_id, row_number() OVER (ORDER BY ac.name COLLATE musicbrainz, rg.name COLLATE musicbrainz) @@ -16,7 +16,7 @@ sub query { JOIN release_group_meta rm ON rg.id = rm.id WHERE rg.name COLLATE musicbrainz ~* E' \\\\(((f|w)/|(feat|feat|ft|συμμ)(\\\\.|.)|(duet with|συμμετέχει|featuring|featuring) )' - "; + }; } __PACKAGE__->meta->make_immutable; diff --git a/lib/MusicBrainz/Server/Report/FeaturingReleases.pm b/lib/MusicBrainz/Server/Report/FeaturingReleases.pm index 228288455cd..5d81cf92643 100644 --- a/lib/MusicBrainz/Server/Report/FeaturingReleases.pm +++ b/lib/MusicBrainz/Server/Report/FeaturingReleases.pm @@ -6,7 +6,7 @@ with 'MusicBrainz::Server::Report::ReleaseReport', 'MusicBrainz::Server::Report::FilterForEditor::ReleaseID'; sub query { - " + q{ SELECT r.id AS release_id, row_number() OVER (ORDER BY ac.name COLLATE musicbrainz, r.name COLLATE musicbrainz) @@ -16,7 +16,7 @@ sub query { JOIN release_meta rm ON r.id = rm.id WHERE r.name COLLATE musicbrainz ~* E' \\\\(((f|w)/|(feat|feat|ft|συμμ)(\\\\.|.)|(duet with|συμμετέχει|featuring|featuring) )' - "; + }; } __PACKAGE__->meta->make_immutable; diff --git a/lib/MusicBrainz/Server/Report/FilterForEditor/ArtistCreditID.pm b/lib/MusicBrainz/Server/Report/FilterForEditor/ArtistCreditID.pm index 28dc762a207..e973fbdb3fc 100644 --- a/lib/MusicBrainz/Server/Report/FilterForEditor/ArtistCreditID.pm +++ b/lib/MusicBrainz/Server/Report/FilterForEditor/ArtistCreditID.pm @@ -6,11 +6,11 @@ with 'MusicBrainz::Server::Report::FilterForEditor'; sub filter_sql { my ($self, $editor_id) = @_; - my $filter_query = <<~'EOSQL'; + my $filter_query = <<~'SQL'; JOIN artist_credit_name ON artist_credit_id = artist_credit_name.artist_credit JOIN editor_subscribe_artist esa ON esa.artist = artist_credit_name.artist WHERE esa.editor = ? - EOSQL + SQL return ($filter_query, $editor_id); } diff --git a/lib/MusicBrainz/Server/Report/FilterForEditor/ArtistID.pm b/lib/MusicBrainz/Server/Report/FilterForEditor/ArtistID.pm index 467170ce78d..574e0a86a0e 100644 --- a/lib/MusicBrainz/Server/Report/FilterForEditor/ArtistID.pm +++ b/lib/MusicBrainz/Server/Report/FilterForEditor/ArtistID.pm @@ -7,8 +7,8 @@ sub filter_sql { my ($self, $editor_id) = @_; return ( - "JOIN editor_subscribe_artist esa ON esa.artist = report.artist_id - WHERE esa.editor = ?", + 'JOIN editor_subscribe_artist esa ON esa.artist = report.artist_id + WHERE esa.editor = ?', $editor_id ); } diff --git a/lib/MusicBrainz/Server/Report/FilterForEditor/EventID.pm b/lib/MusicBrainz/Server/Report/FilterForEditor/EventID.pm index 7f9c8275afa..e60cd8e9047 100644 --- a/lib/MusicBrainz/Server/Report/FilterForEditor/EventID.pm +++ b/lib/MusicBrainz/Server/Report/FilterForEditor/EventID.pm @@ -7,9 +7,9 @@ sub filter_sql { my ($self, $editor_id) = @_; return ( - "JOIN l_artist_event ON l_artist_event.entity1 = event_id + 'JOIN l_artist_event ON l_artist_event.entity1 = event_id JOIN editor_subscribe_artist esa ON esa.artist = l_artist_event.entity0 - WHERE esa.editor = ?", + WHERE esa.editor = ?', $editor_id ); } diff --git a/lib/MusicBrainz/Server/Report/FilterForEditor/LabelID.pm b/lib/MusicBrainz/Server/Report/FilterForEditor/LabelID.pm index e224385da97..66916935ea9 100644 --- a/lib/MusicBrainz/Server/Report/FilterForEditor/LabelID.pm +++ b/lib/MusicBrainz/Server/Report/FilterForEditor/LabelID.pm @@ -7,8 +7,8 @@ sub filter_sql { my ($self, $editor_id) = @_; return ( - "JOIN editor_subscribe_label esl ON esl.label = label_id - WHERE esl.editor = ?", + 'JOIN editor_subscribe_label esl ON esl.label = label_id + WHERE esl.editor = ?', $editor_id ); } diff --git a/lib/MusicBrainz/Server/Report/FilterForEditor/RecordingID.pm b/lib/MusicBrainz/Server/Report/FilterForEditor/RecordingID.pm index 896c9d0d66f..e7764ecde9f 100644 --- a/lib/MusicBrainz/Server/Report/FilterForEditor/RecordingID.pm +++ b/lib/MusicBrainz/Server/Report/FilterForEditor/RecordingID.pm @@ -7,10 +7,10 @@ sub filter_sql { my ($self, $editor_id) = @_; return ( - "JOIN recording ON recording.id = recording_id + 'JOIN recording ON recording.id = recording_id JOIN artist_credit_name ON recording.artist_credit = artist_credit_name.artist_credit JOIN editor_subscribe_artist esa ON esa.artist = artist_credit_name.artist - WHERE esa.editor = ?", + WHERE esa.editor = ?', $editor_id ); } diff --git a/lib/MusicBrainz/Server/Report/FilterForEditor/ReleaseGroupID.pm b/lib/MusicBrainz/Server/Report/FilterForEditor/ReleaseGroupID.pm index 80f211f05e2..19c65b33921 100644 --- a/lib/MusicBrainz/Server/Report/FilterForEditor/ReleaseGroupID.pm +++ b/lib/MusicBrainz/Server/Report/FilterForEditor/ReleaseGroupID.pm @@ -7,10 +7,10 @@ sub filter_sql { my ($self, $editor_id) = @_; return ( - "JOIN release_group ON release_group.id = release_group_id + 'JOIN release_group ON release_group.id = release_group_id JOIN artist_credit_name ON release_group.artist_credit = artist_credit_name.artist_credit JOIN editor_subscribe_artist esa ON esa.artist = artist_credit_name.artist - WHERE esa.editor = ?", + WHERE esa.editor = ?', $editor_id ); } diff --git a/lib/MusicBrainz/Server/Report/FilterForEditor/ReleaseID.pm b/lib/MusicBrainz/Server/Report/FilterForEditor/ReleaseID.pm index 27b31e37a63..5f400de304f 100644 --- a/lib/MusicBrainz/Server/Report/FilterForEditor/ReleaseID.pm +++ b/lib/MusicBrainz/Server/Report/FilterForEditor/ReleaseID.pm @@ -7,12 +7,12 @@ sub filter_sql { my ($self, $editor_id) = @_; return ( - "JOIN release ON release.id = release_id + 'JOIN release ON release.id = release_id JOIN artist_credit_name ON release.artist_credit = artist_credit_name.artist_credit LEFT JOIN release_label ON release_label.release = release.id LEFT JOIN editor_subscribe_artist esa ON esa.artist = artist_credit_name.artist LEFT JOIN editor_subscribe_label esl ON esl.label = release_label.label - WHERE (esa.editor IS NOT DISTINCT FROM ?) OR (esl.editor IS NOT DISTINCT FROM ?)", + WHERE (esa.editor IS NOT DISTINCT FROM ?) OR (esl.editor IS NOT DISTINCT FROM ?)', $editor_id, $editor_id ); } diff --git a/lib/MusicBrainz/Server/Report/FilterForEditor/SeriesID.pm b/lib/MusicBrainz/Server/Report/FilterForEditor/SeriesID.pm index 096fcdf5b24..c49e5b44bdc 100644 --- a/lib/MusicBrainz/Server/Report/FilterForEditor/SeriesID.pm +++ b/lib/MusicBrainz/Server/Report/FilterForEditor/SeriesID.pm @@ -7,8 +7,8 @@ sub filter_sql { my ($self, $editor_id) = @_; return ( - "JOIN editor_subscribe_series ess ON ess.series = series_id - WHERE ess.editor = ?", + 'JOIN editor_subscribe_series ess ON ess.series = series_id + WHERE ess.editor = ?', $editor_id ); } diff --git a/lib/MusicBrainz/Server/Report/FilterForEditor/WorkID.pm b/lib/MusicBrainz/Server/Report/FilterForEditor/WorkID.pm index 1d4b0eff44d..56e6d832665 100644 --- a/lib/MusicBrainz/Server/Report/FilterForEditor/WorkID.pm +++ b/lib/MusicBrainz/Server/Report/FilterForEditor/WorkID.pm @@ -7,9 +7,9 @@ sub filter_sql { my ($self, $editor_id) = @_; return ( - "JOIN l_artist_work ON l_artist_work.entity1 = work_id + 'JOIN l_artist_work ON l_artist_work.entity1 = work_id JOIN editor_subscribe_artist esa ON esa.artist = l_artist_work.entity0 - WHERE esa.editor = ?", + WHERE esa.editor = ?', $editor_id ); } diff --git a/lib/MusicBrainz/Server/Report/ISRCsWithManyRecordings.pm b/lib/MusicBrainz/Server/Report/ISRCsWithManyRecordings.pm index 5bdca6712d8..b5dc016bee8 100644 --- a/lib/MusicBrainz/Server/Report/ISRCsWithManyRecordings.pm +++ b/lib/MusicBrainz/Server/Report/ISRCsWithManyRecordings.pm @@ -8,7 +8,7 @@ sub table { 'isrc_with_many_recordings' } sub component_name { 'IsrcsWithManyRecordings' } sub query { - " + ' SELECT i.isrc, recordingcount, r.id AS recording_id, r.name, r.length, row_number() OVER (ORDER BY i.isrc) FROM isrc i @@ -18,7 +18,7 @@ sub query { FROM isrc GROUP BY isrc HAVING count(*) > 1 ) t ON t.isrc = i.isrc - "; + '; } __PACKAGE__->meta->make_immutable; diff --git a/lib/MusicBrainz/Server/Report/ISWCsWithManyWorks.pm b/lib/MusicBrainz/Server/Report/ISWCsWithManyWorks.pm index 4c2c5345c9b..5002524e364 100644 --- a/lib/MusicBrainz/Server/Report/ISWCsWithManyWorks.pm +++ b/lib/MusicBrainz/Server/Report/ISWCsWithManyWorks.pm @@ -17,7 +17,7 @@ sub table { 'iswc_with_many_works' } sub component_name { 'IswcsWithManyWorks' } sub query { - " + ' SELECT i.iswc, workcount, w.id AS work_id, row_number() OVER (ORDER BY i.iswc) FROM iswc i @@ -27,7 +27,7 @@ sub query { FROM iswc GROUP BY iswc HAVING count(*) > 1 ) t ON t.iswc = i.iswc - "; + '; } __PACKAGE__->meta->make_immutable; diff --git a/lib/MusicBrainz/Server/Report/LabelsDisambiguationSameName.pm b/lib/MusicBrainz/Server/Report/LabelsDisambiguationSameName.pm index f8400d25746..dddef490ada 100644 --- a/lib/MusicBrainz/Server/Report/LabelsDisambiguationSameName.pm +++ b/lib/MusicBrainz/Server/Report/LabelsDisambiguationSameName.pm @@ -5,13 +5,13 @@ with 'MusicBrainz::Server::Report::LabelReport', 'MusicBrainz::Server::Report::FilterForEditor::LabelID'; sub query { - " + ' SELECT label.id AS label_id, row_number() OVER (ORDER BY label.name COLLATE musicbrainz, label.id) FROM label WHERE label.name = label.comment - " + ' } __PACKAGE__->meta->make_immutable; diff --git a/lib/MusicBrainz/Server/Report/LinksWithMultipleEntities.pm b/lib/MusicBrainz/Server/Report/LinksWithMultipleEntities.pm index ac15d273e72..0622b5b5d74 100644 --- a/lib/MusicBrainz/Server/Report/LinksWithMultipleEntities.pm +++ b/lib/MusicBrainz/Server/Report/LinksWithMultipleEntities.pm @@ -10,17 +10,17 @@ sub query { my $inner_table = join( ' UNION ', - map {<<~"EOSQL"} @tables + map {<<~"SQL"} @tables SELECT DISTINCT ON (url, other_entity) -- ignore several rel types between same entity pair link_type.id AS link_type_id, link_type.gid AS link_type_gid, l_table.id AS rel_id, ${\$_->[1]} AS url, ${\$_->[2]} AS other_entity FROM link_type JOIN link ON link.link_type = link_type.id JOIN ${\$_->[0]} l_table ON l_table.link = link.id - EOSQL + SQL ); - my $query = <<~"EOSQL"; + my $query = <<~"SQL"; SELECT url.id AS url_id, count(*) AS count, row_number() OVER (ORDER BY count(*) DESC, url.id DESC) FROM url JOIN ($inner_table) l ON l.url = url.id WHERE url.url NOT LIKE 'https://www.wikidata.org%' -- has its own report @@ -32,7 +32,7 @@ sub query { '770ea9f4-cba0-4194-b77f-fe2740055e34') -- work license GROUP BY url_id HAVING count(*) > 1 - EOSQL + SQL return $query } diff --git a/lib/MusicBrainz/Server/Report/MediumsWithSequenceIssues.pm b/lib/MusicBrainz/Server/Report/MediumsWithSequenceIssues.pm index 7620c78605f..4a6eb40682b 100644 --- a/lib/MusicBrainz/Server/Report/MediumsWithSequenceIssues.pm +++ b/lib/MusicBrainz/Server/Report/MediumsWithSequenceIssues.pm @@ -16,7 +16,7 @@ sub query # E.g. If the medium had mediums: 1, 2, 3, 3, 5 then # the following will *not* hold: # 1 + 2 + 3 + 3 + 5 = 1 + 2 + 3 + 4 + 5 - <<~'EOSQL' + <<~'SQL' SELECT DISTINCT release.id AS release_id, release.name, row_number() OVER (ORDER BY release.name COLLATE musicbrainz) @@ -34,7 +34,7 @@ sub query WHERE first_medium != 1 OR last_medium != medium_count OR (medium_count * (1 + medium_count)) / 2 <> medium_pos_acc - EOSQL + SQL } 1; diff --git a/lib/MusicBrainz/Server/Report/MislinkedPseudoReleases.pm b/lib/MusicBrainz/Server/Report/MislinkedPseudoReleases.pm index 02f8bd30982..0176ee87322 100644 --- a/lib/MusicBrainz/Server/Report/MislinkedPseudoReleases.pm +++ b/lib/MusicBrainz/Server/Report/MislinkedPseudoReleases.pm @@ -4,7 +4,7 @@ use Moose; with 'MusicBrainz::Server::Report::ReleaseReport', 'MusicBrainz::Server::Report::FilterForEditor::ReleaseID'; -sub query {<<~'EOSQL'} +sub query {<<~'SQL'} SELECT r.id AS release_id, row_number() OVER (ORDER BY ac.name COLLATE musicbrainz, r.name COLLATE musicbrainz) FROM release r @@ -14,7 +14,7 @@ sub query {<<~'EOSQL'} JOIN artist_credit ac ON r.artist_credit = ac.id WHERE lt.gid = 'fc399d47-23a7-4c28-bfcf-0607a562b644' --transl(iter)ation AND r.status = 4 --pseudo-release - EOSQL + SQL __PACKAGE__->meta->make_immutable; no Moose; diff --git a/lib/MusicBrainz/Server/Report/MultipleASINs.pm b/lib/MusicBrainz/Server/Report/MultipleASINs.pm index 391b112d8d7..967afa346e9 100644 --- a/lib/MusicBrainz/Server/Report/MultipleASINs.pm +++ b/lib/MusicBrainz/Server/Report/MultipleASINs.pm @@ -9,7 +9,7 @@ sub component_name { 'MultipleAsins' } sub query { - " + q{ SELECT r.id AS release_id, row_number() OVER (ORDER BY ac.name COLLATE musicbrainz, r.name COLLATE musicbrainz) @@ -24,7 +24,7 @@ sub query GROUP BY r.id, r.name, ac.name, r.artist_credit HAVING COUNT(r.gid) > 1 - "; + }; } __PACKAGE__->meta->make_immutable; diff --git a/lib/MusicBrainz/Server/Report/MultipleDiscogsLinks.pm b/lib/MusicBrainz/Server/Report/MultipleDiscogsLinks.pm index 0e2062112fe..e6345375e46 100644 --- a/lib/MusicBrainz/Server/Report/MultipleDiscogsLinks.pm +++ b/lib/MusicBrainz/Server/Report/MultipleDiscogsLinks.pm @@ -5,7 +5,7 @@ with 'MusicBrainz::Server::Report::ReleaseReport', 'MusicBrainz::Server::Report::FilterForEditor::ReleaseID'; sub query { - " + q{ SELECT r.id AS release_id, row_number() OVER (ORDER BY ac.name COLLATE musicbrainz, r.name COLLATE musicbrainz) @@ -20,7 +20,7 @@ sub query { GROUP BY r.id, r.name, ac.name, r.artist_credit HAVING COUNT(r.gid) > 1 - "; + }; } __PACKAGE__->meta->make_immutable; diff --git a/lib/MusicBrainz/Server/Report/NoLanguage.pm b/lib/MusicBrainz/Server/Report/NoLanguage.pm index 0da67788401..859a1c2b1b1 100644 --- a/lib/MusicBrainz/Server/Report/NoLanguage.pm +++ b/lib/MusicBrainz/Server/Report/NoLanguage.pm @@ -12,14 +12,14 @@ after _load_extra_release_info => sub { }; sub query { - " + ' SELECT r.id AS release_id, row_number() OVER (ORDER BY artist_credit.name COLLATE musicbrainz, r.name COLLATE musicbrainz) FROM release r JOIN artist_credit ON r.artist_credit = artist_credit.id WHERE language IS NULL - "; + '; } __PACKAGE__->meta->make_immutable; diff --git a/lib/MusicBrainz/Server/Report/NoScript.pm b/lib/MusicBrainz/Server/Report/NoScript.pm index d08eca3692e..34dff501f92 100644 --- a/lib/MusicBrainz/Server/Report/NoScript.pm +++ b/lib/MusicBrainz/Server/Report/NoScript.pm @@ -12,13 +12,13 @@ after _load_extra_release_info => sub { }; sub query { - " + ' SELECT r.id AS release_id, row_number() OVER (ORDER BY r.artist_credit, r.name) FROM release r WHERE script IS NULL - "; + '; } __PACKAGE__->meta->make_immutable; diff --git a/lib/MusicBrainz/Server/Report/PartOfSetRelationships.pm b/lib/MusicBrainz/Server/Report/PartOfSetRelationships.pm index a4e3fb71056..405b02d99d4 100644 --- a/lib/MusicBrainz/Server/Report/PartOfSetRelationships.pm +++ b/lib/MusicBrainz/Server/Report/PartOfSetRelationships.pm @@ -5,7 +5,7 @@ with 'MusicBrainz::Server::Report::ReleaseReport', 'MusicBrainz::Server::Report::FilterForEditor::ReleaseID'; sub query { - " + q{ SELECT r.id AS release_id, row_number() OVER (ORDER BY ac.name COLLATE musicbrainz, r.name COLLATE musicbrainz) @@ -28,7 +28,7 @@ sub query { WHERE link_type.name = 'part of set' ) r JOIN artist_credit ac ON r.artist_credit = ac.id - "; + }; } __PACKAGE__->meta->make_immutable; diff --git a/lib/MusicBrainz/Server/Report/PossibleCollaborations.pm b/lib/MusicBrainz/Server/Report/PossibleCollaborations.pm index a4a21086d59..2941f6e4ffb 100644 --- a/lib/MusicBrainz/Server/Report/PossibleCollaborations.pm +++ b/lib/MusicBrainz/Server/Report/PossibleCollaborations.pm @@ -5,7 +5,7 @@ with 'MusicBrainz::Server::Report::ArtistReport', 'MusicBrainz::Server::Report::FilterForEditor::ArtistID'; sub query { - " + q{ SELECT artist.id AS artist_id, row_number() OVER ( ORDER BY artist.name COLLATE musicbrainz ) FROM artist @@ -22,7 +22,7 @@ sub query { AND link_type.name IN ('collaboration', 'conductor position', 'founder', 'member of band', 'subgroup') ) GROUP BY artist.id, artist.name - " + } } __PACKAGE__->meta->make_immutable; diff --git a/lib/MusicBrainz/Server/Report/RecordingTrackDifferentName.pm b/lib/MusicBrainz/Server/Report/RecordingTrackDifferentName.pm index 20aafefd827..7907bd7c115 100644 --- a/lib/MusicBrainz/Server/Report/RecordingTrackDifferentName.pm +++ b/lib/MusicBrainz/Server/Report/RecordingTrackDifferentName.pm @@ -9,7 +9,7 @@ with 'MusicBrainz::Server::Report::RecordingReport', sub statement_timeout { '120s' } sub query { - " + ' SELECT r.id AS recording_id, t.id AS track_id, row_number() OVER (ORDER BY r.name COLLATE musicbrainz, t.name COLLATE musicbrainz) @@ -19,7 +19,7 @@ sub query { ON r.id = t.recording WHERE (SELECT COUNT(*) FROM track WHERE recording = r.id) = 1 AND r.name != t.name - " + ' } sub inflate_rows diff --git a/lib/MusicBrainz/Server/Report/RecordingsSameNameDifferentArtistsSameName.pm b/lib/MusicBrainz/Server/Report/RecordingsSameNameDifferentArtistsSameName.pm index 540b60adf2d..7006b6a41ef 100644 --- a/lib/MusicBrainz/Server/Report/RecordingsSameNameDifferentArtistsSameName.pm +++ b/lib/MusicBrainz/Server/Report/RecordingsSameNameDifferentArtistsSameName.pm @@ -9,7 +9,7 @@ with 'MusicBrainz::Server::Report::RecordingReport', # production. sub query { - " + ' SELECT recording_id, row_number() OVER (ORDER BY rname COLLATE musicbrainz, artist_id) @@ -27,7 +27,7 @@ sub query { JOIN artist a2 ON (acn2.artist = a2.id AND a1.id != a2.id) WHERE (acn1.name = acn2.name OR a1.name = a2.name) ) r - "; + '; } __PACKAGE__->meta->make_immutable; diff --git a/lib/MusicBrainz/Server/Report/RecordingsWithEarliestReleaseRelationships.pm b/lib/MusicBrainz/Server/Report/RecordingsWithEarliestReleaseRelationships.pm index f2121755a22..4b7cd84bfc0 100644 --- a/lib/MusicBrainz/Server/Report/RecordingsWithEarliestReleaseRelationships.pm +++ b/lib/MusicBrainz/Server/Report/RecordingsWithEarliestReleaseRelationships.pm @@ -5,7 +5,7 @@ with 'MusicBrainz::Server::Report::RecordingReport', 'MusicBrainz::Server::Report::FilterForEditor::RecordingID'; sub query { - " + q{ SELECT r.id AS recording_id, row_number() OVER (ORDER BY ac.name COLLATE musicbrainz, r.name COLLATE musicbrainz) @@ -26,7 +26,7 @@ sub query { JOIN artist_credit ac ON r.artist_credit = ac.id WHERE link_type.name = 'first track release' - "; + }; } __PACKAGE__->meta->make_immutable; diff --git a/lib/MusicBrainz/Server/Report/RecordingsWithFutureDates.pm b/lib/MusicBrainz/Server/Report/RecordingsWithFutureDates.pm index 3f517237a3a..d57b7680649 100644 --- a/lib/MusicBrainz/Server/Report/RecordingsWithFutureDates.pm +++ b/lib/MusicBrainz/Server/Report/RecordingsWithFutureDates.pm @@ -5,7 +5,7 @@ with 'MusicBrainz::Server::Report::RecordingReport', 'MusicBrainz::Server::Report::FilterForEditor::RecordingID'; sub query { - " + q{ WITH link AS ( SELECT @@ -49,7 +49,7 @@ sub query { UNION ALL SELECT link, entity0, entity1 FROM l_recording_work ) AS l_ ON l_.link = link.id - "; + }; } __PACKAGE__->meta->make_immutable; diff --git a/lib/MusicBrainz/Server/Report/RecordingsWithoutVALink.pm b/lib/MusicBrainz/Server/Report/RecordingsWithoutVALink.pm index bea62651d68..f3dcd56f99a 100644 --- a/lib/MusicBrainz/Server/Report/RecordingsWithoutVALink.pm +++ b/lib/MusicBrainz/Server/Report/RecordingsWithoutVALink.pm @@ -7,7 +7,7 @@ with 'MusicBrainz::Server::Report::RecordingReport'; sub component_name { 'RecordingsWithoutVaLink' } sub query { - " + q{ SELECT r.id AS recording_id, row_number() OVER (ORDER BY r.artist_credit, r.name) @@ -16,7 +16,7 @@ sub query { JOIN artist a ON a.id = acn.artist WHERE acn.name = 'Various Artists' AND a.name != 'Various Artists' - "; + }; } __PACKAGE__->meta->make_immutable; diff --git a/lib/MusicBrainz/Server/Report/ReleaseGroupsWithoutVALink.pm b/lib/MusicBrainz/Server/Report/ReleaseGroupsWithoutVALink.pm index 1443ffe02e3..c1f6d3fc1d7 100644 --- a/lib/MusicBrainz/Server/Report/ReleaseGroupsWithoutVALink.pm +++ b/lib/MusicBrainz/Server/Report/ReleaseGroupsWithoutVALink.pm @@ -7,7 +7,7 @@ with 'MusicBrainz::Server::Report::ReleaseGroupReport'; sub component_name { 'ReleaseGroupsWithoutVaLink' } sub query { - " + q{ SELECT rg.id AS release_group_id, row_number() OVER (ORDER BY rg.artist_credit, rg.name) @@ -16,7 +16,7 @@ sub query { JOIN artist a ON a.id = acn.artist WHERE acn.name = 'Various Artists' AND a.name != 'Various Artists' - "; + }; } __PACKAGE__->meta->make_immutable; diff --git a/lib/MusicBrainz/Server/Report/ReleaseRGDifferentName.pm b/lib/MusicBrainz/Server/Report/ReleaseRGDifferentName.pm index e796f05f101..9c0d6b02307 100644 --- a/lib/MusicBrainz/Server/Report/ReleaseRGDifferentName.pm +++ b/lib/MusicBrainz/Server/Report/ReleaseRGDifferentName.pm @@ -9,7 +9,7 @@ sub table { 'release_rg_different_name' } sub component_name { 'ReleaseRgDifferentName' } sub query { - " + ' SELECT r.id AS release_id, rg.id AS release_group_id, row_number() OVER (ORDER BY r.name COLLATE musicbrainz, rg.name COLLATE musicbrainz) @@ -21,7 +21,7 @@ sub query { ON rgm.id = rg.id WHERE rgm.release_count = 1 AND r.name != rg.name - " + ' } __PACKAGE__->meta->make_immutable; diff --git a/lib/MusicBrainz/Server/Report/ReleasedTooEarly.pm b/lib/MusicBrainz/Server/Report/ReleasedTooEarly.pm index 349531f3aa1..cd588b2b3e0 100644 --- a/lib/MusicBrainz/Server/Report/ReleasedTooEarly.pm +++ b/lib/MusicBrainz/Server/Report/ReleasedTooEarly.pm @@ -5,7 +5,7 @@ with 'MusicBrainz::Server::Report::ReleaseReport', 'MusicBrainz::Server::Report::FilterForEditor::ReleaseID'; sub query { - " + q{ SELECT DISTINCT ON (r.id) r.id AS release_id, row_number() OVER (ORDER BY ac.name COLLATE musicbrainz, r.name COLLATE musicbrainz) @@ -28,7 +28,7 @@ sub query { (mf.year IS NOT NULL AND date_year < mf.year) ) r JOIN artist_credit ac ON r.artist_credit = ac.id - "; + }; } __PACKAGE__->meta->make_immutable; diff --git a/lib/MusicBrainz/Server/Report/ReleasesSameBarcode.pm b/lib/MusicBrainz/Server/Report/ReleasesSameBarcode.pm index 5c90da7c7ed..4103a1f2610 100644 --- a/lib/MusicBrainz/Server/Report/ReleasesSameBarcode.pm +++ b/lib/MusicBrainz/Server/Report/ReleasesSameBarcode.pm @@ -9,7 +9,7 @@ sub table { 'releases_same_barcode' } sub component_name { 'ReleasesSameBarcode' } sub query { - " + q{ SELECT DISTINCT ON (r.id) r.barcode AS barcode, r.id AS release_id, r.release_group AS release_group_id, row_number() OVER (ORDER BY r.barcode, r.name COLLATE musicbrainz) @@ -24,7 +24,7 @@ sub query { AND r2.status != 3 -- skip bootlegs AND r.release_group != r2.release_group ) - " + } } __PACKAGE__->meta->make_immutable; diff --git a/lib/MusicBrainz/Server/Report/ReleasesToConvert.pm b/lib/MusicBrainz/Server/Report/ReleasesToConvert.pm index a2b45b4b04e..a5ad42a124d 100755 --- a/lib/MusicBrainz/Server/Report/ReleasesToConvert.pm +++ b/lib/MusicBrainz/Server/Report/ReleasesToConvert.pm @@ -5,7 +5,7 @@ with 'MusicBrainz::Server::Report::ReleaseReport', 'MusicBrainz::Server::Report::FilterForEditor::ReleaseID'; sub query { - " + q{ SELECT DISTINCT release.id AS release_id, row_number() OVER (ORDER BY artist_credit.name COLLATE musicbrainz, release.name COLLATE musicbrainz) FROM track @@ -15,7 +15,7 @@ sub query { WHERE track.name ~* E'[^\\\\d]-[^\\\\d]' OR track.name LIKE '%/%' GROUP BY release.id, release.name, medium.id, medium.track_count, artist_credit.name HAVING count(*) = medium.track_count - "; + }; } __PACKAGE__->meta->make_immutable; diff --git a/lib/MusicBrainz/Server/Report/ReleasesWithCAANoTypes.pm b/lib/MusicBrainz/Server/Report/ReleasesWithCAANoTypes.pm index 0634c781596..d47e1896a6a 100644 --- a/lib/MusicBrainz/Server/Report/ReleasesWithCAANoTypes.pm +++ b/lib/MusicBrainz/Server/Report/ReleasesWithCAANoTypes.pm @@ -6,7 +6,7 @@ with 'MusicBrainz::Server::Report::ReleaseReport', sub component_name { 'ReleasesWithCaaNoTypes' } sub query { - " + ' SELECT r.id AS release_id, row_number() OVER (ORDER BY ac.name COLLATE musicbrainz, r.name COLLATE musicbrainz) @@ -21,7 +21,7 @@ sub query { ) ) r JOIN artist_credit ac ON r.artist_credit = ac.id - "; + '; } sub table { 'releases_with_caa_no_types' } diff --git a/lib/MusicBrainz/Server/Report/ReleasesWithDownloadRelationships.pm b/lib/MusicBrainz/Server/Report/ReleasesWithDownloadRelationships.pm index 00b539d890b..75a521fb9a0 100644 --- a/lib/MusicBrainz/Server/Report/ReleasesWithDownloadRelationships.pm +++ b/lib/MusicBrainz/Server/Report/ReleasesWithDownloadRelationships.pm @@ -5,7 +5,7 @@ with 'MusicBrainz::Server::Report::ReleaseReport', 'MusicBrainz::Server::Report::FilterForEditor::ReleaseID'; sub query { - " + ' SELECT DISTINCT r.id AS release_id, row_number() OVER (ORDER BY ac.name COLLATE musicbrainz, r.name COLLATE musicbrainz) @@ -25,7 +25,7 @@ sub query { WHERE lru.entity0 = r.id AND link.link_type IN (74, 75, 85, 980) -- paid/free download, free/paid streaming ) - "; + '; } __PACKAGE__->meta->make_immutable; diff --git a/lib/MusicBrainz/Server/Report/ReleasesWithUnlikelyLanguageScript.pm b/lib/MusicBrainz/Server/Report/ReleasesWithUnlikelyLanguageScript.pm index c8551fc7076..e6489434025 100644 --- a/lib/MusicBrainz/Server/Report/ReleasesWithUnlikelyLanguageScript.pm +++ b/lib/MusicBrainz/Server/Report/ReleasesWithUnlikelyLanguageScript.pm @@ -12,7 +12,7 @@ after _load_extra_release_info => sub { }; sub query { - " + q{ SELECT DISTINCT r.id AS release_id, row_number() OVER (ORDER BY ac.name COLLATE musicbrainz, r.name COLLATE musicbrainz) @@ -32,7 +32,7 @@ sub query { language.iso_code_3 = 'jpn' AND script.iso_code NOT IN ('Brai', 'Hira', 'Hrkt', 'Kana', 'Jpan', 'Latn', 'Qaaa') ) - "; + }; } __PACKAGE__->meta->make_immutable; diff --git a/lib/MusicBrainz/Server/Report/ReleasesWithoutVALink.pm b/lib/MusicBrainz/Server/Report/ReleasesWithoutVALink.pm index df64a094b6b..db1482e4177 100644 --- a/lib/MusicBrainz/Server/Report/ReleasesWithoutVALink.pm +++ b/lib/MusicBrainz/Server/Report/ReleasesWithoutVALink.pm @@ -7,7 +7,7 @@ with 'MusicBrainz::Server::Report::ReleaseReport'; sub component_name { 'ReleasesWithoutVaLink' } sub query { - " + q{ SELECT DISTINCT ON (r.id) r.id AS release_id, row_number() OVER (ORDER BY r.artist_credit, r.name) @@ -30,7 +30,7 @@ sub query { WHERE acn.name = 'Various Artists' AND a.name != 'Various Artists' ) r - "; + }; } __PACKAGE__->meta->make_immutable; diff --git a/lib/MusicBrainz/Server/Report/SeparateDiscs.pm b/lib/MusicBrainz/Server/Report/SeparateDiscs.pm index 41f034b343f..b6763421e6b 100644 --- a/lib/MusicBrainz/Server/Report/SeparateDiscs.pm +++ b/lib/MusicBrainz/Server/Report/SeparateDiscs.pm @@ -5,7 +5,7 @@ with 'MusicBrainz::Server::Report::ReleaseReport', 'MusicBrainz::Server::Report::FilterForEditor::ReleaseID'; sub query { - " + q{ SELECT DISTINCT ON (r.id) r.id AS release_id, row_number() OVER (ORDER BY ac.name COLLATE musicbrainz, r.name COLLATE musicbrainz) @@ -17,7 +17,7 @@ sub query { WHERE r.name ~ E'\\\\((disc [0-9]+|bonus disc)(: .*)?\\\\)' AND NOT (rg.type = 2 AND release_country.country = 221) - "; + }; } __PACKAGE__->meta->make_immutable; diff --git a/lib/MusicBrainz/Server/Report/SetInDifferentRG.pm b/lib/MusicBrainz/Server/Report/SetInDifferentRG.pm index 536524c67a0..f9841dd6bb1 100644 --- a/lib/MusicBrainz/Server/Report/SetInDifferentRG.pm +++ b/lib/MusicBrainz/Server/Report/SetInDifferentRG.pm @@ -8,7 +8,7 @@ with 'MusicBrainz::Server::Report::ReleaseGroupReport', sub component_name { 'SetInDifferentRg' } sub query { - " + q{ SELECT DISTINCT rg.id AS release_group_id, row_number() OVER (ORDER BY rg.name COLLATE musicbrainz) @@ -33,7 +33,7 @@ sub query { WHERE link_type.gid IN ('6d08ec1e-a292-4dac-90f3-c398a39defd5', 'fc399d47-23a7-4c28-bfcf-0607a562b644') AND r0.release_group <> r1.release_group ) - "; + }; } 1; diff --git a/lib/MusicBrainz/Server/Report/SingleMediumReleasesWithMediumTitles.pm b/lib/MusicBrainz/Server/Report/SingleMediumReleasesWithMediumTitles.pm index 02dc8f6d75b..ecdded7b2ac 100644 --- a/lib/MusicBrainz/Server/Report/SingleMediumReleasesWithMediumTitles.pm +++ b/lib/MusicBrainz/Server/Report/SingleMediumReleasesWithMediumTitles.pm @@ -5,7 +5,7 @@ with 'MusicBrainz::Server::Report::ReleaseReport', 'MusicBrainz::Server::Report::FilterForEditor::ReleaseID'; sub query { - "SELECT DISTINCT ON (release.id) + q{SELECT DISTINCT ON (release.id) release.id AS release_id, row_number() OVER ( ORDER BY artist_credit.name COLLATE musicbrainz, release.name COLLATE musicbrainz @@ -18,7 +18,7 @@ sub query { FROM medium GROUP BY release HAVING count(id) = 1 - ) AND medium.name != ''"; + ) AND medium.name != ''}; } __PACKAGE__->meta->make_immutable; diff --git a/lib/MusicBrainz/Server/Report/SomeFormatsUnset.pm b/lib/MusicBrainz/Server/Report/SomeFormatsUnset.pm index 9c94694d4de..da39a721d15 100644 --- a/lib/MusicBrainz/Server/Report/SomeFormatsUnset.pm +++ b/lib/MusicBrainz/Server/Report/SomeFormatsUnset.pm @@ -5,7 +5,7 @@ with 'MusicBrainz::Server::Report::ReleaseReport', 'MusicBrainz::Server::Report::FilterForEditor::ReleaseID'; sub query { - " + ' SELECT r.id AS release_id, row_number() OVER (ORDER BY ac.name COLLATE musicbrainz, r.name COLLATE musicbrainz) @@ -21,7 +21,7 @@ sub query { ) AS q JOIN release r ON r.id = q.release JOIN artist_credit ac ON r.artist_credit = ac.id - "; + '; } __PACKAGE__->meta->make_immutable; diff --git a/lib/MusicBrainz/Server/Report/SuperfluousDataTracks.pm b/lib/MusicBrainz/Server/Report/SuperfluousDataTracks.pm index 695a91796be..c7bab18522f 100644 --- a/lib/MusicBrainz/Server/Report/SuperfluousDataTracks.pm +++ b/lib/MusicBrainz/Server/Report/SuperfluousDataTracks.pm @@ -6,7 +6,7 @@ with 'MusicBrainz::Server::Report::ReleaseReport', 'MusicBrainz::Server::Report::FilterForEditor::ReleaseID'; sub query { - <<~'EOSQL' + <<~'SQL' SELECT release.id AS release_id, row_number() OVER (ORDER BY ac.name COLLATE musicbrainz, release.name COLLATE musicbrainz) @@ -25,7 +25,7 @@ sub query { ) ) release JOIN artist_credit ac ON release.artist_credit = ac.id - EOSQL + SQL } 1; diff --git a/lib/MusicBrainz/Server/Report/TracksNamedWithSequence.pm b/lib/MusicBrainz/Server/Report/TracksNamedWithSequence.pm index 0d7f6f94ab1..abec27e9bcf 100644 --- a/lib/MusicBrainz/Server/Report/TracksNamedWithSequence.pm +++ b/lib/MusicBrainz/Server/Report/TracksNamedWithSequence.pm @@ -6,7 +6,7 @@ with 'MusicBrainz::Server::Report::ReleaseReport', 'MusicBrainz::Server::Report::FilterForEditor::ReleaseID'; sub query { - <<~'EOSQL' + <<~'SQL' SELECT release.id AS release_id, row_number() OVER (ORDER BY release.name COLLATE musicbrainz) FROM ( @@ -20,7 +20,7 @@ sub query { HAVING count(*) > 2 ) s JOIN release ON s.id = release.id - EOSQL + SQL } 1; diff --git a/lib/MusicBrainz/Server/Report/TracksWithSequenceIssues.pm b/lib/MusicBrainz/Server/Report/TracksWithSequenceIssues.pm index 1c0ca92fd15..41ceb12fab1 100644 --- a/lib/MusicBrainz/Server/Report/TracksWithSequenceIssues.pm +++ b/lib/MusicBrainz/Server/Report/TracksWithSequenceIssues.pm @@ -16,7 +16,7 @@ sub query { # E.g. If the tracklist had tracks: 1, 2, 3, 3, 5 then # the following will *not* hold: # 1 + 2 + 3 + 3 + 5 = 1 + 2 + 3 + 4 + 5 - <<~'EOSQL' + <<~'SQL' SELECT release.id AS release_id, row_number() OVER (ORDER BY release.name COLLATE musicbrainz) FROM @@ -40,7 +40,7 @@ sub query { OR last_track <> s.track_count - (1 - first_track) OR (last_track * (1 + last_track)) <> 2 * track_pos_acc ) release - EOSQL + SQL } 1; diff --git a/lib/MusicBrainz/Server/Report/TracksWithoutTimes.pm b/lib/MusicBrainz/Server/Report/TracksWithoutTimes.pm index f41412cf328..884c4a5279c 100644 --- a/lib/MusicBrainz/Server/Report/TracksWithoutTimes.pm +++ b/lib/MusicBrainz/Server/Report/TracksWithoutTimes.pm @@ -6,7 +6,7 @@ with 'MusicBrainz::Server::Report::ReleaseReport', 'MusicBrainz::Server::Report::FilterForEditor::ReleaseID'; sub query { - <<~'EOSQL' + <<~'SQL' SELECT release.id AS release_id, row_number() OVER (ORDER BY release.name COLLATE musicbrainz) FROM ( @@ -18,7 +18,7 @@ sub query { GROUP BY release.id ) s JOIN release ON s.id = release.id - EOSQL + SQL } 1; diff --git a/lib/MusicBrainz/Server/Report/UnlinkedPseudoReleases.pm b/lib/MusicBrainz/Server/Report/UnlinkedPseudoReleases.pm index 494542b549e..8cfe78932e6 100644 --- a/lib/MusicBrainz/Server/Report/UnlinkedPseudoReleases.pm +++ b/lib/MusicBrainz/Server/Report/UnlinkedPseudoReleases.pm @@ -5,7 +5,7 @@ with 'MusicBrainz::Server::Report::ReleaseReport', 'MusicBrainz::Server::Report::FilterForEditor::ReleaseID'; sub query { - " + q{ SELECT r.id AS release_id, row_number() OVER (ORDER BY ac.name COLLATE musicbrainz, r.name COLLATE musicbrainz) FROM release r @@ -22,7 +22,7 @@ WHERE r.status IN ( FROM release_status rs WHERE rs.name = 'Pseudo-Release' ) AND lrr.link IS NULL - "; + }; } __PACKAGE__->meta->make_immutable; diff --git a/lib/MusicBrainz/Server/Report/WikidataLinksWithMultipleEntities.pm b/lib/MusicBrainz/Server/Report/WikidataLinksWithMultipleEntities.pm index 6dccc5dfe57..43b177128aa 100644 --- a/lib/MusicBrainz/Server/Report/WikidataLinksWithMultipleEntities.pm +++ b/lib/MusicBrainz/Server/Report/WikidataLinksWithMultipleEntities.pm @@ -10,21 +10,21 @@ sub query { my $inner_table = join( ' UNION ', - map {<<~"EOSQL"} @tables + map {<<~"SQL"} @tables SELECT link_type.id AS link_type_id, l_table.id AS rel_id, ${\$_->[1]} AS url FROM link_type JOIN link ON link.link_type = link_type.id JOIN ${\$_->[0]} l_table ON l_table.link = link.id - EOSQL + SQL ); - my $query = <<~"EOSQL"; + my $query = <<~"SQL"; SELECT url.id AS url_id, count(*) AS count, row_number() OVER (ORDER BY count(*) DESC, url.id DESC) FROM url JOIN ($inner_table) l ON l.url = url.id WHERE url.url LIKE 'https://www.wikidata.org%' GROUP BY url_id HAVING count(*) > 1 - EOSQL + SQL return $query } diff --git a/lib/MusicBrainz/Server/Report/WorkSameTypeAsParent.pm b/lib/MusicBrainz/Server/Report/WorkSameTypeAsParent.pm index 8f762272da2..2b059010632 100644 --- a/lib/MusicBrainz/Server/Report/WorkSameTypeAsParent.pm +++ b/lib/MusicBrainz/Server/Report/WorkSameTypeAsParent.pm @@ -4,7 +4,7 @@ use Moose; with 'MusicBrainz::Server::Report::WorkReport', 'MusicBrainz::Server::Report::FilterForEditor::WorkID'; -sub query {<<~'EOSQL'} +sub query {<<~'SQL'} SELECT DISTINCT w.id AS work_id, row_number() OVER (ORDER BY w.type, w.name COLLATE musicbrainz) FROM work w @@ -18,7 +18,7 @@ sub query {<<~'EOSQL'} AND lt.gid = 'ca8d3642-ce5f-49f8-91f2-125d72524e6a' --parts AND w2.type = w.type ) - EOSQL + SQL __PACKAGE__->meta->make_immutable; no Moose; diff --git a/lib/MusicBrainz/Server/Role/Translation.pm b/lib/MusicBrainz/Server/Role/Translation.pm index 321cc3fd12e..0135d226fd1 100644 --- a/lib/MusicBrainz/Server/Role/Translation.pm +++ b/lib/MusicBrainz/Server/Role/Translation.pm @@ -28,7 +28,7 @@ role { { my ($self, $msgid, $vars) = @_; - my %vars = %$vars if (ref $vars eq "HASH"); + my %vars = %$vars if (ref $vars eq 'HASH'); $self->_bind_domain($params->domain) unless $self->bound; @@ -41,7 +41,7 @@ role { { my ($self, $msgid, $msgctxt, $vars) = @_; - my %vars = %$vars if (ref $vars eq "HASH"); + my %vars = %$vars if (ref $vars eq 'HASH'); $self->_bind_domain($params->domain) unless $self->bound; @@ -54,7 +54,7 @@ role { { my ($self, $msgid, $msgid_plural, $n, $vars) = @_; - my %vars = %$vars if (ref $vars eq "HASH"); + my %vars = %$vars if (ref $vars eq 'HASH'); $self->_bind_domain($params->domain) unless $self->bound; diff --git a/lib/MusicBrainz/Server/Sitemap/Builder.pm b/lib/MusicBrainz/Server/Sitemap/Builder.pm index ff1a7603166..c84b607c0c7 100644 --- a/lib/MusicBrainz/Server/Sitemap/Builder.pm +++ b/lib/MusicBrainz/Server/Sitemap/Builder.pm @@ -257,7 +257,7 @@ sub build_one_sitemap { $write_sitemap = 0; if ($old_sitemap_modtimes{$remote_filename}) { - print "using previous modtime, since file unchanged..."; + print 'using previous modtime, since file unchanged...'; $modtime = $old_sitemap_modtimes{$remote_filename}; } } diff --git a/lib/MusicBrainz/Server/Sitemap/Constants.pm b/lib/MusicBrainz/Server/Sitemap/Constants.pm index 5424c5e314c..b47d56b0ab6 100644 --- a/lib/MusicBrainz/Server/Sitemap/Constants.pm +++ b/lib/MusicBrainz/Server/Sitemap/Constants.pm @@ -45,78 +45,78 @@ our Readonly %SITEMAP_SUFFIX_INFO = map { if ($entity_type eq 'artist') { $suffix_info->{base}{extra_sql} = { - columns => "(SELECT count(rg) FROM tmp_sitemaps_artist_direct_rgs tsadr WHERE tsadr.artist = artist.id AND is_official) official_rg_count", + columns => '(SELECT count(rg) FROM tmp_sitemaps_artist_direct_rgs tsadr WHERE tsadr.artist = artist.id AND is_official) official_rg_count', }; - $suffix_info->{base}{paginated} = "official_rg_count"; + $suffix_info->{base}{paginated} = 'official_rg_count'; $suffix_info->{all} = { - extra_sql => {columns => "(SELECT count(rg) FROM tmp_sitemaps_artist_direct_rgs tsadr WHERE tsadr.artist = artist.id) all_rg_count"}, - paginated => "all_rg_count", + extra_sql => {columns => '(SELECT count(rg) FROM tmp_sitemaps_artist_direct_rgs tsadr WHERE tsadr.artist = artist.id) all_rg_count'}, + paginated => 'all_rg_count', suffix => 'all=1', filename_suffix => 'all', suffix_delimiter => '?' }; $suffix_info->{va} = { - extra_sql => {columns => "(SELECT count(rg) FROM tmp_sitemaps_artist_va_rgs tsavr WHERE tsavr.artist = artist.id AND is_official) official_va_rg_count"}, - paginated => "official_va_rg_count", + extra_sql => {columns => '(SELECT count(rg) FROM tmp_sitemaps_artist_va_rgs tsavr WHERE tsavr.artist = artist.id AND is_official) official_va_rg_count'}, + paginated => 'official_va_rg_count', suffix => 'va=1', filename_suffix => 'va', suffix_delimiter => '?', priority => priority_by_count('official_va_rg_count'), }; $suffix_info->{all_va} = { - extra_sql => {columns => "(SELECT count(rg) FROM tmp_sitemaps_artist_va_rgs tsavr WHERE tsavr.artist = artist.id) all_va_rg_count"}, - paginated => "all_va_rg_count", + extra_sql => {columns => '(SELECT count(rg) FROM tmp_sitemaps_artist_va_rgs tsavr WHERE tsavr.artist = artist.id) all_va_rg_count'}, + paginated => 'all_va_rg_count', suffix => 'va=1&all=1', filename_suffix => 'va-all', suffix_delimiter => '?', priority => priority_by_count('all_va_rg_count'), }; $suffix_info->{releases} = { - extra_sql => {columns => "(SELECT count(release) FROM tmp_sitemaps_artist_direct_releases tsadre WHERE tsadre.artist = artist.id) direct_release_count"}, - paginated => "direct_release_count", + extra_sql => {columns => '(SELECT count(release) FROM tmp_sitemaps_artist_direct_releases tsadre WHERE tsadre.artist = artist.id) direct_release_count'}, + paginated => 'direct_release_count', suffix => 'releases', priority => priority_by_count('direct_release_count'), }; $suffix_info->{releases_va} = { - extra_sql => {columns => "(SELECT count(release) FROM tmp_sitemaps_artist_va_releases tsavre WHERE tsavre.artist = artist.id) va_release_count"}, - paginated => "va_release_count", + extra_sql => {columns => '(SELECT count(release) FROM tmp_sitemaps_artist_va_releases tsavre WHERE tsavre.artist = artist.id) va_release_count'}, + paginated => 'va_release_count', suffix => 'releases?va=1', filename_suffix => 'releases-va', priority => priority_by_count('va_release_count'), }; $suffix_info->{recordings} = { - extra_sql => {columns => "(SELECT count(recording) FROM tmp_sitemaps_artist_recordings tsar WHERE tsar.artist = artist.id) recording_count"}, - paginated => "recording_count", + extra_sql => {columns => '(SELECT count(recording) FROM tmp_sitemaps_artist_recordings tsar WHERE tsar.artist = artist.id) recording_count'}, + paginated => 'recording_count', suffix => 'recordings', priority => priority_by_count('recording_count'), jsonld_markup => 1, }; $suffix_info->{recordings_video} = { - extra_sql => {columns => "(SELECT count(recording) FROM tmp_sitemaps_artist_recordings tsar WHERE tsar.artist = artist.id AND is_video) video_count"}, - paginated => "video_count", + extra_sql => {columns => '(SELECT count(recording) FROM tmp_sitemaps_artist_recordings tsar WHERE tsar.artist = artist.id AND is_video) video_count'}, + paginated => 'video_count', suffix => 'recordings?video=1', filename_suffix => 'recordings-video', priority => priority_by_count('video_count'), jsonld_markup => 1, }; $suffix_info->{recordings_standalone} = { - extra_sql => {columns => "(SELECT count(recording) FROM tmp_sitemaps_artist_recordings tsar WHERE tsar.artist = artist.id AND is_standalone) standalone_count"}, - paginated => "standalone_count", + extra_sql => {columns => '(SELECT count(recording) FROM tmp_sitemaps_artist_recordings tsar WHERE tsar.artist = artist.id AND is_standalone) standalone_count'}, + paginated => 'standalone_count', suffix => 'recordings?standalone=1', filename_suffix => 'recordings-standalone', priority => priority_by_count('standalone_count'), jsonld_markup => 1, }; $suffix_info->{works} = { - extra_sql => {columns => "(SELECT count(work) FROM tmp_sitemaps_artist_works tsaw WHERE tsaw.artist = artist.id) work_count"}, - paginated => "work_count", + extra_sql => {columns => '(SELECT count(work) FROM tmp_sitemaps_artist_works tsaw WHERE tsaw.artist = artist.id) work_count'}, + paginated => 'work_count', suffix => 'works', priority => priority_by_count('work_count'), }; $suffix_info->{events} = { # NOTE: no temporary table needed, since this can really probably just hit l_artist_event directly, no need to join or union. Can revisit if performance is an issue. - extra_sql => {columns => "(SELECT count(DISTINCT entity1) FROM l_artist_event WHERE entity0 = artist.id) event_count"}, - paginated => "event_count", + extra_sql => {columns => '(SELECT count(DISTINCT entity1) FROM l_artist_event WHERE entity0 = artist.id) event_count'}, + paginated => 'event_count', suffix => 'events', priority => priority_by_count('event_count'), }; @@ -124,14 +124,14 @@ our Readonly %SITEMAP_SUFFIX_INFO = map { if ($entity_type eq 'instrument') { $suffix_info->{recordings} = { - extra_sql => {columns => "(SELECT count(recording) FROM tmp_sitemaps_instrument_recordings tsir where tsir.instrument = instrument.id) recording_count"}, - paginated => "recording_count", + extra_sql => {columns => '(SELECT count(recording) FROM tmp_sitemaps_instrument_recordings tsir where tsir.instrument = instrument.id) recording_count'}, + paginated => 'recording_count', suffix => 'recordings', priority => priority_by_count('recording_count'), }; $suffix_info->{releases} = { - extra_sql => {columns => "(SELECT count(release) FROM tmp_sitemaps_instrument_releases tsir where tsir.instrument = instrument.id) release_count"}, - paginated => "release_count", + extra_sql => {columns => '(SELECT count(release) FROM tmp_sitemaps_instrument_releases tsir where tsir.instrument = instrument.id) release_count'}, + paginated => 'release_count', suffix => 'releases', priority => priority_by_count('release_count'), }; @@ -139,16 +139,16 @@ our Readonly %SITEMAP_SUFFIX_INFO = map { if ($entity_type eq 'label') { $suffix_info->{base}{extra_sql} = { - columns => "(SELECT count(DISTINCT release) FROM release_label WHERE release_label.label = label.id) release_count" + columns => '(SELECT count(DISTINCT release) FROM release_label WHERE release_label.label = label.id) release_count' }; - $suffix_info->{base}{paginated} = "release_count"; + $suffix_info->{base}{paginated} = 'release_count'; } if ($entity_type eq 'place') { $suffix_info->{events} = { # NOTE: no temporary table needed, since this can really probably just hit l_event_place directly, no need to join or union. Can revisit if performance is an issue. - extra_sql => {columns => "(SELECT count(DISTINCT entity0) FROM l_event_place WHERE entity1 = place.id) event_count"}, - paginated => "event_count", + extra_sql => {columns => '(SELECT count(DISTINCT entity0) FROM l_event_place WHERE entity1 = place.id) event_count'}, + paginated => 'event_count', suffix => 'events', priority => priority_by_count('event_count'), }; @@ -219,15 +219,15 @@ our Readonly %SITEMAP_SUFFIX_INFO = map { if ($entity_type eq 'release_group') { $suffix_info->{base}{extra_sql} = { - columns => "(SELECT count(DISTINCT release.id) FROM release WHERE release.release_group = release_group.id) release_count" + columns => '(SELECT count(DISTINCT release.id) FROM release WHERE release.release_group = release_group.id) release_count' }; - $suffix_info->{base}{paginated} = "release_count"; + $suffix_info->{base}{paginated} = 'release_count'; } if ($entity_type eq 'work') { $suffix_info->{recordings} = { - extra_sql => {columns => "(SELECT recordings_count FROM tmp_sitemaps_work_recordings_count WHERE work = work.id) recordings_count"}, - paginated => "recordings_count", + extra_sql => {columns => '(SELECT recordings_count FROM tmp_sitemaps_work_recordings_count WHERE work = work.id) recordings_count'}, + paginated => 'recordings_count', suffix => 'direction=2&link_type_id=278', suffix_delimiter => '?', filename_suffix => 'recordings', diff --git a/lib/MusicBrainz/Server/Sitemap/Incremental.pm b/lib/MusicBrainz/Server/Sitemap/Incremental.pm index 900fa93a341..40812f49164 100644 --- a/lib/MusicBrainz/Server/Sitemap/Incremental.pm +++ b/lib/MusicBrainz/Server/Sitemap/Incremental.pm @@ -109,21 +109,21 @@ sub get_changed_documents { $last_modified = $c->sql->select_single_value('SELECT now()'); } - my $old_hash = $c->sql->select_single_value(<<~"EOSQL", $row_id, $url); + my $old_hash = $c->sql->select_single_value(<<~"SQL", $row_id, $url); SELECT encode(jsonld_sha1, 'hex') FROM sitemaps.${entity_type}_lastmod WHERE id = ? AND url = ? - EOSQL + SQL if (defined $old_hash) { if ($old_hash ne $new_hash) { log("Found change at $url"); - $c->sql->do(<<~"EOSQL", "\\x$new_hash", $last_modified, $replication_sequence, $row_id, $url); + $c->sql->do(<<~"SQL", "\\x$new_hash", $last_modified, $replication_sequence, $row_id, $url); UPDATE sitemaps.${entity_type}_lastmod SET jsonld_sha1 = ?, last_modified = ?, replication_sequence = ? WHERE id = ? AND url = ? - EOSQL + SQL return 1; } log("No change at $url"); @@ -283,7 +283,7 @@ sub run { ); unless (-f $self->index_localname) { - log("ERROR: No sitemap index file was found"); + log('ERROR: No sitemap index file was found'); exit 1; } diff --git a/lib/MusicBrainz/Server/Sitemap/Overall.pm b/lib/MusicBrainz/Server/Sitemap/Overall.pm index 70753b3251d..e4e2873756f 100644 --- a/lib/MusicBrainz/Server/Sitemap/Overall.pm +++ b/lib/MusicBrainz/Server/Sitemap/Overall.pm @@ -36,81 +36,81 @@ sub create_temporary_tables { $sql->begin; $sql->do( - "CREATE TEMPORARY TABLE tmp_sitemaps_artist_direct_rgs + 'CREATE TEMPORARY TABLE tmp_sitemaps_artist_direct_rgs (artist INTEGER, rg INTEGER, is_official BOOLEAN NOT NULL, PRIMARY KEY (artist, rg)) - ON COMMIT DELETE ROWS"); + ON COMMIT DELETE ROWS'); $sql->do( - "CREATE TEMPORARY TABLE tmp_sitemaps_artist_va_rgs + 'CREATE TEMPORARY TABLE tmp_sitemaps_artist_va_rgs (artist INTEGER, rg INTEGER, is_official BOOLEAN NOT NULL, PRIMARY KEY (artist, rg)) - ON COMMIT DELETE ROWS"); + ON COMMIT DELETE ROWS'); $sql->do( - "CREATE TEMPORARY TABLE tmp_sitemaps_artist_direct_releases + 'CREATE TEMPORARY TABLE tmp_sitemaps_artist_direct_releases (artist INTEGER, release INTEGER, PRIMARY KEY (artist, release)) - ON COMMIT DELETE ROWS"); + ON COMMIT DELETE ROWS'); $sql->do( - "CREATE TEMPORARY TABLE tmp_sitemaps_artist_va_releases + 'CREATE TEMPORARY TABLE tmp_sitemaps_artist_va_releases (artist INTEGER, release INTEGER, PRIMARY KEY (artist, release)) - ON COMMIT DELETE ROWS"); + ON COMMIT DELETE ROWS'); $sql->do( - "CREATE TEMPORARY TABLE tmp_sitemaps_artist_recordings + 'CREATE TEMPORARY TABLE tmp_sitemaps_artist_recordings (artist INTEGER, recording INTEGER, is_video BOOLEAN NOT NULL, is_standalone BOOLEAN NOT NULL, PRIMARY KEY (artist, recording)) - ON COMMIT DELETE ROWS"); + ON COMMIT DELETE ROWS'); $sql->do( - "CREATE TEMPORARY TABLE tmp_sitemaps_artist_works + 'CREATE TEMPORARY TABLE tmp_sitemaps_artist_works (artist INTEGER, work INTEGER, PRIMARY KEY (artist, work)) - ON COMMIT DELETE ROWS"); + ON COMMIT DELETE ROWS'); $sql->do( - "CREATE TEMPORARY TABLE tmp_sitemaps_instrument_recordings + 'CREATE TEMPORARY TABLE tmp_sitemaps_instrument_recordings (instrument INTEGER, recording INTEGER, PRIMARY KEY (instrument, recording)) - ON COMMIT DELETE ROWS"); + ON COMMIT DELETE ROWS'); $sql->do( - "CREATE TEMPORARY TABLE tmp_sitemaps_instrument_releases + 'CREATE TEMPORARY TABLE tmp_sitemaps_instrument_releases (instrument INTEGER, release INTEGER, PRIMARY KEY (instrument, release)) - ON COMMIT DELETE ROWS"); + ON COMMIT DELETE ROWS'); $sql->do( - "CREATE TEMPORARY TABLE tmp_sitemaps_work_recordings_count + 'CREATE TEMPORARY TABLE tmp_sitemaps_work_recordings_count (work INTEGER, recordings_count INTEGER, PRIMARY KEY (work)) - ON COMMIT DELETE ROWS"); + ON COMMIT DELETE ROWS'); $sql->commit; } sub fill_temporary_tables { my ($self, $sql) = @_; - my $is_official = "(EXISTS (SELECT TRUE FROM release WHERE release.release_group = q.rg AND release.status = '1') - OR NOT EXISTS (SELECT 1 FROM release WHERE release.release_group = q.rg AND release.status IS NOT NULL))"; + my $is_official = q{(EXISTS (SELECT TRUE FROM release WHERE release.release_group = q.rg AND release.status = '1') + OR NOT EXISTS (SELECT 1 FROM release WHERE release.release_group = q.rg AND release.status IS NOT NULL))}; # Release groups that will appear on the non-VA listings, per artist log('Filling tmp_sitemaps_artist_direct_rgs'); @@ -121,7 +121,7 @@ sub fill_temporary_tables { JOIN artist_credit_name ON release_group.artist_credit = artist_credit_name.artist_credit) q"); log('Analyzing tmp_sitemaps_artist_direct_rgs'); - $sql->do("ANALYZE tmp_sitemaps_artist_direct_rgs"); + $sql->do('ANALYZE tmp_sitemaps_artist_direct_rgs'); # Release groups that will appear on the VA listings, per artist. Uses the above temporary table to exclude non-VA appearances. log('Filling tmp_sitemaps_artist_va_rgs'); @@ -136,32 +136,32 @@ sub fill_temporary_tables { WHERE NOT EXISTS (SELECT TRUE FROM tmp_sitemaps_artist_direct_rgs WHERE artist = artist_credit_name.artist AND rg = release_group.id)) q"); log('Analyzing tmp_sitemaps_artist_va_rgs'); - $sql->do("ANALYZE tmp_sitemaps_artist_va_rgs"); + $sql->do('ANALYZE tmp_sitemaps_artist_va_rgs'); # Releases that will appear in the non-VA part of the artist releases tab, per artist log('Filling tmp_sitemaps_artist_direct_releases'); - $sql->do("INSERT INTO tmp_sitemaps_artist_direct_releases (artist, release) + $sql->do('INSERT INTO tmp_sitemaps_artist_direct_releases (artist, release) SELECT DISTINCT artist_credit_name.artist AS artist, release.id AS release - FROM release JOIN artist_credit_name ON release.artist_credit = artist_credit_name.artist_credit"); + FROM release JOIN artist_credit_name ON release.artist_credit = artist_credit_name.artist_credit'); log('Analyzing tmp_sitemaps_artist_direct_releases'); - $sql->do("ANALYZE tmp_sitemaps_artist_direct_releases"); + $sql->do('ANALYZE tmp_sitemaps_artist_direct_releases'); # Releases that will appear in the VA listings instead. Uses above table to exclude non-VA appearances. log('Filling tmp_sitemaps_artist_va_releases'); - $sql->do("INSERT INTO tmp_sitemaps_artist_va_releases (artist, release) + $sql->do('INSERT INTO tmp_sitemaps_artist_va_releases (artist, release) SELECT DISTINCT artist_credit_name.artist AS artist, release.id AS release FROM release JOIN medium ON medium.release = release.id JOIN track ON track.medium = medium.id JOIN artist_credit_name ON track.artist_credit = artist_credit_name.artist_credit - WHERE NOT EXISTS (SELECT TRUE FROM tmp_sitemaps_artist_direct_releases WHERE artist = artist_credit_name.artist AND release = release.id)"); + WHERE NOT EXISTS (SELECT TRUE FROM tmp_sitemaps_artist_direct_releases WHERE artist = artist_credit_name.artist AND release = release.id)'); log('Analyzing tmp_sitemaps_artist_va_releases'); - $sql->do("ANALYZE tmp_sitemaps_artist_va_releases"); + $sql->do('ANALYZE tmp_sitemaps_artist_va_releases'); log('Filling tmp_sitemaps_artist_recordings'); - $sql->do("INSERT INTO tmp_sitemaps_artist_recordings (artist, recording, is_video, is_standalone) + $sql->do('INSERT INTO tmp_sitemaps_artist_recordings (artist, recording, is_video, is_standalone) WITH track_recordings (recording) AS ( SELECT DISTINCT recording FROM track ) @@ -170,66 +170,66 @@ sub fill_temporary_tables { video as is_video, track_recordings.recording IS NULL AS is_standalone FROM recording JOIN artist_credit_name ON recording.artist_credit = artist_credit_name.artist_credit - LEFT JOIN track_recordings ON recording.id = track_recordings.recording"); + LEFT JOIN track_recordings ON recording.id = track_recordings.recording'); log('Analyzing tmp_sitemaps_artist_recordings'); - $sql->do("ANALYZE tmp_sitemaps_artist_recordings"); + $sql->do('ANALYZE tmp_sitemaps_artist_recordings'); # Works linked directly to artists as well as via recording ACs. log('Filling tmp_sitemaps_artist_works'); - $sql->do("INSERT INTO tmp_sitemaps_artist_works (artist, work) + $sql->do('INSERT INTO tmp_sitemaps_artist_works (artist, work) SELECT entity0 AS artist, entity1 AS work from l_artist_work UNION DISTINCT SELECT tsar.artist AS artist, entity1 AS work FROM tmp_sitemaps_artist_recordings tsar - JOIN l_recording_work ON tsar.recording = l_recording_work.entity0"); + JOIN l_recording_work ON tsar.recording = l_recording_work.entity0'); log('Analyzing tmp_sitemaps_artist_works'); - $sql->do("ANALYZE tmp_sitemaps_artist_works"); + $sql->do('ANALYZE tmp_sitemaps_artist_works'); # Instruments linked to recordings via artist-recording relationship # attributes. Matches Data::Recording, which also ignores other tables log('Filling tmp_sitemaps_instrument_recordings'); - $sql->do("INSERT INTO tmp_sitemaps_instrument_recordings (instrument, recording) + $sql->do('INSERT INTO tmp_sitemaps_instrument_recordings (instrument, recording) SELECT DISTINCT instrument.id AS instrument, l_artist_recording.entity1 AS recording FROM instrument JOIN link_attribute_type ON link_attribute_type.gid = instrument.gid JOIN link_attribute ON link_attribute.attribute_type = link_attribute_type.id - JOIN l_artist_recording ON l_artist_recording.link = link_attribute.link"); + JOIN l_artist_recording ON l_artist_recording.link = link_attribute.link'); log('Analyzing tmp_sitemaps_instrument_recordings'); - $sql->do("ANALYZE tmp_sitemaps_instrument_recordings"); + $sql->do('ANALYZE tmp_sitemaps_instrument_recordings'); # Instruments linked to releases via artist-release relationship # attributes. Matches Data::Release, which also ignores other tables log('Filling tmp_sitemaps_instrument_releases'); - $sql->do("INSERT INTO tmp_sitemaps_instrument_releases (instrument, release) + $sql->do('INSERT INTO tmp_sitemaps_instrument_releases (instrument, release) SELECT DISTINCT instrument.id AS instrument, l_artist_release.entity1 AS release FROM instrument JOIN link_attribute_type ON link_attribute_type.gid = instrument.gid JOIN link_attribute ON link_attribute.attribute_type = link_attribute_type.id - JOIN l_artist_release ON l_artist_release.link = link_attribute.link"); + JOIN l_artist_release ON l_artist_release.link = link_attribute.link'); log('Analyzing tmp_sitemaps_instrument_releases'); - $sql->do("ANALYZE tmp_sitemaps_instrument_releases"); + $sql->do('ANALYZE tmp_sitemaps_instrument_releases'); # Recordings linked to works via performance / "recording of" # relationships, but only where the number of recordings per work # exceeds 100 (`DEFAULT_LOAD_PAGED_LIMIT`). We already output the # first such 100 recordings on the work index page. log('Filling tmp_sitemaps_work_recordings_count'); - $sql->do("INSERT INTO tmp_sitemaps_work_recordings_count (work, recordings_count) + $sql->do('INSERT INTO tmp_sitemaps_work_recordings_count (work, recordings_count) SELECT DISTINCT q.work, q.recordings_count FROM (SELECT lrw.entity1 AS work, count(lrw.entity0) OVER (PARTITION BY lrw.entity1) AS recordings_count FROM l_recording_work lrw JOIN link l ON l.id = lrw.link WHERE l.link_type = 278) q - WHERE q.recordings_count > ?", + WHERE q.recordings_count > ?', $MusicBrainz::Server::Data::Relationship::DEFAULT_LOAD_PAGED_LIMIT); log('Analyzing tmp_sitemaps_work_recordings_count'); - $sql->do("ANALYZE tmp_sitemaps_work_recordings_count"); + $sql->do('ANALYZE tmp_sitemaps_work_recordings_count'); } sub drop_temporary_tables { @@ -244,10 +244,10 @@ sub drop_temporary_tables { artist_works instrument_recordings instrument_releases )) { - $sql->do(<<~"EOSQL"); + $sql->do(<<~"SQL"); SET client_min_messages TO WARNING; DROP TABLE IF EXISTS tmp_sitemaps_$table; - EOSQL + SQL } $sql->commit; } @@ -418,7 +418,7 @@ sub run { $self->create_temporary_tables($sql); $sql->begin; - $sql->do("SET TRANSACTION READ ONLY, ISOLATION LEVEL REPEATABLE READ"); + $sql->do('SET TRANSACTION READ ONLY, ISOLATION LEVEL REPEATABLE READ'); $self->fill_temporary_tables($sql); for my $entity_type (entities_with(['mbid', 'indexable']), 'cdtoc') { $self->build_one_entity($c, $entity_type); @@ -433,10 +433,10 @@ sub run { # `sitemaps.control` so that the incremental sitemap builds know what # changes to include. $sql->auto_commit(1); - $sql->do(<<~'EOSQL'); + $sql->do(<<~'SQL'); UPDATE sitemaps.control SET overall_sitemaps_replication_sequence = last_processed_replication_sequence - EOSQL + SQL # Finally, ping search engines (if the option is turned on) and finish. $self->ping_search_engines($c); diff --git a/lib/MusicBrainz/Server/Test.pm b/lib/MusicBrainz/Server/Test.pm index ec79bd2ba78..299f774af6a 100644 --- a/lib/MusicBrainz/Server/Test.pm +++ b/lib/MusicBrainz/Server/Test.pm @@ -2,8 +2,8 @@ package MusicBrainz::Server::Test; use feature 'state'; -binmode STDOUT, ":utf8"; -binmode STDERR, ":utf8"; +binmode STDOUT, ':utf8'; +binmode STDERR, ':utf8'; use DBDefs; use Encode qw( encode ); @@ -49,8 +49,8 @@ use Sub::Exporter -setup => { BEGIN { no warnings 'redefine'; use DBDefs; - *DBDefs::WEB_SERVER = sub { "localhost" }; - *DBDefs::WEB_SERVER_USED_IN_EMAIL = sub { "localhost" }; + *DBDefs::WEB_SERVER = sub { 'localhost' }; + *DBDefs::WEB_SERVER_USED_IN_EMAIL = sub { 'localhost' }; *DBDefs::RECAPTCHA_PUBLIC_KEY = sub { undef }; *DBDefs::RECAPTCHA_PRIVATE_KEY = sub { undef }; *DBDefs::OAUTH2_ENFORCE_TLS = sub { 0 }; @@ -152,7 +152,7 @@ sub get_latest_edit my ($class, $c) = @_; my $ed = MusicBrainz::Server::Data::Edit->new(c => $c); my $sql = Sql->new($c->conn); - my $last_id = $sql->select_single_value("SELECT id FROM edit ORDER BY ID DESC LIMIT 1") or return; + my $last_id = $sql->select_single_value('SELECT id FROM edit ORDER BY ID DESC LIMIT 1') or return; return $ed->get_by_id($last_id); } @@ -226,7 +226,7 @@ sub xml_ok { my ($content, $message) = @_; - $message ||= "well-formed XML"; + $message ||= 'well-formed XML'; my $parser = XML::Parser->new(Style => 'Tree'); eval { $parser->parse($content) }; @@ -235,7 +235,7 @@ sub xml_ok my @lines = split /\n/, $content; my $line = 1; foreach (@lines) { - $Test->diag(sprintf "%03d %s", $line, $_); + $Test->diag(sprintf '%03d %s', $line, $_); $line += 1; } $Test->diag("XML::Parser error: $error"); @@ -295,7 +295,7 @@ sub schema_validator $version = '2.0' if $version == 2 || !$version; my $mmd_root = $ENV{'MMD_SCHEMA_ROOT'} || - Cwd::realpath( File::Basename::dirname(__FILE__) ) . "/../../../../mmd-schema"; + Cwd::realpath( File::Basename::dirname(__FILE__) ) . '/../../../../mmd-schema'; my $rng_file = "$mmd_root/schema/musicbrainz_mmd-$version.rng"; @@ -307,8 +307,8 @@ sub schema_validator if ($@) { - warn "Cannot find or parse RNG schema. Set environment var MMD_SCHEMA_ROOT to point ". - "to the mmd-schema directory or check out the mmd-schema in parallel to ". + warn 'Cannot find or parse RNG schema. Set environment var MMD_SCHEMA_ROOT to point '. + 'to the mmd-schema directory or check out the mmd-schema in parallel to '. "the mb_server source. No schema validation will happen.\n"; undef $rngschema; } @@ -318,11 +318,11 @@ sub schema_validator my ($xml, $message) = @_; - $message ||= "Validate against schema"; + $message ||= 'Validate against schema'; SKIP: { - skip "schema not found", 1 unless $rngschema; + skip 'schema not found', 1 unless $rngschema; my $doc = XML::LibXML->new()->parse_string($xml); eval @@ -348,7 +348,7 @@ sub _build_ws_test_xml { $opts ||= {}; my $mech = MusicBrainz::WWW::Mechanize->new(catalyst_app => 'MusicBrainz::Server'); - $mech->default_header("Accept" => "application/xml"); + $mech->default_header('Accept' => 'application/xml'); $Test->subtest($msg => sub { if (exists $opts->{username} && exists $opts->{password}) { $mech->credentials('localhost:80', 'musicbrainz.org', $opts->{username}, $opts->{password}); @@ -380,7 +380,7 @@ sub _build_ws_test_json { $opts ||= {}; my $mech = MusicBrainz::WWW::Mechanize->new(catalyst_app => 'MusicBrainz::Server'); - $mech->default_header("Accept" => "application/json"); + $mech->default_header('Accept' => 'application/json'); $Test->subtest($msg => sub { if (exists $opts->{username} && exists $opts->{password}) { $mech->credentials('localhost:80', 'musicbrainz.org', $opts->{username}, $opts->{password}); @@ -459,7 +459,7 @@ sub commandline_override my ($prefix, @default_tests) = @_; my $test_re = ''; - GetOptions("tests=s" => \$test_re); + GetOptions('tests=s' => \$test_re); return grep { $_ =~ /$test_re/ } @default_tests; } diff --git a/lib/MusicBrainz/Server/Test/HTML5.pm b/lib/MusicBrainz/Server/Test/HTML5.pm index c571fd0b235..019edf9fb0d 100644 --- a/lib/MusicBrainz/Server/Test/HTML5.pm +++ b/lib/MusicBrainz/Server/Test/HTML5.pm @@ -67,7 +67,7 @@ sub format_message if ($opts{ignored}) { - return sprintf("%s (ignored): %s", $msg->{type}, $msg->{message}); + return sprintf('%s (ignored): %s', $msg->{type}, $msg->{message}); } else { @@ -95,8 +95,8 @@ sub save_html if ($ENV{SAVE_HTML}) { my ($fh, $filename) = tempfile( - "html5_ok_XXXX", SUFFIX => $suffix, TMPDIR => 1); - print $fh encode("utf-8", $content); + 'html5_ok_XXXX', SUFFIX => $suffix, TMPDIR => 1); + print $fh encode('utf-8', $content); close($fh); $Test->diag("failed output written to $filename"); }; @@ -112,7 +112,7 @@ sub html5_ok { my ($Test, $content, $message) = @_; - $message ||= "valid HTML5"; + $message ||= 'valid HTML5'; unless (utf8::is_utf8($content)) { $Test->ok(0, "$message, need to know encoding of content"); @@ -122,7 +122,7 @@ sub html5_ok my $url = DBDefs->HTML_VALIDATOR; unless ($url) { - $Test->skip("No HTML_VALIDATOR configured, skip html validation"); + $Test->skip('No HTML_VALIDATOR configured, skip html validation'); return; } @@ -132,7 +132,7 @@ sub html5_ok my $request = HTTP::Request->new(POST => $url); $request->header('Content-Type', 'text/html'); - $request->content(encode("utf-8", $content)); + $request->content(encode('utf-8', $content)); my $all_ok = 1; @@ -142,11 +142,11 @@ sub html5_ok my $report = decode_json($response->content); for my $msg (@{ $report->{messages} }) { - next if $msg->{type} eq "info"; + next if $msg->{type} eq 'info'; if (ignore_warning($msg)) { - $Test->diag(format_message($msg, "ignored" => 1)); + $Test->diag(format_message($msg, 'ignored' => 1)); } else { @@ -158,10 +158,10 @@ sub html5_ok else { $all_ok = 0; - $message .= ", Could not connect to ".$url; + $message .= ', Could not connect to '.$url; } - save_html($Test, $content, ".html") unless $all_ok; + save_html($Test, $content, '.html') unless $all_ok; $Test->ok($all_ok, $message); } diff --git a/lib/MusicBrainz/Server/Track.pm b/lib/MusicBrainz/Server/Track.pm index c1487f7c8cd..c3ef2a41449 100644 --- a/lib/MusicBrainz/Server/Track.pm +++ b/lib/MusicBrainz/Server/Track.pm @@ -13,7 +13,7 @@ use Sub::Exporter -setup => { sub { UnformatTrackLength(shift) } }, format_iso_duration => sub { - sub { FormatTrackLength(shift, print_formats => {hms => "PT%dH%02dM%02dS", ms => "PT%02dM%02dS"}) } + sub { FormatTrackLength(shift, print_formats => {hms => 'PT%dH%02dM%02dS', ms => 'PT%02dM%02dS'}) } }, ] }; @@ -21,9 +21,9 @@ use Sub::Exporter -setup => { sub FormatTrackLength { my ($ms, %opts) = @_; - my $print_formats = $opts{print_formats} // {hms => "%d:%02d:%02d", ms => "%d:%02d"}; + my $print_formats = $opts{print_formats} // {hms => '%d:%02d:%02d', ms => '%d:%02d'}; - return "?:??" unless $ms; + return '?:??' unless $ms; return $ms unless looks_like_number($ms); return "$ms ms" if $ms < 1000; diff --git a/lib/MusicBrainz/Server/Validation.pm b/lib/MusicBrainz/Server/Validation.pm index 72bb5708d87..e9bfc45bc8e 100644 --- a/lib/MusicBrainz/Server/Validation.pm +++ b/lib/MusicBrainz/Server/Validation.pm @@ -134,11 +134,11 @@ sub is_guid sub trim_in_place { - carp "Uninitialized value passed to trim_in_place" + carp 'Uninitialized value passed to trim_in_place' if grep { not defined } @_; for (@_) { - $_ = "" if not defined; + $_ = '' if not defined; # TODO decode, trim, encode? s/\A\s+//; s/\s+\z//; @@ -172,7 +172,7 @@ sub format_ipi my $ipi = shift; return $ipi unless $ipi =~ /^[0-9\s.]{5,}$/; $ipi =~ s/[\s.]//g; - return sprintf("%011.0f", $ipi) + return sprintf('%011.0f', $ipi) } sub is_valid_isni @@ -382,7 +382,7 @@ sub normalise_strings $t =~ s/[\x{2026}\x{22EF}]/.../g; # Unaccent what's left - decode("utf-16", unaccent_utf16(encode("utf-16", $t))); + decode('utf-16', unaccent_utf16(encode('utf-16', $t))); } @_; wantarray ? @r : $r[-1]; @@ -405,7 +405,7 @@ sub dms { $seconds =~ s/,/./; return - sprintf("%.6f", ((0+$degrees) + ((0+$minutes) * 60 + (0+$seconds)) / 3600) * direction($dir)) + sprintf('%.6f', ((0+$degrees) + ((0+$minutes) * 60 + (0+$seconds)) / 3600) * direction($dir)) + 0; # remove trailing zeroes (MBS-7438) } diff --git a/lib/MusicBrainz/Server/WebService/Serializer/JSON/2/Area.pm b/lib/MusicBrainz/Server/WebService/Serializer/JSON/2/Area.pm index c9ccf6db123..e03e344ecdf 100644 --- a/lib/MusicBrainz/Server/WebService/Serializer/JSON/2/Area.pm +++ b/lib/MusicBrainz/Server/WebService/Serializer/JSON/2/Area.pm @@ -9,8 +9,8 @@ sub serialize my %body; $body{name} = $entity->name; - $body{"sort-name"} = $entity->name; - $body{disambiguation} = $entity->comment // ""; + $body{'sort-name'} = $entity->name; + $body{disambiguation} = $entity->comment // ''; $body{'iso-3166-1-codes'} = [$entity->iso_3166_1_codes] if $entity->iso_3166_1_codes; $body{'iso-3166-2-codes'} = [$entity->iso_3166_2_codes] if $entity->iso_3166_2_codes; $body{'iso-3166-3-codes'} = [$entity->iso_3166_3_codes] if $entity->iso_3166_3_codes; diff --git a/lib/MusicBrainz/Server/WebService/Serializer/JSON/2/Artist.pm b/lib/MusicBrainz/Server/WebService/Serializer/JSON/2/Artist.pm index ab1cebd6224..2fe7f9ba7ea 100644 --- a/lib/MusicBrainz/Server/WebService/Serializer/JSON/2/Artist.pm +++ b/lib/MusicBrainz/Server/WebService/Serializer/JSON/2/Artist.pm @@ -11,8 +11,8 @@ sub serialize my %body; $body{name} = $entity->name; - $body{"sort-name"} = $entity->sort_name; - $body{disambiguation} = $entity->comment // ""; + $body{'sort-name'} = $entity->sort_name; + $body{disambiguation} = $entity->comment // ''; if ($toplevel) { @@ -28,16 +28,16 @@ sub serialize $body{begin_area} = $body{'begin-area'}; $body{end_area} = $body{'end-area'}; - $body{recordings} = list_of($entity, $inc, $stash, "recordings") + $body{recordings} = list_of($entity, $inc, $stash, 'recordings') if ($inc && $inc->recordings); - $body{releases} = list_of($entity, $inc, $stash, "releases") + $body{releases} = list_of($entity, $inc, $stash, 'releases') if ($inc && $inc->releases); - $body{"release-groups"} = list_of($entity, $inc, $stash, "release_groups") + $body{'release-groups'} = list_of($entity, $inc, $stash, 'release_groups') if ($inc && $inc->release_groups); - $body{works} = list_of($entity, $inc, $stash, "works") + $body{works} = list_of($entity, $inc, $stash, 'works') if ($inc && $inc->works); } diff --git a/lib/MusicBrainz/Server/WebService/Serializer/JSON/2/ArtistCredit.pm b/lib/MusicBrainz/Server/WebService/Serializer/JSON/2/ArtistCredit.pm index b2d39b3c24f..cf9bdf9445f 100644 --- a/lib/MusicBrainz/Server/WebService/Serializer/JSON/2/ArtistCredit.pm +++ b/lib/MusicBrainz/Server/WebService/Serializer/JSON/2/ArtistCredit.pm @@ -12,9 +12,9 @@ sub serialize my @body = map { { - "name" => $_->name, - "joinphrase" => $_->join_phrase, - "artist" => serialize_entity($_->artist, $inc, $stash), + 'name' => $_->name, + 'joinphrase' => $_->join_phrase, + 'artist' => serialize_entity($_->artist, $inc, $stash), } } @{ $entity->names }; diff --git a/lib/MusicBrainz/Server/WebService/Serializer/JSON/2/CDStub.pm b/lib/MusicBrainz/Server/WebService/Serializer/JSON/2/CDStub.pm index 278eee889c5..5256f41dee7 100644 --- a/lib/MusicBrainz/Server/WebService/Serializer/JSON/2/CDStub.pm +++ b/lib/MusicBrainz/Server/WebService/Serializer/JSON/2/CDStub.pm @@ -24,7 +24,7 @@ sub serialize length => $_->length }, $cdstub->all_tracks ], - "track-count" => $cdstub->track_count + 'track-count' => $cdstub->track_count }; }; diff --git a/lib/MusicBrainz/Server/WebService/Serializer/JSON/2/CDTOC.pm b/lib/MusicBrainz/Server/WebService/Serializer/JSON/2/CDTOC.pm index 2526e9bc457..670834ec2e7 100644 --- a/lib/MusicBrainz/Server/WebService/Serializer/JSON/2/CDTOC.pm +++ b/lib/MusicBrainz/Server/WebService/Serializer/JSON/2/CDTOC.pm @@ -10,7 +10,7 @@ sub serialize my %body; $body{id} = $entity->discid; - $body{"offset-count"} = number($entity->track_count); + $body{'offset-count'} = number($entity->track_count); $body{sectors} = number($entity->leadout_offset); my @list; @@ -24,7 +24,7 @@ sub serialize if ($toplevel) { - $body{releases} = list_of($entity, $inc, $stash, "releases", $toplevel); + $body{releases} = list_of($entity, $inc, $stash, 'releases', $toplevel); } return \%body; diff --git a/lib/MusicBrainz/Server/WebService/Serializer/JSON/2/Collection.pm b/lib/MusicBrainz/Server/WebService/Serializer/JSON/2/Collection.pm index 1b9b56fed0a..e972ed71d7f 100644 --- a/lib/MusicBrainz/Server/WebService/Serializer/JSON/2/Collection.pm +++ b/lib/MusicBrainz/Server/WebService/Serializer/JSON/2/Collection.pm @@ -18,7 +18,7 @@ sub serialize { $body{name} = $entity->name; $body{editor} = $entity->editor->name; - $body{"entity-type"} = $entity_type; + $body{'entity-type'} = $entity_type; my $entity_properties = $ENTITIES{$entity_type}; my $plural = $entity_properties->{plural}; diff --git a/lib/MusicBrainz/Server/WebService/Serializer/JSON/2/Event.pm b/lib/MusicBrainz/Server/WebService/Serializer/JSON/2/Event.pm index f39db86b98c..7b5b919ebaf 100644 --- a/lib/MusicBrainz/Server/WebService/Serializer/JSON/2/Event.pm +++ b/lib/MusicBrainz/Server/WebService/Serializer/JSON/2/Event.pm @@ -10,9 +10,9 @@ sub serialize my %body; $body{name} = $entity->name; - $body{disambiguation} = $entity->comment // ""; - $body{time} = $entity->formatted_time // ""; - $body{setlist} = $entity->setlist // ""; + $body{disambiguation} = $entity->comment // ''; + $body{time} = $entity->formatted_time // ''; + $body{setlist} = $entity->setlist // ''; $body{cancelled} = boolean($entity->cancelled); return \%body; diff --git a/lib/MusicBrainz/Server/WebService/Serializer/JSON/2/Genre.pm b/lib/MusicBrainz/Server/WebService/Serializer/JSON/2/Genre.pm index 33f44d3473d..124a4414489 100644 --- a/lib/MusicBrainz/Server/WebService/Serializer/JSON/2/Genre.pm +++ b/lib/MusicBrainz/Server/WebService/Serializer/JSON/2/Genre.pm @@ -8,7 +8,7 @@ sub serialize { my %body; $body{name} = $entity->name; - $body{disambiguation} = $entity->comment // ""; + $body{disambiguation} = $entity->comment // ''; return \%body; }; diff --git a/lib/MusicBrainz/Server/WebService/Serializer/JSON/2/Instrument.pm b/lib/MusicBrainz/Server/WebService/Serializer/JSON/2/Instrument.pm index 8eefcbac083..403ceba1858 100644 --- a/lib/MusicBrainz/Server/WebService/Serializer/JSON/2/Instrument.pm +++ b/lib/MusicBrainz/Server/WebService/Serializer/JSON/2/Instrument.pm @@ -9,8 +9,8 @@ sub serialize { my %body; $body{name} = $entity->name; - $body{disambiguation} = $entity->comment // ""; - $body{description} = $entity->description // ""; + $body{disambiguation} = $entity->comment // ''; + $body{description} = $entity->description // ''; return \%body; }; diff --git a/lib/MusicBrainz/Server/WebService/Serializer/JSON/2/Label.pm b/lib/MusicBrainz/Server/WebService/Serializer/JSON/2/Label.pm index 46774d28759..768917df4c1 100644 --- a/lib/MusicBrainz/Server/WebService/Serializer/JSON/2/Label.pm +++ b/lib/MusicBrainz/Server/WebService/Serializer/JSON/2/Label.pm @@ -10,16 +10,16 @@ sub serialize my %body; $body{name} = $entity->name; - $body{"sort-name"} = $entity->name; - $body{"label-code"} = number($entity->label_code); - $body{disambiguation} = $entity->comment // ""; + $body{'sort-name'} = $entity->name; + $body{'label-code'} = number($entity->label_code); + $body{disambiguation} = $entity->comment // ''; if ($toplevel) { $body{country} = $entity->area && $entity->area->country_code ? $entity->area->country_code : JSON::null; $body{area} = $entity->area ? serialize_entity($entity->area) : JSON::null; - $body{releases} = list_of($entity, $inc, $stash, "releases") + $body{releases} = list_of($entity, $inc, $stash, 'releases') if ($inc && $inc->releases); } diff --git a/lib/MusicBrainz/Server/WebService/Serializer/JSON/2/Medium.pm b/lib/MusicBrainz/Server/WebService/Serializer/JSON/2/Medium.pm index f79fed8f8a7..49fc6ed7196 100644 --- a/lib/MusicBrainz/Server/WebService/Serializer/JSON/2/Medium.pm +++ b/lib/MusicBrainz/Server/WebService/Serializer/JSON/2/Medium.pm @@ -23,7 +23,7 @@ sub serialize } sort_by { $_->cdtoc->discid } $entity->all_cdtocs ]; } - $body{"track-count"} = number($entity->cdtoc_track_count); + $body{'track-count'} = number($entity->cdtoc_track_count); # Not all tracks in the tracklists may have been loaded. If not all # tracks have been loaded, only one them will have been loaded which @@ -44,11 +44,11 @@ sub serialize if (scalar @list) { $body{tracks} = \@list ; - $body{"track-offset"} = number($entity->has_pregap ? 0 : $min - 1); + $body{'track-offset'} = number($entity->has_pregap ? 0 : $min - 1); } if (my @data_tracks = grep { $_->position > 0 && $_->is_data_track } @tracks) { - $body{"data-tracks"} = [ map { $self->serialize_track($_, $inc, $stash) } @data_tracks ]; + $body{'data-tracks'} = [ map { $self->serialize_track($_, $inc, $stash) } @data_tracks ]; } return \%body; @@ -70,7 +70,7 @@ sub serialize_track { $track_output{recording} = serialize_entity($entity->recording, $inc, $stash); } - $track_output{"artist-credit"} = serialize_entity($entity->artist_credit, $inc, $stash) + $track_output{'artist-credit'} = serialize_entity($entity->artist_credit, $inc, $stash) if $inc->artist_credits; return \%track_output; diff --git a/lib/MusicBrainz/Server/WebService/Serializer/JSON/2/Place.pm b/lib/MusicBrainz/Server/WebService/Serializer/JSON/2/Place.pm index aef7fcd4150..89ef0a1ec32 100644 --- a/lib/MusicBrainz/Server/WebService/Serializer/JSON/2/Place.pm +++ b/lib/MusicBrainz/Server/WebService/Serializer/JSON/2/Place.pm @@ -10,7 +10,7 @@ sub serialize my %body; $body{name} = $entity->name; - $body{disambiguation} = $entity->comment // ""; + $body{disambiguation} = $entity->comment // ''; $body{address} = $entity->address; $body{area} = $entity->area ? serialize_entity($entity->area) : JSON::null; $body{coordinates} = $entity->coordinates ? diff --git a/lib/MusicBrainz/Server/WebService/Serializer/JSON/2/Recording.pm b/lib/MusicBrainz/Server/WebService/Serializer/JSON/2/Recording.pm index 765e8a2fb1e..eb89f9f9eda 100644 --- a/lib/MusicBrainz/Server/WebService/Serializer/JSON/2/Recording.pm +++ b/lib/MusicBrainz/Server/WebService/Serializer/JSON/2/Recording.pm @@ -16,15 +16,15 @@ sub serialize my %body; $body{title} = $entity->name; - $body{disambiguation} = $entity->comment // ""; + $body{disambiguation} = $entity->comment // ''; $body{length} = number($entity->length); $body{video} = boolean($entity->video); if ($entity->artist_credit && ($toplevel || ($inc && $inc->artist_credits))) { - $body{"artist-credit"} = serialize_entity($entity->artist_credit, $inc, $stash); + $body{'artist-credit'} = serialize_entity($entity->artist_credit, $inc, $stash); } - $body{releases} = list_of($entity, $inc, $stash, "releases") + $body{releases} = list_of($entity, $inc, $stash, 'releases') if ($toplevel && $inc && $inc->releases); if ($inc && $inc->isrcs) { diff --git a/lib/MusicBrainz/Server/WebService/Serializer/JSON/2/Relationship.pm b/lib/MusicBrainz/Server/WebService/Serializer/JSON/2/Relationship.pm index 20108772a20..464d206438d 100644 --- a/lib/MusicBrainz/Server/WebService/Serializer/JSON/2/Relationship.pm +++ b/lib/MusicBrainz/Server/WebService/Serializer/JSON/2/Relationship.pm @@ -21,28 +21,28 @@ sub serialize serialize_type($body, $entity->link, $inc, $opts, 1); - $body->{direction} = $entity->direction == 2 ? "backward" : "forward"; + $body->{direction} = $entity->direction == 2 ? 'backward' : 'forward'; $body->{'ordering-key'} = number($entity->link_order) if $entity->link_order; serialize_date_period($body, $entity->link); $body->{attributes} = [ map { $_->type->name } @attributes ]; - $body->{"attribute-values"} = { + $body->{'attribute-values'} = { map { non_empty($_->text_value) ? ($_->type->name => $_->text_value) : () } @attributes }; - $body->{"attribute-ids"} = { + $body->{'attribute-ids'} = { map { $_->type->name => $_->type->gid } @attributes }; - $body->{"attribute-credits"} = { + $body->{'attribute-credits'} = { map { non_empty($_->credited_as) ? ($_->type->name => $_->credited_as) : () } diff --git a/lib/MusicBrainz/Server/WebService/Serializer/JSON/2/Release.pm b/lib/MusicBrainz/Server/WebService/Serializer/JSON/2/Release.pm index fba782eaff0..70b0d211f24 100644 --- a/lib/MusicBrainz/Server/WebService/Serializer/JSON/2/Release.pm +++ b/lib/MusicBrainz/Server/WebService/Serializer/JSON/2/Release.pm @@ -57,7 +57,7 @@ sub serialize $body{asin} = $entity->amazon_asin if ($toplevel); $body{barcode} = $entity->barcode->code; - $body{disambiguation} = $entity->comment // ""; + $body{disambiguation} = $entity->comment // ''; $body{status} = $entity->status ? $entity->status_name : JSON::null; $body{'status-id'} = $entity->status ? $entity->status->gid : JSON::null; $body{quality} = _quality($entity->quality); @@ -76,12 +76,12 @@ sub serialize }; } - $body{"text-representation"} = { + $body{'text-representation'} = { script => $entity->script ? $entity->script->iso_code : JSON::null, language => $entity->language ? $entity->language->iso_code_3 : JSON::null }; - $body{collections} = list_of($entity, $inc, $stash, "collections") + $body{collections} = list_of($entity, $inc, $stash, 'collections') if $inc && ($inc->collections || $inc->user_collections); if ($inc && $inc->release_groups) @@ -95,25 +95,25 @@ sub serialize # release group artists which already appear in the release artist # credit. local $stash->{release_artist_credit} = $entity->artist_credit; - $body{"release-group"} = serialize_entity($entity->release_group, $inc, $stash); + $body{'release-group'} = serialize_entity($entity->release_group, $inc, $stash); } if ($toplevel) { - $body{"artist-credit"} = serialize_entity($entity->artist_credit, $inc, $stash, $inc->artists) + $body{'artist-credit'} = serialize_entity($entity->artist_credit, $inc, $stash, $inc->artists) if $inc->artist_credits || $inc->artists; } else { - $body{"artist-credit"} = serialize_entity($entity->artist_credit, $inc, $stash) + $body{'artist-credit'} = serialize_entity($entity->artist_credit, $inc, $stash) if $inc && $inc->artist_credits; } - $body{"label-info"} = [ + $body{'label-info'} = [ map { my $label = serialize_entity($_->label, $inc, $stash); { - "catalog-number" => $_->catalog_number, + 'catalog-number' => $_->catalog_number, label => $label ? $label : JSON::null, } } @{ $entity->labels } ] if $toplevel && $inc->labels; diff --git a/lib/MusicBrainz/Server/WebService/Serializer/JSON/2/ReleaseGroup.pm b/lib/MusicBrainz/Server/WebService/Serializer/JSON/2/ReleaseGroup.pm index 3b5e839906d..b8ef4bc9f3d 100644 --- a/lib/MusicBrainz/Server/WebService/Serializer/JSON/2/ReleaseGroup.pm +++ b/lib/MusicBrainz/Server/WebService/Serializer/JSON/2/ReleaseGroup.pm @@ -10,21 +10,21 @@ sub serialize my %body; $body{title} = $entity->name; - $body{"primary-type"} = $entity->primary_type + $body{'primary-type'} = $entity->primary_type ? $entity->primary_type->name : JSON::null; - $body{"primary-type-id"} = $entity->primary_type + $body{'primary-type-id'} = $entity->primary_type ? $entity->primary_type->gid : JSON::null; - $body{"secondary-types"} = [ map { + $body{'secondary-types'} = [ map { $_->name } $entity->all_secondary_types ]; - $body{"secondary-type-ids"} = [ map { + $body{'secondary-type-ids'} = [ map { $_->gid } $entity->all_secondary_types ]; - $body{"first-release-date"} = $entity->first_release_date->format; - $body{disambiguation} = $entity->comment // ""; + $body{'first-release-date'} = $entity->first_release_date->format; + $body{disambiguation} = $entity->comment // ''; - $body{"artist-credit"} = serialize_entity($entity->artist_credit, $inc, $stash) + $body{'artist-credit'} = serialize_entity($entity->artist_credit, $inc, $stash) if $inc && ($inc->artist_credits || $inc->artists); - $body{releases} = list_of($entity, $inc, $stash, "releases") + $body{releases} = list_of($entity, $inc, $stash, 'releases') if $inc && $inc->releases; return \%body; diff --git a/lib/MusicBrainz/Server/WebService/Serializer/JSON/2/Series.pm b/lib/MusicBrainz/Server/WebService/Serializer/JSON/2/Series.pm index 2dd10f0cec2..51a49f91397 100644 --- a/lib/MusicBrainz/Server/WebService/Serializer/JSON/2/Series.pm +++ b/lib/MusicBrainz/Server/WebService/Serializer/JSON/2/Series.pm @@ -8,7 +8,7 @@ sub serialize { my %body; $body{name} = $entity->name; - $body{disambiguation} = $entity->comment // ""; + $body{disambiguation} = $entity->comment // ''; return \%body; }; diff --git a/lib/MusicBrainz/Server/WebService/Serializer/JSON/2/Work.pm b/lib/MusicBrainz/Server/WebService/Serializer/JSON/2/Work.pm index 30ce6edfeb1..849e79d4a5a 100644 --- a/lib/MusicBrainz/Server/WebService/Serializer/JSON/2/Work.pm +++ b/lib/MusicBrainz/Server/WebService/Serializer/JSON/2/Work.pm @@ -15,7 +15,7 @@ sub serialize my %body; $body{title} = $entity->name; - $body{disambiguation} = $entity->comment // ""; + $body{disambiguation} = $entity->comment // ''; $body{iswcs} = [ map { $_->iswc } @{ $entity->iswcs } ]; $body{attributes} = [ diff --git a/lib/MusicBrainz/Server/WebService/Validator.pm b/lib/MusicBrainz/Server/WebService/Validator.pm index 51a0c3ee356..2b4731884df 100644 --- a/lib/MusicBrainz/Server/WebService/Validator.pm +++ b/lib/MusicBrainz/Server/WebService/Validator.pm @@ -29,13 +29,13 @@ parameter defs => ( our (%types, %statuses); our %relation_types = ( 1 => { - "area-rels" => 1, - "artist-rels" => 1, - "release-rels" => 1, - "track-rels" => 1, - "label-rels" => 1, - "work-rels" => 1, - "url-rels" => 1, + 'area-rels' => 1, + 'artist-rels' => 1, + 'release-rels' => 1, + 'track-rels' => 1, + 'label-rels' => 1, + 'work-rels' => 1, + 'url-rels' => 1, }, 2 => { entities_with(['mbid', 'relatable'], take => sub { @@ -97,7 +97,7 @@ sub validate_type unless ($inc->releases || $inc->release_groups || $resource eq 'release' || $resource eq 'release-group') { - $c->stash->{error} = "type is not a valid parameter unless releases or release-groups are requested."; + $c->stash->{error} = 'type is not a valid parameter unless releases or release-groups are requested.'; $c->detach('bad_req'); } @@ -132,7 +132,7 @@ sub validate_status unless ($inc->releases || $resource eq 'release') { - $c->stash->{error} = "status is not a valid parameter unless releases are requested."; + $c->stash->{error} = 'status is not a valid parameter unless releases are requested.'; $c->detach('bad_req'); } @@ -199,7 +199,7 @@ sub validate_inc my @inc = split(/[+ ]/, $inc || ''); my %acc = map { $_ => 1 } @{ $def }; - my $allow_relations = exists $acc{"_relations"}; + my $allow_relations = exists $acc{'_relations'}; my @relations_used; my @filtered; @@ -230,7 +230,7 @@ sub validate_inc if (@possible) { $c->stash->{error} = "$i is not a valid option for the inc parameter for the $resource resource " . - "unless you specify one of the following other inc parameters: " . + 'unless you specify one of the following other inc parameters: ' . join(', ', @possible); } else { diff --git a/lib/MusicBrainz/Server/WebService/XMLSerializer.pm b/lib/MusicBrainz/Server/WebService/XMLSerializer.pm index 05393f96aef..1e9a040bb96 100644 --- a/lib/MusicBrainz/Server/WebService/XMLSerializer.pm +++ b/lib/MusicBrainz/Server/WebService/XMLSerializer.pm @@ -1134,7 +1134,7 @@ sub _serialize_relation unless ($target_type eq 'url') { - my $method = "_serialize_" . $target_type; + my $method = '_serialize_' . $target_type; local $in_relation_node = 1; local $show_aliases = 0; diff --git a/lib/MusicBrainz/Server/dbmirror.pm b/lib/MusicBrainz/Server/dbmirror.pm index f7386ebac6c..f27dd3bd3c0 100644 --- a/lib/MusicBrainz/Server/dbmirror.pm +++ b/lib/MusicBrainz/Server/dbmirror.pm @@ -40,8 +40,8 @@ sub prepare_insert %$valuepairs or die; my @k = sort keys %$valuepairs; - my $colnames = join ", ", map { qq["$_"] } @k; - my $params = join ", ", map { "?" } @k; + my $colnames = join ', ', map { qq["$_"] } @k; + my $params = join ', ', map { '?' } @k; my @args = @$valuepairs{@k}; my $sql = qq[INSERT INTO $table ($colnames) VALUES ($params)]; @@ -55,7 +55,7 @@ sub prepare_update %$keypairs or die; my @k = sort keys %$valuepairs; - my $setclause = join ", ", map { qq["$_" = ?] } @k; + my $setclause = join ', ', map { qq["$_" = ?] } @k; my @setargs = @$valuepairs{@k}; my ($whereclause, $whereargs) = make_where_clause($keypairs); @@ -99,7 +99,7 @@ sub make_where_clause } } - my $clause = join " AND ", @conditions; + my $clause = join ' AND ', @conditions; return ($clause, \@args); } @@ -123,22 +123,22 @@ sub unpack_data # Optionally, a quoted string if ($packed =~ s/\A'//) { - $v = ""; + $v = ''; for (;;) { # \\ => \ - $v .= "\\", next if $packed =~ s/\A\\\\//; + $v .= '\\', next if $packed =~ s/\A\\\\//; # \' => ' # '' => ' - $v .= "'", next if $packed =~ s/\A[\\']'//; + $v .= q('), next if $packed =~ s/\A[\\']'//; # End of string last if $packed =~ s/\A'//; $packed ne '' - or warn("Failed to parse: expected string data but found end of string"), return undef; + or warn('Failed to parse: expected string data but found end of string'), return undef; # any other char == itself $v .= substr($packed, 0, 1, ''); @@ -154,7 +154,7 @@ sub unpack_data } if ($seqid == 111117378 || $seqid == 111117379 || $seqid == 111117380 || $seqid == 111404809) { - $answer{name} = substr($answer{name}, 0, 1000) . "..."; + $answer{name} = substr($answer{name}, 0, 1000) . '...'; } return \%answer; diff --git a/lib/MusicBrainz/WWW/Mechanize.pm b/lib/MusicBrainz/WWW/Mechanize.pm index 73eb4ce9a03..9d7ca6e3288 100644 --- a/lib/MusicBrainz/WWW/Mechanize.pm +++ b/lib/MusicBrainz/WWW/Mechanize.pm @@ -28,7 +28,7 @@ around '_make_request' => sub $challenge = { @$challenge }; # make rest into a hash my ($username, $password) = $self->credentials( - $request->uri->host.":".$request->uri->port, $challenge->{realm}); + $request->uri->host.':'.$request->uri->port, $challenge->{realm}); my $size = length($request->content); $response = LWP::Authen::Digest->authenticate( diff --git a/lib/Plack/Middleware/Debug/DAOLogger.pm b/lib/Plack/Middleware/Debug/DAOLogger.pm index 5b22a96e186..266e6564c9c 100644 --- a/lib/Plack/Middleware/Debug/DAOLogger.pm +++ b/lib/Plack/Middleware/Debug/DAOLogger.pm @@ -21,18 +21,18 @@ sub run { my $sum = sum(map { $_->[1] } @call_stack); $panel->content( - "<p>This panel shows time spent within the data access layer. Rows ". - "highlighted in red indicate that time spent within this method ". - "deviates by more than 1 σ for all calls amongst siblings</p>". - "<table>". + '<p>This panel shows time spent within the data access layer. Rows '. + 'highlighted in red indicate that time spent within this method '. + 'deviates by more than 1 σ for all calls amongst siblings</p>'. + '<table>'. '<thead><tr><th style="width: 6em">Time</th><th>Call</th></tr></thead>' . render_stack(0, @call_stack) . qq(<tr><th style="text-align: left" colspan="2">$sum</th></tr>). - "</table>"); + '</table>'); $panel->nav_title('Data Access'); $panel->title('Time Spent in Data Access Objects'); - $panel->nav_subtitle(sprintf "%.4fs", $sum); + $panel->nav_subtitle(sprintf '%.4fs', $sum); }; } @@ -55,7 +55,7 @@ sub render_stack { ($outlier && 'style="background: #ffcccc"'); $content .= sprintf '<td><div style="padding-left: %dem">%.5f</div></td>', $indent, $time; $content .= sprintf '<td style="padding-left: %dem">%s</td>', $indent * 2, $name; - $content .= "</tr>"; + $content .= '</tr>'; $content .= render_stack($indent + 1, @$calls); } diff --git a/lib/Plack/Middleware/Debug/ExclusiveTime.pm b/lib/Plack/Middleware/Debug/ExclusiveTime.pm index 8ab9cce5983..3b7b7101f18 100644 --- a/lib/Plack/Middleware/Debug/ExclusiveTime.pm +++ b/lib/Plack/Middleware/Debug/ExclusiveTime.pm @@ -19,7 +19,7 @@ sub run { $panel->content( $self->render_list_pairs( [ - map { $_, sprintf("%.5f", $call_times{$_}) } + map { $_, sprintf('%.5f', $call_times{$_}) } sort { $call_times{$b} <=> $call_times{$a} } keys %call_times ])); }; diff --git a/lib/Plack/Middleware/Debug/TemplateToolkit.pm b/lib/Plack/Middleware/Debug/TemplateToolkit.pm index f155d737729..b69325404da 100644 --- a/lib/Plack/Middleware/Debug/TemplateToolkit.pm +++ b/lib/Plack/Middleware/Debug/TemplateToolkit.pm @@ -17,16 +17,16 @@ sub run { my ($template, $ltime, $calls) = @$_; my $i = 0; "<h3>$template (at $ltime)</h3>" . - "<table><thead><tr>". + '<table><thead><tr>'. join('', map { "<th>$_</th>" } qw(cnt clk user sys cuser csys template)) . - "</tr><thead>". + '</tr><thead>'. join('', map { sprintf('<tr class="%s">', $i++ % 2 == 0 ? 'plDebugEven' : 'plDebugOdd'). - sprintf("<td>%d</td><td>%d</td><td>%.2f</td>". - "<td>%.2f</td><td>%.2f</td><td>%.2f</td><td>%s</td>", @$_). - "</tr>" + sprintf('<td>%d</td><td>%d</td><td>%.2f</td>'. + '<td>%.2f</td><td>%.2f</td><td>%.2f</td><td>%s</td>', @$_). + '</tr>' } @$calls). - "</table>" + '</table>' } @output) ); } @@ -44,7 +44,7 @@ sub process { my $self = shift; my $template = $_[0]; - if (UNIVERSAL::isa($template, "Template::Document")) { + if (UNIVERSAL::isa($template, 'Template::Document')) { $template = $template->name || $template; } diff --git a/lib/Sql.pm b/lib/Sql.pm index ecee7853b60..26236907904 100644 --- a/lib/Sql.pm +++ b/lib/Sql.pm @@ -57,7 +57,7 @@ sub finish sub BUILDARGS { my ($self, $conn) = @_; - croak "Missing required argument 'conn'" unless defined $conn; + croak q(Missing required argument 'conn') unless defined $conn; return { conn => $conn }; } @@ -77,7 +77,7 @@ sub is_in_transaction sub select { my ($self, $query, @params) = @_; - my $prepare_method = (@params ? "prepare_cached" : "prepare"); + my $prepare_method = (@params ? 'prepare_cached' : 'prepare'); return try { my $tt = Sql::Timer->new($query, \@params) if $self->debug; @@ -101,7 +101,7 @@ sub do croak 'do called while not in transaction, or marked to auto commit'; } - my $prepare_method = (@params ? "prepare_cached" : "prepare"); + my $prepare_method = (@params ? 'prepare_cached' : 'prepare'); $self->_auto_commit(0) if $self->_auto_commit; return try { @@ -140,7 +140,7 @@ sub insert_row push(@expressions, $$val); } else { - push @expressions, "?"; + push @expressions, '?'; push @values, $val; } } @@ -170,7 +170,7 @@ sub insert_many { } my @keys = keys %pivot or return; - scalar(@{$pivot{$_}}) == scalar(@{$pivot{$keys[0]}}) or die "Inconsist row list" + scalar(@{$pivot{$_}}) == scalar(@{$pivot{$keys[0]}}) or die 'Inconsist row list' for @keys ; my $query = "INSERT INTO $table (" . join(', ', @keys) . ') VALUES ' . @@ -253,7 +253,7 @@ sub commit return try { my $tt = Sql::Timer->new('COMMIT', []) if $self->debug; my $rv = $self->dbh->commit; - cluck "Commit failed" if ($rv eq '' && !$self->quiet); + cluck 'Commit failed' if ($rv eq '' && !$self->quiet); $self->dbh->{AutoCommit} = 1; return $rv; } @@ -277,7 +277,7 @@ sub rollback return try { my $tt = Sql::Timer->new('ROLLBACK', []) if $self->debug; my $rv = $self->dbh->rollback; - cluck "Rollback failed" if ($rv eq '' && !$self->quiet); + cluck 'Rollback failed' if ($rv eq '' && !$self->quiet); $self->dbh->{AutoCommit} = 1; return $rv; } @@ -606,9 +606,9 @@ sub DEMOLISH # than $somelimit #return if $t < 0.1; - local $" = ", "; + local $" = ', '; my $msg = sprintf 'SQL: %8.4fs "%s" (%s)', $t, - $sql, join(", ", @{ $self->args }); + $sql, join(', ', @{ $self->args }); printf STDERR "sql: %s at %s line %d\n", $msg, $self->file, $self->line_number; } diff --git a/lib/Test/XML/SemanticCompare.pm b/lib/Test/XML/SemanticCompare.pm index 60ddcb3087c..a807ee6850a 100644 --- a/lib/Test/XML/SemanticCompare.pm +++ b/lib/Test/XML/SemanticCompare.pm @@ -22,9 +22,9 @@ sub is_xml_same { $tb->ok(@differences == 0, 'XML fragments are identical:'); for my $difference (@differences) { $tb->diag($difference->{message}); - $tb->diag("Old value: " . $difference->{old_value} ) + $tb->diag('Old value: ' . $difference->{old_value} ) if $difference->{old_value}; - $tb->diag("New value: " . $difference->{new_value} ) + $tb->diag('New value: ' . $difference->{new_value} ) if $difference->{new_value}; } } diff --git a/package.json b/package.json index 92d816be002..f5ea9aae691 100644 --- a/package.json +++ b/package.json @@ -78,7 +78,7 @@ "eslint-plugin-react": "7.20.6", "eslint-plugin-react-hooks": "4.1.2", "file-url": "2.0.2", - "flow-bin": "0.159.0", + "flow-bin": "0.160.2", "gettext-parser": "3.1.0", "http-proxy": "1.18.1", "json5": "2.1.3", diff --git a/po/instrument_descriptions.pot b/po/instrument_descriptions.pot index 15c2803255c..a6b374b2715 100644 --- a/po/instrument_descriptions.pot +++ b/po/instrument_descriptions.pot @@ -2100,6 +2100,13 @@ msgid "" "string while pulling the it." msgstr "" +#. name:mellophone +#: DB:instrument/description:37 +msgid "" +"Originating in the 19th century horn-design boom, it is used mostly in " +"outside concert and marching music" +msgstr "" + #. name:octavina #: DB:instrument/description:941 msgid "" diff --git a/po/instruments.pot b/po/instruments.pot index 675eda850b3..f587b9a64b5 100644 --- a/po/instruments.pot +++ b/po/instruments.pot @@ -2510,6 +2510,7 @@ msgid "mbira" msgstr "" #: DB:instrument/name:37 +msgctxt "Middle-range valved brass" msgid "mellophone" msgstr "" diff --git a/po/mb_server.de.po b/po/mb_server.de.po index 3298b997f31..3b907a2d6e9 100644 --- a/po/mb_server.de.po +++ b/po/mb_server.de.po @@ -69,9 +69,9 @@ msgid "" msgstr "" "Project-Id-Version: MusicBrainz\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-09-13 18:38-0500\n" -"PO-Revision-Date: 2021-09-13 23:42+0000\n" -"Last-Translator: Michael Wiencek <email address hidden>\n" +"POT-Creation-Date: 2021-09-28 21:37+0300\n" +"PO-Revision-Date: 2021-09-28 18:40+0000\n" +"Last-Translator: Nicolás Tamargo <email address hidden>\n" "Language-Team: German (http://www.transifex.com/musicbrainz/musicbrainz/language/de/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -122,7 +122,7 @@ msgstr "„YY“ sind die letzten zwei Ziffern des Registrierungsjahrs." #: ../root/edit/details/historic/AddRelease.js:118 #: ../root/recording/RecordingIndex.js:50 #: ../root/static/scripts/release/components/MediumTable.js:218 -#: ../root/utility/tableColumns.js:537 +#: ../root/utility/tableColumns.js:539 msgid "#" msgstr "Nr." @@ -178,26 +178,13 @@ msgstr "(war Medium {position} auf Veröffentlichung {release})" msgid "(was medium {position}: {name} on release {release})" msgstr "(war Medium {position}: {name} auf Veröffentlichung {release})" -#: ../root/edit/details/merge_releases.tt:6 -#: ../root/components/ReleaseLanguageScript.js:24 -#: ../root/components/ReleaseLanguageScript.js:30 -#: ../root/components/list/ReleaseList.js:100 ../root/release/CoverArt.js:92 -#: ../root/release_group/ReleaseGroupIndex.js:90 -#: ../root/search/components/ReleaseResults.js:55 -#: ../root/static/scripts/common/components/ReleaseEvents.js:55 -#: ../root/static/scripts/common/components/ReleaseEvents.js:72 -#: ../root/static/scripts/release-editor/duplicates.js:145 -msgctxt "missing data" -msgid "-" -msgstr "-" - #: ../root/cdtoc/attach_artist_releases.tt:16 #: ../root/cdtoc/attach_filter_release.tt:30 ../root/cdtoc/list.tt:10 -#: ../root/edit/details/merge_releases.tt:23 ../root/release/merge.tt:16 +#: ../root/release/merge.tt:16 ../root/edit/details/MergeReleases.js:256 #: ../root/recording/RecordingIndex.js:57 #: ../root/release_group/ReleaseGroupIndex.js:159 #: ../root/search/components/ReleaseResults.js:103 -#: ../root/utility/tableColumns.js:480 ../root/utility/tableColumns.js:488 +#: ../root/utility/tableColumns.js:482 ../root/utility/tableColumns.js:490 msgctxt "and" msgid "/" msgstr "/" @@ -474,10 +461,6 @@ msgstr "Administrationsattribute" msgid "All of these relationships." msgstr "Alle Beziehungen ansehen" -#: ../root/edit/details/merge_releases.tt:141 -msgid "All recordings for these releases are already merged." -msgstr "Alle Aufnahmen für diese Veröffentlichung sind bereits vereint." - #: ../root/release/edit/recordings.tt:3 msgid "" "All tracks require an associated recording. Click “Edit” to select a " @@ -542,11 +525,6 @@ msgstr "Anmerkung:" msgid "Annotations support a limited set of wiki formatting options:" msgstr "In Anmerkungen steht eine beschränkte Menge an Wiki-Formatierungen zur Verfügung:" -#: ../root/edit/details/merge_releases.tt:149 -#: ../lib/MusicBrainz/Server/Form/Merge/Release.pm:50 -msgid "Append mediums to target release" -msgstr "Medien an Zielveröffentlichung anhängen" - #: ../root/edit/search_macros.tt:417 msgid "Applied Edit Count of Editor" msgstr "Anzahl angewandter Bearbeitungen des Bearbeiters" @@ -655,10 +633,9 @@ msgstr "Gebiete" #: ../root/cdtoc/attach_confirm.tt:13 #: ../root/cdtoc/attach_filter_release.tt:29 ../root/cdtoc/list.tt:8 #: ../root/cdtoc/lookup.tt:41 ../root/components/common-macros.tt:569 -#: ../root/edit/details/merge_releases.tt:20 ../root/edit/search_macros.tt:417 -#: ../root/release/edit/tracklist.tt:163 ../root/release/edit/tracklist.tt:412 -#: ../root/release/merge.tt:13 ../root/watch/list.tt:16 -#: ../lib/MusicBrainz/Server/Edit/Artist.pm:7 +#: ../root/edit/search_macros.tt:417 ../root/release/edit/tracklist.tt:163 +#: ../root/release/edit/tracklist.tt:412 ../root/release/merge.tt:13 +#: ../root/watch/list.tt:16 ../lib/MusicBrainz/Server/Edit/Artist.pm:7 #: ../lib/MusicBrainz/Server/Form/Search/Search.pm:35 #: ../root/artist/ArtistHeader.js:34 #: ../root/components/RelationshipsTable.js:320 @@ -676,6 +653,7 @@ msgstr "Gebiete" #: ../root/edit/details/EditRecording.js:86 #: ../root/edit/details/EditRelease.js:83 #: ../root/edit/details/EditReleaseGroup.js:101 +#: ../root/edit/details/MergeReleases.js:253 #: ../root/edit/details/historic/AddRelease.js:68 #: ../root/edit/details/historic/AddRelease.js:120 #: ../root/edit/details/historic/AddTrackKV.js:55 @@ -749,10 +727,10 @@ msgstr "Künstler:" #: ../root/report/components/EventList.js:66 #: ../root/search/components/EventResults.js:70 #: ../root/search/components/WorkResults.js:52 -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:895 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:455 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:896 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:456 #: ../root/static/scripts/common/utility/formatEntityTypeName.js:15 -#: ../root/tag/TagLayout.js:25 ../root/utility/tableColumns.js:854 +#: ../root/tag/TagLayout.js:25 ../root/utility/tableColumns.js:856 msgid "Artists" msgstr "Künstler" @@ -809,14 +787,14 @@ msgstr "Bannernachrichtenbearbeiter" #: ../root/cdtoc/attach_artist_releases.tt:19 #: ../root/cdtoc/attach_filter_release.tt:33 ../root/cdtoc/list.tt:13 -#: ../root/cdtoc/lookup.tt:46 ../root/edit/details/merge_releases.tt:26 -#: ../root/release/edit/duplicates.tt:17 ../root/release/merge.tt:19 -#: ../root/components/list/ReleaseList.js:128 +#: ../root/cdtoc/lookup.tt:46 ../root/release/edit/duplicates.tt:17 +#: ../root/release/merge.tt:19 ../root/components/list/ReleaseList.js:128 #: ../root/edit/details/AddRelease.js:129 #: ../root/edit/details/EditBarcodes.js:58 #: ../root/edit/details/EditBarcodes.js:64 #: ../root/edit/details/EditRelease.js:167 #: ../root/edit/details/EditReleaseLabel.js:138 +#: ../root/edit/details/MergeReleases.js:259 #: ../root/edit/details/historic/AddRelease.js:155 #: ../root/edit/details/historic/EditReleaseEvents.js:138 #: ../root/otherlookup/OtherLookupForm.js:64 @@ -1043,12 +1021,12 @@ msgstr "Kat.-Nr.:" #: ../root/cdtoc/attach_artist_releases.tt:18 #: ../root/cdtoc/attach_filter_release.tt:32 ../root/cdtoc/list.tt:12 -#: ../root/cdtoc/lookup.tt:45 ../root/edit/details/merge_releases.tt:25 -#: ../root/release/edit/duplicates.tt:16 ../root/release/merge.tt:18 +#: ../root/cdtoc/lookup.tt:45 ../root/release/edit/duplicates.tt:16 +#: ../root/release/merge.tt:18 ../root/edit/details/MergeReleases.js:258 #: ../root/recording/RecordingIndex.js:59 #: ../root/release_group/ReleaseGroupIndex.js:161 #: ../root/search/components/ReleaseResults.js:105 -#: ../root/utility/tableColumns.js:456 ../root/utility/tableColumns.js:461 +#: ../root/utility/tableColumns.js:458 ../root/utility/tableColumns.js:463 msgid "Catalog#" msgstr "Katalognr." @@ -1209,16 +1187,16 @@ msgstr "Kopiere zu Enddatum" #: ../root/cdtoc/attach_artist_releases.tt:16 #: ../root/cdtoc/attach_filter_release.tt:30 ../root/cdtoc/list.tt:10 -#: ../root/cdtoc/lookup.tt:43 ../root/edit/details/merge_releases.tt:23 -#: ../root/release/edit/duplicates.tt:14 ../root/release/merge.tt:16 -#: ../root/edit/details/EditReleaseLabel.js:127 +#: ../root/cdtoc/lookup.tt:43 ../root/release/edit/duplicates.tt:14 +#: ../root/release/merge.tt:16 ../root/edit/details/EditReleaseLabel.js:127 +#: ../root/edit/details/MergeReleases.js:256 #: ../root/edit/details/historic/AddRelease.js:152 #: ../root/edit/details/historic/EditReleaseEvents.js:135 #: ../root/recording/RecordingIndex.js:57 #: ../root/release_group/ReleaseGroupIndex.js:159 #: ../root/search/components/ReleaseResults.js:103 #: ../root/static/scripts/common/components/FilterForm.js:110 -#: ../root/utility/tableColumns.js:476 ../root/utility/tableColumns.js:488 +#: ../root/utility/tableColumns.js:478 ../root/utility/tableColumns.js:490 msgid "Country" msgstr "Land" @@ -1293,13 +1271,14 @@ msgstr "Daten:" #: ../root/annotation/history.tt:12 ../root/cdtoc/attach_artist_releases.tt:16 #: ../root/cdtoc/attach_filter_release.tt:30 ../root/cdtoc/list.tt:10 -#: ../root/cdtoc/lookup.tt:42 ../root/edit/details/merge_releases.tt:23 -#: ../root/release/edit/duplicates.tt:13 ../root/release/merge.tt:16 +#: ../root/cdtoc/lookup.tt:42 ../root/release/edit/duplicates.tt:13 +#: ../root/release/merge.tt:16 #: ../root/admin/statistics-events/DeleteStatisticsEvent.js:31 #: ../root/admin/statistics-events/StatisticsEventEditForm.js:35 #: ../root/admin/statistics-events/StatisticsEventIndex.js:30 #: ../root/components/RelationshipsTable.js:316 #: ../root/edit/details/EditReleaseLabel.js:119 +#: ../root/edit/details/MergeReleases.js:256 #: ../root/edit/details/historic/AddRelease.js:151 #: ../root/edit/details/historic/EditReleaseEvents.js:134 #: ../root/elections/ElectionVotes.js:26 @@ -1308,8 +1287,8 @@ msgstr "Daten:" #: ../root/search/components/EventResults.js:67 #: ../root/search/components/ReleaseResults.js:103 #: ../root/static/scripts/common/components/FilterForm.js:129 -#: ../root/utility/tableColumns.js:255 ../root/utility/tableColumns.js:260 -#: ../root/utility/tableColumns.js:482 ../root/utility/tableColumns.js:488 +#: ../root/utility/tableColumns.js:257 ../root/utility/tableColumns.js:262 +#: ../root/utility/tableColumns.js:484 ../root/utility/tableColumns.js:490 msgid "Date" msgstr "Datum" @@ -1377,7 +1356,7 @@ msgstr "Veraltet:" #: ../root/relationship/linktype/RelationshipTypeIndex.js:96 #: ../root/search/components/InstrumentResults.js:52 #: ../root/static/scripts/collection/components/CollectionEditForm.js:89 -#: ../root/utility/tableColumns.js:636 +#: ../root/utility/tableColumns.js:638 msgid "Description" msgstr "Beschreibung" @@ -1413,21 +1392,21 @@ msgstr "Gestorben:" #: ../root/edit/details/AddReleaseGroup.js:71 #: ../root/edit/details/AddSeries.js:51 #: ../root/edit/details/AddStandaloneRecording.js:67 -#: ../root/edit/details/AddWork.js:57 ../root/edit/details/EditArea.js:84 +#: ../root/edit/details/AddWork.js:59 ../root/edit/details/EditArea.js:84 #: ../root/edit/details/EditArtist.js:100 ../root/edit/details/EditEvent.js:64 #: ../root/edit/details/EditInstrument.js:64 #: ../root/edit/details/EditLabel.js:84 ../root/edit/details/EditPlace.js:70 #: ../root/edit/details/EditRecording.js:65 #: ../root/edit/details/EditRelease.js:111 #: ../root/edit/details/EditReleaseGroup.js:64 -#: ../root/edit/details/EditSeries.js:61 ../root/edit/details/EditWork.js:73 +#: ../root/edit/details/EditSeries.js:61 ../root/edit/details/EditWork.js:75 #: ../root/genre/GenreEditForm.js:38 msgid "Disambiguation" msgstr "Unterscheidung" #: ../root/release/discids.tt:8 ../root/edit/details/SetTrackLengths.js:66 #: ../root/otherlookup/OtherLookupForm.js:114 -#: ../root/utility/tableColumns.js:179 ../root/utility/tableColumns.js:184 +#: ../root/utility/tableColumns.js:181 ../root/utility/tableColumns.js:186 msgid "Disc ID" msgstr "Disc-ID" @@ -1667,7 +1646,7 @@ msgstr "LP-Titelnummern aktivieren" #: ../root/search/components/ArtistResults.js:57 #: ../root/search/components/LabelResults.js:69 #: ../root/search/components/PlaceResults.js:66 -#: ../root/utility/tableColumns.js:273 ../root/utility/tableColumns.js:278 +#: ../root/utility/tableColumns.js:275 ../root/utility/tableColumns.js:280 msgid "End" msgstr "Ende" @@ -1863,11 +1842,11 @@ msgstr "Weitere Informationen findest du in der {doc_doc|Dokumentation} und den msgid "For more information, check the {doc_doc|documentation}." msgstr "Weitere Informationen findest du in der {doc_doc|Dokumentation}." -#: ../root/cdtoc/list.tt:9 ../root/edit/details/merge_releases.tt:21 -#: ../root/release/edit/duplicates.tt:11 ../root/release/merge.tt:14 -#: ../root/components/list/ReleaseList.js:93 +#: ../root/cdtoc/list.tt:9 ../root/release/edit/duplicates.tt:11 +#: ../root/release/merge.tt:14 ../root/components/list/ReleaseList.js:93 #: ../root/edit/details/EditMedium.js:530 #: ../root/edit/details/EditReleaseLabel.js:145 +#: ../root/edit/details/MergeReleases.js:254 #: ../root/edit/details/historic/AddRelease.js:156 #: ../root/edit/details/historic/EditReleaseEvents.js:139 #: ../root/release_group/ReleaseGroupIndex.js:157 @@ -2040,7 +2019,7 @@ msgstr "" #: ../root/components/common-macros.tt:602 #: ../lib/MusicBrainz/Server/Controller/Edit.pm:240 -#: ../root/static/scripts/common/constants.js:279 +#: ../root/static/scripts/common/constants.js:281 msgid "High" msgstr "Hoch" @@ -2179,12 +2158,12 @@ msgstr "ISRC" msgid "ISRCs:" msgstr "ISRCs:" -#: ../root/work/edit_form.tt:16 ../root/edit/details/AddWork.js:63 -#: ../root/edit/details/EditWork.js:80 ../root/edit/details/RemoveIswc.js:36 +#: ../root/work/edit_form.tt:16 ../root/edit/details/AddWork.js:65 +#: ../root/edit/details/EditWork.js:82 ../root/edit/details/RemoveIswc.js:36 #: ../root/otherlookup/OtherLookupForm.js:79 #: ../root/report/IswcsWithManyWorks.js:48 #: ../root/search/components/WorkResults.js:53 -#: ../root/utility/tableColumns.js:762 +#: ../root/utility/tableColumns.js:764 msgid "ISWC" msgstr "ISWC" @@ -2337,23 +2316,6 @@ msgstr "Instrument:" msgid "Instruments" msgstr "Instrumente" -#: ../root/edit/details/merge_releases.tt:78 -#: ../root/edit/details/merge_releases.tt:83 -#: ../root/edit/details/merge_releases.tt:92 -#: ../root/edit/details/merge_releases.tt:109 -#: ../root/edit/details/MergeAreas.js:35 -#: ../root/edit/details/MergeArtists.js:37 -#: ../root/edit/details/MergeEvents.js:40 -#: ../root/edit/details/MergeInstruments.js:35 -#: ../root/edit/details/MergeLabels.js:35 -#: ../root/edit/details/MergePlaces.js:35 -#: ../root/edit/details/MergeRecordings.js:40 -#: ../root/edit/details/MergeReleaseGroups.js:35 -#: ../root/edit/details/MergeSeries.js:35 -#: ../root/edit/details/MergeWorks.js:35 -msgid "Into:" -msgstr "Nach:" - #: ../root/cdstub/error.tt:5 msgid "Invalid Disc ID" msgstr "Ungültige Disc-ID" @@ -2394,13 +2356,13 @@ msgstr "" #: ../root/cdtoc/attach_artist_releases.tt:17 #: ../root/cdtoc/attach_filter_release.tt:31 ../root/cdtoc/list.tt:11 #: ../root/cdtoc/lookup.tt:44 ../root/components/common-macros.tt:569 -#: ../root/edit/details/merge_releases.tt:24 ../root/edit/search_macros.tt:417 -#: ../root/release/edit/duplicates.tt:15 ../root/release/merge.tt:17 -#: ../lib/MusicBrainz/Server/Edit/Label.pm:7 +#: ../root/edit/search_macros.tt:417 ../root/release/edit/duplicates.tt:15 +#: ../root/release/merge.tt:17 ../lib/MusicBrainz/Server/Edit/Label.pm:7 #: ../lib/MusicBrainz/Server/Form/Search/Search.pm:40 #: ../root/components/list/LabelList.js:54 ../root/edit/details/AddLabel.js:51 #: ../root/edit/details/EditLabel.js:62 #: ../root/edit/details/EditReleaseLabel.js:69 +#: ../root/edit/details/MergeReleases.js:257 #: ../root/edit/details/historic/AddRelease.js:153 #: ../root/edit/details/historic/EditReleaseEvents.js:136 #: ../root/label/LabelHeader.js:27 ../root/layout/components/Search.js:39 @@ -2413,8 +2375,8 @@ msgstr "" #: ../root/search/components/SearchForm.js:39 #: ../root/static/scripts/common/constants.js:23 #: ../root/static/scripts/common/utility/formatEntityTypeName.js:56 -#: ../root/user/UserProfile.js:46 ../root/utility/tableColumns.js:503 -#: ../root/utility/tableColumns.js:508 +#: ../root/user/UserProfile.js:46 ../root/utility/tableColumns.js:505 +#: ../root/utility/tableColumns.js:510 msgid "Label" msgstr "Label" @@ -2517,7 +2479,7 @@ msgstr "Lade Bearbeitungsvorschauen …" #: ../root/static/scripts/common/components/FingerprintTable.js:87 #: ../root/static/scripts/edit/components/AddEntityDialog.js:101 #: ../root/static/scripts/release/components/MediumTable.js:118 -#: ../root/utility/tableColumns.js:674 +#: ../root/utility/tableColumns.js:676 msgid "Loading..." msgstr "Lade …" @@ -2557,15 +2519,15 @@ msgstr "Anzahl Aufrufe" #: ../root/components/common-macros.tt:602 #: ../lib/MusicBrainz/Server/Controller/Edit.pm:240 -#: ../root/static/scripts/common/constants.js:276 +#: ../root/static/scripts/common/constants.js:278 msgid "Low" msgstr "Niedrig" #: ../root/release/edit_relationships.tt:172 -#: ../root/edit/details/AddWork.js:81 ../root/edit/details/EditWork.js:98 +#: ../root/edit/details/AddWork.js:83 ../root/edit/details/EditWork.js:100 #: ../root/layout/components/sidebar/WorkSidebar.js:67 #: ../root/search/components/WorkResults.js:55 -#: ../root/static/scripts/work.js:312 ../root/utility/tableColumns.js:873 +#: ../root/static/scripts/work.js:312 ../root/utility/tableColumns.js:875 msgid "Lyrics Languages" msgstr "Liedtextsprachen" @@ -2620,22 +2582,6 @@ msgstr "" msgid "Medium track lengths" msgstr "Medium-Titellängen" -#: ../root/edit/details/merge_releases.tt:44 -msgid "Medium {position} is now medium {new_position}" -msgstr "Medium {position} ist jetzt Medium {new_position}" - -#: ../root/edit/details/merge_releases.tt:44 -msgid "Medium {position} is now medium {new_position}: {new_name}" -msgstr "Medium {position} ist jetzt Medium {new_position}: {new_name}" - -#: ../root/edit/details/merge_releases.tt:44 -msgid "Medium {position}: {name} is now medium {new_position}" -msgstr "Medium {position}: {name} ist jetzt Medium {new_position}" - -#: ../root/edit/details/merge_releases.tt:44 -msgid "Medium {position}: {name} is now medium {new_position}: {new_name}" -msgstr "Medium {position}: {name} ist jetzt Medium {new_position}: {new_name}" - #: ../root/layout/merge-helper.tt:30 #: ../root/layout/components/MergeHelper.js:71 #: ../root/layout/components/sidebar/MergeLink.js:31 @@ -2651,12 +2597,7 @@ msgstr "Vereinigungsprozess" msgid "Merge Releases" msgstr "Veröffentlichungen vereinen" -#: ../root/edit/details/merge_releases.tt:149 -#: ../lib/MusicBrainz/Server/Form/Merge/Release.pm:51 -msgid "Merge mediums and recordings" -msgstr "Medien und Aufnahmen vereinen" - -#: ../root/edit/details/merge_releases.tt:147 ../root/release/merge.tt:55 +#: ../root/release/merge.tt:55 ../root/edit/details/MergeReleases.js:358 msgid "Merge strategy:" msgstr "Vereinigungsverfahren:" @@ -2746,7 +2687,7 @@ msgstr "Meine Stimme:" #: ../root/edit/details/AddReleaseGroup.js:56 #: ../root/edit/details/AddSeries.js:46 #: ../root/edit/details/AddStandaloneRecording.js:56 -#: ../root/edit/details/AddWork.js:52 ../root/edit/details/EditArea.js:70 +#: ../root/edit/details/AddWork.js:54 ../root/edit/details/EditArea.js:70 #: ../root/edit/details/EditArtist.js:86 ../root/edit/details/EditEvent.js:57 #: ../root/edit/details/EditInstrument.js:57 #: ../root/edit/details/EditLabel.js:68 ../root/edit/details/EditMedium.js:522 @@ -2756,7 +2697,7 @@ msgstr "Meine Stimme:" #: ../root/edit/details/EditRelationshipAttribute.js:76 #: ../root/edit/details/EditRelease.js:75 #: ../root/edit/details/EditReleaseGroup.js:57 -#: ../root/edit/details/EditSeries.js:54 ../root/edit/details/EditWork.js:66 +#: ../root/edit/details/EditSeries.js:54 ../root/edit/details/EditWork.js:68 #: ../root/edit/details/RemoveRelationshipAttribute.js:41 #: ../root/edit/details/RemoveRelationshipType.js:60 #: ../root/edit/details/historic/AddRelease.js:63 @@ -2879,7 +2820,7 @@ msgid "No releases have cover art marked as \"Front\", cannot set cover art." msgstr "Keine Veröffentlichungen haben Cover-Art, das als „Vorderseite“ markiert ist; kann Cover-Art nicht festlegen." #: ../root/release/edit/tracklist.tt:140 ../root/admin/IpLookup.js:35 -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:457 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:458 #: ../root/static/scripts/common/components/Autocomplete2/constants.js:90 msgid "No results" msgstr "Keine Ergebnisse" @@ -2924,19 +2865,11 @@ msgstr "Keinem der Medien auf dieser Veröffentlichung kann die angegebene CD-TO #: ../root/components/common-macros.tt:602 #: ../lib/MusicBrainz/Server/Controller/Edit.pm:240 -#: ../root/static/scripts/common/constants.js:277 -#: ../root/static/scripts/common/constants.js:278 +#: ../root/static/scripts/common/constants.js:279 +#: ../root/static/scripts/common/constants.js:280 msgid "Normal" msgstr "Normal" -#: ../root/edit/details/merge_releases.tt:158 -#: ../root/edit/details/EditRelease.js:182 -#: ../root/edit/details/SetTrackLengths.js:89 -#: ../root/edit/details/historic/MergeReleases.js:69 -#: ../root/user/ReportUser.js:116 -msgid "Note" -msgstr "Beachte" - #: ../root/release/edit/information.tt:279 msgid "" "Note! If you do not know the month or day of release, please leave them " @@ -3259,13 +3192,13 @@ msgstr "Rohe Bearbeitungsdaten möglicherweise verfügbar." msgid "Recent Notes Left on Your Edits" msgstr "Bemerkungen, die kürzlich zu deinen Bearbeitungen hinterlassen wurden" -#: ../root/components/common-macros.tt:569 -#: ../root/edit/details/merge_releases.tt:108 -#: ../root/edit/search_macros.tt:417 ../root/release/edit_relationships.tt:53 +#: ../root/components/common-macros.tt:569 ../root/edit/search_macros.tt:417 +#: ../root/release/edit_relationships.tt:53 #: ../lib/MusicBrainz/Server/Edit/Recording.pm:7 #: ../lib/MusicBrainz/Server/Form/Search/Search.pm:38 #: ../root/edit/details/AddStandaloneRecording.js:46 #: ../root/edit/details/EditRecording.js:51 +#: ../root/edit/details/MergeReleases.js:322 #: ../root/edit/details/RemoveIsrc.js:40 #: ../root/edit/details/historic/EditTrack.js:37 #: ../root/layout/components/Search.js:30 @@ -3283,10 +3216,6 @@ msgstr "Aufnahme" msgid "Recording Details" msgstr "Aufnahmendetails" -#: ../root/edit/details/merge_releases.tt:104 -msgid "Recording Merges" -msgstr "Aufnahmenvereinigungen" - #: ../root/user/ratings.tt:2 ../root/user/ratings_summary.tt:3 msgid "Recording ratings" msgstr "Aufnahmebewertungen" @@ -3346,7 +3275,7 @@ msgstr "Beziehungsbearbeiter" #: ../root/edit/search_macros.tt:417 #: ../root/edit/details/AddRelationshipType.js:78 #: ../root/relationship/linktype/RelationshipTypeIndex.js:41 -#: ../root/utility/tableColumns.js:804 +#: ../root/utility/tableColumns.js:806 msgid "Relationship Type" msgstr "Beziehungstyp" @@ -3373,8 +3302,7 @@ msgstr "<span class=\"rel-edit\">Gelb</span> hervorgehobene Beziehungen werden b #: ../root/cdtoc/attach_artist_releases.tt:15 #: ../root/cdtoc/attach_filter_release.tt:28 ../root/cdtoc/lookup.tt:39 -#: ../root/components/common-macros.tt:569 -#: ../root/edit/details/merge_releases.tt:19 ../root/edit/search_macros.tt:417 +#: ../root/components/common-macros.tt:569 ../root/edit/search_macros.tt:417 #: ../root/release/edit/duplicates.tt:10 ../root/release/merge.tt:12 #: ../lib/MusicBrainz/Server/Edit/Release.pm:8 #: ../lib/MusicBrainz/Server/Form/Search/Search.pm:37 @@ -3385,6 +3313,7 @@ msgstr "<span class=\"rel-edit\">Gelb</span> hervorgehobene Beziehungen werden b #: ../root/edit/details/EditBarcodes.js:51 #: ../root/edit/details/EditCoverArt.js:51 #: ../root/edit/details/EditReleaseLabel.js:60 +#: ../root/edit/details/MergeReleases.js:252 #: ../root/edit/details/RemoveCoverArt.js:35 #: ../root/edit/details/ReorderCoverArt.js:45 #: ../root/edit/details/ReorderMediums.js:39 @@ -3621,7 +3550,7 @@ msgstr "Attribut entfernen" #: ../root/components/common-macros.tt:878 #: ../root/components/common-macros.tt:886 #: ../root/components/RemoveFromMergeTableCell.js:39 -#: ../root/utility/tableColumns.js:781 ../root/utility/tableColumns.js:791 +#: ../root/utility/tableColumns.js:783 ../root/utility/tableColumns.js:793 msgid "Remove from merge" msgstr "Aus Vereinigung entfernen" @@ -4019,7 +3948,7 @@ msgstr "Titelnamen mit Künstlernennungen vertauschen" #: ../root/search/components/RecordingResults.js:134 #: ../root/search/components/ReleaseResults.js:112 #: ../root/static/scripts/common/components/TaggerIcon.js:40 -#: ../root/utility/tableColumns.js:834 +#: ../root/utility/tableColumns.js:836 msgid "Tagger" msgstr "Tagger" @@ -4045,12 +3974,6 @@ msgstr "Das Anmerkungsfeld funktioniert wie ein Mini-Wiki." msgid "The catalog number you have entered looks like an Amazon ASIN." msgstr "Die von dir eingegebene Katalognummer scheint eine Amazon-ASIN zu sein." -#: ../root/edit/details/merge_releases.tt:159 -msgid "" -"The data in this edit originally came from an older version of this edit, " -"and may not display correctly" -msgstr "Die Daten in dieser Bearbeitung kamen ursprünglich aus einer älteren Version dieser Bearbeitung und werden möglicherweise nicht korrekt dargestellt" - #: ../root/layout.tt:90 ../root/layout/index.js:275 msgid "" "The data you have submitted does not make any changes to the data already " @@ -4234,12 +4157,6 @@ msgstr "" msgid "This disc has a hidden pregap track before track 1" msgstr "" -#: ../root/edit/details/merge_releases.tt:133 -msgid "" -"This edit does not store recording merge information and is closed, so no " -"recording merge information can be shown." -msgstr "" - #: ../root/cdtoc/set_durations.tt:31 msgid "This edit would only make subsecond changes to track lengths." msgstr "" @@ -4371,8 +4288,8 @@ msgid "This recording cannot be removed because it is still used on releases." msgstr "Diese Aufnahme kann nicht entfernt werden, da sie noch in Veröffentlichungen verwendet wird." #: ../root/components/common-macros.tt:302 -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:696 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:286 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:697 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:287 #: ../root/static/scripts/common/components/EntityLink.js:289 msgid "This recording is a video" msgstr "Diese Aufnahme ist ein Video" @@ -4404,10 +4321,6 @@ msgid "" " relationships." msgstr "Diese Veröffentlichungsgruppe wird automatisch gelöscht werden, sobald sie keine Veröffentlichungen oder Beziehungen mehr hat." -#: ../root/edit/details/merge_releases.tt:35 -msgid "This release has no media to merge." -msgstr "Diese Veröffentlichung hat keine Medium zum Vereinen." - #: ../root/release/discids.tt:58 msgid "This release has no mediums that can have disc IDs." msgstr "" @@ -4543,14 +4456,10 @@ msgid "Total tracks:" msgstr "Gesamtanzahl Titel:" #: ../root/cdtoc/info.tt:31 ../root/search/components/RecordingResults.js:135 -#: ../root/taglookup/Form.js:41 ../root/utility/tableColumns.js:846 +#: ../root/taglookup/Form.js:41 ../root/utility/tableColumns.js:848 msgid "Track" msgstr "Titel" -#: ../root/edit/details/merge_releases.tt:107 -msgid "Track #" -msgstr "Titelnr." - #: ../root/release/edit/tracklist.tt:483 #: ../root/static/scripts/release-editor/dialogs.js:40 msgid "Track Parser" @@ -4585,11 +4494,11 @@ msgstr "Titel {n}:" msgid "Tracklist" msgstr "Titelliste" -#: ../root/edit/details/merge_releases.tt:22 ../root/release/discids.tt:9 -#: ../root/release/edit/duplicates.tt:12 ../root/release/merge.tt:15 -#: ../root/artist_credit/ArtistCreditIndex.js:128 +#: ../root/release/discids.tt:9 ../root/release/edit/duplicates.tt:12 +#: ../root/release/merge.tt:15 ../root/artist_credit/ArtistCreditIndex.js:128 #: ../root/artist_credit/ArtistCreditLayout.js:31 #: ../root/components/list/ReleaseList.js:103 +#: ../root/edit/details/MergeReleases.js:255 #: ../root/edit/details/historic/AddRelease.js:113 #: ../root/release_group/ReleaseGroupIndex.js:158 #: ../root/search/components/CDStubResults.js:49 @@ -4633,7 +4542,7 @@ msgstr "Twitter" #: ../root/edit/details/AddLabel.js:107 ../root/edit/details/AddPlace.js:65 #: ../root/edit/details/AddReleaseGroup.js:80 #: ../root/edit/details/AddRemoveAlias.js:101 -#: ../root/edit/details/AddSeries.js:57 ../root/edit/details/AddWork.js:69 +#: ../root/edit/details/AddSeries.js:57 ../root/edit/details/AddWork.js:71 #: ../root/edit/details/EditAlias.js:123 ../root/edit/details/EditArea.js:91 #: ../root/edit/details/EditArtist.js:107 ../root/edit/details/EditEvent.js:78 #: ../root/edit/details/EditInstrument.js:71 @@ -4664,12 +4573,12 @@ msgstr "Twitter" #: ../root/static/scripts/account/components/ApplicationForm.js:87 #: ../root/static/scripts/alias/AliasEditForm.js:329 #: ../root/static/scripts/collection/components/CollectionEditForm.js:83 -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:874 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:447 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:875 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:448 #: ../root/static/scripts/common/components/FilterForm.js:63 -#: ../root/static/scripts/edit/externalLinks.js:904 -#: ../root/static/scripts/edit/externalLinks.js:1157 -#: ../root/utility/tableColumns.js:613 ../root/utility/tableColumns.js:618 +#: ../root/static/scripts/edit/externalLinks.js:941 +#: ../root/static/scripts/edit/externalLinks.js:1181 +#: ../root/utility/tableColumns.js:615 ../root/utility/tableColumns.js:620 msgid "Type" msgstr "Typ" @@ -4980,8 +4889,8 @@ msgstr "Wiki-Transkludierer" #: ../root/components/common-macros.tt:569 ../root/edit/search_macros.tt:417 #: ../lib/MusicBrainz/Server/Edit/Work.pm:9 #: ../lib/MusicBrainz/Server/Form/Search/Search.pm:39 -#: ../root/components/list/WorkList.js:60 ../root/edit/details/AddWork.js:46 -#: ../root/edit/details/EditWork.js:59 ../root/edit/details/RemoveIswc.js:40 +#: ../root/components/list/WorkList.js:60 ../root/edit/details/AddWork.js:48 +#: ../root/edit/details/EditWork.js:61 ../root/edit/details/RemoveIswc.js:40 #: ../root/layout/components/Search.js:34 #: ../root/report/IswcsWithManyWorks.js:49 #: ../root/report/components/WorkList.js:46 @@ -5246,22 +5155,13 @@ msgid "" " please make sure the artists have been entered correctly." msgstr "Du hast den speziellen Künstler {valink|Various Artists} für einige der folgenden Tracks verwendet. {valink|Various Artists} sollte nur in sehr seltenen Fällen für Tracks verwendet werden; bitte überprüfe, ob die Künstler korrekt eingegeben wurden." -#: ../root/edit/details/merge_releases.tt:5 -#: ../root/components/list/ReleaseList.js:90 -#: ../root/release_group/ReleaseGroupIndex.js:89 -#: ../root/search/components/ReleaseResults.js:50 -#: ../root/static/scripts/release-editor/duplicates.js:143 -msgid "[missing media]" -msgstr "[fehlende Medien]" - #: ../root/components/common-macros.tt:259 #: ../lib/MusicBrainz/Server/Edit/Relationship/RemoveLinkType.pm:86 #: ../lib/MusicBrainz/Server/Edit/Release/Create.pm:113 -#: ../lib/MusicBrainz/Server/Edit/Work/Create.pm:87 -#: ../lib/MusicBrainz/Server/Edit/Work/Edit.pm:186 #: ../root/edit/details/EditAlias.js:94 #: ../root/edit/details/SetTrackLengths.js:73 #: ../root/static/scripts/common/components/EntityLink.js:41 +#: ../root/static/scripts/common/i18n/localizeLanguageName.js:15 msgid "[removed]" msgstr "[entfernt]" @@ -5407,6 +5307,10 @@ msgstr "historisch, bis {end}" msgid "historical, {begin}-{end}" msgstr "historisch, {begin}–{end}" +#: ../root/edit/search_macros.tt:25 +msgid "in an unspecified order (possibly faster)" +msgstr "" + #: ../root/edit/details/macros.tt:28 #: ../root/utility/relationshipDateText.js:25 msgid "in {date}" @@ -5562,10 +5466,6 @@ msgid_plural "plus {n} other private collections" msgstr[0] "sowie eine weitere private Sammlung" msgstr[1] "sowie {n} weitere private Sammlungen" -#: ../root/edit/search_macros.tt:25 -msgid "randomly" -msgstr "in zufälliger Reihenfolge" - #: ../root/edit/search_macros.tt:25 msgid "recently closed first" msgstr "" @@ -5777,7 +5677,7 @@ msgstr "« Vorherige" #: ../root/components/paginator.tt:19 ../root/components/paginator.tt:31 #: ../root/components/paginator.tt:39 ../root/components/Paginator.js:94 #: ../root/components/Paginator.js:119 ../root/components/Paginator.js:133 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:125 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:126 msgid "…" msgstr "…" @@ -6177,14 +6077,6 @@ msgstr "Es gibt bereits Veröffentlichungen mit dieser Disc-ID in MusicBrainz" msgid "There is already a CD stub with this disc ID" msgstr "Es gibt bereits einen CD-Stub mit dieser Disc-ID" -#: ../lib/MusicBrainz/Server/Data/Language.pm:63 -#: ../lib/MusicBrainz/Server/Edit/Work/Create.pm:75 -#: ../lib/MusicBrainz/Server/Edit/Work/Create.pm:85 -#: ../lib/MusicBrainz/Server/Edit/Work/Edit.pm:184 -#: ../lib/MusicBrainz/Server/Form/Utils.pm:48 -msgid "[No lyrics]" -msgstr "[Keine Liedtexte]" - #: ../lib/MusicBrainz/Server/Data/LinkType.pm:197 #, perl-brace-format msgid "{t0}-{t1} relationships" @@ -6426,7 +6318,7 @@ msgstr "Veröffentlichung in einzelnen Künstler umwandeln (historisch)" #: ../lib/MusicBrainz/Server/Edit/Historic/MergeRelease.pm:13 #: ../lib/MusicBrainz/Server/Edit/Historic/MergeReleaseMAC.pm:9 -#: ../lib/MusicBrainz/Server/Edit/Release/Merge.pm:140 +#: ../lib/MusicBrainz/Server/Edit/Release/Merge.pm:141 msgid "Merge releases" msgstr "Veröffentlichungen vereinen" @@ -6710,7 +6602,7 @@ msgctxt "medium format" msgid "(unknown)" msgstr "(unbekannt)" -#: ../lib/MusicBrainz/Server/Edit/Release/Merge.pm:347 +#: ../lib/MusicBrainz/Server/Edit/Release/Merge.pm:339 #, perl-brace-format msgid "These releases could not be merged: {reason}" msgstr "Diese Veröffentlichungen konnten nicht vereint werden: {reason}" @@ -7348,6 +7240,16 @@ msgstr "Muss ein gültiges Datum oder Teil-Datum sein. Beispiele: 2006-05-25, 19 msgid "Please pick the entity you want the others merged into." msgstr "Bitte wähle das Objekt, in das du die anderen integrieren willst." +#: ../lib/MusicBrainz/Server/Form/Merge/Release.pm:50 +#: ../root/edit/details/MergeReleases.js:65 +msgid "Append mediums to target release" +msgstr "Medien an Zielveröffentlichung anhängen" + +#: ../lib/MusicBrainz/Server/Form/Merge/Release.pm:51 +#: ../root/edit/details/MergeReleases.js:66 +msgid "Merge mediums and recordings" +msgstr "Medien und Aufnahmen vereinen" + #: ../lib/MusicBrainz/Server/Form/Merge/Release.pm:62 msgid "Another medium is already in this position" msgstr "Ein anderes Medium hat bereits diese Position" @@ -7395,22 +7297,22 @@ msgid "A fluency level is required." msgstr "" #: ../lib/MusicBrainz/Server/Form/Role/UserProfile.pm:70 -#: ../root/static/scripts/common/constants.js:287 +#: ../root/static/scripts/common/constants.js:289 msgid "Basic" msgstr "Anfänger" #: ../lib/MusicBrainz/Server/Form/Role/UserProfile.pm:71 -#: ../root/static/scripts/common/constants.js:288 +#: ../root/static/scripts/common/constants.js:290 msgid "Intermediate" msgstr "Fortgeschrittener Anfänger" #: ../lib/MusicBrainz/Server/Form/Role/UserProfile.pm:72 -#: ../root/static/scripts/common/constants.js:286 +#: ../root/static/scripts/common/constants.js:288 msgid "Advanced" msgstr "Fortgeschritten" #: ../lib/MusicBrainz/Server/Form/Role/UserProfile.pm:73 -#: ../root/static/scripts/common/constants.js:289 +#: ../root/static/scripts/common/constants.js:291 msgid "Native" msgstr "Muttersprachler" @@ -7552,6 +7454,11 @@ msgstr "2 Wochen" msgid "A month" msgstr "Ein Monat" +#: ../lib/MusicBrainz/Server/Form/Utils.pm:48 +#: ../root/static/scripts/common/i18n/localizeLanguageName.js:19 +msgid "[No lyrics]" +msgstr "[Keine Liedtexte]" + #: ../lib/MusicBrainz/Server/Form/Utils.pm:84 msgctxt "script optgroup" msgid "Frequently used" @@ -7891,7 +7798,7 @@ msgstr "Zugriff" #: ../root/components/Aliases/AliasTable.js:31 #: ../root/components/Aliases/ArtistCreditList.js:54 #: ../root/static/scripts/common/components/FingerprintTable.js:53 -#: ../root/utility/tableColumns.js:78 +#: ../root/utility/tableColumns.js:80 msgid "Actions" msgstr "Aktionen" @@ -8024,7 +7931,7 @@ msgstr "Freier Text" #: ../root/edit/details/AddRelationshipType.js:191 #: ../root/edit/details/RemoveRelationshipType.js:136 #: ../root/relationship/linktype/RelationshipTypeIndex.js:165 -#: ../root/utility/tableColumns.js:626 +#: ../root/utility/tableColumns.js:628 msgid "Attributes" msgstr "Eigenschaften" @@ -8045,12 +7952,12 @@ msgstr "Attribut kann nicht entfernt werden" #: ../root/admin/attributes/Language.js:33 #: ../root/admin/attributes/Language.js:36 -#: ../root/edit/details/AddRelease.js:108 ../root/edit/details/AddWork.js:75 +#: ../root/edit/details/AddRelease.js:108 ../root/edit/details/AddWork.js:77 #: ../root/edit/details/EditRelease.js:131 #: ../root/edit/details/historic/AddRelease.js:104 ../root/iswc/Index.js:59 #: ../root/report/IswcsWithManyWorks.js:53 #: ../root/search/components/ReleaseResults.js:107 -#: ../root/utility/tableColumns.js:524 +#: ../root/utility/tableColumns.js:526 msgid "Language" msgstr "Sprache" @@ -8967,6 +8874,19 @@ msgstr "" msgid "The provided relationship type ID is not valid." msgstr "" +#: ../root/components/ReleaseLanguageScript.js:24 +#: ../root/components/ReleaseLanguageScript.js:30 +#: ../root/components/list/ReleaseList.js:100 +#: ../root/edit/details/MergeReleases.js:88 ../root/release/CoverArt.js:92 +#: ../root/release_group/ReleaseGroupIndex.js:90 +#: ../root/search/components/ReleaseResults.js:55 +#: ../root/static/scripts/common/components/ReleaseEvents.js:55 +#: ../root/static/scripts/common/components/ReleaseEvents.js:72 +#: ../root/static/scripts/release-editor/duplicates.js:145 +msgctxt "missing data" +msgid "-" +msgstr "-" + #: ../root/components/StaticRelationshipsDisplay.js:25 msgid "{start_track}–{end_track}" msgstr "" @@ -9149,6 +9069,14 @@ msgstr "Adresse" msgid "Unspecified type" msgstr "Unspezifizierter Typ" +#: ../root/components/list/ReleaseList.js:90 +#: ../root/edit/details/MergeReleases.js:83 +#: ../root/release_group/ReleaseGroupIndex.js:89 +#: ../root/search/components/ReleaseResults.js:50 +#: ../root/static/scripts/release-editor/duplicates.js:143 +msgid "[missing media]" +msgstr "[fehlende Medien]" + #: ../root/components/list/ReleaseList.js:153 #: ../root/search/components/ReleaseResults.js:109 msgid "Status" @@ -9158,8 +9086,8 @@ msgstr "Status" #: ../root/report/IswcsWithManyWorks.js:50 #: ../root/report/components/WorkList.js:51 #: ../root/search/components/WorkResults.js:51 -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:894 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:454 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:895 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:455 msgid "Writers" msgstr "Autoren" @@ -9277,22 +9205,22 @@ msgid "" msgstr "{edit} hat eine oder mehrere Nein-Stimmen bekommen. Du musst eine Bearbeitungsbemerkung schreiben, bevor du die Bearbeitung absegnen kannst." #: ../root/edit/components/EditHeader.js:46 -#: ../root/edit/components/EditorTypeInfo.js:28 +#: ../root/edit/components/EditorTypeInfo.js:29 msgid "This user is new to MusicBrainz." msgstr "Dieser Benutzer ist neu in MusicBrainz." #: ../root/edit/components/EditHeader.js:48 -#: ../root/edit/components/EditorTypeInfo.js:30 +#: ../root/edit/components/EditorTypeInfo.js:31 msgid "beginner" msgstr "Anfänger" #: ../root/edit/components/EditHeader.js:55 -#: ../root/edit/components/EditorTypeInfo.js:38 +#: ../root/edit/components/EditorTypeInfo.js:39 msgid "This user is automated." msgstr "Dieser Benutzer ist automatisiert." #: ../root/edit/components/EditHeader.js:56 -#: ../root/edit/components/EditorTypeInfo.js:39 +#: ../root/edit/components/EditorTypeInfo.js:40 msgid "bot" msgstr "Bot" @@ -9598,7 +9526,7 @@ msgstr "Primär für Sprachumgebung" #: ../root/edit/details/AddSeries.js:65 ../root/edit/details/EditSeries.js:79 #: ../root/layout/components/sidebar/SeriesSidebar.js:52 -#: ../root/utility/tableColumns.js:819 +#: ../root/utility/tableColumns.js:821 msgid "Ordering Type" msgstr "Reihenfolgentyp" @@ -9684,6 +9612,14 @@ msgstr "Alter Künstler" msgid "New Artist" msgstr "Neuer Künstler" +#: ../root/edit/details/EditRelease.js:182 +#: ../root/edit/details/MergeReleases.js:364 +#: ../root/edit/details/SetTrackLengths.js:89 +#: ../root/edit/details/historic/MergeReleases.js:69 +#: ../root/user/ReportUser.js:116 +msgid "Note" +msgstr "Beachte" + #: ../root/edit/details/EditRelease.js:183 msgid "This edit also changed the track artists." msgstr "Diese Bearbeitung veränderte auch die Titelkünstler." @@ -9715,7 +9651,7 @@ msgstr "Diese Bearbeitung war eine Vereinigung." msgid "Search for the target URL." msgstr "Suche nach der Ziel-URL." -#: ../root/edit/details/EditWork.js:87 +#: ../root/edit/details/EditWork.js:89 msgid "Work type" msgstr "Werktyp" @@ -9732,10 +9668,71 @@ msgstr "Werktyp" msgid "Merge:" msgstr "Vereinen:" +#: ../root/edit/details/MergeAreas.js:35 +#: ../root/edit/details/MergeArtists.js:37 +#: ../root/edit/details/MergeEvents.js:40 +#: ../root/edit/details/MergeInstruments.js:35 +#: ../root/edit/details/MergeLabels.js:35 +#: ../root/edit/details/MergePlaces.js:35 +#: ../root/edit/details/MergeRecordings.js:40 +#: ../root/edit/details/MergeReleaseGroups.js:35 +#: ../root/edit/details/MergeReleases.js:288 +#: ../root/edit/details/MergeReleases.js:295 +#: ../root/edit/details/MergeReleases.js:305 +#: ../root/edit/details/MergeReleases.js:323 +#: ../root/edit/details/MergeSeries.js:35 +#: ../root/edit/details/MergeWorks.js:35 +msgid "Into:" +msgstr "Nach:" + #: ../root/edit/details/MergeArtists.js:43 msgid "Rename artist and relationship credits" msgstr "Künstlernennung und Nennungen in Beziehungen ändern" +#: ../root/edit/details/MergeReleases.js:131 +msgid "Medium {position}: {name} is now medium {new_position}: {new_name}" +msgstr "Medium {position}: {name} ist jetzt Medium {new_position}: {new_name}" + +#: ../root/edit/details/MergeReleases.js:142 +msgid "Medium {position}: {name} is now medium {new_position}" +msgstr "Medium {position}: {name} ist jetzt Medium {new_position}" + +#: ../root/edit/details/MergeReleases.js:151 +msgid "Medium {position} is now medium {new_position}: {new_name}" +msgstr "Medium {position} ist jetzt Medium {new_position}: {new_name}" + +#: ../root/edit/details/MergeReleases.js:162 +msgid "Medium {position} is now medium {new_position}" +msgstr "Medium {position} ist jetzt Medium {new_position}" + +#: ../root/edit/details/MergeReleases.js:271 +msgid "This release has no media to merge." +msgstr "Diese Veröffentlichung hat keine Medium zum Vereinen." + +#: ../root/edit/details/MergeReleases.js:318 +msgid "Recording Merges" +msgstr "Aufnahmenvereinigungen" + +#: ../root/edit/details/MergeReleases.js:321 +msgid "Track #" +msgstr "Titelnr." + +#: ../root/edit/details/MergeReleases.js:333 +msgid "" +"This edit does not store recording merge information and is closed, so no " +"recording merge information can be shown." +msgstr "" + +#: ../root/edit/details/MergeReleases.js:350 +msgid "All recordings for these releases are already merged." +msgstr "Alle Aufnahmen für diese Veröffentlichung sind bereits vereint." + +#: ../root/edit/details/MergeReleases.js:366 +msgid "" +"The data in this edit originally came from an older version of this edit, " +"and may not display correctly" +msgstr "Die Daten in dieser Bearbeitung kamen ursprünglich aus einer älteren Version dieser Bearbeitung und werden möglicherweise nicht korrekt dargestellt" + #: ../root/edit/details/MoveDiscId.js:46 #: ../root/edit/details/historic/MoveDiscId.js:41 msgid "From:" @@ -10807,7 +10804,7 @@ msgstr "Dokumentations-Index" #: ../root/relationship/RelationshipsHeader.js:19 #: ../root/relationship/linktype/RelationshipTypeIndex.js:61 #: ../root/relationship/linktype/RelationshipTypesList.js:62 -#: ../root/utility/tableColumns.js:343 +#: ../root/utility/tableColumns.js:345 msgid "Relationship Types" msgstr "Beziehungstypen" @@ -11223,7 +11220,7 @@ msgstr "Lizenz" #: ../root/layout/components/sidebar/SidebarRating.js:25 #: ../root/static/scripts/release/components/MediumTable.js:223 -#: ../root/utility/tableColumns.js:437 +#: ../root/utility/tableColumns.js:439 msgid "Rating" msgstr "Bewertung" @@ -12047,7 +12044,7 @@ msgid "" msgstr "Bist du sicher, dass du das Cover-Art unten von {release} von {artist} entfernen möchtest?" #: ../root/release_group/ReleaseGroupHeader.js:30 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:404 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:405 msgid "Release group by {artist}" msgstr "Veröffentlichungsgruppe von {artist}" @@ -13337,9 +13334,9 @@ msgstr "" #: ../root/report/ReportsIndex.js:574 #: ../root/search/components/RecordingResults.js:132 -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:728 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:311 -#: ../root/utility/tableColumns.js:655 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:729 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:312 +#: ../root/utility/tableColumns.js:657 msgid "ISRCs" msgstr "ISRCs" @@ -13587,7 +13584,7 @@ msgstr "Andere Dinge nachschlagen" #: ../root/search/components/ArtistResults.js:55 #: ../root/search/components/LabelResults.js:68 #: ../root/search/components/PlaceResults.js:65 -#: ../root/utility/tableColumns.js:150 ../root/utility/tableColumns.js:155 +#: ../root/utility/tableColumns.js:152 ../root/utility/tableColumns.js:157 msgid "Begin" msgstr "Anfang" @@ -13605,9 +13602,9 @@ msgid "Documentation Search" msgstr "Dokumentationssuche" #: ../root/search/components/EventResults.js:71 -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:1044 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:183 -#: ../root/utility/tableColumns.js:358 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:1045 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:184 +#: ../root/utility/tableColumns.js:360 msgid "Location" msgstr "Ort" @@ -13917,7 +13914,7 @@ msgid "Show more artist credits" msgstr "" #: ../root/static/scripts/artist/components/ArtistCreditRenamer.js:254 -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:464 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:465 #: ../root/static/scripts/common/components/Autocomplete2/constants.js:103 #: ../root/static/scripts/common/components/Collapsible.js:76 msgid "Show more..." @@ -13947,56 +13944,56 @@ msgstr "Sammlung erstellen" msgid "Update collection" msgstr "Änderungen speichern" -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:82 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:83 #: ../root/static/scripts/common/components/Autocomplete2/constants.js:96 msgid "An error occurred while searching. Click here to try again." msgstr "Während der Suche ist ein Fehler aufgetreten. Klicke hier, um es erneut zu versuchen." -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:87 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:88 msgid "Try with direct search instead." msgstr "Versuch’s nochmal mit der direkten Suche." -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:88 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:89 msgid "Try with indexed search instead." msgstr "Versuch’s nochmal mit der indexierten Suche." -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:120 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:121 #: ../root/static/scripts/common/components/Autocomplete2.js:648 msgid "Type to search, or paste an MBID" msgstr "Suchbegriff eingeben oder MBID einfügen" -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:202 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:203 #: ../root/static/scripts/common/components/Autocomplete2/constants.js:51 msgid "Clear recent items" msgstr "Letzte Elemente löschen" -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:471 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:472 #: ../root/static/scripts/common/components/Autocomplete2/constants.js:110 msgid "Not found? Try again with direct search." msgstr "Nichts gefunden? Versuch’s nochmal mit der direkten Suche." -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:472 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:473 #: ../root/static/scripts/common/components/Autocomplete2/constants.js:117 msgid "Slow? Switch back to indexed search." msgstr "Zu langsam? Verwende wieder die indexierte Suche." -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:715 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:303 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:716 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:304 msgid "appears on" msgstr "erscheint auf" -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:721 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:307 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:722 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:308 msgid "standalone recording" msgstr "alleinstehende Aufnahme" -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:815 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:399 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:816 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:400 msgid "{release_group_type} by {artist}" msgstr "{release_group_type} von {artist}" -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:1043 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:180 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:1044 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:181 msgid "Performers" msgstr "Interpreten" @@ -14110,11 +14107,11 @@ msgstr "Nach einer Serie suchen" msgid "Search for a work" msgstr "Nach einem Werk suchen" -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:298 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:299 msgid "by {artist}" msgstr "von {artist}" -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:362 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:363 msgid "{first_list_item} … {last_list_item}" msgstr "{first_list_item} … {last_list_item}" @@ -14455,181 +14452,191 @@ msgstr "Gegründet in:" msgid "Dissolved in:" msgstr "Aufgelöst in:" -#: ../root/static/scripts/edit/URLCleanup.js:360 +#: ../root/static/scripts/edit/URLCleanup.js:361 msgid "" "Please link to a channel, not a specific video. Videos should be linked to " "the appropriate recordings or releases instead." msgstr "Bitte verlinke auf einen Kanal, nicht auf ein bestimmtes Video. Videos sollten stattdessen mit den entsprechenden Aufnahmen oder Veröffentlichungen verlinkt werden." -#: ../root/static/scripts/edit/URLCleanup.js:366 +#: ../root/static/scripts/edit/URLCleanup.js:367 msgid "" "Please link to a specific video. Add channel pages to the relevant artist, " "label, etc. instead." msgstr "Bitte verlinke auf ein bestimmtes Video. Füge Kanalseiten stattdessen zu dem entsprechenden Künstler, Label usw. hinzu." -#: ../root/static/scripts/edit/URLCleanup.js:533 +#: ../root/static/scripts/edit/URLCleanup.js:534 msgid "" "Allmusic “{album_url_pattern}” links should be added to release groups. To " "find the appropriate release link for this release, please check the " "Releases tab from {album_url|your link}." msgstr "Allmusic „{album_url_pattern}” Links sollten zu Veröffentlichungsgruppen hinzugefügt werden. Um den entsprechenden Veröffentlichungslink für diese Veröffentlichung zu finden, prüfe bitte den Reiter Veröffentlichungen {album_url|deines Links}." -#: ../root/static/scripts/edit/URLCleanup.js:753 +#: ../root/static/scripts/edit/URLCleanup.js:754 msgid "" "Only Apple Books “{artist_url_pattern}” pages can be added directly to " "artists. Please link audiobooks to the appropriate release instead." msgstr "Nur Apple Books „{artist_url_pattern}” Seiten können direkt zu Künstlern hinzugefügt werden. Bitte verknüpfe Hörbücher stattdessen mit der entsprechenden Veröffentlichung." -#: ../root/static/scripts/edit/URLCleanup.js:769 +#: ../root/static/scripts/edit/URLCleanup.js:770 msgid "" "Only Apple Books audiobooks can be added to MusicBrainz. Consider adding " "books to {bookbrainz_url|BookBrainz} instead." msgstr "Nur Apple Books Hörbücher können zu MusicBrainz hinzugefügt werden. Erwäge stattdessen, Bücher zu {bookbrainz_url|BookBrainz} hinzuzufügen." -#: ../root/static/scripts/edit/URLCleanup.js:856 +#: ../root/static/scripts/edit/URLCleanup.js:857 msgid "" "Please link to the main page for the artist, not to a specific album or " "track." msgstr "Bitte verlinke auf die Hauptseite des Künstlers, nicht auf ein bestimmtes Album oder einen bestimmten Titel." -#: ../root/static/scripts/edit/URLCleanup.js:868 +#: ../root/static/scripts/edit/URLCleanup.js:869 msgid "" "Please link to the main page for the label, not to a specific album or " "track." msgstr "Bitte verlinke auf die Hauptseite des Labels, nicht auf ein bestimmtes Album oder einen bestimmten Titel." -#: ../root/static/scripts/edit/URLCleanup.js:1052 +#: ../root/static/scripts/edit/URLCleanup.js:1053 msgid "Please link to the main page for the artist, not a specific product." msgstr "Bitte verlinke auf die Hauptseite des Künstlers, nicht auf ein bestimmtes Produkt." -#: ../root/static/scripts/edit/URLCleanup.js:1054 +#: ../root/static/scripts/edit/URLCleanup.js:1055 msgid "Please link to the main page for the label, not a specific product." msgstr "Bitte verlinke auf die Hauptseite des Labels, nicht auf ein bestimmtes Produkt." -#: ../root/static/scripts/edit/URLCleanup.js:1597 +#: ../root/static/scripts/edit/URLCleanup.js:1600 msgid "" "Discogs “{master_url_pattern}” links group several releases, so this should " "be added to the release group instead." msgstr "Discogs „{master_url_pattern}” Links gruppieren mehrere Veröffentlichungen, daher sollte dieser stattdessen zur Veröffentlichungsgruppe hinzugefügt werden." -#: ../root/static/scripts/edit/URLCleanup.js:2086 +#: ../root/static/scripts/edit/URLCleanup.js:2090 msgid "" "Only IMSLP “{category_url_pattern}” links are allowed for artists. Please " "link work pages to the specific work in question." msgstr "Für Künstler sind nur IMSLP „{category_url_pattern}” Links erlaubt. Bitte verlinke Werk-Seiten mit dem jeweiligen Werk." -#: ../root/static/scripts/edit/URLCleanup.js:2104 +#: ../root/static/scripts/edit/URLCleanup.js:2108 msgid "" "IMSLP “{category_url_pattern}” links are only allowed for artists. Please " "link the specific work page to this work instead, if available." msgstr "IMSLP „{category_url_pattern}” Links sind nur für Künstler erlaubt. Bitte verlinke stattdessen die spezifische Seite des Werks mit diesem Werk, falls verfügbar." -#: ../root/static/scripts/edit/URLCleanup.js:2149 +#: ../root/static/scripts/edit/URLCleanup.js:2153 msgid "" "Instagram “{explore_url_pattern}” links are not allowed. Please link to a " "profile instead, if there is one." msgstr "Instagram „{explore_url_pattern}” Links sind nicht erlaubt. Bitte verlinke stattdessen auf ein Profil, falls es eines gibt." -#: ../root/static/scripts/edit/URLCleanup.js:2177 +#: ../root/static/scripts/edit/URLCleanup.js:2181 msgid "" "Please do not link directly to images, link to the appropriate Instagram " "profile page instead. If you want to link to a video, {url|add a standalone " "recording} for it instead." msgstr "Bitte verlinke nicht direkt auf Bilder, sondern verlinke stattdessen auf die entsprechende Instagram-Profilseite. Wenn du ein Video verlinken möchtest, solltest du dafür stattdessen eine {url|alleinstehende Aufnahme hinzufügen}." -#: ../root/static/scripts/edit/URLCleanup.js:2202 +#: ../root/static/scripts/edit/URLCleanup.js:2206 msgid "This is an internal Instagram page and should not be added." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:2278 +#: ../root/static/scripts/edit/URLCleanup.js:2282 msgid "" "Only iTunes “{artist_url_pattern}” pages can be added directly to artists. " "Please link albums, videos, etc. to the appropriate release or recording " "instead." msgstr "Nur iTunes „{artist_url_pattern}” Seiten können direkt zu Künstlern hinzugefügt werden. Bitte verknüpfe Alben, Videos usw. stattdessen mit der entsprechenden Veröffentlichung oder Aufnahme." -#: ../root/static/scripts/edit/URLCleanup.js:2890 +#: ../root/static/scripts/edit/URLCleanup.js:2895 msgid "" "Musixmatch “{album_url_pattern}” pages are a bad match for MusicBrainz " "release groups, and linking to them is currently disallowed. Please consider" " adding Musixmatch links to the relevant artists and works instead." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:2993 +#: ../root/static/scripts/edit/URLCleanup.js:2998 msgid "" "This is a redirect link. Please follow {redirect_url|your link} and add the " "link it redirects to instead." msgstr "Dies ist ein Weiterleitungs-Link. Bitte folge {redirect_url|deinem Link} und füge stattdessen den Link hinzu, auf den er umleitet." -#: ../root/static/scripts/edit/URLCleanup.js:3504 +#: ../root/static/scripts/edit/URLCleanup.js:3464 +msgid "Only RYM music videos can be linked to recordings." +msgstr "" + +#: ../root/static/scripts/edit/URLCleanup.js:3516 msgid "" "This is a link to the old Resident Advisor domain. Please follow " "{ra_url|your link}, make sure the link it redirects to is still the correct " "one and, if so, add that link instead." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4092 +#: ../root/static/scripts/edit/URLCleanup.js:4143 msgid "This is not a profile, but a Twitter documentation page." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4106 +#: ../root/static/scripts/edit/URLCleanup.js:4157 msgid "Please link to Twitter profiles, not tweets." msgstr "Bitte verlinke auf Twitter-Profile, nicht auf Tweets." -#: ../root/static/scripts/edit/URLCleanup.js:4124 +#: ../root/static/scripts/edit/URLCleanup.js:4175 msgid "This site does not allow direct links to their images." msgstr "Diese Website erlaubt keine direkten Links zu ihren Bildern." -#: ../root/static/scripts/edit/URLCleanup.js:4331 +#: ../root/static/scripts/edit/URLCleanup.js:4372 +msgid "" +"Please link to the “{allowed_url_pattern}” page rather than this " +"“{current_url_pattern}” link." +msgstr "" + +#: ../root/static/scripts/edit/URLCleanup.js:4428 msgid "" "There is an unencoded “?” or “#” character in this URL. Please check whether" " it is useless and should be removed, or whether it is an error and the URL " "is misencoded." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4351 +#: ../root/static/scripts/edit/URLCleanup.js:4448 msgid "" "Please do not link directly to WhoSampled “{unwanted_url_pattern}” pages. " "Link to the appropriate WhoSampled artist, track or album page instead." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4372 +#: ../root/static/scripts/edit/URLCleanup.js:4469 msgid "Please link WhoSampled “{album_url_pattern}” pages to release groups." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4390 +#: ../root/static/scripts/edit/URLCleanup.js:4487 msgid "Please link WhoSampled artist pages to artists." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4402 +#: ../root/static/scripts/edit/URLCleanup.js:4499 msgid "Please link WhoSampled track pages to recordings." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4469 +#: ../root/static/scripts/edit/URLCleanup.js:4566 msgid "" "Links to specific sections of Wikipedia articles are not allowed. Please " "remove “{fragment}” if still appropriate. See the {url|guidelines}." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4570 +#: ../root/static/scripts/edit/URLCleanup.js:4669 msgid "Only video and playlist links are allowed on releases." msgstr "Bei Veröffentlichungen sind nur Links zu Videos und Wiedergabelisten erlaubt." -#: ../root/static/scripts/edit/URLCleanup.js:4606 +#: ../root/static/scripts/edit/URLCleanup.js:4705 msgid "" "Wikipedia normally has no entries for specific releases, so adding Wikipedia" " links to a release is currently blocked. Please add this Wikipedia link to " "the release group instead, if appropriate." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4618 +#: ../root/static/scripts/edit/URLCleanup.js:4717 msgid "" "Wikidata normally has no entries for specific releases, so adding Wikidata " "links to a release is currently blocked. Please add this Wikidata link to " "the release group instead, if appropriate." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4630 +#: ../root/static/scripts/edit/URLCleanup.js:4729 msgid "" "This is a Bandcamp profile, not a page for a specific release. Even if it " "shows this release right now, that can change when the artist releases " @@ -14638,7 +14645,7 @@ msgid "" "add this profile link to the appropriate artist or label." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4658 +#: ../root/static/scripts/edit/URLCleanup.js:4757 msgid "" "This is a Bandcamp profile, not a page for a specific recording. Even if it " "shows a single recording right now, that can change when the artist releases" @@ -14647,12 +14654,12 @@ msgid "" "the appropriate artist or label." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4821 +#: ../root/static/scripts/edit/URLCleanup.js:4920 msgid "Some relationship types are missing for this URL." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4838 -#: ../root/static/scripts/edit/externalLinks.js:743 +#: ../root/static/scripts/edit/URLCleanup.js:4937 +#: ../root/static/scripts/edit/externalLinks.js:767 msgid "This relationship type combination is invalid." msgstr "" @@ -14815,49 +14822,93 @@ msgstr "Wähle bitte einen Linktyp für die von dir eingegebene URL aus." msgid "This relationship already exists." msgstr "Diese Beziehung besteht bereits," -#: ../root/static/scripts/edit/externalLinks.js:609 +#: ../root/static/scripts/edit/externalLinks.js:607 #: ../root/static/scripts/relationship-editor/common/dialog.js:565 msgid "" "This URL is not allowed for the selected link type, or is incorrectly " "formatted." msgstr "Diese URL ist für den ausgewählten Beziehungstyp nicht zugelassen, oder sie ist falsch formatiert." -#: ../root/static/scripts/edit/externalLinks.js:615 +#: ../root/static/scripts/edit/externalLinks.js:612 msgid "This URL is not allowed for the selected link type." msgstr "" -#: ../root/static/scripts/edit/externalLinks.js:674 +#: ../root/static/scripts/edit/externalLinks.js:618 +msgid "This URL is not allowed for areas." +msgstr "" + +#: ../root/static/scripts/edit/externalLinks.js:620 +msgid "This URL is not allowed for artists." +msgstr "" + +#: ../root/static/scripts/edit/externalLinks.js:622 +msgid "This URL is not allowed for events." +msgstr "" + +#: ../root/static/scripts/edit/externalLinks.js:624 +msgid "This URL is not allowed for instruments." +msgstr "" + +#: ../root/static/scripts/edit/externalLinks.js:626 +msgid "This URL is not allowed for labels." +msgstr "" + +#: ../root/static/scripts/edit/externalLinks.js:628 +msgid "This URL is not allowed for places." +msgstr "" + +#: ../root/static/scripts/edit/externalLinks.js:630 +msgid "This URL is not allowed for recordings." +msgstr "" + +#: ../root/static/scripts/edit/externalLinks.js:632 +msgid "This URL is not allowed for releases." +msgstr "" + +#: ../root/static/scripts/edit/externalLinks.js:634 +msgid "This URL is not allowed for release groups." +msgstr "" + +#: ../root/static/scripts/edit/externalLinks.js:637 +msgid "This URL is not allowed for series." +msgstr "" + +#: ../root/static/scripts/edit/externalLinks.js:639 +msgid "This URL is not allowed for works." +msgstr "" + +#: ../root/static/scripts/edit/externalLinks.js:698 msgid "" "Note: This link already exists at position #{position}. To merge, press " "enter or select a type." msgstr "" -#: ../root/static/scripts/edit/externalLinks.js:861 +#: ../root/static/scripts/edit/externalLinks.js:885 #: ../root/static/scripts/relationship-editor/common/dialog.js:418 msgid "{description} ({url|more documentation})" msgstr "{description} ({url|more documentation})" -#: ../root/static/scripts/edit/externalLinks.js:959 +#: ../root/static/scripts/edit/externalLinks.js:930 +msgid "Remove Relationship" +msgstr "Beziehung entfernen" + +#: ../root/static/scripts/edit/externalLinks.js:996 msgid "video" msgstr "Video" -#: ../root/static/scripts/edit/externalLinks.js:990 -msgid "Remove Relationship" -msgstr "Beziehung entfernen" +#: ../root/static/scripts/edit/externalLinks.js:1091 +msgid "Remove Link" +msgstr "Link entfernen" -#: ../root/static/scripts/edit/externalLinks.js:1076 +#: ../root/static/scripts/edit/externalLinks.js:1120 msgid "Add link" msgstr "" -#: ../root/static/scripts/edit/externalLinks.js:1079 +#: ../root/static/scripts/edit/externalLinks.js:1123 msgid "Add another link" msgstr "" -#: ../root/static/scripts/edit/externalLinks.js:1131 -msgid "Remove Link" -msgstr "Link entfernen" - -#: ../root/static/scripts/edit/externalLinks.js:1180 +#: ../root/static/scripts/edit/externalLinks.js:1205 msgid "Add another relationship" msgstr "" @@ -16069,11 +16120,11 @@ msgstr "Diese Bearbeitung ist fehlgeschlagen, weil sie sich auf hochqualitative msgid "This edit was cancelled." msgstr "Diese Bearbeitung wurde abgebrochen." -#: ../root/utility/tableColumns.js:741 +#: ../root/utility/tableColumns.js:743 msgid "AcoustIDs" msgstr "AcoustIDs" -#: ../root/utility/tableColumns.js:827 +#: ../root/utility/tableColumns.js:829 msgid "Subscribed" msgstr "Abonniert" diff --git a/po/mb_server.el.po b/po/mb_server.el.po index e30b06d9161..d7d79745fc8 100644 --- a/po/mb_server.el.po +++ b/po/mb_server.el.po @@ -22,9 +22,9 @@ msgid "" msgstr "" "Project-Id-Version: MusicBrainz\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-09-13 18:38-0500\n" -"PO-Revision-Date: 2021-09-13 23:42+0000\n" -"Last-Translator: Michael Wiencek <email address hidden>\n" +"POT-Creation-Date: 2021-09-28 21:37+0300\n" +"PO-Revision-Date: 2021-09-28 18:40+0000\n" +"Last-Translator: Nicolás Tamargo <email address hidden>\n" "Language-Team: Greek (http://www.transifex.com/musicbrainz/musicbrainz/language/el/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -75,7 +75,7 @@ msgstr "Το \"YY\" είναι τα τελευταία δύο ψηφία του #: ../root/edit/details/historic/AddRelease.js:118 #: ../root/recording/RecordingIndex.js:50 #: ../root/static/scripts/release/components/MediumTable.js:218 -#: ../root/utility/tableColumns.js:537 +#: ../root/utility/tableColumns.js:539 msgid "#" msgstr "#" @@ -131,26 +131,13 @@ msgstr "(ήταν το μέσο {position} στην κυκλοφορία {releas msgid "(was medium {position}: {name} on release {release})" msgstr "(ήταν το μέσο {position}: {name} στην κυκλοφορία {release})" -#: ../root/edit/details/merge_releases.tt:6 -#: ../root/components/ReleaseLanguageScript.js:24 -#: ../root/components/ReleaseLanguageScript.js:30 -#: ../root/components/list/ReleaseList.js:100 ../root/release/CoverArt.js:92 -#: ../root/release_group/ReleaseGroupIndex.js:90 -#: ../root/search/components/ReleaseResults.js:55 -#: ../root/static/scripts/common/components/ReleaseEvents.js:55 -#: ../root/static/scripts/common/components/ReleaseEvents.js:72 -#: ../root/static/scripts/release-editor/duplicates.js:145 -msgctxt "missing data" -msgid "-" -msgstr "" - #: ../root/cdtoc/attach_artist_releases.tt:16 #: ../root/cdtoc/attach_filter_release.tt:30 ../root/cdtoc/list.tt:10 -#: ../root/edit/details/merge_releases.tt:23 ../root/release/merge.tt:16 +#: ../root/release/merge.tt:16 ../root/edit/details/MergeReleases.js:256 #: ../root/recording/RecordingIndex.js:57 #: ../root/release_group/ReleaseGroupIndex.js:159 #: ../root/search/components/ReleaseResults.js:103 -#: ../root/utility/tableColumns.js:480 ../root/utility/tableColumns.js:488 +#: ../root/utility/tableColumns.js:482 ../root/utility/tableColumns.js:490 msgctxt "and" msgid "/" msgstr "" @@ -427,10 +414,6 @@ msgstr "Σημαίες διαχείρισης" msgid "All of these relationships." msgstr "" -#: ../root/edit/details/merge_releases.tt:141 -msgid "All recordings for these releases are already merged." -msgstr "" - #: ../root/release/edit/recordings.tt:3 msgid "" "All tracks require an associated recording. Click “Edit” to select a " @@ -495,11 +478,6 @@ msgstr "Σχόλιο:" msgid "Annotations support a limited set of wiki formatting options:" msgstr "" -#: ../root/edit/details/merge_releases.tt:149 -#: ../lib/MusicBrainz/Server/Form/Merge/Release.pm:50 -msgid "Append mediums to target release" -msgstr "Προσάρτηση μέσου στην κυκλοφορία" - #: ../root/edit/search_macros.tt:417 msgid "Applied Edit Count of Editor" msgstr "" @@ -608,10 +586,9 @@ msgstr "" #: ../root/cdtoc/attach_confirm.tt:13 #: ../root/cdtoc/attach_filter_release.tt:29 ../root/cdtoc/list.tt:8 #: ../root/cdtoc/lookup.tt:41 ../root/components/common-macros.tt:569 -#: ../root/edit/details/merge_releases.tt:20 ../root/edit/search_macros.tt:417 -#: ../root/release/edit/tracklist.tt:163 ../root/release/edit/tracklist.tt:412 -#: ../root/release/merge.tt:13 ../root/watch/list.tt:16 -#: ../lib/MusicBrainz/Server/Edit/Artist.pm:7 +#: ../root/edit/search_macros.tt:417 ../root/release/edit/tracklist.tt:163 +#: ../root/release/edit/tracklist.tt:412 ../root/release/merge.tt:13 +#: ../root/watch/list.tt:16 ../lib/MusicBrainz/Server/Edit/Artist.pm:7 #: ../lib/MusicBrainz/Server/Form/Search/Search.pm:35 #: ../root/artist/ArtistHeader.js:34 #: ../root/components/RelationshipsTable.js:320 @@ -629,6 +606,7 @@ msgstr "" #: ../root/edit/details/EditRecording.js:86 #: ../root/edit/details/EditRelease.js:83 #: ../root/edit/details/EditReleaseGroup.js:101 +#: ../root/edit/details/MergeReleases.js:253 #: ../root/edit/details/historic/AddRelease.js:68 #: ../root/edit/details/historic/AddRelease.js:120 #: ../root/edit/details/historic/AddTrackKV.js:55 @@ -702,10 +680,10 @@ msgstr "Καλλιτέχνης:" #: ../root/report/components/EventList.js:66 #: ../root/search/components/EventResults.js:70 #: ../root/search/components/WorkResults.js:52 -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:895 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:455 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:896 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:456 #: ../root/static/scripts/common/utility/formatEntityTypeName.js:15 -#: ../root/tag/TagLayout.js:25 ../root/utility/tableColumns.js:854 +#: ../root/tag/TagLayout.js:25 ../root/utility/tableColumns.js:856 msgid "Artists" msgstr "Καλλιτέχνες" @@ -762,14 +740,14 @@ msgstr "" #: ../root/cdtoc/attach_artist_releases.tt:19 #: ../root/cdtoc/attach_filter_release.tt:33 ../root/cdtoc/list.tt:13 -#: ../root/cdtoc/lookup.tt:46 ../root/edit/details/merge_releases.tt:26 -#: ../root/release/edit/duplicates.tt:17 ../root/release/merge.tt:19 -#: ../root/components/list/ReleaseList.js:128 +#: ../root/cdtoc/lookup.tt:46 ../root/release/edit/duplicates.tt:17 +#: ../root/release/merge.tt:19 ../root/components/list/ReleaseList.js:128 #: ../root/edit/details/AddRelease.js:129 #: ../root/edit/details/EditBarcodes.js:58 #: ../root/edit/details/EditBarcodes.js:64 #: ../root/edit/details/EditRelease.js:167 #: ../root/edit/details/EditReleaseLabel.js:138 +#: ../root/edit/details/MergeReleases.js:259 #: ../root/edit/details/historic/AddRelease.js:155 #: ../root/edit/details/historic/EditReleaseEvents.js:138 #: ../root/otherlookup/OtherLookupForm.js:64 @@ -996,12 +974,12 @@ msgstr "" #: ../root/cdtoc/attach_artist_releases.tt:18 #: ../root/cdtoc/attach_filter_release.tt:32 ../root/cdtoc/list.tt:12 -#: ../root/cdtoc/lookup.tt:45 ../root/edit/details/merge_releases.tt:25 -#: ../root/release/edit/duplicates.tt:16 ../root/release/merge.tt:18 +#: ../root/cdtoc/lookup.tt:45 ../root/release/edit/duplicates.tt:16 +#: ../root/release/merge.tt:18 ../root/edit/details/MergeReleases.js:258 #: ../root/recording/RecordingIndex.js:59 #: ../root/release_group/ReleaseGroupIndex.js:161 #: ../root/search/components/ReleaseResults.js:105 -#: ../root/utility/tableColumns.js:456 ../root/utility/tableColumns.js:461 +#: ../root/utility/tableColumns.js:458 ../root/utility/tableColumns.js:463 msgid "Catalog#" msgstr "# κατάλογου" @@ -1162,16 +1140,16 @@ msgstr "" #: ../root/cdtoc/attach_artist_releases.tt:16 #: ../root/cdtoc/attach_filter_release.tt:30 ../root/cdtoc/list.tt:10 -#: ../root/cdtoc/lookup.tt:43 ../root/edit/details/merge_releases.tt:23 -#: ../root/release/edit/duplicates.tt:14 ../root/release/merge.tt:16 -#: ../root/edit/details/EditReleaseLabel.js:127 +#: ../root/cdtoc/lookup.tt:43 ../root/release/edit/duplicates.tt:14 +#: ../root/release/merge.tt:16 ../root/edit/details/EditReleaseLabel.js:127 +#: ../root/edit/details/MergeReleases.js:256 #: ../root/edit/details/historic/AddRelease.js:152 #: ../root/edit/details/historic/EditReleaseEvents.js:135 #: ../root/recording/RecordingIndex.js:57 #: ../root/release_group/ReleaseGroupIndex.js:159 #: ../root/search/components/ReleaseResults.js:103 #: ../root/static/scripts/common/components/FilterForm.js:110 -#: ../root/utility/tableColumns.js:476 ../root/utility/tableColumns.js:488 +#: ../root/utility/tableColumns.js:478 ../root/utility/tableColumns.js:490 msgid "Country" msgstr "Χώρα" @@ -1246,13 +1224,14 @@ msgstr "" #: ../root/annotation/history.tt:12 ../root/cdtoc/attach_artist_releases.tt:16 #: ../root/cdtoc/attach_filter_release.tt:30 ../root/cdtoc/list.tt:10 -#: ../root/cdtoc/lookup.tt:42 ../root/edit/details/merge_releases.tt:23 -#: ../root/release/edit/duplicates.tt:13 ../root/release/merge.tt:16 +#: ../root/cdtoc/lookup.tt:42 ../root/release/edit/duplicates.tt:13 +#: ../root/release/merge.tt:16 #: ../root/admin/statistics-events/DeleteStatisticsEvent.js:31 #: ../root/admin/statistics-events/StatisticsEventEditForm.js:35 #: ../root/admin/statistics-events/StatisticsEventIndex.js:30 #: ../root/components/RelationshipsTable.js:316 #: ../root/edit/details/EditReleaseLabel.js:119 +#: ../root/edit/details/MergeReleases.js:256 #: ../root/edit/details/historic/AddRelease.js:151 #: ../root/edit/details/historic/EditReleaseEvents.js:134 #: ../root/elections/ElectionVotes.js:26 @@ -1261,8 +1240,8 @@ msgstr "" #: ../root/search/components/EventResults.js:67 #: ../root/search/components/ReleaseResults.js:103 #: ../root/static/scripts/common/components/FilterForm.js:129 -#: ../root/utility/tableColumns.js:255 ../root/utility/tableColumns.js:260 -#: ../root/utility/tableColumns.js:482 ../root/utility/tableColumns.js:488 +#: ../root/utility/tableColumns.js:257 ../root/utility/tableColumns.js:262 +#: ../root/utility/tableColumns.js:484 ../root/utility/tableColumns.js:490 msgid "Date" msgstr "Ημερομηνία" @@ -1330,7 +1309,7 @@ msgstr "" #: ../root/relationship/linktype/RelationshipTypeIndex.js:96 #: ../root/search/components/InstrumentResults.js:52 #: ../root/static/scripts/collection/components/CollectionEditForm.js:89 -#: ../root/utility/tableColumns.js:636 +#: ../root/utility/tableColumns.js:638 msgid "Description" msgstr "Περιγραφή" @@ -1366,21 +1345,21 @@ msgstr "Πέθανε:" #: ../root/edit/details/AddReleaseGroup.js:71 #: ../root/edit/details/AddSeries.js:51 #: ../root/edit/details/AddStandaloneRecording.js:67 -#: ../root/edit/details/AddWork.js:57 ../root/edit/details/EditArea.js:84 +#: ../root/edit/details/AddWork.js:59 ../root/edit/details/EditArea.js:84 #: ../root/edit/details/EditArtist.js:100 ../root/edit/details/EditEvent.js:64 #: ../root/edit/details/EditInstrument.js:64 #: ../root/edit/details/EditLabel.js:84 ../root/edit/details/EditPlace.js:70 #: ../root/edit/details/EditRecording.js:65 #: ../root/edit/details/EditRelease.js:111 #: ../root/edit/details/EditReleaseGroup.js:64 -#: ../root/edit/details/EditSeries.js:61 ../root/edit/details/EditWork.js:73 +#: ../root/edit/details/EditSeries.js:61 ../root/edit/details/EditWork.js:75 #: ../root/genre/GenreEditForm.js:38 msgid "Disambiguation" msgstr "" #: ../root/release/discids.tt:8 ../root/edit/details/SetTrackLengths.js:66 #: ../root/otherlookup/OtherLookupForm.js:114 -#: ../root/utility/tableColumns.js:179 ../root/utility/tableColumns.js:184 +#: ../root/utility/tableColumns.js:181 ../root/utility/tableColumns.js:186 msgid "Disc ID" msgstr "Disc ID" @@ -1620,7 +1599,7 @@ msgstr "Ενεργοποίηση αριθμών κομματιών βινυλί #: ../root/search/components/ArtistResults.js:57 #: ../root/search/components/LabelResults.js:69 #: ../root/search/components/PlaceResults.js:66 -#: ../root/utility/tableColumns.js:273 ../root/utility/tableColumns.js:278 +#: ../root/utility/tableColumns.js:275 ../root/utility/tableColumns.js:280 msgid "End" msgstr "Λήξη" @@ -1816,11 +1795,11 @@ msgstr "" msgid "For more information, check the {doc_doc|documentation}." msgstr "" -#: ../root/cdtoc/list.tt:9 ../root/edit/details/merge_releases.tt:21 -#: ../root/release/edit/duplicates.tt:11 ../root/release/merge.tt:14 -#: ../root/components/list/ReleaseList.js:93 +#: ../root/cdtoc/list.tt:9 ../root/release/edit/duplicates.tt:11 +#: ../root/release/merge.tt:14 ../root/components/list/ReleaseList.js:93 #: ../root/edit/details/EditMedium.js:530 #: ../root/edit/details/EditReleaseLabel.js:145 +#: ../root/edit/details/MergeReleases.js:254 #: ../root/edit/details/historic/AddRelease.js:156 #: ../root/edit/details/historic/EditReleaseEvents.js:139 #: ../root/release_group/ReleaseGroupIndex.js:157 @@ -1993,7 +1972,7 @@ msgstr "" #: ../root/components/common-macros.tt:602 #: ../lib/MusicBrainz/Server/Controller/Edit.pm:240 -#: ../root/static/scripts/common/constants.js:279 +#: ../root/static/scripts/common/constants.js:281 msgid "High" msgstr "Υψηλή" @@ -2132,12 +2111,12 @@ msgstr "ISRC" msgid "ISRCs:" msgstr "" -#: ../root/work/edit_form.tt:16 ../root/edit/details/AddWork.js:63 -#: ../root/edit/details/EditWork.js:80 ../root/edit/details/RemoveIswc.js:36 +#: ../root/work/edit_form.tt:16 ../root/edit/details/AddWork.js:65 +#: ../root/edit/details/EditWork.js:82 ../root/edit/details/RemoveIswc.js:36 #: ../root/otherlookup/OtherLookupForm.js:79 #: ../root/report/IswcsWithManyWorks.js:48 #: ../root/search/components/WorkResults.js:53 -#: ../root/utility/tableColumns.js:762 +#: ../root/utility/tableColumns.js:764 msgid "ISWC" msgstr "ISWC" @@ -2290,23 +2269,6 @@ msgstr "" msgid "Instruments" msgstr "" -#: ../root/edit/details/merge_releases.tt:78 -#: ../root/edit/details/merge_releases.tt:83 -#: ../root/edit/details/merge_releases.tt:92 -#: ../root/edit/details/merge_releases.tt:109 -#: ../root/edit/details/MergeAreas.js:35 -#: ../root/edit/details/MergeArtists.js:37 -#: ../root/edit/details/MergeEvents.js:40 -#: ../root/edit/details/MergeInstruments.js:35 -#: ../root/edit/details/MergeLabels.js:35 -#: ../root/edit/details/MergePlaces.js:35 -#: ../root/edit/details/MergeRecordings.js:40 -#: ../root/edit/details/MergeReleaseGroups.js:35 -#: ../root/edit/details/MergeSeries.js:35 -#: ../root/edit/details/MergeWorks.js:35 -msgid "Into:" -msgstr "Σε:" - #: ../root/cdstub/error.tt:5 msgid "Invalid Disc ID" msgstr "Μη έγκυρο Disc ID" @@ -2347,13 +2309,13 @@ msgstr "" #: ../root/cdtoc/attach_artist_releases.tt:17 #: ../root/cdtoc/attach_filter_release.tt:31 ../root/cdtoc/list.tt:11 #: ../root/cdtoc/lookup.tt:44 ../root/components/common-macros.tt:569 -#: ../root/edit/details/merge_releases.tt:24 ../root/edit/search_macros.tt:417 -#: ../root/release/edit/duplicates.tt:15 ../root/release/merge.tt:17 -#: ../lib/MusicBrainz/Server/Edit/Label.pm:7 +#: ../root/edit/search_macros.tt:417 ../root/release/edit/duplicates.tt:15 +#: ../root/release/merge.tt:17 ../lib/MusicBrainz/Server/Edit/Label.pm:7 #: ../lib/MusicBrainz/Server/Form/Search/Search.pm:40 #: ../root/components/list/LabelList.js:54 ../root/edit/details/AddLabel.js:51 #: ../root/edit/details/EditLabel.js:62 #: ../root/edit/details/EditReleaseLabel.js:69 +#: ../root/edit/details/MergeReleases.js:257 #: ../root/edit/details/historic/AddRelease.js:153 #: ../root/edit/details/historic/EditReleaseEvents.js:136 #: ../root/label/LabelHeader.js:27 ../root/layout/components/Search.js:39 @@ -2366,8 +2328,8 @@ msgstr "" #: ../root/search/components/SearchForm.js:39 #: ../root/static/scripts/common/constants.js:23 #: ../root/static/scripts/common/utility/formatEntityTypeName.js:56 -#: ../root/user/UserProfile.js:46 ../root/utility/tableColumns.js:503 -#: ../root/utility/tableColumns.js:508 +#: ../root/user/UserProfile.js:46 ../root/utility/tableColumns.js:505 +#: ../root/utility/tableColumns.js:510 msgid "Label" msgstr "Δισκογραφική εταιρεία" @@ -2470,7 +2432,7 @@ msgstr "" #: ../root/static/scripts/common/components/FingerprintTable.js:87 #: ../root/static/scripts/edit/components/AddEntityDialog.js:101 #: ../root/static/scripts/release/components/MediumTable.js:118 -#: ../root/utility/tableColumns.js:674 +#: ../root/utility/tableColumns.js:676 msgid "Loading..." msgstr "" @@ -2510,15 +2472,15 @@ msgstr "Πλήθος αναζητήσεων" #: ../root/components/common-macros.tt:602 #: ../lib/MusicBrainz/Server/Controller/Edit.pm:240 -#: ../root/static/scripts/common/constants.js:276 +#: ../root/static/scripts/common/constants.js:278 msgid "Low" msgstr "Χαμηλή" #: ../root/release/edit_relationships.tt:172 -#: ../root/edit/details/AddWork.js:81 ../root/edit/details/EditWork.js:98 +#: ../root/edit/details/AddWork.js:83 ../root/edit/details/EditWork.js:100 #: ../root/layout/components/sidebar/WorkSidebar.js:67 #: ../root/search/components/WorkResults.js:55 -#: ../root/static/scripts/work.js:312 ../root/utility/tableColumns.js:873 +#: ../root/static/scripts/work.js:312 ../root/utility/tableColumns.js:875 msgid "Lyrics Languages" msgstr "" @@ -2573,22 +2535,6 @@ msgstr "" msgid "Medium track lengths" msgstr "" -#: ../root/edit/details/merge_releases.tt:44 -msgid "Medium {position} is now medium {new_position}" -msgstr "Το μέσο {position} είναι τώρα {new_position}" - -#: ../root/edit/details/merge_releases.tt:44 -msgid "Medium {position} is now medium {new_position}: {new_name}" -msgstr "Το μέσο {position} είναι τώρα {new_position}: {new_name}" - -#: ../root/edit/details/merge_releases.tt:44 -msgid "Medium {position}: {name} is now medium {new_position}" -msgstr "Το μέσο {position}: {name} είναι τώρα {new_position}" - -#: ../root/edit/details/merge_releases.tt:44 -msgid "Medium {position}: {name} is now medium {new_position}: {new_name}" -msgstr "Το μέσο {position}: {name} είναι τώρα {new_position}: {new_name}" - #: ../root/layout/merge-helper.tt:30 #: ../root/layout/components/MergeHelper.js:71 #: ../root/layout/components/sidebar/MergeLink.js:31 @@ -2604,12 +2550,7 @@ msgstr "Διαδικασία συγχώνευσης" msgid "Merge Releases" msgstr "Συγχώνευση κυκλοφοριών" -#: ../root/edit/details/merge_releases.tt:149 -#: ../lib/MusicBrainz/Server/Form/Merge/Release.pm:51 -msgid "Merge mediums and recordings" -msgstr "Συγχώνευση μέσων και ηχογραφήσεων" - -#: ../root/edit/details/merge_releases.tt:147 ../root/release/merge.tt:55 +#: ../root/release/merge.tt:55 ../root/edit/details/MergeReleases.js:358 msgid "Merge strategy:" msgstr "Στρατηγική συγχώνευσης:" @@ -2699,7 +2640,7 @@ msgstr "Η ψήφος μου:" #: ../root/edit/details/AddReleaseGroup.js:56 #: ../root/edit/details/AddSeries.js:46 #: ../root/edit/details/AddStandaloneRecording.js:56 -#: ../root/edit/details/AddWork.js:52 ../root/edit/details/EditArea.js:70 +#: ../root/edit/details/AddWork.js:54 ../root/edit/details/EditArea.js:70 #: ../root/edit/details/EditArtist.js:86 ../root/edit/details/EditEvent.js:57 #: ../root/edit/details/EditInstrument.js:57 #: ../root/edit/details/EditLabel.js:68 ../root/edit/details/EditMedium.js:522 @@ -2709,7 +2650,7 @@ msgstr "Η ψήφος μου:" #: ../root/edit/details/EditRelationshipAttribute.js:76 #: ../root/edit/details/EditRelease.js:75 #: ../root/edit/details/EditReleaseGroup.js:57 -#: ../root/edit/details/EditSeries.js:54 ../root/edit/details/EditWork.js:66 +#: ../root/edit/details/EditSeries.js:54 ../root/edit/details/EditWork.js:68 #: ../root/edit/details/RemoveRelationshipAttribute.js:41 #: ../root/edit/details/RemoveRelationshipType.js:60 #: ../root/edit/details/historic/AddRelease.js:63 @@ -2832,7 +2773,7 @@ msgid "No releases have cover art marked as \"Front\", cannot set cover art." msgstr "" #: ../root/release/edit/tracklist.tt:140 ../root/admin/IpLookup.js:35 -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:457 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:458 #: ../root/static/scripts/common/components/Autocomplete2/constants.js:90 msgid "No results" msgstr "Κανένα αποτέλεσμα" @@ -2877,19 +2818,11 @@ msgstr "" #: ../root/components/common-macros.tt:602 #: ../lib/MusicBrainz/Server/Controller/Edit.pm:240 -#: ../root/static/scripts/common/constants.js:277 -#: ../root/static/scripts/common/constants.js:278 +#: ../root/static/scripts/common/constants.js:279 +#: ../root/static/scripts/common/constants.js:280 msgid "Normal" msgstr "Κανονικό" -#: ../root/edit/details/merge_releases.tt:158 -#: ../root/edit/details/EditRelease.js:182 -#: ../root/edit/details/SetTrackLengths.js:89 -#: ../root/edit/details/historic/MergeReleases.js:69 -#: ../root/user/ReportUser.js:116 -msgid "Note" -msgstr "" - #: ../root/release/edit/information.tt:279 msgid "" "Note! If you do not know the month or day of release, please leave them " @@ -3212,13 +3145,13 @@ msgstr "" msgid "Recent Notes Left on Your Edits" msgstr "" -#: ../root/components/common-macros.tt:569 -#: ../root/edit/details/merge_releases.tt:108 -#: ../root/edit/search_macros.tt:417 ../root/release/edit_relationships.tt:53 +#: ../root/components/common-macros.tt:569 ../root/edit/search_macros.tt:417 +#: ../root/release/edit_relationships.tt:53 #: ../lib/MusicBrainz/Server/Edit/Recording.pm:7 #: ../lib/MusicBrainz/Server/Form/Search/Search.pm:38 #: ../root/edit/details/AddStandaloneRecording.js:46 #: ../root/edit/details/EditRecording.js:51 +#: ../root/edit/details/MergeReleases.js:322 #: ../root/edit/details/RemoveIsrc.js:40 #: ../root/edit/details/historic/EditTrack.js:37 #: ../root/layout/components/Search.js:30 @@ -3236,10 +3169,6 @@ msgstr "Ηχογράφηση" msgid "Recording Details" msgstr "Λεπτομέρειες Ηχογράφησης" -#: ../root/edit/details/merge_releases.tt:104 -msgid "Recording Merges" -msgstr "" - #: ../root/user/ratings.tt:2 ../root/user/ratings_summary.tt:3 msgid "Recording ratings" msgstr "Βαθμολογίες ηχογράφησης" @@ -3299,7 +3228,7 @@ msgstr "" #: ../root/edit/search_macros.tt:417 #: ../root/edit/details/AddRelationshipType.js:78 #: ../root/relationship/linktype/RelationshipTypeIndex.js:41 -#: ../root/utility/tableColumns.js:804 +#: ../root/utility/tableColumns.js:806 msgid "Relationship Type" msgstr "Τύπος σχέσης" @@ -3326,8 +3255,7 @@ msgstr "" #: ../root/cdtoc/attach_artist_releases.tt:15 #: ../root/cdtoc/attach_filter_release.tt:28 ../root/cdtoc/lookup.tt:39 -#: ../root/components/common-macros.tt:569 -#: ../root/edit/details/merge_releases.tt:19 ../root/edit/search_macros.tt:417 +#: ../root/components/common-macros.tt:569 ../root/edit/search_macros.tt:417 #: ../root/release/edit/duplicates.tt:10 ../root/release/merge.tt:12 #: ../lib/MusicBrainz/Server/Edit/Release.pm:8 #: ../lib/MusicBrainz/Server/Form/Search/Search.pm:37 @@ -3338,6 +3266,7 @@ msgstr "" #: ../root/edit/details/EditBarcodes.js:51 #: ../root/edit/details/EditCoverArt.js:51 #: ../root/edit/details/EditReleaseLabel.js:60 +#: ../root/edit/details/MergeReleases.js:252 #: ../root/edit/details/RemoveCoverArt.js:35 #: ../root/edit/details/ReorderCoverArt.js:45 #: ../root/edit/details/ReorderMediums.js:39 @@ -3574,7 +3503,7 @@ msgstr "" #: ../root/components/common-macros.tt:878 #: ../root/components/common-macros.tt:886 #: ../root/components/RemoveFromMergeTableCell.js:39 -#: ../root/utility/tableColumns.js:781 ../root/utility/tableColumns.js:791 +#: ../root/utility/tableColumns.js:783 ../root/utility/tableColumns.js:793 msgid "Remove from merge" msgstr "" @@ -3972,7 +3901,7 @@ msgstr "" #: ../root/search/components/RecordingResults.js:134 #: ../root/search/components/ReleaseResults.js:112 #: ../root/static/scripts/common/components/TaggerIcon.js:40 -#: ../root/utility/tableColumns.js:834 +#: ../root/utility/tableColumns.js:836 msgid "Tagger" msgstr "Ετικέτα" @@ -3998,12 +3927,6 @@ msgstr "Το πεδίο σχολίων λειτουργεί σαν ένα μικ msgid "The catalog number you have entered looks like an Amazon ASIN." msgstr "Ο αριθμός καταλόγου που εισάγατε μοιάζε με Amazon ASIN." -#: ../root/edit/details/merge_releases.tt:159 -msgid "" -"The data in this edit originally came from an older version of this edit, " -"and may not display correctly" -msgstr "Αυτά τα δεδομένα αρχικά ήρθαν από μία παλιότερη έκδοση αυτής της επεξεργασίας, και για αυτό μπορεί να μην εμφανίζονται σωστά" - #: ../root/layout.tt:90 ../root/layout/index.js:275 msgid "" "The data you have submitted does not make any changes to the data already " @@ -4187,12 +4110,6 @@ msgstr "" msgid "This disc has a hidden pregap track before track 1" msgstr "" -#: ../root/edit/details/merge_releases.tt:133 -msgid "" -"This edit does not store recording merge information and is closed, so no " -"recording merge information can be shown." -msgstr "" - #: ../root/cdtoc/set_durations.tt:31 msgid "This edit would only make subsecond changes to track lengths." msgstr "" @@ -4324,8 +4241,8 @@ msgid "This recording cannot be removed because it is still used on releases." msgstr "" #: ../root/components/common-macros.tt:302 -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:696 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:286 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:697 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:287 #: ../root/static/scripts/common/components/EntityLink.js:289 msgid "This recording is a video" msgstr "" @@ -4357,10 +4274,6 @@ msgid "" " relationships." msgstr "" -#: ../root/edit/details/merge_releases.tt:35 -msgid "This release has no media to merge." -msgstr "" - #: ../root/release/discids.tt:58 msgid "This release has no mediums that can have disc IDs." msgstr "" @@ -4496,14 +4409,10 @@ msgid "Total tracks:" msgstr "Συνολικά κομμάτια:" #: ../root/cdtoc/info.tt:31 ../root/search/components/RecordingResults.js:135 -#: ../root/taglookup/Form.js:41 ../root/utility/tableColumns.js:846 +#: ../root/taglookup/Form.js:41 ../root/utility/tableColumns.js:848 msgid "Track" msgstr "Κομμάτι" -#: ../root/edit/details/merge_releases.tt:107 -msgid "Track #" -msgstr "" - #: ../root/release/edit/tracklist.tt:483 #: ../root/static/scripts/release-editor/dialogs.js:40 msgid "Track Parser" @@ -4538,11 +4447,11 @@ msgstr "Κομμάτι {n}:" msgid "Tracklist" msgstr "Λίστα κομματιών" -#: ../root/edit/details/merge_releases.tt:22 ../root/release/discids.tt:9 -#: ../root/release/edit/duplicates.tt:12 ../root/release/merge.tt:15 -#: ../root/artist_credit/ArtistCreditIndex.js:128 +#: ../root/release/discids.tt:9 ../root/release/edit/duplicates.tt:12 +#: ../root/release/merge.tt:15 ../root/artist_credit/ArtistCreditIndex.js:128 #: ../root/artist_credit/ArtistCreditLayout.js:31 #: ../root/components/list/ReleaseList.js:103 +#: ../root/edit/details/MergeReleases.js:255 #: ../root/edit/details/historic/AddRelease.js:113 #: ../root/release_group/ReleaseGroupIndex.js:158 #: ../root/search/components/CDStubResults.js:49 @@ -4586,7 +4495,7 @@ msgstr "Twitter" #: ../root/edit/details/AddLabel.js:107 ../root/edit/details/AddPlace.js:65 #: ../root/edit/details/AddReleaseGroup.js:80 #: ../root/edit/details/AddRemoveAlias.js:101 -#: ../root/edit/details/AddSeries.js:57 ../root/edit/details/AddWork.js:69 +#: ../root/edit/details/AddSeries.js:57 ../root/edit/details/AddWork.js:71 #: ../root/edit/details/EditAlias.js:123 ../root/edit/details/EditArea.js:91 #: ../root/edit/details/EditArtist.js:107 ../root/edit/details/EditEvent.js:78 #: ../root/edit/details/EditInstrument.js:71 @@ -4617,12 +4526,12 @@ msgstr "Twitter" #: ../root/static/scripts/account/components/ApplicationForm.js:87 #: ../root/static/scripts/alias/AliasEditForm.js:329 #: ../root/static/scripts/collection/components/CollectionEditForm.js:83 -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:874 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:447 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:875 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:448 #: ../root/static/scripts/common/components/FilterForm.js:63 -#: ../root/static/scripts/edit/externalLinks.js:904 -#: ../root/static/scripts/edit/externalLinks.js:1157 -#: ../root/utility/tableColumns.js:613 ../root/utility/tableColumns.js:618 +#: ../root/static/scripts/edit/externalLinks.js:941 +#: ../root/static/scripts/edit/externalLinks.js:1181 +#: ../root/utility/tableColumns.js:615 ../root/utility/tableColumns.js:620 msgid "Type" msgstr "Τύπος" @@ -4933,8 +4842,8 @@ msgstr "" #: ../root/components/common-macros.tt:569 ../root/edit/search_macros.tt:417 #: ../lib/MusicBrainz/Server/Edit/Work.pm:9 #: ../lib/MusicBrainz/Server/Form/Search/Search.pm:39 -#: ../root/components/list/WorkList.js:60 ../root/edit/details/AddWork.js:46 -#: ../root/edit/details/EditWork.js:59 ../root/edit/details/RemoveIswc.js:40 +#: ../root/components/list/WorkList.js:60 ../root/edit/details/AddWork.js:48 +#: ../root/edit/details/EditWork.js:61 ../root/edit/details/RemoveIswc.js:40 #: ../root/layout/components/Search.js:34 #: ../root/report/IswcsWithManyWorks.js:49 #: ../root/report/components/WorkList.js:46 @@ -5199,22 +5108,13 @@ msgid "" " please make sure the artists have been entered correctly." msgstr "" -#: ../root/edit/details/merge_releases.tt:5 -#: ../root/components/list/ReleaseList.js:90 -#: ../root/release_group/ReleaseGroupIndex.js:89 -#: ../root/search/components/ReleaseResults.js:50 -#: ../root/static/scripts/release-editor/duplicates.js:143 -msgid "[missing media]" -msgstr "" - #: ../root/components/common-macros.tt:259 #: ../lib/MusicBrainz/Server/Edit/Relationship/RemoveLinkType.pm:86 #: ../lib/MusicBrainz/Server/Edit/Release/Create.pm:113 -#: ../lib/MusicBrainz/Server/Edit/Work/Create.pm:87 -#: ../lib/MusicBrainz/Server/Edit/Work/Edit.pm:186 #: ../root/edit/details/EditAlias.js:94 #: ../root/edit/details/SetTrackLengths.js:73 #: ../root/static/scripts/common/components/EntityLink.js:41 +#: ../root/static/scripts/common/i18n/localizeLanguageName.js:15 msgid "[removed]" msgstr "[αφαιρέθηκε]" @@ -5360,6 +5260,10 @@ msgstr "" msgid "historical, {begin}-{end}" msgstr "" +#: ../root/edit/search_macros.tt:25 +msgid "in an unspecified order (possibly faster)" +msgstr "" + #: ../root/edit/details/macros.tt:28 #: ../root/utility/relationshipDateText.js:25 msgid "in {date}" @@ -5515,10 +5419,6 @@ msgid_plural "plus {n} other private collections" msgstr[0] "συν άλλη {n} ιδιωτική συλλογή" msgstr[1] "συν άλλες {n} ιδιωτικές συλλογές" -#: ../root/edit/search_macros.tt:25 -msgid "randomly" -msgstr "τυχαία" - #: ../root/edit/search_macros.tt:25 msgid "recently closed first" msgstr "" @@ -5730,7 +5630,7 @@ msgstr "« Προηγούμενο" #: ../root/components/paginator.tt:19 ../root/components/paginator.tt:31 #: ../root/components/paginator.tt:39 ../root/components/Paginator.js:94 #: ../root/components/Paginator.js:119 ../root/components/Paginator.js:133 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:125 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:126 msgid "…" msgstr "" @@ -6130,14 +6030,6 @@ msgstr "" msgid "There is already a CD stub with this disc ID" msgstr "" -#: ../lib/MusicBrainz/Server/Data/Language.pm:63 -#: ../lib/MusicBrainz/Server/Edit/Work/Create.pm:75 -#: ../lib/MusicBrainz/Server/Edit/Work/Create.pm:85 -#: ../lib/MusicBrainz/Server/Edit/Work/Edit.pm:184 -#: ../lib/MusicBrainz/Server/Form/Utils.pm:48 -msgid "[No lyrics]" -msgstr "" - #: ../lib/MusicBrainz/Server/Data/LinkType.pm:197 #, perl-brace-format msgid "{t0}-{t1} relationships" @@ -6379,7 +6271,7 @@ msgstr "Μετατροπή κυκλοφορίας σε μοναδικού καλ #: ../lib/MusicBrainz/Server/Edit/Historic/MergeRelease.pm:13 #: ../lib/MusicBrainz/Server/Edit/Historic/MergeReleaseMAC.pm:9 -#: ../lib/MusicBrainz/Server/Edit/Release/Merge.pm:140 +#: ../lib/MusicBrainz/Server/Edit/Release/Merge.pm:141 msgid "Merge releases" msgstr "Συγχώνευση κυκλοφοριών" @@ -6663,7 +6555,7 @@ msgctxt "medium format" msgid "(unknown)" msgstr "(άγνωστο)" -#: ../lib/MusicBrainz/Server/Edit/Release/Merge.pm:347 +#: ../lib/MusicBrainz/Server/Edit/Release/Merge.pm:339 #, perl-brace-format msgid "These releases could not be merged: {reason}" msgstr "" @@ -7301,6 +7193,16 @@ msgstr "" msgid "Please pick the entity you want the others merged into." msgstr "Παρακαλούμε επιλέξτε το στοιχείο στο οποίο θέλετε να συγχωνευθούν τα υπόλοιπα." +#: ../lib/MusicBrainz/Server/Form/Merge/Release.pm:50 +#: ../root/edit/details/MergeReleases.js:65 +msgid "Append mediums to target release" +msgstr "Προσάρτηση μέσου στην κυκλοφορία" + +#: ../lib/MusicBrainz/Server/Form/Merge/Release.pm:51 +#: ../root/edit/details/MergeReleases.js:66 +msgid "Merge mediums and recordings" +msgstr "Συγχώνευση μέσων και ηχογραφήσεων" + #: ../lib/MusicBrainz/Server/Form/Merge/Release.pm:62 msgid "Another medium is already in this position" msgstr "Ένα άλλο μέσο βρίσκεται ήδη σε αυτή τη θέση" @@ -7348,22 +7250,22 @@ msgid "A fluency level is required." msgstr "" #: ../lib/MusicBrainz/Server/Form/Role/UserProfile.pm:70 -#: ../root/static/scripts/common/constants.js:287 +#: ../root/static/scripts/common/constants.js:289 msgid "Basic" msgstr "Βασικό" #: ../lib/MusicBrainz/Server/Form/Role/UserProfile.pm:71 -#: ../root/static/scripts/common/constants.js:288 +#: ../root/static/scripts/common/constants.js:290 msgid "Intermediate" msgstr "Φυσιολογικό" #: ../lib/MusicBrainz/Server/Form/Role/UserProfile.pm:72 -#: ../root/static/scripts/common/constants.js:286 +#: ../root/static/scripts/common/constants.js:288 msgid "Advanced" msgstr "Προχωρημένο" #: ../lib/MusicBrainz/Server/Form/Role/UserProfile.pm:73 -#: ../root/static/scripts/common/constants.js:289 +#: ../root/static/scripts/common/constants.js:291 msgid "Native" msgstr "Εγγενές" @@ -7505,6 +7407,11 @@ msgstr "2 βδομάδες" msgid "A month" msgstr "Ένας μήνας" +#: ../lib/MusicBrainz/Server/Form/Utils.pm:48 +#: ../root/static/scripts/common/i18n/localizeLanguageName.js:19 +msgid "[No lyrics]" +msgstr "" + #: ../lib/MusicBrainz/Server/Form/Utils.pm:84 msgctxt "script optgroup" msgid "Frequently used" @@ -7844,7 +7751,7 @@ msgstr "" #: ../root/components/Aliases/AliasTable.js:31 #: ../root/components/Aliases/ArtistCreditList.js:54 #: ../root/static/scripts/common/components/FingerprintTable.js:53 -#: ../root/utility/tableColumns.js:78 +#: ../root/utility/tableColumns.js:80 msgid "Actions" msgstr "Ενέργειες" @@ -7977,7 +7884,7 @@ msgstr "" #: ../root/edit/details/AddRelationshipType.js:191 #: ../root/edit/details/RemoveRelationshipType.js:136 #: ../root/relationship/linktype/RelationshipTypeIndex.js:165 -#: ../root/utility/tableColumns.js:626 +#: ../root/utility/tableColumns.js:628 msgid "Attributes" msgstr "Γνωρίσματα" @@ -7998,12 +7905,12 @@ msgstr "" #: ../root/admin/attributes/Language.js:33 #: ../root/admin/attributes/Language.js:36 -#: ../root/edit/details/AddRelease.js:108 ../root/edit/details/AddWork.js:75 +#: ../root/edit/details/AddRelease.js:108 ../root/edit/details/AddWork.js:77 #: ../root/edit/details/EditRelease.js:131 #: ../root/edit/details/historic/AddRelease.js:104 ../root/iswc/Index.js:59 #: ../root/report/IswcsWithManyWorks.js:53 #: ../root/search/components/ReleaseResults.js:107 -#: ../root/utility/tableColumns.js:524 +#: ../root/utility/tableColumns.js:526 msgid "Language" msgstr "Γλώσσα" @@ -8920,6 +8827,19 @@ msgstr "" msgid "The provided relationship type ID is not valid." msgstr "" +#: ../root/components/ReleaseLanguageScript.js:24 +#: ../root/components/ReleaseLanguageScript.js:30 +#: ../root/components/list/ReleaseList.js:100 +#: ../root/edit/details/MergeReleases.js:88 ../root/release/CoverArt.js:92 +#: ../root/release_group/ReleaseGroupIndex.js:90 +#: ../root/search/components/ReleaseResults.js:55 +#: ../root/static/scripts/common/components/ReleaseEvents.js:55 +#: ../root/static/scripts/common/components/ReleaseEvents.js:72 +#: ../root/static/scripts/release-editor/duplicates.js:145 +msgctxt "missing data" +msgid "-" +msgstr "" + #: ../root/components/StaticRelationshipsDisplay.js:25 msgid "{start_track}–{end_track}" msgstr "" @@ -9102,6 +9022,14 @@ msgstr "" msgid "Unspecified type" msgstr "" +#: ../root/components/list/ReleaseList.js:90 +#: ../root/edit/details/MergeReleases.js:83 +#: ../root/release_group/ReleaseGroupIndex.js:89 +#: ../root/search/components/ReleaseResults.js:50 +#: ../root/static/scripts/release-editor/duplicates.js:143 +msgid "[missing media]" +msgstr "" + #: ../root/components/list/ReleaseList.js:153 #: ../root/search/components/ReleaseResults.js:109 msgid "Status" @@ -9111,8 +9039,8 @@ msgstr "" #: ../root/report/IswcsWithManyWorks.js:50 #: ../root/report/components/WorkList.js:51 #: ../root/search/components/WorkResults.js:51 -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:894 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:454 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:895 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:455 msgid "Writers" msgstr "Συγγραφείς" @@ -9230,22 +9158,22 @@ msgid "" msgstr "Η {edit} έχει τουλάχιστον μια αρνητική ψήφο, πρέπει να αφήσετε μία σημείωση επεξεργασίας πριν μπορέσετε να το εγκρίνετε." #: ../root/edit/components/EditHeader.js:46 -#: ../root/edit/components/EditorTypeInfo.js:28 +#: ../root/edit/components/EditorTypeInfo.js:29 msgid "This user is new to MusicBrainz." msgstr "Αυτός ο χρήστης είναι νέος στο MusicBrainz." #: ../root/edit/components/EditHeader.js:48 -#: ../root/edit/components/EditorTypeInfo.js:30 +#: ../root/edit/components/EditorTypeInfo.js:31 msgid "beginner" msgstr "" #: ../root/edit/components/EditHeader.js:55 -#: ../root/edit/components/EditorTypeInfo.js:38 +#: ../root/edit/components/EditorTypeInfo.js:39 msgid "This user is automated." msgstr "Αυτός ο χρήστης έχει αυτοματοποιηθεί." #: ../root/edit/components/EditHeader.js:56 -#: ../root/edit/components/EditorTypeInfo.js:39 +#: ../root/edit/components/EditorTypeInfo.js:40 msgid "bot" msgstr "bot" @@ -9551,7 +9479,7 @@ msgstr "" #: ../root/edit/details/AddSeries.js:65 ../root/edit/details/EditSeries.js:79 #: ../root/layout/components/sidebar/SeriesSidebar.js:52 -#: ../root/utility/tableColumns.js:819 +#: ../root/utility/tableColumns.js:821 msgid "Ordering Type" msgstr "" @@ -9637,6 +9565,14 @@ msgstr "Παλιός καλλιτέχνης" msgid "New Artist" msgstr "Νέος καλλιτέχνης" +#: ../root/edit/details/EditRelease.js:182 +#: ../root/edit/details/MergeReleases.js:364 +#: ../root/edit/details/SetTrackLengths.js:89 +#: ../root/edit/details/historic/MergeReleases.js:69 +#: ../root/user/ReportUser.js:116 +msgid "Note" +msgstr "" + #: ../root/edit/details/EditRelease.js:183 msgid "This edit also changed the track artists." msgstr "" @@ -9668,7 +9604,7 @@ msgstr "" msgid "Search for the target URL." msgstr "" -#: ../root/edit/details/EditWork.js:87 +#: ../root/edit/details/EditWork.js:89 msgid "Work type" msgstr "" @@ -9685,10 +9621,71 @@ msgstr "" msgid "Merge:" msgstr "Συγχώνευση:" +#: ../root/edit/details/MergeAreas.js:35 +#: ../root/edit/details/MergeArtists.js:37 +#: ../root/edit/details/MergeEvents.js:40 +#: ../root/edit/details/MergeInstruments.js:35 +#: ../root/edit/details/MergeLabels.js:35 +#: ../root/edit/details/MergePlaces.js:35 +#: ../root/edit/details/MergeRecordings.js:40 +#: ../root/edit/details/MergeReleaseGroups.js:35 +#: ../root/edit/details/MergeReleases.js:288 +#: ../root/edit/details/MergeReleases.js:295 +#: ../root/edit/details/MergeReleases.js:305 +#: ../root/edit/details/MergeReleases.js:323 +#: ../root/edit/details/MergeSeries.js:35 +#: ../root/edit/details/MergeWorks.js:35 +msgid "Into:" +msgstr "Σε:" + #: ../root/edit/details/MergeArtists.js:43 msgid "Rename artist and relationship credits" msgstr "" +#: ../root/edit/details/MergeReleases.js:131 +msgid "Medium {position}: {name} is now medium {new_position}: {new_name}" +msgstr "Το μέσο {position}: {name} είναι τώρα {new_position}: {new_name}" + +#: ../root/edit/details/MergeReleases.js:142 +msgid "Medium {position}: {name} is now medium {new_position}" +msgstr "Το μέσο {position}: {name} είναι τώρα {new_position}" + +#: ../root/edit/details/MergeReleases.js:151 +msgid "Medium {position} is now medium {new_position}: {new_name}" +msgstr "Το μέσο {position} είναι τώρα {new_position}: {new_name}" + +#: ../root/edit/details/MergeReleases.js:162 +msgid "Medium {position} is now medium {new_position}" +msgstr "Το μέσο {position} είναι τώρα {new_position}" + +#: ../root/edit/details/MergeReleases.js:271 +msgid "This release has no media to merge." +msgstr "" + +#: ../root/edit/details/MergeReleases.js:318 +msgid "Recording Merges" +msgstr "" + +#: ../root/edit/details/MergeReleases.js:321 +msgid "Track #" +msgstr "" + +#: ../root/edit/details/MergeReleases.js:333 +msgid "" +"This edit does not store recording merge information and is closed, so no " +"recording merge information can be shown." +msgstr "" + +#: ../root/edit/details/MergeReleases.js:350 +msgid "All recordings for these releases are already merged." +msgstr "" + +#: ../root/edit/details/MergeReleases.js:366 +msgid "" +"The data in this edit originally came from an older version of this edit, " +"and may not display correctly" +msgstr "Αυτά τα δεδομένα αρχικά ήρθαν από μία παλιότερη έκδοση αυτής της επεξεργασίας, και για αυτό μπορεί να μην εμφανίζονται σωστά" + #: ../root/edit/details/MoveDiscId.js:46 #: ../root/edit/details/historic/MoveDiscId.js:41 msgid "From:" @@ -10760,7 +10757,7 @@ msgstr "" #: ../root/relationship/RelationshipsHeader.js:19 #: ../root/relationship/linktype/RelationshipTypeIndex.js:61 #: ../root/relationship/linktype/RelationshipTypesList.js:62 -#: ../root/utility/tableColumns.js:343 +#: ../root/utility/tableColumns.js:345 msgid "Relationship Types" msgstr "Τύποι σχέσης" @@ -11176,7 +11173,7 @@ msgstr "" #: ../root/layout/components/sidebar/SidebarRating.js:25 #: ../root/static/scripts/release/components/MediumTable.js:223 -#: ../root/utility/tableColumns.js:437 +#: ../root/utility/tableColumns.js:439 msgid "Rating" msgstr "Βαθμολογία" @@ -12000,7 +11997,7 @@ msgid "" msgstr "Είστε σίγουροι ότι θέλετε να καταργήσετε το παρακάτω εξώφυλλο από το {release} από {artist};" #: ../root/release_group/ReleaseGroupHeader.js:30 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:404 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:405 msgid "Release group by {artist}" msgstr "Ομάδα κυκλοφοριών από {artist}" @@ -13290,9 +13287,9 @@ msgstr "" #: ../root/report/ReportsIndex.js:574 #: ../root/search/components/RecordingResults.js:132 -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:728 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:311 -#: ../root/utility/tableColumns.js:655 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:729 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:312 +#: ../root/utility/tableColumns.js:657 msgid "ISRCs" msgstr "ISRCs" @@ -13540,7 +13537,7 @@ msgstr "Άλλες αναζητήσεις" #: ../root/search/components/ArtistResults.js:55 #: ../root/search/components/LabelResults.js:68 #: ../root/search/components/PlaceResults.js:65 -#: ../root/utility/tableColumns.js:150 ../root/utility/tableColumns.js:155 +#: ../root/utility/tableColumns.js:152 ../root/utility/tableColumns.js:157 msgid "Begin" msgstr "Αρχή" @@ -13558,9 +13555,9 @@ msgid "Documentation Search" msgstr "Αναζήτηση τεκμηρίωσης" #: ../root/search/components/EventResults.js:71 -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:1044 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:183 -#: ../root/utility/tableColumns.js:358 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:1045 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:184 +#: ../root/utility/tableColumns.js:360 msgid "Location" msgstr "" @@ -13870,7 +13867,7 @@ msgid "Show more artist credits" msgstr "" #: ../root/static/scripts/artist/components/ArtistCreditRenamer.js:254 -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:464 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:465 #: ../root/static/scripts/common/components/Autocomplete2/constants.js:103 #: ../root/static/scripts/common/components/Collapsible.js:76 msgid "Show more..." @@ -13900,56 +13897,56 @@ msgstr "Δημιουργία συλλογής" msgid "Update collection" msgstr "Ενημέρωση συλλογής" -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:82 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:83 #: ../root/static/scripts/common/components/Autocomplete2/constants.js:96 msgid "An error occurred while searching. Click here to try again." msgstr "" -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:87 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:88 msgid "Try with direct search instead." msgstr "" -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:88 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:89 msgid "Try with indexed search instead." msgstr "" -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:120 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:121 #: ../root/static/scripts/common/components/Autocomplete2.js:648 msgid "Type to search, or paste an MBID" msgstr "" -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:202 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:203 #: ../root/static/scripts/common/components/Autocomplete2/constants.js:51 msgid "Clear recent items" msgstr "" -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:471 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:472 #: ../root/static/scripts/common/components/Autocomplete2/constants.js:110 msgid "Not found? Try again with direct search." msgstr "Δε βρέθηκε; Δοκιμάστε ξανά με απευθείας αναζήτηση." -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:472 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:473 #: ../root/static/scripts/common/components/Autocomplete2/constants.js:117 msgid "Slow? Switch back to indexed search." msgstr "" -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:715 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:303 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:716 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:304 msgid "appears on" msgstr "" -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:721 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:307 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:722 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:308 msgid "standalone recording" msgstr "" -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:815 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:399 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:816 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:400 msgid "{release_group_type} by {artist}" msgstr "" -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:1043 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:180 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:1044 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:181 msgid "Performers" msgstr "" @@ -14063,11 +14060,11 @@ msgstr "" msgid "Search for a work" msgstr "" -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:298 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:299 msgid "by {artist}" msgstr "από {artist}" -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:362 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:363 msgid "{first_list_item} … {last_list_item}" msgstr "" @@ -14408,181 +14405,191 @@ msgstr "" msgid "Dissolved in:" msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:360 +#: ../root/static/scripts/edit/URLCleanup.js:361 msgid "" "Please link to a channel, not a specific video. Videos should be linked to " "the appropriate recordings or releases instead." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:366 +#: ../root/static/scripts/edit/URLCleanup.js:367 msgid "" "Please link to a specific video. Add channel pages to the relevant artist, " "label, etc. instead." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:533 +#: ../root/static/scripts/edit/URLCleanup.js:534 msgid "" "Allmusic “{album_url_pattern}” links should be added to release groups. To " "find the appropriate release link for this release, please check the " "Releases tab from {album_url|your link}." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:753 +#: ../root/static/scripts/edit/URLCleanup.js:754 msgid "" "Only Apple Books “{artist_url_pattern}” pages can be added directly to " "artists. Please link audiobooks to the appropriate release instead." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:769 +#: ../root/static/scripts/edit/URLCleanup.js:770 msgid "" "Only Apple Books audiobooks can be added to MusicBrainz. Consider adding " "books to {bookbrainz_url|BookBrainz} instead." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:856 +#: ../root/static/scripts/edit/URLCleanup.js:857 msgid "" "Please link to the main page for the artist, not to a specific album or " "track." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:868 +#: ../root/static/scripts/edit/URLCleanup.js:869 msgid "" "Please link to the main page for the label, not to a specific album or " "track." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:1052 +#: ../root/static/scripts/edit/URLCleanup.js:1053 msgid "Please link to the main page for the artist, not a specific product." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:1054 +#: ../root/static/scripts/edit/URLCleanup.js:1055 msgid "Please link to the main page for the label, not a specific product." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:1597 +#: ../root/static/scripts/edit/URLCleanup.js:1600 msgid "" "Discogs “{master_url_pattern}” links group several releases, so this should " "be added to the release group instead." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:2086 +#: ../root/static/scripts/edit/URLCleanup.js:2090 msgid "" "Only IMSLP “{category_url_pattern}” links are allowed for artists. Please " "link work pages to the specific work in question." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:2104 +#: ../root/static/scripts/edit/URLCleanup.js:2108 msgid "" "IMSLP “{category_url_pattern}” links are only allowed for artists. Please " "link the specific work page to this work instead, if available." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:2149 +#: ../root/static/scripts/edit/URLCleanup.js:2153 msgid "" "Instagram “{explore_url_pattern}” links are not allowed. Please link to a " "profile instead, if there is one." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:2177 +#: ../root/static/scripts/edit/URLCleanup.js:2181 msgid "" "Please do not link directly to images, link to the appropriate Instagram " "profile page instead. If you want to link to a video, {url|add a standalone " "recording} for it instead." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:2202 +#: ../root/static/scripts/edit/URLCleanup.js:2206 msgid "This is an internal Instagram page and should not be added." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:2278 +#: ../root/static/scripts/edit/URLCleanup.js:2282 msgid "" "Only iTunes “{artist_url_pattern}” pages can be added directly to artists. " "Please link albums, videos, etc. to the appropriate release or recording " "instead." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:2890 +#: ../root/static/scripts/edit/URLCleanup.js:2895 msgid "" "Musixmatch “{album_url_pattern}” pages are a bad match for MusicBrainz " "release groups, and linking to them is currently disallowed. Please consider" " adding Musixmatch links to the relevant artists and works instead." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:2993 +#: ../root/static/scripts/edit/URLCleanup.js:2998 msgid "" "This is a redirect link. Please follow {redirect_url|your link} and add the " "link it redirects to instead." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:3504 +#: ../root/static/scripts/edit/URLCleanup.js:3464 +msgid "Only RYM music videos can be linked to recordings." +msgstr "" + +#: ../root/static/scripts/edit/URLCleanup.js:3516 msgid "" "This is a link to the old Resident Advisor domain. Please follow " "{ra_url|your link}, make sure the link it redirects to is still the correct " "one and, if so, add that link instead." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4092 +#: ../root/static/scripts/edit/URLCleanup.js:4143 msgid "This is not a profile, but a Twitter documentation page." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4106 +#: ../root/static/scripts/edit/URLCleanup.js:4157 msgid "Please link to Twitter profiles, not tweets." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4124 +#: ../root/static/scripts/edit/URLCleanup.js:4175 msgid "This site does not allow direct links to their images." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4331 +#: ../root/static/scripts/edit/URLCleanup.js:4372 +msgid "" +"Please link to the “{allowed_url_pattern}” page rather than this " +"“{current_url_pattern}” link." +msgstr "" + +#: ../root/static/scripts/edit/URLCleanup.js:4428 msgid "" "There is an unencoded “?” or “#” character in this URL. Please check whether" " it is useless and should be removed, or whether it is an error and the URL " "is misencoded." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4351 +#: ../root/static/scripts/edit/URLCleanup.js:4448 msgid "" "Please do not link directly to WhoSampled “{unwanted_url_pattern}” pages. " "Link to the appropriate WhoSampled artist, track or album page instead." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4372 +#: ../root/static/scripts/edit/URLCleanup.js:4469 msgid "Please link WhoSampled “{album_url_pattern}” pages to release groups." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4390 +#: ../root/static/scripts/edit/URLCleanup.js:4487 msgid "Please link WhoSampled artist pages to artists." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4402 +#: ../root/static/scripts/edit/URLCleanup.js:4499 msgid "Please link WhoSampled track pages to recordings." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4469 +#: ../root/static/scripts/edit/URLCleanup.js:4566 msgid "" "Links to specific sections of Wikipedia articles are not allowed. Please " "remove “{fragment}” if still appropriate. See the {url|guidelines}." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4570 +#: ../root/static/scripts/edit/URLCleanup.js:4669 msgid "Only video and playlist links are allowed on releases." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4606 +#: ../root/static/scripts/edit/URLCleanup.js:4705 msgid "" "Wikipedia normally has no entries for specific releases, so adding Wikipedia" " links to a release is currently blocked. Please add this Wikipedia link to " "the release group instead, if appropriate." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4618 +#: ../root/static/scripts/edit/URLCleanup.js:4717 msgid "" "Wikidata normally has no entries for specific releases, so adding Wikidata " "links to a release is currently blocked. Please add this Wikidata link to " "the release group instead, if appropriate." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4630 +#: ../root/static/scripts/edit/URLCleanup.js:4729 msgid "" "This is a Bandcamp profile, not a page for a specific release. Even if it " "shows this release right now, that can change when the artist releases " @@ -14591,7 +14598,7 @@ msgid "" "add this profile link to the appropriate artist or label." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4658 +#: ../root/static/scripts/edit/URLCleanup.js:4757 msgid "" "This is a Bandcamp profile, not a page for a specific recording. Even if it " "shows a single recording right now, that can change when the artist releases" @@ -14600,12 +14607,12 @@ msgid "" "the appropriate artist or label." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4821 +#: ../root/static/scripts/edit/URLCleanup.js:4920 msgid "Some relationship types are missing for this URL." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4838 -#: ../root/static/scripts/edit/externalLinks.js:743 +#: ../root/static/scripts/edit/URLCleanup.js:4937 +#: ../root/static/scripts/edit/externalLinks.js:767 msgid "This relationship type combination is invalid." msgstr "" @@ -14768,49 +14775,93 @@ msgstr "" msgid "This relationship already exists." msgstr "" -#: ../root/static/scripts/edit/externalLinks.js:609 +#: ../root/static/scripts/edit/externalLinks.js:607 #: ../root/static/scripts/relationship-editor/common/dialog.js:565 msgid "" "This URL is not allowed for the selected link type, or is incorrectly " "formatted." msgstr "" -#: ../root/static/scripts/edit/externalLinks.js:615 +#: ../root/static/scripts/edit/externalLinks.js:612 msgid "This URL is not allowed for the selected link type." msgstr "" -#: ../root/static/scripts/edit/externalLinks.js:674 +#: ../root/static/scripts/edit/externalLinks.js:618 +msgid "This URL is not allowed for areas." +msgstr "" + +#: ../root/static/scripts/edit/externalLinks.js:620 +msgid "This URL is not allowed for artists." +msgstr "" + +#: ../root/static/scripts/edit/externalLinks.js:622 +msgid "This URL is not allowed for events." +msgstr "" + +#: ../root/static/scripts/edit/externalLinks.js:624 +msgid "This URL is not allowed for instruments." +msgstr "" + +#: ../root/static/scripts/edit/externalLinks.js:626 +msgid "This URL is not allowed for labels." +msgstr "" + +#: ../root/static/scripts/edit/externalLinks.js:628 +msgid "This URL is not allowed for places." +msgstr "" + +#: ../root/static/scripts/edit/externalLinks.js:630 +msgid "This URL is not allowed for recordings." +msgstr "" + +#: ../root/static/scripts/edit/externalLinks.js:632 +msgid "This URL is not allowed for releases." +msgstr "" + +#: ../root/static/scripts/edit/externalLinks.js:634 +msgid "This URL is not allowed for release groups." +msgstr "" + +#: ../root/static/scripts/edit/externalLinks.js:637 +msgid "This URL is not allowed for series." +msgstr "" + +#: ../root/static/scripts/edit/externalLinks.js:639 +msgid "This URL is not allowed for works." +msgstr "" + +#: ../root/static/scripts/edit/externalLinks.js:698 msgid "" "Note: This link already exists at position #{position}. To merge, press " "enter or select a type." msgstr "" -#: ../root/static/scripts/edit/externalLinks.js:861 +#: ../root/static/scripts/edit/externalLinks.js:885 #: ../root/static/scripts/relationship-editor/common/dialog.js:418 msgid "{description} ({url|more documentation})" msgstr "" -#: ../root/static/scripts/edit/externalLinks.js:959 +#: ../root/static/scripts/edit/externalLinks.js:930 +msgid "Remove Relationship" +msgstr "Κατάργηση σχέσης" + +#: ../root/static/scripts/edit/externalLinks.js:996 msgid "video" msgstr "" -#: ../root/static/scripts/edit/externalLinks.js:990 -msgid "Remove Relationship" -msgstr "Κατάργηση σχέσης" +#: ../root/static/scripts/edit/externalLinks.js:1091 +msgid "Remove Link" +msgstr "" -#: ../root/static/scripts/edit/externalLinks.js:1076 +#: ../root/static/scripts/edit/externalLinks.js:1120 msgid "Add link" msgstr "" -#: ../root/static/scripts/edit/externalLinks.js:1079 +#: ../root/static/scripts/edit/externalLinks.js:1123 msgid "Add another link" msgstr "" -#: ../root/static/scripts/edit/externalLinks.js:1131 -msgid "Remove Link" -msgstr "" - -#: ../root/static/scripts/edit/externalLinks.js:1180 +#: ../root/static/scripts/edit/externalLinks.js:1205 msgid "Add another relationship" msgstr "" @@ -16022,11 +16073,11 @@ msgstr "Αυτή η επεξεργασία απέτυχε γιατί επηρέ msgid "This edit was cancelled." msgstr "Η επεξεργασία ακυρώθηκε." -#: ../root/utility/tableColumns.js:741 +#: ../root/utility/tableColumns.js:743 msgid "AcoustIDs" msgstr "" -#: ../root/utility/tableColumns.js:827 +#: ../root/utility/tableColumns.js:829 msgid "Subscribed" msgstr "" diff --git a/po/mb_server.es.po b/po/mb_server.es.po index 5d8c2637ba6..897f3474899 100644 --- a/po/mb_server.es.po +++ b/po/mb_server.es.po @@ -47,9 +47,9 @@ msgid "" msgstr "" "Project-Id-Version: MusicBrainz\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-09-13 18:38-0500\n" -"PO-Revision-Date: 2021-09-13 23:42+0000\n" -"Last-Translator: Michael Wiencek <email address hidden>\n" +"POT-Creation-Date: 2021-09-28 21:37+0300\n" +"PO-Revision-Date: 2021-09-28 18:40+0000\n" +"Last-Translator: Nicolás Tamargo <email address hidden>\n" "Language-Team: Spanish (http://www.transifex.com/musicbrainz/musicbrainz/language/es/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -100,7 +100,7 @@ msgstr "\"YY\" son los últimos dos dígitos del año de registro." #: ../root/edit/details/historic/AddRelease.js:118 #: ../root/recording/RecordingIndex.js:50 #: ../root/static/scripts/release/components/MediumTable.js:218 -#: ../root/utility/tableColumns.js:537 +#: ../root/utility/tableColumns.js:539 msgid "#" msgstr "#" @@ -156,26 +156,13 @@ msgstr "(era el medio {position} en la publicación {release})" msgid "(was medium {position}: {name} on release {release})" msgstr "(era el medio {position}: {name} en la publicación {release})" -#: ../root/edit/details/merge_releases.tt:6 -#: ../root/components/ReleaseLanguageScript.js:24 -#: ../root/components/ReleaseLanguageScript.js:30 -#: ../root/components/list/ReleaseList.js:100 ../root/release/CoverArt.js:92 -#: ../root/release_group/ReleaseGroupIndex.js:90 -#: ../root/search/components/ReleaseResults.js:55 -#: ../root/static/scripts/common/components/ReleaseEvents.js:55 -#: ../root/static/scripts/common/components/ReleaseEvents.js:72 -#: ../root/static/scripts/release-editor/duplicates.js:145 -msgctxt "missing data" -msgid "-" -msgstr "-" - #: ../root/cdtoc/attach_artist_releases.tt:16 #: ../root/cdtoc/attach_filter_release.tt:30 ../root/cdtoc/list.tt:10 -#: ../root/edit/details/merge_releases.tt:23 ../root/release/merge.tt:16 +#: ../root/release/merge.tt:16 ../root/edit/details/MergeReleases.js:256 #: ../root/recording/RecordingIndex.js:57 #: ../root/release_group/ReleaseGroupIndex.js:159 #: ../root/search/components/ReleaseResults.js:103 -#: ../root/utility/tableColumns.js:480 ../root/utility/tableColumns.js:488 +#: ../root/utility/tableColumns.js:482 ../root/utility/tableColumns.js:490 msgctxt "and" msgid "/" msgstr "/" @@ -452,10 +439,6 @@ msgstr "Flags de administración" msgid "All of these relationships." msgstr "Todas estas relaciones." -#: ../root/edit/details/merge_releases.tt:141 -msgid "All recordings for these releases are already merged." -msgstr "Todas las grabaciones de estos lanzamientos ya están fusionadas." - #: ../root/release/edit/recordings.tt:3 msgid "" "All tracks require an associated recording. Click “Edit” to select a " @@ -520,11 +503,6 @@ msgstr "Anotación:" msgid "Annotations support a limited set of wiki formatting options:" msgstr "Las anotaciones permiten usar ciertas opciones de formato wiki:" -#: ../root/edit/details/merge_releases.tt:149 -#: ../lib/MusicBrainz/Server/Form/Merge/Release.pm:50 -msgid "Append mediums to target release" -msgstr "Añadir medios a la publicación de destino" - #: ../root/edit/search_macros.tt:417 msgid "Applied Edit Count of Editor" msgstr "Edición aplicada de cuenta del editor" @@ -633,10 +611,9 @@ msgstr "Áreas" #: ../root/cdtoc/attach_confirm.tt:13 #: ../root/cdtoc/attach_filter_release.tt:29 ../root/cdtoc/list.tt:8 #: ../root/cdtoc/lookup.tt:41 ../root/components/common-macros.tt:569 -#: ../root/edit/details/merge_releases.tt:20 ../root/edit/search_macros.tt:417 -#: ../root/release/edit/tracklist.tt:163 ../root/release/edit/tracklist.tt:412 -#: ../root/release/merge.tt:13 ../root/watch/list.tt:16 -#: ../lib/MusicBrainz/Server/Edit/Artist.pm:7 +#: ../root/edit/search_macros.tt:417 ../root/release/edit/tracklist.tt:163 +#: ../root/release/edit/tracklist.tt:412 ../root/release/merge.tt:13 +#: ../root/watch/list.tt:16 ../lib/MusicBrainz/Server/Edit/Artist.pm:7 #: ../lib/MusicBrainz/Server/Form/Search/Search.pm:35 #: ../root/artist/ArtistHeader.js:34 #: ../root/components/RelationshipsTable.js:320 @@ -654,6 +631,7 @@ msgstr "Áreas" #: ../root/edit/details/EditRecording.js:86 #: ../root/edit/details/EditRelease.js:83 #: ../root/edit/details/EditReleaseGroup.js:101 +#: ../root/edit/details/MergeReleases.js:253 #: ../root/edit/details/historic/AddRelease.js:68 #: ../root/edit/details/historic/AddRelease.js:120 #: ../root/edit/details/historic/AddTrackKV.js:55 @@ -727,10 +705,10 @@ msgstr "Artista:" #: ../root/report/components/EventList.js:66 #: ../root/search/components/EventResults.js:70 #: ../root/search/components/WorkResults.js:52 -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:895 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:455 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:896 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:456 #: ../root/static/scripts/common/utility/formatEntityTypeName.js:15 -#: ../root/tag/TagLayout.js:25 ../root/utility/tableColumns.js:854 +#: ../root/tag/TagLayout.js:25 ../root/utility/tableColumns.js:856 msgid "Artists" msgstr "Artistas" @@ -787,14 +765,14 @@ msgstr "Editor de mensajes de banner" #: ../root/cdtoc/attach_artist_releases.tt:19 #: ../root/cdtoc/attach_filter_release.tt:33 ../root/cdtoc/list.tt:13 -#: ../root/cdtoc/lookup.tt:46 ../root/edit/details/merge_releases.tt:26 -#: ../root/release/edit/duplicates.tt:17 ../root/release/merge.tt:19 -#: ../root/components/list/ReleaseList.js:128 +#: ../root/cdtoc/lookup.tt:46 ../root/release/edit/duplicates.tt:17 +#: ../root/release/merge.tt:19 ../root/components/list/ReleaseList.js:128 #: ../root/edit/details/AddRelease.js:129 #: ../root/edit/details/EditBarcodes.js:58 #: ../root/edit/details/EditBarcodes.js:64 #: ../root/edit/details/EditRelease.js:167 #: ../root/edit/details/EditReleaseLabel.js:138 +#: ../root/edit/details/MergeReleases.js:259 #: ../root/edit/details/historic/AddRelease.js:155 #: ../root/edit/details/historic/EditReleaseEvents.js:138 #: ../root/otherlookup/OtherLookupForm.js:64 @@ -1021,12 +999,12 @@ msgstr "Cat. No:" #: ../root/cdtoc/attach_artist_releases.tt:18 #: ../root/cdtoc/attach_filter_release.tt:32 ../root/cdtoc/list.tt:12 -#: ../root/cdtoc/lookup.tt:45 ../root/edit/details/merge_releases.tt:25 -#: ../root/release/edit/duplicates.tt:16 ../root/release/merge.tt:18 +#: ../root/cdtoc/lookup.tt:45 ../root/release/edit/duplicates.tt:16 +#: ../root/release/merge.tt:18 ../root/edit/details/MergeReleases.js:258 #: ../root/recording/RecordingIndex.js:59 #: ../root/release_group/ReleaseGroupIndex.js:161 #: ../root/search/components/ReleaseResults.js:105 -#: ../root/utility/tableColumns.js:456 ../root/utility/tableColumns.js:461 +#: ../root/utility/tableColumns.js:458 ../root/utility/tableColumns.js:463 msgid "Catalog#" msgstr "Nº de catálogo" @@ -1187,16 +1165,16 @@ msgstr "" #: ../root/cdtoc/attach_artist_releases.tt:16 #: ../root/cdtoc/attach_filter_release.tt:30 ../root/cdtoc/list.tt:10 -#: ../root/cdtoc/lookup.tt:43 ../root/edit/details/merge_releases.tt:23 -#: ../root/release/edit/duplicates.tt:14 ../root/release/merge.tt:16 -#: ../root/edit/details/EditReleaseLabel.js:127 +#: ../root/cdtoc/lookup.tt:43 ../root/release/edit/duplicates.tt:14 +#: ../root/release/merge.tt:16 ../root/edit/details/EditReleaseLabel.js:127 +#: ../root/edit/details/MergeReleases.js:256 #: ../root/edit/details/historic/AddRelease.js:152 #: ../root/edit/details/historic/EditReleaseEvents.js:135 #: ../root/recording/RecordingIndex.js:57 #: ../root/release_group/ReleaseGroupIndex.js:159 #: ../root/search/components/ReleaseResults.js:103 #: ../root/static/scripts/common/components/FilterForm.js:110 -#: ../root/utility/tableColumns.js:476 ../root/utility/tableColumns.js:488 +#: ../root/utility/tableColumns.js:478 ../root/utility/tableColumns.js:490 msgid "Country" msgstr "País" @@ -1271,13 +1249,14 @@ msgstr "Data:" #: ../root/annotation/history.tt:12 ../root/cdtoc/attach_artist_releases.tt:16 #: ../root/cdtoc/attach_filter_release.tt:30 ../root/cdtoc/list.tt:10 -#: ../root/cdtoc/lookup.tt:42 ../root/edit/details/merge_releases.tt:23 -#: ../root/release/edit/duplicates.tt:13 ../root/release/merge.tt:16 +#: ../root/cdtoc/lookup.tt:42 ../root/release/edit/duplicates.tt:13 +#: ../root/release/merge.tt:16 #: ../root/admin/statistics-events/DeleteStatisticsEvent.js:31 #: ../root/admin/statistics-events/StatisticsEventEditForm.js:35 #: ../root/admin/statistics-events/StatisticsEventIndex.js:30 #: ../root/components/RelationshipsTable.js:316 #: ../root/edit/details/EditReleaseLabel.js:119 +#: ../root/edit/details/MergeReleases.js:256 #: ../root/edit/details/historic/AddRelease.js:151 #: ../root/edit/details/historic/EditReleaseEvents.js:134 #: ../root/elections/ElectionVotes.js:26 @@ -1286,8 +1265,8 @@ msgstr "Data:" #: ../root/search/components/EventResults.js:67 #: ../root/search/components/ReleaseResults.js:103 #: ../root/static/scripts/common/components/FilterForm.js:129 -#: ../root/utility/tableColumns.js:255 ../root/utility/tableColumns.js:260 -#: ../root/utility/tableColumns.js:482 ../root/utility/tableColumns.js:488 +#: ../root/utility/tableColumns.js:257 ../root/utility/tableColumns.js:262 +#: ../root/utility/tableColumns.js:484 ../root/utility/tableColumns.js:490 msgid "Date" msgstr "Fecha" @@ -1355,7 +1334,7 @@ msgstr "Deprecado:" #: ../root/relationship/linktype/RelationshipTypeIndex.js:96 #: ../root/search/components/InstrumentResults.js:52 #: ../root/static/scripts/collection/components/CollectionEditForm.js:89 -#: ../root/utility/tableColumns.js:636 +#: ../root/utility/tableColumns.js:638 msgid "Description" msgstr "Descripción" @@ -1391,21 +1370,21 @@ msgstr "Muerto:" #: ../root/edit/details/AddReleaseGroup.js:71 #: ../root/edit/details/AddSeries.js:51 #: ../root/edit/details/AddStandaloneRecording.js:67 -#: ../root/edit/details/AddWork.js:57 ../root/edit/details/EditArea.js:84 +#: ../root/edit/details/AddWork.js:59 ../root/edit/details/EditArea.js:84 #: ../root/edit/details/EditArtist.js:100 ../root/edit/details/EditEvent.js:64 #: ../root/edit/details/EditInstrument.js:64 #: ../root/edit/details/EditLabel.js:84 ../root/edit/details/EditPlace.js:70 #: ../root/edit/details/EditRecording.js:65 #: ../root/edit/details/EditRelease.js:111 #: ../root/edit/details/EditReleaseGroup.js:64 -#: ../root/edit/details/EditSeries.js:61 ../root/edit/details/EditWork.js:73 +#: ../root/edit/details/EditSeries.js:61 ../root/edit/details/EditWork.js:75 #: ../root/genre/GenreEditForm.js:38 msgid "Disambiguation" msgstr "Desambiguación" #: ../root/release/discids.tt:8 ../root/edit/details/SetTrackLengths.js:66 #: ../root/otherlookup/OtherLookupForm.js:114 -#: ../root/utility/tableColumns.js:179 ../root/utility/tableColumns.js:184 +#: ../root/utility/tableColumns.js:181 ../root/utility/tableColumns.js:186 msgid "Disc ID" msgstr "ID de disco" @@ -1645,7 +1624,7 @@ msgstr "Permitir numeración de vinilo" #: ../root/search/components/ArtistResults.js:57 #: ../root/search/components/LabelResults.js:69 #: ../root/search/components/PlaceResults.js:66 -#: ../root/utility/tableColumns.js:273 ../root/utility/tableColumns.js:278 +#: ../root/utility/tableColumns.js:275 ../root/utility/tableColumns.js:280 msgid "End" msgstr "Fin" @@ -1841,11 +1820,11 @@ msgstr "" msgid "For more information, check the {doc_doc|documentation}." msgstr "" -#: ../root/cdtoc/list.tt:9 ../root/edit/details/merge_releases.tt:21 -#: ../root/release/edit/duplicates.tt:11 ../root/release/merge.tt:14 -#: ../root/components/list/ReleaseList.js:93 +#: ../root/cdtoc/list.tt:9 ../root/release/edit/duplicates.tt:11 +#: ../root/release/merge.tt:14 ../root/components/list/ReleaseList.js:93 #: ../root/edit/details/EditMedium.js:530 #: ../root/edit/details/EditReleaseLabel.js:145 +#: ../root/edit/details/MergeReleases.js:254 #: ../root/edit/details/historic/AddRelease.js:156 #: ../root/edit/details/historic/EditReleaseEvents.js:139 #: ../root/release_group/ReleaseGroupIndex.js:157 @@ -2018,7 +1997,7 @@ msgstr "" #: ../root/components/common-macros.tt:602 #: ../lib/MusicBrainz/Server/Controller/Edit.pm:240 -#: ../root/static/scripts/common/constants.js:279 +#: ../root/static/scripts/common/constants.js:281 msgid "High" msgstr "Alta" @@ -2157,12 +2136,12 @@ msgstr "ISRC" msgid "ISRCs:" msgstr "ISRCs:" -#: ../root/work/edit_form.tt:16 ../root/edit/details/AddWork.js:63 -#: ../root/edit/details/EditWork.js:80 ../root/edit/details/RemoveIswc.js:36 +#: ../root/work/edit_form.tt:16 ../root/edit/details/AddWork.js:65 +#: ../root/edit/details/EditWork.js:82 ../root/edit/details/RemoveIswc.js:36 #: ../root/otherlookup/OtherLookupForm.js:79 #: ../root/report/IswcsWithManyWorks.js:48 #: ../root/search/components/WorkResults.js:53 -#: ../root/utility/tableColumns.js:762 +#: ../root/utility/tableColumns.js:764 msgid "ISWC" msgstr "ISWC" @@ -2315,23 +2294,6 @@ msgstr "instrumento" msgid "Instruments" msgstr "Instrumentos" -#: ../root/edit/details/merge_releases.tt:78 -#: ../root/edit/details/merge_releases.tt:83 -#: ../root/edit/details/merge_releases.tt:92 -#: ../root/edit/details/merge_releases.tt:109 -#: ../root/edit/details/MergeAreas.js:35 -#: ../root/edit/details/MergeArtists.js:37 -#: ../root/edit/details/MergeEvents.js:40 -#: ../root/edit/details/MergeInstruments.js:35 -#: ../root/edit/details/MergeLabels.js:35 -#: ../root/edit/details/MergePlaces.js:35 -#: ../root/edit/details/MergeRecordings.js:40 -#: ../root/edit/details/MergeReleaseGroups.js:35 -#: ../root/edit/details/MergeSeries.js:35 -#: ../root/edit/details/MergeWorks.js:35 -msgid "Into:" -msgstr "En:" - #: ../root/cdstub/error.tt:5 msgid "Invalid Disc ID" msgstr "ID de disco no válida:" @@ -2372,13 +2334,13 @@ msgstr "" #: ../root/cdtoc/attach_artist_releases.tt:17 #: ../root/cdtoc/attach_filter_release.tt:31 ../root/cdtoc/list.tt:11 #: ../root/cdtoc/lookup.tt:44 ../root/components/common-macros.tt:569 -#: ../root/edit/details/merge_releases.tt:24 ../root/edit/search_macros.tt:417 -#: ../root/release/edit/duplicates.tt:15 ../root/release/merge.tt:17 -#: ../lib/MusicBrainz/Server/Edit/Label.pm:7 +#: ../root/edit/search_macros.tt:417 ../root/release/edit/duplicates.tt:15 +#: ../root/release/merge.tt:17 ../lib/MusicBrainz/Server/Edit/Label.pm:7 #: ../lib/MusicBrainz/Server/Form/Search/Search.pm:40 #: ../root/components/list/LabelList.js:54 ../root/edit/details/AddLabel.js:51 #: ../root/edit/details/EditLabel.js:62 #: ../root/edit/details/EditReleaseLabel.js:69 +#: ../root/edit/details/MergeReleases.js:257 #: ../root/edit/details/historic/AddRelease.js:153 #: ../root/edit/details/historic/EditReleaseEvents.js:136 #: ../root/label/LabelHeader.js:27 ../root/layout/components/Search.js:39 @@ -2391,8 +2353,8 @@ msgstr "" #: ../root/search/components/SearchForm.js:39 #: ../root/static/scripts/common/constants.js:23 #: ../root/static/scripts/common/utility/formatEntityTypeName.js:56 -#: ../root/user/UserProfile.js:46 ../root/utility/tableColumns.js:503 -#: ../root/utility/tableColumns.js:508 +#: ../root/user/UserProfile.js:46 ../root/utility/tableColumns.js:505 +#: ../root/utility/tableColumns.js:510 msgid "Label" msgstr "Discográfica" @@ -2495,7 +2457,7 @@ msgstr "" #: ../root/static/scripts/common/components/FingerprintTable.js:87 #: ../root/static/scripts/edit/components/AddEntityDialog.js:101 #: ../root/static/scripts/release/components/MediumTable.js:118 -#: ../root/utility/tableColumns.js:674 +#: ../root/utility/tableColumns.js:676 msgid "Loading..." msgstr "Cargando..." @@ -2535,15 +2497,15 @@ msgstr "Número de búsquedas" #: ../root/components/common-macros.tt:602 #: ../lib/MusicBrainz/Server/Controller/Edit.pm:240 -#: ../root/static/scripts/common/constants.js:276 +#: ../root/static/scripts/common/constants.js:278 msgid "Low" msgstr "Baja" #: ../root/release/edit_relationships.tt:172 -#: ../root/edit/details/AddWork.js:81 ../root/edit/details/EditWork.js:98 +#: ../root/edit/details/AddWork.js:83 ../root/edit/details/EditWork.js:100 #: ../root/layout/components/sidebar/WorkSidebar.js:67 #: ../root/search/components/WorkResults.js:55 -#: ../root/static/scripts/work.js:312 ../root/utility/tableColumns.js:873 +#: ../root/static/scripts/work.js:312 ../root/utility/tableColumns.js:875 msgid "Lyrics Languages" msgstr "Idiomas de la letra" @@ -2598,22 +2560,6 @@ msgstr "" msgid "Medium track lengths" msgstr "" -#: ../root/edit/details/merge_releases.tt:44 -msgid "Medium {position} is now medium {new_position}" -msgstr "El medio {position} es ahora el medio {new_position}" - -#: ../root/edit/details/merge_releases.tt:44 -msgid "Medium {position} is now medium {new_position}: {new_name}" -msgstr "El medio {position} es ahora el medio {new_position}: {new_name}" - -#: ../root/edit/details/merge_releases.tt:44 -msgid "Medium {position}: {name} is now medium {new_position}" -msgstr "El medio {position}: {name} es ahora el medio {new_position}" - -#: ../root/edit/details/merge_releases.tt:44 -msgid "Medium {position}: {name} is now medium {new_position}: {new_name}" -msgstr "El medio {position}: {name} es ahora el medio {new_position}: {new_name}" - #: ../root/layout/merge-helper.tt:30 #: ../root/layout/components/MergeHelper.js:71 #: ../root/layout/components/sidebar/MergeLink.js:31 @@ -2629,12 +2575,7 @@ msgstr "Proceso de fusión" msgid "Merge Releases" msgstr "Fusionar publicaciones" -#: ../root/edit/details/merge_releases.tt:149 -#: ../lib/MusicBrainz/Server/Form/Merge/Release.pm:51 -msgid "Merge mediums and recordings" -msgstr "Fusionar medios y grabaciones" - -#: ../root/edit/details/merge_releases.tt:147 ../root/release/merge.tt:55 +#: ../root/release/merge.tt:55 ../root/edit/details/MergeReleases.js:358 msgid "Merge strategy:" msgstr "Estrategia de fusión:" @@ -2724,7 +2665,7 @@ msgstr "Mi voto:" #: ../root/edit/details/AddReleaseGroup.js:56 #: ../root/edit/details/AddSeries.js:46 #: ../root/edit/details/AddStandaloneRecording.js:56 -#: ../root/edit/details/AddWork.js:52 ../root/edit/details/EditArea.js:70 +#: ../root/edit/details/AddWork.js:54 ../root/edit/details/EditArea.js:70 #: ../root/edit/details/EditArtist.js:86 ../root/edit/details/EditEvent.js:57 #: ../root/edit/details/EditInstrument.js:57 #: ../root/edit/details/EditLabel.js:68 ../root/edit/details/EditMedium.js:522 @@ -2734,7 +2675,7 @@ msgstr "Mi voto:" #: ../root/edit/details/EditRelationshipAttribute.js:76 #: ../root/edit/details/EditRelease.js:75 #: ../root/edit/details/EditReleaseGroup.js:57 -#: ../root/edit/details/EditSeries.js:54 ../root/edit/details/EditWork.js:66 +#: ../root/edit/details/EditSeries.js:54 ../root/edit/details/EditWork.js:68 #: ../root/edit/details/RemoveRelationshipAttribute.js:41 #: ../root/edit/details/RemoveRelationshipType.js:60 #: ../root/edit/details/historic/AddRelease.js:63 @@ -2857,7 +2798,7 @@ msgid "No releases have cover art marked as \"Front\", cannot set cover art." msgstr "Ningún de los lanzamientos tiene imágenes marcadas como 'Frente', no se puede establecer la Imagen." #: ../root/release/edit/tracklist.tt:140 ../root/admin/IpLookup.js:35 -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:457 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:458 #: ../root/static/scripts/common/components/Autocomplete2/constants.js:90 msgid "No results" msgstr "No hay resultados." @@ -2902,19 +2843,11 @@ msgstr "" #: ../root/components/common-macros.tt:602 #: ../lib/MusicBrainz/Server/Controller/Edit.pm:240 -#: ../root/static/scripts/common/constants.js:277 -#: ../root/static/scripts/common/constants.js:278 +#: ../root/static/scripts/common/constants.js:279 +#: ../root/static/scripts/common/constants.js:280 msgid "Normal" msgstr "Normal" -#: ../root/edit/details/merge_releases.tt:158 -#: ../root/edit/details/EditRelease.js:182 -#: ../root/edit/details/SetTrackLengths.js:89 -#: ../root/edit/details/historic/MergeReleases.js:69 -#: ../root/user/ReportUser.js:116 -msgid "Note" -msgstr "Nota" - #: ../root/release/edit/information.tt:279 msgid "" "Note! If you do not know the month or day of release, please leave them " @@ -3237,13 +3170,13 @@ msgstr "" msgid "Recent Notes Left on Your Edits" msgstr "" -#: ../root/components/common-macros.tt:569 -#: ../root/edit/details/merge_releases.tt:108 -#: ../root/edit/search_macros.tt:417 ../root/release/edit_relationships.tt:53 +#: ../root/components/common-macros.tt:569 ../root/edit/search_macros.tt:417 +#: ../root/release/edit_relationships.tt:53 #: ../lib/MusicBrainz/Server/Edit/Recording.pm:7 #: ../lib/MusicBrainz/Server/Form/Search/Search.pm:38 #: ../root/edit/details/AddStandaloneRecording.js:46 #: ../root/edit/details/EditRecording.js:51 +#: ../root/edit/details/MergeReleases.js:322 #: ../root/edit/details/RemoveIsrc.js:40 #: ../root/edit/details/historic/EditTrack.js:37 #: ../root/layout/components/Search.js:30 @@ -3261,10 +3194,6 @@ msgstr "Grabación" msgid "Recording Details" msgstr "Detalles de la grabación" -#: ../root/edit/details/merge_releases.tt:104 -msgid "Recording Merges" -msgstr "" - #: ../root/user/ratings.tt:2 ../root/user/ratings_summary.tt:3 msgid "Recording ratings" msgstr "Valoraciones de la grabación" @@ -3324,7 +3253,7 @@ msgstr "Editor de relaciones" #: ../root/edit/search_macros.tt:417 #: ../root/edit/details/AddRelationshipType.js:78 #: ../root/relationship/linktype/RelationshipTypeIndex.js:41 -#: ../root/utility/tableColumns.js:804 +#: ../root/utility/tableColumns.js:806 msgid "Relationship Type" msgstr "Tipo de relación" @@ -3351,8 +3280,7 @@ msgstr "Las relaciones marcadas en <span class=\"rel-edit\">amarillo</span> ser #: ../root/cdtoc/attach_artist_releases.tt:15 #: ../root/cdtoc/attach_filter_release.tt:28 ../root/cdtoc/lookup.tt:39 -#: ../root/components/common-macros.tt:569 -#: ../root/edit/details/merge_releases.tt:19 ../root/edit/search_macros.tt:417 +#: ../root/components/common-macros.tt:569 ../root/edit/search_macros.tt:417 #: ../root/release/edit/duplicates.tt:10 ../root/release/merge.tt:12 #: ../lib/MusicBrainz/Server/Edit/Release.pm:8 #: ../lib/MusicBrainz/Server/Form/Search/Search.pm:37 @@ -3363,6 +3291,7 @@ msgstr "Las relaciones marcadas en <span class=\"rel-edit\">amarillo</span> ser #: ../root/edit/details/EditBarcodes.js:51 #: ../root/edit/details/EditCoverArt.js:51 #: ../root/edit/details/EditReleaseLabel.js:60 +#: ../root/edit/details/MergeReleases.js:252 #: ../root/edit/details/RemoveCoverArt.js:35 #: ../root/edit/details/ReorderCoverArt.js:45 #: ../root/edit/details/ReorderMediums.js:39 @@ -3599,7 +3528,7 @@ msgstr "Eliminar atributo" #: ../root/components/common-macros.tt:878 #: ../root/components/common-macros.tt:886 #: ../root/components/RemoveFromMergeTableCell.js:39 -#: ../root/utility/tableColumns.js:781 ../root/utility/tableColumns.js:791 +#: ../root/utility/tableColumns.js:783 ../root/utility/tableColumns.js:793 msgid "Remove from merge" msgstr "" @@ -3997,7 +3926,7 @@ msgstr "Intercambiar nombres de pistas y artistas." #: ../root/search/components/RecordingResults.js:134 #: ../root/search/components/ReleaseResults.js:112 #: ../root/static/scripts/common/components/TaggerIcon.js:40 -#: ../root/utility/tableColumns.js:834 +#: ../root/utility/tableColumns.js:836 msgid "Tagger" msgstr "Etiquetador" @@ -4023,12 +3952,6 @@ msgstr "La anotación funciona como una pequeña wiki." msgid "The catalog number you have entered looks like an Amazon ASIN." msgstr "El número de catálogo introducido parece una ASIN de Amazon." -#: ../root/edit/details/merge_releases.tt:159 -msgid "" -"The data in this edit originally came from an older version of this edit, " -"and may not display correctly" -msgstr "Los datos de esta edición provienen originalmente de una versión anterior y puede que no se muestren correctamente" - #: ../root/layout.tt:90 ../root/layout/index.js:275 msgid "" "The data you have submitted does not make any changes to the data already " @@ -4212,12 +4135,6 @@ msgstr "" msgid "This disc has a hidden pregap track before track 1" msgstr "" -#: ../root/edit/details/merge_releases.tt:133 -msgid "" -"This edit does not store recording merge information and is closed, so no " -"recording merge information can be shown." -msgstr "" - #: ../root/cdtoc/set_durations.tt:31 msgid "This edit would only make subsecond changes to track lengths." msgstr "" @@ -4349,8 +4266,8 @@ msgid "This recording cannot be removed because it is still used on releases." msgstr "" #: ../root/components/common-macros.tt:302 -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:696 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:286 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:697 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:287 #: ../root/static/scripts/common/components/EntityLink.js:289 msgid "This recording is a video" msgstr "Esta grabación es un video" @@ -4382,10 +4299,6 @@ msgid "" " relationships." msgstr "" -#: ../root/edit/details/merge_releases.tt:35 -msgid "This release has no media to merge." -msgstr "" - #: ../root/release/discids.tt:58 msgid "This release has no mediums that can have disc IDs." msgstr "" @@ -4521,14 +4434,10 @@ msgid "Total tracks:" msgstr "Número de pistas:" #: ../root/cdtoc/info.tt:31 ../root/search/components/RecordingResults.js:135 -#: ../root/taglookup/Form.js:41 ../root/utility/tableColumns.js:846 +#: ../root/taglookup/Form.js:41 ../root/utility/tableColumns.js:848 msgid "Track" msgstr "Pista" -#: ../root/edit/details/merge_releases.tt:107 -msgid "Track #" -msgstr "Pista #" - #: ../root/release/edit/tracklist.tt:483 #: ../root/static/scripts/release-editor/dialogs.js:40 msgid "Track Parser" @@ -4563,11 +4472,11 @@ msgstr "Pista {n}:" msgid "Tracklist" msgstr "Lista de pistas" -#: ../root/edit/details/merge_releases.tt:22 ../root/release/discids.tt:9 -#: ../root/release/edit/duplicates.tt:12 ../root/release/merge.tt:15 -#: ../root/artist_credit/ArtistCreditIndex.js:128 +#: ../root/release/discids.tt:9 ../root/release/edit/duplicates.tt:12 +#: ../root/release/merge.tt:15 ../root/artist_credit/ArtistCreditIndex.js:128 #: ../root/artist_credit/ArtistCreditLayout.js:31 #: ../root/components/list/ReleaseList.js:103 +#: ../root/edit/details/MergeReleases.js:255 #: ../root/edit/details/historic/AddRelease.js:113 #: ../root/release_group/ReleaseGroupIndex.js:158 #: ../root/search/components/CDStubResults.js:49 @@ -4611,7 +4520,7 @@ msgstr "Twitter" #: ../root/edit/details/AddLabel.js:107 ../root/edit/details/AddPlace.js:65 #: ../root/edit/details/AddReleaseGroup.js:80 #: ../root/edit/details/AddRemoveAlias.js:101 -#: ../root/edit/details/AddSeries.js:57 ../root/edit/details/AddWork.js:69 +#: ../root/edit/details/AddSeries.js:57 ../root/edit/details/AddWork.js:71 #: ../root/edit/details/EditAlias.js:123 ../root/edit/details/EditArea.js:91 #: ../root/edit/details/EditArtist.js:107 ../root/edit/details/EditEvent.js:78 #: ../root/edit/details/EditInstrument.js:71 @@ -4642,12 +4551,12 @@ msgstr "Twitter" #: ../root/static/scripts/account/components/ApplicationForm.js:87 #: ../root/static/scripts/alias/AliasEditForm.js:329 #: ../root/static/scripts/collection/components/CollectionEditForm.js:83 -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:874 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:447 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:875 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:448 #: ../root/static/scripts/common/components/FilterForm.js:63 -#: ../root/static/scripts/edit/externalLinks.js:904 -#: ../root/static/scripts/edit/externalLinks.js:1157 -#: ../root/utility/tableColumns.js:613 ../root/utility/tableColumns.js:618 +#: ../root/static/scripts/edit/externalLinks.js:941 +#: ../root/static/scripts/edit/externalLinks.js:1181 +#: ../root/utility/tableColumns.js:615 ../root/utility/tableColumns.js:620 msgid "Type" msgstr "Tipo" @@ -4958,8 +4867,8 @@ msgstr "" #: ../root/components/common-macros.tt:569 ../root/edit/search_macros.tt:417 #: ../lib/MusicBrainz/Server/Edit/Work.pm:9 #: ../lib/MusicBrainz/Server/Form/Search/Search.pm:39 -#: ../root/components/list/WorkList.js:60 ../root/edit/details/AddWork.js:46 -#: ../root/edit/details/EditWork.js:59 ../root/edit/details/RemoveIswc.js:40 +#: ../root/components/list/WorkList.js:60 ../root/edit/details/AddWork.js:48 +#: ../root/edit/details/EditWork.js:61 ../root/edit/details/RemoveIswc.js:40 #: ../root/layout/components/Search.js:34 #: ../root/report/IswcsWithManyWorks.js:49 #: ../root/report/components/WorkList.js:46 @@ -5224,22 +5133,13 @@ msgid "" " please make sure the artists have been entered correctly." msgstr "" -#: ../root/edit/details/merge_releases.tt:5 -#: ../root/components/list/ReleaseList.js:90 -#: ../root/release_group/ReleaseGroupIndex.js:89 -#: ../root/search/components/ReleaseResults.js:50 -#: ../root/static/scripts/release-editor/duplicates.js:143 -msgid "[missing media]" -msgstr "" - #: ../root/components/common-macros.tt:259 #: ../lib/MusicBrainz/Server/Edit/Relationship/RemoveLinkType.pm:86 #: ../lib/MusicBrainz/Server/Edit/Release/Create.pm:113 -#: ../lib/MusicBrainz/Server/Edit/Work/Create.pm:87 -#: ../lib/MusicBrainz/Server/Edit/Work/Edit.pm:186 #: ../root/edit/details/EditAlias.js:94 #: ../root/edit/details/SetTrackLengths.js:73 #: ../root/static/scripts/common/components/EntityLink.js:41 +#: ../root/static/scripts/common/i18n/localizeLanguageName.js:15 msgid "[removed]" msgstr "[eliminado]" @@ -5385,6 +5285,10 @@ msgstr "" msgid "historical, {begin}-{end}" msgstr "" +#: ../root/edit/search_macros.tt:25 +msgid "in an unspecified order (possibly faster)" +msgstr "" + #: ../root/edit/details/macros.tt:28 #: ../root/utility/relationshipDateText.js:25 msgid "in {date}" @@ -5540,10 +5444,6 @@ msgid_plural "plus {n} other private collections" msgstr[0] "y {n} colección privada más" msgstr[1] "y {n} colecciones privadas más" -#: ../root/edit/search_macros.tt:25 -msgid "randomly" -msgstr "al azar" - #: ../root/edit/search_macros.tt:25 msgid "recently closed first" msgstr "" @@ -5755,7 +5655,7 @@ msgstr "« Anterior" #: ../root/components/paginator.tt:19 ../root/components/paginator.tt:31 #: ../root/components/paginator.tt:39 ../root/components/Paginator.js:94 #: ../root/components/Paginator.js:119 ../root/components/Paginator.js:133 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:125 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:126 msgid "…" msgstr "…" @@ -6155,14 +6055,6 @@ msgstr "Ya hay publicaciones con esta ID de disco en MusicBrainz" msgid "There is already a CD stub with this disc ID" msgstr "Ya hay un esbozo de CD con esta ID de disco" -#: ../lib/MusicBrainz/Server/Data/Language.pm:63 -#: ../lib/MusicBrainz/Server/Edit/Work/Create.pm:75 -#: ../lib/MusicBrainz/Server/Edit/Work/Create.pm:85 -#: ../lib/MusicBrainz/Server/Edit/Work/Edit.pm:184 -#: ../lib/MusicBrainz/Server/Form/Utils.pm:48 -msgid "[No lyrics]" -msgstr "[Sin letra]" - #: ../lib/MusicBrainz/Server/Data/LinkType.pm:197 #, perl-brace-format msgid "{t0}-{t1} relationships" @@ -6404,7 +6296,7 @@ msgstr "Convertir en publicación de artista único (histórico)" #: ../lib/MusicBrainz/Server/Edit/Historic/MergeRelease.pm:13 #: ../lib/MusicBrainz/Server/Edit/Historic/MergeReleaseMAC.pm:9 -#: ../lib/MusicBrainz/Server/Edit/Release/Merge.pm:140 +#: ../lib/MusicBrainz/Server/Edit/Release/Merge.pm:141 msgid "Merge releases" msgstr "Fusionar publicaciones" @@ -6688,7 +6580,7 @@ msgctxt "medium format" msgid "(unknown)" msgstr "(desconocido)" -#: ../lib/MusicBrainz/Server/Edit/Release/Merge.pm:347 +#: ../lib/MusicBrainz/Server/Edit/Release/Merge.pm:339 #, perl-brace-format msgid "These releases could not be merged: {reason}" msgstr "" @@ -7326,6 +7218,16 @@ msgstr "" msgid "Please pick the entity you want the others merged into." msgstr "Elige la entidad con la que quieres fusionar el resto." +#: ../lib/MusicBrainz/Server/Form/Merge/Release.pm:50 +#: ../root/edit/details/MergeReleases.js:65 +msgid "Append mediums to target release" +msgstr "Añadir medios a la publicación de destino" + +#: ../lib/MusicBrainz/Server/Form/Merge/Release.pm:51 +#: ../root/edit/details/MergeReleases.js:66 +msgid "Merge mediums and recordings" +msgstr "Fusionar medios y grabaciones" + #: ../lib/MusicBrainz/Server/Form/Merge/Release.pm:62 msgid "Another medium is already in this position" msgstr "Ya hay un medio en esta posición" @@ -7373,22 +7275,22 @@ msgid "A fluency level is required." msgstr "" #: ../lib/MusicBrainz/Server/Form/Role/UserProfile.pm:70 -#: ../root/static/scripts/common/constants.js:287 +#: ../root/static/scripts/common/constants.js:289 msgid "Basic" msgstr "Básico" #: ../lib/MusicBrainz/Server/Form/Role/UserProfile.pm:71 -#: ../root/static/scripts/common/constants.js:288 +#: ../root/static/scripts/common/constants.js:290 msgid "Intermediate" msgstr "Intermedio" #: ../lib/MusicBrainz/Server/Form/Role/UserProfile.pm:72 -#: ../root/static/scripts/common/constants.js:286 +#: ../root/static/scripts/common/constants.js:288 msgid "Advanced" msgstr "Avanzado" #: ../lib/MusicBrainz/Server/Form/Role/UserProfile.pm:73 -#: ../root/static/scripts/common/constants.js:289 +#: ../root/static/scripts/common/constants.js:291 msgid "Native" msgstr "Nativo" @@ -7530,6 +7432,11 @@ msgstr "2 semanas" msgid "A month" msgstr "Un mes" +#: ../lib/MusicBrainz/Server/Form/Utils.pm:48 +#: ../root/static/scripts/common/i18n/localizeLanguageName.js:19 +msgid "[No lyrics]" +msgstr "[Sin letra]" + #: ../lib/MusicBrainz/Server/Form/Utils.pm:84 msgctxt "script optgroup" msgid "Frequently used" @@ -7869,7 +7776,7 @@ msgstr "Acceso" #: ../root/components/Aliases/AliasTable.js:31 #: ../root/components/Aliases/ArtistCreditList.js:54 #: ../root/static/scripts/common/components/FingerprintTable.js:53 -#: ../root/utility/tableColumns.js:78 +#: ../root/utility/tableColumns.js:80 msgid "Actions" msgstr "Acciones" @@ -8002,7 +7909,7 @@ msgstr "Texto libre" #: ../root/edit/details/AddRelationshipType.js:191 #: ../root/edit/details/RemoveRelationshipType.js:136 #: ../root/relationship/linktype/RelationshipTypeIndex.js:165 -#: ../root/utility/tableColumns.js:626 +#: ../root/utility/tableColumns.js:628 msgid "Attributes" msgstr "Atributos" @@ -8023,12 +7930,12 @@ msgstr "No se puede Eliminar el Atributo" #: ../root/admin/attributes/Language.js:33 #: ../root/admin/attributes/Language.js:36 -#: ../root/edit/details/AddRelease.js:108 ../root/edit/details/AddWork.js:75 +#: ../root/edit/details/AddRelease.js:108 ../root/edit/details/AddWork.js:77 #: ../root/edit/details/EditRelease.js:131 #: ../root/edit/details/historic/AddRelease.js:104 ../root/iswc/Index.js:59 #: ../root/report/IswcsWithManyWorks.js:53 #: ../root/search/components/ReleaseResults.js:107 -#: ../root/utility/tableColumns.js:524 +#: ../root/utility/tableColumns.js:526 msgid "Language" msgstr "Idioma" @@ -8945,6 +8852,19 @@ msgstr "" msgid "The provided relationship type ID is not valid." msgstr "" +#: ../root/components/ReleaseLanguageScript.js:24 +#: ../root/components/ReleaseLanguageScript.js:30 +#: ../root/components/list/ReleaseList.js:100 +#: ../root/edit/details/MergeReleases.js:88 ../root/release/CoverArt.js:92 +#: ../root/release_group/ReleaseGroupIndex.js:90 +#: ../root/search/components/ReleaseResults.js:55 +#: ../root/static/scripts/common/components/ReleaseEvents.js:55 +#: ../root/static/scripts/common/components/ReleaseEvents.js:72 +#: ../root/static/scripts/release-editor/duplicates.js:145 +msgctxt "missing data" +msgid "-" +msgstr "-" + #: ../root/components/StaticRelationshipsDisplay.js:25 msgid "{start_track}–{end_track}" msgstr "" @@ -9127,6 +9047,14 @@ msgstr "Dirección" msgid "Unspecified type" msgstr "" +#: ../root/components/list/ReleaseList.js:90 +#: ../root/edit/details/MergeReleases.js:83 +#: ../root/release_group/ReleaseGroupIndex.js:89 +#: ../root/search/components/ReleaseResults.js:50 +#: ../root/static/scripts/release-editor/duplicates.js:143 +msgid "[missing media]" +msgstr "" + #: ../root/components/list/ReleaseList.js:153 #: ../root/search/components/ReleaseResults.js:109 msgid "Status" @@ -9136,8 +9064,8 @@ msgstr "Estatus" #: ../root/report/IswcsWithManyWorks.js:50 #: ../root/report/components/WorkList.js:51 #: ../root/search/components/WorkResults.js:51 -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:894 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:454 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:895 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:455 msgid "Writers" msgstr "Autores" @@ -9255,22 +9183,22 @@ msgid "" msgstr "{edit} ha recibido uno o más votos en contra, debes dejar una nota antes de aprobarla." #: ../root/edit/components/EditHeader.js:46 -#: ../root/edit/components/EditorTypeInfo.js:28 +#: ../root/edit/components/EditorTypeInfo.js:29 msgid "This user is new to MusicBrainz." msgstr "Este usuario es nuevo en MusicBrainz." #: ../root/edit/components/EditHeader.js:48 -#: ../root/edit/components/EditorTypeInfo.js:30 +#: ../root/edit/components/EditorTypeInfo.js:31 msgid "beginner" msgstr "" #: ../root/edit/components/EditHeader.js:55 -#: ../root/edit/components/EditorTypeInfo.js:38 +#: ../root/edit/components/EditorTypeInfo.js:39 msgid "This user is automated." msgstr "Este usuario funciona de forma automatizada." #: ../root/edit/components/EditHeader.js:56 -#: ../root/edit/components/EditorTypeInfo.js:39 +#: ../root/edit/components/EditorTypeInfo.js:40 msgid "bot" msgstr "bot" @@ -9576,7 +9504,7 @@ msgstr "" #: ../root/edit/details/AddSeries.js:65 ../root/edit/details/EditSeries.js:79 #: ../root/layout/components/sidebar/SeriesSidebar.js:52 -#: ../root/utility/tableColumns.js:819 +#: ../root/utility/tableColumns.js:821 msgid "Ordering Type" msgstr "" @@ -9662,6 +9590,14 @@ msgstr "Artista anterior" msgid "New Artist" msgstr "Nuevo artista" +#: ../root/edit/details/EditRelease.js:182 +#: ../root/edit/details/MergeReleases.js:364 +#: ../root/edit/details/SetTrackLengths.js:89 +#: ../root/edit/details/historic/MergeReleases.js:69 +#: ../root/user/ReportUser.js:116 +msgid "Note" +msgstr "Nota" + #: ../root/edit/details/EditRelease.js:183 msgid "This edit also changed the track artists." msgstr "" @@ -9693,7 +9629,7 @@ msgstr "" msgid "Search for the target URL." msgstr "" -#: ../root/edit/details/EditWork.js:87 +#: ../root/edit/details/EditWork.js:89 msgid "Work type" msgstr "" @@ -9710,10 +9646,71 @@ msgstr "" msgid "Merge:" msgstr "Fusionar:" +#: ../root/edit/details/MergeAreas.js:35 +#: ../root/edit/details/MergeArtists.js:37 +#: ../root/edit/details/MergeEvents.js:40 +#: ../root/edit/details/MergeInstruments.js:35 +#: ../root/edit/details/MergeLabels.js:35 +#: ../root/edit/details/MergePlaces.js:35 +#: ../root/edit/details/MergeRecordings.js:40 +#: ../root/edit/details/MergeReleaseGroups.js:35 +#: ../root/edit/details/MergeReleases.js:288 +#: ../root/edit/details/MergeReleases.js:295 +#: ../root/edit/details/MergeReleases.js:305 +#: ../root/edit/details/MergeReleases.js:323 +#: ../root/edit/details/MergeSeries.js:35 +#: ../root/edit/details/MergeWorks.js:35 +msgid "Into:" +msgstr "En:" + #: ../root/edit/details/MergeArtists.js:43 msgid "Rename artist and relationship credits" msgstr "" +#: ../root/edit/details/MergeReleases.js:131 +msgid "Medium {position}: {name} is now medium {new_position}: {new_name}" +msgstr "El medio {position}: {name} es ahora el medio {new_position}: {new_name}" + +#: ../root/edit/details/MergeReleases.js:142 +msgid "Medium {position}: {name} is now medium {new_position}" +msgstr "El medio {position}: {name} es ahora el medio {new_position}" + +#: ../root/edit/details/MergeReleases.js:151 +msgid "Medium {position} is now medium {new_position}: {new_name}" +msgstr "El medio {position} es ahora el medio {new_position}: {new_name}" + +#: ../root/edit/details/MergeReleases.js:162 +msgid "Medium {position} is now medium {new_position}" +msgstr "El medio {position} es ahora el medio {new_position}" + +#: ../root/edit/details/MergeReleases.js:271 +msgid "This release has no media to merge." +msgstr "" + +#: ../root/edit/details/MergeReleases.js:318 +msgid "Recording Merges" +msgstr "" + +#: ../root/edit/details/MergeReleases.js:321 +msgid "Track #" +msgstr "Pista #" + +#: ../root/edit/details/MergeReleases.js:333 +msgid "" +"This edit does not store recording merge information and is closed, so no " +"recording merge information can be shown." +msgstr "" + +#: ../root/edit/details/MergeReleases.js:350 +msgid "All recordings for these releases are already merged." +msgstr "Todas las grabaciones de estos lanzamientos ya están fusionadas." + +#: ../root/edit/details/MergeReleases.js:366 +msgid "" +"The data in this edit originally came from an older version of this edit, " +"and may not display correctly" +msgstr "Los datos de esta edición provienen originalmente de una versión anterior y puede que no se muestren correctamente" + #: ../root/edit/details/MoveDiscId.js:46 #: ../root/edit/details/historic/MoveDiscId.js:41 msgid "From:" @@ -10785,7 +10782,7 @@ msgstr "" #: ../root/relationship/RelationshipsHeader.js:19 #: ../root/relationship/linktype/RelationshipTypeIndex.js:61 #: ../root/relationship/linktype/RelationshipTypesList.js:62 -#: ../root/utility/tableColumns.js:343 +#: ../root/utility/tableColumns.js:345 msgid "Relationship Types" msgstr "Tipos de relación" @@ -11201,7 +11198,7 @@ msgstr "Licencia" #: ../root/layout/components/sidebar/SidebarRating.js:25 #: ../root/static/scripts/release/components/MediumTable.js:223 -#: ../root/utility/tableColumns.js:437 +#: ../root/utility/tableColumns.js:439 msgid "Rating" msgstr "Valoración" @@ -12025,7 +12022,7 @@ msgid "" msgstr "¿Seguro que quieres eliminar la imagen mostrada abajo de la publicación {release} por {artist}?" #: ../root/release_group/ReleaseGroupHeader.js:30 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:404 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:405 msgid "Release group by {artist}" msgstr "Grupo de publicaciones de {artist}" @@ -13315,9 +13312,9 @@ msgstr "" #: ../root/report/ReportsIndex.js:574 #: ../root/search/components/RecordingResults.js:132 -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:728 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:311 -#: ../root/utility/tableColumns.js:655 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:729 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:312 +#: ../root/utility/tableColumns.js:657 msgid "ISRCs" msgstr "ISRCs" @@ -13565,7 +13562,7 @@ msgstr "Otras búsquedas" #: ../root/search/components/ArtistResults.js:55 #: ../root/search/components/LabelResults.js:68 #: ../root/search/components/PlaceResults.js:65 -#: ../root/utility/tableColumns.js:150 ../root/utility/tableColumns.js:155 +#: ../root/utility/tableColumns.js:152 ../root/utility/tableColumns.js:157 msgid "Begin" msgstr "Inicio" @@ -13583,9 +13580,9 @@ msgid "Documentation Search" msgstr "Buscar en la documentación" #: ../root/search/components/EventResults.js:71 -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:1044 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:183 -#: ../root/utility/tableColumns.js:358 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:1045 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:184 +#: ../root/utility/tableColumns.js:360 msgid "Location" msgstr "Ubicación" @@ -13895,7 +13892,7 @@ msgid "Show more artist credits" msgstr "" #: ../root/static/scripts/artist/components/ArtistCreditRenamer.js:254 -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:464 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:465 #: ../root/static/scripts/common/components/Autocomplete2/constants.js:103 #: ../root/static/scripts/common/components/Collapsible.js:76 msgid "Show more..." @@ -13925,56 +13922,56 @@ msgstr "Crear colección" msgid "Update collection" msgstr "Actualizar colección" -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:82 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:83 #: ../root/static/scripts/common/components/Autocomplete2/constants.js:96 msgid "An error occurred while searching. Click here to try again." msgstr "" -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:87 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:88 msgid "Try with direct search instead." msgstr "" -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:88 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:89 msgid "Try with indexed search instead." msgstr "" -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:120 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:121 #: ../root/static/scripts/common/components/Autocomplete2.js:648 msgid "Type to search, or paste an MBID" msgstr "" -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:202 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:203 #: ../root/static/scripts/common/components/Autocomplete2/constants.js:51 msgid "Clear recent items" msgstr "Borrar elementos recientes" -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:471 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:472 #: ../root/static/scripts/common/components/Autocomplete2/constants.js:110 msgid "Not found? Try again with direct search." msgstr "¿No encuentras lo que estás buscando? Prueba de nuevo con la búsqueda directa." -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:472 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:473 #: ../root/static/scripts/common/components/Autocomplete2/constants.js:117 msgid "Slow? Switch back to indexed search." msgstr "¿Lento? Vuelve a la búsqueda indexada." -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:715 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:303 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:716 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:304 msgid "appears on" msgstr "" -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:721 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:307 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:722 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:308 msgid "standalone recording" msgstr "" -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:815 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:399 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:816 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:400 msgid "{release_group_type} by {artist}" msgstr "" -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:1043 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:180 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:1044 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:181 msgid "Performers" msgstr "Intérpretes" @@ -14088,11 +14085,11 @@ msgstr "" msgid "Search for a work" msgstr "" -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:298 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:299 msgid "by {artist}" msgstr "de {artist}" -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:362 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:363 msgid "{first_list_item} … {last_list_item}" msgstr "" @@ -14433,181 +14430,191 @@ msgstr "Fundado en:" msgid "Dissolved in:" msgstr "Separación en:" -#: ../root/static/scripts/edit/URLCleanup.js:360 +#: ../root/static/scripts/edit/URLCleanup.js:361 msgid "" "Please link to a channel, not a specific video. Videos should be linked to " "the appropriate recordings or releases instead." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:366 +#: ../root/static/scripts/edit/URLCleanup.js:367 msgid "" "Please link to a specific video. Add channel pages to the relevant artist, " "label, etc. instead." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:533 +#: ../root/static/scripts/edit/URLCleanup.js:534 msgid "" "Allmusic “{album_url_pattern}” links should be added to release groups. To " "find the appropriate release link for this release, please check the " "Releases tab from {album_url|your link}." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:753 +#: ../root/static/scripts/edit/URLCleanup.js:754 msgid "" "Only Apple Books “{artist_url_pattern}” pages can be added directly to " "artists. Please link audiobooks to the appropriate release instead." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:769 +#: ../root/static/scripts/edit/URLCleanup.js:770 msgid "" "Only Apple Books audiobooks can be added to MusicBrainz. Consider adding " "books to {bookbrainz_url|BookBrainz} instead." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:856 +#: ../root/static/scripts/edit/URLCleanup.js:857 msgid "" "Please link to the main page for the artist, not to a specific album or " "track." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:868 +#: ../root/static/scripts/edit/URLCleanup.js:869 msgid "" "Please link to the main page for the label, not to a specific album or " "track." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:1052 +#: ../root/static/scripts/edit/URLCleanup.js:1053 msgid "Please link to the main page for the artist, not a specific product." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:1054 +#: ../root/static/scripts/edit/URLCleanup.js:1055 msgid "Please link to the main page for the label, not a specific product." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:1597 +#: ../root/static/scripts/edit/URLCleanup.js:1600 msgid "" "Discogs “{master_url_pattern}” links group several releases, so this should " "be added to the release group instead." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:2086 +#: ../root/static/scripts/edit/URLCleanup.js:2090 msgid "" "Only IMSLP “{category_url_pattern}” links are allowed for artists. Please " "link work pages to the specific work in question." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:2104 +#: ../root/static/scripts/edit/URLCleanup.js:2108 msgid "" "IMSLP “{category_url_pattern}” links are only allowed for artists. Please " "link the specific work page to this work instead, if available." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:2149 +#: ../root/static/scripts/edit/URLCleanup.js:2153 msgid "" "Instagram “{explore_url_pattern}” links are not allowed. Please link to a " "profile instead, if there is one." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:2177 +#: ../root/static/scripts/edit/URLCleanup.js:2181 msgid "" "Please do not link directly to images, link to the appropriate Instagram " "profile page instead. If you want to link to a video, {url|add a standalone " "recording} for it instead." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:2202 +#: ../root/static/scripts/edit/URLCleanup.js:2206 msgid "This is an internal Instagram page and should not be added." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:2278 +#: ../root/static/scripts/edit/URLCleanup.js:2282 msgid "" "Only iTunes “{artist_url_pattern}” pages can be added directly to artists. " "Please link albums, videos, etc. to the appropriate release or recording " "instead." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:2890 +#: ../root/static/scripts/edit/URLCleanup.js:2895 msgid "" "Musixmatch “{album_url_pattern}” pages are a bad match for MusicBrainz " "release groups, and linking to them is currently disallowed. Please consider" " adding Musixmatch links to the relevant artists and works instead." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:2993 +#: ../root/static/scripts/edit/URLCleanup.js:2998 msgid "" "This is a redirect link. Please follow {redirect_url|your link} and add the " "link it redirects to instead." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:3504 +#: ../root/static/scripts/edit/URLCleanup.js:3464 +msgid "Only RYM music videos can be linked to recordings." +msgstr "" + +#: ../root/static/scripts/edit/URLCleanup.js:3516 msgid "" "This is a link to the old Resident Advisor domain. Please follow " "{ra_url|your link}, make sure the link it redirects to is still the correct " "one and, if so, add that link instead." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4092 +#: ../root/static/scripts/edit/URLCleanup.js:4143 msgid "This is not a profile, but a Twitter documentation page." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4106 +#: ../root/static/scripts/edit/URLCleanup.js:4157 msgid "Please link to Twitter profiles, not tweets." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4124 +#: ../root/static/scripts/edit/URLCleanup.js:4175 msgid "This site does not allow direct links to their images." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4331 +#: ../root/static/scripts/edit/URLCleanup.js:4372 +msgid "" +"Please link to the “{allowed_url_pattern}” page rather than this " +"“{current_url_pattern}” link." +msgstr "" + +#: ../root/static/scripts/edit/URLCleanup.js:4428 msgid "" "There is an unencoded “?” or “#” character in this URL. Please check whether" " it is useless and should be removed, or whether it is an error and the URL " "is misencoded." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4351 +#: ../root/static/scripts/edit/URLCleanup.js:4448 msgid "" "Please do not link directly to WhoSampled “{unwanted_url_pattern}” pages. " "Link to the appropriate WhoSampled artist, track or album page instead." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4372 +#: ../root/static/scripts/edit/URLCleanup.js:4469 msgid "Please link WhoSampled “{album_url_pattern}” pages to release groups." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4390 +#: ../root/static/scripts/edit/URLCleanup.js:4487 msgid "Please link WhoSampled artist pages to artists." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4402 +#: ../root/static/scripts/edit/URLCleanup.js:4499 msgid "Please link WhoSampled track pages to recordings." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4469 +#: ../root/static/scripts/edit/URLCleanup.js:4566 msgid "" "Links to specific sections of Wikipedia articles are not allowed. Please " "remove “{fragment}” if still appropriate. See the {url|guidelines}." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4570 +#: ../root/static/scripts/edit/URLCleanup.js:4669 msgid "Only video and playlist links are allowed on releases." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4606 +#: ../root/static/scripts/edit/URLCleanup.js:4705 msgid "" "Wikipedia normally has no entries for specific releases, so adding Wikipedia" " links to a release is currently blocked. Please add this Wikipedia link to " "the release group instead, if appropriate." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4618 +#: ../root/static/scripts/edit/URLCleanup.js:4717 msgid "" "Wikidata normally has no entries for specific releases, so adding Wikidata " "links to a release is currently blocked. Please add this Wikidata link to " "the release group instead, if appropriate." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4630 +#: ../root/static/scripts/edit/URLCleanup.js:4729 msgid "" "This is a Bandcamp profile, not a page for a specific release. Even if it " "shows this release right now, that can change when the artist releases " @@ -14616,7 +14623,7 @@ msgid "" "add this profile link to the appropriate artist or label." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4658 +#: ../root/static/scripts/edit/URLCleanup.js:4757 msgid "" "This is a Bandcamp profile, not a page for a specific recording. Even if it " "shows a single recording right now, that can change when the artist releases" @@ -14625,12 +14632,12 @@ msgid "" "the appropriate artist or label." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4821 +#: ../root/static/scripts/edit/URLCleanup.js:4920 msgid "Some relationship types are missing for this URL." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4838 -#: ../root/static/scripts/edit/externalLinks.js:743 +#: ../root/static/scripts/edit/URLCleanup.js:4937 +#: ../root/static/scripts/edit/externalLinks.js:767 msgid "This relationship type combination is invalid." msgstr "" @@ -14793,49 +14800,93 @@ msgstr "" msgid "This relationship already exists." msgstr "Esta relación ya existe." -#: ../root/static/scripts/edit/externalLinks.js:609 +#: ../root/static/scripts/edit/externalLinks.js:607 #: ../root/static/scripts/relationship-editor/common/dialog.js:565 msgid "" "This URL is not allowed for the selected link type, or is incorrectly " "formatted." msgstr "" -#: ../root/static/scripts/edit/externalLinks.js:615 +#: ../root/static/scripts/edit/externalLinks.js:612 msgid "This URL is not allowed for the selected link type." msgstr "" -#: ../root/static/scripts/edit/externalLinks.js:674 +#: ../root/static/scripts/edit/externalLinks.js:618 +msgid "This URL is not allowed for areas." +msgstr "" + +#: ../root/static/scripts/edit/externalLinks.js:620 +msgid "This URL is not allowed for artists." +msgstr "" + +#: ../root/static/scripts/edit/externalLinks.js:622 +msgid "This URL is not allowed for events." +msgstr "" + +#: ../root/static/scripts/edit/externalLinks.js:624 +msgid "This URL is not allowed for instruments." +msgstr "" + +#: ../root/static/scripts/edit/externalLinks.js:626 +msgid "This URL is not allowed for labels." +msgstr "" + +#: ../root/static/scripts/edit/externalLinks.js:628 +msgid "This URL is not allowed for places." +msgstr "" + +#: ../root/static/scripts/edit/externalLinks.js:630 +msgid "This URL is not allowed for recordings." +msgstr "" + +#: ../root/static/scripts/edit/externalLinks.js:632 +msgid "This URL is not allowed for releases." +msgstr "" + +#: ../root/static/scripts/edit/externalLinks.js:634 +msgid "This URL is not allowed for release groups." +msgstr "" + +#: ../root/static/scripts/edit/externalLinks.js:637 +msgid "This URL is not allowed for series." +msgstr "" + +#: ../root/static/scripts/edit/externalLinks.js:639 +msgid "This URL is not allowed for works." +msgstr "" + +#: ../root/static/scripts/edit/externalLinks.js:698 msgid "" "Note: This link already exists at position #{position}. To merge, press " "enter or select a type." msgstr "" -#: ../root/static/scripts/edit/externalLinks.js:861 +#: ../root/static/scripts/edit/externalLinks.js:885 #: ../root/static/scripts/relationship-editor/common/dialog.js:418 msgid "{description} ({url|more documentation})" msgstr "" -#: ../root/static/scripts/edit/externalLinks.js:959 +#: ../root/static/scripts/edit/externalLinks.js:930 +msgid "Remove Relationship" +msgstr "Eliminar relación" + +#: ../root/static/scripts/edit/externalLinks.js:996 msgid "video" msgstr "vídeo" -#: ../root/static/scripts/edit/externalLinks.js:990 -msgid "Remove Relationship" -msgstr "Eliminar relación" +#: ../root/static/scripts/edit/externalLinks.js:1091 +msgid "Remove Link" +msgstr "Eliminar enlace" -#: ../root/static/scripts/edit/externalLinks.js:1076 +#: ../root/static/scripts/edit/externalLinks.js:1120 msgid "Add link" msgstr "" -#: ../root/static/scripts/edit/externalLinks.js:1079 +#: ../root/static/scripts/edit/externalLinks.js:1123 msgid "Add another link" msgstr "" -#: ../root/static/scripts/edit/externalLinks.js:1131 -msgid "Remove Link" -msgstr "Eliminar enlace" - -#: ../root/static/scripts/edit/externalLinks.js:1180 +#: ../root/static/scripts/edit/externalLinks.js:1205 msgid "Add another relationship" msgstr "" @@ -16047,11 +16098,11 @@ msgstr "Esta edición falló porque afectaba a datos de alta calidad y no recibi msgid "This edit was cancelled." msgstr "Esta edición fue cancelada." -#: ../root/utility/tableColumns.js:741 +#: ../root/utility/tableColumns.js:743 msgid "AcoustIDs" msgstr "" -#: ../root/utility/tableColumns.js:827 +#: ../root/utility/tableColumns.js:829 msgid "Subscribed" msgstr "Suscrito" diff --git a/po/mb_server.et.po b/po/mb_server.et.po index d2e3cb4c56d..85f9f8208d4 100644 --- a/po/mb_server.et.po +++ b/po/mb_server.et.po @@ -21,9 +21,9 @@ msgid "" msgstr "" "Project-Id-Version: MusicBrainz\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-09-13 18:38-0500\n" -"PO-Revision-Date: 2021-09-13 23:42+0000\n" -"Last-Translator: Michael Wiencek <email address hidden>\n" +"POT-Creation-Date: 2021-09-28 21:37+0300\n" +"PO-Revision-Date: 2021-09-28 18:40+0000\n" +"Last-Translator: Nicolás Tamargo <email address hidden>\n" "Language-Team: Estonian (http://www.transifex.com/musicbrainz/musicbrainz/language/et/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -74,7 +74,7 @@ msgstr "„YY” on registreerimisaasta kaks viimast numbrit." #: ../root/edit/details/historic/AddRelease.js:118 #: ../root/recording/RecordingIndex.js:50 #: ../root/static/scripts/release/components/MediumTable.js:218 -#: ../root/utility/tableColumns.js:537 +#: ../root/utility/tableColumns.js:539 msgid "#" msgstr "#" @@ -130,26 +130,13 @@ msgstr "(oli helikandja {position} väljalaskel „{release}”)" msgid "(was medium {position}: {name} on release {release})" msgstr "(oli helikandja {position}: „{name}” väljalaskel „{release}”)" -#: ../root/edit/details/merge_releases.tt:6 -#: ../root/components/ReleaseLanguageScript.js:24 -#: ../root/components/ReleaseLanguageScript.js:30 -#: ../root/components/list/ReleaseList.js:100 ../root/release/CoverArt.js:92 -#: ../root/release_group/ReleaseGroupIndex.js:90 -#: ../root/search/components/ReleaseResults.js:55 -#: ../root/static/scripts/common/components/ReleaseEvents.js:55 -#: ../root/static/scripts/common/components/ReleaseEvents.js:72 -#: ../root/static/scripts/release-editor/duplicates.js:145 -msgctxt "missing data" -msgid "-" -msgstr "-" - #: ../root/cdtoc/attach_artist_releases.tt:16 #: ../root/cdtoc/attach_filter_release.tt:30 ../root/cdtoc/list.tt:10 -#: ../root/edit/details/merge_releases.tt:23 ../root/release/merge.tt:16 +#: ../root/release/merge.tt:16 ../root/edit/details/MergeReleases.js:256 #: ../root/recording/RecordingIndex.js:57 #: ../root/release_group/ReleaseGroupIndex.js:159 #: ../root/search/components/ReleaseResults.js:103 -#: ../root/utility/tableColumns.js:480 ../root/utility/tableColumns.js:488 +#: ../root/utility/tableColumns.js:482 ../root/utility/tableColumns.js:490 msgctxt "and" msgid "/" msgstr "" @@ -426,10 +413,6 @@ msgstr "Haldusvalikud" msgid "All of these relationships." msgstr "" -#: ../root/edit/details/merge_releases.tt:141 -msgid "All recordings for these releases are already merged." -msgstr "Kõik nende väljalasete salvestised on juba mestitud." - #: ../root/release/edit/recordings.tt:3 msgid "" "All tracks require an associated recording. Click “Edit” to select a " @@ -494,11 +477,6 @@ msgstr "Annotatsioon:" msgid "Annotations support a limited set of wiki formatting options:" msgstr "Annotatsioonis saab kasutada piiratud hulka wikivormindusvalikuid:" -#: ../root/edit/details/merge_releases.tt:149 -#: ../lib/MusicBrainz/Server/Form/Merge/Release.pm:50 -msgid "Append mediums to target release" -msgstr "Helikandjad lisatakse sihtväljalaskele" - #: ../root/edit/search_macros.tt:417 msgid "Applied Edit Count of Editor" msgstr "" @@ -607,10 +585,9 @@ msgstr "Piirkonnad" #: ../root/cdtoc/attach_confirm.tt:13 #: ../root/cdtoc/attach_filter_release.tt:29 ../root/cdtoc/list.tt:8 #: ../root/cdtoc/lookup.tt:41 ../root/components/common-macros.tt:569 -#: ../root/edit/details/merge_releases.tt:20 ../root/edit/search_macros.tt:417 -#: ../root/release/edit/tracklist.tt:163 ../root/release/edit/tracklist.tt:412 -#: ../root/release/merge.tt:13 ../root/watch/list.tt:16 -#: ../lib/MusicBrainz/Server/Edit/Artist.pm:7 +#: ../root/edit/search_macros.tt:417 ../root/release/edit/tracklist.tt:163 +#: ../root/release/edit/tracklist.tt:412 ../root/release/merge.tt:13 +#: ../root/watch/list.tt:16 ../lib/MusicBrainz/Server/Edit/Artist.pm:7 #: ../lib/MusicBrainz/Server/Form/Search/Search.pm:35 #: ../root/artist/ArtistHeader.js:34 #: ../root/components/RelationshipsTable.js:320 @@ -628,6 +605,7 @@ msgstr "Piirkonnad" #: ../root/edit/details/EditRecording.js:86 #: ../root/edit/details/EditRelease.js:83 #: ../root/edit/details/EditReleaseGroup.js:101 +#: ../root/edit/details/MergeReleases.js:253 #: ../root/edit/details/historic/AddRelease.js:68 #: ../root/edit/details/historic/AddRelease.js:120 #: ../root/edit/details/historic/AddTrackKV.js:55 @@ -701,10 +679,10 @@ msgstr "Artist:" #: ../root/report/components/EventList.js:66 #: ../root/search/components/EventResults.js:70 #: ../root/search/components/WorkResults.js:52 -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:895 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:455 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:896 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:456 #: ../root/static/scripts/common/utility/formatEntityTypeName.js:15 -#: ../root/tag/TagLayout.js:25 ../root/utility/tableColumns.js:854 +#: ../root/tag/TagLayout.js:25 ../root/utility/tableColumns.js:856 msgid "Artists" msgstr "Artistid" @@ -761,14 +739,14 @@ msgstr "Päisesõnumitoimetaja" #: ../root/cdtoc/attach_artist_releases.tt:19 #: ../root/cdtoc/attach_filter_release.tt:33 ../root/cdtoc/list.tt:13 -#: ../root/cdtoc/lookup.tt:46 ../root/edit/details/merge_releases.tt:26 -#: ../root/release/edit/duplicates.tt:17 ../root/release/merge.tt:19 -#: ../root/components/list/ReleaseList.js:128 +#: ../root/cdtoc/lookup.tt:46 ../root/release/edit/duplicates.tt:17 +#: ../root/release/merge.tt:19 ../root/components/list/ReleaseList.js:128 #: ../root/edit/details/AddRelease.js:129 #: ../root/edit/details/EditBarcodes.js:58 #: ../root/edit/details/EditBarcodes.js:64 #: ../root/edit/details/EditRelease.js:167 #: ../root/edit/details/EditReleaseLabel.js:138 +#: ../root/edit/details/MergeReleases.js:259 #: ../root/edit/details/historic/AddRelease.js:155 #: ../root/edit/details/historic/EditReleaseEvents.js:138 #: ../root/otherlookup/OtherLookupForm.js:64 @@ -995,12 +973,12 @@ msgstr "Kat-nr:" #: ../root/cdtoc/attach_artist_releases.tt:18 #: ../root/cdtoc/attach_filter_release.tt:32 ../root/cdtoc/list.tt:12 -#: ../root/cdtoc/lookup.tt:45 ../root/edit/details/merge_releases.tt:25 -#: ../root/release/edit/duplicates.tt:16 ../root/release/merge.tt:18 +#: ../root/cdtoc/lookup.tt:45 ../root/release/edit/duplicates.tt:16 +#: ../root/release/merge.tt:18 ../root/edit/details/MergeReleases.js:258 #: ../root/recording/RecordingIndex.js:59 #: ../root/release_group/ReleaseGroupIndex.js:161 #: ../root/search/components/ReleaseResults.js:105 -#: ../root/utility/tableColumns.js:456 ../root/utility/tableColumns.js:461 +#: ../root/utility/tableColumns.js:458 ../root/utility/tableColumns.js:463 msgid "Catalog#" msgstr "Kat-nr" @@ -1161,16 +1139,16 @@ msgstr "" #: ../root/cdtoc/attach_artist_releases.tt:16 #: ../root/cdtoc/attach_filter_release.tt:30 ../root/cdtoc/list.tt:10 -#: ../root/cdtoc/lookup.tt:43 ../root/edit/details/merge_releases.tt:23 -#: ../root/release/edit/duplicates.tt:14 ../root/release/merge.tt:16 -#: ../root/edit/details/EditReleaseLabel.js:127 +#: ../root/cdtoc/lookup.tt:43 ../root/release/edit/duplicates.tt:14 +#: ../root/release/merge.tt:16 ../root/edit/details/EditReleaseLabel.js:127 +#: ../root/edit/details/MergeReleases.js:256 #: ../root/edit/details/historic/AddRelease.js:152 #: ../root/edit/details/historic/EditReleaseEvents.js:135 #: ../root/recording/RecordingIndex.js:57 #: ../root/release_group/ReleaseGroupIndex.js:159 #: ../root/search/components/ReleaseResults.js:103 #: ../root/static/scripts/common/components/FilterForm.js:110 -#: ../root/utility/tableColumns.js:476 ../root/utility/tableColumns.js:488 +#: ../root/utility/tableColumns.js:478 ../root/utility/tableColumns.js:490 msgid "Country" msgstr "Maa" @@ -1245,13 +1223,14 @@ msgstr "Andmed:" #: ../root/annotation/history.tt:12 ../root/cdtoc/attach_artist_releases.tt:16 #: ../root/cdtoc/attach_filter_release.tt:30 ../root/cdtoc/list.tt:10 -#: ../root/cdtoc/lookup.tt:42 ../root/edit/details/merge_releases.tt:23 -#: ../root/release/edit/duplicates.tt:13 ../root/release/merge.tt:16 +#: ../root/cdtoc/lookup.tt:42 ../root/release/edit/duplicates.tt:13 +#: ../root/release/merge.tt:16 #: ../root/admin/statistics-events/DeleteStatisticsEvent.js:31 #: ../root/admin/statistics-events/StatisticsEventEditForm.js:35 #: ../root/admin/statistics-events/StatisticsEventIndex.js:30 #: ../root/components/RelationshipsTable.js:316 #: ../root/edit/details/EditReleaseLabel.js:119 +#: ../root/edit/details/MergeReleases.js:256 #: ../root/edit/details/historic/AddRelease.js:151 #: ../root/edit/details/historic/EditReleaseEvents.js:134 #: ../root/elections/ElectionVotes.js:26 @@ -1260,8 +1239,8 @@ msgstr "Andmed:" #: ../root/search/components/EventResults.js:67 #: ../root/search/components/ReleaseResults.js:103 #: ../root/static/scripts/common/components/FilterForm.js:129 -#: ../root/utility/tableColumns.js:255 ../root/utility/tableColumns.js:260 -#: ../root/utility/tableColumns.js:482 ../root/utility/tableColumns.js:488 +#: ../root/utility/tableColumns.js:257 ../root/utility/tableColumns.js:262 +#: ../root/utility/tableColumns.js:484 ../root/utility/tableColumns.js:490 msgid "Date" msgstr "Kuupäev" @@ -1329,7 +1308,7 @@ msgstr "Iganenud:" #: ../root/relationship/linktype/RelationshipTypeIndex.js:96 #: ../root/search/components/InstrumentResults.js:52 #: ../root/static/scripts/collection/components/CollectionEditForm.js:89 -#: ../root/utility/tableColumns.js:636 +#: ../root/utility/tableColumns.js:638 msgid "Description" msgstr "Kirjeldus" @@ -1365,21 +1344,21 @@ msgstr "Surnud:" #: ../root/edit/details/AddReleaseGroup.js:71 #: ../root/edit/details/AddSeries.js:51 #: ../root/edit/details/AddStandaloneRecording.js:67 -#: ../root/edit/details/AddWork.js:57 ../root/edit/details/EditArea.js:84 +#: ../root/edit/details/AddWork.js:59 ../root/edit/details/EditArea.js:84 #: ../root/edit/details/EditArtist.js:100 ../root/edit/details/EditEvent.js:64 #: ../root/edit/details/EditInstrument.js:64 #: ../root/edit/details/EditLabel.js:84 ../root/edit/details/EditPlace.js:70 #: ../root/edit/details/EditRecording.js:65 #: ../root/edit/details/EditRelease.js:111 #: ../root/edit/details/EditReleaseGroup.js:64 -#: ../root/edit/details/EditSeries.js:61 ../root/edit/details/EditWork.js:73 +#: ../root/edit/details/EditSeries.js:61 ../root/edit/details/EditWork.js:75 #: ../root/genre/GenreEditForm.js:38 msgid "Disambiguation" msgstr "Täpsustus" #: ../root/release/discids.tt:8 ../root/edit/details/SetTrackLengths.js:66 #: ../root/otherlookup/OtherLookupForm.js:114 -#: ../root/utility/tableColumns.js:179 ../root/utility/tableColumns.js:184 +#: ../root/utility/tableColumns.js:181 ../root/utility/tableColumns.js:186 msgid "Disc ID" msgstr "Plaadi-ID" @@ -1619,7 +1598,7 @@ msgstr "Vinüülplaatide loonumbrite lubamine" #: ../root/search/components/ArtistResults.js:57 #: ../root/search/components/LabelResults.js:69 #: ../root/search/components/PlaceResults.js:66 -#: ../root/utility/tableColumns.js:273 ../root/utility/tableColumns.js:278 +#: ../root/utility/tableColumns.js:275 ../root/utility/tableColumns.js:280 msgid "End" msgstr "Lõpp" @@ -1815,11 +1794,11 @@ msgstr "Lisateabe saamiseks vaata {doc_doc|dokumentatsiooni} ja {doc_styleguide| msgid "For more information, check the {doc_doc|documentation}." msgstr "Lisateabe saamiseks vaata {doc_doc|dokumentatsiooni}." -#: ../root/cdtoc/list.tt:9 ../root/edit/details/merge_releases.tt:21 -#: ../root/release/edit/duplicates.tt:11 ../root/release/merge.tt:14 -#: ../root/components/list/ReleaseList.js:93 +#: ../root/cdtoc/list.tt:9 ../root/release/edit/duplicates.tt:11 +#: ../root/release/merge.tt:14 ../root/components/list/ReleaseList.js:93 #: ../root/edit/details/EditMedium.js:530 #: ../root/edit/details/EditReleaseLabel.js:145 +#: ../root/edit/details/MergeReleases.js:254 #: ../root/edit/details/historic/AddRelease.js:156 #: ../root/edit/details/historic/EditReleaseEvents.js:139 #: ../root/release_group/ReleaseGroupIndex.js:157 @@ -1992,7 +1971,7 @@ msgstr "" #: ../root/components/common-macros.tt:602 #: ../lib/MusicBrainz/Server/Controller/Edit.pm:240 -#: ../root/static/scripts/common/constants.js:279 +#: ../root/static/scripts/common/constants.js:281 msgid "High" msgstr "kõrge" @@ -2131,12 +2110,12 @@ msgstr "ISRC" msgid "ISRCs:" msgstr "ISRC-d:" -#: ../root/work/edit_form.tt:16 ../root/edit/details/AddWork.js:63 -#: ../root/edit/details/EditWork.js:80 ../root/edit/details/RemoveIswc.js:36 +#: ../root/work/edit_form.tt:16 ../root/edit/details/AddWork.js:65 +#: ../root/edit/details/EditWork.js:82 ../root/edit/details/RemoveIswc.js:36 #: ../root/otherlookup/OtherLookupForm.js:79 #: ../root/report/IswcsWithManyWorks.js:48 #: ../root/search/components/WorkResults.js:53 -#: ../root/utility/tableColumns.js:762 +#: ../root/utility/tableColumns.js:764 msgid "ISWC" msgstr "ISWC" @@ -2289,23 +2268,6 @@ msgstr "Instrument:" msgid "Instruments" msgstr "Instrumendid" -#: ../root/edit/details/merge_releases.tt:78 -#: ../root/edit/details/merge_releases.tt:83 -#: ../root/edit/details/merge_releases.tt:92 -#: ../root/edit/details/merge_releases.tt:109 -#: ../root/edit/details/MergeAreas.js:35 -#: ../root/edit/details/MergeArtists.js:37 -#: ../root/edit/details/MergeEvents.js:40 -#: ../root/edit/details/MergeInstruments.js:35 -#: ../root/edit/details/MergeLabels.js:35 -#: ../root/edit/details/MergePlaces.js:35 -#: ../root/edit/details/MergeRecordings.js:40 -#: ../root/edit/details/MergeReleaseGroups.js:35 -#: ../root/edit/details/MergeSeries.js:35 -#: ../root/edit/details/MergeWorks.js:35 -msgid "Into:" -msgstr "Järgnevasse:" - #: ../root/cdstub/error.tt:5 msgid "Invalid Disc ID" msgstr "Sobimatu plaadi-ID" @@ -2346,13 +2308,13 @@ msgstr "" #: ../root/cdtoc/attach_artist_releases.tt:17 #: ../root/cdtoc/attach_filter_release.tt:31 ../root/cdtoc/list.tt:11 #: ../root/cdtoc/lookup.tt:44 ../root/components/common-macros.tt:569 -#: ../root/edit/details/merge_releases.tt:24 ../root/edit/search_macros.tt:417 -#: ../root/release/edit/duplicates.tt:15 ../root/release/merge.tt:17 -#: ../lib/MusicBrainz/Server/Edit/Label.pm:7 +#: ../root/edit/search_macros.tt:417 ../root/release/edit/duplicates.tt:15 +#: ../root/release/merge.tt:17 ../lib/MusicBrainz/Server/Edit/Label.pm:7 #: ../lib/MusicBrainz/Server/Form/Search/Search.pm:40 #: ../root/components/list/LabelList.js:54 ../root/edit/details/AddLabel.js:51 #: ../root/edit/details/EditLabel.js:62 #: ../root/edit/details/EditReleaseLabel.js:69 +#: ../root/edit/details/MergeReleases.js:257 #: ../root/edit/details/historic/AddRelease.js:153 #: ../root/edit/details/historic/EditReleaseEvents.js:136 #: ../root/label/LabelHeader.js:27 ../root/layout/components/Search.js:39 @@ -2365,8 +2327,8 @@ msgstr "" #: ../root/search/components/SearchForm.js:39 #: ../root/static/scripts/common/constants.js:23 #: ../root/static/scripts/common/utility/formatEntityTypeName.js:56 -#: ../root/user/UserProfile.js:46 ../root/utility/tableColumns.js:503 -#: ../root/utility/tableColumns.js:508 +#: ../root/user/UserProfile.js:46 ../root/utility/tableColumns.js:505 +#: ../root/utility/tableColumns.js:510 msgid "Label" msgstr "Plaadifirma" @@ -2469,7 +2431,7 @@ msgstr "Toimetuste eelvaate laadimine..." #: ../root/static/scripts/common/components/FingerprintTable.js:87 #: ../root/static/scripts/edit/components/AddEntityDialog.js:101 #: ../root/static/scripts/release/components/MediumTable.js:118 -#: ../root/utility/tableColumns.js:674 +#: ../root/utility/tableColumns.js:676 msgid "Loading..." msgstr "Laadimine..." @@ -2509,15 +2471,15 @@ msgstr "Päringute arv" #: ../root/components/common-macros.tt:602 #: ../lib/MusicBrainz/Server/Controller/Edit.pm:240 -#: ../root/static/scripts/common/constants.js:276 +#: ../root/static/scripts/common/constants.js:278 msgid "Low" msgstr "madal" #: ../root/release/edit_relationships.tt:172 -#: ../root/edit/details/AddWork.js:81 ../root/edit/details/EditWork.js:98 +#: ../root/edit/details/AddWork.js:83 ../root/edit/details/EditWork.js:100 #: ../root/layout/components/sidebar/WorkSidebar.js:67 #: ../root/search/components/WorkResults.js:55 -#: ../root/static/scripts/work.js:312 ../root/utility/tableColumns.js:873 +#: ../root/static/scripts/work.js:312 ../root/utility/tableColumns.js:875 msgid "Lyrics Languages" msgstr "Sõnade keeled" @@ -2572,22 +2534,6 @@ msgstr "" msgid "Medium track lengths" msgstr "" -#: ../root/edit/details/merge_releases.tt:44 -msgid "Medium {position} is now medium {new_position}" -msgstr "Helikandja {position} on nüüd helikandja {new_position}" - -#: ../root/edit/details/merge_releases.tt:44 -msgid "Medium {position} is now medium {new_position}: {new_name}" -msgstr "Helikandja {position} on nüüd helikandja {new_position}: „{new_name}”" - -#: ../root/edit/details/merge_releases.tt:44 -msgid "Medium {position}: {name} is now medium {new_position}" -msgstr "Helikandja {position}: „{name}” on nüüd helikandja {new_position}" - -#: ../root/edit/details/merge_releases.tt:44 -msgid "Medium {position}: {name} is now medium {new_position}: {new_name}" -msgstr "Helikandja {position}: „{name}” on nüüd helikandja {new_position}: „{new_name}”" - #: ../root/layout/merge-helper.tt:30 #: ../root/layout/components/MergeHelper.js:71 #: ../root/layout/components/sidebar/MergeLink.js:31 @@ -2603,12 +2549,7 @@ msgstr "Mestimisprotsess" msgid "Merge Releases" msgstr "Väljalasete mestimine" -#: ../root/edit/details/merge_releases.tt:149 -#: ../lib/MusicBrainz/Server/Form/Merge/Release.pm:51 -msgid "Merge mediums and recordings" -msgstr "Mestitakse helikandjad ja salvestised" - -#: ../root/edit/details/merge_releases.tt:147 ../root/release/merge.tt:55 +#: ../root/release/merge.tt:55 ../root/edit/details/MergeReleases.js:358 msgid "Merge strategy:" msgstr "Mestimisstrateegia:" @@ -2698,7 +2639,7 @@ msgstr "Minu hääl:" #: ../root/edit/details/AddReleaseGroup.js:56 #: ../root/edit/details/AddSeries.js:46 #: ../root/edit/details/AddStandaloneRecording.js:56 -#: ../root/edit/details/AddWork.js:52 ../root/edit/details/EditArea.js:70 +#: ../root/edit/details/AddWork.js:54 ../root/edit/details/EditArea.js:70 #: ../root/edit/details/EditArtist.js:86 ../root/edit/details/EditEvent.js:57 #: ../root/edit/details/EditInstrument.js:57 #: ../root/edit/details/EditLabel.js:68 ../root/edit/details/EditMedium.js:522 @@ -2708,7 +2649,7 @@ msgstr "Minu hääl:" #: ../root/edit/details/EditRelationshipAttribute.js:76 #: ../root/edit/details/EditRelease.js:75 #: ../root/edit/details/EditReleaseGroup.js:57 -#: ../root/edit/details/EditSeries.js:54 ../root/edit/details/EditWork.js:66 +#: ../root/edit/details/EditSeries.js:54 ../root/edit/details/EditWork.js:68 #: ../root/edit/details/RemoveRelationshipAttribute.js:41 #: ../root/edit/details/RemoveRelationshipType.js:60 #: ../root/edit/details/historic/AddRelease.js:63 @@ -2831,7 +2772,7 @@ msgid "No releases have cover art marked as \"Front\", cannot set cover art." msgstr "Ühelgi väljalaskel pole esikaanepilti, seega ei saa siin kaanepilti määrata." #: ../root/release/edit/tracklist.tt:140 ../root/admin/IpLookup.js:35 -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:457 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:458 #: ../root/static/scripts/common/components/Autocomplete2/constants.js:90 msgid "No results" msgstr "Tulemusi pole" @@ -2876,19 +2817,11 @@ msgstr "" #: ../root/components/common-macros.tt:602 #: ../lib/MusicBrainz/Server/Controller/Edit.pm:240 -#: ../root/static/scripts/common/constants.js:277 -#: ../root/static/scripts/common/constants.js:278 +#: ../root/static/scripts/common/constants.js:279 +#: ../root/static/scripts/common/constants.js:280 msgid "Normal" msgstr "tavaline" -#: ../root/edit/details/merge_releases.tt:158 -#: ../root/edit/details/EditRelease.js:182 -#: ../root/edit/details/SetTrackLengths.js:89 -#: ../root/edit/details/historic/MergeReleases.js:69 -#: ../root/user/ReportUser.js:116 -msgid "Note" -msgstr "Märkus" - #: ../root/release/edit/information.tt:279 msgid "" "Note! If you do not know the month or day of release, please leave them " @@ -3211,13 +3144,13 @@ msgstr "Saadaval võivad olla toimetuse toorandmed." msgid "Recent Notes Left on Your Edits" msgstr "Hiljutised märked minu toimetustele" -#: ../root/components/common-macros.tt:569 -#: ../root/edit/details/merge_releases.tt:108 -#: ../root/edit/search_macros.tt:417 ../root/release/edit_relationships.tt:53 +#: ../root/components/common-macros.tt:569 ../root/edit/search_macros.tt:417 +#: ../root/release/edit_relationships.tt:53 #: ../lib/MusicBrainz/Server/Edit/Recording.pm:7 #: ../lib/MusicBrainz/Server/Form/Search/Search.pm:38 #: ../root/edit/details/AddStandaloneRecording.js:46 #: ../root/edit/details/EditRecording.js:51 +#: ../root/edit/details/MergeReleases.js:322 #: ../root/edit/details/RemoveIsrc.js:40 #: ../root/edit/details/historic/EditTrack.js:37 #: ../root/layout/components/Search.js:30 @@ -3235,10 +3168,6 @@ msgstr "Salvestis" msgid "Recording Details" msgstr "Salvestise üksikasjad" -#: ../root/edit/details/merge_releases.tt:104 -msgid "Recording Merges" -msgstr "Mestitavad salvestised" - #: ../root/user/ratings.tt:2 ../root/user/ratings_summary.tt:3 msgid "Recording ratings" msgstr "Hinded salvestistele" @@ -3298,7 +3227,7 @@ msgstr "Seosetoimetaja" #: ../root/edit/search_macros.tt:417 #: ../root/edit/details/AddRelationshipType.js:78 #: ../root/relationship/linktype/RelationshipTypeIndex.js:41 -#: ../root/utility/tableColumns.js:804 +#: ../root/utility/tableColumns.js:806 msgid "Relationship Type" msgstr "Seose tüüp" @@ -3325,8 +3254,7 @@ msgstr "<span class=\"rel-edit\">Kollase</span> taustaga seoseid muudetakse, <sp #: ../root/cdtoc/attach_artist_releases.tt:15 #: ../root/cdtoc/attach_filter_release.tt:28 ../root/cdtoc/lookup.tt:39 -#: ../root/components/common-macros.tt:569 -#: ../root/edit/details/merge_releases.tt:19 ../root/edit/search_macros.tt:417 +#: ../root/components/common-macros.tt:569 ../root/edit/search_macros.tt:417 #: ../root/release/edit/duplicates.tt:10 ../root/release/merge.tt:12 #: ../lib/MusicBrainz/Server/Edit/Release.pm:8 #: ../lib/MusicBrainz/Server/Form/Search/Search.pm:37 @@ -3337,6 +3265,7 @@ msgstr "<span class=\"rel-edit\">Kollase</span> taustaga seoseid muudetakse, <sp #: ../root/edit/details/EditBarcodes.js:51 #: ../root/edit/details/EditCoverArt.js:51 #: ../root/edit/details/EditReleaseLabel.js:60 +#: ../root/edit/details/MergeReleases.js:252 #: ../root/edit/details/RemoveCoverArt.js:35 #: ../root/edit/details/ReorderCoverArt.js:45 #: ../root/edit/details/ReorderMediums.js:39 @@ -3573,7 +3502,7 @@ msgstr "Eemalda atribuut" #: ../root/components/common-macros.tt:878 #: ../root/components/common-macros.tt:886 #: ../root/components/RemoveFromMergeTableCell.js:39 -#: ../root/utility/tableColumns.js:781 ../root/utility/tableColumns.js:791 +#: ../root/utility/tableColumns.js:783 ../root/utility/tableColumns.js:793 msgid "Remove from merge" msgstr "" @@ -3971,7 +3900,7 @@ msgstr "Vaheta loopealkirjad ja artistinimed" #: ../root/search/components/RecordingResults.js:134 #: ../root/search/components/ReleaseResults.js:112 #: ../root/static/scripts/common/components/TaggerIcon.js:40 -#: ../root/utility/tableColumns.js:834 +#: ../root/utility/tableColumns.js:836 msgid "Tagger" msgstr "Sildistaja" @@ -3997,12 +3926,6 @@ msgstr "Annotatsioon toimib nagu mini-wiki." msgid "The catalog number you have entered looks like an Amazon ASIN." msgstr "Sisestatud katalooginumber näeb välja nagu Amazoni ASIN." -#: ../root/edit/details/merge_releases.tt:159 -msgid "" -"The data in this edit originally came from an older version of this edit, " -"and may not display correctly" -msgstr "Selle toimetuse andmed pärinevad algselt selle toimetuse vanemast versioonist ning nende näitamisel võib esineda vigu." - #: ../root/layout.tt:90 ../root/layout/index.js:275 msgid "" "The data you have submitted does not make any changes to the data already " @@ -4186,12 +4109,6 @@ msgstr "Plaadi lõpus on andmerada" msgid "This disc has a hidden pregap track before track 1" msgstr "Plaadi alguses enne esimest rada on peidetud pregap-rada" -#: ../root/edit/details/merge_releases.tt:133 -msgid "" -"This edit does not store recording merge information and is closed, so no " -"recording merge information can be shown." -msgstr "See toimetus ei hõlma salvestiste mestimise teavet ning kuna see on juba suletud, pole salvestiste mestimise teavet võimalik näidata." - #: ../root/cdtoc/set_durations.tt:31 msgid "This edit would only make subsecond changes to track lengths." msgstr "" @@ -4323,8 +4240,8 @@ msgid "This recording cannot be removed because it is still used on releases." msgstr "Seda salvestist ei saa eemaldada, kuna see on mõnel väljalaskel ikka veel kasutusel." #: ../root/components/common-macros.tt:302 -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:696 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:286 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:697 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:287 #: ../root/static/scripts/common/components/EntityLink.js:289 msgid "This recording is a video" msgstr "See salvestis on video" @@ -4356,10 +4273,6 @@ msgid "" " relationships." msgstr "See väljalaskerühm eemaldatakse automaatselt, kui sel enam väljalaskeid ega seoseid pole." -#: ../root/edit/details/merge_releases.tt:35 -msgid "This release has no media to merge." -msgstr "" - #: ../root/release/discids.tt:58 msgid "This release has no mediums that can have disc IDs." msgstr "" @@ -4495,14 +4408,10 @@ msgid "Total tracks:" msgstr "Radade arv:" #: ../root/cdtoc/info.tt:31 ../root/search/components/RecordingResults.js:135 -#: ../root/taglookup/Form.js:41 ../root/utility/tableColumns.js:846 +#: ../root/taglookup/Form.js:41 ../root/utility/tableColumns.js:848 msgid "Track" msgstr "Rada" -#: ../root/edit/details/merge_releases.tt:107 -msgid "Track #" -msgstr "Loo nr" - #: ../root/release/edit/tracklist.tt:483 #: ../root/static/scripts/release-editor/dialogs.js:40 msgid "Track Parser" @@ -4537,11 +4446,11 @@ msgstr "Lugu {n}:" msgid "Tracklist" msgstr "Lugude nimekiri" -#: ../root/edit/details/merge_releases.tt:22 ../root/release/discids.tt:9 -#: ../root/release/edit/duplicates.tt:12 ../root/release/merge.tt:15 -#: ../root/artist_credit/ArtistCreditIndex.js:128 +#: ../root/release/discids.tt:9 ../root/release/edit/duplicates.tt:12 +#: ../root/release/merge.tt:15 ../root/artist_credit/ArtistCreditIndex.js:128 #: ../root/artist_credit/ArtistCreditLayout.js:31 #: ../root/components/list/ReleaseList.js:103 +#: ../root/edit/details/MergeReleases.js:255 #: ../root/edit/details/historic/AddRelease.js:113 #: ../root/release_group/ReleaseGroupIndex.js:158 #: ../root/search/components/CDStubResults.js:49 @@ -4585,7 +4494,7 @@ msgstr "Twitter" #: ../root/edit/details/AddLabel.js:107 ../root/edit/details/AddPlace.js:65 #: ../root/edit/details/AddReleaseGroup.js:80 #: ../root/edit/details/AddRemoveAlias.js:101 -#: ../root/edit/details/AddSeries.js:57 ../root/edit/details/AddWork.js:69 +#: ../root/edit/details/AddSeries.js:57 ../root/edit/details/AddWork.js:71 #: ../root/edit/details/EditAlias.js:123 ../root/edit/details/EditArea.js:91 #: ../root/edit/details/EditArtist.js:107 ../root/edit/details/EditEvent.js:78 #: ../root/edit/details/EditInstrument.js:71 @@ -4616,12 +4525,12 @@ msgstr "Twitter" #: ../root/static/scripts/account/components/ApplicationForm.js:87 #: ../root/static/scripts/alias/AliasEditForm.js:329 #: ../root/static/scripts/collection/components/CollectionEditForm.js:83 -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:874 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:447 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:875 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:448 #: ../root/static/scripts/common/components/FilterForm.js:63 -#: ../root/static/scripts/edit/externalLinks.js:904 -#: ../root/static/scripts/edit/externalLinks.js:1157 -#: ../root/utility/tableColumns.js:613 ../root/utility/tableColumns.js:618 +#: ../root/static/scripts/edit/externalLinks.js:941 +#: ../root/static/scripts/edit/externalLinks.js:1181 +#: ../root/utility/tableColumns.js:615 ../root/utility/tableColumns.js:620 msgid "Type" msgstr "Tüüp" @@ -4932,8 +4841,8 @@ msgstr "Transklusioonitoimetaja" #: ../root/components/common-macros.tt:569 ../root/edit/search_macros.tt:417 #: ../lib/MusicBrainz/Server/Edit/Work.pm:9 #: ../lib/MusicBrainz/Server/Form/Search/Search.pm:39 -#: ../root/components/list/WorkList.js:60 ../root/edit/details/AddWork.js:46 -#: ../root/edit/details/EditWork.js:59 ../root/edit/details/RemoveIswc.js:40 +#: ../root/components/list/WorkList.js:60 ../root/edit/details/AddWork.js:48 +#: ../root/edit/details/EditWork.js:61 ../root/edit/details/RemoveIswc.js:40 #: ../root/layout/components/Search.js:34 #: ../root/report/IswcsWithManyWorks.js:49 #: ../root/report/components/WorkList.js:46 @@ -5198,22 +5107,13 @@ msgid "" " please make sure the artists have been entered correctly." msgstr "Oled mõne alloleva loo jaoks kasutanud eriotstarbelist artisti „{valink|erinevad esitajad}”. Lugude puhul sobib see väga harva, seega palun vaata, et artistid oleks õigesti sisestatud." -#: ../root/edit/details/merge_releases.tt:5 -#: ../root/components/list/ReleaseList.js:90 -#: ../root/release_group/ReleaseGroupIndex.js:89 -#: ../root/search/components/ReleaseResults.js:50 -#: ../root/static/scripts/release-editor/duplicates.js:143 -msgid "[missing media]" -msgstr "" - #: ../root/components/common-macros.tt:259 #: ../lib/MusicBrainz/Server/Edit/Relationship/RemoveLinkType.pm:86 #: ../lib/MusicBrainz/Server/Edit/Release/Create.pm:113 -#: ../lib/MusicBrainz/Server/Edit/Work/Create.pm:87 -#: ../lib/MusicBrainz/Server/Edit/Work/Edit.pm:186 #: ../root/edit/details/EditAlias.js:94 #: ../root/edit/details/SetTrackLengths.js:73 #: ../root/static/scripts/common/components/EntityLink.js:41 +#: ../root/static/scripts/common/i18n/localizeLanguageName.js:15 msgid "[removed]" msgstr "[eemaldatud]" @@ -5359,6 +5259,10 @@ msgstr "ajalooline, kuni {end}" msgid "historical, {begin}-{end}" msgstr "ajalooline, {begin}–{end}" +#: ../root/edit/search_macros.tt:25 +msgid "in an unspecified order (possibly faster)" +msgstr "" + #: ../root/edit/details/macros.tt:28 #: ../root/utility/relationshipDateText.js:25 msgid "in {date}" @@ -5514,10 +5418,6 @@ msgid_plural "plus {n} other private collections" msgstr[0] "ja veel {n} privaatne kogu" msgstr[1] "ja veel {n} privaatset kogu" -#: ../root/edit/search_macros.tt:25 -msgid "randomly" -msgstr "juhuslikus järjekorras" - #: ../root/edit/search_macros.tt:25 msgid "recently closed first" msgstr "kõigepealt viimati suletud" @@ -5729,7 +5629,7 @@ msgstr "« Tagasi" #: ../root/components/paginator.tt:19 ../root/components/paginator.tt:31 #: ../root/components/paginator.tt:39 ../root/components/Paginator.js:94 #: ../root/components/Paginator.js:119 ../root/components/Paginator.js:133 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:125 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:126 msgid "…" msgstr "…" @@ -6129,14 +6029,6 @@ msgstr "MusicBrainzis on juba selle plaadi-ID-ga väljalaskeid" msgid "There is already a CD stub with this disc ID" msgstr "MusicBrainzis on juba selle plaadi-ID-ga CD-mustand" -#: ../lib/MusicBrainz/Server/Data/Language.pm:63 -#: ../lib/MusicBrainz/Server/Edit/Work/Create.pm:75 -#: ../lib/MusicBrainz/Server/Edit/Work/Create.pm:85 -#: ../lib/MusicBrainz/Server/Edit/Work/Edit.pm:184 -#: ../lib/MusicBrainz/Server/Form/Utils.pm:48 -msgid "[No lyrics]" -msgstr "[sõnu pole]" - #: ../lib/MusicBrainz/Server/Data/LinkType.pm:197 #, perl-brace-format msgid "{t0}-{t1} relationships" @@ -6378,7 +6270,7 @@ msgstr "Väljalaske teisendamine ühe artisti nime alla (ajalooline)" #: ../lib/MusicBrainz/Server/Edit/Historic/MergeRelease.pm:13 #: ../lib/MusicBrainz/Server/Edit/Historic/MergeReleaseMAC.pm:9 -#: ../lib/MusicBrainz/Server/Edit/Release/Merge.pm:140 +#: ../lib/MusicBrainz/Server/Edit/Release/Merge.pm:141 msgid "Merge releases" msgstr "Väljalasete mestimine" @@ -6662,7 +6554,7 @@ msgctxt "medium format" msgid "(unknown)" msgstr "(teadmata)" -#: ../lib/MusicBrainz/Server/Edit/Release/Merge.pm:347 +#: ../lib/MusicBrainz/Server/Edit/Release/Merge.pm:339 #, perl-brace-format msgid "These releases could not be merged: {reason}" msgstr "" @@ -7300,6 +7192,16 @@ msgstr "" msgid "Please pick the entity you want the others merged into." msgstr "Palun vali olem, millesse ülejäänud mestida." +#: ../lib/MusicBrainz/Server/Form/Merge/Release.pm:50 +#: ../root/edit/details/MergeReleases.js:65 +msgid "Append mediums to target release" +msgstr "Helikandjad lisatakse sihtväljalaskele" + +#: ../lib/MusicBrainz/Server/Form/Merge/Release.pm:51 +#: ../root/edit/details/MergeReleases.js:66 +msgid "Merge mediums and recordings" +msgstr "Mestitakse helikandjad ja salvestised" + #: ../lib/MusicBrainz/Server/Form/Merge/Release.pm:62 msgid "Another medium is already in this position" msgstr "Sellel kohal on juba helikandja" @@ -7347,22 +7249,22 @@ msgid "A fluency level is required." msgstr "" #: ../lib/MusicBrainz/Server/Form/Role/UserProfile.pm:70 -#: ../root/static/scripts/common/constants.js:287 +#: ../root/static/scripts/common/constants.js:289 msgid "Basic" msgstr "algtase" #: ../lib/MusicBrainz/Server/Form/Role/UserProfile.pm:71 -#: ../root/static/scripts/common/constants.js:288 +#: ../root/static/scripts/common/constants.js:290 msgid "Intermediate" msgstr "kesktase" #: ../lib/MusicBrainz/Server/Form/Role/UserProfile.pm:72 -#: ../root/static/scripts/common/constants.js:286 +#: ../root/static/scripts/common/constants.js:288 msgid "Advanced" msgstr "kõrgtase" #: ../lib/MusicBrainz/Server/Form/Role/UserProfile.pm:73 -#: ../root/static/scripts/common/constants.js:289 +#: ../root/static/scripts/common/constants.js:291 msgid "Native" msgstr "emakeel" @@ -7504,6 +7406,11 @@ msgstr "2 nädalat" msgid "A month" msgstr "Kuu" +#: ../lib/MusicBrainz/Server/Form/Utils.pm:48 +#: ../root/static/scripts/common/i18n/localizeLanguageName.js:19 +msgid "[No lyrics]" +msgstr "[sõnu pole]" + #: ../lib/MusicBrainz/Server/Form/Utils.pm:84 msgctxt "script optgroup" msgid "Frequently used" @@ -7843,7 +7750,7 @@ msgstr "Juurdepääs" #: ../root/components/Aliases/AliasTable.js:31 #: ../root/components/Aliases/ArtistCreditList.js:54 #: ../root/static/scripts/common/components/FingerprintTable.js:53 -#: ../root/utility/tableColumns.js:78 +#: ../root/utility/tableColumns.js:80 msgid "Actions" msgstr "Toimingud" @@ -7976,7 +7883,7 @@ msgstr "Vabatekst" #: ../root/edit/details/AddRelationshipType.js:191 #: ../root/edit/details/RemoveRelationshipType.js:136 #: ../root/relationship/linktype/RelationshipTypeIndex.js:165 -#: ../root/utility/tableColumns.js:626 +#: ../root/utility/tableColumns.js:628 msgid "Attributes" msgstr "Atribuudid" @@ -7997,12 +7904,12 @@ msgstr "Atribuuti pole võimalik eemaldada" #: ../root/admin/attributes/Language.js:33 #: ../root/admin/attributes/Language.js:36 -#: ../root/edit/details/AddRelease.js:108 ../root/edit/details/AddWork.js:75 +#: ../root/edit/details/AddRelease.js:108 ../root/edit/details/AddWork.js:77 #: ../root/edit/details/EditRelease.js:131 #: ../root/edit/details/historic/AddRelease.js:104 ../root/iswc/Index.js:59 #: ../root/report/IswcsWithManyWorks.js:53 #: ../root/search/components/ReleaseResults.js:107 -#: ../root/utility/tableColumns.js:524 +#: ../root/utility/tableColumns.js:526 msgid "Language" msgstr "Keel" @@ -8919,6 +8826,19 @@ msgstr "" msgid "The provided relationship type ID is not valid." msgstr "" +#: ../root/components/ReleaseLanguageScript.js:24 +#: ../root/components/ReleaseLanguageScript.js:30 +#: ../root/components/list/ReleaseList.js:100 +#: ../root/edit/details/MergeReleases.js:88 ../root/release/CoverArt.js:92 +#: ../root/release_group/ReleaseGroupIndex.js:90 +#: ../root/search/components/ReleaseResults.js:55 +#: ../root/static/scripts/common/components/ReleaseEvents.js:55 +#: ../root/static/scripts/common/components/ReleaseEvents.js:72 +#: ../root/static/scripts/release-editor/duplicates.js:145 +msgctxt "missing data" +msgid "-" +msgstr "-" + #: ../root/components/StaticRelationshipsDisplay.js:25 msgid "{start_track}–{end_track}" msgstr "" @@ -9101,6 +9021,14 @@ msgstr "Aadress" msgid "Unspecified type" msgstr "määramata tüüpi" +#: ../root/components/list/ReleaseList.js:90 +#: ../root/edit/details/MergeReleases.js:83 +#: ../root/release_group/ReleaseGroupIndex.js:89 +#: ../root/search/components/ReleaseResults.js:50 +#: ../root/static/scripts/release-editor/duplicates.js:143 +msgid "[missing media]" +msgstr "" + #: ../root/components/list/ReleaseList.js:153 #: ../root/search/components/ReleaseResults.js:109 msgid "Status" @@ -9110,8 +9038,8 @@ msgstr "Staatus" #: ../root/report/IswcsWithManyWorks.js:50 #: ../root/report/components/WorkList.js:51 #: ../root/search/components/WorkResults.js:51 -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:894 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:454 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:895 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:455 msgid "Writers" msgstr "Autorid" @@ -9229,22 +9157,22 @@ msgid "" msgstr "{edit} on saanud mõne vastuhääle; selle heakskiitmiseks pead jätma toimetusmärke." #: ../root/edit/components/EditHeader.js:46 -#: ../root/edit/components/EditorTypeInfo.js:28 +#: ../root/edit/components/EditorTypeInfo.js:29 msgid "This user is new to MusicBrainz." msgstr "See kasutaja on MusicBrainzis uus." #: ../root/edit/components/EditHeader.js:48 -#: ../root/edit/components/EditorTypeInfo.js:30 +#: ../root/edit/components/EditorTypeInfo.js:31 msgid "beginner" msgstr "algaja" #: ../root/edit/components/EditHeader.js:55 -#: ../root/edit/components/EditorTypeInfo.js:38 +#: ../root/edit/components/EditorTypeInfo.js:39 msgid "This user is automated." msgstr "See kasutaja on automaat." #: ../root/edit/components/EditHeader.js:56 -#: ../root/edit/components/EditorTypeInfo.js:39 +#: ../root/edit/components/EditorTypeInfo.js:40 msgid "bot" msgstr "bot" @@ -9550,7 +9478,7 @@ msgstr "Lokaadi esmane" #: ../root/edit/details/AddSeries.js:65 ../root/edit/details/EditSeries.js:79 #: ../root/layout/components/sidebar/SeriesSidebar.js:52 -#: ../root/utility/tableColumns.js:819 +#: ../root/utility/tableColumns.js:821 msgid "Ordering Type" msgstr "Järjestuse tüüp" @@ -9636,6 +9564,14 @@ msgstr "Vana artist" msgid "New Artist" msgstr "Uus artist" +#: ../root/edit/details/EditRelease.js:182 +#: ../root/edit/details/MergeReleases.js:364 +#: ../root/edit/details/SetTrackLengths.js:89 +#: ../root/edit/details/historic/MergeReleases.js:69 +#: ../root/user/ReportUser.js:116 +msgid "Note" +msgstr "Märkus" + #: ../root/edit/details/EditRelease.js:183 msgid "This edit also changed the track artists." msgstr "" @@ -9667,7 +9603,7 @@ msgstr "See toimetus oli mestimine." msgid "Search for the target URL." msgstr "Otsi siht-URL-i" -#: ../root/edit/details/EditWork.js:87 +#: ../root/edit/details/EditWork.js:89 msgid "Work type" msgstr "" @@ -9684,10 +9620,71 @@ msgstr "" msgid "Merge:" msgstr "Mestitakse:" +#: ../root/edit/details/MergeAreas.js:35 +#: ../root/edit/details/MergeArtists.js:37 +#: ../root/edit/details/MergeEvents.js:40 +#: ../root/edit/details/MergeInstruments.js:35 +#: ../root/edit/details/MergeLabels.js:35 +#: ../root/edit/details/MergePlaces.js:35 +#: ../root/edit/details/MergeRecordings.js:40 +#: ../root/edit/details/MergeReleaseGroups.js:35 +#: ../root/edit/details/MergeReleases.js:288 +#: ../root/edit/details/MergeReleases.js:295 +#: ../root/edit/details/MergeReleases.js:305 +#: ../root/edit/details/MergeReleases.js:323 +#: ../root/edit/details/MergeSeries.js:35 +#: ../root/edit/details/MergeWorks.js:35 +msgid "Into:" +msgstr "Järgnevasse:" + #: ../root/edit/details/MergeArtists.js:43 msgid "Rename artist and relationship credits" msgstr "" +#: ../root/edit/details/MergeReleases.js:131 +msgid "Medium {position}: {name} is now medium {new_position}: {new_name}" +msgstr "Helikandja {position}: „{name}” on nüüd helikandja {new_position}: „{new_name}”" + +#: ../root/edit/details/MergeReleases.js:142 +msgid "Medium {position}: {name} is now medium {new_position}" +msgstr "Helikandja {position}: „{name}” on nüüd helikandja {new_position}" + +#: ../root/edit/details/MergeReleases.js:151 +msgid "Medium {position} is now medium {new_position}: {new_name}" +msgstr "Helikandja {position} on nüüd helikandja {new_position}: „{new_name}”" + +#: ../root/edit/details/MergeReleases.js:162 +msgid "Medium {position} is now medium {new_position}" +msgstr "Helikandja {position} on nüüd helikandja {new_position}" + +#: ../root/edit/details/MergeReleases.js:271 +msgid "This release has no media to merge." +msgstr "" + +#: ../root/edit/details/MergeReleases.js:318 +msgid "Recording Merges" +msgstr "Mestitavad salvestised" + +#: ../root/edit/details/MergeReleases.js:321 +msgid "Track #" +msgstr "Loo nr" + +#: ../root/edit/details/MergeReleases.js:333 +msgid "" +"This edit does not store recording merge information and is closed, so no " +"recording merge information can be shown." +msgstr "See toimetus ei hõlma salvestiste mestimise teavet ning kuna see on juba suletud, pole salvestiste mestimise teavet võimalik näidata." + +#: ../root/edit/details/MergeReleases.js:350 +msgid "All recordings for these releases are already merged." +msgstr "Kõik nende väljalasete salvestised on juba mestitud." + +#: ../root/edit/details/MergeReleases.js:366 +msgid "" +"The data in this edit originally came from an older version of this edit, " +"and may not display correctly" +msgstr "Selle toimetuse andmed pärinevad algselt selle toimetuse vanemast versioonist ning nende näitamisel võib esineda vigu." + #: ../root/edit/details/MoveDiscId.js:46 #: ../root/edit/details/historic/MoveDiscId.js:41 msgid "From:" @@ -10759,7 +10756,7 @@ msgstr "Dokumentatsiooniregister" #: ../root/relationship/RelationshipsHeader.js:19 #: ../root/relationship/linktype/RelationshipTypeIndex.js:61 #: ../root/relationship/linktype/RelationshipTypesList.js:62 -#: ../root/utility/tableColumns.js:343 +#: ../root/utility/tableColumns.js:345 msgid "Relationship Types" msgstr "Seosetüübid" @@ -11175,7 +11172,7 @@ msgstr "Litsents" #: ../root/layout/components/sidebar/SidebarRating.js:25 #: ../root/static/scripts/release/components/MediumTable.js:223 -#: ../root/utility/tableColumns.js:437 +#: ../root/utility/tableColumns.js:439 msgid "Rating" msgstr "Hinne" @@ -11999,7 +11996,7 @@ msgid "" msgstr "Kas oled kindel, et soovid eemaldada alloleva kaanepildi artisti {artist} väljalaskelt „{release}”?" #: ../root/release_group/ReleaseGroupHeader.js:30 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:404 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:405 msgid "Release group by {artist}" msgstr "väljalaskerühm ~ {artist}" @@ -13289,9 +13286,9 @@ msgstr "" #: ../root/report/ReportsIndex.js:574 #: ../root/search/components/RecordingResults.js:132 -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:728 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:311 -#: ../root/utility/tableColumns.js:655 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:729 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:312 +#: ../root/utility/tableColumns.js:657 msgid "ISRCs" msgstr "ISRC-d" @@ -13539,7 +13536,7 @@ msgstr "Muud päringud" #: ../root/search/components/ArtistResults.js:55 #: ../root/search/components/LabelResults.js:68 #: ../root/search/components/PlaceResults.js:65 -#: ../root/utility/tableColumns.js:150 ../root/utility/tableColumns.js:155 +#: ../root/utility/tableColumns.js:152 ../root/utility/tableColumns.js:157 msgid "Begin" msgstr "Algus" @@ -13557,9 +13554,9 @@ msgid "Documentation Search" msgstr "Dokumentatsiooni otsing" #: ../root/search/components/EventResults.js:71 -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:1044 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:183 -#: ../root/utility/tableColumns.js:358 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:1045 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:184 +#: ../root/utility/tableColumns.js:360 msgid "Location" msgstr "Asukoht" @@ -13869,7 +13866,7 @@ msgid "Show more artist credits" msgstr "" #: ../root/static/scripts/artist/components/ArtistCreditRenamer.js:254 -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:464 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:465 #: ../root/static/scripts/common/components/Autocomplete2/constants.js:103 #: ../root/static/scripts/common/components/Collapsible.js:76 msgid "Show more..." @@ -13899,56 +13896,56 @@ msgstr "Loo kogu" msgid "Update collection" msgstr "Uuenda kogu" -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:82 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:83 #: ../root/static/scripts/common/components/Autocomplete2/constants.js:96 msgid "An error occurred while searching. Click here to try again." msgstr "Otsimisel ilmnes viga. Uuestiproovimiseks klõpsa siin." -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:87 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:88 msgid "Try with direct search instead." msgstr "Proovi selle asemel otsese otsinguga." -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:88 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:89 msgid "Try with indexed search instead." msgstr "Proovi selle asemel indekseeritud otsinguga." -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:120 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:121 #: ../root/static/scripts/common/components/Autocomplete2.js:648 msgid "Type to search, or paste an MBID" msgstr "Kirjuta otsitav sõna või kopeeri MBID" -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:202 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:203 #: ../root/static/scripts/common/components/Autocomplete2/constants.js:51 msgid "Clear recent items" msgstr "Puhasta loend" -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:471 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:472 #: ../root/static/scripts/common/components/Autocomplete2/constants.js:110 msgid "Not found? Try again with direct search." msgstr "Tulemusteta? Proovi otsese otsinguga." -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:472 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:473 #: ../root/static/scripts/common/components/Autocomplete2/constants.js:117 msgid "Slow? Switch back to indexed search." msgstr "Aeglane? Lülita tagasi indekseeritud otsingule." -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:715 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:303 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:716 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:304 msgid "appears on" msgstr "" -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:721 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:307 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:722 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:308 msgid "standalone recording" msgstr "" -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:815 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:399 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:816 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:400 msgid "{release_group_type} by {artist}" msgstr "{release_group_type} ~ {artist}" -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:1043 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:180 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:1044 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:181 msgid "Performers" msgstr "" @@ -14062,11 +14059,11 @@ msgstr "" msgid "Search for a work" msgstr "" -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:298 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:299 msgid "by {artist}" msgstr "Artist: {artist}" -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:362 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:363 msgid "{first_list_item} … {last_list_item}" msgstr "{first_list_item} … {last_list_item}" @@ -14407,181 +14404,191 @@ msgstr "Loomiskoht:" msgid "Dissolved in:" msgstr "Laialiminekukoht:" -#: ../root/static/scripts/edit/URLCleanup.js:360 +#: ../root/static/scripts/edit/URLCleanup.js:361 msgid "" "Please link to a channel, not a specific video. Videos should be linked to " "the appropriate recordings or releases instead." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:366 +#: ../root/static/scripts/edit/URLCleanup.js:367 msgid "" "Please link to a specific video. Add channel pages to the relevant artist, " "label, etc. instead." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:533 +#: ../root/static/scripts/edit/URLCleanup.js:534 msgid "" "Allmusic “{album_url_pattern}” links should be added to release groups. To " "find the appropriate release link for this release, please check the " "Releases tab from {album_url|your link}." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:753 +#: ../root/static/scripts/edit/URLCleanup.js:754 msgid "" "Only Apple Books “{artist_url_pattern}” pages can be added directly to " "artists. Please link audiobooks to the appropriate release instead." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:769 +#: ../root/static/scripts/edit/URLCleanup.js:770 msgid "" "Only Apple Books audiobooks can be added to MusicBrainz. Consider adding " "books to {bookbrainz_url|BookBrainz} instead." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:856 +#: ../root/static/scripts/edit/URLCleanup.js:857 msgid "" "Please link to the main page for the artist, not to a specific album or " "track." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:868 +#: ../root/static/scripts/edit/URLCleanup.js:869 msgid "" "Please link to the main page for the label, not to a specific album or " "track." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:1052 +#: ../root/static/scripts/edit/URLCleanup.js:1053 msgid "Please link to the main page for the artist, not a specific product." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:1054 +#: ../root/static/scripts/edit/URLCleanup.js:1055 msgid "Please link to the main page for the label, not a specific product." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:1597 +#: ../root/static/scripts/edit/URLCleanup.js:1600 msgid "" "Discogs “{master_url_pattern}” links group several releases, so this should " "be added to the release group instead." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:2086 +#: ../root/static/scripts/edit/URLCleanup.js:2090 msgid "" "Only IMSLP “{category_url_pattern}” links are allowed for artists. Please " "link work pages to the specific work in question." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:2104 +#: ../root/static/scripts/edit/URLCleanup.js:2108 msgid "" "IMSLP “{category_url_pattern}” links are only allowed for artists. Please " "link the specific work page to this work instead, if available." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:2149 +#: ../root/static/scripts/edit/URLCleanup.js:2153 msgid "" "Instagram “{explore_url_pattern}” links are not allowed. Please link to a " "profile instead, if there is one." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:2177 +#: ../root/static/scripts/edit/URLCleanup.js:2181 msgid "" "Please do not link directly to images, link to the appropriate Instagram " "profile page instead. If you want to link to a video, {url|add a standalone " "recording} for it instead." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:2202 +#: ../root/static/scripts/edit/URLCleanup.js:2206 msgid "This is an internal Instagram page and should not be added." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:2278 +#: ../root/static/scripts/edit/URLCleanup.js:2282 msgid "" "Only iTunes “{artist_url_pattern}” pages can be added directly to artists. " "Please link albums, videos, etc. to the appropriate release or recording " "instead." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:2890 +#: ../root/static/scripts/edit/URLCleanup.js:2895 msgid "" "Musixmatch “{album_url_pattern}” pages are a bad match for MusicBrainz " "release groups, and linking to them is currently disallowed. Please consider" " adding Musixmatch links to the relevant artists and works instead." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:2993 +#: ../root/static/scripts/edit/URLCleanup.js:2998 msgid "" "This is a redirect link. Please follow {redirect_url|your link} and add the " "link it redirects to instead." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:3504 +#: ../root/static/scripts/edit/URLCleanup.js:3464 +msgid "Only RYM music videos can be linked to recordings." +msgstr "" + +#: ../root/static/scripts/edit/URLCleanup.js:3516 msgid "" "This is a link to the old Resident Advisor domain. Please follow " "{ra_url|your link}, make sure the link it redirects to is still the correct " "one and, if so, add that link instead." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4092 +#: ../root/static/scripts/edit/URLCleanup.js:4143 msgid "This is not a profile, but a Twitter documentation page." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4106 +#: ../root/static/scripts/edit/URLCleanup.js:4157 msgid "Please link to Twitter profiles, not tweets." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4124 +#: ../root/static/scripts/edit/URLCleanup.js:4175 msgid "This site does not allow direct links to their images." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4331 +#: ../root/static/scripts/edit/URLCleanup.js:4372 +msgid "" +"Please link to the “{allowed_url_pattern}” page rather than this " +"“{current_url_pattern}” link." +msgstr "" + +#: ../root/static/scripts/edit/URLCleanup.js:4428 msgid "" "There is an unencoded “?” or “#” character in this URL. Please check whether" " it is useless and should be removed, or whether it is an error and the URL " "is misencoded." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4351 +#: ../root/static/scripts/edit/URLCleanup.js:4448 msgid "" "Please do not link directly to WhoSampled “{unwanted_url_pattern}” pages. " "Link to the appropriate WhoSampled artist, track or album page instead." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4372 +#: ../root/static/scripts/edit/URLCleanup.js:4469 msgid "Please link WhoSampled “{album_url_pattern}” pages to release groups." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4390 +#: ../root/static/scripts/edit/URLCleanup.js:4487 msgid "Please link WhoSampled artist pages to artists." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4402 +#: ../root/static/scripts/edit/URLCleanup.js:4499 msgid "Please link WhoSampled track pages to recordings." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4469 +#: ../root/static/scripts/edit/URLCleanup.js:4566 msgid "" "Links to specific sections of Wikipedia articles are not allowed. Please " "remove “{fragment}” if still appropriate. See the {url|guidelines}." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4570 +#: ../root/static/scripts/edit/URLCleanup.js:4669 msgid "Only video and playlist links are allowed on releases." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4606 +#: ../root/static/scripts/edit/URLCleanup.js:4705 msgid "" "Wikipedia normally has no entries for specific releases, so adding Wikipedia" " links to a release is currently blocked. Please add this Wikipedia link to " "the release group instead, if appropriate." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4618 +#: ../root/static/scripts/edit/URLCleanup.js:4717 msgid "" "Wikidata normally has no entries for specific releases, so adding Wikidata " "links to a release is currently blocked. Please add this Wikidata link to " "the release group instead, if appropriate." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4630 +#: ../root/static/scripts/edit/URLCleanup.js:4729 msgid "" "This is a Bandcamp profile, not a page for a specific release. Even if it " "shows this release right now, that can change when the artist releases " @@ -14590,7 +14597,7 @@ msgid "" "add this profile link to the appropriate artist or label." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4658 +#: ../root/static/scripts/edit/URLCleanup.js:4757 msgid "" "This is a Bandcamp profile, not a page for a specific recording. Even if it " "shows a single recording right now, that can change when the artist releases" @@ -14599,12 +14606,12 @@ msgid "" "the appropriate artist or label." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4821 +#: ../root/static/scripts/edit/URLCleanup.js:4920 msgid "Some relationship types are missing for this URL." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4838 -#: ../root/static/scripts/edit/externalLinks.js:743 +#: ../root/static/scripts/edit/URLCleanup.js:4937 +#: ../root/static/scripts/edit/externalLinks.js:767 msgid "This relationship type combination is invalid." msgstr "" @@ -14767,49 +14774,93 @@ msgstr "Palun vali sisestatud URL-ile lingitüüp." msgid "This relationship already exists." msgstr "See seos on juba olemas." -#: ../root/static/scripts/edit/externalLinks.js:609 +#: ../root/static/scripts/edit/externalLinks.js:607 #: ../root/static/scripts/relationship-editor/common/dialog.js:565 msgid "" "This URL is not allowed for the selected link type, or is incorrectly " "formatted." msgstr "Valitud lingitüüp kas ei luba seda URL-i või pole see korrektsel kujul." -#: ../root/static/scripts/edit/externalLinks.js:615 +#: ../root/static/scripts/edit/externalLinks.js:612 msgid "This URL is not allowed for the selected link type." msgstr "" -#: ../root/static/scripts/edit/externalLinks.js:674 +#: ../root/static/scripts/edit/externalLinks.js:618 +msgid "This URL is not allowed for areas." +msgstr "" + +#: ../root/static/scripts/edit/externalLinks.js:620 +msgid "This URL is not allowed for artists." +msgstr "" + +#: ../root/static/scripts/edit/externalLinks.js:622 +msgid "This URL is not allowed for events." +msgstr "" + +#: ../root/static/scripts/edit/externalLinks.js:624 +msgid "This URL is not allowed for instruments." +msgstr "" + +#: ../root/static/scripts/edit/externalLinks.js:626 +msgid "This URL is not allowed for labels." +msgstr "" + +#: ../root/static/scripts/edit/externalLinks.js:628 +msgid "This URL is not allowed for places." +msgstr "" + +#: ../root/static/scripts/edit/externalLinks.js:630 +msgid "This URL is not allowed for recordings." +msgstr "" + +#: ../root/static/scripts/edit/externalLinks.js:632 +msgid "This URL is not allowed for releases." +msgstr "" + +#: ../root/static/scripts/edit/externalLinks.js:634 +msgid "This URL is not allowed for release groups." +msgstr "" + +#: ../root/static/scripts/edit/externalLinks.js:637 +msgid "This URL is not allowed for series." +msgstr "" + +#: ../root/static/scripts/edit/externalLinks.js:639 +msgid "This URL is not allowed for works." +msgstr "" + +#: ../root/static/scripts/edit/externalLinks.js:698 msgid "" "Note: This link already exists at position #{position}. To merge, press " "enter or select a type." msgstr "" -#: ../root/static/scripts/edit/externalLinks.js:861 +#: ../root/static/scripts/edit/externalLinks.js:885 #: ../root/static/scripts/relationship-editor/common/dialog.js:418 msgid "{description} ({url|more documentation})" msgstr "{description} ({url|Veel dokumentatsiooni})" -#: ../root/static/scripts/edit/externalLinks.js:959 +#: ../root/static/scripts/edit/externalLinks.js:930 +msgid "Remove Relationship" +msgstr "Seose eemaldamine" + +#: ../root/static/scripts/edit/externalLinks.js:996 msgid "video" msgstr "video" -#: ../root/static/scripts/edit/externalLinks.js:990 -msgid "Remove Relationship" -msgstr "Seose eemaldamine" +#: ../root/static/scripts/edit/externalLinks.js:1091 +msgid "Remove Link" +msgstr "Eemalda link" -#: ../root/static/scripts/edit/externalLinks.js:1076 +#: ../root/static/scripts/edit/externalLinks.js:1120 msgid "Add link" msgstr "" -#: ../root/static/scripts/edit/externalLinks.js:1079 +#: ../root/static/scripts/edit/externalLinks.js:1123 msgid "Add another link" msgstr "" -#: ../root/static/scripts/edit/externalLinks.js:1131 -msgid "Remove Link" -msgstr "Eemalda link" - -#: ../root/static/scripts/edit/externalLinks.js:1180 +#: ../root/static/scripts/edit/externalLinks.js:1205 msgid "Add another relationship" msgstr "" @@ -16021,11 +16072,11 @@ msgstr "See toimetus nurjus, kuna puudutas kõrge kvaliteediga andmeid ja ei saa msgid "This edit was cancelled." msgstr "See toimetus on tühistatud." -#: ../root/utility/tableColumns.js:741 +#: ../root/utility/tableColumns.js:743 msgid "AcoustIDs" msgstr "" -#: ../root/utility/tableColumns.js:827 +#: ../root/utility/tableColumns.js:829 msgid "Subscribed" msgstr "Jälgitav" diff --git a/po/mb_server.fi.po b/po/mb_server.fi.po index e38774f4e1a..fbe75e00a87 100644 --- a/po/mb_server.fi.po +++ b/po/mb_server.fi.po @@ -31,9 +31,9 @@ msgid "" msgstr "" "Project-Id-Version: MusicBrainz\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-09-13 18:38-0500\n" -"PO-Revision-Date: 2021-09-13 23:42+0000\n" -"Last-Translator: Michael Wiencek <email address hidden>\n" +"POT-Creation-Date: 2021-09-28 21:37+0300\n" +"PO-Revision-Date: 2021-09-28 18:40+0000\n" +"Last-Translator: Nicolás Tamargo <email address hidden>\n" "Language-Team: Finnish (http://www.transifex.com/musicbrainz/musicbrainz/language/fi/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -84,7 +84,7 @@ msgstr "\"YY\" on rekisteröintivuoden kaksi viimeisintä numeroa." #: ../root/edit/details/historic/AddRelease.js:118 #: ../root/recording/RecordingIndex.js:50 #: ../root/static/scripts/release/components/MediumTable.js:218 -#: ../root/utility/tableColumns.js:537 +#: ../root/utility/tableColumns.js:539 msgid "#" msgstr "Nro" @@ -140,26 +140,13 @@ msgstr "(oli tallenne {position} julkaisussa {release})" msgid "(was medium {position}: {name} on release {release})" msgstr "(oli tallenne {position}: {name} julkaisussa {release}" -#: ../root/edit/details/merge_releases.tt:6 -#: ../root/components/ReleaseLanguageScript.js:24 -#: ../root/components/ReleaseLanguageScript.js:30 -#: ../root/components/list/ReleaseList.js:100 ../root/release/CoverArt.js:92 -#: ../root/release_group/ReleaseGroupIndex.js:90 -#: ../root/search/components/ReleaseResults.js:55 -#: ../root/static/scripts/common/components/ReleaseEvents.js:55 -#: ../root/static/scripts/common/components/ReleaseEvents.js:72 -#: ../root/static/scripts/release-editor/duplicates.js:145 -msgctxt "missing data" -msgid "-" -msgstr "-" - #: ../root/cdtoc/attach_artist_releases.tt:16 #: ../root/cdtoc/attach_filter_release.tt:30 ../root/cdtoc/list.tt:10 -#: ../root/edit/details/merge_releases.tt:23 ../root/release/merge.tt:16 +#: ../root/release/merge.tt:16 ../root/edit/details/MergeReleases.js:256 #: ../root/recording/RecordingIndex.js:57 #: ../root/release_group/ReleaseGroupIndex.js:159 #: ../root/search/components/ReleaseResults.js:103 -#: ../root/utility/tableColumns.js:480 ../root/utility/tableColumns.js:488 +#: ../root/utility/tableColumns.js:482 ../root/utility/tableColumns.js:490 msgctxt "and" msgid "/" msgstr "" @@ -436,10 +423,6 @@ msgstr "Hallintoliput" msgid "All of these relationships." msgstr "Kaikki nämä yhteydet." -#: ../root/edit/details/merge_releases.tt:141 -msgid "All recordings for these releases are already merged." -msgstr "Kaikki äänitykset näistä julkaisuista on jo sulautettu." - #: ../root/release/edit/recordings.tt:3 msgid "" "All tracks require an associated recording. Click “Edit” to select a " @@ -504,11 +487,6 @@ msgstr "Lisätiedot:" msgid "Annotations support a limited set of wiki formatting options:" msgstr "Lisätietokentät tukevat rajattua wiki-muotoilua:" -#: ../root/edit/details/merge_releases.tt:149 -#: ../lib/MusicBrainz/Server/Form/Merge/Release.pm:50 -msgid "Append mediums to target release" -msgstr "Liitä tallenteet kohteena olevaan julkaisuun" - #: ../root/edit/search_macros.tt:417 msgid "Applied Edit Count of Editor" msgstr "Käyttäjän hyväksytyt muokkaukset" @@ -617,10 +595,9 @@ msgstr "Alueet" #: ../root/cdtoc/attach_confirm.tt:13 #: ../root/cdtoc/attach_filter_release.tt:29 ../root/cdtoc/list.tt:8 #: ../root/cdtoc/lookup.tt:41 ../root/components/common-macros.tt:569 -#: ../root/edit/details/merge_releases.tt:20 ../root/edit/search_macros.tt:417 -#: ../root/release/edit/tracklist.tt:163 ../root/release/edit/tracklist.tt:412 -#: ../root/release/merge.tt:13 ../root/watch/list.tt:16 -#: ../lib/MusicBrainz/Server/Edit/Artist.pm:7 +#: ../root/edit/search_macros.tt:417 ../root/release/edit/tracklist.tt:163 +#: ../root/release/edit/tracklist.tt:412 ../root/release/merge.tt:13 +#: ../root/watch/list.tt:16 ../lib/MusicBrainz/Server/Edit/Artist.pm:7 #: ../lib/MusicBrainz/Server/Form/Search/Search.pm:35 #: ../root/artist/ArtistHeader.js:34 #: ../root/components/RelationshipsTable.js:320 @@ -638,6 +615,7 @@ msgstr "Alueet" #: ../root/edit/details/EditRecording.js:86 #: ../root/edit/details/EditRelease.js:83 #: ../root/edit/details/EditReleaseGroup.js:101 +#: ../root/edit/details/MergeReleases.js:253 #: ../root/edit/details/historic/AddRelease.js:68 #: ../root/edit/details/historic/AddRelease.js:120 #: ../root/edit/details/historic/AddTrackKV.js:55 @@ -711,10 +689,10 @@ msgstr "Artisti:" #: ../root/report/components/EventList.js:66 #: ../root/search/components/EventResults.js:70 #: ../root/search/components/WorkResults.js:52 -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:895 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:455 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:896 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:456 #: ../root/static/scripts/common/utility/formatEntityTypeName.js:15 -#: ../root/tag/TagLayout.js:25 ../root/utility/tableColumns.js:854 +#: ../root/tag/TagLayout.js:25 ../root/utility/tableColumns.js:856 msgid "Artists" msgstr "Artistit" @@ -771,14 +749,14 @@ msgstr "Banneriviestieditori" #: ../root/cdtoc/attach_artist_releases.tt:19 #: ../root/cdtoc/attach_filter_release.tt:33 ../root/cdtoc/list.tt:13 -#: ../root/cdtoc/lookup.tt:46 ../root/edit/details/merge_releases.tt:26 -#: ../root/release/edit/duplicates.tt:17 ../root/release/merge.tt:19 -#: ../root/components/list/ReleaseList.js:128 +#: ../root/cdtoc/lookup.tt:46 ../root/release/edit/duplicates.tt:17 +#: ../root/release/merge.tt:19 ../root/components/list/ReleaseList.js:128 #: ../root/edit/details/AddRelease.js:129 #: ../root/edit/details/EditBarcodes.js:58 #: ../root/edit/details/EditBarcodes.js:64 #: ../root/edit/details/EditRelease.js:167 #: ../root/edit/details/EditReleaseLabel.js:138 +#: ../root/edit/details/MergeReleases.js:259 #: ../root/edit/details/historic/AddRelease.js:155 #: ../root/edit/details/historic/EditReleaseEvents.js:138 #: ../root/otherlookup/OtherLookupForm.js:64 @@ -1005,12 +983,12 @@ msgstr "Luettelonumero:" #: ../root/cdtoc/attach_artist_releases.tt:18 #: ../root/cdtoc/attach_filter_release.tt:32 ../root/cdtoc/list.tt:12 -#: ../root/cdtoc/lookup.tt:45 ../root/edit/details/merge_releases.tt:25 -#: ../root/release/edit/duplicates.tt:16 ../root/release/merge.tt:18 +#: ../root/cdtoc/lookup.tt:45 ../root/release/edit/duplicates.tt:16 +#: ../root/release/merge.tt:18 ../root/edit/details/MergeReleases.js:258 #: ../root/recording/RecordingIndex.js:59 #: ../root/release_group/ReleaseGroupIndex.js:161 #: ../root/search/components/ReleaseResults.js:105 -#: ../root/utility/tableColumns.js:456 ../root/utility/tableColumns.js:461 +#: ../root/utility/tableColumns.js:458 ../root/utility/tableColumns.js:463 msgid "Catalog#" msgstr "Luettelonumero" @@ -1171,16 +1149,16 @@ msgstr "" #: ../root/cdtoc/attach_artist_releases.tt:16 #: ../root/cdtoc/attach_filter_release.tt:30 ../root/cdtoc/list.tt:10 -#: ../root/cdtoc/lookup.tt:43 ../root/edit/details/merge_releases.tt:23 -#: ../root/release/edit/duplicates.tt:14 ../root/release/merge.tt:16 -#: ../root/edit/details/EditReleaseLabel.js:127 +#: ../root/cdtoc/lookup.tt:43 ../root/release/edit/duplicates.tt:14 +#: ../root/release/merge.tt:16 ../root/edit/details/EditReleaseLabel.js:127 +#: ../root/edit/details/MergeReleases.js:256 #: ../root/edit/details/historic/AddRelease.js:152 #: ../root/edit/details/historic/EditReleaseEvents.js:135 #: ../root/recording/RecordingIndex.js:57 #: ../root/release_group/ReleaseGroupIndex.js:159 #: ../root/search/components/ReleaseResults.js:103 #: ../root/static/scripts/common/components/FilterForm.js:110 -#: ../root/utility/tableColumns.js:476 ../root/utility/tableColumns.js:488 +#: ../root/utility/tableColumns.js:478 ../root/utility/tableColumns.js:490 msgid "Country" msgstr "Maa" @@ -1255,13 +1233,14 @@ msgstr "Tiedot:" #: ../root/annotation/history.tt:12 ../root/cdtoc/attach_artist_releases.tt:16 #: ../root/cdtoc/attach_filter_release.tt:30 ../root/cdtoc/list.tt:10 -#: ../root/cdtoc/lookup.tt:42 ../root/edit/details/merge_releases.tt:23 -#: ../root/release/edit/duplicates.tt:13 ../root/release/merge.tt:16 +#: ../root/cdtoc/lookup.tt:42 ../root/release/edit/duplicates.tt:13 +#: ../root/release/merge.tt:16 #: ../root/admin/statistics-events/DeleteStatisticsEvent.js:31 #: ../root/admin/statistics-events/StatisticsEventEditForm.js:35 #: ../root/admin/statistics-events/StatisticsEventIndex.js:30 #: ../root/components/RelationshipsTable.js:316 #: ../root/edit/details/EditReleaseLabel.js:119 +#: ../root/edit/details/MergeReleases.js:256 #: ../root/edit/details/historic/AddRelease.js:151 #: ../root/edit/details/historic/EditReleaseEvents.js:134 #: ../root/elections/ElectionVotes.js:26 @@ -1270,8 +1249,8 @@ msgstr "Tiedot:" #: ../root/search/components/EventResults.js:67 #: ../root/search/components/ReleaseResults.js:103 #: ../root/static/scripts/common/components/FilterForm.js:129 -#: ../root/utility/tableColumns.js:255 ../root/utility/tableColumns.js:260 -#: ../root/utility/tableColumns.js:482 ../root/utility/tableColumns.js:488 +#: ../root/utility/tableColumns.js:257 ../root/utility/tableColumns.js:262 +#: ../root/utility/tableColumns.js:484 ../root/utility/tableColumns.js:490 msgid "Date" msgstr "Päiväys" @@ -1339,7 +1318,7 @@ msgstr "Vanhentunut:" #: ../root/relationship/linktype/RelationshipTypeIndex.js:96 #: ../root/search/components/InstrumentResults.js:52 #: ../root/static/scripts/collection/components/CollectionEditForm.js:89 -#: ../root/utility/tableColumns.js:636 +#: ../root/utility/tableColumns.js:638 msgid "Description" msgstr "Kuvaus" @@ -1375,21 +1354,21 @@ msgstr "Kuolinaika:" #: ../root/edit/details/AddReleaseGroup.js:71 #: ../root/edit/details/AddSeries.js:51 #: ../root/edit/details/AddStandaloneRecording.js:67 -#: ../root/edit/details/AddWork.js:57 ../root/edit/details/EditArea.js:84 +#: ../root/edit/details/AddWork.js:59 ../root/edit/details/EditArea.js:84 #: ../root/edit/details/EditArtist.js:100 ../root/edit/details/EditEvent.js:64 #: ../root/edit/details/EditInstrument.js:64 #: ../root/edit/details/EditLabel.js:84 ../root/edit/details/EditPlace.js:70 #: ../root/edit/details/EditRecording.js:65 #: ../root/edit/details/EditRelease.js:111 #: ../root/edit/details/EditReleaseGroup.js:64 -#: ../root/edit/details/EditSeries.js:61 ../root/edit/details/EditWork.js:73 +#: ../root/edit/details/EditSeries.js:61 ../root/edit/details/EditWork.js:75 #: ../root/genre/GenreEditForm.js:38 msgid "Disambiguation" msgstr "" #: ../root/release/discids.tt:8 ../root/edit/details/SetTrackLengths.js:66 #: ../root/otherlookup/OtherLookupForm.js:114 -#: ../root/utility/tableColumns.js:179 ../root/utility/tableColumns.js:184 +#: ../root/utility/tableColumns.js:181 ../root/utility/tableColumns.js:186 msgid "Disc ID" msgstr "Levyn tunniste" @@ -1629,7 +1608,7 @@ msgstr "Käytä vinyylilevyjen kappalenumerointia" #: ../root/search/components/ArtistResults.js:57 #: ../root/search/components/LabelResults.js:69 #: ../root/search/components/PlaceResults.js:66 -#: ../root/utility/tableColumns.js:273 ../root/utility/tableColumns.js:278 +#: ../root/utility/tableColumns.js:275 ../root/utility/tableColumns.js:280 msgid "End" msgstr "Lopetus" @@ -1825,11 +1804,11 @@ msgstr "Lisätietoja saat {doc_doc|dokumentaatiosta} ja {doc_styleguide|tyyliohj msgid "For more information, check the {doc_doc|documentation}." msgstr "Lisätietoja saat {doc_doc|dokumentaatiosta}." -#: ../root/cdtoc/list.tt:9 ../root/edit/details/merge_releases.tt:21 -#: ../root/release/edit/duplicates.tt:11 ../root/release/merge.tt:14 -#: ../root/components/list/ReleaseList.js:93 +#: ../root/cdtoc/list.tt:9 ../root/release/edit/duplicates.tt:11 +#: ../root/release/merge.tt:14 ../root/components/list/ReleaseList.js:93 #: ../root/edit/details/EditMedium.js:530 #: ../root/edit/details/EditReleaseLabel.js:145 +#: ../root/edit/details/MergeReleases.js:254 #: ../root/edit/details/historic/AddRelease.js:156 #: ../root/edit/details/historic/EditReleaseEvents.js:139 #: ../root/release_group/ReleaseGroupIndex.js:157 @@ -2002,7 +1981,7 @@ msgstr "" #: ../root/components/common-macros.tt:602 #: ../lib/MusicBrainz/Server/Controller/Edit.pm:240 -#: ../root/static/scripts/common/constants.js:279 +#: ../root/static/scripts/common/constants.js:281 msgid "High" msgstr "Korkea" @@ -2141,12 +2120,12 @@ msgstr "ISRC" msgid "ISRCs:" msgstr "ISRC-koodit:" -#: ../root/work/edit_form.tt:16 ../root/edit/details/AddWork.js:63 -#: ../root/edit/details/EditWork.js:80 ../root/edit/details/RemoveIswc.js:36 +#: ../root/work/edit_form.tt:16 ../root/edit/details/AddWork.js:65 +#: ../root/edit/details/EditWork.js:82 ../root/edit/details/RemoveIswc.js:36 #: ../root/otherlookup/OtherLookupForm.js:79 #: ../root/report/IswcsWithManyWorks.js:48 #: ../root/search/components/WorkResults.js:53 -#: ../root/utility/tableColumns.js:762 +#: ../root/utility/tableColumns.js:764 msgid "ISWC" msgstr "ISWC" @@ -2299,23 +2278,6 @@ msgstr "Soitin:" msgid "Instruments" msgstr "Soittimet" -#: ../root/edit/details/merge_releases.tt:78 -#: ../root/edit/details/merge_releases.tt:83 -#: ../root/edit/details/merge_releases.tt:92 -#: ../root/edit/details/merge_releases.tt:109 -#: ../root/edit/details/MergeAreas.js:35 -#: ../root/edit/details/MergeArtists.js:37 -#: ../root/edit/details/MergeEvents.js:40 -#: ../root/edit/details/MergeInstruments.js:35 -#: ../root/edit/details/MergeLabels.js:35 -#: ../root/edit/details/MergePlaces.js:35 -#: ../root/edit/details/MergeRecordings.js:40 -#: ../root/edit/details/MergeReleaseGroups.js:35 -#: ../root/edit/details/MergeSeries.js:35 -#: ../root/edit/details/MergeWorks.js:35 -msgid "Into:" -msgstr "Kohteeseen:" - #: ../root/cdstub/error.tt:5 msgid "Invalid Disc ID" msgstr "Virheellinen levyn tunniste." @@ -2356,13 +2318,13 @@ msgstr "" #: ../root/cdtoc/attach_artist_releases.tt:17 #: ../root/cdtoc/attach_filter_release.tt:31 ../root/cdtoc/list.tt:11 #: ../root/cdtoc/lookup.tt:44 ../root/components/common-macros.tt:569 -#: ../root/edit/details/merge_releases.tt:24 ../root/edit/search_macros.tt:417 -#: ../root/release/edit/duplicates.tt:15 ../root/release/merge.tt:17 -#: ../lib/MusicBrainz/Server/Edit/Label.pm:7 +#: ../root/edit/search_macros.tt:417 ../root/release/edit/duplicates.tt:15 +#: ../root/release/merge.tt:17 ../lib/MusicBrainz/Server/Edit/Label.pm:7 #: ../lib/MusicBrainz/Server/Form/Search/Search.pm:40 #: ../root/components/list/LabelList.js:54 ../root/edit/details/AddLabel.js:51 #: ../root/edit/details/EditLabel.js:62 #: ../root/edit/details/EditReleaseLabel.js:69 +#: ../root/edit/details/MergeReleases.js:257 #: ../root/edit/details/historic/AddRelease.js:153 #: ../root/edit/details/historic/EditReleaseEvents.js:136 #: ../root/label/LabelHeader.js:27 ../root/layout/components/Search.js:39 @@ -2375,8 +2337,8 @@ msgstr "" #: ../root/search/components/SearchForm.js:39 #: ../root/static/scripts/common/constants.js:23 #: ../root/static/scripts/common/utility/formatEntityTypeName.js:56 -#: ../root/user/UserProfile.js:46 ../root/utility/tableColumns.js:503 -#: ../root/utility/tableColumns.js:508 +#: ../root/user/UserProfile.js:46 ../root/utility/tableColumns.js:505 +#: ../root/utility/tableColumns.js:510 msgid "Label" msgstr "Levymerkki" @@ -2479,7 +2441,7 @@ msgstr "Ladataan muokkauksien esikatselua..." #: ../root/static/scripts/common/components/FingerprintTable.js:87 #: ../root/static/scripts/edit/components/AddEntityDialog.js:101 #: ../root/static/scripts/release/components/MediumTable.js:118 -#: ../root/utility/tableColumns.js:674 +#: ../root/utility/tableColumns.js:676 msgid "Loading..." msgstr "Ladataan..." @@ -2519,15 +2481,15 @@ msgstr "Hakukerrat" #: ../root/components/common-macros.tt:602 #: ../lib/MusicBrainz/Server/Controller/Edit.pm:240 -#: ../root/static/scripts/common/constants.js:276 +#: ../root/static/scripts/common/constants.js:278 msgid "Low" msgstr "Matala" #: ../root/release/edit_relationships.tt:172 -#: ../root/edit/details/AddWork.js:81 ../root/edit/details/EditWork.js:98 +#: ../root/edit/details/AddWork.js:83 ../root/edit/details/EditWork.js:100 #: ../root/layout/components/sidebar/WorkSidebar.js:67 #: ../root/search/components/WorkResults.js:55 -#: ../root/static/scripts/work.js:312 ../root/utility/tableColumns.js:873 +#: ../root/static/scripts/work.js:312 ../root/utility/tableColumns.js:875 msgid "Lyrics Languages" msgstr "Sanoituksen kielet" @@ -2582,22 +2544,6 @@ msgstr "" msgid "Medium track lengths" msgstr "" -#: ../root/edit/details/merge_releases.tt:44 -msgid "Medium {position} is now medium {new_position}" -msgstr "Tallenne {position} on nyt tallenne {new_position}" - -#: ../root/edit/details/merge_releases.tt:44 -msgid "Medium {position} is now medium {new_position}: {new_name}" -msgstr "Tallenne {position} on nyt tallenne {new_position}: {new_name}" - -#: ../root/edit/details/merge_releases.tt:44 -msgid "Medium {position}: {name} is now medium {new_position}" -msgstr "Tallenne {position}: {name} on nyt tallenne {new_position}" - -#: ../root/edit/details/merge_releases.tt:44 -msgid "Medium {position}: {name} is now medium {new_position}: {new_name}" -msgstr "Tallenne {position}: {name} on nyt tallenne {new_position}: {new_name}" - #: ../root/layout/merge-helper.tt:30 #: ../root/layout/components/MergeHelper.js:71 #: ../root/layout/components/sidebar/MergeLink.js:31 @@ -2613,12 +2559,7 @@ msgstr "Sulautumisprosessi" msgid "Merge Releases" msgstr "Sulauta julkaisut" -#: ../root/edit/details/merge_releases.tt:149 -#: ../lib/MusicBrainz/Server/Form/Merge/Release.pm:51 -msgid "Merge mediums and recordings" -msgstr "Sulauta tallenteet ja äänitteet" - -#: ../root/edit/details/merge_releases.tt:147 ../root/release/merge.tt:55 +#: ../root/release/merge.tt:55 ../root/edit/details/MergeReleases.js:358 msgid "Merge strategy:" msgstr "Sulauttamismenetelmä:" @@ -2708,7 +2649,7 @@ msgstr "Ääneni: " #: ../root/edit/details/AddReleaseGroup.js:56 #: ../root/edit/details/AddSeries.js:46 #: ../root/edit/details/AddStandaloneRecording.js:56 -#: ../root/edit/details/AddWork.js:52 ../root/edit/details/EditArea.js:70 +#: ../root/edit/details/AddWork.js:54 ../root/edit/details/EditArea.js:70 #: ../root/edit/details/EditArtist.js:86 ../root/edit/details/EditEvent.js:57 #: ../root/edit/details/EditInstrument.js:57 #: ../root/edit/details/EditLabel.js:68 ../root/edit/details/EditMedium.js:522 @@ -2718,7 +2659,7 @@ msgstr "Ääneni: " #: ../root/edit/details/EditRelationshipAttribute.js:76 #: ../root/edit/details/EditRelease.js:75 #: ../root/edit/details/EditReleaseGroup.js:57 -#: ../root/edit/details/EditSeries.js:54 ../root/edit/details/EditWork.js:66 +#: ../root/edit/details/EditSeries.js:54 ../root/edit/details/EditWork.js:68 #: ../root/edit/details/RemoveRelationshipAttribute.js:41 #: ../root/edit/details/RemoveRelationshipType.js:60 #: ../root/edit/details/historic/AddRelease.js:63 @@ -2841,7 +2782,7 @@ msgid "No releases have cover art marked as \"Front\", cannot set cover art." msgstr "Yhdelläkään julkaisulla ei ole kansikuvaksi merkattua kansitaidetta, joten kansikuvaa ei voida asettaa." #: ../root/release/edit/tracklist.tt:140 ../root/admin/IpLookup.js:35 -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:457 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:458 #: ../root/static/scripts/common/components/Autocomplete2/constants.js:90 msgid "No results" msgstr "Ei tuloksia" @@ -2886,19 +2827,11 @@ msgstr "" #: ../root/components/common-macros.tt:602 #: ../lib/MusicBrainz/Server/Controller/Edit.pm:240 -#: ../root/static/scripts/common/constants.js:277 -#: ../root/static/scripts/common/constants.js:278 +#: ../root/static/scripts/common/constants.js:279 +#: ../root/static/scripts/common/constants.js:280 msgid "Normal" msgstr "Normaali" -#: ../root/edit/details/merge_releases.tt:158 -#: ../root/edit/details/EditRelease.js:182 -#: ../root/edit/details/SetTrackLengths.js:89 -#: ../root/edit/details/historic/MergeReleases.js:69 -#: ../root/user/ReportUser.js:116 -msgid "Note" -msgstr "Huomio" - #: ../root/release/edit/information.tt:279 msgid "" "Note! If you do not know the month or day of release, please leave them " @@ -3221,13 +3154,13 @@ msgstr "Muokkauksen tietokonekielinen muoto voi olla saatavilla." msgid "Recent Notes Left on Your Edits" msgstr "Viimeaikaisia muokkausmerkintäviestejä muokkauksissasi" -#: ../root/components/common-macros.tt:569 -#: ../root/edit/details/merge_releases.tt:108 -#: ../root/edit/search_macros.tt:417 ../root/release/edit_relationships.tt:53 +#: ../root/components/common-macros.tt:569 ../root/edit/search_macros.tt:417 +#: ../root/release/edit_relationships.tt:53 #: ../lib/MusicBrainz/Server/Edit/Recording.pm:7 #: ../lib/MusicBrainz/Server/Form/Search/Search.pm:38 #: ../root/edit/details/AddStandaloneRecording.js:46 #: ../root/edit/details/EditRecording.js:51 +#: ../root/edit/details/MergeReleases.js:322 #: ../root/edit/details/RemoveIsrc.js:40 #: ../root/edit/details/historic/EditTrack.js:37 #: ../root/layout/components/Search.js:30 @@ -3245,10 +3178,6 @@ msgstr "Äänite" msgid "Recording Details" msgstr "Lisätietoja äänitteestä" -#: ../root/edit/details/merge_releases.tt:104 -msgid "Recording Merges" -msgstr "Äänitteiden sulautumiset" - #: ../root/user/ratings.tt:2 ../root/user/ratings_summary.tt:3 msgid "Recording ratings" msgstr "Äänitteiden arvostelut" @@ -3308,7 +3237,7 @@ msgstr "Yhteys-editori" #: ../root/edit/search_macros.tt:417 #: ../root/edit/details/AddRelationshipType.js:78 #: ../root/relationship/linktype/RelationshipTypeIndex.js:41 -#: ../root/utility/tableColumns.js:804 +#: ../root/utility/tableColumns.js:806 msgid "Relationship Type" msgstr "Yhteyden tyyppi" @@ -3335,8 +3264,7 @@ msgstr "<span class=\"rel-edit\">Keltaisella</span> korostettuja yhteyksiä muok #: ../root/cdtoc/attach_artist_releases.tt:15 #: ../root/cdtoc/attach_filter_release.tt:28 ../root/cdtoc/lookup.tt:39 -#: ../root/components/common-macros.tt:569 -#: ../root/edit/details/merge_releases.tt:19 ../root/edit/search_macros.tt:417 +#: ../root/components/common-macros.tt:569 ../root/edit/search_macros.tt:417 #: ../root/release/edit/duplicates.tt:10 ../root/release/merge.tt:12 #: ../lib/MusicBrainz/Server/Edit/Release.pm:8 #: ../lib/MusicBrainz/Server/Form/Search/Search.pm:37 @@ -3347,6 +3275,7 @@ msgstr "<span class=\"rel-edit\">Keltaisella</span> korostettuja yhteyksiä muok #: ../root/edit/details/EditBarcodes.js:51 #: ../root/edit/details/EditCoverArt.js:51 #: ../root/edit/details/EditReleaseLabel.js:60 +#: ../root/edit/details/MergeReleases.js:252 #: ../root/edit/details/RemoveCoverArt.js:35 #: ../root/edit/details/ReorderCoverArt.js:45 #: ../root/edit/details/ReorderMediums.js:39 @@ -3583,7 +3512,7 @@ msgstr "Poista määrite" #: ../root/components/common-macros.tt:878 #: ../root/components/common-macros.tt:886 #: ../root/components/RemoveFromMergeTableCell.js:39 -#: ../root/utility/tableColumns.js:781 ../root/utility/tableColumns.js:791 +#: ../root/utility/tableColumns.js:783 ../root/utility/tableColumns.js:793 msgid "Remove from merge" msgstr "" @@ -3981,7 +3910,7 @@ msgstr "Vaihda kappaleiden ja artistien nimien paikkoja" #: ../root/search/components/RecordingResults.js:134 #: ../root/search/components/ReleaseResults.js:112 #: ../root/static/scripts/common/components/TaggerIcon.js:40 -#: ../root/utility/tableColumns.js:834 +#: ../root/utility/tableColumns.js:836 msgid "Tagger" msgstr "Luokittelija" @@ -4007,12 +3936,6 @@ msgstr "Lisätietokenttä toimii mini-wikinä." msgid "The catalog number you have entered looks like an Amazon ASIN." msgstr "Lisäämäsi luettelonumero näyttää Amazon ASIN-tunnisteelta." -#: ../root/edit/details/merge_releases.tt:159 -msgid "" -"The data in this edit originally came from an older version of this edit, " -"and may not display correctly" -msgstr "Muokkauksen tiedot ovat alunperin tämän muokkauksen vanhemmasta versiosta ja eivätkä välttämättä näy oikein" - #: ../root/layout.tt:90 ../root/layout/index.js:275 msgid "" "The data you have submitted does not make any changes to the data already " @@ -4196,12 +4119,6 @@ msgstr "" msgid "This disc has a hidden pregap track before track 1" msgstr "" -#: ../root/edit/details/merge_releases.tt:133 -msgid "" -"This edit does not store recording merge information and is closed, so no " -"recording merge information can be shown." -msgstr "Tämä muokkaustyyppi ei tallenna tietoa äänitteiden sulauttamisesta. Koska muokkaus on suljettu, tietoa äänitteiden sulauttamisesta ei voida näyttää." - #: ../root/cdtoc/set_durations.tt:31 msgid "This edit would only make subsecond changes to track lengths." msgstr "" @@ -4333,8 +4250,8 @@ msgid "This recording cannot be removed because it is still used on releases." msgstr "Tätä äänitettä ei voida poistaa, sillä se on yhä käytössä julkaisuissa." #: ../root/components/common-macros.tt:302 -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:696 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:286 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:697 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:287 #: ../root/static/scripts/common/components/EntityLink.js:289 msgid "This recording is a video" msgstr "Tämä äänite on video" @@ -4366,10 +4283,6 @@ msgid "" " relationships." msgstr "Tämä julkaisuryhmä tullaan poistamaan automaattisesti kun sillä ei ole enää julkaisuja, eikä yhteyksiä." -#: ../root/edit/details/merge_releases.tt:35 -msgid "This release has no media to merge." -msgstr "" - #: ../root/release/discids.tt:58 msgid "This release has no mediums that can have disc IDs." msgstr "" @@ -4505,14 +4418,10 @@ msgid "Total tracks:" msgstr "Kappaleiden määrä:" #: ../root/cdtoc/info.tt:31 ../root/search/components/RecordingResults.js:135 -#: ../root/taglookup/Form.js:41 ../root/utility/tableColumns.js:846 +#: ../root/taglookup/Form.js:41 ../root/utility/tableColumns.js:848 msgid "Track" msgstr "Kappale" -#: ../root/edit/details/merge_releases.tt:107 -msgid "Track #" -msgstr "Kappale #" - #: ../root/release/edit/tracklist.tt:483 #: ../root/static/scripts/release-editor/dialogs.js:40 msgid "Track Parser" @@ -4547,11 +4456,11 @@ msgstr "Kappale {n}:" msgid "Tracklist" msgstr "Kappalelista" -#: ../root/edit/details/merge_releases.tt:22 ../root/release/discids.tt:9 -#: ../root/release/edit/duplicates.tt:12 ../root/release/merge.tt:15 -#: ../root/artist_credit/ArtistCreditIndex.js:128 +#: ../root/release/discids.tt:9 ../root/release/edit/duplicates.tt:12 +#: ../root/release/merge.tt:15 ../root/artist_credit/ArtistCreditIndex.js:128 #: ../root/artist_credit/ArtistCreditLayout.js:31 #: ../root/components/list/ReleaseList.js:103 +#: ../root/edit/details/MergeReleases.js:255 #: ../root/edit/details/historic/AddRelease.js:113 #: ../root/release_group/ReleaseGroupIndex.js:158 #: ../root/search/components/CDStubResults.js:49 @@ -4595,7 +4504,7 @@ msgstr "Twitter" #: ../root/edit/details/AddLabel.js:107 ../root/edit/details/AddPlace.js:65 #: ../root/edit/details/AddReleaseGroup.js:80 #: ../root/edit/details/AddRemoveAlias.js:101 -#: ../root/edit/details/AddSeries.js:57 ../root/edit/details/AddWork.js:69 +#: ../root/edit/details/AddSeries.js:57 ../root/edit/details/AddWork.js:71 #: ../root/edit/details/EditAlias.js:123 ../root/edit/details/EditArea.js:91 #: ../root/edit/details/EditArtist.js:107 ../root/edit/details/EditEvent.js:78 #: ../root/edit/details/EditInstrument.js:71 @@ -4626,12 +4535,12 @@ msgstr "Twitter" #: ../root/static/scripts/account/components/ApplicationForm.js:87 #: ../root/static/scripts/alias/AliasEditForm.js:329 #: ../root/static/scripts/collection/components/CollectionEditForm.js:83 -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:874 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:447 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:875 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:448 #: ../root/static/scripts/common/components/FilterForm.js:63 -#: ../root/static/scripts/edit/externalLinks.js:904 -#: ../root/static/scripts/edit/externalLinks.js:1157 -#: ../root/utility/tableColumns.js:613 ../root/utility/tableColumns.js:618 +#: ../root/static/scripts/edit/externalLinks.js:941 +#: ../root/static/scripts/edit/externalLinks.js:1181 +#: ../root/utility/tableColumns.js:615 ../root/utility/tableColumns.js:620 msgid "Type" msgstr "Tyyppi" @@ -4942,8 +4851,8 @@ msgstr "Wikin sisällyttäjä" #: ../root/components/common-macros.tt:569 ../root/edit/search_macros.tt:417 #: ../lib/MusicBrainz/Server/Edit/Work.pm:9 #: ../lib/MusicBrainz/Server/Form/Search/Search.pm:39 -#: ../root/components/list/WorkList.js:60 ../root/edit/details/AddWork.js:46 -#: ../root/edit/details/EditWork.js:59 ../root/edit/details/RemoveIswc.js:40 +#: ../root/components/list/WorkList.js:60 ../root/edit/details/AddWork.js:48 +#: ../root/edit/details/EditWork.js:61 ../root/edit/details/RemoveIswc.js:40 #: ../root/layout/components/Search.js:34 #: ../root/report/IswcsWithManyWorks.js:49 #: ../root/report/components/WorkList.js:46 @@ -5208,22 +5117,13 @@ msgid "" " please make sure the artists have been entered correctly." msgstr "Olet käyttänyt {valink|Eri esittäjiä} erityiskäyttöön tarkoitettua artistia allaolevissa kappaleissa. {valinks|Eri esittäjiä} käytetään erittäin harvoin kappaleissa. Varmista artistien olevan oikein." -#: ../root/edit/details/merge_releases.tt:5 -#: ../root/components/list/ReleaseList.js:90 -#: ../root/release_group/ReleaseGroupIndex.js:89 -#: ../root/search/components/ReleaseResults.js:50 -#: ../root/static/scripts/release-editor/duplicates.js:143 -msgid "[missing media]" -msgstr "" - #: ../root/components/common-macros.tt:259 #: ../lib/MusicBrainz/Server/Edit/Relationship/RemoveLinkType.pm:86 #: ../lib/MusicBrainz/Server/Edit/Release/Create.pm:113 -#: ../lib/MusicBrainz/Server/Edit/Work/Create.pm:87 -#: ../lib/MusicBrainz/Server/Edit/Work/Edit.pm:186 #: ../root/edit/details/EditAlias.js:94 #: ../root/edit/details/SetTrackLengths.js:73 #: ../root/static/scripts/common/components/EntityLink.js:41 +#: ../root/static/scripts/common/i18n/localizeLanguageName.js:15 msgid "[removed]" msgstr "[poistettu]" @@ -5369,6 +5269,10 @@ msgstr "historiallinen, {end} saakka" msgid "historical, {begin}-{end}" msgstr "historiallinen, {begin}-{end}" +#: ../root/edit/search_macros.tt:25 +msgid "in an unspecified order (possibly faster)" +msgstr "" + #: ../root/edit/details/macros.tt:28 #: ../root/utility/relationshipDateText.js:25 msgid "in {date}" @@ -5524,10 +5428,6 @@ msgid_plural "plus {n} other private collections" msgstr[0] "lisäksi {n} muu yksityinen kokoelma" msgstr[1] "lisäksi {n} muuta yksityistä kokoelmaa" -#: ../root/edit/search_macros.tt:25 -msgid "randomly" -msgstr "satunnaisesti" - #: ../root/edit/search_macros.tt:25 msgid "recently closed first" msgstr "" @@ -5739,7 +5639,7 @@ msgstr "« Aiempi" #: ../root/components/paginator.tt:19 ../root/components/paginator.tt:31 #: ../root/components/paginator.tt:39 ../root/components/Paginator.js:94 #: ../root/components/Paginator.js:119 ../root/components/Paginator.js:133 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:125 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:126 msgid "…" msgstr "…" @@ -6139,14 +6039,6 @@ msgstr "Tällä levyn tunnisteella on jo MusicBrainz-julkaisuja" msgid "There is already a CD stub with this disc ID" msgstr "Tällä levyn tunnisteella on jo CD-tynkä" -#: ../lib/MusicBrainz/Server/Data/Language.pm:63 -#: ../lib/MusicBrainz/Server/Edit/Work/Create.pm:75 -#: ../lib/MusicBrainz/Server/Edit/Work/Create.pm:85 -#: ../lib/MusicBrainz/Server/Edit/Work/Edit.pm:184 -#: ../lib/MusicBrainz/Server/Form/Utils.pm:48 -msgid "[No lyrics]" -msgstr "[Ei sanoitusta]" - #: ../lib/MusicBrainz/Server/Data/LinkType.pm:197 #, perl-brace-format msgid "{t0}-{t1} relationships" @@ -6388,7 +6280,7 @@ msgstr "Muunna julkaisu yksittäisen artistin julkaisuksi (historiallinen)" #: ../lib/MusicBrainz/Server/Edit/Historic/MergeRelease.pm:13 #: ../lib/MusicBrainz/Server/Edit/Historic/MergeReleaseMAC.pm:9 -#: ../lib/MusicBrainz/Server/Edit/Release/Merge.pm:140 +#: ../lib/MusicBrainz/Server/Edit/Release/Merge.pm:141 msgid "Merge releases" msgstr "Sulauta julkaisut" @@ -6672,7 +6564,7 @@ msgctxt "medium format" msgid "(unknown)" msgstr "(tuntematon)" -#: ../lib/MusicBrainz/Server/Edit/Release/Merge.pm:347 +#: ../lib/MusicBrainz/Server/Edit/Release/Merge.pm:339 #, perl-brace-format msgid "These releases could not be merged: {reason}" msgstr "" @@ -7310,6 +7202,16 @@ msgstr "" msgid "Please pick the entity you want the others merged into." msgstr "Valitse se entiteetti johon haluat sulauttaa muut." +#: ../lib/MusicBrainz/Server/Form/Merge/Release.pm:50 +#: ../root/edit/details/MergeReleases.js:65 +msgid "Append mediums to target release" +msgstr "Liitä tallenteet kohteena olevaan julkaisuun" + +#: ../lib/MusicBrainz/Server/Form/Merge/Release.pm:51 +#: ../root/edit/details/MergeReleases.js:66 +msgid "Merge mediums and recordings" +msgstr "Sulauta tallenteet ja äänitteet" + #: ../lib/MusicBrainz/Server/Form/Merge/Release.pm:62 msgid "Another medium is already in this position" msgstr "Toinen tallenne löytyy jo tästä sijainnista." @@ -7357,22 +7259,22 @@ msgid "A fluency level is required." msgstr "" #: ../lib/MusicBrainz/Server/Form/Role/UserProfile.pm:70 -#: ../root/static/scripts/common/constants.js:287 +#: ../root/static/scripts/common/constants.js:289 msgid "Basic" msgstr "Perus" #: ../lib/MusicBrainz/Server/Form/Role/UserProfile.pm:71 -#: ../root/static/scripts/common/constants.js:288 +#: ../root/static/scripts/common/constants.js:290 msgid "Intermediate" msgstr "Keskitaso" #: ../lib/MusicBrainz/Server/Form/Role/UserProfile.pm:72 -#: ../root/static/scripts/common/constants.js:286 +#: ../root/static/scripts/common/constants.js:288 msgid "Advanced" msgstr "Vaativa" #: ../lib/MusicBrainz/Server/Form/Role/UserProfile.pm:73 -#: ../root/static/scripts/common/constants.js:289 +#: ../root/static/scripts/common/constants.js:291 msgid "Native" msgstr "Syntyperäinen" @@ -7514,6 +7416,11 @@ msgstr "2 viikkoa" msgid "A month" msgstr "Kuukausi" +#: ../lib/MusicBrainz/Server/Form/Utils.pm:48 +#: ../root/static/scripts/common/i18n/localizeLanguageName.js:19 +msgid "[No lyrics]" +msgstr "[Ei sanoitusta]" + #: ../lib/MusicBrainz/Server/Form/Utils.pm:84 msgctxt "script optgroup" msgid "Frequently used" @@ -7853,7 +7760,7 @@ msgstr "Pääsyoikeudet" #: ../root/components/Aliases/AliasTable.js:31 #: ../root/components/Aliases/ArtistCreditList.js:54 #: ../root/static/scripts/common/components/FingerprintTable.js:53 -#: ../root/utility/tableColumns.js:78 +#: ../root/utility/tableColumns.js:80 msgid "Actions" msgstr "Toiminnot" @@ -7986,7 +7893,7 @@ msgstr "Vapaamuotoinen teksti" #: ../root/edit/details/AddRelationshipType.js:191 #: ../root/edit/details/RemoveRelationshipType.js:136 #: ../root/relationship/linktype/RelationshipTypeIndex.js:165 -#: ../root/utility/tableColumns.js:626 +#: ../root/utility/tableColumns.js:628 msgid "Attributes" msgstr "Määritteet" @@ -8007,12 +7914,12 @@ msgstr "Määritettä ei voida poistaa" #: ../root/admin/attributes/Language.js:33 #: ../root/admin/attributes/Language.js:36 -#: ../root/edit/details/AddRelease.js:108 ../root/edit/details/AddWork.js:75 +#: ../root/edit/details/AddRelease.js:108 ../root/edit/details/AddWork.js:77 #: ../root/edit/details/EditRelease.js:131 #: ../root/edit/details/historic/AddRelease.js:104 ../root/iswc/Index.js:59 #: ../root/report/IswcsWithManyWorks.js:53 #: ../root/search/components/ReleaseResults.js:107 -#: ../root/utility/tableColumns.js:524 +#: ../root/utility/tableColumns.js:526 msgid "Language" msgstr "Kieli" @@ -8929,6 +8836,19 @@ msgstr "" msgid "The provided relationship type ID is not valid." msgstr "" +#: ../root/components/ReleaseLanguageScript.js:24 +#: ../root/components/ReleaseLanguageScript.js:30 +#: ../root/components/list/ReleaseList.js:100 +#: ../root/edit/details/MergeReleases.js:88 ../root/release/CoverArt.js:92 +#: ../root/release_group/ReleaseGroupIndex.js:90 +#: ../root/search/components/ReleaseResults.js:55 +#: ../root/static/scripts/common/components/ReleaseEvents.js:55 +#: ../root/static/scripts/common/components/ReleaseEvents.js:72 +#: ../root/static/scripts/release-editor/duplicates.js:145 +msgctxt "missing data" +msgid "-" +msgstr "-" + #: ../root/components/StaticRelationshipsDisplay.js:25 msgid "{start_track}–{end_track}" msgstr "" @@ -9111,6 +9031,14 @@ msgstr "Osoite" msgid "Unspecified type" msgstr "Määrittelemätön tyyppi" +#: ../root/components/list/ReleaseList.js:90 +#: ../root/edit/details/MergeReleases.js:83 +#: ../root/release_group/ReleaseGroupIndex.js:89 +#: ../root/search/components/ReleaseResults.js:50 +#: ../root/static/scripts/release-editor/duplicates.js:143 +msgid "[missing media]" +msgstr "" + #: ../root/components/list/ReleaseList.js:153 #: ../root/search/components/ReleaseResults.js:109 msgid "Status" @@ -9120,8 +9048,8 @@ msgstr "Tila" #: ../root/report/IswcsWithManyWorks.js:50 #: ../root/report/components/WorkList.js:51 #: ../root/search/components/WorkResults.js:51 -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:894 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:454 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:895 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:455 msgid "Writers" msgstr "Tekijät" @@ -9239,22 +9167,22 @@ msgid "" msgstr "{edit} on saanut yhden tai useamman ei-äänen. Sinun tulee jättää muokkausmerkintä ennen kuin voit hyväksyä sen." #: ../root/edit/components/EditHeader.js:46 -#: ../root/edit/components/EditorTypeInfo.js:28 +#: ../root/edit/components/EditorTypeInfo.js:29 msgid "This user is new to MusicBrainz." msgstr "Tämä on MusicBrainzin uusi käyttäjä." #: ../root/edit/components/EditHeader.js:48 -#: ../root/edit/components/EditorTypeInfo.js:30 +#: ../root/edit/components/EditorTypeInfo.js:31 msgid "beginner" msgstr "aloittelija" #: ../root/edit/components/EditHeader.js:55 -#: ../root/edit/components/EditorTypeInfo.js:38 +#: ../root/edit/components/EditorTypeInfo.js:39 msgid "This user is automated." msgstr "Tämä on automatisoitu käyttäjä." #: ../root/edit/components/EditHeader.js:56 -#: ../root/edit/components/EditorTypeInfo.js:39 +#: ../root/edit/components/EditorTypeInfo.js:40 msgid "bot" msgstr "botti" @@ -9560,7 +9488,7 @@ msgstr "Ensisijainen lokaalille" #: ../root/edit/details/AddSeries.js:65 ../root/edit/details/EditSeries.js:79 #: ../root/layout/components/sidebar/SeriesSidebar.js:52 -#: ../root/utility/tableColumns.js:819 +#: ../root/utility/tableColumns.js:821 msgid "Ordering Type" msgstr "Järjestystapa" @@ -9646,6 +9574,14 @@ msgstr "Vanha artisti" msgid "New Artist" msgstr "Uusi artisti" +#: ../root/edit/details/EditRelease.js:182 +#: ../root/edit/details/MergeReleases.js:364 +#: ../root/edit/details/SetTrackLengths.js:89 +#: ../root/edit/details/historic/MergeReleases.js:69 +#: ../root/user/ReportUser.js:116 +msgid "Note" +msgstr "Huomio" + #: ../root/edit/details/EditRelease.js:183 msgid "This edit also changed the track artists." msgstr "Tämä muokkaus muutti myös kappaleen artisteja." @@ -9677,7 +9613,7 @@ msgstr "Tämä muokkaus oli sulauttaminen." msgid "Search for the target URL." msgstr "Etsi kohteena olevaa web-osoitetta." -#: ../root/edit/details/EditWork.js:87 +#: ../root/edit/details/EditWork.js:89 msgid "Work type" msgstr "" @@ -9694,10 +9630,71 @@ msgstr "" msgid "Merge:" msgstr "Sulauta:" +#: ../root/edit/details/MergeAreas.js:35 +#: ../root/edit/details/MergeArtists.js:37 +#: ../root/edit/details/MergeEvents.js:40 +#: ../root/edit/details/MergeInstruments.js:35 +#: ../root/edit/details/MergeLabels.js:35 +#: ../root/edit/details/MergePlaces.js:35 +#: ../root/edit/details/MergeRecordings.js:40 +#: ../root/edit/details/MergeReleaseGroups.js:35 +#: ../root/edit/details/MergeReleases.js:288 +#: ../root/edit/details/MergeReleases.js:295 +#: ../root/edit/details/MergeReleases.js:305 +#: ../root/edit/details/MergeReleases.js:323 +#: ../root/edit/details/MergeSeries.js:35 +#: ../root/edit/details/MergeWorks.js:35 +msgid "Into:" +msgstr "Kohteeseen:" + #: ../root/edit/details/MergeArtists.js:43 msgid "Rename artist and relationship credits" msgstr "Uudelleennimeä artisti ja tekijänimiyhteydet" +#: ../root/edit/details/MergeReleases.js:131 +msgid "Medium {position}: {name} is now medium {new_position}: {new_name}" +msgstr "Tallenne {position}: {name} on nyt tallenne {new_position}: {new_name}" + +#: ../root/edit/details/MergeReleases.js:142 +msgid "Medium {position}: {name} is now medium {new_position}" +msgstr "Tallenne {position}: {name} on nyt tallenne {new_position}" + +#: ../root/edit/details/MergeReleases.js:151 +msgid "Medium {position} is now medium {new_position}: {new_name}" +msgstr "Tallenne {position} on nyt tallenne {new_position}: {new_name}" + +#: ../root/edit/details/MergeReleases.js:162 +msgid "Medium {position} is now medium {new_position}" +msgstr "Tallenne {position} on nyt tallenne {new_position}" + +#: ../root/edit/details/MergeReleases.js:271 +msgid "This release has no media to merge." +msgstr "" + +#: ../root/edit/details/MergeReleases.js:318 +msgid "Recording Merges" +msgstr "Äänitteiden sulautumiset" + +#: ../root/edit/details/MergeReleases.js:321 +msgid "Track #" +msgstr "Kappale #" + +#: ../root/edit/details/MergeReleases.js:333 +msgid "" +"This edit does not store recording merge information and is closed, so no " +"recording merge information can be shown." +msgstr "Tämä muokkaustyyppi ei tallenna tietoa äänitteiden sulauttamisesta. Koska muokkaus on suljettu, tietoa äänitteiden sulauttamisesta ei voida näyttää." + +#: ../root/edit/details/MergeReleases.js:350 +msgid "All recordings for these releases are already merged." +msgstr "Kaikki äänitykset näistä julkaisuista on jo sulautettu." + +#: ../root/edit/details/MergeReleases.js:366 +msgid "" +"The data in this edit originally came from an older version of this edit, " +"and may not display correctly" +msgstr "Muokkauksen tiedot ovat alunperin tämän muokkauksen vanhemmasta versiosta ja eivätkä välttämättä näy oikein" + #: ../root/edit/details/MoveDiscId.js:46 #: ../root/edit/details/historic/MoveDiscId.js:41 msgid "From:" @@ -10769,7 +10766,7 @@ msgstr "Dokumentaation hakemisto" #: ../root/relationship/RelationshipsHeader.js:19 #: ../root/relationship/linktype/RelationshipTypeIndex.js:61 #: ../root/relationship/linktype/RelationshipTypesList.js:62 -#: ../root/utility/tableColumns.js:343 +#: ../root/utility/tableColumns.js:345 msgid "Relationship Types" msgstr "Yhteyksien tyypit" @@ -11185,7 +11182,7 @@ msgstr "Lisenssi" #: ../root/layout/components/sidebar/SidebarRating.js:25 #: ../root/static/scripts/release/components/MediumTable.js:223 -#: ../root/utility/tableColumns.js:437 +#: ../root/utility/tableColumns.js:439 msgid "Rating" msgstr "Arvostelu" @@ -12009,7 +12006,7 @@ msgid "" msgstr "Haluatko varmasti poistaa alapuolella olevan kansitaiteen artistin {artist} julkaisusta {release}?" #: ../root/release_group/ReleaseGroupHeader.js:30 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:404 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:405 msgid "Release group by {artist}" msgstr "Julkaisuryhmä artistilta {artist}" @@ -13299,9 +13296,9 @@ msgstr "" #: ../root/report/ReportsIndex.js:574 #: ../root/search/components/RecordingResults.js:132 -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:728 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:311 -#: ../root/utility/tableColumns.js:655 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:729 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:312 +#: ../root/utility/tableColumns.js:657 msgid "ISRCs" msgstr "ISRC-koodit" @@ -13549,7 +13546,7 @@ msgstr "Muut haut" #: ../root/search/components/ArtistResults.js:55 #: ../root/search/components/LabelResults.js:68 #: ../root/search/components/PlaceResults.js:65 -#: ../root/utility/tableColumns.js:150 ../root/utility/tableColumns.js:155 +#: ../root/utility/tableColumns.js:152 ../root/utility/tableColumns.js:157 msgid "Begin" msgstr "Aloitus" @@ -13567,9 +13564,9 @@ msgid "Documentation Search" msgstr "Etsi dokumentaatiosta" #: ../root/search/components/EventResults.js:71 -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:1044 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:183 -#: ../root/utility/tableColumns.js:358 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:1045 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:184 +#: ../root/utility/tableColumns.js:360 msgid "Location" msgstr "Sijainti" @@ -13879,7 +13876,7 @@ msgid "Show more artist credits" msgstr "" #: ../root/static/scripts/artist/components/ArtistCreditRenamer.js:254 -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:464 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:465 #: ../root/static/scripts/common/components/Autocomplete2/constants.js:103 #: ../root/static/scripts/common/components/Collapsible.js:76 msgid "Show more..." @@ -13909,56 +13906,56 @@ msgstr "Luo kokoelma" msgid "Update collection" msgstr "Päivitä kokoelma" -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:82 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:83 #: ../root/static/scripts/common/components/Autocomplete2/constants.js:96 msgid "An error occurred while searching. Click here to try again." msgstr "Virhe kesken haun. Paina tästä yrittääksesi uudelleen." -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:87 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:88 msgid "Try with direct search instead." msgstr "Kokeile suoralla haulla sen sijaan." -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:88 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:89 msgid "Try with indexed search instead." msgstr "Kokeile indeksoidulla haulla sen sijaan." -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:120 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:121 #: ../root/static/scripts/common/components/Autocomplete2.js:648 msgid "Type to search, or paste an MBID" msgstr "Kirjoita etsiäksesi, tai liitä MBID-tunniste" -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:202 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:203 #: ../root/static/scripts/common/components/Autocomplete2/constants.js:51 msgid "Clear recent items" msgstr "Tyhjennä viimeaikaiset" -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:471 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:472 #: ../root/static/scripts/common/components/Autocomplete2/constants.js:110 msgid "Not found? Try again with direct search." msgstr "Ei löytynyt? Kokeile uudelleen suoralla haulla." -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:472 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:473 #: ../root/static/scripts/common/components/Autocomplete2/constants.js:117 msgid "Slow? Switch back to indexed search." msgstr "Hidasta? Vaihda takaisin indeksoituun hakuun." -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:715 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:303 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:716 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:304 msgid "appears on" msgstr "julkaisulla" -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:721 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:307 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:722 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:308 msgid "standalone recording" msgstr "yksittäinen äänite" -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:815 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:399 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:816 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:400 msgid "{release_group_type} by {artist}" msgstr "{release_group_type} artistilta {artist}" -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:1043 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:180 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:1044 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:181 msgid "Performers" msgstr "Esiintyjät" @@ -14072,11 +14069,11 @@ msgstr "" msgid "Search for a work" msgstr "" -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:298 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:299 msgid "by {artist}" msgstr "artistilta {artist}" -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:362 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:363 msgid "{first_list_item} … {last_list_item}" msgstr "" @@ -14417,181 +14414,191 @@ msgstr "Perustamispaikka:" msgid "Dissolved in:" msgstr "Lopetuspaikka:" -#: ../root/static/scripts/edit/URLCleanup.js:360 +#: ../root/static/scripts/edit/URLCleanup.js:361 msgid "" "Please link to a channel, not a specific video. Videos should be linked to " "the appropriate recordings or releases instead." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:366 +#: ../root/static/scripts/edit/URLCleanup.js:367 msgid "" "Please link to a specific video. Add channel pages to the relevant artist, " "label, etc. instead." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:533 +#: ../root/static/scripts/edit/URLCleanup.js:534 msgid "" "Allmusic “{album_url_pattern}” links should be added to release groups. To " "find the appropriate release link for this release, please check the " "Releases tab from {album_url|your link}." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:753 +#: ../root/static/scripts/edit/URLCleanup.js:754 msgid "" "Only Apple Books “{artist_url_pattern}” pages can be added directly to " "artists. Please link audiobooks to the appropriate release instead." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:769 +#: ../root/static/scripts/edit/URLCleanup.js:770 msgid "" "Only Apple Books audiobooks can be added to MusicBrainz. Consider adding " "books to {bookbrainz_url|BookBrainz} instead." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:856 +#: ../root/static/scripts/edit/URLCleanup.js:857 msgid "" "Please link to the main page for the artist, not to a specific album or " "track." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:868 +#: ../root/static/scripts/edit/URLCleanup.js:869 msgid "" "Please link to the main page for the label, not to a specific album or " "track." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:1052 +#: ../root/static/scripts/edit/URLCleanup.js:1053 msgid "Please link to the main page for the artist, not a specific product." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:1054 +#: ../root/static/scripts/edit/URLCleanup.js:1055 msgid "Please link to the main page for the label, not a specific product." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:1597 +#: ../root/static/scripts/edit/URLCleanup.js:1600 msgid "" "Discogs “{master_url_pattern}” links group several releases, so this should " "be added to the release group instead." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:2086 +#: ../root/static/scripts/edit/URLCleanup.js:2090 msgid "" "Only IMSLP “{category_url_pattern}” links are allowed for artists. Please " "link work pages to the specific work in question." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:2104 +#: ../root/static/scripts/edit/URLCleanup.js:2108 msgid "" "IMSLP “{category_url_pattern}” links are only allowed for artists. Please " "link the specific work page to this work instead, if available." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:2149 +#: ../root/static/scripts/edit/URLCleanup.js:2153 msgid "" "Instagram “{explore_url_pattern}” links are not allowed. Please link to a " "profile instead, if there is one." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:2177 +#: ../root/static/scripts/edit/URLCleanup.js:2181 msgid "" "Please do not link directly to images, link to the appropriate Instagram " "profile page instead. If you want to link to a video, {url|add a standalone " "recording} for it instead." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:2202 +#: ../root/static/scripts/edit/URLCleanup.js:2206 msgid "This is an internal Instagram page and should not be added." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:2278 +#: ../root/static/scripts/edit/URLCleanup.js:2282 msgid "" "Only iTunes “{artist_url_pattern}” pages can be added directly to artists. " "Please link albums, videos, etc. to the appropriate release or recording " "instead." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:2890 +#: ../root/static/scripts/edit/URLCleanup.js:2895 msgid "" "Musixmatch “{album_url_pattern}” pages are a bad match for MusicBrainz " "release groups, and linking to them is currently disallowed. Please consider" " adding Musixmatch links to the relevant artists and works instead." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:2993 +#: ../root/static/scripts/edit/URLCleanup.js:2998 msgid "" "This is a redirect link. Please follow {redirect_url|your link} and add the " "link it redirects to instead." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:3504 +#: ../root/static/scripts/edit/URLCleanup.js:3464 +msgid "Only RYM music videos can be linked to recordings." +msgstr "" + +#: ../root/static/scripts/edit/URLCleanup.js:3516 msgid "" "This is a link to the old Resident Advisor domain. Please follow " "{ra_url|your link}, make sure the link it redirects to is still the correct " "one and, if so, add that link instead." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4092 +#: ../root/static/scripts/edit/URLCleanup.js:4143 msgid "This is not a profile, but a Twitter documentation page." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4106 +#: ../root/static/scripts/edit/URLCleanup.js:4157 msgid "Please link to Twitter profiles, not tweets." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4124 +#: ../root/static/scripts/edit/URLCleanup.js:4175 msgid "This site does not allow direct links to their images." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4331 +#: ../root/static/scripts/edit/URLCleanup.js:4372 +msgid "" +"Please link to the “{allowed_url_pattern}” page rather than this " +"“{current_url_pattern}” link." +msgstr "" + +#: ../root/static/scripts/edit/URLCleanup.js:4428 msgid "" "There is an unencoded “?” or “#” character in this URL. Please check whether" " it is useless and should be removed, or whether it is an error and the URL " "is misencoded." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4351 +#: ../root/static/scripts/edit/URLCleanup.js:4448 msgid "" "Please do not link directly to WhoSampled “{unwanted_url_pattern}” pages. " "Link to the appropriate WhoSampled artist, track or album page instead." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4372 +#: ../root/static/scripts/edit/URLCleanup.js:4469 msgid "Please link WhoSampled “{album_url_pattern}” pages to release groups." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4390 +#: ../root/static/scripts/edit/URLCleanup.js:4487 msgid "Please link WhoSampled artist pages to artists." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4402 +#: ../root/static/scripts/edit/URLCleanup.js:4499 msgid "Please link WhoSampled track pages to recordings." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4469 +#: ../root/static/scripts/edit/URLCleanup.js:4566 msgid "" "Links to specific sections of Wikipedia articles are not allowed. Please " "remove “{fragment}” if still appropriate. See the {url|guidelines}." msgstr "Linkit Wikipedian artikkeleiden kohtiin ovat kiellettyjä. Poista “{fragment}” mikäli se vielä jäljellä. Katso {url|ohjeistus}." -#: ../root/static/scripts/edit/URLCleanup.js:4570 +#: ../root/static/scripts/edit/URLCleanup.js:4669 msgid "Only video and playlist links are allowed on releases." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4606 +#: ../root/static/scripts/edit/URLCleanup.js:4705 msgid "" "Wikipedia normally has no entries for specific releases, so adding Wikipedia" " links to a release is currently blocked. Please add this Wikipedia link to " "the release group instead, if appropriate." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4618 +#: ../root/static/scripts/edit/URLCleanup.js:4717 msgid "" "Wikidata normally has no entries for specific releases, so adding Wikidata " "links to a release is currently blocked. Please add this Wikidata link to " "the release group instead, if appropriate." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4630 +#: ../root/static/scripts/edit/URLCleanup.js:4729 msgid "" "This is a Bandcamp profile, not a page for a specific release. Even if it " "shows this release right now, that can change when the artist releases " @@ -14600,7 +14607,7 @@ msgid "" "add this profile link to the appropriate artist or label." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4658 +#: ../root/static/scripts/edit/URLCleanup.js:4757 msgid "" "This is a Bandcamp profile, not a page for a specific recording. Even if it " "shows a single recording right now, that can change when the artist releases" @@ -14609,12 +14616,12 @@ msgid "" "the appropriate artist or label." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4821 +#: ../root/static/scripts/edit/URLCleanup.js:4920 msgid "Some relationship types are missing for this URL." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4838 -#: ../root/static/scripts/edit/externalLinks.js:743 +#: ../root/static/scripts/edit/URLCleanup.js:4937 +#: ../root/static/scripts/edit/externalLinks.js:767 msgid "This relationship type combination is invalid." msgstr "" @@ -14777,49 +14784,93 @@ msgstr "Valitse linkin tyyppi kirjoittamallesi web-osoitteelle." msgid "This relationship already exists." msgstr "Tämä yhteys on jo olemassa." -#: ../root/static/scripts/edit/externalLinks.js:609 +#: ../root/static/scripts/edit/externalLinks.js:607 #: ../root/static/scripts/relationship-editor/common/dialog.js:565 msgid "" "This URL is not allowed for the selected link type, or is incorrectly " "formatted." msgstr "Tämä web-osoite ei ole sallittu valitulle linkin tyypille, tai se on väärin muotoiltu." -#: ../root/static/scripts/edit/externalLinks.js:615 +#: ../root/static/scripts/edit/externalLinks.js:612 msgid "This URL is not allowed for the selected link type." msgstr "" -#: ../root/static/scripts/edit/externalLinks.js:674 +#: ../root/static/scripts/edit/externalLinks.js:618 +msgid "This URL is not allowed for areas." +msgstr "" + +#: ../root/static/scripts/edit/externalLinks.js:620 +msgid "This URL is not allowed for artists." +msgstr "" + +#: ../root/static/scripts/edit/externalLinks.js:622 +msgid "This URL is not allowed for events." +msgstr "" + +#: ../root/static/scripts/edit/externalLinks.js:624 +msgid "This URL is not allowed for instruments." +msgstr "" + +#: ../root/static/scripts/edit/externalLinks.js:626 +msgid "This URL is not allowed for labels." +msgstr "" + +#: ../root/static/scripts/edit/externalLinks.js:628 +msgid "This URL is not allowed for places." +msgstr "" + +#: ../root/static/scripts/edit/externalLinks.js:630 +msgid "This URL is not allowed for recordings." +msgstr "" + +#: ../root/static/scripts/edit/externalLinks.js:632 +msgid "This URL is not allowed for releases." +msgstr "" + +#: ../root/static/scripts/edit/externalLinks.js:634 +msgid "This URL is not allowed for release groups." +msgstr "" + +#: ../root/static/scripts/edit/externalLinks.js:637 +msgid "This URL is not allowed for series." +msgstr "" + +#: ../root/static/scripts/edit/externalLinks.js:639 +msgid "This URL is not allowed for works." +msgstr "" + +#: ../root/static/scripts/edit/externalLinks.js:698 msgid "" "Note: This link already exists at position #{position}. To merge, press " "enter or select a type." msgstr "" -#: ../root/static/scripts/edit/externalLinks.js:861 +#: ../root/static/scripts/edit/externalLinks.js:885 #: ../root/static/scripts/relationship-editor/common/dialog.js:418 msgid "{description} ({url|more documentation})" msgstr "{description} ({url|lisää dokumentaatiota})" -#: ../root/static/scripts/edit/externalLinks.js:959 +#: ../root/static/scripts/edit/externalLinks.js:930 +msgid "Remove Relationship" +msgstr "Poista yhteys" + +#: ../root/static/scripts/edit/externalLinks.js:996 msgid "video" msgstr "video" -#: ../root/static/scripts/edit/externalLinks.js:990 -msgid "Remove Relationship" -msgstr "Poista yhteys" +#: ../root/static/scripts/edit/externalLinks.js:1091 +msgid "Remove Link" +msgstr "Poista linkki" -#: ../root/static/scripts/edit/externalLinks.js:1076 +#: ../root/static/scripts/edit/externalLinks.js:1120 msgid "Add link" msgstr "" -#: ../root/static/scripts/edit/externalLinks.js:1079 +#: ../root/static/scripts/edit/externalLinks.js:1123 msgid "Add another link" msgstr "" -#: ../root/static/scripts/edit/externalLinks.js:1131 -msgid "Remove Link" -msgstr "Poista linkki" - -#: ../root/static/scripts/edit/externalLinks.js:1180 +#: ../root/static/scripts/edit/externalLinks.js:1205 msgid "Add another relationship" msgstr "" @@ -16031,11 +16082,11 @@ msgstr "Tämä muokkaus epäonnistui, sillä se vaikutti korkean laatuluokitukse msgid "This edit was cancelled." msgstr "Tämä muokkaus peruttiin." -#: ../root/utility/tableColumns.js:741 +#: ../root/utility/tableColumns.js:743 msgid "AcoustIDs" msgstr "" -#: ../root/utility/tableColumns.js:827 +#: ../root/utility/tableColumns.js:829 msgid "Subscribed" msgstr "Seurattuna" diff --git a/po/mb_server.fr.po b/po/mb_server.fr.po index ee231026c0a..b76fa4a970e 100644 --- a/po/mb_server.fr.po +++ b/po/mb_server.fr.po @@ -64,9 +64,9 @@ msgid "" msgstr "" "Project-Id-Version: MusicBrainz\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-09-13 18:38-0500\n" -"PO-Revision-Date: 2021-09-13 23:42+0000\n" -"Last-Translator: Michael Wiencek <email address hidden>\n" +"POT-Creation-Date: 2021-09-28 21:37+0300\n" +"PO-Revision-Date: 2021-10-04 09:11+0000\n" +"Last-Translator: yvanz\n" "Language-Team: French (http://www.transifex.com/musicbrainz/musicbrainz/language/fr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -117,7 +117,7 @@ msgstr "« YY » sont les 2 derniers chiffres de l’année d’inscription." #: ../root/edit/details/historic/AddRelease.js:118 #: ../root/recording/RecordingIndex.js:50 #: ../root/static/scripts/release/components/MediumTable.js:218 -#: ../root/utility/tableColumns.js:537 +#: ../root/utility/tableColumns.js:539 msgid "#" msgstr "no" @@ -173,26 +173,13 @@ msgstr "(était le support {position} de la parution {release})" msgid "(was medium {position}: {name} on release {release})" msgstr "(était le support {position} : {name} de la parution {release})" -#: ../root/edit/details/merge_releases.tt:6 -#: ../root/components/ReleaseLanguageScript.js:24 -#: ../root/components/ReleaseLanguageScript.js:30 -#: ../root/components/list/ReleaseList.js:100 ../root/release/CoverArt.js:92 -#: ../root/release_group/ReleaseGroupIndex.js:90 -#: ../root/search/components/ReleaseResults.js:55 -#: ../root/static/scripts/common/components/ReleaseEvents.js:55 -#: ../root/static/scripts/common/components/ReleaseEvents.js:72 -#: ../root/static/scripts/release-editor/duplicates.js:145 -msgctxt "missing data" -msgid "-" -msgstr "-" - #: ../root/cdtoc/attach_artist_releases.tt:16 #: ../root/cdtoc/attach_filter_release.tt:30 ../root/cdtoc/list.tt:10 -#: ../root/edit/details/merge_releases.tt:23 ../root/release/merge.tt:16 +#: ../root/release/merge.tt:16 ../root/edit/details/MergeReleases.js:256 #: ../root/recording/RecordingIndex.js:57 #: ../root/release_group/ReleaseGroupIndex.js:159 #: ../root/search/components/ReleaseResults.js:103 -#: ../root/utility/tableColumns.js:480 ../root/utility/tableColumns.js:488 +#: ../root/utility/tableColumns.js:482 ../root/utility/tableColumns.js:490 msgctxt "and" msgid "/" msgstr " / " @@ -469,10 +456,6 @@ msgstr "Drapeaux d’administration" msgid "All of these relationships." msgstr "Toutes ces relations." -#: ../root/edit/details/merge_releases.tt:141 -msgid "All recordings for these releases are already merged." -msgstr "Tous les enregistrements ont déjà été fusionnés pour cette parution." - #: ../root/release/edit/recordings.tt:3 msgid "" "All tracks require an associated recording. Click “Edit” to select a " @@ -537,11 +520,6 @@ msgstr "Annotation :" msgid "Annotations support a limited set of wiki formatting options:" msgstr "Vous pouvez utilisez une syntaxe wiki limitée dans les annotations :" -#: ../root/edit/details/merge_releases.tt:149 -#: ../lib/MusicBrainz/Server/Form/Merge/Release.pm:50 -msgid "Append mediums to target release" -msgstr "Ajouter ces supports à la parution cible" - #: ../root/edit/search_macros.tt:417 msgid "Applied Edit Count of Editor" msgstr "Nombre de modifications appliquées par l’éditeur" @@ -650,10 +628,9 @@ msgstr "Régions" #: ../root/cdtoc/attach_confirm.tt:13 #: ../root/cdtoc/attach_filter_release.tt:29 ../root/cdtoc/list.tt:8 #: ../root/cdtoc/lookup.tt:41 ../root/components/common-macros.tt:569 -#: ../root/edit/details/merge_releases.tt:20 ../root/edit/search_macros.tt:417 -#: ../root/release/edit/tracklist.tt:163 ../root/release/edit/tracklist.tt:412 -#: ../root/release/merge.tt:13 ../root/watch/list.tt:16 -#: ../lib/MusicBrainz/Server/Edit/Artist.pm:7 +#: ../root/edit/search_macros.tt:417 ../root/release/edit/tracklist.tt:163 +#: ../root/release/edit/tracklist.tt:412 ../root/release/merge.tt:13 +#: ../root/watch/list.tt:16 ../lib/MusicBrainz/Server/Edit/Artist.pm:7 #: ../lib/MusicBrainz/Server/Form/Search/Search.pm:35 #: ../root/artist/ArtistHeader.js:34 #: ../root/components/RelationshipsTable.js:320 @@ -671,6 +648,7 @@ msgstr "Régions" #: ../root/edit/details/EditRecording.js:86 #: ../root/edit/details/EditRelease.js:83 #: ../root/edit/details/EditReleaseGroup.js:101 +#: ../root/edit/details/MergeReleases.js:253 #: ../root/edit/details/historic/AddRelease.js:68 #: ../root/edit/details/historic/AddRelease.js:120 #: ../root/edit/details/historic/AddTrackKV.js:55 @@ -744,10 +722,10 @@ msgstr "Artiste :" #: ../root/report/components/EventList.js:66 #: ../root/search/components/EventResults.js:70 #: ../root/search/components/WorkResults.js:52 -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:895 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:455 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:896 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:456 #: ../root/static/scripts/common/utility/formatEntityTypeName.js:15 -#: ../root/tag/TagLayout.js:25 ../root/utility/tableColumns.js:854 +#: ../root/tag/TagLayout.js:25 ../root/utility/tableColumns.js:856 msgid "Artists" msgstr "Artistes" @@ -804,14 +782,14 @@ msgstr "Éditeur de messages de bannière" #: ../root/cdtoc/attach_artist_releases.tt:19 #: ../root/cdtoc/attach_filter_release.tt:33 ../root/cdtoc/list.tt:13 -#: ../root/cdtoc/lookup.tt:46 ../root/edit/details/merge_releases.tt:26 -#: ../root/release/edit/duplicates.tt:17 ../root/release/merge.tt:19 -#: ../root/components/list/ReleaseList.js:128 +#: ../root/cdtoc/lookup.tt:46 ../root/release/edit/duplicates.tt:17 +#: ../root/release/merge.tt:19 ../root/components/list/ReleaseList.js:128 #: ../root/edit/details/AddRelease.js:129 #: ../root/edit/details/EditBarcodes.js:58 #: ../root/edit/details/EditBarcodes.js:64 #: ../root/edit/details/EditRelease.js:167 #: ../root/edit/details/EditReleaseLabel.js:138 +#: ../root/edit/details/MergeReleases.js:259 #: ../root/edit/details/historic/AddRelease.js:155 #: ../root/edit/details/historic/EditReleaseEvents.js:138 #: ../root/otherlookup/OtherLookupForm.js:64 @@ -1038,12 +1016,12 @@ msgstr "Cat. no :" #: ../root/cdtoc/attach_artist_releases.tt:18 #: ../root/cdtoc/attach_filter_release.tt:32 ../root/cdtoc/list.tt:12 -#: ../root/cdtoc/lookup.tt:45 ../root/edit/details/merge_releases.tt:25 -#: ../root/release/edit/duplicates.tt:16 ../root/release/merge.tt:18 +#: ../root/cdtoc/lookup.tt:45 ../root/release/edit/duplicates.tt:16 +#: ../root/release/merge.tt:18 ../root/edit/details/MergeReleases.js:258 #: ../root/recording/RecordingIndex.js:59 #: ../root/release_group/ReleaseGroupIndex.js:161 #: ../root/search/components/ReleaseResults.js:105 -#: ../root/utility/tableColumns.js:456 ../root/utility/tableColumns.js:461 +#: ../root/utility/tableColumns.js:458 ../root/utility/tableColumns.js:463 msgid "Catalog#" msgstr "No dans le catalogue " @@ -1204,16 +1182,16 @@ msgstr "Copier en date de fin" #: ../root/cdtoc/attach_artist_releases.tt:16 #: ../root/cdtoc/attach_filter_release.tt:30 ../root/cdtoc/list.tt:10 -#: ../root/cdtoc/lookup.tt:43 ../root/edit/details/merge_releases.tt:23 -#: ../root/release/edit/duplicates.tt:14 ../root/release/merge.tt:16 -#: ../root/edit/details/EditReleaseLabel.js:127 +#: ../root/cdtoc/lookup.tt:43 ../root/release/edit/duplicates.tt:14 +#: ../root/release/merge.tt:16 ../root/edit/details/EditReleaseLabel.js:127 +#: ../root/edit/details/MergeReleases.js:256 #: ../root/edit/details/historic/AddRelease.js:152 #: ../root/edit/details/historic/EditReleaseEvents.js:135 #: ../root/recording/RecordingIndex.js:57 #: ../root/release_group/ReleaseGroupIndex.js:159 #: ../root/search/components/ReleaseResults.js:103 #: ../root/static/scripts/common/components/FilterForm.js:110 -#: ../root/utility/tableColumns.js:476 ../root/utility/tableColumns.js:488 +#: ../root/utility/tableColumns.js:478 ../root/utility/tableColumns.js:490 msgid "Country" msgstr "Pays" @@ -1288,13 +1266,14 @@ msgstr "Données :" #: ../root/annotation/history.tt:12 ../root/cdtoc/attach_artist_releases.tt:16 #: ../root/cdtoc/attach_filter_release.tt:30 ../root/cdtoc/list.tt:10 -#: ../root/cdtoc/lookup.tt:42 ../root/edit/details/merge_releases.tt:23 -#: ../root/release/edit/duplicates.tt:13 ../root/release/merge.tt:16 +#: ../root/cdtoc/lookup.tt:42 ../root/release/edit/duplicates.tt:13 +#: ../root/release/merge.tt:16 #: ../root/admin/statistics-events/DeleteStatisticsEvent.js:31 #: ../root/admin/statistics-events/StatisticsEventEditForm.js:35 #: ../root/admin/statistics-events/StatisticsEventIndex.js:30 #: ../root/components/RelationshipsTable.js:316 #: ../root/edit/details/EditReleaseLabel.js:119 +#: ../root/edit/details/MergeReleases.js:256 #: ../root/edit/details/historic/AddRelease.js:151 #: ../root/edit/details/historic/EditReleaseEvents.js:134 #: ../root/elections/ElectionVotes.js:26 @@ -1303,8 +1282,8 @@ msgstr "Données :" #: ../root/search/components/EventResults.js:67 #: ../root/search/components/ReleaseResults.js:103 #: ../root/static/scripts/common/components/FilterForm.js:129 -#: ../root/utility/tableColumns.js:255 ../root/utility/tableColumns.js:260 -#: ../root/utility/tableColumns.js:482 ../root/utility/tableColumns.js:488 +#: ../root/utility/tableColumns.js:257 ../root/utility/tableColumns.js:262 +#: ../root/utility/tableColumns.js:484 ../root/utility/tableColumns.js:490 msgid "Date" msgstr "Date" @@ -1372,7 +1351,7 @@ msgstr "Obsolète :" #: ../root/relationship/linktype/RelationshipTypeIndex.js:96 #: ../root/search/components/InstrumentResults.js:52 #: ../root/static/scripts/collection/components/CollectionEditForm.js:89 -#: ../root/utility/tableColumns.js:636 +#: ../root/utility/tableColumns.js:638 msgid "Description" msgstr "Description" @@ -1408,21 +1387,21 @@ msgstr "Date de décès : " #: ../root/edit/details/AddReleaseGroup.js:71 #: ../root/edit/details/AddSeries.js:51 #: ../root/edit/details/AddStandaloneRecording.js:67 -#: ../root/edit/details/AddWork.js:57 ../root/edit/details/EditArea.js:84 +#: ../root/edit/details/AddWork.js:59 ../root/edit/details/EditArea.js:84 #: ../root/edit/details/EditArtist.js:100 ../root/edit/details/EditEvent.js:64 #: ../root/edit/details/EditInstrument.js:64 #: ../root/edit/details/EditLabel.js:84 ../root/edit/details/EditPlace.js:70 #: ../root/edit/details/EditRecording.js:65 #: ../root/edit/details/EditRelease.js:111 #: ../root/edit/details/EditReleaseGroup.js:64 -#: ../root/edit/details/EditSeries.js:61 ../root/edit/details/EditWork.js:73 +#: ../root/edit/details/EditSeries.js:61 ../root/edit/details/EditWork.js:75 #: ../root/genre/GenreEditForm.js:38 msgid "Disambiguation" msgstr "Désambiguïsation" #: ../root/release/discids.tt:8 ../root/edit/details/SetTrackLengths.js:66 #: ../root/otherlookup/OtherLookupForm.js:114 -#: ../root/utility/tableColumns.js:179 ../root/utility/tableColumns.js:184 +#: ../root/utility/tableColumns.js:181 ../root/utility/tableColumns.js:186 msgid "Disc ID" msgstr "ID de disque" @@ -1662,7 +1641,7 @@ msgstr "Activer les numéros de pistes du vinyle" #: ../root/search/components/ArtistResults.js:57 #: ../root/search/components/LabelResults.js:69 #: ../root/search/components/PlaceResults.js:66 -#: ../root/utility/tableColumns.js:273 ../root/utility/tableColumns.js:278 +#: ../root/utility/tableColumns.js:275 ../root/utility/tableColumns.js:280 msgid "End" msgstr "Fin (date)" @@ -1858,11 +1837,11 @@ msgstr "Pour plus d’informations, consultez la {doc_doc|documentation} et les msgid "For more information, check the {doc_doc|documentation}." msgstr "Pour plus d’informations, consultez la {doc_doc|documentation}." -#: ../root/cdtoc/list.tt:9 ../root/edit/details/merge_releases.tt:21 -#: ../root/release/edit/duplicates.tt:11 ../root/release/merge.tt:14 -#: ../root/components/list/ReleaseList.js:93 +#: ../root/cdtoc/list.tt:9 ../root/release/edit/duplicates.tt:11 +#: ../root/release/merge.tt:14 ../root/components/list/ReleaseList.js:93 #: ../root/edit/details/EditMedium.js:530 #: ../root/edit/details/EditReleaseLabel.js:145 +#: ../root/edit/details/MergeReleases.js:254 #: ../root/edit/details/historic/AddRelease.js:156 #: ../root/edit/details/historic/EditReleaseEvents.js:139 #: ../root/release_group/ReleaseGroupIndex.js:157 @@ -2035,7 +2014,7 @@ msgstr "« Masquée » devrait être utilisé pour les langues des signes et l #: ../root/components/common-macros.tt:602 #: ../lib/MusicBrainz/Server/Controller/Edit.pm:240 -#: ../root/static/scripts/common/constants.js:279 +#: ../root/static/scripts/common/constants.js:281 msgid "High" msgstr "Haute" @@ -2174,12 +2153,12 @@ msgstr "ISRC" msgid "ISRCs:" msgstr "ISRC :" -#: ../root/work/edit_form.tt:16 ../root/edit/details/AddWork.js:63 -#: ../root/edit/details/EditWork.js:80 ../root/edit/details/RemoveIswc.js:36 +#: ../root/work/edit_form.tt:16 ../root/edit/details/AddWork.js:65 +#: ../root/edit/details/EditWork.js:82 ../root/edit/details/RemoveIswc.js:36 #: ../root/otherlookup/OtherLookupForm.js:79 #: ../root/report/IswcsWithManyWorks.js:48 #: ../root/search/components/WorkResults.js:53 -#: ../root/utility/tableColumns.js:762 +#: ../root/utility/tableColumns.js:764 msgid "ISWC" msgstr "ISWC" @@ -2332,23 +2311,6 @@ msgstr "Instrument :" msgid "Instruments" msgstr "Instruments" -#: ../root/edit/details/merge_releases.tt:78 -#: ../root/edit/details/merge_releases.tt:83 -#: ../root/edit/details/merge_releases.tt:92 -#: ../root/edit/details/merge_releases.tt:109 -#: ../root/edit/details/MergeAreas.js:35 -#: ../root/edit/details/MergeArtists.js:37 -#: ../root/edit/details/MergeEvents.js:40 -#: ../root/edit/details/MergeInstruments.js:35 -#: ../root/edit/details/MergeLabels.js:35 -#: ../root/edit/details/MergePlaces.js:35 -#: ../root/edit/details/MergeRecordings.js:40 -#: ../root/edit/details/MergeReleaseGroups.js:35 -#: ../root/edit/details/MergeSeries.js:35 -#: ../root/edit/details/MergeWorks.js:35 -msgid "Into:" -msgstr "Dans : " - #: ../root/cdstub/error.tt:5 msgid "Invalid Disc ID" msgstr "ID de disque invalide" @@ -2389,13 +2351,13 @@ msgstr "Gardez à l’esprit que déselectionner ceci effacera les pistes si le #: ../root/cdtoc/attach_artist_releases.tt:17 #: ../root/cdtoc/attach_filter_release.tt:31 ../root/cdtoc/list.tt:11 #: ../root/cdtoc/lookup.tt:44 ../root/components/common-macros.tt:569 -#: ../root/edit/details/merge_releases.tt:24 ../root/edit/search_macros.tt:417 -#: ../root/release/edit/duplicates.tt:15 ../root/release/merge.tt:17 -#: ../lib/MusicBrainz/Server/Edit/Label.pm:7 +#: ../root/edit/search_macros.tt:417 ../root/release/edit/duplicates.tt:15 +#: ../root/release/merge.tt:17 ../lib/MusicBrainz/Server/Edit/Label.pm:7 #: ../lib/MusicBrainz/Server/Form/Search/Search.pm:40 #: ../root/components/list/LabelList.js:54 ../root/edit/details/AddLabel.js:51 #: ../root/edit/details/EditLabel.js:62 #: ../root/edit/details/EditReleaseLabel.js:69 +#: ../root/edit/details/MergeReleases.js:257 #: ../root/edit/details/historic/AddRelease.js:153 #: ../root/edit/details/historic/EditReleaseEvents.js:136 #: ../root/label/LabelHeader.js:27 ../root/layout/components/Search.js:39 @@ -2408,8 +2370,8 @@ msgstr "Gardez à l’esprit que déselectionner ceci effacera les pistes si le #: ../root/search/components/SearchForm.js:39 #: ../root/static/scripts/common/constants.js:23 #: ../root/static/scripts/common/utility/formatEntityTypeName.js:56 -#: ../root/user/UserProfile.js:46 ../root/utility/tableColumns.js:503 -#: ../root/utility/tableColumns.js:508 +#: ../root/user/UserProfile.js:46 ../root/utility/tableColumns.js:505 +#: ../root/utility/tableColumns.js:510 msgid "Label" msgstr "Label" @@ -2512,7 +2474,7 @@ msgstr "Chargements des prévisualisations des modifications..." #: ../root/static/scripts/common/components/FingerprintTable.js:87 #: ../root/static/scripts/edit/components/AddEntityDialog.js:101 #: ../root/static/scripts/release/components/MediumTable.js:118 -#: ../root/utility/tableColumns.js:674 +#: ../root/utility/tableColumns.js:676 msgid "Loading..." msgstr "Chargement en cours..." @@ -2552,15 +2514,15 @@ msgstr "Nombre de recherches" #: ../root/components/common-macros.tt:602 #: ../lib/MusicBrainz/Server/Controller/Edit.pm:240 -#: ../root/static/scripts/common/constants.js:276 +#: ../root/static/scripts/common/constants.js:278 msgid "Low" msgstr "Bas" #: ../root/release/edit_relationships.tt:172 -#: ../root/edit/details/AddWork.js:81 ../root/edit/details/EditWork.js:98 +#: ../root/edit/details/AddWork.js:83 ../root/edit/details/EditWork.js:100 #: ../root/layout/components/sidebar/WorkSidebar.js:67 #: ../root/search/components/WorkResults.js:55 -#: ../root/static/scripts/work.js:312 ../root/utility/tableColumns.js:873 +#: ../root/static/scripts/work.js:312 ../root/utility/tableColumns.js:875 msgid "Lyrics Languages" msgstr "Langues des paroles" @@ -2615,22 +2577,6 @@ msgstr "Titre du support :" msgid "Medium track lengths" msgstr "Durée des pistes du support" -#: ../root/edit/details/merge_releases.tt:44 -msgid "Medium {position} is now medium {new_position}" -msgstr "Le support {position} est maintenant le {new_position}" - -#: ../root/edit/details/merge_releases.tt:44 -msgid "Medium {position} is now medium {new_position}: {new_name}" -msgstr "Le support {position} est maintenant le {new_position} : {new_name}" - -#: ../root/edit/details/merge_releases.tt:44 -msgid "Medium {position}: {name} is now medium {new_position}" -msgstr "Le support {position} : {name} est maintenant le {new_position}" - -#: ../root/edit/details/merge_releases.tt:44 -msgid "Medium {position}: {name} is now medium {new_position}: {new_name}" -msgstr "Le support {position} : {name} est maintenant le {new_position} : {new_name}" - #: ../root/layout/merge-helper.tt:30 #: ../root/layout/components/MergeHelper.js:71 #: ../root/layout/components/sidebar/MergeLink.js:31 @@ -2646,12 +2592,7 @@ msgstr "Processus de fusion" msgid "Merge Releases" msgstr "Fusionner des parutions" -#: ../root/edit/details/merge_releases.tt:149 -#: ../lib/MusicBrainz/Server/Form/Merge/Release.pm:51 -msgid "Merge mediums and recordings" -msgstr "Fusionner les supports et les enregistrements" - -#: ../root/edit/details/merge_releases.tt:147 ../root/release/merge.tt:55 +#: ../root/release/merge.tt:55 ../root/edit/details/MergeReleases.js:358 msgid "Merge strategy:" msgstr "Stratégie de fusion : " @@ -2741,7 +2682,7 @@ msgstr "Mon vote :" #: ../root/edit/details/AddReleaseGroup.js:56 #: ../root/edit/details/AddSeries.js:46 #: ../root/edit/details/AddStandaloneRecording.js:56 -#: ../root/edit/details/AddWork.js:52 ../root/edit/details/EditArea.js:70 +#: ../root/edit/details/AddWork.js:54 ../root/edit/details/EditArea.js:70 #: ../root/edit/details/EditArtist.js:86 ../root/edit/details/EditEvent.js:57 #: ../root/edit/details/EditInstrument.js:57 #: ../root/edit/details/EditLabel.js:68 ../root/edit/details/EditMedium.js:522 @@ -2751,7 +2692,7 @@ msgstr "Mon vote :" #: ../root/edit/details/EditRelationshipAttribute.js:76 #: ../root/edit/details/EditRelease.js:75 #: ../root/edit/details/EditReleaseGroup.js:57 -#: ../root/edit/details/EditSeries.js:54 ../root/edit/details/EditWork.js:66 +#: ../root/edit/details/EditSeries.js:54 ../root/edit/details/EditWork.js:68 #: ../root/edit/details/RemoveRelationshipAttribute.js:41 #: ../root/edit/details/RemoveRelationshipType.js:60 #: ../root/edit/details/historic/AddRelease.js:63 @@ -2874,7 +2815,7 @@ msgid "No releases have cover art marked as \"Front\", cannot set cover art." msgstr "Aucune parution n’a d’illustration indiquée comme « Face avant », l’illustration ne peut être assignée. " #: ../root/release/edit/tracklist.tt:140 ../root/admin/IpLookup.js:35 -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:457 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:458 #: ../root/static/scripts/common/components/Autocomplete2/constants.js:90 msgid "No results" msgstr "Aucun résultat" @@ -2919,19 +2860,11 @@ msgstr "Aucun des supports de cette parution ne peut être lié à cette TOC (ta #: ../root/components/common-macros.tt:602 #: ../lib/MusicBrainz/Server/Controller/Edit.pm:240 -#: ../root/static/scripts/common/constants.js:277 -#: ../root/static/scripts/common/constants.js:278 +#: ../root/static/scripts/common/constants.js:279 +#: ../root/static/scripts/common/constants.js:280 msgid "Normal" msgstr "Normal" -#: ../root/edit/details/merge_releases.tt:158 -#: ../root/edit/details/EditRelease.js:182 -#: ../root/edit/details/SetTrackLengths.js:89 -#: ../root/edit/details/historic/MergeReleases.js:69 -#: ../root/user/ReportUser.js:116 -msgid "Note" -msgstr "Note" - #: ../root/release/edit/information.tt:279 msgid "" "Note! If you do not know the month or day of release, please leave them " @@ -3254,13 +3187,13 @@ msgstr "Des données de modification brutes pourraient être proposées." msgid "Recent Notes Left on Your Edits" msgstr "Notes récentes laissées sur vos modifications" -#: ../root/components/common-macros.tt:569 -#: ../root/edit/details/merge_releases.tt:108 -#: ../root/edit/search_macros.tt:417 ../root/release/edit_relationships.tt:53 +#: ../root/components/common-macros.tt:569 ../root/edit/search_macros.tt:417 +#: ../root/release/edit_relationships.tt:53 #: ../lib/MusicBrainz/Server/Edit/Recording.pm:7 #: ../lib/MusicBrainz/Server/Form/Search/Search.pm:38 #: ../root/edit/details/AddStandaloneRecording.js:46 #: ../root/edit/details/EditRecording.js:51 +#: ../root/edit/details/MergeReleases.js:322 #: ../root/edit/details/RemoveIsrc.js:40 #: ../root/edit/details/historic/EditTrack.js:37 #: ../root/layout/components/Search.js:30 @@ -3278,10 +3211,6 @@ msgstr "Enregistrement" msgid "Recording Details" msgstr "Détails de l’enregistrement" -#: ../root/edit/details/merge_releases.tt:104 -msgid "Recording Merges" -msgstr "Fusions d’enregistrement" - #: ../root/user/ratings.tt:2 ../root/user/ratings_summary.tt:3 msgid "Recording ratings" msgstr "Évaluations d’enregistrement" @@ -3341,7 +3270,7 @@ msgstr "Éditeur de relation" #: ../root/edit/search_macros.tt:417 #: ../root/edit/details/AddRelationshipType.js:78 #: ../root/relationship/linktype/RelationshipTypeIndex.js:41 -#: ../root/utility/tableColumns.js:804 +#: ../root/utility/tableColumns.js:806 msgid "Relationship Type" msgstr "Type de relation" @@ -3368,8 +3297,7 @@ msgstr "Les relations en surbrillance <span class=\"rel-edit\">yellow</span> ser #: ../root/cdtoc/attach_artist_releases.tt:15 #: ../root/cdtoc/attach_filter_release.tt:28 ../root/cdtoc/lookup.tt:39 -#: ../root/components/common-macros.tt:569 -#: ../root/edit/details/merge_releases.tt:19 ../root/edit/search_macros.tt:417 +#: ../root/components/common-macros.tt:569 ../root/edit/search_macros.tt:417 #: ../root/release/edit/duplicates.tt:10 ../root/release/merge.tt:12 #: ../lib/MusicBrainz/Server/Edit/Release.pm:8 #: ../lib/MusicBrainz/Server/Form/Search/Search.pm:37 @@ -3380,6 +3308,7 @@ msgstr "Les relations en surbrillance <span class=\"rel-edit\">yellow</span> ser #: ../root/edit/details/EditBarcodes.js:51 #: ../root/edit/details/EditCoverArt.js:51 #: ../root/edit/details/EditReleaseLabel.js:60 +#: ../root/edit/details/MergeReleases.js:252 #: ../root/edit/details/RemoveCoverArt.js:35 #: ../root/edit/details/ReorderCoverArt.js:45 #: ../root/edit/details/ReorderMediums.js:39 @@ -3616,7 +3545,7 @@ msgstr "Enlever l’attribut" #: ../root/components/common-macros.tt:878 #: ../root/components/common-macros.tt:886 #: ../root/components/RemoveFromMergeTableCell.js:39 -#: ../root/utility/tableColumns.js:781 ../root/utility/tableColumns.js:791 +#: ../root/utility/tableColumns.js:783 ../root/utility/tableColumns.js:793 msgid "Remove from merge" msgstr "Retirer de la fusion" @@ -4014,7 +3943,7 @@ msgstr "Échanger les titres de piste avec le crédits d’artiste" #: ../root/search/components/RecordingResults.js:134 #: ../root/search/components/ReleaseResults.js:112 #: ../root/static/scripts/common/components/TaggerIcon.js:40 -#: ../root/utility/tableColumns.js:834 +#: ../root/utility/tableColumns.js:836 msgid "Tagger" msgstr "Baliseur" @@ -4040,12 +3969,6 @@ msgstr "Le champ d’annotation fonctionne comme un mini-wiki." msgid "The catalog number you have entered looks like an Amazon ASIN." msgstr "Le numéro de catalogue que vous avez saisi ressemble à un ASIN d’Amazon." -#: ../root/edit/details/merge_releases.tt:159 -msgid "" -"The data in this edit originally came from an older version of this edit, " -"and may not display correctly" -msgstr "Les données issues de cette modification proviennent d’une ancienne version du système, et pourraient ne pas d’afficher correctement." - #: ../root/layout.tt:90 ../root/layout/index.js:275 msgid "" "The data you have submitted does not make any changes to the data already " @@ -4229,12 +4152,6 @@ msgstr "Ce disque contient des pistes de données à la fin" msgid "This disc has a hidden pregap track before track 1" msgstr "Ce disque a une piste cachée de prégap avant la piste 1" -#: ../root/edit/details/merge_releases.tt:133 -msgid "" -"This edit does not store recording merge information and is closed, so no " -"recording merge information can be shown." -msgstr "Cette modification ne stocke pas les informations de fusion d’enregistrement et est fermée, donc aucune information de fusion d’enregistrement ne peut être montrée." - #: ../root/cdtoc/set_durations.tt:31 msgid "This edit would only make subsecond changes to track lengths." msgstr "Cette modification n’apporterait que des changements de sous-secondes aux durées de piste." @@ -4366,8 +4283,8 @@ msgid "This recording cannot be removed because it is still used on releases." msgstr "Cet enregistrement ne peut pas être enlevé car il est encore utilisé par des parutions." #: ../root/components/common-macros.tt:302 -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:696 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:286 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:697 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:287 #: ../root/static/scripts/common/components/EntityLink.js:289 msgid "This recording is a video" msgstr "Cet enregistrement est une vidéo" @@ -4399,10 +4316,6 @@ msgid "" " relationships." msgstr "Ce groupe de parution sera enlevé automatiquement quand il n’aura plus de parution ni de relation." -#: ../root/edit/details/merge_releases.tt:35 -msgid "This release has no media to merge." -msgstr "Cette parution n’a aucun support à fusionner." - #: ../root/release/discids.tt:58 msgid "This release has no mediums that can have disc IDs." msgstr "Cette parution ne possède aucun support que peut avoir un ID de disque." @@ -4538,14 +4451,10 @@ msgid "Total tracks:" msgstr "Nombre total de pistes :" #: ../root/cdtoc/info.tt:31 ../root/search/components/RecordingResults.js:135 -#: ../root/taglookup/Form.js:41 ../root/utility/tableColumns.js:846 +#: ../root/taglookup/Form.js:41 ../root/utility/tableColumns.js:848 msgid "Track" msgstr "Piste" -#: ../root/edit/details/merge_releases.tt:107 -msgid "Track #" -msgstr "No de piste" - #: ../root/release/edit/tracklist.tt:483 #: ../root/static/scripts/release-editor/dialogs.js:40 msgid "Track Parser" @@ -4580,11 +4489,11 @@ msgstr "Piste {n} :" msgid "Tracklist" msgstr "Liste de pistes" -#: ../root/edit/details/merge_releases.tt:22 ../root/release/discids.tt:9 -#: ../root/release/edit/duplicates.tt:12 ../root/release/merge.tt:15 -#: ../root/artist_credit/ArtistCreditIndex.js:128 +#: ../root/release/discids.tt:9 ../root/release/edit/duplicates.tt:12 +#: ../root/release/merge.tt:15 ../root/artist_credit/ArtistCreditIndex.js:128 #: ../root/artist_credit/ArtistCreditLayout.js:31 #: ../root/components/list/ReleaseList.js:103 +#: ../root/edit/details/MergeReleases.js:255 #: ../root/edit/details/historic/AddRelease.js:113 #: ../root/release_group/ReleaseGroupIndex.js:158 #: ../root/search/components/CDStubResults.js:49 @@ -4628,7 +4537,7 @@ msgstr "Twitter" #: ../root/edit/details/AddLabel.js:107 ../root/edit/details/AddPlace.js:65 #: ../root/edit/details/AddReleaseGroup.js:80 #: ../root/edit/details/AddRemoveAlias.js:101 -#: ../root/edit/details/AddSeries.js:57 ../root/edit/details/AddWork.js:69 +#: ../root/edit/details/AddSeries.js:57 ../root/edit/details/AddWork.js:71 #: ../root/edit/details/EditAlias.js:123 ../root/edit/details/EditArea.js:91 #: ../root/edit/details/EditArtist.js:107 ../root/edit/details/EditEvent.js:78 #: ../root/edit/details/EditInstrument.js:71 @@ -4659,12 +4568,12 @@ msgstr "Twitter" #: ../root/static/scripts/account/components/ApplicationForm.js:87 #: ../root/static/scripts/alias/AliasEditForm.js:329 #: ../root/static/scripts/collection/components/CollectionEditForm.js:83 -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:874 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:447 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:875 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:448 #: ../root/static/scripts/common/components/FilterForm.js:63 -#: ../root/static/scripts/edit/externalLinks.js:904 -#: ../root/static/scripts/edit/externalLinks.js:1157 -#: ../root/utility/tableColumns.js:613 ../root/utility/tableColumns.js:618 +#: ../root/static/scripts/edit/externalLinks.js:941 +#: ../root/static/scripts/edit/externalLinks.js:1181 +#: ../root/utility/tableColumns.js:615 ../root/utility/tableColumns.js:620 msgid "Type" msgstr "Type" @@ -4975,8 +4884,8 @@ msgstr "Wiki transcluseur" #: ../root/components/common-macros.tt:569 ../root/edit/search_macros.tt:417 #: ../lib/MusicBrainz/Server/Edit/Work.pm:9 #: ../lib/MusicBrainz/Server/Form/Search/Search.pm:39 -#: ../root/components/list/WorkList.js:60 ../root/edit/details/AddWork.js:46 -#: ../root/edit/details/EditWork.js:59 ../root/edit/details/RemoveIswc.js:40 +#: ../root/components/list/WorkList.js:60 ../root/edit/details/AddWork.js:48 +#: ../root/edit/details/EditWork.js:61 ../root/edit/details/RemoveIswc.js:40 #: ../root/layout/components/Search.js:34 #: ../root/report/IswcsWithManyWorks.js:49 #: ../root/report/components/WorkList.js:46 @@ -5241,22 +5150,13 @@ msgid "" " please make sure the artists have been entered correctly." msgstr "Vous avez utilisé l’artiste à usage spécial {valink|Artistes divers} sur certaines pistes ci-dessous. {valink|Artistes divers} ne devrait que très rarement être utilisé pour des pistes. Veuillez vous assurer que les artistes ont été saisis correctement." -#: ../root/edit/details/merge_releases.tt:5 -#: ../root/components/list/ReleaseList.js:90 -#: ../root/release_group/ReleaseGroupIndex.js:89 -#: ../root/search/components/ReleaseResults.js:50 -#: ../root/static/scripts/release-editor/duplicates.js:143 -msgid "[missing media]" -msgstr "[support manquant]" - #: ../root/components/common-macros.tt:259 #: ../lib/MusicBrainz/Server/Edit/Relationship/RemoveLinkType.pm:86 #: ../lib/MusicBrainz/Server/Edit/Release/Create.pm:113 -#: ../lib/MusicBrainz/Server/Edit/Work/Create.pm:87 -#: ../lib/MusicBrainz/Server/Edit/Work/Edit.pm:186 #: ../root/edit/details/EditAlias.js:94 #: ../root/edit/details/SetTrackLengths.js:73 #: ../root/static/scripts/common/components/EntityLink.js:41 +#: ../root/static/scripts/common/i18n/localizeLanguageName.js:15 msgid "[removed]" msgstr "[enlevé]" @@ -5402,6 +5302,10 @@ msgstr "historique, jusqu’à {end}" msgid "historical, {begin}-{end}" msgstr "historique, {begin}-{end}" +#: ../root/edit/search_macros.tt:25 +msgid "in an unspecified order (possibly faster)" +msgstr "dans un ordre quelconque (possiblement plus rapide)" + #: ../root/edit/details/macros.tt:28 #: ../root/utility/relationshipDateText.js:25 msgid "in {date}" @@ -5557,10 +5461,6 @@ msgid_plural "plus {n} other private collections" msgstr[0] "plus {n} autre collection privée" msgstr[1] "plus {n} autres collections privées" -#: ../root/edit/search_macros.tt:25 -msgid "randomly" -msgstr "aléatoirement" - #: ../root/edit/search_macros.tt:25 msgid "recently closed first" msgstr "fermée le plus récemment d’abord" @@ -5772,7 +5672,7 @@ msgstr "« Précédent" #: ../root/components/paginator.tt:19 ../root/components/paginator.tt:31 #: ../root/components/paginator.tt:39 ../root/components/Paginator.js:94 #: ../root/components/Paginator.js:119 ../root/components/Paginator.js:133 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:125 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:126 msgid "…" msgstr "…" @@ -6172,14 +6072,6 @@ msgstr "Une parution existe déjà pour cet ID de disque" msgid "There is already a CD stub with this disc ID" msgstr "Il y a déjà une ébauche de CD avec cet ID de disque" -#: ../lib/MusicBrainz/Server/Data/Language.pm:63 -#: ../lib/MusicBrainz/Server/Edit/Work/Create.pm:75 -#: ../lib/MusicBrainz/Server/Edit/Work/Create.pm:85 -#: ../lib/MusicBrainz/Server/Edit/Work/Edit.pm:184 -#: ../lib/MusicBrainz/Server/Form/Utils.pm:48 -msgid "[No lyrics]" -msgstr "[pas de parole]" - #: ../lib/MusicBrainz/Server/Data/LinkType.pm:197 #, perl-brace-format msgid "{t0}-{t1} relationships" @@ -6315,7 +6207,7 @@ msgid "" "The “{gender}” gender has not been added to the destination artist because " "it conflicted with the group type of one of the artists here. Group artists " "cannot have a gender." -msgstr "Le genre « {genre} » n’a pas été ajouté à l’artiste de destination car il était en conflit avec le type de groupe d’un des artistes ici. Les groupes ne peuvent pas avoir un genre." +msgstr "Le genre « {gender} » n’a pas été ajouté à l’artiste de destination car il était en conflit avec le type de groupe d’un des artistes ici. Les groupes ne peuvent pas avoir un genre." #: ../lib/MusicBrainz/Server/Edit/Event/AddAlias.pm:11 msgid "Add event alias" @@ -6421,7 +6313,7 @@ msgstr "Convertir la parution vers un seul artiste (historique)" #: ../lib/MusicBrainz/Server/Edit/Historic/MergeRelease.pm:13 #: ../lib/MusicBrainz/Server/Edit/Historic/MergeReleaseMAC.pm:9 -#: ../lib/MusicBrainz/Server/Edit/Release/Merge.pm:140 +#: ../lib/MusicBrainz/Server/Edit/Release/Merge.pm:141 msgid "Merge releases" msgstr "Fusionner des parutions" @@ -6705,7 +6597,7 @@ msgctxt "medium format" msgid "(unknown)" msgstr "(inconnu)" -#: ../lib/MusicBrainz/Server/Edit/Release/Merge.pm:347 +#: ../lib/MusicBrainz/Server/Edit/Release/Merge.pm:339 #, perl-brace-format msgid "These releases could not be merged: {reason}" msgstr "Ces parutions n’ont pas pu être fusionnées : {reason}" @@ -7343,6 +7235,16 @@ msgstr "Doit être une date valide ou partielle. Exemples : 2006-05-25, 1990-01 msgid "Please pick the entity you want the others merged into." msgstr "Veuillez choisir l’entité vers laquelle fusionner les autres." +#: ../lib/MusicBrainz/Server/Form/Merge/Release.pm:50 +#: ../root/edit/details/MergeReleases.js:65 +msgid "Append mediums to target release" +msgstr "Ajouter ces supports à la parution cible" + +#: ../lib/MusicBrainz/Server/Form/Merge/Release.pm:51 +#: ../root/edit/details/MergeReleases.js:66 +msgid "Merge mediums and recordings" +msgstr "Fusionner les supports et les enregistrements" + #: ../lib/MusicBrainz/Server/Form/Merge/Release.pm:62 msgid "Another medium is already in this position" msgstr "Un autre support est déjà à cette position" @@ -7390,22 +7292,22 @@ msgid "A fluency level is required." msgstr "Un niveau de maîtrise est requis." #: ../lib/MusicBrainz/Server/Form/Role/UserProfile.pm:70 -#: ../root/static/scripts/common/constants.js:287 +#: ../root/static/scripts/common/constants.js:289 msgid "Basic" msgstr "De base" #: ../lib/MusicBrainz/Server/Form/Role/UserProfile.pm:71 -#: ../root/static/scripts/common/constants.js:288 +#: ../root/static/scripts/common/constants.js:290 msgid "Intermediate" msgstr "Intermédiaire" #: ../lib/MusicBrainz/Server/Form/Role/UserProfile.pm:72 -#: ../root/static/scripts/common/constants.js:286 +#: ../root/static/scripts/common/constants.js:288 msgid "Advanced" msgstr "Avancé" #: ../lib/MusicBrainz/Server/Form/Role/UserProfile.pm:73 -#: ../root/static/scripts/common/constants.js:289 +#: ../root/static/scripts/common/constants.js:291 msgid "Native" msgstr "Natif" @@ -7547,6 +7449,11 @@ msgstr "2 semaines" msgid "A month" msgstr "Un mois" +#: ../lib/MusicBrainz/Server/Form/Utils.pm:48 +#: ../root/static/scripts/common/i18n/localizeLanguageName.js:19 +msgid "[No lyrics]" +msgstr "[pas de parole]" + #: ../lib/MusicBrainz/Server/Form/Utils.pm:84 msgctxt "script optgroup" msgid "Frequently used" @@ -7886,7 +7793,7 @@ msgstr "Accès" #: ../root/components/Aliases/AliasTable.js:31 #: ../root/components/Aliases/ArtistCreditList.js:54 #: ../root/static/scripts/common/components/FingerprintTable.js:53 -#: ../root/utility/tableColumns.js:78 +#: ../root/utility/tableColumns.js:80 msgid "Actions" msgstr "Actions" @@ -8019,7 +7926,7 @@ msgstr "Texte libre" #: ../root/edit/details/AddRelationshipType.js:191 #: ../root/edit/details/RemoveRelationshipType.js:136 #: ../root/relationship/linktype/RelationshipTypeIndex.js:165 -#: ../root/utility/tableColumns.js:626 +#: ../root/utility/tableColumns.js:628 msgid "Attributes" msgstr "Attributs" @@ -8040,12 +7947,12 @@ msgstr "Impossible de supprimer l’attribut" #: ../root/admin/attributes/Language.js:33 #: ../root/admin/attributes/Language.js:36 -#: ../root/edit/details/AddRelease.js:108 ../root/edit/details/AddWork.js:75 +#: ../root/edit/details/AddRelease.js:108 ../root/edit/details/AddWork.js:77 #: ../root/edit/details/EditRelease.js:131 #: ../root/edit/details/historic/AddRelease.js:104 ../root/iswc/Index.js:59 #: ../root/report/IswcsWithManyWorks.js:53 #: ../root/search/components/ReleaseResults.js:107 -#: ../root/utility/tableColumns.js:524 +#: ../root/utility/tableColumns.js:526 msgid "Language" msgstr "Langue" @@ -8233,7 +8140,7 @@ msgstr "Impossible d’afficher une carte, car le jeton d’accès au service ca #: ../root/area/AreaPlaces.js:68 msgid "Add selected places for merging" -msgstr "" +msgstr "Ajouter les lieux choisis pour la fusion" #: ../root/area/AreaPlaces.js:77 msgid "This area is not currently associated with any places." @@ -8932,7 +8839,7 @@ msgstr "Œuvres connexes" #: ../root/components/Relationships.js:116 msgid "" "{link} only has event relationships, which are displayed in the Events tab." -msgstr "" +msgstr "{link} n’a des relations qu’avec des événements, voir l’onglet Événements." #: ../root/components/Relationships.js:127 msgid "{link} has no relationships." @@ -8962,6 +8869,19 @@ msgstr "Aucune relation du type sélectionné n’a été trouvée." msgid "The provided relationship type ID is not valid." msgstr "L’ID de type de relation fourni n’est pas valide." +#: ../root/components/ReleaseLanguageScript.js:24 +#: ../root/components/ReleaseLanguageScript.js:30 +#: ../root/components/list/ReleaseList.js:100 +#: ../root/edit/details/MergeReleases.js:88 ../root/release/CoverArt.js:92 +#: ../root/release_group/ReleaseGroupIndex.js:90 +#: ../root/search/components/ReleaseResults.js:55 +#: ../root/static/scripts/common/components/ReleaseEvents.js:55 +#: ../root/static/scripts/common/components/ReleaseEvents.js:72 +#: ../root/static/scripts/release-editor/duplicates.js:145 +msgctxt "missing data" +msgid "-" +msgstr "-" + #: ../root/components/StaticRelationshipsDisplay.js:25 msgid "{start_track}–{end_track}" msgstr "{start_track}–{end_track}" @@ -9144,6 +9064,14 @@ msgstr "Adresse" msgid "Unspecified type" msgstr "Type non spécifié" +#: ../root/components/list/ReleaseList.js:90 +#: ../root/edit/details/MergeReleases.js:83 +#: ../root/release_group/ReleaseGroupIndex.js:89 +#: ../root/search/components/ReleaseResults.js:50 +#: ../root/static/scripts/release-editor/duplicates.js:143 +msgid "[missing media]" +msgstr "[support manquant]" + #: ../root/components/list/ReleaseList.js:153 #: ../root/search/components/ReleaseResults.js:109 msgid "Status" @@ -9153,8 +9081,8 @@ msgstr "Statut" #: ../root/report/IswcsWithManyWorks.js:50 #: ../root/report/components/WorkList.js:51 #: ../root/search/components/WorkResults.js:51 -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:894 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:454 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:895 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:455 msgid "Writers" msgstr "Écrivains" @@ -9272,22 +9200,22 @@ msgid "" msgstr "{edit} a reçu un ou plusieurs votes « non », vous devez laissez un commentaire pour pouvoir l’approuver." #: ../root/edit/components/EditHeader.js:46 -#: ../root/edit/components/EditorTypeInfo.js:28 +#: ../root/edit/components/EditorTypeInfo.js:29 msgid "This user is new to MusicBrainz." msgstr "Cet utilisateur est nouveau sur MusicBrainz" #: ../root/edit/components/EditHeader.js:48 -#: ../root/edit/components/EditorTypeInfo.js:30 +#: ../root/edit/components/EditorTypeInfo.js:31 msgid "beginner" msgstr "débutant" #: ../root/edit/components/EditHeader.js:55 -#: ../root/edit/components/EditorTypeInfo.js:38 +#: ../root/edit/components/EditorTypeInfo.js:39 msgid "This user is automated." msgstr "Cet utilisateur est automatique." #: ../root/edit/components/EditHeader.js:56 -#: ../root/edit/components/EditorTypeInfo.js:39 +#: ../root/edit/components/EditorTypeInfo.js:40 msgid "bot" msgstr "robot" @@ -9593,7 +9521,7 @@ msgstr "Principal pour cette locale" #: ../root/edit/details/AddSeries.js:65 ../root/edit/details/EditSeries.js:79 #: ../root/layout/components/sidebar/SeriesSidebar.js:52 -#: ../root/utility/tableColumns.js:819 +#: ../root/utility/tableColumns.js:821 msgid "Ordering Type" msgstr "Type de tri" @@ -9679,6 +9607,14 @@ msgstr "Ancien artiste" msgid "New Artist" msgstr "Nouvel artiste" +#: ../root/edit/details/EditRelease.js:182 +#: ../root/edit/details/MergeReleases.js:364 +#: ../root/edit/details/SetTrackLengths.js:89 +#: ../root/edit/details/historic/MergeReleases.js:69 +#: ../root/user/ReportUser.js:116 +msgid "Note" +msgstr "Note" + #: ../root/edit/details/EditRelease.js:183 msgid "This edit also changed the track artists." msgstr "Cette modification a aussi changé les artistes des pistes." @@ -9710,7 +9646,7 @@ msgstr "Cette modification était une fusion." msgid "Search for the target URL." msgstr "Rechercher l’URL cible." -#: ../root/edit/details/EditWork.js:87 +#: ../root/edit/details/EditWork.js:89 msgid "Work type" msgstr "Type d’œuvre" @@ -9727,10 +9663,71 @@ msgstr "Type d’œuvre" msgid "Merge:" msgstr "Fusion : " +#: ../root/edit/details/MergeAreas.js:35 +#: ../root/edit/details/MergeArtists.js:37 +#: ../root/edit/details/MergeEvents.js:40 +#: ../root/edit/details/MergeInstruments.js:35 +#: ../root/edit/details/MergeLabels.js:35 +#: ../root/edit/details/MergePlaces.js:35 +#: ../root/edit/details/MergeRecordings.js:40 +#: ../root/edit/details/MergeReleaseGroups.js:35 +#: ../root/edit/details/MergeReleases.js:288 +#: ../root/edit/details/MergeReleases.js:295 +#: ../root/edit/details/MergeReleases.js:305 +#: ../root/edit/details/MergeReleases.js:323 +#: ../root/edit/details/MergeSeries.js:35 +#: ../root/edit/details/MergeWorks.js:35 +msgid "Into:" +msgstr "Dans : " + #: ../root/edit/details/MergeArtists.js:43 msgid "Rename artist and relationship credits" msgstr "Renommer l’artiste et les crédits de relation" +#: ../root/edit/details/MergeReleases.js:131 +msgid "Medium {position}: {name} is now medium {new_position}: {new_name}" +msgstr "Le support {position} : {name} est maintenant le {new_position} : {new_name}" + +#: ../root/edit/details/MergeReleases.js:142 +msgid "Medium {position}: {name} is now medium {new_position}" +msgstr "Le support {position} : {name} est maintenant le {new_position}" + +#: ../root/edit/details/MergeReleases.js:151 +msgid "Medium {position} is now medium {new_position}: {new_name}" +msgstr "Le support {position} est maintenant le {new_position} : {new_name}" + +#: ../root/edit/details/MergeReleases.js:162 +msgid "Medium {position} is now medium {new_position}" +msgstr "Le support {position} est maintenant le {new_position}" + +#: ../root/edit/details/MergeReleases.js:271 +msgid "This release has no media to merge." +msgstr "Cette parution n’a aucun support à fusionner." + +#: ../root/edit/details/MergeReleases.js:318 +msgid "Recording Merges" +msgstr "Fusions d’enregistrement" + +#: ../root/edit/details/MergeReleases.js:321 +msgid "Track #" +msgstr "No de piste" + +#: ../root/edit/details/MergeReleases.js:333 +msgid "" +"This edit does not store recording merge information and is closed, so no " +"recording merge information can be shown." +msgstr "Cette modification ne stocke pas les informations de fusion d’enregistrement et est fermée, donc aucune information de fusion d’enregistrement ne peut être montrée." + +#: ../root/edit/details/MergeReleases.js:350 +msgid "All recordings for these releases are already merged." +msgstr "Tous les enregistrements ont déjà été fusionnés pour cette parution." + +#: ../root/edit/details/MergeReleases.js:366 +msgid "" +"The data in this edit originally came from an older version of this edit, " +"and may not display correctly" +msgstr "Les données issues de cette modification proviennent d’une ancienne version du système, et pourraient ne pas d’afficher correctement." + #: ../root/edit/details/MoveDiscId.js:46 #: ../root/edit/details/historic/MoveDiscId.js:41 msgid "From:" @@ -10371,7 +10368,7 @@ msgstr "{link} n’a pas d’évaluation." #: ../root/entity/Subscribers.js:57 msgid "This is a special purpose entity and does not support subscriptions." -msgstr "" +msgstr "C’est une entité à usage spécial à laquelle il n’est pas possible de s’abonner." #: ../root/entity/Subscribers.js:68 msgid "There is currently {num} user subscribed to edits that you make:" @@ -10802,7 +10799,7 @@ msgstr "Index de la documentation" #: ../root/relationship/RelationshipsHeader.js:19 #: ../root/relationship/linktype/RelationshipTypeIndex.js:61 #: ../root/relationship/linktype/RelationshipTypesList.js:62 -#: ../root/utility/tableColumns.js:343 +#: ../root/utility/tableColumns.js:345 msgid "Relationship Types" msgstr "Types de relation" @@ -10812,7 +10809,7 @@ msgstr "Développement" #: ../root/layout/components/ExternalLinks.js:57 msgid "{url} (as {credited_name})" -msgstr "" +msgstr "{url} (en tant que {credited_name})" #: ../root/layout/components/ExternalLinks.js:122 msgid "Official homepage" @@ -11218,7 +11215,7 @@ msgstr "Licence" #: ../root/layout/components/sidebar/SidebarRating.js:25 #: ../root/static/scripts/release/components/MediumTable.js:223 -#: ../root/utility/tableColumns.js:437 +#: ../root/utility/tableColumns.js:439 msgid "Rating" msgstr "Évaluation" @@ -12042,7 +12039,7 @@ msgid "" msgstr "Êtes-vous certain de vouloir supprimer l’Illustration ci-dessous de la parution {release} par {artist} ?" #: ../root/release_group/ReleaseGroupHeader.js:30 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:404 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:405 msgid "Release group by {artist}" msgstr "Groupe de parution par {artist}" @@ -12074,11 +12071,11 @@ msgstr "Annotations sur les artistes" #: ../root/report/AnnotationsEvents.js:31 msgid "This report lists events with annotations." -msgstr "" +msgstr "Ce rapport liste les événements avec des annotations." #: ../root/report/AnnotationsEvents.js:36 msgid "Event annotations" -msgstr "" +msgstr "Annotations sur les événements" #: ../root/report/AnnotationsLabels.js:31 msgid "This report lists labels with annotations." @@ -13205,7 +13202,7 @@ msgstr "Éditeurs" #: ../root/report/ReportsIndex.js:142 msgid "Events with annotations" -msgstr "" +msgstr "Événements avec des annotations" #: ../root/report/ReportsIndex.js:146 msgid "Possibly duplicate events" @@ -13332,9 +13329,9 @@ msgstr "URL Wikidata liées à de multiple entités" #: ../root/report/ReportsIndex.js:574 #: ../root/search/components/RecordingResults.js:132 -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:728 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:311 -#: ../root/utility/tableColumns.js:655 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:729 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:312 +#: ../root/utility/tableColumns.js:657 msgid "ISRCs" msgstr "ISRC" @@ -13582,7 +13579,7 @@ msgstr "Autres recherches" #: ../root/search/components/ArtistResults.js:55 #: ../root/search/components/LabelResults.js:68 #: ../root/search/components/PlaceResults.js:65 -#: ../root/utility/tableColumns.js:150 ../root/utility/tableColumns.js:155 +#: ../root/utility/tableColumns.js:152 ../root/utility/tableColumns.js:157 msgid "Begin" msgstr "Début (date)" @@ -13600,9 +13597,9 @@ msgid "Documentation Search" msgstr "Recherche dans la documentation" #: ../root/search/components/EventResults.js:71 -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:1044 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:183 -#: ../root/utility/tableColumns.js:358 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:1045 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:184 +#: ../root/utility/tableColumns.js:360 msgid "Location" msgstr "Lieu" @@ -13912,7 +13909,7 @@ msgid "Show more artist credits" msgstr "Montrer plus de crédits d’artiste" #: ../root/static/scripts/artist/components/ArtistCreditRenamer.js:254 -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:464 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:465 #: ../root/static/scripts/common/components/Autocomplete2/constants.js:103 #: ../root/static/scripts/common/components/Collapsible.js:76 msgid "Show more..." @@ -13942,56 +13939,56 @@ msgstr "Créer une collection" msgid "Update collection" msgstr "Mettre à jour la collection" -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:82 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:83 #: ../root/static/scripts/common/components/Autocomplete2/constants.js:96 msgid "An error occurred while searching. Click here to try again." msgstr "Une erreur est survenue durant la recherche. Cliquez ici pour ressayer." -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:87 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:88 msgid "Try with direct search instead." msgstr "Essayez plutôt une recherche directe." -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:88 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:89 msgid "Try with indexed search instead." msgstr "Essayez plutôt une recherche indexée." -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:120 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:121 #: ../root/static/scripts/common/components/Autocomplete2.js:648 msgid "Type to search, or paste an MBID" msgstr "Essayer de rechercher ou de coller un MBID" -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:202 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:203 #: ../root/static/scripts/common/components/Autocomplete2/constants.js:51 msgid "Clear recent items" msgstr "Effacer les éléments récents" -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:471 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:472 #: ../root/static/scripts/common/components/Autocomplete2/constants.js:110 msgid "Not found? Try again with direct search." msgstr "Introuvable ? Essayez à nouveau avec la recherche directe." -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:472 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:473 #: ../root/static/scripts/common/components/Autocomplete2/constants.js:117 msgid "Slow? Switch back to indexed search." msgstr "Lent ? Revenez à la recherche indexée." -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:715 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:303 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:716 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:304 msgid "appears on" msgstr "apparaît dans" -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:721 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:307 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:722 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:308 msgid "standalone recording" msgstr "enregistrement isolé" -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:815 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:399 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:816 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:400 msgid "{release_group_type} by {artist}" msgstr "{release_group_type} par {artist}" -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:1043 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:180 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:1044 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:181 msgid "Performers" msgstr "Interprètes" @@ -14105,11 +14102,11 @@ msgstr "Chercher une série" msgid "Search for a work" msgstr "Chercher une œuvre" -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:298 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:299 msgid "by {artist}" msgstr "par {artist}" -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:362 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:363 msgid "{first_list_item} … {last_list_item}" msgstr "{first_list_item} … {last_list_item}" @@ -14450,181 +14447,191 @@ msgstr "Fondé à :" msgid "Dissolved in:" msgstr "Séparé à :" -#: ../root/static/scripts/edit/URLCleanup.js:360 +#: ../root/static/scripts/edit/URLCleanup.js:361 msgid "" "Please link to a channel, not a specific video. Videos should be linked to " "the appropriate recordings or releases instead." msgstr "Merci de lier à une chaîne plutôt qu’à une vidéo en particulier. Les vidéos peuvent être ajoutées aux enregistrements ou parutions correspondantes." -#: ../root/static/scripts/edit/URLCleanup.js:366 +#: ../root/static/scripts/edit/URLCleanup.js:367 msgid "" "Please link to a specific video. Add channel pages to the relevant artist, " "label, etc. instead." msgstr "Merci de lier à la vidéo correspondante. Les chaînes peuvent être ajoutées à un artiste, un label, etc." -#: ../root/static/scripts/edit/URLCleanup.js:533 +#: ../root/static/scripts/edit/URLCleanup.js:534 msgid "" "Allmusic “{album_url_pattern}” links should be added to release groups. To " "find the appropriate release link for this release, please check the " "Releases tab from {album_url|your link}." msgstr "Les liens « {album_url_pattern} » de Allmusic doivent être ajoutés aux groupes de parution. Pour trouver le lien Allmusic approprié à cette parution, merci de regarder dans l’onglet « Releases » de {album_url|votre lien}." -#: ../root/static/scripts/edit/URLCleanup.js:753 +#: ../root/static/scripts/edit/URLCleanup.js:754 msgid "" "Only Apple Books “{artist_url_pattern}” pages can be added directly to " "artists. Please link audiobooks to the appropriate release instead." msgstr "Seuls les liens «  {artist_url_pattern}  » d’Apple Books peuvent être ajoutés directement aux artistes. Merci de lier les livres audio à la parution appropriée." -#: ../root/static/scripts/edit/URLCleanup.js:769 +#: ../root/static/scripts/edit/URLCleanup.js:770 msgid "" "Only Apple Books audiobooks can be added to MusicBrainz. Consider adding " "books to {bookbrainz_url|BookBrainz} instead." msgstr "Seuls les livres audio d’Apple Books peuvent être ajoutés à MusicBrainz. Veuillez envisager de les ajouter à {bookbrainz_url|BookBrainz} à la place." -#: ../root/static/scripts/edit/URLCleanup.js:856 +#: ../root/static/scripts/edit/URLCleanup.js:857 msgid "" "Please link to the main page for the artist, not to a specific album or " "track." msgstr "Merci de lier à la page principale pour cet artiste, plutôt qu’à un album ou une piste en particulier." -#: ../root/static/scripts/edit/URLCleanup.js:868 +#: ../root/static/scripts/edit/URLCleanup.js:869 msgid "" "Please link to the main page for the label, not to a specific album or " "track." msgstr "Merci de lier à la page principale pour ce label, plutôt qu’à un album ou une piste en particulier." -#: ../root/static/scripts/edit/URLCleanup.js:1052 +#: ../root/static/scripts/edit/URLCleanup.js:1053 msgid "Please link to the main page for the artist, not a specific product." msgstr "Merci de lier à la page principale pour cet artiste, plutôt qu’à un produit en particulier." -#: ../root/static/scripts/edit/URLCleanup.js:1054 +#: ../root/static/scripts/edit/URLCleanup.js:1055 msgid "Please link to the main page for the label, not a specific product." msgstr "Merci de lier à la page principale pour ce label, plutôt qu’à un produit en particulier." -#: ../root/static/scripts/edit/URLCleanup.js:1597 +#: ../root/static/scripts/edit/URLCleanup.js:1600 msgid "" "Discogs “{master_url_pattern}” links group several releases, so this should " "be added to the release group instead." msgstr "Les liens « {master_url_pattern} » de Discogs groupent plusieurs parutions, ils doivent donc être ajoutés au groupe de parution." -#: ../root/static/scripts/edit/URLCleanup.js:2086 +#: ../root/static/scripts/edit/URLCleanup.js:2090 msgid "" "Only IMSLP “{category_url_pattern}” links are allowed for artists. Please " "link work pages to the specific work in question." msgstr "Les liens «  {explore_url_pattern}  » de IMSLP sont les seuls autorisés pour les artistes. Merci de lier les pages d’œuvre à l’œuvre en question." -#: ../root/static/scripts/edit/URLCleanup.js:2104 +#: ../root/static/scripts/edit/URLCleanup.js:2108 msgid "" "IMSLP “{category_url_pattern}” links are only allowed for artists. Please " "link the specific work page to this work instead, if available." msgstr "Les liens «  {explore_url_pattern}  » de IMSLP ne sont autorisés que pour les artistes. Merci de lier la page dédiée à cette œuvre, si elle existe." -#: ../root/static/scripts/edit/URLCleanup.js:2149 +#: ../root/static/scripts/edit/URLCleanup.js:2153 msgid "" "Instagram “{explore_url_pattern}” links are not allowed. Please link to a " "profile instead, if there is one." msgstr "Les liens «  {explore_url_pattern}  » de Instagram ne sont pas autorisés. Merci de lier à un profil Instagram, s’il existe." -#: ../root/static/scripts/edit/URLCleanup.js:2177 +#: ../root/static/scripts/edit/URLCleanup.js:2181 msgid "" "Please do not link directly to images, link to the appropriate Instagram " "profile page instead. If you want to link to a video, {url|add a standalone " "recording} for it instead." msgstr "Merci de ne pas lier directement aux images, liez plutôt au profil Instagram correspondant à cette page, s’il existe. Si vous voulez lier à une vidéo, {url|ajoutez un enregistrement isolé} pour cela à la place." -#: ../root/static/scripts/edit/URLCleanup.js:2202 +#: ../root/static/scripts/edit/URLCleanup.js:2206 msgid "This is an internal Instagram page and should not be added." msgstr "C’est une page interne à Instagram et ne doit donc pas être ajoutée." -#: ../root/static/scripts/edit/URLCleanup.js:2278 +#: ../root/static/scripts/edit/URLCleanup.js:2282 msgid "" "Only iTunes “{artist_url_pattern}” pages can be added directly to artists. " "Please link albums, videos, etc. to the appropriate release or recording " "instead." msgstr "Seuls les liens «  {artist_url_pattern}  » de iTunes peuvent être ajoutés directement aux artistes. Merci de lier les albums, vidéos, etc. à l’enregistrement ou à la parution appropriée." -#: ../root/static/scripts/edit/URLCleanup.js:2890 +#: ../root/static/scripts/edit/URLCleanup.js:2895 msgid "" "Musixmatch “{album_url_pattern}” pages are a bad match for MusicBrainz " "release groups, and linking to them is currently disallowed. Please consider" " adding Musixmatch links to the relevant artists and works instead." msgstr "Les pages « {album_url_pattern} » de Musixmatch ne correspondent pas bien aux groupes de parution de MusicBrainz, c’est pourquoi elles ne sont actuellement pas autorisées. À la place, n’hésitez pas à ajouter d’autres liens de Musixmatch directement aux artistes et œuvres correspondants de MusicBrainz." -#: ../root/static/scripts/edit/URLCleanup.js:2993 +#: ../root/static/scripts/edit/URLCleanup.js:2998 msgid "" "This is a redirect link. Please follow {redirect_url|your link} and add the " "link it redirects to instead." msgstr "Ceci est un lien de redirection. Merci de suivre {redirect_url|votre lien} et d’ajouter le lien final à la place." -#: ../root/static/scripts/edit/URLCleanup.js:3504 +#: ../root/static/scripts/edit/URLCleanup.js:3464 +msgid "Only RYM music videos can be linked to recordings." +msgstr "Seul les clips RYM peuvent être liés à des enregistrements." + +#: ../root/static/scripts/edit/URLCleanup.js:3516 msgid "" "This is a link to the old Resident Advisor domain. Please follow " "{ra_url|your link}, make sure the link it redirects to is still the correct " "one and, if so, add that link instead." msgstr "Ceci est un lien vers l’ancien nom de domaine de Resident Advisor. Merci de suivre {ra_url|votre lien} et d’ajouter le lien final à la place, si approprié." -#: ../root/static/scripts/edit/URLCleanup.js:4092 +#: ../root/static/scripts/edit/URLCleanup.js:4143 msgid "This is not a profile, but a Twitter documentation page." msgstr "Cet n’est pas un profil, mais une page de documentation Twitter." -#: ../root/static/scripts/edit/URLCleanup.js:4106 +#: ../root/static/scripts/edit/URLCleanup.js:4157 msgid "Please link to Twitter profiles, not tweets." msgstr "Merci de lier au profil Twitter, pas à un tweet." -#: ../root/static/scripts/edit/URLCleanup.js:4124 +#: ../root/static/scripts/edit/URLCleanup.js:4175 msgid "This site does not allow direct links to their images." msgstr "Ce site n’autorise pas les liens directs vers ses images." -#: ../root/static/scripts/edit/URLCleanup.js:4331 +#: ../root/static/scripts/edit/URLCleanup.js:4372 +msgid "" +"Please link to the “{allowed_url_pattern}” page rather than this " +"“{current_url_pattern}” link." +msgstr "Merci de lier à la page en « {allowed_url_pattern} » plutôt que ce lien en « {current_url_pattern} »." + +#: ../root/static/scripts/edit/URLCleanup.js:4428 msgid "" "There is an unencoded “?” or “#” character in this URL. Please check whether" " it is useless and should be removed, or whether it is an error and the URL " "is misencoded." msgstr "Il y a un caractère « ? » ou « # » non encodé dans cette URL. Veuillez vérifier si il est inutile et doit être supprimé ou si c’est une erreur et que l’URL est mal encodée." -#: ../root/static/scripts/edit/URLCleanup.js:4351 +#: ../root/static/scripts/edit/URLCleanup.js:4448 msgid "" "Please do not link directly to WhoSampled “{unwanted_url_pattern}” pages. " "Link to the appropriate WhoSampled artist, track or album page instead." msgstr "Merci de ne pas lier directement aux pages « {unwanted_url_pattern} » de WhoSampled. À la place, liez à la page WhoSampled de l’artiste, de la piste, ou de l’album concerné." -#: ../root/static/scripts/edit/URLCleanup.js:4372 +#: ../root/static/scripts/edit/URLCleanup.js:4469 msgid "Please link WhoSampled “{album_url_pattern}” pages to release groups." msgstr "Merci de lier les pages « {album_url_pattern} » de WhoSampled aux groupes de parution." -#: ../root/static/scripts/edit/URLCleanup.js:4390 +#: ../root/static/scripts/edit/URLCleanup.js:4487 msgid "Please link WhoSampled artist pages to artists." msgstr "Merci de lier les pages d’artiste de WhoSampled aux artistes." -#: ../root/static/scripts/edit/URLCleanup.js:4402 +#: ../root/static/scripts/edit/URLCleanup.js:4499 msgid "Please link WhoSampled track pages to recordings." msgstr "Merci de lier les pages de pistes de WhoSampled aux enregistrements." -#: ../root/static/scripts/edit/URLCleanup.js:4469 +#: ../root/static/scripts/edit/URLCleanup.js:4566 msgid "" "Links to specific sections of Wikipedia articles are not allowed. Please " "remove “{fragment}” if still appropriate. See the {url|guidelines}." msgstr "Les liens vers les sections spécifiques des articles Wikipédia ne sont pas autorisés. Veuillez supprimer « {fragment} » si cela reste approprié. Voir les {url|directives}." -#: ../root/static/scripts/edit/URLCleanup.js:4570 +#: ../root/static/scripts/edit/URLCleanup.js:4669 msgid "Only video and playlist links are allowed on releases." msgstr "Seuls les liens vers des vidéos ou des listes de lecture sont autorisés pour les parutions." -#: ../root/static/scripts/edit/URLCleanup.js:4606 +#: ../root/static/scripts/edit/URLCleanup.js:4705 msgid "" "Wikipedia normally has no entries for specific releases, so adding Wikipedia" " links to a release is currently blocked. Please add this Wikipedia link to " "the release group instead, if appropriate." msgstr "Wikpédia n’a normalement aucune entrée pour des parutions spécifiques, donc les liens Wikpédia sont bloqués pour les parutions. À la place, merci d’ajouter ce lien Wikpédia au groupe de parution, si approprié." -#: ../root/static/scripts/edit/URLCleanup.js:4618 +#: ../root/static/scripts/edit/URLCleanup.js:4717 msgid "" "Wikidata normally has no entries for specific releases, so adding Wikidata " "links to a release is currently blocked. Please add this Wikidata link to " "the release group instead, if appropriate." msgstr "Wikidata n’a normalement aucune entrée pour des parutions spécifiques, donc les liens Wikidata sont bloqués pour les parutions. À la place, merci d’ajouter ce lien Wikidata au groupe de parution, si approprié." -#: ../root/static/scripts/edit/URLCleanup.js:4630 +#: ../root/static/scripts/edit/URLCleanup.js:4729 msgid "" "This is a Bandcamp profile, not a page for a specific release. Even if it " "shows this release right now, that can change when the artist releases " @@ -14633,7 +14640,7 @@ msgid "" "add this profile link to the appropriate artist or label." msgstr "Ceci est un profil Bandcamp, pas une page de parution. Même si elle est montre une parution actuellement, cela pourrait changer quand l’artiste sortira une nouvelle parution. Merci de trouver et d’ajouter la page de parution appropriée (« {album_url_pattern} » ou « {single_url_pattern} ») à la place, et n’hésitez pas à ajouter ce profil Bandcamp à l’artiste ou au label correspondant." -#: ../root/static/scripts/edit/URLCleanup.js:4658 +#: ../root/static/scripts/edit/URLCleanup.js:4757 msgid "" "This is a Bandcamp profile, not a page for a specific recording. Even if it " "shows a single recording right now, that can change when the artist releases" @@ -14642,12 +14649,12 @@ msgid "" "the appropriate artist or label." msgstr "Ceci est un profil Bandcamp, pas une page pour un enregistrement. Même si elle est montre un seul enregistrement actuellement, cela pourrait changer quand l’artiste sortira un nouvel enregistrement. Merci de trouver et d’ajouter la page appropriée pour cet enregistrement (« {single_url_pattern} ») à la place, et n’hésitez pas à ajouter ce profil Bandcamp à l’artiste ou au label correspondant." -#: ../root/static/scripts/edit/URLCleanup.js:4821 +#: ../root/static/scripts/edit/URLCleanup.js:4920 msgid "Some relationship types are missing for this URL." msgstr "Certains types de relation sont manquants pour cette URL." -#: ../root/static/scripts/edit/URLCleanup.js:4838 -#: ../root/static/scripts/edit/externalLinks.js:743 +#: ../root/static/scripts/edit/URLCleanup.js:4937 +#: ../root/static/scripts/edit/externalLinks.js:767 msgid "This relationship type combination is invalid." msgstr "Cette combinaison de types de relation est invalide." @@ -14810,49 +14817,93 @@ msgstr "Veuillez choisir un type de lien pour l’URL que vous avez saisie." msgid "This relationship already exists." msgstr "Cette relation existe déjà." -#: ../root/static/scripts/edit/externalLinks.js:609 +#: ../root/static/scripts/edit/externalLinks.js:607 #: ../root/static/scripts/relationship-editor/common/dialog.js:565 msgid "" "This URL is not allowed for the selected link type, or is incorrectly " "formatted." msgstr "Cette URL n’est pas permise pour le type de lien choisi, ou elle est mal formatée." -#: ../root/static/scripts/edit/externalLinks.js:615 +#: ../root/static/scripts/edit/externalLinks.js:612 msgid "This URL is not allowed for the selected link type." msgstr "Cette URL n’est pas permise pour le type de lien sélectionné" -#: ../root/static/scripts/edit/externalLinks.js:674 +#: ../root/static/scripts/edit/externalLinks.js:618 +msgid "This URL is not allowed for areas." +msgstr "Cette URL n’est pas permise pour les régions." + +#: ../root/static/scripts/edit/externalLinks.js:620 +msgid "This URL is not allowed for artists." +msgstr "Cette URL n’est pas permise pour les artistes." + +#: ../root/static/scripts/edit/externalLinks.js:622 +msgid "This URL is not allowed for events." +msgstr "Cette URL n’est pas permise pour les événements." + +#: ../root/static/scripts/edit/externalLinks.js:624 +msgid "This URL is not allowed for instruments." +msgstr "Cette URL n’est pas permise pour les instruments." + +#: ../root/static/scripts/edit/externalLinks.js:626 +msgid "This URL is not allowed for labels." +msgstr "Cette URL n’est pas permise pour les labels." + +#: ../root/static/scripts/edit/externalLinks.js:628 +msgid "This URL is not allowed for places." +msgstr "Cette URL n’est pas permise pour les lieux." + +#: ../root/static/scripts/edit/externalLinks.js:630 +msgid "This URL is not allowed for recordings." +msgstr "Cette URL n’est pas permise pour les enregistrements." + +#: ../root/static/scripts/edit/externalLinks.js:632 +msgid "This URL is not allowed for releases." +msgstr "Cette URL n’est pas permise pour les parutions." + +#: ../root/static/scripts/edit/externalLinks.js:634 +msgid "This URL is not allowed for release groups." +msgstr "Cette URL n’est pas permise pour les groupes de parution." + +#: ../root/static/scripts/edit/externalLinks.js:637 +msgid "This URL is not allowed for series." +msgstr "Cette URL n’est pas permise pour les séries." + +#: ../root/static/scripts/edit/externalLinks.js:639 +msgid "This URL is not allowed for works." +msgstr "Cette URL n’est pas permise pour les œuvres." + +#: ../root/static/scripts/edit/externalLinks.js:698 msgid "" "Note: This link already exists at position #{position}. To merge, press " "enter or select a type." msgstr "Note : Ce lien existe déjà à la position no. {position}. Pour fusionner, appuyez sur Entrée ou sélectionnez un type." -#: ../root/static/scripts/edit/externalLinks.js:861 +#: ../root/static/scripts/edit/externalLinks.js:885 #: ../root/static/scripts/relationship-editor/common/dialog.js:418 msgid "{description} ({url|more documentation})" msgstr "{description} ({url|plus de documentation})" -#: ../root/static/scripts/edit/externalLinks.js:959 +#: ../root/static/scripts/edit/externalLinks.js:930 +msgid "Remove Relationship" +msgstr "Enlever la relation" + +#: ../root/static/scripts/edit/externalLinks.js:996 msgid "video" msgstr "vidéo" -#: ../root/static/scripts/edit/externalLinks.js:990 -msgid "Remove Relationship" -msgstr "Enlever la relation" +#: ../root/static/scripts/edit/externalLinks.js:1091 +msgid "Remove Link" +msgstr "Enlever un lien" -#: ../root/static/scripts/edit/externalLinks.js:1076 +#: ../root/static/scripts/edit/externalLinks.js:1120 msgid "Add link" msgstr "Ajouter un lien" -#: ../root/static/scripts/edit/externalLinks.js:1079 +#: ../root/static/scripts/edit/externalLinks.js:1123 msgid "Add another link" msgstr "Ajouter un autre lien" -#: ../root/static/scripts/edit/externalLinks.js:1131 -msgid "Remove Link" -msgstr "Enlever un lien" - -#: ../root/static/scripts/edit/externalLinks.js:1180 +#: ../root/static/scripts/edit/externalLinks.js:1205 msgid "Add another relationship" msgstr "Ajouter une autre relation" @@ -15757,15 +15808,15 @@ msgstr "Ne s’est encore jamais connecté" #: ../root/user/UserProfile.js:286 msgid "Authorized applications" -msgstr "" +msgstr "Applications autorisées" #: ../root/user/UserProfile.js:293 ../root/user/UserProfile.js:309 msgid "see list" -msgstr "" +msgstr "voir la liste" #: ../root/user/UserProfile.js:302 msgid "Developer applications" -msgstr "" +msgstr "Applications de développeur" #: ../root/user/UserProfile.js:319 msgid "Homepage:" @@ -16064,11 +16115,11 @@ msgstr "La modification a échoué car elle porte sur des données de haute qual msgid "This edit was cancelled." msgstr "La modification a été annulée." -#: ../root/utility/tableColumns.js:741 +#: ../root/utility/tableColumns.js:743 msgid "AcoustIDs" msgstr "AcoustID" -#: ../root/utility/tableColumns.js:827 +#: ../root/utility/tableColumns.js:829 msgid "Subscribed" msgstr "Abonné" diff --git a/po/mb_server.it.po b/po/mb_server.it.po index b030453277f..8cb6af74078 100644 --- a/po/mb_server.it.po +++ b/po/mb_server.it.po @@ -28,8 +28,8 @@ msgid "" msgstr "" "Project-Id-Version: MusicBrainz\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-09-13 18:38-0500\n" -"PO-Revision-Date: 2021-09-16 19:40+0000\n" +"POT-Creation-Date: 2021-09-28 21:37+0300\n" +"PO-Revision-Date: 2021-09-28 21:17+0000\n" "Last-Translator: Luca Salini\n" "Language-Team: Italian (http://www.transifex.com/musicbrainz/musicbrainz/language/it/)\n" "MIME-Version: 1.0\n" @@ -81,7 +81,7 @@ msgstr "\"AA\" sono le ultime due cifre dell'anno di registrazione." #: ../root/edit/details/historic/AddRelease.js:118 #: ../root/recording/RecordingIndex.js:50 #: ../root/static/scripts/release/components/MediumTable.js:218 -#: ../root/utility/tableColumns.js:537 +#: ../root/utility/tableColumns.js:539 msgid "#" msgstr "#" @@ -137,26 +137,13 @@ msgstr "(era il supporto {position} nella pubblicazione {release})" msgid "(was medium {position}: {name} on release {release})" msgstr "(era il supporto {position}: {name} nella pubblicazione {release})" -#: ../root/edit/details/merge_releases.tt:6 -#: ../root/components/ReleaseLanguageScript.js:24 -#: ../root/components/ReleaseLanguageScript.js:30 -#: ../root/components/list/ReleaseList.js:100 ../root/release/CoverArt.js:92 -#: ../root/release_group/ReleaseGroupIndex.js:90 -#: ../root/search/components/ReleaseResults.js:55 -#: ../root/static/scripts/common/components/ReleaseEvents.js:55 -#: ../root/static/scripts/common/components/ReleaseEvents.js:72 -#: ../root/static/scripts/release-editor/duplicates.js:145 -msgctxt "missing data" -msgid "-" -msgstr "-" - #: ../root/cdtoc/attach_artist_releases.tt:16 #: ../root/cdtoc/attach_filter_release.tt:30 ../root/cdtoc/list.tt:10 -#: ../root/edit/details/merge_releases.tt:23 ../root/release/merge.tt:16 +#: ../root/release/merge.tt:16 ../root/edit/details/MergeReleases.js:256 #: ../root/recording/RecordingIndex.js:57 #: ../root/release_group/ReleaseGroupIndex.js:159 #: ../root/search/components/ReleaseResults.js:103 -#: ../root/utility/tableColumns.js:480 ../root/utility/tableColumns.js:488 +#: ../root/utility/tableColumns.js:482 ../root/utility/tableColumns.js:490 msgctxt "and" msgid "/" msgstr "/" @@ -433,10 +420,6 @@ msgstr "Indicatori di amministrazione" msgid "All of these relationships." msgstr "Tutte queste relazioni." -#: ../root/edit/details/merge_releases.tt:141 -msgid "All recordings for these releases are already merged." -msgstr "Tutte le registrazioni per queste pubblicazioni sono già state unite." - #: ../root/release/edit/recordings.tt:3 msgid "" "All tracks require an associated recording. Click “Edit” to select a " @@ -501,11 +484,6 @@ msgstr "Annotazione:" msgid "Annotations support a limited set of wiki formatting options:" msgstr "Le annotazioni supportano un set limitato di opzioni di formattazione wiki:" -#: ../root/edit/details/merge_releases.tt:149 -#: ../lib/MusicBrainz/Server/Form/Merge/Release.pm:50 -msgid "Append mediums to target release" -msgstr "Aggiungi supporti alla pubblicazione di destinazione" - #: ../root/edit/search_macros.tt:417 msgid "Applied Edit Count of Editor" msgstr "Numero di modifiche applicate dell'editor" @@ -614,10 +592,9 @@ msgstr "Aree" #: ../root/cdtoc/attach_confirm.tt:13 #: ../root/cdtoc/attach_filter_release.tt:29 ../root/cdtoc/list.tt:8 #: ../root/cdtoc/lookup.tt:41 ../root/components/common-macros.tt:569 -#: ../root/edit/details/merge_releases.tt:20 ../root/edit/search_macros.tt:417 -#: ../root/release/edit/tracklist.tt:163 ../root/release/edit/tracklist.tt:412 -#: ../root/release/merge.tt:13 ../root/watch/list.tt:16 -#: ../lib/MusicBrainz/Server/Edit/Artist.pm:7 +#: ../root/edit/search_macros.tt:417 ../root/release/edit/tracklist.tt:163 +#: ../root/release/edit/tracklist.tt:412 ../root/release/merge.tt:13 +#: ../root/watch/list.tt:16 ../lib/MusicBrainz/Server/Edit/Artist.pm:7 #: ../lib/MusicBrainz/Server/Form/Search/Search.pm:35 #: ../root/artist/ArtistHeader.js:34 #: ../root/components/RelationshipsTable.js:320 @@ -635,6 +612,7 @@ msgstr "Aree" #: ../root/edit/details/EditRecording.js:86 #: ../root/edit/details/EditRelease.js:83 #: ../root/edit/details/EditReleaseGroup.js:101 +#: ../root/edit/details/MergeReleases.js:253 #: ../root/edit/details/historic/AddRelease.js:68 #: ../root/edit/details/historic/AddRelease.js:120 #: ../root/edit/details/historic/AddTrackKV.js:55 @@ -708,10 +686,10 @@ msgstr "Artista:" #: ../root/report/components/EventList.js:66 #: ../root/search/components/EventResults.js:70 #: ../root/search/components/WorkResults.js:52 -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:895 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:455 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:896 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:456 #: ../root/static/scripts/common/utility/formatEntityTypeName.js:15 -#: ../root/tag/TagLayout.js:25 ../root/utility/tableColumns.js:854 +#: ../root/tag/TagLayout.js:25 ../root/utility/tableColumns.js:856 msgid "Artists" msgstr "Artisti" @@ -768,14 +746,14 @@ msgstr "Editor dei messaggi del banner" #: ../root/cdtoc/attach_artist_releases.tt:19 #: ../root/cdtoc/attach_filter_release.tt:33 ../root/cdtoc/list.tt:13 -#: ../root/cdtoc/lookup.tt:46 ../root/edit/details/merge_releases.tt:26 -#: ../root/release/edit/duplicates.tt:17 ../root/release/merge.tt:19 -#: ../root/components/list/ReleaseList.js:128 +#: ../root/cdtoc/lookup.tt:46 ../root/release/edit/duplicates.tt:17 +#: ../root/release/merge.tt:19 ../root/components/list/ReleaseList.js:128 #: ../root/edit/details/AddRelease.js:129 #: ../root/edit/details/EditBarcodes.js:58 #: ../root/edit/details/EditBarcodes.js:64 #: ../root/edit/details/EditRelease.js:167 #: ../root/edit/details/EditReleaseLabel.js:138 +#: ../root/edit/details/MergeReleases.js:259 #: ../root/edit/details/historic/AddRelease.js:155 #: ../root/edit/details/historic/EditReleaseEvents.js:138 #: ../root/otherlookup/OtherLookupForm.js:64 @@ -1002,12 +980,12 @@ msgstr "Nº di cat.:" #: ../root/cdtoc/attach_artist_releases.tt:18 #: ../root/cdtoc/attach_filter_release.tt:32 ../root/cdtoc/list.tt:12 -#: ../root/cdtoc/lookup.tt:45 ../root/edit/details/merge_releases.tt:25 -#: ../root/release/edit/duplicates.tt:16 ../root/release/merge.tt:18 +#: ../root/cdtoc/lookup.tt:45 ../root/release/edit/duplicates.tt:16 +#: ../root/release/merge.tt:18 ../root/edit/details/MergeReleases.js:258 #: ../root/recording/RecordingIndex.js:59 #: ../root/release_group/ReleaseGroupIndex.js:161 #: ../root/search/components/ReleaseResults.js:105 -#: ../root/utility/tableColumns.js:456 ../root/utility/tableColumns.js:461 +#: ../root/utility/tableColumns.js:458 ../root/utility/tableColumns.js:463 msgid "Catalog#" msgstr "Nº di catalogo" @@ -1168,16 +1146,16 @@ msgstr "Copia come data finale" #: ../root/cdtoc/attach_artist_releases.tt:16 #: ../root/cdtoc/attach_filter_release.tt:30 ../root/cdtoc/list.tt:10 -#: ../root/cdtoc/lookup.tt:43 ../root/edit/details/merge_releases.tt:23 -#: ../root/release/edit/duplicates.tt:14 ../root/release/merge.tt:16 -#: ../root/edit/details/EditReleaseLabel.js:127 +#: ../root/cdtoc/lookup.tt:43 ../root/release/edit/duplicates.tt:14 +#: ../root/release/merge.tt:16 ../root/edit/details/EditReleaseLabel.js:127 +#: ../root/edit/details/MergeReleases.js:256 #: ../root/edit/details/historic/AddRelease.js:152 #: ../root/edit/details/historic/EditReleaseEvents.js:135 #: ../root/recording/RecordingIndex.js:57 #: ../root/release_group/ReleaseGroupIndex.js:159 #: ../root/search/components/ReleaseResults.js:103 #: ../root/static/scripts/common/components/FilterForm.js:110 -#: ../root/utility/tableColumns.js:476 ../root/utility/tableColumns.js:488 +#: ../root/utility/tableColumns.js:478 ../root/utility/tableColumns.js:490 msgid "Country" msgstr "Paese" @@ -1252,13 +1230,14 @@ msgstr "Dati:" #: ../root/annotation/history.tt:12 ../root/cdtoc/attach_artist_releases.tt:16 #: ../root/cdtoc/attach_filter_release.tt:30 ../root/cdtoc/list.tt:10 -#: ../root/cdtoc/lookup.tt:42 ../root/edit/details/merge_releases.tt:23 -#: ../root/release/edit/duplicates.tt:13 ../root/release/merge.tt:16 +#: ../root/cdtoc/lookup.tt:42 ../root/release/edit/duplicates.tt:13 +#: ../root/release/merge.tt:16 #: ../root/admin/statistics-events/DeleteStatisticsEvent.js:31 #: ../root/admin/statistics-events/StatisticsEventEditForm.js:35 #: ../root/admin/statistics-events/StatisticsEventIndex.js:30 #: ../root/components/RelationshipsTable.js:316 #: ../root/edit/details/EditReleaseLabel.js:119 +#: ../root/edit/details/MergeReleases.js:256 #: ../root/edit/details/historic/AddRelease.js:151 #: ../root/edit/details/historic/EditReleaseEvents.js:134 #: ../root/elections/ElectionVotes.js:26 @@ -1267,8 +1246,8 @@ msgstr "Dati:" #: ../root/search/components/EventResults.js:67 #: ../root/search/components/ReleaseResults.js:103 #: ../root/static/scripts/common/components/FilterForm.js:129 -#: ../root/utility/tableColumns.js:255 ../root/utility/tableColumns.js:260 -#: ../root/utility/tableColumns.js:482 ../root/utility/tableColumns.js:488 +#: ../root/utility/tableColumns.js:257 ../root/utility/tableColumns.js:262 +#: ../root/utility/tableColumns.js:484 ../root/utility/tableColumns.js:490 msgid "Date" msgstr "Data" @@ -1336,7 +1315,7 @@ msgstr "Obsoleto:" #: ../root/relationship/linktype/RelationshipTypeIndex.js:96 #: ../root/search/components/InstrumentResults.js:52 #: ../root/static/scripts/collection/components/CollectionEditForm.js:89 -#: ../root/utility/tableColumns.js:636 +#: ../root/utility/tableColumns.js:638 msgid "Description" msgstr "Descrizione" @@ -1372,21 +1351,21 @@ msgstr "Morto/a il:" #: ../root/edit/details/AddReleaseGroup.js:71 #: ../root/edit/details/AddSeries.js:51 #: ../root/edit/details/AddStandaloneRecording.js:67 -#: ../root/edit/details/AddWork.js:57 ../root/edit/details/EditArea.js:84 +#: ../root/edit/details/AddWork.js:59 ../root/edit/details/EditArea.js:84 #: ../root/edit/details/EditArtist.js:100 ../root/edit/details/EditEvent.js:64 #: ../root/edit/details/EditInstrument.js:64 #: ../root/edit/details/EditLabel.js:84 ../root/edit/details/EditPlace.js:70 #: ../root/edit/details/EditRecording.js:65 #: ../root/edit/details/EditRelease.js:111 #: ../root/edit/details/EditReleaseGroup.js:64 -#: ../root/edit/details/EditSeries.js:61 ../root/edit/details/EditWork.js:73 +#: ../root/edit/details/EditSeries.js:61 ../root/edit/details/EditWork.js:75 #: ../root/genre/GenreEditForm.js:38 msgid "Disambiguation" msgstr "Disambiguazione" #: ../root/release/discids.tt:8 ../root/edit/details/SetTrackLengths.js:66 #: ../root/otherlookup/OtherLookupForm.js:114 -#: ../root/utility/tableColumns.js:179 ../root/utility/tableColumns.js:184 +#: ../root/utility/tableColumns.js:181 ../root/utility/tableColumns.js:186 msgid "Disc ID" msgstr "ID disco" @@ -1626,7 +1605,7 @@ msgstr "Abilita numeri di traccia in formato vinile" #: ../root/search/components/ArtistResults.js:57 #: ../root/search/components/LabelResults.js:69 #: ../root/search/components/PlaceResults.js:66 -#: ../root/utility/tableColumns.js:273 ../root/utility/tableColumns.js:278 +#: ../root/utility/tableColumns.js:275 ../root/utility/tableColumns.js:280 msgid "End" msgstr "Fine" @@ -1822,11 +1801,11 @@ msgstr "Per maggiori informazioni, controlla la {doc_doc|documentazione} e le {d msgid "For more information, check the {doc_doc|documentation}." msgstr "Per maggiori informazioni, controlla la {doc_doc|documentazione}." -#: ../root/cdtoc/list.tt:9 ../root/edit/details/merge_releases.tt:21 -#: ../root/release/edit/duplicates.tt:11 ../root/release/merge.tt:14 -#: ../root/components/list/ReleaseList.js:93 +#: ../root/cdtoc/list.tt:9 ../root/release/edit/duplicates.tt:11 +#: ../root/release/merge.tt:14 ../root/components/list/ReleaseList.js:93 #: ../root/edit/details/EditMedium.js:530 #: ../root/edit/details/EditReleaseLabel.js:145 +#: ../root/edit/details/MergeReleases.js:254 #: ../root/edit/details/historic/AddRelease.js:156 #: ../root/edit/details/historic/EditReleaseEvents.js:139 #: ../root/release_group/ReleaseGroupIndex.js:157 @@ -1999,7 +1978,7 @@ msgstr "Nascosto va utilizzato per le lingue dei segni e per le lingue senza un #: ../root/components/common-macros.tt:602 #: ../lib/MusicBrainz/Server/Controller/Edit.pm:240 -#: ../root/static/scripts/common/constants.js:279 +#: ../root/static/scripts/common/constants.js:281 msgid "High" msgstr "Alta" @@ -2138,12 +2117,12 @@ msgstr "ISRC" msgid "ISRCs:" msgstr "ISRC:" -#: ../root/work/edit_form.tt:16 ../root/edit/details/AddWork.js:63 -#: ../root/edit/details/EditWork.js:80 ../root/edit/details/RemoveIswc.js:36 +#: ../root/work/edit_form.tt:16 ../root/edit/details/AddWork.js:65 +#: ../root/edit/details/EditWork.js:82 ../root/edit/details/RemoveIswc.js:36 #: ../root/otherlookup/OtherLookupForm.js:79 #: ../root/report/IswcsWithManyWorks.js:48 #: ../root/search/components/WorkResults.js:53 -#: ../root/utility/tableColumns.js:762 +#: ../root/utility/tableColumns.js:764 msgid "ISWC" msgstr "ISWC" @@ -2296,23 +2275,6 @@ msgstr "Strumento:" msgid "Instruments" msgstr "Strumenti" -#: ../root/edit/details/merge_releases.tt:78 -#: ../root/edit/details/merge_releases.tt:83 -#: ../root/edit/details/merge_releases.tt:92 -#: ../root/edit/details/merge_releases.tt:109 -#: ../root/edit/details/MergeAreas.js:35 -#: ../root/edit/details/MergeArtists.js:37 -#: ../root/edit/details/MergeEvents.js:40 -#: ../root/edit/details/MergeInstruments.js:35 -#: ../root/edit/details/MergeLabels.js:35 -#: ../root/edit/details/MergePlaces.js:35 -#: ../root/edit/details/MergeRecordings.js:40 -#: ../root/edit/details/MergeReleaseGroups.js:35 -#: ../root/edit/details/MergeSeries.js:35 -#: ../root/edit/details/MergeWorks.js:35 -msgid "Into:" -msgstr "Con:" - #: ../root/cdstub/error.tt:5 msgid "Invalid Disc ID" msgstr "ID disco non valido" @@ -2353,13 +2315,13 @@ msgstr "Tieni presente che deselezionare questa opzione eliminerà le tracce se #: ../root/cdtoc/attach_artist_releases.tt:17 #: ../root/cdtoc/attach_filter_release.tt:31 ../root/cdtoc/list.tt:11 #: ../root/cdtoc/lookup.tt:44 ../root/components/common-macros.tt:569 -#: ../root/edit/details/merge_releases.tt:24 ../root/edit/search_macros.tt:417 -#: ../root/release/edit/duplicates.tt:15 ../root/release/merge.tt:17 -#: ../lib/MusicBrainz/Server/Edit/Label.pm:7 +#: ../root/edit/search_macros.tt:417 ../root/release/edit/duplicates.tt:15 +#: ../root/release/merge.tt:17 ../lib/MusicBrainz/Server/Edit/Label.pm:7 #: ../lib/MusicBrainz/Server/Form/Search/Search.pm:40 #: ../root/components/list/LabelList.js:54 ../root/edit/details/AddLabel.js:51 #: ../root/edit/details/EditLabel.js:62 #: ../root/edit/details/EditReleaseLabel.js:69 +#: ../root/edit/details/MergeReleases.js:257 #: ../root/edit/details/historic/AddRelease.js:153 #: ../root/edit/details/historic/EditReleaseEvents.js:136 #: ../root/label/LabelHeader.js:27 ../root/layout/components/Search.js:39 @@ -2372,8 +2334,8 @@ msgstr "Tieni presente che deselezionare questa opzione eliminerà le tracce se #: ../root/search/components/SearchForm.js:39 #: ../root/static/scripts/common/constants.js:23 #: ../root/static/scripts/common/utility/formatEntityTypeName.js:56 -#: ../root/user/UserProfile.js:46 ../root/utility/tableColumns.js:503 -#: ../root/utility/tableColumns.js:508 +#: ../root/user/UserProfile.js:46 ../root/utility/tableColumns.js:505 +#: ../root/utility/tableColumns.js:510 msgid "Label" msgstr "Etichetta" @@ -2476,7 +2438,7 @@ msgstr "Caricamento anteprima modifiche in corso..." #: ../root/static/scripts/common/components/FingerprintTable.js:87 #: ../root/static/scripts/edit/components/AddEntityDialog.js:101 #: ../root/static/scripts/release/components/MediumTable.js:118 -#: ../root/utility/tableColumns.js:674 +#: ../root/utility/tableColumns.js:676 msgid "Loading..." msgstr "Caricamento in corso..." @@ -2516,15 +2478,15 @@ msgstr "Numero di ricerche" #: ../root/components/common-macros.tt:602 #: ../lib/MusicBrainz/Server/Controller/Edit.pm:240 -#: ../root/static/scripts/common/constants.js:276 +#: ../root/static/scripts/common/constants.js:278 msgid "Low" msgstr "Bassa" #: ../root/release/edit_relationships.tt:172 -#: ../root/edit/details/AddWork.js:81 ../root/edit/details/EditWork.js:98 +#: ../root/edit/details/AddWork.js:83 ../root/edit/details/EditWork.js:100 #: ../root/layout/components/sidebar/WorkSidebar.js:67 #: ../root/search/components/WorkResults.js:55 -#: ../root/static/scripts/work.js:312 ../root/utility/tableColumns.js:873 +#: ../root/static/scripts/work.js:312 ../root/utility/tableColumns.js:875 msgid "Lyrics Languages" msgstr "Lingue del testo" @@ -2579,22 +2541,6 @@ msgstr "Titolo del supporto:" msgid "Medium track lengths" msgstr "Lunghezza tracce supporto" -#: ../root/edit/details/merge_releases.tt:44 -msgid "Medium {position} is now medium {new_position}" -msgstr "Il supporto {position} è ora il supporto {new_position}" - -#: ../root/edit/details/merge_releases.tt:44 -msgid "Medium {position} is now medium {new_position}: {new_name}" -msgstr "Il supporto {position} è ora il supporto {new_position}: {new_name}" - -#: ../root/edit/details/merge_releases.tt:44 -msgid "Medium {position}: {name} is now medium {new_position}" -msgstr "Il supporto {position}: {name} è ora il supporto {new_position}" - -#: ../root/edit/details/merge_releases.tt:44 -msgid "Medium {position}: {name} is now medium {new_position}: {new_name}" -msgstr "Il supporto {position}: {name} è ora il supporto {new_position}: {new_name}" - #: ../root/layout/merge-helper.tt:30 #: ../root/layout/components/MergeHelper.js:71 #: ../root/layout/components/sidebar/MergeLink.js:31 @@ -2610,12 +2556,7 @@ msgstr "Processo di unione" msgid "Merge Releases" msgstr "Unisci pubblicazioni" -#: ../root/edit/details/merge_releases.tt:149 -#: ../lib/MusicBrainz/Server/Form/Merge/Release.pm:51 -msgid "Merge mediums and recordings" -msgstr "Unisci supporti e registrazioni" - -#: ../root/edit/details/merge_releases.tt:147 ../root/release/merge.tt:55 +#: ../root/release/merge.tt:55 ../root/edit/details/MergeReleases.js:358 msgid "Merge strategy:" msgstr "Strategia di unione:" @@ -2705,7 +2646,7 @@ msgstr "Il mio voto:" #: ../root/edit/details/AddReleaseGroup.js:56 #: ../root/edit/details/AddSeries.js:46 #: ../root/edit/details/AddStandaloneRecording.js:56 -#: ../root/edit/details/AddWork.js:52 ../root/edit/details/EditArea.js:70 +#: ../root/edit/details/AddWork.js:54 ../root/edit/details/EditArea.js:70 #: ../root/edit/details/EditArtist.js:86 ../root/edit/details/EditEvent.js:57 #: ../root/edit/details/EditInstrument.js:57 #: ../root/edit/details/EditLabel.js:68 ../root/edit/details/EditMedium.js:522 @@ -2715,7 +2656,7 @@ msgstr "Il mio voto:" #: ../root/edit/details/EditRelationshipAttribute.js:76 #: ../root/edit/details/EditRelease.js:75 #: ../root/edit/details/EditReleaseGroup.js:57 -#: ../root/edit/details/EditSeries.js:54 ../root/edit/details/EditWork.js:66 +#: ../root/edit/details/EditSeries.js:54 ../root/edit/details/EditWork.js:68 #: ../root/edit/details/RemoveRelationshipAttribute.js:41 #: ../root/edit/details/RemoveRelationshipType.js:60 #: ../root/edit/details/historic/AddRelease.js:63 @@ -2838,7 +2779,7 @@ msgid "No releases have cover art marked as \"Front\", cannot set cover art." msgstr "Nessuna pubblicazione ha una copertina contrassegnata come \"Frontale\", impossibile impostare una copertina." #: ../root/release/edit/tracklist.tt:140 ../root/admin/IpLookup.js:35 -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:457 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:458 #: ../root/static/scripts/common/components/Autocomplete2/constants.js:90 msgid "No results" msgstr "Nessun risultato" @@ -2883,19 +2824,11 @@ msgstr "Nessuno dei supporti su questa pubblicazione può essere collegato a que #: ../root/components/common-macros.tt:602 #: ../lib/MusicBrainz/Server/Controller/Edit.pm:240 -#: ../root/static/scripts/common/constants.js:277 -#: ../root/static/scripts/common/constants.js:278 +#: ../root/static/scripts/common/constants.js:279 +#: ../root/static/scripts/common/constants.js:280 msgid "Normal" msgstr "Normale" -#: ../root/edit/details/merge_releases.tt:158 -#: ../root/edit/details/EditRelease.js:182 -#: ../root/edit/details/SetTrackLengths.js:89 -#: ../root/edit/details/historic/MergeReleases.js:69 -#: ../root/user/ReportUser.js:116 -msgid "Note" -msgstr "Nota" - #: ../root/release/edit/information.tt:279 msgid "" "Note! If you do not know the month or day of release, please leave them " @@ -3218,13 +3151,13 @@ msgstr "Potrebbero essere disponibili dati di modifica grezzi." msgid "Recent Notes Left on Your Edits" msgstr "Note recenti lasciate sulle tue modifiche" -#: ../root/components/common-macros.tt:569 -#: ../root/edit/details/merge_releases.tt:108 -#: ../root/edit/search_macros.tt:417 ../root/release/edit_relationships.tt:53 +#: ../root/components/common-macros.tt:569 ../root/edit/search_macros.tt:417 +#: ../root/release/edit_relationships.tt:53 #: ../lib/MusicBrainz/Server/Edit/Recording.pm:7 #: ../lib/MusicBrainz/Server/Form/Search/Search.pm:38 #: ../root/edit/details/AddStandaloneRecording.js:46 #: ../root/edit/details/EditRecording.js:51 +#: ../root/edit/details/MergeReleases.js:322 #: ../root/edit/details/RemoveIsrc.js:40 #: ../root/edit/details/historic/EditTrack.js:37 #: ../root/layout/components/Search.js:30 @@ -3242,10 +3175,6 @@ msgstr "Registrazione" msgid "Recording Details" msgstr "Dettagli della registrazione" -#: ../root/edit/details/merge_releases.tt:104 -msgid "Recording Merges" -msgstr "Unioni di registrazioni" - #: ../root/user/ratings.tt:2 ../root/user/ratings_summary.tt:3 msgid "Recording ratings" msgstr "Valutazioni di registrazioni" @@ -3305,7 +3234,7 @@ msgstr "Editor di relazioni" #: ../root/edit/search_macros.tt:417 #: ../root/edit/details/AddRelationshipType.js:78 #: ../root/relationship/linktype/RelationshipTypeIndex.js:41 -#: ../root/utility/tableColumns.js:804 +#: ../root/utility/tableColumns.js:806 msgid "Relationship Type" msgstr "Tipo di relazione" @@ -3332,8 +3261,7 @@ msgstr "Le relazioni evidenziate in <span class=\"rel-edit\">giallo</span> saran #: ../root/cdtoc/attach_artist_releases.tt:15 #: ../root/cdtoc/attach_filter_release.tt:28 ../root/cdtoc/lookup.tt:39 -#: ../root/components/common-macros.tt:569 -#: ../root/edit/details/merge_releases.tt:19 ../root/edit/search_macros.tt:417 +#: ../root/components/common-macros.tt:569 ../root/edit/search_macros.tt:417 #: ../root/release/edit/duplicates.tt:10 ../root/release/merge.tt:12 #: ../lib/MusicBrainz/Server/Edit/Release.pm:8 #: ../lib/MusicBrainz/Server/Form/Search/Search.pm:37 @@ -3344,6 +3272,7 @@ msgstr "Le relazioni evidenziate in <span class=\"rel-edit\">giallo</span> saran #: ../root/edit/details/EditBarcodes.js:51 #: ../root/edit/details/EditCoverArt.js:51 #: ../root/edit/details/EditReleaseLabel.js:60 +#: ../root/edit/details/MergeReleases.js:252 #: ../root/edit/details/RemoveCoverArt.js:35 #: ../root/edit/details/ReorderCoverArt.js:45 #: ../root/edit/details/ReorderMediums.js:39 @@ -3580,7 +3509,7 @@ msgstr "Rimuovi attributo" #: ../root/components/common-macros.tt:878 #: ../root/components/common-macros.tt:886 #: ../root/components/RemoveFromMergeTableCell.js:39 -#: ../root/utility/tableColumns.js:781 ../root/utility/tableColumns.js:791 +#: ../root/utility/tableColumns.js:783 ../root/utility/tableColumns.js:793 msgid "Remove from merge" msgstr "Rimuovi dall'unione" @@ -3978,7 +3907,7 @@ msgstr "Inverti titoli di traccia e accreditamenti artista" #: ../root/search/components/RecordingResults.js:134 #: ../root/search/components/ReleaseResults.js:112 #: ../root/static/scripts/common/components/TaggerIcon.js:40 -#: ../root/utility/tableColumns.js:834 +#: ../root/utility/tableColumns.js:836 msgid "Tagger" msgstr "Tagger" @@ -4004,12 +3933,6 @@ msgstr "Il campo annotazione funziona come una piccola wiki." msgid "The catalog number you have entered looks like an Amazon ASIN." msgstr "Il numero di catalogo inserito sembra essere un ASIN di Amazon." -#: ../root/edit/details/merge_releases.tt:159 -msgid "" -"The data in this edit originally came from an older version of this edit, " -"and may not display correctly" -msgstr "I dati presenti in questa modifica provengono originariamente da una versione più vecchia di questa modifica e potrebbero non essere visualizzati correttamente" - #: ../root/layout.tt:90 ../root/layout/index.js:275 msgid "" "The data you have submitted does not make any changes to the data already " @@ -4086,7 +4009,7 @@ msgid "" "but please keep in mind that everyone will be able to see it. Only use an " "email address as your username if you are completely sure you are happy with" " that." -msgstr "Il nome utente che hai inserito sembra essere un indirizzo email. Questo è permesso, ma tieni presente che sarà visibile a tutti. Usa un indirizzo email come nome utente solo se sei certo che ciò ti vada bene." +msgstr "Il nome utente che hai inserito sembra essere un indirizzo email. Questo è consentito, ma tieni presente che sarà visibile a tutti. Usa un indirizzo email come nome utente solo se sei certo che ciò ti vada bene." #: ../root/watch/list.tt:4 msgid "The watch artist feature is currently not active." @@ -4193,12 +4116,6 @@ msgstr "Questo disco contiene tracce dati in coda" msgid "This disc has a hidden pregap track before track 1" msgstr "Questo disco ha una traccia pregap nascosta prima della traccia 1" -#: ../root/edit/details/merge_releases.tt:133 -msgid "" -"This edit does not store recording merge information and is closed, so no " -"recording merge information can be shown." -msgstr "Questa modifica non memorizza informazioni sulle unioni di registrazioni ed è chiusa, perciò non è possibile visualizzare tali informazioni." - #: ../root/cdtoc/set_durations.tt:31 msgid "This edit would only make subsecond changes to track lengths." msgstr "Questa modifica apporterebbe solo cambiamenti inferiori al secondo alla durata delle tracce." @@ -4330,8 +4247,8 @@ msgid "This recording cannot be removed because it is still used on releases." msgstr "La registrazione non può essere rimossa perché è ancora in uso in alcune pubblicazioni." #: ../root/components/common-macros.tt:302 -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:696 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:286 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:697 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:287 #: ../root/static/scripts/common/components/EntityLink.js:289 msgid "This recording is a video" msgstr "Questa registrazione è un video" @@ -4363,10 +4280,6 @@ msgid "" " relationships." msgstr "Questo gruppo di pubblicazioni sarà rimosso automaticamente non appena non avrà nessuna pubblicazione né relazione." -#: ../root/edit/details/merge_releases.tt:35 -msgid "This release has no media to merge." -msgstr "Questa pubblicazione non ha supporti da unire." - #: ../root/release/discids.tt:58 msgid "This release has no mediums that can have disc IDs." msgstr "Questa pubblicazione non ha supporti che possono possedere un ID disco." @@ -4502,14 +4415,10 @@ msgid "Total tracks:" msgstr "Tracce totali:" #: ../root/cdtoc/info.tt:31 ../root/search/components/RecordingResults.js:135 -#: ../root/taglookup/Form.js:41 ../root/utility/tableColumns.js:846 +#: ../root/taglookup/Form.js:41 ../root/utility/tableColumns.js:848 msgid "Track" msgstr "Traccia" -#: ../root/edit/details/merge_releases.tt:107 -msgid "Track #" -msgstr "Traccia #" - #: ../root/release/edit/tracklist.tt:483 #: ../root/static/scripts/release-editor/dialogs.js:40 msgid "Track Parser" @@ -4544,11 +4453,11 @@ msgstr "Traccia {n}:" msgid "Tracklist" msgstr "Elenco tracce" -#: ../root/edit/details/merge_releases.tt:22 ../root/release/discids.tt:9 -#: ../root/release/edit/duplicates.tt:12 ../root/release/merge.tt:15 -#: ../root/artist_credit/ArtistCreditIndex.js:128 +#: ../root/release/discids.tt:9 ../root/release/edit/duplicates.tt:12 +#: ../root/release/merge.tt:15 ../root/artist_credit/ArtistCreditIndex.js:128 #: ../root/artist_credit/ArtistCreditLayout.js:31 #: ../root/components/list/ReleaseList.js:103 +#: ../root/edit/details/MergeReleases.js:255 #: ../root/edit/details/historic/AddRelease.js:113 #: ../root/release_group/ReleaseGroupIndex.js:158 #: ../root/search/components/CDStubResults.js:49 @@ -4592,7 +4501,7 @@ msgstr "Twitter" #: ../root/edit/details/AddLabel.js:107 ../root/edit/details/AddPlace.js:65 #: ../root/edit/details/AddReleaseGroup.js:80 #: ../root/edit/details/AddRemoveAlias.js:101 -#: ../root/edit/details/AddSeries.js:57 ../root/edit/details/AddWork.js:69 +#: ../root/edit/details/AddSeries.js:57 ../root/edit/details/AddWork.js:71 #: ../root/edit/details/EditAlias.js:123 ../root/edit/details/EditArea.js:91 #: ../root/edit/details/EditArtist.js:107 ../root/edit/details/EditEvent.js:78 #: ../root/edit/details/EditInstrument.js:71 @@ -4623,12 +4532,12 @@ msgstr "Twitter" #: ../root/static/scripts/account/components/ApplicationForm.js:87 #: ../root/static/scripts/alias/AliasEditForm.js:329 #: ../root/static/scripts/collection/components/CollectionEditForm.js:83 -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:874 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:447 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:875 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:448 #: ../root/static/scripts/common/components/FilterForm.js:63 -#: ../root/static/scripts/edit/externalLinks.js:904 -#: ../root/static/scripts/edit/externalLinks.js:1157 -#: ../root/utility/tableColumns.js:613 ../root/utility/tableColumns.js:618 +#: ../root/static/scripts/edit/externalLinks.js:941 +#: ../root/static/scripts/edit/externalLinks.js:1181 +#: ../root/utility/tableColumns.js:615 ../root/utility/tableColumns.js:620 msgid "Type" msgstr "Tipo" @@ -4939,8 +4848,8 @@ msgstr "Transclusore wiki" #: ../root/components/common-macros.tt:569 ../root/edit/search_macros.tt:417 #: ../lib/MusicBrainz/Server/Edit/Work.pm:9 #: ../lib/MusicBrainz/Server/Form/Search/Search.pm:39 -#: ../root/components/list/WorkList.js:60 ../root/edit/details/AddWork.js:46 -#: ../root/edit/details/EditWork.js:59 ../root/edit/details/RemoveIswc.js:40 +#: ../root/components/list/WorkList.js:60 ../root/edit/details/AddWork.js:48 +#: ../root/edit/details/EditWork.js:61 ../root/edit/details/RemoveIswc.js:40 #: ../root/layout/components/Search.js:34 #: ../root/report/IswcsWithManyWorks.js:49 #: ../root/report/components/WorkList.js:46 @@ -5205,22 +5114,13 @@ msgid "" " please make sure the artists have been entered correctly." msgstr "Hai utilizzato l'artista speciale {valink|Artisti Vari} in alcune delle tracce qui sotto. {valink|Artisti Vari} non va normalmente utilizzato nelle tracce; assicurati di aver inserito correttamente gli artisti." -#: ../root/edit/details/merge_releases.tt:5 -#: ../root/components/list/ReleaseList.js:90 -#: ../root/release_group/ReleaseGroupIndex.js:89 -#: ../root/search/components/ReleaseResults.js:50 -#: ../root/static/scripts/release-editor/duplicates.js:143 -msgid "[missing media]" -msgstr "[supporti mancanti]" - #: ../root/components/common-macros.tt:259 #: ../lib/MusicBrainz/Server/Edit/Relationship/RemoveLinkType.pm:86 #: ../lib/MusicBrainz/Server/Edit/Release/Create.pm:113 -#: ../lib/MusicBrainz/Server/Edit/Work/Create.pm:87 -#: ../lib/MusicBrainz/Server/Edit/Work/Edit.pm:186 #: ../root/edit/details/EditAlias.js:94 #: ../root/edit/details/SetTrackLengths.js:73 #: ../root/static/scripts/common/components/EntityLink.js:41 +#: ../root/static/scripts/common/i18n/localizeLanguageName.js:15 msgid "[removed]" msgstr "[rimosso]" @@ -5366,6 +5266,10 @@ msgstr "storica, fino al {end}" msgid "historical, {begin}-{end}" msgstr "storica, {begin}-{end}" +#: ../root/edit/search_macros.tt:25 +msgid "in an unspecified order (possibly faster)" +msgstr "in ordine imprecisato (forse più veloce)" + #: ../root/edit/details/macros.tt:28 #: ../root/utility/relationshipDateText.js:25 msgid "in {date}" @@ -5521,10 +5425,6 @@ msgid_plural "plus {n} other private collections" msgstr[0] "più {n} altra collezione privata" msgstr[1] "più altre {n} collezioni private" -#: ../root/edit/search_macros.tt:25 -msgid "randomly" -msgstr "in maniera casuale" - #: ../root/edit/search_macros.tt:25 msgid "recently closed first" msgstr "prima quelle chiuse più di recente" @@ -5736,7 +5636,7 @@ msgstr "« Precedente" #: ../root/components/paginator.tt:19 ../root/components/paginator.tt:31 #: ../root/components/paginator.tt:39 ../root/components/Paginator.js:94 #: ../root/components/Paginator.js:119 ../root/components/Paginator.js:133 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:125 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:126 msgid "…" msgstr "…" @@ -6136,14 +6036,6 @@ msgstr "Ci sono già pubblicazioni con questo ID disco su MusicBrainz" msgid "There is already a CD stub with this disc ID" msgstr "C'è già una bozza CD con questo ID disco" -#: ../lib/MusicBrainz/Server/Data/Language.pm:63 -#: ../lib/MusicBrainz/Server/Edit/Work/Create.pm:75 -#: ../lib/MusicBrainz/Server/Edit/Work/Create.pm:85 -#: ../lib/MusicBrainz/Server/Edit/Work/Edit.pm:184 -#: ../lib/MusicBrainz/Server/Form/Utils.pm:48 -msgid "[No lyrics]" -msgstr "[Nessun testo]" - #: ../lib/MusicBrainz/Server/Data/LinkType.pm:197 #, perl-brace-format msgid "{t0}-{t1} relationships" @@ -6385,7 +6277,7 @@ msgstr "Converti in pubblicazione di artista singolo (storico)" #: ../lib/MusicBrainz/Server/Edit/Historic/MergeRelease.pm:13 #: ../lib/MusicBrainz/Server/Edit/Historic/MergeReleaseMAC.pm:9 -#: ../lib/MusicBrainz/Server/Edit/Release/Merge.pm:140 +#: ../lib/MusicBrainz/Server/Edit/Release/Merge.pm:141 msgid "Merge releases" msgstr "Unisci pubblicazioni" @@ -6669,7 +6561,7 @@ msgctxt "medium format" msgid "(unknown)" msgstr "(unknown)" -#: ../lib/MusicBrainz/Server/Edit/Release/Merge.pm:347 +#: ../lib/MusicBrainz/Server/Edit/Release/Merge.pm:339 #, perl-brace-format msgid "These releases could not be merged: {reason}" msgstr "Non è stato possibile unire queste pubblicazioni: {reason}" @@ -7307,6 +7199,16 @@ msgstr "La data deve essere valida o parziale. Per esempio: 2006-05-25, 1990-01, msgid "Please pick the entity you want the others merged into." msgstr "Scegli l'entità in cui vuoi che vengano unite le altre." +#: ../lib/MusicBrainz/Server/Form/Merge/Release.pm:50 +#: ../root/edit/details/MergeReleases.js:65 +msgid "Append mediums to target release" +msgstr "Aggiungi supporti alla pubblicazione di destinazione" + +#: ../lib/MusicBrainz/Server/Form/Merge/Release.pm:51 +#: ../root/edit/details/MergeReleases.js:66 +msgid "Merge mediums and recordings" +msgstr "Unisci supporti e registrazioni" + #: ../lib/MusicBrainz/Server/Form/Merge/Release.pm:62 msgid "Another medium is already in this position" msgstr "Un altro supporto è già in questa posizione" @@ -7354,22 +7256,22 @@ msgid "A fluency level is required." msgstr "È necessario selezionare un livello di padronanza." #: ../lib/MusicBrainz/Server/Form/Role/UserProfile.pm:70 -#: ../root/static/scripts/common/constants.js:287 +#: ../root/static/scripts/common/constants.js:289 msgid "Basic" msgstr "Elementare" #: ../lib/MusicBrainz/Server/Form/Role/UserProfile.pm:71 -#: ../root/static/scripts/common/constants.js:288 +#: ../root/static/scripts/common/constants.js:290 msgid "Intermediate" msgstr "Intermedio" #: ../lib/MusicBrainz/Server/Form/Role/UserProfile.pm:72 -#: ../root/static/scripts/common/constants.js:286 +#: ../root/static/scripts/common/constants.js:288 msgid "Advanced" msgstr "Avanzato" #: ../lib/MusicBrainz/Server/Form/Role/UserProfile.pm:73 -#: ../root/static/scripts/common/constants.js:289 +#: ../root/static/scripts/common/constants.js:291 msgid "Native" msgstr "Madrelingua" @@ -7511,6 +7413,11 @@ msgstr "2 settimane" msgid "A month" msgstr "Un mese" +#: ../lib/MusicBrainz/Server/Form/Utils.pm:48 +#: ../root/static/scripts/common/i18n/localizeLanguageName.js:19 +msgid "[No lyrics]" +msgstr "[Nessun testo]" + #: ../lib/MusicBrainz/Server/Form/Utils.pm:84 msgctxt "script optgroup" msgid "Frequently used" @@ -7850,7 +7757,7 @@ msgstr "Accesso" #: ../root/components/Aliases/AliasTable.js:31 #: ../root/components/Aliases/ArtistCreditList.js:54 #: ../root/static/scripts/common/components/FingerprintTable.js:53 -#: ../root/utility/tableColumns.js:78 +#: ../root/utility/tableColumns.js:80 msgid "Actions" msgstr "Azioni" @@ -7983,7 +7890,7 @@ msgstr "Testo libero" #: ../root/edit/details/AddRelationshipType.js:191 #: ../root/edit/details/RemoveRelationshipType.js:136 #: ../root/relationship/linktype/RelationshipTypeIndex.js:165 -#: ../root/utility/tableColumns.js:626 +#: ../root/utility/tableColumns.js:628 msgid "Attributes" msgstr "Attributi" @@ -8004,12 +7911,12 @@ msgstr "Impossibile rimuovere l'attributo" #: ../root/admin/attributes/Language.js:33 #: ../root/admin/attributes/Language.js:36 -#: ../root/edit/details/AddRelease.js:108 ../root/edit/details/AddWork.js:75 +#: ../root/edit/details/AddRelease.js:108 ../root/edit/details/AddWork.js:77 #: ../root/edit/details/EditRelease.js:131 #: ../root/edit/details/historic/AddRelease.js:104 ../root/iswc/Index.js:59 #: ../root/report/IswcsWithManyWorks.js:53 #: ../root/search/components/ReleaseResults.js:107 -#: ../root/utility/tableColumns.js:524 +#: ../root/utility/tableColumns.js:526 msgid "Language" msgstr "Lingua" @@ -8926,6 +8833,19 @@ msgstr "Nessuna relazione del tipo selezionato trovata." msgid "The provided relationship type ID is not valid." msgstr "L'ID del tipo di relazione fornito non è valido." +#: ../root/components/ReleaseLanguageScript.js:24 +#: ../root/components/ReleaseLanguageScript.js:30 +#: ../root/components/list/ReleaseList.js:100 +#: ../root/edit/details/MergeReleases.js:88 ../root/release/CoverArt.js:92 +#: ../root/release_group/ReleaseGroupIndex.js:90 +#: ../root/search/components/ReleaseResults.js:55 +#: ../root/static/scripts/common/components/ReleaseEvents.js:55 +#: ../root/static/scripts/common/components/ReleaseEvents.js:72 +#: ../root/static/scripts/release-editor/duplicates.js:145 +msgctxt "missing data" +msgid "-" +msgstr "-" + #: ../root/components/StaticRelationshipsDisplay.js:25 msgid "{start_track}–{end_track}" msgstr "{start_track}–{end_track}" @@ -9108,6 +9028,14 @@ msgstr "Indirizzo" msgid "Unspecified type" msgstr "Tipo non specificato" +#: ../root/components/list/ReleaseList.js:90 +#: ../root/edit/details/MergeReleases.js:83 +#: ../root/release_group/ReleaseGroupIndex.js:89 +#: ../root/search/components/ReleaseResults.js:50 +#: ../root/static/scripts/release-editor/duplicates.js:143 +msgid "[missing media]" +msgstr "[supporti mancanti]" + #: ../root/components/list/ReleaseList.js:153 #: ../root/search/components/ReleaseResults.js:109 msgid "Status" @@ -9117,8 +9045,8 @@ msgstr "Status" #: ../root/report/IswcsWithManyWorks.js:50 #: ../root/report/components/WorkList.js:51 #: ../root/search/components/WorkResults.js:51 -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:894 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:454 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:895 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:455 msgid "Writers" msgstr "Autori" @@ -9227,7 +9155,7 @@ msgstr "Errore durante il voto sulle modifiche" #: ../root/edit/CannotVote.js:18 msgid "You’re not currently allowed to vote, please read the banner." -msgstr "Al momento non ti è permesso di votare. Per favore leggi il banner." +msgstr "Al momento non ti è consentito di votare. Per favore leggi il banner." #: ../root/edit/NoteIsRequired.js:27 msgid "" @@ -9236,22 +9164,22 @@ msgid "" msgstr "{edit} ha ricevuto almeno un voto negativo, devi lasciare una nota di modifica prima di poterlo approvare." #: ../root/edit/components/EditHeader.js:46 -#: ../root/edit/components/EditorTypeInfo.js:28 +#: ../root/edit/components/EditorTypeInfo.js:29 msgid "This user is new to MusicBrainz." msgstr "Questo utente è nuovo su MusicBrainz." #: ../root/edit/components/EditHeader.js:48 -#: ../root/edit/components/EditorTypeInfo.js:30 +#: ../root/edit/components/EditorTypeInfo.js:31 msgid "beginner" msgstr "principiante" #: ../root/edit/components/EditHeader.js:55 -#: ../root/edit/components/EditorTypeInfo.js:38 +#: ../root/edit/components/EditorTypeInfo.js:39 msgid "This user is automated." msgstr "Questo utente è automatizzato." #: ../root/edit/components/EditHeader.js:56 -#: ../root/edit/components/EditorTypeInfo.js:39 +#: ../root/edit/components/EditorTypeInfo.js:40 msgid "bot" msgstr "bot" @@ -9557,7 +9485,7 @@ msgstr "Primario per l'ambiente linguistico" #: ../root/edit/details/AddSeries.js:65 ../root/edit/details/EditSeries.js:79 #: ../root/layout/components/sidebar/SeriesSidebar.js:52 -#: ../root/utility/tableColumns.js:819 +#: ../root/utility/tableColumns.js:821 msgid "Ordering Type" msgstr "Tipo di ordinamento" @@ -9643,6 +9571,14 @@ msgstr "Vecchio artista" msgid "New Artist" msgstr "Nuovo artista" +#: ../root/edit/details/EditRelease.js:182 +#: ../root/edit/details/MergeReleases.js:364 +#: ../root/edit/details/SetTrackLengths.js:89 +#: ../root/edit/details/historic/MergeReleases.js:69 +#: ../root/user/ReportUser.js:116 +msgid "Note" +msgstr "Nota" + #: ../root/edit/details/EditRelease.js:183 msgid "This edit also changed the track artists." msgstr "Questa modifica ha cambiato anche gli artisti delle tracce." @@ -9674,7 +9610,7 @@ msgstr "Questa modifica era un'unione." msgid "Search for the target URL." msgstr "Cerca l'URL di destinazione." -#: ../root/edit/details/EditWork.js:87 +#: ../root/edit/details/EditWork.js:89 msgid "Work type" msgstr "Tipo di opera" @@ -9691,10 +9627,71 @@ msgstr "Tipo di opera" msgid "Merge:" msgstr "Unisci:" +#: ../root/edit/details/MergeAreas.js:35 +#: ../root/edit/details/MergeArtists.js:37 +#: ../root/edit/details/MergeEvents.js:40 +#: ../root/edit/details/MergeInstruments.js:35 +#: ../root/edit/details/MergeLabels.js:35 +#: ../root/edit/details/MergePlaces.js:35 +#: ../root/edit/details/MergeRecordings.js:40 +#: ../root/edit/details/MergeReleaseGroups.js:35 +#: ../root/edit/details/MergeReleases.js:288 +#: ../root/edit/details/MergeReleases.js:295 +#: ../root/edit/details/MergeReleases.js:305 +#: ../root/edit/details/MergeReleases.js:323 +#: ../root/edit/details/MergeSeries.js:35 +#: ../root/edit/details/MergeWorks.js:35 +msgid "Into:" +msgstr "Con:" + #: ../root/edit/details/MergeArtists.js:43 msgid "Rename artist and relationship credits" msgstr "Rinomina accreditamenti artista e relazione" +#: ../root/edit/details/MergeReleases.js:131 +msgid "Medium {position}: {name} is now medium {new_position}: {new_name}" +msgstr "Il supporto {position}: {name} è ora il supporto {new_position}: {new_name}" + +#: ../root/edit/details/MergeReleases.js:142 +msgid "Medium {position}: {name} is now medium {new_position}" +msgstr "Il supporto {position}: {name} è ora il supporto {new_position}" + +#: ../root/edit/details/MergeReleases.js:151 +msgid "Medium {position} is now medium {new_position}: {new_name}" +msgstr "Il supporto {position} è ora il supporto {new_position}: {new_name}" + +#: ../root/edit/details/MergeReleases.js:162 +msgid "Medium {position} is now medium {new_position}" +msgstr "Il supporto {position} è ora il supporto {new_position}" + +#: ../root/edit/details/MergeReleases.js:271 +msgid "This release has no media to merge." +msgstr "Questa pubblicazione non ha supporti da unire." + +#: ../root/edit/details/MergeReleases.js:318 +msgid "Recording Merges" +msgstr "Unioni di registrazioni" + +#: ../root/edit/details/MergeReleases.js:321 +msgid "Track #" +msgstr "Traccia #" + +#: ../root/edit/details/MergeReleases.js:333 +msgid "" +"This edit does not store recording merge information and is closed, so no " +"recording merge information can be shown." +msgstr "Questa modifica non memorizza informazioni sulle unioni di registrazioni ed è chiusa, perciò non è possibile visualizzare tali informazioni." + +#: ../root/edit/details/MergeReleases.js:350 +msgid "All recordings for these releases are already merged." +msgstr "Tutte le registrazioni per queste pubblicazioni sono già state unite." + +#: ../root/edit/details/MergeReleases.js:366 +msgid "" +"The data in this edit originally came from an older version of this edit, " +"and may not display correctly" +msgstr "I dati presenti in questa modifica provengono originariamente da una versione più vecchia di questa modifica e potrebbero non essere visualizzati correttamente" + #: ../root/edit/details/MoveDiscId.js:46 #: ../root/edit/details/historic/MoveDiscId.js:41 msgid "From:" @@ -10766,7 +10763,7 @@ msgstr "Indice documentazione" #: ../root/relationship/RelationshipsHeader.js:19 #: ../root/relationship/linktype/RelationshipTypeIndex.js:61 #: ../root/relationship/linktype/RelationshipTypesList.js:62 -#: ../root/utility/tableColumns.js:343 +#: ../root/utility/tableColumns.js:345 msgid "Relationship Types" msgstr "Tipi di relazione" @@ -11182,7 +11179,7 @@ msgstr "Licenza" #: ../root/layout/components/sidebar/SidebarRating.js:25 #: ../root/static/scripts/release/components/MediumTable.js:223 -#: ../root/utility/tableColumns.js:437 +#: ../root/utility/tableColumns.js:439 msgid "Rating" msgstr "Valutazione" @@ -12006,7 +12003,7 @@ msgid "" msgstr "Sei sicuro di voler rimuovere la seguente copertina da {release} di {artist}?" #: ../root/release_group/ReleaseGroupHeader.js:30 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:404 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:405 msgid "Release group by {artist}" msgstr "Gruppo di pubblicazioni di {artist}" @@ -13296,9 +13293,9 @@ msgstr "URL di Wikidata collegati a più entità" #: ../root/report/ReportsIndex.js:574 #: ../root/search/components/RecordingResults.js:132 -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:728 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:311 -#: ../root/utility/tableColumns.js:655 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:729 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:312 +#: ../root/utility/tableColumns.js:657 msgid "ISRCs" msgstr "ISRC" @@ -13546,7 +13543,7 @@ msgstr "Altre ricerche" #: ../root/search/components/ArtistResults.js:55 #: ../root/search/components/LabelResults.js:68 #: ../root/search/components/PlaceResults.js:65 -#: ../root/utility/tableColumns.js:150 ../root/utility/tableColumns.js:155 +#: ../root/utility/tableColumns.js:152 ../root/utility/tableColumns.js:157 msgid "Begin" msgstr "Inizio" @@ -13564,9 +13561,9 @@ msgid "Documentation Search" msgstr "Cerca nella documentazione" #: ../root/search/components/EventResults.js:71 -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:1044 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:183 -#: ../root/utility/tableColumns.js:358 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:1045 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:184 +#: ../root/utility/tableColumns.js:360 msgid "Location" msgstr "Posizione" @@ -13876,7 +13873,7 @@ msgid "Show more artist credits" msgstr "Mostra più accreditamenti artista" #: ../root/static/scripts/artist/components/ArtistCreditRenamer.js:254 -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:464 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:465 #: ../root/static/scripts/common/components/Autocomplete2/constants.js:103 #: ../root/static/scripts/common/components/Collapsible.js:76 msgid "Show more..." @@ -13906,56 +13903,56 @@ msgstr "Crea collezione" msgid "Update collection" msgstr "Aggiorna collezione" -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:82 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:83 #: ../root/static/scripts/common/components/Autocomplete2/constants.js:96 msgid "An error occurred while searching. Click here to try again." msgstr "Si è verificato un errore durante la ricerca. Clicca qui per riprovare." -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:87 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:88 msgid "Try with direct search instead." msgstr "Prova a usare la ricerca diretta." -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:88 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:89 msgid "Try with indexed search instead." msgstr "Prova a usare la ricerca indicizzata." -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:120 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:121 #: ../root/static/scripts/common/components/Autocomplete2.js:648 msgid "Type to search, or paste an MBID" msgstr "Digita per cercare o incolla un MBID" -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:202 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:203 #: ../root/static/scripts/common/components/Autocomplete2/constants.js:51 msgid "Clear recent items" msgstr "Cancella elementi recenti" -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:471 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:472 #: ../root/static/scripts/common/components/Autocomplete2/constants.js:110 msgid "Not found? Try again with direct search." msgstr "Non l'hai trovato? Riprova con la ricerca diretta." -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:472 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:473 #: ../root/static/scripts/common/components/Autocomplete2/constants.js:117 msgid "Slow? Switch back to indexed search." msgstr "Lento? Torna alla ricerca indicizzata." -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:715 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:303 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:716 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:304 msgid "appears on" msgstr "compare in" -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:721 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:307 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:722 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:308 msgid "standalone recording" msgstr "registrazione a sé stante" -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:815 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:399 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:816 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:400 msgid "{release_group_type} by {artist}" msgstr "{release_group_type} di {artist}" -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:1043 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:180 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:1044 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:181 msgid "Performers" msgstr "Esecutori" @@ -14069,11 +14066,11 @@ msgstr "Cerca una serie" msgid "Search for a work" msgstr "Cerca un'opera" -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:298 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:299 msgid "by {artist}" msgstr "di {artist}" -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:362 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:363 msgid "{first_list_item} … {last_list_item}" msgstr "{first_list_item} … {last_list_item}" @@ -14414,181 +14411,191 @@ msgstr "Fondato in:" msgid "Dissolved in:" msgstr "Sciolto in:" -#: ../root/static/scripts/edit/URLCleanup.js:360 +#: ../root/static/scripts/edit/URLCleanup.js:361 msgid "" "Please link to a channel, not a specific video. Videos should be linked to " "the appropriate recordings or releases instead." msgstr "Aggiungi un collegamento ad un canale, non ad uno specifico video. I video vanno collegati alle registrazioni o alle pubblicazioni appropriate." -#: ../root/static/scripts/edit/URLCleanup.js:366 +#: ../root/static/scripts/edit/URLCleanup.js:367 msgid "" "Please link to a specific video. Add channel pages to the relevant artist, " "label, etc. instead." msgstr "Aggiungi un collegamento ad uno specifico video. I canali vanno collegati all'artista, etichetta, ecc. appropriati." -#: ../root/static/scripts/edit/URLCleanup.js:533 +#: ../root/static/scripts/edit/URLCleanup.js:534 msgid "" "Allmusic “{album_url_pattern}” links should be added to release groups. To " "find the appropriate release link for this release, please check the " "Releases tab from {album_url|your link}." msgstr "I collegamenti Allmusic “{album_url_pattern}” vanno aggiunti ai gruppi di pubblicazioni. Per trovare il collegamento pubblicazione appropriato per questa pubblicazione, controlla la scheda Releases del {album_url|tuo collegamento}." -#: ../root/static/scripts/edit/URLCleanup.js:753 +#: ../root/static/scripts/edit/URLCleanup.js:754 msgid "" "Only Apple Books “{artist_url_pattern}” pages can be added directly to " "artists. Please link audiobooks to the appropriate release instead." msgstr "Solo pagine Apple Books “{artist_url_pattern}” possono essere aggiunte direttamente agli artisti. Aggiungi i collegamenti ad audiolibri alla pubblicazione appropriata." -#: ../root/static/scripts/edit/URLCleanup.js:769 +#: ../root/static/scripts/edit/URLCleanup.js:770 msgid "" "Only Apple Books audiobooks can be added to MusicBrainz. Consider adding " "books to {bookbrainz_url|BookBrainz} instead." msgstr "Solo gli audiolibri Apple Books possono essere aggiunti a MusicBrainz. Potresti aggiungere libri a {bookbrainz_url|BookBrainz}." -#: ../root/static/scripts/edit/URLCleanup.js:856 +#: ../root/static/scripts/edit/URLCleanup.js:857 msgid "" "Please link to the main page for the artist, not to a specific album or " "track." msgstr "Aggiungi un collegamento alla pagina principale dell'artista, non ad un album o ad una traccia specifici." -#: ../root/static/scripts/edit/URLCleanup.js:868 +#: ../root/static/scripts/edit/URLCleanup.js:869 msgid "" "Please link to the main page for the label, not to a specific album or " "track." msgstr "Aggiungi un collegamento alla pagina principale dell'etichetta, non ad un album o ad una traccia specifici." -#: ../root/static/scripts/edit/URLCleanup.js:1052 +#: ../root/static/scripts/edit/URLCleanup.js:1053 msgid "Please link to the main page for the artist, not a specific product." msgstr "Aggiungi un collegamento alla pagina principale dell'artista, non ad un prodotto specifico." -#: ../root/static/scripts/edit/URLCleanup.js:1054 +#: ../root/static/scripts/edit/URLCleanup.js:1055 msgid "Please link to the main page for the label, not a specific product." msgstr "Aggiungi un collegamento alla pagina principale dell'etichetta, non ad un prodotto specifico." -#: ../root/static/scripts/edit/URLCleanup.js:1597 +#: ../root/static/scripts/edit/URLCleanup.js:1600 msgid "" "Discogs “{master_url_pattern}” links group several releases, so this should " "be added to the release group instead." msgstr "I collegamenti Discogs “{master_url_pattern}” raggruppano diverse pubblicazioni e di conseguenza vanno aggiunti al gruppo di pubblicazioni." -#: ../root/static/scripts/edit/URLCleanup.js:2086 +#: ../root/static/scripts/edit/URLCleanup.js:2090 msgid "" "Only IMSLP “{category_url_pattern}” links are allowed for artists. Please " "link work pages to the specific work in question." -msgstr "Solo collegamenti IMSLP “{category_url_pattern}” sono permessi per gli artisti. Collega le pagine riferite a un'opera alla specifica opera in questione." +msgstr "Solo collegamenti IMSLP “{category_url_pattern}” sono consentiti per gli artisti. Collega le pagine riferite a un'opera alla specifica opera in questione." -#: ../root/static/scripts/edit/URLCleanup.js:2104 +#: ../root/static/scripts/edit/URLCleanup.js:2108 msgid "" "IMSLP “{category_url_pattern}” links are only allowed for artists. Please " "link the specific work page to this work instead, if available." -msgstr "I collegamenti IMSLP “{category_url_pattern}” sono permessi solo per gli artisti. Aggiungi un collegamento alla specifica pagina su quest'opera, se esiste." +msgstr "I collegamenti IMSLP “{category_url_pattern}” sono consentiti solo per gli artisti. Aggiungi un collegamento alla specifica pagina su quest'opera, se esiste." -#: ../root/static/scripts/edit/URLCleanup.js:2149 +#: ../root/static/scripts/edit/URLCleanup.js:2153 msgid "" "Instagram “{explore_url_pattern}” links are not allowed. Please link to a " "profile instead, if there is one." -msgstr "I collegamenti Instagram “{explore_url_pattern}” non sono permessi. Aggiungi un collegamento a un profilo, se esiste." +msgstr "I collegamenti Instagram “{explore_url_pattern}” non sono consentiti. Aggiungi un collegamento a un profilo, se esiste." -#: ../root/static/scripts/edit/URLCleanup.js:2177 +#: ../root/static/scripts/edit/URLCleanup.js:2181 msgid "" "Please do not link directly to images, link to the appropriate Instagram " "profile page instead. If you want to link to a video, {url|add a standalone " "recording} for it instead." msgstr "Non aggiungere collegamenti diretti a immagini, aggiungi un collegamento alla pagina di profilo Instagram appropriata. Se vuoi aggiungere un collegamento a un video, {url|aggiungi una registrazione a sé stante} per il video." -#: ../root/static/scripts/edit/URLCleanup.js:2202 +#: ../root/static/scripts/edit/URLCleanup.js:2206 msgid "This is an internal Instagram page and should not be added." msgstr "Questa è una pagina interna di Instagram e non va aggiunta." -#: ../root/static/scripts/edit/URLCleanup.js:2278 +#: ../root/static/scripts/edit/URLCleanup.js:2282 msgid "" "Only iTunes “{artist_url_pattern}” pages can be added directly to artists. " "Please link albums, videos, etc. to the appropriate release or recording " "instead." msgstr "Solo pagine iTunes “{artist_url_pattern}” possono essere aggiunte direttamente agli artisti. Aggiungi collegamenti ad album, video, ecc. alla pubblicazione o registrazione appropriata." -#: ../root/static/scripts/edit/URLCleanup.js:2890 +#: ../root/static/scripts/edit/URLCleanup.js:2895 msgid "" "Musixmatch “{album_url_pattern}” pages are a bad match for MusicBrainz " "release groups, and linking to them is currently disallowed. Please consider" " adding Musixmatch links to the relevant artists and works instead." -msgstr "Le pagine “{album_url_pattern}” di Musixmatch non corrispondono ai gruppi di pubblicazioni di MusicBrainz, e aggiungere collegamenti ad esse non è permesso al momento. Potresti invece aggiungere collegamenti di Musixmatch agli artisti e alle opere appropriate." +msgstr "Le pagine “{album_url_pattern}” di Musixmatch non corrispondono ai gruppi di pubblicazioni di MusicBrainz, e aggiungere collegamenti ad esse non è consentito al momento. Potresti invece aggiungere collegamenti di Musixmatch agli artisti e alle opere appropriate." -#: ../root/static/scripts/edit/URLCleanup.js:2993 +#: ../root/static/scripts/edit/URLCleanup.js:2998 msgid "" "This is a redirect link. Please follow {redirect_url|your link} and add the " "link it redirects to instead." msgstr "Questo è un link di reindirizzamento. Segui {redirect_url|il tuo collegamento} e aggiungi il link a cui reindirizza invece di questo." -#: ../root/static/scripts/edit/URLCleanup.js:3504 +#: ../root/static/scripts/edit/URLCleanup.js:3464 +msgid "Only RYM music videos can be linked to recordings." +msgstr "Solo i video musicali di RYM possono essere collegati alle registrazioni." + +#: ../root/static/scripts/edit/URLCleanup.js:3516 msgid "" "This is a link to the old Resident Advisor domain. Please follow " "{ra_url|your link}, make sure the link it redirects to is still the correct " "one and, if so, add that link instead." msgstr "Questo è un collegamento al vecchio dominio di Resident Advisor. Segui {ra_url|il tuo collegamento}, assicurati che il collegamento a cui reindirizza sia ancora quello corretto e, se è così, aggiungi quest'ultimo." -#: ../root/static/scripts/edit/URLCleanup.js:4092 +#: ../root/static/scripts/edit/URLCleanup.js:4143 msgid "This is not a profile, but a Twitter documentation page." msgstr "Questo non è un profilo, bensì una pagina di documentazione di Twitter." -#: ../root/static/scripts/edit/URLCleanup.js:4106 +#: ../root/static/scripts/edit/URLCleanup.js:4157 msgid "Please link to Twitter profiles, not tweets." msgstr "Inserisci collegamenti a profili Twitter, non a tweet." -#: ../root/static/scripts/edit/URLCleanup.js:4124 +#: ../root/static/scripts/edit/URLCleanup.js:4175 msgid "This site does not allow direct links to their images." msgstr "Questo sito non consente collegamenti diretti alle sue immagini." -#: ../root/static/scripts/edit/URLCleanup.js:4331 +#: ../root/static/scripts/edit/URLCleanup.js:4372 +msgid "" +"Please link to the “{allowed_url_pattern}” page rather than this " +"“{current_url_pattern}” link." +msgstr "Aggiungi un collegamento alla pagina “{allowed_url_pattern}” anziché a questa pagina “{current_url_pattern}”." + +#: ../root/static/scripts/edit/URLCleanup.js:4428 msgid "" "There is an unencoded “?” or “#” character in this URL. Please check whether" " it is useless and should be removed, or whether it is an error and the URL " "is misencoded." msgstr "Quest'URL contiene un carattere “?” o “#” non codificato. Controlla se va rimosso perché inutile o se è un errore e l'URL è codificato in modo errato." -#: ../root/static/scripts/edit/URLCleanup.js:4351 +#: ../root/static/scripts/edit/URLCleanup.js:4448 msgid "" "Please do not link directly to WhoSampled “{unwanted_url_pattern}” pages. " "Link to the appropriate WhoSampled artist, track or album page instead." msgstr "Non aggiungere collegamenti diretti a pagine “{unwanted_url_pattern}” di WhoSampled. Aggiungi collegamenti alla pagina artista, traccia o album di WhoSampled appropriata." -#: ../root/static/scripts/edit/URLCleanup.js:4372 +#: ../root/static/scripts/edit/URLCleanup.js:4469 msgid "Please link WhoSampled “{album_url_pattern}” pages to release groups." msgstr "Collega le pagine “{album_url_pattern}” di WhoSampled ai gruppi di pubblicazioni." -#: ../root/static/scripts/edit/URLCleanup.js:4390 +#: ../root/static/scripts/edit/URLCleanup.js:4487 msgid "Please link WhoSampled artist pages to artists." msgstr "Collega le pagine artista di WhoSampled agli artisti." -#: ../root/static/scripts/edit/URLCleanup.js:4402 +#: ../root/static/scripts/edit/URLCleanup.js:4499 msgid "Please link WhoSampled track pages to recordings." msgstr "Collega le pagine traccia di WhoSampled alle registrazioni." -#: ../root/static/scripts/edit/URLCleanup.js:4469 +#: ../root/static/scripts/edit/URLCleanup.js:4566 msgid "" "Links to specific sections of Wikipedia articles are not allowed. Please " "remove “{fragment}” if still appropriate. See the {url|guidelines}." -msgstr "I link a specifiche sezioni di articoli di Wikipedia non sono permessi. Se l'articolo rimane pertinente, rimuovi “{fragment}”. Consulta le {url|linee guida}." +msgstr "I collegamenti a specifiche sezioni di articoli di Wikipedia non sono consentiti. Se l'articolo è comunque pertinente, rimuovi “{fragment}”. Consulta le {url|linee guida}." -#: ../root/static/scripts/edit/URLCleanup.js:4570 +#: ../root/static/scripts/edit/URLCleanup.js:4669 msgid "Only video and playlist links are allowed on releases." msgstr "Solo collegamenti video e playlist sono consentiti sulle pubblicazioni." -#: ../root/static/scripts/edit/URLCleanup.js:4606 +#: ../root/static/scripts/edit/URLCleanup.js:4705 msgid "" "Wikipedia normally has no entries for specific releases, so adding Wikipedia" " links to a release is currently blocked. Please add this Wikipedia link to " "the release group instead, if appropriate." msgstr "Wikipedia non ha solitamente voci su pubblicazioni specifiche, perciò al momento non è permesso aggiungere collegamenti a Wikipedia ad una pubblicazione. Aggiungi questo collegamento a Wikipedia al gruppo di pubblicazioni, se appropriato." -#: ../root/static/scripts/edit/URLCleanup.js:4618 +#: ../root/static/scripts/edit/URLCleanup.js:4717 msgid "" "Wikidata normally has no entries for specific releases, so adding Wikidata " "links to a release is currently blocked. Please add this Wikidata link to " "the release group instead, if appropriate." msgstr "Wikidata non ha solitamente voci su pubblicazioni specifiche, perciò al momento non è permesso aggiungere collegamenti a Wikidata ad una pubblicazione. Aggiungi questo collegamento a Wikidata al gruppo di pubblicazioni, se appropriato." -#: ../root/static/scripts/edit/URLCleanup.js:4630 +#: ../root/static/scripts/edit/URLCleanup.js:4729 msgid "" "This is a Bandcamp profile, not a page for a specific release. Even if it " "shows this release right now, that can change when the artist releases " @@ -14597,7 +14604,7 @@ msgid "" "add this profile link to the appropriate artist or label." msgstr "Questo è un profilo di Bandcamp e non una pagina per una pubblicazione specifica. Anche se in questo momento mostra questa pubblicazione, ciò potrebbe cambiare quando l'artista ne pubblicherà un'altra. Ti chiediamo perciò di trovare e aggiungere la pagina corretta per la pubblicazione (“{album_url_pattern}” o “{single_url_pattern}”). Aggiungi pure questo collegamento di profilo all'artista o all'etichetta corretta." -#: ../root/static/scripts/edit/URLCleanup.js:4658 +#: ../root/static/scripts/edit/URLCleanup.js:4757 msgid "" "This is a Bandcamp profile, not a page for a specific recording. Even if it " "shows a single recording right now, that can change when the artist releases" @@ -14606,12 +14613,12 @@ msgid "" "the appropriate artist or label." msgstr "Questo è un profilo di Bandcamp e non una pagina per una registrazione specifica. Anche se in questo momento mostra una registrazione singola, ciò potrebbe cambiare quando l'artista ne pubblicherà un'altra. Ti chiediamo perciò di trovare e aggiungere la pagina corretta per la registrazione (“{album_url_pattern}” o “{single_url_pattern}”). Aggiungi pure questo collegamento di profilo all'artista o all'etichetta corretta." -#: ../root/static/scripts/edit/URLCleanup.js:4821 +#: ../root/static/scripts/edit/URLCleanup.js:4920 msgid "Some relationship types are missing for this URL." msgstr "Alcuni tipi di relazione per questo URL sono mancanti." -#: ../root/static/scripts/edit/URLCleanup.js:4838 -#: ../root/static/scripts/edit/externalLinks.js:743 +#: ../root/static/scripts/edit/URLCleanup.js:4937 +#: ../root/static/scripts/edit/externalLinks.js:767 msgid "This relationship type combination is invalid." msgstr "Questa combinazione di tipi di relazione non è valida." @@ -14747,12 +14754,12 @@ msgstr "Se lasci questa pagina perderai tutte le tue modifiche." msgid "" "Links to MusicBrainz URLs are not allowed. Did you mean to paste something " "else?" -msgstr "I collegamenti a URL di MusicBrainz non sono permessi. Forse intendevi incollare qualcos'altro?" +msgstr "I collegamenti a URL di MusicBrainz non sono consentiti. Forse intendevi incollare qualcos'altro?" #: ../root/static/scripts/edit/externalLinks.js:559 msgid "" "Links to this website are not allowed because it is known to host malware." -msgstr "I collegamenti a questo sito web non sono permessi poiché contiene malware." +msgstr "I collegamenti a questo sito web non sono consentiti poiché contiene malware." #: ../root/static/scripts/edit/externalLinks.js:565 msgid "" @@ -14774,49 +14781,93 @@ msgstr "Seleziona un tipo di collegamento per l'URL che hai inserito." msgid "This relationship already exists." msgstr "Questa relazione è già esistente." -#: ../root/static/scripts/edit/externalLinks.js:609 +#: ../root/static/scripts/edit/externalLinks.js:607 #: ../root/static/scripts/relationship-editor/common/dialog.js:565 msgid "" "This URL is not allowed for the selected link type, or is incorrectly " "formatted." msgstr "Questo URL non è consentito per il tipo di collegamento selezionato o è formattato in modo non corretto." -#: ../root/static/scripts/edit/externalLinks.js:615 +#: ../root/static/scripts/edit/externalLinks.js:612 msgid "This URL is not allowed for the selected link type." msgstr "Questo URL non è consentito per il tipo di collegamento selezionato." -#: ../root/static/scripts/edit/externalLinks.js:674 +#: ../root/static/scripts/edit/externalLinks.js:618 +msgid "This URL is not allowed for areas." +msgstr "Questo URL non è consentito per le aree." + +#: ../root/static/scripts/edit/externalLinks.js:620 +msgid "This URL is not allowed for artists." +msgstr "Questo URL non è consentito per gli artisti." + +#: ../root/static/scripts/edit/externalLinks.js:622 +msgid "This URL is not allowed for events." +msgstr "Questo URL non è consentito per gli eventi." + +#: ../root/static/scripts/edit/externalLinks.js:624 +msgid "This URL is not allowed for instruments." +msgstr "Questo URL non è consentito per gli strumenti." + +#: ../root/static/scripts/edit/externalLinks.js:626 +msgid "This URL is not allowed for labels." +msgstr "Questo URL non è consentito per le etichette." + +#: ../root/static/scripts/edit/externalLinks.js:628 +msgid "This URL is not allowed for places." +msgstr "Questo URL non è consentito per i luoghi." + +#: ../root/static/scripts/edit/externalLinks.js:630 +msgid "This URL is not allowed for recordings." +msgstr "Questo URL non è consentito per le registrazioni." + +#: ../root/static/scripts/edit/externalLinks.js:632 +msgid "This URL is not allowed for releases." +msgstr "Questo URL non è consentito per le pubblicazioni." + +#: ../root/static/scripts/edit/externalLinks.js:634 +msgid "This URL is not allowed for release groups." +msgstr "Questo URL non è consentito per i gruppi di pubblicazioni." + +#: ../root/static/scripts/edit/externalLinks.js:637 +msgid "This URL is not allowed for series." +msgstr "Questo URL non è consentito per le serie." + +#: ../root/static/scripts/edit/externalLinks.js:639 +msgid "This URL is not allowed for works." +msgstr "Questo URL non è consentito per le opere." + +#: ../root/static/scripts/edit/externalLinks.js:698 msgid "" "Note: This link already exists at position #{position}. To merge, press " "enter or select a type." msgstr "Nota: Questo collegamento è già esistente nella posizione #{position}. Per unirli, premi invio o seleziona un tipo." -#: ../root/static/scripts/edit/externalLinks.js:861 +#: ../root/static/scripts/edit/externalLinks.js:885 #: ../root/static/scripts/relationship-editor/common/dialog.js:418 msgid "{description} ({url|more documentation})" msgstr "{description} ({url|altra documentazione})" -#: ../root/static/scripts/edit/externalLinks.js:959 +#: ../root/static/scripts/edit/externalLinks.js:930 +msgid "Remove Relationship" +msgstr "Rimuovi relazione" + +#: ../root/static/scripts/edit/externalLinks.js:996 msgid "video" msgstr "video" -#: ../root/static/scripts/edit/externalLinks.js:990 -msgid "Remove Relationship" -msgstr "Rimuovi relazione" +#: ../root/static/scripts/edit/externalLinks.js:1091 +msgid "Remove Link" +msgstr "Rimuovi collegamento" -#: ../root/static/scripts/edit/externalLinks.js:1076 +#: ../root/static/scripts/edit/externalLinks.js:1120 msgid "Add link" msgstr "Aggiungi collegamento" -#: ../root/static/scripts/edit/externalLinks.js:1079 +#: ../root/static/scripts/edit/externalLinks.js:1123 msgid "Add another link" msgstr "Aggiungi un altro collegamento" -#: ../root/static/scripts/edit/externalLinks.js:1131 -msgid "Remove Link" -msgstr "Rimuovi collegamento" - -#: ../root/static/scripts/edit/externalLinks.js:1180 +#: ../root/static/scripts/edit/externalLinks.js:1205 msgid "Add another relationship" msgstr "Aggiungi un'altra relazione" @@ -16028,11 +16079,11 @@ msgstr "Questa modifica è fallita perché riguardava dati di altà qualità e n msgid "This edit was cancelled." msgstr "Questa modifica è stata annullata." -#: ../root/utility/tableColumns.js:741 +#: ../root/utility/tableColumns.js:743 msgid "AcoustIDs" msgstr "AcoustID" -#: ../root/utility/tableColumns.js:827 +#: ../root/utility/tableColumns.js:829 msgid "Subscribed" msgstr "Iscritto" diff --git a/po/mb_server.ja.po b/po/mb_server.ja.po index 9c5d5d5d19f..2f37fe14af6 100644 --- a/po/mb_server.ja.po +++ b/po/mb_server.ja.po @@ -37,9 +37,9 @@ msgid "" msgstr "" "Project-Id-Version: MusicBrainz\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-09-13 18:38-0500\n" -"PO-Revision-Date: 2021-09-13 23:42+0000\n" -"Last-Translator: Michael Wiencek <email address hidden>\n" +"POT-Creation-Date: 2021-09-28 21:37+0300\n" +"PO-Revision-Date: 2021-09-28 18:40+0000\n" +"Last-Translator: Nicolás Tamargo <email address hidden>\n" "Language-Team: Japanese (http://www.transifex.com/musicbrainz/musicbrainz/language/ja/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -90,7 +90,7 @@ msgstr "「YY」は登録された年の最後の2桁です。" #: ../root/edit/details/historic/AddRelease.js:118 #: ../root/recording/RecordingIndex.js:50 #: ../root/static/scripts/release/components/MediumTable.js:218 -#: ../root/utility/tableColumns.js:537 +#: ../root/utility/tableColumns.js:539 msgid "#" msgstr "#" @@ -146,26 +146,13 @@ msgstr "(リリース「{release}」のメディア{position}でした)" msgid "(was medium {position}: {name} on release {release})" msgstr "(リリース「{release}」のメディア{position}:「{name}」でした)" -#: ../root/edit/details/merge_releases.tt:6 -#: ../root/components/ReleaseLanguageScript.js:24 -#: ../root/components/ReleaseLanguageScript.js:30 -#: ../root/components/list/ReleaseList.js:100 ../root/release/CoverArt.js:92 -#: ../root/release_group/ReleaseGroupIndex.js:90 -#: ../root/search/components/ReleaseResults.js:55 -#: ../root/static/scripts/common/components/ReleaseEvents.js:55 -#: ../root/static/scripts/common/components/ReleaseEvents.js:72 -#: ../root/static/scripts/release-editor/duplicates.js:145 -msgctxt "missing data" -msgid "-" -msgstr "-" - #: ../root/cdtoc/attach_artist_releases.tt:16 #: ../root/cdtoc/attach_filter_release.tt:30 ../root/cdtoc/list.tt:10 -#: ../root/edit/details/merge_releases.tt:23 ../root/release/merge.tt:16 +#: ../root/release/merge.tt:16 ../root/edit/details/MergeReleases.js:256 #: ../root/recording/RecordingIndex.js:57 #: ../root/release_group/ReleaseGroupIndex.js:159 #: ../root/search/components/ReleaseResults.js:103 -#: ../root/utility/tableColumns.js:480 ../root/utility/tableColumns.js:488 +#: ../root/utility/tableColumns.js:482 ../root/utility/tableColumns.js:490 msgctxt "and" msgid "/" msgstr "/" @@ -441,10 +428,6 @@ msgstr "管理者フラグ" msgid "All of these relationships." msgstr "これらの関連の全て" -#: ../root/edit/details/merge_releases.tt:141 -msgid "All recordings for these releases are already merged." -msgstr "このリリースの全レコーディングはマージ済みです。" - #: ../root/release/edit/recordings.tt:3 msgid "" "All tracks require an associated recording. Click “Edit” to select a " @@ -509,11 +492,6 @@ msgstr "注釈:" msgid "Annotations support a limited set of wiki formatting options:" msgstr "" -#: ../root/edit/details/merge_releases.tt:149 -#: ../lib/MusicBrainz/Server/Form/Merge/Release.pm:50 -msgid "Append mediums to target release" -msgstr "ターゲットリリースにメディアを追加" - #: ../root/edit/search_macros.tt:417 msgid "Applied Edit Count of Editor" msgstr "編集者の適用回数" @@ -622,10 +600,9 @@ msgstr "地域\t" #: ../root/cdtoc/attach_confirm.tt:13 #: ../root/cdtoc/attach_filter_release.tt:29 ../root/cdtoc/list.tt:8 #: ../root/cdtoc/lookup.tt:41 ../root/components/common-macros.tt:569 -#: ../root/edit/details/merge_releases.tt:20 ../root/edit/search_macros.tt:417 -#: ../root/release/edit/tracklist.tt:163 ../root/release/edit/tracklist.tt:412 -#: ../root/release/merge.tt:13 ../root/watch/list.tt:16 -#: ../lib/MusicBrainz/Server/Edit/Artist.pm:7 +#: ../root/edit/search_macros.tt:417 ../root/release/edit/tracklist.tt:163 +#: ../root/release/edit/tracklist.tt:412 ../root/release/merge.tt:13 +#: ../root/watch/list.tt:16 ../lib/MusicBrainz/Server/Edit/Artist.pm:7 #: ../lib/MusicBrainz/Server/Form/Search/Search.pm:35 #: ../root/artist/ArtistHeader.js:34 #: ../root/components/RelationshipsTable.js:320 @@ -643,6 +620,7 @@ msgstr "地域\t" #: ../root/edit/details/EditRecording.js:86 #: ../root/edit/details/EditRelease.js:83 #: ../root/edit/details/EditReleaseGroup.js:101 +#: ../root/edit/details/MergeReleases.js:253 #: ../root/edit/details/historic/AddRelease.js:68 #: ../root/edit/details/historic/AddRelease.js:120 #: ../root/edit/details/historic/AddTrackKV.js:55 @@ -716,10 +694,10 @@ msgstr "アーティスト:" #: ../root/report/components/EventList.js:66 #: ../root/search/components/EventResults.js:70 #: ../root/search/components/WorkResults.js:52 -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:895 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:455 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:896 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:456 #: ../root/static/scripts/common/utility/formatEntityTypeName.js:15 -#: ../root/tag/TagLayout.js:25 ../root/utility/tableColumns.js:854 +#: ../root/tag/TagLayout.js:25 ../root/utility/tableColumns.js:856 msgid "Artists" msgstr "アーティスト" @@ -776,14 +754,14 @@ msgstr "バナーメッセージ編集者" #: ../root/cdtoc/attach_artist_releases.tt:19 #: ../root/cdtoc/attach_filter_release.tt:33 ../root/cdtoc/list.tt:13 -#: ../root/cdtoc/lookup.tt:46 ../root/edit/details/merge_releases.tt:26 -#: ../root/release/edit/duplicates.tt:17 ../root/release/merge.tt:19 -#: ../root/components/list/ReleaseList.js:128 +#: ../root/cdtoc/lookup.tt:46 ../root/release/edit/duplicates.tt:17 +#: ../root/release/merge.tt:19 ../root/components/list/ReleaseList.js:128 #: ../root/edit/details/AddRelease.js:129 #: ../root/edit/details/EditBarcodes.js:58 #: ../root/edit/details/EditBarcodes.js:64 #: ../root/edit/details/EditRelease.js:167 #: ../root/edit/details/EditReleaseLabel.js:138 +#: ../root/edit/details/MergeReleases.js:259 #: ../root/edit/details/historic/AddRelease.js:155 #: ../root/edit/details/historic/EditReleaseEvents.js:138 #: ../root/otherlookup/OtherLookupForm.js:64 @@ -1010,12 +988,12 @@ msgstr "カタログ番号:" #: ../root/cdtoc/attach_artist_releases.tt:18 #: ../root/cdtoc/attach_filter_release.tt:32 ../root/cdtoc/list.tt:12 -#: ../root/cdtoc/lookup.tt:45 ../root/edit/details/merge_releases.tt:25 -#: ../root/release/edit/duplicates.tt:16 ../root/release/merge.tt:18 +#: ../root/cdtoc/lookup.tt:45 ../root/release/edit/duplicates.tt:16 +#: ../root/release/merge.tt:18 ../root/edit/details/MergeReleases.js:258 #: ../root/recording/RecordingIndex.js:59 #: ../root/release_group/ReleaseGroupIndex.js:161 #: ../root/search/components/ReleaseResults.js:105 -#: ../root/utility/tableColumns.js:456 ../root/utility/tableColumns.js:461 +#: ../root/utility/tableColumns.js:458 ../root/utility/tableColumns.js:463 msgid "Catalog#" msgstr "カタログ番号" @@ -1176,16 +1154,16 @@ msgstr "終了日にコピー" #: ../root/cdtoc/attach_artist_releases.tt:16 #: ../root/cdtoc/attach_filter_release.tt:30 ../root/cdtoc/list.tt:10 -#: ../root/cdtoc/lookup.tt:43 ../root/edit/details/merge_releases.tt:23 -#: ../root/release/edit/duplicates.tt:14 ../root/release/merge.tt:16 -#: ../root/edit/details/EditReleaseLabel.js:127 +#: ../root/cdtoc/lookup.tt:43 ../root/release/edit/duplicates.tt:14 +#: ../root/release/merge.tt:16 ../root/edit/details/EditReleaseLabel.js:127 +#: ../root/edit/details/MergeReleases.js:256 #: ../root/edit/details/historic/AddRelease.js:152 #: ../root/edit/details/historic/EditReleaseEvents.js:135 #: ../root/recording/RecordingIndex.js:57 #: ../root/release_group/ReleaseGroupIndex.js:159 #: ../root/search/components/ReleaseResults.js:103 #: ../root/static/scripts/common/components/FilterForm.js:110 -#: ../root/utility/tableColumns.js:476 ../root/utility/tableColumns.js:488 +#: ../root/utility/tableColumns.js:478 ../root/utility/tableColumns.js:490 msgid "Country" msgstr "国" @@ -1260,13 +1238,14 @@ msgstr "データ:" #: ../root/annotation/history.tt:12 ../root/cdtoc/attach_artist_releases.tt:16 #: ../root/cdtoc/attach_filter_release.tt:30 ../root/cdtoc/list.tt:10 -#: ../root/cdtoc/lookup.tt:42 ../root/edit/details/merge_releases.tt:23 -#: ../root/release/edit/duplicates.tt:13 ../root/release/merge.tt:16 +#: ../root/cdtoc/lookup.tt:42 ../root/release/edit/duplicates.tt:13 +#: ../root/release/merge.tt:16 #: ../root/admin/statistics-events/DeleteStatisticsEvent.js:31 #: ../root/admin/statistics-events/StatisticsEventEditForm.js:35 #: ../root/admin/statistics-events/StatisticsEventIndex.js:30 #: ../root/components/RelationshipsTable.js:316 #: ../root/edit/details/EditReleaseLabel.js:119 +#: ../root/edit/details/MergeReleases.js:256 #: ../root/edit/details/historic/AddRelease.js:151 #: ../root/edit/details/historic/EditReleaseEvents.js:134 #: ../root/elections/ElectionVotes.js:26 @@ -1275,8 +1254,8 @@ msgstr "データ:" #: ../root/search/components/EventResults.js:67 #: ../root/search/components/ReleaseResults.js:103 #: ../root/static/scripts/common/components/FilterForm.js:129 -#: ../root/utility/tableColumns.js:255 ../root/utility/tableColumns.js:260 -#: ../root/utility/tableColumns.js:482 ../root/utility/tableColumns.js:488 +#: ../root/utility/tableColumns.js:257 ../root/utility/tableColumns.js:262 +#: ../root/utility/tableColumns.js:484 ../root/utility/tableColumns.js:490 msgid "Date" msgstr "日付" @@ -1344,7 +1323,7 @@ msgstr "廃止:" #: ../root/relationship/linktype/RelationshipTypeIndex.js:96 #: ../root/search/components/InstrumentResults.js:52 #: ../root/static/scripts/collection/components/CollectionEditForm.js:89 -#: ../root/utility/tableColumns.js:636 +#: ../root/utility/tableColumns.js:638 msgid "Description" msgstr "説明" @@ -1380,21 +1359,21 @@ msgstr "死没:" #: ../root/edit/details/AddReleaseGroup.js:71 #: ../root/edit/details/AddSeries.js:51 #: ../root/edit/details/AddStandaloneRecording.js:67 -#: ../root/edit/details/AddWork.js:57 ../root/edit/details/EditArea.js:84 +#: ../root/edit/details/AddWork.js:59 ../root/edit/details/EditArea.js:84 #: ../root/edit/details/EditArtist.js:100 ../root/edit/details/EditEvent.js:64 #: ../root/edit/details/EditInstrument.js:64 #: ../root/edit/details/EditLabel.js:84 ../root/edit/details/EditPlace.js:70 #: ../root/edit/details/EditRecording.js:65 #: ../root/edit/details/EditRelease.js:111 #: ../root/edit/details/EditReleaseGroup.js:64 -#: ../root/edit/details/EditSeries.js:61 ../root/edit/details/EditWork.js:73 +#: ../root/edit/details/EditSeries.js:61 ../root/edit/details/EditWork.js:75 #: ../root/genre/GenreEditForm.js:38 msgid "Disambiguation" msgstr "曖昧さ回避" #: ../root/release/discids.tt:8 ../root/edit/details/SetTrackLengths.js:66 #: ../root/otherlookup/OtherLookupForm.js:114 -#: ../root/utility/tableColumns.js:179 ../root/utility/tableColumns.js:184 +#: ../root/utility/tableColumns.js:181 ../root/utility/tableColumns.js:186 msgid "Disc ID" msgstr "ディスク ID" @@ -1634,7 +1613,7 @@ msgstr "レコード用のトラック番号を使用する" #: ../root/search/components/ArtistResults.js:57 #: ../root/search/components/LabelResults.js:69 #: ../root/search/components/PlaceResults.js:66 -#: ../root/utility/tableColumns.js:273 ../root/utility/tableColumns.js:278 +#: ../root/utility/tableColumns.js:275 ../root/utility/tableColumns.js:280 msgid "End" msgstr "終了" @@ -1830,11 +1809,11 @@ msgstr "より詳細な情報は、 {doc_doc|ドキュメント} および {doc_ msgid "For more information, check the {doc_doc|documentation}." msgstr "より詳細な情報は、 {doc_doc|ドキュメント} を参照してください。" -#: ../root/cdtoc/list.tt:9 ../root/edit/details/merge_releases.tt:21 -#: ../root/release/edit/duplicates.tt:11 ../root/release/merge.tt:14 -#: ../root/components/list/ReleaseList.js:93 +#: ../root/cdtoc/list.tt:9 ../root/release/edit/duplicates.tt:11 +#: ../root/release/merge.tt:14 ../root/components/list/ReleaseList.js:93 #: ../root/edit/details/EditMedium.js:530 #: ../root/edit/details/EditReleaseLabel.js:145 +#: ../root/edit/details/MergeReleases.js:254 #: ../root/edit/details/historic/AddRelease.js:156 #: ../root/edit/details/historic/EditReleaseEvents.js:139 #: ../root/release_group/ReleaseGroupIndex.js:157 @@ -2003,7 +1982,7 @@ msgstr "" #: ../root/components/common-macros.tt:602 #: ../lib/MusicBrainz/Server/Controller/Edit.pm:240 -#: ../root/static/scripts/common/constants.js:279 +#: ../root/static/scripts/common/constants.js:281 msgid "High" msgstr "高" @@ -2142,12 +2121,12 @@ msgstr "ISRC" msgid "ISRCs:" msgstr "ISRC:" -#: ../root/work/edit_form.tt:16 ../root/edit/details/AddWork.js:63 -#: ../root/edit/details/EditWork.js:80 ../root/edit/details/RemoveIswc.js:36 +#: ../root/work/edit_form.tt:16 ../root/edit/details/AddWork.js:65 +#: ../root/edit/details/EditWork.js:82 ../root/edit/details/RemoveIswc.js:36 #: ../root/otherlookup/OtherLookupForm.js:79 #: ../root/report/IswcsWithManyWorks.js:48 #: ../root/search/components/WorkResults.js:53 -#: ../root/utility/tableColumns.js:762 +#: ../root/utility/tableColumns.js:764 msgid "ISWC" msgstr "ISWC" @@ -2300,23 +2279,6 @@ msgstr "楽器:" msgid "Instruments" msgstr "楽器" -#: ../root/edit/details/merge_releases.tt:78 -#: ../root/edit/details/merge_releases.tt:83 -#: ../root/edit/details/merge_releases.tt:92 -#: ../root/edit/details/merge_releases.tt:109 -#: ../root/edit/details/MergeAreas.js:35 -#: ../root/edit/details/MergeArtists.js:37 -#: ../root/edit/details/MergeEvents.js:40 -#: ../root/edit/details/MergeInstruments.js:35 -#: ../root/edit/details/MergeLabels.js:35 -#: ../root/edit/details/MergePlaces.js:35 -#: ../root/edit/details/MergeRecordings.js:40 -#: ../root/edit/details/MergeReleaseGroups.js:35 -#: ../root/edit/details/MergeSeries.js:35 -#: ../root/edit/details/MergeWorks.js:35 -msgid "Into:" -msgstr "" - #: ../root/cdstub/error.tt:5 msgid "Invalid Disc ID" msgstr "不正なディスクID" @@ -2357,13 +2319,13 @@ msgstr "" #: ../root/cdtoc/attach_artist_releases.tt:17 #: ../root/cdtoc/attach_filter_release.tt:31 ../root/cdtoc/list.tt:11 #: ../root/cdtoc/lookup.tt:44 ../root/components/common-macros.tt:569 -#: ../root/edit/details/merge_releases.tt:24 ../root/edit/search_macros.tt:417 -#: ../root/release/edit/duplicates.tt:15 ../root/release/merge.tt:17 -#: ../lib/MusicBrainz/Server/Edit/Label.pm:7 +#: ../root/edit/search_macros.tt:417 ../root/release/edit/duplicates.tt:15 +#: ../root/release/merge.tt:17 ../lib/MusicBrainz/Server/Edit/Label.pm:7 #: ../lib/MusicBrainz/Server/Form/Search/Search.pm:40 #: ../root/components/list/LabelList.js:54 ../root/edit/details/AddLabel.js:51 #: ../root/edit/details/EditLabel.js:62 #: ../root/edit/details/EditReleaseLabel.js:69 +#: ../root/edit/details/MergeReleases.js:257 #: ../root/edit/details/historic/AddRelease.js:153 #: ../root/edit/details/historic/EditReleaseEvents.js:136 #: ../root/label/LabelHeader.js:27 ../root/layout/components/Search.js:39 @@ -2376,8 +2338,8 @@ msgstr "" #: ../root/search/components/SearchForm.js:39 #: ../root/static/scripts/common/constants.js:23 #: ../root/static/scripts/common/utility/formatEntityTypeName.js:56 -#: ../root/user/UserProfile.js:46 ../root/utility/tableColumns.js:503 -#: ../root/utility/tableColumns.js:508 +#: ../root/user/UserProfile.js:46 ../root/utility/tableColumns.js:505 +#: ../root/utility/tableColumns.js:510 msgid "Label" msgstr "レーベル" @@ -2480,7 +2442,7 @@ msgstr "編集プレビューを読込み中…" #: ../root/static/scripts/common/components/FingerprintTable.js:87 #: ../root/static/scripts/edit/components/AddEntityDialog.js:101 #: ../root/static/scripts/release/components/MediumTable.js:118 -#: ../root/utility/tableColumns.js:674 +#: ../root/utility/tableColumns.js:676 msgid "Loading..." msgstr "ロード中..." @@ -2520,15 +2482,15 @@ msgstr "検索件数" #: ../root/components/common-macros.tt:602 #: ../lib/MusicBrainz/Server/Controller/Edit.pm:240 -#: ../root/static/scripts/common/constants.js:276 +#: ../root/static/scripts/common/constants.js:278 msgid "Low" msgstr "低" #: ../root/release/edit_relationships.tt:172 -#: ../root/edit/details/AddWork.js:81 ../root/edit/details/EditWork.js:98 +#: ../root/edit/details/AddWork.js:83 ../root/edit/details/EditWork.js:100 #: ../root/layout/components/sidebar/WorkSidebar.js:67 #: ../root/search/components/WorkResults.js:55 -#: ../root/static/scripts/work.js:312 ../root/utility/tableColumns.js:873 +#: ../root/static/scripts/work.js:312 ../root/utility/tableColumns.js:875 msgid "Lyrics Languages" msgstr "歌詞言語" @@ -2583,22 +2545,6 @@ msgstr "メディアタイトル:" msgid "Medium track lengths" msgstr "メディアトラック長" -#: ../root/edit/details/merge_releases.tt:44 -msgid "Medium {position} is now medium {new_position}" -msgstr "" - -#: ../root/edit/details/merge_releases.tt:44 -msgid "Medium {position} is now medium {new_position}: {new_name}" -msgstr "" - -#: ../root/edit/details/merge_releases.tt:44 -msgid "Medium {position}: {name} is now medium {new_position}" -msgstr "" - -#: ../root/edit/details/merge_releases.tt:44 -msgid "Medium {position}: {name} is now medium {new_position}: {new_name}" -msgstr "" - #: ../root/layout/merge-helper.tt:30 #: ../root/layout/components/MergeHelper.js:71 #: ../root/layout/components/sidebar/MergeLink.js:31 @@ -2614,12 +2560,7 @@ msgstr "プロセスをマージ" msgid "Merge Releases" msgstr "リリースをマージ" -#: ../root/edit/details/merge_releases.tt:149 -#: ../lib/MusicBrainz/Server/Form/Merge/Release.pm:51 -msgid "Merge mediums and recordings" -msgstr "メディアやレコーディングをマージ" - -#: ../root/edit/details/merge_releases.tt:147 ../root/release/merge.tt:55 +#: ../root/release/merge.tt:55 ../root/edit/details/MergeReleases.js:358 msgid "Merge strategy:" msgstr "マージ戦略:" @@ -2709,7 +2650,7 @@ msgstr "自分の投票:" #: ../root/edit/details/AddReleaseGroup.js:56 #: ../root/edit/details/AddSeries.js:46 #: ../root/edit/details/AddStandaloneRecording.js:56 -#: ../root/edit/details/AddWork.js:52 ../root/edit/details/EditArea.js:70 +#: ../root/edit/details/AddWork.js:54 ../root/edit/details/EditArea.js:70 #: ../root/edit/details/EditArtist.js:86 ../root/edit/details/EditEvent.js:57 #: ../root/edit/details/EditInstrument.js:57 #: ../root/edit/details/EditLabel.js:68 ../root/edit/details/EditMedium.js:522 @@ -2719,7 +2660,7 @@ msgstr "自分の投票:" #: ../root/edit/details/EditRelationshipAttribute.js:76 #: ../root/edit/details/EditRelease.js:75 #: ../root/edit/details/EditReleaseGroup.js:57 -#: ../root/edit/details/EditSeries.js:54 ../root/edit/details/EditWork.js:66 +#: ../root/edit/details/EditSeries.js:54 ../root/edit/details/EditWork.js:68 #: ../root/edit/details/RemoveRelationshipAttribute.js:41 #: ../root/edit/details/RemoveRelationshipType.js:60 #: ../root/edit/details/historic/AddRelease.js:63 @@ -2842,7 +2783,7 @@ msgid "No releases have cover art marked as \"Front\", cannot set cover art." msgstr "" #: ../root/release/edit/tracklist.tt:140 ../root/admin/IpLookup.js:35 -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:457 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:458 #: ../root/static/scripts/common/components/Autocomplete2/constants.js:90 msgid "No results" msgstr "結果がありません" @@ -2887,19 +2828,11 @@ msgstr "" #: ../root/components/common-macros.tt:602 #: ../lib/MusicBrainz/Server/Controller/Edit.pm:240 -#: ../root/static/scripts/common/constants.js:277 -#: ../root/static/scripts/common/constants.js:278 +#: ../root/static/scripts/common/constants.js:279 +#: ../root/static/scripts/common/constants.js:280 msgid "Normal" msgstr "中" -#: ../root/edit/details/merge_releases.tt:158 -#: ../root/edit/details/EditRelease.js:182 -#: ../root/edit/details/SetTrackLengths.js:89 -#: ../root/edit/details/historic/MergeReleases.js:69 -#: ../root/user/ReportUser.js:116 -msgid "Note" -msgstr "ノート" - #: ../root/release/edit/information.tt:279 msgid "" "Note! If you do not know the month or day of release, please leave them " @@ -3221,13 +3154,13 @@ msgstr "" msgid "Recent Notes Left on Your Edits" msgstr "" -#: ../root/components/common-macros.tt:569 -#: ../root/edit/details/merge_releases.tt:108 -#: ../root/edit/search_macros.tt:417 ../root/release/edit_relationships.tt:53 +#: ../root/components/common-macros.tt:569 ../root/edit/search_macros.tt:417 +#: ../root/release/edit_relationships.tt:53 #: ../lib/MusicBrainz/Server/Edit/Recording.pm:7 #: ../lib/MusicBrainz/Server/Form/Search/Search.pm:38 #: ../root/edit/details/AddStandaloneRecording.js:46 #: ../root/edit/details/EditRecording.js:51 +#: ../root/edit/details/MergeReleases.js:322 #: ../root/edit/details/RemoveIsrc.js:40 #: ../root/edit/details/historic/EditTrack.js:37 #: ../root/layout/components/Search.js:30 @@ -3245,10 +3178,6 @@ msgstr "レコーディング" msgid "Recording Details" msgstr "レコーディング詳細" -#: ../root/edit/details/merge_releases.tt:104 -msgid "Recording Merges" -msgstr "レコーディングをマージ" - #: ../root/user/ratings.tt:2 ../root/user/ratings_summary.tt:3 msgid "Recording ratings" msgstr "レコーディングの評価" @@ -3308,7 +3237,7 @@ msgstr "関係編集者" #: ../root/edit/search_macros.tt:417 #: ../root/edit/details/AddRelationshipType.js:78 #: ../root/relationship/linktype/RelationshipTypeIndex.js:41 -#: ../root/utility/tableColumns.js:804 +#: ../root/utility/tableColumns.js:806 msgid "Relationship Type" msgstr "関係タイプ" @@ -3335,8 +3264,7 @@ msgstr "<span class=\"rel-edit\">黄色</span>で強調された関係が編集 #: ../root/cdtoc/attach_artist_releases.tt:15 #: ../root/cdtoc/attach_filter_release.tt:28 ../root/cdtoc/lookup.tt:39 -#: ../root/components/common-macros.tt:569 -#: ../root/edit/details/merge_releases.tt:19 ../root/edit/search_macros.tt:417 +#: ../root/components/common-macros.tt:569 ../root/edit/search_macros.tt:417 #: ../root/release/edit/duplicates.tt:10 ../root/release/merge.tt:12 #: ../lib/MusicBrainz/Server/Edit/Release.pm:8 #: ../lib/MusicBrainz/Server/Form/Search/Search.pm:37 @@ -3347,6 +3275,7 @@ msgstr "<span class=\"rel-edit\">黄色</span>で強調された関係が編集 #: ../root/edit/details/EditBarcodes.js:51 #: ../root/edit/details/EditCoverArt.js:51 #: ../root/edit/details/EditReleaseLabel.js:60 +#: ../root/edit/details/MergeReleases.js:252 #: ../root/edit/details/RemoveCoverArt.js:35 #: ../root/edit/details/ReorderCoverArt.js:45 #: ../root/edit/details/ReorderMediums.js:39 @@ -3583,7 +3512,7 @@ msgstr "属性を削除" #: ../root/components/common-macros.tt:878 #: ../root/components/common-macros.tt:886 #: ../root/components/RemoveFromMergeTableCell.js:39 -#: ../root/utility/tableColumns.js:781 ../root/utility/tableColumns.js:791 +#: ../root/utility/tableColumns.js:783 ../root/utility/tableColumns.js:793 msgid "Remove from merge" msgstr "" @@ -3981,7 +3910,7 @@ msgstr "トラック名とアーティスト名を交換" #: ../root/search/components/RecordingResults.js:134 #: ../root/search/components/ReleaseResults.js:112 #: ../root/static/scripts/common/components/TaggerIcon.js:40 -#: ../root/utility/tableColumns.js:834 +#: ../root/utility/tableColumns.js:836 msgid "Tagger" msgstr "タグ者" @@ -4007,12 +3936,6 @@ msgstr "注釈は小さなwikiみたい。" msgid "The catalog number you have entered looks like an Amazon ASIN." msgstr "入力したカタログ番号はAmazonのASINに見えます。" -#: ../root/edit/details/merge_releases.tt:159 -msgid "" -"The data in this edit originally came from an older version of this edit, " -"and may not display correctly" -msgstr "" - #: ../root/layout.tt:90 ../root/layout/index.js:275 msgid "" "The data you have submitted does not make any changes to the data already " @@ -4196,12 +4119,6 @@ msgstr "" msgid "This disc has a hidden pregap track before track 1" msgstr "このディスクにはトラック1の前に隠されたプリギャップトラックがあります。" -#: ../root/edit/details/merge_releases.tt:133 -msgid "" -"This edit does not store recording merge information and is closed, so no " -"recording merge information can be shown." -msgstr "" - #: ../root/cdtoc/set_durations.tt:31 msgid "This edit would only make subsecond changes to track lengths." msgstr "" @@ -4333,8 +4250,8 @@ msgid "This recording cannot be removed because it is still used on releases." msgstr "このレコーディングはリリースで使用されているため削除できません。" #: ../root/components/common-macros.tt:302 -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:696 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:286 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:697 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:287 #: ../root/static/scripts/common/components/EntityLink.js:289 msgid "This recording is a video" msgstr "このレコーディングはビデオです" @@ -4366,10 +4283,6 @@ msgid "" " relationships." msgstr "このリリースグループは、リリースや関係がなくなると自動的に削除されます。" -#: ../root/edit/details/merge_releases.tt:35 -msgid "This release has no media to merge." -msgstr "" - #: ../root/release/discids.tt:58 msgid "This release has no mediums that can have disc IDs." msgstr "" @@ -4505,14 +4418,10 @@ msgid "Total tracks:" msgstr "トラック合計:" #: ../root/cdtoc/info.tt:31 ../root/search/components/RecordingResults.js:135 -#: ../root/taglookup/Form.js:41 ../root/utility/tableColumns.js:846 +#: ../root/taglookup/Form.js:41 ../root/utility/tableColumns.js:848 msgid "Track" msgstr "トラック" -#: ../root/edit/details/merge_releases.tt:107 -msgid "Track #" -msgstr "トラック #" - #: ../root/release/edit/tracklist.tt:483 #: ../root/static/scripts/release-editor/dialogs.js:40 msgid "Track Parser" @@ -4547,11 +4456,11 @@ msgstr "トラック {n}:" msgid "Tracklist" msgstr "トラックリスト" -#: ../root/edit/details/merge_releases.tt:22 ../root/release/discids.tt:9 -#: ../root/release/edit/duplicates.tt:12 ../root/release/merge.tt:15 -#: ../root/artist_credit/ArtistCreditIndex.js:128 +#: ../root/release/discids.tt:9 ../root/release/edit/duplicates.tt:12 +#: ../root/release/merge.tt:15 ../root/artist_credit/ArtistCreditIndex.js:128 #: ../root/artist_credit/ArtistCreditLayout.js:31 #: ../root/components/list/ReleaseList.js:103 +#: ../root/edit/details/MergeReleases.js:255 #: ../root/edit/details/historic/AddRelease.js:113 #: ../root/release_group/ReleaseGroupIndex.js:158 #: ../root/search/components/CDStubResults.js:49 @@ -4595,7 +4504,7 @@ msgstr "Twitter" #: ../root/edit/details/AddLabel.js:107 ../root/edit/details/AddPlace.js:65 #: ../root/edit/details/AddReleaseGroup.js:80 #: ../root/edit/details/AddRemoveAlias.js:101 -#: ../root/edit/details/AddSeries.js:57 ../root/edit/details/AddWork.js:69 +#: ../root/edit/details/AddSeries.js:57 ../root/edit/details/AddWork.js:71 #: ../root/edit/details/EditAlias.js:123 ../root/edit/details/EditArea.js:91 #: ../root/edit/details/EditArtist.js:107 ../root/edit/details/EditEvent.js:78 #: ../root/edit/details/EditInstrument.js:71 @@ -4626,12 +4535,12 @@ msgstr "Twitter" #: ../root/static/scripts/account/components/ApplicationForm.js:87 #: ../root/static/scripts/alias/AliasEditForm.js:329 #: ../root/static/scripts/collection/components/CollectionEditForm.js:83 -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:874 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:447 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:875 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:448 #: ../root/static/scripts/common/components/FilterForm.js:63 -#: ../root/static/scripts/edit/externalLinks.js:904 -#: ../root/static/scripts/edit/externalLinks.js:1157 -#: ../root/utility/tableColumns.js:613 ../root/utility/tableColumns.js:618 +#: ../root/static/scripts/edit/externalLinks.js:941 +#: ../root/static/scripts/edit/externalLinks.js:1181 +#: ../root/utility/tableColumns.js:615 ../root/utility/tableColumns.js:620 msgid "Type" msgstr "タイプ" @@ -4942,8 +4851,8 @@ msgstr "Wikiトランスクルーダー" #: ../root/components/common-macros.tt:569 ../root/edit/search_macros.tt:417 #: ../lib/MusicBrainz/Server/Edit/Work.pm:9 #: ../lib/MusicBrainz/Server/Form/Search/Search.pm:39 -#: ../root/components/list/WorkList.js:60 ../root/edit/details/AddWork.js:46 -#: ../root/edit/details/EditWork.js:59 ../root/edit/details/RemoveIswc.js:40 +#: ../root/components/list/WorkList.js:60 ../root/edit/details/AddWork.js:48 +#: ../root/edit/details/EditWork.js:61 ../root/edit/details/RemoveIswc.js:40 #: ../root/layout/components/Search.js:34 #: ../root/report/IswcsWithManyWorks.js:49 #: ../root/report/components/WorkList.js:46 @@ -5208,22 +5117,13 @@ msgid "" " please make sure the artists have been entered correctly." msgstr "" -#: ../root/edit/details/merge_releases.tt:5 -#: ../root/components/list/ReleaseList.js:90 -#: ../root/release_group/ReleaseGroupIndex.js:89 -#: ../root/search/components/ReleaseResults.js:50 -#: ../root/static/scripts/release-editor/duplicates.js:143 -msgid "[missing media]" -msgstr "[missing media]" - #: ../root/components/common-macros.tt:259 #: ../lib/MusicBrainz/Server/Edit/Relationship/RemoveLinkType.pm:86 #: ../lib/MusicBrainz/Server/Edit/Release/Create.pm:113 -#: ../lib/MusicBrainz/Server/Edit/Work/Create.pm:87 -#: ../lib/MusicBrainz/Server/Edit/Work/Edit.pm:186 #: ../root/edit/details/EditAlias.js:94 #: ../root/edit/details/SetTrackLengths.js:73 #: ../root/static/scripts/common/components/EntityLink.js:41 +#: ../root/static/scripts/common/i18n/localizeLanguageName.js:15 msgid "[removed]" msgstr "[削除済]" @@ -5369,6 +5269,10 @@ msgstr "" msgid "historical, {begin}-{end}" msgstr "" +#: ../root/edit/search_macros.tt:25 +msgid "in an unspecified order (possibly faster)" +msgstr "" + #: ../root/edit/details/macros.tt:28 #: ../root/utility/relationshipDateText.js:25 msgid "in {date}" @@ -5523,10 +5427,6 @@ msgid "plus {n} other private collection" msgid_plural "plus {n} other private collections" msgstr[0] "その他{n}件の非公開コレクション" -#: ../root/edit/search_macros.tt:25 -msgid "randomly" -msgstr "ランダム" - #: ../root/edit/search_macros.tt:25 msgid "recently closed first" msgstr "最近終了した順" @@ -5732,7 +5632,7 @@ msgstr "« 前" #: ../root/components/paginator.tt:19 ../root/components/paginator.tt:31 #: ../root/components/paginator.tt:39 ../root/components/Paginator.js:94 #: ../root/components/Paginator.js:119 ../root/components/Paginator.js:133 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:125 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:126 msgid "…" msgstr "…" @@ -6129,14 +6029,6 @@ msgstr "このディスク ID に対する MusicBrainz リリースが、既に msgid "There is already a CD stub with this disc ID" msgstr "このディスク ID に対する CD スタブが、既にあります" -#: ../lib/MusicBrainz/Server/Data/Language.pm:63 -#: ../lib/MusicBrainz/Server/Edit/Work/Create.pm:75 -#: ../lib/MusicBrainz/Server/Edit/Work/Create.pm:85 -#: ../lib/MusicBrainz/Server/Edit/Work/Edit.pm:184 -#: ../lib/MusicBrainz/Server/Form/Utils.pm:48 -msgid "[No lyrics]" -msgstr "[歌詞なし]" - #: ../lib/MusicBrainz/Server/Data/LinkType.pm:197 #, perl-brace-format msgid "{t0}-{t1} relationships" @@ -6378,7 +6270,7 @@ msgstr "リリースをシングルアーティストへ変換(歴史的)" #: ../lib/MusicBrainz/Server/Edit/Historic/MergeRelease.pm:13 #: ../lib/MusicBrainz/Server/Edit/Historic/MergeReleaseMAC.pm:9 -#: ../lib/MusicBrainz/Server/Edit/Release/Merge.pm:140 +#: ../lib/MusicBrainz/Server/Edit/Release/Merge.pm:141 msgid "Merge releases" msgstr "リリースをマージ" @@ -6662,7 +6554,7 @@ msgctxt "medium format" msgid "(unknown)" msgstr "(不明)" -#: ../lib/MusicBrainz/Server/Edit/Release/Merge.pm:347 +#: ../lib/MusicBrainz/Server/Edit/Release/Merge.pm:339 #, perl-brace-format msgid "These releases could not be merged: {reason}" msgstr "" @@ -7296,6 +7188,16 @@ msgstr "完全な日付か部分的な日付が必要です。例: 2006-05-25, 1 msgid "Please pick the entity you want the others merged into." msgstr "" +#: ../lib/MusicBrainz/Server/Form/Merge/Release.pm:50 +#: ../root/edit/details/MergeReleases.js:65 +msgid "Append mediums to target release" +msgstr "ターゲットリリースにメディアを追加" + +#: ../lib/MusicBrainz/Server/Form/Merge/Release.pm:51 +#: ../root/edit/details/MergeReleases.js:66 +msgid "Merge mediums and recordings" +msgstr "メディアやレコーディングをマージ" + #: ../lib/MusicBrainz/Server/Form/Merge/Release.pm:62 msgid "Another medium is already in this position" msgstr "この位置に既に他のメディアがあります。" @@ -7343,22 +7245,22 @@ msgid "A fluency level is required." msgstr "" #: ../lib/MusicBrainz/Server/Form/Role/UserProfile.pm:70 -#: ../root/static/scripts/common/constants.js:287 +#: ../root/static/scripts/common/constants.js:289 msgid "Basic" msgstr "基礎的" #: ../lib/MusicBrainz/Server/Form/Role/UserProfile.pm:71 -#: ../root/static/scripts/common/constants.js:288 +#: ../root/static/scripts/common/constants.js:290 msgid "Intermediate" msgstr "中級" #: ../lib/MusicBrainz/Server/Form/Role/UserProfile.pm:72 -#: ../root/static/scripts/common/constants.js:286 +#: ../root/static/scripts/common/constants.js:288 msgid "Advanced" msgstr "上級" #: ../lib/MusicBrainz/Server/Form/Role/UserProfile.pm:73 -#: ../root/static/scripts/common/constants.js:289 +#: ../root/static/scripts/common/constants.js:291 msgid "Native" msgstr "母語" @@ -7500,6 +7402,11 @@ msgstr "2週間" msgid "A month" msgstr "1ヶ月" +#: ../lib/MusicBrainz/Server/Form/Utils.pm:48 +#: ../root/static/scripts/common/i18n/localizeLanguageName.js:19 +msgid "[No lyrics]" +msgstr "[歌詞なし]" + #: ../lib/MusicBrainz/Server/Form/Utils.pm:84 msgctxt "script optgroup" msgid "Frequently used" @@ -7839,7 +7746,7 @@ msgstr "アクセス" #: ../root/components/Aliases/AliasTable.js:31 #: ../root/components/Aliases/ArtistCreditList.js:54 #: ../root/static/scripts/common/components/FingerprintTable.js:53 -#: ../root/utility/tableColumns.js:78 +#: ../root/utility/tableColumns.js:80 msgid "Actions" msgstr "アクション" @@ -7972,7 +7879,7 @@ msgstr "フリーテキスト" #: ../root/edit/details/AddRelationshipType.js:191 #: ../root/edit/details/RemoveRelationshipType.js:136 #: ../root/relationship/linktype/RelationshipTypeIndex.js:165 -#: ../root/utility/tableColumns.js:626 +#: ../root/utility/tableColumns.js:628 msgid "Attributes" msgstr "属性" @@ -7993,12 +7900,12 @@ msgstr "属性を削除できません" #: ../root/admin/attributes/Language.js:33 #: ../root/admin/attributes/Language.js:36 -#: ../root/edit/details/AddRelease.js:108 ../root/edit/details/AddWork.js:75 +#: ../root/edit/details/AddRelease.js:108 ../root/edit/details/AddWork.js:77 #: ../root/edit/details/EditRelease.js:131 #: ../root/edit/details/historic/AddRelease.js:104 ../root/iswc/Index.js:59 #: ../root/report/IswcsWithManyWorks.js:53 #: ../root/search/components/ReleaseResults.js:107 -#: ../root/utility/tableColumns.js:524 +#: ../root/utility/tableColumns.js:526 msgid "Language" msgstr "言語" @@ -8905,6 +8812,19 @@ msgstr "" msgid "The provided relationship type ID is not valid." msgstr "" +#: ../root/components/ReleaseLanguageScript.js:24 +#: ../root/components/ReleaseLanguageScript.js:30 +#: ../root/components/list/ReleaseList.js:100 +#: ../root/edit/details/MergeReleases.js:88 ../root/release/CoverArt.js:92 +#: ../root/release_group/ReleaseGroupIndex.js:90 +#: ../root/search/components/ReleaseResults.js:55 +#: ../root/static/scripts/common/components/ReleaseEvents.js:55 +#: ../root/static/scripts/common/components/ReleaseEvents.js:72 +#: ../root/static/scripts/release-editor/duplicates.js:145 +msgctxt "missing data" +msgid "-" +msgstr "-" + #: ../root/components/StaticRelationshipsDisplay.js:25 msgid "{start_track}–{end_track}" msgstr "" @@ -9074,6 +8994,14 @@ msgstr "住所" msgid "Unspecified type" msgstr "タイプ未定" +#: ../root/components/list/ReleaseList.js:90 +#: ../root/edit/details/MergeReleases.js:83 +#: ../root/release_group/ReleaseGroupIndex.js:89 +#: ../root/search/components/ReleaseResults.js:50 +#: ../root/static/scripts/release-editor/duplicates.js:143 +msgid "[missing media]" +msgstr "[missing media]" + #: ../root/components/list/ReleaseList.js:153 #: ../root/search/components/ReleaseResults.js:109 msgid "Status" @@ -9083,8 +9011,8 @@ msgstr "ステータス" #: ../root/report/IswcsWithManyWorks.js:50 #: ../root/report/components/WorkList.js:51 #: ../root/search/components/WorkResults.js:51 -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:894 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:454 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:895 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:455 msgid "Writers" msgstr "作者" @@ -9202,22 +9130,22 @@ msgid "" msgstr "{edit}には反対投票があるため、承認するには編集ノートが必要です。" #: ../root/edit/components/EditHeader.js:46 -#: ../root/edit/components/EditorTypeInfo.js:28 +#: ../root/edit/components/EditorTypeInfo.js:29 msgid "This user is new to MusicBrainz." msgstr "MusicBrainzの初心者です。" #: ../root/edit/components/EditHeader.js:48 -#: ../root/edit/components/EditorTypeInfo.js:30 +#: ../root/edit/components/EditorTypeInfo.js:31 msgid "beginner" msgstr "初心者" #: ../root/edit/components/EditHeader.js:55 -#: ../root/edit/components/EditorTypeInfo.js:38 +#: ../root/edit/components/EditorTypeInfo.js:39 msgid "This user is automated." msgstr "このユーザーはボットです。" #: ../root/edit/components/EditHeader.js:56 -#: ../root/edit/components/EditorTypeInfo.js:39 +#: ../root/edit/components/EditorTypeInfo.js:40 msgid "bot" msgstr "ボット" @@ -9522,7 +9450,7 @@ msgstr "ロケールの主な別名" #: ../root/edit/details/AddSeries.js:65 ../root/edit/details/EditSeries.js:79 #: ../root/layout/components/sidebar/SeriesSidebar.js:52 -#: ../root/utility/tableColumns.js:819 +#: ../root/utility/tableColumns.js:821 msgid "Ordering Type" msgstr "並べ替えタイプ" @@ -9608,6 +9536,14 @@ msgstr "前のアーティスト" msgid "New Artist" msgstr "新しいアーティスト" +#: ../root/edit/details/EditRelease.js:182 +#: ../root/edit/details/MergeReleases.js:364 +#: ../root/edit/details/SetTrackLengths.js:89 +#: ../root/edit/details/historic/MergeReleases.js:69 +#: ../root/user/ReportUser.js:116 +msgid "Note" +msgstr "ノート" + #: ../root/edit/details/EditRelease.js:183 msgid "This edit also changed the track artists." msgstr "" @@ -9638,7 +9574,7 @@ msgstr "この編集はマージされました。" msgid "Search for the target URL." msgstr "" -#: ../root/edit/details/EditWork.js:87 +#: ../root/edit/details/EditWork.js:89 msgid "Work type" msgstr "作品タイプ" @@ -9655,10 +9591,71 @@ msgstr "作品タイプ" msgid "Merge:" msgstr "マージ:" +#: ../root/edit/details/MergeAreas.js:35 +#: ../root/edit/details/MergeArtists.js:37 +#: ../root/edit/details/MergeEvents.js:40 +#: ../root/edit/details/MergeInstruments.js:35 +#: ../root/edit/details/MergeLabels.js:35 +#: ../root/edit/details/MergePlaces.js:35 +#: ../root/edit/details/MergeRecordings.js:40 +#: ../root/edit/details/MergeReleaseGroups.js:35 +#: ../root/edit/details/MergeReleases.js:288 +#: ../root/edit/details/MergeReleases.js:295 +#: ../root/edit/details/MergeReleases.js:305 +#: ../root/edit/details/MergeReleases.js:323 +#: ../root/edit/details/MergeSeries.js:35 +#: ../root/edit/details/MergeWorks.js:35 +msgid "Into:" +msgstr "" + #: ../root/edit/details/MergeArtists.js:43 msgid "Rename artist and relationship credits" msgstr "アーティストと関係のクレジット名を変更してください" +#: ../root/edit/details/MergeReleases.js:131 +msgid "Medium {position}: {name} is now medium {new_position}: {new_name}" +msgstr "" + +#: ../root/edit/details/MergeReleases.js:142 +msgid "Medium {position}: {name} is now medium {new_position}" +msgstr "" + +#: ../root/edit/details/MergeReleases.js:151 +msgid "Medium {position} is now medium {new_position}: {new_name}" +msgstr "" + +#: ../root/edit/details/MergeReleases.js:162 +msgid "Medium {position} is now medium {new_position}" +msgstr "" + +#: ../root/edit/details/MergeReleases.js:271 +msgid "This release has no media to merge." +msgstr "" + +#: ../root/edit/details/MergeReleases.js:318 +msgid "Recording Merges" +msgstr "レコーディングをマージ" + +#: ../root/edit/details/MergeReleases.js:321 +msgid "Track #" +msgstr "トラック #" + +#: ../root/edit/details/MergeReleases.js:333 +msgid "" +"This edit does not store recording merge information and is closed, so no " +"recording merge information can be shown." +msgstr "" + +#: ../root/edit/details/MergeReleases.js:350 +msgid "All recordings for these releases are already merged." +msgstr "このリリースの全レコーディングはマージ済みです。" + +#: ../root/edit/details/MergeReleases.js:366 +msgid "" +"The data in this edit originally came from an older version of this edit, " +"and may not display correctly" +msgstr "" + #: ../root/edit/details/MoveDiscId.js:46 #: ../root/edit/details/historic/MoveDiscId.js:41 msgid "From:" @@ -10722,7 +10719,7 @@ msgstr "ドキュメントの目次" #: ../root/relationship/RelationshipsHeader.js:19 #: ../root/relationship/linktype/RelationshipTypeIndex.js:61 #: ../root/relationship/linktype/RelationshipTypesList.js:62 -#: ../root/utility/tableColumns.js:343 +#: ../root/utility/tableColumns.js:345 msgid "Relationship Types" msgstr "関係タイプ" @@ -11137,7 +11134,7 @@ msgstr "ライセンス" #: ../root/layout/components/sidebar/SidebarRating.js:25 #: ../root/static/scripts/release/components/MediumTable.js:223 -#: ../root/utility/tableColumns.js:437 +#: ../root/utility/tableColumns.js:439 msgid "Rating" msgstr "評価" @@ -11958,7 +11955,7 @@ msgid "" msgstr "本当に{artist}の{release}から以下のカバーアートを削除しますか?" #: ../root/release_group/ReleaseGroupHeader.js:30 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:404 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:405 msgid "Release group by {artist}" msgstr "{artist}のリリースグループ" @@ -13248,9 +13245,9 @@ msgstr "" #: ../root/report/ReportsIndex.js:574 #: ../root/search/components/RecordingResults.js:132 -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:728 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:311 -#: ../root/utility/tableColumns.js:655 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:729 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:312 +#: ../root/utility/tableColumns.js:657 msgid "ISRCs" msgstr "ISRC" @@ -13498,7 +13495,7 @@ msgstr "他の探索" #: ../root/search/components/ArtistResults.js:55 #: ../root/search/components/LabelResults.js:68 #: ../root/search/components/PlaceResults.js:65 -#: ../root/utility/tableColumns.js:150 ../root/utility/tableColumns.js:155 +#: ../root/utility/tableColumns.js:152 ../root/utility/tableColumns.js:157 msgid "Begin" msgstr "開始" @@ -13516,9 +13513,9 @@ msgid "Documentation Search" msgstr "ドキュメントの検索" #: ../root/search/components/EventResults.js:71 -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:1044 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:183 -#: ../root/utility/tableColumns.js:358 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:1045 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:184 +#: ../root/utility/tableColumns.js:360 msgid "Location" msgstr "地域" @@ -13827,7 +13824,7 @@ msgid "Show more artist credits" msgstr "アーティスト・クレジットをさらに表示" #: ../root/static/scripts/artist/components/ArtistCreditRenamer.js:254 -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:464 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:465 #: ../root/static/scripts/common/components/Autocomplete2/constants.js:103 #: ../root/static/scripts/common/components/Collapsible.js:76 msgid "Show more..." @@ -13857,56 +13854,56 @@ msgstr "コレクションを作成" msgid "Update collection" msgstr "コレクションを更新" -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:82 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:83 #: ../root/static/scripts/common/components/Autocomplete2/constants.js:96 msgid "An error occurred while searching. Click here to try again." msgstr "" -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:87 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:88 msgid "Try with direct search instead." msgstr "" -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:88 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:89 msgid "Try with indexed search instead." msgstr "" -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:120 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:121 #: ../root/static/scripts/common/components/Autocomplete2.js:648 msgid "Type to search, or paste an MBID" msgstr "検索するか、MBIDを貼り付け" -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:202 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:203 #: ../root/static/scripts/common/components/Autocomplete2/constants.js:51 msgid "Clear recent items" msgstr "最近のアイテムを削除" -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:471 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:472 #: ../root/static/scripts/common/components/Autocomplete2/constants.js:110 msgid "Not found? Try again with direct search." msgstr "見つかりませんか? 直接検索を試す" -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:472 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:473 #: ../root/static/scripts/common/components/Autocomplete2/constants.js:117 msgid "Slow? Switch back to indexed search." msgstr "遅いですか? インデックス検索に戻す" -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:715 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:303 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:716 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:304 msgid "appears on" msgstr "" -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:721 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:307 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:722 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:308 msgid "standalone recording" msgstr " スタンドアロンレコーディング" -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:815 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:399 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:816 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:400 msgid "{release_group_type} by {artist}" msgstr "{artist}の{release_group_type}" -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:1043 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:180 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:1044 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:181 msgid "Performers" msgstr "" @@ -14020,11 +14017,11 @@ msgstr "シリーズを検索" msgid "Search for a work" msgstr "作品を検索" -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:298 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:299 msgid "by {artist}" msgstr "" -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:362 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:363 msgid "{first_list_item} … {last_list_item}" msgstr "{first_list_item} … {last_list_item}" @@ -14363,181 +14360,191 @@ msgstr "結成:" msgid "Dissolved in:" msgstr "解散:" -#: ../root/static/scripts/edit/URLCleanup.js:360 +#: ../root/static/scripts/edit/URLCleanup.js:361 msgid "" "Please link to a channel, not a specific video. Videos should be linked to " "the appropriate recordings or releases instead." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:366 +#: ../root/static/scripts/edit/URLCleanup.js:367 msgid "" "Please link to a specific video. Add channel pages to the relevant artist, " "label, etc. instead." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:533 +#: ../root/static/scripts/edit/URLCleanup.js:534 msgid "" "Allmusic “{album_url_pattern}” links should be added to release groups. To " "find the appropriate release link for this release, please check the " "Releases tab from {album_url|your link}." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:753 +#: ../root/static/scripts/edit/URLCleanup.js:754 msgid "" "Only Apple Books “{artist_url_pattern}” pages can be added directly to " "artists. Please link audiobooks to the appropriate release instead." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:769 +#: ../root/static/scripts/edit/URLCleanup.js:770 msgid "" "Only Apple Books audiobooks can be added to MusicBrainz. Consider adding " "books to {bookbrainz_url|BookBrainz} instead." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:856 +#: ../root/static/scripts/edit/URLCleanup.js:857 msgid "" "Please link to the main page for the artist, not to a specific album or " "track." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:868 +#: ../root/static/scripts/edit/URLCleanup.js:869 msgid "" "Please link to the main page for the label, not to a specific album or " "track." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:1052 +#: ../root/static/scripts/edit/URLCleanup.js:1053 msgid "Please link to the main page for the artist, not a specific product." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:1054 +#: ../root/static/scripts/edit/URLCleanup.js:1055 msgid "Please link to the main page for the label, not a specific product." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:1597 +#: ../root/static/scripts/edit/URLCleanup.js:1600 msgid "" "Discogs “{master_url_pattern}” links group several releases, so this should " "be added to the release group instead." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:2086 +#: ../root/static/scripts/edit/URLCleanup.js:2090 msgid "" "Only IMSLP “{category_url_pattern}” links are allowed for artists. Please " "link work pages to the specific work in question." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:2104 +#: ../root/static/scripts/edit/URLCleanup.js:2108 msgid "" "IMSLP “{category_url_pattern}” links are only allowed for artists. Please " "link the specific work page to this work instead, if available." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:2149 +#: ../root/static/scripts/edit/URLCleanup.js:2153 msgid "" "Instagram “{explore_url_pattern}” links are not allowed. Please link to a " "profile instead, if there is one." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:2177 +#: ../root/static/scripts/edit/URLCleanup.js:2181 msgid "" "Please do not link directly to images, link to the appropriate Instagram " "profile page instead. If you want to link to a video, {url|add a standalone " "recording} for it instead." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:2202 +#: ../root/static/scripts/edit/URLCleanup.js:2206 msgid "This is an internal Instagram page and should not be added." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:2278 +#: ../root/static/scripts/edit/URLCleanup.js:2282 msgid "" "Only iTunes “{artist_url_pattern}” pages can be added directly to artists. " "Please link albums, videos, etc. to the appropriate release or recording " "instead." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:2890 +#: ../root/static/scripts/edit/URLCleanup.js:2895 msgid "" "Musixmatch “{album_url_pattern}” pages are a bad match for MusicBrainz " "release groups, and linking to them is currently disallowed. Please consider" " adding Musixmatch links to the relevant artists and works instead." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:2993 +#: ../root/static/scripts/edit/URLCleanup.js:2998 msgid "" "This is a redirect link. Please follow {redirect_url|your link} and add the " "link it redirects to instead." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:3504 +#: ../root/static/scripts/edit/URLCleanup.js:3464 +msgid "Only RYM music videos can be linked to recordings." +msgstr "" + +#: ../root/static/scripts/edit/URLCleanup.js:3516 msgid "" "This is a link to the old Resident Advisor domain. Please follow " "{ra_url|your link}, make sure the link it redirects to is still the correct " "one and, if so, add that link instead." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4092 +#: ../root/static/scripts/edit/URLCleanup.js:4143 msgid "This is not a profile, but a Twitter documentation page." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4106 +#: ../root/static/scripts/edit/URLCleanup.js:4157 msgid "Please link to Twitter profiles, not tweets." msgstr "ツイートではなくTwitterプロフィールにリンクしてください。" -#: ../root/static/scripts/edit/URLCleanup.js:4124 +#: ../root/static/scripts/edit/URLCleanup.js:4175 msgid "This site does not allow direct links to their images." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4331 +#: ../root/static/scripts/edit/URLCleanup.js:4372 +msgid "" +"Please link to the “{allowed_url_pattern}” page rather than this " +"“{current_url_pattern}” link." +msgstr "" + +#: ../root/static/scripts/edit/URLCleanup.js:4428 msgid "" "There is an unencoded “?” or “#” character in this URL. Please check whether" " it is useless and should be removed, or whether it is an error and the URL " "is misencoded." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4351 +#: ../root/static/scripts/edit/URLCleanup.js:4448 msgid "" "Please do not link directly to WhoSampled “{unwanted_url_pattern}” pages. " "Link to the appropriate WhoSampled artist, track or album page instead." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4372 +#: ../root/static/scripts/edit/URLCleanup.js:4469 msgid "Please link WhoSampled “{album_url_pattern}” pages to release groups." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4390 +#: ../root/static/scripts/edit/URLCleanup.js:4487 msgid "Please link WhoSampled artist pages to artists." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4402 +#: ../root/static/scripts/edit/URLCleanup.js:4499 msgid "Please link WhoSampled track pages to recordings." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4469 +#: ../root/static/scripts/edit/URLCleanup.js:4566 msgid "" "Links to specific sections of Wikipedia articles are not allowed. Please " "remove “{fragment}” if still appropriate. See the {url|guidelines}." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4570 +#: ../root/static/scripts/edit/URLCleanup.js:4669 msgid "Only video and playlist links are allowed on releases." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4606 +#: ../root/static/scripts/edit/URLCleanup.js:4705 msgid "" "Wikipedia normally has no entries for specific releases, so adding Wikipedia" " links to a release is currently blocked. Please add this Wikipedia link to " "the release group instead, if appropriate." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4618 +#: ../root/static/scripts/edit/URLCleanup.js:4717 msgid "" "Wikidata normally has no entries for specific releases, so adding Wikidata " "links to a release is currently blocked. Please add this Wikidata link to " "the release group instead, if appropriate." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4630 +#: ../root/static/scripts/edit/URLCleanup.js:4729 msgid "" "This is a Bandcamp profile, not a page for a specific release. Even if it " "shows this release right now, that can change when the artist releases " @@ -14546,7 +14553,7 @@ msgid "" "add this profile link to the appropriate artist or label." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4658 +#: ../root/static/scripts/edit/URLCleanup.js:4757 msgid "" "This is a Bandcamp profile, not a page for a specific recording. Even if it " "shows a single recording right now, that can change when the artist releases" @@ -14555,12 +14562,12 @@ msgid "" "the appropriate artist or label." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4821 +#: ../root/static/scripts/edit/URLCleanup.js:4920 msgid "Some relationship types are missing for this URL." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4838 -#: ../root/static/scripts/edit/externalLinks.js:743 +#: ../root/static/scripts/edit/URLCleanup.js:4937 +#: ../root/static/scripts/edit/externalLinks.js:767 msgid "This relationship type combination is invalid." msgstr "" @@ -14723,49 +14730,93 @@ msgstr "入力したURLの種類を選択してください。" msgid "This relationship already exists." msgstr "この関係は既に存在しています。" -#: ../root/static/scripts/edit/externalLinks.js:609 +#: ../root/static/scripts/edit/externalLinks.js:607 #: ../root/static/scripts/relationship-editor/common/dialog.js:565 msgid "" "This URL is not allowed for the selected link type, or is incorrectly " "formatted." msgstr "" -#: ../root/static/scripts/edit/externalLinks.js:615 +#: ../root/static/scripts/edit/externalLinks.js:612 msgid "This URL is not allowed for the selected link type." msgstr "" -#: ../root/static/scripts/edit/externalLinks.js:674 +#: ../root/static/scripts/edit/externalLinks.js:618 +msgid "This URL is not allowed for areas." +msgstr "" + +#: ../root/static/scripts/edit/externalLinks.js:620 +msgid "This URL is not allowed for artists." +msgstr "" + +#: ../root/static/scripts/edit/externalLinks.js:622 +msgid "This URL is not allowed for events." +msgstr "" + +#: ../root/static/scripts/edit/externalLinks.js:624 +msgid "This URL is not allowed for instruments." +msgstr "" + +#: ../root/static/scripts/edit/externalLinks.js:626 +msgid "This URL is not allowed for labels." +msgstr "" + +#: ../root/static/scripts/edit/externalLinks.js:628 +msgid "This URL is not allowed for places." +msgstr "" + +#: ../root/static/scripts/edit/externalLinks.js:630 +msgid "This URL is not allowed for recordings." +msgstr "" + +#: ../root/static/scripts/edit/externalLinks.js:632 +msgid "This URL is not allowed for releases." +msgstr "" + +#: ../root/static/scripts/edit/externalLinks.js:634 +msgid "This URL is not allowed for release groups." +msgstr "" + +#: ../root/static/scripts/edit/externalLinks.js:637 +msgid "This URL is not allowed for series." +msgstr "" + +#: ../root/static/scripts/edit/externalLinks.js:639 +msgid "This URL is not allowed for works." +msgstr "" + +#: ../root/static/scripts/edit/externalLinks.js:698 msgid "" "Note: This link already exists at position #{position}. To merge, press " "enter or select a type." msgstr "" -#: ../root/static/scripts/edit/externalLinks.js:861 +#: ../root/static/scripts/edit/externalLinks.js:885 #: ../root/static/scripts/relationship-editor/common/dialog.js:418 msgid "{description} ({url|more documentation})" msgstr "{description} ({url|ドキュメントを読む})" -#: ../root/static/scripts/edit/externalLinks.js:959 +#: ../root/static/scripts/edit/externalLinks.js:930 +msgid "Remove Relationship" +msgstr "関連を削除" + +#: ../root/static/scripts/edit/externalLinks.js:996 msgid "video" msgstr "ビデオ" -#: ../root/static/scripts/edit/externalLinks.js:990 -msgid "Remove Relationship" -msgstr "関連を削除" +#: ../root/static/scripts/edit/externalLinks.js:1091 +msgid "Remove Link" +msgstr "リンクの削除" -#: ../root/static/scripts/edit/externalLinks.js:1076 +#: ../root/static/scripts/edit/externalLinks.js:1120 msgid "Add link" msgstr "" -#: ../root/static/scripts/edit/externalLinks.js:1079 +#: ../root/static/scripts/edit/externalLinks.js:1123 msgid "Add another link" msgstr "別のリンクを追加" -#: ../root/static/scripts/edit/externalLinks.js:1131 -msgid "Remove Link" -msgstr "リンクの削除" - -#: ../root/static/scripts/edit/externalLinks.js:1180 +#: ../root/static/scripts/edit/externalLinks.js:1205 msgid "Add another relationship" msgstr "別の関係を追加" @@ -15957,11 +16008,11 @@ msgstr "" msgid "This edit was cancelled." msgstr "この編集はキャンセルされました。" -#: ../root/utility/tableColumns.js:741 +#: ../root/utility/tableColumns.js:743 msgid "AcoustIDs" msgstr "AcoustID" -#: ../root/utility/tableColumns.js:827 +#: ../root/utility/tableColumns.js:829 msgid "Subscribed" msgstr "購読" diff --git a/po/mb_server.nl.po b/po/mb_server.nl.po index d881d8cb05a..0503c8e0d58 100644 --- a/po/mb_server.nl.po +++ b/po/mb_server.nl.po @@ -30,8 +30,8 @@ msgid "" msgstr "" "Project-Id-Version: MusicBrainz\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-09-13 18:38-0500\n" -"PO-Revision-Date: 2021-09-19 12:33+0000\n" +"POT-Creation-Date: 2021-09-28 21:37+0300\n" +"PO-Revision-Date: 2021-10-02 09:18+0000\n" "Last-Translator: Maurits Meulenbelt <email address hidden>\n" "Language-Team: Dutch (http://www.transifex.com/musicbrainz/musicbrainz/language/nl/)\n" "MIME-Version: 1.0\n" @@ -83,7 +83,7 @@ msgstr "‘JJ’ zijn de laatste twee cijfers van het registratiejaar." #: ../root/edit/details/historic/AddRelease.js:118 #: ../root/recording/RecordingIndex.js:50 #: ../root/static/scripts/release/components/MediumTable.js:218 -#: ../root/utility/tableColumns.js:537 +#: ../root/utility/tableColumns.js:539 msgid "#" msgstr "#" @@ -139,26 +139,13 @@ msgstr "(was medium {position} van uitgave {release})" msgid "(was medium {position}: {name} on release {release})" msgstr "(was medium {position}: {name} van uitgave {release})" -#: ../root/edit/details/merge_releases.tt:6 -#: ../root/components/ReleaseLanguageScript.js:24 -#: ../root/components/ReleaseLanguageScript.js:30 -#: ../root/components/list/ReleaseList.js:100 ../root/release/CoverArt.js:92 -#: ../root/release_group/ReleaseGroupIndex.js:90 -#: ../root/search/components/ReleaseResults.js:55 -#: ../root/static/scripts/common/components/ReleaseEvents.js:55 -#: ../root/static/scripts/common/components/ReleaseEvents.js:72 -#: ../root/static/scripts/release-editor/duplicates.js:145 -msgctxt "missing data" -msgid "-" -msgstr "-" - #: ../root/cdtoc/attach_artist_releases.tt:16 #: ../root/cdtoc/attach_filter_release.tt:30 ../root/cdtoc/list.tt:10 -#: ../root/edit/details/merge_releases.tt:23 ../root/release/merge.tt:16 +#: ../root/release/merge.tt:16 ../root/edit/details/MergeReleases.js:256 #: ../root/recording/RecordingIndex.js:57 #: ../root/release_group/ReleaseGroupIndex.js:159 #: ../root/search/components/ReleaseResults.js:103 -#: ../root/utility/tableColumns.js:480 ../root/utility/tableColumns.js:488 +#: ../root/utility/tableColumns.js:482 ../root/utility/tableColumns.js:490 msgctxt "and" msgid "/" msgstr "/" @@ -435,10 +422,6 @@ msgstr "Administratieve markering" msgid "All of these relationships." msgstr "Al deze relaties." -#: ../root/edit/details/merge_releases.tt:141 -msgid "All recordings for these releases are already merged." -msgstr "Alle opnames van deze uitgave zijn al samengevoegd." - #: ../root/release/edit/recordings.tt:3 msgid "" "All tracks require an associated recording. Click “Edit” to select a " @@ -503,11 +486,6 @@ msgstr "Aantekening:" msgid "Annotations support a limited set of wiki formatting options:" msgstr "Aantekeningen ondersteunen een beperkt aantal wiki-opmaakopties:" -#: ../root/edit/details/merge_releases.tt:149 -#: ../lib/MusicBrainz/Server/Form/Merge/Release.pm:50 -msgid "Append mediums to target release" -msgstr "Media aan de doeluitgave toevoegen" - #: ../root/edit/search_macros.tt:417 msgid "Applied Edit Count of Editor" msgstr "Aantal doorgevoerde bewerkingen van de gebruiker" @@ -616,10 +594,9 @@ msgstr "Gebieden" #: ../root/cdtoc/attach_confirm.tt:13 #: ../root/cdtoc/attach_filter_release.tt:29 ../root/cdtoc/list.tt:8 #: ../root/cdtoc/lookup.tt:41 ../root/components/common-macros.tt:569 -#: ../root/edit/details/merge_releases.tt:20 ../root/edit/search_macros.tt:417 -#: ../root/release/edit/tracklist.tt:163 ../root/release/edit/tracklist.tt:412 -#: ../root/release/merge.tt:13 ../root/watch/list.tt:16 -#: ../lib/MusicBrainz/Server/Edit/Artist.pm:7 +#: ../root/edit/search_macros.tt:417 ../root/release/edit/tracklist.tt:163 +#: ../root/release/edit/tracklist.tt:412 ../root/release/merge.tt:13 +#: ../root/watch/list.tt:16 ../lib/MusicBrainz/Server/Edit/Artist.pm:7 #: ../lib/MusicBrainz/Server/Form/Search/Search.pm:35 #: ../root/artist/ArtistHeader.js:34 #: ../root/components/RelationshipsTable.js:320 @@ -637,6 +614,7 @@ msgstr "Gebieden" #: ../root/edit/details/EditRecording.js:86 #: ../root/edit/details/EditRelease.js:83 #: ../root/edit/details/EditReleaseGroup.js:101 +#: ../root/edit/details/MergeReleases.js:253 #: ../root/edit/details/historic/AddRelease.js:68 #: ../root/edit/details/historic/AddRelease.js:120 #: ../root/edit/details/historic/AddTrackKV.js:55 @@ -710,10 +688,10 @@ msgstr "Artiest:" #: ../root/report/components/EventList.js:66 #: ../root/search/components/EventResults.js:70 #: ../root/search/components/WorkResults.js:52 -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:895 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:455 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:896 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:456 #: ../root/static/scripts/common/utility/formatEntityTypeName.js:15 -#: ../root/tag/TagLayout.js:25 ../root/utility/tableColumns.js:854 +#: ../root/tag/TagLayout.js:25 ../root/utility/tableColumns.js:856 msgid "Artists" msgstr "Artiesten" @@ -770,14 +748,14 @@ msgstr "Mededelingsredateur" #: ../root/cdtoc/attach_artist_releases.tt:19 #: ../root/cdtoc/attach_filter_release.tt:33 ../root/cdtoc/list.tt:13 -#: ../root/cdtoc/lookup.tt:46 ../root/edit/details/merge_releases.tt:26 -#: ../root/release/edit/duplicates.tt:17 ../root/release/merge.tt:19 -#: ../root/components/list/ReleaseList.js:128 +#: ../root/cdtoc/lookup.tt:46 ../root/release/edit/duplicates.tt:17 +#: ../root/release/merge.tt:19 ../root/components/list/ReleaseList.js:128 #: ../root/edit/details/AddRelease.js:129 #: ../root/edit/details/EditBarcodes.js:58 #: ../root/edit/details/EditBarcodes.js:64 #: ../root/edit/details/EditRelease.js:167 #: ../root/edit/details/EditReleaseLabel.js:138 +#: ../root/edit/details/MergeReleases.js:259 #: ../root/edit/details/historic/AddRelease.js:155 #: ../root/edit/details/historic/EditReleaseEvents.js:138 #: ../root/otherlookup/OtherLookupForm.js:64 @@ -1004,12 +982,12 @@ msgstr "Catalogusnr.:" #: ../root/cdtoc/attach_artist_releases.tt:18 #: ../root/cdtoc/attach_filter_release.tt:32 ../root/cdtoc/list.tt:12 -#: ../root/cdtoc/lookup.tt:45 ../root/edit/details/merge_releases.tt:25 -#: ../root/release/edit/duplicates.tt:16 ../root/release/merge.tt:18 +#: ../root/cdtoc/lookup.tt:45 ../root/release/edit/duplicates.tt:16 +#: ../root/release/merge.tt:18 ../root/edit/details/MergeReleases.js:258 #: ../root/recording/RecordingIndex.js:59 #: ../root/release_group/ReleaseGroupIndex.js:161 #: ../root/search/components/ReleaseResults.js:105 -#: ../root/utility/tableColumns.js:456 ../root/utility/tableColumns.js:461 +#: ../root/utility/tableColumns.js:458 ../root/utility/tableColumns.js:463 msgid "Catalog#" msgstr "Catalogus#" @@ -1170,16 +1148,16 @@ msgstr "Naar einddatum kopiëren" #: ../root/cdtoc/attach_artist_releases.tt:16 #: ../root/cdtoc/attach_filter_release.tt:30 ../root/cdtoc/list.tt:10 -#: ../root/cdtoc/lookup.tt:43 ../root/edit/details/merge_releases.tt:23 -#: ../root/release/edit/duplicates.tt:14 ../root/release/merge.tt:16 -#: ../root/edit/details/EditReleaseLabel.js:127 +#: ../root/cdtoc/lookup.tt:43 ../root/release/edit/duplicates.tt:14 +#: ../root/release/merge.tt:16 ../root/edit/details/EditReleaseLabel.js:127 +#: ../root/edit/details/MergeReleases.js:256 #: ../root/edit/details/historic/AddRelease.js:152 #: ../root/edit/details/historic/EditReleaseEvents.js:135 #: ../root/recording/RecordingIndex.js:57 #: ../root/release_group/ReleaseGroupIndex.js:159 #: ../root/search/components/ReleaseResults.js:103 #: ../root/static/scripts/common/components/FilterForm.js:110 -#: ../root/utility/tableColumns.js:476 ../root/utility/tableColumns.js:488 +#: ../root/utility/tableColumns.js:478 ../root/utility/tableColumns.js:490 msgid "Country" msgstr "Land" @@ -1254,13 +1232,14 @@ msgstr "Data:" #: ../root/annotation/history.tt:12 ../root/cdtoc/attach_artist_releases.tt:16 #: ../root/cdtoc/attach_filter_release.tt:30 ../root/cdtoc/list.tt:10 -#: ../root/cdtoc/lookup.tt:42 ../root/edit/details/merge_releases.tt:23 -#: ../root/release/edit/duplicates.tt:13 ../root/release/merge.tt:16 +#: ../root/cdtoc/lookup.tt:42 ../root/release/edit/duplicates.tt:13 +#: ../root/release/merge.tt:16 #: ../root/admin/statistics-events/DeleteStatisticsEvent.js:31 #: ../root/admin/statistics-events/StatisticsEventEditForm.js:35 #: ../root/admin/statistics-events/StatisticsEventIndex.js:30 #: ../root/components/RelationshipsTable.js:316 #: ../root/edit/details/EditReleaseLabel.js:119 +#: ../root/edit/details/MergeReleases.js:256 #: ../root/edit/details/historic/AddRelease.js:151 #: ../root/edit/details/historic/EditReleaseEvents.js:134 #: ../root/elections/ElectionVotes.js:26 @@ -1269,8 +1248,8 @@ msgstr "Data:" #: ../root/search/components/EventResults.js:67 #: ../root/search/components/ReleaseResults.js:103 #: ../root/static/scripts/common/components/FilterForm.js:129 -#: ../root/utility/tableColumns.js:255 ../root/utility/tableColumns.js:260 -#: ../root/utility/tableColumns.js:482 ../root/utility/tableColumns.js:488 +#: ../root/utility/tableColumns.js:257 ../root/utility/tableColumns.js:262 +#: ../root/utility/tableColumns.js:484 ../root/utility/tableColumns.js:490 msgid "Date" msgstr "Datum" @@ -1338,7 +1317,7 @@ msgstr "Verouderd:" #: ../root/relationship/linktype/RelationshipTypeIndex.js:96 #: ../root/search/components/InstrumentResults.js:52 #: ../root/static/scripts/collection/components/CollectionEditForm.js:89 -#: ../root/utility/tableColumns.js:636 +#: ../root/utility/tableColumns.js:638 msgid "Description" msgstr "Omschrijving" @@ -1374,21 +1353,21 @@ msgstr "Overleden:" #: ../root/edit/details/AddReleaseGroup.js:71 #: ../root/edit/details/AddSeries.js:51 #: ../root/edit/details/AddStandaloneRecording.js:67 -#: ../root/edit/details/AddWork.js:57 ../root/edit/details/EditArea.js:84 +#: ../root/edit/details/AddWork.js:59 ../root/edit/details/EditArea.js:84 #: ../root/edit/details/EditArtist.js:100 ../root/edit/details/EditEvent.js:64 #: ../root/edit/details/EditInstrument.js:64 #: ../root/edit/details/EditLabel.js:84 ../root/edit/details/EditPlace.js:70 #: ../root/edit/details/EditRecording.js:65 #: ../root/edit/details/EditRelease.js:111 #: ../root/edit/details/EditReleaseGroup.js:64 -#: ../root/edit/details/EditSeries.js:61 ../root/edit/details/EditWork.js:73 +#: ../root/edit/details/EditSeries.js:61 ../root/edit/details/EditWork.js:75 #: ../root/genre/GenreEditForm.js:38 msgid "Disambiguation" msgstr "Verduidelijking" #: ../root/release/discids.tt:8 ../root/edit/details/SetTrackLengths.js:66 #: ../root/otherlookup/OtherLookupForm.js:114 -#: ../root/utility/tableColumns.js:179 ../root/utility/tableColumns.js:184 +#: ../root/utility/tableColumns.js:181 ../root/utility/tableColumns.js:186 msgid "Disc ID" msgstr "Disc-ID" @@ -1628,7 +1607,7 @@ msgstr "Nummering voor vinyl inschakelen" #: ../root/search/components/ArtistResults.js:57 #: ../root/search/components/LabelResults.js:69 #: ../root/search/components/PlaceResults.js:66 -#: ../root/utility/tableColumns.js:273 ../root/utility/tableColumns.js:278 +#: ../root/utility/tableColumns.js:275 ../root/utility/tableColumns.js:280 msgid "End" msgstr "Einde" @@ -1824,11 +1803,11 @@ msgstr "Lees de {doc_doc|documentatie} en {doc_styleguide|stijlgids} voor meer i msgid "For more information, check the {doc_doc|documentation}." msgstr "Lees de {doc_doc|documentatie} voor meer informatie." -#: ../root/cdtoc/list.tt:9 ../root/edit/details/merge_releases.tt:21 -#: ../root/release/edit/duplicates.tt:11 ../root/release/merge.tt:14 -#: ../root/components/list/ReleaseList.js:93 +#: ../root/cdtoc/list.tt:9 ../root/release/edit/duplicates.tt:11 +#: ../root/release/merge.tt:14 ../root/components/list/ReleaseList.js:93 #: ../root/edit/details/EditMedium.js:530 #: ../root/edit/details/EditReleaseLabel.js:145 +#: ../root/edit/details/MergeReleases.js:254 #: ../root/edit/details/historic/AddRelease.js:156 #: ../root/edit/details/historic/EditReleaseEvents.js:139 #: ../root/release_group/ReleaseGroupIndex.js:157 @@ -2001,7 +1980,7 @@ msgstr "Verborgen moet worden gebruikt voor gebarentalen en talen zonder ISO 639 #: ../root/components/common-macros.tt:602 #: ../lib/MusicBrainz/Server/Controller/Edit.pm:240 -#: ../root/static/scripts/common/constants.js:279 +#: ../root/static/scripts/common/constants.js:281 msgid "High" msgstr "Hoog" @@ -2140,12 +2119,12 @@ msgstr "ISRC" msgid "ISRCs:" msgstr "ISRC’s:" -#: ../root/work/edit_form.tt:16 ../root/edit/details/AddWork.js:63 -#: ../root/edit/details/EditWork.js:80 ../root/edit/details/RemoveIswc.js:36 +#: ../root/work/edit_form.tt:16 ../root/edit/details/AddWork.js:65 +#: ../root/edit/details/EditWork.js:82 ../root/edit/details/RemoveIswc.js:36 #: ../root/otherlookup/OtherLookupForm.js:79 #: ../root/report/IswcsWithManyWorks.js:48 #: ../root/search/components/WorkResults.js:53 -#: ../root/utility/tableColumns.js:762 +#: ../root/utility/tableColumns.js:764 msgid "ISWC" msgstr "ISWC" @@ -2298,23 +2277,6 @@ msgstr "Instrument:" msgid "Instruments" msgstr "Instrumenten" -#: ../root/edit/details/merge_releases.tt:78 -#: ../root/edit/details/merge_releases.tt:83 -#: ../root/edit/details/merge_releases.tt:92 -#: ../root/edit/details/merge_releases.tt:109 -#: ../root/edit/details/MergeAreas.js:35 -#: ../root/edit/details/MergeArtists.js:37 -#: ../root/edit/details/MergeEvents.js:40 -#: ../root/edit/details/MergeInstruments.js:35 -#: ../root/edit/details/MergeLabels.js:35 -#: ../root/edit/details/MergePlaces.js:35 -#: ../root/edit/details/MergeRecordings.js:40 -#: ../root/edit/details/MergeReleaseGroups.js:35 -#: ../root/edit/details/MergeSeries.js:35 -#: ../root/edit/details/MergeWorks.js:35 -msgid "Into:" -msgstr "Naar:" - #: ../root/cdstub/error.tt:5 msgid "Invalid Disc ID" msgstr "Ongeldige disc-ID" @@ -2355,13 +2317,13 @@ msgstr "Vergeet niet dat de nummers worden verwijderd als je dit vakje uitvinkt #: ../root/cdtoc/attach_artist_releases.tt:17 #: ../root/cdtoc/attach_filter_release.tt:31 ../root/cdtoc/list.tt:11 #: ../root/cdtoc/lookup.tt:44 ../root/components/common-macros.tt:569 -#: ../root/edit/details/merge_releases.tt:24 ../root/edit/search_macros.tt:417 -#: ../root/release/edit/duplicates.tt:15 ../root/release/merge.tt:17 -#: ../lib/MusicBrainz/Server/Edit/Label.pm:7 +#: ../root/edit/search_macros.tt:417 ../root/release/edit/duplicates.tt:15 +#: ../root/release/merge.tt:17 ../lib/MusicBrainz/Server/Edit/Label.pm:7 #: ../lib/MusicBrainz/Server/Form/Search/Search.pm:40 #: ../root/components/list/LabelList.js:54 ../root/edit/details/AddLabel.js:51 #: ../root/edit/details/EditLabel.js:62 #: ../root/edit/details/EditReleaseLabel.js:69 +#: ../root/edit/details/MergeReleases.js:257 #: ../root/edit/details/historic/AddRelease.js:153 #: ../root/edit/details/historic/EditReleaseEvents.js:136 #: ../root/label/LabelHeader.js:27 ../root/layout/components/Search.js:39 @@ -2374,8 +2336,8 @@ msgstr "Vergeet niet dat de nummers worden verwijderd als je dit vakje uitvinkt #: ../root/search/components/SearchForm.js:39 #: ../root/static/scripts/common/constants.js:23 #: ../root/static/scripts/common/utility/formatEntityTypeName.js:56 -#: ../root/user/UserProfile.js:46 ../root/utility/tableColumns.js:503 -#: ../root/utility/tableColumns.js:508 +#: ../root/user/UserProfile.js:46 ../root/utility/tableColumns.js:505 +#: ../root/utility/tableColumns.js:510 msgid "Label" msgstr "Platenmaatschappij" @@ -2478,7 +2440,7 @@ msgstr "Voorvertoningen van de bewerkingen worden geladen …" #: ../root/static/scripts/common/components/FingerprintTable.js:87 #: ../root/static/scripts/edit/components/AddEntityDialog.js:101 #: ../root/static/scripts/release/components/MediumTable.js:118 -#: ../root/utility/tableColumns.js:674 +#: ../root/utility/tableColumns.js:676 msgid "Loading..." msgstr "Aan het laden …" @@ -2518,15 +2480,15 @@ msgstr "Aantal keer opgevraagd" #: ../root/components/common-macros.tt:602 #: ../lib/MusicBrainz/Server/Controller/Edit.pm:240 -#: ../root/static/scripts/common/constants.js:276 +#: ../root/static/scripts/common/constants.js:278 msgid "Low" msgstr "Laag" #: ../root/release/edit_relationships.tt:172 -#: ../root/edit/details/AddWork.js:81 ../root/edit/details/EditWork.js:98 +#: ../root/edit/details/AddWork.js:83 ../root/edit/details/EditWork.js:100 #: ../root/layout/components/sidebar/WorkSidebar.js:67 #: ../root/search/components/WorkResults.js:55 -#: ../root/static/scripts/work.js:312 ../root/utility/tableColumns.js:873 +#: ../root/static/scripts/work.js:312 ../root/utility/tableColumns.js:875 msgid "Lyrics Languages" msgstr "Talen van de tekst" @@ -2581,22 +2543,6 @@ msgstr "Mediumtitel:" msgid "Medium track lengths" msgstr "Nummerlengtes van het medium" -#: ../root/edit/details/merge_releases.tt:44 -msgid "Medium {position} is now medium {new_position}" -msgstr "Medium {position} is nu medium {new_position}" - -#: ../root/edit/details/merge_releases.tt:44 -msgid "Medium {position} is now medium {new_position}: {new_name}" -msgstr "Medium {position} is nu medium {new_position}: {new_name}" - -#: ../root/edit/details/merge_releases.tt:44 -msgid "Medium {position}: {name} is now medium {new_position}" -msgstr "Medium {position}: {name} is nu medium {new_position}" - -#: ../root/edit/details/merge_releases.tt:44 -msgid "Medium {position}: {name} is now medium {new_position}: {new_name}" -msgstr "Medium {position}: {name} is nu medium {new_position}: {new_name}" - #: ../root/layout/merge-helper.tt:30 #: ../root/layout/components/MergeHelper.js:71 #: ../root/layout/components/sidebar/MergeLink.js:31 @@ -2612,12 +2558,7 @@ msgstr "Samenvoegingsproces" msgid "Merge Releases" msgstr "Uitgaven samenvoegen" -#: ../root/edit/details/merge_releases.tt:149 -#: ../lib/MusicBrainz/Server/Form/Merge/Release.pm:51 -msgid "Merge mediums and recordings" -msgstr "Media en opnames samenvoegen" - -#: ../root/edit/details/merge_releases.tt:147 ../root/release/merge.tt:55 +#: ../root/release/merge.tt:55 ../root/edit/details/MergeReleases.js:358 msgid "Merge strategy:" msgstr "Samenvoegingsstrategie:" @@ -2707,7 +2648,7 @@ msgstr "Mijn stem:" #: ../root/edit/details/AddReleaseGroup.js:56 #: ../root/edit/details/AddSeries.js:46 #: ../root/edit/details/AddStandaloneRecording.js:56 -#: ../root/edit/details/AddWork.js:52 ../root/edit/details/EditArea.js:70 +#: ../root/edit/details/AddWork.js:54 ../root/edit/details/EditArea.js:70 #: ../root/edit/details/EditArtist.js:86 ../root/edit/details/EditEvent.js:57 #: ../root/edit/details/EditInstrument.js:57 #: ../root/edit/details/EditLabel.js:68 ../root/edit/details/EditMedium.js:522 @@ -2717,7 +2658,7 @@ msgstr "Mijn stem:" #: ../root/edit/details/EditRelationshipAttribute.js:76 #: ../root/edit/details/EditRelease.js:75 #: ../root/edit/details/EditReleaseGroup.js:57 -#: ../root/edit/details/EditSeries.js:54 ../root/edit/details/EditWork.js:66 +#: ../root/edit/details/EditSeries.js:54 ../root/edit/details/EditWork.js:68 #: ../root/edit/details/RemoveRelationshipAttribute.js:41 #: ../root/edit/details/RemoveRelationshipType.js:60 #: ../root/edit/details/historic/AddRelease.js:63 @@ -2840,7 +2781,7 @@ msgid "No releases have cover art marked as \"Front\", cannot set cover art." msgstr "Geen van de uitgaven heeft een afbeelding van de voorkant, dus er kan geen afbeelding worden ingesteld." #: ../root/release/edit/tracklist.tt:140 ../root/admin/IpLookup.js:35 -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:457 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:458 #: ../root/static/scripts/common/components/Autocomplete2/constants.js:90 msgid "No results" msgstr "Geen resultaten" @@ -2885,19 +2826,11 @@ msgstr "De opgegeven TOC kan aan geen van de media van deze uitgave worden toege #: ../root/components/common-macros.tt:602 #: ../lib/MusicBrainz/Server/Controller/Edit.pm:240 -#: ../root/static/scripts/common/constants.js:277 -#: ../root/static/scripts/common/constants.js:278 +#: ../root/static/scripts/common/constants.js:279 +#: ../root/static/scripts/common/constants.js:280 msgid "Normal" msgstr "Normaal" -#: ../root/edit/details/merge_releases.tt:158 -#: ../root/edit/details/EditRelease.js:182 -#: ../root/edit/details/SetTrackLengths.js:89 -#: ../root/edit/details/historic/MergeReleases.js:69 -#: ../root/user/ReportUser.js:116 -msgid "Note" -msgstr "Notitie" - #: ../root/release/edit/information.tt:279 msgid "" "Note! If you do not know the month or day of release, please leave them " @@ -3220,13 +3153,13 @@ msgstr "Onbewerkte bewerkingsgegevens zijn mogelijk beschikbaar" msgid "Recent Notes Left on Your Edits" msgstr "Recente notities bij mijn bewerkingen" -#: ../root/components/common-macros.tt:569 -#: ../root/edit/details/merge_releases.tt:108 -#: ../root/edit/search_macros.tt:417 ../root/release/edit_relationships.tt:53 +#: ../root/components/common-macros.tt:569 ../root/edit/search_macros.tt:417 +#: ../root/release/edit_relationships.tt:53 #: ../lib/MusicBrainz/Server/Edit/Recording.pm:7 #: ../lib/MusicBrainz/Server/Form/Search/Search.pm:38 #: ../root/edit/details/AddStandaloneRecording.js:46 #: ../root/edit/details/EditRecording.js:51 +#: ../root/edit/details/MergeReleases.js:322 #: ../root/edit/details/RemoveIsrc.js:40 #: ../root/edit/details/historic/EditTrack.js:37 #: ../root/layout/components/Search.js:30 @@ -3244,10 +3177,6 @@ msgstr "Opname" msgid "Recording Details" msgstr "Details van de opname" -#: ../root/edit/details/merge_releases.tt:104 -msgid "Recording Merges" -msgstr "Opnamesamenvoegingen" - #: ../root/user/ratings.tt:2 ../root/user/ratings_summary.tt:3 msgid "Recording ratings" msgstr "Waarderingen van opnames" @@ -3307,7 +3236,7 @@ msgstr "Relatieredacteur" #: ../root/edit/search_macros.tt:417 #: ../root/edit/details/AddRelationshipType.js:78 #: ../root/relationship/linktype/RelationshipTypeIndex.js:41 -#: ../root/utility/tableColumns.js:804 +#: ../root/utility/tableColumns.js:806 msgid "Relationship Type" msgstr "Relatietype" @@ -3334,8 +3263,7 @@ msgstr "<span class=\"rel-edit\">Geel</span>gemarkeerde relaties zullen worden b #: ../root/cdtoc/attach_artist_releases.tt:15 #: ../root/cdtoc/attach_filter_release.tt:28 ../root/cdtoc/lookup.tt:39 -#: ../root/components/common-macros.tt:569 -#: ../root/edit/details/merge_releases.tt:19 ../root/edit/search_macros.tt:417 +#: ../root/components/common-macros.tt:569 ../root/edit/search_macros.tt:417 #: ../root/release/edit/duplicates.tt:10 ../root/release/merge.tt:12 #: ../lib/MusicBrainz/Server/Edit/Release.pm:8 #: ../lib/MusicBrainz/Server/Form/Search/Search.pm:37 @@ -3346,6 +3274,7 @@ msgstr "<span class=\"rel-edit\">Geel</span>gemarkeerde relaties zullen worden b #: ../root/edit/details/EditBarcodes.js:51 #: ../root/edit/details/EditCoverArt.js:51 #: ../root/edit/details/EditReleaseLabel.js:60 +#: ../root/edit/details/MergeReleases.js:252 #: ../root/edit/details/RemoveCoverArt.js:35 #: ../root/edit/details/ReorderCoverArt.js:45 #: ../root/edit/details/ReorderMediums.js:39 @@ -3582,7 +3511,7 @@ msgstr "Eigenschap verwijderen" #: ../root/components/common-macros.tt:878 #: ../root/components/common-macros.tt:886 #: ../root/components/RemoveFromMergeTableCell.js:39 -#: ../root/utility/tableColumns.js:781 ../root/utility/tableColumns.js:791 +#: ../root/utility/tableColumns.js:783 ../root/utility/tableColumns.js:793 msgid "Remove from merge" msgstr "Niet samenvoegen" @@ -3980,7 +3909,7 @@ msgstr "Nummers en artiesten omdraaien" #: ../root/search/components/RecordingResults.js:134 #: ../root/search/components/ReleaseResults.js:112 #: ../root/static/scripts/common/components/TaggerIcon.js:40 -#: ../root/utility/tableColumns.js:834 +#: ../root/utility/tableColumns.js:836 msgid "Tagger" msgstr "Tagger" @@ -4006,12 +3935,6 @@ msgstr "De aantekening is een soort miniatuurwiki." msgid "The catalog number you have entered looks like an Amazon ASIN." msgstr "Het catalogusnummer dat je hebt ingevoerd, ziet er uit als een ASIN van Amazon." -#: ../root/edit/details/merge_releases.tt:159 -msgid "" -"The data in this edit originally came from an older version of this edit, " -"and may not display correctly" -msgstr "De gegevens in deze bewerking komen oorspronkelijk uit een oudere versie van deze bewerking, en worden mogelijk niet correct weergegeven." - #: ../root/layout.tt:90 ../root/layout/index.js:275 msgid "" "The data you have submitted does not make any changes to the data already " @@ -4195,12 +4118,6 @@ msgstr "Dit medium bevat datanummers" msgid "This disc has a hidden pregap track before track 1" msgstr "Dit medium heeft een verborgen pregapnummer voor nummer 1" -#: ../root/edit/details/merge_releases.tt:133 -msgid "" -"This edit does not store recording merge information and is closed, so no " -"recording merge information can be shown." -msgstr "Deze bewerking slaat geen informatie over de samenvoeging op en is gesloten, dus er kan geen informatie over het samenvoegen worden getoond." - #: ../root/cdtoc/set_durations.tt:31 msgid "This edit would only make subsecond changes to track lengths." msgstr "Deze bewerking zou de duur van nummers met minder dan een seconde veranderen." @@ -4332,8 +4249,8 @@ msgid "This recording cannot be removed because it is still used on releases." msgstr "Deze opname kan niet worden verwijderd omdat hij nog steeds wordt gebruikt in uitgaven." #: ../root/components/common-macros.tt:302 -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:696 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:286 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:697 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:287 #: ../root/static/scripts/common/components/EntityLink.js:289 msgid "This recording is a video" msgstr "Deze opname is een video" @@ -4365,10 +4282,6 @@ msgid "" " relationships." msgstr "Deze uitgavegroep zal automatisch worden verwijderd zodra het geen uitgaven of relaties meer heeft." -#: ../root/edit/details/merge_releases.tt:35 -msgid "This release has no media to merge." -msgstr "Deze uitgave heeft geen media om samen te voegen." - #: ../root/release/discids.tt:58 msgid "This release has no mediums that can have disc IDs." msgstr "Deze uitgave heeft geen media die een Disc-ID kunnen hebben." @@ -4504,14 +4417,10 @@ msgid "Total tracks:" msgstr "Totaal aantal nummers:" #: ../root/cdtoc/info.tt:31 ../root/search/components/RecordingResults.js:135 -#: ../root/taglookup/Form.js:41 ../root/utility/tableColumns.js:846 +#: ../root/taglookup/Form.js:41 ../root/utility/tableColumns.js:848 msgid "Track" msgstr "Nummer" -#: ../root/edit/details/merge_releases.tt:107 -msgid "Track #" -msgstr "Nummer #" - #: ../root/release/edit/tracklist.tt:483 #: ../root/static/scripts/release-editor/dialogs.js:40 msgid "Track Parser" @@ -4546,11 +4455,11 @@ msgstr "Nummer {n}:" msgid "Tracklist" msgstr "Nummerlijst" -#: ../root/edit/details/merge_releases.tt:22 ../root/release/discids.tt:9 -#: ../root/release/edit/duplicates.tt:12 ../root/release/merge.tt:15 -#: ../root/artist_credit/ArtistCreditIndex.js:128 +#: ../root/release/discids.tt:9 ../root/release/edit/duplicates.tt:12 +#: ../root/release/merge.tt:15 ../root/artist_credit/ArtistCreditIndex.js:128 #: ../root/artist_credit/ArtistCreditLayout.js:31 #: ../root/components/list/ReleaseList.js:103 +#: ../root/edit/details/MergeReleases.js:255 #: ../root/edit/details/historic/AddRelease.js:113 #: ../root/release_group/ReleaseGroupIndex.js:158 #: ../root/search/components/CDStubResults.js:49 @@ -4594,7 +4503,7 @@ msgstr "Twitter" #: ../root/edit/details/AddLabel.js:107 ../root/edit/details/AddPlace.js:65 #: ../root/edit/details/AddReleaseGroup.js:80 #: ../root/edit/details/AddRemoveAlias.js:101 -#: ../root/edit/details/AddSeries.js:57 ../root/edit/details/AddWork.js:69 +#: ../root/edit/details/AddSeries.js:57 ../root/edit/details/AddWork.js:71 #: ../root/edit/details/EditAlias.js:123 ../root/edit/details/EditArea.js:91 #: ../root/edit/details/EditArtist.js:107 ../root/edit/details/EditEvent.js:78 #: ../root/edit/details/EditInstrument.js:71 @@ -4625,12 +4534,12 @@ msgstr "Twitter" #: ../root/static/scripts/account/components/ApplicationForm.js:87 #: ../root/static/scripts/alias/AliasEditForm.js:329 #: ../root/static/scripts/collection/components/CollectionEditForm.js:83 -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:874 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:447 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:875 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:448 #: ../root/static/scripts/common/components/FilterForm.js:63 -#: ../root/static/scripts/edit/externalLinks.js:904 -#: ../root/static/scripts/edit/externalLinks.js:1157 -#: ../root/utility/tableColumns.js:613 ../root/utility/tableColumns.js:618 +#: ../root/static/scripts/edit/externalLinks.js:941 +#: ../root/static/scripts/edit/externalLinks.js:1181 +#: ../root/utility/tableColumns.js:615 ../root/utility/tableColumns.js:620 msgid "Type" msgstr "Type" @@ -4941,8 +4850,8 @@ msgstr "Transclusieredacteur" #: ../root/components/common-macros.tt:569 ../root/edit/search_macros.tt:417 #: ../lib/MusicBrainz/Server/Edit/Work.pm:9 #: ../lib/MusicBrainz/Server/Form/Search/Search.pm:39 -#: ../root/components/list/WorkList.js:60 ../root/edit/details/AddWork.js:46 -#: ../root/edit/details/EditWork.js:59 ../root/edit/details/RemoveIswc.js:40 +#: ../root/components/list/WorkList.js:60 ../root/edit/details/AddWork.js:48 +#: ../root/edit/details/EditWork.js:61 ../root/edit/details/RemoveIswc.js:40 #: ../root/layout/components/Search.js:34 #: ../root/report/IswcsWithManyWorks.js:49 #: ../root/report/components/WorkList.js:46 @@ -5207,22 +5116,13 @@ msgid "" " please make sure the artists have been entered correctly." msgstr "Je hebt de speciale artiest {valink|Diverse Artiesten} gebruikt op sommige van de onderstaande nummers.\n{valink|Diverse Artiesten} moet zeer zelden gebruikt worden op nummers. Controleer of de artiesten goed zijn ingevoerd." -#: ../root/edit/details/merge_releases.tt:5 -#: ../root/components/list/ReleaseList.js:90 -#: ../root/release_group/ReleaseGroupIndex.js:89 -#: ../root/search/components/ReleaseResults.js:50 -#: ../root/static/scripts/release-editor/duplicates.js:143 -msgid "[missing media]" -msgstr "[ontbrekende media]" - #: ../root/components/common-macros.tt:259 #: ../lib/MusicBrainz/Server/Edit/Relationship/RemoveLinkType.pm:86 #: ../lib/MusicBrainz/Server/Edit/Release/Create.pm:113 -#: ../lib/MusicBrainz/Server/Edit/Work/Create.pm:87 -#: ../lib/MusicBrainz/Server/Edit/Work/Edit.pm:186 #: ../root/edit/details/EditAlias.js:94 #: ../root/edit/details/SetTrackLengths.js:73 #: ../root/static/scripts/common/components/EntityLink.js:41 +#: ../root/static/scripts/common/i18n/localizeLanguageName.js:15 msgid "[removed]" msgstr "[verwijderd]" @@ -5368,6 +5268,10 @@ msgstr "historisch, tot {end}" msgid "historical, {begin}-{end}" msgstr "historisch, {begin} – {end}" +#: ../root/edit/search_macros.tt:25 +msgid "in an unspecified order (possibly faster)" +msgstr "Ongesorteerd (mogelijk sneller)" + #: ../root/edit/details/macros.tt:28 #: ../root/utility/relationshipDateText.js:25 msgid "in {date}" @@ -5523,10 +5427,6 @@ msgid_plural "plus {n} other private collections" msgstr[0] "plus {n} andere privécollectie" msgstr[1] "plus {n} andere privécollecties" -#: ../root/edit/search_macros.tt:25 -msgid "randomly" -msgstr "willekeurig" - #: ../root/edit/search_macros.tt:25 msgid "recently closed first" msgstr "eerst onlangs gesloten" @@ -5738,7 +5638,7 @@ msgstr "« Vorige" #: ../root/components/paginator.tt:19 ../root/components/paginator.tt:31 #: ../root/components/paginator.tt:39 ../root/components/Paginator.js:94 #: ../root/components/Paginator.js:119 ../root/components/Paginator.js:133 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:125 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:126 msgid "…" msgstr "…" @@ -6138,14 +6038,6 @@ msgstr "Er zijn al uitgaven in MusicBrainz met deze disc-ID" msgid "There is already a CD stub with this disc ID" msgstr "Er is al een cd-beginnetje met deze disc-ID" -#: ../lib/MusicBrainz/Server/Data/Language.pm:63 -#: ../lib/MusicBrainz/Server/Edit/Work/Create.pm:75 -#: ../lib/MusicBrainz/Server/Edit/Work/Create.pm:85 -#: ../lib/MusicBrainz/Server/Edit/Work/Edit.pm:184 -#: ../lib/MusicBrainz/Server/Form/Utils.pm:48 -msgid "[No lyrics]" -msgstr "[Geen tekst]" - #: ../lib/MusicBrainz/Server/Data/LinkType.pm:197 #, perl-brace-format msgid "{t0}-{t1} relationships" @@ -6387,7 +6279,7 @@ msgstr "Uitgave naar één artiest omzetten (historisch)" #: ../lib/MusicBrainz/Server/Edit/Historic/MergeRelease.pm:13 #: ../lib/MusicBrainz/Server/Edit/Historic/MergeReleaseMAC.pm:9 -#: ../lib/MusicBrainz/Server/Edit/Release/Merge.pm:140 +#: ../lib/MusicBrainz/Server/Edit/Release/Merge.pm:141 msgid "Merge releases" msgstr "Uitgaven samenvoegen" @@ -6671,7 +6563,7 @@ msgctxt "medium format" msgid "(unknown)" msgstr "(onbekend)" -#: ../lib/MusicBrainz/Server/Edit/Release/Merge.pm:347 +#: ../lib/MusicBrainz/Server/Edit/Release/Merge.pm:339 #, perl-brace-format msgid "These releases could not be merged: {reason}" msgstr "Deze uitgaven kunnen niet worden samengevoegd: {reason}" @@ -7309,6 +7201,16 @@ msgstr "Dit moet een geldige datum zijn, zoals 2006-05-25, 1990-01, ????-01 etc. msgid "Please pick the entity you want the others merged into." msgstr "Selecteer het object waarin je de andere objecten wil samenvoegen." +#: ../lib/MusicBrainz/Server/Form/Merge/Release.pm:50 +#: ../root/edit/details/MergeReleases.js:65 +msgid "Append mediums to target release" +msgstr "Media aan de doeluitgave toevoegen" + +#: ../lib/MusicBrainz/Server/Form/Merge/Release.pm:51 +#: ../root/edit/details/MergeReleases.js:66 +msgid "Merge mediums and recordings" +msgstr "Media en opnames samenvoegen" + #: ../lib/MusicBrainz/Server/Form/Merge/Release.pm:62 msgid "Another medium is already in this position" msgstr "Er is al een ander medium op deze positie" @@ -7356,22 +7258,22 @@ msgid "A fluency level is required." msgstr "Een taalvaardigheidsniveau is vereist." #: ../lib/MusicBrainz/Server/Form/Role/UserProfile.pm:70 -#: ../root/static/scripts/common/constants.js:287 +#: ../root/static/scripts/common/constants.js:289 msgid "Basic" msgstr "Basis" #: ../lib/MusicBrainz/Server/Form/Role/UserProfile.pm:71 -#: ../root/static/scripts/common/constants.js:288 +#: ../root/static/scripts/common/constants.js:290 msgid "Intermediate" msgstr "Gemiddeld" #: ../lib/MusicBrainz/Server/Form/Role/UserProfile.pm:72 -#: ../root/static/scripts/common/constants.js:286 +#: ../root/static/scripts/common/constants.js:288 msgid "Advanced" msgstr "Gevorderd" #: ../lib/MusicBrainz/Server/Form/Role/UserProfile.pm:73 -#: ../root/static/scripts/common/constants.js:289 +#: ../root/static/scripts/common/constants.js:291 msgid "Native" msgstr "Moedertaal" @@ -7513,6 +7415,11 @@ msgstr "Twee weken" msgid "A month" msgstr "Een maand" +#: ../lib/MusicBrainz/Server/Form/Utils.pm:48 +#: ../root/static/scripts/common/i18n/localizeLanguageName.js:19 +msgid "[No lyrics]" +msgstr "[Geen tekst]" + #: ../lib/MusicBrainz/Server/Form/Utils.pm:84 msgctxt "script optgroup" msgid "Frequently used" @@ -7852,7 +7759,7 @@ msgstr "Toegang" #: ../root/components/Aliases/AliasTable.js:31 #: ../root/components/Aliases/ArtistCreditList.js:54 #: ../root/static/scripts/common/components/FingerprintTable.js:53 -#: ../root/utility/tableColumns.js:78 +#: ../root/utility/tableColumns.js:80 msgid "Actions" msgstr "Acties" @@ -7985,7 +7892,7 @@ msgstr "Zonder opmaak" #: ../root/edit/details/AddRelationshipType.js:191 #: ../root/edit/details/RemoveRelationshipType.js:136 #: ../root/relationship/linktype/RelationshipTypeIndex.js:165 -#: ../root/utility/tableColumns.js:626 +#: ../root/utility/tableColumns.js:628 msgid "Attributes" msgstr "Eigenschappen" @@ -8006,12 +7913,12 @@ msgstr "Eigenschap kan niet worden verwijderd" #: ../root/admin/attributes/Language.js:33 #: ../root/admin/attributes/Language.js:36 -#: ../root/edit/details/AddRelease.js:108 ../root/edit/details/AddWork.js:75 +#: ../root/edit/details/AddRelease.js:108 ../root/edit/details/AddWork.js:77 #: ../root/edit/details/EditRelease.js:131 #: ../root/edit/details/historic/AddRelease.js:104 ../root/iswc/Index.js:59 #: ../root/report/IswcsWithManyWorks.js:53 #: ../root/search/components/ReleaseResults.js:107 -#: ../root/utility/tableColumns.js:524 +#: ../root/utility/tableColumns.js:526 msgid "Language" msgstr "Taal" @@ -8928,6 +8835,19 @@ msgstr "Er zijn geen relaties met het geselecteerde type gevonden." msgid "The provided relationship type ID is not valid." msgstr "De ingevoerde relatietype-ID is niet geldig." +#: ../root/components/ReleaseLanguageScript.js:24 +#: ../root/components/ReleaseLanguageScript.js:30 +#: ../root/components/list/ReleaseList.js:100 +#: ../root/edit/details/MergeReleases.js:88 ../root/release/CoverArt.js:92 +#: ../root/release_group/ReleaseGroupIndex.js:90 +#: ../root/search/components/ReleaseResults.js:55 +#: ../root/static/scripts/common/components/ReleaseEvents.js:55 +#: ../root/static/scripts/common/components/ReleaseEvents.js:72 +#: ../root/static/scripts/release-editor/duplicates.js:145 +msgctxt "missing data" +msgid "-" +msgstr "-" + #: ../root/components/StaticRelationshipsDisplay.js:25 msgid "{start_track}–{end_track}" msgstr "{start_track}–{end_track}" @@ -9110,6 +9030,14 @@ msgstr "Adres" msgid "Unspecified type" msgstr "Ongespecificeerd type" +#: ../root/components/list/ReleaseList.js:90 +#: ../root/edit/details/MergeReleases.js:83 +#: ../root/release_group/ReleaseGroupIndex.js:89 +#: ../root/search/components/ReleaseResults.js:50 +#: ../root/static/scripts/release-editor/duplicates.js:143 +msgid "[missing media]" +msgstr "[ontbrekende media]" + #: ../root/components/list/ReleaseList.js:153 #: ../root/search/components/ReleaseResults.js:109 msgid "Status" @@ -9119,8 +9047,8 @@ msgstr "Status" #: ../root/report/IswcsWithManyWorks.js:50 #: ../root/report/components/WorkList.js:51 #: ../root/search/components/WorkResults.js:51 -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:894 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:454 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:895 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:455 msgid "Writers" msgstr "Auteurs" @@ -9238,22 +9166,22 @@ msgid "" msgstr "{edit} heeft één of meer tegenstemmen gekregen. Je moet een notitie bij deze bewerking plaatsen om hem direct goed te keuren." #: ../root/edit/components/EditHeader.js:46 -#: ../root/edit/components/EditorTypeInfo.js:28 +#: ../root/edit/components/EditorTypeInfo.js:29 msgid "This user is new to MusicBrainz." msgstr "Deze gebruiker is nieuw op MusicBrainz." #: ../root/edit/components/EditHeader.js:48 -#: ../root/edit/components/EditorTypeInfo.js:30 +#: ../root/edit/components/EditorTypeInfo.js:31 msgid "beginner" msgstr "beginner" #: ../root/edit/components/EditHeader.js:55 -#: ../root/edit/components/EditorTypeInfo.js:38 +#: ../root/edit/components/EditorTypeInfo.js:39 msgid "This user is automated." msgstr "Deze gebruiker is geautomatiseerd." #: ../root/edit/components/EditHeader.js:56 -#: ../root/edit/components/EditorTypeInfo.js:39 +#: ../root/edit/components/EditorTypeInfo.js:40 msgid "bot" msgstr "robot" @@ -9559,7 +9487,7 @@ msgstr "Primair voor localisatie" #: ../root/edit/details/AddSeries.js:65 ../root/edit/details/EditSeries.js:79 #: ../root/layout/components/sidebar/SeriesSidebar.js:52 -#: ../root/utility/tableColumns.js:819 +#: ../root/utility/tableColumns.js:821 msgid "Ordering Type" msgstr "Volgorde" @@ -9645,6 +9573,14 @@ msgstr "Oude artiest" msgid "New Artist" msgstr "Nieuwe artiest" +#: ../root/edit/details/EditRelease.js:182 +#: ../root/edit/details/MergeReleases.js:364 +#: ../root/edit/details/SetTrackLengths.js:89 +#: ../root/edit/details/historic/MergeReleases.js:69 +#: ../root/user/ReportUser.js:116 +msgid "Note" +msgstr "Notitie" + #: ../root/edit/details/EditRelease.js:183 msgid "This edit also changed the track artists." msgstr "Deze bewerking veranderde ook de artiesten van de nummers." @@ -9676,7 +9612,7 @@ msgstr "Deze bewerking was een samenvoeging." msgid "Search for the target URL." msgstr "Zoek naar de doel URL." -#: ../root/edit/details/EditWork.js:87 +#: ../root/edit/details/EditWork.js:89 msgid "Work type" msgstr "Type compositie" @@ -9693,10 +9629,71 @@ msgstr "Type compositie" msgid "Merge:" msgstr "Samenvoegen:" +#: ../root/edit/details/MergeAreas.js:35 +#: ../root/edit/details/MergeArtists.js:37 +#: ../root/edit/details/MergeEvents.js:40 +#: ../root/edit/details/MergeInstruments.js:35 +#: ../root/edit/details/MergeLabels.js:35 +#: ../root/edit/details/MergePlaces.js:35 +#: ../root/edit/details/MergeRecordings.js:40 +#: ../root/edit/details/MergeReleaseGroups.js:35 +#: ../root/edit/details/MergeReleases.js:288 +#: ../root/edit/details/MergeReleases.js:295 +#: ../root/edit/details/MergeReleases.js:305 +#: ../root/edit/details/MergeReleases.js:323 +#: ../root/edit/details/MergeSeries.js:35 +#: ../root/edit/details/MergeWorks.js:35 +msgid "Into:" +msgstr "Naar:" + #: ../root/edit/details/MergeArtists.js:43 msgid "Rename artist and relationship credits" msgstr "De naam van de artiest in nummers en relaties hernoemen:" +#: ../root/edit/details/MergeReleases.js:131 +msgid "Medium {position}: {name} is now medium {new_position}: {new_name}" +msgstr "Medium {position}: {name} is nu medium {new_position}: {new_name}" + +#: ../root/edit/details/MergeReleases.js:142 +msgid "Medium {position}: {name} is now medium {new_position}" +msgstr "Medium {position}: {name} is nu medium {new_position}" + +#: ../root/edit/details/MergeReleases.js:151 +msgid "Medium {position} is now medium {new_position}: {new_name}" +msgstr "Medium {position} is nu medium {new_position}: {new_name}" + +#: ../root/edit/details/MergeReleases.js:162 +msgid "Medium {position} is now medium {new_position}" +msgstr "Medium {position} is nu medium {new_position}" + +#: ../root/edit/details/MergeReleases.js:271 +msgid "This release has no media to merge." +msgstr "Deze uitgave heeft geen media om samen te voegen." + +#: ../root/edit/details/MergeReleases.js:318 +msgid "Recording Merges" +msgstr "Opnamesamenvoegingen" + +#: ../root/edit/details/MergeReleases.js:321 +msgid "Track #" +msgstr "Nummer #" + +#: ../root/edit/details/MergeReleases.js:333 +msgid "" +"This edit does not store recording merge information and is closed, so no " +"recording merge information can be shown." +msgstr "Deze bewerking slaat geen informatie over de samenvoeging op en is gesloten, dus er kan geen informatie over het samenvoegen worden getoond." + +#: ../root/edit/details/MergeReleases.js:350 +msgid "All recordings for these releases are already merged." +msgstr "Alle opnames van deze uitgave zijn al samengevoegd." + +#: ../root/edit/details/MergeReleases.js:366 +msgid "" +"The data in this edit originally came from an older version of this edit, " +"and may not display correctly" +msgstr "De gegevens in deze bewerking komen oorspronkelijk uit een oudere versie van deze bewerking, en worden mogelijk niet correct weergegeven." + #: ../root/edit/details/MoveDiscId.js:46 #: ../root/edit/details/historic/MoveDiscId.js:41 msgid "From:" @@ -10768,7 +10765,7 @@ msgstr "Alle documentatie" #: ../root/relationship/RelationshipsHeader.js:19 #: ../root/relationship/linktype/RelationshipTypeIndex.js:61 #: ../root/relationship/linktype/RelationshipTypesList.js:62 -#: ../root/utility/tableColumns.js:343 +#: ../root/utility/tableColumns.js:345 msgid "Relationship Types" msgstr "Relatietypes" @@ -10968,7 +10965,7 @@ msgstr "Aan een nieuwe collectie toevoegen" #: ../root/layout/components/sidebar/CollectionLinks.js:33 #: ../root/user/UserCollections.js:188 msgid "Collaborative collections" -msgstr "Samenwerkingscollecties" +msgstr "Gezamenlijke collecties" #: ../root/layout/components/sidebar/CollectionLinks.js:37 #: ../root/user/UserCollections.js:167 @@ -11184,7 +11181,7 @@ msgstr "Licentie" #: ../root/layout/components/sidebar/SidebarRating.js:25 #: ../root/static/scripts/release/components/MediumTable.js:223 -#: ../root/utility/tableColumns.js:437 +#: ../root/utility/tableColumns.js:439 msgid "Rating" msgstr "Waardering" @@ -12008,7 +12005,7 @@ msgid "" msgstr "Weet je zeker dat je de onderstaande afbeelding van {release} van {artist} wil verwijderen?" #: ../root/release_group/ReleaseGroupHeader.js:30 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:404 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:405 msgid "Release group by {artist}" msgstr "Uitgavegroep van {artist}" @@ -13298,9 +13295,9 @@ msgstr "Wikidata-URL’s die aan meerdere objecten zijn gekoppeld" #: ../root/report/ReportsIndex.js:574 #: ../root/search/components/RecordingResults.js:132 -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:728 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:311 -#: ../root/utility/tableColumns.js:655 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:729 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:312 +#: ../root/utility/tableColumns.js:657 msgid "ISRCs" msgstr "ISRC’s" @@ -13548,7 +13545,7 @@ msgstr "Andere zoekmogelijkheden" #: ../root/search/components/ArtistResults.js:55 #: ../root/search/components/LabelResults.js:68 #: ../root/search/components/PlaceResults.js:65 -#: ../root/utility/tableColumns.js:150 ../root/utility/tableColumns.js:155 +#: ../root/utility/tableColumns.js:152 ../root/utility/tableColumns.js:157 msgid "Begin" msgstr "Begin" @@ -13566,9 +13563,9 @@ msgid "Documentation Search" msgstr "Documentatie zoeken" #: ../root/search/components/EventResults.js:71 -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:1044 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:183 -#: ../root/utility/tableColumns.js:358 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:1045 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:184 +#: ../root/utility/tableColumns.js:360 msgid "Location" msgstr "Locatie" @@ -13878,7 +13875,7 @@ msgid "Show more artist credits" msgstr "Meer vermeldingen tonen" #: ../root/static/scripts/artist/components/ArtistCreditRenamer.js:254 -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:464 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:465 #: ../root/static/scripts/common/components/Autocomplete2/constants.js:103 #: ../root/static/scripts/common/components/Collapsible.js:76 msgid "Show more..." @@ -13908,56 +13905,56 @@ msgstr "Een collectie aanmaken" msgid "Update collection" msgstr "Collectie bijwerken" -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:82 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:83 #: ../root/static/scripts/common/components/Autocomplete2/constants.js:96 msgid "An error occurred while searching. Click here to try again." msgstr "Er is een fout opgetreden bij het zoeken. Klik hier om het nogmaals te proberen." -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:87 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:88 msgid "Try with direct search instead." msgstr "Probeer het eens met een directe zoekopdracht." -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:88 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:89 msgid "Try with indexed search instead." msgstr "Probeer het eens met een geïndexeerde zoekopdracht." -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:120 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:121 #: ../root/static/scripts/common/components/Autocomplete2.js:648 msgid "Type to search, or paste an MBID" msgstr "Tik hier een naam om te zoeken, of plak een MBID" -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:202 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:203 #: ../root/static/scripts/common/components/Autocomplete2/constants.js:51 msgid "Clear recent items" msgstr "Recente objecten leegmaken" -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:471 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:472 #: ../root/static/scripts/common/components/Autocomplete2/constants.js:110 msgid "Not found? Try again with direct search." msgstr "Niet gevonden? Probeer het eens met een directe zoekopdracht." -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:472 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:473 #: ../root/static/scripts/common/components/Autocomplete2/constants.js:117 msgid "Slow? Switch back to indexed search." msgstr "Langzaam? Schakel terug naar geïndexeerd zoeken." -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:715 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:303 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:716 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:304 msgid "appears on" msgstr "staat op:" -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:721 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:307 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:722 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:308 msgid "standalone recording" msgstr "losse opname" -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:815 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:399 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:816 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:400 msgid "{release_group_type} by {artist}" msgstr "{release_group_type} van {artist}" -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:1043 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:180 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:1044 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:181 msgid "Performers" msgstr "Artiesten" @@ -14071,11 +14068,11 @@ msgstr "Een serie zoeken" msgid "Search for a work" msgstr "Een compositie zoeken" -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:298 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:299 msgid "by {artist}" msgstr "van {artist}" -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:362 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:363 msgid "{first_list_item} … {last_list_item}" msgstr "{first_list_item} … {last_list_item}" @@ -14416,181 +14413,191 @@ msgstr "Opgericht in:" msgid "Dissolved in:" msgstr "Opgeheven in:" -#: ../root/static/scripts/edit/URLCleanup.js:360 +#: ../root/static/scripts/edit/URLCleanup.js:361 msgid "" "Please link to a channel, not a specific video. Videos should be linked to " "the appropriate recordings or releases instead." msgstr "Dit object moet aan een kanaal worden gekoppeld, in plaats van aan een specifieke video. Video’s moeten aan de bijbehorende opnames of uitgaven worden gekoppeld." -#: ../root/static/scripts/edit/URLCleanup.js:366 +#: ../root/static/scripts/edit/URLCleanup.js:367 msgid "" "Please link to a specific video. Add channel pages to the relevant artist, " "label, etc. instead." msgstr "Voeg een link naar een specifieke video toe. Kanalen moeten aan de relevante artiest, platenmaatschappij etc. worden gekoppeld." -#: ../root/static/scripts/edit/URLCleanup.js:533 +#: ../root/static/scripts/edit/URLCleanup.js:534 msgid "" "Allmusic “{album_url_pattern}” links should be added to release groups. To " "find the appropriate release link for this release, please check the " "Releases tab from {album_url|your link}." msgstr "Allmusic-URL’s met “{album_url_pattern}” moeten aan uitgavegroepen worden toegevoegd. Je kan de juiste link voor deze uitgave vinden in het tabblad “Releases” op {album_url|de pagina die je wilde toevoegen}." -#: ../root/static/scripts/edit/URLCleanup.js:753 +#: ../root/static/scripts/edit/URLCleanup.js:754 msgid "" "Only Apple Books “{artist_url_pattern}” pages can be added directly to " "artists. Please link audiobooks to the appropriate release instead." msgstr "Alleen pagina’s van Apple Books “{artist_url_pattern}” kunnen rechtstreeks aan artiesten worden toegevoegd. Koppel audioboeken aan de bijbehorende uitgave." -#: ../root/static/scripts/edit/URLCleanup.js:769 +#: ../root/static/scripts/edit/URLCleanup.js:770 msgid "" "Only Apple Books audiobooks can be added to MusicBrainz. Consider adding " "books to {bookbrainz_url|BookBrainz} instead." msgstr "Alleen Apple Books-audioboeken kunnen aan MusicBrainz worden toegevoegd. Je kunt boeken wel aan {bookbrainz_url|BookBrainz} toevoegen." -#: ../root/static/scripts/edit/URLCleanup.js:856 +#: ../root/static/scripts/edit/URLCleanup.js:857 msgid "" "Please link to the main page for the artist, not to a specific album or " "track." msgstr "Voeg een link naar de hoofdpagina van de artiest toe in plaats van een specifiek album of nummer." -#: ../root/static/scripts/edit/URLCleanup.js:868 +#: ../root/static/scripts/edit/URLCleanup.js:869 msgid "" "Please link to the main page for the label, not to a specific album or " "track." msgstr "Voeg een link naar de hoofdpagina van de platenmaatschappij toe in plaats van een specifiek album of nummer." -#: ../root/static/scripts/edit/URLCleanup.js:1052 +#: ../root/static/scripts/edit/URLCleanup.js:1053 msgid "Please link to the main page for the artist, not a specific product." msgstr "Voeg een link naar de hoofdpagina van de artiest toe in plaats van een specifiek product." -#: ../root/static/scripts/edit/URLCleanup.js:1054 +#: ../root/static/scripts/edit/URLCleanup.js:1055 msgid "Please link to the main page for the label, not a specific product." msgstr "Voer een link naar de hoofdpagina van de platenmaatschappij toe in plaats van een specifiek product." -#: ../root/static/scripts/edit/URLCleanup.js:1597 +#: ../root/static/scripts/edit/URLCleanup.js:1600 msgid "" "Discogs “{master_url_pattern}” links group several releases, so this should " "be added to the release group instead." msgstr "Discogs-URL’s met “{master_url_pattern}” verwijzen naar pagina’s waarop verschillende uitgaven worden gegroepeerd, dus deze link moet aan de uitgavegroep worden toegevoegd." -#: ../root/static/scripts/edit/URLCleanup.js:2086 +#: ../root/static/scripts/edit/URLCleanup.js:2090 msgid "" "Only IMSLP “{category_url_pattern}” links are allowed for artists. Please " "link work pages to the specific work in question." msgstr "Alleen IMSLP-links met de vorm “{category_url_pattern}” mogen aan artiesten worden toegevoegd. Koppel compositiepagina’s aan de specifieke compositie." -#: ../root/static/scripts/edit/URLCleanup.js:2104 +#: ../root/static/scripts/edit/URLCleanup.js:2108 msgid "" "IMSLP “{category_url_pattern}” links are only allowed for artists. Please " "link the specific work page to this work instead, if available." msgstr "IMSLP-links met de vorm “{category_url_pattern}” mogen alleen aan artiesten worden toegevoegd. Koppel de compositiepagina aan de specifieke compositie." -#: ../root/static/scripts/edit/URLCleanup.js:2149 +#: ../root/static/scripts/edit/URLCleanup.js:2153 msgid "" "Instagram “{explore_url_pattern}” links are not allowed. Please link to a " "profile instead, if there is one." msgstr "Instagram-links met de vorm “{explore_url_pattern}” zijn niet toegestaan. Je kan eventueel een link naar een profiel toevoegen." -#: ../root/static/scripts/edit/URLCleanup.js:2177 +#: ../root/static/scripts/edit/URLCleanup.js:2181 msgid "" "Please do not link directly to images, link to the appropriate Instagram " "profile page instead. If you want to link to a video, {url|add a standalone " "recording} for it instead." msgstr "Voeg geen rechtstreekse link naar een afbeelding toe, maar een link naar de relevante Instagram-profielpagina. Als je een link naar een video wil toevoegen, moet je {url|een losse opname toevoegen}." -#: ../root/static/scripts/edit/URLCleanup.js:2202 +#: ../root/static/scripts/edit/URLCleanup.js:2206 msgid "This is an internal Instagram page and should not be added." msgstr "Dit is een interne Instagram-pagina en moet niet worden toegevoegd." -#: ../root/static/scripts/edit/URLCleanup.js:2278 +#: ../root/static/scripts/edit/URLCleanup.js:2282 msgid "" "Only iTunes “{artist_url_pattern}” pages can be added directly to artists. " "Please link albums, videos, etc. to the appropriate release or recording " "instead." msgstr "Alleen iTunes-URL’s met “{artist_url_pattern}” kunnen aan artiesten worden gekoppeld. Koppel albums, video’s etc. aan de bijbehorende uitgave of opname." -#: ../root/static/scripts/edit/URLCleanup.js:2890 +#: ../root/static/scripts/edit/URLCleanup.js:2895 msgid "" "Musixmatch “{album_url_pattern}” pages are a bad match for MusicBrainz " "release groups, and linking to them is currently disallowed. Please consider" " adding Musixmatch links to the relevant artists and works instead." msgstr "Musixmatch-pagina’s met “{album_url_pattern}” passen niet goed bij MusicBrainz-uitgavegroepen, dus deze koppeling is nu niet toegestaan. Je kunt Musixmatch-pagina’s wel aan relevante artiesten en composities koppelen." -#: ../root/static/scripts/edit/URLCleanup.js:2993 +#: ../root/static/scripts/edit/URLCleanup.js:2998 msgid "" "This is a redirect link. Please follow {redirect_url|your link} and add the " "link it redirects to instead." msgstr "Dit is een omleidings-URL. Volg {redirect_url|je link} en voer het doeladres in." -#: ../root/static/scripts/edit/URLCleanup.js:3504 +#: ../root/static/scripts/edit/URLCleanup.js:3464 +msgid "Only RYM music videos can be linked to recordings." +msgstr "Alleen RYM-videoclips kunnen aan opnames worden gekoppeld." + +#: ../root/static/scripts/edit/URLCleanup.js:3516 msgid "" "This is a link to the old Resident Advisor domain. Please follow " "{ra_url|your link}, make sure the link it redirects to is still the correct " "one and, if so, add that link instead." msgstr "Dit is een link naar het oude domein van Resident Advisor. Volg {ra_url|je link} controleer of de link waarnaar wordt doorverwezen nog steeds klopt, en voeg vervolgens die link toe." -#: ../root/static/scripts/edit/URLCleanup.js:4092 +#: ../root/static/scripts/edit/URLCleanup.js:4143 msgid "This is not a profile, but a Twitter documentation page." msgstr "Dit is geen openbaar profiel, maar een documentatiepagina van Twitter." -#: ../root/static/scripts/edit/URLCleanup.js:4106 +#: ../root/static/scripts/edit/URLCleanup.js:4157 msgid "Please link to Twitter profiles, not tweets." msgstr "Voeg alleen links naar Twitter-profielen toe, en niet naar afzonderlijke berichten." -#: ../root/static/scripts/edit/URLCleanup.js:4124 +#: ../root/static/scripts/edit/URLCleanup.js:4175 msgid "This site does not allow direct links to their images." msgstr "Deze website staat geen rechtstreekse links naar afbeeldingen toe." -#: ../root/static/scripts/edit/URLCleanup.js:4331 +#: ../root/static/scripts/edit/URLCleanup.js:4372 +msgid "" +"Please link to the “{allowed_url_pattern}” page rather than this " +"“{current_url_pattern}” link." +msgstr "Link de pagina “{allowed_url_pattern}” in plaats van deze link “{current_url_pattern}”." + +#: ../root/static/scripts/edit/URLCleanup.js:4428 msgid "" "There is an unencoded “?” or “#” character in this URL. Please check whether" " it is useless and should be removed, or whether it is an error and the URL " "is misencoded." msgstr "Deze URL bevat een niet-gecodeerde ‘?’ of ‘#’. Controleer de URL om te bepalen of het teken overbodig is en moet worden verwijderd, of dat de URL verkeerd is gecodeerd." -#: ../root/static/scripts/edit/URLCleanup.js:4351 +#: ../root/static/scripts/edit/URLCleanup.js:4448 msgid "" "Please do not link directly to WhoSampled “{unwanted_url_pattern}” pages. " "Link to the appropriate WhoSampled artist, track or album page instead." msgstr "Je kan geen links naar WhoSampled-pagina’s met de vorm “{unwanted_url_pattern}” toevoegen. Gebruik in plaats daarvan de WhoSampled-pagina’s voor artiesten, nummers of uitgaven." -#: ../root/static/scripts/edit/URLCleanup.js:4372 +#: ../root/static/scripts/edit/URLCleanup.js:4469 msgid "Please link WhoSampled “{album_url_pattern}” pages to release groups." msgstr "Je kan WhoSampled-pagina’s met de vorm “{album_url_pattern}” alleen aan uitgavegroepen koppelen." -#: ../root/static/scripts/edit/URLCleanup.js:4390 +#: ../root/static/scripts/edit/URLCleanup.js:4487 msgid "Please link WhoSampled artist pages to artists." msgstr "Je kan WhoSampled-pagina’s voor artiesten alleen aan artiesten toevoegen." -#: ../root/static/scripts/edit/URLCleanup.js:4402 +#: ../root/static/scripts/edit/URLCleanup.js:4499 msgid "Please link WhoSampled track pages to recordings." msgstr "Je kan WhoSampled-pagina’s over nummers alleen aan opnames koppelen." -#: ../root/static/scripts/edit/URLCleanup.js:4469 +#: ../root/static/scripts/edit/URLCleanup.js:4566 msgid "" "Links to specific sections of Wikipedia articles are not allowed. Please " "remove “{fragment}” if still appropriate. See the {url|guidelines}." msgstr "Links naar specifieke delen van Wikipedia-pagina’s zijn niet toegestaan. Verwijder ‘{fragment}’ of verwijder de link als de hele pagina niet relevant is voor dit object. Zie onze {url|richtlijnen}." -#: ../root/static/scripts/edit/URLCleanup.js:4570 +#: ../root/static/scripts/edit/URLCleanup.js:4669 msgid "Only video and playlist links are allowed on releases." msgstr "Alleen links naar video’s en speellijsten mogen aan uitgaven worden toegevoegd." -#: ../root/static/scripts/edit/URLCleanup.js:4606 +#: ../root/static/scripts/edit/URLCleanup.js:4705 msgid "" "Wikipedia normally has no entries for specific releases, so adding Wikipedia" " links to a release is currently blocked. Please add this Wikipedia link to " "the release group instead, if appropriate." msgstr "Wikipedia heeft normaal gesproken geen lemma’s voor specifieke uitgaven, dus het toevoegen van Wikipedia-links aan een uitgave wordt geblokkeerd. Voeg de Wikipedia-link, als hij relevant is, toe aan de uitgavegroep." -#: ../root/static/scripts/edit/URLCleanup.js:4618 +#: ../root/static/scripts/edit/URLCleanup.js:4717 msgid "" "Wikidata normally has no entries for specific releases, so adding Wikidata " "links to a release is currently blocked. Please add this Wikidata link to " "the release group instead, if appropriate." msgstr "Wikidata heeft normaal gesproken geen lemma’s voor specifieke uitgaven, dus het toevoegen van Wikidata-links aan een uitgave wordt geblokkeerd. Voeg de Wikidata-link, als hij relevant is, toe aan de uitgavegroep." -#: ../root/static/scripts/edit/URLCleanup.js:4630 +#: ../root/static/scripts/edit/URLCleanup.js:4729 msgid "" "This is a Bandcamp profile, not a page for a specific release. Even if it " "shows this release right now, that can change when the artist releases " @@ -14599,7 +14606,7 @@ msgid "" "add this profile link to the appropriate artist or label." msgstr "Dit is een Bandcamp-profiel en geen pagina voor een specifieke uitgave. Zelfs als de uitgave hier nu wordt weergegeven, kan dit veranderen zodra de artiest een nieuwe uitgeeft. Voeg de juiste pagina voor de uitgave ({album_url_pattern} of {single_url_pattern}) toe. Je kunt dit profiel wel aan de bijbehorende platenmaatschappij of artiest toevoegen." -#: ../root/static/scripts/edit/URLCleanup.js:4658 +#: ../root/static/scripts/edit/URLCleanup.js:4757 msgid "" "This is a Bandcamp profile, not a page for a specific recording. Even if it " "shows a single recording right now, that can change when the artist releases" @@ -14608,12 +14615,12 @@ msgid "" "the appropriate artist or label." msgstr "Dit is een Bandcamp-profiel en geen pagina voor een specifieke opname. Zelfs als de opname hier nu wordt weergegeven, kan dit veranderen zodra de artiest een nieuwe uitgeeft. Voeg de juiste pagina voor de opname ({single_url_pattern}) toe. Je kunt dit profiel wel aan de bijbehorende platenmaatschappij of artiest toevoegen." -#: ../root/static/scripts/edit/URLCleanup.js:4821 +#: ../root/static/scripts/edit/URLCleanup.js:4920 msgid "Some relationship types are missing for this URL." msgstr "Voor deze URL ontbreken bepaalde relatietypes." -#: ../root/static/scripts/edit/URLCleanup.js:4838 -#: ../root/static/scripts/edit/externalLinks.js:743 +#: ../root/static/scripts/edit/URLCleanup.js:4937 +#: ../root/static/scripts/edit/externalLinks.js:767 msgid "This relationship type combination is invalid." msgstr "Deze combinatie van relaties is ongeldig." @@ -14776,49 +14783,93 @@ msgstr "Selecteer een passende relatie voor deze URL." msgid "This relationship already exists." msgstr "De relatie bestaat al." -#: ../root/static/scripts/edit/externalLinks.js:609 +#: ../root/static/scripts/edit/externalLinks.js:607 #: ../root/static/scripts/relationship-editor/common/dialog.js:565 msgid "" "This URL is not allowed for the selected link type, or is incorrectly " "formatted." msgstr "Deze URL is niet toegestaan bij het geselecteerde linktype, of is niet correct opgemaakt." -#: ../root/static/scripts/edit/externalLinks.js:615 +#: ../root/static/scripts/edit/externalLinks.js:612 msgid "This URL is not allowed for the selected link type." msgstr "Deze URL is voor het geselecteerde linktype niet toegestaan." -#: ../root/static/scripts/edit/externalLinks.js:674 +#: ../root/static/scripts/edit/externalLinks.js:618 +msgid "This URL is not allowed for areas." +msgstr "Deze URL is voor gebieden niet toegestaan." + +#: ../root/static/scripts/edit/externalLinks.js:620 +msgid "This URL is not allowed for artists." +msgstr "Deze URL is voor artiesten niet toegestaan." + +#: ../root/static/scripts/edit/externalLinks.js:622 +msgid "This URL is not allowed for events." +msgstr "Deze URL is voor evenementen niet toegestaan." + +#: ../root/static/scripts/edit/externalLinks.js:624 +msgid "This URL is not allowed for instruments." +msgstr "Deze URL is voor instrumenten niet toegestaan." + +#: ../root/static/scripts/edit/externalLinks.js:626 +msgid "This URL is not allowed for labels." +msgstr "Deze URL is voor platenmaatschappijen niet toegestaan." + +#: ../root/static/scripts/edit/externalLinks.js:628 +msgid "This URL is not allowed for places." +msgstr "Deze URL is voor plaatsen niet toegestaan." + +#: ../root/static/scripts/edit/externalLinks.js:630 +msgid "This URL is not allowed for recordings." +msgstr "Deze URL is voor opnames niet toegestaan." + +#: ../root/static/scripts/edit/externalLinks.js:632 +msgid "This URL is not allowed for releases." +msgstr "Deze URL is voor uitgaven niet toegestaan." + +#: ../root/static/scripts/edit/externalLinks.js:634 +msgid "This URL is not allowed for release groups." +msgstr "Deze URL is voor uitgavegroepen niet toegestaan." + +#: ../root/static/scripts/edit/externalLinks.js:637 +msgid "This URL is not allowed for series." +msgstr "Deze URL is voor series niet toegestaan." + +#: ../root/static/scripts/edit/externalLinks.js:639 +msgid "This URL is not allowed for works." +msgstr "Deze URL is voor composities niet toegestaan." + +#: ../root/static/scripts/edit/externalLinks.js:698 msgid "" "Note: This link already exists at position #{position}. To merge, press " "enter or select a type." msgstr "Opmerking: deze link bestaat al bij de positie #{position}. Om hem samen te voegen, druk je op enter of selecteer je een type." -#: ../root/static/scripts/edit/externalLinks.js:861 +#: ../root/static/scripts/edit/externalLinks.js:885 #: ../root/static/scripts/relationship-editor/common/dialog.js:418 msgid "{description} ({url|more documentation})" msgstr "{description} ({url|meer documentatie})" -#: ../root/static/scripts/edit/externalLinks.js:959 +#: ../root/static/scripts/edit/externalLinks.js:930 +msgid "Remove Relationship" +msgstr "Relatie verwijderen" + +#: ../root/static/scripts/edit/externalLinks.js:996 msgid "video" msgstr "video" -#: ../root/static/scripts/edit/externalLinks.js:990 -msgid "Remove Relationship" -msgstr "Relatie verwijderen" +#: ../root/static/scripts/edit/externalLinks.js:1091 +msgid "Remove Link" +msgstr "Website verwijderen" -#: ../root/static/scripts/edit/externalLinks.js:1076 +#: ../root/static/scripts/edit/externalLinks.js:1120 msgid "Add link" msgstr "Link toevoegen" -#: ../root/static/scripts/edit/externalLinks.js:1079 +#: ../root/static/scripts/edit/externalLinks.js:1123 msgid "Add another link" msgstr "Nog een link toevoegen" -#: ../root/static/scripts/edit/externalLinks.js:1131 -msgid "Remove Link" -msgstr "Website verwijderen" - -#: ../root/static/scripts/edit/externalLinks.js:1180 +#: ../root/static/scripts/edit/externalLinks.js:1205 msgid "Add another relationship" msgstr "Nog een relatie toevoegen" @@ -15545,48 +15596,48 @@ msgstr "Als je niet wil dat onze beheerders contact met je opnemen over deze mel #: ../root/user/UserCollections.js:40 msgid "Area Collections" -msgstr "Collecties met gebieden" +msgstr "Collecties van gebieden" #: ../root/user/UserCollections.js:41 msgid "Artist Collections" -msgstr "Collecties met artiesten" +msgstr "Collecties van artiesten" #: ../root/user/UserCollections.js:42 msgid "Event Collections" -msgstr "Collecties met evenementen" +msgstr "Collecties van evenementen" #: ../root/user/UserCollections.js:43 msgid "Instrument Collections" -msgstr "Collecties met instrumenten" +msgstr "Collecties van instrumenten" #: ../root/user/UserCollections.js:44 msgid "Label Collections" -msgstr "Collecties met platenmaatschappijen" +msgstr "Collecties van platenmaatschappijen" #: ../root/user/UserCollections.js:45 msgid "Place Collections" -msgstr "Collecties met plaatsen" +msgstr "Collecties van plaatsen" #: ../root/user/UserCollections.js:46 msgid "Recording Collections" -msgstr "Collecties met opnames" +msgstr "Collecties van opnames" #: ../root/user/UserCollections.js:47 msgid "Release Collections" -msgstr "Collecties met uitgaven." +msgstr "Collecties van uitgaven." #: ../root/user/UserCollections.js:48 msgid "Release Group Collections" -msgstr "Collecties met uitgavegroepen" +msgstr "Collecties van uitgavegroepen" #: ../root/user/UserCollections.js:49 msgctxt "plural" msgid "Series Collections" -msgstr "Collecties met series" +msgstr "Collecties van series" #: ../root/user/UserCollections.js:50 msgid "Work Collections" -msgstr "Collecties met composities" +msgstr "Collecties van composities" #: ../root/user/UserCollections.js:62 msgid "{collaborator_number} (including you)" @@ -16030,11 +16081,11 @@ msgstr "Deze bewerking is niet doorgevoerd omdat het gegevens van een hoge kwali msgid "This edit was cancelled." msgstr "Deze bewerking is geannuleerd." -#: ../root/utility/tableColumns.js:741 +#: ../root/utility/tableColumns.js:743 msgid "AcoustIDs" msgstr "AcoustID’s" -#: ../root/utility/tableColumns.js:827 +#: ../root/utility/tableColumns.js:829 msgid "Subscribed" msgstr "Geabonneerd" diff --git a/po/mb_server.pot b/po/mb_server.pot index ff99297b7d6..3f6f24f7b2b 100644 --- a/po/mb_server.pot +++ b/po/mb_server.pot @@ -10,7 +10,7 @@ msgstr "" "#-#-#-#-# mb_server.pot (PACKAGE VERSION) #-#-#-#-#\n" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-09-20 12:21+0300\n" +"POT-Creation-Date: 2021-10-04 16:53+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -74,7 +74,7 @@ msgstr "" #: ../root/edit/details/historic/AddRelease.js:118 #: ../root/recording/RecordingIndex.js:50 #: ../root/static/scripts/release/components/MediumTable.js:218 -#: ../root/utility/tableColumns.js:537 +#: ../root/utility/tableColumns.js:539 msgid "#" msgstr "" @@ -130,26 +130,13 @@ msgstr "" msgid "(was medium {position}: {name} on release {release})" msgstr "" -#: ../root/edit/details/merge_releases.tt:6 -#: ../root/components/ReleaseLanguageScript.js:24 -#: ../root/components/ReleaseLanguageScript.js:30 -#: ../root/components/list/ReleaseList.js:100 ../root/release/CoverArt.js:92 -#: ../root/release_group/ReleaseGroupIndex.js:90 -#: ../root/search/components/ReleaseResults.js:55 -#: ../root/static/scripts/common/components/ReleaseEvents.js:55 -#: ../root/static/scripts/common/components/ReleaseEvents.js:72 -#: ../root/static/scripts/release-editor/duplicates.js:145 -msgctxt "missing data" -msgid "-" -msgstr "" - #: ../root/cdtoc/attach_artist_releases.tt:16 #: ../root/cdtoc/attach_filter_release.tt:30 ../root/cdtoc/list.tt:10 -#: ../root/edit/details/merge_releases.tt:23 ../root/release/merge.tt:16 +#: ../root/release/merge.tt:16 ../root/edit/details/MergeReleases.js:256 #: ../root/recording/RecordingIndex.js:57 #: ../root/release_group/ReleaseGroupIndex.js:159 #: ../root/search/components/ReleaseResults.js:103 -#: ../root/utility/tableColumns.js:480 ../root/utility/tableColumns.js:488 +#: ../root/utility/tableColumns.js:482 ../root/utility/tableColumns.js:490 msgctxt "and" msgid "/" msgstr "" @@ -426,10 +413,6 @@ msgstr "" msgid "All of these relationships." msgstr "" -#: ../root/edit/details/merge_releases.tt:141 -msgid "All recordings for these releases are already merged." -msgstr "" - #: ../root/release/edit/recordings.tt:3 msgid "" "All tracks require an associated recording. Click “Edit” to select a " @@ -494,11 +477,6 @@ msgstr "" msgid "Annotations support a limited set of wiki formatting options:" msgstr "" -#: ../root/edit/details/merge_releases.tt:149 -#: ../lib/MusicBrainz/Server/Form/Merge/Release.pm:50 -msgid "Append mediums to target release" -msgstr "" - #: ../root/edit/search_macros.tt:417 msgid "Applied Edit Count of Editor" msgstr "" @@ -605,8 +583,7 @@ msgstr "" #: ../root/cdstub/browse.tt:9 ../root/cdstub/cdstub.tt:7 #: ../root/cdtoc/attach_confirm.tt:13 ../root/cdtoc/attach_filter_release.tt:29 #: ../root/cdtoc/list.tt:8 ../root/cdtoc/lookup.tt:41 -#: ../root/components/common-macros.tt:569 -#: ../root/edit/details/merge_releases.tt:20 ../root/edit/search_macros.tt:417 +#: ../root/components/common-macros.tt:569 ../root/edit/search_macros.tt:417 #: ../root/release/edit/tracklist.tt:163 ../root/release/edit/tracklist.tt:412 #: ../root/release/merge.tt:13 ../root/watch/list.tt:16 #: ../lib/MusicBrainz/Server/Edit/Artist.pm:7 @@ -626,6 +603,7 @@ msgstr "" #: ../root/edit/details/EditRecording.js:86 #: ../root/edit/details/EditRelease.js:83 #: ../root/edit/details/EditReleaseGroup.js:101 +#: ../root/edit/details/MergeReleases.js:253 #: ../root/edit/details/historic/AddRelease.js:68 #: ../root/edit/details/historic/AddRelease.js:120 #: ../root/edit/details/historic/AddTrackKV.js:55 @@ -698,10 +676,10 @@ msgstr "" #: ../root/report/components/EventList.js:66 #: ../root/search/components/EventResults.js:70 #: ../root/search/components/WorkResults.js:52 -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:895 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:455 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:896 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:456 #: ../root/static/scripts/common/utility/formatEntityTypeName.js:15 -#: ../root/tag/TagLayout.js:25 ../root/utility/tableColumns.js:854 +#: ../root/tag/TagLayout.js:25 ../root/utility/tableColumns.js:856 msgid "Artists" msgstr "" @@ -758,14 +736,14 @@ msgstr "" #: ../root/cdtoc/attach_artist_releases.tt:19 #: ../root/cdtoc/attach_filter_release.tt:33 ../root/cdtoc/list.tt:13 -#: ../root/cdtoc/lookup.tt:46 ../root/edit/details/merge_releases.tt:26 -#: ../root/release/edit/duplicates.tt:17 ../root/release/merge.tt:19 -#: ../root/components/list/ReleaseList.js:128 +#: ../root/cdtoc/lookup.tt:46 ../root/release/edit/duplicates.tt:17 +#: ../root/release/merge.tt:19 ../root/components/list/ReleaseList.js:128 #: ../root/edit/details/AddRelease.js:129 #: ../root/edit/details/EditBarcodes.js:58 #: ../root/edit/details/EditBarcodes.js:64 #: ../root/edit/details/EditRelease.js:167 #: ../root/edit/details/EditReleaseLabel.js:138 +#: ../root/edit/details/MergeReleases.js:259 #: ../root/edit/details/historic/AddRelease.js:155 #: ../root/edit/details/historic/EditReleaseEvents.js:138 #: ../root/otherlookup/OtherLookupForm.js:64 @@ -991,12 +969,12 @@ msgstr "" #: ../root/cdtoc/attach_artist_releases.tt:18 #: ../root/cdtoc/attach_filter_release.tt:32 ../root/cdtoc/list.tt:12 -#: ../root/cdtoc/lookup.tt:45 ../root/edit/details/merge_releases.tt:25 -#: ../root/release/edit/duplicates.tt:16 ../root/release/merge.tt:18 +#: ../root/cdtoc/lookup.tt:45 ../root/release/edit/duplicates.tt:16 +#: ../root/release/merge.tt:18 ../root/edit/details/MergeReleases.js:258 #: ../root/recording/RecordingIndex.js:59 #: ../root/release_group/ReleaseGroupIndex.js:161 #: ../root/search/components/ReleaseResults.js:105 -#: ../root/utility/tableColumns.js:456 ../root/utility/tableColumns.js:461 +#: ../root/utility/tableColumns.js:458 ../root/utility/tableColumns.js:463 msgid "Catalog#" msgstr "" @@ -1156,16 +1134,16 @@ msgstr "" #: ../root/cdtoc/attach_artist_releases.tt:16 #: ../root/cdtoc/attach_filter_release.tt:30 ../root/cdtoc/list.tt:10 -#: ../root/cdtoc/lookup.tt:43 ../root/edit/details/merge_releases.tt:23 -#: ../root/release/edit/duplicates.tt:14 ../root/release/merge.tt:16 -#: ../root/edit/details/EditReleaseLabel.js:127 +#: ../root/cdtoc/lookup.tt:43 ../root/release/edit/duplicates.tt:14 +#: ../root/release/merge.tt:16 ../root/edit/details/EditReleaseLabel.js:127 +#: ../root/edit/details/MergeReleases.js:256 #: ../root/edit/details/historic/AddRelease.js:152 #: ../root/edit/details/historic/EditReleaseEvents.js:135 #: ../root/recording/RecordingIndex.js:57 #: ../root/release_group/ReleaseGroupIndex.js:159 #: ../root/search/components/ReleaseResults.js:103 #: ../root/static/scripts/common/components/FilterForm.js:110 -#: ../root/utility/tableColumns.js:476 ../root/utility/tableColumns.js:488 +#: ../root/utility/tableColumns.js:478 ../root/utility/tableColumns.js:490 msgid "Country" msgstr "" @@ -1239,13 +1217,14 @@ msgstr "" #: ../root/annotation/history.tt:12 ../root/cdtoc/attach_artist_releases.tt:16 #: ../root/cdtoc/attach_filter_release.tt:30 ../root/cdtoc/list.tt:10 -#: ../root/cdtoc/lookup.tt:42 ../root/edit/details/merge_releases.tt:23 -#: ../root/release/edit/duplicates.tt:13 ../root/release/merge.tt:16 +#: ../root/cdtoc/lookup.tt:42 ../root/release/edit/duplicates.tt:13 +#: ../root/release/merge.tt:16 #: ../root/admin/statistics-events/DeleteStatisticsEvent.js:31 #: ../root/admin/statistics-events/StatisticsEventEditForm.js:35 #: ../root/admin/statistics-events/StatisticsEventIndex.js:30 #: ../root/components/RelationshipsTable.js:316 #: ../root/edit/details/EditReleaseLabel.js:119 +#: ../root/edit/details/MergeReleases.js:256 #: ../root/edit/details/historic/AddRelease.js:151 #: ../root/edit/details/historic/EditReleaseEvents.js:134 #: ../root/elections/ElectionVotes.js:26 ../root/recording/RecordingIndex.js:57 @@ -1253,8 +1232,8 @@ msgstr "" #: ../root/search/components/EventResults.js:67 #: ../root/search/components/ReleaseResults.js:103 #: ../root/static/scripts/common/components/FilterForm.js:129 -#: ../root/utility/tableColumns.js:255 ../root/utility/tableColumns.js:260 -#: ../root/utility/tableColumns.js:482 ../root/utility/tableColumns.js:488 +#: ../root/utility/tableColumns.js:257 ../root/utility/tableColumns.js:262 +#: ../root/utility/tableColumns.js:484 ../root/utility/tableColumns.js:490 msgid "Date" msgstr "" @@ -1322,7 +1301,7 @@ msgstr "" #: ../root/relationship/linktype/RelationshipTypeIndex.js:96 #: ../root/search/components/InstrumentResults.js:52 #: ../root/static/scripts/collection/components/CollectionEditForm.js:89 -#: ../root/utility/tableColumns.js:636 +#: ../root/utility/tableColumns.js:638 msgid "Description" msgstr "" @@ -1357,21 +1336,21 @@ msgstr "" #: ../root/edit/details/AddReleaseGroup.js:71 #: ../root/edit/details/AddSeries.js:51 #: ../root/edit/details/AddStandaloneRecording.js:67 -#: ../root/edit/details/AddWork.js:57 ../root/edit/details/EditArea.js:84 +#: ../root/edit/details/AddWork.js:59 ../root/edit/details/EditArea.js:84 #: ../root/edit/details/EditArtist.js:100 ../root/edit/details/EditEvent.js:64 #: ../root/edit/details/EditInstrument.js:64 #: ../root/edit/details/EditLabel.js:84 ../root/edit/details/EditPlace.js:70 #: ../root/edit/details/EditRecording.js:65 #: ../root/edit/details/EditRelease.js:111 #: ../root/edit/details/EditReleaseGroup.js:64 -#: ../root/edit/details/EditSeries.js:61 ../root/edit/details/EditWork.js:73 +#: ../root/edit/details/EditSeries.js:61 ../root/edit/details/EditWork.js:75 #: ../root/genre/GenreEditForm.js:38 msgid "Disambiguation" msgstr "" #: ../root/release/discids.tt:8 ../root/edit/details/SetTrackLengths.js:66 #: ../root/otherlookup/OtherLookupForm.js:114 -#: ../root/utility/tableColumns.js:179 ../root/utility/tableColumns.js:184 +#: ../root/utility/tableColumns.js:181 ../root/utility/tableColumns.js:186 msgid "Disc ID" msgstr "" @@ -1610,7 +1589,7 @@ msgstr "" #: ../root/search/components/ArtistResults.js:57 #: ../root/search/components/LabelResults.js:69 #: ../root/search/components/PlaceResults.js:66 -#: ../root/utility/tableColumns.js:273 ../root/utility/tableColumns.js:278 +#: ../root/utility/tableColumns.js:275 ../root/utility/tableColumns.js:280 msgid "End" msgstr "" @@ -1805,11 +1784,11 @@ msgstr "" msgid "For more information, check the {doc_doc|documentation}." msgstr "" -#: ../root/cdtoc/list.tt:9 ../root/edit/details/merge_releases.tt:21 -#: ../root/release/edit/duplicates.tt:11 ../root/release/merge.tt:14 -#: ../root/components/list/ReleaseList.js:93 +#: ../root/cdtoc/list.tt:9 ../root/release/edit/duplicates.tt:11 +#: ../root/release/merge.tt:14 ../root/components/list/ReleaseList.js:93 #: ../root/edit/details/EditMedium.js:530 #: ../root/edit/details/EditReleaseLabel.js:145 +#: ../root/edit/details/MergeReleases.js:254 #: ../root/edit/details/historic/AddRelease.js:156 #: ../root/edit/details/historic/EditReleaseEvents.js:139 #: ../root/release_group/ReleaseGroupIndex.js:157 @@ -1980,7 +1959,7 @@ msgstr "" #: ../root/components/common-macros.tt:602 #: ../lib/MusicBrainz/Server/Controller/Edit.pm:240 -#: ../root/static/scripts/common/constants.js:279 +#: ../root/static/scripts/common/constants.js:281 msgid "High" msgstr "" @@ -2119,12 +2098,12 @@ msgstr "" msgid "ISRCs:" msgstr "" -#: ../root/work/edit_form.tt:16 ../root/edit/details/AddWork.js:63 -#: ../root/edit/details/EditWork.js:80 ../root/edit/details/RemoveIswc.js:36 +#: ../root/work/edit_form.tt:16 ../root/edit/details/AddWork.js:65 +#: ../root/edit/details/EditWork.js:82 ../root/edit/details/RemoveIswc.js:36 #: ../root/otherlookup/OtherLookupForm.js:79 #: ../root/report/IswcsWithManyWorks.js:48 #: ../root/search/components/WorkResults.js:53 -#: ../root/utility/tableColumns.js:762 +#: ../root/utility/tableColumns.js:764 msgid "ISWC" msgstr "" @@ -2275,22 +2254,6 @@ msgstr "" msgid "Instruments" msgstr "" -#: ../root/edit/details/merge_releases.tt:78 -#: ../root/edit/details/merge_releases.tt:83 -#: ../root/edit/details/merge_releases.tt:92 -#: ../root/edit/details/merge_releases.tt:109 -#: ../root/edit/details/MergeAreas.js:35 -#: ../root/edit/details/MergeArtists.js:37 -#: ../root/edit/details/MergeEvents.js:40 -#: ../root/edit/details/MergeInstruments.js:35 -#: ../root/edit/details/MergeLabels.js:35 -#: ../root/edit/details/MergePlaces.js:35 -#: ../root/edit/details/MergeRecordings.js:40 -#: ../root/edit/details/MergeReleaseGroups.js:35 -#: ../root/edit/details/MergeSeries.js:35 ../root/edit/details/MergeWorks.js:35 -msgid "Into:" -msgstr "" - #: ../root/cdstub/error.tt:5 msgid "Invalid Disc ID" msgstr "" @@ -2331,13 +2294,13 @@ msgstr "" #: ../root/cdtoc/attach_artist_releases.tt:17 #: ../root/cdtoc/attach_filter_release.tt:31 ../root/cdtoc/list.tt:11 #: ../root/cdtoc/lookup.tt:44 ../root/components/common-macros.tt:569 -#: ../root/edit/details/merge_releases.tt:24 ../root/edit/search_macros.tt:417 -#: ../root/release/edit/duplicates.tt:15 ../root/release/merge.tt:17 -#: ../lib/MusicBrainz/Server/Edit/Label.pm:7 +#: ../root/edit/search_macros.tt:417 ../root/release/edit/duplicates.tt:15 +#: ../root/release/merge.tt:17 ../lib/MusicBrainz/Server/Edit/Label.pm:7 #: ../lib/MusicBrainz/Server/Form/Search/Search.pm:40 #: ../root/components/list/LabelList.js:54 ../root/edit/details/AddLabel.js:51 #: ../root/edit/details/EditLabel.js:62 #: ../root/edit/details/EditReleaseLabel.js:69 +#: ../root/edit/details/MergeReleases.js:257 #: ../root/edit/details/historic/AddRelease.js:153 #: ../root/edit/details/historic/EditReleaseEvents.js:136 #: ../root/label/LabelHeader.js:27 ../root/layout/components/Search.js:39 @@ -2350,8 +2313,8 @@ msgstr "" #: ../root/search/components/SearchForm.js:39 #: ../root/static/scripts/common/constants.js:23 #: ../root/static/scripts/common/utility/formatEntityTypeName.js:56 -#: ../root/user/UserProfile.js:46 ../root/utility/tableColumns.js:503 -#: ../root/utility/tableColumns.js:508 +#: ../root/user/UserProfile.js:46 ../root/utility/tableColumns.js:505 +#: ../root/utility/tableColumns.js:510 msgid "Label" msgstr "" @@ -2454,7 +2417,7 @@ msgstr "" #: ../root/static/scripts/common/components/FingerprintTable.js:87 #: ../root/static/scripts/edit/components/AddEntityDialog.js:101 #: ../root/static/scripts/release/components/MediumTable.js:118 -#: ../root/utility/tableColumns.js:674 +#: ../root/utility/tableColumns.js:676 msgid "Loading..." msgstr "" @@ -2494,15 +2457,15 @@ msgstr "" #: ../root/components/common-macros.tt:602 #: ../lib/MusicBrainz/Server/Controller/Edit.pm:240 -#: ../root/static/scripts/common/constants.js:276 +#: ../root/static/scripts/common/constants.js:278 msgid "Low" msgstr "" -#: ../root/release/edit_relationships.tt:172 ../root/edit/details/AddWork.js:81 -#: ../root/edit/details/EditWork.js:98 +#: ../root/release/edit_relationships.tt:172 ../root/edit/details/AddWork.js:83 +#: ../root/edit/details/EditWork.js:100 #: ../root/layout/components/sidebar/WorkSidebar.js:67 #: ../root/search/components/WorkResults.js:55 -#: ../root/static/scripts/work.js:312 ../root/utility/tableColumns.js:873 +#: ../root/static/scripts/work.js:312 ../root/utility/tableColumns.js:875 msgid "Lyrics Languages" msgstr "" @@ -2557,22 +2520,6 @@ msgstr "" msgid "Medium track lengths" msgstr "" -#: ../root/edit/details/merge_releases.tt:44 -msgid "Medium {position} is now medium {new_position}" -msgstr "" - -#: ../root/edit/details/merge_releases.tt:44 -msgid "Medium {position} is now medium {new_position}: {new_name}" -msgstr "" - -#: ../root/edit/details/merge_releases.tt:44 -msgid "Medium {position}: {name} is now medium {new_position}" -msgstr "" - -#: ../root/edit/details/merge_releases.tt:44 -msgid "Medium {position}: {name} is now medium {new_position}: {new_name}" -msgstr "" - #: ../root/layout/merge-helper.tt:30 #: ../root/layout/components/MergeHelper.js:71 #: ../root/layout/components/sidebar/MergeLink.js:31 @@ -2587,12 +2534,7 @@ msgstr "" msgid "Merge Releases" msgstr "" -#: ../root/edit/details/merge_releases.tt:149 -#: ../lib/MusicBrainz/Server/Form/Merge/Release.pm:51 -msgid "Merge mediums and recordings" -msgstr "" - -#: ../root/edit/details/merge_releases.tt:147 ../root/release/merge.tt:55 +#: ../root/release/merge.tt:55 ../root/edit/details/MergeReleases.js:358 msgid "Merge strategy:" msgstr "" @@ -2680,7 +2622,7 @@ msgstr "" #: ../root/edit/details/AddReleaseGroup.js:56 #: ../root/edit/details/AddSeries.js:46 #: ../root/edit/details/AddStandaloneRecording.js:56 -#: ../root/edit/details/AddWork.js:52 ../root/edit/details/EditArea.js:70 +#: ../root/edit/details/AddWork.js:54 ../root/edit/details/EditArea.js:70 #: ../root/edit/details/EditArtist.js:86 ../root/edit/details/EditEvent.js:57 #: ../root/edit/details/EditInstrument.js:57 #: ../root/edit/details/EditLabel.js:68 ../root/edit/details/EditMedium.js:522 @@ -2690,7 +2632,7 @@ msgstr "" #: ../root/edit/details/EditRelationshipAttribute.js:76 #: ../root/edit/details/EditRelease.js:75 #: ../root/edit/details/EditReleaseGroup.js:57 -#: ../root/edit/details/EditSeries.js:54 ../root/edit/details/EditWork.js:66 +#: ../root/edit/details/EditSeries.js:54 ../root/edit/details/EditWork.js:68 #: ../root/edit/details/RemoveRelationshipAttribute.js:41 #: ../root/edit/details/RemoveRelationshipType.js:60 #: ../root/edit/details/historic/AddRelease.js:63 @@ -2813,7 +2755,7 @@ msgid "No releases have cover art marked as \"Front\", cannot set cover art." msgstr "" #: ../root/release/edit/tracklist.tt:140 ../root/admin/IpLookup.js:35 -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:457 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:458 #: ../root/static/scripts/common/components/Autocomplete2/constants.js:90 msgid "No results" msgstr "" @@ -2858,19 +2800,11 @@ msgstr "" #: ../root/components/common-macros.tt:602 #: ../lib/MusicBrainz/Server/Controller/Edit.pm:240 -#: ../root/static/scripts/common/constants.js:277 -#: ../root/static/scripts/common/constants.js:278 +#: ../root/static/scripts/common/constants.js:279 +#: ../root/static/scripts/common/constants.js:280 msgid "Normal" msgstr "" -#: ../root/edit/details/merge_releases.tt:158 -#: ../root/edit/details/EditRelease.js:182 -#: ../root/edit/details/SetTrackLengths.js:89 -#: ../root/edit/details/historic/MergeReleases.js:69 -#: ../root/user/ReportUser.js:116 -msgid "Note" -msgstr "" - #: ../root/release/edit/information.tt:279 msgid "" "Note! If you do not know the month or day of release, please leave them " @@ -3191,13 +3125,13 @@ msgstr "" msgid "Recent Notes Left on Your Edits" msgstr "" -#: ../root/components/common-macros.tt:569 -#: ../root/edit/details/merge_releases.tt:108 ../root/edit/search_macros.tt:417 +#: ../root/components/common-macros.tt:569 ../root/edit/search_macros.tt:417 #: ../root/release/edit_relationships.tt:53 #: ../lib/MusicBrainz/Server/Edit/Recording.pm:7 #: ../lib/MusicBrainz/Server/Form/Search/Search.pm:38 #: ../root/edit/details/AddStandaloneRecording.js:46 #: ../root/edit/details/EditRecording.js:51 +#: ../root/edit/details/MergeReleases.js:322 #: ../root/edit/details/RemoveIsrc.js:40 #: ../root/edit/details/historic/EditTrack.js:37 #: ../root/layout/components/Search.js:30 @@ -3215,10 +3149,6 @@ msgstr "" msgid "Recording Details" msgstr "" -#: ../root/edit/details/merge_releases.tt:104 -msgid "Recording Merges" -msgstr "" - #: ../root/user/ratings.tt:2 ../root/user/ratings_summary.tt:3 msgid "Recording ratings" msgstr "" @@ -3278,7 +3208,7 @@ msgstr "" #: ../root/edit/search_macros.tt:417 #: ../root/edit/details/AddRelationshipType.js:78 #: ../root/relationship/linktype/RelationshipTypeIndex.js:41 -#: ../root/utility/tableColumns.js:804 +#: ../root/utility/tableColumns.js:806 msgid "Relationship Type" msgstr "" @@ -3305,8 +3235,7 @@ msgstr "" #: ../root/cdtoc/attach_artist_releases.tt:15 #: ../root/cdtoc/attach_filter_release.tt:28 ../root/cdtoc/lookup.tt:39 -#: ../root/components/common-macros.tt:569 -#: ../root/edit/details/merge_releases.tt:19 ../root/edit/search_macros.tt:417 +#: ../root/components/common-macros.tt:569 ../root/edit/search_macros.tt:417 #: ../root/release/edit/duplicates.tt:10 ../root/release/merge.tt:12 #: ../lib/MusicBrainz/Server/Edit/Release.pm:8 #: ../lib/MusicBrainz/Server/Form/Search/Search.pm:37 @@ -3317,6 +3246,7 @@ msgstr "" #: ../root/edit/details/EditBarcodes.js:51 #: ../root/edit/details/EditCoverArt.js:51 #: ../root/edit/details/EditReleaseLabel.js:60 +#: ../root/edit/details/MergeReleases.js:252 #: ../root/edit/details/RemoveCoverArt.js:35 #: ../root/edit/details/ReorderCoverArt.js:45 #: ../root/edit/details/ReorderMediums.js:39 @@ -3553,7 +3483,7 @@ msgstr "" #: ../root/components/common-macros.tt:878 #: ../root/components/common-macros.tt:886 #: ../root/components/RemoveFromMergeTableCell.js:39 -#: ../root/utility/tableColumns.js:781 ../root/utility/tableColumns.js:791 +#: ../root/utility/tableColumns.js:783 ../root/utility/tableColumns.js:793 msgid "Remove from merge" msgstr "" @@ -3950,7 +3880,7 @@ msgstr "" #: ../root/search/components/RecordingResults.js:134 #: ../root/search/components/ReleaseResults.js:112 #: ../root/static/scripts/common/components/TaggerIcon.js:40 -#: ../root/utility/tableColumns.js:834 +#: ../root/utility/tableColumns.js:836 msgid "Tagger" msgstr "" @@ -3976,12 +3906,6 @@ msgstr "" msgid "The catalog number you have entered looks like an Amazon ASIN." msgstr "" -#: ../root/edit/details/merge_releases.tt:159 -msgid "" -"The data in this edit originally came from an older version of this edit, " -"and may not display correctly" -msgstr "" - #: ../root/layout.tt:90 ../root/layout/index.js:275 msgid "" "The data you have submitted does not make any changes to the data already " @@ -4164,12 +4088,6 @@ msgstr "" msgid "This disc has a hidden pregap track before track 1" msgstr "" -#: ../root/edit/details/merge_releases.tt:133 -msgid "" -"This edit does not store recording merge information and is closed, so no " -"recording merge information can be shown." -msgstr "" - #: ../root/cdtoc/set_durations.tt:31 msgid "This edit would only make subsecond changes to track lengths." msgstr "" @@ -4301,8 +4219,8 @@ msgid "This recording cannot be removed because it is still used on releases." msgstr "" #: ../root/components/common-macros.tt:302 -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:696 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:286 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:697 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:287 #: ../root/static/scripts/common/components/EntityLink.js:289 msgid "This recording is a video" msgstr "" @@ -4334,10 +4252,6 @@ msgid "" "relationships." msgstr "" -#: ../root/edit/details/merge_releases.tt:35 -msgid "This release has no media to merge." -msgstr "" - #: ../root/release/discids.tt:58 msgid "This release has no mediums that can have disc IDs." msgstr "" @@ -4472,14 +4386,10 @@ msgid "Total tracks:" msgstr "" #: ../root/cdtoc/info.tt:31 ../root/search/components/RecordingResults.js:135 -#: ../root/taglookup/Form.js:41 ../root/utility/tableColumns.js:846 +#: ../root/taglookup/Form.js:41 ../root/utility/tableColumns.js:848 msgid "Track" msgstr "" -#: ../root/edit/details/merge_releases.tt:107 -msgid "Track #" -msgstr "" - #: ../root/release/edit/tracklist.tt:483 #: ../root/static/scripts/release-editor/dialogs.js:40 msgid "Track Parser" @@ -4514,11 +4424,11 @@ msgstr "" msgid "Tracklist" msgstr "" -#: ../root/edit/details/merge_releases.tt:22 ../root/release/discids.tt:9 -#: ../root/release/edit/duplicates.tt:12 ../root/release/merge.tt:15 -#: ../root/artist_credit/ArtistCreditIndex.js:128 +#: ../root/release/discids.tt:9 ../root/release/edit/duplicates.tt:12 +#: ../root/release/merge.tt:15 ../root/artist_credit/ArtistCreditIndex.js:128 #: ../root/artist_credit/ArtistCreditLayout.js:31 #: ../root/components/list/ReleaseList.js:103 +#: ../root/edit/details/MergeReleases.js:255 #: ../root/edit/details/historic/AddRelease.js:113 #: ../root/release_group/ReleaseGroupIndex.js:158 #: ../root/search/components/CDStubResults.js:49 @@ -4561,7 +4471,7 @@ msgstr "" #: ../root/edit/details/AddLabel.js:107 ../root/edit/details/AddPlace.js:65 #: ../root/edit/details/AddReleaseGroup.js:80 #: ../root/edit/details/AddRemoveAlias.js:101 -#: ../root/edit/details/AddSeries.js:57 ../root/edit/details/AddWork.js:69 +#: ../root/edit/details/AddSeries.js:57 ../root/edit/details/AddWork.js:71 #: ../root/edit/details/EditAlias.js:123 ../root/edit/details/EditArea.js:91 #: ../root/edit/details/EditArtist.js:107 ../root/edit/details/EditEvent.js:78 #: ../root/edit/details/EditInstrument.js:71 @@ -4592,12 +4502,12 @@ msgstr "" #: ../root/static/scripts/account/components/ApplicationForm.js:87 #: ../root/static/scripts/alias/AliasEditForm.js:329 #: ../root/static/scripts/collection/components/CollectionEditForm.js:83 -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:874 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:447 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:875 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:448 #: ../root/static/scripts/common/components/FilterForm.js:63 -#: ../root/static/scripts/edit/externalLinks.js:904 -#: ../root/static/scripts/edit/externalLinks.js:1157 -#: ../root/utility/tableColumns.js:613 ../root/utility/tableColumns.js:618 +#: ../root/static/scripts/edit/externalLinks.js:952 +#: ../root/static/scripts/edit/externalLinks.js:1192 +#: ../root/utility/tableColumns.js:615 ../root/utility/tableColumns.js:620 msgid "Type" msgstr "" @@ -4905,8 +4815,8 @@ msgstr "" #: ../root/components/common-macros.tt:569 ../root/edit/search_macros.tt:417 #: ../lib/MusicBrainz/Server/Edit/Work.pm:9 #: ../lib/MusicBrainz/Server/Form/Search/Search.pm:39 -#: ../root/components/list/WorkList.js:60 ../root/edit/details/AddWork.js:46 -#: ../root/edit/details/EditWork.js:59 ../root/edit/details/RemoveIswc.js:40 +#: ../root/components/list/WorkList.js:60 ../root/edit/details/AddWork.js:48 +#: ../root/edit/details/EditWork.js:61 ../root/edit/details/RemoveIswc.js:40 #: ../root/layout/components/Search.js:34 #: ../root/report/IswcsWithManyWorks.js:49 #: ../root/report/components/WorkList.js:46 @@ -5166,22 +5076,13 @@ msgid "" "please make sure the artists have been entered correctly." msgstr "" -#: ../root/edit/details/merge_releases.tt:5 -#: ../root/components/list/ReleaseList.js:90 -#: ../root/release_group/ReleaseGroupIndex.js:89 -#: ../root/search/components/ReleaseResults.js:50 -#: ../root/static/scripts/release-editor/duplicates.js:143 -msgid "[missing media]" -msgstr "" - #: ../root/components/common-macros.tt:259 #: ../lib/MusicBrainz/Server/Edit/Relationship/RemoveLinkType.pm:86 #: ../lib/MusicBrainz/Server/Edit/Release/Create.pm:113 -#: ../lib/MusicBrainz/Server/Edit/Work/Create.pm:87 -#: ../lib/MusicBrainz/Server/Edit/Work/Edit.pm:186 #: ../root/edit/details/EditAlias.js:94 #: ../root/edit/details/SetTrackLengths.js:73 #: ../root/static/scripts/common/components/EntityLink.js:41 +#: ../root/static/scripts/common/i18n/localizeLanguageName.js:15 msgid "[removed]" msgstr "" @@ -5323,6 +5224,10 @@ msgstr "" msgid "historical, {begin}-{end}" msgstr "" +#: ../root/edit/search_macros.tt:25 +msgid "in an unspecified order (possibly faster)" +msgstr "" + #: ../root/edit/details/macros.tt:28 ../root/utility/relationshipDateText.js:25 msgid "in {date}" msgstr "" @@ -5476,10 +5381,6 @@ msgid_plural "plus {n} other private collections" msgstr[0] "" msgstr[1] "" -#: ../root/edit/search_macros.tt:25 -msgid "randomly" -msgstr "" - #: ../root/edit/search_macros.tt:25 msgid "recently closed first" msgstr "" @@ -5690,7 +5591,7 @@ msgstr "" #: ../root/components/paginator.tt:19 ../root/components/paginator.tt:31 #: ../root/components/paginator.tt:39 ../root/components/Paginator.js:94 #: ../root/components/Paginator.js:119 ../root/components/Paginator.js:133 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:125 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:126 msgid "…" msgstr "" @@ -6090,14 +5991,6 @@ msgstr "" msgid "There is already a CD stub with this disc ID" msgstr "" -#: ../lib/MusicBrainz/Server/Data/Language.pm:63 -#: ../lib/MusicBrainz/Server/Edit/Work/Create.pm:75 -#: ../lib/MusicBrainz/Server/Edit/Work/Create.pm:85 -#: ../lib/MusicBrainz/Server/Edit/Work/Edit.pm:184 -#: ../lib/MusicBrainz/Server/Form/Utils.pm:48 -msgid "[No lyrics]" -msgstr "" - #: ../lib/MusicBrainz/Server/Data/LinkType.pm:197 #, perl-brace-format msgid "{t0}-{t1} relationships" @@ -6339,7 +6232,7 @@ msgstr "" #: ../lib/MusicBrainz/Server/Edit/Historic/MergeRelease.pm:13 #: ../lib/MusicBrainz/Server/Edit/Historic/MergeReleaseMAC.pm:9 -#: ../lib/MusicBrainz/Server/Edit/Release/Merge.pm:140 +#: ../lib/MusicBrainz/Server/Edit/Release/Merge.pm:141 msgid "Merge releases" msgstr "" @@ -6623,7 +6516,7 @@ msgctxt "medium format" msgid "(unknown)" msgstr "" -#: ../lib/MusicBrainz/Server/Edit/Release/Merge.pm:347 +#: ../lib/MusicBrainz/Server/Edit/Release/Merge.pm:339 #, perl-brace-format msgid "These releases could not be merged: {reason}" msgstr "" @@ -7260,6 +7153,16 @@ msgstr "" msgid "Please pick the entity you want the others merged into." msgstr "" +#: ../lib/MusicBrainz/Server/Form/Merge/Release.pm:50 +#: ../root/edit/details/MergeReleases.js:65 +msgid "Append mediums to target release" +msgstr "" + +#: ../lib/MusicBrainz/Server/Form/Merge/Release.pm:51 +#: ../root/edit/details/MergeReleases.js:66 +msgid "Merge mediums and recordings" +msgstr "" + #: ../lib/MusicBrainz/Server/Form/Merge/Release.pm:62 msgid "Another medium is already in this position" msgstr "" @@ -7307,22 +7210,22 @@ msgid "A fluency level is required." msgstr "" #: ../lib/MusicBrainz/Server/Form/Role/UserProfile.pm:70 -#: ../root/static/scripts/common/constants.js:287 +#: ../root/static/scripts/common/constants.js:289 msgid "Basic" msgstr "" #: ../lib/MusicBrainz/Server/Form/Role/UserProfile.pm:71 -#: ../root/static/scripts/common/constants.js:288 +#: ../root/static/scripts/common/constants.js:290 msgid "Intermediate" msgstr "" #: ../lib/MusicBrainz/Server/Form/Role/UserProfile.pm:72 -#: ../root/static/scripts/common/constants.js:286 +#: ../root/static/scripts/common/constants.js:288 msgid "Advanced" msgstr "" #: ../lib/MusicBrainz/Server/Form/Role/UserProfile.pm:73 -#: ../root/static/scripts/common/constants.js:289 +#: ../root/static/scripts/common/constants.js:291 msgid "Native" msgstr "" @@ -7464,6 +7367,11 @@ msgstr "" msgid "A month" msgstr "" +#: ../lib/MusicBrainz/Server/Form/Utils.pm:48 +#: ../root/static/scripts/common/i18n/localizeLanguageName.js:19 +msgid "[No lyrics]" +msgstr "" + #: ../lib/MusicBrainz/Server/Form/Utils.pm:84 msgctxt "script optgroup" msgid "Frequently used" @@ -7802,7 +7710,7 @@ msgstr "" #: ../root/components/Aliases/AliasTable.js:31 #: ../root/components/Aliases/ArtistCreditList.js:54 #: ../root/static/scripts/common/components/FingerprintTable.js:53 -#: ../root/utility/tableColumns.js:78 +#: ../root/utility/tableColumns.js:80 msgid "Actions" msgstr "" @@ -7934,7 +7842,7 @@ msgstr "" #: ../root/edit/details/AddRelationshipType.js:191 #: ../root/edit/details/RemoveRelationshipType.js:136 #: ../root/relationship/linktype/RelationshipTypeIndex.js:165 -#: ../root/utility/tableColumns.js:626 +#: ../root/utility/tableColumns.js:628 msgid "Attributes" msgstr "" @@ -7955,12 +7863,12 @@ msgstr "" #: ../root/admin/attributes/Language.js:33 #: ../root/admin/attributes/Language.js:36 -#: ../root/edit/details/AddRelease.js:108 ../root/edit/details/AddWork.js:75 +#: ../root/edit/details/AddRelease.js:108 ../root/edit/details/AddWork.js:77 #: ../root/edit/details/EditRelease.js:131 #: ../root/edit/details/historic/AddRelease.js:104 ../root/iswc/Index.js:59 #: ../root/report/IswcsWithManyWorks.js:53 #: ../root/search/components/ReleaseResults.js:107 -#: ../root/utility/tableColumns.js:524 +#: ../root/utility/tableColumns.js:526 msgid "Language" msgstr "" @@ -8877,6 +8785,19 @@ msgstr "" msgid "The provided relationship type ID is not valid." msgstr "" +#: ../root/components/ReleaseLanguageScript.js:24 +#: ../root/components/ReleaseLanguageScript.js:30 +#: ../root/components/list/ReleaseList.js:100 +#: ../root/edit/details/MergeReleases.js:88 ../root/release/CoverArt.js:92 +#: ../root/release_group/ReleaseGroupIndex.js:90 +#: ../root/search/components/ReleaseResults.js:55 +#: ../root/static/scripts/common/components/ReleaseEvents.js:55 +#: ../root/static/scripts/common/components/ReleaseEvents.js:72 +#: ../root/static/scripts/release-editor/duplicates.js:145 +msgctxt "missing data" +msgid "-" +msgstr "" + #: ../root/components/StaticRelationshipsDisplay.js:25 msgid "{start_track}–{end_track}" msgstr "" @@ -9062,6 +8983,14 @@ msgstr "" msgid "Unspecified type" msgstr "" +#: ../root/components/list/ReleaseList.js:90 +#: ../root/edit/details/MergeReleases.js:83 +#: ../root/release_group/ReleaseGroupIndex.js:89 +#: ../root/search/components/ReleaseResults.js:50 +#: ../root/static/scripts/release-editor/duplicates.js:143 +msgid "[missing media]" +msgstr "" + #: ../root/components/list/ReleaseList.js:153 #: ../root/search/components/ReleaseResults.js:109 msgid "Status" @@ -9071,8 +9000,8 @@ msgstr "" #: ../root/report/IswcsWithManyWorks.js:50 #: ../root/report/components/WorkList.js:51 #: ../root/search/components/WorkResults.js:51 -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:894 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:454 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:895 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:455 msgid "Writers" msgstr "" @@ -9190,22 +9119,22 @@ msgid "" msgstr "" #: ../root/edit/components/EditHeader.js:46 -#: ../root/edit/components/EditorTypeInfo.js:28 +#: ../root/edit/components/EditorTypeInfo.js:29 msgid "This user is new to MusicBrainz." msgstr "" #: ../root/edit/components/EditHeader.js:48 -#: ../root/edit/components/EditorTypeInfo.js:30 +#: ../root/edit/components/EditorTypeInfo.js:31 msgid "beginner" msgstr "" #: ../root/edit/components/EditHeader.js:55 -#: ../root/edit/components/EditorTypeInfo.js:38 +#: ../root/edit/components/EditorTypeInfo.js:39 msgid "This user is automated." msgstr "" #: ../root/edit/components/EditHeader.js:56 -#: ../root/edit/components/EditorTypeInfo.js:39 +#: ../root/edit/components/EditorTypeInfo.js:40 msgid "bot" msgstr "" @@ -9510,7 +9439,7 @@ msgstr "" #: ../root/edit/details/AddSeries.js:65 ../root/edit/details/EditSeries.js:79 #: ../root/layout/components/sidebar/SeriesSidebar.js:52 -#: ../root/utility/tableColumns.js:819 +#: ../root/utility/tableColumns.js:821 msgid "Ordering Type" msgstr "" @@ -9596,6 +9525,14 @@ msgstr "" msgid "New Artist" msgstr "" +#: ../root/edit/details/EditRelease.js:182 +#: ../root/edit/details/MergeReleases.js:364 +#: ../root/edit/details/SetTrackLengths.js:89 +#: ../root/edit/details/historic/MergeReleases.js:69 +#: ../root/user/ReportUser.js:116 +msgid "Note" +msgstr "" + #: ../root/edit/details/EditRelease.js:183 msgid "This edit also changed the track artists." msgstr "" @@ -9627,7 +9564,7 @@ msgstr "" msgid "Search for the target URL." msgstr "" -#: ../root/edit/details/EditWork.js:87 +#: ../root/edit/details/EditWork.js:89 msgid "Work type" msgstr "" @@ -9643,10 +9580,70 @@ msgstr "" msgid "Merge:" msgstr "" +#: ../root/edit/details/MergeAreas.js:35 +#: ../root/edit/details/MergeArtists.js:37 +#: ../root/edit/details/MergeEvents.js:40 +#: ../root/edit/details/MergeInstruments.js:35 +#: ../root/edit/details/MergeLabels.js:35 +#: ../root/edit/details/MergePlaces.js:35 +#: ../root/edit/details/MergeRecordings.js:40 +#: ../root/edit/details/MergeReleaseGroups.js:35 +#: ../root/edit/details/MergeReleases.js:288 +#: ../root/edit/details/MergeReleases.js:295 +#: ../root/edit/details/MergeReleases.js:305 +#: ../root/edit/details/MergeReleases.js:323 +#: ../root/edit/details/MergeSeries.js:35 ../root/edit/details/MergeWorks.js:35 +msgid "Into:" +msgstr "" + #: ../root/edit/details/MergeArtists.js:43 msgid "Rename artist and relationship credits" msgstr "" +#: ../root/edit/details/MergeReleases.js:131 +msgid "Medium {position}: {name} is now medium {new_position}: {new_name}" +msgstr "" + +#: ../root/edit/details/MergeReleases.js:142 +msgid "Medium {position}: {name} is now medium {new_position}" +msgstr "" + +#: ../root/edit/details/MergeReleases.js:151 +msgid "Medium {position} is now medium {new_position}: {new_name}" +msgstr "" + +#: ../root/edit/details/MergeReleases.js:162 +msgid "Medium {position} is now medium {new_position}" +msgstr "" + +#: ../root/edit/details/MergeReleases.js:271 +msgid "This release has no media to merge." +msgstr "" + +#: ../root/edit/details/MergeReleases.js:318 +msgid "Recording Merges" +msgstr "" + +#: ../root/edit/details/MergeReleases.js:321 +msgid "Track #" +msgstr "" + +#: ../root/edit/details/MergeReleases.js:333 +msgid "" +"This edit does not store recording merge information and is closed, so no " +"recording merge information can be shown." +msgstr "" + +#: ../root/edit/details/MergeReleases.js:350 +msgid "All recordings for these releases are already merged." +msgstr "" + +#: ../root/edit/details/MergeReleases.js:366 +msgid "" +"The data in this edit originally came from an older version of this edit, " +"and may not display correctly" +msgstr "" + #: ../root/edit/details/MoveDiscId.js:46 #: ../root/edit/details/historic/MoveDiscId.js:41 msgid "From:" @@ -10714,7 +10711,7 @@ msgstr "" #: ../root/relationship/RelationshipsHeader.js:19 #: ../root/relationship/linktype/RelationshipTypeIndex.js:61 #: ../root/relationship/linktype/RelationshipTypesList.js:62 -#: ../root/utility/tableColumns.js:343 +#: ../root/utility/tableColumns.js:345 msgid "Relationship Types" msgstr "" @@ -11129,7 +11126,7 @@ msgstr "" #: ../root/layout/components/sidebar/SidebarRating.js:25 #: ../root/static/scripts/release/components/MediumTable.js:223 -#: ../root/utility/tableColumns.js:437 +#: ../root/utility/tableColumns.js:439 msgid "Rating" msgstr "" @@ -11952,7 +11949,7 @@ msgid "" msgstr "" #: ../root/release_group/ReleaseGroupHeader.js:30 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:404 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:405 msgid "Release group by {artist}" msgstr "" @@ -13237,9 +13234,9 @@ msgstr "" #: ../root/report/ReportsIndex.js:574 #: ../root/search/components/RecordingResults.js:132 -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:728 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:311 -#: ../root/utility/tableColumns.js:655 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:729 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:312 +#: ../root/utility/tableColumns.js:657 msgid "ISRCs" msgstr "" @@ -13487,7 +13484,7 @@ msgstr "" #: ../root/search/components/ArtistResults.js:55 #: ../root/search/components/LabelResults.js:68 #: ../root/search/components/PlaceResults.js:65 -#: ../root/utility/tableColumns.js:150 ../root/utility/tableColumns.js:155 +#: ../root/utility/tableColumns.js:152 ../root/utility/tableColumns.js:157 msgid "Begin" msgstr "" @@ -13505,9 +13502,9 @@ msgid "Documentation Search" msgstr "" #: ../root/search/components/EventResults.js:71 -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:1044 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:183 -#: ../root/utility/tableColumns.js:358 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:1045 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:184 +#: ../root/utility/tableColumns.js:360 msgid "Location" msgstr "" @@ -13817,7 +13814,7 @@ msgid "Show more artist credits" msgstr "" #: ../root/static/scripts/artist/components/ArtistCreditRenamer.js:254 -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:464 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:465 #: ../root/static/scripts/common/components/Autocomplete2/constants.js:103 #: ../root/static/scripts/common/components/Collapsible.js:76 msgid "Show more..." @@ -13847,56 +13844,56 @@ msgstr "" msgid "Update collection" msgstr "" -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:82 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:83 #: ../root/static/scripts/common/components/Autocomplete2/constants.js:96 msgid "An error occurred while searching. Click here to try again." msgstr "" -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:87 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:88 msgid "Try with direct search instead." msgstr "" -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:88 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:89 msgid "Try with indexed search instead." msgstr "" -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:120 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:121 #: ../root/static/scripts/common/components/Autocomplete2.js:648 msgid "Type to search, or paste an MBID" msgstr "" -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:202 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:203 #: ../root/static/scripts/common/components/Autocomplete2/constants.js:51 msgid "Clear recent items" msgstr "" -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:471 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:472 #: ../root/static/scripts/common/components/Autocomplete2/constants.js:110 msgid "Not found? Try again with direct search." msgstr "" -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:472 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:473 #: ../root/static/scripts/common/components/Autocomplete2/constants.js:117 msgid "Slow? Switch back to indexed search." msgstr "" -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:715 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:303 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:716 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:304 msgid "appears on" msgstr "" -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:721 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:307 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:722 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:308 msgid "standalone recording" msgstr "" -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:815 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:399 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:816 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:400 msgid "{release_group_type} by {artist}" msgstr "" -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:1043 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:180 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:1044 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:181 msgid "Performers" msgstr "" @@ -14010,11 +14007,11 @@ msgstr "" msgid "Search for a work" msgstr "" -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:298 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:299 msgid "by {artist}" msgstr "" -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:362 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:363 msgid "{first_list_item} … {last_list_item}" msgstr "" @@ -14355,180 +14352,190 @@ msgstr "" msgid "Dissolved in:" msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:360 +#: ../root/static/scripts/edit/URLCleanup.js:361 msgid "" "Please link to a channel, not a specific video. Videos should be linked to " "the appropriate recordings or releases instead." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:366 +#: ../root/static/scripts/edit/URLCleanup.js:367 msgid "" "Please link to a specific video. Add channel pages to the relevant artist, " "label, etc. instead." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:533 +#: ../root/static/scripts/edit/URLCleanup.js:534 msgid "" "Allmusic “{album_url_pattern}” links should be added to release groups. To " "find the appropriate release link for this release, please check the " "Releases tab from {album_url|your link}." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:753 +#: ../root/static/scripts/edit/URLCleanup.js:754 msgid "" "Only Apple Books “{artist_url_pattern}” pages can be added directly to " "artists. Please link audiobooks to the appropriate release instead." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:769 +#: ../root/static/scripts/edit/URLCleanup.js:770 msgid "" "Only Apple Books audiobooks can be added to MusicBrainz. Consider adding " "books to {bookbrainz_url|BookBrainz} instead." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:856 +#: ../root/static/scripts/edit/URLCleanup.js:857 msgid "" "Please link to the main page for the artist, not to a specific album or " "track." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:868 +#: ../root/static/scripts/edit/URLCleanup.js:869 msgid "" "Please link to the main page for the label, not to a specific album or track." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:1052 +#: ../root/static/scripts/edit/URLCleanup.js:1053 msgid "Please link to the main page for the artist, not a specific product." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:1054 +#: ../root/static/scripts/edit/URLCleanup.js:1055 msgid "Please link to the main page for the label, not a specific product." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:1597 +#: ../root/static/scripts/edit/URLCleanup.js:1600 msgid "" "Discogs “{master_url_pattern}” links group several releases, so this should " "be added to the release group instead." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:2086 +#: ../root/static/scripts/edit/URLCleanup.js:2090 msgid "" "Only IMSLP “{category_url_pattern}” links are allowed for artists. Please " "link work pages to the specific work in question." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:2104 +#: ../root/static/scripts/edit/URLCleanup.js:2108 msgid "" "IMSLP “{category_url_pattern}” links are only allowed for artists. Please " "link the specific work page to this work instead, if available." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:2149 +#: ../root/static/scripts/edit/URLCleanup.js:2153 msgid "" "Instagram “{explore_url_pattern}” links are not allowed. Please link to a " "profile instead, if there is one." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:2177 +#: ../root/static/scripts/edit/URLCleanup.js:2181 msgid "" "Please do not link directly to images, link to the appropriate Instagram " "profile page instead. If you want to link to a video, {url|add a standalone " "recording} for it instead." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:2202 +#: ../root/static/scripts/edit/URLCleanup.js:2206 msgid "This is an internal Instagram page and should not be added." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:2278 +#: ../root/static/scripts/edit/URLCleanup.js:2282 msgid "" "Only iTunes “{artist_url_pattern}” pages can be added directly to artists. " "Please link albums, videos, etc. to the appropriate release or recording " "instead." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:2890 +#: ../root/static/scripts/edit/URLCleanup.js:2895 msgid "" "Musixmatch “{album_url_pattern}” pages are a bad match for MusicBrainz " "release groups, and linking to them is currently disallowed. Please consider " "adding Musixmatch links to the relevant artists and works instead." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:2993 +#: ../root/static/scripts/edit/URLCleanup.js:2998 msgid "" "This is a redirect link. Please follow {redirect_url|your link} and add the " "link it redirects to instead." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:3504 +#: ../root/static/scripts/edit/URLCleanup.js:3464 +msgid "Only RYM music videos can be linked to recordings." +msgstr "" + +#: ../root/static/scripts/edit/URLCleanup.js:3516 msgid "" "This is a link to the old Resident Advisor domain. Please follow {ra_url|" "your link}, make sure the link it redirects to is still the correct one and, " "if so, add that link instead." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4092 +#: ../root/static/scripts/edit/URLCleanup.js:4143 msgid "This is not a profile, but a Twitter documentation page." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4106 +#: ../root/static/scripts/edit/URLCleanup.js:4157 msgid "Please link to Twitter profiles, not tweets." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4124 +#: ../root/static/scripts/edit/URLCleanup.js:4175 msgid "This site does not allow direct links to their images." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4331 +#: ../root/static/scripts/edit/URLCleanup.js:4372 +msgid "" +"Please link to the “{allowed_url_pattern}” page rather than this " +"“{current_url_pattern}” link." +msgstr "" + +#: ../root/static/scripts/edit/URLCleanup.js:4428 msgid "" "There is an unencoded “?” or “#” character in this URL. Please check whether " "it is useless and should be removed, or whether it is an error and the URL " "is misencoded." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4351 +#: ../root/static/scripts/edit/URLCleanup.js:4448 msgid "" "Please do not link directly to WhoSampled “{unwanted_url_pattern}” pages. " "Link to the appropriate WhoSampled artist, track or album page instead." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4372 +#: ../root/static/scripts/edit/URLCleanup.js:4469 msgid "Please link WhoSampled “{album_url_pattern}” pages to release groups." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4390 +#: ../root/static/scripts/edit/URLCleanup.js:4487 msgid "Please link WhoSampled artist pages to artists." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4402 +#: ../root/static/scripts/edit/URLCleanup.js:4499 msgid "Please link WhoSampled track pages to recordings." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4469 +#: ../root/static/scripts/edit/URLCleanup.js:4566 msgid "" "Links to specific sections of Wikipedia articles are not allowed. Please " "remove “{fragment}” if still appropriate. See the {url|guidelines}." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4570 +#: ../root/static/scripts/edit/URLCleanup.js:4669 msgid "Only video and playlist links are allowed on releases." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4606 +#: ../root/static/scripts/edit/URLCleanup.js:4705 msgid "" "Wikipedia normally has no entries for specific releases, so adding Wikipedia " "links to a release is currently blocked. Please add this Wikipedia link to " "the release group instead, if appropriate." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4618 +#: ../root/static/scripts/edit/URLCleanup.js:4717 msgid "" "Wikidata normally has no entries for specific releases, so adding Wikidata " "links to a release is currently blocked. Please add this Wikidata link to " "the release group instead, if appropriate." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4630 +#: ../root/static/scripts/edit/URLCleanup.js:4729 msgid "" "This is a Bandcamp profile, not a page for a specific release. Even if it " "shows this release right now, that can change when the artist releases " @@ -14537,7 +14544,7 @@ msgid "" "add this profile link to the appropriate artist or label." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4658 +#: ../root/static/scripts/edit/URLCleanup.js:4757 msgid "" "This is a Bandcamp profile, not a page for a specific recording. Even if it " "shows a single recording right now, that can change when the artist releases " @@ -14546,12 +14553,12 @@ msgid "" "the appropriate artist or label." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4821 +#: ../root/static/scripts/edit/URLCleanup.js:4920 msgid "Some relationship types are missing for this URL." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4838 -#: ../root/static/scripts/edit/externalLinks.js:743 +#: ../root/static/scripts/edit/URLCleanup.js:4937 +#: ../root/static/scripts/edit/externalLinks.js:778 msgid "This relationship type combination is invalid." msgstr "" @@ -14714,49 +14721,93 @@ msgstr "" msgid "This relationship already exists." msgstr "" -#: ../root/static/scripts/edit/externalLinks.js:609 +#: ../root/static/scripts/edit/externalLinks.js:607 #: ../root/static/scripts/relationship-editor/common/dialog.js:565 msgid "" "This URL is not allowed for the selected link type, or is incorrectly " "formatted." msgstr "" -#: ../root/static/scripts/edit/externalLinks.js:615 +#: ../root/static/scripts/edit/externalLinks.js:612 msgid "This URL is not allowed for the selected link type." msgstr "" -#: ../root/static/scripts/edit/externalLinks.js:674 +#: ../root/static/scripts/edit/externalLinks.js:618 +msgid "This URL is not allowed for areas." +msgstr "" + +#: ../root/static/scripts/edit/externalLinks.js:621 +msgid "This URL is not allowed for artists." +msgstr "" + +#: ../root/static/scripts/edit/externalLinks.js:624 +msgid "This URL is not allowed for events." +msgstr "" + +#: ../root/static/scripts/edit/externalLinks.js:627 +msgid "This URL is not allowed for instruments." +msgstr "" + +#: ../root/static/scripts/edit/externalLinks.js:630 +msgid "This URL is not allowed for labels." +msgstr "" + +#: ../root/static/scripts/edit/externalLinks.js:633 +msgid "This URL is not allowed for places." +msgstr "" + +#: ../root/static/scripts/edit/externalLinks.js:636 +msgid "This URL is not allowed for recordings." +msgstr "" + +#: ../root/static/scripts/edit/externalLinks.js:639 +msgid "This URL is not allowed for releases." +msgstr "" + +#: ../root/static/scripts/edit/externalLinks.js:642 +msgid "This URL is not allowed for release groups." +msgstr "" + +#: ../root/static/scripts/edit/externalLinks.js:646 +msgid "This URL is not allowed for series." +msgstr "" + +#: ../root/static/scripts/edit/externalLinks.js:649 +msgid "This URL is not allowed for works." +msgstr "" + +#: ../root/static/scripts/edit/externalLinks.js:709 msgid "" "Note: This link already exists at position #{position}. To merge, press " "enter or select a type." msgstr "" -#: ../root/static/scripts/edit/externalLinks.js:861 +#: ../root/static/scripts/edit/externalLinks.js:896 #: ../root/static/scripts/relationship-editor/common/dialog.js:418 msgid "{description} ({url|more documentation})" msgstr "" -#: ../root/static/scripts/edit/externalLinks.js:959 +#: ../root/static/scripts/edit/externalLinks.js:941 +msgid "Remove Relationship" +msgstr "" + +#: ../root/static/scripts/edit/externalLinks.js:1007 msgid "video" msgstr "" -#: ../root/static/scripts/edit/externalLinks.js:990 -msgid "Remove Relationship" +#: ../root/static/scripts/edit/externalLinks.js:1102 +msgid "Remove Link" msgstr "" -#: ../root/static/scripts/edit/externalLinks.js:1076 +#: ../root/static/scripts/edit/externalLinks.js:1131 msgid "Add link" msgstr "" -#: ../root/static/scripts/edit/externalLinks.js:1079 +#: ../root/static/scripts/edit/externalLinks.js:1134 msgid "Add another link" msgstr "" -#: ../root/static/scripts/edit/externalLinks.js:1131 -msgid "Remove Link" -msgstr "" - -#: ../root/static/scripts/edit/externalLinks.js:1180 +#: ../root/static/scripts/edit/externalLinks.js:1216 msgid "Add another relationship" msgstr "" @@ -15967,11 +16018,11 @@ msgstr "" msgid "This edit was cancelled." msgstr "" -#: ../root/utility/tableColumns.js:741 +#: ../root/utility/tableColumns.js:743 msgid "AcoustIDs" msgstr "" -#: ../root/utility/tableColumns.js:827 +#: ../root/utility/tableColumns.js:829 msgid "Subscribed" msgstr "" diff --git a/po/mb_server.sq.po b/po/mb_server.sq.po index 8c70286032a..ad5c15632f3 100644 --- a/po/mb_server.sq.po +++ b/po/mb_server.sq.po @@ -8,9 +8,9 @@ msgid "" msgstr "" "Project-Id-Version: MusicBrainz\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-09-13 18:38-0500\n" -"PO-Revision-Date: 2021-09-13 23:42+0000\n" -"Last-Translator: Michael Wiencek <email address hidden>\n" +"POT-Creation-Date: 2021-09-28 21:37+0300\n" +"PO-Revision-Date: 2021-09-28 18:40+0000\n" +"Last-Translator: Nicolás Tamargo <email address hidden>\n" "Language-Team: Albanian (http://www.transifex.com/musicbrainz/musicbrainz/language/sq/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -61,7 +61,7 @@ msgstr "\"YY\" janë dy shifrat e fundit të vitit të regjistrimit." #: ../root/edit/details/historic/AddRelease.js:118 #: ../root/recording/RecordingIndex.js:50 #: ../root/static/scripts/release/components/MediumTable.js:218 -#: ../root/utility/tableColumns.js:537 +#: ../root/utility/tableColumns.js:539 msgid "#" msgstr "#" @@ -117,26 +117,13 @@ msgstr "(qe media {position} në hedhjen në qarkullim {release})" msgid "(was medium {position}: {name} on release {release})" msgstr "(qe media {position}: {name} në hedhjen në qarkullim {release})" -#: ../root/edit/details/merge_releases.tt:6 -#: ../root/components/ReleaseLanguageScript.js:24 -#: ../root/components/ReleaseLanguageScript.js:30 -#: ../root/components/list/ReleaseList.js:100 ../root/release/CoverArt.js:92 -#: ../root/release_group/ReleaseGroupIndex.js:90 -#: ../root/search/components/ReleaseResults.js:55 -#: ../root/static/scripts/common/components/ReleaseEvents.js:55 -#: ../root/static/scripts/common/components/ReleaseEvents.js:72 -#: ../root/static/scripts/release-editor/duplicates.js:145 -msgctxt "missing data" -msgid "-" -msgstr "" - #: ../root/cdtoc/attach_artist_releases.tt:16 #: ../root/cdtoc/attach_filter_release.tt:30 ../root/cdtoc/list.tt:10 -#: ../root/edit/details/merge_releases.tt:23 ../root/release/merge.tt:16 +#: ../root/release/merge.tt:16 ../root/edit/details/MergeReleases.js:256 #: ../root/recording/RecordingIndex.js:57 #: ../root/release_group/ReleaseGroupIndex.js:159 #: ../root/search/components/ReleaseResults.js:103 -#: ../root/utility/tableColumns.js:480 ../root/utility/tableColumns.js:488 +#: ../root/utility/tableColumns.js:482 ../root/utility/tableColumns.js:490 msgctxt "and" msgid "/" msgstr "" @@ -413,10 +400,6 @@ msgstr "" msgid "All of these relationships." msgstr "Krejt këto marrëdhënie." -#: ../root/edit/details/merge_releases.tt:141 -msgid "All recordings for these releases are already merged." -msgstr "Krejt incizimet për këto hedhje në qarkullim janë përzierë tashmë." - #: ../root/release/edit/recordings.tt:3 msgid "" "All tracks require an associated recording. Click “Edit” to select a " @@ -481,11 +464,6 @@ msgstr "Shënim:" msgid "Annotations support a limited set of wiki formatting options:" msgstr "Për shënimet mbulohet një grup i kufizuar mundësish formatimesh wiki:" -#: ../root/edit/details/merge_releases.tt:149 -#: ../lib/MusicBrainz/Server/Form/Merge/Release.pm:50 -msgid "Append mediums to target release" -msgstr "" - #: ../root/edit/search_macros.tt:417 msgid "Applied Edit Count of Editor" msgstr "" @@ -594,10 +572,9 @@ msgstr "Zona" #: ../root/cdtoc/attach_confirm.tt:13 #: ../root/cdtoc/attach_filter_release.tt:29 ../root/cdtoc/list.tt:8 #: ../root/cdtoc/lookup.tt:41 ../root/components/common-macros.tt:569 -#: ../root/edit/details/merge_releases.tt:20 ../root/edit/search_macros.tt:417 -#: ../root/release/edit/tracklist.tt:163 ../root/release/edit/tracklist.tt:412 -#: ../root/release/merge.tt:13 ../root/watch/list.tt:16 -#: ../lib/MusicBrainz/Server/Edit/Artist.pm:7 +#: ../root/edit/search_macros.tt:417 ../root/release/edit/tracklist.tt:163 +#: ../root/release/edit/tracklist.tt:412 ../root/release/merge.tt:13 +#: ../root/watch/list.tt:16 ../lib/MusicBrainz/Server/Edit/Artist.pm:7 #: ../lib/MusicBrainz/Server/Form/Search/Search.pm:35 #: ../root/artist/ArtistHeader.js:34 #: ../root/components/RelationshipsTable.js:320 @@ -615,6 +592,7 @@ msgstr "Zona" #: ../root/edit/details/EditRecording.js:86 #: ../root/edit/details/EditRelease.js:83 #: ../root/edit/details/EditReleaseGroup.js:101 +#: ../root/edit/details/MergeReleases.js:253 #: ../root/edit/details/historic/AddRelease.js:68 #: ../root/edit/details/historic/AddRelease.js:120 #: ../root/edit/details/historic/AddTrackKV.js:55 @@ -688,10 +666,10 @@ msgstr "Artist:" #: ../root/report/components/EventList.js:66 #: ../root/search/components/EventResults.js:70 #: ../root/search/components/WorkResults.js:52 -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:895 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:455 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:896 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:456 #: ../root/static/scripts/common/utility/formatEntityTypeName.js:15 -#: ../root/tag/TagLayout.js:25 ../root/utility/tableColumns.js:854 +#: ../root/tag/TagLayout.js:25 ../root/utility/tableColumns.js:856 msgid "Artists" msgstr "Artistë" @@ -748,14 +726,14 @@ msgstr "Përpunues mesazhesh banderolë" #: ../root/cdtoc/attach_artist_releases.tt:19 #: ../root/cdtoc/attach_filter_release.tt:33 ../root/cdtoc/list.tt:13 -#: ../root/cdtoc/lookup.tt:46 ../root/edit/details/merge_releases.tt:26 -#: ../root/release/edit/duplicates.tt:17 ../root/release/merge.tt:19 -#: ../root/components/list/ReleaseList.js:128 +#: ../root/cdtoc/lookup.tt:46 ../root/release/edit/duplicates.tt:17 +#: ../root/release/merge.tt:19 ../root/components/list/ReleaseList.js:128 #: ../root/edit/details/AddRelease.js:129 #: ../root/edit/details/EditBarcodes.js:58 #: ../root/edit/details/EditBarcodes.js:64 #: ../root/edit/details/EditRelease.js:167 #: ../root/edit/details/EditReleaseLabel.js:138 +#: ../root/edit/details/MergeReleases.js:259 #: ../root/edit/details/historic/AddRelease.js:155 #: ../root/edit/details/historic/EditReleaseEvents.js:138 #: ../root/otherlookup/OtherLookupForm.js:64 @@ -982,12 +960,12 @@ msgstr "Kat. Nr:" #: ../root/cdtoc/attach_artist_releases.tt:18 #: ../root/cdtoc/attach_filter_release.tt:32 ../root/cdtoc/list.tt:12 -#: ../root/cdtoc/lookup.tt:45 ../root/edit/details/merge_releases.tt:25 -#: ../root/release/edit/duplicates.tt:16 ../root/release/merge.tt:18 +#: ../root/cdtoc/lookup.tt:45 ../root/release/edit/duplicates.tt:16 +#: ../root/release/merge.tt:18 ../root/edit/details/MergeReleases.js:258 #: ../root/recording/RecordingIndex.js:59 #: ../root/release_group/ReleaseGroupIndex.js:161 #: ../root/search/components/ReleaseResults.js:105 -#: ../root/utility/tableColumns.js:456 ../root/utility/tableColumns.js:461 +#: ../root/utility/tableColumns.js:458 ../root/utility/tableColumns.js:463 msgid "Catalog#" msgstr "Katalog#" @@ -1148,16 +1126,16 @@ msgstr "" #: ../root/cdtoc/attach_artist_releases.tt:16 #: ../root/cdtoc/attach_filter_release.tt:30 ../root/cdtoc/list.tt:10 -#: ../root/cdtoc/lookup.tt:43 ../root/edit/details/merge_releases.tt:23 -#: ../root/release/edit/duplicates.tt:14 ../root/release/merge.tt:16 -#: ../root/edit/details/EditReleaseLabel.js:127 +#: ../root/cdtoc/lookup.tt:43 ../root/release/edit/duplicates.tt:14 +#: ../root/release/merge.tt:16 ../root/edit/details/EditReleaseLabel.js:127 +#: ../root/edit/details/MergeReleases.js:256 #: ../root/edit/details/historic/AddRelease.js:152 #: ../root/edit/details/historic/EditReleaseEvents.js:135 #: ../root/recording/RecordingIndex.js:57 #: ../root/release_group/ReleaseGroupIndex.js:159 #: ../root/search/components/ReleaseResults.js:103 #: ../root/static/scripts/common/components/FilterForm.js:110 -#: ../root/utility/tableColumns.js:476 ../root/utility/tableColumns.js:488 +#: ../root/utility/tableColumns.js:478 ../root/utility/tableColumns.js:490 msgid "Country" msgstr "Vend" @@ -1232,13 +1210,14 @@ msgstr "Të dhëna:" #: ../root/annotation/history.tt:12 ../root/cdtoc/attach_artist_releases.tt:16 #: ../root/cdtoc/attach_filter_release.tt:30 ../root/cdtoc/list.tt:10 -#: ../root/cdtoc/lookup.tt:42 ../root/edit/details/merge_releases.tt:23 -#: ../root/release/edit/duplicates.tt:13 ../root/release/merge.tt:16 +#: ../root/cdtoc/lookup.tt:42 ../root/release/edit/duplicates.tt:13 +#: ../root/release/merge.tt:16 #: ../root/admin/statistics-events/DeleteStatisticsEvent.js:31 #: ../root/admin/statistics-events/StatisticsEventEditForm.js:35 #: ../root/admin/statistics-events/StatisticsEventIndex.js:30 #: ../root/components/RelationshipsTable.js:316 #: ../root/edit/details/EditReleaseLabel.js:119 +#: ../root/edit/details/MergeReleases.js:256 #: ../root/edit/details/historic/AddRelease.js:151 #: ../root/edit/details/historic/EditReleaseEvents.js:134 #: ../root/elections/ElectionVotes.js:26 @@ -1247,8 +1226,8 @@ msgstr "Të dhëna:" #: ../root/search/components/EventResults.js:67 #: ../root/search/components/ReleaseResults.js:103 #: ../root/static/scripts/common/components/FilterForm.js:129 -#: ../root/utility/tableColumns.js:255 ../root/utility/tableColumns.js:260 -#: ../root/utility/tableColumns.js:482 ../root/utility/tableColumns.js:488 +#: ../root/utility/tableColumns.js:257 ../root/utility/tableColumns.js:262 +#: ../root/utility/tableColumns.js:484 ../root/utility/tableColumns.js:490 msgid "Date" msgstr "Datë" @@ -1316,7 +1295,7 @@ msgstr "Nxjerrë nga përdorimi:" #: ../root/relationship/linktype/RelationshipTypeIndex.js:96 #: ../root/search/components/InstrumentResults.js:52 #: ../root/static/scripts/collection/components/CollectionEditForm.js:89 -#: ../root/utility/tableColumns.js:636 +#: ../root/utility/tableColumns.js:638 msgid "Description" msgstr "Përshkrim" @@ -1352,21 +1331,21 @@ msgstr "Vdekur në:" #: ../root/edit/details/AddReleaseGroup.js:71 #: ../root/edit/details/AddSeries.js:51 #: ../root/edit/details/AddStandaloneRecording.js:67 -#: ../root/edit/details/AddWork.js:57 ../root/edit/details/EditArea.js:84 +#: ../root/edit/details/AddWork.js:59 ../root/edit/details/EditArea.js:84 #: ../root/edit/details/EditArtist.js:100 ../root/edit/details/EditEvent.js:64 #: ../root/edit/details/EditInstrument.js:64 #: ../root/edit/details/EditLabel.js:84 ../root/edit/details/EditPlace.js:70 #: ../root/edit/details/EditRecording.js:65 #: ../root/edit/details/EditRelease.js:111 #: ../root/edit/details/EditReleaseGroup.js:64 -#: ../root/edit/details/EditSeries.js:61 ../root/edit/details/EditWork.js:73 +#: ../root/edit/details/EditSeries.js:61 ../root/edit/details/EditWork.js:75 #: ../root/genre/GenreEditForm.js:38 msgid "Disambiguation" msgstr "Ftillim dykuptimësie" #: ../root/release/discids.tt:8 ../root/edit/details/SetTrackLengths.js:66 #: ../root/otherlookup/OtherLookupForm.js:114 -#: ../root/utility/tableColumns.js:179 ../root/utility/tableColumns.js:184 +#: ../root/utility/tableColumns.js:181 ../root/utility/tableColumns.js:186 msgid "Disc ID" msgstr "ID Disku" @@ -1606,7 +1585,7 @@ msgstr "Aktivizoni numra pjesësh vinili" #: ../root/search/components/ArtistResults.js:57 #: ../root/search/components/LabelResults.js:69 #: ../root/search/components/PlaceResults.js:66 -#: ../root/utility/tableColumns.js:273 ../root/utility/tableColumns.js:278 +#: ../root/utility/tableColumns.js:275 ../root/utility/tableColumns.js:280 msgid "End" msgstr "Fund" @@ -1802,11 +1781,11 @@ msgstr "Për më tepër të dhëna, kontrolloni {doc_doc|dokumentimin} dhe {doc_ msgid "For more information, check the {doc_doc|documentation}." msgstr "Për më tepër të dhëna, kontrolloni {doc_doc|dokumentimin}." -#: ../root/cdtoc/list.tt:9 ../root/edit/details/merge_releases.tt:21 -#: ../root/release/edit/duplicates.tt:11 ../root/release/merge.tt:14 -#: ../root/components/list/ReleaseList.js:93 +#: ../root/cdtoc/list.tt:9 ../root/release/edit/duplicates.tt:11 +#: ../root/release/merge.tt:14 ../root/components/list/ReleaseList.js:93 #: ../root/edit/details/EditMedium.js:530 #: ../root/edit/details/EditReleaseLabel.js:145 +#: ../root/edit/details/MergeReleases.js:254 #: ../root/edit/details/historic/AddRelease.js:156 #: ../root/edit/details/historic/EditReleaseEvents.js:139 #: ../root/release_group/ReleaseGroupIndex.js:157 @@ -1979,7 +1958,7 @@ msgstr "E fshehur duhet përdorur për gjuhë me shenja dhe gjuhë pa kod ISO 63 #: ../root/components/common-macros.tt:602 #: ../lib/MusicBrainz/Server/Controller/Edit.pm:240 -#: ../root/static/scripts/common/constants.js:279 +#: ../root/static/scripts/common/constants.js:281 msgid "High" msgstr "" @@ -2118,12 +2097,12 @@ msgstr "ISRC" msgid "ISRCs:" msgstr "" -#: ../root/work/edit_form.tt:16 ../root/edit/details/AddWork.js:63 -#: ../root/edit/details/EditWork.js:80 ../root/edit/details/RemoveIswc.js:36 +#: ../root/work/edit_form.tt:16 ../root/edit/details/AddWork.js:65 +#: ../root/edit/details/EditWork.js:82 ../root/edit/details/RemoveIswc.js:36 #: ../root/otherlookup/OtherLookupForm.js:79 #: ../root/report/IswcsWithManyWorks.js:48 #: ../root/search/components/WorkResults.js:53 -#: ../root/utility/tableColumns.js:762 +#: ../root/utility/tableColumns.js:764 msgid "ISWC" msgstr "ISWC" @@ -2276,23 +2255,6 @@ msgstr "Instrument:" msgid "Instruments" msgstr "Instrumenta" -#: ../root/edit/details/merge_releases.tt:78 -#: ../root/edit/details/merge_releases.tt:83 -#: ../root/edit/details/merge_releases.tt:92 -#: ../root/edit/details/merge_releases.tt:109 -#: ../root/edit/details/MergeAreas.js:35 -#: ../root/edit/details/MergeArtists.js:37 -#: ../root/edit/details/MergeEvents.js:40 -#: ../root/edit/details/MergeInstruments.js:35 -#: ../root/edit/details/MergeLabels.js:35 -#: ../root/edit/details/MergePlaces.js:35 -#: ../root/edit/details/MergeRecordings.js:40 -#: ../root/edit/details/MergeReleaseGroups.js:35 -#: ../root/edit/details/MergeSeries.js:35 -#: ../root/edit/details/MergeWorks.js:35 -msgid "Into:" -msgstr "" - #: ../root/cdstub/error.tt:5 msgid "Invalid Disc ID" msgstr "ID Disku e pavlefshme" @@ -2333,13 +2295,13 @@ msgstr "" #: ../root/cdtoc/attach_artist_releases.tt:17 #: ../root/cdtoc/attach_filter_release.tt:31 ../root/cdtoc/list.tt:11 #: ../root/cdtoc/lookup.tt:44 ../root/components/common-macros.tt:569 -#: ../root/edit/details/merge_releases.tt:24 ../root/edit/search_macros.tt:417 -#: ../root/release/edit/duplicates.tt:15 ../root/release/merge.tt:17 -#: ../lib/MusicBrainz/Server/Edit/Label.pm:7 +#: ../root/edit/search_macros.tt:417 ../root/release/edit/duplicates.tt:15 +#: ../root/release/merge.tt:17 ../lib/MusicBrainz/Server/Edit/Label.pm:7 #: ../lib/MusicBrainz/Server/Form/Search/Search.pm:40 #: ../root/components/list/LabelList.js:54 ../root/edit/details/AddLabel.js:51 #: ../root/edit/details/EditLabel.js:62 #: ../root/edit/details/EditReleaseLabel.js:69 +#: ../root/edit/details/MergeReleases.js:257 #: ../root/edit/details/historic/AddRelease.js:153 #: ../root/edit/details/historic/EditReleaseEvents.js:136 #: ../root/label/LabelHeader.js:27 ../root/layout/components/Search.js:39 @@ -2352,8 +2314,8 @@ msgstr "" #: ../root/search/components/SearchForm.js:39 #: ../root/static/scripts/common/constants.js:23 #: ../root/static/scripts/common/utility/formatEntityTypeName.js:56 -#: ../root/user/UserProfile.js:46 ../root/utility/tableColumns.js:503 -#: ../root/utility/tableColumns.js:508 +#: ../root/user/UserProfile.js:46 ../root/utility/tableColumns.js:505 +#: ../root/utility/tableColumns.js:510 msgid "Label" msgstr "Etiketë" @@ -2456,7 +2418,7 @@ msgstr "Po ngarkohen paraparje përpunimi…" #: ../root/static/scripts/common/components/FingerprintTable.js:87 #: ../root/static/scripts/edit/components/AddEntityDialog.js:101 #: ../root/static/scripts/release/components/MediumTable.js:118 -#: ../root/utility/tableColumns.js:674 +#: ../root/utility/tableColumns.js:676 msgid "Loading..." msgstr "Po ngarkohet…" @@ -2496,15 +2458,15 @@ msgstr "" #: ../root/components/common-macros.tt:602 #: ../lib/MusicBrainz/Server/Controller/Edit.pm:240 -#: ../root/static/scripts/common/constants.js:276 +#: ../root/static/scripts/common/constants.js:278 msgid "Low" msgstr "" #: ../root/release/edit_relationships.tt:172 -#: ../root/edit/details/AddWork.js:81 ../root/edit/details/EditWork.js:98 +#: ../root/edit/details/AddWork.js:83 ../root/edit/details/EditWork.js:100 #: ../root/layout/components/sidebar/WorkSidebar.js:67 #: ../root/search/components/WorkResults.js:55 -#: ../root/static/scripts/work.js:312 ../root/utility/tableColumns.js:873 +#: ../root/static/scripts/work.js:312 ../root/utility/tableColumns.js:875 msgid "Lyrics Languages" msgstr "Gjuhë Vargjesh" @@ -2559,22 +2521,6 @@ msgstr "" msgid "Medium track lengths" msgstr "" -#: ../root/edit/details/merge_releases.tt:44 -msgid "Medium {position} is now medium {new_position}" -msgstr "{position} media tani është {new_position} media" - -#: ../root/edit/details/merge_releases.tt:44 -msgid "Medium {position} is now medium {new_position}: {new_name}" -msgstr "Medium {position} tani është media {new_position}: {new_name}" - -#: ../root/edit/details/merge_releases.tt:44 -msgid "Medium {position}: {name} is now medium {new_position}" -msgstr "Media {position}: {name} tani është media {new_position}" - -#: ../root/edit/details/merge_releases.tt:44 -msgid "Medium {position}: {name} is now medium {new_position}: {new_name}" -msgstr "Media {position}: {name} tani është media {new_position}: {new_name}" - #: ../root/layout/merge-helper.tt:30 #: ../root/layout/components/MergeHelper.js:71 #: ../root/layout/components/sidebar/MergeLink.js:31 @@ -2590,12 +2536,7 @@ msgstr "Përzieni Proces" msgid "Merge Releases" msgstr "Përzieni Hedhje Në Qarkullim" -#: ../root/edit/details/merge_releases.tt:149 -#: ../lib/MusicBrainz/Server/Form/Merge/Release.pm:51 -msgid "Merge mediums and recordings" -msgstr "Përzieni media dhe incizime" - -#: ../root/edit/details/merge_releases.tt:147 ../root/release/merge.tt:55 +#: ../root/release/merge.tt:55 ../root/edit/details/MergeReleases.js:358 msgid "Merge strategy:" msgstr "Strategjie përzierjesh:" @@ -2685,7 +2626,7 @@ msgstr "Vota ime:" #: ../root/edit/details/AddReleaseGroup.js:56 #: ../root/edit/details/AddSeries.js:46 #: ../root/edit/details/AddStandaloneRecording.js:56 -#: ../root/edit/details/AddWork.js:52 ../root/edit/details/EditArea.js:70 +#: ../root/edit/details/AddWork.js:54 ../root/edit/details/EditArea.js:70 #: ../root/edit/details/EditArtist.js:86 ../root/edit/details/EditEvent.js:57 #: ../root/edit/details/EditInstrument.js:57 #: ../root/edit/details/EditLabel.js:68 ../root/edit/details/EditMedium.js:522 @@ -2695,7 +2636,7 @@ msgstr "Vota ime:" #: ../root/edit/details/EditRelationshipAttribute.js:76 #: ../root/edit/details/EditRelease.js:75 #: ../root/edit/details/EditReleaseGroup.js:57 -#: ../root/edit/details/EditSeries.js:54 ../root/edit/details/EditWork.js:66 +#: ../root/edit/details/EditSeries.js:54 ../root/edit/details/EditWork.js:68 #: ../root/edit/details/RemoveRelationshipAttribute.js:41 #: ../root/edit/details/RemoveRelationshipType.js:60 #: ../root/edit/details/historic/AddRelease.js:63 @@ -2818,7 +2759,7 @@ msgid "No releases have cover art marked as \"Front\", cannot set cover art." msgstr "Asnjë hedhje në qarkullim s’ka kopertinë të shënuar si \"Ballore\", s’caktohet dot kopertinë." #: ../root/release/edit/tracklist.tt:140 ../root/admin/IpLookup.js:35 -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:457 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:458 #: ../root/static/scripts/common/components/Autocomplete2/constants.js:90 msgid "No results" msgstr "S’ka përfundime" @@ -2863,19 +2804,11 @@ msgstr "" #: ../root/components/common-macros.tt:602 #: ../lib/MusicBrainz/Server/Controller/Edit.pm:240 -#: ../root/static/scripts/common/constants.js:277 -#: ../root/static/scripts/common/constants.js:278 +#: ../root/static/scripts/common/constants.js:279 +#: ../root/static/scripts/common/constants.js:280 msgid "Normal" msgstr "Normal" -#: ../root/edit/details/merge_releases.tt:158 -#: ../root/edit/details/EditRelease.js:182 -#: ../root/edit/details/SetTrackLengths.js:89 -#: ../root/edit/details/historic/MergeReleases.js:69 -#: ../root/user/ReportUser.js:116 -msgid "Note" -msgstr "Shënim" - #: ../root/release/edit/information.tt:279 msgid "" "Note! If you do not know the month or day of release, please leave them " @@ -3198,13 +3131,13 @@ msgstr "Mund të ketë të passhme të dhëna bruto përpunimi." msgid "Recent Notes Left on Your Edits" msgstr "Shënime të Lëna Së Fundi në Përpunimet Tuaja" -#: ../root/components/common-macros.tt:569 -#: ../root/edit/details/merge_releases.tt:108 -#: ../root/edit/search_macros.tt:417 ../root/release/edit_relationships.tt:53 +#: ../root/components/common-macros.tt:569 ../root/edit/search_macros.tt:417 +#: ../root/release/edit_relationships.tt:53 #: ../lib/MusicBrainz/Server/Edit/Recording.pm:7 #: ../lib/MusicBrainz/Server/Form/Search/Search.pm:38 #: ../root/edit/details/AddStandaloneRecording.js:46 #: ../root/edit/details/EditRecording.js:51 +#: ../root/edit/details/MergeReleases.js:322 #: ../root/edit/details/RemoveIsrc.js:40 #: ../root/edit/details/historic/EditTrack.js:37 #: ../root/layout/components/Search.js:30 @@ -3222,10 +3155,6 @@ msgstr "Incizim" msgid "Recording Details" msgstr "Hollësi Incizimi" -#: ../root/edit/details/merge_releases.tt:104 -msgid "Recording Merges" -msgstr "Përzierje Incizimi" - #: ../root/user/ratings.tt:2 ../root/user/ratings_summary.tt:3 msgid "Recording ratings" msgstr "Vlerësime incizimi" @@ -3285,7 +3214,7 @@ msgstr "Përpunues Marrëdhënieje" #: ../root/edit/search_macros.tt:417 #: ../root/edit/details/AddRelationshipType.js:78 #: ../root/relationship/linktype/RelationshipTypeIndex.js:41 -#: ../root/utility/tableColumns.js:804 +#: ../root/utility/tableColumns.js:806 msgid "Relationship Type" msgstr "Lloj Marrëdhënieje" @@ -3312,8 +3241,7 @@ msgstr "" #: ../root/cdtoc/attach_artist_releases.tt:15 #: ../root/cdtoc/attach_filter_release.tt:28 ../root/cdtoc/lookup.tt:39 -#: ../root/components/common-macros.tt:569 -#: ../root/edit/details/merge_releases.tt:19 ../root/edit/search_macros.tt:417 +#: ../root/components/common-macros.tt:569 ../root/edit/search_macros.tt:417 #: ../root/release/edit/duplicates.tt:10 ../root/release/merge.tt:12 #: ../lib/MusicBrainz/Server/Edit/Release.pm:8 #: ../lib/MusicBrainz/Server/Form/Search/Search.pm:37 @@ -3324,6 +3252,7 @@ msgstr "" #: ../root/edit/details/EditBarcodes.js:51 #: ../root/edit/details/EditCoverArt.js:51 #: ../root/edit/details/EditReleaseLabel.js:60 +#: ../root/edit/details/MergeReleases.js:252 #: ../root/edit/details/RemoveCoverArt.js:35 #: ../root/edit/details/ReorderCoverArt.js:45 #: ../root/edit/details/ReorderMediums.js:39 @@ -3560,7 +3489,7 @@ msgstr "Hiqni atribut" #: ../root/components/common-macros.tt:878 #: ../root/components/common-macros.tt:886 #: ../root/components/RemoveFromMergeTableCell.js:39 -#: ../root/utility/tableColumns.js:781 ../root/utility/tableColumns.js:791 +#: ../root/utility/tableColumns.js:783 ../root/utility/tableColumns.js:793 msgid "Remove from merge" msgstr "" @@ -3958,7 +3887,7 @@ msgstr "" #: ../root/search/components/RecordingResults.js:134 #: ../root/search/components/ReleaseResults.js:112 #: ../root/static/scripts/common/components/TaggerIcon.js:40 -#: ../root/utility/tableColumns.js:834 +#: ../root/utility/tableColumns.js:836 msgid "Tagger" msgstr "Etiketues" @@ -3984,12 +3913,6 @@ msgstr "" msgid "The catalog number you have entered looks like an Amazon ASIN." msgstr "" -#: ../root/edit/details/merge_releases.tt:159 -msgid "" -"The data in this edit originally came from an older version of this edit, " -"and may not display correctly" -msgstr "" - #: ../root/layout.tt:90 ../root/layout/index.js:275 msgid "" "The data you have submitted does not make any changes to the data already " @@ -4173,12 +4096,6 @@ msgstr "" msgid "This disc has a hidden pregap track before track 1" msgstr "" -#: ../root/edit/details/merge_releases.tt:133 -msgid "" -"This edit does not store recording merge information and is closed, so no " -"recording merge information can be shown." -msgstr "" - #: ../root/cdtoc/set_durations.tt:31 msgid "This edit would only make subsecond changes to track lengths." msgstr "" @@ -4310,8 +4227,8 @@ msgid "This recording cannot be removed because it is still used on releases." msgstr "" #: ../root/components/common-macros.tt:302 -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:696 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:286 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:697 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:287 #: ../root/static/scripts/common/components/EntityLink.js:289 msgid "This recording is a video" msgstr "Ky regjistrim është një video" @@ -4343,10 +4260,6 @@ msgid "" " relationships." msgstr "" -#: ../root/edit/details/merge_releases.tt:35 -msgid "This release has no media to merge." -msgstr "" - #: ../root/release/discids.tt:58 msgid "This release has no mediums that can have disc IDs." msgstr "" @@ -4482,14 +4395,10 @@ msgid "Total tracks:" msgstr "Pjesë gjithsej:" #: ../root/cdtoc/info.tt:31 ../root/search/components/RecordingResults.js:135 -#: ../root/taglookup/Form.js:41 ../root/utility/tableColumns.js:846 +#: ../root/taglookup/Form.js:41 ../root/utility/tableColumns.js:848 msgid "Track" msgstr "Pjesë" -#: ../root/edit/details/merge_releases.tt:107 -msgid "Track #" -msgstr "Pjesa #" - #: ../root/release/edit/tracklist.tt:483 #: ../root/static/scripts/release-editor/dialogs.js:40 msgid "Track Parser" @@ -4524,11 +4433,11 @@ msgstr "Pjesa {n}:" msgid "Tracklist" msgstr "Listë pjesësh" -#: ../root/edit/details/merge_releases.tt:22 ../root/release/discids.tt:9 -#: ../root/release/edit/duplicates.tt:12 ../root/release/merge.tt:15 -#: ../root/artist_credit/ArtistCreditIndex.js:128 +#: ../root/release/discids.tt:9 ../root/release/edit/duplicates.tt:12 +#: ../root/release/merge.tt:15 ../root/artist_credit/ArtistCreditIndex.js:128 #: ../root/artist_credit/ArtistCreditLayout.js:31 #: ../root/components/list/ReleaseList.js:103 +#: ../root/edit/details/MergeReleases.js:255 #: ../root/edit/details/historic/AddRelease.js:113 #: ../root/release_group/ReleaseGroupIndex.js:158 #: ../root/search/components/CDStubResults.js:49 @@ -4572,7 +4481,7 @@ msgstr "Twitter" #: ../root/edit/details/AddLabel.js:107 ../root/edit/details/AddPlace.js:65 #: ../root/edit/details/AddReleaseGroup.js:80 #: ../root/edit/details/AddRemoveAlias.js:101 -#: ../root/edit/details/AddSeries.js:57 ../root/edit/details/AddWork.js:69 +#: ../root/edit/details/AddSeries.js:57 ../root/edit/details/AddWork.js:71 #: ../root/edit/details/EditAlias.js:123 ../root/edit/details/EditArea.js:91 #: ../root/edit/details/EditArtist.js:107 ../root/edit/details/EditEvent.js:78 #: ../root/edit/details/EditInstrument.js:71 @@ -4603,12 +4512,12 @@ msgstr "Twitter" #: ../root/static/scripts/account/components/ApplicationForm.js:87 #: ../root/static/scripts/alias/AliasEditForm.js:329 #: ../root/static/scripts/collection/components/CollectionEditForm.js:83 -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:874 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:447 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:875 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:448 #: ../root/static/scripts/common/components/FilterForm.js:63 -#: ../root/static/scripts/edit/externalLinks.js:904 -#: ../root/static/scripts/edit/externalLinks.js:1157 -#: ../root/utility/tableColumns.js:613 ../root/utility/tableColumns.js:618 +#: ../root/static/scripts/edit/externalLinks.js:941 +#: ../root/static/scripts/edit/externalLinks.js:1181 +#: ../root/utility/tableColumns.js:615 ../root/utility/tableColumns.js:620 msgid "Type" msgstr "Lloj" @@ -4919,8 +4828,8 @@ msgstr "Ndërpërfshirës Wiki" #: ../root/components/common-macros.tt:569 ../root/edit/search_macros.tt:417 #: ../lib/MusicBrainz/Server/Edit/Work.pm:9 #: ../lib/MusicBrainz/Server/Form/Search/Search.pm:39 -#: ../root/components/list/WorkList.js:60 ../root/edit/details/AddWork.js:46 -#: ../root/edit/details/EditWork.js:59 ../root/edit/details/RemoveIswc.js:40 +#: ../root/components/list/WorkList.js:60 ../root/edit/details/AddWork.js:48 +#: ../root/edit/details/EditWork.js:61 ../root/edit/details/RemoveIswc.js:40 #: ../root/layout/components/Search.js:34 #: ../root/report/IswcsWithManyWorks.js:49 #: ../root/report/components/WorkList.js:46 @@ -5185,22 +5094,13 @@ msgid "" " please make sure the artists have been entered correctly." msgstr "" -#: ../root/edit/details/merge_releases.tt:5 -#: ../root/components/list/ReleaseList.js:90 -#: ../root/release_group/ReleaseGroupIndex.js:89 -#: ../root/search/components/ReleaseResults.js:50 -#: ../root/static/scripts/release-editor/duplicates.js:143 -msgid "[missing media]" -msgstr "[mungon media]" - #: ../root/components/common-macros.tt:259 #: ../lib/MusicBrainz/Server/Edit/Relationship/RemoveLinkType.pm:86 #: ../lib/MusicBrainz/Server/Edit/Release/Create.pm:113 -#: ../lib/MusicBrainz/Server/Edit/Work/Create.pm:87 -#: ../lib/MusicBrainz/Server/Edit/Work/Edit.pm:186 #: ../root/edit/details/EditAlias.js:94 #: ../root/edit/details/SetTrackLengths.js:73 #: ../root/static/scripts/common/components/EntityLink.js:41 +#: ../root/static/scripts/common/i18n/localizeLanguageName.js:15 msgid "[removed]" msgstr "[hequr]" @@ -5346,6 +5246,10 @@ msgstr "" msgid "historical, {begin}-{end}" msgstr "" +#: ../root/edit/search_macros.tt:25 +msgid "in an unspecified order (possibly faster)" +msgstr "" + #: ../root/edit/details/macros.tt:28 #: ../root/utility/relationshipDateText.js:25 msgid "in {date}" @@ -5501,10 +5405,6 @@ msgid_plural "plus {n} other private collections" msgstr[0] "plus {n} koleksion tjetër privat" msgstr[1] "plus {n} koleksione të tjera private" -#: ../root/edit/search_macros.tt:25 -msgid "randomly" -msgstr "kuturu" - #: ../root/edit/search_macros.tt:25 msgid "recently closed first" msgstr "" @@ -5716,7 +5616,7 @@ msgstr "« I mëparshmi" #: ../root/components/paginator.tt:19 ../root/components/paginator.tt:31 #: ../root/components/paginator.tt:39 ../root/components/Paginator.js:94 #: ../root/components/Paginator.js:119 ../root/components/Paginator.js:133 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:125 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:126 msgid "…" msgstr "" @@ -6116,14 +6016,6 @@ msgstr "" msgid "There is already a CD stub with this disc ID" msgstr "" -#: ../lib/MusicBrainz/Server/Data/Language.pm:63 -#: ../lib/MusicBrainz/Server/Edit/Work/Create.pm:75 -#: ../lib/MusicBrainz/Server/Edit/Work/Create.pm:85 -#: ../lib/MusicBrainz/Server/Edit/Work/Edit.pm:184 -#: ../lib/MusicBrainz/Server/Form/Utils.pm:48 -msgid "[No lyrics]" -msgstr "[Pa vargje]" - #: ../lib/MusicBrainz/Server/Data/LinkType.pm:197 #, perl-brace-format msgid "{t0}-{t1} relationships" @@ -6365,7 +6257,7 @@ msgstr "" #: ../lib/MusicBrainz/Server/Edit/Historic/MergeRelease.pm:13 #: ../lib/MusicBrainz/Server/Edit/Historic/MergeReleaseMAC.pm:9 -#: ../lib/MusicBrainz/Server/Edit/Release/Merge.pm:140 +#: ../lib/MusicBrainz/Server/Edit/Release/Merge.pm:141 msgid "Merge releases" msgstr "Përzieni hedhje në qarkullim" @@ -6649,7 +6541,7 @@ msgctxt "medium format" msgid "(unknown)" msgstr "(e panjohur)" -#: ../lib/MusicBrainz/Server/Edit/Release/Merge.pm:347 +#: ../lib/MusicBrainz/Server/Edit/Release/Merge.pm:339 #, perl-brace-format msgid "These releases could not be merged: {reason}" msgstr "" @@ -7287,6 +7179,16 @@ msgstr "" msgid "Please pick the entity you want the others merged into." msgstr "" +#: ../lib/MusicBrainz/Server/Form/Merge/Release.pm:50 +#: ../root/edit/details/MergeReleases.js:65 +msgid "Append mediums to target release" +msgstr "" + +#: ../lib/MusicBrainz/Server/Form/Merge/Release.pm:51 +#: ../root/edit/details/MergeReleases.js:66 +msgid "Merge mediums and recordings" +msgstr "Përzieni media dhe incizime" + #: ../lib/MusicBrainz/Server/Form/Merge/Release.pm:62 msgid "Another medium is already in this position" msgstr "Ka tashmë një tjetër media në këtë pozicion" @@ -7334,22 +7236,22 @@ msgid "A fluency level is required." msgstr "" #: ../lib/MusicBrainz/Server/Form/Role/UserProfile.pm:70 -#: ../root/static/scripts/common/constants.js:287 +#: ../root/static/scripts/common/constants.js:289 msgid "Basic" msgstr "Fillestar" #: ../lib/MusicBrainz/Server/Form/Role/UserProfile.pm:71 -#: ../root/static/scripts/common/constants.js:288 +#: ../root/static/scripts/common/constants.js:290 msgid "Intermediate" msgstr "Mesatar" #: ../lib/MusicBrainz/Server/Form/Role/UserProfile.pm:72 -#: ../root/static/scripts/common/constants.js:286 +#: ../root/static/scripts/common/constants.js:288 msgid "Advanced" msgstr "I përparuar" #: ../lib/MusicBrainz/Server/Form/Role/UserProfile.pm:73 -#: ../root/static/scripts/common/constants.js:289 +#: ../root/static/scripts/common/constants.js:291 msgid "Native" msgstr "" @@ -7491,6 +7393,11 @@ msgstr "2 javë" msgid "A month" msgstr "Një muaj" +#: ../lib/MusicBrainz/Server/Form/Utils.pm:48 +#: ../root/static/scripts/common/i18n/localizeLanguageName.js:19 +msgid "[No lyrics]" +msgstr "[Pa vargje]" + #: ../lib/MusicBrainz/Server/Form/Utils.pm:84 msgctxt "script optgroup" msgid "Frequently used" @@ -7830,7 +7737,7 @@ msgstr "Hyrje" #: ../root/components/Aliases/AliasTable.js:31 #: ../root/components/Aliases/ArtistCreditList.js:54 #: ../root/static/scripts/common/components/FingerprintTable.js:53 -#: ../root/utility/tableColumns.js:78 +#: ../root/utility/tableColumns.js:80 msgid "Actions" msgstr "Veprime" @@ -7963,7 +7870,7 @@ msgstr "Tekst i lirë" #: ../root/edit/details/AddRelationshipType.js:191 #: ../root/edit/details/RemoveRelationshipType.js:136 #: ../root/relationship/linktype/RelationshipTypeIndex.js:165 -#: ../root/utility/tableColumns.js:626 +#: ../root/utility/tableColumns.js:628 msgid "Attributes" msgstr "Atribute" @@ -7984,12 +7891,12 @@ msgstr "S’mund të Hiqet Atribut" #: ../root/admin/attributes/Language.js:33 #: ../root/admin/attributes/Language.js:36 -#: ../root/edit/details/AddRelease.js:108 ../root/edit/details/AddWork.js:75 +#: ../root/edit/details/AddRelease.js:108 ../root/edit/details/AddWork.js:77 #: ../root/edit/details/EditRelease.js:131 #: ../root/edit/details/historic/AddRelease.js:104 ../root/iswc/Index.js:59 #: ../root/report/IswcsWithManyWorks.js:53 #: ../root/search/components/ReleaseResults.js:107 -#: ../root/utility/tableColumns.js:524 +#: ../root/utility/tableColumns.js:526 msgid "Language" msgstr "Gjuhë" @@ -8906,6 +8813,19 @@ msgstr "" msgid "The provided relationship type ID is not valid." msgstr "" +#: ../root/components/ReleaseLanguageScript.js:24 +#: ../root/components/ReleaseLanguageScript.js:30 +#: ../root/components/list/ReleaseList.js:100 +#: ../root/edit/details/MergeReleases.js:88 ../root/release/CoverArt.js:92 +#: ../root/release_group/ReleaseGroupIndex.js:90 +#: ../root/search/components/ReleaseResults.js:55 +#: ../root/static/scripts/common/components/ReleaseEvents.js:55 +#: ../root/static/scripts/common/components/ReleaseEvents.js:72 +#: ../root/static/scripts/release-editor/duplicates.js:145 +msgctxt "missing data" +msgid "-" +msgstr "" + #: ../root/components/StaticRelationshipsDisplay.js:25 msgid "{start_track}–{end_track}" msgstr "" @@ -9088,6 +9008,14 @@ msgstr "Adresë" msgid "Unspecified type" msgstr "Lloj i papërcaktuar" +#: ../root/components/list/ReleaseList.js:90 +#: ../root/edit/details/MergeReleases.js:83 +#: ../root/release_group/ReleaseGroupIndex.js:89 +#: ../root/search/components/ReleaseResults.js:50 +#: ../root/static/scripts/release-editor/duplicates.js:143 +msgid "[missing media]" +msgstr "[mungon media]" + #: ../root/components/list/ReleaseList.js:153 #: ../root/search/components/ReleaseResults.js:109 msgid "Status" @@ -9097,8 +9025,8 @@ msgstr "Gjendje" #: ../root/report/IswcsWithManyWorks.js:50 #: ../root/report/components/WorkList.js:51 #: ../root/search/components/WorkResults.js:51 -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:894 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:454 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:895 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:455 msgid "Writers" msgstr "Shkrues" @@ -9216,22 +9144,22 @@ msgid "" msgstr "" #: ../root/edit/components/EditHeader.js:46 -#: ../root/edit/components/EditorTypeInfo.js:28 +#: ../root/edit/components/EditorTypeInfo.js:29 msgid "This user is new to MusicBrainz." msgstr "Ky përdorues është i ri te MusicBrainz." #: ../root/edit/components/EditHeader.js:48 -#: ../root/edit/components/EditorTypeInfo.js:30 +#: ../root/edit/components/EditorTypeInfo.js:31 msgid "beginner" msgstr "fillestar" #: ../root/edit/components/EditHeader.js:55 -#: ../root/edit/components/EditorTypeInfo.js:38 +#: ../root/edit/components/EditorTypeInfo.js:39 msgid "This user is automated." msgstr "Ky përdorues është i automatizuar." #: ../root/edit/components/EditHeader.js:56 -#: ../root/edit/components/EditorTypeInfo.js:39 +#: ../root/edit/components/EditorTypeInfo.js:40 msgid "bot" msgstr "robot" @@ -9537,7 +9465,7 @@ msgstr "Parësor për vendoren" #: ../root/edit/details/AddSeries.js:65 ../root/edit/details/EditSeries.js:79 #: ../root/layout/components/sidebar/SeriesSidebar.js:52 -#: ../root/utility/tableColumns.js:819 +#: ../root/utility/tableColumns.js:821 msgid "Ordering Type" msgstr "" @@ -9623,6 +9551,14 @@ msgstr "Artist i Vjetër" msgid "New Artist" msgstr "Artist i Ri" +#: ../root/edit/details/EditRelease.js:182 +#: ../root/edit/details/MergeReleases.js:364 +#: ../root/edit/details/SetTrackLengths.js:89 +#: ../root/edit/details/historic/MergeReleases.js:69 +#: ../root/user/ReportUser.js:116 +msgid "Note" +msgstr "Shënim" + #: ../root/edit/details/EditRelease.js:183 msgid "This edit also changed the track artists." msgstr "" @@ -9654,7 +9590,7 @@ msgstr "Ky përpunim qe një përzierje." msgid "Search for the target URL." msgstr "Kërko për URL objektiv." -#: ../root/edit/details/EditWork.js:87 +#: ../root/edit/details/EditWork.js:89 msgid "Work type" msgstr "" @@ -9671,10 +9607,71 @@ msgstr "" msgid "Merge:" msgstr "Përzieji:" +#: ../root/edit/details/MergeAreas.js:35 +#: ../root/edit/details/MergeArtists.js:37 +#: ../root/edit/details/MergeEvents.js:40 +#: ../root/edit/details/MergeInstruments.js:35 +#: ../root/edit/details/MergeLabels.js:35 +#: ../root/edit/details/MergePlaces.js:35 +#: ../root/edit/details/MergeRecordings.js:40 +#: ../root/edit/details/MergeReleaseGroups.js:35 +#: ../root/edit/details/MergeReleases.js:288 +#: ../root/edit/details/MergeReleases.js:295 +#: ../root/edit/details/MergeReleases.js:305 +#: ../root/edit/details/MergeReleases.js:323 +#: ../root/edit/details/MergeSeries.js:35 +#: ../root/edit/details/MergeWorks.js:35 +msgid "Into:" +msgstr "" + #: ../root/edit/details/MergeArtists.js:43 msgid "Rename artist and relationship credits" msgstr "" +#: ../root/edit/details/MergeReleases.js:131 +msgid "Medium {position}: {name} is now medium {new_position}: {new_name}" +msgstr "Media {position}: {name} tani është media {new_position}: {new_name}" + +#: ../root/edit/details/MergeReleases.js:142 +msgid "Medium {position}: {name} is now medium {new_position}" +msgstr "Media {position}: {name} tani është media {new_position}" + +#: ../root/edit/details/MergeReleases.js:151 +msgid "Medium {position} is now medium {new_position}: {new_name}" +msgstr "Medium {position} tani është media {new_position}: {new_name}" + +#: ../root/edit/details/MergeReleases.js:162 +msgid "Medium {position} is now medium {new_position}" +msgstr "{position} media tani është {new_position} media" + +#: ../root/edit/details/MergeReleases.js:271 +msgid "This release has no media to merge." +msgstr "" + +#: ../root/edit/details/MergeReleases.js:318 +msgid "Recording Merges" +msgstr "Përzierje Incizimi" + +#: ../root/edit/details/MergeReleases.js:321 +msgid "Track #" +msgstr "Pjesa #" + +#: ../root/edit/details/MergeReleases.js:333 +msgid "" +"This edit does not store recording merge information and is closed, so no " +"recording merge information can be shown." +msgstr "" + +#: ../root/edit/details/MergeReleases.js:350 +msgid "All recordings for these releases are already merged." +msgstr "Krejt incizimet për këto hedhje në qarkullim janë përzierë tashmë." + +#: ../root/edit/details/MergeReleases.js:366 +msgid "" +"The data in this edit originally came from an older version of this edit, " +"and may not display correctly" +msgstr "" + #: ../root/edit/details/MoveDiscId.js:46 #: ../root/edit/details/historic/MoveDiscId.js:41 msgid "From:" @@ -10746,7 +10743,7 @@ msgstr "Tregues i Dokumentimit" #: ../root/relationship/RelationshipsHeader.js:19 #: ../root/relationship/linktype/RelationshipTypeIndex.js:61 #: ../root/relationship/linktype/RelationshipTypesList.js:62 -#: ../root/utility/tableColumns.js:343 +#: ../root/utility/tableColumns.js:345 msgid "Relationship Types" msgstr "Lloje Marrëdhëniesh" @@ -11162,7 +11159,7 @@ msgstr "Licencë" #: ../root/layout/components/sidebar/SidebarRating.js:25 #: ../root/static/scripts/release/components/MediumTable.js:223 -#: ../root/utility/tableColumns.js:437 +#: ../root/utility/tableColumns.js:439 msgid "Rating" msgstr "Vlerësim" @@ -11986,7 +11983,7 @@ msgid "" msgstr "Jeni i sigurt se dëshironi të hiqet kopertina më poshtë prej {release} nga {artist}?" #: ../root/release_group/ReleaseGroupHeader.js:30 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:404 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:405 msgid "Release group by {artist}" msgstr "Grup hedhjesh në qarkullim nga {artist}" @@ -13276,9 +13273,9 @@ msgstr "" #: ../root/report/ReportsIndex.js:574 #: ../root/search/components/RecordingResults.js:132 -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:728 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:311 -#: ../root/utility/tableColumns.js:655 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:729 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:312 +#: ../root/utility/tableColumns.js:657 msgid "ISRCs" msgstr "ISRC-ra" @@ -13526,7 +13523,7 @@ msgstr "Kërkime të tjera" #: ../root/search/components/ArtistResults.js:55 #: ../root/search/components/LabelResults.js:68 #: ../root/search/components/PlaceResults.js:65 -#: ../root/utility/tableColumns.js:150 ../root/utility/tableColumns.js:155 +#: ../root/utility/tableColumns.js:152 ../root/utility/tableColumns.js:157 msgid "Begin" msgstr "Fillim" @@ -13544,9 +13541,9 @@ msgid "Documentation Search" msgstr "Kërkim Në Dokumentim" #: ../root/search/components/EventResults.js:71 -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:1044 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:183 -#: ../root/utility/tableColumns.js:358 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:1045 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:184 +#: ../root/utility/tableColumns.js:360 msgid "Location" msgstr "Vend" @@ -13856,7 +13853,7 @@ msgid "Show more artist credits" msgstr "" #: ../root/static/scripts/artist/components/ArtistCreditRenamer.js:254 -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:464 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:465 #: ../root/static/scripts/common/components/Autocomplete2/constants.js:103 #: ../root/static/scripts/common/components/Collapsible.js:76 msgid "Show more..." @@ -13886,56 +13883,56 @@ msgstr "Krijoni koleksion" msgid "Update collection" msgstr "Përditësoni koleksion" -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:82 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:83 #: ../root/static/scripts/common/components/Autocomplete2/constants.js:96 msgid "An error occurred while searching. Click here to try again." msgstr "" -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:87 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:88 msgid "Try with direct search instead." msgstr "Provoni më mirë me kërkim të drejtpërdrejtë." -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:88 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:89 msgid "Try with indexed search instead." msgstr "Provoni më mirë me kërkim të indeksuar." -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:120 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:121 #: ../root/static/scripts/common/components/Autocomplete2.js:648 msgid "Type to search, or paste an MBID" msgstr "Shtypni që të kërkohet, ose hidhni një MBID" -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:202 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:203 #: ../root/static/scripts/common/components/Autocomplete2/constants.js:51 msgid "Clear recent items" msgstr "Spastro zëra së fundi" -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:471 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:472 #: ../root/static/scripts/common/components/Autocomplete2/constants.js:110 msgid "Not found? Try again with direct search." msgstr "S’u gjet? Riprovoni me kërkim të drejtpërdrejtë." -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:472 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:473 #: ../root/static/scripts/common/components/Autocomplete2/constants.js:117 msgid "Slow? Switch back to indexed search." msgstr "" -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:715 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:303 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:716 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:304 msgid "appears on" msgstr "shfaqet në" -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:721 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:307 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:722 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:308 msgid "standalone recording" msgstr "" -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:815 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:399 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:816 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:400 msgid "{release_group_type} by {artist}" msgstr "{release_group_type} nga {artist}" -#: ../root/static/scripts/common/MB/Control/Autocomplete.js:1043 -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:180 +#: ../root/static/scripts/common/MB/Control/Autocomplete.js:1044 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:181 msgid "Performers" msgstr "Ekzekutues" @@ -14049,11 +14046,11 @@ msgstr "" msgid "Search for a work" msgstr "" -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:298 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:299 msgid "by {artist}" msgstr "" -#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:362 +#: ../root/static/scripts/common/components/Autocomplete2/formatters.js:363 msgid "{first_list_item} … {last_list_item}" msgstr "" @@ -14394,181 +14391,191 @@ msgstr "Themeluar në:" msgid "Dissolved in:" msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:360 +#: ../root/static/scripts/edit/URLCleanup.js:361 msgid "" "Please link to a channel, not a specific video. Videos should be linked to " "the appropriate recordings or releases instead." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:366 +#: ../root/static/scripts/edit/URLCleanup.js:367 msgid "" "Please link to a specific video. Add channel pages to the relevant artist, " "label, etc. instead." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:533 +#: ../root/static/scripts/edit/URLCleanup.js:534 msgid "" "Allmusic “{album_url_pattern}” links should be added to release groups. To " "find the appropriate release link for this release, please check the " "Releases tab from {album_url|your link}." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:753 +#: ../root/static/scripts/edit/URLCleanup.js:754 msgid "" "Only Apple Books “{artist_url_pattern}” pages can be added directly to " "artists. Please link audiobooks to the appropriate release instead." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:769 +#: ../root/static/scripts/edit/URLCleanup.js:770 msgid "" "Only Apple Books audiobooks can be added to MusicBrainz. Consider adding " "books to {bookbrainz_url|BookBrainz} instead." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:856 +#: ../root/static/scripts/edit/URLCleanup.js:857 msgid "" "Please link to the main page for the artist, not to a specific album or " "track." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:868 +#: ../root/static/scripts/edit/URLCleanup.js:869 msgid "" "Please link to the main page for the label, not to a specific album or " "track." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:1052 +#: ../root/static/scripts/edit/URLCleanup.js:1053 msgid "Please link to the main page for the artist, not a specific product." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:1054 +#: ../root/static/scripts/edit/URLCleanup.js:1055 msgid "Please link to the main page for the label, not a specific product." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:1597 +#: ../root/static/scripts/edit/URLCleanup.js:1600 msgid "" "Discogs “{master_url_pattern}” links group several releases, so this should " "be added to the release group instead." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:2086 +#: ../root/static/scripts/edit/URLCleanup.js:2090 msgid "" "Only IMSLP “{category_url_pattern}” links are allowed for artists. Please " "link work pages to the specific work in question." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:2104 +#: ../root/static/scripts/edit/URLCleanup.js:2108 msgid "" "IMSLP “{category_url_pattern}” links are only allowed for artists. Please " "link the specific work page to this work instead, if available." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:2149 +#: ../root/static/scripts/edit/URLCleanup.js:2153 msgid "" "Instagram “{explore_url_pattern}” links are not allowed. Please link to a " "profile instead, if there is one." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:2177 +#: ../root/static/scripts/edit/URLCleanup.js:2181 msgid "" "Please do not link directly to images, link to the appropriate Instagram " "profile page instead. If you want to link to a video, {url|add a standalone " "recording} for it instead." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:2202 +#: ../root/static/scripts/edit/URLCleanup.js:2206 msgid "This is an internal Instagram page and should not be added." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:2278 +#: ../root/static/scripts/edit/URLCleanup.js:2282 msgid "" "Only iTunes “{artist_url_pattern}” pages can be added directly to artists. " "Please link albums, videos, etc. to the appropriate release or recording " "instead." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:2890 +#: ../root/static/scripts/edit/URLCleanup.js:2895 msgid "" "Musixmatch “{album_url_pattern}” pages are a bad match for MusicBrainz " "release groups, and linking to them is currently disallowed. Please consider" " adding Musixmatch links to the relevant artists and works instead." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:2993 +#: ../root/static/scripts/edit/URLCleanup.js:2998 msgid "" "This is a redirect link. Please follow {redirect_url|your link} and add the " "link it redirects to instead." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:3504 +#: ../root/static/scripts/edit/URLCleanup.js:3464 +msgid "Only RYM music videos can be linked to recordings." +msgstr "" + +#: ../root/static/scripts/edit/URLCleanup.js:3516 msgid "" "This is a link to the old Resident Advisor domain. Please follow " "{ra_url|your link}, make sure the link it redirects to is still the correct " "one and, if so, add that link instead." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4092 +#: ../root/static/scripts/edit/URLCleanup.js:4143 msgid "This is not a profile, but a Twitter documentation page." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4106 +#: ../root/static/scripts/edit/URLCleanup.js:4157 msgid "Please link to Twitter profiles, not tweets." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4124 +#: ../root/static/scripts/edit/URLCleanup.js:4175 msgid "This site does not allow direct links to their images." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4331 +#: ../root/static/scripts/edit/URLCleanup.js:4372 +msgid "" +"Please link to the “{allowed_url_pattern}” page rather than this " +"“{current_url_pattern}” link." +msgstr "" + +#: ../root/static/scripts/edit/URLCleanup.js:4428 msgid "" "There is an unencoded “?” or “#” character in this URL. Please check whether" " it is useless and should be removed, or whether it is an error and the URL " "is misencoded." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4351 +#: ../root/static/scripts/edit/URLCleanup.js:4448 msgid "" "Please do not link directly to WhoSampled “{unwanted_url_pattern}” pages. " "Link to the appropriate WhoSampled artist, track or album page instead." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4372 +#: ../root/static/scripts/edit/URLCleanup.js:4469 msgid "Please link WhoSampled “{album_url_pattern}” pages to release groups." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4390 +#: ../root/static/scripts/edit/URLCleanup.js:4487 msgid "Please link WhoSampled artist pages to artists." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4402 +#: ../root/static/scripts/edit/URLCleanup.js:4499 msgid "Please link WhoSampled track pages to recordings." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4469 +#: ../root/static/scripts/edit/URLCleanup.js:4566 msgid "" "Links to specific sections of Wikipedia articles are not allowed. Please " "remove “{fragment}” if still appropriate. See the {url|guidelines}." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4570 +#: ../root/static/scripts/edit/URLCleanup.js:4669 msgid "Only video and playlist links are allowed on releases." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4606 +#: ../root/static/scripts/edit/URLCleanup.js:4705 msgid "" "Wikipedia normally has no entries for specific releases, so adding Wikipedia" " links to a release is currently blocked. Please add this Wikipedia link to " "the release group instead, if appropriate." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4618 +#: ../root/static/scripts/edit/URLCleanup.js:4717 msgid "" "Wikidata normally has no entries for specific releases, so adding Wikidata " "links to a release is currently blocked. Please add this Wikidata link to " "the release group instead, if appropriate." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4630 +#: ../root/static/scripts/edit/URLCleanup.js:4729 msgid "" "This is a Bandcamp profile, not a page for a specific release. Even if it " "shows this release right now, that can change when the artist releases " @@ -14577,7 +14584,7 @@ msgid "" "add this profile link to the appropriate artist or label." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4658 +#: ../root/static/scripts/edit/URLCleanup.js:4757 msgid "" "This is a Bandcamp profile, not a page for a specific recording. Even if it " "shows a single recording right now, that can change when the artist releases" @@ -14586,12 +14593,12 @@ msgid "" "the appropriate artist or label." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4821 +#: ../root/static/scripts/edit/URLCleanup.js:4920 msgid "Some relationship types are missing for this URL." msgstr "" -#: ../root/static/scripts/edit/URLCleanup.js:4838 -#: ../root/static/scripts/edit/externalLinks.js:743 +#: ../root/static/scripts/edit/URLCleanup.js:4937 +#: ../root/static/scripts/edit/externalLinks.js:767 msgid "This relationship type combination is invalid." msgstr "" @@ -14754,49 +14761,93 @@ msgstr "" msgid "This relationship already exists." msgstr "Kjo marrëdhënie ekziston tashmë." -#: ../root/static/scripts/edit/externalLinks.js:609 +#: ../root/static/scripts/edit/externalLinks.js:607 #: ../root/static/scripts/relationship-editor/common/dialog.js:565 msgid "" "This URL is not allowed for the selected link type, or is incorrectly " "formatted." msgstr "" -#: ../root/static/scripts/edit/externalLinks.js:615 +#: ../root/static/scripts/edit/externalLinks.js:612 msgid "This URL is not allowed for the selected link type." msgstr "" -#: ../root/static/scripts/edit/externalLinks.js:674 +#: ../root/static/scripts/edit/externalLinks.js:618 +msgid "This URL is not allowed for areas." +msgstr "" + +#: ../root/static/scripts/edit/externalLinks.js:620 +msgid "This URL is not allowed for artists." +msgstr "" + +#: ../root/static/scripts/edit/externalLinks.js:622 +msgid "This URL is not allowed for events." +msgstr "" + +#: ../root/static/scripts/edit/externalLinks.js:624 +msgid "This URL is not allowed for instruments." +msgstr "" + +#: ../root/static/scripts/edit/externalLinks.js:626 +msgid "This URL is not allowed for labels." +msgstr "" + +#: ../root/static/scripts/edit/externalLinks.js:628 +msgid "This URL is not allowed for places." +msgstr "" + +#: ../root/static/scripts/edit/externalLinks.js:630 +msgid "This URL is not allowed for recordings." +msgstr "" + +#: ../root/static/scripts/edit/externalLinks.js:632 +msgid "This URL is not allowed for releases." +msgstr "" + +#: ../root/static/scripts/edit/externalLinks.js:634 +msgid "This URL is not allowed for release groups." +msgstr "" + +#: ../root/static/scripts/edit/externalLinks.js:637 +msgid "This URL is not allowed for series." +msgstr "" + +#: ../root/static/scripts/edit/externalLinks.js:639 +msgid "This URL is not allowed for works." +msgstr "" + +#: ../root/static/scripts/edit/externalLinks.js:698 msgid "" "Note: This link already exists at position #{position}. To merge, press " "enter or select a type." msgstr "" -#: ../root/static/scripts/edit/externalLinks.js:861 +#: ../root/static/scripts/edit/externalLinks.js:885 #: ../root/static/scripts/relationship-editor/common/dialog.js:418 msgid "{description} ({url|more documentation})" msgstr "{description} ({url|më tepër dokumentim})" -#: ../root/static/scripts/edit/externalLinks.js:959 +#: ../root/static/scripts/edit/externalLinks.js:930 +msgid "Remove Relationship" +msgstr "" + +#: ../root/static/scripts/edit/externalLinks.js:996 msgid "video" msgstr "video" -#: ../root/static/scripts/edit/externalLinks.js:990 -msgid "Remove Relationship" -msgstr "" +#: ../root/static/scripts/edit/externalLinks.js:1091 +msgid "Remove Link" +msgstr "Hiqe Lidhjen" -#: ../root/static/scripts/edit/externalLinks.js:1076 +#: ../root/static/scripts/edit/externalLinks.js:1120 msgid "Add link" msgstr "" -#: ../root/static/scripts/edit/externalLinks.js:1079 +#: ../root/static/scripts/edit/externalLinks.js:1123 msgid "Add another link" msgstr "" -#: ../root/static/scripts/edit/externalLinks.js:1131 -msgid "Remove Link" -msgstr "Hiqe Lidhjen" - -#: ../root/static/scripts/edit/externalLinks.js:1180 +#: ../root/static/scripts/edit/externalLinks.js:1205 msgid "Add another relationship" msgstr "" @@ -16008,11 +16059,11 @@ msgstr "Ky përpunim dështoi ngaqë prekte të dhëna me cilësi të lartë dhe msgid "This edit was cancelled." msgstr "Ky përpunim qe anuluar." -#: ../root/utility/tableColumns.js:741 +#: ../root/utility/tableColumns.js:743 msgid "AcoustIDs" msgstr "" -#: ../root/utility/tableColumns.js:827 +#: ../root/utility/tableColumns.js:829 msgid "Subscribed" msgstr "" diff --git a/po/relationships.de.po b/po/relationships.de.po index ecbe93d366b..a6bc7eae1f4 100644 --- a/po/relationships.de.po +++ b/po/relationships.de.po @@ -18,8 +18,8 @@ msgid "" msgstr "" "Project-Id-Version: MusicBrainz\n" -"PO-Revision-Date: 2021-09-13 23:43+0000\n" -"Last-Translator: Michael Wiencek <email address hidden>\n" +"PO-Revision-Date: 2021-09-20 09:24+0000\n" +"Last-Translator: Nicolás Tamargo <email address hidden>\n" "Language-Team: German (http://www.transifex.com/musicbrainz/musicbrainz/language/de/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -2573,6 +2573,16 @@ msgid "" "information on Wikipedia</a>)" msgstr "" +#: DB:link_type/description:1001 +msgid "" +"This points to the <a href=\"//viaf.org/\">VIAF</a> page for this series. " +"VIAF is an international project to make a common authority file available " +"to libraries across the world. An authority file is similar to an MBID for " +"libraries. (<a " +"href=\"//en.wikipedia.org/wiki/Virtual_International_Authority_File\">more " +"information on Wikipedia</a>)" +msgstr "" + #: DB:link_type/description:312 msgid "" "This points to the <a href=\"//viaf.org/\">VIAF</a> page for this work. VIAF is an international project to make a common authority file available to libraries across the world. An authority file is similar to an MBID for libraries. (<a href=\"//en.wikipedia.org/wiki/Virtual_International_Authority_File\">more information on Wikipedia</a>)\n" @@ -3261,17 +3271,19 @@ msgid "VGMdb page for" msgstr "VGMdb-Seite für" #: DB:link_type/name:311 DB:link_type/name:310 DB:link_type/name:312 -#: DB:link_type/name:920 +#: DB:link_type/name:920 DB:link_type/name:1001 msgid "VIAF" msgstr "VIAF" #: DB:link_type/link_phrase:311 DB:link_type/link_phrase:310 -#: DB:link_type/link_phrase:920 DB:link_type/reverse_link_phrase:312 +#: DB:link_type/link_phrase:920 DB:link_type/link_phrase:1001 +#: DB:link_type/reverse_link_phrase:312 msgid "VIAF ID" msgstr "VIAF-ID" #: DB:link_type/link_phrase:312 DB:link_type/reverse_link_phrase:311 #: DB:link_type/reverse_link_phrase:310 DB:link_type/reverse_link_phrase:920 +#: DB:link_type/reverse_link_phrase:1001 msgid "VIAF ID for" msgstr "VIAF-ID für" @@ -4219,7 +4231,7 @@ msgid "has CD Baby page at" msgstr "" #: DB:link_type/long_link_phrase:311 DB:link_type/long_link_phrase:310 -#: DB:link_type/long_link_phrase:920 +#: DB:link_type/long_link_phrase:920 DB:link_type/long_link_phrase:1001 msgid "has VIAF ID at" msgstr "hat VIAF-ID unter" diff --git a/po/relationships.el.po b/po/relationships.el.po index 0183ccbfbfd..5b294ca3bf4 100644 --- a/po/relationships.el.po +++ b/po/relationships.el.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: MusicBrainz\n" -"PO-Revision-Date: 2021-09-13 23:43+0000\n" -"Last-Translator: Michael Wiencek <email address hidden>\n" +"PO-Revision-Date: 2021-09-20 09:24+0000\n" +"Last-Translator: Nicolás Tamargo <email address hidden>\n" "Language-Team: Greek (http://www.transifex.com/musicbrainz/musicbrainz/language/el/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -2561,6 +2561,16 @@ msgid "" "information on Wikipedia</a>)" msgstr "" +#: DB:link_type/description:1001 +msgid "" +"This points to the <a href=\"//viaf.org/\">VIAF</a> page for this series. " +"VIAF is an international project to make a common authority file available " +"to libraries across the world. An authority file is similar to an MBID for " +"libraries. (<a " +"href=\"//en.wikipedia.org/wiki/Virtual_International_Authority_File\">more " +"information on Wikipedia</a>)" +msgstr "" + #: DB:link_type/description:312 msgid "" "This points to the <a href=\"//viaf.org/\">VIAF</a> page for this work. VIAF is an international project to make a common authority file available to libraries across the world. An authority file is similar to an MBID for libraries. (<a href=\"//en.wikipedia.org/wiki/Virtual_International_Authority_File\">more information on Wikipedia</a>)\n" @@ -3249,17 +3259,19 @@ msgid "VGMdb page for" msgstr "Σελίδα VGMdb για" #: DB:link_type/name:311 DB:link_type/name:310 DB:link_type/name:312 -#: DB:link_type/name:920 +#: DB:link_type/name:920 DB:link_type/name:1001 msgid "VIAF" msgstr "" #: DB:link_type/link_phrase:311 DB:link_type/link_phrase:310 -#: DB:link_type/link_phrase:920 DB:link_type/reverse_link_phrase:312 +#: DB:link_type/link_phrase:920 DB:link_type/link_phrase:1001 +#: DB:link_type/reverse_link_phrase:312 msgid "VIAF ID" msgstr "" #: DB:link_type/link_phrase:312 DB:link_type/reverse_link_phrase:311 #: DB:link_type/reverse_link_phrase:310 DB:link_type/reverse_link_phrase:920 +#: DB:link_type/reverse_link_phrase:1001 msgid "VIAF ID for" msgstr "" @@ -4207,7 +4219,7 @@ msgid "has CD Baby page at" msgstr "" #: DB:link_type/long_link_phrase:311 DB:link_type/long_link_phrase:310 -#: DB:link_type/long_link_phrase:920 +#: DB:link_type/long_link_phrase:920 DB:link_type/long_link_phrase:1001 msgid "has VIAF ID at" msgstr "" diff --git a/po/relationships.es.po b/po/relationships.es.po index cbfd19df168..b29603e238e 100644 --- a/po/relationships.es.po +++ b/po/relationships.es.po @@ -19,8 +19,8 @@ msgid "" msgstr "" "Project-Id-Version: MusicBrainz\n" -"PO-Revision-Date: 2021-09-13 23:43+0000\n" -"Last-Translator: Michael Wiencek <email address hidden>\n" +"PO-Revision-Date: 2021-09-20 09:24+0000\n" +"Last-Translator: Nicolás Tamargo <email address hidden>\n" "Language-Team: Spanish (http://www.transifex.com/musicbrainz/musicbrainz/language/es/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -2574,6 +2574,16 @@ msgid "" "information on Wikipedia</a>)" msgstr "" +#: DB:link_type/description:1001 +msgid "" +"This points to the <a href=\"//viaf.org/\">VIAF</a> page for this series. " +"VIAF is an international project to make a common authority file available " +"to libraries across the world. An authority file is similar to an MBID for " +"libraries. (<a " +"href=\"//en.wikipedia.org/wiki/Virtual_International_Authority_File\">more " +"information on Wikipedia</a>)" +msgstr "" + #: DB:link_type/description:312 msgid "" "This points to the <a href=\"//viaf.org/\">VIAF</a> page for this work. VIAF is an international project to make a common authority file available to libraries across the world. An authority file is similar to an MBID for libraries. (<a href=\"//en.wikipedia.org/wiki/Virtual_International_Authority_File\">more information on Wikipedia</a>)\n" @@ -3262,17 +3272,19 @@ msgid "VGMdb page for" msgstr "página de VGMdb para" #: DB:link_type/name:311 DB:link_type/name:310 DB:link_type/name:312 -#: DB:link_type/name:920 +#: DB:link_type/name:920 DB:link_type/name:1001 msgid "VIAF" msgstr "" #: DB:link_type/link_phrase:311 DB:link_type/link_phrase:310 -#: DB:link_type/link_phrase:920 DB:link_type/reverse_link_phrase:312 +#: DB:link_type/link_phrase:920 DB:link_type/link_phrase:1001 +#: DB:link_type/reverse_link_phrase:312 msgid "VIAF ID" msgstr "Id. VIAF" #: DB:link_type/link_phrase:312 DB:link_type/reverse_link_phrase:311 #: DB:link_type/reverse_link_phrase:310 DB:link_type/reverse_link_phrase:920 +#: DB:link_type/reverse_link_phrase:1001 msgid "VIAF ID for" msgstr "Id. VIAF para" @@ -4220,7 +4232,7 @@ msgid "has CD Baby page at" msgstr "" #: DB:link_type/long_link_phrase:311 DB:link_type/long_link_phrase:310 -#: DB:link_type/long_link_phrase:920 +#: DB:link_type/long_link_phrase:920 DB:link_type/long_link_phrase:1001 msgid "has VIAF ID at" msgstr "tiene ID de VIAF en" diff --git a/po/relationships.et.po b/po/relationships.et.po index b9a129eadcf..8a39d2da1a1 100644 --- a/po/relationships.et.po +++ b/po/relationships.et.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: MusicBrainz\n" -"PO-Revision-Date: 2021-09-13 23:43+0000\n" -"Last-Translator: Michael Wiencek <email address hidden>\n" +"PO-Revision-Date: 2021-09-20 09:24+0000\n" +"Last-Translator: Nicolás Tamargo <email address hidden>\n" "Language-Team: Estonian (http://www.transifex.com/musicbrainz/musicbrainz/language/et/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -2562,6 +2562,16 @@ msgid "" "information on Wikipedia</a>)" msgstr "" +#: DB:link_type/description:1001 +msgid "" +"This points to the <a href=\"//viaf.org/\">VIAF</a> page for this series. " +"VIAF is an international project to make a common authority file available " +"to libraries across the world. An authority file is similar to an MBID for " +"libraries. (<a " +"href=\"//en.wikipedia.org/wiki/Virtual_International_Authority_File\">more " +"information on Wikipedia</a>)" +msgstr "" + #: DB:link_type/description:312 msgid "" "This points to the <a href=\"//viaf.org/\">VIAF</a> page for this work. VIAF is an international project to make a common authority file available to libraries across the world. An authority file is similar to an MBID for libraries. (<a href=\"//en.wikipedia.org/wiki/Virtual_International_Authority_File\">more information on Wikipedia</a>)\n" @@ -3250,17 +3260,19 @@ msgid "VGMdb page for" msgstr "" #: DB:link_type/name:311 DB:link_type/name:310 DB:link_type/name:312 -#: DB:link_type/name:920 +#: DB:link_type/name:920 DB:link_type/name:1001 msgid "VIAF" msgstr "" #: DB:link_type/link_phrase:311 DB:link_type/link_phrase:310 -#: DB:link_type/link_phrase:920 DB:link_type/reverse_link_phrase:312 +#: DB:link_type/link_phrase:920 DB:link_type/link_phrase:1001 +#: DB:link_type/reverse_link_phrase:312 msgid "VIAF ID" msgstr "VIAF ID" #: DB:link_type/link_phrase:312 DB:link_type/reverse_link_phrase:311 #: DB:link_type/reverse_link_phrase:310 DB:link_type/reverse_link_phrase:920 +#: DB:link_type/reverse_link_phrase:1001 msgid "VIAF ID for" msgstr "" @@ -4208,7 +4220,7 @@ msgid "has CD Baby page at" msgstr "" #: DB:link_type/long_link_phrase:311 DB:link_type/long_link_phrase:310 -#: DB:link_type/long_link_phrase:920 +#: DB:link_type/long_link_phrase:920 DB:link_type/long_link_phrase:1001 msgid "has VIAF ID at" msgstr "" diff --git a/po/relationships.fi.po b/po/relationships.fi.po index fdc9d516144..c4b892d06a1 100644 --- a/po/relationships.fi.po +++ b/po/relationships.fi.po @@ -15,8 +15,8 @@ msgid "" msgstr "" "Project-Id-Version: MusicBrainz\n" -"PO-Revision-Date: 2021-09-13 23:43+0000\n" -"Last-Translator: Michael Wiencek <email address hidden>\n" +"PO-Revision-Date: 2021-09-20 09:24+0000\n" +"Last-Translator: Nicolás Tamargo <email address hidden>\n" "Language-Team: Finnish (http://www.transifex.com/musicbrainz/musicbrainz/language/fi/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -2570,6 +2570,16 @@ msgid "" "information on Wikipedia</a>)" msgstr "" +#: DB:link_type/description:1001 +msgid "" +"This points to the <a href=\"//viaf.org/\">VIAF</a> page for this series. " +"VIAF is an international project to make a common authority file available " +"to libraries across the world. An authority file is similar to an MBID for " +"libraries. (<a " +"href=\"//en.wikipedia.org/wiki/Virtual_International_Authority_File\">more " +"information on Wikipedia</a>)" +msgstr "" + #: DB:link_type/description:312 msgid "" "This points to the <a href=\"//viaf.org/\">VIAF</a> page for this work. VIAF is an international project to make a common authority file available to libraries across the world. An authority file is similar to an MBID for libraries. (<a href=\"//en.wikipedia.org/wiki/Virtual_International_Authority_File\">more information on Wikipedia</a>)\n" @@ -3258,17 +3268,19 @@ msgid "VGMdb page for" msgstr "VGMdb-sivuna" #: DB:link_type/name:311 DB:link_type/name:310 DB:link_type/name:312 -#: DB:link_type/name:920 +#: DB:link_type/name:920 DB:link_type/name:1001 msgid "VIAF" msgstr "" #: DB:link_type/link_phrase:311 DB:link_type/link_phrase:310 -#: DB:link_type/link_phrase:920 DB:link_type/reverse_link_phrase:312 +#: DB:link_type/link_phrase:920 DB:link_type/link_phrase:1001 +#: DB:link_type/reverse_link_phrase:312 msgid "VIAF ID" msgstr "VIAF-tunniste" #: DB:link_type/link_phrase:312 DB:link_type/reverse_link_phrase:311 #: DB:link_type/reverse_link_phrase:310 DB:link_type/reverse_link_phrase:920 +#: DB:link_type/reverse_link_phrase:1001 msgid "VIAF ID for" msgstr "VIAF-tunnisteena" @@ -4216,7 +4228,7 @@ msgid "has CD Baby page at" msgstr "" #: DB:link_type/long_link_phrase:311 DB:link_type/long_link_phrase:310 -#: DB:link_type/long_link_phrase:920 +#: DB:link_type/long_link_phrase:920 DB:link_type/long_link_phrase:1001 msgid "has VIAF ID at" msgstr "omaa VIAF-tunnisteen" diff --git a/po/relationships.fr.po b/po/relationships.fr.po index 9acf4cb0d3c..1b78606c5e7 100644 --- a/po/relationships.fr.po +++ b/po/relationships.fr.po @@ -36,8 +36,8 @@ msgid "" msgstr "" "Project-Id-Version: MusicBrainz\n" -"PO-Revision-Date: 2021-09-13 23:43+0000\n" -"Last-Translator: Michael Wiencek <email address hidden>\n" +"PO-Revision-Date: 2021-09-20 09:24+0000\n" +"Last-Translator: Nicolás Tamargo <email address hidden>\n" "Language-Team: French (http://www.transifex.com/musicbrainz/musicbrainz/language/fr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -2591,6 +2591,16 @@ msgid "" "information on Wikipedia</a>)" msgstr "Ceci dirige vers la page <a href=\"//viaf.org/\">VIAF</a>pour ce lieu. VIAF est un projet international de création d’un fichier d’autorité commun offert aux bibliothèques du monde. Un fichier d’autorité est semblable à un MBID pour les bibliothèques. (<a href=\"//http://fr.wikipedia.org/wiki/Fichier_d%27autorit%C3%A9_international_virtuel\">Plus d’informations sur Wikipédia</a>)" +#: DB:link_type/description:1001 +msgid "" +"This points to the <a href=\"//viaf.org/\">VIAF</a> page for this series. " +"VIAF is an international project to make a common authority file available " +"to libraries across the world. An authority file is similar to an MBID for " +"libraries. (<a " +"href=\"//en.wikipedia.org/wiki/Virtual_International_Authority_File\">more " +"information on Wikipedia</a>)" +msgstr "" + #: DB:link_type/description:312 msgid "" "This points to the <a href=\"//viaf.org/\">VIAF</a> page for this work. VIAF is an international project to make a common authority file available to libraries across the world. An authority file is similar to an MBID for libraries. (<a href=\"//en.wikipedia.org/wiki/Virtual_International_Authority_File\">more information on Wikipedia</a>)\n" @@ -3279,17 +3289,19 @@ msgid "VGMdb page for" msgstr "Page VGMdb pour" #: DB:link_type/name:311 DB:link_type/name:310 DB:link_type/name:312 -#: DB:link_type/name:920 +#: DB:link_type/name:920 DB:link_type/name:1001 msgid "VIAF" msgstr "VIAF" #: DB:link_type/link_phrase:311 DB:link_type/link_phrase:310 -#: DB:link_type/link_phrase:920 DB:link_type/reverse_link_phrase:312 +#: DB:link_type/link_phrase:920 DB:link_type/link_phrase:1001 +#: DB:link_type/reverse_link_phrase:312 msgid "VIAF ID" msgstr "ID VIAF" #: DB:link_type/link_phrase:312 DB:link_type/reverse_link_phrase:311 #: DB:link_type/reverse_link_phrase:310 DB:link_type/reverse_link_phrase:920 +#: DB:link_type/reverse_link_phrase:1001 msgid "VIAF ID for" msgstr "ID VIAF pour" @@ -4237,7 +4249,7 @@ msgid "has CD Baby page at" msgstr "a une page CD Baby sur" #: DB:link_type/long_link_phrase:311 DB:link_type/long_link_phrase:310 -#: DB:link_type/long_link_phrase:920 +#: DB:link_type/long_link_phrase:920 DB:link_type/long_link_phrase:1001 msgid "has VIAF ID at" msgstr "a un ID VIAF à" diff --git a/po/relationships.it.po b/po/relationships.it.po index f7c0123710d..c0c44526c48 100644 --- a/po/relationships.it.po +++ b/po/relationships.it.po @@ -16,7 +16,7 @@ msgid "" msgstr "" "Project-Id-Version: MusicBrainz\n" -"PO-Revision-Date: 2021-09-16 19:28+0000\n" +"PO-Revision-Date: 2021-09-20 20:34+0000\n" "Last-Translator: Luca Salini\n" "Language-Team: Italian (http://www.transifex.com/musicbrainz/musicbrainz/language/it/)\n" "MIME-Version: 1.0\n" @@ -2571,6 +2571,16 @@ msgid "" "information on Wikipedia</a>)" msgstr "Indica la pagina di <a href=\"//viaf.org/\">VIAF</a> su questo luogo. VIAF è un progetto internazionale che mette a disposizione delle biblioteche di tutto il mondo un database di voci di autorità comuni. Una voce di autorità è simile a un MBID per biblioteche. (<a href=\"//en.wikipedia.org/wiki/Virtual_International_Authority_File\">più informazioni su Wikipedia</a>)" +#: DB:link_type/description:1001 +msgid "" +"This points to the <a href=\"//viaf.org/\">VIAF</a> page for this series. " +"VIAF is an international project to make a common authority file available " +"to libraries across the world. An authority file is similar to an MBID for " +"libraries. (<a " +"href=\"//en.wikipedia.org/wiki/Virtual_International_Authority_File\">more " +"information on Wikipedia</a>)" +msgstr "Indica la pagina di <a href=\"//viaf.org/\">VIAF</a> su questa serie. VIAF è un progetto internazionale che mette a disposizione delle biblioteche di tutto il mondo un database di voci di autorità comuni. Una voce di autorità è simile a un MBID per biblioteche. (<a href=\"//en.wikipedia.org/wiki/Virtual_International_Authority_File\">più informazioni su Wikipedia</a>)" + #: DB:link_type/description:312 msgid "" "This points to the <a href=\"//viaf.org/\">VIAF</a> page for this work. VIAF is an international project to make a common authority file available to libraries across the world. An authority file is similar to an MBID for libraries. (<a href=\"//en.wikipedia.org/wiki/Virtual_International_Authority_File\">more information on Wikipedia</a>)\n" @@ -3259,17 +3269,19 @@ msgid "VGMdb page for" msgstr "pagina di VGMdb su" #: DB:link_type/name:311 DB:link_type/name:310 DB:link_type/name:312 -#: DB:link_type/name:920 +#: DB:link_type/name:920 DB:link_type/name:1001 msgid "VIAF" msgstr "VIAF" #: DB:link_type/link_phrase:311 DB:link_type/link_phrase:310 -#: DB:link_type/link_phrase:920 DB:link_type/reverse_link_phrase:312 +#: DB:link_type/link_phrase:920 DB:link_type/link_phrase:1001 +#: DB:link_type/reverse_link_phrase:312 msgid "VIAF ID" msgstr "ID VIAF" #: DB:link_type/link_phrase:312 DB:link_type/reverse_link_phrase:311 #: DB:link_type/reverse_link_phrase:310 DB:link_type/reverse_link_phrase:920 +#: DB:link_type/reverse_link_phrase:1001 msgid "VIAF ID for" msgstr "ID VIAF per" @@ -4217,7 +4229,7 @@ msgid "has CD Baby page at" msgstr "ha la pagina di CD Baby" #: DB:link_type/long_link_phrase:311 DB:link_type/long_link_phrase:310 -#: DB:link_type/long_link_phrase:920 +#: DB:link_type/long_link_phrase:920 DB:link_type/long_link_phrase:1001 msgid "has VIAF ID at" msgstr "ha l'ID VIAF" diff --git a/po/relationships.ja.po b/po/relationships.ja.po index 95307f108c8..a7ffb5daac1 100644 --- a/po/relationships.ja.po +++ b/po/relationships.ja.po @@ -15,8 +15,8 @@ msgid "" msgstr "" "Project-Id-Version: MusicBrainz\n" -"PO-Revision-Date: 2021-09-13 23:43+0000\n" -"Last-Translator: Michael Wiencek <email address hidden>\n" +"PO-Revision-Date: 2021-09-20 09:24+0000\n" +"Last-Translator: Nicolás Tamargo <email address hidden>\n" "Language-Team: Japanese (http://www.transifex.com/musicbrainz/musicbrainz/language/ja/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -2570,6 +2570,16 @@ msgid "" "information on Wikipedia</a>)" msgstr "これは、この場所の<a href=\"//viaf.org/\">VIAF</a>ページを指す。 VIAFは、世界中の図書館が共通の典拠ファイルを利用できるようにする国際的なプロジェクトである。 典拠ファイルは、図書館のMBIDと類似する (<a href=\"//en.wikipedia.org/wiki/Virtual_International_Authority_File\">Wikipedia の詳細</a>)。" +#: DB:link_type/description:1001 +msgid "" +"This points to the <a href=\"//viaf.org/\">VIAF</a> page for this series. " +"VIAF is an international project to make a common authority file available " +"to libraries across the world. An authority file is similar to an MBID for " +"libraries. (<a " +"href=\"//en.wikipedia.org/wiki/Virtual_International_Authority_File\">more " +"information on Wikipedia</a>)" +msgstr "" + #: DB:link_type/description:312 msgid "" "This points to the <a href=\"//viaf.org/\">VIAF</a> page for this work. VIAF is an international project to make a common authority file available to libraries across the world. An authority file is similar to an MBID for libraries. (<a href=\"//en.wikipedia.org/wiki/Virtual_International_Authority_File\">more information on Wikipedia</a>)\n" @@ -3258,17 +3268,19 @@ msgid "VGMdb page for" msgstr "次のVGMdbページ" #: DB:link_type/name:311 DB:link_type/name:310 DB:link_type/name:312 -#: DB:link_type/name:920 +#: DB:link_type/name:920 DB:link_type/name:1001 msgid "VIAF" msgstr "VIAF" #: DB:link_type/link_phrase:311 DB:link_type/link_phrase:310 -#: DB:link_type/link_phrase:920 DB:link_type/reverse_link_phrase:312 +#: DB:link_type/link_phrase:920 DB:link_type/link_phrase:1001 +#: DB:link_type/reverse_link_phrase:312 msgid "VIAF ID" msgstr "VIAF ID" #: DB:link_type/link_phrase:312 DB:link_type/reverse_link_phrase:311 #: DB:link_type/reverse_link_phrase:310 DB:link_type/reverse_link_phrase:920 +#: DB:link_type/reverse_link_phrase:1001 msgid "VIAF ID for" msgstr "次のVIAF ID" @@ -4216,7 +4228,7 @@ msgid "has CD Baby page at" msgstr "" #: DB:link_type/long_link_phrase:311 DB:link_type/long_link_phrase:310 -#: DB:link_type/long_link_phrase:920 +#: DB:link_type/long_link_phrase:920 DB:link_type/long_link_phrase:1001 msgid "has VIAF ID at" msgstr "のVIAF IDのURLは" diff --git a/po/relationships.nl.po b/po/relationships.nl.po index 4bbe4b45122..d560e24fdf6 100644 --- a/po/relationships.nl.po +++ b/po/relationships.nl.po @@ -13,7 +13,7 @@ msgid "" msgstr "" "Project-Id-Version: MusicBrainz\n" -"PO-Revision-Date: 2021-09-14 08:50+0000\n" +"PO-Revision-Date: 2021-09-25 11:28+0000\n" "Last-Translator: Maurits Meulenbelt <email address hidden>\n" "Language-Team: Dutch (http://www.transifex.com/musicbrainz/musicbrainz/language/nl/)\n" "MIME-Version: 1.0\n" @@ -2568,6 +2568,16 @@ msgid "" "information on Wikipedia</a>)" msgstr "Deze relatie verwijst naar de <a href=\"//viaf.org/\">VIAF</a>-pagina over deze plaats. VIAF is een internationaal project om een gemeenschappelijk autoriteitsbestand beschikbaar te maken voor bibliotheken over de hele wereld. Een autoriteitsbestand is vergelijkbaar met een MBID voor bibliotheken. (<a href=\"//en.wikipedia.org/wiki/Virtual_International_Authority_File\">Meer informatie op Wikipedia.</a>)" +#: DB:link_type/description:1001 +msgid "" +"This points to the <a href=\"//viaf.org/\">VIAF</a> page for this series. " +"VIAF is an international project to make a common authority file available " +"to libraries across the world. An authority file is similar to an MBID for " +"libraries. (<a " +"href=\"//en.wikipedia.org/wiki/Virtual_International_Authority_File\">more " +"information on Wikipedia</a>)" +msgstr "Deze relatie verwijst naar de <a href=\"//viaf.org/\">VIAF</a>-pagina over deze serie. VIAF is een internationaal project om een gemeenschappelijk autoriteitsbestand beschikbaar te maken voor bibliotheken over de hele wereld. Een autoriteitsbestand is vergelijkbaar met een MBID voor bibliotheken. (<a href=\"//en.wikipedia.org/wiki/Virtual_International_Authority_File\">Meer informatie op Wikipedia.</a>)" + #: DB:link_type/description:312 msgid "" "This points to the <a href=\"//viaf.org/\">VIAF</a> page for this work. VIAF is an international project to make a common authority file available to libraries across the world. An authority file is similar to an MBID for libraries. (<a href=\"//en.wikipedia.org/wiki/Virtual_International_Authority_File\">more information on Wikipedia</a>)\n" @@ -3256,17 +3266,19 @@ msgid "VGMdb page for" msgstr "VGMdb-pagina over" #: DB:link_type/name:311 DB:link_type/name:310 DB:link_type/name:312 -#: DB:link_type/name:920 +#: DB:link_type/name:920 DB:link_type/name:1001 msgid "VIAF" msgstr "VIAF" #: DB:link_type/link_phrase:311 DB:link_type/link_phrase:310 -#: DB:link_type/link_phrase:920 DB:link_type/reverse_link_phrase:312 +#: DB:link_type/link_phrase:920 DB:link_type/link_phrase:1001 +#: DB:link_type/reverse_link_phrase:312 msgid "VIAF ID" msgstr "VIAF-ID" #: DB:link_type/link_phrase:312 DB:link_type/reverse_link_phrase:311 #: DB:link_type/reverse_link_phrase:310 DB:link_type/reverse_link_phrase:920 +#: DB:link_type/reverse_link_phrase:1001 msgid "VIAF ID for" msgstr "VIAF-ID van" @@ -4214,7 +4226,7 @@ msgid "has CD Baby page at" msgstr "heeft een CD Baby-pagina op" #: DB:link_type/long_link_phrase:311 DB:link_type/long_link_phrase:310 -#: DB:link_type/long_link_phrase:920 +#: DB:link_type/long_link_phrase:920 DB:link_type/long_link_phrase:1001 msgid "has VIAF ID at" msgstr "heeft een VIAF-ID op" diff --git a/po/relationships.sq.po b/po/relationships.sq.po index caa0070c7ed..65f834b6db1 100644 --- a/po/relationships.sq.po +++ b/po/relationships.sq.po @@ -3,8 +3,8 @@ msgid "" msgstr "" "Project-Id-Version: MusicBrainz\n" -"PO-Revision-Date: 2021-09-13 23:43+0000\n" -"Last-Translator: Michael Wiencek <email address hidden>\n" +"PO-Revision-Date: 2021-09-20 09:24+0000\n" +"Last-Translator: Nicolás Tamargo <email address hidden>\n" "Language-Team: Albanian (http://www.transifex.com/musicbrainz/musicbrainz/language/sq/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -2558,6 +2558,16 @@ msgid "" "information on Wikipedia</a>)" msgstr "" +#: DB:link_type/description:1001 +msgid "" +"This points to the <a href=\"//viaf.org/\">VIAF</a> page for this series. " +"VIAF is an international project to make a common authority file available " +"to libraries across the world. An authority file is similar to an MBID for " +"libraries. (<a " +"href=\"//en.wikipedia.org/wiki/Virtual_International_Authority_File\">more " +"information on Wikipedia</a>)" +msgstr "" + #: DB:link_type/description:312 msgid "" "This points to the <a href=\"//viaf.org/\">VIAF</a> page for this work. VIAF is an international project to make a common authority file available to libraries across the world. An authority file is similar to an MBID for libraries. (<a href=\"//en.wikipedia.org/wiki/Virtual_International_Authority_File\">more information on Wikipedia</a>)\n" @@ -3246,17 +3256,19 @@ msgid "VGMdb page for" msgstr "" #: DB:link_type/name:311 DB:link_type/name:310 DB:link_type/name:312 -#: DB:link_type/name:920 +#: DB:link_type/name:920 DB:link_type/name:1001 msgid "VIAF" msgstr "" #: DB:link_type/link_phrase:311 DB:link_type/link_phrase:310 -#: DB:link_type/link_phrase:920 DB:link_type/reverse_link_phrase:312 +#: DB:link_type/link_phrase:920 DB:link_type/link_phrase:1001 +#: DB:link_type/reverse_link_phrase:312 msgid "VIAF ID" msgstr "" #: DB:link_type/link_phrase:312 DB:link_type/reverse_link_phrase:311 #: DB:link_type/reverse_link_phrase:310 DB:link_type/reverse_link_phrase:920 +#: DB:link_type/reverse_link_phrase:1001 msgid "VIAF ID for" msgstr "" @@ -4204,7 +4216,7 @@ msgid "has CD Baby page at" msgstr "" #: DB:link_type/long_link_phrase:311 DB:link_type/long_link_phrase:310 -#: DB:link_type/long_link_phrase:920 +#: DB:link_type/long_link_phrase:920 DB:link_type/long_link_phrase:1001 msgid "has VIAF ID at" msgstr "" diff --git a/po/statistics.de.po b/po/statistics.de.po index bdfecbbb4a5..85518e873a3 100644 --- a/po/statistics.de.po +++ b/po/statistics.de.po @@ -23,8 +23,8 @@ msgid "" msgstr "" "Project-Id-Version: MusicBrainz\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2021-07-19 17:37+0000\n" -"Last-Translator: Mark Spike\n" +"PO-Revision-Date: 2021-09-28 18:40+0000\n" +"Last-Translator: yvanz\n" "Language-Team: German (http://www.transifex.com/musicbrainz/musicbrainz/language/de/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -1148,15 +1148,15 @@ msgid "Draw a rectangle on either graph" msgstr "Ein Rechteck auf einem der Graphen zeichnen" #: ../root/statistics/layout.tt:4 ../root/statistics/Editors.js:98 -#: ../root/statistics/Editors.js:109 ../root/statistics/Index.js:924 +#: ../root/statistics/Editors.js:109 ../root/statistics/Index.js:1083 #: ../root/statistics/StatisticsLayout.js:82 msgid "Editors" msgstr "Bearbeiter" #: ../root/statistics/layout.tt:4 ../root/statistics/Edits.js:37 #: ../root/statistics/Edits.js:41 ../root/statistics/Edits.js:50 -#: ../root/statistics/Index.js:1048 ../root/statistics/StatisticsLayout.js:72 -#: ../root/statistics/stats.js:184 +#: ../root/statistics/Index.js:1207 ../root/statistics/StatisticsLayout.js:72 +#: ../root/statistics/stats.js:310 msgid "Edits" msgstr "Bearbeitungen" @@ -1243,20 +1243,20 @@ msgstr "Rang" msgid "Country" msgstr "Land" -#: ../root/statistics/Countries.js:53 ../root/statistics/Index.js:227 -#: ../root/statistics/Index.js:231 ../root/statistics/stats.js:45 +#: ../root/statistics/Countries.js:53 ../root/statistics/Index.js:231 +#: ../root/statistics/Index.js:235 ../root/statistics/stats.js:45 msgid "Artists" msgstr "Künstler" #: ../root/statistics/Countries.js:57 ../root/statistics/CoverArt.js:105 -#: ../root/statistics/Formats.js:56 ../root/statistics/Index.js:359 +#: ../root/statistics/Formats.js:56 ../root/statistics/Index.js:363 #: ../root/statistics/LanguagesScripts.js:71 -#: ../root/statistics/LanguagesScripts.js:152 ../root/statistics/stats.js:543 +#: ../root/statistics/LanguagesScripts.js:152 ../root/statistics/stats.js:669 msgid "Releases" msgstr "Veröffentlichungen" -#: ../root/statistics/Countries.js:61 ../root/statistics/Index.js:694 -#: ../root/statistics/Index.js:701 ../root/statistics/stats.js:375 +#: ../root/statistics/Countries.js:61 ../root/statistics/Index.js:698 +#: ../root/statistics/Index.js:705 ../root/statistics/stats.js:501 msgid "Labels" msgstr "Labels" @@ -1266,7 +1266,7 @@ msgid "Total" msgstr "Insgesamt" #: ../root/statistics/Countries.js:87 ../root/statistics/stats.js:57 -#: ../root/statistics/stats.js:381 ../root/statistics/stats.js:549 +#: ../root/statistics/stats.js:507 ../root/statistics/stats.js:675 msgid "Unknown Country" msgstr "Unbekanntes Land" @@ -1421,7 +1421,7 @@ msgstr "Format" msgid "% of total releases" msgstr "% aller Veröffentlichungen" -#: ../root/statistics/Formats.js:58 ../root/statistics/stats.js:387 +#: ../root/statistics/Formats.js:58 ../root/statistics/stats.js:513 msgid "Mediums" msgstr "Medien" @@ -1441,27 +1441,27 @@ msgstr "Grundlegende Metadaten" msgid "Core Entities" msgstr "Hauptobjekte" -#: ../root/statistics/Index.js:92 ../root/statistics/Index.js:234 +#: ../root/statistics/Index.js:92 ../root/statistics/Index.js:238 msgid "Artists:" msgstr "Künstler:" -#: ../root/statistics/Index.js:96 ../root/statistics/Index.js:614 -#: ../root/statistics/Index.js:640 +#: ../root/statistics/Index.js:96 ../root/statistics/Index.js:618 +#: ../root/statistics/Index.js:644 msgid "Release Groups:" msgstr "Veröffentlichungsgruppen:" -#: ../root/statistics/Index.js:100 ../root/statistics/Index.js:362 -#: ../root/statistics/Index.js:384 ../root/statistics/Index.js:410 -#: ../root/statistics/Index.js:436 ../root/statistics/Index.js:470 -#: ../root/statistics/Index.js:519 +#: ../root/statistics/Index.js:100 ../root/statistics/Index.js:366 +#: ../root/statistics/Index.js:388 ../root/statistics/Index.js:414 +#: ../root/statistics/Index.js:440 ../root/statistics/Index.js:474 +#: ../root/statistics/Index.js:523 msgid "Releases:" msgstr "Veröffentlichungen:" -#: ../root/statistics/Index.js:104 ../root/statistics/Index.js:563 +#: ../root/statistics/Index.js:104 ../root/statistics/Index.js:567 msgid "Mediums:" msgstr "Medien:" -#: ../root/statistics/Index.js:108 ../root/statistics/Index.js:672 +#: ../root/statistics/Index.js:108 ../root/statistics/Index.js:676 msgid "Recordings:" msgstr "Aufnahmen:" @@ -1473,8 +1473,8 @@ msgstr "Titel:" msgid "Labels:" msgstr "Labels:" -#: ../root/statistics/Index.js:120 ../root/statistics/Index.js:729 -#: ../root/statistics/Index.js:761 +#: ../root/statistics/Index.js:120 ../root/statistics/Index.js:733 +#: ../root/statistics/Index.js:765 msgid "Works:" msgstr "Werke:" @@ -1482,24 +1482,24 @@ msgstr "Werke:" msgid "URLs:" msgstr "URLs:" -#: ../root/statistics/Index.js:128 ../root/statistics/Index.js:791 +#: ../root/statistics/Index.js:128 ../root/statistics/Index.js:795 msgid "Areas:" msgstr "Gebiete:" -#: ../root/statistics/Index.js:132 ../root/statistics/Index.js:819 +#: ../root/statistics/Index.js:132 ../root/statistics/Index.js:823 msgid "Places:" msgstr "Örtlichkeiten:" -#: ../root/statistics/Index.js:136 ../root/statistics/Index.js:847 +#: ../root/statistics/Index.js:136 ../root/statistics/Index.js:851 msgctxt "plural" msgid "Series:" msgstr "Serie:" -#: ../root/statistics/Index.js:140 ../root/statistics/Index.js:869 +#: ../root/statistics/Index.js:140 ../root/statistics/Index.js:873 msgid "Instruments:" msgstr "Instrumente:" -#: ../root/statistics/Index.js:144 ../root/statistics/Index.js:899 +#: ../root/statistics/Index.js:144 ../root/statistics/Index.js:903 msgid "Events:" msgstr "Veranstaltungen:" @@ -1519,422 +1519,504 @@ msgstr "Bearbeiter (bestätigt / gelöscht):" msgid "Relationships:" msgstr "Beziehungen:" -#: ../root/statistics/Index.js:167 +#: ../root/statistics/Index.js:167 ../root/statistics/Index.js:924 +#: ../root/statistics/Index.js:928 ../root/statistics/Index.js:931 +#: ../root/statistics/stats.js:171 +msgid "Collections" +msgstr "Sammlungen" + +#: ../root/statistics/Index.js:171 msgid "CD Stubs (all time / current):" msgstr "CD-Stubs (insgesamt / zur Zeit):" -#: ../root/statistics/Index.js:176 +#: ../root/statistics/Index.js:180 msgid "Tags (raw / aggregated):" msgstr "Tags (roh / kumuliert):" -#: ../root/statistics/Index.js:182 +#: ../root/statistics/Index.js:186 msgid "Ratings (raw / aggregated):" msgstr "Bewertungen (roh / kumuliert):" -#: ../root/statistics/Index.js:190 +#: ../root/statistics/Index.js:194 msgid "Identifiers" msgstr "Identifikatoren" -#: ../root/statistics/Index.js:193 +#: ../root/statistics/Index.js:197 msgid "MBIDs:" msgstr "MBIDs:" -#: ../root/statistics/Index.js:197 +#: ../root/statistics/Index.js:201 msgid "ISRCs (all / unique):" msgstr "ISRCs (alle / einzigartig):" -#: ../root/statistics/Index.js:203 +#: ../root/statistics/Index.js:207 msgid "ISWCs (all / unique):" msgstr "ISWCs (alle / einzigartig):" -#: ../root/statistics/Index.js:209 ../root/statistics/Index.js:514 +#: ../root/statistics/Index.js:213 ../root/statistics/Index.js:518 msgid "Disc IDs:" msgstr "Disc-IDs:" -#: ../root/statistics/Index.js:213 +#: ../root/statistics/Index.js:217 msgid "Barcodes:" msgstr "Strichcodes:" -#: ../root/statistics/Index.js:217 +#: ../root/statistics/Index.js:221 msgid "IPIs:" msgstr "IPIs:" -#: ../root/statistics/Index.js:221 +#: ../root/statistics/Index.js:225 msgid "ISNIs:" msgstr "ISNIs:" -#: ../root/statistics/Index.js:240 +#: ../root/statistics/Index.js:244 msgid "of type Person:" msgstr "mit Typ Person:" -#: ../root/statistics/Index.js:246 +#: ../root/statistics/Index.js:250 msgid "of type Group:" msgstr "mit Typ Gruppe:" -#: ../root/statistics/Index.js:252 +#: ../root/statistics/Index.js:256 msgid "of type Orchestra:" msgstr "mit Typ Orchester:" -#: ../root/statistics/Index.js:258 +#: ../root/statistics/Index.js:262 msgid "of type Choir:" msgstr "mit Typ Chor:" -#: ../root/statistics/Index.js:264 +#: ../root/statistics/Index.js:268 msgid "of type Character:" msgstr "mit Typ Figur:" -#: ../root/statistics/Index.js:270 +#: ../root/statistics/Index.js:274 msgid "of type Other:" msgstr "mit Typ Anderes:" -#: ../root/statistics/Index.js:276 +#: ../root/statistics/Index.js:280 msgid "with no type set:" msgstr "ohne Typ:" -#: ../root/statistics/Index.js:282 +#: ../root/statistics/Index.js:286 msgid "with appearances in artist credits:" msgstr "die in Künstlernennungen vorkommen:" -#: ../root/statistics/Index.js:288 +#: ../root/statistics/Index.js:292 msgid "with no appearances in artist credits:" msgstr "die nicht in Künstlernennungen vorkommen:" -#: ../root/statistics/Index.js:293 +#: ../root/statistics/Index.js:297 msgid "Non-group artists:" msgstr "Nicht-Gruppen-Künstler:" -#: ../root/statistics/Index.js:299 +#: ../root/statistics/Index.js:303 msgid "Male:" msgstr "Männlich:" -#: ../root/statistics/Index.js:310 +#: ../root/statistics/Index.js:314 msgid "Female:" msgstr "Weiblich:" -#: ../root/statistics/Index.js:321 +#: ../root/statistics/Index.js:325 msgid "Other gender:" msgstr "Anderes Geschlecht:" -#: ../root/statistics/Index.js:332 +#: ../root/statistics/Index.js:336 msgid "Gender not applicable:" msgstr "Geschlecht nicht zutreffend:" -#: ../root/statistics/Index.js:343 +#: ../root/statistics/Index.js:347 msgid "with no gender set:" msgstr "ohne Geschlecht:" -#: ../root/statistics/Index.js:355 +#: ../root/statistics/Index.js:359 msgid "Releases, Data Quality, and Disc IDs" msgstr "Veröffentlichungen, Datenqualität und Disc-IDs" -#: ../root/statistics/Index.js:368 +#: ../root/statistics/Index.js:372 msgid "by various artists:" msgstr "von verschiedenen Künstlern:" -#: ../root/statistics/Index.js:374 +#: ../root/statistics/Index.js:378 msgid "by a single artist:" msgstr "von einem einzigen Künstler:" -#: ../root/statistics/Index.js:381 +#: ../root/statistics/Index.js:385 msgid "Release Status" msgstr "Veröffentlichungsstatus" -#: ../root/statistics/Index.js:400 +#: ../root/statistics/Index.js:404 msgid "No status set" msgstr "Kein Status gesetzt" -#: ../root/statistics/Index.js:407 +#: ../root/statistics/Index.js:411 msgid "Release Packaging" msgstr "Veröffentlichungsverpackung" -#: ../root/statistics/Index.js:426 +#: ../root/statistics/Index.js:430 msgid "No packaging set" msgstr "Keine Verpackung gesetzt" -#: ../root/statistics/Index.js:433 +#: ../root/statistics/Index.js:437 msgid "Cover Art Sources" msgstr "Cover-Art-Quellen" -#: ../root/statistics/Index.js:442 +#: ../root/statistics/Index.js:446 msgid "CAA:" msgstr "CAA:" -#: ../root/statistics/Index.js:448 +#: ../root/statistics/Index.js:452 msgid "Amazon:" msgstr "Amazon:" -#: ../root/statistics/Index.js:454 +#: ../root/statistics/Index.js:458 msgid "URL Relationships:" msgstr "URL-Beziehungen:" -#: ../root/statistics/Index.js:460 +#: ../root/statistics/Index.js:464 msgid "No front cover art:" msgstr "Kein vorderes Cover-Art:" -#: ../root/statistics/Index.js:467 +#: ../root/statistics/Index.js:471 msgid "Data Quality" msgstr "Datenqualität" -#: ../root/statistics/Index.js:476 +#: ../root/statistics/Index.js:480 msgid "High Data Quality:" msgstr "Hohe Datenqualität:" -#: ../root/statistics/Index.js:482 +#: ../root/statistics/Index.js:486 msgid "Default Data Quality:" msgstr "Standarddatenqualität:" -#: ../root/statistics/Index.js:489 +#: ../root/statistics/Index.js:493 msgid "Normal Data Quality:" msgstr "Normale Datenqualität:" -#: ../root/statistics/Index.js:496 +#: ../root/statistics/Index.js:500 msgid "Unknown Data Quality:" msgstr "Unbekannte Datenqualität:" -#: ../root/statistics/Index.js:504 +#: ../root/statistics/Index.js:508 msgid "Low Data Quality:" msgstr "Niedrige Datenqualität:" -#: ../root/statistics/Index.js:511 ../root/statistics/stats.js:177 +#: ../root/statistics/Index.js:515 ../root/statistics/stats.js:303 msgid "Disc IDs" msgstr "Disc-IDs" -#: ../root/statistics/Index.js:525 +#: ../root/statistics/Index.js:529 msgid "Releases with no disc IDs:" msgstr "Veröffentlichungen ohne Disc-IDs:" -#: ../root/statistics/Index.js:532 +#: ../root/statistics/Index.js:536 msgid "Releases with at least one disc ID:" msgstr "Veröffentlichungen mit mindestens einer Disc-ID:" -#: ../root/statistics/Index.js:543 ../root/statistics/Index.js:587 +#: ../root/statistics/Index.js:547 ../root/statistics/Index.js:591 msgid "with {num} disc ID:" msgid_plural "with {num} disc IDs:" msgstr[0] "mit einer Disc-ID:" msgstr[1] "mit {num} Disc-IDs:" -#: ../root/statistics/Index.js:558 ../root/statistics/Index.js:600 +#: ../root/statistics/Index.js:562 ../root/statistics/Index.js:604 msgid "with 10 or more disc IDs:" msgstr "mit 10 oder mehr Disc-IDs:" -#: ../root/statistics/Index.js:569 +#: ../root/statistics/Index.js:573 msgid "Mediums with no disc IDs:" msgstr "Medien ohne Disc-IDs:" -#: ../root/statistics/Index.js:576 +#: ../root/statistics/Index.js:580 msgid "Mediums with at least one disc ID:" msgstr "Medien mit mindestens einer Disc-ID:" -#: ../root/statistics/Index.js:607 ../root/statistics/stats.js:621 +#: ../root/statistics/Index.js:611 ../root/statistics/stats.js:747 msgid "Release Groups" msgstr "Veröffentlichungsgruppen" -#: ../root/statistics/Index.js:611 +#: ../root/statistics/Index.js:615 msgid "Primary Types" msgstr "Primäre Typen" -#: ../root/statistics/Index.js:637 +#: ../root/statistics/Index.js:641 msgid "Secondary Types" msgstr "Sekundärtypen" -#: ../root/statistics/Index.js:665 ../root/statistics/Index.js:669 -#: ../root/statistics/stats.js:525 +#: ../root/statistics/Index.js:669 ../root/statistics/Index.js:673 +#: ../root/statistics/stats.js:651 msgid "Recordings" msgstr "Aufnahmen" -#: ../root/statistics/Index.js:677 +#: ../root/statistics/Index.js:681 msgid "Videos:" msgstr "Videos:" -#: ../root/statistics/Index.js:682 +#: ../root/statistics/Index.js:686 msgctxt "recording" msgid "Standalone" msgstr "" -#: ../root/statistics/Index.js:687 +#: ../root/statistics/Index.js:691 msgid "With ISRCs" msgstr "" -#: ../root/statistics/Index.js:698 ../root/statistics/Index.js:726 -#: ../root/statistics/Index.js:788 ../root/statistics/Index.js:816 -#: ../root/statistics/Index.js:844 ../root/statistics/Index.js:866 -#: ../root/statistics/Index.js:896 +#: ../root/statistics/Index.js:702 ../root/statistics/Index.js:730 +#: ../root/statistics/Index.js:792 ../root/statistics/Index.js:820 +#: ../root/statistics/Index.js:848 ../root/statistics/Index.js:870 +#: ../root/statistics/Index.js:900 msgid "Types" msgstr "Typen" -#: ../root/statistics/Index.js:715 ../root/statistics/Index.js:743 -#: ../root/statistics/Index.js:777 ../root/statistics/Index.js:805 -#: ../root/statistics/Index.js:833 ../root/statistics/Index.js:885 -#: ../root/statistics/Index.js:913 +#: ../root/statistics/Index.js:719 ../root/statistics/Index.js:747 +#: ../root/statistics/Index.js:781 ../root/statistics/Index.js:809 +#: ../root/statistics/Index.js:837 ../root/statistics/Index.js:889 +#: ../root/statistics/Index.js:917 msgid "None" msgstr "Keine" -#: ../root/statistics/Index.js:722 ../root/statistics/LanguagesScripts.js:75 -#: ../root/statistics/stats.js:743 +#: ../root/statistics/Index.js:726 ../root/statistics/LanguagesScripts.js:75 +#: ../root/statistics/stats.js:869 msgid "Works" msgstr "Werke" -#: ../root/statistics/Index.js:748 +#: ../root/statistics/Index.js:752 msgid "With ISWCs" msgstr "" -#: ../root/statistics/Index.js:758 +#: ../root/statistics/Index.js:762 msgid "Attributes" msgstr "Eigenschaften" -#: ../root/statistics/Index.js:784 ../root/statistics/stats.js:39 +#: ../root/statistics/Index.js:788 ../root/statistics/stats.js:39 msgid "Areas" msgstr "Gebiete" -#: ../root/statistics/Index.js:812 ../root/statistics/stats.js:405 +#: ../root/statistics/Index.js:816 ../root/statistics/stats.js:531 msgid "Places" msgstr "Örtlichkeiten" -#: ../root/statistics/Index.js:840 ../root/statistics/stats.js:627 +#: ../root/statistics/Index.js:844 ../root/statistics/stats.js:753 msgctxt "plural" msgid "Series" msgstr "Serien" -#: ../root/statistics/Index.js:862 ../root/statistics/stats.js:309 +#: ../root/statistics/Index.js:866 ../root/statistics/stats.js:435 msgid "Instruments" msgstr "Instrumente" -#: ../root/statistics/Index.js:892 ../root/statistics/stats.js:303 +#: ../root/statistics/Index.js:896 ../root/statistics/stats.js:429 msgid "Events" msgstr "Veranstaltungen" -#: ../root/statistics/Index.js:920 +#: ../root/statistics/Index.js:937 +msgid "Of releases" +msgstr "" + +#: ../root/statistics/Index.js:944 ../root/statistics/Index.js:977 +msgid "Generic" +msgstr "" + +#: ../root/statistics/Index.js:953 +msgid "Owned music" +msgstr "Eigene Musik" + +#: ../root/statistics/Index.js:962 +msgid "Wishlist" +msgstr "Wunschliste" + +#: ../root/statistics/Index.js:970 +msgid "Of events" +msgstr "" + +#: ../root/statistics/Index.js:986 +msgid "Of type Attending" +msgstr "" + +#: ../root/statistics/Index.js:995 +msgid "Of type Maybe attending" +msgstr "" + +#: ../root/statistics/Index.js:1006 +msgid "Of areas" +msgstr "" + +#: ../root/statistics/Index.js:1012 +msgid "Of artists" +msgstr "" + +#: ../root/statistics/Index.js:1018 +msgid "Of instruments" +msgstr "" + +#: ../root/statistics/Index.js:1024 +msgid "Of labels" +msgstr "" + +#: ../root/statistics/Index.js:1030 +msgid "Of places" +msgstr "" + +#: ../root/statistics/Index.js:1036 +msgid "Of recordings" +msgstr "" + +#: ../root/statistics/Index.js:1042 +msgid "Of release groups" +msgstr "" + +#: ../root/statistics/Index.js:1048 +msgid "Of series" +msgstr "" + +#: ../root/statistics/Index.js:1054 +msgid "Of works" +msgstr "" + +#: ../root/statistics/Index.js:1060 +msgid "Public" +msgstr "Öffentlich" + +#: ../root/statistics/Index.js:1066 +msgid "Private" +msgstr "Privat" + +#: ../root/statistics/Index.js:1072 +msgid "With collaborators" +msgstr "" + +#: ../root/statistics/Index.js:1079 msgid "Editors, Edits, and Votes" msgstr "Bearbeiter, Bearbeitungen und Stimmen" -#: ../root/statistics/Index.js:927 +#: ../root/statistics/Index.js:1086 msgid "Editors (valid):" msgstr "Bearbeiter (bestätigt):" -#: ../root/statistics/Index.js:933 +#: ../root/statistics/Index.js:1092 msgid "active ever:" msgstr "jemals aktiv:" -#: ../root/statistics/Index.js:941 +#: ../root/statistics/Index.js:1100 msgid "who edited and/or voted in the last 7 days:" msgstr "die in den letzten 7 Tagen bearbeitet und/oder abgestimmt haben:" -#: ../root/statistics/Index.js:950 +#: ../root/statistics/Index.js:1109 msgid "who edited in the last 7 days:" msgstr "die in den letzten 7 Tagen bearbeitet haben:" -#: ../root/statistics/Index.js:958 +#: ../root/statistics/Index.js:1117 msgid "who voted in the last 7 days:" msgstr "die in den letzten 7 Tagen abgestimmt haben:" -#: ../root/statistics/Index.js:965 +#: ../root/statistics/Index.js:1124 msgid "who edit:" msgstr "die bearbeiten:" -#: ../root/statistics/Index.js:972 +#: ../root/statistics/Index.js:1131 msgid "who vote:" msgstr "die abstimmen:" -#: ../root/statistics/Index.js:979 +#: ../root/statistics/Index.js:1138 msgid "who leave edit notes:" msgstr "die Bearbeitungsbemerkungen schreiben:" -#: ../root/statistics/Index.js:986 +#: ../root/statistics/Index.js:1145 msgid "who use tags:" msgstr "die Tags benutzen:" -#: ../root/statistics/Index.js:993 +#: ../root/statistics/Index.js:1152 msgid "who use ratings:" msgstr "die Bewertungen benutzen:" -#: ../root/statistics/Index.js:1002 +#: ../root/statistics/Index.js:1161 msgid "who use subscriptions:" msgstr "die Abonnements benutzen:" -#: ../root/statistics/Index.js:1011 +#: ../root/statistics/Index.js:1170 msgid "who use collections:" msgstr "die Sammlungen benutzen:" -#: ../root/statistics/Index.js:1021 +#: ../root/statistics/Index.js:1180 msgid "who have registered applications:" msgstr "die registrierte Anwendungen haben:" -#: ../root/statistics/Index.js:1030 +#: ../root/statistics/Index.js:1189 msgid "validated email only:" msgstr "nur bestätigte E-Mail-Adressen:" -#: ../root/statistics/Index.js:1036 +#: ../root/statistics/Index.js:1195 msgid "inactive:" msgstr "inaktiv:" -#: ../root/statistics/Index.js:1041 +#: ../root/statistics/Index.js:1200 msgid "Editors (deleted):" msgstr "Bearbeiter (gelöscht):" -#: ../root/statistics/Index.js:1051 ../root/statistics/Index.js:1098 +#: ../root/statistics/Index.js:1210 ../root/statistics/Index.js:1257 msgid "Edits:" msgstr "Bearbeitungen:" -#: ../root/statistics/Index.js:1057 +#: ../root/statistics/Index.js:1216 msgid "Open:" msgstr "Offen:" -#: ../root/statistics/Index.js:1063 +#: ../root/statistics/Index.js:1222 msgid "Applied:" msgstr "Angewandt:" -#: ../root/statistics/Index.js:1069 +#: ../root/statistics/Index.js:1228 msgid "Voted down:" msgstr "Abgelehnt:" -#: ../root/statistics/Index.js:1075 +#: ../root/statistics/Index.js:1234 msgid "Failed (dependency):" msgstr "Fehlgeschlagen (Abhängigkeit):" -#: ../root/statistics/Index.js:1081 +#: ../root/statistics/Index.js:1240 msgid "Failed (prerequisite):" msgstr "Fehlgeschlagen (Vorbedingung):" -#: ../root/statistics/Index.js:1087 +#: ../root/statistics/Index.js:1246 msgid "Failed (internal error):" msgstr "Fehlgeschlagen (interner Fehler):" -#: ../root/statistics/Index.js:1093 +#: ../root/statistics/Index.js:1252 msgid "Cancelled:" msgstr "Abgebrochen:" -#: ../root/statistics/Index.js:1104 ../root/statistics/Index.js:1156 +#: ../root/statistics/Index.js:1263 ../root/statistics/Index.js:1315 msgid "Last 7 days:" msgstr "Letzte 7 Tage:" -#: ../root/statistics/Index.js:1111 ../root/statistics/Index.js:1163 +#: ../root/statistics/Index.js:1270 ../root/statistics/Index.js:1322 msgid "Yesterday:" msgstr "Gestern:" -#: ../root/statistics/Index.js:1118 ../root/statistics/stats.js:706 +#: ../root/statistics/Index.js:1277 ../root/statistics/stats.js:832 msgid "Votes" msgstr "Stimmen" -#: ../root/statistics/Index.js:1121 ../root/statistics/Index.js:1150 +#: ../root/statistics/Index.js:1280 ../root/statistics/Index.js:1309 msgid "Votes:" msgstr "Stimmen:" -#: ../root/statistics/Index.js:1127 +#: ../root/statistics/Index.js:1286 msgctxt "vote" msgid "Approve" msgstr "Absegnen" -#: ../root/statistics/Index.js:1133 +#: ../root/statistics/Index.js:1292 msgctxt "vote" msgid "Yes" msgstr "Ja" -#: ../root/statistics/Index.js:1139 +#: ../root/statistics/Index.js:1298 msgctxt "vote" msgid "No" msgstr "Nein" -#: ../root/statistics/Index.js:1145 +#: ../root/statistics/Index.js:1304 msgctxt "vote" msgid "Abstain" msgstr "Enthalten" @@ -2211,744 +2293,824 @@ msgstr "Anzahl aller CD-Stub-Titel" msgid "CDStub tracks" msgstr "CD-Stub-Titel" -#: ../root/statistics/stats.js:170 ../root/statistics/stats.js:171 +#: ../root/statistics/stats.js:177 +msgid "Collections with collaborators" +msgstr "" + +#: ../root/statistics/stats.js:183 +msgid "Private collections" +msgstr "" + +#: ../root/statistics/stats.js:189 +msgid "Public collections" +msgstr "" + +#: ../root/statistics/stats.js:195 +msgid "Area collections" +msgstr "" + +#: ../root/statistics/stats.js:201 +msgid "Artist collections" +msgstr "" + +#: ../root/statistics/stats.js:207 +msgid "Collections of type Attending" +msgstr "" + +#: ../root/statistics/stats.js:213 +msgid "Collections of type Event" +msgstr "" + +#: ../root/statistics/stats.js:219 +msgid "Event collections (all types)" +msgstr "" + +#: ../root/statistics/stats.js:225 +msgid "Instrument collections" +msgstr "" + +#: ../root/statistics/stats.js:231 +msgid "Label collections" +msgstr "" + +#: ../root/statistics/stats.js:237 +msgid "Collections of type Maybe attending" +msgstr "" + +#: ../root/statistics/stats.js:243 +msgid "Collections of type Owned music" +msgstr "" + +#: ../root/statistics/stats.js:249 +msgid "Place collections" +msgstr "" + +#: ../root/statistics/stats.js:255 +msgid "Recording collections" +msgstr "" + +#: ../root/statistics/stats.js:261 +msgid "Collections of type Release" +msgstr "" + +#: ../root/statistics/stats.js:267 +msgid "Release collections (all types)" +msgstr "" + +#: ../root/statistics/stats.js:273 +msgid "Release group collections" +msgstr "" + +#: ../root/statistics/stats.js:279 +msgid "Series collections" +msgstr "" + +#: ../root/statistics/stats.js:285 +msgid "Collections of type Wishlist" +msgstr "" + +#: ../root/statistics/stats.js:291 +msgid "Work collections" +msgstr "" + +#: ../root/statistics/stats.js:296 ../root/statistics/stats.js:297 msgid "Pieces of Cover Art" msgstr "Cover-Art-Bilder" -#: ../root/statistics/stats.js:176 +#: ../root/statistics/stats.js:302 msgid "Count of all Disc IDs" msgstr "Anzahl aller Disc-IDs" -#: ../root/statistics/stats.js:182 +#: ../root/statistics/stats.js:308 msgid "Count of all edits" msgstr "Anzahl aller Bearbeitungen" -#: ../root/statistics/stats.js:189 +#: ../root/statistics/stats.js:315 msgid "All edits that have been applied" msgstr "Alle Bearbeitungen, die angewandt wurden" -#: ../root/statistics/stats.js:190 +#: ../root/statistics/stats.js:316 msgid "Applied edits" msgstr "Angewandte Bearbeitungen" -#: ../root/statistics/stats.js:195 ../root/statistics/stats.js:196 +#: ../root/statistics/stats.js:321 ../root/statistics/stats.js:322 msgid "Cancelled edits" msgstr "Abgebrochene Bearbeitungen" -#: ../root/statistics/stats.js:201 +#: ../root/statistics/stats.js:327 msgid "All edits that have hit an error" msgstr "Alle Bearbeitungen, die auf einen Fehler getroffen sind" -#: ../root/statistics/stats.js:202 +#: ../root/statistics/stats.js:328 msgid "Error edits" msgstr "Bearbeitungen mit Fehlern" -#: ../root/statistics/stats.js:207 +#: ../root/statistics/stats.js:333 msgid "Evalnochange edits" msgstr "" -#: ../root/statistics/stats.js:208 +#: ../root/statistics/stats.js:334 msgid "Evalnochange Edits" msgstr "" -#: ../root/statistics/stats.js:213 +#: ../root/statistics/stats.js:339 msgid "All edits that have failed dependency checks" msgstr "Alle Bearbeitungen, die wegen Abhängigkeiten fehlgeschlagen sind" -#: ../root/statistics/stats.js:214 +#: ../root/statistics/stats.js:340 msgid "Failed edits (dependency)" msgstr "Fehlgeschlagene Bearbeitungen (Abhängigkeit)" -#: ../root/statistics/stats.js:219 +#: ../root/statistics/stats.js:345 msgid "All edits that have failed prerequisite checks" msgstr "Alle Bearbeitungen, die wegen Vorbedingungen fehlgeschlagen sind" -#: ../root/statistics/stats.js:220 +#: ../root/statistics/stats.js:346 msgid "Failed edits (prerequisite)" msgstr "Fehlgeschlagene Bearbeitungen (Vorbedingung)" -#: ../root/statistics/stats.js:225 +#: ../root/statistics/stats.js:351 msgid "All edits that have failed by being voted down" msgstr "Alle Bearbeitungen, die abgelehnt wurden" -#: ../root/statistics/stats.js:226 +#: ../root/statistics/stats.js:352 msgid "Failed edits (voted down)" msgstr "Fehlgeschlagene Bearbeitungen (abgelehnt)" -#: ../root/statistics/stats.js:231 +#: ../root/statistics/stats.js:357 msgid "Count of open edits" msgstr "Anzahl offener Bearbeitungen" -#: ../root/statistics/stats.js:232 +#: ../root/statistics/stats.js:358 msgid "Open Edits" msgstr "Offene Bearbeitungen" -#: ../root/statistics/stats.js:237 +#: ../root/statistics/stats.js:363 msgid "Count of edits per day" msgstr "Anzahl Bearbeitungen pro Tag" -#: ../root/statistics/stats.js:239 +#: ../root/statistics/stats.js:365 msgid "Edits per day" msgstr "Bearbeitungen pro Tag" -#: ../root/statistics/stats.js:244 +#: ../root/statistics/stats.js:370 msgid "Count of edits per week" msgstr "Anzahl Bearbeitungen pro Woche" -#: ../root/statistics/stats.js:245 +#: ../root/statistics/stats.js:371 msgid "Edits per week" msgstr "Bearbeitungen pro Woche" -#: ../root/statistics/stats.js:250 +#: ../root/statistics/stats.js:376 msgid "Count of all editors" msgstr "Anzahl aller Bearbeiter" -#: ../root/statistics/stats.js:252 +#: ../root/statistics/stats.js:378 msgid "Editors (all)" msgstr "Bearbeiter (alle)" -#: ../root/statistics/stats.js:258 +#: ../root/statistics/stats.js:384 msgid "Count of active editors (editing or voting) during the last week" msgstr "Anzahl aktiver Bearbeiter (bearbeiten und abstimmen) in der letzten Woche" -#: ../root/statistics/stats.js:260 +#: ../root/statistics/stats.js:386 msgid "Active Users" msgstr "Aktive Benutzer" -#: ../root/statistics/stats.js:265 +#: ../root/statistics/stats.js:391 msgid "Count of deleted editors" msgstr "Anzahl gelöschter Bearbeiter" -#: ../root/statistics/stats.js:267 +#: ../root/statistics/stats.js:393 msgid "Editors (deleted)" msgstr "Bearbeiter (gelöscht)" -#: ../root/statistics/stats.js:273 +#: ../root/statistics/stats.js:399 msgid "Count of editors who have submitted edits during the last 7 days" msgstr "Anzahl Bearbeiter, die in den letzten 7 Tagen Bearbeitungen eingereicht haben" -#: ../root/statistics/stats.js:275 +#: ../root/statistics/stats.js:401 msgid "Active Editors" msgstr "Aktive Bearbeiter" -#: ../root/statistics/stats.js:280 +#: ../root/statistics/stats.js:406 msgid "Count of non-deleted editors" msgstr "Anzahl nicht gelöschter Bearbeiter" -#: ../root/statistics/stats.js:282 +#: ../root/statistics/stats.js:408 msgid "Editors (valid)" msgstr "Bearbeiter (bestätigt)" -#: ../root/statistics/stats.js:287 +#: ../root/statistics/stats.js:413 msgid "Count of active editors" msgstr "Anzahl aktiver Bearbeiter" -#: ../root/statistics/stats.js:289 +#: ../root/statistics/stats.js:415 msgid "Editors (valid & active ever)" msgstr "Bearbeiter (bestätigt & jemals aktiv)" -#: ../root/statistics/stats.js:295 +#: ../root/statistics/stats.js:421 msgid "Count of editors who have voted on during the last 7 days" msgstr "Anzahl Bearbeiter, die in den letzten 7 Tagen abgestimmt haben" -#: ../root/statistics/stats.js:297 +#: ../root/statistics/stats.js:423 msgid "Active Voters" msgstr "Aktive Abstimmer" -#: ../root/statistics/stats.js:302 +#: ../root/statistics/stats.js:428 msgid "Count of all events" msgstr "Anzahl aller Veranstaltungen" -#: ../root/statistics/stats.js:308 +#: ../root/statistics/stats.js:434 msgid "Count of all instruments" msgstr "Anzahl aller Instrumente" -#: ../root/statistics/stats.js:314 +#: ../root/statistics/stats.js:440 msgid "Count of all IPIs" msgstr "Anzahl aller IPIs" -#: ../root/statistics/stats.js:315 +#: ../root/statistics/stats.js:441 msgid "IPIs" msgstr "IPIs" -#: ../root/statistics/stats.js:320 +#: ../root/statistics/stats.js:446 msgid "Count of all IPIs for Artists" msgstr "Anzahl aller IPIs für Künstler" -#: ../root/statistics/stats.js:321 +#: ../root/statistics/stats.js:447 msgid "Artist IPIs" msgstr "Künstler-IPIs" -#: ../root/statistics/stats.js:326 +#: ../root/statistics/stats.js:452 msgid "Count of all IPIs for Labels" msgstr "Anzahl aller IPIs für Labels" -#: ../root/statistics/stats.js:327 +#: ../root/statistics/stats.js:453 msgid "Label IPIs" msgstr "Label-IPIs" -#: ../root/statistics/stats.js:332 +#: ../root/statistics/stats.js:458 msgid "Count of all ISNIs" msgstr "Anzahl aller ISNIs" -#: ../root/statistics/stats.js:333 +#: ../root/statistics/stats.js:459 msgid "ISNIs" msgstr "ISNIs" -#: ../root/statistics/stats.js:338 +#: ../root/statistics/stats.js:464 msgid "Count of all ISNIs for Artists" msgstr "Anzahl aller ISNIs für Künstler" -#: ../root/statistics/stats.js:339 +#: ../root/statistics/stats.js:465 msgid "Artist ISNIs" msgstr "Künstler-ISNIs" -#: ../root/statistics/stats.js:344 +#: ../root/statistics/stats.js:470 msgid "Count of all ISNIs for Labels" msgstr "Anzahl aller ISNIs für Labels" -#: ../root/statistics/stats.js:345 +#: ../root/statistics/stats.js:471 msgid "Label ISNIs" msgstr "Label-ISNIs" -#: ../root/statistics/stats.js:350 ../root/statistics/stats.js:356 +#: ../root/statistics/stats.js:476 ../root/statistics/stats.js:482 msgid "Count of all ISRCs" msgstr "Anzahl aller ISRCs" -#: ../root/statistics/stats.js:351 +#: ../root/statistics/stats.js:477 msgid "ISRCs" msgstr "ISRCs" -#: ../root/statistics/stats.js:357 +#: ../root/statistics/stats.js:483 msgid "ISRCs (all)" msgstr "ISRCs (alle)" -#: ../root/statistics/stats.js:362 ../root/statistics/stats.js:368 +#: ../root/statistics/stats.js:488 ../root/statistics/stats.js:494 msgid "Count of all ISWCs" msgstr "Anzahl aller ISWCs" -#: ../root/statistics/stats.js:363 +#: ../root/statistics/stats.js:489 msgid "ISWCs" msgstr "ISWCs" -#: ../root/statistics/stats.js:369 +#: ../root/statistics/stats.js:495 msgid "ISWCs (all)" msgstr "ISWCs (alle)" -#: ../root/statistics/stats.js:374 +#: ../root/statistics/stats.js:500 msgid "Count of all labels" msgstr "Anzahl aller Labels" -#: ../root/statistics/stats.js:380 +#: ../root/statistics/stats.js:506 msgid "Labels with no country set" msgstr "Labels ohne Land" -#: ../root/statistics/stats.js:386 +#: ../root/statistics/stats.js:512 msgid "Count of all mediums" msgstr "Anzahl aller Medien" -#: ../root/statistics/stats.js:392 +#: ../root/statistics/stats.js:518 msgid "Mediums with no format set" msgstr "Medien ohne Format" -#: ../root/statistics/stats.js:393 +#: ../root/statistics/stats.js:519 msgid "Unknown Format (medium)" msgstr "Unbekanntes Format (Medium)" -#: ../root/statistics/stats.js:398 +#: ../root/statistics/stats.js:524 msgid "Count of all Mediums with Disc IDs" msgstr "Anzahl aller Medien mit Disc-IDs" -#: ../root/statistics/stats.js:399 +#: ../root/statistics/stats.js:525 msgid "Mediums with Disc IDs" msgstr "Medien mit Disc-IDs" -#: ../root/statistics/stats.js:404 +#: ../root/statistics/stats.js:530 msgid "Count of all places" msgstr "Anzahl aller Örtlichkeiten" -#: ../root/statistics/stats.js:410 +#: ../root/statistics/stats.js:536 msgid "Count of all Releases at Default Data Quality" msgstr "Anzahl aller Veröffentlichungen mit Standarddatenqualität" -#: ../root/statistics/stats.js:411 +#: ../root/statistics/stats.js:537 msgid "Default Data Quality" msgstr "Standarddatenqualität" -#: ../root/statistics/stats.js:416 +#: ../root/statistics/stats.js:542 msgid "Count of all Releases at High Data Quality" msgstr "Anzahl aller Veröffentlichungen mit hoher Datenqualität" -#: ../root/statistics/stats.js:417 +#: ../root/statistics/stats.js:543 msgid "High Data Quality" msgstr "Hohe Datenqualität" -#: ../root/statistics/stats.js:422 +#: ../root/statistics/stats.js:548 msgid "Count of all Releases at Low Data Quality" msgstr "Anzahl aller Veröffentlichungen mit niedriger Datenqualität" -#: ../root/statistics/stats.js:423 +#: ../root/statistics/stats.js:549 msgid "Low Data Quality" msgstr "Niedrige Datenqualität" -#: ../root/statistics/stats.js:428 +#: ../root/statistics/stats.js:554 msgid "Count of all Releases at Normal Data Quality" msgstr "Anzahl aller Veröffentlichungen mit normaler Datenqualität" -#: ../root/statistics/stats.js:429 +#: ../root/statistics/stats.js:555 msgid "Normal Data Quality" msgstr "Normale Datenqualität" -#: ../root/statistics/stats.js:434 +#: ../root/statistics/stats.js:560 msgid "Count of all Releases at Unknown Data Quality" msgstr "Anzahl aller Veröffentlichungen mit unbekannter Datenqualität" -#: ../root/statistics/stats.js:435 +#: ../root/statistics/stats.js:561 msgid "Unknown Data Quality" msgstr "Unbekannte Datenqualität" -#: ../root/statistics/stats.js:440 +#: ../root/statistics/stats.js:566 msgid "Count of all Ratings" msgstr "Anzahl aller Bewertungen" -#: ../root/statistics/stats.js:441 +#: ../root/statistics/stats.js:567 msgid "Ratings" msgstr "Bewertungen" -#: ../root/statistics/stats.js:446 +#: ../root/statistics/stats.js:572 msgid "Count of all Artist Ratings" msgstr "Anzahl aller Künstlerbewertungen" -#: ../root/statistics/stats.js:447 +#: ../root/statistics/stats.js:573 msgid "Artist Ratings" msgstr "Künstlerbewertungen" -#: ../root/statistics/stats.js:452 +#: ../root/statistics/stats.js:578 msgid "Count of all Label Ratings" msgstr "Anzahl aller Labelbewertungen" -#: ../root/statistics/stats.js:453 +#: ../root/statistics/stats.js:579 msgid "Label Ratings" msgstr "Labelbewertungen" -#: ../root/statistics/stats.js:458 +#: ../root/statistics/stats.js:584 msgid "Count of all Place Ratings" msgstr "" -#: ../root/statistics/stats.js:459 +#: ../root/statistics/stats.js:585 msgid "Place Ratings" msgstr "" -#: ../root/statistics/stats.js:464 +#: ../root/statistics/stats.js:590 msgid "Count of all Ratings (raw)" msgstr "Anzahl aller Bewertungen (roh)" -#: ../root/statistics/stats.js:465 +#: ../root/statistics/stats.js:591 msgid "Ratings (raw)" msgstr "Bewertungen (roh)" -#: ../root/statistics/stats.js:470 +#: ../root/statistics/stats.js:596 msgid "Count of all Artist Ratings (raw)" msgstr "Anzahl aller Künstlerbewertungen (roh)" -#: ../root/statistics/stats.js:471 +#: ../root/statistics/stats.js:597 msgid "Artist Ratings (raw)" msgstr "Künstlerbewertungen (roh)" -#: ../root/statistics/stats.js:476 +#: ../root/statistics/stats.js:602 msgid "Count of all Label Ratings (raw)" msgstr "Anzahl aller Labelbewertungen (roh)" -#: ../root/statistics/stats.js:477 +#: ../root/statistics/stats.js:603 msgid "Label Ratings (raw)" msgstr "Labelbewertungen (roh)" -#: ../root/statistics/stats.js:482 +#: ../root/statistics/stats.js:608 msgid "Count of all Place Ratings (raw)" msgstr "" -#: ../root/statistics/stats.js:483 +#: ../root/statistics/stats.js:609 msgid "Place Ratings (raw)" msgstr "" -#: ../root/statistics/stats.js:488 +#: ../root/statistics/stats.js:614 msgid "Count of all Recording Ratings (raw)" msgstr "Anzahl aller Aufnahmenbewertungen (roh)" -#: ../root/statistics/stats.js:489 +#: ../root/statistics/stats.js:615 msgid "Recording Ratings (raw)" msgstr "Aufnahmebewertungen (roh)" -#: ../root/statistics/stats.js:494 +#: ../root/statistics/stats.js:620 msgid "Count of all Release Group Ratings (raw)" msgstr "Anzahl aller Veröffentlichungsgruppenbewertungen (roh)" -#: ../root/statistics/stats.js:495 +#: ../root/statistics/stats.js:621 msgid "Release Group Ratings (raw)" msgstr "Veröffentlichungsgruppenbewertungen (roh)" -#: ../root/statistics/stats.js:500 +#: ../root/statistics/stats.js:626 msgid "Count of all Work Ratings (raw)" msgstr "Anzahl aller Werkbewertungen (roh)" -#: ../root/statistics/stats.js:501 +#: ../root/statistics/stats.js:627 msgid "Work Ratings (raw)" msgstr "Werkbewertungen (roh)" -#: ../root/statistics/stats.js:506 +#: ../root/statistics/stats.js:632 msgid "Count of all Recording Ratings" msgstr "Anzahl aller Aufnahmenbewertungen" -#: ../root/statistics/stats.js:507 +#: ../root/statistics/stats.js:633 msgid "Recording Ratings" msgstr "Aufnahmebewertungen" -#: ../root/statistics/stats.js:512 +#: ../root/statistics/stats.js:638 msgid "Count of all Release Group Ratings" msgstr "Anzahl aller Veröffentlichungsgruppenbewertungen" -#: ../root/statistics/stats.js:513 +#: ../root/statistics/stats.js:639 msgid "Release Group Ratings" msgstr "Veröffentlichungsgruppenbewertungen" -#: ../root/statistics/stats.js:518 +#: ../root/statistics/stats.js:644 msgid "Count of all Work Ratings" msgstr "Anzahl aller Werkbewertungen" -#: ../root/statistics/stats.js:519 +#: ../root/statistics/stats.js:645 msgid "Work Ratings" msgstr "Werkbewertungen" -#: ../root/statistics/stats.js:524 +#: ../root/statistics/stats.js:650 msgid "Count of all recordings" msgstr "Anzahl aller Aufnahmen" -#: ../root/statistics/stats.js:530 +#: ../root/statistics/stats.js:656 msgid "Count of all Recordings with ISRCs" msgstr "Anzahl aller Aufnahmen mit ISRCs" -#: ../root/statistics/stats.js:531 +#: ../root/statistics/stats.js:657 msgid "Recordings with ISRCs" msgstr "Aufnahmen mit ISRCs" -#: ../root/statistics/stats.js:536 +#: ../root/statistics/stats.js:662 msgid "Count of all standalone recordings" msgstr "" -#: ../root/statistics/stats.js:537 +#: ../root/statistics/stats.js:663 msgid "Standalone recordings" msgstr "" -#: ../root/statistics/stats.js:542 +#: ../root/statistics/stats.js:668 msgid "Count of all releases" msgstr "Anzahl aller Veröffentlichungen" -#: ../root/statistics/stats.js:548 +#: ../root/statistics/stats.js:674 msgid "Releases with no country set" msgstr "Veröffentlichungen ohne Land" -#: ../root/statistics/stats.js:554 ../root/statistics/stats.js:555 -#: ../root/statistics/stats.js:572 +#: ../root/statistics/stats.js:680 ../root/statistics/stats.js:681 +#: ../root/statistics/stats.js:698 msgid "Releases with Amazon Cover Art" msgstr "Veröffentlichungen mit Amazon-Cover-Art" -#: ../root/statistics/stats.js:560 ../root/statistics/stats.js:561 +#: ../root/statistics/stats.js:686 ../root/statistics/stats.js:687 msgid "Releases with CAA Cover Art" msgstr "Veröffentlichungen mit CAA-Cover-Art" -#: ../root/statistics/stats.js:566 ../root/statistics/stats.js:567 +#: ../root/statistics/stats.js:692 ../root/statistics/stats.js:693 msgid "Releases with No Cover Art" msgstr "Veröffentlichungen ohne Cover-Art" -#: ../root/statistics/stats.js:573 +#: ../root/statistics/stats.js:699 msgid "Releases with Cover Art from Relationships" msgstr "Veröffentlichungen mit Cover-Art von Beziehungen" -#: ../root/statistics/stats.js:578 +#: ../root/statistics/stats.js:704 msgid "Releases with a no-format medium" msgstr "Veröffentlichungen mit einem Medium ohne Format" -#: ../root/statistics/stats.js:579 +#: ../root/statistics/stats.js:705 msgid "Unknown Format (release)" msgstr "Unbekanntes Format (Veröffentlichung)" -#: ../root/statistics/stats.js:584 ../root/statistics/stats.js:585 +#: ../root/statistics/stats.js:710 ../root/statistics/stats.js:711 msgid "Releases with Cover Art" msgstr "Veröffentlichungen mit Cover-Art" -#: ../root/statistics/stats.js:590 +#: ../root/statistics/stats.js:716 msgid "Count of all Releases with Disc IDs" msgstr "Anzahl aller Veröffentlichungen mit Disc-IDs" -#: ../root/statistics/stats.js:591 +#: ../root/statistics/stats.js:717 msgid "Releases with Disc IDs" msgstr "Veröffentlichungen mit Disc-IDs" -#: ../root/statistics/stats.js:596 +#: ../root/statistics/stats.js:722 msgid "Releases with no language set" msgstr "Veröffentlichungen ohne Sprache" -#: ../root/statistics/stats.js:597 +#: ../root/statistics/stats.js:723 msgid "Unknown Language" msgstr "Unbekannte Sprache" -#: ../root/statistics/stats.js:602 +#: ../root/statistics/stats.js:728 msgid "Count of all Releases not V.A." msgstr "Anzahl aller Veröffentlichungen, die nicht von diversen Künstlern sind" -#: ../root/statistics/stats.js:603 +#: ../root/statistics/stats.js:729 msgid "Releases not VA" msgstr "Veröffentlichungen nicht von diversen Künstlern" -#: ../root/statistics/stats.js:608 +#: ../root/statistics/stats.js:734 msgid "Releases with no script set" msgstr "Veröffentlichungen ohne Schrift" -#: ../root/statistics/stats.js:609 +#: ../root/statistics/stats.js:735 msgid "Unknown Script" msgstr "Unbekannte Schrift" -#: ../root/statistics/stats.js:614 +#: ../root/statistics/stats.js:740 msgid "Count of all Releases by Various Artists" msgstr "Anzahl aller Veröffentlichungen von diversen Künstlern" -#: ../root/statistics/stats.js:615 +#: ../root/statistics/stats.js:741 msgid "Releases (VA)" msgstr "Veröffentlichungen (Diverse Künstler)" -#: ../root/statistics/stats.js:620 +#: ../root/statistics/stats.js:746 msgid "Count of all release groups" msgstr "Anzahl aller Veröffentlichungsgruppen" -#: ../root/statistics/stats.js:626 +#: ../root/statistics/stats.js:752 msgid "Count of all series" msgstr "Anzahl aller Serien" -#: ../root/statistics/stats.js:632 +#: ../root/statistics/stats.js:758 msgid "Count of all Tags" msgstr "Anzahl aller Tags" -#: ../root/statistics/stats.js:633 +#: ../root/statistics/stats.js:759 msgid "Tags" msgstr "Tags" -#: ../root/statistics/stats.js:638 +#: ../root/statistics/stats.js:764 msgid "Count of all Tags (raw)" msgstr "Anzahl aller Tags (roh)" -#: ../root/statistics/stats.js:639 +#: ../root/statistics/stats.js:765 msgid "Tags (raw)" msgstr "Tags (roh)" -#: ../root/statistics/stats.js:644 +#: ../root/statistics/stats.js:770 msgid "Count of all Area Tags (raw)" msgstr "Anzahl aller Gebiet-Tags (roh)" -#: ../root/statistics/stats.js:645 +#: ../root/statistics/stats.js:771 msgid "Area Tags (raw)" msgstr "Gebiet-Tags (roh)" -#: ../root/statistics/stats.js:650 +#: ../root/statistics/stats.js:776 msgid "Count of all Artist Tags (raw)" msgstr "Anzahl aller Künstler-Tags (roh)" -#: ../root/statistics/stats.js:651 +#: ../root/statistics/stats.js:777 msgid "Artist Tags (raw)" msgstr "Künstler-Tags (roh)" -#: ../root/statistics/stats.js:656 +#: ../root/statistics/stats.js:782 msgid "Count of all Instrument Tags (raw)" msgstr "Anzahl aller Instrument-Tags (roh)" -#: ../root/statistics/stats.js:657 +#: ../root/statistics/stats.js:783 msgid "Instrument Tags (raw)" msgstr "Instrument-Tags (roh)" -#: ../root/statistics/stats.js:662 +#: ../root/statistics/stats.js:788 msgid "Count of all Label Tags (raw)" msgstr "Anzahl aller Label-Tags (roh)" -#: ../root/statistics/stats.js:663 +#: ../root/statistics/stats.js:789 msgid "Label Tags (raw)" msgstr "Label-Tags (roh)" -#: ../root/statistics/stats.js:668 +#: ../root/statistics/stats.js:794 msgid "Count of all Recording Tags (raw)" msgstr "Anzahl aller Aufnahmen-Tags (roh)" -#: ../root/statistics/stats.js:669 +#: ../root/statistics/stats.js:795 msgid "Recording Tags (raw)" msgstr "Aufnahme-Tags (roh)" -#: ../root/statistics/stats.js:674 +#: ../root/statistics/stats.js:800 msgid "Count of all Release Tags (raw)" msgstr "Anzahl aller Veröffentlichungen-Tags (roh)" -#: ../root/statistics/stats.js:675 +#: ../root/statistics/stats.js:801 msgid "Release Tags (raw)" msgstr "Veröffentlichung-Tags (roh)" -#: ../root/statistics/stats.js:680 +#: ../root/statistics/stats.js:806 msgid "Count of all Release Group Tags (raw)" msgstr "Anzahl aller Veröffentlichungsgruppen-Tags (roh)" -#: ../root/statistics/stats.js:681 +#: ../root/statistics/stats.js:807 msgid "Release Group Tags (raw)" msgstr "Veröffentlichungsgruppen-Tags (roh)" -#: ../root/statistics/stats.js:686 +#: ../root/statistics/stats.js:812 msgid "Count of all Series Tags (raw)" msgstr "Anzahl aller Serie-Tags (roh)" -#: ../root/statistics/stats.js:687 +#: ../root/statistics/stats.js:813 msgid "Series Tags (raw)" msgstr "Serie-Tags (roh)" -#: ../root/statistics/stats.js:692 +#: ../root/statistics/stats.js:818 msgid "Count of all Work Tags (raw)" msgstr "Anzahl aller Werk-Tags (roh)" -#: ../root/statistics/stats.js:693 +#: ../root/statistics/stats.js:819 msgid "Work Tags (raw)" msgstr "Werk-Tags (roh)" -#: ../root/statistics/stats.js:698 +#: ../root/statistics/stats.js:824 msgid "Count of all Tracks" msgstr "Anzahl aller Titel" -#: ../root/statistics/stats.js:699 +#: ../root/statistics/stats.js:825 msgid "Tracks" msgstr "Titel" -#: ../root/statistics/stats.js:704 +#: ../root/statistics/stats.js:830 msgid "Count of all votes" msgstr "Anzahl aller Stimmen" -#: ../root/statistics/stats.js:711 +#: ../root/statistics/stats.js:837 msgid "Count of all Abstain votes" msgstr "Anzahl aller Enthaltungsstimmen" -#: ../root/statistics/stats.js:712 +#: ../root/statistics/stats.js:838 msgid "Abstentions" msgstr "Enthaltungen" -#: ../root/statistics/stats.js:717 +#: ../root/statistics/stats.js:843 msgid "Count of all No votes" msgstr "Anzahl aller Nein-Stimmen" -#: ../root/statistics/stats.js:718 +#: ../root/statistics/stats.js:844 msgid "No Votes" msgstr "Keine Stimmen" -#: ../root/statistics/stats.js:723 +#: ../root/statistics/stats.js:849 msgid "Count of votes per day" msgstr "Anzahl Stimmen pro Tag" -#: ../root/statistics/stats.js:725 +#: ../root/statistics/stats.js:851 msgid "Votes per day" msgstr "Stimmen pro Tag" -#: ../root/statistics/stats.js:730 +#: ../root/statistics/stats.js:856 msgid "Count of votes per week" msgstr "Anzahl Stimmen pro Woche" -#: ../root/statistics/stats.js:731 +#: ../root/statistics/stats.js:857 msgid "Votes per week" msgstr "Stimmen pro Woche" -#: ../root/statistics/stats.js:736 +#: ../root/statistics/stats.js:862 msgid "Count of all Yes votes" msgstr "Anzahl aller Ja-Stimmen" -#: ../root/statistics/stats.js:737 +#: ../root/statistics/stats.js:863 msgid "Yes Votes" msgstr "Ja-Stimmen" -#: ../root/statistics/stats.js:742 +#: ../root/statistics/stats.js:868 msgid "Count of all works" msgstr "Anzahl aller Werke" -#: ../root/statistics/stats.js:748 +#: ../root/statistics/stats.js:874 msgid "Count of all Works with ISWCs" msgstr "" -#: ../root/statistics/stats.js:749 +#: ../root/statistics/stats.js:875 msgid "Works with ISWCs" msgstr "" -#: ../root/statistics/stats.js:751 +#: ../root/statistics/stats.js:877 msgid "/day" msgstr "/Tag" -#: ../root/statistics/stats.js:760 +#: ../root/statistics/stats.js:886 msgid "Count of all Releases with {n} Disc IDs" msgstr "Anzahl aller Veröffentlichungen mit {n} Disc-IDs" -#: ../root/statistics/stats.js:762 +#: ../root/statistics/stats.js:888 msgid "Releases with 1 Disc ID" msgid_plural "Releases with {n} Disc IDs" msgstr[0] "Veröffentlichungen mit einer Disc-ID" msgstr[1] "Veröffentlichungen mit {n} Disc-IDs" -#: ../root/statistics/stats.js:772 +#: ../root/statistics/stats.js:898 msgid "Count of all Mediums with {n} Disc IDs" msgstr "Anzahl aller Medien mit {n} Disc-IDs" -#: ../root/statistics/stats.js:774 +#: ../root/statistics/stats.js:900 msgid "Mediums with 1 Disc ID" msgid_plural "Mediums with {n} Disc IDs" msgstr[0] "Medien mit einer Disc-ID" msgstr[1] "Medien mit {n} Disc-IDs" -#: ../root/statistics/stats.js:784 +#: ../root/statistics/stats.js:910 msgid "Count of all Recordings with {n} Releases" msgstr "Anzahl aller Aufnahmen mit {n} Veröffentlichungen" -#: ../root/statistics/stats.js:786 +#: ../root/statistics/stats.js:912 msgid "Recordings with 1 Release" msgid_plural "Recordings with {n} Releases" msgstr[0] "Aufnahmen mit einer Veröffentlichung" msgstr[1] "Aufnahmen mit {n} Veröffentlichungen" -#: ../root/statistics/stats.js:796 +#: ../root/statistics/stats.js:922 msgid "Count of all Release Groups with {n} Releases" msgstr "Anzahl aller Veröffentlichungsgruppen mit {n} Veröffentlichungen" -#: ../root/statistics/stats.js:798 +#: ../root/statistics/stats.js:924 msgid "Release Groups with 1 Release" msgid_plural "Release Groups with {n} Releases" msgstr[0] "Veröffentlichungsgruppen mit einer Veröffentlichung" msgstr[1] "Veröffentlichungsgruppen mit {n} Veröffentlichungen" -#: ../root/statistics/stats.js:840 +#: ../root/statistics/stats.js:966 msgid "{country} artists" msgstr "{country} Künstler" -#: ../root/statistics/stats.js:847 +#: ../root/statistics/stats.js:973 msgid "{country} labels" msgstr "{country} Labels" -#: ../root/statistics/stats.js:854 +#: ../root/statistics/stats.js:980 msgid "{country} releases" msgstr "{country} Veröffentlichungen" -#: ../root/statistics/stats.js:866 +#: ../root/statistics/stats.js:992 msgid "{name} releases" msgstr "{name} Veröffentlichungen" -#: ../root/statistics/stats.js:873 +#: ../root/statistics/stats.js:999 msgid "{name} mediums" msgstr "{name} Medien" -#: ../root/statistics/stats.js:885 +#: ../root/statistics/stats.js:1011 msgid "{language} releases" msgstr "{language} Veröffentlichungen" -#: ../root/statistics/stats.js:892 +#: ../root/statistics/stats.js:1018 msgid "l_{first}_{second} Relationships" msgstr "l_{first}_{second} Beziehungen" -#: ../root/statistics/stats.js:913 +#: ../root/statistics/stats.js:1039 msgid "{script} releases" msgstr "{script} Veröffentlichungen" diff --git a/po/statistics.el.po b/po/statistics.el.po index 47114a7e0b1..bab825cd5fb 100644 --- a/po/statistics.el.po +++ b/po/statistics.el.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: MusicBrainz\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2021-07-19 17:36+0000\n" -"Last-Translator: Nicolás Tamargo <email address hidden>\n" +"PO-Revision-Date: 2021-09-28 18:40+0000\n" +"Last-Translator: Marios Pizinas <email address hidden>\n" "Language-Team: Greek (http://www.transifex.com/musicbrainz/musicbrainz/language/el/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -1132,15 +1132,15 @@ msgid "Draw a rectangle on either graph" msgstr "Σχεδιασμός παραλληλογράμμου σε οποιοδήποτε γράφημα" #: ../root/statistics/layout.tt:4 ../root/statistics/Editors.js:98 -#: ../root/statistics/Editors.js:109 ../root/statistics/Index.js:924 +#: ../root/statistics/Editors.js:109 ../root/statistics/Index.js:1083 #: ../root/statistics/StatisticsLayout.js:82 msgid "Editors" msgstr "" #: ../root/statistics/layout.tt:4 ../root/statistics/Edits.js:37 #: ../root/statistics/Edits.js:41 ../root/statistics/Edits.js:50 -#: ../root/statistics/Index.js:1048 ../root/statistics/StatisticsLayout.js:72 -#: ../root/statistics/stats.js:184 +#: ../root/statistics/Index.js:1207 ../root/statistics/StatisticsLayout.js:72 +#: ../root/statistics/stats.js:310 msgid "Edits" msgstr "Επεξεργασίες" @@ -1227,20 +1227,20 @@ msgstr "Κατάταξη" msgid "Country" msgstr "Χώρα" -#: ../root/statistics/Countries.js:53 ../root/statistics/Index.js:227 -#: ../root/statistics/Index.js:231 ../root/statistics/stats.js:45 +#: ../root/statistics/Countries.js:53 ../root/statistics/Index.js:231 +#: ../root/statistics/Index.js:235 ../root/statistics/stats.js:45 msgid "Artists" msgstr "Καλλιτέχνες" #: ../root/statistics/Countries.js:57 ../root/statistics/CoverArt.js:105 -#: ../root/statistics/Formats.js:56 ../root/statistics/Index.js:359 +#: ../root/statistics/Formats.js:56 ../root/statistics/Index.js:363 #: ../root/statistics/LanguagesScripts.js:71 -#: ../root/statistics/LanguagesScripts.js:152 ../root/statistics/stats.js:543 +#: ../root/statistics/LanguagesScripts.js:152 ../root/statistics/stats.js:669 msgid "Releases" msgstr "Κυκλοφορίες" -#: ../root/statistics/Countries.js:61 ../root/statistics/Index.js:694 -#: ../root/statistics/Index.js:701 ../root/statistics/stats.js:375 +#: ../root/statistics/Countries.js:61 ../root/statistics/Index.js:698 +#: ../root/statistics/Index.js:705 ../root/statistics/stats.js:501 msgid "Labels" msgstr "Δισκογραφικές εταιρείες" @@ -1250,7 +1250,7 @@ msgid "Total" msgstr "Σύνολο" #: ../root/statistics/Countries.js:87 ../root/statistics/stats.js:57 -#: ../root/statistics/stats.js:381 ../root/statistics/stats.js:549 +#: ../root/statistics/stats.js:507 ../root/statistics/stats.js:675 msgid "Unknown Country" msgstr "Άγνωστη χώρα" @@ -1405,7 +1405,7 @@ msgstr "Μορφή" msgid "% of total releases" msgstr "% από σύνολο κυκλοφοριών" -#: ../root/statistics/Formats.js:58 ../root/statistics/stats.js:387 +#: ../root/statistics/Formats.js:58 ../root/statistics/stats.js:513 msgid "Mediums" msgstr "Μέσα" @@ -1425,27 +1425,27 @@ msgstr "Βασικά μεταδεδομένα" msgid "Core Entities" msgstr "Βασικά στοιχεία" -#: ../root/statistics/Index.js:92 ../root/statistics/Index.js:234 +#: ../root/statistics/Index.js:92 ../root/statistics/Index.js:238 msgid "Artists:" msgstr "Καλλιτέχνες:" -#: ../root/statistics/Index.js:96 ../root/statistics/Index.js:614 -#: ../root/statistics/Index.js:640 +#: ../root/statistics/Index.js:96 ../root/statistics/Index.js:618 +#: ../root/statistics/Index.js:644 msgid "Release Groups:" msgstr "Ομάδες κυκλοφοριών:" -#: ../root/statistics/Index.js:100 ../root/statistics/Index.js:362 -#: ../root/statistics/Index.js:384 ../root/statistics/Index.js:410 -#: ../root/statistics/Index.js:436 ../root/statistics/Index.js:470 -#: ../root/statistics/Index.js:519 +#: ../root/statistics/Index.js:100 ../root/statistics/Index.js:366 +#: ../root/statistics/Index.js:388 ../root/statistics/Index.js:414 +#: ../root/statistics/Index.js:440 ../root/statistics/Index.js:474 +#: ../root/statistics/Index.js:523 msgid "Releases:" msgstr "Κυκλοφορίες:" -#: ../root/statistics/Index.js:104 ../root/statistics/Index.js:563 +#: ../root/statistics/Index.js:104 ../root/statistics/Index.js:567 msgid "Mediums:" msgstr "Μέσα:" -#: ../root/statistics/Index.js:108 ../root/statistics/Index.js:672 +#: ../root/statistics/Index.js:108 ../root/statistics/Index.js:676 msgid "Recordings:" msgstr "Ηχογραφήσεις:" @@ -1457,8 +1457,8 @@ msgstr "Κομμάτια:" msgid "Labels:" msgstr "Δισκογραφικές εταιρείες:" -#: ../root/statistics/Index.js:120 ../root/statistics/Index.js:729 -#: ../root/statistics/Index.js:761 +#: ../root/statistics/Index.js:120 ../root/statistics/Index.js:733 +#: ../root/statistics/Index.js:765 msgid "Works:" msgstr "Έργα:" @@ -1466,24 +1466,24 @@ msgstr "Έργα:" msgid "URLs:" msgstr "" -#: ../root/statistics/Index.js:128 ../root/statistics/Index.js:791 +#: ../root/statistics/Index.js:128 ../root/statistics/Index.js:795 msgid "Areas:" msgstr "" -#: ../root/statistics/Index.js:132 ../root/statistics/Index.js:819 +#: ../root/statistics/Index.js:132 ../root/statistics/Index.js:823 msgid "Places:" msgstr "" -#: ../root/statistics/Index.js:136 ../root/statistics/Index.js:847 +#: ../root/statistics/Index.js:136 ../root/statistics/Index.js:851 msgctxt "plural" msgid "Series:" msgstr "" -#: ../root/statistics/Index.js:140 ../root/statistics/Index.js:869 +#: ../root/statistics/Index.js:140 ../root/statistics/Index.js:873 msgid "Instruments:" msgstr "" -#: ../root/statistics/Index.js:144 ../root/statistics/Index.js:899 +#: ../root/statistics/Index.js:144 ../root/statistics/Index.js:903 msgid "Events:" msgstr "" @@ -1503,422 +1503,504 @@ msgstr "" msgid "Relationships:" msgstr "Σχέσεις:" -#: ../root/statistics/Index.js:167 +#: ../root/statistics/Index.js:167 ../root/statistics/Index.js:924 +#: ../root/statistics/Index.js:928 ../root/statistics/Index.js:931 +#: ../root/statistics/stats.js:171 +msgid "Collections" +msgstr "Συλλογές\nΣυλλογών" + +#: ../root/statistics/Index.js:171 msgid "CD Stubs (all time / current):" msgstr "" -#: ../root/statistics/Index.js:176 +#: ../root/statistics/Index.js:180 msgid "Tags (raw / aggregated):" msgstr "" -#: ../root/statistics/Index.js:182 +#: ../root/statistics/Index.js:186 msgid "Ratings (raw / aggregated):" msgstr "" -#: ../root/statistics/Index.js:190 +#: ../root/statistics/Index.js:194 msgid "Identifiers" msgstr "Αναγνωριστικά" -#: ../root/statistics/Index.js:193 +#: ../root/statistics/Index.js:197 msgid "MBIDs:" msgstr "" -#: ../root/statistics/Index.js:197 +#: ../root/statistics/Index.js:201 msgid "ISRCs (all / unique):" msgstr "ISRC (όλα / μοναδικά):" -#: ../root/statistics/Index.js:203 +#: ../root/statistics/Index.js:207 msgid "ISWCs (all / unique):" msgstr "ISWC (όλα / μοναδικά):" -#: ../root/statistics/Index.js:209 ../root/statistics/Index.js:514 +#: ../root/statistics/Index.js:213 ../root/statistics/Index.js:518 msgid "Disc IDs:" msgstr "Disc IDs:" -#: ../root/statistics/Index.js:213 +#: ../root/statistics/Index.js:217 msgid "Barcodes:" msgstr "Bardcodes:" -#: ../root/statistics/Index.js:217 +#: ../root/statistics/Index.js:221 msgid "IPIs:" msgstr "IPI:" -#: ../root/statistics/Index.js:221 +#: ../root/statistics/Index.js:225 msgid "ISNIs:" msgstr "" -#: ../root/statistics/Index.js:240 +#: ../root/statistics/Index.js:244 msgid "of type Person:" msgstr "τύπου άτομο:" -#: ../root/statistics/Index.js:246 +#: ../root/statistics/Index.js:250 msgid "of type Group:" msgstr "τύπου συγκρότημα:" -#: ../root/statistics/Index.js:252 +#: ../root/statistics/Index.js:256 msgid "of type Orchestra:" msgstr "" -#: ../root/statistics/Index.js:258 +#: ../root/statistics/Index.js:262 msgid "of type Choir:" msgstr "" -#: ../root/statistics/Index.js:264 +#: ../root/statistics/Index.js:268 msgid "of type Character:" msgstr "" -#: ../root/statistics/Index.js:270 +#: ../root/statistics/Index.js:274 msgid "of type Other:" msgstr "άλλου τύπου" -#: ../root/statistics/Index.js:276 +#: ../root/statistics/Index.js:280 msgid "with no type set:" msgstr "χωρίς ρυθμισμένο τύπο" -#: ../root/statistics/Index.js:282 +#: ../root/statistics/Index.js:286 msgid "with appearances in artist credits:" msgstr "" -#: ../root/statistics/Index.js:288 +#: ../root/statistics/Index.js:292 msgid "with no appearances in artist credits:" msgstr "" -#: ../root/statistics/Index.js:293 +#: ../root/statistics/Index.js:297 msgid "Non-group artists:" msgstr "Καλλιτέχνες που δεν είναι συγκροτήματα:" -#: ../root/statistics/Index.js:299 +#: ../root/statistics/Index.js:303 msgid "Male:" msgstr "Άνδρας:" -#: ../root/statistics/Index.js:310 +#: ../root/statistics/Index.js:314 msgid "Female:" msgstr "Γυναίκα:" -#: ../root/statistics/Index.js:321 +#: ../root/statistics/Index.js:325 msgid "Other gender:" msgstr "Άλλο φύλο:" -#: ../root/statistics/Index.js:332 +#: ../root/statistics/Index.js:336 msgid "Gender not applicable:" msgstr "" -#: ../root/statistics/Index.js:343 +#: ../root/statistics/Index.js:347 msgid "with no gender set:" msgstr "χωρίς ρυθμισμένο φύλο:" -#: ../root/statistics/Index.js:355 +#: ../root/statistics/Index.js:359 msgid "Releases, Data Quality, and Disc IDs" msgstr "" -#: ../root/statistics/Index.js:368 +#: ../root/statistics/Index.js:372 msgid "by various artists:" msgstr "από διάφορους καλλιτέχνες:" -#: ../root/statistics/Index.js:374 +#: ../root/statistics/Index.js:378 msgid "by a single artist:" msgstr "από έναν καλλιτέχνη:" -#: ../root/statistics/Index.js:381 +#: ../root/statistics/Index.js:385 msgid "Release Status" msgstr "Κατάσταση κυκλοφορίας" -#: ../root/statistics/Index.js:400 +#: ../root/statistics/Index.js:404 msgid "No status set" msgstr "Δεν ορίστηκε η κατάσταση" -#: ../root/statistics/Index.js:407 +#: ../root/statistics/Index.js:411 msgid "Release Packaging" msgstr "Συσκευασία κυκλοφορίας" -#: ../root/statistics/Index.js:426 +#: ../root/statistics/Index.js:430 msgid "No packaging set" msgstr "Δεν ορίστηκε η συσκευασία" -#: ../root/statistics/Index.js:433 +#: ../root/statistics/Index.js:437 msgid "Cover Art Sources" msgstr "" -#: ../root/statistics/Index.js:442 +#: ../root/statistics/Index.js:446 msgid "CAA:" msgstr "" -#: ../root/statistics/Index.js:448 +#: ../root/statistics/Index.js:452 msgid "Amazon:" msgstr "" -#: ../root/statistics/Index.js:454 +#: ../root/statistics/Index.js:458 msgid "URL Relationships:" msgstr "" -#: ../root/statistics/Index.js:460 +#: ../root/statistics/Index.js:464 msgid "No front cover art:" msgstr "" -#: ../root/statistics/Index.js:467 +#: ../root/statistics/Index.js:471 msgid "Data Quality" msgstr "Ποιότητα δεδομένων" -#: ../root/statistics/Index.js:476 +#: ../root/statistics/Index.js:480 msgid "High Data Quality:" msgstr "Υψηλή ποιότητα δεδομένων:" -#: ../root/statistics/Index.js:482 +#: ../root/statistics/Index.js:486 msgid "Default Data Quality:" msgstr "Προεπιλεγμένη ποιότητα δεδομένων:" -#: ../root/statistics/Index.js:489 +#: ../root/statistics/Index.js:493 msgid "Normal Data Quality:" msgstr "Κανονική ποιότητα δεδομένων:" -#: ../root/statistics/Index.js:496 +#: ../root/statistics/Index.js:500 msgid "Unknown Data Quality:" msgstr "Άγνωστη ποιότητα δεδομένων:" -#: ../root/statistics/Index.js:504 +#: ../root/statistics/Index.js:508 msgid "Low Data Quality:" msgstr "Χαμηλή ποιότητα δεδομένων:" -#: ../root/statistics/Index.js:511 ../root/statistics/stats.js:177 +#: ../root/statistics/Index.js:515 ../root/statistics/stats.js:303 msgid "Disc IDs" msgstr "Disc IDs" -#: ../root/statistics/Index.js:525 +#: ../root/statistics/Index.js:529 msgid "Releases with no disc IDs:" msgstr "" -#: ../root/statistics/Index.js:532 +#: ../root/statistics/Index.js:536 msgid "Releases with at least one disc ID:" msgstr "" -#: ../root/statistics/Index.js:543 ../root/statistics/Index.js:587 +#: ../root/statistics/Index.js:547 ../root/statistics/Index.js:591 msgid "with {num} disc ID:" msgid_plural "with {num} disc IDs:" msgstr[0] "" msgstr[1] "" -#: ../root/statistics/Index.js:558 ../root/statistics/Index.js:600 +#: ../root/statistics/Index.js:562 ../root/statistics/Index.js:604 msgid "with 10 or more disc IDs:" msgstr "" -#: ../root/statistics/Index.js:569 +#: ../root/statistics/Index.js:573 msgid "Mediums with no disc IDs:" msgstr "Μέσα χωρίς disc IDs:" -#: ../root/statistics/Index.js:576 +#: ../root/statistics/Index.js:580 msgid "Mediums with at least one disc ID:" msgstr "Μέσα με τουλάχιστον ένα disc ID:" -#: ../root/statistics/Index.js:607 ../root/statistics/stats.js:621 +#: ../root/statistics/Index.js:611 ../root/statistics/stats.js:747 msgid "Release Groups" msgstr "Ομάδες κυκλοφοριών" -#: ../root/statistics/Index.js:611 +#: ../root/statistics/Index.js:615 msgid "Primary Types" msgstr "Πρωτεύοντες τύποι" -#: ../root/statistics/Index.js:637 +#: ../root/statistics/Index.js:641 msgid "Secondary Types" msgstr "Δευτερεύοντες τύποι" -#: ../root/statistics/Index.js:665 ../root/statistics/Index.js:669 -#: ../root/statistics/stats.js:525 +#: ../root/statistics/Index.js:669 ../root/statistics/Index.js:673 +#: ../root/statistics/stats.js:651 msgid "Recordings" msgstr "Ηχογραφήσεις" -#: ../root/statistics/Index.js:677 +#: ../root/statistics/Index.js:681 msgid "Videos:" msgstr "" -#: ../root/statistics/Index.js:682 +#: ../root/statistics/Index.js:686 msgctxt "recording" msgid "Standalone" msgstr "" -#: ../root/statistics/Index.js:687 +#: ../root/statistics/Index.js:691 msgid "With ISRCs" msgstr "" -#: ../root/statistics/Index.js:698 ../root/statistics/Index.js:726 -#: ../root/statistics/Index.js:788 ../root/statistics/Index.js:816 -#: ../root/statistics/Index.js:844 ../root/statistics/Index.js:866 -#: ../root/statistics/Index.js:896 +#: ../root/statistics/Index.js:702 ../root/statistics/Index.js:730 +#: ../root/statistics/Index.js:792 ../root/statistics/Index.js:820 +#: ../root/statistics/Index.js:848 ../root/statistics/Index.js:870 +#: ../root/statistics/Index.js:900 msgid "Types" msgstr "" -#: ../root/statistics/Index.js:715 ../root/statistics/Index.js:743 -#: ../root/statistics/Index.js:777 ../root/statistics/Index.js:805 -#: ../root/statistics/Index.js:833 ../root/statistics/Index.js:885 -#: ../root/statistics/Index.js:913 +#: ../root/statistics/Index.js:719 ../root/statistics/Index.js:747 +#: ../root/statistics/Index.js:781 ../root/statistics/Index.js:809 +#: ../root/statistics/Index.js:837 ../root/statistics/Index.js:889 +#: ../root/statistics/Index.js:917 msgid "None" msgstr "Κανένα" -#: ../root/statistics/Index.js:722 ../root/statistics/LanguagesScripts.js:75 -#: ../root/statistics/stats.js:743 +#: ../root/statistics/Index.js:726 ../root/statistics/LanguagesScripts.js:75 +#: ../root/statistics/stats.js:869 msgid "Works" msgstr "Έργα" -#: ../root/statistics/Index.js:748 +#: ../root/statistics/Index.js:752 msgid "With ISWCs" msgstr "" -#: ../root/statistics/Index.js:758 +#: ../root/statistics/Index.js:762 msgid "Attributes" msgstr "Γνωρίσματα" -#: ../root/statistics/Index.js:784 ../root/statistics/stats.js:39 +#: ../root/statistics/Index.js:788 ../root/statistics/stats.js:39 msgid "Areas" msgstr "" -#: ../root/statistics/Index.js:812 ../root/statistics/stats.js:405 +#: ../root/statistics/Index.js:816 ../root/statistics/stats.js:531 msgid "Places" msgstr "" -#: ../root/statistics/Index.js:840 ../root/statistics/stats.js:627 +#: ../root/statistics/Index.js:844 ../root/statistics/stats.js:753 msgctxt "plural" msgid "Series" msgstr "" -#: ../root/statistics/Index.js:862 ../root/statistics/stats.js:309 +#: ../root/statistics/Index.js:866 ../root/statistics/stats.js:435 msgid "Instruments" msgstr "" -#: ../root/statistics/Index.js:892 ../root/statistics/stats.js:303 +#: ../root/statistics/Index.js:896 ../root/statistics/stats.js:429 msgid "Events" msgstr "" -#: ../root/statistics/Index.js:920 +#: ../root/statistics/Index.js:937 +msgid "Of releases" +msgstr "" + +#: ../root/statistics/Index.js:944 ../root/statistics/Index.js:977 +msgid "Generic" +msgstr "" + +#: ../root/statistics/Index.js:953 +msgid "Owned music" +msgstr "" + +#: ../root/statistics/Index.js:962 +msgid "Wishlist" +msgstr "" + +#: ../root/statistics/Index.js:970 +msgid "Of events" +msgstr "" + +#: ../root/statistics/Index.js:986 +msgid "Of type Attending" +msgstr "" + +#: ../root/statistics/Index.js:995 +msgid "Of type Maybe attending" +msgstr "" + +#: ../root/statistics/Index.js:1006 +msgid "Of areas" +msgstr "" + +#: ../root/statistics/Index.js:1012 +msgid "Of artists" +msgstr "" + +#: ../root/statistics/Index.js:1018 +msgid "Of instruments" +msgstr "" + +#: ../root/statistics/Index.js:1024 +msgid "Of labels" +msgstr "" + +#: ../root/statistics/Index.js:1030 +msgid "Of places" +msgstr "" + +#: ../root/statistics/Index.js:1036 +msgid "Of recordings" +msgstr "" + +#: ../root/statistics/Index.js:1042 +msgid "Of release groups" +msgstr "" + +#: ../root/statistics/Index.js:1048 +msgid "Of series" +msgstr "" + +#: ../root/statistics/Index.js:1054 +msgid "Of works" +msgstr "" + +#: ../root/statistics/Index.js:1060 +msgid "Public" +msgstr "Δημόσια" + +#: ../root/statistics/Index.js:1066 +msgid "Private" +msgstr "Προσωπικό" + +#: ../root/statistics/Index.js:1072 +msgid "With collaborators" +msgstr "" + +#: ../root/statistics/Index.js:1079 msgid "Editors, Edits, and Votes" msgstr "" -#: ../root/statistics/Index.js:927 +#: ../root/statistics/Index.js:1086 msgid "Editors (valid):" msgstr "" -#: ../root/statistics/Index.js:933 +#: ../root/statistics/Index.js:1092 msgid "active ever:" msgstr "" -#: ../root/statistics/Index.js:941 +#: ../root/statistics/Index.js:1100 msgid "who edited and/or voted in the last 7 days:" msgstr "" -#: ../root/statistics/Index.js:950 +#: ../root/statistics/Index.js:1109 msgid "who edited in the last 7 days:" msgstr "" -#: ../root/statistics/Index.js:958 +#: ../root/statistics/Index.js:1117 msgid "who voted in the last 7 days:" msgstr "" -#: ../root/statistics/Index.js:965 +#: ../root/statistics/Index.js:1124 msgid "who edit:" msgstr "" -#: ../root/statistics/Index.js:972 +#: ../root/statistics/Index.js:1131 msgid "who vote:" msgstr "" -#: ../root/statistics/Index.js:979 +#: ../root/statistics/Index.js:1138 msgid "who leave edit notes:" msgstr "" -#: ../root/statistics/Index.js:986 +#: ../root/statistics/Index.js:1145 msgid "who use tags:" msgstr "" -#: ../root/statistics/Index.js:993 +#: ../root/statistics/Index.js:1152 msgid "who use ratings:" msgstr "" -#: ../root/statistics/Index.js:1002 +#: ../root/statistics/Index.js:1161 msgid "who use subscriptions:" msgstr "" -#: ../root/statistics/Index.js:1011 +#: ../root/statistics/Index.js:1170 msgid "who use collections:" msgstr "" -#: ../root/statistics/Index.js:1021 +#: ../root/statistics/Index.js:1180 msgid "who have registered applications:" msgstr "" -#: ../root/statistics/Index.js:1030 +#: ../root/statistics/Index.js:1189 msgid "validated email only:" msgstr "" -#: ../root/statistics/Index.js:1036 +#: ../root/statistics/Index.js:1195 msgid "inactive:" msgstr "" -#: ../root/statistics/Index.js:1041 +#: ../root/statistics/Index.js:1200 msgid "Editors (deleted):" msgstr "" -#: ../root/statistics/Index.js:1051 ../root/statistics/Index.js:1098 +#: ../root/statistics/Index.js:1210 ../root/statistics/Index.js:1257 msgid "Edits:" msgstr "Επεξεργασίες:" -#: ../root/statistics/Index.js:1057 +#: ../root/statistics/Index.js:1216 msgid "Open:" msgstr "Ανοικτές:" -#: ../root/statistics/Index.js:1063 +#: ../root/statistics/Index.js:1222 msgid "Applied:" msgstr "Εφαρμόστηκε:" -#: ../root/statistics/Index.js:1069 +#: ../root/statistics/Index.js:1228 msgid "Voted down:" msgstr "Καταψηφίστηκαν:" -#: ../root/statistics/Index.js:1075 +#: ../root/statistics/Index.js:1234 msgid "Failed (dependency):" msgstr "Απέτυχε (εξάρτηση):" -#: ../root/statistics/Index.js:1081 +#: ../root/statistics/Index.js:1240 msgid "Failed (prerequisite):" msgstr "Απέτυχε (προαπαιτούμενα):" -#: ../root/statistics/Index.js:1087 +#: ../root/statistics/Index.js:1246 msgid "Failed (internal error):" msgstr "Απέτυχε (εσωτερικό σφάλμα):" -#: ../root/statistics/Index.js:1093 +#: ../root/statistics/Index.js:1252 msgid "Cancelled:" msgstr "Ακυρώθηκε:" -#: ../root/statistics/Index.js:1104 ../root/statistics/Index.js:1156 +#: ../root/statistics/Index.js:1263 ../root/statistics/Index.js:1315 msgid "Last 7 days:" msgstr "" -#: ../root/statistics/Index.js:1111 ../root/statistics/Index.js:1163 +#: ../root/statistics/Index.js:1270 ../root/statistics/Index.js:1322 msgid "Yesterday:" msgstr "Χθες:" -#: ../root/statistics/Index.js:1118 ../root/statistics/stats.js:706 +#: ../root/statistics/Index.js:1277 ../root/statistics/stats.js:832 msgid "Votes" msgstr "Ψήφοι" -#: ../root/statistics/Index.js:1121 ../root/statistics/Index.js:1150 +#: ../root/statistics/Index.js:1280 ../root/statistics/Index.js:1309 msgid "Votes:" msgstr "Ψήφοι:" -#: ../root/statistics/Index.js:1127 +#: ../root/statistics/Index.js:1286 msgctxt "vote" msgid "Approve" msgstr "" -#: ../root/statistics/Index.js:1133 +#: ../root/statistics/Index.js:1292 msgctxt "vote" msgid "Yes" msgstr "Ναι" -#: ../root/statistics/Index.js:1139 +#: ../root/statistics/Index.js:1298 msgctxt "vote" msgid "No" msgstr "Όχι" -#: ../root/statistics/Index.js:1145 +#: ../root/statistics/Index.js:1304 msgctxt "vote" msgid "Abstain" msgstr "" @@ -2195,744 +2277,824 @@ msgstr "" msgid "CDStub tracks" msgstr "" -#: ../root/statistics/stats.js:170 ../root/statistics/stats.js:171 +#: ../root/statistics/stats.js:177 +msgid "Collections with collaborators" +msgstr "" + +#: ../root/statistics/stats.js:183 +msgid "Private collections" +msgstr "" + +#: ../root/statistics/stats.js:189 +msgid "Public collections" +msgstr "" + +#: ../root/statistics/stats.js:195 +msgid "Area collections" +msgstr "" + +#: ../root/statistics/stats.js:201 +msgid "Artist collections" +msgstr "" + +#: ../root/statistics/stats.js:207 +msgid "Collections of type Attending" +msgstr "" + +#: ../root/statistics/stats.js:213 +msgid "Collections of type Event" +msgstr "" + +#: ../root/statistics/stats.js:219 +msgid "Event collections (all types)" +msgstr "" + +#: ../root/statistics/stats.js:225 +msgid "Instrument collections" +msgstr "" + +#: ../root/statistics/stats.js:231 +msgid "Label collections" +msgstr "" + +#: ../root/statistics/stats.js:237 +msgid "Collections of type Maybe attending" +msgstr "" + +#: ../root/statistics/stats.js:243 +msgid "Collections of type Owned music" +msgstr "" + +#: ../root/statistics/stats.js:249 +msgid "Place collections" +msgstr "" + +#: ../root/statistics/stats.js:255 +msgid "Recording collections" +msgstr "" + +#: ../root/statistics/stats.js:261 +msgid "Collections of type Release" +msgstr "" + +#: ../root/statistics/stats.js:267 +msgid "Release collections (all types)" +msgstr "" + +#: ../root/statistics/stats.js:273 +msgid "Release group collections" +msgstr "" + +#: ../root/statistics/stats.js:279 +msgid "Series collections" +msgstr "" + +#: ../root/statistics/stats.js:285 +msgid "Collections of type Wishlist" +msgstr "" + +#: ../root/statistics/stats.js:291 +msgid "Work collections" +msgstr "" + +#: ../root/statistics/stats.js:296 ../root/statistics/stats.js:297 msgid "Pieces of Cover Art" msgstr "Κομμάτια εξωφύλλου" -#: ../root/statistics/stats.js:176 +#: ../root/statistics/stats.js:302 msgid "Count of all Disc IDs" msgstr "" -#: ../root/statistics/stats.js:182 +#: ../root/statistics/stats.js:308 msgid "Count of all edits" msgstr "Πλήθος όλων των επεξεργασιών" -#: ../root/statistics/stats.js:189 +#: ../root/statistics/stats.js:315 msgid "All edits that have been applied" msgstr "Όλες οι εφαρμοσμένες επεξεργασίες" -#: ../root/statistics/stats.js:190 +#: ../root/statistics/stats.js:316 msgid "Applied edits" msgstr "Εφαρμοσμένες επεξεργασίες" -#: ../root/statistics/stats.js:195 ../root/statistics/stats.js:196 +#: ../root/statistics/stats.js:321 ../root/statistics/stats.js:322 msgid "Cancelled edits" msgstr "Ακυρωμένες επεξεργασίες" -#: ../root/statistics/stats.js:201 +#: ../root/statistics/stats.js:327 msgid "All edits that have hit an error" msgstr "Όλες οι επεξεργασίες που παρουσίασαν κάποιο σφάλμα" -#: ../root/statistics/stats.js:202 +#: ../root/statistics/stats.js:328 msgid "Error edits" msgstr "Σφάλματα επεξεργασίας" -#: ../root/statistics/stats.js:207 +#: ../root/statistics/stats.js:333 msgid "Evalnochange edits" msgstr "" -#: ../root/statistics/stats.js:208 +#: ../root/statistics/stats.js:334 msgid "Evalnochange Edits" msgstr "" -#: ../root/statistics/stats.js:213 +#: ../root/statistics/stats.js:339 msgid "All edits that have failed dependency checks" msgstr "Όλες οι επεξεργασίες που απέτυχαν στους ελέγχους εξάρτησης" -#: ../root/statistics/stats.js:214 +#: ../root/statistics/stats.js:340 msgid "Failed edits (dependency)" msgstr "Αποτυχημένες επεξεργασίες (εξάρτηση)" -#: ../root/statistics/stats.js:219 +#: ../root/statistics/stats.js:345 msgid "All edits that have failed prerequisite checks" msgstr "Όλες οι επεξεργασίες που απέτυχαν στους ελέγχους προαπαιτούμενων" -#: ../root/statistics/stats.js:220 +#: ../root/statistics/stats.js:346 msgid "Failed edits (prerequisite)" msgstr "Αποτυχημένες επεξεργασίες (προαπαιτούμενα)" -#: ../root/statistics/stats.js:225 +#: ../root/statistics/stats.js:351 msgid "All edits that have failed by being voted down" msgstr "Όλες οι επεξεργασίες οι οποίες απέτυχαν επειδή καταψηφίστηκαν" -#: ../root/statistics/stats.js:226 +#: ../root/statistics/stats.js:352 msgid "Failed edits (voted down)" msgstr "Αποτυχημένες επεξεργασίες (καταψηφίστηκαν)" -#: ../root/statistics/stats.js:231 +#: ../root/statistics/stats.js:357 msgid "Count of open edits" msgstr "Πλήθος ανοιχτών επεξεργασιών" -#: ../root/statistics/stats.js:232 +#: ../root/statistics/stats.js:358 msgid "Open Edits" msgstr "Ανοιχτές επεξεργασίες" -#: ../root/statistics/stats.js:237 +#: ../root/statistics/stats.js:363 msgid "Count of edits per day" msgstr "Πλήθος επεξεργασιών ανά ημέρα" -#: ../root/statistics/stats.js:239 +#: ../root/statistics/stats.js:365 msgid "Edits per day" msgstr "Επεξεργασίες ανά ημέρα" -#: ../root/statistics/stats.js:244 +#: ../root/statistics/stats.js:370 msgid "Count of edits per week" msgstr "" -#: ../root/statistics/stats.js:245 +#: ../root/statistics/stats.js:371 msgid "Edits per week" msgstr "Επεξεργασίες ανά εβδομάδα" -#: ../root/statistics/stats.js:250 +#: ../root/statistics/stats.js:376 msgid "Count of all editors" msgstr "" -#: ../root/statistics/stats.js:252 +#: ../root/statistics/stats.js:378 msgid "Editors (all)" msgstr "" -#: ../root/statistics/stats.js:258 +#: ../root/statistics/stats.js:384 msgid "Count of active editors (editing or voting) during the last week" msgstr "" -#: ../root/statistics/stats.js:260 +#: ../root/statistics/stats.js:386 msgid "Active Users" msgstr "Ενεργοί Χρήστες" -#: ../root/statistics/stats.js:265 +#: ../root/statistics/stats.js:391 msgid "Count of deleted editors" msgstr "" -#: ../root/statistics/stats.js:267 +#: ../root/statistics/stats.js:393 msgid "Editors (deleted)" msgstr "" -#: ../root/statistics/stats.js:273 +#: ../root/statistics/stats.js:399 msgid "Count of editors who have submitted edits during the last 7 days" msgstr "" -#: ../root/statistics/stats.js:275 +#: ../root/statistics/stats.js:401 msgid "Active Editors" msgstr "" -#: ../root/statistics/stats.js:280 +#: ../root/statistics/stats.js:406 msgid "Count of non-deleted editors" msgstr "" -#: ../root/statistics/stats.js:282 +#: ../root/statistics/stats.js:408 msgid "Editors (valid)" msgstr "" -#: ../root/statistics/stats.js:287 +#: ../root/statistics/stats.js:413 msgid "Count of active editors" msgstr "" -#: ../root/statistics/stats.js:289 +#: ../root/statistics/stats.js:415 msgid "Editors (valid & active ever)" msgstr "" -#: ../root/statistics/stats.js:295 +#: ../root/statistics/stats.js:421 msgid "Count of editors who have voted on during the last 7 days" msgstr "" -#: ../root/statistics/stats.js:297 +#: ../root/statistics/stats.js:423 msgid "Active Voters" msgstr "Ενεργοί Ψηφοφόροι" -#: ../root/statistics/stats.js:302 +#: ../root/statistics/stats.js:428 msgid "Count of all events" msgstr "" -#: ../root/statistics/stats.js:308 +#: ../root/statistics/stats.js:434 msgid "Count of all instruments" msgstr "" -#: ../root/statistics/stats.js:314 +#: ../root/statistics/stats.js:440 msgid "Count of all IPIs" msgstr "Πλήθος όλων των IPIs" -#: ../root/statistics/stats.js:315 +#: ../root/statistics/stats.js:441 msgid "IPIs" msgstr "IPI" -#: ../root/statistics/stats.js:320 +#: ../root/statistics/stats.js:446 msgid "Count of all IPIs for Artists" msgstr "Πλήθος όλων των IPIs για καλλιτέχνες" -#: ../root/statistics/stats.js:321 +#: ../root/statistics/stats.js:447 msgid "Artist IPIs" msgstr "IPIs καλλιτεχνών" -#: ../root/statistics/stats.js:326 +#: ../root/statistics/stats.js:452 msgid "Count of all IPIs for Labels" msgstr "Πλήθος όλων των IPIs για δισκογραφικές εταιρείες" -#: ../root/statistics/stats.js:327 +#: ../root/statistics/stats.js:453 msgid "Label IPIs" msgstr "IPI δισκογραφικών εταιρειών" -#: ../root/statistics/stats.js:332 +#: ../root/statistics/stats.js:458 msgid "Count of all ISNIs" msgstr "" -#: ../root/statistics/stats.js:333 +#: ../root/statistics/stats.js:459 msgid "ISNIs" msgstr "" -#: ../root/statistics/stats.js:338 +#: ../root/statistics/stats.js:464 msgid "Count of all ISNIs for Artists" msgstr "" -#: ../root/statistics/stats.js:339 +#: ../root/statistics/stats.js:465 msgid "Artist ISNIs" msgstr "" -#: ../root/statistics/stats.js:344 +#: ../root/statistics/stats.js:470 msgid "Count of all ISNIs for Labels" msgstr "" -#: ../root/statistics/stats.js:345 +#: ../root/statistics/stats.js:471 msgid "Label ISNIs" msgstr "" -#: ../root/statistics/stats.js:350 ../root/statistics/stats.js:356 +#: ../root/statistics/stats.js:476 ../root/statistics/stats.js:482 msgid "Count of all ISRCs" msgstr "Πλήθος όλων των ISRCs" -#: ../root/statistics/stats.js:351 +#: ../root/statistics/stats.js:477 msgid "ISRCs" msgstr "ISRC" -#: ../root/statistics/stats.js:357 +#: ../root/statistics/stats.js:483 msgid "ISRCs (all)" msgstr "ISRC (όλα)" -#: ../root/statistics/stats.js:362 ../root/statistics/stats.js:368 +#: ../root/statistics/stats.js:488 ../root/statistics/stats.js:494 msgid "Count of all ISWCs" msgstr "Πλήθος όλων των ISWCs" -#: ../root/statistics/stats.js:363 +#: ../root/statistics/stats.js:489 msgid "ISWCs" msgstr "ISWC" -#: ../root/statistics/stats.js:369 +#: ../root/statistics/stats.js:495 msgid "ISWCs (all)" msgstr "ISWC (όλα)" -#: ../root/statistics/stats.js:374 +#: ../root/statistics/stats.js:500 msgid "Count of all labels" msgstr "Πλήθος όλων των δισκογραφικών εταιρειών" -#: ../root/statistics/stats.js:380 +#: ../root/statistics/stats.js:506 msgid "Labels with no country set" msgstr "Δισκογραφικές εταιρείες χωρίς ρυθμισμένη χώρα" -#: ../root/statistics/stats.js:386 +#: ../root/statistics/stats.js:512 msgid "Count of all mediums" msgstr "Πλήθος όλων των μέσων" -#: ../root/statistics/stats.js:392 +#: ../root/statistics/stats.js:518 msgid "Mediums with no format set" msgstr "Μέσα χωρίς ρυθμισμένη μορφή" -#: ../root/statistics/stats.js:393 +#: ../root/statistics/stats.js:519 msgid "Unknown Format (medium)" msgstr "Άγνωστη μορφή (μέσο)" -#: ../root/statistics/stats.js:398 +#: ../root/statistics/stats.js:524 msgid "Count of all Mediums with Disc IDs" msgstr "" -#: ../root/statistics/stats.js:399 +#: ../root/statistics/stats.js:525 msgid "Mediums with Disc IDs" msgstr "" -#: ../root/statistics/stats.js:404 +#: ../root/statistics/stats.js:530 msgid "Count of all places" msgstr "" -#: ../root/statistics/stats.js:410 +#: ../root/statistics/stats.js:536 msgid "Count of all Releases at Default Data Quality" msgstr "Πλήθος όλων των κυκλοφοριών με την προεπιλεγμένη ποιότητα δεδομένων" -#: ../root/statistics/stats.js:411 +#: ../root/statistics/stats.js:537 msgid "Default Data Quality" msgstr "Προεπιλεγμένη ποιότητα δεδομένων" -#: ../root/statistics/stats.js:416 +#: ../root/statistics/stats.js:542 msgid "Count of all Releases at High Data Quality" msgstr "Πλήθος όλων των κυκλοφοριών με υψηλή ποιότητα δεδομένων" -#: ../root/statistics/stats.js:417 +#: ../root/statistics/stats.js:543 msgid "High Data Quality" msgstr "Υψηλή ποιότητα δεδομένων" -#: ../root/statistics/stats.js:422 +#: ../root/statistics/stats.js:548 msgid "Count of all Releases at Low Data Quality" msgstr "Πλήθος όλων των κυκλοφοριών με χαμηλή ποιότητα δεδομένων" -#: ../root/statistics/stats.js:423 +#: ../root/statistics/stats.js:549 msgid "Low Data Quality" msgstr "Χαμηλή ποιότητα δεδομένων" -#: ../root/statistics/stats.js:428 +#: ../root/statistics/stats.js:554 msgid "Count of all Releases at Normal Data Quality" msgstr "Πλήθος όλων των κυκλοφοριών με κανονική ποιότητα δεδομένων" -#: ../root/statistics/stats.js:429 +#: ../root/statistics/stats.js:555 msgid "Normal Data Quality" msgstr "Κανονική ποιότητα δεδομένων" -#: ../root/statistics/stats.js:434 +#: ../root/statistics/stats.js:560 msgid "Count of all Releases at Unknown Data Quality" msgstr "Πλήθος όλων των κυκλοφοριών με άγνωστη ποιότητα δεδομένων" -#: ../root/statistics/stats.js:435 +#: ../root/statistics/stats.js:561 msgid "Unknown Data Quality" msgstr "Άγνωστη ποιότητα δεδομένων" -#: ../root/statistics/stats.js:440 +#: ../root/statistics/stats.js:566 msgid "Count of all Ratings" msgstr "Πλήθος όλων των βαθμολογιών" -#: ../root/statistics/stats.js:441 +#: ../root/statistics/stats.js:567 msgid "Ratings" msgstr "Βαθμολογίες" -#: ../root/statistics/stats.js:446 +#: ../root/statistics/stats.js:572 msgid "Count of all Artist Ratings" msgstr "Πλήθος όλων των βαθμολογιών καλλιτεχνών" -#: ../root/statistics/stats.js:447 +#: ../root/statistics/stats.js:573 msgid "Artist Ratings" msgstr "Βαθομολογίες καλλιτεχνών" -#: ../root/statistics/stats.js:452 +#: ../root/statistics/stats.js:578 msgid "Count of all Label Ratings" msgstr "Πλήθος όλων των βαθμολογιών δισκογραφικών εταιρειών" -#: ../root/statistics/stats.js:453 +#: ../root/statistics/stats.js:579 msgid "Label Ratings" msgstr "Βαθμολογίες δισκογραφικών εταιρειών" -#: ../root/statistics/stats.js:458 +#: ../root/statistics/stats.js:584 msgid "Count of all Place Ratings" msgstr "" -#: ../root/statistics/stats.js:459 +#: ../root/statistics/stats.js:585 msgid "Place Ratings" msgstr "" -#: ../root/statistics/stats.js:464 +#: ../root/statistics/stats.js:590 msgid "Count of all Ratings (raw)" msgstr "" -#: ../root/statistics/stats.js:465 +#: ../root/statistics/stats.js:591 msgid "Ratings (raw)" msgstr "" -#: ../root/statistics/stats.js:470 +#: ../root/statistics/stats.js:596 msgid "Count of all Artist Ratings (raw)" msgstr "" -#: ../root/statistics/stats.js:471 +#: ../root/statistics/stats.js:597 msgid "Artist Ratings (raw)" msgstr "" -#: ../root/statistics/stats.js:476 +#: ../root/statistics/stats.js:602 msgid "Count of all Label Ratings (raw)" msgstr "" -#: ../root/statistics/stats.js:477 +#: ../root/statistics/stats.js:603 msgid "Label Ratings (raw)" msgstr "" -#: ../root/statistics/stats.js:482 +#: ../root/statistics/stats.js:608 msgid "Count of all Place Ratings (raw)" msgstr "" -#: ../root/statistics/stats.js:483 +#: ../root/statistics/stats.js:609 msgid "Place Ratings (raw)" msgstr "" -#: ../root/statistics/stats.js:488 +#: ../root/statistics/stats.js:614 msgid "Count of all Recording Ratings (raw)" msgstr "" -#: ../root/statistics/stats.js:489 +#: ../root/statistics/stats.js:615 msgid "Recording Ratings (raw)" msgstr "" -#: ../root/statistics/stats.js:494 +#: ../root/statistics/stats.js:620 msgid "Count of all Release Group Ratings (raw)" msgstr "" -#: ../root/statistics/stats.js:495 +#: ../root/statistics/stats.js:621 msgid "Release Group Ratings (raw)" msgstr "" -#: ../root/statistics/stats.js:500 +#: ../root/statistics/stats.js:626 msgid "Count of all Work Ratings (raw)" msgstr "" -#: ../root/statistics/stats.js:501 +#: ../root/statistics/stats.js:627 msgid "Work Ratings (raw)" msgstr "" -#: ../root/statistics/stats.js:506 +#: ../root/statistics/stats.js:632 msgid "Count of all Recording Ratings" msgstr "Πλήθος όλων των βαθμολογιών ηχογραφήσεων" -#: ../root/statistics/stats.js:507 +#: ../root/statistics/stats.js:633 msgid "Recording Ratings" msgstr "Βαθμολογίες ηχογράφησης" -#: ../root/statistics/stats.js:512 +#: ../root/statistics/stats.js:638 msgid "Count of all Release Group Ratings" msgstr "Πλήθος όλων των βαθμολογιών ομάδων κυκλοφοριών" -#: ../root/statistics/stats.js:513 +#: ../root/statistics/stats.js:639 msgid "Release Group Ratings" msgstr "Βαθμολογίες ομάδας κυκλοφοριών" -#: ../root/statistics/stats.js:518 +#: ../root/statistics/stats.js:644 msgid "Count of all Work Ratings" msgstr "Πλήθος όλων των βαθμολογιών έργων" -#: ../root/statistics/stats.js:519 +#: ../root/statistics/stats.js:645 msgid "Work Ratings" msgstr "Βαθμολογίες έργου" -#: ../root/statistics/stats.js:524 +#: ../root/statistics/stats.js:650 msgid "Count of all recordings" msgstr "Πλήθος όλων των ηχογραφήσεων" -#: ../root/statistics/stats.js:530 +#: ../root/statistics/stats.js:656 msgid "Count of all Recordings with ISRCs" msgstr "Πλήθος όλων των ηχογραφήσεων με ISRC" -#: ../root/statistics/stats.js:531 +#: ../root/statistics/stats.js:657 msgid "Recordings with ISRCs" msgstr "Κυκλοφορίες με ISRC" -#: ../root/statistics/stats.js:536 +#: ../root/statistics/stats.js:662 msgid "Count of all standalone recordings" msgstr "" -#: ../root/statistics/stats.js:537 +#: ../root/statistics/stats.js:663 msgid "Standalone recordings" msgstr "" -#: ../root/statistics/stats.js:542 +#: ../root/statistics/stats.js:668 msgid "Count of all releases" msgstr "Πλήθος όλων των κυκλοφοριών" -#: ../root/statistics/stats.js:548 +#: ../root/statistics/stats.js:674 msgid "Releases with no country set" msgstr "Κυκλοφορίες χωρίς ρυθμισμένη χώρα" -#: ../root/statistics/stats.js:554 ../root/statistics/stats.js:555 -#: ../root/statistics/stats.js:572 +#: ../root/statistics/stats.js:680 ../root/statistics/stats.js:681 +#: ../root/statistics/stats.js:698 msgid "Releases with Amazon Cover Art" msgstr "" -#: ../root/statistics/stats.js:560 ../root/statistics/stats.js:561 +#: ../root/statistics/stats.js:686 ../root/statistics/stats.js:687 msgid "Releases with CAA Cover Art" msgstr "" -#: ../root/statistics/stats.js:566 ../root/statistics/stats.js:567 +#: ../root/statistics/stats.js:692 ../root/statistics/stats.js:693 msgid "Releases with No Cover Art" msgstr "" -#: ../root/statistics/stats.js:573 +#: ../root/statistics/stats.js:699 msgid "Releases with Cover Art from Relationships" msgstr "" -#: ../root/statistics/stats.js:578 +#: ../root/statistics/stats.js:704 msgid "Releases with a no-format medium" msgstr "Κυκλοφορίες με μέσο χωρίς μορφή" -#: ../root/statistics/stats.js:579 +#: ../root/statistics/stats.js:705 msgid "Unknown Format (release)" msgstr "Άγνωστη μορφή (κυκλοφορία)" -#: ../root/statistics/stats.js:584 ../root/statistics/stats.js:585 +#: ../root/statistics/stats.js:710 ../root/statistics/stats.js:711 msgid "Releases with Cover Art" msgstr "Κυκλοφορίες με εξώφυλλο" -#: ../root/statistics/stats.js:590 +#: ../root/statistics/stats.js:716 msgid "Count of all Releases with Disc IDs" msgstr "" -#: ../root/statistics/stats.js:591 +#: ../root/statistics/stats.js:717 msgid "Releases with Disc IDs" msgstr "" -#: ../root/statistics/stats.js:596 +#: ../root/statistics/stats.js:722 msgid "Releases with no language set" msgstr "Κυκλοφορίες χωρίς ρυθμισμένη γλώσσα" -#: ../root/statistics/stats.js:597 +#: ../root/statistics/stats.js:723 msgid "Unknown Language" msgstr "Άγνωστη γλώσσα" -#: ../root/statistics/stats.js:602 +#: ../root/statistics/stats.js:728 msgid "Count of all Releases not V.A." msgstr "Πλήθος όλων των κυκλοφοριών που δεν είναι Διαφόρων Καλλιτεχνών" -#: ../root/statistics/stats.js:603 +#: ../root/statistics/stats.js:729 msgid "Releases not VA" msgstr "Κυκλοφορίες όχι ΔΚ" -#: ../root/statistics/stats.js:608 +#: ../root/statistics/stats.js:734 msgid "Releases with no script set" msgstr "" -#: ../root/statistics/stats.js:609 +#: ../root/statistics/stats.js:735 msgid "Unknown Script" msgstr "Άγνωστη γραφή" -#: ../root/statistics/stats.js:614 +#: ../root/statistics/stats.js:740 msgid "Count of all Releases by Various Artists" msgstr "Καταμέτρηση όλων των κυκλοφοριών Διαφόρων Καλλιτεχνών" -#: ../root/statistics/stats.js:615 +#: ../root/statistics/stats.js:741 msgid "Releases (VA)" msgstr "Κυκλοφορίες (ΔΚ)" -#: ../root/statistics/stats.js:620 +#: ../root/statistics/stats.js:746 msgid "Count of all release groups" msgstr "Πλήθος όλων των ομάδων κυκλοφοριών" -#: ../root/statistics/stats.js:626 +#: ../root/statistics/stats.js:752 msgid "Count of all series" msgstr "" -#: ../root/statistics/stats.js:632 +#: ../root/statistics/stats.js:758 msgid "Count of all Tags" msgstr "Πλήθος όλων των ετικετών" -#: ../root/statistics/stats.js:633 +#: ../root/statistics/stats.js:759 msgid "Tags" msgstr "Ετικέτες" -#: ../root/statistics/stats.js:638 +#: ../root/statistics/stats.js:764 msgid "Count of all Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:639 +#: ../root/statistics/stats.js:765 msgid "Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:644 +#: ../root/statistics/stats.js:770 msgid "Count of all Area Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:645 +#: ../root/statistics/stats.js:771 msgid "Area Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:650 +#: ../root/statistics/stats.js:776 msgid "Count of all Artist Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:651 +#: ../root/statistics/stats.js:777 msgid "Artist Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:656 +#: ../root/statistics/stats.js:782 msgid "Count of all Instrument Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:657 +#: ../root/statistics/stats.js:783 msgid "Instrument Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:662 +#: ../root/statistics/stats.js:788 msgid "Count of all Label Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:663 +#: ../root/statistics/stats.js:789 msgid "Label Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:668 +#: ../root/statistics/stats.js:794 msgid "Count of all Recording Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:669 +#: ../root/statistics/stats.js:795 msgid "Recording Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:674 +#: ../root/statistics/stats.js:800 msgid "Count of all Release Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:675 +#: ../root/statistics/stats.js:801 msgid "Release Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:680 +#: ../root/statistics/stats.js:806 msgid "Count of all Release Group Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:681 +#: ../root/statistics/stats.js:807 msgid "Release Group Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:686 +#: ../root/statistics/stats.js:812 msgid "Count of all Series Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:687 +#: ../root/statistics/stats.js:813 msgid "Series Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:692 +#: ../root/statistics/stats.js:818 msgid "Count of all Work Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:693 +#: ../root/statistics/stats.js:819 msgid "Work Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:698 +#: ../root/statistics/stats.js:824 msgid "Count of all Tracks" msgstr "Πλήθος όλων των κομματιών" -#: ../root/statistics/stats.js:699 +#: ../root/statistics/stats.js:825 msgid "Tracks" msgstr "Κομμάτια" -#: ../root/statistics/stats.js:704 +#: ../root/statistics/stats.js:830 msgid "Count of all votes" msgstr "Πλήθος όλων των ψήφων" -#: ../root/statistics/stats.js:711 +#: ../root/statistics/stats.js:837 msgid "Count of all Abstain votes" msgstr "" -#: ../root/statistics/stats.js:712 +#: ../root/statistics/stats.js:838 msgid "Abstentions" msgstr "Αποχές" -#: ../root/statistics/stats.js:717 +#: ../root/statistics/stats.js:843 msgid "Count of all No votes" msgstr "Καταμέτρηση όλων των αρνητικών ψήφων" -#: ../root/statistics/stats.js:718 +#: ../root/statistics/stats.js:844 msgid "No Votes" msgstr "Αρνητικές ψήφοι" -#: ../root/statistics/stats.js:723 +#: ../root/statistics/stats.js:849 msgid "Count of votes per day" msgstr "Πλήθος όλων των ψήφων ανά ημέρα" -#: ../root/statistics/stats.js:725 +#: ../root/statistics/stats.js:851 msgid "Votes per day" msgstr "Ψήφοι ανά ημέρα" -#: ../root/statistics/stats.js:730 +#: ../root/statistics/stats.js:856 msgid "Count of votes per week" msgstr "Πλήθος όλων των ψήφων ανά βδομάδα" -#: ../root/statistics/stats.js:731 +#: ../root/statistics/stats.js:857 msgid "Votes per week" msgstr "Ψήφοι ανά βδομάδα" -#: ../root/statistics/stats.js:736 +#: ../root/statistics/stats.js:862 msgid "Count of all Yes votes" msgstr "Πλήθος όλων των θετικών ψήφων" -#: ../root/statistics/stats.js:737 +#: ../root/statistics/stats.js:863 msgid "Yes Votes" msgstr "Θετικές ψήφοι" -#: ../root/statistics/stats.js:742 +#: ../root/statistics/stats.js:868 msgid "Count of all works" msgstr "Πλήθος όλων των έργων" -#: ../root/statistics/stats.js:748 +#: ../root/statistics/stats.js:874 msgid "Count of all Works with ISWCs" msgstr "" -#: ../root/statistics/stats.js:749 +#: ../root/statistics/stats.js:875 msgid "Works with ISWCs" msgstr "" -#: ../root/statistics/stats.js:751 +#: ../root/statistics/stats.js:877 msgid "/day" msgstr "/ημέρα" -#: ../root/statistics/stats.js:760 +#: ../root/statistics/stats.js:886 msgid "Count of all Releases with {n} Disc IDs" msgstr "" -#: ../root/statistics/stats.js:762 +#: ../root/statistics/stats.js:888 msgid "Releases with 1 Disc ID" msgid_plural "Releases with {n} Disc IDs" msgstr[0] "" msgstr[1] "" -#: ../root/statistics/stats.js:772 +#: ../root/statistics/stats.js:898 msgid "Count of all Mediums with {n} Disc IDs" msgstr "" -#: ../root/statistics/stats.js:774 +#: ../root/statistics/stats.js:900 msgid "Mediums with 1 Disc ID" msgid_plural "Mediums with {n} Disc IDs" msgstr[0] "" msgstr[1] "" -#: ../root/statistics/stats.js:784 +#: ../root/statistics/stats.js:910 msgid "Count of all Recordings with {n} Releases" msgstr "Πλήθος όλων των ηχογραφήσεων με {n} κυκλοφορίες" -#: ../root/statistics/stats.js:786 +#: ../root/statistics/stats.js:912 msgid "Recordings with 1 Release" msgid_plural "Recordings with {n} Releases" msgstr[0] "Ηχογραφήσεις με 1 κυκλοφορία" msgstr[1] "Ηχογραφήσεις με {n} κυκλοφορίες" -#: ../root/statistics/stats.js:796 +#: ../root/statistics/stats.js:922 msgid "Count of all Release Groups with {n} Releases" msgstr "Πλήθος όλων των ομάδων κυκλοφοριών με {n} κυκλοφορίες" -#: ../root/statistics/stats.js:798 +#: ../root/statistics/stats.js:924 msgid "Release Groups with 1 Release" msgid_plural "Release Groups with {n} Releases" msgstr[0] "Ομάδες κυκλοφοριών με 1 κυκλοφορία" msgstr[1] "Ομάδες κυκλοφοριών με {n} κυκλοφορίες" -#: ../root/statistics/stats.js:840 +#: ../root/statistics/stats.js:966 msgid "{country} artists" msgstr "Καλλιτέχνες από {country}" -#: ../root/statistics/stats.js:847 +#: ../root/statistics/stats.js:973 msgid "{country} labels" msgstr "Δισκογραφικές εταιρείες από {country}" -#: ../root/statistics/stats.js:854 +#: ../root/statistics/stats.js:980 msgid "{country} releases" msgstr "Κυκλοφορίες από {country}" -#: ../root/statistics/stats.js:866 +#: ../root/statistics/stats.js:992 msgid "{name} releases" msgstr "Κυκλοφορίες {name}" -#: ../root/statistics/stats.js:873 +#: ../root/statistics/stats.js:999 msgid "{name} mediums" msgstr "Μέσα {name}" -#: ../root/statistics/stats.js:885 +#: ../root/statistics/stats.js:1011 msgid "{language} releases" msgstr "Κυκλοφορίες στα {language} " -#: ../root/statistics/stats.js:892 +#: ../root/statistics/stats.js:1018 msgid "l_{first}_{second} Relationships" msgstr "l_{first}_{second} σχέσεις" -#: ../root/statistics/stats.js:913 +#: ../root/statistics/stats.js:1039 msgid "{script} releases" msgstr "Κυκλοφορίες με {script} " diff --git a/po/statistics.es.po b/po/statistics.es.po index 850bc270183..71c7b33e76e 100644 --- a/po/statistics.es.po +++ b/po/statistics.es.po @@ -17,8 +17,8 @@ msgid "" msgstr "" "Project-Id-Version: MusicBrainz\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2021-07-19 17:36+0000\n" -"Last-Translator: Nicolás Tamargo <email address hidden>\n" +"PO-Revision-Date: 2021-09-28 18:40+0000\n" +"Last-Translator: yvanz\n" "Language-Team: Spanish (http://www.transifex.com/musicbrainz/musicbrainz/language/es/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -1142,15 +1142,15 @@ msgid "Draw a rectangle on either graph" msgstr "Dibuja un rectángulo en cualquier gráfico" #: ../root/statistics/layout.tt:4 ../root/statistics/Editors.js:98 -#: ../root/statistics/Editors.js:109 ../root/statistics/Index.js:924 +#: ../root/statistics/Editors.js:109 ../root/statistics/Index.js:1083 #: ../root/statistics/StatisticsLayout.js:82 msgid "Editors" msgstr "Editores" #: ../root/statistics/layout.tt:4 ../root/statistics/Edits.js:37 #: ../root/statistics/Edits.js:41 ../root/statistics/Edits.js:50 -#: ../root/statistics/Index.js:1048 ../root/statistics/StatisticsLayout.js:72 -#: ../root/statistics/stats.js:184 +#: ../root/statistics/Index.js:1207 ../root/statistics/StatisticsLayout.js:72 +#: ../root/statistics/stats.js:310 msgid "Edits" msgstr "Ediciones" @@ -1237,20 +1237,20 @@ msgstr "Posicición" msgid "Country" msgstr "País" -#: ../root/statistics/Countries.js:53 ../root/statistics/Index.js:227 -#: ../root/statistics/Index.js:231 ../root/statistics/stats.js:45 +#: ../root/statistics/Countries.js:53 ../root/statistics/Index.js:231 +#: ../root/statistics/Index.js:235 ../root/statistics/stats.js:45 msgid "Artists" msgstr "Artistas" #: ../root/statistics/Countries.js:57 ../root/statistics/CoverArt.js:105 -#: ../root/statistics/Formats.js:56 ../root/statistics/Index.js:359 +#: ../root/statistics/Formats.js:56 ../root/statistics/Index.js:363 #: ../root/statistics/LanguagesScripts.js:71 -#: ../root/statistics/LanguagesScripts.js:152 ../root/statistics/stats.js:543 +#: ../root/statistics/LanguagesScripts.js:152 ../root/statistics/stats.js:669 msgid "Releases" msgstr "Publicaciones" -#: ../root/statistics/Countries.js:61 ../root/statistics/Index.js:694 -#: ../root/statistics/Index.js:701 ../root/statistics/stats.js:375 +#: ../root/statistics/Countries.js:61 ../root/statistics/Index.js:698 +#: ../root/statistics/Index.js:705 ../root/statistics/stats.js:501 msgid "Labels" msgstr "Discográficas" @@ -1260,7 +1260,7 @@ msgid "Total" msgstr "Total" #: ../root/statistics/Countries.js:87 ../root/statistics/stats.js:57 -#: ../root/statistics/stats.js:381 ../root/statistics/stats.js:549 +#: ../root/statistics/stats.js:507 ../root/statistics/stats.js:675 msgid "Unknown Country" msgstr "País desconocido" @@ -1415,7 +1415,7 @@ msgstr "Formato" msgid "% of total releases" msgstr "" -#: ../root/statistics/Formats.js:58 ../root/statistics/stats.js:387 +#: ../root/statistics/Formats.js:58 ../root/statistics/stats.js:513 msgid "Mediums" msgstr "Medios" @@ -1435,27 +1435,27 @@ msgstr "Metadatos básicos" msgid "Core Entities" msgstr "" -#: ../root/statistics/Index.js:92 ../root/statistics/Index.js:234 +#: ../root/statistics/Index.js:92 ../root/statistics/Index.js:238 msgid "Artists:" msgstr "Artistas:" -#: ../root/statistics/Index.js:96 ../root/statistics/Index.js:614 -#: ../root/statistics/Index.js:640 +#: ../root/statistics/Index.js:96 ../root/statistics/Index.js:618 +#: ../root/statistics/Index.js:644 msgid "Release Groups:" msgstr "Grupos de publicaciones:" -#: ../root/statistics/Index.js:100 ../root/statistics/Index.js:362 -#: ../root/statistics/Index.js:384 ../root/statistics/Index.js:410 -#: ../root/statistics/Index.js:436 ../root/statistics/Index.js:470 -#: ../root/statistics/Index.js:519 +#: ../root/statistics/Index.js:100 ../root/statistics/Index.js:366 +#: ../root/statistics/Index.js:388 ../root/statistics/Index.js:414 +#: ../root/statistics/Index.js:440 ../root/statistics/Index.js:474 +#: ../root/statistics/Index.js:523 msgid "Releases:" msgstr "Publicaciones:" -#: ../root/statistics/Index.js:104 ../root/statistics/Index.js:563 +#: ../root/statistics/Index.js:104 ../root/statistics/Index.js:567 msgid "Mediums:" msgstr "Medios:" -#: ../root/statistics/Index.js:108 ../root/statistics/Index.js:672 +#: ../root/statistics/Index.js:108 ../root/statistics/Index.js:676 msgid "Recordings:" msgstr "Grabaciones:" @@ -1467,8 +1467,8 @@ msgstr "Pistas:" msgid "Labels:" msgstr "Discográficas:" -#: ../root/statistics/Index.js:120 ../root/statistics/Index.js:729 -#: ../root/statistics/Index.js:761 +#: ../root/statistics/Index.js:120 ../root/statistics/Index.js:733 +#: ../root/statistics/Index.js:765 msgid "Works:" msgstr "Obras:" @@ -1476,24 +1476,24 @@ msgstr "Obras:" msgid "URLs:" msgstr "URLs:" -#: ../root/statistics/Index.js:128 ../root/statistics/Index.js:791 +#: ../root/statistics/Index.js:128 ../root/statistics/Index.js:795 msgid "Areas:" msgstr "" -#: ../root/statistics/Index.js:132 ../root/statistics/Index.js:819 +#: ../root/statistics/Index.js:132 ../root/statistics/Index.js:823 msgid "Places:" msgstr "Lugares:" -#: ../root/statistics/Index.js:136 ../root/statistics/Index.js:847 +#: ../root/statistics/Index.js:136 ../root/statistics/Index.js:851 msgctxt "plural" msgid "Series:" msgstr "Series:" -#: ../root/statistics/Index.js:140 ../root/statistics/Index.js:869 +#: ../root/statistics/Index.js:140 ../root/statistics/Index.js:873 msgid "Instruments:" msgstr "Instrumentos:" -#: ../root/statistics/Index.js:144 ../root/statistics/Index.js:899 +#: ../root/statistics/Index.js:144 ../root/statistics/Index.js:903 msgid "Events:" msgstr "" @@ -1513,422 +1513,504 @@ msgstr "Editores (válidos / eliminados):" msgid "Relationships:" msgstr "Relaciones:" -#: ../root/statistics/Index.js:167 +#: ../root/statistics/Index.js:167 ../root/statistics/Index.js:924 +#: ../root/statistics/Index.js:928 ../root/statistics/Index.js:931 +#: ../root/statistics/stats.js:171 +msgid "Collections" +msgstr "Colecciones" + +#: ../root/statistics/Index.js:171 msgid "CD Stubs (all time / current):" msgstr "" -#: ../root/statistics/Index.js:176 +#: ../root/statistics/Index.js:180 msgid "Tags (raw / aggregated):" msgstr "" -#: ../root/statistics/Index.js:182 +#: ../root/statistics/Index.js:186 msgid "Ratings (raw / aggregated):" msgstr "" -#: ../root/statistics/Index.js:190 +#: ../root/statistics/Index.js:194 msgid "Identifiers" msgstr "Identificadores" -#: ../root/statistics/Index.js:193 +#: ../root/statistics/Index.js:197 msgid "MBIDs:" msgstr "MBIDs:" -#: ../root/statistics/Index.js:197 +#: ../root/statistics/Index.js:201 msgid "ISRCs (all / unique):" msgstr "ISRCs (totales / distintos):" -#: ../root/statistics/Index.js:203 +#: ../root/statistics/Index.js:207 msgid "ISWCs (all / unique):" msgstr "ISWCs (totales / distintos):" -#: ../root/statistics/Index.js:209 ../root/statistics/Index.js:514 +#: ../root/statistics/Index.js:213 ../root/statistics/Index.js:518 msgid "Disc IDs:" msgstr "IDs de disco" -#: ../root/statistics/Index.js:213 +#: ../root/statistics/Index.js:217 msgid "Barcodes:" msgstr "Códigos de barras:" -#: ../root/statistics/Index.js:217 +#: ../root/statistics/Index.js:221 msgid "IPIs:" msgstr "IPIs:" -#: ../root/statistics/Index.js:221 +#: ../root/statistics/Index.js:225 msgid "ISNIs:" msgstr "ISNIs:" -#: ../root/statistics/Index.js:240 +#: ../root/statistics/Index.js:244 msgid "of type Person:" msgstr "de tipo Persona:" -#: ../root/statistics/Index.js:246 +#: ../root/statistics/Index.js:250 msgid "of type Group:" msgstr "de tipo Grupo:" -#: ../root/statistics/Index.js:252 +#: ../root/statistics/Index.js:256 msgid "of type Orchestra:" msgstr "de tipo Orquesta" -#: ../root/statistics/Index.js:258 +#: ../root/statistics/Index.js:262 msgid "of type Choir:" msgstr "de tipo Coro" -#: ../root/statistics/Index.js:264 +#: ../root/statistics/Index.js:268 msgid "of type Character:" msgstr "de tipo Carácter:" -#: ../root/statistics/Index.js:270 +#: ../root/statistics/Index.js:274 msgid "of type Other:" msgstr "de tipo Otro:" -#: ../root/statistics/Index.js:276 +#: ../root/statistics/Index.js:280 msgid "with no type set:" msgstr "sin un tipo indicado:" -#: ../root/statistics/Index.js:282 +#: ../root/statistics/Index.js:286 msgid "with appearances in artist credits:" msgstr "que aparecen en créditos de artista:" -#: ../root/statistics/Index.js:288 +#: ../root/statistics/Index.js:292 msgid "with no appearances in artist credits:" msgstr "que no aparecen en créditos de artista:" -#: ../root/statistics/Index.js:293 +#: ../root/statistics/Index.js:297 msgid "Non-group artists:" msgstr "Artistas no grupales:" -#: ../root/statistics/Index.js:299 +#: ../root/statistics/Index.js:303 msgid "Male:" msgstr "Hombres:" -#: ../root/statistics/Index.js:310 +#: ../root/statistics/Index.js:314 msgid "Female:" msgstr "Mujeres:" -#: ../root/statistics/Index.js:321 +#: ../root/statistics/Index.js:325 msgid "Other gender:" msgstr "Otro género:" -#: ../root/statistics/Index.js:332 +#: ../root/statistics/Index.js:336 msgid "Gender not applicable:" msgstr "" -#: ../root/statistics/Index.js:343 +#: ../root/statistics/Index.js:347 msgid "with no gender set:" msgstr "sin un género indicado:" -#: ../root/statistics/Index.js:355 +#: ../root/statistics/Index.js:359 msgid "Releases, Data Quality, and Disc IDs" msgstr "Publicaciones, calidad de datos e IDs de disco" -#: ../root/statistics/Index.js:368 +#: ../root/statistics/Index.js:372 msgid "by various artists:" msgstr "de varios artistas:" -#: ../root/statistics/Index.js:374 +#: ../root/statistics/Index.js:378 msgid "by a single artist:" msgstr "de un solo artista:" -#: ../root/statistics/Index.js:381 +#: ../root/statistics/Index.js:385 msgid "Release Status" msgstr "Estatus de publicaciones" -#: ../root/statistics/Index.js:400 +#: ../root/statistics/Index.js:404 msgid "No status set" msgstr "Sin estatus indicado" -#: ../root/statistics/Index.js:407 +#: ../root/statistics/Index.js:411 msgid "Release Packaging" msgstr "Empaquetado de publicaciones" -#: ../root/statistics/Index.js:426 +#: ../root/statistics/Index.js:430 msgid "No packaging set" msgstr "Sin empaquetado indicado" -#: ../root/statistics/Index.js:433 +#: ../root/statistics/Index.js:437 msgid "Cover Art Sources" msgstr "Fuentes de imagen" -#: ../root/statistics/Index.js:442 +#: ../root/statistics/Index.js:446 msgid "CAA:" msgstr "CAA:" -#: ../root/statistics/Index.js:448 +#: ../root/statistics/Index.js:452 msgid "Amazon:" msgstr "Amazon:" -#: ../root/statistics/Index.js:454 +#: ../root/statistics/Index.js:458 msgid "URL Relationships:" msgstr "Relaciones URL:" -#: ../root/statistics/Index.js:460 +#: ../root/statistics/Index.js:464 msgid "No front cover art:" msgstr "Sin imagen de portada:" -#: ../root/statistics/Index.js:467 +#: ../root/statistics/Index.js:471 msgid "Data Quality" msgstr "Calidad de datos" -#: ../root/statistics/Index.js:476 +#: ../root/statistics/Index.js:480 msgid "High Data Quality:" msgstr "Calidad de datos alta:" -#: ../root/statistics/Index.js:482 +#: ../root/statistics/Index.js:486 msgid "Default Data Quality:" msgstr "Calidad de datos predeterminada:" -#: ../root/statistics/Index.js:489 +#: ../root/statistics/Index.js:493 msgid "Normal Data Quality:" msgstr "Calidad de datos normal:" -#: ../root/statistics/Index.js:496 +#: ../root/statistics/Index.js:500 msgid "Unknown Data Quality:" msgstr "Calidad de datos desconocida:" -#: ../root/statistics/Index.js:504 +#: ../root/statistics/Index.js:508 msgid "Low Data Quality:" msgstr "Calidad de datos baja:" -#: ../root/statistics/Index.js:511 ../root/statistics/stats.js:177 +#: ../root/statistics/Index.js:515 ../root/statistics/stats.js:303 msgid "Disc IDs" msgstr "IDs de disco" -#: ../root/statistics/Index.js:525 +#: ../root/statistics/Index.js:529 msgid "Releases with no disc IDs:" msgstr "Publicaciones sin IDs de disco:" -#: ../root/statistics/Index.js:532 +#: ../root/statistics/Index.js:536 msgid "Releases with at least one disc ID:" msgstr "Publicaciones con al menos una ID de disco:" -#: ../root/statistics/Index.js:543 ../root/statistics/Index.js:587 +#: ../root/statistics/Index.js:547 ../root/statistics/Index.js:591 msgid "with {num} disc ID:" msgid_plural "with {num} disc IDs:" msgstr[0] "con {num} ID de disco:" msgstr[1] "con {num} IDs de disco:" -#: ../root/statistics/Index.js:558 ../root/statistics/Index.js:600 +#: ../root/statistics/Index.js:562 ../root/statistics/Index.js:604 msgid "with 10 or more disc IDs:" msgstr "con 10 o más IDs de disco:" -#: ../root/statistics/Index.js:569 +#: ../root/statistics/Index.js:573 msgid "Mediums with no disc IDs:" msgstr "Medios sin ID de disco:" -#: ../root/statistics/Index.js:576 +#: ../root/statistics/Index.js:580 msgid "Mediums with at least one disc ID:" msgstr "Medios con al menos una ID de disco:" -#: ../root/statistics/Index.js:607 ../root/statistics/stats.js:621 +#: ../root/statistics/Index.js:611 ../root/statistics/stats.js:747 msgid "Release Groups" msgstr "Grupos de publicaciones" -#: ../root/statistics/Index.js:611 +#: ../root/statistics/Index.js:615 msgid "Primary Types" msgstr "Tipos primarios" -#: ../root/statistics/Index.js:637 +#: ../root/statistics/Index.js:641 msgid "Secondary Types" msgstr "Tipos secundarios" -#: ../root/statistics/Index.js:665 ../root/statistics/Index.js:669 -#: ../root/statistics/stats.js:525 +#: ../root/statistics/Index.js:669 ../root/statistics/Index.js:673 +#: ../root/statistics/stats.js:651 msgid "Recordings" msgstr "Grabaciones" -#: ../root/statistics/Index.js:677 +#: ../root/statistics/Index.js:681 msgid "Videos:" msgstr "Vídeos:" -#: ../root/statistics/Index.js:682 +#: ../root/statistics/Index.js:686 msgctxt "recording" msgid "Standalone" msgstr "" -#: ../root/statistics/Index.js:687 +#: ../root/statistics/Index.js:691 msgid "With ISRCs" msgstr "" -#: ../root/statistics/Index.js:698 ../root/statistics/Index.js:726 -#: ../root/statistics/Index.js:788 ../root/statistics/Index.js:816 -#: ../root/statistics/Index.js:844 ../root/statistics/Index.js:866 -#: ../root/statistics/Index.js:896 +#: ../root/statistics/Index.js:702 ../root/statistics/Index.js:730 +#: ../root/statistics/Index.js:792 ../root/statistics/Index.js:820 +#: ../root/statistics/Index.js:848 ../root/statistics/Index.js:870 +#: ../root/statistics/Index.js:900 msgid "Types" msgstr "Tipos" -#: ../root/statistics/Index.js:715 ../root/statistics/Index.js:743 -#: ../root/statistics/Index.js:777 ../root/statistics/Index.js:805 -#: ../root/statistics/Index.js:833 ../root/statistics/Index.js:885 -#: ../root/statistics/Index.js:913 +#: ../root/statistics/Index.js:719 ../root/statistics/Index.js:747 +#: ../root/statistics/Index.js:781 ../root/statistics/Index.js:809 +#: ../root/statistics/Index.js:837 ../root/statistics/Index.js:889 +#: ../root/statistics/Index.js:917 msgid "None" msgstr "Ninguno" -#: ../root/statistics/Index.js:722 ../root/statistics/LanguagesScripts.js:75 -#: ../root/statistics/stats.js:743 +#: ../root/statistics/Index.js:726 ../root/statistics/LanguagesScripts.js:75 +#: ../root/statistics/stats.js:869 msgid "Works" msgstr "Obras:" -#: ../root/statistics/Index.js:748 +#: ../root/statistics/Index.js:752 msgid "With ISWCs" msgstr "" -#: ../root/statistics/Index.js:758 +#: ../root/statistics/Index.js:762 msgid "Attributes" msgstr "Atributos" -#: ../root/statistics/Index.js:784 ../root/statistics/stats.js:39 +#: ../root/statistics/Index.js:788 ../root/statistics/stats.js:39 msgid "Areas" msgstr "Áreas" -#: ../root/statistics/Index.js:812 ../root/statistics/stats.js:405 +#: ../root/statistics/Index.js:816 ../root/statistics/stats.js:531 msgid "Places" msgstr "Lugares" -#: ../root/statistics/Index.js:840 ../root/statistics/stats.js:627 +#: ../root/statistics/Index.js:844 ../root/statistics/stats.js:753 msgctxt "plural" msgid "Series" msgstr "Series" -#: ../root/statistics/Index.js:862 ../root/statistics/stats.js:309 +#: ../root/statistics/Index.js:866 ../root/statistics/stats.js:435 msgid "Instruments" msgstr "Instrumentos" -#: ../root/statistics/Index.js:892 ../root/statistics/stats.js:303 +#: ../root/statistics/Index.js:896 ../root/statistics/stats.js:429 msgid "Events" msgstr "Eventos" -#: ../root/statistics/Index.js:920 +#: ../root/statistics/Index.js:937 +msgid "Of releases" +msgstr "" + +#: ../root/statistics/Index.js:944 ../root/statistics/Index.js:977 +msgid "Generic" +msgstr "" + +#: ../root/statistics/Index.js:953 +msgid "Owned music" +msgstr "Mi música" + +#: ../root/statistics/Index.js:962 +msgid "Wishlist" +msgstr "Lista de deseos" + +#: ../root/statistics/Index.js:970 +msgid "Of events" +msgstr "" + +#: ../root/statistics/Index.js:986 +msgid "Of type Attending" +msgstr "" + +#: ../root/statistics/Index.js:995 +msgid "Of type Maybe attending" +msgstr "" + +#: ../root/statistics/Index.js:1006 +msgid "Of areas" +msgstr "" + +#: ../root/statistics/Index.js:1012 +msgid "Of artists" +msgstr "" + +#: ../root/statistics/Index.js:1018 +msgid "Of instruments" +msgstr "" + +#: ../root/statistics/Index.js:1024 +msgid "Of labels" +msgstr "" + +#: ../root/statistics/Index.js:1030 +msgid "Of places" +msgstr "" + +#: ../root/statistics/Index.js:1036 +msgid "Of recordings" +msgstr "" + +#: ../root/statistics/Index.js:1042 +msgid "Of release groups" +msgstr "" + +#: ../root/statistics/Index.js:1048 +msgid "Of series" +msgstr "" + +#: ../root/statistics/Index.js:1054 +msgid "Of works" +msgstr "" + +#: ../root/statistics/Index.js:1060 +msgid "Public" +msgstr "Pública" + +#: ../root/statistics/Index.js:1066 +msgid "Private" +msgstr "Privada" + +#: ../root/statistics/Index.js:1072 +msgid "With collaborators" +msgstr "" + +#: ../root/statistics/Index.js:1079 msgid "Editors, Edits, and Votes" msgstr "Editores, ediciones y votos" -#: ../root/statistics/Index.js:927 +#: ../root/statistics/Index.js:1086 msgid "Editors (valid):" msgstr "Editores (válidos):" -#: ../root/statistics/Index.js:933 +#: ../root/statistics/Index.js:1092 msgid "active ever:" msgstr "" -#: ../root/statistics/Index.js:941 +#: ../root/statistics/Index.js:1100 msgid "who edited and/or voted in the last 7 days:" msgstr "quién editó y/o votó en los últimos 7 días:" -#: ../root/statistics/Index.js:950 +#: ../root/statistics/Index.js:1109 msgid "who edited in the last 7 days:" msgstr "quién editó en los últimos 7 días:" -#: ../root/statistics/Index.js:958 +#: ../root/statistics/Index.js:1117 msgid "who voted in the last 7 days:" msgstr "quién votó en los últimos 7 días:" -#: ../root/statistics/Index.js:965 +#: ../root/statistics/Index.js:1124 msgid "who edit:" msgstr "quién edita:" -#: ../root/statistics/Index.js:972 +#: ../root/statistics/Index.js:1131 msgid "who vote:" msgstr "quién vota:" -#: ../root/statistics/Index.js:979 +#: ../root/statistics/Index.js:1138 msgid "who leave edit notes:" msgstr "quién deja notas de edición:" -#: ../root/statistics/Index.js:986 +#: ../root/statistics/Index.js:1145 msgid "who use tags:" msgstr "quién usa etiquetas:" -#: ../root/statistics/Index.js:993 +#: ../root/statistics/Index.js:1152 msgid "who use ratings:" msgstr "quién usa calificaciones:" -#: ../root/statistics/Index.js:1002 +#: ../root/statistics/Index.js:1161 msgid "who use subscriptions:" msgstr "quién usa suscripciones:" -#: ../root/statistics/Index.js:1011 +#: ../root/statistics/Index.js:1170 msgid "who use collections:" msgstr "quién usa colecciones:" -#: ../root/statistics/Index.js:1021 +#: ../root/statistics/Index.js:1180 msgid "who have registered applications:" msgstr "" -#: ../root/statistics/Index.js:1030 +#: ../root/statistics/Index.js:1189 msgid "validated email only:" msgstr "sólo direcciones de correo validadas" -#: ../root/statistics/Index.js:1036 +#: ../root/statistics/Index.js:1195 msgid "inactive:" msgstr "inactivos:" -#: ../root/statistics/Index.js:1041 +#: ../root/statistics/Index.js:1200 msgid "Editors (deleted):" msgstr "Editores (eliminados):" -#: ../root/statistics/Index.js:1051 ../root/statistics/Index.js:1098 +#: ../root/statistics/Index.js:1210 ../root/statistics/Index.js:1257 msgid "Edits:" msgstr "Ediciones:" -#: ../root/statistics/Index.js:1057 +#: ../root/statistics/Index.js:1216 msgid "Open:" msgstr "Abrir:" -#: ../root/statistics/Index.js:1063 +#: ../root/statistics/Index.js:1222 msgid "Applied:" msgstr "Aplicadas:" -#: ../root/statistics/Index.js:1069 +#: ../root/statistics/Index.js:1228 msgid "Voted down:" msgstr "Rechazadas:" -#: ../root/statistics/Index.js:1075 +#: ../root/statistics/Index.js:1234 msgid "Failed (dependency):" msgstr "Fallo (dependencia):" -#: ../root/statistics/Index.js:1081 +#: ../root/statistics/Index.js:1240 msgid "Failed (prerequisite):" msgstr "Fallo (prerrequisito):" -#: ../root/statistics/Index.js:1087 +#: ../root/statistics/Index.js:1246 msgid "Failed (internal error):" msgstr "Fallo (error interno):" -#: ../root/statistics/Index.js:1093 +#: ../root/statistics/Index.js:1252 msgid "Cancelled:" msgstr "Canceladas:" -#: ../root/statistics/Index.js:1104 ../root/statistics/Index.js:1156 +#: ../root/statistics/Index.js:1263 ../root/statistics/Index.js:1315 msgid "Last 7 days:" msgstr "Últimos 7 días:" -#: ../root/statistics/Index.js:1111 ../root/statistics/Index.js:1163 +#: ../root/statistics/Index.js:1270 ../root/statistics/Index.js:1322 msgid "Yesterday:" msgstr "Ayer:" -#: ../root/statistics/Index.js:1118 ../root/statistics/stats.js:706 +#: ../root/statistics/Index.js:1277 ../root/statistics/stats.js:832 msgid "Votes" msgstr "Votos" -#: ../root/statistics/Index.js:1121 ../root/statistics/Index.js:1150 +#: ../root/statistics/Index.js:1280 ../root/statistics/Index.js:1309 msgid "Votes:" msgstr "Votos:" -#: ../root/statistics/Index.js:1127 +#: ../root/statistics/Index.js:1286 msgctxt "vote" msgid "Approve" msgstr "Aprobar" -#: ../root/statistics/Index.js:1133 +#: ../root/statistics/Index.js:1292 msgctxt "vote" msgid "Yes" msgstr "Sí" -#: ../root/statistics/Index.js:1139 +#: ../root/statistics/Index.js:1298 msgctxt "vote" msgid "No" msgstr "No" -#: ../root/statistics/Index.js:1145 +#: ../root/statistics/Index.js:1304 msgctxt "vote" msgid "Abstain" msgstr "Abstenerse" @@ -2205,744 +2287,824 @@ msgstr "" msgid "CDStub tracks" msgstr "" -#: ../root/statistics/stats.js:170 ../root/statistics/stats.js:171 +#: ../root/statistics/stats.js:177 +msgid "Collections with collaborators" +msgstr "" + +#: ../root/statistics/stats.js:183 +msgid "Private collections" +msgstr "" + +#: ../root/statistics/stats.js:189 +msgid "Public collections" +msgstr "" + +#: ../root/statistics/stats.js:195 +msgid "Area collections" +msgstr "" + +#: ../root/statistics/stats.js:201 +msgid "Artist collections" +msgstr "" + +#: ../root/statistics/stats.js:207 +msgid "Collections of type Attending" +msgstr "" + +#: ../root/statistics/stats.js:213 +msgid "Collections of type Event" +msgstr "" + +#: ../root/statistics/stats.js:219 +msgid "Event collections (all types)" +msgstr "" + +#: ../root/statistics/stats.js:225 +msgid "Instrument collections" +msgstr "" + +#: ../root/statistics/stats.js:231 +msgid "Label collections" +msgstr "" + +#: ../root/statistics/stats.js:237 +msgid "Collections of type Maybe attending" +msgstr "" + +#: ../root/statistics/stats.js:243 +msgid "Collections of type Owned music" +msgstr "" + +#: ../root/statistics/stats.js:249 +msgid "Place collections" +msgstr "" + +#: ../root/statistics/stats.js:255 +msgid "Recording collections" +msgstr "" + +#: ../root/statistics/stats.js:261 +msgid "Collections of type Release" +msgstr "" + +#: ../root/statistics/stats.js:267 +msgid "Release collections (all types)" +msgstr "" + +#: ../root/statistics/stats.js:273 +msgid "Release group collections" +msgstr "" + +#: ../root/statistics/stats.js:279 +msgid "Series collections" +msgstr "" + +#: ../root/statistics/stats.js:285 +msgid "Collections of type Wishlist" +msgstr "" + +#: ../root/statistics/stats.js:291 +msgid "Work collections" +msgstr "" + +#: ../root/statistics/stats.js:296 ../root/statistics/stats.js:297 msgid "Pieces of Cover Art" msgstr "Número de imágenes" -#: ../root/statistics/stats.js:176 +#: ../root/statistics/stats.js:302 msgid "Count of all Disc IDs" msgstr "" -#: ../root/statistics/stats.js:182 +#: ../root/statistics/stats.js:308 msgid "Count of all edits" msgstr "" -#: ../root/statistics/stats.js:189 +#: ../root/statistics/stats.js:315 msgid "All edits that have been applied" msgstr "" -#: ../root/statistics/stats.js:190 +#: ../root/statistics/stats.js:316 msgid "Applied edits" msgstr "Ediciones aplicadas" -#: ../root/statistics/stats.js:195 ../root/statistics/stats.js:196 +#: ../root/statistics/stats.js:321 ../root/statistics/stats.js:322 msgid "Cancelled edits" msgstr "Modificaciones canceladas" -#: ../root/statistics/stats.js:201 +#: ../root/statistics/stats.js:327 msgid "All edits that have hit an error" msgstr "" -#: ../root/statistics/stats.js:202 +#: ../root/statistics/stats.js:328 msgid "Error edits" msgstr "" -#: ../root/statistics/stats.js:207 +#: ../root/statistics/stats.js:333 msgid "Evalnochange edits" msgstr "" -#: ../root/statistics/stats.js:208 +#: ../root/statistics/stats.js:334 msgid "Evalnochange Edits" msgstr "" -#: ../root/statistics/stats.js:213 +#: ../root/statistics/stats.js:339 msgid "All edits that have failed dependency checks" msgstr "" -#: ../root/statistics/stats.js:214 +#: ../root/statistics/stats.js:340 msgid "Failed edits (dependency)" msgstr "Edición fallida (dependencia):" -#: ../root/statistics/stats.js:219 +#: ../root/statistics/stats.js:345 msgid "All edits that have failed prerequisite checks" msgstr "" -#: ../root/statistics/stats.js:220 +#: ../root/statistics/stats.js:346 msgid "Failed edits (prerequisite)" msgstr "Edición fallida (prerrequisito):" -#: ../root/statistics/stats.js:225 +#: ../root/statistics/stats.js:351 msgid "All edits that have failed by being voted down" msgstr "" -#: ../root/statistics/stats.js:226 +#: ../root/statistics/stats.js:352 msgid "Failed edits (voted down)" msgstr "" -#: ../root/statistics/stats.js:231 +#: ../root/statistics/stats.js:357 msgid "Count of open edits" msgstr "" -#: ../root/statistics/stats.js:232 +#: ../root/statistics/stats.js:358 msgid "Open Edits" msgstr "Ediciones abiertas" -#: ../root/statistics/stats.js:237 +#: ../root/statistics/stats.js:363 msgid "Count of edits per day" msgstr "" -#: ../root/statistics/stats.js:239 +#: ../root/statistics/stats.js:365 msgid "Edits per day" msgstr "Ediciones al día" -#: ../root/statistics/stats.js:244 +#: ../root/statistics/stats.js:370 msgid "Count of edits per week" msgstr "" -#: ../root/statistics/stats.js:245 +#: ../root/statistics/stats.js:371 msgid "Edits per week" msgstr "Ediciones a la semana" -#: ../root/statistics/stats.js:250 +#: ../root/statistics/stats.js:376 msgid "Count of all editors" msgstr "" -#: ../root/statistics/stats.js:252 +#: ../root/statistics/stats.js:378 msgid "Editors (all)" msgstr "Editores (todos)" -#: ../root/statistics/stats.js:258 +#: ../root/statistics/stats.js:384 msgid "Count of active editors (editing or voting) during the last week" msgstr "Cuenta de editores activos (editando o votando) durante la última semana" -#: ../root/statistics/stats.js:260 +#: ../root/statistics/stats.js:386 msgid "Active Users" msgstr "Usuarios activos" -#: ../root/statistics/stats.js:265 +#: ../root/statistics/stats.js:391 msgid "Count of deleted editors" msgstr "" -#: ../root/statistics/stats.js:267 +#: ../root/statistics/stats.js:393 msgid "Editors (deleted)" msgstr "Editores (eliminados)" -#: ../root/statistics/stats.js:273 +#: ../root/statistics/stats.js:399 msgid "Count of editors who have submitted edits during the last 7 days" msgstr "" -#: ../root/statistics/stats.js:275 +#: ../root/statistics/stats.js:401 msgid "Active Editors" msgstr "Editores activos" -#: ../root/statistics/stats.js:280 +#: ../root/statistics/stats.js:406 msgid "Count of non-deleted editors" msgstr "" -#: ../root/statistics/stats.js:282 +#: ../root/statistics/stats.js:408 msgid "Editors (valid)" msgstr "Editores (válidos)" -#: ../root/statistics/stats.js:287 +#: ../root/statistics/stats.js:413 msgid "Count of active editors" msgstr "Cuenta de editores activos" -#: ../root/statistics/stats.js:289 +#: ../root/statistics/stats.js:415 msgid "Editors (valid & active ever)" msgstr "" -#: ../root/statistics/stats.js:295 +#: ../root/statistics/stats.js:421 msgid "Count of editors who have voted on during the last 7 days" msgstr "" -#: ../root/statistics/stats.js:297 +#: ../root/statistics/stats.js:423 msgid "Active Voters" msgstr "Votantes activos" -#: ../root/statistics/stats.js:302 +#: ../root/statistics/stats.js:428 msgid "Count of all events" msgstr "" -#: ../root/statistics/stats.js:308 +#: ../root/statistics/stats.js:434 msgid "Count of all instruments" msgstr "" -#: ../root/statistics/stats.js:314 +#: ../root/statistics/stats.js:440 msgid "Count of all IPIs" msgstr "" -#: ../root/statistics/stats.js:315 +#: ../root/statistics/stats.js:441 msgid "IPIs" msgstr "IPIs" -#: ../root/statistics/stats.js:320 +#: ../root/statistics/stats.js:446 msgid "Count of all IPIs for Artists" msgstr "" -#: ../root/statistics/stats.js:321 +#: ../root/statistics/stats.js:447 msgid "Artist IPIs" msgstr "" -#: ../root/statistics/stats.js:326 +#: ../root/statistics/stats.js:452 msgid "Count of all IPIs for Labels" msgstr "" -#: ../root/statistics/stats.js:327 +#: ../root/statistics/stats.js:453 msgid "Label IPIs" msgstr "IPIs de discográficas" -#: ../root/statistics/stats.js:332 +#: ../root/statistics/stats.js:458 msgid "Count of all ISNIs" msgstr "" -#: ../root/statistics/stats.js:333 +#: ../root/statistics/stats.js:459 msgid "ISNIs" msgstr "ISNIs" -#: ../root/statistics/stats.js:338 +#: ../root/statistics/stats.js:464 msgid "Count of all ISNIs for Artists" msgstr "" -#: ../root/statistics/stats.js:339 +#: ../root/statistics/stats.js:465 msgid "Artist ISNIs" msgstr "" -#: ../root/statistics/stats.js:344 +#: ../root/statistics/stats.js:470 msgid "Count of all ISNIs for Labels" msgstr "" -#: ../root/statistics/stats.js:345 +#: ../root/statistics/stats.js:471 msgid "Label ISNIs" msgstr "" -#: ../root/statistics/stats.js:350 ../root/statistics/stats.js:356 +#: ../root/statistics/stats.js:476 ../root/statistics/stats.js:482 msgid "Count of all ISRCs" msgstr "" -#: ../root/statistics/stats.js:351 +#: ../root/statistics/stats.js:477 msgid "ISRCs" msgstr "ISRCs" -#: ../root/statistics/stats.js:357 +#: ../root/statistics/stats.js:483 msgid "ISRCs (all)" msgstr "ISRCs (totales)" -#: ../root/statistics/stats.js:362 ../root/statistics/stats.js:368 +#: ../root/statistics/stats.js:488 ../root/statistics/stats.js:494 msgid "Count of all ISWCs" msgstr "" -#: ../root/statistics/stats.js:363 +#: ../root/statistics/stats.js:489 msgid "ISWCs" msgstr "ISWCs" -#: ../root/statistics/stats.js:369 +#: ../root/statistics/stats.js:495 msgid "ISWCs (all)" msgstr "ISRCs (totales)" -#: ../root/statistics/stats.js:374 +#: ../root/statistics/stats.js:500 msgid "Count of all labels" msgstr "" -#: ../root/statistics/stats.js:380 +#: ../root/statistics/stats.js:506 msgid "Labels with no country set" msgstr "Discográficas sin un país indicado" -#: ../root/statistics/stats.js:386 +#: ../root/statistics/stats.js:512 msgid "Count of all mediums" msgstr "" -#: ../root/statistics/stats.js:392 +#: ../root/statistics/stats.js:518 msgid "Mediums with no format set" msgstr "Medios sin formato definido:" -#: ../root/statistics/stats.js:393 +#: ../root/statistics/stats.js:519 msgid "Unknown Format (medium)" msgstr "Formato desconocido (medio)" -#: ../root/statistics/stats.js:398 +#: ../root/statistics/stats.js:524 msgid "Count of all Mediums with Disc IDs" msgstr "" -#: ../root/statistics/stats.js:399 +#: ../root/statistics/stats.js:525 msgid "Mediums with Disc IDs" msgstr "Medios con IDs de disco" -#: ../root/statistics/stats.js:404 +#: ../root/statistics/stats.js:530 msgid "Count of all places" msgstr "" -#: ../root/statistics/stats.js:410 +#: ../root/statistics/stats.js:536 msgid "Count of all Releases at Default Data Quality" msgstr "" -#: ../root/statistics/stats.js:411 +#: ../root/statistics/stats.js:537 msgid "Default Data Quality" msgstr "" -#: ../root/statistics/stats.js:416 +#: ../root/statistics/stats.js:542 msgid "Count of all Releases at High Data Quality" msgstr "" -#: ../root/statistics/stats.js:417 +#: ../root/statistics/stats.js:543 msgid "High Data Quality" msgstr "Calidad de datos alta" -#: ../root/statistics/stats.js:422 +#: ../root/statistics/stats.js:548 msgid "Count of all Releases at Low Data Quality" msgstr "" -#: ../root/statistics/stats.js:423 +#: ../root/statistics/stats.js:549 msgid "Low Data Quality" msgstr "Calidad de datos baja" -#: ../root/statistics/stats.js:428 +#: ../root/statistics/stats.js:554 msgid "Count of all Releases at Normal Data Quality" msgstr "" -#: ../root/statistics/stats.js:429 +#: ../root/statistics/stats.js:555 msgid "Normal Data Quality" msgstr "Calidad de datos normal" -#: ../root/statistics/stats.js:434 +#: ../root/statistics/stats.js:560 msgid "Count of all Releases at Unknown Data Quality" msgstr "" -#: ../root/statistics/stats.js:435 +#: ../root/statistics/stats.js:561 msgid "Unknown Data Quality" msgstr "Calidad de datos desconocida" -#: ../root/statistics/stats.js:440 +#: ../root/statistics/stats.js:566 msgid "Count of all Ratings" msgstr "" -#: ../root/statistics/stats.js:441 +#: ../root/statistics/stats.js:567 msgid "Ratings" msgstr "Calificaciones" -#: ../root/statistics/stats.js:446 +#: ../root/statistics/stats.js:572 msgid "Count of all Artist Ratings" msgstr "Cuenta de todas las calificaciones del artista" -#: ../root/statistics/stats.js:447 +#: ../root/statistics/stats.js:573 msgid "Artist Ratings" msgstr "Calificaciones del artista" -#: ../root/statistics/stats.js:452 +#: ../root/statistics/stats.js:578 msgid "Count of all Label Ratings" msgstr "" -#: ../root/statistics/stats.js:453 +#: ../root/statistics/stats.js:579 msgid "Label Ratings" msgstr "Valoraciones de discográficas" -#: ../root/statistics/stats.js:458 +#: ../root/statistics/stats.js:584 msgid "Count of all Place Ratings" msgstr "" -#: ../root/statistics/stats.js:459 +#: ../root/statistics/stats.js:585 msgid "Place Ratings" msgstr "" -#: ../root/statistics/stats.js:464 +#: ../root/statistics/stats.js:590 msgid "Count of all Ratings (raw)" msgstr "" -#: ../root/statistics/stats.js:465 +#: ../root/statistics/stats.js:591 msgid "Ratings (raw)" msgstr "" -#: ../root/statistics/stats.js:470 +#: ../root/statistics/stats.js:596 msgid "Count of all Artist Ratings (raw)" msgstr "" -#: ../root/statistics/stats.js:471 +#: ../root/statistics/stats.js:597 msgid "Artist Ratings (raw)" msgstr "" -#: ../root/statistics/stats.js:476 +#: ../root/statistics/stats.js:602 msgid "Count of all Label Ratings (raw)" msgstr "" -#: ../root/statistics/stats.js:477 +#: ../root/statistics/stats.js:603 msgid "Label Ratings (raw)" msgstr "" -#: ../root/statistics/stats.js:482 +#: ../root/statistics/stats.js:608 msgid "Count of all Place Ratings (raw)" msgstr "" -#: ../root/statistics/stats.js:483 +#: ../root/statistics/stats.js:609 msgid "Place Ratings (raw)" msgstr "" -#: ../root/statistics/stats.js:488 +#: ../root/statistics/stats.js:614 msgid "Count of all Recording Ratings (raw)" msgstr "" -#: ../root/statistics/stats.js:489 +#: ../root/statistics/stats.js:615 msgid "Recording Ratings (raw)" msgstr "" -#: ../root/statistics/stats.js:494 +#: ../root/statistics/stats.js:620 msgid "Count of all Release Group Ratings (raw)" msgstr "" -#: ../root/statistics/stats.js:495 +#: ../root/statistics/stats.js:621 msgid "Release Group Ratings (raw)" msgstr "" -#: ../root/statistics/stats.js:500 +#: ../root/statistics/stats.js:626 msgid "Count of all Work Ratings (raw)" msgstr "" -#: ../root/statistics/stats.js:501 +#: ../root/statistics/stats.js:627 msgid "Work Ratings (raw)" msgstr "" -#: ../root/statistics/stats.js:506 +#: ../root/statistics/stats.js:632 msgid "Count of all Recording Ratings" msgstr "" -#: ../root/statistics/stats.js:507 +#: ../root/statistics/stats.js:633 msgid "Recording Ratings" msgstr "" -#: ../root/statistics/stats.js:512 +#: ../root/statistics/stats.js:638 msgid "Count of all Release Group Ratings" msgstr "" -#: ../root/statistics/stats.js:513 +#: ../root/statistics/stats.js:639 msgid "Release Group Ratings" msgstr "Valoraciones de grupos de publicaciones" -#: ../root/statistics/stats.js:518 +#: ../root/statistics/stats.js:644 msgid "Count of all Work Ratings" msgstr "" -#: ../root/statistics/stats.js:519 +#: ../root/statistics/stats.js:645 msgid "Work Ratings" msgstr "Valoraciones de obras" -#: ../root/statistics/stats.js:524 +#: ../root/statistics/stats.js:650 msgid "Count of all recordings" msgstr "" -#: ../root/statistics/stats.js:530 +#: ../root/statistics/stats.js:656 msgid "Count of all Recordings with ISRCs" msgstr "" -#: ../root/statistics/stats.js:531 +#: ../root/statistics/stats.js:657 msgid "Recordings with ISRCs" msgstr "Grabaciones con ISRCs" -#: ../root/statistics/stats.js:536 +#: ../root/statistics/stats.js:662 msgid "Count of all standalone recordings" msgstr "" -#: ../root/statistics/stats.js:537 +#: ../root/statistics/stats.js:663 msgid "Standalone recordings" msgstr "" -#: ../root/statistics/stats.js:542 +#: ../root/statistics/stats.js:668 msgid "Count of all releases" msgstr "" -#: ../root/statistics/stats.js:548 +#: ../root/statistics/stats.js:674 msgid "Releases with no country set" msgstr "Publicaciones sin un país indicado" -#: ../root/statistics/stats.js:554 ../root/statistics/stats.js:555 -#: ../root/statistics/stats.js:572 +#: ../root/statistics/stats.js:680 ../root/statistics/stats.js:681 +#: ../root/statistics/stats.js:698 msgid "Releases with Amazon Cover Art" msgstr "" -#: ../root/statistics/stats.js:560 ../root/statistics/stats.js:561 +#: ../root/statistics/stats.js:686 ../root/statistics/stats.js:687 msgid "Releases with CAA Cover Art" msgstr "" -#: ../root/statistics/stats.js:566 ../root/statistics/stats.js:567 +#: ../root/statistics/stats.js:692 ../root/statistics/stats.js:693 msgid "Releases with No Cover Art" msgstr "Publicaciones sin imágenes" -#: ../root/statistics/stats.js:573 +#: ../root/statistics/stats.js:699 msgid "Releases with Cover Art from Relationships" msgstr "" -#: ../root/statistics/stats.js:578 +#: ../root/statistics/stats.js:704 msgid "Releases with a no-format medium" msgstr "Publicaciones con un medio sin formato" -#: ../root/statistics/stats.js:579 +#: ../root/statistics/stats.js:705 msgid "Unknown Format (release)" msgstr "Formato desconocido (publicación)" -#: ../root/statistics/stats.js:584 ../root/statistics/stats.js:585 +#: ../root/statistics/stats.js:710 ../root/statistics/stats.js:711 msgid "Releases with Cover Art" msgstr "Publicaciones con imágenes" -#: ../root/statistics/stats.js:590 +#: ../root/statistics/stats.js:716 msgid "Count of all Releases with Disc IDs" msgstr "" -#: ../root/statistics/stats.js:591 +#: ../root/statistics/stats.js:717 msgid "Releases with Disc IDs" msgstr "Publicaciones con IDs de disco" -#: ../root/statistics/stats.js:596 +#: ../root/statistics/stats.js:722 msgid "Releases with no language set" msgstr "Publicaciones sin un idioma indicado" -#: ../root/statistics/stats.js:597 +#: ../root/statistics/stats.js:723 msgid "Unknown Language" msgstr "Idioma desconocido" -#: ../root/statistics/stats.js:602 +#: ../root/statistics/stats.js:728 msgid "Count of all Releases not V.A." msgstr "" -#: ../root/statistics/stats.js:603 +#: ../root/statistics/stats.js:729 msgid "Releases not VA" msgstr "Publicaciones de un artista" -#: ../root/statistics/stats.js:608 +#: ../root/statistics/stats.js:734 msgid "Releases with no script set" msgstr "Publicaciones sin un alfabeto indicado" -#: ../root/statistics/stats.js:609 +#: ../root/statistics/stats.js:735 msgid "Unknown Script" msgstr "Alfabeto desconocido" -#: ../root/statistics/stats.js:614 +#: ../root/statistics/stats.js:740 msgid "Count of all Releases by Various Artists" msgstr "" -#: ../root/statistics/stats.js:615 +#: ../root/statistics/stats.js:741 msgid "Releases (VA)" msgstr "Publicaciones de varios artistas" -#: ../root/statistics/stats.js:620 +#: ../root/statistics/stats.js:746 msgid "Count of all release groups" msgstr "" -#: ../root/statistics/stats.js:626 +#: ../root/statistics/stats.js:752 msgid "Count of all series" msgstr "" -#: ../root/statistics/stats.js:632 +#: ../root/statistics/stats.js:758 msgid "Count of all Tags" msgstr "" -#: ../root/statistics/stats.js:633 +#: ../root/statistics/stats.js:759 msgid "Tags" msgstr "Etiquetas" -#: ../root/statistics/stats.js:638 +#: ../root/statistics/stats.js:764 msgid "Count of all Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:639 +#: ../root/statistics/stats.js:765 msgid "Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:644 +#: ../root/statistics/stats.js:770 msgid "Count of all Area Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:645 +#: ../root/statistics/stats.js:771 msgid "Area Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:650 +#: ../root/statistics/stats.js:776 msgid "Count of all Artist Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:651 +#: ../root/statistics/stats.js:777 msgid "Artist Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:656 +#: ../root/statistics/stats.js:782 msgid "Count of all Instrument Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:657 +#: ../root/statistics/stats.js:783 msgid "Instrument Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:662 +#: ../root/statistics/stats.js:788 msgid "Count of all Label Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:663 +#: ../root/statistics/stats.js:789 msgid "Label Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:668 +#: ../root/statistics/stats.js:794 msgid "Count of all Recording Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:669 +#: ../root/statistics/stats.js:795 msgid "Recording Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:674 +#: ../root/statistics/stats.js:800 msgid "Count of all Release Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:675 +#: ../root/statistics/stats.js:801 msgid "Release Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:680 +#: ../root/statistics/stats.js:806 msgid "Count of all Release Group Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:681 +#: ../root/statistics/stats.js:807 msgid "Release Group Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:686 +#: ../root/statistics/stats.js:812 msgid "Count of all Series Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:687 +#: ../root/statistics/stats.js:813 msgid "Series Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:692 +#: ../root/statistics/stats.js:818 msgid "Count of all Work Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:693 +#: ../root/statistics/stats.js:819 msgid "Work Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:698 +#: ../root/statistics/stats.js:824 msgid "Count of all Tracks" msgstr "" -#: ../root/statistics/stats.js:699 +#: ../root/statistics/stats.js:825 msgid "Tracks" msgstr "Pistas" -#: ../root/statistics/stats.js:704 +#: ../root/statistics/stats.js:830 msgid "Count of all votes" msgstr "" -#: ../root/statistics/stats.js:711 +#: ../root/statistics/stats.js:837 msgid "Count of all Abstain votes" msgstr "" -#: ../root/statistics/stats.js:712 +#: ../root/statistics/stats.js:838 msgid "Abstentions" msgstr "Abstenciones" -#: ../root/statistics/stats.js:717 +#: ../root/statistics/stats.js:843 msgid "Count of all No votes" msgstr "" -#: ../root/statistics/stats.js:718 +#: ../root/statistics/stats.js:844 msgid "No Votes" msgstr "Sin votos" -#: ../root/statistics/stats.js:723 +#: ../root/statistics/stats.js:849 msgid "Count of votes per day" msgstr "" -#: ../root/statistics/stats.js:725 +#: ../root/statistics/stats.js:851 msgid "Votes per day" msgstr "Votos al día" -#: ../root/statistics/stats.js:730 +#: ../root/statistics/stats.js:856 msgid "Count of votes per week" msgstr "" -#: ../root/statistics/stats.js:731 +#: ../root/statistics/stats.js:857 msgid "Votes per week" msgstr "Votos a la semana" -#: ../root/statistics/stats.js:736 +#: ../root/statistics/stats.js:862 msgid "Count of all Yes votes" msgstr "" -#: ../root/statistics/stats.js:737 +#: ../root/statistics/stats.js:863 msgid "Yes Votes" msgstr "Votos \"Sí\"" -#: ../root/statistics/stats.js:742 +#: ../root/statistics/stats.js:868 msgid "Count of all works" msgstr "" -#: ../root/statistics/stats.js:748 +#: ../root/statistics/stats.js:874 msgid "Count of all Works with ISWCs" msgstr "" -#: ../root/statistics/stats.js:749 +#: ../root/statistics/stats.js:875 msgid "Works with ISWCs" msgstr "" -#: ../root/statistics/stats.js:751 +#: ../root/statistics/stats.js:877 msgid "/day" msgstr "/día" -#: ../root/statistics/stats.js:760 +#: ../root/statistics/stats.js:886 msgid "Count of all Releases with {n} Disc IDs" msgstr "" -#: ../root/statistics/stats.js:762 +#: ../root/statistics/stats.js:888 msgid "Releases with 1 Disc ID" msgid_plural "Releases with {n} Disc IDs" msgstr[0] "Publicaciones con 1 ID de disco" msgstr[1] "Publicaciones con {n} IDs de disco" -#: ../root/statistics/stats.js:772 +#: ../root/statistics/stats.js:898 msgid "Count of all Mediums with {n} Disc IDs" msgstr "" -#: ../root/statistics/stats.js:774 +#: ../root/statistics/stats.js:900 msgid "Mediums with 1 Disc ID" msgid_plural "Mediums with {n} Disc IDs" msgstr[0] "Medios con 1 ID de disco" msgstr[1] "Medios con {n} IDs de disco" -#: ../root/statistics/stats.js:784 +#: ../root/statistics/stats.js:910 msgid "Count of all Recordings with {n} Releases" msgstr "" -#: ../root/statistics/stats.js:786 +#: ../root/statistics/stats.js:912 msgid "Recordings with 1 Release" msgid_plural "Recordings with {n} Releases" msgstr[0] "" msgstr[1] "" -#: ../root/statistics/stats.js:796 +#: ../root/statistics/stats.js:922 msgid "Count of all Release Groups with {n} Releases" msgstr "" -#: ../root/statistics/stats.js:798 +#: ../root/statistics/stats.js:924 msgid "Release Groups with 1 Release" msgid_plural "Release Groups with {n} Releases" msgstr[0] "Grupos de publicaciones con 1 publicación" msgstr[1] "Grupos de publicaciones con {n} publicaciones" -#: ../root/statistics/stats.js:840 +#: ../root/statistics/stats.js:966 msgid "{country} artists" msgstr "Artistas de {country}" -#: ../root/statistics/stats.js:847 +#: ../root/statistics/stats.js:973 msgid "{country} labels" msgstr "Discográficas de {country}" -#: ../root/statistics/stats.js:854 +#: ../root/statistics/stats.js:980 msgid "{country} releases" msgstr "Publicaciones de {country}" -#: ../root/statistics/stats.js:866 +#: ../root/statistics/stats.js:992 msgid "{name} releases" msgstr "Publicaciones de [name]" -#: ../root/statistics/stats.js:873 +#: ../root/statistics/stats.js:999 msgid "{name} mediums" msgstr "Medios de [name]" -#: ../root/statistics/stats.js:885 +#: ../root/statistics/stats.js:1011 msgid "{language} releases" msgstr "Publicaciones en {language}" -#: ../root/statistics/stats.js:892 +#: ../root/statistics/stats.js:1018 msgid "l_{first}_{second} Relationships" msgstr "" -#: ../root/statistics/stats.js:913 +#: ../root/statistics/stats.js:1039 msgid "{script} releases" msgstr "Publicaciones con alfabeto {script}" diff --git a/po/statistics.et.po b/po/statistics.et.po index 0d6874a877b..c823ead0295 100644 --- a/po/statistics.et.po +++ b/po/statistics.et.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: MusicBrainz\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2021-07-19 17:37+0000\n" -"Last-Translator: Mihkel Tõnnov <email address hidden>\n" +"PO-Revision-Date: 2021-09-28 18:40+0000\n" +"Last-Translator: yvanz\n" "Language-Team: Estonian (http://www.transifex.com/musicbrainz/musicbrainz/language/et/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -1131,15 +1131,15 @@ msgid "Draw a rectangle on either graph" msgstr "Joonista ristkülik emmal-kummal graafikul" #: ../root/statistics/layout.tt:4 ../root/statistics/Editors.js:98 -#: ../root/statistics/Editors.js:109 ../root/statistics/Index.js:924 +#: ../root/statistics/Editors.js:109 ../root/statistics/Index.js:1083 #: ../root/statistics/StatisticsLayout.js:82 msgid "Editors" msgstr "Toimetajad" #: ../root/statistics/layout.tt:4 ../root/statistics/Edits.js:37 #: ../root/statistics/Edits.js:41 ../root/statistics/Edits.js:50 -#: ../root/statistics/Index.js:1048 ../root/statistics/StatisticsLayout.js:72 -#: ../root/statistics/stats.js:184 +#: ../root/statistics/Index.js:1207 ../root/statistics/StatisticsLayout.js:72 +#: ../root/statistics/stats.js:310 msgid "Edits" msgstr "Toimetused" @@ -1226,20 +1226,20 @@ msgstr "Koht" msgid "Country" msgstr "Riik" -#: ../root/statistics/Countries.js:53 ../root/statistics/Index.js:227 -#: ../root/statistics/Index.js:231 ../root/statistics/stats.js:45 +#: ../root/statistics/Countries.js:53 ../root/statistics/Index.js:231 +#: ../root/statistics/Index.js:235 ../root/statistics/stats.js:45 msgid "Artists" msgstr "Artistid" #: ../root/statistics/Countries.js:57 ../root/statistics/CoverArt.js:105 -#: ../root/statistics/Formats.js:56 ../root/statistics/Index.js:359 +#: ../root/statistics/Formats.js:56 ../root/statistics/Index.js:363 #: ../root/statistics/LanguagesScripts.js:71 -#: ../root/statistics/LanguagesScripts.js:152 ../root/statistics/stats.js:543 +#: ../root/statistics/LanguagesScripts.js:152 ../root/statistics/stats.js:669 msgid "Releases" msgstr "Väljalasked" -#: ../root/statistics/Countries.js:61 ../root/statistics/Index.js:694 -#: ../root/statistics/Index.js:701 ../root/statistics/stats.js:375 +#: ../root/statistics/Countries.js:61 ../root/statistics/Index.js:698 +#: ../root/statistics/Index.js:705 ../root/statistics/stats.js:501 msgid "Labels" msgstr "Plaadifirmad" @@ -1249,7 +1249,7 @@ msgid "Total" msgstr "Kokku" #: ../root/statistics/Countries.js:87 ../root/statistics/stats.js:57 -#: ../root/statistics/stats.js:381 ../root/statistics/stats.js:549 +#: ../root/statistics/stats.js:507 ../root/statistics/stats.js:675 msgid "Unknown Country" msgstr "[riik määramata]" @@ -1404,7 +1404,7 @@ msgstr "Formaat" msgid "% of total releases" msgstr "% kõigist väljalasetest" -#: ../root/statistics/Formats.js:58 ../root/statistics/stats.js:387 +#: ../root/statistics/Formats.js:58 ../root/statistics/stats.js:513 msgid "Mediums" msgstr "Helikandjad" @@ -1424,27 +1424,27 @@ msgstr "Põhilised metaandmed" msgid "Core Entities" msgstr "Põhiolemid" -#: ../root/statistics/Index.js:92 ../root/statistics/Index.js:234 +#: ../root/statistics/Index.js:92 ../root/statistics/Index.js:238 msgid "Artists:" msgstr "Artiste:" -#: ../root/statistics/Index.js:96 ../root/statistics/Index.js:614 -#: ../root/statistics/Index.js:640 +#: ../root/statistics/Index.js:96 ../root/statistics/Index.js:618 +#: ../root/statistics/Index.js:644 msgid "Release Groups:" msgstr "Väljalaskerühmi:" -#: ../root/statistics/Index.js:100 ../root/statistics/Index.js:362 -#: ../root/statistics/Index.js:384 ../root/statistics/Index.js:410 -#: ../root/statistics/Index.js:436 ../root/statistics/Index.js:470 -#: ../root/statistics/Index.js:519 +#: ../root/statistics/Index.js:100 ../root/statistics/Index.js:366 +#: ../root/statistics/Index.js:388 ../root/statistics/Index.js:414 +#: ../root/statistics/Index.js:440 ../root/statistics/Index.js:474 +#: ../root/statistics/Index.js:523 msgid "Releases:" msgstr "Väljalaskeid:" -#: ../root/statistics/Index.js:104 ../root/statistics/Index.js:563 +#: ../root/statistics/Index.js:104 ../root/statistics/Index.js:567 msgid "Mediums:" msgstr "Helikandjaid:" -#: ../root/statistics/Index.js:108 ../root/statistics/Index.js:672 +#: ../root/statistics/Index.js:108 ../root/statistics/Index.js:676 msgid "Recordings:" msgstr "Salvestisi:" @@ -1456,8 +1456,8 @@ msgstr "Radu:" msgid "Labels:" msgstr "Plaadifirmasid:" -#: ../root/statistics/Index.js:120 ../root/statistics/Index.js:729 -#: ../root/statistics/Index.js:761 +#: ../root/statistics/Index.js:120 ../root/statistics/Index.js:733 +#: ../root/statistics/Index.js:765 msgid "Works:" msgstr "Teoseid:" @@ -1465,24 +1465,24 @@ msgstr "Teoseid:" msgid "URLs:" msgstr "URL-e:" -#: ../root/statistics/Index.js:128 ../root/statistics/Index.js:791 +#: ../root/statistics/Index.js:128 ../root/statistics/Index.js:795 msgid "Areas:" msgstr "Piirkondi:" -#: ../root/statistics/Index.js:132 ../root/statistics/Index.js:819 +#: ../root/statistics/Index.js:132 ../root/statistics/Index.js:823 msgid "Places:" msgstr "Kohti:" -#: ../root/statistics/Index.js:136 ../root/statistics/Index.js:847 +#: ../root/statistics/Index.js:136 ../root/statistics/Index.js:851 msgctxt "plural" msgid "Series:" msgstr "Seeriaid:" -#: ../root/statistics/Index.js:140 ../root/statistics/Index.js:869 +#: ../root/statistics/Index.js:140 ../root/statistics/Index.js:873 msgid "Instruments:" msgstr "Instrumente:" -#: ../root/statistics/Index.js:144 ../root/statistics/Index.js:899 +#: ../root/statistics/Index.js:144 ../root/statistics/Index.js:903 msgid "Events:" msgstr "Sündmusi:" @@ -1502,422 +1502,504 @@ msgstr "Toimetajaid (kehtiva / kustutatud kontoga)" msgid "Relationships:" msgstr "Seoseid:" -#: ../root/statistics/Index.js:167 +#: ../root/statistics/Index.js:167 ../root/statistics/Index.js:924 +#: ../root/statistics/Index.js:928 ../root/statistics/Index.js:931 +#: ../root/statistics/stats.js:171 +msgid "Collections" +msgstr "Kogud" + +#: ../root/statistics/Index.js:171 msgid "CD Stubs (all time / current):" msgstr "Pooleldi sisestatud CD-sid (kokku olnud / hetkel):" -#: ../root/statistics/Index.js:176 +#: ../root/statistics/Index.js:180 msgid "Tags (raw / aggregated):" msgstr "Silte (toorelt / koondatult):" -#: ../root/statistics/Index.js:182 +#: ../root/statistics/Index.js:186 msgid "Ratings (raw / aggregated):" msgstr "Hinnanguid (toorelt / koondatult):" -#: ../root/statistics/Index.js:190 +#: ../root/statistics/Index.js:194 msgid "Identifiers" msgstr "Identifikaatorid" -#: ../root/statistics/Index.js:193 +#: ../root/statistics/Index.js:197 msgid "MBIDs:" msgstr "MBID-sid:" -#: ../root/statistics/Index.js:197 +#: ../root/statistics/Index.js:201 msgid "ISRCs (all / unique):" msgstr "ISRC-sid (kokku / unikaalseid):" -#: ../root/statistics/Index.js:203 +#: ../root/statistics/Index.js:207 msgid "ISWCs (all / unique):" msgstr "ISWC-sid (kokku / unikaalseid):" -#: ../root/statistics/Index.js:209 ../root/statistics/Index.js:514 +#: ../root/statistics/Index.js:213 ../root/statistics/Index.js:518 msgid "Disc IDs:" msgstr "Plaadi-ID-sid:" -#: ../root/statistics/Index.js:213 +#: ../root/statistics/Index.js:217 msgid "Barcodes:" msgstr "Vöötkoode:" -#: ../root/statistics/Index.js:217 +#: ../root/statistics/Index.js:221 msgid "IPIs:" msgstr "IPI-sid:" -#: ../root/statistics/Index.js:221 +#: ../root/statistics/Index.js:225 msgid "ISNIs:" msgstr "ISNI-sid:" -#: ../root/statistics/Index.js:240 +#: ../root/statistics/Index.js:244 msgid "of type Person:" msgstr "Isikuid:" -#: ../root/statistics/Index.js:246 +#: ../root/statistics/Index.js:250 msgid "of type Group:" msgstr "Gruppe:" -#: ../root/statistics/Index.js:252 +#: ../root/statistics/Index.js:256 msgid "of type Orchestra:" msgstr "Orkestreid:" -#: ../root/statistics/Index.js:258 +#: ../root/statistics/Index.js:262 msgid "of type Choir:" msgstr "Koore:" -#: ../root/statistics/Index.js:264 +#: ../root/statistics/Index.js:268 msgid "of type Character:" msgstr "Tegelaskujusid:" -#: ../root/statistics/Index.js:270 +#: ../root/statistics/Index.js:274 msgid "of type Other:" msgstr "Muid:" -#: ../root/statistics/Index.js:276 +#: ../root/statistics/Index.js:280 msgid "with no type set:" msgstr "Määramata:" -#: ../root/statistics/Index.js:282 +#: ../root/statistics/Index.js:286 msgid "with appearances in artist credits:" msgstr "" -#: ../root/statistics/Index.js:288 +#: ../root/statistics/Index.js:292 msgid "with no appearances in artist credits:" msgstr "" -#: ../root/statistics/Index.js:293 +#: ../root/statistics/Index.js:297 msgid "Non-group artists:" msgstr "Mittegruppe:" -#: ../root/statistics/Index.js:299 +#: ../root/statistics/Index.js:303 msgid "Male:" msgstr "Meessoost:" -#: ../root/statistics/Index.js:310 +#: ../root/statistics/Index.js:314 msgid "Female:" msgstr "Naissoost:" -#: ../root/statistics/Index.js:321 +#: ../root/statistics/Index.js:325 msgid "Other gender:" msgstr "Muust soost:" -#: ../root/statistics/Index.js:332 +#: ../root/statistics/Index.js:336 msgid "Gender not applicable:" msgstr "" -#: ../root/statistics/Index.js:343 +#: ../root/statistics/Index.js:347 msgid "with no gender set:" msgstr "Määramata:" -#: ../root/statistics/Index.js:355 +#: ../root/statistics/Index.js:359 msgid "Releases, Data Quality, and Disc IDs" msgstr "Väljalasked, andmekvaliteet ja plaadi-ID-d" -#: ../root/statistics/Index.js:368 +#: ../root/statistics/Index.js:372 msgid "by various artists:" msgstr "" -#: ../root/statistics/Index.js:374 +#: ../root/statistics/Index.js:378 msgid "by a single artist:" msgstr "Ühe esitajaga:" -#: ../root/statistics/Index.js:381 +#: ../root/statistics/Index.js:385 msgid "Release Status" msgstr "Väljalaske staatus" -#: ../root/statistics/Index.js:400 +#: ../root/statistics/Index.js:404 msgid "No status set" msgstr "[määramata]" -#: ../root/statistics/Index.js:407 +#: ../root/statistics/Index.js:411 msgid "Release Packaging" msgstr "Ümbrised" -#: ../root/statistics/Index.js:426 +#: ../root/statistics/Index.js:430 msgid "No packaging set" msgstr "[määramata]" -#: ../root/statistics/Index.js:433 +#: ../root/statistics/Index.js:437 msgid "Cover Art Sources" msgstr "Kaanepildiallikad" -#: ../root/statistics/Index.js:442 +#: ../root/statistics/Index.js:446 msgid "CAA:" msgstr "Kaanepildiarhiivist:" -#: ../root/statistics/Index.js:448 +#: ../root/statistics/Index.js:452 msgid "Amazon:" msgstr "Amazonist:" -#: ../root/statistics/Index.js:454 +#: ../root/statistics/Index.js:458 msgid "URL Relationships:" msgstr "URLi-seostest:" -#: ../root/statistics/Index.js:460 +#: ../root/statistics/Index.js:464 msgid "No front cover art:" msgstr "Ilma esikaanepildita:" -#: ../root/statistics/Index.js:467 +#: ../root/statistics/Index.js:471 msgid "Data Quality" msgstr "Andmekvaliteet" -#: ../root/statistics/Index.js:476 +#: ../root/statistics/Index.js:480 msgid "High Data Quality:" msgstr "Kõrge andmekvaliteediga:" -#: ../root/statistics/Index.js:482 +#: ../root/statistics/Index.js:486 msgid "Default Data Quality:" msgstr "Vaikimisi andmekvaliteediga:" -#: ../root/statistics/Index.js:489 +#: ../root/statistics/Index.js:493 msgid "Normal Data Quality:" msgstr "Tavalise andmekvaliteediga:" -#: ../root/statistics/Index.js:496 +#: ../root/statistics/Index.js:500 msgid "Unknown Data Quality:" msgstr "Teadmata andmekvaliteediga:" -#: ../root/statistics/Index.js:504 +#: ../root/statistics/Index.js:508 msgid "Low Data Quality:" msgstr "Madala andmekvaliteediga:" -#: ../root/statistics/Index.js:511 ../root/statistics/stats.js:177 +#: ../root/statistics/Index.js:515 ../root/statistics/stats.js:303 msgid "Disc IDs" msgstr "Plaadi-ID-d" -#: ../root/statistics/Index.js:525 +#: ../root/statistics/Index.js:529 msgid "Releases with no disc IDs:" msgstr "Ilma plaadi-ID-ta väljalaskeid:" -#: ../root/statistics/Index.js:532 +#: ../root/statistics/Index.js:536 msgid "Releases with at least one disc ID:" msgstr "Vähemalt ühe plaadi-ID-ga väljalaskeid:" -#: ../root/statistics/Index.js:543 ../root/statistics/Index.js:587 +#: ../root/statistics/Index.js:547 ../root/statistics/Index.js:591 msgid "with {num} disc ID:" msgid_plural "with {num} disc IDs:" msgstr[0] "{num} plaadi-ID-ga:" msgstr[1] "{num} plaadi-ID-ga:" -#: ../root/statistics/Index.js:558 ../root/statistics/Index.js:600 +#: ../root/statistics/Index.js:562 ../root/statistics/Index.js:604 msgid "with 10 or more disc IDs:" msgstr "10 või enama plaadi-ID-ga:" -#: ../root/statistics/Index.js:569 +#: ../root/statistics/Index.js:573 msgid "Mediums with no disc IDs:" msgstr "Ilma plaadi-ID-ta helikandjaid:" -#: ../root/statistics/Index.js:576 +#: ../root/statistics/Index.js:580 msgid "Mediums with at least one disc ID:" msgstr "Vähemalt ühe plaadi-ID-ga helikandjaid:" -#: ../root/statistics/Index.js:607 ../root/statistics/stats.js:621 +#: ../root/statistics/Index.js:611 ../root/statistics/stats.js:747 msgid "Release Groups" msgstr "Väljalaskerühmad" -#: ../root/statistics/Index.js:611 +#: ../root/statistics/Index.js:615 msgid "Primary Types" msgstr "Põhitüübid" -#: ../root/statistics/Index.js:637 +#: ../root/statistics/Index.js:641 msgid "Secondary Types" msgstr "Teisesed tüübid" -#: ../root/statistics/Index.js:665 ../root/statistics/Index.js:669 -#: ../root/statistics/stats.js:525 +#: ../root/statistics/Index.js:669 ../root/statistics/Index.js:673 +#: ../root/statistics/stats.js:651 msgid "Recordings" msgstr "Salvestised" -#: ../root/statistics/Index.js:677 +#: ../root/statistics/Index.js:681 msgid "Videos:" msgstr "Videoid:" -#: ../root/statistics/Index.js:682 +#: ../root/statistics/Index.js:686 msgctxt "recording" msgid "Standalone" msgstr "" -#: ../root/statistics/Index.js:687 +#: ../root/statistics/Index.js:691 msgid "With ISRCs" msgstr "" -#: ../root/statistics/Index.js:698 ../root/statistics/Index.js:726 -#: ../root/statistics/Index.js:788 ../root/statistics/Index.js:816 -#: ../root/statistics/Index.js:844 ../root/statistics/Index.js:866 -#: ../root/statistics/Index.js:896 +#: ../root/statistics/Index.js:702 ../root/statistics/Index.js:730 +#: ../root/statistics/Index.js:792 ../root/statistics/Index.js:820 +#: ../root/statistics/Index.js:848 ../root/statistics/Index.js:870 +#: ../root/statistics/Index.js:900 msgid "Types" msgstr "Tüübid" -#: ../root/statistics/Index.js:715 ../root/statistics/Index.js:743 -#: ../root/statistics/Index.js:777 ../root/statistics/Index.js:805 -#: ../root/statistics/Index.js:833 ../root/statistics/Index.js:885 -#: ../root/statistics/Index.js:913 +#: ../root/statistics/Index.js:719 ../root/statistics/Index.js:747 +#: ../root/statistics/Index.js:781 ../root/statistics/Index.js:809 +#: ../root/statistics/Index.js:837 ../root/statistics/Index.js:889 +#: ../root/statistics/Index.js:917 msgid "None" msgstr "[määramata]" -#: ../root/statistics/Index.js:722 ../root/statistics/LanguagesScripts.js:75 -#: ../root/statistics/stats.js:743 +#: ../root/statistics/Index.js:726 ../root/statistics/LanguagesScripts.js:75 +#: ../root/statistics/stats.js:869 msgid "Works" msgstr "Teosed" -#: ../root/statistics/Index.js:748 +#: ../root/statistics/Index.js:752 msgid "With ISWCs" msgstr "" -#: ../root/statistics/Index.js:758 +#: ../root/statistics/Index.js:762 msgid "Attributes" msgstr "Atribuudid" -#: ../root/statistics/Index.js:784 ../root/statistics/stats.js:39 +#: ../root/statistics/Index.js:788 ../root/statistics/stats.js:39 msgid "Areas" msgstr "Piirkonnad" -#: ../root/statistics/Index.js:812 ../root/statistics/stats.js:405 +#: ../root/statistics/Index.js:816 ../root/statistics/stats.js:531 msgid "Places" msgstr "Kohad" -#: ../root/statistics/Index.js:840 ../root/statistics/stats.js:627 +#: ../root/statistics/Index.js:844 ../root/statistics/stats.js:753 msgctxt "plural" msgid "Series" msgstr "Seeriad" -#: ../root/statistics/Index.js:862 ../root/statistics/stats.js:309 +#: ../root/statistics/Index.js:866 ../root/statistics/stats.js:435 msgid "Instruments" msgstr "Instrumendid" -#: ../root/statistics/Index.js:892 ../root/statistics/stats.js:303 +#: ../root/statistics/Index.js:896 ../root/statistics/stats.js:429 msgid "Events" msgstr "Sündmused" -#: ../root/statistics/Index.js:920 +#: ../root/statistics/Index.js:937 +msgid "Of releases" +msgstr "" + +#: ../root/statistics/Index.js:944 ../root/statistics/Index.js:977 +msgid "Generic" +msgstr "" + +#: ../root/statistics/Index.js:953 +msgid "Owned music" +msgstr "isiklik muusikakogu" + +#: ../root/statistics/Index.js:962 +msgid "Wishlist" +msgstr "sooviloend" + +#: ../root/statistics/Index.js:970 +msgid "Of events" +msgstr "" + +#: ../root/statistics/Index.js:986 +msgid "Of type Attending" +msgstr "" + +#: ../root/statistics/Index.js:995 +msgid "Of type Maybe attending" +msgstr "" + +#: ../root/statistics/Index.js:1006 +msgid "Of areas" +msgstr "" + +#: ../root/statistics/Index.js:1012 +msgid "Of artists" +msgstr "" + +#: ../root/statistics/Index.js:1018 +msgid "Of instruments" +msgstr "" + +#: ../root/statistics/Index.js:1024 +msgid "Of labels" +msgstr "" + +#: ../root/statistics/Index.js:1030 +msgid "Of places" +msgstr "" + +#: ../root/statistics/Index.js:1036 +msgid "Of recordings" +msgstr "" + +#: ../root/statistics/Index.js:1042 +msgid "Of release groups" +msgstr "" + +#: ../root/statistics/Index.js:1048 +msgid "Of series" +msgstr "" + +#: ../root/statistics/Index.js:1054 +msgid "Of works" +msgstr "" + +#: ../root/statistics/Index.js:1060 +msgid "Public" +msgstr "Avalik" + +#: ../root/statistics/Index.js:1066 +msgid "Private" +msgstr "Privaatne" + +#: ../root/statistics/Index.js:1072 +msgid "With collaborators" +msgstr "" + +#: ../root/statistics/Index.js:1079 msgid "Editors, Edits, and Votes" msgstr "Toimetajad, toimetamised ja hääled" -#: ../root/statistics/Index.js:927 +#: ../root/statistics/Index.js:1086 msgid "Editors (valid):" msgstr "Toimetajaid (kehtiva kontoga):" -#: ../root/statistics/Index.js:933 +#: ../root/statistics/Index.js:1092 msgid "active ever:" msgstr "Kordki aktiivseid:" -#: ../root/statistics/Index.js:941 +#: ../root/statistics/Index.js:1100 msgid "who edited and/or voted in the last 7 days:" msgstr "Toimetanud ja/või hääletanud viimase 7 päeva jooksul:" -#: ../root/statistics/Index.js:950 +#: ../root/statistics/Index.js:1109 msgid "who edited in the last 7 days:" msgstr "Toimetanud viimase 7 päeva jooksul:" -#: ../root/statistics/Index.js:958 +#: ../root/statistics/Index.js:1117 msgid "who voted in the last 7 days:" msgstr "Hääletanud viimase 7 päeva jooksul:" -#: ../root/statistics/Index.js:965 +#: ../root/statistics/Index.js:1124 msgid "who edit:" msgstr "Toimetanud:" -#: ../root/statistics/Index.js:972 +#: ../root/statistics/Index.js:1131 msgid "who vote:" msgstr "Hääletanud:" -#: ../root/statistics/Index.js:979 +#: ../root/statistics/Index.js:1138 msgid "who leave edit notes:" msgstr "Toimetusmärkmeid jätnud:" -#: ../root/statistics/Index.js:986 +#: ../root/statistics/Index.js:1145 msgid "who use tags:" msgstr "Silte kasutanud:" -#: ../root/statistics/Index.js:993 +#: ../root/statistics/Index.js:1152 msgid "who use ratings:" msgstr "Hindeid kasutanud:" -#: ../root/statistics/Index.js:1002 +#: ../root/statistics/Index.js:1161 msgid "who use subscriptions:" msgstr "Jälgimisfunktsioone kasutanud:" -#: ../root/statistics/Index.js:1011 +#: ../root/statistics/Index.js:1170 msgid "who use collections:" msgstr "Kogusid kasutanud:" -#: ../root/statistics/Index.js:1021 +#: ../root/statistics/Index.js:1180 msgid "who have registered applications:" msgstr "Rakendusi registreerinud:" -#: ../root/statistics/Index.js:1030 +#: ../root/statistics/Index.js:1189 msgid "validated email only:" msgstr "Üksnes kinnitatud e-postiga:" -#: ../root/statistics/Index.js:1036 +#: ../root/statistics/Index.js:1195 msgid "inactive:" msgstr "Passiivseid:" -#: ../root/statistics/Index.js:1041 +#: ../root/statistics/Index.js:1200 msgid "Editors (deleted):" msgstr "Toimetajad (kustutatud kontoga):" -#: ../root/statistics/Index.js:1051 ../root/statistics/Index.js:1098 +#: ../root/statistics/Index.js:1210 ../root/statistics/Index.js:1257 msgid "Edits:" msgstr "Toimetusi:" -#: ../root/statistics/Index.js:1057 +#: ../root/statistics/Index.js:1216 msgid "Open:" msgstr "Lahtisi:" -#: ../root/statistics/Index.js:1063 +#: ../root/statistics/Index.js:1222 msgid "Applied:" msgstr "Rakendatud:" -#: ../root/statistics/Index.js:1069 +#: ../root/statistics/Index.js:1228 msgid "Voted down:" msgstr "Mahahääletatud:" -#: ../root/statistics/Index.js:1075 +#: ../root/statistics/Index.js:1234 msgid "Failed (dependency):" msgstr "Nurjunud (sõltuvus):" -#: ../root/statistics/Index.js:1081 +#: ../root/statistics/Index.js:1240 msgid "Failed (prerequisite):" msgstr "Nurjunud (eeltingimus):" -#: ../root/statistics/Index.js:1087 +#: ../root/statistics/Index.js:1246 msgid "Failed (internal error):" msgstr "Nurjunud (sisemine viga):" -#: ../root/statistics/Index.js:1093 +#: ../root/statistics/Index.js:1252 msgid "Cancelled:" msgstr "Tühistatud:" -#: ../root/statistics/Index.js:1104 ../root/statistics/Index.js:1156 +#: ../root/statistics/Index.js:1263 ../root/statistics/Index.js:1315 msgid "Last 7 days:" msgstr "Viimase 7 päeva jooksul:" -#: ../root/statistics/Index.js:1111 ../root/statistics/Index.js:1163 +#: ../root/statistics/Index.js:1270 ../root/statistics/Index.js:1322 msgid "Yesterday:" msgstr "Eile:" -#: ../root/statistics/Index.js:1118 ../root/statistics/stats.js:706 +#: ../root/statistics/Index.js:1277 ../root/statistics/stats.js:832 msgid "Votes" msgstr "Hääled" -#: ../root/statistics/Index.js:1121 ../root/statistics/Index.js:1150 +#: ../root/statistics/Index.js:1280 ../root/statistics/Index.js:1309 msgid "Votes:" msgstr "Hääli:" -#: ../root/statistics/Index.js:1127 +#: ../root/statistics/Index.js:1286 msgctxt "vote" msgid "Approve" msgstr "Heakskiitev" -#: ../root/statistics/Index.js:1133 +#: ../root/statistics/Index.js:1292 msgctxt "vote" msgid "Yes" msgstr "Jah" -#: ../root/statistics/Index.js:1139 +#: ../root/statistics/Index.js:1298 msgctxt "vote" msgid "No" msgstr "Ei" -#: ../root/statistics/Index.js:1145 +#: ../root/statistics/Index.js:1304 msgctxt "vote" msgid "Abstain" msgstr "Erapooletu" @@ -2194,744 +2276,824 @@ msgstr "" msgid "CDStub tracks" msgstr "" -#: ../root/statistics/stats.js:170 ../root/statistics/stats.js:171 +#: ../root/statistics/stats.js:177 +msgid "Collections with collaborators" +msgstr "" + +#: ../root/statistics/stats.js:183 +msgid "Private collections" +msgstr "" + +#: ../root/statistics/stats.js:189 +msgid "Public collections" +msgstr "" + +#: ../root/statistics/stats.js:195 +msgid "Area collections" +msgstr "" + +#: ../root/statistics/stats.js:201 +msgid "Artist collections" +msgstr "" + +#: ../root/statistics/stats.js:207 +msgid "Collections of type Attending" +msgstr "" + +#: ../root/statistics/stats.js:213 +msgid "Collections of type Event" +msgstr "" + +#: ../root/statistics/stats.js:219 +msgid "Event collections (all types)" +msgstr "" + +#: ../root/statistics/stats.js:225 +msgid "Instrument collections" +msgstr "" + +#: ../root/statistics/stats.js:231 +msgid "Label collections" +msgstr "" + +#: ../root/statistics/stats.js:237 +msgid "Collections of type Maybe attending" +msgstr "" + +#: ../root/statistics/stats.js:243 +msgid "Collections of type Owned music" +msgstr "" + +#: ../root/statistics/stats.js:249 +msgid "Place collections" +msgstr "" + +#: ../root/statistics/stats.js:255 +msgid "Recording collections" +msgstr "" + +#: ../root/statistics/stats.js:261 +msgid "Collections of type Release" +msgstr "" + +#: ../root/statistics/stats.js:267 +msgid "Release collections (all types)" +msgstr "" + +#: ../root/statistics/stats.js:273 +msgid "Release group collections" +msgstr "" + +#: ../root/statistics/stats.js:279 +msgid "Series collections" +msgstr "" + +#: ../root/statistics/stats.js:285 +msgid "Collections of type Wishlist" +msgstr "" + +#: ../root/statistics/stats.js:291 +msgid "Work collections" +msgstr "" + +#: ../root/statistics/stats.js:296 ../root/statistics/stats.js:297 msgid "Pieces of Cover Art" msgstr "Kaane- jm pildid" -#: ../root/statistics/stats.js:176 +#: ../root/statistics/stats.js:302 msgid "Count of all Disc IDs" msgstr "" -#: ../root/statistics/stats.js:182 +#: ../root/statistics/stats.js:308 msgid "Count of all edits" msgstr "" -#: ../root/statistics/stats.js:189 +#: ../root/statistics/stats.js:315 msgid "All edits that have been applied" msgstr "Kõik rakendatud toimetused" -#: ../root/statistics/stats.js:190 +#: ../root/statistics/stats.js:316 msgid "Applied edits" msgstr "Rakendatud toimetused" -#: ../root/statistics/stats.js:195 ../root/statistics/stats.js:196 +#: ../root/statistics/stats.js:321 ../root/statistics/stats.js:322 msgid "Cancelled edits" msgstr "Tühistatud toimetused" -#: ../root/statistics/stats.js:201 +#: ../root/statistics/stats.js:327 msgid "All edits that have hit an error" msgstr "Kõik vea taha takerdunud toimetused" -#: ../root/statistics/stats.js:202 +#: ../root/statistics/stats.js:328 msgid "Error edits" msgstr "" -#: ../root/statistics/stats.js:207 +#: ../root/statistics/stats.js:333 msgid "Evalnochange edits" msgstr "" -#: ../root/statistics/stats.js:208 +#: ../root/statistics/stats.js:334 msgid "Evalnochange Edits" msgstr "" -#: ../root/statistics/stats.js:213 +#: ../root/statistics/stats.js:339 msgid "All edits that have failed dependency checks" msgstr "Kõik sõltuvust mitterahuldanud toimetused" -#: ../root/statistics/stats.js:214 +#: ../root/statistics/stats.js:340 msgid "Failed edits (dependency)" msgstr "" -#: ../root/statistics/stats.js:219 +#: ../root/statistics/stats.js:345 msgid "All edits that have failed prerequisite checks" msgstr "Kõik eeldust mittetäitnud toimetused" -#: ../root/statistics/stats.js:220 +#: ../root/statistics/stats.js:346 msgid "Failed edits (prerequisite)" msgstr "" -#: ../root/statistics/stats.js:225 +#: ../root/statistics/stats.js:351 msgid "All edits that have failed by being voted down" msgstr "Kõik mahahääletatud toimetused" -#: ../root/statistics/stats.js:226 +#: ../root/statistics/stats.js:352 msgid "Failed edits (voted down)" msgstr "" -#: ../root/statistics/stats.js:231 +#: ../root/statistics/stats.js:357 msgid "Count of open edits" msgstr "" -#: ../root/statistics/stats.js:232 +#: ../root/statistics/stats.js:358 msgid "Open Edits" msgstr "Lahtised toimetused" -#: ../root/statistics/stats.js:237 +#: ../root/statistics/stats.js:363 msgid "Count of edits per day" msgstr "" -#: ../root/statistics/stats.js:239 +#: ../root/statistics/stats.js:365 msgid "Edits per day" msgstr "Toimetusi päevas" -#: ../root/statistics/stats.js:244 +#: ../root/statistics/stats.js:370 msgid "Count of edits per week" msgstr "" -#: ../root/statistics/stats.js:245 +#: ../root/statistics/stats.js:371 msgid "Edits per week" msgstr "Toimetusi nädalas" -#: ../root/statistics/stats.js:250 +#: ../root/statistics/stats.js:376 msgid "Count of all editors" msgstr "" -#: ../root/statistics/stats.js:252 +#: ../root/statistics/stats.js:378 msgid "Editors (all)" msgstr "Toimetajad (kõik)" -#: ../root/statistics/stats.js:258 +#: ../root/statistics/stats.js:384 msgid "Count of active editors (editing or voting) during the last week" msgstr "" -#: ../root/statistics/stats.js:260 +#: ../root/statistics/stats.js:386 msgid "Active Users" msgstr "Aktiivsed kasutajad" -#: ../root/statistics/stats.js:265 +#: ../root/statistics/stats.js:391 msgid "Count of deleted editors" msgstr "Kustutatud kontoga toimetajate arv" -#: ../root/statistics/stats.js:267 +#: ../root/statistics/stats.js:393 msgid "Editors (deleted)" msgstr "Toimetajad (kustutatud kontoga)" -#: ../root/statistics/stats.js:273 +#: ../root/statistics/stats.js:399 msgid "Count of editors who have submitted edits during the last 7 days" msgstr "" -#: ../root/statistics/stats.js:275 +#: ../root/statistics/stats.js:401 msgid "Active Editors" msgstr "Aktiivsed toimetajad" -#: ../root/statistics/stats.js:280 +#: ../root/statistics/stats.js:406 msgid "Count of non-deleted editors" msgstr "" -#: ../root/statistics/stats.js:282 +#: ../root/statistics/stats.js:408 msgid "Editors (valid)" msgstr "Toimetajad (kehtiva kontoga)" -#: ../root/statistics/stats.js:287 +#: ../root/statistics/stats.js:413 msgid "Count of active editors" msgstr "Aktiivsete toimetajate arv" -#: ../root/statistics/stats.js:289 +#: ../root/statistics/stats.js:415 msgid "Editors (valid & active ever)" msgstr "Toimetajad (kehtiva kontoga ja aktiivsed)" -#: ../root/statistics/stats.js:295 +#: ../root/statistics/stats.js:421 msgid "Count of editors who have voted on during the last 7 days" msgstr "" -#: ../root/statistics/stats.js:297 +#: ../root/statistics/stats.js:423 msgid "Active Voters" msgstr "Aktiivsed hääletajad" -#: ../root/statistics/stats.js:302 +#: ../root/statistics/stats.js:428 msgid "Count of all events" msgstr "Sündmuste arv" -#: ../root/statistics/stats.js:308 +#: ../root/statistics/stats.js:434 msgid "Count of all instruments" msgstr "" -#: ../root/statistics/stats.js:314 +#: ../root/statistics/stats.js:440 msgid "Count of all IPIs" msgstr "" -#: ../root/statistics/stats.js:315 +#: ../root/statistics/stats.js:441 msgid "IPIs" msgstr "IPI-d" -#: ../root/statistics/stats.js:320 +#: ../root/statistics/stats.js:446 msgid "Count of all IPIs for Artists" msgstr "" -#: ../root/statistics/stats.js:321 +#: ../root/statistics/stats.js:447 msgid "Artist IPIs" msgstr "Artistide IPI-d" -#: ../root/statistics/stats.js:326 +#: ../root/statistics/stats.js:452 msgid "Count of all IPIs for Labels" msgstr "" -#: ../root/statistics/stats.js:327 +#: ../root/statistics/stats.js:453 msgid "Label IPIs" msgstr "Plaadifirmade IPI-d" -#: ../root/statistics/stats.js:332 +#: ../root/statistics/stats.js:458 msgid "Count of all ISNIs" msgstr "" -#: ../root/statistics/stats.js:333 +#: ../root/statistics/stats.js:459 msgid "ISNIs" msgstr "ISNI-d" -#: ../root/statistics/stats.js:338 +#: ../root/statistics/stats.js:464 msgid "Count of all ISNIs for Artists" msgstr "" -#: ../root/statistics/stats.js:339 +#: ../root/statistics/stats.js:465 msgid "Artist ISNIs" msgstr "Artistide ISNI-d" -#: ../root/statistics/stats.js:344 +#: ../root/statistics/stats.js:470 msgid "Count of all ISNIs for Labels" msgstr "" -#: ../root/statistics/stats.js:345 +#: ../root/statistics/stats.js:471 msgid "Label ISNIs" msgstr "Plaadifirmade ISNI-d" -#: ../root/statistics/stats.js:350 ../root/statistics/stats.js:356 +#: ../root/statistics/stats.js:476 ../root/statistics/stats.js:482 msgid "Count of all ISRCs" msgstr "" -#: ../root/statistics/stats.js:351 +#: ../root/statistics/stats.js:477 msgid "ISRCs" msgstr "ISRC-d" -#: ../root/statistics/stats.js:357 +#: ../root/statistics/stats.js:483 msgid "ISRCs (all)" msgstr "ISRC-d (kõik)" -#: ../root/statistics/stats.js:362 ../root/statistics/stats.js:368 +#: ../root/statistics/stats.js:488 ../root/statistics/stats.js:494 msgid "Count of all ISWCs" msgstr "" -#: ../root/statistics/stats.js:363 +#: ../root/statistics/stats.js:489 msgid "ISWCs" msgstr "ISWC-d" -#: ../root/statistics/stats.js:369 +#: ../root/statistics/stats.js:495 msgid "ISWCs (all)" msgstr "ISWC-d (kõik)" -#: ../root/statistics/stats.js:374 +#: ../root/statistics/stats.js:500 msgid "Count of all labels" msgstr "" -#: ../root/statistics/stats.js:380 +#: ../root/statistics/stats.js:506 msgid "Labels with no country set" msgstr "" -#: ../root/statistics/stats.js:386 +#: ../root/statistics/stats.js:512 msgid "Count of all mediums" msgstr "" -#: ../root/statistics/stats.js:392 +#: ../root/statistics/stats.js:518 msgid "Mediums with no format set" msgstr "" -#: ../root/statistics/stats.js:393 +#: ../root/statistics/stats.js:519 msgid "Unknown Format (medium)" msgstr "" -#: ../root/statistics/stats.js:398 +#: ../root/statistics/stats.js:524 msgid "Count of all Mediums with Disc IDs" msgstr "" -#: ../root/statistics/stats.js:399 +#: ../root/statistics/stats.js:525 msgid "Mediums with Disc IDs" msgstr "Plaadi-ID-dega helikandjad" -#: ../root/statistics/stats.js:404 +#: ../root/statistics/stats.js:530 msgid "Count of all places" msgstr "Kohtade arv" -#: ../root/statistics/stats.js:410 +#: ../root/statistics/stats.js:536 msgid "Count of all Releases at Default Data Quality" msgstr "" -#: ../root/statistics/stats.js:411 +#: ../root/statistics/stats.js:537 msgid "Default Data Quality" msgstr "Vaikimisi andmekvaliteet" -#: ../root/statistics/stats.js:416 +#: ../root/statistics/stats.js:542 msgid "Count of all Releases at High Data Quality" msgstr "" -#: ../root/statistics/stats.js:417 +#: ../root/statistics/stats.js:543 msgid "High Data Quality" msgstr "Kõrge andmekvaliteet" -#: ../root/statistics/stats.js:422 +#: ../root/statistics/stats.js:548 msgid "Count of all Releases at Low Data Quality" msgstr "" -#: ../root/statistics/stats.js:423 +#: ../root/statistics/stats.js:549 msgid "Low Data Quality" msgstr "" -#: ../root/statistics/stats.js:428 +#: ../root/statistics/stats.js:554 msgid "Count of all Releases at Normal Data Quality" msgstr "" -#: ../root/statistics/stats.js:429 +#: ../root/statistics/stats.js:555 msgid "Normal Data Quality" msgstr "Tavaline andmekvaliteet" -#: ../root/statistics/stats.js:434 +#: ../root/statistics/stats.js:560 msgid "Count of all Releases at Unknown Data Quality" msgstr "" -#: ../root/statistics/stats.js:435 +#: ../root/statistics/stats.js:561 msgid "Unknown Data Quality" msgstr "Teadmata andmekvaliteet" -#: ../root/statistics/stats.js:440 +#: ../root/statistics/stats.js:566 msgid "Count of all Ratings" msgstr "" -#: ../root/statistics/stats.js:441 +#: ../root/statistics/stats.js:567 msgid "Ratings" msgstr "Hinnangud" -#: ../root/statistics/stats.js:446 +#: ../root/statistics/stats.js:572 msgid "Count of all Artist Ratings" msgstr "" -#: ../root/statistics/stats.js:447 +#: ../root/statistics/stats.js:573 msgid "Artist Ratings" msgstr "Artistide hinnangud" -#: ../root/statistics/stats.js:452 +#: ../root/statistics/stats.js:578 msgid "Count of all Label Ratings" msgstr "" -#: ../root/statistics/stats.js:453 +#: ../root/statistics/stats.js:579 msgid "Label Ratings" msgstr "Plaadifirmade hinnangud" -#: ../root/statistics/stats.js:458 +#: ../root/statistics/stats.js:584 msgid "Count of all Place Ratings" msgstr "" -#: ../root/statistics/stats.js:459 +#: ../root/statistics/stats.js:585 msgid "Place Ratings" msgstr "" -#: ../root/statistics/stats.js:464 +#: ../root/statistics/stats.js:590 msgid "Count of all Ratings (raw)" msgstr "" -#: ../root/statistics/stats.js:465 +#: ../root/statistics/stats.js:591 msgid "Ratings (raw)" msgstr "" -#: ../root/statistics/stats.js:470 +#: ../root/statistics/stats.js:596 msgid "Count of all Artist Ratings (raw)" msgstr "" -#: ../root/statistics/stats.js:471 +#: ../root/statistics/stats.js:597 msgid "Artist Ratings (raw)" msgstr "" -#: ../root/statistics/stats.js:476 +#: ../root/statistics/stats.js:602 msgid "Count of all Label Ratings (raw)" msgstr "" -#: ../root/statistics/stats.js:477 +#: ../root/statistics/stats.js:603 msgid "Label Ratings (raw)" msgstr "" -#: ../root/statistics/stats.js:482 +#: ../root/statistics/stats.js:608 msgid "Count of all Place Ratings (raw)" msgstr "" -#: ../root/statistics/stats.js:483 +#: ../root/statistics/stats.js:609 msgid "Place Ratings (raw)" msgstr "" -#: ../root/statistics/stats.js:488 +#: ../root/statistics/stats.js:614 msgid "Count of all Recording Ratings (raw)" msgstr "" -#: ../root/statistics/stats.js:489 +#: ../root/statistics/stats.js:615 msgid "Recording Ratings (raw)" msgstr "" -#: ../root/statistics/stats.js:494 +#: ../root/statistics/stats.js:620 msgid "Count of all Release Group Ratings (raw)" msgstr "" -#: ../root/statistics/stats.js:495 +#: ../root/statistics/stats.js:621 msgid "Release Group Ratings (raw)" msgstr "" -#: ../root/statistics/stats.js:500 +#: ../root/statistics/stats.js:626 msgid "Count of all Work Ratings (raw)" msgstr "" -#: ../root/statistics/stats.js:501 +#: ../root/statistics/stats.js:627 msgid "Work Ratings (raw)" msgstr "" -#: ../root/statistics/stats.js:506 +#: ../root/statistics/stats.js:632 msgid "Count of all Recording Ratings" msgstr "" -#: ../root/statistics/stats.js:507 +#: ../root/statistics/stats.js:633 msgid "Recording Ratings" msgstr "" -#: ../root/statistics/stats.js:512 +#: ../root/statistics/stats.js:638 msgid "Count of all Release Group Ratings" msgstr "" -#: ../root/statistics/stats.js:513 +#: ../root/statistics/stats.js:639 msgid "Release Group Ratings" msgstr "" -#: ../root/statistics/stats.js:518 +#: ../root/statistics/stats.js:644 msgid "Count of all Work Ratings" msgstr "" -#: ../root/statistics/stats.js:519 +#: ../root/statistics/stats.js:645 msgid "Work Ratings" msgstr "" -#: ../root/statistics/stats.js:524 +#: ../root/statistics/stats.js:650 msgid "Count of all recordings" msgstr "" -#: ../root/statistics/stats.js:530 +#: ../root/statistics/stats.js:656 msgid "Count of all Recordings with ISRCs" msgstr "" -#: ../root/statistics/stats.js:531 +#: ../root/statistics/stats.js:657 msgid "Recordings with ISRCs" msgstr "ISRC-dega salvestised" -#: ../root/statistics/stats.js:536 +#: ../root/statistics/stats.js:662 msgid "Count of all standalone recordings" msgstr "" -#: ../root/statistics/stats.js:537 +#: ../root/statistics/stats.js:663 msgid "Standalone recordings" msgstr "" -#: ../root/statistics/stats.js:542 +#: ../root/statistics/stats.js:668 msgid "Count of all releases" msgstr "" -#: ../root/statistics/stats.js:548 +#: ../root/statistics/stats.js:674 msgid "Releases with no country set" msgstr "" -#: ../root/statistics/stats.js:554 ../root/statistics/stats.js:555 -#: ../root/statistics/stats.js:572 +#: ../root/statistics/stats.js:680 ../root/statistics/stats.js:681 +#: ../root/statistics/stats.js:698 msgid "Releases with Amazon Cover Art" msgstr "Amazoni kaanepiltidega väljalasked" -#: ../root/statistics/stats.js:560 ../root/statistics/stats.js:561 +#: ../root/statistics/stats.js:686 ../root/statistics/stats.js:687 msgid "Releases with CAA Cover Art" msgstr "CAA aaanepiltidega väljalasked" -#: ../root/statistics/stats.js:566 ../root/statistics/stats.js:567 +#: ../root/statistics/stats.js:692 ../root/statistics/stats.js:693 msgid "Releases with No Cover Art" msgstr "Ilma kaanepildita väljalasked" -#: ../root/statistics/stats.js:573 +#: ../root/statistics/stats.js:699 msgid "Releases with Cover Art from Relationships" msgstr "Seostest pärit kaanepiltidega väljalasked" -#: ../root/statistics/stats.js:578 +#: ../root/statistics/stats.js:704 msgid "Releases with a no-format medium" msgstr "" -#: ../root/statistics/stats.js:579 +#: ../root/statistics/stats.js:705 msgid "Unknown Format (release)" msgstr "" -#: ../root/statistics/stats.js:584 ../root/statistics/stats.js:585 +#: ../root/statistics/stats.js:710 ../root/statistics/stats.js:711 msgid "Releases with Cover Art" msgstr "Kaanepildiga väljalasked" -#: ../root/statistics/stats.js:590 +#: ../root/statistics/stats.js:716 msgid "Count of all Releases with Disc IDs" msgstr "" -#: ../root/statistics/stats.js:591 +#: ../root/statistics/stats.js:717 msgid "Releases with Disc IDs" msgstr "" -#: ../root/statistics/stats.js:596 +#: ../root/statistics/stats.js:722 msgid "Releases with no language set" msgstr "" -#: ../root/statistics/stats.js:597 +#: ../root/statistics/stats.js:723 msgid "Unknown Language" msgstr "" -#: ../root/statistics/stats.js:602 +#: ../root/statistics/stats.js:728 msgid "Count of all Releases not V.A." msgstr "" -#: ../root/statistics/stats.js:603 +#: ../root/statistics/stats.js:729 msgid "Releases not VA" msgstr "" -#: ../root/statistics/stats.js:608 +#: ../root/statistics/stats.js:734 msgid "Releases with no script set" msgstr "" -#: ../root/statistics/stats.js:609 +#: ../root/statistics/stats.js:735 msgid "Unknown Script" msgstr "" -#: ../root/statistics/stats.js:614 +#: ../root/statistics/stats.js:740 msgid "Count of all Releases by Various Artists" msgstr "" -#: ../root/statistics/stats.js:615 +#: ../root/statistics/stats.js:741 msgid "Releases (VA)" msgstr "" -#: ../root/statistics/stats.js:620 +#: ../root/statistics/stats.js:746 msgid "Count of all release groups" msgstr "" -#: ../root/statistics/stats.js:626 +#: ../root/statistics/stats.js:752 msgid "Count of all series" msgstr "" -#: ../root/statistics/stats.js:632 +#: ../root/statistics/stats.js:758 msgid "Count of all Tags" msgstr "" -#: ../root/statistics/stats.js:633 +#: ../root/statistics/stats.js:759 msgid "Tags" msgstr "Sildid" -#: ../root/statistics/stats.js:638 +#: ../root/statistics/stats.js:764 msgid "Count of all Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:639 +#: ../root/statistics/stats.js:765 msgid "Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:644 +#: ../root/statistics/stats.js:770 msgid "Count of all Area Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:645 +#: ../root/statistics/stats.js:771 msgid "Area Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:650 +#: ../root/statistics/stats.js:776 msgid "Count of all Artist Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:651 +#: ../root/statistics/stats.js:777 msgid "Artist Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:656 +#: ../root/statistics/stats.js:782 msgid "Count of all Instrument Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:657 +#: ../root/statistics/stats.js:783 msgid "Instrument Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:662 +#: ../root/statistics/stats.js:788 msgid "Count of all Label Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:663 +#: ../root/statistics/stats.js:789 msgid "Label Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:668 +#: ../root/statistics/stats.js:794 msgid "Count of all Recording Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:669 +#: ../root/statistics/stats.js:795 msgid "Recording Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:674 +#: ../root/statistics/stats.js:800 msgid "Count of all Release Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:675 +#: ../root/statistics/stats.js:801 msgid "Release Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:680 +#: ../root/statistics/stats.js:806 msgid "Count of all Release Group Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:681 +#: ../root/statistics/stats.js:807 msgid "Release Group Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:686 +#: ../root/statistics/stats.js:812 msgid "Count of all Series Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:687 +#: ../root/statistics/stats.js:813 msgid "Series Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:692 +#: ../root/statistics/stats.js:818 msgid "Count of all Work Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:693 +#: ../root/statistics/stats.js:819 msgid "Work Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:698 +#: ../root/statistics/stats.js:824 msgid "Count of all Tracks" msgstr "" -#: ../root/statistics/stats.js:699 +#: ../root/statistics/stats.js:825 msgid "Tracks" msgstr "Rajad" -#: ../root/statistics/stats.js:704 +#: ../root/statistics/stats.js:830 msgid "Count of all votes" msgstr "" -#: ../root/statistics/stats.js:711 +#: ../root/statistics/stats.js:837 msgid "Count of all Abstain votes" msgstr "" -#: ../root/statistics/stats.js:712 +#: ../root/statistics/stats.js:838 msgid "Abstentions" msgstr "Erapooletuksjäämised" -#: ../root/statistics/stats.js:717 +#: ../root/statistics/stats.js:843 msgid "Count of all No votes" msgstr "" -#: ../root/statistics/stats.js:718 +#: ../root/statistics/stats.js:844 msgid "No Votes" msgstr "" -#: ../root/statistics/stats.js:723 +#: ../root/statistics/stats.js:849 msgid "Count of votes per day" msgstr "" -#: ../root/statistics/stats.js:725 +#: ../root/statistics/stats.js:851 msgid "Votes per day" msgstr "Hääli päevas" -#: ../root/statistics/stats.js:730 +#: ../root/statistics/stats.js:856 msgid "Count of votes per week" msgstr "" -#: ../root/statistics/stats.js:731 +#: ../root/statistics/stats.js:857 msgid "Votes per week" msgstr "Hääli nädalas" -#: ../root/statistics/stats.js:736 +#: ../root/statistics/stats.js:862 msgid "Count of all Yes votes" msgstr "" -#: ../root/statistics/stats.js:737 +#: ../root/statistics/stats.js:863 msgid "Yes Votes" msgstr "" -#: ../root/statistics/stats.js:742 +#: ../root/statistics/stats.js:868 msgid "Count of all works" msgstr "" -#: ../root/statistics/stats.js:748 +#: ../root/statistics/stats.js:874 msgid "Count of all Works with ISWCs" msgstr "" -#: ../root/statistics/stats.js:749 +#: ../root/statistics/stats.js:875 msgid "Works with ISWCs" msgstr "" -#: ../root/statistics/stats.js:751 +#: ../root/statistics/stats.js:877 msgid "/day" msgstr "/päev" -#: ../root/statistics/stats.js:760 +#: ../root/statistics/stats.js:886 msgid "Count of all Releases with {n} Disc IDs" msgstr "" -#: ../root/statistics/stats.js:762 +#: ../root/statistics/stats.js:888 msgid "Releases with 1 Disc ID" msgid_plural "Releases with {n} Disc IDs" msgstr[0] "" msgstr[1] "" -#: ../root/statistics/stats.js:772 +#: ../root/statistics/stats.js:898 msgid "Count of all Mediums with {n} Disc IDs" msgstr "" -#: ../root/statistics/stats.js:774 +#: ../root/statistics/stats.js:900 msgid "Mediums with 1 Disc ID" msgid_plural "Mediums with {n} Disc IDs" msgstr[0] "1 plaadi-ID-ga helikandjad" msgstr[1] "{n} plaadi-ID-ga helikandjad" -#: ../root/statistics/stats.js:784 +#: ../root/statistics/stats.js:910 msgid "Count of all Recordings with {n} Releases" msgstr "" -#: ../root/statistics/stats.js:786 +#: ../root/statistics/stats.js:912 msgid "Recordings with 1 Release" msgid_plural "Recordings with {n} Releases" msgstr[0] "Salvestised 1 väljalaskel" msgstr[1] "Salvestised {n} väljalaskel" -#: ../root/statistics/stats.js:796 +#: ../root/statistics/stats.js:922 msgid "Count of all Release Groups with {n} Releases" msgstr "" -#: ../root/statistics/stats.js:798 +#: ../root/statistics/stats.js:924 msgid "Release Groups with 1 Release" msgid_plural "Release Groups with {n} Releases" msgstr[0] "1 väljalaskega väljalaskerühmad" msgstr[1] "{n} väljalaskega väljalaskerühmad" -#: ../root/statistics/stats.js:840 +#: ../root/statistics/stats.js:966 msgid "{country} artists" msgstr "{country}: artistid" -#: ../root/statistics/stats.js:847 +#: ../root/statistics/stats.js:973 msgid "{country} labels" msgstr "{country}: plaadifirmad" -#: ../root/statistics/stats.js:854 +#: ../root/statistics/stats.js:980 msgid "{country} releases" msgstr "{country}: väljalasked" -#: ../root/statistics/stats.js:866 +#: ../root/statistics/stats.js:992 msgid "{name} releases" msgstr "" -#: ../root/statistics/stats.js:873 +#: ../root/statistics/stats.js:999 msgid "{name} mediums" msgstr "" -#: ../root/statistics/stats.js:885 +#: ../root/statistics/stats.js:1011 msgid "{language} releases" msgstr "{language} keeles väljalasked" -#: ../root/statistics/stats.js:892 +#: ../root/statistics/stats.js:1018 msgid "l_{first}_{second} Relationships" msgstr "" -#: ../root/statistics/stats.js:913 +#: ../root/statistics/stats.js:1039 msgid "{script} releases" msgstr "{script} kirjas väljalasked" diff --git a/po/statistics.fi.po b/po/statistics.fi.po index 3756e99f2c8..0960fc7f21b 100644 --- a/po/statistics.fi.po +++ b/po/statistics.fi.po @@ -13,8 +13,8 @@ msgid "" msgstr "" "Project-Id-Version: MusicBrainz\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2021-07-19 17:36+0000\n" -"Last-Translator: Nicolás Tamargo <email address hidden>\n" +"PO-Revision-Date: 2021-09-28 18:40+0000\n" +"Last-Translator: yvanz\n" "Language-Team: Finnish (http://www.transifex.com/musicbrainz/musicbrainz/language/fi/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -1138,15 +1138,15 @@ msgid "Draw a rectangle on either graph" msgstr "" #: ../root/statistics/layout.tt:4 ../root/statistics/Editors.js:98 -#: ../root/statistics/Editors.js:109 ../root/statistics/Index.js:924 +#: ../root/statistics/Editors.js:109 ../root/statistics/Index.js:1083 #: ../root/statistics/StatisticsLayout.js:82 msgid "Editors" msgstr "Käyttäjät" #: ../root/statistics/layout.tt:4 ../root/statistics/Edits.js:37 #: ../root/statistics/Edits.js:41 ../root/statistics/Edits.js:50 -#: ../root/statistics/Index.js:1048 ../root/statistics/StatisticsLayout.js:72 -#: ../root/statistics/stats.js:184 +#: ../root/statistics/Index.js:1207 ../root/statistics/StatisticsLayout.js:72 +#: ../root/statistics/stats.js:310 msgid "Edits" msgstr "Muokkaukset" @@ -1233,20 +1233,20 @@ msgstr "Sijoitus" msgid "Country" msgstr "Maa" -#: ../root/statistics/Countries.js:53 ../root/statistics/Index.js:227 -#: ../root/statistics/Index.js:231 ../root/statistics/stats.js:45 +#: ../root/statistics/Countries.js:53 ../root/statistics/Index.js:231 +#: ../root/statistics/Index.js:235 ../root/statistics/stats.js:45 msgid "Artists" msgstr "Artistit" #: ../root/statistics/Countries.js:57 ../root/statistics/CoverArt.js:105 -#: ../root/statistics/Formats.js:56 ../root/statistics/Index.js:359 +#: ../root/statistics/Formats.js:56 ../root/statistics/Index.js:363 #: ../root/statistics/LanguagesScripts.js:71 -#: ../root/statistics/LanguagesScripts.js:152 ../root/statistics/stats.js:543 +#: ../root/statistics/LanguagesScripts.js:152 ../root/statistics/stats.js:669 msgid "Releases" msgstr "Julkaisut" -#: ../root/statistics/Countries.js:61 ../root/statistics/Index.js:694 -#: ../root/statistics/Index.js:701 ../root/statistics/stats.js:375 +#: ../root/statistics/Countries.js:61 ../root/statistics/Index.js:698 +#: ../root/statistics/Index.js:705 ../root/statistics/stats.js:501 msgid "Labels" msgstr "Levymerkit" @@ -1256,7 +1256,7 @@ msgid "Total" msgstr "Yhteensä" #: ../root/statistics/Countries.js:87 ../root/statistics/stats.js:57 -#: ../root/statistics/stats.js:381 ../root/statistics/stats.js:549 +#: ../root/statistics/stats.js:507 ../root/statistics/stats.js:675 msgid "Unknown Country" msgstr "Tuntematon maa" @@ -1411,7 +1411,7 @@ msgstr "Tallenteen muoto" msgid "% of total releases" msgstr "% kaikista julkaisuista" -#: ../root/statistics/Formats.js:58 ../root/statistics/stats.js:387 +#: ../root/statistics/Formats.js:58 ../root/statistics/stats.js:513 msgid "Mediums" msgstr "Tallenteet" @@ -1431,27 +1431,27 @@ msgstr "Perustiedot" msgid "Core Entities" msgstr "Keskeisimmät entiteetit" -#: ../root/statistics/Index.js:92 ../root/statistics/Index.js:234 +#: ../root/statistics/Index.js:92 ../root/statistics/Index.js:238 msgid "Artists:" msgstr "Artistit:" -#: ../root/statistics/Index.js:96 ../root/statistics/Index.js:614 -#: ../root/statistics/Index.js:640 +#: ../root/statistics/Index.js:96 ../root/statistics/Index.js:618 +#: ../root/statistics/Index.js:644 msgid "Release Groups:" msgstr "Julkaisuryhmät:" -#: ../root/statistics/Index.js:100 ../root/statistics/Index.js:362 -#: ../root/statistics/Index.js:384 ../root/statistics/Index.js:410 -#: ../root/statistics/Index.js:436 ../root/statistics/Index.js:470 -#: ../root/statistics/Index.js:519 +#: ../root/statistics/Index.js:100 ../root/statistics/Index.js:366 +#: ../root/statistics/Index.js:388 ../root/statistics/Index.js:414 +#: ../root/statistics/Index.js:440 ../root/statistics/Index.js:474 +#: ../root/statistics/Index.js:523 msgid "Releases:" msgstr "Julkaisut:" -#: ../root/statistics/Index.js:104 ../root/statistics/Index.js:563 +#: ../root/statistics/Index.js:104 ../root/statistics/Index.js:567 msgid "Mediums:" msgstr "Tallenteet:" -#: ../root/statistics/Index.js:108 ../root/statistics/Index.js:672 +#: ../root/statistics/Index.js:108 ../root/statistics/Index.js:676 msgid "Recordings:" msgstr "Äänitteet" @@ -1463,8 +1463,8 @@ msgstr "Kappaleet:" msgid "Labels:" msgstr "Levymerkit:" -#: ../root/statistics/Index.js:120 ../root/statistics/Index.js:729 -#: ../root/statistics/Index.js:761 +#: ../root/statistics/Index.js:120 ../root/statistics/Index.js:733 +#: ../root/statistics/Index.js:765 msgid "Works:" msgstr "Teokset:" @@ -1472,24 +1472,24 @@ msgstr "Teokset:" msgid "URLs:" msgstr "URL-osoitteet:" -#: ../root/statistics/Index.js:128 ../root/statistics/Index.js:791 +#: ../root/statistics/Index.js:128 ../root/statistics/Index.js:795 msgid "Areas:" msgstr "Alueet:" -#: ../root/statistics/Index.js:132 ../root/statistics/Index.js:819 +#: ../root/statistics/Index.js:132 ../root/statistics/Index.js:823 msgid "Places:" msgstr "Paikat:" -#: ../root/statistics/Index.js:136 ../root/statistics/Index.js:847 +#: ../root/statistics/Index.js:136 ../root/statistics/Index.js:851 msgctxt "plural" msgid "Series:" msgstr "Sarjat:" -#: ../root/statistics/Index.js:140 ../root/statistics/Index.js:869 +#: ../root/statistics/Index.js:140 ../root/statistics/Index.js:873 msgid "Instruments:" msgstr "Soittimet:" -#: ../root/statistics/Index.js:144 ../root/statistics/Index.js:899 +#: ../root/statistics/Index.js:144 ../root/statistics/Index.js:903 msgid "Events:" msgstr "" @@ -1509,422 +1509,504 @@ msgstr "Käyttäjät (voimassa olevat / poistetut):" msgid "Relationships:" msgstr "Yhteydet:" -#: ../root/statistics/Index.js:167 +#: ../root/statistics/Index.js:167 ../root/statistics/Index.js:924 +#: ../root/statistics/Index.js:928 ../root/statistics/Index.js:931 +#: ../root/statistics/stats.js:171 +msgid "Collections" +msgstr "Kokoelmat" + +#: ../root/statistics/Index.js:171 msgid "CD Stubs (all time / current):" msgstr "CD-tyngät (kaikki / nykyiset):" -#: ../root/statistics/Index.js:176 +#: ../root/statistics/Index.js:180 msgid "Tags (raw / aggregated):" msgstr "Luokitukset (käsittelemättömät / koostetut):" -#: ../root/statistics/Index.js:182 +#: ../root/statistics/Index.js:186 msgid "Ratings (raw / aggregated):" msgstr "Arvostelut (käsittelemättömät / koostetut):" -#: ../root/statistics/Index.js:190 +#: ../root/statistics/Index.js:194 msgid "Identifiers" msgstr "Tunnisteet" -#: ../root/statistics/Index.js:193 +#: ../root/statistics/Index.js:197 msgid "MBIDs:" msgstr "" -#: ../root/statistics/Index.js:197 +#: ../root/statistics/Index.js:201 msgid "ISRCs (all / unique):" msgstr "ISRC-koodia (kaikki / uniikit)" -#: ../root/statistics/Index.js:203 +#: ../root/statistics/Index.js:207 msgid "ISWCs (all / unique):" msgstr "ISWC-koodit (kaikki / uniikit):" -#: ../root/statistics/Index.js:209 ../root/statistics/Index.js:514 +#: ../root/statistics/Index.js:213 ../root/statistics/Index.js:518 msgid "Disc IDs:" msgstr "Levyn tunnisteet:" -#: ../root/statistics/Index.js:213 +#: ../root/statistics/Index.js:217 msgid "Barcodes:" msgstr "Viivakoodit:" -#: ../root/statistics/Index.js:217 +#: ../root/statistics/Index.js:221 msgid "IPIs:" msgstr "IPI-koodit:" -#: ../root/statistics/Index.js:221 +#: ../root/statistics/Index.js:225 msgid "ISNIs:" msgstr "ISNI-koodit:" -#: ../root/statistics/Index.js:240 +#: ../root/statistics/Index.js:244 msgid "of type Person:" msgstr "jotka henkilöitä:" -#: ../root/statistics/Index.js:246 +#: ../root/statistics/Index.js:250 msgid "of type Group:" msgstr "jotka ryhmiä:" -#: ../root/statistics/Index.js:252 +#: ../root/statistics/Index.js:256 msgid "of type Orchestra:" msgstr "tyyppiä orkesteri:" -#: ../root/statistics/Index.js:258 +#: ../root/statistics/Index.js:262 msgid "of type Choir:" msgstr "tyyppiä kuoro: " -#: ../root/statistics/Index.js:264 +#: ../root/statistics/Index.js:268 msgid "of type Character:" msgstr "jotka kuvitteellisia hahmoja:" -#: ../root/statistics/Index.js:270 +#: ../root/statistics/Index.js:274 msgid "of type Other:" msgstr "jotka muita:" -#: ../root/statistics/Index.js:276 +#: ../root/statistics/Index.js:280 msgid "with no type set:" msgstr "ei tyyppiä asetettu:" -#: ../root/statistics/Index.js:282 +#: ../root/statistics/Index.js:286 msgid "with appearances in artist credits:" msgstr "" -#: ../root/statistics/Index.js:288 +#: ../root/statistics/Index.js:292 msgid "with no appearances in artist credits:" msgstr "" -#: ../root/statistics/Index.js:293 +#: ../root/statistics/Index.js:297 msgid "Non-group artists:" msgstr "Artistit, jotka eivät ole ryhmiä:" -#: ../root/statistics/Index.js:299 +#: ../root/statistics/Index.js:303 msgid "Male:" msgstr "Mies:" -#: ../root/statistics/Index.js:310 +#: ../root/statistics/Index.js:314 msgid "Female:" msgstr "Nainen:" -#: ../root/statistics/Index.js:321 +#: ../root/statistics/Index.js:325 msgid "Other gender:" msgstr "Muu sukupuoli:" -#: ../root/statistics/Index.js:332 +#: ../root/statistics/Index.js:336 msgid "Gender not applicable:" msgstr "" -#: ../root/statistics/Index.js:343 +#: ../root/statistics/Index.js:347 msgid "with no gender set:" msgstr "ei sukupuolta asetettu:" -#: ../root/statistics/Index.js:355 +#: ../root/statistics/Index.js:359 msgid "Releases, Data Quality, and Disc IDs" msgstr "Julkaisut, tiedon laatu ja levyjen tunnisteet" -#: ../root/statistics/Index.js:368 +#: ../root/statistics/Index.js:372 msgid "by various artists:" msgstr "eri artisteilta:" -#: ../root/statistics/Index.js:374 +#: ../root/statistics/Index.js:378 msgid "by a single artist:" msgstr "yhdeltä artistilta:" -#: ../root/statistics/Index.js:381 +#: ../root/statistics/Index.js:385 msgid "Release Status" msgstr "Julkaisun tila" -#: ../root/statistics/Index.js:400 +#: ../root/statistics/Index.js:404 msgid "No status set" msgstr "Ei tilaa asetettu" -#: ../root/statistics/Index.js:407 +#: ../root/statistics/Index.js:411 msgid "Release Packaging" msgstr "Julkaisun paukkaus" -#: ../root/statistics/Index.js:426 +#: ../root/statistics/Index.js:430 msgid "No packaging set" msgstr "Ei pakkausta asetettu" -#: ../root/statistics/Index.js:433 +#: ../root/statistics/Index.js:437 msgid "Cover Art Sources" msgstr "Kansitaiteiden lähteet" -#: ../root/statistics/Index.js:442 +#: ../root/statistics/Index.js:446 msgid "CAA:" msgstr "CAA:" -#: ../root/statistics/Index.js:448 +#: ../root/statistics/Index.js:452 msgid "Amazon:" msgstr "Amazon:" -#: ../root/statistics/Index.js:454 +#: ../root/statistics/Index.js:458 msgid "URL Relationships:" msgstr "URL yhteydet:" -#: ../root/statistics/Index.js:460 +#: ../root/statistics/Index.js:464 msgid "No front cover art:" msgstr "Ei kansitaidetta:" -#: ../root/statistics/Index.js:467 +#: ../root/statistics/Index.js:471 msgid "Data Quality" msgstr "Tiedon laatu" -#: ../root/statistics/Index.js:476 +#: ../root/statistics/Index.js:480 msgid "High Data Quality:" msgstr "Korkea tiedon laatu:" -#: ../root/statistics/Index.js:482 +#: ../root/statistics/Index.js:486 msgid "Default Data Quality:" msgstr "Normaali tiedon laatu:" -#: ../root/statistics/Index.js:489 +#: ../root/statistics/Index.js:493 msgid "Normal Data Quality:" msgstr "Normaali tiedon laatu:" -#: ../root/statistics/Index.js:496 +#: ../root/statistics/Index.js:500 msgid "Unknown Data Quality:" msgstr "Tuntematon tiedon laatu:" -#: ../root/statistics/Index.js:504 +#: ../root/statistics/Index.js:508 msgid "Low Data Quality:" msgstr "Alhainen tiedon laatu:" -#: ../root/statistics/Index.js:511 ../root/statistics/stats.js:177 +#: ../root/statistics/Index.js:515 ../root/statistics/stats.js:303 msgid "Disc IDs" msgstr "Levyn tunnisteet" -#: ../root/statistics/Index.js:525 +#: ../root/statistics/Index.js:529 msgid "Releases with no disc IDs:" msgstr "Julkaisut, joissa ei ole levyn tunnistetta:" -#: ../root/statistics/Index.js:532 +#: ../root/statistics/Index.js:536 msgid "Releases with at least one disc ID:" msgstr "Julkaisut, joissa ainakin yksi levyn tunniste:" -#: ../root/statistics/Index.js:543 ../root/statistics/Index.js:587 +#: ../root/statistics/Index.js:547 ../root/statistics/Index.js:591 msgid "with {num} disc ID:" msgid_plural "with {num} disc IDs:" msgstr[0] "joissa {num} levyn tunniste:" msgstr[1] "joissa {num} levyn tunnistetta:" -#: ../root/statistics/Index.js:558 ../root/statistics/Index.js:600 +#: ../root/statistics/Index.js:562 ../root/statistics/Index.js:604 msgid "with 10 or more disc IDs:" msgstr "joissa 10 tai enemmän levyn tunnistetta:" -#: ../root/statistics/Index.js:569 +#: ../root/statistics/Index.js:573 msgid "Mediums with no disc IDs:" msgstr "Tallenteet, joissa ei levyn tunnistetta:" -#: ../root/statistics/Index.js:576 +#: ../root/statistics/Index.js:580 msgid "Mediums with at least one disc ID:" msgstr "Tallenteet, joissa ainakin yksi levyn tunniste:" -#: ../root/statistics/Index.js:607 ../root/statistics/stats.js:621 +#: ../root/statistics/Index.js:611 ../root/statistics/stats.js:747 msgid "Release Groups" msgstr "Julkaisuryhmät" -#: ../root/statistics/Index.js:611 +#: ../root/statistics/Index.js:615 msgid "Primary Types" msgstr "Ensisijaiset tyypit" -#: ../root/statistics/Index.js:637 +#: ../root/statistics/Index.js:641 msgid "Secondary Types" msgstr "Toissijaiset tyypit" -#: ../root/statistics/Index.js:665 ../root/statistics/Index.js:669 -#: ../root/statistics/stats.js:525 +#: ../root/statistics/Index.js:669 ../root/statistics/Index.js:673 +#: ../root/statistics/stats.js:651 msgid "Recordings" msgstr "Äänitteet" -#: ../root/statistics/Index.js:677 +#: ../root/statistics/Index.js:681 msgid "Videos:" msgstr "Videoita:" -#: ../root/statistics/Index.js:682 +#: ../root/statistics/Index.js:686 msgctxt "recording" msgid "Standalone" msgstr "" -#: ../root/statistics/Index.js:687 +#: ../root/statistics/Index.js:691 msgid "With ISRCs" msgstr "" -#: ../root/statistics/Index.js:698 ../root/statistics/Index.js:726 -#: ../root/statistics/Index.js:788 ../root/statistics/Index.js:816 -#: ../root/statistics/Index.js:844 ../root/statistics/Index.js:866 -#: ../root/statistics/Index.js:896 +#: ../root/statistics/Index.js:702 ../root/statistics/Index.js:730 +#: ../root/statistics/Index.js:792 ../root/statistics/Index.js:820 +#: ../root/statistics/Index.js:848 ../root/statistics/Index.js:870 +#: ../root/statistics/Index.js:900 msgid "Types" msgstr "Tyypit" -#: ../root/statistics/Index.js:715 ../root/statistics/Index.js:743 -#: ../root/statistics/Index.js:777 ../root/statistics/Index.js:805 -#: ../root/statistics/Index.js:833 ../root/statistics/Index.js:885 -#: ../root/statistics/Index.js:913 +#: ../root/statistics/Index.js:719 ../root/statistics/Index.js:747 +#: ../root/statistics/Index.js:781 ../root/statistics/Index.js:809 +#: ../root/statistics/Index.js:837 ../root/statistics/Index.js:889 +#: ../root/statistics/Index.js:917 msgid "None" msgstr "Ei mitään" -#: ../root/statistics/Index.js:722 ../root/statistics/LanguagesScripts.js:75 -#: ../root/statistics/stats.js:743 +#: ../root/statistics/Index.js:726 ../root/statistics/LanguagesScripts.js:75 +#: ../root/statistics/stats.js:869 msgid "Works" msgstr "Teokset" -#: ../root/statistics/Index.js:748 +#: ../root/statistics/Index.js:752 msgid "With ISWCs" msgstr "" -#: ../root/statistics/Index.js:758 +#: ../root/statistics/Index.js:762 msgid "Attributes" msgstr "Ominaisuudet" -#: ../root/statistics/Index.js:784 ../root/statistics/stats.js:39 +#: ../root/statistics/Index.js:788 ../root/statistics/stats.js:39 msgid "Areas" msgstr "Alueet" -#: ../root/statistics/Index.js:812 ../root/statistics/stats.js:405 +#: ../root/statistics/Index.js:816 ../root/statistics/stats.js:531 msgid "Places" msgstr "Paikat" -#: ../root/statistics/Index.js:840 ../root/statistics/stats.js:627 +#: ../root/statistics/Index.js:844 ../root/statistics/stats.js:753 msgctxt "plural" msgid "Series" msgstr "Sarjat" -#: ../root/statistics/Index.js:862 ../root/statistics/stats.js:309 +#: ../root/statistics/Index.js:866 ../root/statistics/stats.js:435 msgid "Instruments" msgstr "Soittimet" -#: ../root/statistics/Index.js:892 ../root/statistics/stats.js:303 +#: ../root/statistics/Index.js:896 ../root/statistics/stats.js:429 msgid "Events" msgstr "Tapahtumat" -#: ../root/statistics/Index.js:920 +#: ../root/statistics/Index.js:937 +msgid "Of releases" +msgstr "" + +#: ../root/statistics/Index.js:944 ../root/statistics/Index.js:977 +msgid "Generic" +msgstr "" + +#: ../root/statistics/Index.js:953 +msgid "Owned music" +msgstr "" + +#: ../root/statistics/Index.js:962 +msgid "Wishlist" +msgstr "" + +#: ../root/statistics/Index.js:970 +msgid "Of events" +msgstr "" + +#: ../root/statistics/Index.js:986 +msgid "Of type Attending" +msgstr "" + +#: ../root/statistics/Index.js:995 +msgid "Of type Maybe attending" +msgstr "" + +#: ../root/statistics/Index.js:1006 +msgid "Of areas" +msgstr "" + +#: ../root/statistics/Index.js:1012 +msgid "Of artists" +msgstr "" + +#: ../root/statistics/Index.js:1018 +msgid "Of instruments" +msgstr "" + +#: ../root/statistics/Index.js:1024 +msgid "Of labels" +msgstr "" + +#: ../root/statistics/Index.js:1030 +msgid "Of places" +msgstr "" + +#: ../root/statistics/Index.js:1036 +msgid "Of recordings" +msgstr "" + +#: ../root/statistics/Index.js:1042 +msgid "Of release groups" +msgstr "" + +#: ../root/statistics/Index.js:1048 +msgid "Of series" +msgstr "" + +#: ../root/statistics/Index.js:1054 +msgid "Of works" +msgstr "" + +#: ../root/statistics/Index.js:1060 +msgid "Public" +msgstr "Julkinen" + +#: ../root/statistics/Index.js:1066 +msgid "Private" +msgstr "Yksityinen" + +#: ../root/statistics/Index.js:1072 +msgid "With collaborators" +msgstr "" + +#: ../root/statistics/Index.js:1079 msgid "Editors, Edits, and Votes" msgstr "Käyttäjät, muokkaukset ja äänet" -#: ../root/statistics/Index.js:927 +#: ../root/statistics/Index.js:1086 msgid "Editors (valid):" msgstr "Käyttäjät (voimassa olevat):" -#: ../root/statistics/Index.js:933 +#: ../root/statistics/Index.js:1092 msgid "active ever:" msgstr "aktiivisia joskus:" -#: ../root/statistics/Index.js:941 +#: ../root/statistics/Index.js:1100 msgid "who edited and/or voted in the last 7 days:" msgstr "jotka muokanneet ja/tai äänestäneet viimeisen 7 päivän aikana:" -#: ../root/statistics/Index.js:950 +#: ../root/statistics/Index.js:1109 msgid "who edited in the last 7 days:" msgstr "jotka muokanneet viimeisen 7 päivän aikana:" -#: ../root/statistics/Index.js:958 +#: ../root/statistics/Index.js:1117 msgid "who voted in the last 7 days:" msgstr "jotka äänestäneet viimeisen 7 päivän aikana:" -#: ../root/statistics/Index.js:965 +#: ../root/statistics/Index.js:1124 msgid "who edit:" msgstr "jotka muokkaavat:" -#: ../root/statistics/Index.js:972 +#: ../root/statistics/Index.js:1131 msgid "who vote:" msgstr "jotka äänestävät:" -#: ../root/statistics/Index.js:979 +#: ../root/statistics/Index.js:1138 msgid "who leave edit notes:" msgstr "jotka jättävät muokkausmerkintöjä:" -#: ../root/statistics/Index.js:986 +#: ../root/statistics/Index.js:1145 msgid "who use tags:" msgstr "jotka luokittelevat:" -#: ../root/statistics/Index.js:993 +#: ../root/statistics/Index.js:1152 msgid "who use ratings:" msgstr "jotka arvostelevat:" -#: ../root/statistics/Index.js:1002 +#: ../root/statistics/Index.js:1161 msgid "who use subscriptions:" msgstr "jotka seuraavat:" -#: ../root/statistics/Index.js:1011 +#: ../root/statistics/Index.js:1170 msgid "who use collections:" msgstr "jotka käyttävät kokoelmia:" -#: ../root/statistics/Index.js:1021 +#: ../root/statistics/Index.js:1180 msgid "who have registered applications:" msgstr "joilla on rekisteröity sovellus:" -#: ../root/statistics/Index.js:1030 +#: ../root/statistics/Index.js:1189 msgid "validated email only:" msgstr "jotka ovat vain vahvistaneet sähköposti-osoitteen:" -#: ../root/statistics/Index.js:1036 +#: ../root/statistics/Index.js:1195 msgid "inactive:" msgstr "passiivinen:" -#: ../root/statistics/Index.js:1041 +#: ../root/statistics/Index.js:1200 msgid "Editors (deleted):" msgstr "Käyttäjät (poistetut):" -#: ../root/statistics/Index.js:1051 ../root/statistics/Index.js:1098 +#: ../root/statistics/Index.js:1210 ../root/statistics/Index.js:1257 msgid "Edits:" msgstr "Muokkaukset:" -#: ../root/statistics/Index.js:1057 +#: ../root/statistics/Index.js:1216 msgid "Open:" msgstr "Avoin:" -#: ../root/statistics/Index.js:1063 +#: ../root/statistics/Index.js:1222 msgid "Applied:" msgstr "Hyväksytty:" -#: ../root/statistics/Index.js:1069 +#: ../root/statistics/Index.js:1228 msgid "Voted down:" msgstr "Äänestetty kumoon:" -#: ../root/statistics/Index.js:1075 +#: ../root/statistics/Index.js:1234 msgid "Failed (dependency):" msgstr "Epäonnistunut (riippuvuus):" -#: ../root/statistics/Index.js:1081 +#: ../root/statistics/Index.js:1240 msgid "Failed (prerequisite):" msgstr "Epäonnistunut (edellytys):" -#: ../root/statistics/Index.js:1087 +#: ../root/statistics/Index.js:1246 msgid "Failed (internal error):" msgstr "Epäonnistunut (sisäinen virhe):" -#: ../root/statistics/Index.js:1093 +#: ../root/statistics/Index.js:1252 msgid "Cancelled:" msgstr "Peruutettu:" -#: ../root/statistics/Index.js:1104 ../root/statistics/Index.js:1156 +#: ../root/statistics/Index.js:1263 ../root/statistics/Index.js:1315 msgid "Last 7 days:" msgstr "Viimeiset 7 päivää:" -#: ../root/statistics/Index.js:1111 ../root/statistics/Index.js:1163 +#: ../root/statistics/Index.js:1270 ../root/statistics/Index.js:1322 msgid "Yesterday:" msgstr "Eilinen:" -#: ../root/statistics/Index.js:1118 ../root/statistics/stats.js:706 +#: ../root/statistics/Index.js:1277 ../root/statistics/stats.js:832 msgid "Votes" msgstr "Annetut äänet" -#: ../root/statistics/Index.js:1121 ../root/statistics/Index.js:1150 +#: ../root/statistics/Index.js:1280 ../root/statistics/Index.js:1309 msgid "Votes:" msgstr "Äänet:" -#: ../root/statistics/Index.js:1127 +#: ../root/statistics/Index.js:1286 msgctxt "vote" msgid "Approve" msgstr "Hyväksy" -#: ../root/statistics/Index.js:1133 +#: ../root/statistics/Index.js:1292 msgctxt "vote" msgid "Yes" msgstr "Kyllä" -#: ../root/statistics/Index.js:1139 +#: ../root/statistics/Index.js:1298 msgctxt "vote" msgid "No" msgstr "Ei" -#: ../root/statistics/Index.js:1145 +#: ../root/statistics/Index.js:1304 msgctxt "vote" msgid "Abstain" msgstr "Tyhjä" @@ -2201,744 +2283,824 @@ msgstr "Kaikkien CD-tynkien kappaleiden määrä" msgid "CDStub tracks" msgstr "CD-tynkien kappaleita" -#: ../root/statistics/stats.js:170 ../root/statistics/stats.js:171 +#: ../root/statistics/stats.js:177 +msgid "Collections with collaborators" +msgstr "" + +#: ../root/statistics/stats.js:183 +msgid "Private collections" +msgstr "" + +#: ../root/statistics/stats.js:189 +msgid "Public collections" +msgstr "" + +#: ../root/statistics/stats.js:195 +msgid "Area collections" +msgstr "" + +#: ../root/statistics/stats.js:201 +msgid "Artist collections" +msgstr "" + +#: ../root/statistics/stats.js:207 +msgid "Collections of type Attending" +msgstr "" + +#: ../root/statistics/stats.js:213 +msgid "Collections of type Event" +msgstr "" + +#: ../root/statistics/stats.js:219 +msgid "Event collections (all types)" +msgstr "" + +#: ../root/statistics/stats.js:225 +msgid "Instrument collections" +msgstr "" + +#: ../root/statistics/stats.js:231 +msgid "Label collections" +msgstr "" + +#: ../root/statistics/stats.js:237 +msgid "Collections of type Maybe attending" +msgstr "" + +#: ../root/statistics/stats.js:243 +msgid "Collections of type Owned music" +msgstr "" + +#: ../root/statistics/stats.js:249 +msgid "Place collections" +msgstr "" + +#: ../root/statistics/stats.js:255 +msgid "Recording collections" +msgstr "" + +#: ../root/statistics/stats.js:261 +msgid "Collections of type Release" +msgstr "" + +#: ../root/statistics/stats.js:267 +msgid "Release collections (all types)" +msgstr "" + +#: ../root/statistics/stats.js:273 +msgid "Release group collections" +msgstr "" + +#: ../root/statistics/stats.js:279 +msgid "Series collections" +msgstr "" + +#: ../root/statistics/stats.js:285 +msgid "Collections of type Wishlist" +msgstr "" + +#: ../root/statistics/stats.js:291 +msgid "Work collections" +msgstr "" + +#: ../root/statistics/stats.js:296 ../root/statistics/stats.js:297 msgid "Pieces of Cover Art" msgstr "Kansitaidetta yhteensä" -#: ../root/statistics/stats.js:176 +#: ../root/statistics/stats.js:302 msgid "Count of all Disc IDs" msgstr "Kaikkien levyn tunnisteiden määrä" -#: ../root/statistics/stats.js:182 +#: ../root/statistics/stats.js:308 msgid "Count of all edits" msgstr "Kaikkien muokkausten määrä" -#: ../root/statistics/stats.js:189 +#: ../root/statistics/stats.js:315 msgid "All edits that have been applied" msgstr "Kaikki muokkaukset, jotka on hyväksytty" -#: ../root/statistics/stats.js:190 +#: ../root/statistics/stats.js:316 msgid "Applied edits" msgstr "Hyväksytyt muokkaukset" -#: ../root/statistics/stats.js:195 ../root/statistics/stats.js:196 +#: ../root/statistics/stats.js:321 ../root/statistics/stats.js:322 msgid "Cancelled edits" msgstr "Peruutetut muokkaukset:" -#: ../root/statistics/stats.js:201 +#: ../root/statistics/stats.js:327 msgid "All edits that have hit an error" msgstr "Kaikki muokkaukset, joihin virhe on vaikuttanut" -#: ../root/statistics/stats.js:202 +#: ../root/statistics/stats.js:328 msgid "Error edits" msgstr "" -#: ../root/statistics/stats.js:207 +#: ../root/statistics/stats.js:333 msgid "Evalnochange edits" msgstr "" -#: ../root/statistics/stats.js:208 +#: ../root/statistics/stats.js:334 msgid "Evalnochange Edits" msgstr "" -#: ../root/statistics/stats.js:213 +#: ../root/statistics/stats.js:339 msgid "All edits that have failed dependency checks" msgstr "Kaikki muokkaukset, joiden riippuvuuksien tarkistus epäonnistui" -#: ../root/statistics/stats.js:214 +#: ../root/statistics/stats.js:340 msgid "Failed edits (dependency)" msgstr "Epäonnistuneet muokkaukset (riippuvuus)" -#: ../root/statistics/stats.js:219 +#: ../root/statistics/stats.js:345 msgid "All edits that have failed prerequisite checks" msgstr "Kaikki muokkaukset, joiden ennakkotarkistus epäonnistui" -#: ../root/statistics/stats.js:220 +#: ../root/statistics/stats.js:346 msgid "Failed edits (prerequisite)" msgstr "Epäonnistuneet muokkaukset (edellyt)" -#: ../root/statistics/stats.js:225 +#: ../root/statistics/stats.js:351 msgid "All edits that have failed by being voted down" msgstr "Kaikki muokkaukset, jotka on äänestetty kumoon" -#: ../root/statistics/stats.js:226 +#: ../root/statistics/stats.js:352 msgid "Failed edits (voted down)" msgstr "Epäonnistuneet muokkaukseet (äänestetty kumoon)" -#: ../root/statistics/stats.js:231 +#: ../root/statistics/stats.js:357 msgid "Count of open edits" msgstr "Avointen muokkausten määrä" -#: ../root/statistics/stats.js:232 +#: ../root/statistics/stats.js:358 msgid "Open Edits" msgstr "Avoimet muokkaukset" -#: ../root/statistics/stats.js:237 +#: ../root/statistics/stats.js:363 msgid "Count of edits per day" msgstr "Muokkauksia päivässä yhteensä" -#: ../root/statistics/stats.js:239 +#: ../root/statistics/stats.js:365 msgid "Edits per day" msgstr "Muokkauksia päivässä" -#: ../root/statistics/stats.js:244 +#: ../root/statistics/stats.js:370 msgid "Count of edits per week" msgstr "Muokkauksia viikossa yhteensä" -#: ../root/statistics/stats.js:245 +#: ../root/statistics/stats.js:371 msgid "Edits per week" msgstr "Muokkauksia viikossa" -#: ../root/statistics/stats.js:250 +#: ../root/statistics/stats.js:376 msgid "Count of all editors" msgstr "Kaikkien käyttäjien määrä" -#: ../root/statistics/stats.js:252 +#: ../root/statistics/stats.js:378 msgid "Editors (all)" msgstr "Käyttäjät (kaikki)" -#: ../root/statistics/stats.js:258 +#: ../root/statistics/stats.js:384 msgid "Count of active editors (editing or voting) during the last week" msgstr "Aktiivisia käyttäjiä (muokkaajia tai äänestäjiä) viikon aikana" -#: ../root/statistics/stats.js:260 +#: ../root/statistics/stats.js:386 msgid "Active Users" msgstr "Aktiiviset editorit" -#: ../root/statistics/stats.js:265 +#: ../root/statistics/stats.js:391 msgid "Count of deleted editors" msgstr "Kaikkien poistettujen käyttäjien määrä" -#: ../root/statistics/stats.js:267 +#: ../root/statistics/stats.js:393 msgid "Editors (deleted)" msgstr "Käyttäjät (poistetut)" -#: ../root/statistics/stats.js:273 +#: ../root/statistics/stats.js:399 msgid "Count of editors who have submitted edits during the last 7 days" msgstr "Käyttäjien, jotka muokanneet viimeisen 7 päivän aikana määrä" -#: ../root/statistics/stats.js:275 +#: ../root/statistics/stats.js:401 msgid "Active Editors" msgstr "Aktiiviset editorit" -#: ../root/statistics/stats.js:280 +#: ../root/statistics/stats.js:406 msgid "Count of non-deleted editors" msgstr "Kaikkien ei poistettujen käyttäjien määrä" -#: ../root/statistics/stats.js:282 +#: ../root/statistics/stats.js:408 msgid "Editors (valid)" msgstr "Käyttäjät (voimassa olevat)" -#: ../root/statistics/stats.js:287 +#: ../root/statistics/stats.js:413 msgid "Count of active editors" msgstr "Kaikkien aktiivisten käyttäjien määrä" -#: ../root/statistics/stats.js:289 +#: ../root/statistics/stats.js:415 msgid "Editors (valid & active ever)" msgstr "Käyttäjät (voimassa oleva & aktiivinen joskus)" -#: ../root/statistics/stats.js:295 +#: ../root/statistics/stats.js:421 msgid "Count of editors who have voted on during the last 7 days" msgstr "Käyttäjien, jotka äänestäneet viimeisen 7 päivän aikana määrä" -#: ../root/statistics/stats.js:297 +#: ../root/statistics/stats.js:423 msgid "Active Voters" msgstr "Aktiiviset äänestäjät" -#: ../root/statistics/stats.js:302 +#: ../root/statistics/stats.js:428 msgid "Count of all events" msgstr "" -#: ../root/statistics/stats.js:308 +#: ../root/statistics/stats.js:434 msgid "Count of all instruments" msgstr "Kaikkien soitinten määrä" -#: ../root/statistics/stats.js:314 +#: ../root/statistics/stats.js:440 msgid "Count of all IPIs" msgstr "Kaikkien IPI-koodien määrä" -#: ../root/statistics/stats.js:315 +#: ../root/statistics/stats.js:441 msgid "IPIs" msgstr "IPI-koodit" -#: ../root/statistics/stats.js:320 +#: ../root/statistics/stats.js:446 msgid "Count of all IPIs for Artists" msgstr "Kaikkeni artistien IPI-koodien määrä" -#: ../root/statistics/stats.js:321 +#: ../root/statistics/stats.js:447 msgid "Artist IPIs" msgstr "Artistien IPI-koodit" -#: ../root/statistics/stats.js:326 +#: ../root/statistics/stats.js:452 msgid "Count of all IPIs for Labels" msgstr "Kaikkien levymerkkien IPI-koodien määrä" -#: ../root/statistics/stats.js:327 +#: ../root/statistics/stats.js:453 msgid "Label IPIs" msgstr "Levymerkkien IPI-koodit" -#: ../root/statistics/stats.js:332 +#: ../root/statistics/stats.js:458 msgid "Count of all ISNIs" msgstr "Kaikkien ISNI-koodia määrä" -#: ../root/statistics/stats.js:333 +#: ../root/statistics/stats.js:459 msgid "ISNIs" msgstr "ISNI-koodit" -#: ../root/statistics/stats.js:338 +#: ../root/statistics/stats.js:464 msgid "Count of all ISNIs for Artists" msgstr "Kaikkien artistien ISNI-koodien määrä" -#: ../root/statistics/stats.js:339 +#: ../root/statistics/stats.js:465 msgid "Artist ISNIs" msgstr "Artistin ISNI-koodit" -#: ../root/statistics/stats.js:344 +#: ../root/statistics/stats.js:470 msgid "Count of all ISNIs for Labels" msgstr "Kaikkien levymerkkien ISNI-koodien määrä" -#: ../root/statistics/stats.js:345 +#: ../root/statistics/stats.js:471 msgid "Label ISNIs" msgstr "Levymerkin ISNI-koodit" -#: ../root/statistics/stats.js:350 ../root/statistics/stats.js:356 +#: ../root/statistics/stats.js:476 ../root/statistics/stats.js:482 msgid "Count of all ISRCs" msgstr "Kaikkien ISRC-koodien määrä" -#: ../root/statistics/stats.js:351 +#: ../root/statistics/stats.js:477 msgid "ISRCs" msgstr "ISRC-koodit" -#: ../root/statistics/stats.js:357 +#: ../root/statistics/stats.js:483 msgid "ISRCs (all)" msgstr "ISRC-koodit (kaikki)" -#: ../root/statistics/stats.js:362 ../root/statistics/stats.js:368 +#: ../root/statistics/stats.js:488 ../root/statistics/stats.js:494 msgid "Count of all ISWCs" msgstr "Kaikkien ISWC-koodien määrä" -#: ../root/statistics/stats.js:363 +#: ../root/statistics/stats.js:489 msgid "ISWCs" msgstr "ISWC-koodit" -#: ../root/statistics/stats.js:369 +#: ../root/statistics/stats.js:495 msgid "ISWCs (all)" msgstr "ISWC-koodit (kaikki)" -#: ../root/statistics/stats.js:374 +#: ../root/statistics/stats.js:500 msgid "Count of all labels" msgstr "Kaikkien levymerkkien määrä" -#: ../root/statistics/stats.js:380 +#: ../root/statistics/stats.js:506 msgid "Labels with no country set" msgstr "Levymerkit ilman määritettyä maata" -#: ../root/statistics/stats.js:386 +#: ../root/statistics/stats.js:512 msgid "Count of all mediums" msgstr "Kaikkien tallennemedioiden määrä" -#: ../root/statistics/stats.js:392 +#: ../root/statistics/stats.js:518 msgid "Mediums with no format set" msgstr "Tallenteet, joille ei ole asetettu tallennusformaattia" -#: ../root/statistics/stats.js:393 +#: ../root/statistics/stats.js:519 msgid "Unknown Format (medium)" msgstr "Tuntematon formaatti (media)" -#: ../root/statistics/stats.js:398 +#: ../root/statistics/stats.js:524 msgid "Count of all Mediums with Disc IDs" msgstr "Kaikkien tallenteiden, joilla levyn tunniste määrä" -#: ../root/statistics/stats.js:399 +#: ../root/statistics/stats.js:525 msgid "Mediums with Disc IDs" msgstr "Tallenteet, joissa ei levyn tunnistetta" -#: ../root/statistics/stats.js:404 +#: ../root/statistics/stats.js:530 msgid "Count of all places" msgstr "Kaikkien paikkojen määrä" -#: ../root/statistics/stats.js:410 +#: ../root/statistics/stats.js:536 msgid "Count of all Releases at Default Data Quality" msgstr "" -#: ../root/statistics/stats.js:411 +#: ../root/statistics/stats.js:537 msgid "Default Data Quality" msgstr "Normaali tiedon laatu" -#: ../root/statistics/stats.js:416 +#: ../root/statistics/stats.js:542 msgid "Count of all Releases at High Data Quality" msgstr "" -#: ../root/statistics/stats.js:417 +#: ../root/statistics/stats.js:543 msgid "High Data Quality" msgstr "Korkea tiedon laatu" -#: ../root/statistics/stats.js:422 +#: ../root/statistics/stats.js:548 msgid "Count of all Releases at Low Data Quality" msgstr "" -#: ../root/statistics/stats.js:423 +#: ../root/statistics/stats.js:549 msgid "Low Data Quality" msgstr "Alhainen tiedon laatu" -#: ../root/statistics/stats.js:428 +#: ../root/statistics/stats.js:554 msgid "Count of all Releases at Normal Data Quality" msgstr "" -#: ../root/statistics/stats.js:429 +#: ../root/statistics/stats.js:555 msgid "Normal Data Quality" msgstr "Normaali tiedon laatu" -#: ../root/statistics/stats.js:434 +#: ../root/statistics/stats.js:560 msgid "Count of all Releases at Unknown Data Quality" msgstr "" -#: ../root/statistics/stats.js:435 +#: ../root/statistics/stats.js:561 msgid "Unknown Data Quality" msgstr "Tuntematon tiedon laatu" -#: ../root/statistics/stats.js:440 +#: ../root/statistics/stats.js:566 msgid "Count of all Ratings" msgstr "Kaikkien arvostelujen määrä" -#: ../root/statistics/stats.js:441 +#: ../root/statistics/stats.js:567 msgid "Ratings" msgstr "Arvostelut" -#: ../root/statistics/stats.js:446 +#: ../root/statistics/stats.js:572 msgid "Count of all Artist Ratings" msgstr "Kaikkien artistien arvostelujen määrä" -#: ../root/statistics/stats.js:447 +#: ../root/statistics/stats.js:573 msgid "Artist Ratings" msgstr "Artistien arvostelut" -#: ../root/statistics/stats.js:452 +#: ../root/statistics/stats.js:578 msgid "Count of all Label Ratings" msgstr "Kaikkien levymerkkien arvostelujen määrä" -#: ../root/statistics/stats.js:453 +#: ../root/statistics/stats.js:579 msgid "Label Ratings" msgstr "" -#: ../root/statistics/stats.js:458 +#: ../root/statistics/stats.js:584 msgid "Count of all Place Ratings" msgstr "" -#: ../root/statistics/stats.js:459 +#: ../root/statistics/stats.js:585 msgid "Place Ratings" msgstr "" -#: ../root/statistics/stats.js:464 +#: ../root/statistics/stats.js:590 msgid "Count of all Ratings (raw)" msgstr "Kaikkien arvostelujen määrä (käsittelemätön)" -#: ../root/statistics/stats.js:465 +#: ../root/statistics/stats.js:591 msgid "Ratings (raw)" msgstr "Arvostelut (käsittelemätön)" -#: ../root/statistics/stats.js:470 +#: ../root/statistics/stats.js:596 msgid "Count of all Artist Ratings (raw)" msgstr "Kaikkien artistien arvostelujen määrä (käsittelemätön) " -#: ../root/statistics/stats.js:471 +#: ../root/statistics/stats.js:597 msgid "Artist Ratings (raw)" msgstr "Artistien arvostelut (käsittelemätön)" -#: ../root/statistics/stats.js:476 +#: ../root/statistics/stats.js:602 msgid "Count of all Label Ratings (raw)" msgstr "Kaikkien levymerkkien arvostelujen määrä (käsittelemätön)" -#: ../root/statistics/stats.js:477 +#: ../root/statistics/stats.js:603 msgid "Label Ratings (raw)" msgstr "Levymerkkien arvostelut (käsittelemätön)" -#: ../root/statistics/stats.js:482 +#: ../root/statistics/stats.js:608 msgid "Count of all Place Ratings (raw)" msgstr "" -#: ../root/statistics/stats.js:483 +#: ../root/statistics/stats.js:609 msgid "Place Ratings (raw)" msgstr "" -#: ../root/statistics/stats.js:488 +#: ../root/statistics/stats.js:614 msgid "Count of all Recording Ratings (raw)" msgstr "Kaikkien äänitteiden arvostelujen määrä (käsittelemätön)" -#: ../root/statistics/stats.js:489 +#: ../root/statistics/stats.js:615 msgid "Recording Ratings (raw)" msgstr "Äänitteiden arvostelut (käsittelemätön)" -#: ../root/statistics/stats.js:494 +#: ../root/statistics/stats.js:620 msgid "Count of all Release Group Ratings (raw)" msgstr "Kaikkien julkaisuryhmien arvostelujen määrä (käsittelemätön)" -#: ../root/statistics/stats.js:495 +#: ../root/statistics/stats.js:621 msgid "Release Group Ratings (raw)" msgstr "Julkaisuryhmien arvostelut (käsittelemätön)" -#: ../root/statistics/stats.js:500 +#: ../root/statistics/stats.js:626 msgid "Count of all Work Ratings (raw)" msgstr "Kaikkien teoksien arvostelujen määrä (käsittelemätön)" -#: ../root/statistics/stats.js:501 +#: ../root/statistics/stats.js:627 msgid "Work Ratings (raw)" msgstr "Teoksien arvostelut (käsittelemätön)" -#: ../root/statistics/stats.js:506 +#: ../root/statistics/stats.js:632 msgid "Count of all Recording Ratings" msgstr "Kaikkien äänitteiden arvostelujen määrä" -#: ../root/statistics/stats.js:507 +#: ../root/statistics/stats.js:633 msgid "Recording Ratings" msgstr "Äänitteiden arvostelut" -#: ../root/statistics/stats.js:512 +#: ../root/statistics/stats.js:638 msgid "Count of all Release Group Ratings" msgstr "" -#: ../root/statistics/stats.js:513 +#: ../root/statistics/stats.js:639 msgid "Release Group Ratings" msgstr "Julkaisuryhmän arvostelut" -#: ../root/statistics/stats.js:518 +#: ../root/statistics/stats.js:644 msgid "Count of all Work Ratings" msgstr "Kaikkien teoksien arvostelujen määrä" -#: ../root/statistics/stats.js:519 +#: ../root/statistics/stats.js:645 msgid "Work Ratings" msgstr "Teosten arvostelut" -#: ../root/statistics/stats.js:524 +#: ../root/statistics/stats.js:650 msgid "Count of all recordings" msgstr "Kaikkien äänitteiden määrä" -#: ../root/statistics/stats.js:530 +#: ../root/statistics/stats.js:656 msgid "Count of all Recordings with ISRCs" msgstr "Kaikkien äänitteiden, joilla on ISRC-tunnuksia määrä" -#: ../root/statistics/stats.js:531 +#: ../root/statistics/stats.js:657 msgid "Recordings with ISRCs" msgstr "" -#: ../root/statistics/stats.js:536 +#: ../root/statistics/stats.js:662 msgid "Count of all standalone recordings" msgstr "" -#: ../root/statistics/stats.js:537 +#: ../root/statistics/stats.js:663 msgid "Standalone recordings" msgstr "" -#: ../root/statistics/stats.js:542 +#: ../root/statistics/stats.js:668 msgid "Count of all releases" msgstr "Kaikkien julkaisujen määrä" -#: ../root/statistics/stats.js:548 +#: ../root/statistics/stats.js:674 msgid "Releases with no country set" msgstr "Julkaisut, joissa maata ei valittu" -#: ../root/statistics/stats.js:554 ../root/statistics/stats.js:555 -#: ../root/statistics/stats.js:572 +#: ../root/statistics/stats.js:680 ../root/statistics/stats.js:681 +#: ../root/statistics/stats.js:698 msgid "Releases with Amazon Cover Art" msgstr "Julkaisut, joille löytää kansitaide Amazonista" -#: ../root/statistics/stats.js:560 ../root/statistics/stats.js:561 +#: ../root/statistics/stats.js:686 ../root/statistics/stats.js:687 msgid "Releases with CAA Cover Art" msgstr "Kansitaiteelliset julkaisut" -#: ../root/statistics/stats.js:566 ../root/statistics/stats.js:567 +#: ../root/statistics/stats.js:692 ../root/statistics/stats.js:693 msgid "Releases with No Cover Art" msgstr "Julkaisut joilla ei kansitaidetta" -#: ../root/statistics/stats.js:573 +#: ../root/statistics/stats.js:699 msgid "Releases with Cover Art from Relationships" msgstr "Julkaisut, joilta löydyy kansitaide-yhteyksiä" -#: ../root/statistics/stats.js:578 +#: ../root/statistics/stats.js:704 msgid "Releases with a no-format medium" msgstr "Julkaisut, joiden formaatti on tuntematon" -#: ../root/statistics/stats.js:579 +#: ../root/statistics/stats.js:705 msgid "Unknown Format (release)" msgstr "Tuntematon formaatti (julkaisu)" -#: ../root/statistics/stats.js:584 ../root/statistics/stats.js:585 +#: ../root/statistics/stats.js:710 ../root/statistics/stats.js:711 msgid "Releases with Cover Art" msgstr "Julkaisut, joissa kansitaidetta" -#: ../root/statistics/stats.js:590 +#: ../root/statistics/stats.js:716 msgid "Count of all Releases with Disc IDs" msgstr "Kaikkien julkaisujen, joilla levyn tunniste, määrä" -#: ../root/statistics/stats.js:591 +#: ../root/statistics/stats.js:717 msgid "Releases with Disc IDs" msgstr "Julkaisuja, joilla Disc ID" -#: ../root/statistics/stats.js:596 +#: ../root/statistics/stats.js:722 msgid "Releases with no language set" msgstr "Julkaisut, joissa ei ole kieltä asetttuna" -#: ../root/statistics/stats.js:597 +#: ../root/statistics/stats.js:723 msgid "Unknown Language" msgstr "Tuntematon kieli" -#: ../root/statistics/stats.js:602 +#: ../root/statistics/stats.js:728 msgid "Count of all Releases not V.A." msgstr "Kaikkien julkaisujen, jotka eivät ole eri artistien, määrä" -#: ../root/statistics/stats.js:603 +#: ../root/statistics/stats.js:729 msgid "Releases not VA" msgstr "Julkaisut (ei eri esittäjiä)" -#: ../root/statistics/stats.js:608 +#: ../root/statistics/stats.js:734 msgid "Releases with no script set" msgstr "Julkaisut, joissa ei ole merkistöä asetettuna" -#: ../root/statistics/stats.js:609 +#: ../root/statistics/stats.js:735 msgid "Unknown Script" msgstr "Tuntematon merkistö" -#: ../root/statistics/stats.js:614 +#: ../root/statistics/stats.js:740 msgid "Count of all Releases by Various Artists" msgstr "Kaikkien eri esittäjien julkaisujen määrä" -#: ../root/statistics/stats.js:615 +#: ../root/statistics/stats.js:741 msgid "Releases (VA)" msgstr "Julkaisut (eri esittäjiä)" -#: ../root/statistics/stats.js:620 +#: ../root/statistics/stats.js:746 msgid "Count of all release groups" msgstr "Kaikkien julkaisuryhmien määrä" -#: ../root/statistics/stats.js:626 +#: ../root/statistics/stats.js:752 msgid "Count of all series" msgstr "Kaikkien sarjojen määrä" -#: ../root/statistics/stats.js:632 +#: ../root/statistics/stats.js:758 msgid "Count of all Tags" msgstr "Kaikki luokituksien määrä" -#: ../root/statistics/stats.js:633 +#: ../root/statistics/stats.js:759 msgid "Tags" msgstr "Luokitukset" -#: ../root/statistics/stats.js:638 +#: ../root/statistics/stats.js:764 msgid "Count of all Tags (raw)" msgstr "Kaikkien luokituksien määrä (käsittelemätön)" -#: ../root/statistics/stats.js:639 +#: ../root/statistics/stats.js:765 msgid "Tags (raw)" msgstr "Luokitukset (käsittelemätön)" -#: ../root/statistics/stats.js:644 +#: ../root/statistics/stats.js:770 msgid "Count of all Area Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:645 +#: ../root/statistics/stats.js:771 msgid "Area Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:650 +#: ../root/statistics/stats.js:776 msgid "Count of all Artist Tags (raw)" msgstr "Kaikkien artistien luokittelujen määrä (käsittelemätön)" -#: ../root/statistics/stats.js:651 +#: ../root/statistics/stats.js:777 msgid "Artist Tags (raw)" msgstr "Artistien luokitukset (käsittelemätön)" -#: ../root/statistics/stats.js:656 +#: ../root/statistics/stats.js:782 msgid "Count of all Instrument Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:657 +#: ../root/statistics/stats.js:783 msgid "Instrument Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:662 +#: ../root/statistics/stats.js:788 msgid "Count of all Label Tags (raw)" msgstr "Kaikkien levymerkkien luokittelujen määrä (käsittelemätön)" -#: ../root/statistics/stats.js:663 +#: ../root/statistics/stats.js:789 msgid "Label Tags (raw)" msgstr "Levymerkkien luokitukset (käsittelemätön)" -#: ../root/statistics/stats.js:668 +#: ../root/statistics/stats.js:794 msgid "Count of all Recording Tags (raw)" msgstr "Kaikkien äänitteiden luokittelujen määrä (käsittelemätön)" -#: ../root/statistics/stats.js:669 +#: ../root/statistics/stats.js:795 msgid "Recording Tags (raw)" msgstr "Äänitteiden luokittelut (käsittelemätön)" -#: ../root/statistics/stats.js:674 +#: ../root/statistics/stats.js:800 msgid "Count of all Release Tags (raw)" msgstr "Kaikkien julkaisujen luokittelujen määrä (käsittelemätön)" -#: ../root/statistics/stats.js:675 +#: ../root/statistics/stats.js:801 msgid "Release Tags (raw)" msgstr "Julkaisujen luokitukset (käsittelemätön)" -#: ../root/statistics/stats.js:680 +#: ../root/statistics/stats.js:806 msgid "Count of all Release Group Tags (raw)" msgstr "Kaikkien julkaisuryhmien luokittelujen määrä (käsittelemätön)" -#: ../root/statistics/stats.js:681 +#: ../root/statistics/stats.js:807 msgid "Release Group Tags (raw)" msgstr "Julkaisuryhmien luokittelut (käsittelemätön)" -#: ../root/statistics/stats.js:686 +#: ../root/statistics/stats.js:812 msgid "Count of all Series Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:687 +#: ../root/statistics/stats.js:813 msgid "Series Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:692 +#: ../root/statistics/stats.js:818 msgid "Count of all Work Tags (raw)" msgstr "Kaikkien teoksien luokittelujen määrä (käsittelemätön)" -#: ../root/statistics/stats.js:693 +#: ../root/statistics/stats.js:819 msgid "Work Tags (raw)" msgstr "Teoksien arvostelut (käsittelemätön)" -#: ../root/statistics/stats.js:698 +#: ../root/statistics/stats.js:824 msgid "Count of all Tracks" msgstr "Kaikkien kappaleiden määrä" -#: ../root/statistics/stats.js:699 +#: ../root/statistics/stats.js:825 msgid "Tracks" msgstr "Kappaleet" -#: ../root/statistics/stats.js:704 +#: ../root/statistics/stats.js:830 msgid "Count of all votes" msgstr "Kaikkien äänien määrä" -#: ../root/statistics/stats.js:711 +#: ../root/statistics/stats.js:837 msgid "Count of all Abstain votes" msgstr "" -#: ../root/statistics/stats.js:712 +#: ../root/statistics/stats.js:838 msgid "Abstentions" msgstr "" -#: ../root/statistics/stats.js:717 +#: ../root/statistics/stats.js:843 msgid "Count of all No votes" msgstr "Kaikkien Ei äänien määrä" -#: ../root/statistics/stats.js:718 +#: ../root/statistics/stats.js:844 msgid "No Votes" msgstr "Ei-äänet" -#: ../root/statistics/stats.js:723 +#: ../root/statistics/stats.js:849 msgid "Count of votes per day" msgstr "Ääniä päivässä yhteensä" -#: ../root/statistics/stats.js:725 +#: ../root/statistics/stats.js:851 msgid "Votes per day" msgstr "Päiväkohtaiset äänet" -#: ../root/statistics/stats.js:730 +#: ../root/statistics/stats.js:856 msgid "Count of votes per week" msgstr "Ääniä viikossa yhteensä" -#: ../root/statistics/stats.js:731 +#: ../root/statistics/stats.js:857 msgid "Votes per week" msgstr "Viikkokohtaiset äänet" -#: ../root/statistics/stats.js:736 +#: ../root/statistics/stats.js:862 msgid "Count of all Yes votes" msgstr "Kaikkien Kyllä äänien määrä" -#: ../root/statistics/stats.js:737 +#: ../root/statistics/stats.js:863 msgid "Yes Votes" msgstr "Kyllä-äänet" -#: ../root/statistics/stats.js:742 +#: ../root/statistics/stats.js:868 msgid "Count of all works" msgstr "Kaikkien teoksien määrä" -#: ../root/statistics/stats.js:748 +#: ../root/statistics/stats.js:874 msgid "Count of all Works with ISWCs" msgstr "" -#: ../root/statistics/stats.js:749 +#: ../root/statistics/stats.js:875 msgid "Works with ISWCs" msgstr "" -#: ../root/statistics/stats.js:751 +#: ../root/statistics/stats.js:877 msgid "/day" msgstr "/päivä" -#: ../root/statistics/stats.js:760 +#: ../root/statistics/stats.js:886 msgid "Count of all Releases with {n} Disc IDs" msgstr "Kaikkien julkaisujen, joilla {n} levyn tunnistetta määrä" -#: ../root/statistics/stats.js:762 +#: ../root/statistics/stats.js:888 msgid "Releases with 1 Disc ID" msgid_plural "Releases with {n} Disc IDs" msgstr[0] "" msgstr[1] "" -#: ../root/statistics/stats.js:772 +#: ../root/statistics/stats.js:898 msgid "Count of all Mediums with {n} Disc IDs" msgstr "Kaikkien tallenteiden, joilla {n} levyn tunnistetta määrä" -#: ../root/statistics/stats.js:774 +#: ../root/statistics/stats.js:900 msgid "Mediums with 1 Disc ID" msgid_plural "Mediums with {n} Disc IDs" msgstr[0] "Tallenteet, joissa {n} levyn tunnistetta" msgstr[1] "Tallenteet, joissa {n} levyn tunnistetta" -#: ../root/statistics/stats.js:784 +#: ../root/statistics/stats.js:910 msgid "Count of all Recordings with {n} Releases" msgstr "Kaikkien äänitteiden, jotka liittyy {n} julkaisuun määrä" -#: ../root/statistics/stats.js:786 +#: ../root/statistics/stats.js:912 msgid "Recordings with 1 Release" msgid_plural "Recordings with {n} Releases" msgstr[0] "" msgstr[1] "" -#: ../root/statistics/stats.js:796 +#: ../root/statistics/stats.js:922 msgid "Count of all Release Groups with {n} Releases" msgstr "" -#: ../root/statistics/stats.js:798 +#: ../root/statistics/stats.js:924 msgid "Release Groups with 1 Release" msgid_plural "Release Groups with {n} Releases" msgstr[0] "Julkaisuryhmät joissa {n} julkaisu" msgstr[1] "Julkaisuryhmät joissa {n} julkaisua" -#: ../root/statistics/stats.js:840 +#: ../root/statistics/stats.js:966 msgid "{country} artists" msgstr "{country} artistit" -#: ../root/statistics/stats.js:847 +#: ../root/statistics/stats.js:973 msgid "{country} labels" msgstr "{country} levymerkit" -#: ../root/statistics/stats.js:854 +#: ../root/statistics/stats.js:980 msgid "{country} releases" msgstr "{country} julkaisut" -#: ../root/statistics/stats.js:866 +#: ../root/statistics/stats.js:992 msgid "{name} releases" msgstr "{name} julkaisut" -#: ../root/statistics/stats.js:873 +#: ../root/statistics/stats.js:999 msgid "{name} mediums" msgstr "{name} tallenteet" -#: ../root/statistics/stats.js:885 +#: ../root/statistics/stats.js:1011 msgid "{language} releases" msgstr "{language} julkaisut" -#: ../root/statistics/stats.js:892 +#: ../root/statistics/stats.js:1018 msgid "l_{first}_{second} Relationships" msgstr "l_{first}_{second} yhteydet" -#: ../root/statistics/stats.js:913 +#: ../root/statistics/stats.js:1039 msgid "{script} releases" msgstr "{script} julkaisut" diff --git a/po/statistics.fr.po b/po/statistics.fr.po index a1f38d9dcbb..8f82075815d 100644 --- a/po/statistics.fr.po +++ b/po/statistics.fr.po @@ -16,8 +16,8 @@ msgid "" msgstr "" "Project-Id-Version: MusicBrainz\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2021-07-19 17:37+0000\n" -"Last-Translator: yvanz\n" +"PO-Revision-Date: 2021-09-28 18:40+0000\n" +"Last-Translator: AO <email address hidden>\n" "Language-Team: French (http://www.transifex.com/musicbrainz/musicbrainz/language/fr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -1141,15 +1141,15 @@ msgid "Draw a rectangle on either graph" msgstr "Dessinez un rectangle sur l’un des graphiques" #: ../root/statistics/layout.tt:4 ../root/statistics/Editors.js:98 -#: ../root/statistics/Editors.js:109 ../root/statistics/Index.js:924 +#: ../root/statistics/Editors.js:109 ../root/statistics/Index.js:1083 #: ../root/statistics/StatisticsLayout.js:82 msgid "Editors" msgstr "Éditeurs" #: ../root/statistics/layout.tt:4 ../root/statistics/Edits.js:37 #: ../root/statistics/Edits.js:41 ../root/statistics/Edits.js:50 -#: ../root/statistics/Index.js:1048 ../root/statistics/StatisticsLayout.js:72 -#: ../root/statistics/stats.js:184 +#: ../root/statistics/Index.js:1207 ../root/statistics/StatisticsLayout.js:72 +#: ../root/statistics/stats.js:310 msgid "Edits" msgstr "Modifications" @@ -1236,20 +1236,20 @@ msgstr "Rang" msgid "Country" msgstr "Pays" -#: ../root/statistics/Countries.js:53 ../root/statistics/Index.js:227 -#: ../root/statistics/Index.js:231 ../root/statistics/stats.js:45 +#: ../root/statistics/Countries.js:53 ../root/statistics/Index.js:231 +#: ../root/statistics/Index.js:235 ../root/statistics/stats.js:45 msgid "Artists" msgstr "Artistes" #: ../root/statistics/Countries.js:57 ../root/statistics/CoverArt.js:105 -#: ../root/statistics/Formats.js:56 ../root/statistics/Index.js:359 +#: ../root/statistics/Formats.js:56 ../root/statistics/Index.js:363 #: ../root/statistics/LanguagesScripts.js:71 -#: ../root/statistics/LanguagesScripts.js:152 ../root/statistics/stats.js:543 +#: ../root/statistics/LanguagesScripts.js:152 ../root/statistics/stats.js:669 msgid "Releases" msgstr "Parutions" -#: ../root/statistics/Countries.js:61 ../root/statistics/Index.js:694 -#: ../root/statistics/Index.js:701 ../root/statistics/stats.js:375 +#: ../root/statistics/Countries.js:61 ../root/statistics/Index.js:698 +#: ../root/statistics/Index.js:705 ../root/statistics/stats.js:501 msgid "Labels" msgstr "Labels" @@ -1259,7 +1259,7 @@ msgid "Total" msgstr "Total" #: ../root/statistics/Countries.js:87 ../root/statistics/stats.js:57 -#: ../root/statistics/stats.js:381 ../root/statistics/stats.js:549 +#: ../root/statistics/stats.js:507 ../root/statistics/stats.js:675 msgid "Unknown Country" msgstr "Pays inconnu" @@ -1414,7 +1414,7 @@ msgstr "Format" msgid "% of total releases" msgstr "% du total des parutions" -#: ../root/statistics/Formats.js:58 ../root/statistics/stats.js:387 +#: ../root/statistics/Formats.js:58 ../root/statistics/stats.js:513 msgid "Mediums" msgstr "Supports" @@ -1434,27 +1434,27 @@ msgstr "Métadonnées de base" msgid "Core Entities" msgstr "Entités principales" -#: ../root/statistics/Index.js:92 ../root/statistics/Index.js:234 +#: ../root/statistics/Index.js:92 ../root/statistics/Index.js:238 msgid "Artists:" msgstr "Artistes : " -#: ../root/statistics/Index.js:96 ../root/statistics/Index.js:614 -#: ../root/statistics/Index.js:640 +#: ../root/statistics/Index.js:96 ../root/statistics/Index.js:618 +#: ../root/statistics/Index.js:644 msgid "Release Groups:" msgstr "Groupes de parution :" -#: ../root/statistics/Index.js:100 ../root/statistics/Index.js:362 -#: ../root/statistics/Index.js:384 ../root/statistics/Index.js:410 -#: ../root/statistics/Index.js:436 ../root/statistics/Index.js:470 -#: ../root/statistics/Index.js:519 +#: ../root/statistics/Index.js:100 ../root/statistics/Index.js:366 +#: ../root/statistics/Index.js:388 ../root/statistics/Index.js:414 +#: ../root/statistics/Index.js:440 ../root/statistics/Index.js:474 +#: ../root/statistics/Index.js:523 msgid "Releases:" msgstr "Parutions :" -#: ../root/statistics/Index.js:104 ../root/statistics/Index.js:563 +#: ../root/statistics/Index.js:104 ../root/statistics/Index.js:567 msgid "Mediums:" msgstr "Supports :" -#: ../root/statistics/Index.js:108 ../root/statistics/Index.js:672 +#: ../root/statistics/Index.js:108 ../root/statistics/Index.js:676 msgid "Recordings:" msgstr "Enregistrements : " @@ -1466,8 +1466,8 @@ msgstr "Pistes :" msgid "Labels:" msgstr "Labels :" -#: ../root/statistics/Index.js:120 ../root/statistics/Index.js:729 -#: ../root/statistics/Index.js:761 +#: ../root/statistics/Index.js:120 ../root/statistics/Index.js:733 +#: ../root/statistics/Index.js:765 msgid "Works:" msgstr "Œuvres :" @@ -1475,24 +1475,24 @@ msgstr "Œuvres :" msgid "URLs:" msgstr "URLs :" -#: ../root/statistics/Index.js:128 ../root/statistics/Index.js:791 +#: ../root/statistics/Index.js:128 ../root/statistics/Index.js:795 msgid "Areas:" msgstr "Régions :" -#: ../root/statistics/Index.js:132 ../root/statistics/Index.js:819 +#: ../root/statistics/Index.js:132 ../root/statistics/Index.js:823 msgid "Places:" msgstr "Lieux :" -#: ../root/statistics/Index.js:136 ../root/statistics/Index.js:847 +#: ../root/statistics/Index.js:136 ../root/statistics/Index.js:851 msgctxt "plural" msgid "Series:" msgstr "Séries :" -#: ../root/statistics/Index.js:140 ../root/statistics/Index.js:869 +#: ../root/statistics/Index.js:140 ../root/statistics/Index.js:873 msgid "Instruments:" msgstr "Instruments :" -#: ../root/statistics/Index.js:144 ../root/statistics/Index.js:899 +#: ../root/statistics/Index.js:144 ../root/statistics/Index.js:903 msgid "Events:" msgstr "Événements :" @@ -1512,422 +1512,504 @@ msgstr "Éditeurs (valides / supprimés) :" msgid "Relationships:" msgstr "Relations : " -#: ../root/statistics/Index.js:167 +#: ../root/statistics/Index.js:167 ../root/statistics/Index.js:924 +#: ../root/statistics/Index.js:928 ../root/statistics/Index.js:931 +#: ../root/statistics/stats.js:171 +msgid "Collections" +msgstr "Collections" + +#: ../root/statistics/Index.js:171 msgid "CD Stubs (all time / current):" msgstr "Ébauches de CD (historique / courant ) :" -#: ../root/statistics/Index.js:176 +#: ../root/statistics/Index.js:180 msgid "Tags (raw / aggregated):" msgstr "Balises (brut / agrégé) : " -#: ../root/statistics/Index.js:182 +#: ../root/statistics/Index.js:186 msgid "Ratings (raw / aggregated):" msgstr "Évaluations (brut / agrégé) : " -#: ../root/statistics/Index.js:190 +#: ../root/statistics/Index.js:194 msgid "Identifiers" msgstr "Identifiants" -#: ../root/statistics/Index.js:193 +#: ../root/statistics/Index.js:197 msgid "MBIDs:" msgstr "MBID :" -#: ../root/statistics/Index.js:197 +#: ../root/statistics/Index.js:201 msgid "ISRCs (all / unique):" msgstr "ISRC (tous / unique) :" -#: ../root/statistics/Index.js:203 +#: ../root/statistics/Index.js:207 msgid "ISWCs (all / unique):" msgstr "ISWC (tous / unique) :" -#: ../root/statistics/Index.js:209 ../root/statistics/Index.js:514 +#: ../root/statistics/Index.js:213 ../root/statistics/Index.js:518 msgid "Disc IDs:" msgstr "ID de disque :" -#: ../root/statistics/Index.js:213 +#: ../root/statistics/Index.js:217 msgid "Barcodes:" msgstr "Codes-barres : " -#: ../root/statistics/Index.js:217 +#: ../root/statistics/Index.js:221 msgid "IPIs:" msgstr "IPI :" -#: ../root/statistics/Index.js:221 +#: ../root/statistics/Index.js:225 msgid "ISNIs:" msgstr "ISNI :" -#: ../root/statistics/Index.js:240 +#: ../root/statistics/Index.js:244 msgid "of type Person:" msgstr "de type Personne : " -#: ../root/statistics/Index.js:246 +#: ../root/statistics/Index.js:250 msgid "of type Group:" msgstr "de type Groupe : " -#: ../root/statistics/Index.js:252 +#: ../root/statistics/Index.js:256 msgid "of type Orchestra:" msgstr "de type Orchestre :" -#: ../root/statistics/Index.js:258 +#: ../root/statistics/Index.js:262 msgid "of type Choir:" msgstr "de type Chœur :" -#: ../root/statistics/Index.js:264 +#: ../root/statistics/Index.js:268 msgid "of type Character:" msgstr "de type Personnage :" -#: ../root/statistics/Index.js:270 +#: ../root/statistics/Index.js:274 msgid "of type Other:" msgstr "de type Autre : " -#: ../root/statistics/Index.js:276 +#: ../root/statistics/Index.js:280 msgid "with no type set:" msgstr "sans type de défini :" -#: ../root/statistics/Index.js:282 +#: ../root/statistics/Index.js:286 msgid "with appearances in artist credits:" msgstr "avec mentions dans les crédits d’artistes :" -#: ../root/statistics/Index.js:288 +#: ../root/statistics/Index.js:292 msgid "with no appearances in artist credits:" msgstr "absents des crédits d’artistes :" -#: ../root/statistics/Index.js:293 +#: ../root/statistics/Index.js:297 msgid "Non-group artists:" msgstr "Artistes hors groupe :" -#: ../root/statistics/Index.js:299 +#: ../root/statistics/Index.js:303 msgid "Male:" msgstr "Homme :" -#: ../root/statistics/Index.js:310 +#: ../root/statistics/Index.js:314 msgid "Female:" msgstr "Femmes :" -#: ../root/statistics/Index.js:321 +#: ../root/statistics/Index.js:325 msgid "Other gender:" msgstr "Autre genre :" -#: ../root/statistics/Index.js:332 +#: ../root/statistics/Index.js:336 msgid "Gender not applicable:" msgstr "Genre non applicable :" -#: ../root/statistics/Index.js:343 +#: ../root/statistics/Index.js:347 msgid "with no gender set:" msgstr "sans genre précisé :" -#: ../root/statistics/Index.js:355 +#: ../root/statistics/Index.js:359 msgid "Releases, Data Quality, and Disc IDs" msgstr "Parutions, qualité des données et ID de disque" -#: ../root/statistics/Index.js:368 +#: ../root/statistics/Index.js:372 msgid "by various artists:" msgstr "par divers artistes :" -#: ../root/statistics/Index.js:374 +#: ../root/statistics/Index.js:378 msgid "by a single artist:" msgstr "par un seul artiste :" -#: ../root/statistics/Index.js:381 +#: ../root/statistics/Index.js:385 msgid "Release Status" msgstr "Statut de la parution" -#: ../root/statistics/Index.js:400 +#: ../root/statistics/Index.js:404 msgid "No status set" msgstr "Pas de statut de défini" -#: ../root/statistics/Index.js:407 +#: ../root/statistics/Index.js:411 msgid "Release Packaging" msgstr "Emballage de parution" -#: ../root/statistics/Index.js:426 +#: ../root/statistics/Index.js:430 msgid "No packaging set" msgstr "Pas d’emballage de défini" -#: ../root/statistics/Index.js:433 +#: ../root/statistics/Index.js:437 msgid "Cover Art Sources" msgstr "Sources des illustrations" -#: ../root/statistics/Index.js:442 +#: ../root/statistics/Index.js:446 msgid "CAA:" msgstr "CAA :" -#: ../root/statistics/Index.js:448 +#: ../root/statistics/Index.js:452 msgid "Amazon:" msgstr "Amazon :" -#: ../root/statistics/Index.js:454 +#: ../root/statistics/Index.js:458 msgid "URL Relationships:" msgstr "Relations d’URL :" -#: ../root/statistics/Index.js:460 +#: ../root/statistics/Index.js:464 msgid "No front cover art:" msgstr "Pas d’illustration de couverture :" -#: ../root/statistics/Index.js:467 +#: ../root/statistics/Index.js:471 msgid "Data Quality" msgstr "Qualité des données" -#: ../root/statistics/Index.js:476 +#: ../root/statistics/Index.js:480 msgid "High Data Quality:" msgstr "Données de haute qualité :" -#: ../root/statistics/Index.js:482 +#: ../root/statistics/Index.js:486 msgid "Default Data Quality:" msgstr "Qualité par défaut des données :" -#: ../root/statistics/Index.js:489 +#: ../root/statistics/Index.js:493 msgid "Normal Data Quality:" msgstr "Qualité de données normale :" -#: ../root/statistics/Index.js:496 +#: ../root/statistics/Index.js:500 msgid "Unknown Data Quality:" msgstr "Qualité de données inconnue :" -#: ../root/statistics/Index.js:504 +#: ../root/statistics/Index.js:508 msgid "Low Data Quality:" msgstr "Données de mauvaise qualité :" -#: ../root/statistics/Index.js:511 ../root/statistics/stats.js:177 +#: ../root/statistics/Index.js:515 ../root/statistics/stats.js:303 msgid "Disc IDs" msgstr "ID de disque" -#: ../root/statistics/Index.js:525 +#: ../root/statistics/Index.js:529 msgid "Releases with no disc IDs:" msgstr "Parutions sans ID de disque :" -#: ../root/statistics/Index.js:532 +#: ../root/statistics/Index.js:536 msgid "Releases with at least one disc ID:" msgstr "Parutions avec au moins un ID de disque :" -#: ../root/statistics/Index.js:543 ../root/statistics/Index.js:587 +#: ../root/statistics/Index.js:547 ../root/statistics/Index.js:591 msgid "with {num} disc ID:" msgid_plural "with {num} disc IDs:" msgstr[0] "avec {num} ID de disque :" msgstr[1] "avec {num}ID de disque :" -#: ../root/statistics/Index.js:558 ../root/statistics/Index.js:600 +#: ../root/statistics/Index.js:562 ../root/statistics/Index.js:604 msgid "with 10 or more disc IDs:" msgstr "avec 10 ID de disque ou plus :" -#: ../root/statistics/Index.js:569 +#: ../root/statistics/Index.js:573 msgid "Mediums with no disc IDs:" msgstr "Support sans ID de disque :" -#: ../root/statistics/Index.js:576 +#: ../root/statistics/Index.js:580 msgid "Mediums with at least one disc ID:" msgstr "Support avec au moins un ID de disque :" -#: ../root/statistics/Index.js:607 ../root/statistics/stats.js:621 +#: ../root/statistics/Index.js:611 ../root/statistics/stats.js:747 msgid "Release Groups" msgstr "Groupes de parution :" -#: ../root/statistics/Index.js:611 +#: ../root/statistics/Index.js:615 msgid "Primary Types" msgstr "Types principaux" -#: ../root/statistics/Index.js:637 +#: ../root/statistics/Index.js:641 msgid "Secondary Types" msgstr "Types secondaires" -#: ../root/statistics/Index.js:665 ../root/statistics/Index.js:669 -#: ../root/statistics/stats.js:525 +#: ../root/statistics/Index.js:669 ../root/statistics/Index.js:673 +#: ../root/statistics/stats.js:651 msgid "Recordings" msgstr "Enregistrements" -#: ../root/statistics/Index.js:677 +#: ../root/statistics/Index.js:681 msgid "Videos:" msgstr "Vidéos :" -#: ../root/statistics/Index.js:682 +#: ../root/statistics/Index.js:686 msgctxt "recording" msgid "Standalone" msgstr "" -#: ../root/statistics/Index.js:687 +#: ../root/statistics/Index.js:691 msgid "With ISRCs" msgstr "" -#: ../root/statistics/Index.js:698 ../root/statistics/Index.js:726 -#: ../root/statistics/Index.js:788 ../root/statistics/Index.js:816 -#: ../root/statistics/Index.js:844 ../root/statistics/Index.js:866 -#: ../root/statistics/Index.js:896 +#: ../root/statistics/Index.js:702 ../root/statistics/Index.js:730 +#: ../root/statistics/Index.js:792 ../root/statistics/Index.js:820 +#: ../root/statistics/Index.js:848 ../root/statistics/Index.js:870 +#: ../root/statistics/Index.js:900 msgid "Types" msgstr "Types" -#: ../root/statistics/Index.js:715 ../root/statistics/Index.js:743 -#: ../root/statistics/Index.js:777 ../root/statistics/Index.js:805 -#: ../root/statistics/Index.js:833 ../root/statistics/Index.js:885 -#: ../root/statistics/Index.js:913 +#: ../root/statistics/Index.js:719 ../root/statistics/Index.js:747 +#: ../root/statistics/Index.js:781 ../root/statistics/Index.js:809 +#: ../root/statistics/Index.js:837 ../root/statistics/Index.js:889 +#: ../root/statistics/Index.js:917 msgid "None" msgstr "Aucun" -#: ../root/statistics/Index.js:722 ../root/statistics/LanguagesScripts.js:75 -#: ../root/statistics/stats.js:743 +#: ../root/statistics/Index.js:726 ../root/statistics/LanguagesScripts.js:75 +#: ../root/statistics/stats.js:869 msgid "Works" msgstr "Œuvres" -#: ../root/statistics/Index.js:748 +#: ../root/statistics/Index.js:752 msgid "With ISWCs" msgstr "" -#: ../root/statistics/Index.js:758 +#: ../root/statistics/Index.js:762 msgid "Attributes" msgstr "Attributs" -#: ../root/statistics/Index.js:784 ../root/statistics/stats.js:39 +#: ../root/statistics/Index.js:788 ../root/statistics/stats.js:39 msgid "Areas" msgstr "Régions" -#: ../root/statistics/Index.js:812 ../root/statistics/stats.js:405 +#: ../root/statistics/Index.js:816 ../root/statistics/stats.js:531 msgid "Places" msgstr "Lieux" -#: ../root/statistics/Index.js:840 ../root/statistics/stats.js:627 +#: ../root/statistics/Index.js:844 ../root/statistics/stats.js:753 msgctxt "plural" msgid "Series" msgstr "Séries" -#: ../root/statistics/Index.js:862 ../root/statistics/stats.js:309 +#: ../root/statistics/Index.js:866 ../root/statistics/stats.js:435 msgid "Instruments" msgstr "Instruments" -#: ../root/statistics/Index.js:892 ../root/statistics/stats.js:303 +#: ../root/statistics/Index.js:896 ../root/statistics/stats.js:429 msgid "Events" msgstr "Événements" -#: ../root/statistics/Index.js:920 +#: ../root/statistics/Index.js:937 +msgid "Of releases" +msgstr "" + +#: ../root/statistics/Index.js:944 ../root/statistics/Index.js:977 +msgid "Generic" +msgstr "" + +#: ../root/statistics/Index.js:953 +msgid "Owned music" +msgstr "Musique possédée" + +#: ../root/statistics/Index.js:962 +msgid "Wishlist" +msgstr "Liste de souhaits" + +#: ../root/statistics/Index.js:970 +msgid "Of events" +msgstr "" + +#: ../root/statistics/Index.js:986 +msgid "Of type Attending" +msgstr "" + +#: ../root/statistics/Index.js:995 +msgid "Of type Maybe attending" +msgstr "" + +#: ../root/statistics/Index.js:1006 +msgid "Of areas" +msgstr "" + +#: ../root/statistics/Index.js:1012 +msgid "Of artists" +msgstr "" + +#: ../root/statistics/Index.js:1018 +msgid "Of instruments" +msgstr "" + +#: ../root/statistics/Index.js:1024 +msgid "Of labels" +msgstr "" + +#: ../root/statistics/Index.js:1030 +msgid "Of places" +msgstr "" + +#: ../root/statistics/Index.js:1036 +msgid "Of recordings" +msgstr "" + +#: ../root/statistics/Index.js:1042 +msgid "Of release groups" +msgstr "" + +#: ../root/statistics/Index.js:1048 +msgid "Of series" +msgstr "" + +#: ../root/statistics/Index.js:1054 +msgid "Of works" +msgstr "" + +#: ../root/statistics/Index.js:1060 +msgid "Public" +msgstr "Public" + +#: ../root/statistics/Index.js:1066 +msgid "Private" +msgstr "Privé" + +#: ../root/statistics/Index.js:1072 +msgid "With collaborators" +msgstr "" + +#: ../root/statistics/Index.js:1079 msgid "Editors, Edits, and Votes" msgstr "Éditeurs, modifications et votes" -#: ../root/statistics/Index.js:927 +#: ../root/statistics/Index.js:1086 msgid "Editors (valid):" msgstr "Éditeurs (valides) :" -#: ../root/statistics/Index.js:933 +#: ../root/statistics/Index.js:1092 msgid "active ever:" msgstr "actif à ce jour :" -#: ../root/statistics/Index.js:941 +#: ../root/statistics/Index.js:1100 msgid "who edited and/or voted in the last 7 days:" msgstr "qui a effectué des modifications et/ou voté durant les 7 derniers jours :" -#: ../root/statistics/Index.js:950 +#: ../root/statistics/Index.js:1109 msgid "who edited in the last 7 days:" msgstr "qui a effectué des modifications durant les 7 derniers jours :" -#: ../root/statistics/Index.js:958 +#: ../root/statistics/Index.js:1117 msgid "who voted in the last 7 days:" msgstr "qui a voté durant les 7 derniers jours :" -#: ../root/statistics/Index.js:965 +#: ../root/statistics/Index.js:1124 msgid "who edit:" msgstr "qui effectue des modifications :" -#: ../root/statistics/Index.js:972 +#: ../root/statistics/Index.js:1131 msgid "who vote:" msgstr "qui votent :" -#: ../root/statistics/Index.js:979 +#: ../root/statistics/Index.js:1138 msgid "who leave edit notes:" msgstr "qui ont laissé des notes de modification :" -#: ../root/statistics/Index.js:986 +#: ../root/statistics/Index.js:1145 msgid "who use tags:" msgstr "qui utilisent des balises :" -#: ../root/statistics/Index.js:993 +#: ../root/statistics/Index.js:1152 msgid "who use ratings:" msgstr "qui utilisent des évaluations :" -#: ../root/statistics/Index.js:1002 +#: ../root/statistics/Index.js:1161 msgid "who use subscriptions:" msgstr "qui utilisent des abonnements :" -#: ../root/statistics/Index.js:1011 +#: ../root/statistics/Index.js:1170 msgid "who use collections:" msgstr "qui utilisent des collections :" -#: ../root/statistics/Index.js:1021 +#: ../root/statistics/Index.js:1180 msgid "who have registered applications:" msgstr "qui ont enregistré des applications :" -#: ../root/statistics/Index.js:1030 +#: ../root/statistics/Index.js:1189 msgid "validated email only:" msgstr "courriels validés seulement :" -#: ../root/statistics/Index.js:1036 +#: ../root/statistics/Index.js:1195 msgid "inactive:" msgstr "inactif :" -#: ../root/statistics/Index.js:1041 +#: ../root/statistics/Index.js:1200 msgid "Editors (deleted):" msgstr "Éditeurs (supprimés) :" -#: ../root/statistics/Index.js:1051 ../root/statistics/Index.js:1098 +#: ../root/statistics/Index.js:1210 ../root/statistics/Index.js:1257 msgid "Edits:" msgstr "Modifications :" -#: ../root/statistics/Index.js:1057 +#: ../root/statistics/Index.js:1216 msgid "Open:" msgstr "Ouvertes : " -#: ../root/statistics/Index.js:1063 +#: ../root/statistics/Index.js:1222 msgid "Applied:" msgstr "Appliquées :" -#: ../root/statistics/Index.js:1069 +#: ../root/statistics/Index.js:1228 msgid "Voted down:" msgstr "Rejetées par vote :" -#: ../root/statistics/Index.js:1075 +#: ../root/statistics/Index.js:1234 msgid "Failed (dependency):" msgstr "Échec (dépendance) :" -#: ../root/statistics/Index.js:1081 +#: ../root/statistics/Index.js:1240 msgid "Failed (prerequisite):" msgstr "Échec (pré-requis) :" -#: ../root/statistics/Index.js:1087 +#: ../root/statistics/Index.js:1246 msgid "Failed (internal error):" msgstr "Échec (erreur interne) :" -#: ../root/statistics/Index.js:1093 +#: ../root/statistics/Index.js:1252 msgid "Cancelled:" msgstr "Annulées :" -#: ../root/statistics/Index.js:1104 ../root/statistics/Index.js:1156 +#: ../root/statistics/Index.js:1263 ../root/statistics/Index.js:1315 msgid "Last 7 days:" msgstr "7 derniers jours :" -#: ../root/statistics/Index.js:1111 ../root/statistics/Index.js:1163 +#: ../root/statistics/Index.js:1270 ../root/statistics/Index.js:1322 msgid "Yesterday:" msgstr "Hier :" -#: ../root/statistics/Index.js:1118 ../root/statistics/stats.js:706 +#: ../root/statistics/Index.js:1277 ../root/statistics/stats.js:832 msgid "Votes" msgstr "Votes" -#: ../root/statistics/Index.js:1121 ../root/statistics/Index.js:1150 +#: ../root/statistics/Index.js:1280 ../root/statistics/Index.js:1309 msgid "Votes:" msgstr "Votes :" -#: ../root/statistics/Index.js:1127 +#: ../root/statistics/Index.js:1286 msgctxt "vote" msgid "Approve" msgstr "Approuver" -#: ../root/statistics/Index.js:1133 +#: ../root/statistics/Index.js:1292 msgctxt "vote" msgid "Yes" msgstr "Oui" -#: ../root/statistics/Index.js:1139 +#: ../root/statistics/Index.js:1298 msgctxt "vote" msgid "No" msgstr "Non" -#: ../root/statistics/Index.js:1145 +#: ../root/statistics/Index.js:1304 msgctxt "vote" msgid "Abstain" msgstr "S’abstenir" @@ -2204,744 +2286,824 @@ msgstr "Total de toutes les pistes d’ébauches de CD" msgid "CDStub tracks" msgstr "Pistes de l’ébauche de CD" -#: ../root/statistics/stats.js:170 ../root/statistics/stats.js:171 +#: ../root/statistics/stats.js:177 +msgid "Collections with collaborators" +msgstr "" + +#: ../root/statistics/stats.js:183 +msgid "Private collections" +msgstr "" + +#: ../root/statistics/stats.js:189 +msgid "Public collections" +msgstr "" + +#: ../root/statistics/stats.js:195 +msgid "Area collections" +msgstr "" + +#: ../root/statistics/stats.js:201 +msgid "Artist collections" +msgstr "" + +#: ../root/statistics/stats.js:207 +msgid "Collections of type Attending" +msgstr "" + +#: ../root/statistics/stats.js:213 +msgid "Collections of type Event" +msgstr "" + +#: ../root/statistics/stats.js:219 +msgid "Event collections (all types)" +msgstr "" + +#: ../root/statistics/stats.js:225 +msgid "Instrument collections" +msgstr "" + +#: ../root/statistics/stats.js:231 +msgid "Label collections" +msgstr "" + +#: ../root/statistics/stats.js:237 +msgid "Collections of type Maybe attending" +msgstr "" + +#: ../root/statistics/stats.js:243 +msgid "Collections of type Owned music" +msgstr "" + +#: ../root/statistics/stats.js:249 +msgid "Place collections" +msgstr "" + +#: ../root/statistics/stats.js:255 +msgid "Recording collections" +msgstr "" + +#: ../root/statistics/stats.js:261 +msgid "Collections of type Release" +msgstr "" + +#: ../root/statistics/stats.js:267 +msgid "Release collections (all types)" +msgstr "" + +#: ../root/statistics/stats.js:273 +msgid "Release group collections" +msgstr "" + +#: ../root/statistics/stats.js:279 +msgid "Series collections" +msgstr "" + +#: ../root/statistics/stats.js:285 +msgid "Collections of type Wishlist" +msgstr "" + +#: ../root/statistics/stats.js:291 +msgid "Work collections" +msgstr "" + +#: ../root/statistics/stats.js:296 ../root/statistics/stats.js:297 msgid "Pieces of Cover Art" msgstr "Illustrations" -#: ../root/statistics/stats.js:176 +#: ../root/statistics/stats.js:302 msgid "Count of all Disc IDs" msgstr "Total de tous les ID de disques" -#: ../root/statistics/stats.js:182 +#: ../root/statistics/stats.js:308 msgid "Count of all edits" msgstr "Total de toutes les modifications" -#: ../root/statistics/stats.js:189 +#: ../root/statistics/stats.js:315 msgid "All edits that have been applied" msgstr "Toutes les modifications ont été appliquées" -#: ../root/statistics/stats.js:190 +#: ../root/statistics/stats.js:316 msgid "Applied edits" msgstr "Modifications appliquées" -#: ../root/statistics/stats.js:195 ../root/statistics/stats.js:196 +#: ../root/statistics/stats.js:321 ../root/statistics/stats.js:322 msgid "Cancelled edits" msgstr "Modification annulées" -#: ../root/statistics/stats.js:201 +#: ../root/statistics/stats.js:327 msgid "All edits that have hit an error" msgstr "Toutes les modifications ayant provoqué une erreur" -#: ../root/statistics/stats.js:202 +#: ../root/statistics/stats.js:328 msgid "Error edits" msgstr "Modifications en erreur" -#: ../root/statistics/stats.js:207 +#: ../root/statistics/stats.js:333 msgid "Evalnochange edits" msgstr "Modifications « evalnochange » (évaluation pas de changement)" -#: ../root/statistics/stats.js:208 +#: ../root/statistics/stats.js:334 msgid "Evalnochange Edits" msgstr "Modifications « evalnochange » (évaluation pas de changement)" -#: ../root/statistics/stats.js:213 +#: ../root/statistics/stats.js:339 msgid "All edits that have failed dependency checks" msgstr "Toutes les modifications ayant échoué les contrôles de dépendance" -#: ../root/statistics/stats.js:214 +#: ../root/statistics/stats.js:340 msgid "Failed edits (dependency)" msgstr "Modifications en échec (dépendance)" -#: ../root/statistics/stats.js:219 +#: ../root/statistics/stats.js:345 msgid "All edits that have failed prerequisite checks" msgstr "Toutes les modifications ayant échoué les contrôles de prérequis" -#: ../root/statistics/stats.js:220 +#: ../root/statistics/stats.js:346 msgid "Failed edits (prerequisite)" msgstr "Modifications en échec (pré-requis)" -#: ../root/statistics/stats.js:225 +#: ../root/statistics/stats.js:351 msgid "All edits that have failed by being voted down" msgstr "Toutes les modifications ayant échoué par vote négatif" -#: ../root/statistics/stats.js:226 +#: ../root/statistics/stats.js:352 msgid "Failed edits (voted down)" msgstr "Modifications rejetées par vote" -#: ../root/statistics/stats.js:231 +#: ../root/statistics/stats.js:357 msgid "Count of open edits" msgstr "Nombre de modifications ouvertes" -#: ../root/statistics/stats.js:232 +#: ../root/statistics/stats.js:358 msgid "Open Edits" msgstr "Modifications ouvertes" -#: ../root/statistics/stats.js:237 +#: ../root/statistics/stats.js:363 msgid "Count of edits per day" msgstr "Nombre de modifications par jour" -#: ../root/statistics/stats.js:239 +#: ../root/statistics/stats.js:365 msgid "Edits per day" msgstr "Modifications par jour" -#: ../root/statistics/stats.js:244 +#: ../root/statistics/stats.js:370 msgid "Count of edits per week" msgstr "Nombre de modifications par semaine" -#: ../root/statistics/stats.js:245 +#: ../root/statistics/stats.js:371 msgid "Edits per week" msgstr "Modifications par semaine " -#: ../root/statistics/stats.js:250 +#: ../root/statistics/stats.js:376 msgid "Count of all editors" msgstr "Total de tous les éditeurs" -#: ../root/statistics/stats.js:252 +#: ../root/statistics/stats.js:378 msgid "Editors (all)" msgstr "Éditeurs (tous)" -#: ../root/statistics/stats.js:258 +#: ../root/statistics/stats.js:384 msgid "Count of active editors (editing or voting) during the last week" msgstr "Nombre d’éditeurs actifs (édition ou vote) durant la dernière semaine" -#: ../root/statistics/stats.js:260 +#: ../root/statistics/stats.js:386 msgid "Active Users" msgstr "Utilisateurs actifs" -#: ../root/statistics/stats.js:265 +#: ../root/statistics/stats.js:391 msgid "Count of deleted editors" msgstr "Nombre d’éditeurs supprimés" -#: ../root/statistics/stats.js:267 +#: ../root/statistics/stats.js:393 msgid "Editors (deleted)" msgstr "Éditeurs (supprimés)" -#: ../root/statistics/stats.js:273 +#: ../root/statistics/stats.js:399 msgid "Count of editors who have submitted edits during the last 7 days" msgstr "Nombre d’éditeurs qui ont envoyé des modifications durant les 7 derniers jours" -#: ../root/statistics/stats.js:275 +#: ../root/statistics/stats.js:401 msgid "Active Editors" msgstr "Éditeurs actifs" -#: ../root/statistics/stats.js:280 +#: ../root/statistics/stats.js:406 msgid "Count of non-deleted editors" msgstr "Nombre d’éditeurs non supprimés" -#: ../root/statistics/stats.js:282 +#: ../root/statistics/stats.js:408 msgid "Editors (valid)" msgstr "Éditeurs (valides)" -#: ../root/statistics/stats.js:287 +#: ../root/statistics/stats.js:413 msgid "Count of active editors" msgstr "Nombre d’éditeurs actifs" -#: ../root/statistics/stats.js:289 +#: ../root/statistics/stats.js:415 msgid "Editors (valid & active ever)" msgstr "Éditeurs (valides & actifs à ce jour) :" -#: ../root/statistics/stats.js:295 +#: ../root/statistics/stats.js:421 msgid "Count of editors who have voted on during the last 7 days" msgstr "Nombre d’éditeurs qui ont voté durant les 7 derniers jours" -#: ../root/statistics/stats.js:297 +#: ../root/statistics/stats.js:423 msgid "Active Voters" msgstr "Électeurs actifs" -#: ../root/statistics/stats.js:302 +#: ../root/statistics/stats.js:428 msgid "Count of all events" msgstr "Total de tous les événements" -#: ../root/statistics/stats.js:308 +#: ../root/statistics/stats.js:434 msgid "Count of all instruments" msgstr "Total de tous les instruments" -#: ../root/statistics/stats.js:314 +#: ../root/statistics/stats.js:440 msgid "Count of all IPIs" msgstr "Total de tous les IPI" -#: ../root/statistics/stats.js:315 +#: ../root/statistics/stats.js:441 msgid "IPIs" msgstr "IPI" -#: ../root/statistics/stats.js:320 +#: ../root/statistics/stats.js:446 msgid "Count of all IPIs for Artists" msgstr "Total de tous les IPI d’artistes" -#: ../root/statistics/stats.js:321 +#: ../root/statistics/stats.js:447 msgid "Artist IPIs" msgstr "IPI d’artiste" -#: ../root/statistics/stats.js:326 +#: ../root/statistics/stats.js:452 msgid "Count of all IPIs for Labels" msgstr "Total de tous les IPI de labels." -#: ../root/statistics/stats.js:327 +#: ../root/statistics/stats.js:453 msgid "Label IPIs" msgstr "IPI des labels" -#: ../root/statistics/stats.js:332 +#: ../root/statistics/stats.js:458 msgid "Count of all ISNIs" msgstr "Total de tous les ISNI" -#: ../root/statistics/stats.js:333 +#: ../root/statistics/stats.js:459 msgid "ISNIs" msgstr "ISNI" -#: ../root/statistics/stats.js:338 +#: ../root/statistics/stats.js:464 msgid "Count of all ISNIs for Artists" msgstr "Total de tous les ISNI pour les artistes" -#: ../root/statistics/stats.js:339 +#: ../root/statistics/stats.js:465 msgid "Artist ISNIs" msgstr "ISNI d’artistes" -#: ../root/statistics/stats.js:344 +#: ../root/statistics/stats.js:470 msgid "Count of all ISNIs for Labels" msgstr "Total de tous les ISNI pour les labels" -#: ../root/statistics/stats.js:345 +#: ../root/statistics/stats.js:471 msgid "Label ISNIs" msgstr "INSI des labels" -#: ../root/statistics/stats.js:350 ../root/statistics/stats.js:356 +#: ../root/statistics/stats.js:476 ../root/statistics/stats.js:482 msgid "Count of all ISRCs" msgstr "Total de tous les ISRC" -#: ../root/statistics/stats.js:351 +#: ../root/statistics/stats.js:477 msgid "ISRCs" msgstr "ISRC" -#: ../root/statistics/stats.js:357 +#: ../root/statistics/stats.js:483 msgid "ISRCs (all)" msgstr "ISRCS (tous)" -#: ../root/statistics/stats.js:362 ../root/statistics/stats.js:368 +#: ../root/statistics/stats.js:488 ../root/statistics/stats.js:494 msgid "Count of all ISWCs" msgstr "Total de tous les ISWC" -#: ../root/statistics/stats.js:363 +#: ../root/statistics/stats.js:489 msgid "ISWCs" msgstr "ISWC" -#: ../root/statistics/stats.js:369 +#: ../root/statistics/stats.js:495 msgid "ISWCs (all)" msgstr "ISWC (tous)" -#: ../root/statistics/stats.js:374 +#: ../root/statistics/stats.js:500 msgid "Count of all labels" msgstr "Total de tous les labels" -#: ../root/statistics/stats.js:380 +#: ../root/statistics/stats.js:506 msgid "Labels with no country set" msgstr "Labels sans pays d’indiqué" -#: ../root/statistics/stats.js:386 +#: ../root/statistics/stats.js:512 msgid "Count of all mediums" msgstr "Total de tous les supports" -#: ../root/statistics/stats.js:392 +#: ../root/statistics/stats.js:518 msgid "Mediums with no format set" msgstr "Support sans format de défini" -#: ../root/statistics/stats.js:393 +#: ../root/statistics/stats.js:519 msgid "Unknown Format (medium)" msgstr "Format inconnu (support)" -#: ../root/statistics/stats.js:398 +#: ../root/statistics/stats.js:524 msgid "Count of all Mediums with Disc IDs" msgstr "Total de tous les supports avec des ID de disque" -#: ../root/statistics/stats.js:399 +#: ../root/statistics/stats.js:525 msgid "Mediums with Disc IDs" msgstr "Support avec ID de disque" -#: ../root/statistics/stats.js:404 +#: ../root/statistics/stats.js:530 msgid "Count of all places" msgstr "Total de tous les lieux" -#: ../root/statistics/stats.js:410 +#: ../root/statistics/stats.js:536 msgid "Count of all Releases at Default Data Quality" msgstr "Total de toutes les parutions avec une qualité de données par défaut" -#: ../root/statistics/stats.js:411 +#: ../root/statistics/stats.js:537 msgid "Default Data Quality" msgstr "Qualité par défaut des données" -#: ../root/statistics/stats.js:416 +#: ../root/statistics/stats.js:542 msgid "Count of all Releases at High Data Quality" msgstr "Total de toutes les parutions avec une qualité de données élevée" -#: ../root/statistics/stats.js:417 +#: ../root/statistics/stats.js:543 msgid "High Data Quality" msgstr "Données de haute qualité" -#: ../root/statistics/stats.js:422 +#: ../root/statistics/stats.js:548 msgid "Count of all Releases at Low Data Quality" msgstr "Total de toutes les parutions avec une qualité de données basse" -#: ../root/statistics/stats.js:423 +#: ../root/statistics/stats.js:549 msgid "Low Data Quality" msgstr "Données de mauvaise qualité" -#: ../root/statistics/stats.js:428 +#: ../root/statistics/stats.js:554 msgid "Count of all Releases at Normal Data Quality" msgstr "Total de toutes les parutions avec une qualité de données normale" -#: ../root/statistics/stats.js:429 +#: ../root/statistics/stats.js:555 msgid "Normal Data Quality" msgstr "Qualité de données normale" -#: ../root/statistics/stats.js:434 +#: ../root/statistics/stats.js:560 msgid "Count of all Releases at Unknown Data Quality" msgstr "Total de toutes les parutions avec une qualité de données inconnue" -#: ../root/statistics/stats.js:435 +#: ../root/statistics/stats.js:561 msgid "Unknown Data Quality" msgstr "Qualité de données inconnue" -#: ../root/statistics/stats.js:440 +#: ../root/statistics/stats.js:566 msgid "Count of all Ratings" msgstr "Total de toutes les évaluations" -#: ../root/statistics/stats.js:441 +#: ../root/statistics/stats.js:567 msgid "Ratings" msgstr "Évaluations" -#: ../root/statistics/stats.js:446 +#: ../root/statistics/stats.js:572 msgid "Count of all Artist Ratings" msgstr "Total de toutes les évaluations d’artistes" -#: ../root/statistics/stats.js:447 +#: ../root/statistics/stats.js:573 msgid "Artist Ratings" msgstr "Évaluations des artistes" -#: ../root/statistics/stats.js:452 +#: ../root/statistics/stats.js:578 msgid "Count of all Label Ratings" msgstr "Total de toutes les évaluations de labels" -#: ../root/statistics/stats.js:453 +#: ../root/statistics/stats.js:579 msgid "Label Ratings" msgstr "Évaluations des labels" -#: ../root/statistics/stats.js:458 +#: ../root/statistics/stats.js:584 msgid "Count of all Place Ratings" msgstr "Total de toutes les évaluations de lieux" -#: ../root/statistics/stats.js:459 +#: ../root/statistics/stats.js:585 msgid "Place Ratings" msgstr "Évaluations des lieux" -#: ../root/statistics/stats.js:464 +#: ../root/statistics/stats.js:590 msgid "Count of all Ratings (raw)" msgstr "Total de toutes les évaluations (brut)" -#: ../root/statistics/stats.js:465 +#: ../root/statistics/stats.js:591 msgid "Ratings (raw)" msgstr "Évaluations (brut)" -#: ../root/statistics/stats.js:470 +#: ../root/statistics/stats.js:596 msgid "Count of all Artist Ratings (raw)" msgstr "Total de toutes les évaluations d’artistes (brut)" -#: ../root/statistics/stats.js:471 +#: ../root/statistics/stats.js:597 msgid "Artist Ratings (raw)" msgstr "Évaluations des artistes (brut)" -#: ../root/statistics/stats.js:476 +#: ../root/statistics/stats.js:602 msgid "Count of all Label Ratings (raw)" msgstr "Total de toutes les évaluations de labels (brut)" -#: ../root/statistics/stats.js:477 +#: ../root/statistics/stats.js:603 msgid "Label Ratings (raw)" msgstr "Évaluations des labels (brut)" -#: ../root/statistics/stats.js:482 +#: ../root/statistics/stats.js:608 msgid "Count of all Place Ratings (raw)" msgstr "Total de toutes les évaluations de lieux (brut)" -#: ../root/statistics/stats.js:483 +#: ../root/statistics/stats.js:609 msgid "Place Ratings (raw)" msgstr "Évaluations des lieux (brut)" -#: ../root/statistics/stats.js:488 +#: ../root/statistics/stats.js:614 msgid "Count of all Recording Ratings (raw)" msgstr "Total de toutes les évaluations d’enregistrement (brut)" -#: ../root/statistics/stats.js:489 +#: ../root/statistics/stats.js:615 msgid "Recording Ratings (raw)" msgstr "Évaluations des enregistrements (brut)" -#: ../root/statistics/stats.js:494 +#: ../root/statistics/stats.js:620 msgid "Count of all Release Group Ratings (raw)" msgstr "Total de toutes les évaluations de groupes de parution (brut)" -#: ../root/statistics/stats.js:495 +#: ../root/statistics/stats.js:621 msgid "Release Group Ratings (raw)" msgstr "Évaluations des groupes de parution (brut)" -#: ../root/statistics/stats.js:500 +#: ../root/statistics/stats.js:626 msgid "Count of all Work Ratings (raw)" msgstr "Total de toutes les évaluations d’œuvre (brut)" -#: ../root/statistics/stats.js:501 +#: ../root/statistics/stats.js:627 msgid "Work Ratings (raw)" msgstr "Évaluations d’œuvres (brut)" -#: ../root/statistics/stats.js:506 +#: ../root/statistics/stats.js:632 msgid "Count of all Recording Ratings" msgstr "Total de toutes les évaluations d’enregistrement" -#: ../root/statistics/stats.js:507 +#: ../root/statistics/stats.js:633 msgid "Recording Ratings" msgstr "Évaluations des enregistrements" -#: ../root/statistics/stats.js:512 +#: ../root/statistics/stats.js:638 msgid "Count of all Release Group Ratings" msgstr "Total de toutes les évaluations de groupes de parution" -#: ../root/statistics/stats.js:513 +#: ../root/statistics/stats.js:639 msgid "Release Group Ratings" msgstr "Évaluations des groupes de parution" -#: ../root/statistics/stats.js:518 +#: ../root/statistics/stats.js:644 msgid "Count of all Work Ratings" msgstr "Total de toutes les évaluations d’œuvre" -#: ../root/statistics/stats.js:519 +#: ../root/statistics/stats.js:645 msgid "Work Ratings" msgstr "Évaluations d’œuvres" -#: ../root/statistics/stats.js:524 +#: ../root/statistics/stats.js:650 msgid "Count of all recordings" msgstr "Total de tous les enregistrements" -#: ../root/statistics/stats.js:530 +#: ../root/statistics/stats.js:656 msgid "Count of all Recordings with ISRCs" msgstr "Total de tous les enregistrement avec un ISRC" -#: ../root/statistics/stats.js:531 +#: ../root/statistics/stats.js:657 msgid "Recordings with ISRCs" msgstr "Enregistrements avec ISRC" -#: ../root/statistics/stats.js:536 +#: ../root/statistics/stats.js:662 msgid "Count of all standalone recordings" msgstr "" -#: ../root/statistics/stats.js:537 +#: ../root/statistics/stats.js:663 msgid "Standalone recordings" msgstr "" -#: ../root/statistics/stats.js:542 +#: ../root/statistics/stats.js:668 msgid "Count of all releases" msgstr "Total de toutes les parutions" -#: ../root/statistics/stats.js:548 +#: ../root/statistics/stats.js:674 msgid "Releases with no country set" msgstr "Parutions sans pays de déterminé" -#: ../root/statistics/stats.js:554 ../root/statistics/stats.js:555 -#: ../root/statistics/stats.js:572 +#: ../root/statistics/stats.js:680 ../root/statistics/stats.js:681 +#: ../root/statistics/stats.js:698 msgid "Releases with Amazon Cover Art" msgstr "Parutions avec des illustrations d’Amazon" -#: ../root/statistics/stats.js:560 ../root/statistics/stats.js:561 +#: ../root/statistics/stats.js:686 ../root/statistics/stats.js:687 msgid "Releases with CAA Cover Art" msgstr "Parutions avec des illustrations CAA" -#: ../root/statistics/stats.js:566 ../root/statistics/stats.js:567 +#: ../root/statistics/stats.js:692 ../root/statistics/stats.js:693 msgid "Releases with No Cover Art" msgstr "Parutions sans illustration" -#: ../root/statistics/stats.js:573 +#: ../root/statistics/stats.js:699 msgid "Releases with Cover Art from Relationships" msgstr "Parutions avec des illustrations provenant des relations" -#: ../root/statistics/stats.js:578 +#: ../root/statistics/stats.js:704 msgid "Releases with a no-format medium" msgstr "Parutions avec un support « pas de format »" -#: ../root/statistics/stats.js:579 +#: ../root/statistics/stats.js:705 msgid "Unknown Format (release)" msgstr "Format inconnu (parution)" -#: ../root/statistics/stats.js:584 ../root/statistics/stats.js:585 +#: ../root/statistics/stats.js:710 ../root/statistics/stats.js:711 msgid "Releases with Cover Art" msgstr "Parutions avec illustration" -#: ../root/statistics/stats.js:590 +#: ../root/statistics/stats.js:716 msgid "Count of all Releases with Disc IDs" msgstr "Total de toutes les parutions avec des ID de disque" -#: ../root/statistics/stats.js:591 +#: ../root/statistics/stats.js:717 msgid "Releases with Disc IDs" msgstr "Parutions avec ID de disque" -#: ../root/statistics/stats.js:596 +#: ../root/statistics/stats.js:722 msgid "Releases with no language set" msgstr "Parutions sans langue de déterminée" -#: ../root/statistics/stats.js:597 +#: ../root/statistics/stats.js:723 msgid "Unknown Language" msgstr "Langue inconnue" -#: ../root/statistics/stats.js:602 +#: ../root/statistics/stats.js:728 msgid "Count of all Releases not V.A." msgstr "Total de toutes les parutions n’étant pas par des artistes divers" -#: ../root/statistics/stats.js:603 +#: ../root/statistics/stats.js:729 msgid "Releases not VA" msgstr "Parutions non « artistes divers »" -#: ../root/statistics/stats.js:608 +#: ../root/statistics/stats.js:734 msgid "Releases with no script set" msgstr "Parutions sans système d’écriture de déterminé" -#: ../root/statistics/stats.js:609 +#: ../root/statistics/stats.js:735 msgid "Unknown Script" msgstr "Système d’écriture inconnu" -#: ../root/statistics/stats.js:614 +#: ../root/statistics/stats.js:740 msgid "Count of all Releases by Various Artists" msgstr "Total de toutes les parutions par Artistes divers" -#: ../root/statistics/stats.js:615 +#: ../root/statistics/stats.js:741 msgid "Releases (VA)" msgstr "Parutions (artistes divers)" -#: ../root/statistics/stats.js:620 +#: ../root/statistics/stats.js:746 msgid "Count of all release groups" msgstr "Total de tous les groupes de parution" -#: ../root/statistics/stats.js:626 +#: ../root/statistics/stats.js:752 msgid "Count of all series" msgstr "Total de toutes les séries" -#: ../root/statistics/stats.js:632 +#: ../root/statistics/stats.js:758 msgid "Count of all Tags" msgstr "Total de toutes les balises" -#: ../root/statistics/stats.js:633 +#: ../root/statistics/stats.js:759 msgid "Tags" msgstr "Balises" -#: ../root/statistics/stats.js:638 +#: ../root/statistics/stats.js:764 msgid "Count of all Tags (raw)" msgstr "Total de toutes les balises (brut)" -#: ../root/statistics/stats.js:639 +#: ../root/statistics/stats.js:765 msgid "Tags (raw)" msgstr "Balises (brut)" -#: ../root/statistics/stats.js:644 +#: ../root/statistics/stats.js:770 msgid "Count of all Area Tags (raw)" msgstr "Total de toutes les balises de régions (brut)" -#: ../root/statistics/stats.js:645 +#: ../root/statistics/stats.js:771 msgid "Area Tags (raw)" msgstr "Balises de régions (brut)" -#: ../root/statistics/stats.js:650 +#: ../root/statistics/stats.js:776 msgid "Count of all Artist Tags (raw)" msgstr "Total de toutes les balises d’artistes (brut)" -#: ../root/statistics/stats.js:651 +#: ../root/statistics/stats.js:777 msgid "Artist Tags (raw)" msgstr "Balises d’artiste (brut)" -#: ../root/statistics/stats.js:656 +#: ../root/statistics/stats.js:782 msgid "Count of all Instrument Tags (raw)" msgstr "Total de toutes les balises d’instruments (brut)" -#: ../root/statistics/stats.js:657 +#: ../root/statistics/stats.js:783 msgid "Instrument Tags (raw)" msgstr "Balises d’instruments (brut)" -#: ../root/statistics/stats.js:662 +#: ../root/statistics/stats.js:788 msgid "Count of all Label Tags (raw)" msgstr "Total de toutes les balises de labels (brut)" -#: ../root/statistics/stats.js:663 +#: ../root/statistics/stats.js:789 msgid "Label Tags (raw)" msgstr "Balises de labels (brut)" -#: ../root/statistics/stats.js:668 +#: ../root/statistics/stats.js:794 msgid "Count of all Recording Tags (raw)" msgstr "Total de toutes les balises d’enregistrements (brut)" -#: ../root/statistics/stats.js:669 +#: ../root/statistics/stats.js:795 msgid "Recording Tags (raw)" msgstr "Balises des enregistrements (brut)" -#: ../root/statistics/stats.js:674 +#: ../root/statistics/stats.js:800 msgid "Count of all Release Tags (raw)" msgstr "Total de toutes les balises de parution (brut)" -#: ../root/statistics/stats.js:675 +#: ../root/statistics/stats.js:801 msgid "Release Tags (raw)" msgstr "Balises de parution (brut)" -#: ../root/statistics/stats.js:680 +#: ../root/statistics/stats.js:806 msgid "Count of all Release Group Tags (raw)" msgstr "Total de toutes les balises de groupe de parution (brut)" -#: ../root/statistics/stats.js:681 +#: ../root/statistics/stats.js:807 msgid "Release Group Tags (raw)" msgstr "Balises des groupes de parution (brut)" -#: ../root/statistics/stats.js:686 +#: ../root/statistics/stats.js:812 msgid "Count of all Series Tags (raw)" msgstr "Total de toutes les balises de séries (brut)" -#: ../root/statistics/stats.js:687 +#: ../root/statistics/stats.js:813 msgid "Series Tags (raw)" msgstr "Balises de séries (brut)" -#: ../root/statistics/stats.js:692 +#: ../root/statistics/stats.js:818 msgid "Count of all Work Tags (raw)" msgstr "Total de toutes les balises d’œuvres (brut)" -#: ../root/statistics/stats.js:693 +#: ../root/statistics/stats.js:819 msgid "Work Tags (raw)" msgstr "Balises d’œuvres (brut)" -#: ../root/statistics/stats.js:698 +#: ../root/statistics/stats.js:824 msgid "Count of all Tracks" msgstr "Total de toutes les pistes" -#: ../root/statistics/stats.js:699 +#: ../root/statistics/stats.js:825 msgid "Tracks" msgstr "Pistes" -#: ../root/statistics/stats.js:704 +#: ../root/statistics/stats.js:830 msgid "Count of all votes" msgstr "Total de tous les votes" -#: ../root/statistics/stats.js:711 +#: ../root/statistics/stats.js:837 msgid "Count of all Abstain votes" msgstr "Total de tous les votes d’abstention" -#: ../root/statistics/stats.js:712 +#: ../root/statistics/stats.js:838 msgid "Abstentions" msgstr "Abstentions" -#: ../root/statistics/stats.js:717 +#: ../root/statistics/stats.js:843 msgid "Count of all No votes" msgstr "Total de tous les votes Non" -#: ../root/statistics/stats.js:718 +#: ../root/statistics/stats.js:844 msgid "No Votes" msgstr "Pas de vote" -#: ../root/statistics/stats.js:723 +#: ../root/statistics/stats.js:849 msgid "Count of votes per day" msgstr "Nombre de votes par jour" -#: ../root/statistics/stats.js:725 +#: ../root/statistics/stats.js:851 msgid "Votes per day" msgstr "Votes par jour" -#: ../root/statistics/stats.js:730 +#: ../root/statistics/stats.js:856 msgid "Count of votes per week" msgstr "Nombre de votes par semaine" -#: ../root/statistics/stats.js:731 +#: ../root/statistics/stats.js:857 msgid "Votes per week" msgstr "Votes par semaine" -#: ../root/statistics/stats.js:736 +#: ../root/statistics/stats.js:862 msgid "Count of all Yes votes" msgstr "Total de tous les votes Oui" -#: ../root/statistics/stats.js:737 +#: ../root/statistics/stats.js:863 msgid "Yes Votes" msgstr "Votes oui" -#: ../root/statistics/stats.js:742 +#: ../root/statistics/stats.js:868 msgid "Count of all works" msgstr "Total de toutes les œuvres" -#: ../root/statistics/stats.js:748 +#: ../root/statistics/stats.js:874 msgid "Count of all Works with ISWCs" msgstr "" -#: ../root/statistics/stats.js:749 +#: ../root/statistics/stats.js:875 msgid "Works with ISWCs" msgstr "" -#: ../root/statistics/stats.js:751 +#: ../root/statistics/stats.js:877 msgid "/day" msgstr "/jour" -#: ../root/statistics/stats.js:760 +#: ../root/statistics/stats.js:886 msgid "Count of all Releases with {n} Disc IDs" msgstr "Total de toutes les parutions avec {n} ID de disque" -#: ../root/statistics/stats.js:762 +#: ../root/statistics/stats.js:888 msgid "Releases with 1 Disc ID" msgid_plural "Releases with {n} Disc IDs" msgstr[0] "Parutions avec 1 ID de disque" msgstr[1] "Parutions avec {n} ID de disque" -#: ../root/statistics/stats.js:772 +#: ../root/statistics/stats.js:898 msgid "Count of all Mediums with {n} Disc IDs" msgstr "Total de tous les supports avec {n} ID de disque" -#: ../root/statistics/stats.js:774 +#: ../root/statistics/stats.js:900 msgid "Mediums with 1 Disc ID" msgid_plural "Mediums with {n} Disc IDs" msgstr[0] "Support avec 1 ID de disque" msgstr[1] "Support avec {n} ID de disque" -#: ../root/statistics/stats.js:784 +#: ../root/statistics/stats.js:910 msgid "Count of all Recordings with {n} Releases" msgstr "Total de tous les enregistrements avec {n} parutions" -#: ../root/statistics/stats.js:786 +#: ../root/statistics/stats.js:912 msgid "Recordings with 1 Release" msgid_plural "Recordings with {n} Releases" msgstr[0] "Enregistrements avec 1 parution" msgstr[1] "Enregistrements avec {n} parutions" -#: ../root/statistics/stats.js:796 +#: ../root/statistics/stats.js:922 msgid "Count of all Release Groups with {n} Releases" msgstr "Total de tous les groupes de parution ayant {n} parutions" -#: ../root/statistics/stats.js:798 +#: ../root/statistics/stats.js:924 msgid "Release Groups with 1 Release" msgid_plural "Release Groups with {n} Releases" msgstr[0] "Groupes de parution avec 1 parution" msgstr[1] "Groupes de parution avec {n} parution" -#: ../root/statistics/stats.js:840 +#: ../root/statistics/stats.js:966 msgid "{country} artists" msgstr "{country} artistes" -#: ../root/statistics/stats.js:847 +#: ../root/statistics/stats.js:973 msgid "{country} labels" msgstr "{country} labels" -#: ../root/statistics/stats.js:854 +#: ../root/statistics/stats.js:980 msgid "{country} releases" msgstr "Parutions de {country}" -#: ../root/statistics/stats.js:866 +#: ../root/statistics/stats.js:992 msgid "{name} releases" msgstr "Parutions {name}" -#: ../root/statistics/stats.js:873 +#: ../root/statistics/stats.js:999 msgid "{name} mediums" msgstr "Supports {name}" -#: ../root/statistics/stats.js:885 +#: ../root/statistics/stats.js:1011 msgid "{language} releases" msgstr "Parutions de {language}" -#: ../root/statistics/stats.js:892 +#: ../root/statistics/stats.js:1018 msgid "l_{first}_{second} Relationships" msgstr "l_{first}_{second} relations" -#: ../root/statistics/stats.js:913 +#: ../root/statistics/stats.js:1039 msgid "{script} releases" msgstr "Parutions {script}" diff --git a/po/statistics.it.po b/po/statistics.it.po index 50984d54190..02db1e65451 100644 --- a/po/statistics.it.po +++ b/po/statistics.it.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: MusicBrainz\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2021-07-24 18:59+0000\n" +"PO-Revision-Date: 2021-09-28 21:23+0000\n" "Last-Translator: Luca Salini\n" "Language-Team: Italian (http://www.transifex.com/musicbrainz/musicbrainz/language/it/)\n" "MIME-Version: 1.0\n" @@ -1136,15 +1136,15 @@ msgid "Draw a rectangle on either graph" msgstr "Disegna un rettangolo su uno dei grafici" #: ../root/statistics/layout.tt:4 ../root/statistics/Editors.js:98 -#: ../root/statistics/Editors.js:109 ../root/statistics/Index.js:924 +#: ../root/statistics/Editors.js:109 ../root/statistics/Index.js:1083 #: ../root/statistics/StatisticsLayout.js:82 msgid "Editors" msgstr "Editor" #: ../root/statistics/layout.tt:4 ../root/statistics/Edits.js:37 #: ../root/statistics/Edits.js:41 ../root/statistics/Edits.js:50 -#: ../root/statistics/Index.js:1048 ../root/statistics/StatisticsLayout.js:72 -#: ../root/statistics/stats.js:184 +#: ../root/statistics/Index.js:1207 ../root/statistics/StatisticsLayout.js:72 +#: ../root/statistics/stats.js:310 msgid "Edits" msgstr "Modifiche" @@ -1231,20 +1231,20 @@ msgstr "Posizione" msgid "Country" msgstr "Paese" -#: ../root/statistics/Countries.js:53 ../root/statistics/Index.js:227 -#: ../root/statistics/Index.js:231 ../root/statistics/stats.js:45 +#: ../root/statistics/Countries.js:53 ../root/statistics/Index.js:231 +#: ../root/statistics/Index.js:235 ../root/statistics/stats.js:45 msgid "Artists" msgstr "Artisti" #: ../root/statistics/Countries.js:57 ../root/statistics/CoverArt.js:105 -#: ../root/statistics/Formats.js:56 ../root/statistics/Index.js:359 +#: ../root/statistics/Formats.js:56 ../root/statistics/Index.js:363 #: ../root/statistics/LanguagesScripts.js:71 -#: ../root/statistics/LanguagesScripts.js:152 ../root/statistics/stats.js:543 +#: ../root/statistics/LanguagesScripts.js:152 ../root/statistics/stats.js:669 msgid "Releases" msgstr "Pubblicazioni" -#: ../root/statistics/Countries.js:61 ../root/statistics/Index.js:694 -#: ../root/statistics/Index.js:701 ../root/statistics/stats.js:375 +#: ../root/statistics/Countries.js:61 ../root/statistics/Index.js:698 +#: ../root/statistics/Index.js:705 ../root/statistics/stats.js:501 msgid "Labels" msgstr "Etichette" @@ -1254,7 +1254,7 @@ msgid "Total" msgstr "Totale" #: ../root/statistics/Countries.js:87 ../root/statistics/stats.js:57 -#: ../root/statistics/stats.js:381 ../root/statistics/stats.js:549 +#: ../root/statistics/stats.js:507 ../root/statistics/stats.js:675 msgid "Unknown Country" msgstr "Paese sconosciuto" @@ -1409,7 +1409,7 @@ msgstr "Formato" msgid "% of total releases" msgstr "% delle pubblicazioni totali" -#: ../root/statistics/Formats.js:58 ../root/statistics/stats.js:387 +#: ../root/statistics/Formats.js:58 ../root/statistics/stats.js:513 msgid "Mediums" msgstr "Supporti" @@ -1429,27 +1429,27 @@ msgstr "Metadati di base" msgid "Core Entities" msgstr "Entità centrali" -#: ../root/statistics/Index.js:92 ../root/statistics/Index.js:234 +#: ../root/statistics/Index.js:92 ../root/statistics/Index.js:238 msgid "Artists:" msgstr "Artisti:" -#: ../root/statistics/Index.js:96 ../root/statistics/Index.js:614 -#: ../root/statistics/Index.js:640 +#: ../root/statistics/Index.js:96 ../root/statistics/Index.js:618 +#: ../root/statistics/Index.js:644 msgid "Release Groups:" msgstr "Gruppi di pubblicazioni:" -#: ../root/statistics/Index.js:100 ../root/statistics/Index.js:362 -#: ../root/statistics/Index.js:384 ../root/statistics/Index.js:410 -#: ../root/statistics/Index.js:436 ../root/statistics/Index.js:470 -#: ../root/statistics/Index.js:519 +#: ../root/statistics/Index.js:100 ../root/statistics/Index.js:366 +#: ../root/statistics/Index.js:388 ../root/statistics/Index.js:414 +#: ../root/statistics/Index.js:440 ../root/statistics/Index.js:474 +#: ../root/statistics/Index.js:523 msgid "Releases:" msgstr "Pubblicazioni:" -#: ../root/statistics/Index.js:104 ../root/statistics/Index.js:563 +#: ../root/statistics/Index.js:104 ../root/statistics/Index.js:567 msgid "Mediums:" msgstr "Supporti:" -#: ../root/statistics/Index.js:108 ../root/statistics/Index.js:672 +#: ../root/statistics/Index.js:108 ../root/statistics/Index.js:676 msgid "Recordings:" msgstr "Registrazioni:" @@ -1461,8 +1461,8 @@ msgstr "Tracce:" msgid "Labels:" msgstr "Etichette:" -#: ../root/statistics/Index.js:120 ../root/statistics/Index.js:729 -#: ../root/statistics/Index.js:761 +#: ../root/statistics/Index.js:120 ../root/statistics/Index.js:733 +#: ../root/statistics/Index.js:765 msgid "Works:" msgstr "Opere:" @@ -1470,24 +1470,24 @@ msgstr "Opere:" msgid "URLs:" msgstr "URL:" -#: ../root/statistics/Index.js:128 ../root/statistics/Index.js:791 +#: ../root/statistics/Index.js:128 ../root/statistics/Index.js:795 msgid "Areas:" msgstr "Aree:" -#: ../root/statistics/Index.js:132 ../root/statistics/Index.js:819 +#: ../root/statistics/Index.js:132 ../root/statistics/Index.js:823 msgid "Places:" msgstr "Luoghi:" -#: ../root/statistics/Index.js:136 ../root/statistics/Index.js:847 +#: ../root/statistics/Index.js:136 ../root/statistics/Index.js:851 msgctxt "plural" msgid "Series:" msgstr "Serie:" -#: ../root/statistics/Index.js:140 ../root/statistics/Index.js:869 +#: ../root/statistics/Index.js:140 ../root/statistics/Index.js:873 msgid "Instruments:" msgstr "Strumenti:" -#: ../root/statistics/Index.js:144 ../root/statistics/Index.js:899 +#: ../root/statistics/Index.js:144 ../root/statistics/Index.js:903 msgid "Events:" msgstr "Eventi:" @@ -1507,422 +1507,504 @@ msgstr "Editor (validi / eliminati):" msgid "Relationships:" msgstr "Relazioni:" -#: ../root/statistics/Index.js:167 +#: ../root/statistics/Index.js:167 ../root/statistics/Index.js:924 +#: ../root/statistics/Index.js:928 ../root/statistics/Index.js:931 +#: ../root/statistics/stats.js:171 +msgid "Collections" +msgstr "Collezioni" + +#: ../root/statistics/Index.js:171 msgid "CD Stubs (all time / current):" msgstr "Bozze CD (da sempre/attualmente)" -#: ../root/statistics/Index.js:176 +#: ../root/statistics/Index.js:180 msgid "Tags (raw / aggregated):" msgstr "Tag (grezzi/aggregati)" -#: ../root/statistics/Index.js:182 +#: ../root/statistics/Index.js:186 msgid "Ratings (raw / aggregated):" msgstr "Valutazioni (grezze/aggregate)" -#: ../root/statistics/Index.js:190 +#: ../root/statistics/Index.js:194 msgid "Identifiers" msgstr "Identificatori" -#: ../root/statistics/Index.js:193 +#: ../root/statistics/Index.js:197 msgid "MBIDs:" msgstr "MBID:" -#: ../root/statistics/Index.js:197 +#: ../root/statistics/Index.js:201 msgid "ISRCs (all / unique):" msgstr "ISRC (totali/unici):" -#: ../root/statistics/Index.js:203 +#: ../root/statistics/Index.js:207 msgid "ISWCs (all / unique):" msgstr "ISWC (totali/unici):" -#: ../root/statistics/Index.js:209 ../root/statistics/Index.js:514 +#: ../root/statistics/Index.js:213 ../root/statistics/Index.js:518 msgid "Disc IDs:" msgstr "ID disco:" -#: ../root/statistics/Index.js:213 +#: ../root/statistics/Index.js:217 msgid "Barcodes:" msgstr "Codici a barre:" -#: ../root/statistics/Index.js:217 +#: ../root/statistics/Index.js:221 msgid "IPIs:" msgstr "IPI:" -#: ../root/statistics/Index.js:221 +#: ../root/statistics/Index.js:225 msgid "ISNIs:" msgstr "ISNI:" -#: ../root/statistics/Index.js:240 +#: ../root/statistics/Index.js:244 msgid "of type Person:" msgstr "Persone:" -#: ../root/statistics/Index.js:246 +#: ../root/statistics/Index.js:250 msgid "of type Group:" msgstr "Gruppi:" -#: ../root/statistics/Index.js:252 +#: ../root/statistics/Index.js:256 msgid "of type Orchestra:" msgstr "Orchestre:" -#: ../root/statistics/Index.js:258 +#: ../root/statistics/Index.js:262 msgid "of type Choir:" msgstr "Cori:" -#: ../root/statistics/Index.js:264 +#: ../root/statistics/Index.js:268 msgid "of type Character:" msgstr "Personaggi:" -#: ../root/statistics/Index.js:270 +#: ../root/statistics/Index.js:274 msgid "of type Other:" msgstr "Altro:" -#: ../root/statistics/Index.js:276 +#: ../root/statistics/Index.js:280 msgid "with no type set:" msgstr "senza un tipo impostato:" -#: ../root/statistics/Index.js:282 +#: ../root/statistics/Index.js:286 msgid "with appearances in artist credits:" msgstr "che compaiono in accreditamenti artista:" -#: ../root/statistics/Index.js:288 +#: ../root/statistics/Index.js:292 msgid "with no appearances in artist credits:" msgstr "che non compaiono in accreditamenti artista:" -#: ../root/statistics/Index.js:293 +#: ../root/statistics/Index.js:297 msgid "Non-group artists:" msgstr "Artisti non gruppi:" -#: ../root/statistics/Index.js:299 +#: ../root/statistics/Index.js:303 msgid "Male:" msgstr "Uomini:" -#: ../root/statistics/Index.js:310 +#: ../root/statistics/Index.js:314 msgid "Female:" msgstr "Donne:" -#: ../root/statistics/Index.js:321 +#: ../root/statistics/Index.js:325 msgid "Other gender:" msgstr "Altro sesso:" -#: ../root/statistics/Index.js:332 +#: ../root/statistics/Index.js:336 msgid "Gender not applicable:" msgstr "Sesso non applicabile:" -#: ../root/statistics/Index.js:343 +#: ../root/statistics/Index.js:347 msgid "with no gender set:" msgstr "senza un sesso impostato:" -#: ../root/statistics/Index.js:355 +#: ../root/statistics/Index.js:359 msgid "Releases, Data Quality, and Disc IDs" msgstr "Pubblicazioni, qualità dati e ID disco" -#: ../root/statistics/Index.js:368 +#: ../root/statistics/Index.js:372 msgid "by various artists:" msgstr "di artisti vari:" -#: ../root/statistics/Index.js:374 +#: ../root/statistics/Index.js:378 msgid "by a single artist:" msgstr "di un artista singolo:" -#: ../root/statistics/Index.js:381 +#: ../root/statistics/Index.js:385 msgid "Release Status" msgstr "Status delle pubblicazioni" -#: ../root/statistics/Index.js:400 +#: ../root/statistics/Index.js:404 msgid "No status set" msgstr "Nessuno status impostato" -#: ../root/statistics/Index.js:407 +#: ../root/statistics/Index.js:411 msgid "Release Packaging" msgstr "Confezione delle pubblicazioni" -#: ../root/statistics/Index.js:426 +#: ../root/statistics/Index.js:430 msgid "No packaging set" msgstr "Nessuna confezione impostata" -#: ../root/statistics/Index.js:433 +#: ../root/statistics/Index.js:437 msgid "Cover Art Sources" msgstr "Fonti delle copertine" -#: ../root/statistics/Index.js:442 +#: ../root/statistics/Index.js:446 msgid "CAA:" msgstr "CAA:" -#: ../root/statistics/Index.js:448 +#: ../root/statistics/Index.js:452 msgid "Amazon:" msgstr "Amazon:" -#: ../root/statistics/Index.js:454 +#: ../root/statistics/Index.js:458 msgid "URL Relationships:" msgstr "Relazioni con URL:" -#: ../root/statistics/Index.js:460 +#: ../root/statistics/Index.js:464 msgid "No front cover art:" msgstr "Nessuna copertina frontale:" -#: ../root/statistics/Index.js:467 +#: ../root/statistics/Index.js:471 msgid "Data Quality" msgstr "Qualità dati" -#: ../root/statistics/Index.js:476 +#: ../root/statistics/Index.js:480 msgid "High Data Quality:" msgstr "Qualità dati alta:" -#: ../root/statistics/Index.js:482 +#: ../root/statistics/Index.js:486 msgid "Default Data Quality:" msgstr "Qualità dati default:" -#: ../root/statistics/Index.js:489 +#: ../root/statistics/Index.js:493 msgid "Normal Data Quality:" msgstr "Qualità dati normale:" -#: ../root/statistics/Index.js:496 +#: ../root/statistics/Index.js:500 msgid "Unknown Data Quality:" msgstr "Qualità dati sconosciuta:" -#: ../root/statistics/Index.js:504 +#: ../root/statistics/Index.js:508 msgid "Low Data Quality:" msgstr "Qualità dati bassa:" -#: ../root/statistics/Index.js:511 ../root/statistics/stats.js:177 +#: ../root/statistics/Index.js:515 ../root/statistics/stats.js:303 msgid "Disc IDs" msgstr "ID disco" -#: ../root/statistics/Index.js:525 +#: ../root/statistics/Index.js:529 msgid "Releases with no disc IDs:" msgstr "Pubblicazioni senza ID disco:" -#: ../root/statistics/Index.js:532 +#: ../root/statistics/Index.js:536 msgid "Releases with at least one disc ID:" msgstr "Pubblicazioni con almeno un ID disco:" -#: ../root/statistics/Index.js:543 ../root/statistics/Index.js:587 +#: ../root/statistics/Index.js:547 ../root/statistics/Index.js:591 msgid "with {num} disc ID:" msgid_plural "with {num} disc IDs:" msgstr[0] "con {num} ID disco:" msgstr[1] "con {num} ID disco:" -#: ../root/statistics/Index.js:558 ../root/statistics/Index.js:600 +#: ../root/statistics/Index.js:562 ../root/statistics/Index.js:604 msgid "with 10 or more disc IDs:" msgstr "con 10 o più ID disco:" -#: ../root/statistics/Index.js:569 +#: ../root/statistics/Index.js:573 msgid "Mediums with no disc IDs:" msgstr "Supporti senza ID disco:" -#: ../root/statistics/Index.js:576 +#: ../root/statistics/Index.js:580 msgid "Mediums with at least one disc ID:" msgstr "Supporti con almeno un ID disco:" -#: ../root/statistics/Index.js:607 ../root/statistics/stats.js:621 +#: ../root/statistics/Index.js:611 ../root/statistics/stats.js:747 msgid "Release Groups" msgstr "Gruppi di pubblicazioni" -#: ../root/statistics/Index.js:611 +#: ../root/statistics/Index.js:615 msgid "Primary Types" msgstr "Tipi primari" -#: ../root/statistics/Index.js:637 +#: ../root/statistics/Index.js:641 msgid "Secondary Types" msgstr "Tipi secondari" -#: ../root/statistics/Index.js:665 ../root/statistics/Index.js:669 -#: ../root/statistics/stats.js:525 +#: ../root/statistics/Index.js:669 ../root/statistics/Index.js:673 +#: ../root/statistics/stats.js:651 msgid "Recordings" msgstr "Registrazioni" -#: ../root/statistics/Index.js:677 +#: ../root/statistics/Index.js:681 msgid "Videos:" msgstr "Video:" -#: ../root/statistics/Index.js:682 +#: ../root/statistics/Index.js:686 msgctxt "recording" msgid "Standalone" msgstr "A sé stanti" -#: ../root/statistics/Index.js:687 +#: ../root/statistics/Index.js:691 msgid "With ISRCs" msgstr "Con ISRC" -#: ../root/statistics/Index.js:698 ../root/statistics/Index.js:726 -#: ../root/statistics/Index.js:788 ../root/statistics/Index.js:816 -#: ../root/statistics/Index.js:844 ../root/statistics/Index.js:866 -#: ../root/statistics/Index.js:896 +#: ../root/statistics/Index.js:702 ../root/statistics/Index.js:730 +#: ../root/statistics/Index.js:792 ../root/statistics/Index.js:820 +#: ../root/statistics/Index.js:848 ../root/statistics/Index.js:870 +#: ../root/statistics/Index.js:900 msgid "Types" msgstr "Tipi" -#: ../root/statistics/Index.js:715 ../root/statistics/Index.js:743 -#: ../root/statistics/Index.js:777 ../root/statistics/Index.js:805 -#: ../root/statistics/Index.js:833 ../root/statistics/Index.js:885 -#: ../root/statistics/Index.js:913 +#: ../root/statistics/Index.js:719 ../root/statistics/Index.js:747 +#: ../root/statistics/Index.js:781 ../root/statistics/Index.js:809 +#: ../root/statistics/Index.js:837 ../root/statistics/Index.js:889 +#: ../root/statistics/Index.js:917 msgid "None" msgstr "Nessuno" -#: ../root/statistics/Index.js:722 ../root/statistics/LanguagesScripts.js:75 -#: ../root/statistics/stats.js:743 +#: ../root/statistics/Index.js:726 ../root/statistics/LanguagesScripts.js:75 +#: ../root/statistics/stats.js:869 msgid "Works" msgstr "Opere" -#: ../root/statistics/Index.js:748 +#: ../root/statistics/Index.js:752 msgid "With ISWCs" msgstr "Con ISWC" -#: ../root/statistics/Index.js:758 +#: ../root/statistics/Index.js:762 msgid "Attributes" msgstr "Attributi" -#: ../root/statistics/Index.js:784 ../root/statistics/stats.js:39 +#: ../root/statistics/Index.js:788 ../root/statistics/stats.js:39 msgid "Areas" msgstr "Aree" -#: ../root/statistics/Index.js:812 ../root/statistics/stats.js:405 +#: ../root/statistics/Index.js:816 ../root/statistics/stats.js:531 msgid "Places" msgstr "Luoghi" -#: ../root/statistics/Index.js:840 ../root/statistics/stats.js:627 +#: ../root/statistics/Index.js:844 ../root/statistics/stats.js:753 msgctxt "plural" msgid "Series" msgstr "Serie" -#: ../root/statistics/Index.js:862 ../root/statistics/stats.js:309 +#: ../root/statistics/Index.js:866 ../root/statistics/stats.js:435 msgid "Instruments" msgstr "Strumenti" -#: ../root/statistics/Index.js:892 ../root/statistics/stats.js:303 +#: ../root/statistics/Index.js:896 ../root/statistics/stats.js:429 msgid "Events" msgstr "Eventi" -#: ../root/statistics/Index.js:920 +#: ../root/statistics/Index.js:937 +msgid "Of releases" +msgstr "Di pubblicazioni" + +#: ../root/statistics/Index.js:944 ../root/statistics/Index.js:977 +msgid "Generic" +msgstr "Generico" + +#: ../root/statistics/Index.js:953 +msgid "Owned music" +msgstr "Musica in mio possesso" + +#: ../root/statistics/Index.js:962 +msgid "Wishlist" +msgstr "Lista desideri" + +#: ../root/statistics/Index.js:970 +msgid "Of events" +msgstr "Di eventi" + +#: ../root/statistics/Index.js:986 +msgid "Of type Attending" +msgstr "Di tipo Partecipo" + +#: ../root/statistics/Index.js:995 +msgid "Of type Maybe attending" +msgstr "Di tipo Forse partecipo" + +#: ../root/statistics/Index.js:1006 +msgid "Of areas" +msgstr "Di aree" + +#: ../root/statistics/Index.js:1012 +msgid "Of artists" +msgstr "Di artisti" + +#: ../root/statistics/Index.js:1018 +msgid "Of instruments" +msgstr "Di strumenti" + +#: ../root/statistics/Index.js:1024 +msgid "Of labels" +msgstr "Di etichette" + +#: ../root/statistics/Index.js:1030 +msgid "Of places" +msgstr "Di luoghi" + +#: ../root/statistics/Index.js:1036 +msgid "Of recordings" +msgstr "Di registrazioni" + +#: ../root/statistics/Index.js:1042 +msgid "Of release groups" +msgstr "Di gruppi di pubblicazioni" + +#: ../root/statistics/Index.js:1048 +msgid "Of series" +msgstr "Di serie" + +#: ../root/statistics/Index.js:1054 +msgid "Of works" +msgstr "Di opere" + +#: ../root/statistics/Index.js:1060 +msgid "Public" +msgstr "Pubblica" + +#: ../root/statistics/Index.js:1066 +msgid "Private" +msgstr "Privata" + +#: ../root/statistics/Index.js:1072 +msgid "With collaborators" +msgstr "Con collaboratori" + +#: ../root/statistics/Index.js:1079 msgid "Editors, Edits, and Votes" msgstr "Editor, modifiche e voti" -#: ../root/statistics/Index.js:927 +#: ../root/statistics/Index.js:1086 msgid "Editors (valid):" msgstr "Editor (validi):" -#: ../root/statistics/Index.js:933 +#: ../root/statistics/Index.js:1092 msgid "active ever:" msgstr "attivi almeno una volta:" -#: ../root/statistics/Index.js:941 +#: ../root/statistics/Index.js:1100 msgid "who edited and/or voted in the last 7 days:" msgstr "che hanno inserito modifiche e/o votato negli ultimi 7 giorni:" -#: ../root/statistics/Index.js:950 +#: ../root/statistics/Index.js:1109 msgid "who edited in the last 7 days:" msgstr "che hanno inserito modifiche negli ultimi 7 giorni:" -#: ../root/statistics/Index.js:958 +#: ../root/statistics/Index.js:1117 msgid "who voted in the last 7 days:" msgstr "che hanno votato negli ultimi 7 giorni:" -#: ../root/statistics/Index.js:965 +#: ../root/statistics/Index.js:1124 msgid "who edit:" msgstr "che inseriscono modifiche:" -#: ../root/statistics/Index.js:972 +#: ../root/statistics/Index.js:1131 msgid "who vote:" msgstr "che votano:" -#: ../root/statistics/Index.js:979 +#: ../root/statistics/Index.js:1138 msgid "who leave edit notes:" msgstr "che lasciano note di modifica:" -#: ../root/statistics/Index.js:986 +#: ../root/statistics/Index.js:1145 msgid "who use tags:" msgstr "che usano i tag:" -#: ../root/statistics/Index.js:993 +#: ../root/statistics/Index.js:1152 msgid "who use ratings:" msgstr "che usano le valutazioni:" -#: ../root/statistics/Index.js:1002 +#: ../root/statistics/Index.js:1161 msgid "who use subscriptions:" msgstr "che usano le iscrizioni:" -#: ../root/statistics/Index.js:1011 +#: ../root/statistics/Index.js:1170 msgid "who use collections:" msgstr "che usano le collezioni:" -#: ../root/statistics/Index.js:1021 +#: ../root/statistics/Index.js:1180 msgid "who have registered applications:" msgstr "che hanno registrato applicazioni:" -#: ../root/statistics/Index.js:1030 +#: ../root/statistics/Index.js:1189 msgid "validated email only:" msgstr "solo con email verificata:" -#: ../root/statistics/Index.js:1036 +#: ../root/statistics/Index.js:1195 msgid "inactive:" msgstr "non attivi:" -#: ../root/statistics/Index.js:1041 +#: ../root/statistics/Index.js:1200 msgid "Editors (deleted):" msgstr "Editor (eliminati):" -#: ../root/statistics/Index.js:1051 ../root/statistics/Index.js:1098 +#: ../root/statistics/Index.js:1210 ../root/statistics/Index.js:1257 msgid "Edits:" msgstr "Modifiche:" -#: ../root/statistics/Index.js:1057 +#: ../root/statistics/Index.js:1216 msgid "Open:" msgstr "In corso:" -#: ../root/statistics/Index.js:1063 +#: ../root/statistics/Index.js:1222 msgid "Applied:" msgstr "Applicate:" -#: ../root/statistics/Index.js:1069 +#: ../root/statistics/Index.js:1228 msgid "Voted down:" msgstr "Rifiutate:" -#: ../root/statistics/Index.js:1075 +#: ../root/statistics/Index.js:1234 msgid "Failed (dependency):" msgstr "Fallite (dipendenze):" -#: ../root/statistics/Index.js:1081 +#: ../root/statistics/Index.js:1240 msgid "Failed (prerequisite):" msgstr "Fallite (prerequisiti):" -#: ../root/statistics/Index.js:1087 +#: ../root/statistics/Index.js:1246 msgid "Failed (internal error):" msgstr "Fallite (errore interno):" -#: ../root/statistics/Index.js:1093 +#: ../root/statistics/Index.js:1252 msgid "Cancelled:" msgstr "Cancellate:" -#: ../root/statistics/Index.js:1104 ../root/statistics/Index.js:1156 +#: ../root/statistics/Index.js:1263 ../root/statistics/Index.js:1315 msgid "Last 7 days:" msgstr "Ultimi 7 giorni:" -#: ../root/statistics/Index.js:1111 ../root/statistics/Index.js:1163 +#: ../root/statistics/Index.js:1270 ../root/statistics/Index.js:1322 msgid "Yesterday:" msgstr "Ieri:" -#: ../root/statistics/Index.js:1118 ../root/statistics/stats.js:706 +#: ../root/statistics/Index.js:1277 ../root/statistics/stats.js:832 msgid "Votes" msgstr "Voti" -#: ../root/statistics/Index.js:1121 ../root/statistics/Index.js:1150 +#: ../root/statistics/Index.js:1280 ../root/statistics/Index.js:1309 msgid "Votes:" msgstr "Voti:" -#: ../root/statistics/Index.js:1127 +#: ../root/statistics/Index.js:1286 msgctxt "vote" msgid "Approve" msgstr "Approva" -#: ../root/statistics/Index.js:1133 +#: ../root/statistics/Index.js:1292 msgctxt "vote" msgid "Yes" msgstr "Sì" -#: ../root/statistics/Index.js:1139 +#: ../root/statistics/Index.js:1298 msgctxt "vote" msgid "No" msgstr "No" -#: ../root/statistics/Index.js:1145 +#: ../root/statistics/Index.js:1304 msgctxt "vote" msgid "Abstain" msgstr "Astenuto" @@ -2199,744 +2281,824 @@ msgstr "Numero totale di tracce di bozze CD" msgid "CDStub tracks" msgstr "Tracce di bozze CD" -#: ../root/statistics/stats.js:170 ../root/statistics/stats.js:171 +#: ../root/statistics/stats.js:177 +msgid "Collections with collaborators" +msgstr "Collezioni con collaboratori" + +#: ../root/statistics/stats.js:183 +msgid "Private collections" +msgstr "Collezioni private" + +#: ../root/statistics/stats.js:189 +msgid "Public collections" +msgstr "Collezioni pubbliche" + +#: ../root/statistics/stats.js:195 +msgid "Area collections" +msgstr "Collezioni di aree" + +#: ../root/statistics/stats.js:201 +msgid "Artist collections" +msgstr "Collezioni di artisti" + +#: ../root/statistics/stats.js:207 +msgid "Collections of type Attending" +msgstr "Collezioni di tipo Partecipo" + +#: ../root/statistics/stats.js:213 +msgid "Collections of type Event" +msgstr "Collezioni di tipo Evento" + +#: ../root/statistics/stats.js:219 +msgid "Event collections (all types)" +msgstr "Collezioni di eventi (tutti i tipi)" + +#: ../root/statistics/stats.js:225 +msgid "Instrument collections" +msgstr "Collezioni di strumenti" + +#: ../root/statistics/stats.js:231 +msgid "Label collections" +msgstr "Collezioni di etichette" + +#: ../root/statistics/stats.js:237 +msgid "Collections of type Maybe attending" +msgstr "Collezioni di tipo Forse partecipo" + +#: ../root/statistics/stats.js:243 +msgid "Collections of type Owned music" +msgstr "Collezioni di tipo Musica in mio possesso" + +#: ../root/statistics/stats.js:249 +msgid "Place collections" +msgstr "Collezioni di luoghi" + +#: ../root/statistics/stats.js:255 +msgid "Recording collections" +msgstr "Collezioni di registrazioni" + +#: ../root/statistics/stats.js:261 +msgid "Collections of type Release" +msgstr "Collezioni di tipo Pubblicazione" + +#: ../root/statistics/stats.js:267 +msgid "Release collections (all types)" +msgstr "Collezioni di pubblicazioni (tutti i tipi)" + +#: ../root/statistics/stats.js:273 +msgid "Release group collections" +msgstr "Collezioni di gruppi di pubblicazioni" + +#: ../root/statistics/stats.js:279 +msgid "Series collections" +msgstr "Collezioni di serie" + +#: ../root/statistics/stats.js:285 +msgid "Collections of type Wishlist" +msgstr "Collezioni di tipo Lista desideri" + +#: ../root/statistics/stats.js:291 +msgid "Work collections" +msgstr "Collezioni di opere" + +#: ../root/statistics/stats.js:296 ../root/statistics/stats.js:297 msgid "Pieces of Cover Art" msgstr "Immagini di copertina" -#: ../root/statistics/stats.js:176 +#: ../root/statistics/stats.js:302 msgid "Count of all Disc IDs" msgstr "Numero totale di ID disco" -#: ../root/statistics/stats.js:182 +#: ../root/statistics/stats.js:308 msgid "Count of all edits" msgstr "Numero totale di modifiche" -#: ../root/statistics/stats.js:189 +#: ../root/statistics/stats.js:315 msgid "All edits that have been applied" msgstr "Tutte le modifiche che sono state applicate" -#: ../root/statistics/stats.js:190 +#: ../root/statistics/stats.js:316 msgid "Applied edits" msgstr "Modifiche applicate" -#: ../root/statistics/stats.js:195 ../root/statistics/stats.js:196 +#: ../root/statistics/stats.js:321 ../root/statistics/stats.js:322 msgid "Cancelled edits" msgstr "Modifiche cancellate" -#: ../root/statistics/stats.js:201 +#: ../root/statistics/stats.js:327 msgid "All edits that have hit an error" msgstr "Tutte le modifiche che sono incorse in un errore" -#: ../root/statistics/stats.js:202 +#: ../root/statistics/stats.js:328 msgid "Error edits" msgstr "Modifiche incorse in un errore" -#: ../root/statistics/stats.js:207 +#: ../root/statistics/stats.js:333 msgid "Evalnochange edits" msgstr "Modifiche evalnochange" -#: ../root/statistics/stats.js:208 +#: ../root/statistics/stats.js:334 msgid "Evalnochange Edits" msgstr "Modifiche evalnochange" -#: ../root/statistics/stats.js:213 +#: ../root/statistics/stats.js:339 msgid "All edits that have failed dependency checks" msgstr "Tutte le modifiche che sono fallite a causa di controlli delle dipendenze" -#: ../root/statistics/stats.js:214 +#: ../root/statistics/stats.js:340 msgid "Failed edits (dependency)" msgstr "Modifiche fallite (dipendenze)" -#: ../root/statistics/stats.js:219 +#: ../root/statistics/stats.js:345 msgid "All edits that have failed prerequisite checks" msgstr "Tutte le modifiche che sono fallite a causa di controlli dei prerequisiti" -#: ../root/statistics/stats.js:220 +#: ../root/statistics/stats.js:346 msgid "Failed edits (prerequisite)" msgstr "Modifiche fallite (prerequisiti)" -#: ../root/statistics/stats.js:225 +#: ../root/statistics/stats.js:351 msgid "All edits that have failed by being voted down" msgstr "Tutte le modifiche che sono fallite perché rifiutate" -#: ../root/statistics/stats.js:226 +#: ../root/statistics/stats.js:352 msgid "Failed edits (voted down)" msgstr "Modifiche fallite (rifiutate)" -#: ../root/statistics/stats.js:231 +#: ../root/statistics/stats.js:357 msgid "Count of open edits" msgstr "Numero di modifiche in corso" -#: ../root/statistics/stats.js:232 +#: ../root/statistics/stats.js:358 msgid "Open Edits" msgstr "Modifiche in corso" -#: ../root/statistics/stats.js:237 +#: ../root/statistics/stats.js:363 msgid "Count of edits per day" msgstr "Numero di modifiche per giorno" -#: ../root/statistics/stats.js:239 +#: ../root/statistics/stats.js:365 msgid "Edits per day" msgstr "Modifiche per giorno" -#: ../root/statistics/stats.js:244 +#: ../root/statistics/stats.js:370 msgid "Count of edits per week" msgstr "Numero di modifiche per settimana" -#: ../root/statistics/stats.js:245 +#: ../root/statistics/stats.js:371 msgid "Edits per week" msgstr "Modifiche per settimana" -#: ../root/statistics/stats.js:250 +#: ../root/statistics/stats.js:376 msgid "Count of all editors" msgstr "Numero totale di editor" -#: ../root/statistics/stats.js:252 +#: ../root/statistics/stats.js:378 msgid "Editors (all)" msgstr "Editor (tutti)" -#: ../root/statistics/stats.js:258 +#: ../root/statistics/stats.js:384 msgid "Count of active editors (editing or voting) during the last week" msgstr "Numero di editor attivi (con modifiche o voti) nell'ultima settimana" -#: ../root/statistics/stats.js:260 +#: ../root/statistics/stats.js:386 msgid "Active Users" msgstr "Utenti attivi" -#: ../root/statistics/stats.js:265 +#: ../root/statistics/stats.js:391 msgid "Count of deleted editors" msgstr "Numero di editor eliminati" -#: ../root/statistics/stats.js:267 +#: ../root/statistics/stats.js:393 msgid "Editors (deleted)" msgstr "Editor (eliminati)" -#: ../root/statistics/stats.js:273 +#: ../root/statistics/stats.js:399 msgid "Count of editors who have submitted edits during the last 7 days" msgstr "Numero di editor che hanno inviato modifiche negli ultimi 7 giorni" -#: ../root/statistics/stats.js:275 +#: ../root/statistics/stats.js:401 msgid "Active Editors" msgstr "Editor attivi" -#: ../root/statistics/stats.js:280 +#: ../root/statistics/stats.js:406 msgid "Count of non-deleted editors" msgstr "Numero di editor non eliminati" -#: ../root/statistics/stats.js:282 +#: ../root/statistics/stats.js:408 msgid "Editors (valid)" msgstr "Editor (validi)" -#: ../root/statistics/stats.js:287 +#: ../root/statistics/stats.js:413 msgid "Count of active editors" msgstr "Numero di editor attivi" -#: ../root/statistics/stats.js:289 +#: ../root/statistics/stats.js:415 msgid "Editors (valid & active ever)" msgstr "Editor (validi & attivi almeno una volta)" -#: ../root/statistics/stats.js:295 +#: ../root/statistics/stats.js:421 msgid "Count of editors who have voted on during the last 7 days" msgstr "Numero di editor che hanno votato negli ultimi 7 giorni" -#: ../root/statistics/stats.js:297 +#: ../root/statistics/stats.js:423 msgid "Active Voters" msgstr "Votanti attivi" -#: ../root/statistics/stats.js:302 +#: ../root/statistics/stats.js:428 msgid "Count of all events" msgstr "Numero totale di eventi" -#: ../root/statistics/stats.js:308 +#: ../root/statistics/stats.js:434 msgid "Count of all instruments" msgstr "Numero totale di strumenti" -#: ../root/statistics/stats.js:314 +#: ../root/statistics/stats.js:440 msgid "Count of all IPIs" msgstr "Numero totale di IPI" -#: ../root/statistics/stats.js:315 +#: ../root/statistics/stats.js:441 msgid "IPIs" msgstr "IPI" -#: ../root/statistics/stats.js:320 +#: ../root/statistics/stats.js:446 msgid "Count of all IPIs for Artists" msgstr "Numero totale di IPI per artisti" -#: ../root/statistics/stats.js:321 +#: ../root/statistics/stats.js:447 msgid "Artist IPIs" msgstr "IPI di artisti" -#: ../root/statistics/stats.js:326 +#: ../root/statistics/stats.js:452 msgid "Count of all IPIs for Labels" msgstr "Numero totale di IPI per etichette" -#: ../root/statistics/stats.js:327 +#: ../root/statistics/stats.js:453 msgid "Label IPIs" msgstr "IPI di etichette" -#: ../root/statistics/stats.js:332 +#: ../root/statistics/stats.js:458 msgid "Count of all ISNIs" msgstr "Numero totale di ISNI" -#: ../root/statistics/stats.js:333 +#: ../root/statistics/stats.js:459 msgid "ISNIs" msgstr "ISNI" -#: ../root/statistics/stats.js:338 +#: ../root/statistics/stats.js:464 msgid "Count of all ISNIs for Artists" msgstr "Numero totale di ISNI per artisti" -#: ../root/statistics/stats.js:339 +#: ../root/statistics/stats.js:465 msgid "Artist ISNIs" msgstr "ISNI artista" -#: ../root/statistics/stats.js:344 +#: ../root/statistics/stats.js:470 msgid "Count of all ISNIs for Labels" msgstr "Numero totale di ISNI per etichette" -#: ../root/statistics/stats.js:345 +#: ../root/statistics/stats.js:471 msgid "Label ISNIs" msgstr "ISNI etichetta" -#: ../root/statistics/stats.js:350 ../root/statistics/stats.js:356 +#: ../root/statistics/stats.js:476 ../root/statistics/stats.js:482 msgid "Count of all ISRCs" msgstr "Numero totale di ISRC" -#: ../root/statistics/stats.js:351 +#: ../root/statistics/stats.js:477 msgid "ISRCs" msgstr "ISRC" -#: ../root/statistics/stats.js:357 +#: ../root/statistics/stats.js:483 msgid "ISRCs (all)" msgstr "ISRC (totali)" -#: ../root/statistics/stats.js:362 ../root/statistics/stats.js:368 +#: ../root/statistics/stats.js:488 ../root/statistics/stats.js:494 msgid "Count of all ISWCs" msgstr "Numero totale di ISWC" -#: ../root/statistics/stats.js:363 +#: ../root/statistics/stats.js:489 msgid "ISWCs" msgstr "ISWC" -#: ../root/statistics/stats.js:369 +#: ../root/statistics/stats.js:495 msgid "ISWCs (all)" msgstr "ISWC (totali)" -#: ../root/statistics/stats.js:374 +#: ../root/statistics/stats.js:500 msgid "Count of all labels" msgstr "Numero totale di etichette" -#: ../root/statistics/stats.js:380 +#: ../root/statistics/stats.js:506 msgid "Labels with no country set" msgstr "Etichette senza un Paese impostato" -#: ../root/statistics/stats.js:386 +#: ../root/statistics/stats.js:512 msgid "Count of all mediums" msgstr "Numero totale di supporti" -#: ../root/statistics/stats.js:392 +#: ../root/statistics/stats.js:518 msgid "Mediums with no format set" msgstr "Supporti senza un formato impostato" -#: ../root/statistics/stats.js:393 +#: ../root/statistics/stats.js:519 msgid "Unknown Format (medium)" msgstr "Formato sconosciuto (supporto)" -#: ../root/statistics/stats.js:398 +#: ../root/statistics/stats.js:524 msgid "Count of all Mediums with Disc IDs" msgstr "Numero totale di supporti con ID disco" -#: ../root/statistics/stats.js:399 +#: ../root/statistics/stats.js:525 msgid "Mediums with Disc IDs" msgstr "Supporti con ID disco" -#: ../root/statistics/stats.js:404 +#: ../root/statistics/stats.js:530 msgid "Count of all places" msgstr "Numero totale di luoghi" -#: ../root/statistics/stats.js:410 +#: ../root/statistics/stats.js:536 msgid "Count of all Releases at Default Data Quality" msgstr "Numero totale di pubblicazioni con qualità dati default" -#: ../root/statistics/stats.js:411 +#: ../root/statistics/stats.js:537 msgid "Default Data Quality" msgstr "Qualità dati default" -#: ../root/statistics/stats.js:416 +#: ../root/statistics/stats.js:542 msgid "Count of all Releases at High Data Quality" msgstr "Numero totale di pubblicazioni con qualità dati alta" -#: ../root/statistics/stats.js:417 +#: ../root/statistics/stats.js:543 msgid "High Data Quality" msgstr "Qualità dati alta" -#: ../root/statistics/stats.js:422 +#: ../root/statistics/stats.js:548 msgid "Count of all Releases at Low Data Quality" msgstr "Numero totale di pubblicazioni con qualità dati bassa" -#: ../root/statistics/stats.js:423 +#: ../root/statistics/stats.js:549 msgid "Low Data Quality" msgstr "Qualità dati bassa" -#: ../root/statistics/stats.js:428 +#: ../root/statistics/stats.js:554 msgid "Count of all Releases at Normal Data Quality" msgstr "Numero totale di pubblicazioni con qualità dati normale" -#: ../root/statistics/stats.js:429 +#: ../root/statistics/stats.js:555 msgid "Normal Data Quality" msgstr "Qualità dati normale" -#: ../root/statistics/stats.js:434 +#: ../root/statistics/stats.js:560 msgid "Count of all Releases at Unknown Data Quality" msgstr "Numero totale di pubblicazioni con qualità dati sconosciuta" -#: ../root/statistics/stats.js:435 +#: ../root/statistics/stats.js:561 msgid "Unknown Data Quality" msgstr "Qualità dati sconosciuta" -#: ../root/statistics/stats.js:440 +#: ../root/statistics/stats.js:566 msgid "Count of all Ratings" msgstr "Numero totale di valutazioni" -#: ../root/statistics/stats.js:441 +#: ../root/statistics/stats.js:567 msgid "Ratings" msgstr "Valutazioni" -#: ../root/statistics/stats.js:446 +#: ../root/statistics/stats.js:572 msgid "Count of all Artist Ratings" msgstr "Numero totale di valutazioni di artisti" -#: ../root/statistics/stats.js:447 +#: ../root/statistics/stats.js:573 msgid "Artist Ratings" msgstr "Valutazioni di artisti" -#: ../root/statistics/stats.js:452 +#: ../root/statistics/stats.js:578 msgid "Count of all Label Ratings" msgstr "Numero totale di valutazioni di etichette" -#: ../root/statistics/stats.js:453 +#: ../root/statistics/stats.js:579 msgid "Label Ratings" msgstr "Valutazioni di etichette" -#: ../root/statistics/stats.js:458 +#: ../root/statistics/stats.js:584 msgid "Count of all Place Ratings" msgstr "Numero totale di valutazioni di luoghi" -#: ../root/statistics/stats.js:459 +#: ../root/statistics/stats.js:585 msgid "Place Ratings" msgstr "Valutazioni di luoghi" -#: ../root/statistics/stats.js:464 +#: ../root/statistics/stats.js:590 msgid "Count of all Ratings (raw)" msgstr "Numero totale di valutazioni (grezzo)" -#: ../root/statistics/stats.js:465 +#: ../root/statistics/stats.js:591 msgid "Ratings (raw)" msgstr "Valutazioni (grezze)" -#: ../root/statistics/stats.js:470 +#: ../root/statistics/stats.js:596 msgid "Count of all Artist Ratings (raw)" msgstr "Numero totale di valutazioni di artisti (grezzo)" -#: ../root/statistics/stats.js:471 +#: ../root/statistics/stats.js:597 msgid "Artist Ratings (raw)" msgstr "Valutazioni di artisti (grezze)" -#: ../root/statistics/stats.js:476 +#: ../root/statistics/stats.js:602 msgid "Count of all Label Ratings (raw)" msgstr "Numero totale di valutazioni di etichette (grezzo)" -#: ../root/statistics/stats.js:477 +#: ../root/statistics/stats.js:603 msgid "Label Ratings (raw)" msgstr "Valutazioni di etichette (grezze)" -#: ../root/statistics/stats.js:482 +#: ../root/statistics/stats.js:608 msgid "Count of all Place Ratings (raw)" msgstr "Numero totale di valutazioni di luoghi (grezzo)" -#: ../root/statistics/stats.js:483 +#: ../root/statistics/stats.js:609 msgid "Place Ratings (raw)" msgstr "Valutazioni di luoghi (grezze)" -#: ../root/statistics/stats.js:488 +#: ../root/statistics/stats.js:614 msgid "Count of all Recording Ratings (raw)" msgstr "Numero totale di valutazioni di registrazioni (grezzo)" -#: ../root/statistics/stats.js:489 +#: ../root/statistics/stats.js:615 msgid "Recording Ratings (raw)" msgstr "Valutazioni di registrazioni (grezze)" -#: ../root/statistics/stats.js:494 +#: ../root/statistics/stats.js:620 msgid "Count of all Release Group Ratings (raw)" msgstr "Numero totale di valutazioni di gruppi di pubblicazioni (grezzo)" -#: ../root/statistics/stats.js:495 +#: ../root/statistics/stats.js:621 msgid "Release Group Ratings (raw)" msgstr "Valutazioni di gruppi di pubblicazioni (grezze)" -#: ../root/statistics/stats.js:500 +#: ../root/statistics/stats.js:626 msgid "Count of all Work Ratings (raw)" msgstr "Numero totale di valutazioni di opere (grezzo)" -#: ../root/statistics/stats.js:501 +#: ../root/statistics/stats.js:627 msgid "Work Ratings (raw)" msgstr "Valutazioni di opere (grezze)" -#: ../root/statistics/stats.js:506 +#: ../root/statistics/stats.js:632 msgid "Count of all Recording Ratings" msgstr "Numero totale di valutazioni di registrazioni" -#: ../root/statistics/stats.js:507 +#: ../root/statistics/stats.js:633 msgid "Recording Ratings" msgstr "Valutazioni di registrazioni" -#: ../root/statistics/stats.js:512 +#: ../root/statistics/stats.js:638 msgid "Count of all Release Group Ratings" msgstr "Numero totale di valutazioni di gruppi di pubblicazioni" -#: ../root/statistics/stats.js:513 +#: ../root/statistics/stats.js:639 msgid "Release Group Ratings" msgstr "Valutazioni di gruppi di pubblicazioni" -#: ../root/statistics/stats.js:518 +#: ../root/statistics/stats.js:644 msgid "Count of all Work Ratings" msgstr "Numero totale di valutazioni di opere" -#: ../root/statistics/stats.js:519 +#: ../root/statistics/stats.js:645 msgid "Work Ratings" msgstr "Valutazioni di opere" -#: ../root/statistics/stats.js:524 +#: ../root/statistics/stats.js:650 msgid "Count of all recordings" msgstr "Numero totale di registrazioni" -#: ../root/statistics/stats.js:530 +#: ../root/statistics/stats.js:656 msgid "Count of all Recordings with ISRCs" msgstr "Numero totale di registrazioni con ISRC" -#: ../root/statistics/stats.js:531 +#: ../root/statistics/stats.js:657 msgid "Recordings with ISRCs" msgstr "Registrazioni con ISRC" -#: ../root/statistics/stats.js:536 +#: ../root/statistics/stats.js:662 msgid "Count of all standalone recordings" msgstr "Numero totale di registrazioni a sé stanti" -#: ../root/statistics/stats.js:537 +#: ../root/statistics/stats.js:663 msgid "Standalone recordings" msgstr "Registrazioni a sé stanti" -#: ../root/statistics/stats.js:542 +#: ../root/statistics/stats.js:668 msgid "Count of all releases" msgstr "Numero totale di pubblicazioni" -#: ../root/statistics/stats.js:548 +#: ../root/statistics/stats.js:674 msgid "Releases with no country set" msgstr "Pubblicazioni senza un Paese impostato" -#: ../root/statistics/stats.js:554 ../root/statistics/stats.js:555 -#: ../root/statistics/stats.js:572 +#: ../root/statistics/stats.js:680 ../root/statistics/stats.js:681 +#: ../root/statistics/stats.js:698 msgid "Releases with Amazon Cover Art" msgstr "Pubblicazioni con copertina da Amazon" -#: ../root/statistics/stats.js:560 ../root/statistics/stats.js:561 +#: ../root/statistics/stats.js:686 ../root/statistics/stats.js:687 msgid "Releases with CAA Cover Art" msgstr "Pubblicazioni con copertina da CAA" -#: ../root/statistics/stats.js:566 ../root/statistics/stats.js:567 +#: ../root/statistics/stats.js:692 ../root/statistics/stats.js:693 msgid "Releases with No Cover Art" msgstr "Pubblicazioni senza copertina" -#: ../root/statistics/stats.js:573 +#: ../root/statistics/stats.js:699 msgid "Releases with Cover Art from Relationships" msgstr "Pubblicazioni con copertina da relazioni" -#: ../root/statistics/stats.js:578 +#: ../root/statistics/stats.js:704 msgid "Releases with a no-format medium" msgstr "Pubblicazioni con un supporto senza formato" -#: ../root/statistics/stats.js:579 +#: ../root/statistics/stats.js:705 msgid "Unknown Format (release)" msgstr "Formato sconosciuto (pubblicazione)" -#: ../root/statistics/stats.js:584 ../root/statistics/stats.js:585 +#: ../root/statistics/stats.js:710 ../root/statistics/stats.js:711 msgid "Releases with Cover Art" msgstr "Pubblicazioni con copertina" -#: ../root/statistics/stats.js:590 +#: ../root/statistics/stats.js:716 msgid "Count of all Releases with Disc IDs" msgstr "Numero totale di pubblicazioni con ID disco" -#: ../root/statistics/stats.js:591 +#: ../root/statistics/stats.js:717 msgid "Releases with Disc IDs" msgstr "Pubblicazioni con ID disco" -#: ../root/statistics/stats.js:596 +#: ../root/statistics/stats.js:722 msgid "Releases with no language set" msgstr "Pubblicazioni senza una lingua impostata" -#: ../root/statistics/stats.js:597 +#: ../root/statistics/stats.js:723 msgid "Unknown Language" msgstr "Lingua sconosciuta" -#: ../root/statistics/stats.js:602 +#: ../root/statistics/stats.js:728 msgid "Count of all Releases not V.A." msgstr "Numero totale di pubblicazioni non di Artisti Vari" -#: ../root/statistics/stats.js:603 +#: ../root/statistics/stats.js:729 msgid "Releases not VA" msgstr "Pubblicazioni (non AAVV)" -#: ../root/statistics/stats.js:608 +#: ../root/statistics/stats.js:734 msgid "Releases with no script set" msgstr "Pubblicazioni senza uno script impostato" -#: ../root/statistics/stats.js:609 +#: ../root/statistics/stats.js:735 msgid "Unknown Script" msgstr "Script sconosciuto" -#: ../root/statistics/stats.js:614 +#: ../root/statistics/stats.js:740 msgid "Count of all Releases by Various Artists" msgstr "Numero totale di pubblicazioni di artisti vari" -#: ../root/statistics/stats.js:615 +#: ../root/statistics/stats.js:741 msgid "Releases (VA)" msgstr "Pubblicazioni (AAVV)" -#: ../root/statistics/stats.js:620 +#: ../root/statistics/stats.js:746 msgid "Count of all release groups" msgstr "Numero totale di gruppi di pubblicazioni" -#: ../root/statistics/stats.js:626 +#: ../root/statistics/stats.js:752 msgid "Count of all series" msgstr "Numero totale di serie" -#: ../root/statistics/stats.js:632 +#: ../root/statistics/stats.js:758 msgid "Count of all Tags" msgstr "Numero totale di tag" -#: ../root/statistics/stats.js:633 +#: ../root/statistics/stats.js:759 msgid "Tags" msgstr "Tag" -#: ../root/statistics/stats.js:638 +#: ../root/statistics/stats.js:764 msgid "Count of all Tags (raw)" msgstr "Numero totale di tag (grezzo)" -#: ../root/statistics/stats.js:639 +#: ../root/statistics/stats.js:765 msgid "Tags (raw)" msgstr "Tag (grezzi)" -#: ../root/statistics/stats.js:644 +#: ../root/statistics/stats.js:770 msgid "Count of all Area Tags (raw)" msgstr "Numero totale di tag di aree (grezzo)" -#: ../root/statistics/stats.js:645 +#: ../root/statistics/stats.js:771 msgid "Area Tags (raw)" msgstr "Tag di aree (grezzi)" -#: ../root/statistics/stats.js:650 +#: ../root/statistics/stats.js:776 msgid "Count of all Artist Tags (raw)" msgstr "Numero totale di tag di artisti (grezzo)" -#: ../root/statistics/stats.js:651 +#: ../root/statistics/stats.js:777 msgid "Artist Tags (raw)" msgstr "Tag di artisti (grezzi)" -#: ../root/statistics/stats.js:656 +#: ../root/statistics/stats.js:782 msgid "Count of all Instrument Tags (raw)" msgstr "Numero totale di tag di strumenti (grezzo)" -#: ../root/statistics/stats.js:657 +#: ../root/statistics/stats.js:783 msgid "Instrument Tags (raw)" msgstr "Tag di strumenti (grezzi)" -#: ../root/statistics/stats.js:662 +#: ../root/statistics/stats.js:788 msgid "Count of all Label Tags (raw)" msgstr "Numero totale di tag di etichette (grezzo)" -#: ../root/statistics/stats.js:663 +#: ../root/statistics/stats.js:789 msgid "Label Tags (raw)" msgstr "Tag di etichette (grezzi)" -#: ../root/statistics/stats.js:668 +#: ../root/statistics/stats.js:794 msgid "Count of all Recording Tags (raw)" msgstr "Numero totale di tag di registrazioni (grezzo)" -#: ../root/statistics/stats.js:669 +#: ../root/statistics/stats.js:795 msgid "Recording Tags (raw)" msgstr "Tag di registrazioni (grezzi)" -#: ../root/statistics/stats.js:674 +#: ../root/statistics/stats.js:800 msgid "Count of all Release Tags (raw)" msgstr "Numero totale di tag di pubblicazioni (grezzo)" -#: ../root/statistics/stats.js:675 +#: ../root/statistics/stats.js:801 msgid "Release Tags (raw)" msgstr "Tag di pubblicazioni (grezzi)" -#: ../root/statistics/stats.js:680 +#: ../root/statistics/stats.js:806 msgid "Count of all Release Group Tags (raw)" msgstr "Numero totale di tag di gruppi di pubblicazioni (grezzo)" -#: ../root/statistics/stats.js:681 +#: ../root/statistics/stats.js:807 msgid "Release Group Tags (raw)" msgstr "Tag di gruppi di pubblicazioni (grezzi)" -#: ../root/statistics/stats.js:686 +#: ../root/statistics/stats.js:812 msgid "Count of all Series Tags (raw)" msgstr "Numero totale di tag di serie (grezzo)" -#: ../root/statistics/stats.js:687 +#: ../root/statistics/stats.js:813 msgid "Series Tags (raw)" msgstr "Tag di serie (grezzi)" -#: ../root/statistics/stats.js:692 +#: ../root/statistics/stats.js:818 msgid "Count of all Work Tags (raw)" msgstr "Numero totale di tag di opere (grezzo)" -#: ../root/statistics/stats.js:693 +#: ../root/statistics/stats.js:819 msgid "Work Tags (raw)" msgstr "Tag di opere (grezzi)" -#: ../root/statistics/stats.js:698 +#: ../root/statistics/stats.js:824 msgid "Count of all Tracks" msgstr "Numero totale di tracce" -#: ../root/statistics/stats.js:699 +#: ../root/statistics/stats.js:825 msgid "Tracks" msgstr "Tracce" -#: ../root/statistics/stats.js:704 +#: ../root/statistics/stats.js:830 msgid "Count of all votes" msgstr "Numero totale di voti" -#: ../root/statistics/stats.js:711 +#: ../root/statistics/stats.js:837 msgid "Count of all Abstain votes" msgstr "Numero totale di astensioni" -#: ../root/statistics/stats.js:712 +#: ../root/statistics/stats.js:838 msgid "Abstentions" msgstr "Astensioni" -#: ../root/statistics/stats.js:717 +#: ../root/statistics/stats.js:843 msgid "Count of all No votes" msgstr "Numero totale di voti negativi" -#: ../root/statistics/stats.js:718 +#: ../root/statistics/stats.js:844 msgid "No Votes" msgstr "Voti negativi" -#: ../root/statistics/stats.js:723 +#: ../root/statistics/stats.js:849 msgid "Count of votes per day" msgstr "Numero di voti per giorno" -#: ../root/statistics/stats.js:725 +#: ../root/statistics/stats.js:851 msgid "Votes per day" msgstr "Voti per giorno" -#: ../root/statistics/stats.js:730 +#: ../root/statistics/stats.js:856 msgid "Count of votes per week" msgstr "Numero di voti per settimana" -#: ../root/statistics/stats.js:731 +#: ../root/statistics/stats.js:857 msgid "Votes per week" msgstr "Voti per settimana" -#: ../root/statistics/stats.js:736 +#: ../root/statistics/stats.js:862 msgid "Count of all Yes votes" msgstr "Numero totale di voti positivi" -#: ../root/statistics/stats.js:737 +#: ../root/statistics/stats.js:863 msgid "Yes Votes" msgstr "Voti positivi" -#: ../root/statistics/stats.js:742 +#: ../root/statistics/stats.js:868 msgid "Count of all works" msgstr "Numero totale di opere" -#: ../root/statistics/stats.js:748 +#: ../root/statistics/stats.js:874 msgid "Count of all Works with ISWCs" msgstr "Numero totale di opere con ISWC" -#: ../root/statistics/stats.js:749 +#: ../root/statistics/stats.js:875 msgid "Works with ISWCs" msgstr "Opere con ISWC" -#: ../root/statistics/stats.js:751 +#: ../root/statistics/stats.js:877 msgid "/day" msgstr "/giorno" -#: ../root/statistics/stats.js:760 +#: ../root/statistics/stats.js:886 msgid "Count of all Releases with {n} Disc IDs" msgstr "Numero totale di pubblicazioni con {n} ID disco" -#: ../root/statistics/stats.js:762 +#: ../root/statistics/stats.js:888 msgid "Releases with 1 Disc ID" msgid_plural "Releases with {n} Disc IDs" msgstr[0] "Pubblicazioni con 1 ID disco" msgstr[1] "Pubblicazioni con {n} ID disco" -#: ../root/statistics/stats.js:772 +#: ../root/statistics/stats.js:898 msgid "Count of all Mediums with {n} Disc IDs" msgstr "Numero totale di supporti con {n} ID disco" -#: ../root/statistics/stats.js:774 +#: ../root/statistics/stats.js:900 msgid "Mediums with 1 Disc ID" msgid_plural "Mediums with {n} Disc IDs" msgstr[0] "Supporti con 1 ID disco" msgstr[1] "Supporti con {n} ID disco" -#: ../root/statistics/stats.js:784 +#: ../root/statistics/stats.js:910 msgid "Count of all Recordings with {n} Releases" msgstr "Numero totale di registrazioni con {n} pubblicazioni" -#: ../root/statistics/stats.js:786 +#: ../root/statistics/stats.js:912 msgid "Recordings with 1 Release" msgid_plural "Recordings with {n} Releases" msgstr[0] "Registrazioni con 1 pubblicazione" msgstr[1] "Registrazioni con {n} pubblicazioni" -#: ../root/statistics/stats.js:796 +#: ../root/statistics/stats.js:922 msgid "Count of all Release Groups with {n} Releases" msgstr "Numero totale di gruppi di pubblicazioni con {n} pubblcazioni" -#: ../root/statistics/stats.js:798 +#: ../root/statistics/stats.js:924 msgid "Release Groups with 1 Release" msgid_plural "Release Groups with {n} Releases" msgstr[0] "Gruppi di pubblicazioni con 1 pubblicazione" msgstr[1] "Gruppi di pubblicazioni con {n} pubblicazioni" -#: ../root/statistics/stats.js:840 +#: ../root/statistics/stats.js:966 msgid "{country} artists" msgstr "{country} artisti" -#: ../root/statistics/stats.js:847 +#: ../root/statistics/stats.js:973 msgid "{country} labels" msgstr "{country} etichette" -#: ../root/statistics/stats.js:854 +#: ../root/statistics/stats.js:980 msgid "{country} releases" msgstr "{country} pubblicazioni" -#: ../root/statistics/stats.js:866 +#: ../root/statistics/stats.js:992 msgid "{name} releases" msgstr "Pubblicazioni {name}" -#: ../root/statistics/stats.js:873 +#: ../root/statistics/stats.js:999 msgid "{name} mediums" msgstr "Supporti {name}" -#: ../root/statistics/stats.js:885 +#: ../root/statistics/stats.js:1011 msgid "{language} releases" msgstr "Pubblicazioni {language}" -#: ../root/statistics/stats.js:892 +#: ../root/statistics/stats.js:1018 msgid "l_{first}_{second} Relationships" msgstr "Relazioni l_{first}_{second}" -#: ../root/statistics/stats.js:913 +#: ../root/statistics/stats.js:1039 msgid "{script} releases" msgstr "Pubblicazioni {script}" diff --git a/po/statistics.ja.po b/po/statistics.ja.po index 026a470f0da..14640c7e126 100644 --- a/po/statistics.ja.po +++ b/po/statistics.ja.po @@ -12,8 +12,8 @@ msgid "" msgstr "" "Project-Id-Version: MusicBrainz\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2021-07-19 17:37+0000\n" -"Last-Translator: ffff23 <email address hidden>\n" +"PO-Revision-Date: 2021-09-28 18:40+0000\n" +"Last-Translator: 和田篤 <email address hidden>\n" "Language-Team: Japanese (http://www.transifex.com/musicbrainz/musicbrainz/language/ja/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -1137,15 +1137,15 @@ msgid "Draw a rectangle on either graph" msgstr "" #: ../root/statistics/layout.tt:4 ../root/statistics/Editors.js:98 -#: ../root/statistics/Editors.js:109 ../root/statistics/Index.js:924 +#: ../root/statistics/Editors.js:109 ../root/statistics/Index.js:1083 #: ../root/statistics/StatisticsLayout.js:82 msgid "Editors" msgstr "編集者" #: ../root/statistics/layout.tt:4 ../root/statistics/Edits.js:37 #: ../root/statistics/Edits.js:41 ../root/statistics/Edits.js:50 -#: ../root/statistics/Index.js:1048 ../root/statistics/StatisticsLayout.js:72 -#: ../root/statistics/stats.js:184 +#: ../root/statistics/Index.js:1207 ../root/statistics/StatisticsLayout.js:72 +#: ../root/statistics/stats.js:310 msgid "Edits" msgstr "編集" @@ -1232,20 +1232,20 @@ msgstr "ランク" msgid "Country" msgstr "国" -#: ../root/statistics/Countries.js:53 ../root/statistics/Index.js:227 -#: ../root/statistics/Index.js:231 ../root/statistics/stats.js:45 +#: ../root/statistics/Countries.js:53 ../root/statistics/Index.js:231 +#: ../root/statistics/Index.js:235 ../root/statistics/stats.js:45 msgid "Artists" msgstr "アーティスト" #: ../root/statistics/Countries.js:57 ../root/statistics/CoverArt.js:105 -#: ../root/statistics/Formats.js:56 ../root/statistics/Index.js:359 +#: ../root/statistics/Formats.js:56 ../root/statistics/Index.js:363 #: ../root/statistics/LanguagesScripts.js:71 -#: ../root/statistics/LanguagesScripts.js:152 ../root/statistics/stats.js:543 +#: ../root/statistics/LanguagesScripts.js:152 ../root/statistics/stats.js:669 msgid "Releases" msgstr "リリース" -#: ../root/statistics/Countries.js:61 ../root/statistics/Index.js:694 -#: ../root/statistics/Index.js:701 ../root/statistics/stats.js:375 +#: ../root/statistics/Countries.js:61 ../root/statistics/Index.js:698 +#: ../root/statistics/Index.js:705 ../root/statistics/stats.js:501 msgid "Labels" msgstr "レーベル" @@ -1255,7 +1255,7 @@ msgid "Total" msgstr "合計" #: ../root/statistics/Countries.js:87 ../root/statistics/stats.js:57 -#: ../root/statistics/stats.js:381 ../root/statistics/stats.js:549 +#: ../root/statistics/stats.js:507 ../root/statistics/stats.js:675 msgid "Unknown Country" msgstr "不明な国" @@ -1409,7 +1409,7 @@ msgstr "フォーマット" msgid "% of total releases" msgstr "" -#: ../root/statistics/Formats.js:58 ../root/statistics/stats.js:387 +#: ../root/statistics/Formats.js:58 ../root/statistics/stats.js:513 msgid "Mediums" msgstr "メディア" @@ -1429,27 +1429,27 @@ msgstr "基本メタデータ" msgid "Core Entities" msgstr "主要な項目" -#: ../root/statistics/Index.js:92 ../root/statistics/Index.js:234 +#: ../root/statistics/Index.js:92 ../root/statistics/Index.js:238 msgid "Artists:" msgstr "アーティスト数:" -#: ../root/statistics/Index.js:96 ../root/statistics/Index.js:614 -#: ../root/statistics/Index.js:640 +#: ../root/statistics/Index.js:96 ../root/statistics/Index.js:618 +#: ../root/statistics/Index.js:644 msgid "Release Groups:" msgstr "リリースグループ数:" -#: ../root/statistics/Index.js:100 ../root/statistics/Index.js:362 -#: ../root/statistics/Index.js:384 ../root/statistics/Index.js:410 -#: ../root/statistics/Index.js:436 ../root/statistics/Index.js:470 -#: ../root/statistics/Index.js:519 +#: ../root/statistics/Index.js:100 ../root/statistics/Index.js:366 +#: ../root/statistics/Index.js:388 ../root/statistics/Index.js:414 +#: ../root/statistics/Index.js:440 ../root/statistics/Index.js:474 +#: ../root/statistics/Index.js:523 msgid "Releases:" msgstr "リリース数:" -#: ../root/statistics/Index.js:104 ../root/statistics/Index.js:563 +#: ../root/statistics/Index.js:104 ../root/statistics/Index.js:567 msgid "Mediums:" msgstr "メディア数:" -#: ../root/statistics/Index.js:108 ../root/statistics/Index.js:672 +#: ../root/statistics/Index.js:108 ../root/statistics/Index.js:676 msgid "Recordings:" msgstr "レコーディング数:" @@ -1461,8 +1461,8 @@ msgstr "トラック数:" msgid "Labels:" msgstr "レーベル数:" -#: ../root/statistics/Index.js:120 ../root/statistics/Index.js:729 -#: ../root/statistics/Index.js:761 +#: ../root/statistics/Index.js:120 ../root/statistics/Index.js:733 +#: ../root/statistics/Index.js:765 msgid "Works:" msgstr "作品数:" @@ -1470,24 +1470,24 @@ msgstr "作品数:" msgid "URLs:" msgstr "URL数:" -#: ../root/statistics/Index.js:128 ../root/statistics/Index.js:791 +#: ../root/statistics/Index.js:128 ../root/statistics/Index.js:795 msgid "Areas:" msgstr "地域数:" -#: ../root/statistics/Index.js:132 ../root/statistics/Index.js:819 +#: ../root/statistics/Index.js:132 ../root/statistics/Index.js:823 msgid "Places:" msgstr "場所数:" -#: ../root/statistics/Index.js:136 ../root/statistics/Index.js:847 +#: ../root/statistics/Index.js:136 ../root/statistics/Index.js:851 msgctxt "plural" msgid "Series:" msgstr "シリーズ数:" -#: ../root/statistics/Index.js:140 ../root/statistics/Index.js:869 +#: ../root/statistics/Index.js:140 ../root/statistics/Index.js:873 msgid "Instruments:" msgstr "楽器数:" -#: ../root/statistics/Index.js:144 ../root/statistics/Index.js:899 +#: ../root/statistics/Index.js:144 ../root/statistics/Index.js:903 msgid "Events:" msgstr "イベント数:" @@ -1507,421 +1507,503 @@ msgstr "編集者数(有効 / 削除済):" msgid "Relationships:" msgstr "関係数:" -#: ../root/statistics/Index.js:167 +#: ../root/statistics/Index.js:167 ../root/statistics/Index.js:924 +#: ../root/statistics/Index.js:928 ../root/statistics/Index.js:931 +#: ../root/statistics/stats.js:171 +msgid "Collections" +msgstr "コレクション" + +#: ../root/statistics/Index.js:171 msgid "CD Stubs (all time / current):" msgstr "CDスタブ数(全期間 / 現在):" -#: ../root/statistics/Index.js:176 +#: ../root/statistics/Index.js:180 msgid "Tags (raw / aggregated):" msgstr "" -#: ../root/statistics/Index.js:182 +#: ../root/statistics/Index.js:186 msgid "Ratings (raw / aggregated):" msgstr "" -#: ../root/statistics/Index.js:190 +#: ../root/statistics/Index.js:194 msgid "Identifiers" msgstr "識別子" -#: ../root/statistics/Index.js:193 +#: ../root/statistics/Index.js:197 msgid "MBIDs:" msgstr "MBID数:" -#: ../root/statistics/Index.js:197 +#: ../root/statistics/Index.js:201 msgid "ISRCs (all / unique):" msgstr "ISRC数(重複含む / 含まない):" -#: ../root/statistics/Index.js:203 +#: ../root/statistics/Index.js:207 msgid "ISWCs (all / unique):" msgstr "ISWC数(重複含む / 含まない):" -#: ../root/statistics/Index.js:209 ../root/statistics/Index.js:514 +#: ../root/statistics/Index.js:213 ../root/statistics/Index.js:518 msgid "Disc IDs:" msgstr "ディスクID数:" -#: ../root/statistics/Index.js:213 +#: ../root/statistics/Index.js:217 msgid "Barcodes:" msgstr "バーコード数:" -#: ../root/statistics/Index.js:217 +#: ../root/statistics/Index.js:221 msgid "IPIs:" msgstr "IPI数:" -#: ../root/statistics/Index.js:221 +#: ../root/statistics/Index.js:225 msgid "ISNIs:" msgstr "ISNI数:" -#: ../root/statistics/Index.js:240 +#: ../root/statistics/Index.js:244 msgid "of type Person:" msgstr "個人" -#: ../root/statistics/Index.js:246 +#: ../root/statistics/Index.js:250 msgid "of type Group:" msgstr "グループ" -#: ../root/statistics/Index.js:252 +#: ../root/statistics/Index.js:256 msgid "of type Orchestra:" msgstr "オーケストラ" -#: ../root/statistics/Index.js:258 +#: ../root/statistics/Index.js:262 msgid "of type Choir:" msgstr "合唱団" -#: ../root/statistics/Index.js:264 +#: ../root/statistics/Index.js:268 msgid "of type Character:" msgstr "キャラクター" -#: ../root/statistics/Index.js:270 +#: ../root/statistics/Index.js:274 msgid "of type Other:" msgstr "その他" -#: ../root/statistics/Index.js:276 +#: ../root/statistics/Index.js:280 msgid "with no type set:" msgstr "未指定" -#: ../root/statistics/Index.js:282 +#: ../root/statistics/Index.js:286 msgid "with appearances in artist credits:" msgstr "" -#: ../root/statistics/Index.js:288 +#: ../root/statistics/Index.js:292 msgid "with no appearances in artist credits:" msgstr "" -#: ../root/statistics/Index.js:293 +#: ../root/statistics/Index.js:297 msgid "Non-group artists:" msgstr "非グループアーティスト" -#: ../root/statistics/Index.js:299 +#: ../root/statistics/Index.js:303 msgid "Male:" msgstr "男性" -#: ../root/statistics/Index.js:310 +#: ../root/statistics/Index.js:314 msgid "Female:" msgstr "女性" -#: ../root/statistics/Index.js:321 +#: ../root/statistics/Index.js:325 msgid "Other gender:" msgstr "その他の性" -#: ../root/statistics/Index.js:332 +#: ../root/statistics/Index.js:336 msgid "Gender not applicable:" msgstr "該当なし" -#: ../root/statistics/Index.js:343 +#: ../root/statistics/Index.js:347 msgid "with no gender set:" msgstr "未指定" -#: ../root/statistics/Index.js:355 +#: ../root/statistics/Index.js:359 msgid "Releases, Data Quality, and Disc IDs" msgstr "リリース・データ品質・ディスクID" -#: ../root/statistics/Index.js:368 +#: ../root/statistics/Index.js:372 msgid "by various artists:" msgstr "さまざまなアーティスト:" -#: ../root/statistics/Index.js:374 +#: ../root/statistics/Index.js:378 msgid "by a single artist:" msgstr "シングルアーティスト:" -#: ../root/statistics/Index.js:381 +#: ../root/statistics/Index.js:385 msgid "Release Status" msgstr "リリースステータス" -#: ../root/statistics/Index.js:400 +#: ../root/statistics/Index.js:404 msgid "No status set" msgstr "未指定" -#: ../root/statistics/Index.js:407 +#: ../root/statistics/Index.js:411 msgid "Release Packaging" msgstr "リリースパッケージング" -#: ../root/statistics/Index.js:426 +#: ../root/statistics/Index.js:430 msgid "No packaging set" msgstr "未指定" -#: ../root/statistics/Index.js:433 +#: ../root/statistics/Index.js:437 msgid "Cover Art Sources" msgstr "カバーアートのソース" -#: ../root/statistics/Index.js:442 +#: ../root/statistics/Index.js:446 msgid "CAA:" msgstr "CAA:" -#: ../root/statistics/Index.js:448 +#: ../root/statistics/Index.js:452 msgid "Amazon:" msgstr "Amazon:" -#: ../root/statistics/Index.js:454 +#: ../root/statistics/Index.js:458 msgid "URL Relationships:" msgstr "URL関連:" -#: ../root/statistics/Index.js:460 +#: ../root/statistics/Index.js:464 msgid "No front cover art:" msgstr "カバーアートがない:" -#: ../root/statistics/Index.js:467 +#: ../root/statistics/Index.js:471 msgid "Data Quality" msgstr "データ品質" -#: ../root/statistics/Index.js:476 +#: ../root/statistics/Index.js:480 msgid "High Data Quality:" msgstr "高いデータ品質:" -#: ../root/statistics/Index.js:482 +#: ../root/statistics/Index.js:486 msgid "Default Data Quality:" msgstr "デフォルトのデータ品質:" -#: ../root/statistics/Index.js:489 +#: ../root/statistics/Index.js:493 msgid "Normal Data Quality:" msgstr "標準のデータ品質:" -#: ../root/statistics/Index.js:496 +#: ../root/statistics/Index.js:500 msgid "Unknown Data Quality:" msgstr "データ品質が不明:" -#: ../root/statistics/Index.js:504 +#: ../root/statistics/Index.js:508 msgid "Low Data Quality:" msgstr "低いデータ品質:" -#: ../root/statistics/Index.js:511 ../root/statistics/stats.js:177 +#: ../root/statistics/Index.js:515 ../root/statistics/stats.js:303 msgid "Disc IDs" msgstr "ディスクID" -#: ../root/statistics/Index.js:525 +#: ../root/statistics/Index.js:529 msgid "Releases with no disc IDs:" msgstr "ディスクIDのないリリース:" -#: ../root/statistics/Index.js:532 +#: ../root/statistics/Index.js:536 msgid "Releases with at least one disc ID:" msgstr "ディスクIDが少なくとも1つあるリリース:" -#: ../root/statistics/Index.js:543 ../root/statistics/Index.js:587 +#: ../root/statistics/Index.js:547 ../root/statistics/Index.js:591 msgid "with {num} disc ID:" msgid_plural "with {num} disc IDs:" msgstr[0] "{num}つのディスクID:" -#: ../root/statistics/Index.js:558 ../root/statistics/Index.js:600 +#: ../root/statistics/Index.js:562 ../root/statistics/Index.js:604 msgid "with 10 or more disc IDs:" msgstr "10以上のディスクID:" -#: ../root/statistics/Index.js:569 +#: ../root/statistics/Index.js:573 msgid "Mediums with no disc IDs:" msgstr "ディスクIDのないメディア:" -#: ../root/statistics/Index.js:576 +#: ../root/statistics/Index.js:580 msgid "Mediums with at least one disc ID:" msgstr "ディスクIDが少なくとも1つあるメディア:" -#: ../root/statistics/Index.js:607 ../root/statistics/stats.js:621 +#: ../root/statistics/Index.js:611 ../root/statistics/stats.js:747 msgid "Release Groups" msgstr "リリースグループ" -#: ../root/statistics/Index.js:611 +#: ../root/statistics/Index.js:615 msgid "Primary Types" msgstr "一次タイプ" -#: ../root/statistics/Index.js:637 +#: ../root/statistics/Index.js:641 msgid "Secondary Types" msgstr "二次タイプ" -#: ../root/statistics/Index.js:665 ../root/statistics/Index.js:669 -#: ../root/statistics/stats.js:525 +#: ../root/statistics/Index.js:669 ../root/statistics/Index.js:673 +#: ../root/statistics/stats.js:651 msgid "Recordings" msgstr "レコーディング" -#: ../root/statistics/Index.js:677 +#: ../root/statistics/Index.js:681 msgid "Videos:" msgstr "ビデオ:" -#: ../root/statistics/Index.js:682 +#: ../root/statistics/Index.js:686 msgctxt "recording" msgid "Standalone" msgstr "" -#: ../root/statistics/Index.js:687 +#: ../root/statistics/Index.js:691 msgid "With ISRCs" msgstr "" -#: ../root/statistics/Index.js:698 ../root/statistics/Index.js:726 -#: ../root/statistics/Index.js:788 ../root/statistics/Index.js:816 -#: ../root/statistics/Index.js:844 ../root/statistics/Index.js:866 -#: ../root/statistics/Index.js:896 +#: ../root/statistics/Index.js:702 ../root/statistics/Index.js:730 +#: ../root/statistics/Index.js:792 ../root/statistics/Index.js:820 +#: ../root/statistics/Index.js:848 ../root/statistics/Index.js:870 +#: ../root/statistics/Index.js:900 msgid "Types" msgstr "タイプ" -#: ../root/statistics/Index.js:715 ../root/statistics/Index.js:743 -#: ../root/statistics/Index.js:777 ../root/statistics/Index.js:805 -#: ../root/statistics/Index.js:833 ../root/statistics/Index.js:885 -#: ../root/statistics/Index.js:913 +#: ../root/statistics/Index.js:719 ../root/statistics/Index.js:747 +#: ../root/statistics/Index.js:781 ../root/statistics/Index.js:809 +#: ../root/statistics/Index.js:837 ../root/statistics/Index.js:889 +#: ../root/statistics/Index.js:917 msgid "None" msgstr "なし" -#: ../root/statistics/Index.js:722 ../root/statistics/LanguagesScripts.js:75 -#: ../root/statistics/stats.js:743 +#: ../root/statistics/Index.js:726 ../root/statistics/LanguagesScripts.js:75 +#: ../root/statistics/stats.js:869 msgid "Works" msgstr "作品" -#: ../root/statistics/Index.js:748 +#: ../root/statistics/Index.js:752 msgid "With ISWCs" msgstr "" -#: ../root/statistics/Index.js:758 +#: ../root/statistics/Index.js:762 msgid "Attributes" msgstr "属性" -#: ../root/statistics/Index.js:784 ../root/statistics/stats.js:39 +#: ../root/statistics/Index.js:788 ../root/statistics/stats.js:39 msgid "Areas" msgstr "地域" -#: ../root/statistics/Index.js:812 ../root/statistics/stats.js:405 +#: ../root/statistics/Index.js:816 ../root/statistics/stats.js:531 msgid "Places" msgstr "場所" -#: ../root/statistics/Index.js:840 ../root/statistics/stats.js:627 +#: ../root/statistics/Index.js:844 ../root/statistics/stats.js:753 msgctxt "plural" msgid "Series" msgstr "シリーズ" -#: ../root/statistics/Index.js:862 ../root/statistics/stats.js:309 +#: ../root/statistics/Index.js:866 ../root/statistics/stats.js:435 msgid "Instruments" msgstr "楽器" -#: ../root/statistics/Index.js:892 ../root/statistics/stats.js:303 +#: ../root/statistics/Index.js:896 ../root/statistics/stats.js:429 msgid "Events" msgstr "イベント" -#: ../root/statistics/Index.js:920 +#: ../root/statistics/Index.js:937 +msgid "Of releases" +msgstr "" + +#: ../root/statistics/Index.js:944 ../root/statistics/Index.js:977 +msgid "Generic" +msgstr "" + +#: ../root/statistics/Index.js:953 +msgid "Owned music" +msgstr "" + +#: ../root/statistics/Index.js:962 +msgid "Wishlist" +msgstr "ほしい物リスト" + +#: ../root/statistics/Index.js:970 +msgid "Of events" +msgstr "" + +#: ../root/statistics/Index.js:986 +msgid "Of type Attending" +msgstr "" + +#: ../root/statistics/Index.js:995 +msgid "Of type Maybe attending" +msgstr "" + +#: ../root/statistics/Index.js:1006 +msgid "Of areas" +msgstr "" + +#: ../root/statistics/Index.js:1012 +msgid "Of artists" +msgstr "" + +#: ../root/statistics/Index.js:1018 +msgid "Of instruments" +msgstr "" + +#: ../root/statistics/Index.js:1024 +msgid "Of labels" +msgstr "" + +#: ../root/statistics/Index.js:1030 +msgid "Of places" +msgstr "" + +#: ../root/statistics/Index.js:1036 +msgid "Of recordings" +msgstr "" + +#: ../root/statistics/Index.js:1042 +msgid "Of release groups" +msgstr "" + +#: ../root/statistics/Index.js:1048 +msgid "Of series" +msgstr "" + +#: ../root/statistics/Index.js:1054 +msgid "Of works" +msgstr "" + +#: ../root/statistics/Index.js:1060 +msgid "Public" +msgstr "公開" + +#: ../root/statistics/Index.js:1066 +msgid "Private" +msgstr "非公開" + +#: ../root/statistics/Index.js:1072 +msgid "With collaborators" +msgstr "" + +#: ../root/statistics/Index.js:1079 msgid "Editors, Edits, and Votes" msgstr "編集者・編集・投票" -#: ../root/statistics/Index.js:927 +#: ../root/statistics/Index.js:1086 msgid "Editors (valid):" msgstr "編集者 (有効):" -#: ../root/statistics/Index.js:933 +#: ../root/statistics/Index.js:1092 msgid "active ever:" msgstr "" -#: ../root/statistics/Index.js:941 +#: ../root/statistics/Index.js:1100 msgid "who edited and/or voted in the last 7 days:" msgstr "最近7日間に編集か投票もしくは両方した人:" -#: ../root/statistics/Index.js:950 +#: ../root/statistics/Index.js:1109 msgid "who edited in the last 7 days:" msgstr "最近7日間に編集した人:" -#: ../root/statistics/Index.js:958 +#: ../root/statistics/Index.js:1117 msgid "who voted in the last 7 days:" msgstr "最近7日間に投票した人:" -#: ../root/statistics/Index.js:965 +#: ../root/statistics/Index.js:1124 msgid "who edit:" msgstr "編集者:" -#: ../root/statistics/Index.js:972 +#: ../root/statistics/Index.js:1131 msgid "who vote:" msgstr "投票者:" -#: ../root/statistics/Index.js:979 +#: ../root/statistics/Index.js:1138 msgid "who leave edit notes:" msgstr "" -#: ../root/statistics/Index.js:986 +#: ../root/statistics/Index.js:1145 msgid "who use tags:" msgstr "" -#: ../root/statistics/Index.js:993 +#: ../root/statistics/Index.js:1152 msgid "who use ratings:" msgstr "" -#: ../root/statistics/Index.js:1002 +#: ../root/statistics/Index.js:1161 msgid "who use subscriptions:" msgstr "" -#: ../root/statistics/Index.js:1011 +#: ../root/statistics/Index.js:1170 msgid "who use collections:" msgstr "" -#: ../root/statistics/Index.js:1021 +#: ../root/statistics/Index.js:1180 msgid "who have registered applications:" msgstr "" -#: ../root/statistics/Index.js:1030 +#: ../root/statistics/Index.js:1189 msgid "validated email only:" msgstr "メール認証のみ:" -#: ../root/statistics/Index.js:1036 +#: ../root/statistics/Index.js:1195 msgid "inactive:" msgstr "活動していない:" -#: ../root/statistics/Index.js:1041 +#: ../root/statistics/Index.js:1200 msgid "Editors (deleted):" msgstr "編集者(削除済):" -#: ../root/statistics/Index.js:1051 ../root/statistics/Index.js:1098 +#: ../root/statistics/Index.js:1210 ../root/statistics/Index.js:1257 msgid "Edits:" msgstr "編集:" -#: ../root/statistics/Index.js:1057 +#: ../root/statistics/Index.js:1216 msgid "Open:" msgstr "未確定:" -#: ../root/statistics/Index.js:1063 +#: ../root/statistics/Index.js:1222 msgid "Applied:" msgstr "適用:" -#: ../root/statistics/Index.js:1069 +#: ../root/statistics/Index.js:1228 msgid "Voted down:" msgstr "反対投票:" -#: ../root/statistics/Index.js:1075 +#: ../root/statistics/Index.js:1234 msgid "Failed (dependency):" msgstr "" -#: ../root/statistics/Index.js:1081 +#: ../root/statistics/Index.js:1240 msgid "Failed (prerequisite):" msgstr "" -#: ../root/statistics/Index.js:1087 +#: ../root/statistics/Index.js:1246 msgid "Failed (internal error):" msgstr "" -#: ../root/statistics/Index.js:1093 +#: ../root/statistics/Index.js:1252 msgid "Cancelled:" msgstr "キャンセル:" -#: ../root/statistics/Index.js:1104 ../root/statistics/Index.js:1156 +#: ../root/statistics/Index.js:1263 ../root/statistics/Index.js:1315 msgid "Last 7 days:" msgstr "最近7日間" -#: ../root/statistics/Index.js:1111 ../root/statistics/Index.js:1163 +#: ../root/statistics/Index.js:1270 ../root/statistics/Index.js:1322 msgid "Yesterday:" msgstr "昨日:" -#: ../root/statistics/Index.js:1118 ../root/statistics/stats.js:706 +#: ../root/statistics/Index.js:1277 ../root/statistics/stats.js:832 msgid "Votes" msgstr "投票数" -#: ../root/statistics/Index.js:1121 ../root/statistics/Index.js:1150 +#: ../root/statistics/Index.js:1280 ../root/statistics/Index.js:1309 msgid "Votes:" msgstr "投票数:" -#: ../root/statistics/Index.js:1127 +#: ../root/statistics/Index.js:1286 msgctxt "vote" msgid "Approve" msgstr "承認" -#: ../root/statistics/Index.js:1133 +#: ../root/statistics/Index.js:1292 msgctxt "vote" msgid "Yes" msgstr "賛成" -#: ../root/statistics/Index.js:1139 +#: ../root/statistics/Index.js:1298 msgctxt "vote" msgid "No" msgstr "反対" -#: ../root/statistics/Index.js:1145 +#: ../root/statistics/Index.js:1304 msgctxt "vote" msgid "Abstain" msgstr "棄権" @@ -2198,740 +2280,820 @@ msgstr "" msgid "CDStub tracks" msgstr "" -#: ../root/statistics/stats.js:170 ../root/statistics/stats.js:171 +#: ../root/statistics/stats.js:177 +msgid "Collections with collaborators" +msgstr "" + +#: ../root/statistics/stats.js:183 +msgid "Private collections" +msgstr "" + +#: ../root/statistics/stats.js:189 +msgid "Public collections" +msgstr "" + +#: ../root/statistics/stats.js:195 +msgid "Area collections" +msgstr "" + +#: ../root/statistics/stats.js:201 +msgid "Artist collections" +msgstr "" + +#: ../root/statistics/stats.js:207 +msgid "Collections of type Attending" +msgstr "" + +#: ../root/statistics/stats.js:213 +msgid "Collections of type Event" +msgstr "" + +#: ../root/statistics/stats.js:219 +msgid "Event collections (all types)" +msgstr "" + +#: ../root/statistics/stats.js:225 +msgid "Instrument collections" +msgstr "" + +#: ../root/statistics/stats.js:231 +msgid "Label collections" +msgstr "" + +#: ../root/statistics/stats.js:237 +msgid "Collections of type Maybe attending" +msgstr "" + +#: ../root/statistics/stats.js:243 +msgid "Collections of type Owned music" +msgstr "" + +#: ../root/statistics/stats.js:249 +msgid "Place collections" +msgstr "" + +#: ../root/statistics/stats.js:255 +msgid "Recording collections" +msgstr "" + +#: ../root/statistics/stats.js:261 +msgid "Collections of type Release" +msgstr "" + +#: ../root/statistics/stats.js:267 +msgid "Release collections (all types)" +msgstr "" + +#: ../root/statistics/stats.js:273 +msgid "Release group collections" +msgstr "" + +#: ../root/statistics/stats.js:279 +msgid "Series collections" +msgstr "" + +#: ../root/statistics/stats.js:285 +msgid "Collections of type Wishlist" +msgstr "" + +#: ../root/statistics/stats.js:291 +msgid "Work collections" +msgstr "" + +#: ../root/statistics/stats.js:296 ../root/statistics/stats.js:297 msgid "Pieces of Cover Art" msgstr "" -#: ../root/statistics/stats.js:176 +#: ../root/statistics/stats.js:302 msgid "Count of all Disc IDs" msgstr "" -#: ../root/statistics/stats.js:182 +#: ../root/statistics/stats.js:308 msgid "Count of all edits" msgstr "" -#: ../root/statistics/stats.js:189 +#: ../root/statistics/stats.js:315 msgid "All edits that have been applied" msgstr "" -#: ../root/statistics/stats.js:190 +#: ../root/statistics/stats.js:316 msgid "Applied edits" msgstr "" -#: ../root/statistics/stats.js:195 ../root/statistics/stats.js:196 +#: ../root/statistics/stats.js:321 ../root/statistics/stats.js:322 msgid "Cancelled edits" msgstr "" -#: ../root/statistics/stats.js:201 +#: ../root/statistics/stats.js:327 msgid "All edits that have hit an error" msgstr "" -#: ../root/statistics/stats.js:202 +#: ../root/statistics/stats.js:328 msgid "Error edits" msgstr "" -#: ../root/statistics/stats.js:207 +#: ../root/statistics/stats.js:333 msgid "Evalnochange edits" msgstr "" -#: ../root/statistics/stats.js:208 +#: ../root/statistics/stats.js:334 msgid "Evalnochange Edits" msgstr "" -#: ../root/statistics/stats.js:213 +#: ../root/statistics/stats.js:339 msgid "All edits that have failed dependency checks" msgstr "" -#: ../root/statistics/stats.js:214 +#: ../root/statistics/stats.js:340 msgid "Failed edits (dependency)" msgstr "" -#: ../root/statistics/stats.js:219 +#: ../root/statistics/stats.js:345 msgid "All edits that have failed prerequisite checks" msgstr "" -#: ../root/statistics/stats.js:220 +#: ../root/statistics/stats.js:346 msgid "Failed edits (prerequisite)" msgstr "" -#: ../root/statistics/stats.js:225 +#: ../root/statistics/stats.js:351 msgid "All edits that have failed by being voted down" msgstr "" -#: ../root/statistics/stats.js:226 +#: ../root/statistics/stats.js:352 msgid "Failed edits (voted down)" msgstr "" -#: ../root/statistics/stats.js:231 +#: ../root/statistics/stats.js:357 msgid "Count of open edits" msgstr "" -#: ../root/statistics/stats.js:232 +#: ../root/statistics/stats.js:358 msgid "Open Edits" msgstr "未確定の編集" -#: ../root/statistics/stats.js:237 +#: ../root/statistics/stats.js:363 msgid "Count of edits per day" msgstr "" -#: ../root/statistics/stats.js:239 +#: ../root/statistics/stats.js:365 msgid "Edits per day" msgstr "" -#: ../root/statistics/stats.js:244 +#: ../root/statistics/stats.js:370 msgid "Count of edits per week" msgstr "" -#: ../root/statistics/stats.js:245 +#: ../root/statistics/stats.js:371 msgid "Edits per week" msgstr "" -#: ../root/statistics/stats.js:250 +#: ../root/statistics/stats.js:376 msgid "Count of all editors" msgstr "" -#: ../root/statistics/stats.js:252 +#: ../root/statistics/stats.js:378 msgid "Editors (all)" msgstr "編集者(すべて)" -#: ../root/statistics/stats.js:258 +#: ../root/statistics/stats.js:384 msgid "Count of active editors (editing or voting) during the last week" msgstr "" -#: ../root/statistics/stats.js:260 +#: ../root/statistics/stats.js:386 msgid "Active Users" msgstr "アクティブなユーザー" -#: ../root/statistics/stats.js:265 +#: ../root/statistics/stats.js:391 msgid "Count of deleted editors" msgstr "" -#: ../root/statistics/stats.js:267 +#: ../root/statistics/stats.js:393 msgid "Editors (deleted)" msgstr "編集者(削除済)" -#: ../root/statistics/stats.js:273 +#: ../root/statistics/stats.js:399 msgid "Count of editors who have submitted edits during the last 7 days" msgstr "" -#: ../root/statistics/stats.js:275 +#: ../root/statistics/stats.js:401 msgid "Active Editors" msgstr "アクティブな編集者" -#: ../root/statistics/stats.js:280 +#: ../root/statistics/stats.js:406 msgid "Count of non-deleted editors" msgstr "" -#: ../root/statistics/stats.js:282 +#: ../root/statistics/stats.js:408 msgid "Editors (valid)" msgstr "" -#: ../root/statistics/stats.js:287 +#: ../root/statistics/stats.js:413 msgid "Count of active editors" msgstr "" -#: ../root/statistics/stats.js:289 +#: ../root/statistics/stats.js:415 msgid "Editors (valid & active ever)" msgstr "" -#: ../root/statistics/stats.js:295 +#: ../root/statistics/stats.js:421 msgid "Count of editors who have voted on during the last 7 days" msgstr "" -#: ../root/statistics/stats.js:297 +#: ../root/statistics/stats.js:423 msgid "Active Voters" msgstr "アクティブな投票者" -#: ../root/statistics/stats.js:302 +#: ../root/statistics/stats.js:428 msgid "Count of all events" msgstr "" -#: ../root/statistics/stats.js:308 +#: ../root/statistics/stats.js:434 msgid "Count of all instruments" msgstr "" -#: ../root/statistics/stats.js:314 +#: ../root/statistics/stats.js:440 msgid "Count of all IPIs" msgstr "" -#: ../root/statistics/stats.js:315 +#: ../root/statistics/stats.js:441 msgid "IPIs" msgstr "" -#: ../root/statistics/stats.js:320 +#: ../root/statistics/stats.js:446 msgid "Count of all IPIs for Artists" msgstr "" -#: ../root/statistics/stats.js:321 +#: ../root/statistics/stats.js:447 msgid "Artist IPIs" msgstr "" -#: ../root/statistics/stats.js:326 +#: ../root/statistics/stats.js:452 msgid "Count of all IPIs for Labels" msgstr "" -#: ../root/statistics/stats.js:327 +#: ../root/statistics/stats.js:453 msgid "Label IPIs" msgstr "" -#: ../root/statistics/stats.js:332 +#: ../root/statistics/stats.js:458 msgid "Count of all ISNIs" msgstr "" -#: ../root/statistics/stats.js:333 +#: ../root/statistics/stats.js:459 msgid "ISNIs" msgstr "" -#: ../root/statistics/stats.js:338 +#: ../root/statistics/stats.js:464 msgid "Count of all ISNIs for Artists" msgstr "" -#: ../root/statistics/stats.js:339 +#: ../root/statistics/stats.js:465 msgid "Artist ISNIs" msgstr "" -#: ../root/statistics/stats.js:344 +#: ../root/statistics/stats.js:470 msgid "Count of all ISNIs for Labels" msgstr "" -#: ../root/statistics/stats.js:345 +#: ../root/statistics/stats.js:471 msgid "Label ISNIs" msgstr "" -#: ../root/statistics/stats.js:350 ../root/statistics/stats.js:356 +#: ../root/statistics/stats.js:476 ../root/statistics/stats.js:482 msgid "Count of all ISRCs" msgstr "" -#: ../root/statistics/stats.js:351 +#: ../root/statistics/stats.js:477 msgid "ISRCs" msgstr "ISRC" -#: ../root/statistics/stats.js:357 +#: ../root/statistics/stats.js:483 msgid "ISRCs (all)" msgstr "" -#: ../root/statistics/stats.js:362 ../root/statistics/stats.js:368 +#: ../root/statistics/stats.js:488 ../root/statistics/stats.js:494 msgid "Count of all ISWCs" msgstr "" -#: ../root/statistics/stats.js:363 +#: ../root/statistics/stats.js:489 msgid "ISWCs" msgstr "ISWC" -#: ../root/statistics/stats.js:369 +#: ../root/statistics/stats.js:495 msgid "ISWCs (all)" msgstr "" -#: ../root/statistics/stats.js:374 +#: ../root/statistics/stats.js:500 msgid "Count of all labels" msgstr "" -#: ../root/statistics/stats.js:380 +#: ../root/statistics/stats.js:506 msgid "Labels with no country set" msgstr "" -#: ../root/statistics/stats.js:386 +#: ../root/statistics/stats.js:512 msgid "Count of all mediums" msgstr "" -#: ../root/statistics/stats.js:392 +#: ../root/statistics/stats.js:518 msgid "Mediums with no format set" msgstr "" -#: ../root/statistics/stats.js:393 +#: ../root/statistics/stats.js:519 msgid "Unknown Format (medium)" msgstr "不明なフォーマット(メディア)" -#: ../root/statistics/stats.js:398 +#: ../root/statistics/stats.js:524 msgid "Count of all Mediums with Disc IDs" msgstr "" -#: ../root/statistics/stats.js:399 +#: ../root/statistics/stats.js:525 msgid "Mediums with Disc IDs" msgstr "" -#: ../root/statistics/stats.js:404 +#: ../root/statistics/stats.js:530 msgid "Count of all places" msgstr "" -#: ../root/statistics/stats.js:410 +#: ../root/statistics/stats.js:536 msgid "Count of all Releases at Default Data Quality" msgstr "" -#: ../root/statistics/stats.js:411 +#: ../root/statistics/stats.js:537 msgid "Default Data Quality" msgstr "デフォルトのデータ品質" -#: ../root/statistics/stats.js:416 +#: ../root/statistics/stats.js:542 msgid "Count of all Releases at High Data Quality" msgstr "" -#: ../root/statistics/stats.js:417 +#: ../root/statistics/stats.js:543 msgid "High Data Quality" msgstr "高いデータ品質" -#: ../root/statistics/stats.js:422 +#: ../root/statistics/stats.js:548 msgid "Count of all Releases at Low Data Quality" msgstr "" -#: ../root/statistics/stats.js:423 +#: ../root/statistics/stats.js:549 msgid "Low Data Quality" msgstr "低いデータ品質" -#: ../root/statistics/stats.js:428 +#: ../root/statistics/stats.js:554 msgid "Count of all Releases at Normal Data Quality" msgstr "" -#: ../root/statistics/stats.js:429 +#: ../root/statistics/stats.js:555 msgid "Normal Data Quality" msgstr "標準のデータ品質" -#: ../root/statistics/stats.js:434 +#: ../root/statistics/stats.js:560 msgid "Count of all Releases at Unknown Data Quality" msgstr "" -#: ../root/statistics/stats.js:435 +#: ../root/statistics/stats.js:561 msgid "Unknown Data Quality" msgstr "データ品質が不明" -#: ../root/statistics/stats.js:440 +#: ../root/statistics/stats.js:566 msgid "Count of all Ratings" msgstr "" -#: ../root/statistics/stats.js:441 +#: ../root/statistics/stats.js:567 msgid "Ratings" msgstr "評価" -#: ../root/statistics/stats.js:446 +#: ../root/statistics/stats.js:572 msgid "Count of all Artist Ratings" msgstr "" -#: ../root/statistics/stats.js:447 +#: ../root/statistics/stats.js:573 msgid "Artist Ratings" msgstr "アーティストの評価" -#: ../root/statistics/stats.js:452 +#: ../root/statistics/stats.js:578 msgid "Count of all Label Ratings" msgstr "" -#: ../root/statistics/stats.js:453 +#: ../root/statistics/stats.js:579 msgid "Label Ratings" msgstr "レーベルの評価" -#: ../root/statistics/stats.js:458 +#: ../root/statistics/stats.js:584 msgid "Count of all Place Ratings" msgstr "" -#: ../root/statistics/stats.js:459 +#: ../root/statistics/stats.js:585 msgid "Place Ratings" msgstr "場所の評価" -#: ../root/statistics/stats.js:464 +#: ../root/statistics/stats.js:590 msgid "Count of all Ratings (raw)" msgstr "" -#: ../root/statistics/stats.js:465 +#: ../root/statistics/stats.js:591 msgid "Ratings (raw)" msgstr "" -#: ../root/statistics/stats.js:470 +#: ../root/statistics/stats.js:596 msgid "Count of all Artist Ratings (raw)" msgstr "" -#: ../root/statistics/stats.js:471 +#: ../root/statistics/stats.js:597 msgid "Artist Ratings (raw)" msgstr "" -#: ../root/statistics/stats.js:476 +#: ../root/statistics/stats.js:602 msgid "Count of all Label Ratings (raw)" msgstr "" -#: ../root/statistics/stats.js:477 +#: ../root/statistics/stats.js:603 msgid "Label Ratings (raw)" msgstr "" -#: ../root/statistics/stats.js:482 +#: ../root/statistics/stats.js:608 msgid "Count of all Place Ratings (raw)" msgstr "" -#: ../root/statistics/stats.js:483 +#: ../root/statistics/stats.js:609 msgid "Place Ratings (raw)" msgstr "" -#: ../root/statistics/stats.js:488 +#: ../root/statistics/stats.js:614 msgid "Count of all Recording Ratings (raw)" msgstr "" -#: ../root/statistics/stats.js:489 +#: ../root/statistics/stats.js:615 msgid "Recording Ratings (raw)" msgstr "" -#: ../root/statistics/stats.js:494 +#: ../root/statistics/stats.js:620 msgid "Count of all Release Group Ratings (raw)" msgstr "" -#: ../root/statistics/stats.js:495 +#: ../root/statistics/stats.js:621 msgid "Release Group Ratings (raw)" msgstr "" -#: ../root/statistics/stats.js:500 +#: ../root/statistics/stats.js:626 msgid "Count of all Work Ratings (raw)" msgstr "" -#: ../root/statistics/stats.js:501 +#: ../root/statistics/stats.js:627 msgid "Work Ratings (raw)" msgstr "" -#: ../root/statistics/stats.js:506 +#: ../root/statistics/stats.js:632 msgid "Count of all Recording Ratings" msgstr "" -#: ../root/statistics/stats.js:507 +#: ../root/statistics/stats.js:633 msgid "Recording Ratings" msgstr "レコーディングの評価" -#: ../root/statistics/stats.js:512 +#: ../root/statistics/stats.js:638 msgid "Count of all Release Group Ratings" msgstr "" -#: ../root/statistics/stats.js:513 +#: ../root/statistics/stats.js:639 msgid "Release Group Ratings" msgstr "リリースグループの評価" -#: ../root/statistics/stats.js:518 +#: ../root/statistics/stats.js:644 msgid "Count of all Work Ratings" msgstr "" -#: ../root/statistics/stats.js:519 +#: ../root/statistics/stats.js:645 msgid "Work Ratings" msgstr "作品の評価" -#: ../root/statistics/stats.js:524 +#: ../root/statistics/stats.js:650 msgid "Count of all recordings" msgstr "" -#: ../root/statistics/stats.js:530 +#: ../root/statistics/stats.js:656 msgid "Count of all Recordings with ISRCs" msgstr "" -#: ../root/statistics/stats.js:531 +#: ../root/statistics/stats.js:657 msgid "Recordings with ISRCs" msgstr "" -#: ../root/statistics/stats.js:536 +#: ../root/statistics/stats.js:662 msgid "Count of all standalone recordings" msgstr "" -#: ../root/statistics/stats.js:537 +#: ../root/statistics/stats.js:663 msgid "Standalone recordings" msgstr "" -#: ../root/statistics/stats.js:542 +#: ../root/statistics/stats.js:668 msgid "Count of all releases" msgstr "" -#: ../root/statistics/stats.js:548 +#: ../root/statistics/stats.js:674 msgid "Releases with no country set" msgstr "" -#: ../root/statistics/stats.js:554 ../root/statistics/stats.js:555 -#: ../root/statistics/stats.js:572 +#: ../root/statistics/stats.js:680 ../root/statistics/stats.js:681 +#: ../root/statistics/stats.js:698 msgid "Releases with Amazon Cover Art" msgstr "" -#: ../root/statistics/stats.js:560 ../root/statistics/stats.js:561 +#: ../root/statistics/stats.js:686 ../root/statistics/stats.js:687 msgid "Releases with CAA Cover Art" msgstr "" -#: ../root/statistics/stats.js:566 ../root/statistics/stats.js:567 +#: ../root/statistics/stats.js:692 ../root/statistics/stats.js:693 msgid "Releases with No Cover Art" msgstr "" -#: ../root/statistics/stats.js:573 +#: ../root/statistics/stats.js:699 msgid "Releases with Cover Art from Relationships" msgstr "" -#: ../root/statistics/stats.js:578 +#: ../root/statistics/stats.js:704 msgid "Releases with a no-format medium" msgstr "" -#: ../root/statistics/stats.js:579 +#: ../root/statistics/stats.js:705 msgid "Unknown Format (release)" msgstr "不明なフォーマット(リリース)" -#: ../root/statistics/stats.js:584 ../root/statistics/stats.js:585 +#: ../root/statistics/stats.js:710 ../root/statistics/stats.js:711 msgid "Releases with Cover Art" msgstr "" -#: ../root/statistics/stats.js:590 +#: ../root/statistics/stats.js:716 msgid "Count of all Releases with Disc IDs" msgstr "" -#: ../root/statistics/stats.js:591 +#: ../root/statistics/stats.js:717 msgid "Releases with Disc IDs" msgstr "" -#: ../root/statistics/stats.js:596 +#: ../root/statistics/stats.js:722 msgid "Releases with no language set" msgstr "" -#: ../root/statistics/stats.js:597 +#: ../root/statistics/stats.js:723 msgid "Unknown Language" msgstr "不明な言語" -#: ../root/statistics/stats.js:602 +#: ../root/statistics/stats.js:728 msgid "Count of all Releases not V.A." msgstr "" -#: ../root/statistics/stats.js:603 +#: ../root/statistics/stats.js:729 msgid "Releases not VA" msgstr "" -#: ../root/statistics/stats.js:608 +#: ../root/statistics/stats.js:734 msgid "Releases with no script set" msgstr "" -#: ../root/statistics/stats.js:609 +#: ../root/statistics/stats.js:735 msgid "Unknown Script" msgstr "不明な文字" -#: ../root/statistics/stats.js:614 +#: ../root/statistics/stats.js:740 msgid "Count of all Releases by Various Artists" msgstr "" -#: ../root/statistics/stats.js:615 +#: ../root/statistics/stats.js:741 msgid "Releases (VA)" msgstr "" -#: ../root/statistics/stats.js:620 +#: ../root/statistics/stats.js:746 msgid "Count of all release groups" msgstr "" -#: ../root/statistics/stats.js:626 +#: ../root/statistics/stats.js:752 msgid "Count of all series" msgstr "" -#: ../root/statistics/stats.js:632 +#: ../root/statistics/stats.js:758 msgid "Count of all Tags" msgstr "" -#: ../root/statistics/stats.js:633 +#: ../root/statistics/stats.js:759 msgid "Tags" msgstr "タグ" -#: ../root/statistics/stats.js:638 +#: ../root/statistics/stats.js:764 msgid "Count of all Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:639 +#: ../root/statistics/stats.js:765 msgid "Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:644 +#: ../root/statistics/stats.js:770 msgid "Count of all Area Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:645 +#: ../root/statistics/stats.js:771 msgid "Area Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:650 +#: ../root/statistics/stats.js:776 msgid "Count of all Artist Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:651 +#: ../root/statistics/stats.js:777 msgid "Artist Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:656 +#: ../root/statistics/stats.js:782 msgid "Count of all Instrument Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:657 +#: ../root/statistics/stats.js:783 msgid "Instrument Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:662 +#: ../root/statistics/stats.js:788 msgid "Count of all Label Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:663 +#: ../root/statistics/stats.js:789 msgid "Label Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:668 +#: ../root/statistics/stats.js:794 msgid "Count of all Recording Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:669 +#: ../root/statistics/stats.js:795 msgid "Recording Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:674 +#: ../root/statistics/stats.js:800 msgid "Count of all Release Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:675 +#: ../root/statistics/stats.js:801 msgid "Release Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:680 +#: ../root/statistics/stats.js:806 msgid "Count of all Release Group Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:681 +#: ../root/statistics/stats.js:807 msgid "Release Group Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:686 +#: ../root/statistics/stats.js:812 msgid "Count of all Series Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:687 +#: ../root/statistics/stats.js:813 msgid "Series Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:692 +#: ../root/statistics/stats.js:818 msgid "Count of all Work Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:693 +#: ../root/statistics/stats.js:819 msgid "Work Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:698 +#: ../root/statistics/stats.js:824 msgid "Count of all Tracks" msgstr "" -#: ../root/statistics/stats.js:699 +#: ../root/statistics/stats.js:825 msgid "Tracks" msgstr "トラック" -#: ../root/statistics/stats.js:704 +#: ../root/statistics/stats.js:830 msgid "Count of all votes" msgstr "" -#: ../root/statistics/stats.js:711 +#: ../root/statistics/stats.js:837 msgid "Count of all Abstain votes" msgstr "" -#: ../root/statistics/stats.js:712 +#: ../root/statistics/stats.js:838 msgid "Abstentions" msgstr "" -#: ../root/statistics/stats.js:717 +#: ../root/statistics/stats.js:843 msgid "Count of all No votes" msgstr "" -#: ../root/statistics/stats.js:718 +#: ../root/statistics/stats.js:844 msgid "No Votes" msgstr "投票なし" -#: ../root/statistics/stats.js:723 +#: ../root/statistics/stats.js:849 msgid "Count of votes per day" msgstr "" -#: ../root/statistics/stats.js:725 +#: ../root/statistics/stats.js:851 msgid "Votes per day" msgstr "" -#: ../root/statistics/stats.js:730 +#: ../root/statistics/stats.js:856 msgid "Count of votes per week" msgstr "" -#: ../root/statistics/stats.js:731 +#: ../root/statistics/stats.js:857 msgid "Votes per week" msgstr "" -#: ../root/statistics/stats.js:736 +#: ../root/statistics/stats.js:862 msgid "Count of all Yes votes" msgstr "" -#: ../root/statistics/stats.js:737 +#: ../root/statistics/stats.js:863 msgid "Yes Votes" msgstr "" -#: ../root/statistics/stats.js:742 +#: ../root/statistics/stats.js:868 msgid "Count of all works" msgstr "" -#: ../root/statistics/stats.js:748 +#: ../root/statistics/stats.js:874 msgid "Count of all Works with ISWCs" msgstr "" -#: ../root/statistics/stats.js:749 +#: ../root/statistics/stats.js:875 msgid "Works with ISWCs" msgstr "" -#: ../root/statistics/stats.js:751 +#: ../root/statistics/stats.js:877 msgid "/day" msgstr "" -#: ../root/statistics/stats.js:760 +#: ../root/statistics/stats.js:886 msgid "Count of all Releases with {n} Disc IDs" msgstr "" -#: ../root/statistics/stats.js:762 +#: ../root/statistics/stats.js:888 msgid "Releases with 1 Disc ID" msgid_plural "Releases with {n} Disc IDs" msgstr[0] "" -#: ../root/statistics/stats.js:772 +#: ../root/statistics/stats.js:898 msgid "Count of all Mediums with {n} Disc IDs" msgstr "" -#: ../root/statistics/stats.js:774 +#: ../root/statistics/stats.js:900 msgid "Mediums with 1 Disc ID" msgid_plural "Mediums with {n} Disc IDs" msgstr[0] "" -#: ../root/statistics/stats.js:784 +#: ../root/statistics/stats.js:910 msgid "Count of all Recordings with {n} Releases" msgstr "" -#: ../root/statistics/stats.js:786 +#: ../root/statistics/stats.js:912 msgid "Recordings with 1 Release" msgid_plural "Recordings with {n} Releases" msgstr[0] "" -#: ../root/statistics/stats.js:796 +#: ../root/statistics/stats.js:922 msgid "Count of all Release Groups with {n} Releases" msgstr "" -#: ../root/statistics/stats.js:798 +#: ../root/statistics/stats.js:924 msgid "Release Groups with 1 Release" msgid_plural "Release Groups with {n} Releases" msgstr[0] "" -#: ../root/statistics/stats.js:840 +#: ../root/statistics/stats.js:966 msgid "{country} artists" msgstr "" -#: ../root/statistics/stats.js:847 +#: ../root/statistics/stats.js:973 msgid "{country} labels" msgstr "" -#: ../root/statistics/stats.js:854 +#: ../root/statistics/stats.js:980 msgid "{country} releases" msgstr "" -#: ../root/statistics/stats.js:866 +#: ../root/statistics/stats.js:992 msgid "{name} releases" msgstr "" -#: ../root/statistics/stats.js:873 +#: ../root/statistics/stats.js:999 msgid "{name} mediums" msgstr "" -#: ../root/statistics/stats.js:885 +#: ../root/statistics/stats.js:1011 msgid "{language} releases" msgstr "" -#: ../root/statistics/stats.js:892 +#: ../root/statistics/stats.js:1018 msgid "l_{first}_{second} Relationships" msgstr "" -#: ../root/statistics/stats.js:913 +#: ../root/statistics/stats.js:1039 msgid "{script} releases" msgstr "" diff --git a/po/statistics.nl.po b/po/statistics.nl.po index ca4d72b7ae1..2b24472c491 100644 --- a/po/statistics.nl.po +++ b/po/statistics.nl.po @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: MusicBrainz\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2021-09-12 13:27+0000\n" +"PO-Revision-Date: 2021-10-02 09:17+0000\n" "Last-Translator: Maurits Meulenbelt <email address hidden>\n" "Language-Team: Dutch (http://www.transifex.com/musicbrainz/musicbrainz/language/nl/)\n" "MIME-Version: 1.0\n" @@ -272,7 +272,7 @@ msgstr "CatQuest neemt de taak om nieuwe instrumenten aan MusicBrainz toe te voe #: DB:statistics.statistic_event/title:2019-08-08 msgid "Collaborative collections" -msgstr "Samenwerkingscollecties" +msgstr "Gezamenlijke collecties" #: DB:statistics.statistic_event/description:2019-08-08 msgid "" @@ -1135,15 +1135,15 @@ msgid "Draw a rectangle on either graph" msgstr "Trek een rechthoek op een grafiek" #: ../root/statistics/layout.tt:4 ../root/statistics/Editors.js:98 -#: ../root/statistics/Editors.js:109 ../root/statistics/Index.js:924 +#: ../root/statistics/Editors.js:109 ../root/statistics/Index.js:1083 #: ../root/statistics/StatisticsLayout.js:82 msgid "Editors" msgstr "Redacteurs" #: ../root/statistics/layout.tt:4 ../root/statistics/Edits.js:37 #: ../root/statistics/Edits.js:41 ../root/statistics/Edits.js:50 -#: ../root/statistics/Index.js:1048 ../root/statistics/StatisticsLayout.js:72 -#: ../root/statistics/stats.js:184 +#: ../root/statistics/Index.js:1207 ../root/statistics/StatisticsLayout.js:72 +#: ../root/statistics/stats.js:310 msgid "Edits" msgstr "Bewerkingen" @@ -1230,20 +1230,20 @@ msgstr "Rang" msgid "Country" msgstr "Land" -#: ../root/statistics/Countries.js:53 ../root/statistics/Index.js:227 -#: ../root/statistics/Index.js:231 ../root/statistics/stats.js:45 +#: ../root/statistics/Countries.js:53 ../root/statistics/Index.js:231 +#: ../root/statistics/Index.js:235 ../root/statistics/stats.js:45 msgid "Artists" msgstr "Artiesten" #: ../root/statistics/Countries.js:57 ../root/statistics/CoverArt.js:105 -#: ../root/statistics/Formats.js:56 ../root/statistics/Index.js:359 +#: ../root/statistics/Formats.js:56 ../root/statistics/Index.js:363 #: ../root/statistics/LanguagesScripts.js:71 -#: ../root/statistics/LanguagesScripts.js:152 ../root/statistics/stats.js:543 +#: ../root/statistics/LanguagesScripts.js:152 ../root/statistics/stats.js:669 msgid "Releases" msgstr "Uitgaven" -#: ../root/statistics/Countries.js:61 ../root/statistics/Index.js:694 -#: ../root/statistics/Index.js:701 ../root/statistics/stats.js:375 +#: ../root/statistics/Countries.js:61 ../root/statistics/Index.js:698 +#: ../root/statistics/Index.js:705 ../root/statistics/stats.js:501 msgid "Labels" msgstr "Platenmaatschappijen" @@ -1253,7 +1253,7 @@ msgid "Total" msgstr "Totaal" #: ../root/statistics/Countries.js:87 ../root/statistics/stats.js:57 -#: ../root/statistics/stats.js:381 ../root/statistics/stats.js:549 +#: ../root/statistics/stats.js:507 ../root/statistics/stats.js:675 msgid "Unknown Country" msgstr "Onbekend land" @@ -1408,7 +1408,7 @@ msgstr "Mediumtype" msgid "% of total releases" msgstr "% van het totale aantal uitgaven" -#: ../root/statistics/Formats.js:58 ../root/statistics/stats.js:387 +#: ../root/statistics/Formats.js:58 ../root/statistics/stats.js:513 msgid "Mediums" msgstr "Media" @@ -1428,27 +1428,27 @@ msgstr "Basisgegevens" msgid "Core Entities" msgstr "Kernobjecten" -#: ../root/statistics/Index.js:92 ../root/statistics/Index.js:234 +#: ../root/statistics/Index.js:92 ../root/statistics/Index.js:238 msgid "Artists:" msgstr "Artiesten:" -#: ../root/statistics/Index.js:96 ../root/statistics/Index.js:614 -#: ../root/statistics/Index.js:640 +#: ../root/statistics/Index.js:96 ../root/statistics/Index.js:618 +#: ../root/statistics/Index.js:644 msgid "Release Groups:" msgstr "Uitgavegroepen:" -#: ../root/statistics/Index.js:100 ../root/statistics/Index.js:362 -#: ../root/statistics/Index.js:384 ../root/statistics/Index.js:410 -#: ../root/statistics/Index.js:436 ../root/statistics/Index.js:470 -#: ../root/statistics/Index.js:519 +#: ../root/statistics/Index.js:100 ../root/statistics/Index.js:366 +#: ../root/statistics/Index.js:388 ../root/statistics/Index.js:414 +#: ../root/statistics/Index.js:440 ../root/statistics/Index.js:474 +#: ../root/statistics/Index.js:523 msgid "Releases:" msgstr "Uitgaven:" -#: ../root/statistics/Index.js:104 ../root/statistics/Index.js:563 +#: ../root/statistics/Index.js:104 ../root/statistics/Index.js:567 msgid "Mediums:" msgstr "Media:" -#: ../root/statistics/Index.js:108 ../root/statistics/Index.js:672 +#: ../root/statistics/Index.js:108 ../root/statistics/Index.js:676 msgid "Recordings:" msgstr "Opnames:" @@ -1460,8 +1460,8 @@ msgstr "Nummers:" msgid "Labels:" msgstr "Platenmaatschappijen:" -#: ../root/statistics/Index.js:120 ../root/statistics/Index.js:729 -#: ../root/statistics/Index.js:761 +#: ../root/statistics/Index.js:120 ../root/statistics/Index.js:733 +#: ../root/statistics/Index.js:765 msgid "Works:" msgstr "Composities:" @@ -1469,24 +1469,24 @@ msgstr "Composities:" msgid "URLs:" msgstr "URL’s:" -#: ../root/statistics/Index.js:128 ../root/statistics/Index.js:791 +#: ../root/statistics/Index.js:128 ../root/statistics/Index.js:795 msgid "Areas:" msgstr "Gebieden:" -#: ../root/statistics/Index.js:132 ../root/statistics/Index.js:819 +#: ../root/statistics/Index.js:132 ../root/statistics/Index.js:823 msgid "Places:" msgstr "Plaatsen:" -#: ../root/statistics/Index.js:136 ../root/statistics/Index.js:847 +#: ../root/statistics/Index.js:136 ../root/statistics/Index.js:851 msgctxt "plural" msgid "Series:" msgstr "Series:" -#: ../root/statistics/Index.js:140 ../root/statistics/Index.js:869 +#: ../root/statistics/Index.js:140 ../root/statistics/Index.js:873 msgid "Instruments:" msgstr "Instrumenten:" -#: ../root/statistics/Index.js:144 ../root/statistics/Index.js:899 +#: ../root/statistics/Index.js:144 ../root/statistics/Index.js:903 msgid "Events:" msgstr "Evenementen:" @@ -1506,422 +1506,504 @@ msgstr "Redacteurs (geldig / verwijderd):" msgid "Relationships:" msgstr "Relaties:" -#: ../root/statistics/Index.js:167 +#: ../root/statistics/Index.js:167 ../root/statistics/Index.js:924 +#: ../root/statistics/Index.js:928 ../root/statistics/Index.js:931 +#: ../root/statistics/stats.js:171 +msgid "Collections" +msgstr "Collecties" + +#: ../root/statistics/Index.js:171 msgid "CD Stubs (all time / current):" msgstr "Cd-beginnetjes (altijd / nu):" -#: ../root/statistics/Index.js:176 +#: ../root/statistics/Index.js:180 msgid "Tags (raw / aggregated):" msgstr "Etiketten (totaal / verzameld):" -#: ../root/statistics/Index.js:182 +#: ../root/statistics/Index.js:186 msgid "Ratings (raw / aggregated):" msgstr "Waarderingen (totaal / verzameld):" -#: ../root/statistics/Index.js:190 +#: ../root/statistics/Index.js:194 msgid "Identifiers" msgstr "Identificatoren" -#: ../root/statistics/Index.js:193 +#: ../root/statistics/Index.js:197 msgid "MBIDs:" msgstr "MBID’s:" -#: ../root/statistics/Index.js:197 +#: ../root/statistics/Index.js:201 msgid "ISRCs (all / unique):" msgstr "ISRC’s (totaal / uniek):" -#: ../root/statistics/Index.js:203 +#: ../root/statistics/Index.js:207 msgid "ISWCs (all / unique):" msgstr "ISWC’s (totaal / uniek):" -#: ../root/statistics/Index.js:209 ../root/statistics/Index.js:514 +#: ../root/statistics/Index.js:213 ../root/statistics/Index.js:518 msgid "Disc IDs:" msgstr "Disc-ID’s:" -#: ../root/statistics/Index.js:213 +#: ../root/statistics/Index.js:217 msgid "Barcodes:" msgstr "Streepjescodes:" -#: ../root/statistics/Index.js:217 +#: ../root/statistics/Index.js:221 msgid "IPIs:" msgstr "IPI’s:" -#: ../root/statistics/Index.js:221 +#: ../root/statistics/Index.js:225 msgid "ISNIs:" msgstr "ISNI’s:" -#: ../root/statistics/Index.js:240 +#: ../root/statistics/Index.js:244 msgid "of type Person:" msgstr "personen:" -#: ../root/statistics/Index.js:246 +#: ../root/statistics/Index.js:250 msgid "of type Group:" msgstr "groepen:" -#: ../root/statistics/Index.js:252 +#: ../root/statistics/Index.js:256 msgid "of type Orchestra:" msgstr "orkesten:" -#: ../root/statistics/Index.js:258 +#: ../root/statistics/Index.js:262 msgid "of type Choir:" msgstr "koren:" -#: ../root/statistics/Index.js:264 +#: ../root/statistics/Index.js:268 msgid "of type Character:" msgstr "karakters:" -#: ../root/statistics/Index.js:270 +#: ../root/statistics/Index.js:274 msgid "of type Other:" msgstr "overig:" -#: ../root/statistics/Index.js:276 +#: ../root/statistics/Index.js:280 msgid "with no type set:" msgstr "onbekend type:" -#: ../root/statistics/Index.js:282 +#: ../root/statistics/Index.js:286 msgid "with appearances in artist credits:" msgstr "die voorkomen in vermeldingen:" -#: ../root/statistics/Index.js:288 +#: ../root/statistics/Index.js:292 msgid "with no appearances in artist credits:" msgstr "die niet voorkomen in vermeldingen:" -#: ../root/statistics/Index.js:293 +#: ../root/statistics/Index.js:297 msgid "Non-group artists:" msgstr "Artiesten die geen groep zijn:" -#: ../root/statistics/Index.js:299 +#: ../root/statistics/Index.js:303 msgid "Male:" msgstr "Mannelijk:" -#: ../root/statistics/Index.js:310 +#: ../root/statistics/Index.js:314 msgid "Female:" msgstr "Vrouwelijk:" -#: ../root/statistics/Index.js:321 +#: ../root/statistics/Index.js:325 msgid "Other gender:" msgstr "andere geslachten:" -#: ../root/statistics/Index.js:332 +#: ../root/statistics/Index.js:336 msgid "Gender not applicable:" msgstr "geslacht niet van toepassing:" -#: ../root/statistics/Index.js:343 +#: ../root/statistics/Index.js:347 msgid "with no gender set:" msgstr "onbekend geslacht:" -#: ../root/statistics/Index.js:355 +#: ../root/statistics/Index.js:359 msgid "Releases, Data Quality, and Disc IDs" msgstr "Uitgaven, gegevenskwaliteit en disc-ID’s" -#: ../root/statistics/Index.js:368 +#: ../root/statistics/Index.js:372 msgid "by various artists:" msgstr "van diverse artiesten:" -#: ../root/statistics/Index.js:374 +#: ../root/statistics/Index.js:378 msgid "by a single artist:" msgstr "van één artiest:" -#: ../root/statistics/Index.js:381 +#: ../root/statistics/Index.js:385 msgid "Release Status" msgstr "Uitgavestatus" -#: ../root/statistics/Index.js:400 +#: ../root/statistics/Index.js:404 msgid "No status set" msgstr "Geen status ingesteld" -#: ../root/statistics/Index.js:407 +#: ../root/statistics/Index.js:411 msgid "Release Packaging" msgstr "Verpakking van een uitgave" -#: ../root/statistics/Index.js:426 +#: ../root/statistics/Index.js:430 msgid "No packaging set" msgstr "Geen verpakking ingesteld" -#: ../root/statistics/Index.js:433 +#: ../root/statistics/Index.js:437 msgid "Cover Art Sources" msgstr "Bronnen voor afbeeldingen" -#: ../root/statistics/Index.js:442 +#: ../root/statistics/Index.js:446 msgid "CAA:" msgstr "CAA:" -#: ../root/statistics/Index.js:448 +#: ../root/statistics/Index.js:452 msgid "Amazon:" msgstr "Amazon:" -#: ../root/statistics/Index.js:454 +#: ../root/statistics/Index.js:458 msgid "URL Relationships:" msgstr "URL-relaties:" -#: ../root/statistics/Index.js:460 +#: ../root/statistics/Index.js:464 msgid "No front cover art:" msgstr "Geen afbeelding van de voorkant:" -#: ../root/statistics/Index.js:467 +#: ../root/statistics/Index.js:471 msgid "Data Quality" msgstr "Gegevenskwaliteit" -#: ../root/statistics/Index.js:476 +#: ../root/statistics/Index.js:480 msgid "High Data Quality:" msgstr "hoge gegevenskwaliteit:" -#: ../root/statistics/Index.js:482 +#: ../root/statistics/Index.js:486 msgid "Default Data Quality:" msgstr "standaard gegevenskwaliteit:" -#: ../root/statistics/Index.js:489 +#: ../root/statistics/Index.js:493 msgid "Normal Data Quality:" msgstr "normale gegevenskwaliteit:" -#: ../root/statistics/Index.js:496 +#: ../root/statistics/Index.js:500 msgid "Unknown Data Quality:" msgstr "onbekende gegevenskwaliteit:" -#: ../root/statistics/Index.js:504 +#: ../root/statistics/Index.js:508 msgid "Low Data Quality:" msgstr "lage gegevenskwaliteit:" -#: ../root/statistics/Index.js:511 ../root/statistics/stats.js:177 +#: ../root/statistics/Index.js:515 ../root/statistics/stats.js:303 msgid "Disc IDs" msgstr "Disc-ID’s" -#: ../root/statistics/Index.js:525 +#: ../root/statistics/Index.js:529 msgid "Releases with no disc IDs:" msgstr "Uitgaven zonder disc-ID’s:" -#: ../root/statistics/Index.js:532 +#: ../root/statistics/Index.js:536 msgid "Releases with at least one disc ID:" msgstr "Uitgaven met ten minste één disc-ID:" -#: ../root/statistics/Index.js:543 ../root/statistics/Index.js:587 +#: ../root/statistics/Index.js:547 ../root/statistics/Index.js:591 msgid "with {num} disc ID:" msgid_plural "with {num} disc IDs:" msgstr[0] "met {num} disc-ID:" msgstr[1] "met {num} disc-ID’s:" -#: ../root/statistics/Index.js:558 ../root/statistics/Index.js:600 +#: ../root/statistics/Index.js:562 ../root/statistics/Index.js:604 msgid "with 10 or more disc IDs:" msgstr "met tien of meer disc-ID’s:" -#: ../root/statistics/Index.js:569 +#: ../root/statistics/Index.js:573 msgid "Mediums with no disc IDs:" msgstr "Media zonder disc-ID’s:" -#: ../root/statistics/Index.js:576 +#: ../root/statistics/Index.js:580 msgid "Mediums with at least one disc ID:" msgstr "Media met ten minste één disc-ID:" -#: ../root/statistics/Index.js:607 ../root/statistics/stats.js:621 +#: ../root/statistics/Index.js:611 ../root/statistics/stats.js:747 msgid "Release Groups" msgstr "Uitgavegroepen" -#: ../root/statistics/Index.js:611 +#: ../root/statistics/Index.js:615 msgid "Primary Types" msgstr "Primaire types" -#: ../root/statistics/Index.js:637 +#: ../root/statistics/Index.js:641 msgid "Secondary Types" msgstr "Secundaire types" -#: ../root/statistics/Index.js:665 ../root/statistics/Index.js:669 -#: ../root/statistics/stats.js:525 +#: ../root/statistics/Index.js:669 ../root/statistics/Index.js:673 +#: ../root/statistics/stats.js:651 msgid "Recordings" msgstr "Opnames" -#: ../root/statistics/Index.js:677 +#: ../root/statistics/Index.js:681 msgid "Videos:" msgstr "Video’s:" -#: ../root/statistics/Index.js:682 +#: ../root/statistics/Index.js:686 msgctxt "recording" msgid "Standalone" msgstr "Zonder uitgave" -#: ../root/statistics/Index.js:687 +#: ../root/statistics/Index.js:691 msgid "With ISRCs" msgstr "Met ISRC’s" -#: ../root/statistics/Index.js:698 ../root/statistics/Index.js:726 -#: ../root/statistics/Index.js:788 ../root/statistics/Index.js:816 -#: ../root/statistics/Index.js:844 ../root/statistics/Index.js:866 -#: ../root/statistics/Index.js:896 +#: ../root/statistics/Index.js:702 ../root/statistics/Index.js:730 +#: ../root/statistics/Index.js:792 ../root/statistics/Index.js:820 +#: ../root/statistics/Index.js:848 ../root/statistics/Index.js:870 +#: ../root/statistics/Index.js:900 msgid "Types" msgstr "Types" -#: ../root/statistics/Index.js:715 ../root/statistics/Index.js:743 -#: ../root/statistics/Index.js:777 ../root/statistics/Index.js:805 -#: ../root/statistics/Index.js:833 ../root/statistics/Index.js:885 -#: ../root/statistics/Index.js:913 +#: ../root/statistics/Index.js:719 ../root/statistics/Index.js:747 +#: ../root/statistics/Index.js:781 ../root/statistics/Index.js:809 +#: ../root/statistics/Index.js:837 ../root/statistics/Index.js:889 +#: ../root/statistics/Index.js:917 msgid "None" msgstr "Geen" -#: ../root/statistics/Index.js:722 ../root/statistics/LanguagesScripts.js:75 -#: ../root/statistics/stats.js:743 +#: ../root/statistics/Index.js:726 ../root/statistics/LanguagesScripts.js:75 +#: ../root/statistics/stats.js:869 msgid "Works" msgstr "Composities" -#: ../root/statistics/Index.js:748 +#: ../root/statistics/Index.js:752 msgid "With ISWCs" msgstr "Met ISWC’s" -#: ../root/statistics/Index.js:758 +#: ../root/statistics/Index.js:762 msgid "Attributes" msgstr "Eigenschappen" -#: ../root/statistics/Index.js:784 ../root/statistics/stats.js:39 +#: ../root/statistics/Index.js:788 ../root/statistics/stats.js:39 msgid "Areas" msgstr "Gebieden" -#: ../root/statistics/Index.js:812 ../root/statistics/stats.js:405 +#: ../root/statistics/Index.js:816 ../root/statistics/stats.js:531 msgid "Places" msgstr "Plaatsen" -#: ../root/statistics/Index.js:840 ../root/statistics/stats.js:627 +#: ../root/statistics/Index.js:844 ../root/statistics/stats.js:753 msgctxt "plural" msgid "Series" msgstr "Series" -#: ../root/statistics/Index.js:862 ../root/statistics/stats.js:309 +#: ../root/statistics/Index.js:866 ../root/statistics/stats.js:435 msgid "Instruments" msgstr "Instrumenten" -#: ../root/statistics/Index.js:892 ../root/statistics/stats.js:303 +#: ../root/statistics/Index.js:896 ../root/statistics/stats.js:429 msgid "Events" msgstr "Evenementen" -#: ../root/statistics/Index.js:920 +#: ../root/statistics/Index.js:937 +msgid "Of releases" +msgstr "Waarvan uitgaven" + +#: ../root/statistics/Index.js:944 ../root/statistics/Index.js:977 +msgid "Generic" +msgstr "Algemeen" + +#: ../root/statistics/Index.js:953 +msgid "Owned music" +msgstr "Heb ik" + +#: ../root/statistics/Index.js:962 +msgid "Wishlist" +msgstr "Verlanglijst" + +#: ../root/statistics/Index.js:970 +msgid "Of events" +msgstr "Waarvan evenementen" + +#: ../root/statistics/Index.js:986 +msgid "Of type Attending" +msgstr "Van het type ‘Ga ik heen’" + +#: ../root/statistics/Index.js:995 +msgid "Of type Maybe attending" +msgstr "Van het type ‘Ga ik misschien heen’" + +#: ../root/statistics/Index.js:1006 +msgid "Of areas" +msgstr "Waarvan gebieden" + +#: ../root/statistics/Index.js:1012 +msgid "Of artists" +msgstr "Waarvan artiesten" + +#: ../root/statistics/Index.js:1018 +msgid "Of instruments" +msgstr "Waarvan instrumenten" + +#: ../root/statistics/Index.js:1024 +msgid "Of labels" +msgstr "Waarvan platenmaatschappijen" + +#: ../root/statistics/Index.js:1030 +msgid "Of places" +msgstr "Waarvan plaatsen" + +#: ../root/statistics/Index.js:1036 +msgid "Of recordings" +msgstr "Waarvan opnames" + +#: ../root/statistics/Index.js:1042 +msgid "Of release groups" +msgstr "Waarvan uitgavegroepen" + +#: ../root/statistics/Index.js:1048 +msgid "Of series" +msgstr "Waarvan series" + +#: ../root/statistics/Index.js:1054 +msgid "Of works" +msgstr "Waarvan composities" + +#: ../root/statistics/Index.js:1060 +msgid "Public" +msgstr "Publiek" + +#: ../root/statistics/Index.js:1066 +msgid "Private" +msgstr "Privé" + +#: ../root/statistics/Index.js:1072 +msgid "With collaborators" +msgstr "Met deelnemers" + +#: ../root/statistics/Index.js:1079 msgid "Editors, Edits, and Votes" msgstr "Redacteurs, bewerkingen en stemmen" -#: ../root/statistics/Index.js:927 +#: ../root/statistics/Index.js:1086 msgid "Editors (valid):" msgstr "Redacteurs (geldig):" -#: ../root/statistics/Index.js:933 +#: ../root/statistics/Index.js:1092 msgid "active ever:" msgstr "ooit actief:" -#: ../root/statistics/Index.js:941 +#: ../root/statistics/Index.js:1100 msgid "who edited and/or voted in the last 7 days:" msgstr "die de afgelopen 7 dagen bewerkt of gestemd hebben:" -#: ../root/statistics/Index.js:950 +#: ../root/statistics/Index.js:1109 msgid "who edited in the last 7 days:" msgstr "die de afgelopen 7 dagen bewerkt hebben:" -#: ../root/statistics/Index.js:958 +#: ../root/statistics/Index.js:1117 msgid "who voted in the last 7 days:" msgstr "die de afgelopen 7 dagen gestemd hebben:" -#: ../root/statistics/Index.js:965 +#: ../root/statistics/Index.js:1124 msgid "who edit:" msgstr "die bewerken:" -#: ../root/statistics/Index.js:972 +#: ../root/statistics/Index.js:1131 msgid "who vote:" msgstr "die stemmen:" -#: ../root/statistics/Index.js:979 +#: ../root/statistics/Index.js:1138 msgid "who leave edit notes:" msgstr "die notities achterlaten:" -#: ../root/statistics/Index.js:986 +#: ../root/statistics/Index.js:1145 msgid "who use tags:" msgstr "die etiketten gebruiken:" -#: ../root/statistics/Index.js:993 +#: ../root/statistics/Index.js:1152 msgid "who use ratings:" msgstr "die waarderingen gebruiken:" -#: ../root/statistics/Index.js:1002 +#: ../root/statistics/Index.js:1161 msgid "who use subscriptions:" msgstr "die abbonnementen gebruiken:" -#: ../root/statistics/Index.js:1011 +#: ../root/statistics/Index.js:1170 msgid "who use collections:" msgstr "die collecties gebruiken:" -#: ../root/statistics/Index.js:1021 +#: ../root/statistics/Index.js:1180 msgid "who have registered applications:" msgstr "die applicaties hebben geregistreerd:" -#: ../root/statistics/Index.js:1030 +#: ../root/statistics/Index.js:1189 msgid "validated email only:" msgstr "alleen bevestigde e-mails:" -#: ../root/statistics/Index.js:1036 +#: ../root/statistics/Index.js:1195 msgid "inactive:" msgstr "inactief:" -#: ../root/statistics/Index.js:1041 +#: ../root/statistics/Index.js:1200 msgid "Editors (deleted):" msgstr "Redacteurs (verwijderd):" -#: ../root/statistics/Index.js:1051 ../root/statistics/Index.js:1098 +#: ../root/statistics/Index.js:1210 ../root/statistics/Index.js:1257 msgid "Edits:" msgstr "Bewerkingen:" -#: ../root/statistics/Index.js:1057 +#: ../root/statistics/Index.js:1216 msgid "Open:" msgstr "open:" -#: ../root/statistics/Index.js:1063 +#: ../root/statistics/Index.js:1222 msgid "Applied:" msgstr "doorgevoerd:" -#: ../root/statistics/Index.js:1069 +#: ../root/statistics/Index.js:1228 msgid "Voted down:" msgstr "weggestemd:" -#: ../root/statistics/Index.js:1075 +#: ../root/statistics/Index.js:1234 msgid "Failed (dependency):" msgstr "mislukt (afhankelijkheid):" -#: ../root/statistics/Index.js:1081 +#: ../root/statistics/Index.js:1240 msgid "Failed (prerequisite):" msgstr "mislukt (voorwaarde):" -#: ../root/statistics/Index.js:1087 +#: ../root/statistics/Index.js:1246 msgid "Failed (internal error):" msgstr "mislukt (interne fout):" -#: ../root/statistics/Index.js:1093 +#: ../root/statistics/Index.js:1252 msgid "Cancelled:" msgstr "geannuleerd:" -#: ../root/statistics/Index.js:1104 ../root/statistics/Index.js:1156 +#: ../root/statistics/Index.js:1263 ../root/statistics/Index.js:1315 msgid "Last 7 days:" msgstr "afgelopen 7 dagen:" -#: ../root/statistics/Index.js:1111 ../root/statistics/Index.js:1163 +#: ../root/statistics/Index.js:1270 ../root/statistics/Index.js:1322 msgid "Yesterday:" msgstr "gisteren:" -#: ../root/statistics/Index.js:1118 ../root/statistics/stats.js:706 +#: ../root/statistics/Index.js:1277 ../root/statistics/stats.js:832 msgid "Votes" msgstr "Stemmen" -#: ../root/statistics/Index.js:1121 ../root/statistics/Index.js:1150 +#: ../root/statistics/Index.js:1280 ../root/statistics/Index.js:1309 msgid "Votes:" msgstr "Stemmen:" -#: ../root/statistics/Index.js:1127 +#: ../root/statistics/Index.js:1286 msgctxt "vote" msgid "Approve" msgstr "goedgekeurd" -#: ../root/statistics/Index.js:1133 +#: ../root/statistics/Index.js:1292 msgctxt "vote" msgid "Yes" msgstr "voor" -#: ../root/statistics/Index.js:1139 +#: ../root/statistics/Index.js:1298 msgctxt "vote" msgid "No" msgstr "tegen" -#: ../root/statistics/Index.js:1145 +#: ../root/statistics/Index.js:1304 msgctxt "vote" msgid "Abstain" msgstr "onthouding" @@ -2198,744 +2280,824 @@ msgstr "Totaal aantal nummers in cd-beginnetjes" msgid "CDStub tracks" msgstr "Nummers in cd-beginnetjes" -#: ../root/statistics/stats.js:170 ../root/statistics/stats.js:171 +#: ../root/statistics/stats.js:177 +msgid "Collections with collaborators" +msgstr "Collecties met deelnemers" + +#: ../root/statistics/stats.js:183 +msgid "Private collections" +msgstr "Privécollecties" + +#: ../root/statistics/stats.js:189 +msgid "Public collections" +msgstr "Openbare collecties" + +#: ../root/statistics/stats.js:195 +msgid "Area collections" +msgstr "Collecties van gebieden" + +#: ../root/statistics/stats.js:201 +msgid "Artist collections" +msgstr "Collecties van artiesten" + +#: ../root/statistics/stats.js:207 +msgid "Collections of type Attending" +msgstr "Collecties van het type ‘Ga ik heen’" + +#: ../root/statistics/stats.js:213 +msgid "Collections of type Event" +msgstr "Collecties van evenementen" + +#: ../root/statistics/stats.js:219 +msgid "Event collections (all types)" +msgstr "Collecties van evenementen (alle soorten)" + +#: ../root/statistics/stats.js:225 +msgid "Instrument collections" +msgstr "Collecties van instrumenten" + +#: ../root/statistics/stats.js:231 +msgid "Label collections" +msgstr "Collecties van platenmaatschappijen" + +#: ../root/statistics/stats.js:237 +msgid "Collections of type Maybe attending" +msgstr "Collecties van het type ‘Ga ik misschien heen’" + +#: ../root/statistics/stats.js:243 +msgid "Collections of type Owned music" +msgstr "Collecties van het type ‘Heb ik’" + +#: ../root/statistics/stats.js:249 +msgid "Place collections" +msgstr "Collecties van plaatsen" + +#: ../root/statistics/stats.js:255 +msgid "Recording collections" +msgstr "Collecties van opnames" + +#: ../root/statistics/stats.js:261 +msgid "Collections of type Release" +msgstr "Collecties van uitgaven" + +#: ../root/statistics/stats.js:267 +msgid "Release collections (all types)" +msgstr "Collecties van uitgaven (alle soorten)" + +#: ../root/statistics/stats.js:273 +msgid "Release group collections" +msgstr "Collecties van uitgavegroepen" + +#: ../root/statistics/stats.js:279 +msgid "Series collections" +msgstr "Collecties van series" + +#: ../root/statistics/stats.js:285 +msgid "Collections of type Wishlist" +msgstr "Collecties van het type ‘Verlanglijstje’" + +#: ../root/statistics/stats.js:291 +msgid "Work collections" +msgstr "Collecties van composities" + +#: ../root/statistics/stats.js:296 ../root/statistics/stats.js:297 msgid "Pieces of Cover Art" msgstr "Aantal afbeeldingen" -#: ../root/statistics/stats.js:176 +#: ../root/statistics/stats.js:302 msgid "Count of all Disc IDs" msgstr "Totaal aantal disc-ID’s" -#: ../root/statistics/stats.js:182 +#: ../root/statistics/stats.js:308 msgid "Count of all edits" msgstr "Totaal aantal bewerkingen" -#: ../root/statistics/stats.js:189 +#: ../root/statistics/stats.js:315 msgid "All edits that have been applied" msgstr "Alle bewerkingen die zijn doorgevoerd" -#: ../root/statistics/stats.js:190 +#: ../root/statistics/stats.js:316 msgid "Applied edits" msgstr "Toegepaste bewerkingen" -#: ../root/statistics/stats.js:195 ../root/statistics/stats.js:196 +#: ../root/statistics/stats.js:321 ../root/statistics/stats.js:322 msgid "Cancelled edits" msgstr "Geannuleerde bewerkingen" -#: ../root/statistics/stats.js:201 +#: ../root/statistics/stats.js:327 msgid "All edits that have hit an error" msgstr "Alle bewerkingen waarbij een fout is opgetreden" -#: ../root/statistics/stats.js:202 +#: ../root/statistics/stats.js:328 msgid "Error edits" msgstr "Foute bewerkingen" -#: ../root/statistics/stats.js:207 +#: ../root/statistics/stats.js:333 msgid "Evalnochange edits" msgstr "Evalnochange edits" -#: ../root/statistics/stats.js:208 +#: ../root/statistics/stats.js:334 msgid "Evalnochange Edits" msgstr "Evalnochange Edits" -#: ../root/statistics/stats.js:213 +#: ../root/statistics/stats.js:339 msgid "All edits that have failed dependency checks" msgstr "Alle bewerkingen die niet door de controle van afhankelijkheden kwamen." -#: ../root/statistics/stats.js:214 +#: ../root/statistics/stats.js:340 msgid "Failed edits (dependency)" msgstr "Mislukte bewerkingen (afhankelijkheid)" -#: ../root/statistics/stats.js:219 +#: ../root/statistics/stats.js:345 msgid "All edits that have failed prerequisite checks" msgstr "Alle bewerkingen die niet door de controle van voorwaardes kwamen." -#: ../root/statistics/stats.js:220 +#: ../root/statistics/stats.js:346 msgid "Failed edits (prerequisite)" msgstr "Mislukte bewerkingen (voorwaarde)" -#: ../root/statistics/stats.js:225 +#: ../root/statistics/stats.js:351 msgid "All edits that have failed by being voted down" msgstr "Alle bewerkingen die zijn mislukt omdat ze zijn weggestemd" -#: ../root/statistics/stats.js:226 +#: ../root/statistics/stats.js:352 msgid "Failed edits (voted down)" msgstr "Mislukte bewerkingen (weggestemd)" -#: ../root/statistics/stats.js:231 +#: ../root/statistics/stats.js:357 msgid "Count of open edits" msgstr "Aantal open bewerkingen" -#: ../root/statistics/stats.js:232 +#: ../root/statistics/stats.js:358 msgid "Open Edits" msgstr "Open bewerkingen" -#: ../root/statistics/stats.js:237 +#: ../root/statistics/stats.js:363 msgid "Count of edits per day" msgstr "Aantal bewerkingen per dag" -#: ../root/statistics/stats.js:239 +#: ../root/statistics/stats.js:365 msgid "Edits per day" msgstr "Bewerkingen per dag" -#: ../root/statistics/stats.js:244 +#: ../root/statistics/stats.js:370 msgid "Count of edits per week" msgstr "Aantal bewerkingen per week" -#: ../root/statistics/stats.js:245 +#: ../root/statistics/stats.js:371 msgid "Edits per week" msgstr "Bewerkingen per week" -#: ../root/statistics/stats.js:250 +#: ../root/statistics/stats.js:376 msgid "Count of all editors" msgstr "Totaal aantal redacteurs" -#: ../root/statistics/stats.js:252 +#: ../root/statistics/stats.js:378 msgid "Editors (all)" msgstr "Redacteurs (totaal)" -#: ../root/statistics/stats.js:258 +#: ../root/statistics/stats.js:384 msgid "Count of active editors (editing or voting) during the last week" msgstr "Aantal actieve redacteurs (bewerken of stemmen) gedurende de afgelopen week" -#: ../root/statistics/stats.js:260 +#: ../root/statistics/stats.js:386 msgid "Active Users" msgstr "Actieve gebruikers" -#: ../root/statistics/stats.js:265 +#: ../root/statistics/stats.js:391 msgid "Count of deleted editors" msgstr "Aantal verwijderde redacteurs" -#: ../root/statistics/stats.js:267 +#: ../root/statistics/stats.js:393 msgid "Editors (deleted)" msgstr "Redacteurs (verwijderd)" -#: ../root/statistics/stats.js:273 +#: ../root/statistics/stats.js:399 msgid "Count of editors who have submitted edits during the last 7 days" msgstr "Aantal redacteurs dat gedurende de afgelopen 7 dagen bewerkingen heeft ingediend" -#: ../root/statistics/stats.js:275 +#: ../root/statistics/stats.js:401 msgid "Active Editors" msgstr "Actieve redacteurs" -#: ../root/statistics/stats.js:280 +#: ../root/statistics/stats.js:406 msgid "Count of non-deleted editors" msgstr "Aantal niet-verwijderde redacteurs" -#: ../root/statistics/stats.js:282 +#: ../root/statistics/stats.js:408 msgid "Editors (valid)" msgstr "Redacteurs (geldig)" -#: ../root/statistics/stats.js:287 +#: ../root/statistics/stats.js:413 msgid "Count of active editors" msgstr "Aantal actieve redacteurs" -#: ../root/statistics/stats.js:289 +#: ../root/statistics/stats.js:415 msgid "Editors (valid & active ever)" msgstr "Redacteurs (geldig & ooit actief)" -#: ../root/statistics/stats.js:295 +#: ../root/statistics/stats.js:421 msgid "Count of editors who have voted on during the last 7 days" msgstr "Aantal redacteurs dat gedurende de afgelopen 7 dagen heeft gestemd" -#: ../root/statistics/stats.js:297 +#: ../root/statistics/stats.js:423 msgid "Active Voters" msgstr "Actieve stemmers" -#: ../root/statistics/stats.js:302 +#: ../root/statistics/stats.js:428 msgid "Count of all events" msgstr "Totaal aantal evenementen" -#: ../root/statistics/stats.js:308 +#: ../root/statistics/stats.js:434 msgid "Count of all instruments" msgstr "Totaal aantal instrumenten" -#: ../root/statistics/stats.js:314 +#: ../root/statistics/stats.js:440 msgid "Count of all IPIs" msgstr "Totaal aantal IPI’s" -#: ../root/statistics/stats.js:315 +#: ../root/statistics/stats.js:441 msgid "IPIs" msgstr "IPI’s" -#: ../root/statistics/stats.js:320 +#: ../root/statistics/stats.js:446 msgid "Count of all IPIs for Artists" msgstr "Totaal aantal IPI’s van artiesten" -#: ../root/statistics/stats.js:321 +#: ../root/statistics/stats.js:447 msgid "Artist IPIs" msgstr "Artiest-IPI’s" -#: ../root/statistics/stats.js:326 +#: ../root/statistics/stats.js:452 msgid "Count of all IPIs for Labels" msgstr "Totaal aantal IPI’s van platenmaatschappijen" -#: ../root/statistics/stats.js:327 +#: ../root/statistics/stats.js:453 msgid "Label IPIs" msgstr "IPI’s van platenmaatschappijen" -#: ../root/statistics/stats.js:332 +#: ../root/statistics/stats.js:458 msgid "Count of all ISNIs" msgstr "Totaal aantal ISNI’s" -#: ../root/statistics/stats.js:333 +#: ../root/statistics/stats.js:459 msgid "ISNIs" msgstr "ISNI’s" -#: ../root/statistics/stats.js:338 +#: ../root/statistics/stats.js:464 msgid "Count of all ISNIs for Artists" msgstr "Totaal aantal ISNI’s van artiesten" -#: ../root/statistics/stats.js:339 +#: ../root/statistics/stats.js:465 msgid "Artist ISNIs" msgstr "ISNI’s van artiesten" -#: ../root/statistics/stats.js:344 +#: ../root/statistics/stats.js:470 msgid "Count of all ISNIs for Labels" msgstr "Totaal aantal ISNI’s van platenmaatschappijen" -#: ../root/statistics/stats.js:345 +#: ../root/statistics/stats.js:471 msgid "Label ISNIs" msgstr "ISNI’s van platenmaatschappijen" -#: ../root/statistics/stats.js:350 ../root/statistics/stats.js:356 +#: ../root/statistics/stats.js:476 ../root/statistics/stats.js:482 msgid "Count of all ISRCs" msgstr "Totaal aantal ISRC’s" -#: ../root/statistics/stats.js:351 +#: ../root/statistics/stats.js:477 msgid "ISRCs" msgstr "ISRC’s" -#: ../root/statistics/stats.js:357 +#: ../root/statistics/stats.js:483 msgid "ISRCs (all)" msgstr "ISRC’s (totaal)" -#: ../root/statistics/stats.js:362 ../root/statistics/stats.js:368 +#: ../root/statistics/stats.js:488 ../root/statistics/stats.js:494 msgid "Count of all ISWCs" msgstr "Totaal aantal ISWC’s" -#: ../root/statistics/stats.js:363 +#: ../root/statistics/stats.js:489 msgid "ISWCs" msgstr "ISWC’s" -#: ../root/statistics/stats.js:369 +#: ../root/statistics/stats.js:495 msgid "ISWCs (all)" msgstr "ISWC’s (totaal)" -#: ../root/statistics/stats.js:374 +#: ../root/statistics/stats.js:500 msgid "Count of all labels" msgstr "Totaal aantal platenmaatschappijen" -#: ../root/statistics/stats.js:380 +#: ../root/statistics/stats.js:506 msgid "Labels with no country set" msgstr "Platenmaatschappijen zonder land" -#: ../root/statistics/stats.js:386 +#: ../root/statistics/stats.js:512 msgid "Count of all mediums" msgstr "Totaal aantal media" -#: ../root/statistics/stats.js:392 +#: ../root/statistics/stats.js:518 msgid "Mediums with no format set" msgstr "Media waarvan het type niet is ingesteld" -#: ../root/statistics/stats.js:393 +#: ../root/statistics/stats.js:519 msgid "Unknown Format (medium)" msgstr "Onbekend mediumtype" -#: ../root/statistics/stats.js:398 +#: ../root/statistics/stats.js:524 msgid "Count of all Mediums with Disc IDs" msgstr "Totaal aantal media met disc-ID’s" -#: ../root/statistics/stats.js:399 +#: ../root/statistics/stats.js:525 msgid "Mediums with Disc IDs" msgstr "Media met disc-ID’s" -#: ../root/statistics/stats.js:404 +#: ../root/statistics/stats.js:530 msgid "Count of all places" msgstr "Totaal aantal plaatsen" -#: ../root/statistics/stats.js:410 +#: ../root/statistics/stats.js:536 msgid "Count of all Releases at Default Data Quality" msgstr "Totaal aantal uitgaven met een standaard gegevenskwaliteit" -#: ../root/statistics/stats.js:411 +#: ../root/statistics/stats.js:537 msgid "Default Data Quality" msgstr "standaard gegevenskwaliteit" -#: ../root/statistics/stats.js:416 +#: ../root/statistics/stats.js:542 msgid "Count of all Releases at High Data Quality" msgstr "Totaal aantal uitgaven met een hoge gegevenskwaliteit" -#: ../root/statistics/stats.js:417 +#: ../root/statistics/stats.js:543 msgid "High Data Quality" msgstr "hoge gegevenskwaliteit" -#: ../root/statistics/stats.js:422 +#: ../root/statistics/stats.js:548 msgid "Count of all Releases at Low Data Quality" msgstr "Totaal aantal uitgaven met een lage gegevenskwaliteit" -#: ../root/statistics/stats.js:423 +#: ../root/statistics/stats.js:549 msgid "Low Data Quality" msgstr "lage gegevenskwaliteit" -#: ../root/statistics/stats.js:428 +#: ../root/statistics/stats.js:554 msgid "Count of all Releases at Normal Data Quality" msgstr "Totaal aantal uitgaven met een normale gegevenskwaliteit" -#: ../root/statistics/stats.js:429 +#: ../root/statistics/stats.js:555 msgid "Normal Data Quality" msgstr "normale gegevenskwaliteit" -#: ../root/statistics/stats.js:434 +#: ../root/statistics/stats.js:560 msgid "Count of all Releases at Unknown Data Quality" msgstr "Totaal aantal uitgave met een onbekende gegevenskwaliteit" -#: ../root/statistics/stats.js:435 +#: ../root/statistics/stats.js:561 msgid "Unknown Data Quality" msgstr "Kwaliteit van de gegevens onbekend" -#: ../root/statistics/stats.js:440 +#: ../root/statistics/stats.js:566 msgid "Count of all Ratings" msgstr "Totaal aantal waarderingen" -#: ../root/statistics/stats.js:441 +#: ../root/statistics/stats.js:567 msgid "Ratings" msgstr "Waarderingen" -#: ../root/statistics/stats.js:446 +#: ../root/statistics/stats.js:572 msgid "Count of all Artist Ratings" msgstr "Totaal aantal waarderingen van artiesten" -#: ../root/statistics/stats.js:447 +#: ../root/statistics/stats.js:573 msgid "Artist Ratings" msgstr "Waarderingen van de artiest" -#: ../root/statistics/stats.js:452 +#: ../root/statistics/stats.js:578 msgid "Count of all Label Ratings" msgstr "Totaal aantal waarderingen van platenmaatschappijen" -#: ../root/statistics/stats.js:453 +#: ../root/statistics/stats.js:579 msgid "Label Ratings" msgstr "Waarderingen van de platenmaatschappij" -#: ../root/statistics/stats.js:458 +#: ../root/statistics/stats.js:584 msgid "Count of all Place Ratings" msgstr "Aantal waarderingen van plaatsen" -#: ../root/statistics/stats.js:459 +#: ../root/statistics/stats.js:585 msgid "Place Ratings" msgstr "Waarderingen van plaatsen" -#: ../root/statistics/stats.js:464 +#: ../root/statistics/stats.js:590 msgid "Count of all Ratings (raw)" msgstr "Aantal waarderingen (totaal)" -#: ../root/statistics/stats.js:465 +#: ../root/statistics/stats.js:591 msgid "Ratings (raw)" msgstr "Waarderingen (totaal)" -#: ../root/statistics/stats.js:470 +#: ../root/statistics/stats.js:596 msgid "Count of all Artist Ratings (raw)" msgstr "Aantal waarderingen van artiesten (totaal)" -#: ../root/statistics/stats.js:471 +#: ../root/statistics/stats.js:597 msgid "Artist Ratings (raw)" msgstr "Waarderingen van artiesten (totaal)" -#: ../root/statistics/stats.js:476 +#: ../root/statistics/stats.js:602 msgid "Count of all Label Ratings (raw)" msgstr "Aantal waarderingen van platenmaatschappijen (totaal)" -#: ../root/statistics/stats.js:477 +#: ../root/statistics/stats.js:603 msgid "Label Ratings (raw)" msgstr "Waarderingen van platenmaatschappijen (totaal)" -#: ../root/statistics/stats.js:482 +#: ../root/statistics/stats.js:608 msgid "Count of all Place Ratings (raw)" msgstr "Aantal waarderingen van plaatsen (totaal)" -#: ../root/statistics/stats.js:483 +#: ../root/statistics/stats.js:609 msgid "Place Ratings (raw)" msgstr "Waarderingen van plaatsen (totaal)" -#: ../root/statistics/stats.js:488 +#: ../root/statistics/stats.js:614 msgid "Count of all Recording Ratings (raw)" msgstr "Aantal waarderingen van opnames (totaal)" -#: ../root/statistics/stats.js:489 +#: ../root/statistics/stats.js:615 msgid "Recording Ratings (raw)" msgstr "Waarderingen van opnames (totaal)" -#: ../root/statistics/stats.js:494 +#: ../root/statistics/stats.js:620 msgid "Count of all Release Group Ratings (raw)" msgstr "Aantal waarderingen van uitgavegroepen (totaal)" -#: ../root/statistics/stats.js:495 +#: ../root/statistics/stats.js:621 msgid "Release Group Ratings (raw)" msgstr "Waarderingen van uitgavegroepen (totaal)" -#: ../root/statistics/stats.js:500 +#: ../root/statistics/stats.js:626 msgid "Count of all Work Ratings (raw)" msgstr "Aantal waarderingen van composities (totaal)" -#: ../root/statistics/stats.js:501 +#: ../root/statistics/stats.js:627 msgid "Work Ratings (raw)" msgstr "Waarderingen van composities (totaal)" -#: ../root/statistics/stats.js:506 +#: ../root/statistics/stats.js:632 msgid "Count of all Recording Ratings" msgstr "Totaal aantal waarderingen van opnames" -#: ../root/statistics/stats.js:507 +#: ../root/statistics/stats.js:633 msgid "Recording Ratings" msgstr "Waarderingen van de opname" -#: ../root/statistics/stats.js:512 +#: ../root/statistics/stats.js:638 msgid "Count of all Release Group Ratings" msgstr "Totaal aantal waarderingen van uitgavegroepen" -#: ../root/statistics/stats.js:513 +#: ../root/statistics/stats.js:639 msgid "Release Group Ratings" msgstr "Waarderingen van de uitgavegroep" -#: ../root/statistics/stats.js:518 +#: ../root/statistics/stats.js:644 msgid "Count of all Work Ratings" msgstr "Totaal aantal waarderingen voor composities" -#: ../root/statistics/stats.js:519 +#: ../root/statistics/stats.js:645 msgid "Work Ratings" msgstr "Compositiewaarderingen" -#: ../root/statistics/stats.js:524 +#: ../root/statistics/stats.js:650 msgid "Count of all recordings" msgstr "Totaal aantal opnames" -#: ../root/statistics/stats.js:530 +#: ../root/statistics/stats.js:656 msgid "Count of all Recordings with ISRCs" msgstr "Totaal aantal opnames met ISRC’s" -#: ../root/statistics/stats.js:531 +#: ../root/statistics/stats.js:657 msgid "Recordings with ISRCs" msgstr "Opnames met ISRC’s" -#: ../root/statistics/stats.js:536 +#: ../root/statistics/stats.js:662 msgid "Count of all standalone recordings" msgstr "Totaal aantal losse opnames (zonder uitgave)" -#: ../root/statistics/stats.js:537 +#: ../root/statistics/stats.js:663 msgid "Standalone recordings" msgstr "Losse opnames (zonder uitgave)" -#: ../root/statistics/stats.js:542 +#: ../root/statistics/stats.js:668 msgid "Count of all releases" msgstr "Totale aantal uitgaven" -#: ../root/statistics/stats.js:548 +#: ../root/statistics/stats.js:674 msgid "Releases with no country set" msgstr "Uitgaven waarvan het land niet is ingesteld" -#: ../root/statistics/stats.js:554 ../root/statistics/stats.js:555 -#: ../root/statistics/stats.js:572 +#: ../root/statistics/stats.js:680 ../root/statistics/stats.js:681 +#: ../root/statistics/stats.js:698 msgid "Releases with Amazon Cover Art" msgstr "Uitgaven met afbeeldingen van Amazon" -#: ../root/statistics/stats.js:560 ../root/statistics/stats.js:561 +#: ../root/statistics/stats.js:686 ../root/statistics/stats.js:687 msgid "Releases with CAA Cover Art" msgstr "Uitgaven met afbeeldingen van het CAA" -#: ../root/statistics/stats.js:566 ../root/statistics/stats.js:567 +#: ../root/statistics/stats.js:692 ../root/statistics/stats.js:693 msgid "Releases with No Cover Art" msgstr "Uitgaven zonder afbeeldingen" -#: ../root/statistics/stats.js:573 +#: ../root/statistics/stats.js:699 msgid "Releases with Cover Art from Relationships" msgstr "Uitgaven met afbeeldingen van relaties." -#: ../root/statistics/stats.js:578 +#: ../root/statistics/stats.js:704 msgid "Releases with a no-format medium" msgstr "Uitgaven met een medium zonder ingesteld type" -#: ../root/statistics/stats.js:579 +#: ../root/statistics/stats.js:705 msgid "Unknown Format (release)" msgstr "Onbekend mediumtype (uitgave)" -#: ../root/statistics/stats.js:584 ../root/statistics/stats.js:585 +#: ../root/statistics/stats.js:710 ../root/statistics/stats.js:711 msgid "Releases with Cover Art" msgstr "Uitgaven met afbeeldingen" -#: ../root/statistics/stats.js:590 +#: ../root/statistics/stats.js:716 msgid "Count of all Releases with Disc IDs" msgstr "Totaal aantal uitgaven met disc-ID’s" -#: ../root/statistics/stats.js:591 +#: ../root/statistics/stats.js:717 msgid "Releases with Disc IDs" msgstr "Uitgaven met disc-ID’s" -#: ../root/statistics/stats.js:596 +#: ../root/statistics/stats.js:722 msgid "Releases with no language set" msgstr "Uitgaven waarvoor geen taal is ingesteld" -#: ../root/statistics/stats.js:597 +#: ../root/statistics/stats.js:723 msgid "Unknown Language" msgstr "Onbekende taal" -#: ../root/statistics/stats.js:602 +#: ../root/statistics/stats.js:728 msgid "Count of all Releases not V.A." msgstr "Totaal aantal uitgaven van een enkele artiest" -#: ../root/statistics/stats.js:603 +#: ../root/statistics/stats.js:729 msgid "Releases not VA" msgstr "Uitgaven van één artiest" -#: ../root/statistics/stats.js:608 +#: ../root/statistics/stats.js:734 msgid "Releases with no script set" msgstr "Uitgaven waarvoor geen schrift is ingesteld" -#: ../root/statistics/stats.js:609 +#: ../root/statistics/stats.js:735 msgid "Unknown Script" msgstr "Onbekend schrift" -#: ../root/statistics/stats.js:614 +#: ../root/statistics/stats.js:740 msgid "Count of all Releases by Various Artists" msgstr "Totaal aantal uitgaven van diverse artiesten" -#: ../root/statistics/stats.js:615 +#: ../root/statistics/stats.js:741 msgid "Releases (VA)" msgstr "Uitgaven (Diverse Artiesten)" -#: ../root/statistics/stats.js:620 +#: ../root/statistics/stats.js:746 msgid "Count of all release groups" msgstr "Totale aantal uitgavegroepen" -#: ../root/statistics/stats.js:626 +#: ../root/statistics/stats.js:752 msgid "Count of all series" msgstr "Totaal aantal series" -#: ../root/statistics/stats.js:632 +#: ../root/statistics/stats.js:758 msgid "Count of all Tags" msgstr "Totaal aantal etiketten" -#: ../root/statistics/stats.js:633 +#: ../root/statistics/stats.js:759 msgid "Tags" msgstr "Etiketten" -#: ../root/statistics/stats.js:638 +#: ../root/statistics/stats.js:764 msgid "Count of all Tags (raw)" msgstr "Aantal etiketten (totaal)" -#: ../root/statistics/stats.js:639 +#: ../root/statistics/stats.js:765 msgid "Tags (raw)" msgstr "Etiketten (totaal)" -#: ../root/statistics/stats.js:644 +#: ../root/statistics/stats.js:770 msgid "Count of all Area Tags (raw)" msgstr "Aantal etiketten (totaal)" -#: ../root/statistics/stats.js:645 +#: ../root/statistics/stats.js:771 msgid "Area Tags (raw)" msgstr "Etiketten van gebieden (totaal)" -#: ../root/statistics/stats.js:650 +#: ../root/statistics/stats.js:776 msgid "Count of all Artist Tags (raw)" msgstr "Aantal etiketten van artiesten (totaal)" -#: ../root/statistics/stats.js:651 +#: ../root/statistics/stats.js:777 msgid "Artist Tags (raw)" msgstr "Etiketten van artiesten (totaal)" -#: ../root/statistics/stats.js:656 +#: ../root/statistics/stats.js:782 msgid "Count of all Instrument Tags (raw)" msgstr "Aantal etiketten van instrumenten (totaal)" -#: ../root/statistics/stats.js:657 +#: ../root/statistics/stats.js:783 msgid "Instrument Tags (raw)" msgstr "Etiketten van instrumenten (totaal)" -#: ../root/statistics/stats.js:662 +#: ../root/statistics/stats.js:788 msgid "Count of all Label Tags (raw)" msgstr "Aantal etiketten van platenmaatschappijen (totaal)" -#: ../root/statistics/stats.js:663 +#: ../root/statistics/stats.js:789 msgid "Label Tags (raw)" msgstr "Etiketten van platenmaatschappijen (totaal)" -#: ../root/statistics/stats.js:668 +#: ../root/statistics/stats.js:794 msgid "Count of all Recording Tags (raw)" msgstr "Aantal etiketten van opnames (totaal)" -#: ../root/statistics/stats.js:669 +#: ../root/statistics/stats.js:795 msgid "Recording Tags (raw)" msgstr "Etiketten van opnames (totaal)" -#: ../root/statistics/stats.js:674 +#: ../root/statistics/stats.js:800 msgid "Count of all Release Tags (raw)" msgstr "Aantal etiketten van uitgaven (totaal)" -#: ../root/statistics/stats.js:675 +#: ../root/statistics/stats.js:801 msgid "Release Tags (raw)" msgstr "Waarderingen van uitgaven (totaal)" -#: ../root/statistics/stats.js:680 +#: ../root/statistics/stats.js:806 msgid "Count of all Release Group Tags (raw)" msgstr "Aantal etiketten van uitgavegroepen (totaal)" -#: ../root/statistics/stats.js:681 +#: ../root/statistics/stats.js:807 msgid "Release Group Tags (raw)" msgstr "Etiketten van uitgavegroepen (totaal)" -#: ../root/statistics/stats.js:686 +#: ../root/statistics/stats.js:812 msgid "Count of all Series Tags (raw)" msgstr "Aantal etiketten van series (totaal)" -#: ../root/statistics/stats.js:687 +#: ../root/statistics/stats.js:813 msgid "Series Tags (raw)" msgstr "Etiketten van series (totaal)" -#: ../root/statistics/stats.js:692 +#: ../root/statistics/stats.js:818 msgid "Count of all Work Tags (raw)" msgstr "Aantal etiketten van composities (totaal)" -#: ../root/statistics/stats.js:693 +#: ../root/statistics/stats.js:819 msgid "Work Tags (raw)" msgstr "Etiketten van composities (totaal)" -#: ../root/statistics/stats.js:698 +#: ../root/statistics/stats.js:824 msgid "Count of all Tracks" msgstr "Totaal aantal nummers" -#: ../root/statistics/stats.js:699 +#: ../root/statistics/stats.js:825 msgid "Tracks" msgstr "Nummers" -#: ../root/statistics/stats.js:704 +#: ../root/statistics/stats.js:830 msgid "Count of all votes" msgstr "Totaal aantal stemmen" -#: ../root/statistics/stats.js:711 +#: ../root/statistics/stats.js:837 msgid "Count of all Abstain votes" msgstr "Totaal aantal stemmen onthouding" -#: ../root/statistics/stats.js:712 +#: ../root/statistics/stats.js:838 msgid "Abstentions" msgstr "Onthoudingen" -#: ../root/statistics/stats.js:717 +#: ../root/statistics/stats.js:843 msgid "Count of all No votes" msgstr "Totaal aantal tegenstemmen" -#: ../root/statistics/stats.js:718 +#: ../root/statistics/stats.js:844 msgid "No Votes" msgstr "Geen stemmen" -#: ../root/statistics/stats.js:723 +#: ../root/statistics/stats.js:849 msgid "Count of votes per day" msgstr "Aantal stemmen per dag" -#: ../root/statistics/stats.js:725 +#: ../root/statistics/stats.js:851 msgid "Votes per day" msgstr "Stemmen per dag" -#: ../root/statistics/stats.js:730 +#: ../root/statistics/stats.js:856 msgid "Count of votes per week" msgstr "Aantal stemmen per week" -#: ../root/statistics/stats.js:731 +#: ../root/statistics/stats.js:857 msgid "Votes per week" msgstr "Stemmen per week" -#: ../root/statistics/stats.js:736 +#: ../root/statistics/stats.js:862 msgid "Count of all Yes votes" msgstr "Totaal aantal voorstemmen" -#: ../root/statistics/stats.js:737 +#: ../root/statistics/stats.js:863 msgid "Yes Votes" msgstr "Voorstemmen" -#: ../root/statistics/stats.js:742 +#: ../root/statistics/stats.js:868 msgid "Count of all works" msgstr "Totaal aantal composities" -#: ../root/statistics/stats.js:748 +#: ../root/statistics/stats.js:874 msgid "Count of all Works with ISWCs" msgstr "Totaal aantal composities met ISWC’s" -#: ../root/statistics/stats.js:749 +#: ../root/statistics/stats.js:875 msgid "Works with ISWCs" msgstr "Composities met ISWC’s" -#: ../root/statistics/stats.js:751 +#: ../root/statistics/stats.js:877 msgid "/day" msgstr "/dag" -#: ../root/statistics/stats.js:760 +#: ../root/statistics/stats.js:886 msgid "Count of all Releases with {n} Disc IDs" msgstr "Totaal aantal uitgaven met {n} disc-ID’s" -#: ../root/statistics/stats.js:762 +#: ../root/statistics/stats.js:888 msgid "Releases with 1 Disc ID" msgid_plural "Releases with {n} Disc IDs" msgstr[0] "Uitgaven met één disc-id" msgstr[1] "Uitgaven met {n} disc-ID’s" -#: ../root/statistics/stats.js:772 +#: ../root/statistics/stats.js:898 msgid "Count of all Mediums with {n} Disc IDs" msgstr "Totaal aantal media met {n} disc-ID’s" -#: ../root/statistics/stats.js:774 +#: ../root/statistics/stats.js:900 msgid "Mediums with 1 Disc ID" msgid_plural "Mediums with {n} Disc IDs" msgstr[0] "Media met 1 disc-id" msgstr[1] "Media met {n} disc-ID’s" -#: ../root/statistics/stats.js:784 +#: ../root/statistics/stats.js:910 msgid "Count of all Recordings with {n} Releases" msgstr "Totaal aantal opnames met {n} uitgaven" -#: ../root/statistics/stats.js:786 +#: ../root/statistics/stats.js:912 msgid "Recordings with 1 Release" msgid_plural "Recordings with {n} Releases" msgstr[0] "Opnames met één uitgave" msgstr[1] "Opnames met {n} uitgaven" -#: ../root/statistics/stats.js:796 +#: ../root/statistics/stats.js:922 msgid "Count of all Release Groups with {n} Releases" msgstr "Totaal aantal uitgavegroepen met {n} uitgaven" -#: ../root/statistics/stats.js:798 +#: ../root/statistics/stats.js:924 msgid "Release Groups with 1 Release" msgid_plural "Release Groups with {n} Releases" msgstr[0] "Uitgavegroepen met 1 uitgave" msgstr[1] "Uitgavegroepen met {n} uitgaven" -#: ../root/statistics/stats.js:840 +#: ../root/statistics/stats.js:966 msgid "{country} artists" msgstr "artiesten uit {country}" -#: ../root/statistics/stats.js:847 +#: ../root/statistics/stats.js:973 msgid "{country} labels" msgstr "platenmaatschappijen uit {country}" -#: ../root/statistics/stats.js:854 +#: ../root/statistics/stats.js:980 msgid "{country} releases" msgstr "uitgaven uit {country}" -#: ../root/statistics/stats.js:866 +#: ../root/statistics/stats.js:992 msgid "{name} releases" msgstr "uitgaven met de naam {name}" -#: ../root/statistics/stats.js:873 +#: ../root/statistics/stats.js:999 msgid "{name} mediums" msgstr "{name} media" -#: ../root/statistics/stats.js:885 +#: ../root/statistics/stats.js:1011 msgid "{language} releases" msgstr "uitgaven in het {language}" -#: ../root/statistics/stats.js:892 +#: ../root/statistics/stats.js:1018 msgid "l_{first}_{second} Relationships" msgstr "l_{first}_{second}-relaties" -#: ../root/statistics/stats.js:913 +#: ../root/statistics/stats.js:1039 msgid "{script} releases" msgstr "uitgaven in het {script} schrift" diff --git a/po/statistics.pot b/po/statistics.pot index a3cbd487373..2ff571101f5 100644 --- a/po/statistics.pot +++ b/po/statistics.pot @@ -1143,15 +1143,15 @@ msgid "Draw a rectangle on either graph" msgstr "" #: ../root/statistics/layout.tt:4 ../root/statistics/Editors.js:98 -#: ../root/statistics/Editors.js:109 ../root/statistics/Index.js:924 +#: ../root/statistics/Editors.js:109 ../root/statistics/Index.js:1083 #: ../root/statistics/StatisticsLayout.js:82 msgid "Editors" msgstr "" #: ../root/statistics/layout.tt:4 ../root/statistics/Edits.js:37 #: ../root/statistics/Edits.js:41 ../root/statistics/Edits.js:50 -#: ../root/statistics/Index.js:1048 ../root/statistics/StatisticsLayout.js:72 -#: ../root/statistics/stats.js:184 +#: ../root/statistics/Index.js:1207 ../root/statistics/StatisticsLayout.js:72 +#: ../root/statistics/stats.js:310 msgid "Edits" msgstr "" @@ -1238,20 +1238,20 @@ msgstr "" msgid "Country" msgstr "" -#: ../root/statistics/Countries.js:53 ../root/statistics/Index.js:227 -#: ../root/statistics/Index.js:231 ../root/statistics/stats.js:45 +#: ../root/statistics/Countries.js:53 ../root/statistics/Index.js:231 +#: ../root/statistics/Index.js:235 ../root/statistics/stats.js:45 msgid "Artists" msgstr "" #: ../root/statistics/Countries.js:57 ../root/statistics/CoverArt.js:105 -#: ../root/statistics/Formats.js:56 ../root/statistics/Index.js:359 +#: ../root/statistics/Formats.js:56 ../root/statistics/Index.js:363 #: ../root/statistics/LanguagesScripts.js:71 -#: ../root/statistics/LanguagesScripts.js:152 ../root/statistics/stats.js:543 +#: ../root/statistics/LanguagesScripts.js:152 ../root/statistics/stats.js:669 msgid "Releases" msgstr "" -#: ../root/statistics/Countries.js:61 ../root/statistics/Index.js:694 -#: ../root/statistics/Index.js:701 ../root/statistics/stats.js:375 +#: ../root/statistics/Countries.js:61 ../root/statistics/Index.js:698 +#: ../root/statistics/Index.js:705 ../root/statistics/stats.js:501 msgid "Labels" msgstr "" @@ -1261,7 +1261,7 @@ msgid "Total" msgstr "" #: ../root/statistics/Countries.js:87 ../root/statistics/stats.js:57 -#: ../root/statistics/stats.js:381 ../root/statistics/stats.js:549 +#: ../root/statistics/stats.js:507 ../root/statistics/stats.js:675 msgid "Unknown Country" msgstr "" @@ -1416,7 +1416,7 @@ msgstr "" msgid "% of total releases" msgstr "" -#: ../root/statistics/Formats.js:58 ../root/statistics/stats.js:387 +#: ../root/statistics/Formats.js:58 ../root/statistics/stats.js:513 msgid "Mediums" msgstr "" @@ -1436,27 +1436,27 @@ msgstr "" msgid "Core Entities" msgstr "" -#: ../root/statistics/Index.js:92 ../root/statistics/Index.js:234 +#: ../root/statistics/Index.js:92 ../root/statistics/Index.js:238 msgid "Artists:" msgstr "" -#: ../root/statistics/Index.js:96 ../root/statistics/Index.js:614 -#: ../root/statistics/Index.js:640 +#: ../root/statistics/Index.js:96 ../root/statistics/Index.js:618 +#: ../root/statistics/Index.js:644 msgid "Release Groups:" msgstr "" -#: ../root/statistics/Index.js:100 ../root/statistics/Index.js:362 -#: ../root/statistics/Index.js:384 ../root/statistics/Index.js:410 -#: ../root/statistics/Index.js:436 ../root/statistics/Index.js:470 -#: ../root/statistics/Index.js:519 +#: ../root/statistics/Index.js:100 ../root/statistics/Index.js:366 +#: ../root/statistics/Index.js:388 ../root/statistics/Index.js:414 +#: ../root/statistics/Index.js:440 ../root/statistics/Index.js:474 +#: ../root/statistics/Index.js:523 msgid "Releases:" msgstr "" -#: ../root/statistics/Index.js:104 ../root/statistics/Index.js:563 +#: ../root/statistics/Index.js:104 ../root/statistics/Index.js:567 msgid "Mediums:" msgstr "" -#: ../root/statistics/Index.js:108 ../root/statistics/Index.js:672 +#: ../root/statistics/Index.js:108 ../root/statistics/Index.js:676 msgid "Recordings:" msgstr "" @@ -1468,8 +1468,8 @@ msgstr "" msgid "Labels:" msgstr "" -#: ../root/statistics/Index.js:120 ../root/statistics/Index.js:729 -#: ../root/statistics/Index.js:761 +#: ../root/statistics/Index.js:120 ../root/statistics/Index.js:733 +#: ../root/statistics/Index.js:765 msgid "Works:" msgstr "" @@ -1477,24 +1477,24 @@ msgstr "" msgid "URLs:" msgstr "" -#: ../root/statistics/Index.js:128 ../root/statistics/Index.js:791 +#: ../root/statistics/Index.js:128 ../root/statistics/Index.js:795 msgid "Areas:" msgstr "" -#: ../root/statistics/Index.js:132 ../root/statistics/Index.js:819 +#: ../root/statistics/Index.js:132 ../root/statistics/Index.js:823 msgid "Places:" msgstr "" -#: ../root/statistics/Index.js:136 ../root/statistics/Index.js:847 +#: ../root/statistics/Index.js:136 ../root/statistics/Index.js:851 msgctxt "plural" msgid "Series:" msgstr "" -#: ../root/statistics/Index.js:140 ../root/statistics/Index.js:869 +#: ../root/statistics/Index.js:140 ../root/statistics/Index.js:873 msgid "Instruments:" msgstr "" -#: ../root/statistics/Index.js:144 ../root/statistics/Index.js:899 +#: ../root/statistics/Index.js:144 ../root/statistics/Index.js:903 msgid "Events:" msgstr "" @@ -1514,422 +1514,504 @@ msgstr "" msgid "Relationships:" msgstr "" -#: ../root/statistics/Index.js:167 +#: ../root/statistics/Index.js:167 ../root/statistics/Index.js:924 +#: ../root/statistics/Index.js:928 ../root/statistics/Index.js:931 +#: ../root/statistics/stats.js:171 +msgid "Collections" +msgstr "" + +#: ../root/statistics/Index.js:171 msgid "CD Stubs (all time / current):" msgstr "" -#: ../root/statistics/Index.js:176 +#: ../root/statistics/Index.js:180 msgid "Tags (raw / aggregated):" msgstr "" -#: ../root/statistics/Index.js:182 +#: ../root/statistics/Index.js:186 msgid "Ratings (raw / aggregated):" msgstr "" -#: ../root/statistics/Index.js:190 +#: ../root/statistics/Index.js:194 msgid "Identifiers" msgstr "" -#: ../root/statistics/Index.js:193 +#: ../root/statistics/Index.js:197 msgid "MBIDs:" msgstr "" -#: ../root/statistics/Index.js:197 +#: ../root/statistics/Index.js:201 msgid "ISRCs (all / unique):" msgstr "" -#: ../root/statistics/Index.js:203 +#: ../root/statistics/Index.js:207 msgid "ISWCs (all / unique):" msgstr "" -#: ../root/statistics/Index.js:209 ../root/statistics/Index.js:514 +#: ../root/statistics/Index.js:213 ../root/statistics/Index.js:518 msgid "Disc IDs:" msgstr "" -#: ../root/statistics/Index.js:213 +#: ../root/statistics/Index.js:217 msgid "Barcodes:" msgstr "" -#: ../root/statistics/Index.js:217 +#: ../root/statistics/Index.js:221 msgid "IPIs:" msgstr "" -#: ../root/statistics/Index.js:221 +#: ../root/statistics/Index.js:225 msgid "ISNIs:" msgstr "" -#: ../root/statistics/Index.js:240 +#: ../root/statistics/Index.js:244 msgid "of type Person:" msgstr "" -#: ../root/statistics/Index.js:246 +#: ../root/statistics/Index.js:250 msgid "of type Group:" msgstr "" -#: ../root/statistics/Index.js:252 +#: ../root/statistics/Index.js:256 msgid "of type Orchestra:" msgstr "" -#: ../root/statistics/Index.js:258 +#: ../root/statistics/Index.js:262 msgid "of type Choir:" msgstr "" -#: ../root/statistics/Index.js:264 +#: ../root/statistics/Index.js:268 msgid "of type Character:" msgstr "" -#: ../root/statistics/Index.js:270 +#: ../root/statistics/Index.js:274 msgid "of type Other:" msgstr "" -#: ../root/statistics/Index.js:276 +#: ../root/statistics/Index.js:280 msgid "with no type set:" msgstr "" -#: ../root/statistics/Index.js:282 +#: ../root/statistics/Index.js:286 msgid "with appearances in artist credits:" msgstr "" -#: ../root/statistics/Index.js:288 +#: ../root/statistics/Index.js:292 msgid "with no appearances in artist credits:" msgstr "" -#: ../root/statistics/Index.js:293 +#: ../root/statistics/Index.js:297 msgid "Non-group artists:" msgstr "" -#: ../root/statistics/Index.js:299 +#: ../root/statistics/Index.js:303 msgid "Male:" msgstr "" -#: ../root/statistics/Index.js:310 +#: ../root/statistics/Index.js:314 msgid "Female:" msgstr "" -#: ../root/statistics/Index.js:321 +#: ../root/statistics/Index.js:325 msgid "Other gender:" msgstr "" -#: ../root/statistics/Index.js:332 +#: ../root/statistics/Index.js:336 msgid "Gender not applicable:" msgstr "" -#: ../root/statistics/Index.js:343 +#: ../root/statistics/Index.js:347 msgid "with no gender set:" msgstr "" -#: ../root/statistics/Index.js:355 +#: ../root/statistics/Index.js:359 msgid "Releases, Data Quality, and Disc IDs" msgstr "" -#: ../root/statistics/Index.js:368 +#: ../root/statistics/Index.js:372 msgid "by various artists:" msgstr "" -#: ../root/statistics/Index.js:374 +#: ../root/statistics/Index.js:378 msgid "by a single artist:" msgstr "" -#: ../root/statistics/Index.js:381 +#: ../root/statistics/Index.js:385 msgid "Release Status" msgstr "" -#: ../root/statistics/Index.js:400 +#: ../root/statistics/Index.js:404 msgid "No status set" msgstr "" -#: ../root/statistics/Index.js:407 +#: ../root/statistics/Index.js:411 msgid "Release Packaging" msgstr "" -#: ../root/statistics/Index.js:426 +#: ../root/statistics/Index.js:430 msgid "No packaging set" msgstr "" -#: ../root/statistics/Index.js:433 +#: ../root/statistics/Index.js:437 msgid "Cover Art Sources" msgstr "" -#: ../root/statistics/Index.js:442 +#: ../root/statistics/Index.js:446 msgid "CAA:" msgstr "" -#: ../root/statistics/Index.js:448 +#: ../root/statistics/Index.js:452 msgid "Amazon:" msgstr "" -#: ../root/statistics/Index.js:454 +#: ../root/statistics/Index.js:458 msgid "URL Relationships:" msgstr "" -#: ../root/statistics/Index.js:460 +#: ../root/statistics/Index.js:464 msgid "No front cover art:" msgstr "" -#: ../root/statistics/Index.js:467 +#: ../root/statistics/Index.js:471 msgid "Data Quality" msgstr "" -#: ../root/statistics/Index.js:476 +#: ../root/statistics/Index.js:480 msgid "High Data Quality:" msgstr "" -#: ../root/statistics/Index.js:482 +#: ../root/statistics/Index.js:486 msgid "Default Data Quality:" msgstr "" -#: ../root/statistics/Index.js:489 +#: ../root/statistics/Index.js:493 msgid "Normal Data Quality:" msgstr "" -#: ../root/statistics/Index.js:496 +#: ../root/statistics/Index.js:500 msgid "Unknown Data Quality:" msgstr "" -#: ../root/statistics/Index.js:504 +#: ../root/statistics/Index.js:508 msgid "Low Data Quality:" msgstr "" -#: ../root/statistics/Index.js:511 ../root/statistics/stats.js:177 +#: ../root/statistics/Index.js:515 ../root/statistics/stats.js:303 msgid "Disc IDs" msgstr "" -#: ../root/statistics/Index.js:525 +#: ../root/statistics/Index.js:529 msgid "Releases with no disc IDs:" msgstr "" -#: ../root/statistics/Index.js:532 +#: ../root/statistics/Index.js:536 msgid "Releases with at least one disc ID:" msgstr "" -#: ../root/statistics/Index.js:543 ../root/statistics/Index.js:587 +#: ../root/statistics/Index.js:547 ../root/statistics/Index.js:591 msgid "with {num} disc ID:" msgid_plural "with {num} disc IDs:" msgstr[0] "" msgstr[1] "" -#: ../root/statistics/Index.js:558 ../root/statistics/Index.js:600 +#: ../root/statistics/Index.js:562 ../root/statistics/Index.js:604 msgid "with 10 or more disc IDs:" msgstr "" -#: ../root/statistics/Index.js:569 +#: ../root/statistics/Index.js:573 msgid "Mediums with no disc IDs:" msgstr "" -#: ../root/statistics/Index.js:576 +#: ../root/statistics/Index.js:580 msgid "Mediums with at least one disc ID:" msgstr "" -#: ../root/statistics/Index.js:607 ../root/statistics/stats.js:621 +#: ../root/statistics/Index.js:611 ../root/statistics/stats.js:747 msgid "Release Groups" msgstr "" -#: ../root/statistics/Index.js:611 +#: ../root/statistics/Index.js:615 msgid "Primary Types" msgstr "" -#: ../root/statistics/Index.js:637 +#: ../root/statistics/Index.js:641 msgid "Secondary Types" msgstr "" -#: ../root/statistics/Index.js:665 ../root/statistics/Index.js:669 -#: ../root/statistics/stats.js:525 +#: ../root/statistics/Index.js:669 ../root/statistics/Index.js:673 +#: ../root/statistics/stats.js:651 msgid "Recordings" msgstr "" -#: ../root/statistics/Index.js:677 +#: ../root/statistics/Index.js:681 msgid "Videos:" msgstr "" -#: ../root/statistics/Index.js:682 +#: ../root/statistics/Index.js:686 msgctxt "recording" msgid "Standalone" msgstr "" -#: ../root/statistics/Index.js:687 +#: ../root/statistics/Index.js:691 msgid "With ISRCs" msgstr "" -#: ../root/statistics/Index.js:698 ../root/statistics/Index.js:726 -#: ../root/statistics/Index.js:788 ../root/statistics/Index.js:816 -#: ../root/statistics/Index.js:844 ../root/statistics/Index.js:866 -#: ../root/statistics/Index.js:896 +#: ../root/statistics/Index.js:702 ../root/statistics/Index.js:730 +#: ../root/statistics/Index.js:792 ../root/statistics/Index.js:820 +#: ../root/statistics/Index.js:848 ../root/statistics/Index.js:870 +#: ../root/statistics/Index.js:900 msgid "Types" msgstr "" -#: ../root/statistics/Index.js:715 ../root/statistics/Index.js:743 -#: ../root/statistics/Index.js:777 ../root/statistics/Index.js:805 -#: ../root/statistics/Index.js:833 ../root/statistics/Index.js:885 -#: ../root/statistics/Index.js:913 +#: ../root/statistics/Index.js:719 ../root/statistics/Index.js:747 +#: ../root/statistics/Index.js:781 ../root/statistics/Index.js:809 +#: ../root/statistics/Index.js:837 ../root/statistics/Index.js:889 +#: ../root/statistics/Index.js:917 msgid "None" msgstr "" -#: ../root/statistics/Index.js:722 ../root/statistics/LanguagesScripts.js:75 -#: ../root/statistics/stats.js:743 +#: ../root/statistics/Index.js:726 ../root/statistics/LanguagesScripts.js:75 +#: ../root/statistics/stats.js:869 msgid "Works" msgstr "" -#: ../root/statistics/Index.js:748 +#: ../root/statistics/Index.js:752 msgid "With ISWCs" msgstr "" -#: ../root/statistics/Index.js:758 +#: ../root/statistics/Index.js:762 msgid "Attributes" msgstr "" -#: ../root/statistics/Index.js:784 ../root/statistics/stats.js:39 +#: ../root/statistics/Index.js:788 ../root/statistics/stats.js:39 msgid "Areas" msgstr "" -#: ../root/statistics/Index.js:812 ../root/statistics/stats.js:405 +#: ../root/statistics/Index.js:816 ../root/statistics/stats.js:531 msgid "Places" msgstr "" -#: ../root/statistics/Index.js:840 ../root/statistics/stats.js:627 +#: ../root/statistics/Index.js:844 ../root/statistics/stats.js:753 msgctxt "plural" msgid "Series" msgstr "" -#: ../root/statistics/Index.js:862 ../root/statistics/stats.js:309 +#: ../root/statistics/Index.js:866 ../root/statistics/stats.js:435 msgid "Instruments" msgstr "" -#: ../root/statistics/Index.js:892 ../root/statistics/stats.js:303 +#: ../root/statistics/Index.js:896 ../root/statistics/stats.js:429 msgid "Events" msgstr "" -#: ../root/statistics/Index.js:920 +#: ../root/statistics/Index.js:937 +msgid "Of releases" +msgstr "" + +#: ../root/statistics/Index.js:944 ../root/statistics/Index.js:977 +msgid "Generic" +msgstr "" + +#: ../root/statistics/Index.js:953 +msgid "Owned music" +msgstr "" + +#: ../root/statistics/Index.js:962 +msgid "Wishlist" +msgstr "" + +#: ../root/statistics/Index.js:970 +msgid "Of events" +msgstr "" + +#: ../root/statistics/Index.js:986 +msgid "Of type Attending" +msgstr "" + +#: ../root/statistics/Index.js:995 +msgid "Of type Maybe attending" +msgstr "" + +#: ../root/statistics/Index.js:1006 +msgid "Of areas" +msgstr "" + +#: ../root/statistics/Index.js:1012 +msgid "Of artists" +msgstr "" + +#: ../root/statistics/Index.js:1018 +msgid "Of instruments" +msgstr "" + +#: ../root/statistics/Index.js:1024 +msgid "Of labels" +msgstr "" + +#: ../root/statistics/Index.js:1030 +msgid "Of places" +msgstr "" + +#: ../root/statistics/Index.js:1036 +msgid "Of recordings" +msgstr "" + +#: ../root/statistics/Index.js:1042 +msgid "Of release groups" +msgstr "" + +#: ../root/statistics/Index.js:1048 +msgid "Of series" +msgstr "" + +#: ../root/statistics/Index.js:1054 +msgid "Of works" +msgstr "" + +#: ../root/statistics/Index.js:1060 +msgid "Public" +msgstr "" + +#: ../root/statistics/Index.js:1066 +msgid "Private" +msgstr "" + +#: ../root/statistics/Index.js:1072 +msgid "With collaborators" +msgstr "" + +#: ../root/statistics/Index.js:1079 msgid "Editors, Edits, and Votes" msgstr "" -#: ../root/statistics/Index.js:927 +#: ../root/statistics/Index.js:1086 msgid "Editors (valid):" msgstr "" -#: ../root/statistics/Index.js:933 +#: ../root/statistics/Index.js:1092 msgid "active ever:" msgstr "" -#: ../root/statistics/Index.js:941 +#: ../root/statistics/Index.js:1100 msgid "who edited and/or voted in the last 7 days:" msgstr "" -#: ../root/statistics/Index.js:950 +#: ../root/statistics/Index.js:1109 msgid "who edited in the last 7 days:" msgstr "" -#: ../root/statistics/Index.js:958 +#: ../root/statistics/Index.js:1117 msgid "who voted in the last 7 days:" msgstr "" -#: ../root/statistics/Index.js:965 +#: ../root/statistics/Index.js:1124 msgid "who edit:" msgstr "" -#: ../root/statistics/Index.js:972 +#: ../root/statistics/Index.js:1131 msgid "who vote:" msgstr "" -#: ../root/statistics/Index.js:979 +#: ../root/statistics/Index.js:1138 msgid "who leave edit notes:" msgstr "" -#: ../root/statistics/Index.js:986 +#: ../root/statistics/Index.js:1145 msgid "who use tags:" msgstr "" -#: ../root/statistics/Index.js:993 +#: ../root/statistics/Index.js:1152 msgid "who use ratings:" msgstr "" -#: ../root/statistics/Index.js:1002 +#: ../root/statistics/Index.js:1161 msgid "who use subscriptions:" msgstr "" -#: ../root/statistics/Index.js:1011 +#: ../root/statistics/Index.js:1170 msgid "who use collections:" msgstr "" -#: ../root/statistics/Index.js:1021 +#: ../root/statistics/Index.js:1180 msgid "who have registered applications:" msgstr "" -#: ../root/statistics/Index.js:1030 +#: ../root/statistics/Index.js:1189 msgid "validated email only:" msgstr "" -#: ../root/statistics/Index.js:1036 +#: ../root/statistics/Index.js:1195 msgid "inactive:" msgstr "" -#: ../root/statistics/Index.js:1041 +#: ../root/statistics/Index.js:1200 msgid "Editors (deleted):" msgstr "" -#: ../root/statistics/Index.js:1051 ../root/statistics/Index.js:1098 +#: ../root/statistics/Index.js:1210 ../root/statistics/Index.js:1257 msgid "Edits:" msgstr "" -#: ../root/statistics/Index.js:1057 +#: ../root/statistics/Index.js:1216 msgid "Open:" msgstr "" -#: ../root/statistics/Index.js:1063 +#: ../root/statistics/Index.js:1222 msgid "Applied:" msgstr "" -#: ../root/statistics/Index.js:1069 +#: ../root/statistics/Index.js:1228 msgid "Voted down:" msgstr "" -#: ../root/statistics/Index.js:1075 +#: ../root/statistics/Index.js:1234 msgid "Failed (dependency):" msgstr "" -#: ../root/statistics/Index.js:1081 +#: ../root/statistics/Index.js:1240 msgid "Failed (prerequisite):" msgstr "" -#: ../root/statistics/Index.js:1087 +#: ../root/statistics/Index.js:1246 msgid "Failed (internal error):" msgstr "" -#: ../root/statistics/Index.js:1093 +#: ../root/statistics/Index.js:1252 msgid "Cancelled:" msgstr "" -#: ../root/statistics/Index.js:1104 ../root/statistics/Index.js:1156 +#: ../root/statistics/Index.js:1263 ../root/statistics/Index.js:1315 msgid "Last 7 days:" msgstr "" -#: ../root/statistics/Index.js:1111 ../root/statistics/Index.js:1163 +#: ../root/statistics/Index.js:1270 ../root/statistics/Index.js:1322 msgid "Yesterday:" msgstr "" -#: ../root/statistics/Index.js:1118 ../root/statistics/stats.js:706 +#: ../root/statistics/Index.js:1277 ../root/statistics/stats.js:832 msgid "Votes" msgstr "" -#: ../root/statistics/Index.js:1121 ../root/statistics/Index.js:1150 +#: ../root/statistics/Index.js:1280 ../root/statistics/Index.js:1309 msgid "Votes:" msgstr "" -#: ../root/statistics/Index.js:1127 +#: ../root/statistics/Index.js:1286 msgctxt "vote" msgid "Approve" msgstr "" -#: ../root/statistics/Index.js:1133 +#: ../root/statistics/Index.js:1292 msgctxt "vote" msgid "Yes" msgstr "" -#: ../root/statistics/Index.js:1139 +#: ../root/statistics/Index.js:1298 msgctxt "vote" msgid "No" msgstr "" -#: ../root/statistics/Index.js:1145 +#: ../root/statistics/Index.js:1304 msgctxt "vote" msgid "Abstain" msgstr "" @@ -2205,744 +2287,824 @@ msgstr "" msgid "CDStub tracks" msgstr "" -#: ../root/statistics/stats.js:170 ../root/statistics/stats.js:171 +#: ../root/statistics/stats.js:177 +msgid "Collections with collaborators" +msgstr "" + +#: ../root/statistics/stats.js:183 +msgid "Private collections" +msgstr "" + +#: ../root/statistics/stats.js:189 +msgid "Public collections" +msgstr "" + +#: ../root/statistics/stats.js:195 +msgid "Area collections" +msgstr "" + +#: ../root/statistics/stats.js:201 +msgid "Artist collections" +msgstr "" + +#: ../root/statistics/stats.js:207 +msgid "Collections of type Attending" +msgstr "" + +#: ../root/statistics/stats.js:213 +msgid "Collections of type Event" +msgstr "" + +#: ../root/statistics/stats.js:219 +msgid "Event collections (all types)" +msgstr "" + +#: ../root/statistics/stats.js:225 +msgid "Instrument collections" +msgstr "" + +#: ../root/statistics/stats.js:231 +msgid "Label collections" +msgstr "" + +#: ../root/statistics/stats.js:237 +msgid "Collections of type Maybe attending" +msgstr "" + +#: ../root/statistics/stats.js:243 +msgid "Collections of type Owned music" +msgstr "" + +#: ../root/statistics/stats.js:249 +msgid "Place collections" +msgstr "" + +#: ../root/statistics/stats.js:255 +msgid "Recording collections" +msgstr "" + +#: ../root/statistics/stats.js:261 +msgid "Collections of type Release" +msgstr "" + +#: ../root/statistics/stats.js:267 +msgid "Release collections (all types)" +msgstr "" + +#: ../root/statistics/stats.js:273 +msgid "Release group collections" +msgstr "" + +#: ../root/statistics/stats.js:279 +msgid "Series collections" +msgstr "" + +#: ../root/statistics/stats.js:285 +msgid "Collections of type Wishlist" +msgstr "" + +#: ../root/statistics/stats.js:291 +msgid "Work collections" +msgstr "" + +#: ../root/statistics/stats.js:296 ../root/statistics/stats.js:297 msgid "Pieces of Cover Art" msgstr "" -#: ../root/statistics/stats.js:176 +#: ../root/statistics/stats.js:302 msgid "Count of all Disc IDs" msgstr "" -#: ../root/statistics/stats.js:182 +#: ../root/statistics/stats.js:308 msgid "Count of all edits" msgstr "" -#: ../root/statistics/stats.js:189 +#: ../root/statistics/stats.js:315 msgid "All edits that have been applied" msgstr "" -#: ../root/statistics/stats.js:190 +#: ../root/statistics/stats.js:316 msgid "Applied edits" msgstr "" -#: ../root/statistics/stats.js:195 ../root/statistics/stats.js:196 +#: ../root/statistics/stats.js:321 ../root/statistics/stats.js:322 msgid "Cancelled edits" msgstr "" -#: ../root/statistics/stats.js:201 +#: ../root/statistics/stats.js:327 msgid "All edits that have hit an error" msgstr "" -#: ../root/statistics/stats.js:202 +#: ../root/statistics/stats.js:328 msgid "Error edits" msgstr "" -#: ../root/statistics/stats.js:207 +#: ../root/statistics/stats.js:333 msgid "Evalnochange edits" msgstr "" -#: ../root/statistics/stats.js:208 +#: ../root/statistics/stats.js:334 msgid "Evalnochange Edits" msgstr "" -#: ../root/statistics/stats.js:213 +#: ../root/statistics/stats.js:339 msgid "All edits that have failed dependency checks" msgstr "" -#: ../root/statistics/stats.js:214 +#: ../root/statistics/stats.js:340 msgid "Failed edits (dependency)" msgstr "" -#: ../root/statistics/stats.js:219 +#: ../root/statistics/stats.js:345 msgid "All edits that have failed prerequisite checks" msgstr "" -#: ../root/statistics/stats.js:220 +#: ../root/statistics/stats.js:346 msgid "Failed edits (prerequisite)" msgstr "" -#: ../root/statistics/stats.js:225 +#: ../root/statistics/stats.js:351 msgid "All edits that have failed by being voted down" msgstr "" -#: ../root/statistics/stats.js:226 +#: ../root/statistics/stats.js:352 msgid "Failed edits (voted down)" msgstr "" -#: ../root/statistics/stats.js:231 +#: ../root/statistics/stats.js:357 msgid "Count of open edits" msgstr "" -#: ../root/statistics/stats.js:232 +#: ../root/statistics/stats.js:358 msgid "Open Edits" msgstr "" -#: ../root/statistics/stats.js:237 +#: ../root/statistics/stats.js:363 msgid "Count of edits per day" msgstr "" -#: ../root/statistics/stats.js:239 +#: ../root/statistics/stats.js:365 msgid "Edits per day" msgstr "" -#: ../root/statistics/stats.js:244 +#: ../root/statistics/stats.js:370 msgid "Count of edits per week" msgstr "" -#: ../root/statistics/stats.js:245 +#: ../root/statistics/stats.js:371 msgid "Edits per week" msgstr "" -#: ../root/statistics/stats.js:250 +#: ../root/statistics/stats.js:376 msgid "Count of all editors" msgstr "" -#: ../root/statistics/stats.js:252 +#: ../root/statistics/stats.js:378 msgid "Editors (all)" msgstr "" -#: ../root/statistics/stats.js:258 +#: ../root/statistics/stats.js:384 msgid "Count of active editors (editing or voting) during the last week" msgstr "" -#: ../root/statistics/stats.js:260 +#: ../root/statistics/stats.js:386 msgid "Active Users" msgstr "" -#: ../root/statistics/stats.js:265 +#: ../root/statistics/stats.js:391 msgid "Count of deleted editors" msgstr "" -#: ../root/statistics/stats.js:267 +#: ../root/statistics/stats.js:393 msgid "Editors (deleted)" msgstr "" -#: ../root/statistics/stats.js:273 +#: ../root/statistics/stats.js:399 msgid "Count of editors who have submitted edits during the last 7 days" msgstr "" -#: ../root/statistics/stats.js:275 +#: ../root/statistics/stats.js:401 msgid "Active Editors" msgstr "" -#: ../root/statistics/stats.js:280 +#: ../root/statistics/stats.js:406 msgid "Count of non-deleted editors" msgstr "" -#: ../root/statistics/stats.js:282 +#: ../root/statistics/stats.js:408 msgid "Editors (valid)" msgstr "" -#: ../root/statistics/stats.js:287 +#: ../root/statistics/stats.js:413 msgid "Count of active editors" msgstr "" -#: ../root/statistics/stats.js:289 +#: ../root/statistics/stats.js:415 msgid "Editors (valid & active ever)" msgstr "" -#: ../root/statistics/stats.js:295 +#: ../root/statistics/stats.js:421 msgid "Count of editors who have voted on during the last 7 days" msgstr "" -#: ../root/statistics/stats.js:297 +#: ../root/statistics/stats.js:423 msgid "Active Voters" msgstr "" -#: ../root/statistics/stats.js:302 +#: ../root/statistics/stats.js:428 msgid "Count of all events" msgstr "" -#: ../root/statistics/stats.js:308 +#: ../root/statistics/stats.js:434 msgid "Count of all instruments" msgstr "" -#: ../root/statistics/stats.js:314 +#: ../root/statistics/stats.js:440 msgid "Count of all IPIs" msgstr "" -#: ../root/statistics/stats.js:315 +#: ../root/statistics/stats.js:441 msgid "IPIs" msgstr "" -#: ../root/statistics/stats.js:320 +#: ../root/statistics/stats.js:446 msgid "Count of all IPIs for Artists" msgstr "" -#: ../root/statistics/stats.js:321 +#: ../root/statistics/stats.js:447 msgid "Artist IPIs" msgstr "" -#: ../root/statistics/stats.js:326 +#: ../root/statistics/stats.js:452 msgid "Count of all IPIs for Labels" msgstr "" -#: ../root/statistics/stats.js:327 +#: ../root/statistics/stats.js:453 msgid "Label IPIs" msgstr "" -#: ../root/statistics/stats.js:332 +#: ../root/statistics/stats.js:458 msgid "Count of all ISNIs" msgstr "" -#: ../root/statistics/stats.js:333 +#: ../root/statistics/stats.js:459 msgid "ISNIs" msgstr "" -#: ../root/statistics/stats.js:338 +#: ../root/statistics/stats.js:464 msgid "Count of all ISNIs for Artists" msgstr "" -#: ../root/statistics/stats.js:339 +#: ../root/statistics/stats.js:465 msgid "Artist ISNIs" msgstr "" -#: ../root/statistics/stats.js:344 +#: ../root/statistics/stats.js:470 msgid "Count of all ISNIs for Labels" msgstr "" -#: ../root/statistics/stats.js:345 +#: ../root/statistics/stats.js:471 msgid "Label ISNIs" msgstr "" -#: ../root/statistics/stats.js:350 ../root/statistics/stats.js:356 +#: ../root/statistics/stats.js:476 ../root/statistics/stats.js:482 msgid "Count of all ISRCs" msgstr "" -#: ../root/statistics/stats.js:351 +#: ../root/statistics/stats.js:477 msgid "ISRCs" msgstr "" -#: ../root/statistics/stats.js:357 +#: ../root/statistics/stats.js:483 msgid "ISRCs (all)" msgstr "" -#: ../root/statistics/stats.js:362 ../root/statistics/stats.js:368 +#: ../root/statistics/stats.js:488 ../root/statistics/stats.js:494 msgid "Count of all ISWCs" msgstr "" -#: ../root/statistics/stats.js:363 +#: ../root/statistics/stats.js:489 msgid "ISWCs" msgstr "" -#: ../root/statistics/stats.js:369 +#: ../root/statistics/stats.js:495 msgid "ISWCs (all)" msgstr "" -#: ../root/statistics/stats.js:374 +#: ../root/statistics/stats.js:500 msgid "Count of all labels" msgstr "" -#: ../root/statistics/stats.js:380 +#: ../root/statistics/stats.js:506 msgid "Labels with no country set" msgstr "" -#: ../root/statistics/stats.js:386 +#: ../root/statistics/stats.js:512 msgid "Count of all mediums" msgstr "" -#: ../root/statistics/stats.js:392 +#: ../root/statistics/stats.js:518 msgid "Mediums with no format set" msgstr "" -#: ../root/statistics/stats.js:393 +#: ../root/statistics/stats.js:519 msgid "Unknown Format (medium)" msgstr "" -#: ../root/statistics/stats.js:398 +#: ../root/statistics/stats.js:524 msgid "Count of all Mediums with Disc IDs" msgstr "" -#: ../root/statistics/stats.js:399 +#: ../root/statistics/stats.js:525 msgid "Mediums with Disc IDs" msgstr "" -#: ../root/statistics/stats.js:404 +#: ../root/statistics/stats.js:530 msgid "Count of all places" msgstr "" -#: ../root/statistics/stats.js:410 +#: ../root/statistics/stats.js:536 msgid "Count of all Releases at Default Data Quality" msgstr "" -#: ../root/statistics/stats.js:411 +#: ../root/statistics/stats.js:537 msgid "Default Data Quality" msgstr "" -#: ../root/statistics/stats.js:416 +#: ../root/statistics/stats.js:542 msgid "Count of all Releases at High Data Quality" msgstr "" -#: ../root/statistics/stats.js:417 +#: ../root/statistics/stats.js:543 msgid "High Data Quality" msgstr "" -#: ../root/statistics/stats.js:422 +#: ../root/statistics/stats.js:548 msgid "Count of all Releases at Low Data Quality" msgstr "" -#: ../root/statistics/stats.js:423 +#: ../root/statistics/stats.js:549 msgid "Low Data Quality" msgstr "" -#: ../root/statistics/stats.js:428 +#: ../root/statistics/stats.js:554 msgid "Count of all Releases at Normal Data Quality" msgstr "" -#: ../root/statistics/stats.js:429 +#: ../root/statistics/stats.js:555 msgid "Normal Data Quality" msgstr "" -#: ../root/statistics/stats.js:434 +#: ../root/statistics/stats.js:560 msgid "Count of all Releases at Unknown Data Quality" msgstr "" -#: ../root/statistics/stats.js:435 +#: ../root/statistics/stats.js:561 msgid "Unknown Data Quality" msgstr "" -#: ../root/statistics/stats.js:440 +#: ../root/statistics/stats.js:566 msgid "Count of all Ratings" msgstr "" -#: ../root/statistics/stats.js:441 +#: ../root/statistics/stats.js:567 msgid "Ratings" msgstr "" -#: ../root/statistics/stats.js:446 +#: ../root/statistics/stats.js:572 msgid "Count of all Artist Ratings" msgstr "" -#: ../root/statistics/stats.js:447 +#: ../root/statistics/stats.js:573 msgid "Artist Ratings" msgstr "" -#: ../root/statistics/stats.js:452 +#: ../root/statistics/stats.js:578 msgid "Count of all Label Ratings" msgstr "" -#: ../root/statistics/stats.js:453 +#: ../root/statistics/stats.js:579 msgid "Label Ratings" msgstr "" -#: ../root/statistics/stats.js:458 +#: ../root/statistics/stats.js:584 msgid "Count of all Place Ratings" msgstr "" -#: ../root/statistics/stats.js:459 +#: ../root/statistics/stats.js:585 msgid "Place Ratings" msgstr "" -#: ../root/statistics/stats.js:464 +#: ../root/statistics/stats.js:590 msgid "Count of all Ratings (raw)" msgstr "" -#: ../root/statistics/stats.js:465 +#: ../root/statistics/stats.js:591 msgid "Ratings (raw)" msgstr "" -#: ../root/statistics/stats.js:470 +#: ../root/statistics/stats.js:596 msgid "Count of all Artist Ratings (raw)" msgstr "" -#: ../root/statistics/stats.js:471 +#: ../root/statistics/stats.js:597 msgid "Artist Ratings (raw)" msgstr "" -#: ../root/statistics/stats.js:476 +#: ../root/statistics/stats.js:602 msgid "Count of all Label Ratings (raw)" msgstr "" -#: ../root/statistics/stats.js:477 +#: ../root/statistics/stats.js:603 msgid "Label Ratings (raw)" msgstr "" -#: ../root/statistics/stats.js:482 +#: ../root/statistics/stats.js:608 msgid "Count of all Place Ratings (raw)" msgstr "" -#: ../root/statistics/stats.js:483 +#: ../root/statistics/stats.js:609 msgid "Place Ratings (raw)" msgstr "" -#: ../root/statistics/stats.js:488 +#: ../root/statistics/stats.js:614 msgid "Count of all Recording Ratings (raw)" msgstr "" -#: ../root/statistics/stats.js:489 +#: ../root/statistics/stats.js:615 msgid "Recording Ratings (raw)" msgstr "" -#: ../root/statistics/stats.js:494 +#: ../root/statistics/stats.js:620 msgid "Count of all Release Group Ratings (raw)" msgstr "" -#: ../root/statistics/stats.js:495 +#: ../root/statistics/stats.js:621 msgid "Release Group Ratings (raw)" msgstr "" -#: ../root/statistics/stats.js:500 +#: ../root/statistics/stats.js:626 msgid "Count of all Work Ratings (raw)" msgstr "" -#: ../root/statistics/stats.js:501 +#: ../root/statistics/stats.js:627 msgid "Work Ratings (raw)" msgstr "" -#: ../root/statistics/stats.js:506 +#: ../root/statistics/stats.js:632 msgid "Count of all Recording Ratings" msgstr "" -#: ../root/statistics/stats.js:507 +#: ../root/statistics/stats.js:633 msgid "Recording Ratings" msgstr "" -#: ../root/statistics/stats.js:512 +#: ../root/statistics/stats.js:638 msgid "Count of all Release Group Ratings" msgstr "" -#: ../root/statistics/stats.js:513 +#: ../root/statistics/stats.js:639 msgid "Release Group Ratings" msgstr "" -#: ../root/statistics/stats.js:518 +#: ../root/statistics/stats.js:644 msgid "Count of all Work Ratings" msgstr "" -#: ../root/statistics/stats.js:519 +#: ../root/statistics/stats.js:645 msgid "Work Ratings" msgstr "" -#: ../root/statistics/stats.js:524 +#: ../root/statistics/stats.js:650 msgid "Count of all recordings" msgstr "" -#: ../root/statistics/stats.js:530 +#: ../root/statistics/stats.js:656 msgid "Count of all Recordings with ISRCs" msgstr "" -#: ../root/statistics/stats.js:531 +#: ../root/statistics/stats.js:657 msgid "Recordings with ISRCs" msgstr "" -#: ../root/statistics/stats.js:536 +#: ../root/statistics/stats.js:662 msgid "Count of all standalone recordings" msgstr "" -#: ../root/statistics/stats.js:537 +#: ../root/statistics/stats.js:663 msgid "Standalone recordings" msgstr "" -#: ../root/statistics/stats.js:542 +#: ../root/statistics/stats.js:668 msgid "Count of all releases" msgstr "" -#: ../root/statistics/stats.js:548 +#: ../root/statistics/stats.js:674 msgid "Releases with no country set" msgstr "" -#: ../root/statistics/stats.js:554 ../root/statistics/stats.js:555 -#: ../root/statistics/stats.js:572 +#: ../root/statistics/stats.js:680 ../root/statistics/stats.js:681 +#: ../root/statistics/stats.js:698 msgid "Releases with Amazon Cover Art" msgstr "" -#: ../root/statistics/stats.js:560 ../root/statistics/stats.js:561 +#: ../root/statistics/stats.js:686 ../root/statistics/stats.js:687 msgid "Releases with CAA Cover Art" msgstr "" -#: ../root/statistics/stats.js:566 ../root/statistics/stats.js:567 +#: ../root/statistics/stats.js:692 ../root/statistics/stats.js:693 msgid "Releases with No Cover Art" msgstr "" -#: ../root/statistics/stats.js:573 +#: ../root/statistics/stats.js:699 msgid "Releases with Cover Art from Relationships" msgstr "" -#: ../root/statistics/stats.js:578 +#: ../root/statistics/stats.js:704 msgid "Releases with a no-format medium" msgstr "" -#: ../root/statistics/stats.js:579 +#: ../root/statistics/stats.js:705 msgid "Unknown Format (release)" msgstr "" -#: ../root/statistics/stats.js:584 ../root/statistics/stats.js:585 +#: ../root/statistics/stats.js:710 ../root/statistics/stats.js:711 msgid "Releases with Cover Art" msgstr "" -#: ../root/statistics/stats.js:590 +#: ../root/statistics/stats.js:716 msgid "Count of all Releases with Disc IDs" msgstr "" -#: ../root/statistics/stats.js:591 +#: ../root/statistics/stats.js:717 msgid "Releases with Disc IDs" msgstr "" -#: ../root/statistics/stats.js:596 +#: ../root/statistics/stats.js:722 msgid "Releases with no language set" msgstr "" -#: ../root/statistics/stats.js:597 +#: ../root/statistics/stats.js:723 msgid "Unknown Language" msgstr "" -#: ../root/statistics/stats.js:602 +#: ../root/statistics/stats.js:728 msgid "Count of all Releases not V.A." msgstr "" -#: ../root/statistics/stats.js:603 +#: ../root/statistics/stats.js:729 msgid "Releases not VA" msgstr "" -#: ../root/statistics/stats.js:608 +#: ../root/statistics/stats.js:734 msgid "Releases with no script set" msgstr "" -#: ../root/statistics/stats.js:609 +#: ../root/statistics/stats.js:735 msgid "Unknown Script" msgstr "" -#: ../root/statistics/stats.js:614 +#: ../root/statistics/stats.js:740 msgid "Count of all Releases by Various Artists" msgstr "" -#: ../root/statistics/stats.js:615 +#: ../root/statistics/stats.js:741 msgid "Releases (VA)" msgstr "" -#: ../root/statistics/stats.js:620 +#: ../root/statistics/stats.js:746 msgid "Count of all release groups" msgstr "" -#: ../root/statistics/stats.js:626 +#: ../root/statistics/stats.js:752 msgid "Count of all series" msgstr "" -#: ../root/statistics/stats.js:632 +#: ../root/statistics/stats.js:758 msgid "Count of all Tags" msgstr "" -#: ../root/statistics/stats.js:633 +#: ../root/statistics/stats.js:759 msgid "Tags" msgstr "" -#: ../root/statistics/stats.js:638 +#: ../root/statistics/stats.js:764 msgid "Count of all Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:639 +#: ../root/statistics/stats.js:765 msgid "Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:644 +#: ../root/statistics/stats.js:770 msgid "Count of all Area Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:645 +#: ../root/statistics/stats.js:771 msgid "Area Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:650 +#: ../root/statistics/stats.js:776 msgid "Count of all Artist Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:651 +#: ../root/statistics/stats.js:777 msgid "Artist Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:656 +#: ../root/statistics/stats.js:782 msgid "Count of all Instrument Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:657 +#: ../root/statistics/stats.js:783 msgid "Instrument Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:662 +#: ../root/statistics/stats.js:788 msgid "Count of all Label Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:663 +#: ../root/statistics/stats.js:789 msgid "Label Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:668 +#: ../root/statistics/stats.js:794 msgid "Count of all Recording Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:669 +#: ../root/statistics/stats.js:795 msgid "Recording Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:674 +#: ../root/statistics/stats.js:800 msgid "Count of all Release Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:675 +#: ../root/statistics/stats.js:801 msgid "Release Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:680 +#: ../root/statistics/stats.js:806 msgid "Count of all Release Group Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:681 +#: ../root/statistics/stats.js:807 msgid "Release Group Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:686 +#: ../root/statistics/stats.js:812 msgid "Count of all Series Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:687 +#: ../root/statistics/stats.js:813 msgid "Series Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:692 +#: ../root/statistics/stats.js:818 msgid "Count of all Work Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:693 +#: ../root/statistics/stats.js:819 msgid "Work Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:698 +#: ../root/statistics/stats.js:824 msgid "Count of all Tracks" msgstr "" -#: ../root/statistics/stats.js:699 +#: ../root/statistics/stats.js:825 msgid "Tracks" msgstr "" -#: ../root/statistics/stats.js:704 +#: ../root/statistics/stats.js:830 msgid "Count of all votes" msgstr "" -#: ../root/statistics/stats.js:711 +#: ../root/statistics/stats.js:837 msgid "Count of all Abstain votes" msgstr "" -#: ../root/statistics/stats.js:712 +#: ../root/statistics/stats.js:838 msgid "Abstentions" msgstr "" -#: ../root/statistics/stats.js:717 +#: ../root/statistics/stats.js:843 msgid "Count of all No votes" msgstr "" -#: ../root/statistics/stats.js:718 +#: ../root/statistics/stats.js:844 msgid "No Votes" msgstr "" -#: ../root/statistics/stats.js:723 +#: ../root/statistics/stats.js:849 msgid "Count of votes per day" msgstr "" -#: ../root/statistics/stats.js:725 +#: ../root/statistics/stats.js:851 msgid "Votes per day" msgstr "" -#: ../root/statistics/stats.js:730 +#: ../root/statistics/stats.js:856 msgid "Count of votes per week" msgstr "" -#: ../root/statistics/stats.js:731 +#: ../root/statistics/stats.js:857 msgid "Votes per week" msgstr "" -#: ../root/statistics/stats.js:736 +#: ../root/statistics/stats.js:862 msgid "Count of all Yes votes" msgstr "" -#: ../root/statistics/stats.js:737 +#: ../root/statistics/stats.js:863 msgid "Yes Votes" msgstr "" -#: ../root/statistics/stats.js:742 +#: ../root/statistics/stats.js:868 msgid "Count of all works" msgstr "" -#: ../root/statistics/stats.js:748 +#: ../root/statistics/stats.js:874 msgid "Count of all Works with ISWCs" msgstr "" -#: ../root/statistics/stats.js:749 +#: ../root/statistics/stats.js:875 msgid "Works with ISWCs" msgstr "" -#: ../root/statistics/stats.js:751 +#: ../root/statistics/stats.js:877 msgid "/day" msgstr "" -#: ../root/statistics/stats.js:760 +#: ../root/statistics/stats.js:886 msgid "Count of all Releases with {n} Disc IDs" msgstr "" -#: ../root/statistics/stats.js:762 +#: ../root/statistics/stats.js:888 msgid "Releases with 1 Disc ID" msgid_plural "Releases with {n} Disc IDs" msgstr[0] "" msgstr[1] "" -#: ../root/statistics/stats.js:772 +#: ../root/statistics/stats.js:898 msgid "Count of all Mediums with {n} Disc IDs" msgstr "" -#: ../root/statistics/stats.js:774 +#: ../root/statistics/stats.js:900 msgid "Mediums with 1 Disc ID" msgid_plural "Mediums with {n} Disc IDs" msgstr[0] "" msgstr[1] "" -#: ../root/statistics/stats.js:784 +#: ../root/statistics/stats.js:910 msgid "Count of all Recordings with {n} Releases" msgstr "" -#: ../root/statistics/stats.js:786 +#: ../root/statistics/stats.js:912 msgid "Recordings with 1 Release" msgid_plural "Recordings with {n} Releases" msgstr[0] "" msgstr[1] "" -#: ../root/statistics/stats.js:796 +#: ../root/statistics/stats.js:922 msgid "Count of all Release Groups with {n} Releases" msgstr "" -#: ../root/statistics/stats.js:798 +#: ../root/statistics/stats.js:924 msgid "Release Groups with 1 Release" msgid_plural "Release Groups with {n} Releases" msgstr[0] "" msgstr[1] "" -#: ../root/statistics/stats.js:840 +#: ../root/statistics/stats.js:966 msgid "{country} artists" msgstr "" -#: ../root/statistics/stats.js:847 +#: ../root/statistics/stats.js:973 msgid "{country} labels" msgstr "" -#: ../root/statistics/stats.js:854 +#: ../root/statistics/stats.js:980 msgid "{country} releases" msgstr "" -#: ../root/statistics/stats.js:866 +#: ../root/statistics/stats.js:992 msgid "{name} releases" msgstr "" -#: ../root/statistics/stats.js:873 +#: ../root/statistics/stats.js:999 msgid "{name} mediums" msgstr "" -#: ../root/statistics/stats.js:885 +#: ../root/statistics/stats.js:1011 msgid "{language} releases" msgstr "" -#: ../root/statistics/stats.js:892 +#: ../root/statistics/stats.js:1018 msgid "l_{first}_{second} Relationships" msgstr "" -#: ../root/statistics/stats.js:913 +#: ../root/statistics/stats.js:1039 msgid "{script} releases" msgstr "" diff --git a/po/statistics.sq.po b/po/statistics.sq.po index 0ebb1ad838e..930f48257d7 100644 --- a/po/statistics.sq.po +++ b/po/statistics.sq.po @@ -4,7 +4,7 @@ msgid "" msgstr "" "Project-Id-Version: MusicBrainz\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2021-07-19 17:37+0000\n" +"PO-Revision-Date: 2021-09-28 18:40+0000\n" "Last-Translator: Besnik Bleta <email address hidden>\n" "Language-Team: Albanian (http://www.transifex.com/musicbrainz/musicbrainz/language/sq/)\n" "MIME-Version: 1.0\n" @@ -1129,15 +1129,15 @@ msgid "Draw a rectangle on either graph" msgstr "" #: ../root/statistics/layout.tt:4 ../root/statistics/Editors.js:98 -#: ../root/statistics/Editors.js:109 ../root/statistics/Index.js:924 +#: ../root/statistics/Editors.js:109 ../root/statistics/Index.js:1083 #: ../root/statistics/StatisticsLayout.js:82 msgid "Editors" msgstr "Përpunues" #: ../root/statistics/layout.tt:4 ../root/statistics/Edits.js:37 #: ../root/statistics/Edits.js:41 ../root/statistics/Edits.js:50 -#: ../root/statistics/Index.js:1048 ../root/statistics/StatisticsLayout.js:72 -#: ../root/statistics/stats.js:184 +#: ../root/statistics/Index.js:1207 ../root/statistics/StatisticsLayout.js:72 +#: ../root/statistics/stats.js:310 msgid "Edits" msgstr "" @@ -1224,20 +1224,20 @@ msgstr "" msgid "Country" msgstr "Vend" -#: ../root/statistics/Countries.js:53 ../root/statistics/Index.js:227 -#: ../root/statistics/Index.js:231 ../root/statistics/stats.js:45 +#: ../root/statistics/Countries.js:53 ../root/statistics/Index.js:231 +#: ../root/statistics/Index.js:235 ../root/statistics/stats.js:45 msgid "Artists" msgstr "Artistë" #: ../root/statistics/Countries.js:57 ../root/statistics/CoverArt.js:105 -#: ../root/statistics/Formats.js:56 ../root/statistics/Index.js:359 +#: ../root/statistics/Formats.js:56 ../root/statistics/Index.js:363 #: ../root/statistics/LanguagesScripts.js:71 -#: ../root/statistics/LanguagesScripts.js:152 ../root/statistics/stats.js:543 +#: ../root/statistics/LanguagesScripts.js:152 ../root/statistics/stats.js:669 msgid "Releases" msgstr "Hedhje në qarkullim" -#: ../root/statistics/Countries.js:61 ../root/statistics/Index.js:694 -#: ../root/statistics/Index.js:701 ../root/statistics/stats.js:375 +#: ../root/statistics/Countries.js:61 ../root/statistics/Index.js:698 +#: ../root/statistics/Index.js:705 ../root/statistics/stats.js:501 msgid "Labels" msgstr "Etiketa" @@ -1247,7 +1247,7 @@ msgid "Total" msgstr "Githsej" #: ../root/statistics/Countries.js:87 ../root/statistics/stats.js:57 -#: ../root/statistics/stats.js:381 ../root/statistics/stats.js:549 +#: ../root/statistics/stats.js:507 ../root/statistics/stats.js:675 msgid "Unknown Country" msgstr "" @@ -1402,7 +1402,7 @@ msgstr "Format" msgid "% of total releases" msgstr "" -#: ../root/statistics/Formats.js:58 ../root/statistics/stats.js:387 +#: ../root/statistics/Formats.js:58 ../root/statistics/stats.js:513 msgid "Mediums" msgstr "" @@ -1422,27 +1422,27 @@ msgstr "" msgid "Core Entities" msgstr "" -#: ../root/statistics/Index.js:92 ../root/statistics/Index.js:234 +#: ../root/statistics/Index.js:92 ../root/statistics/Index.js:238 msgid "Artists:" msgstr "" -#: ../root/statistics/Index.js:96 ../root/statistics/Index.js:614 -#: ../root/statistics/Index.js:640 +#: ../root/statistics/Index.js:96 ../root/statistics/Index.js:618 +#: ../root/statistics/Index.js:644 msgid "Release Groups:" msgstr "" -#: ../root/statistics/Index.js:100 ../root/statistics/Index.js:362 -#: ../root/statistics/Index.js:384 ../root/statistics/Index.js:410 -#: ../root/statistics/Index.js:436 ../root/statistics/Index.js:470 -#: ../root/statistics/Index.js:519 +#: ../root/statistics/Index.js:100 ../root/statistics/Index.js:366 +#: ../root/statistics/Index.js:388 ../root/statistics/Index.js:414 +#: ../root/statistics/Index.js:440 ../root/statistics/Index.js:474 +#: ../root/statistics/Index.js:523 msgid "Releases:" msgstr "Hedhje në qarkullim:" -#: ../root/statistics/Index.js:104 ../root/statistics/Index.js:563 +#: ../root/statistics/Index.js:104 ../root/statistics/Index.js:567 msgid "Mediums:" msgstr "Media:" -#: ../root/statistics/Index.js:108 ../root/statistics/Index.js:672 +#: ../root/statistics/Index.js:108 ../root/statistics/Index.js:676 msgid "Recordings:" msgstr "Incizime:" @@ -1454,8 +1454,8 @@ msgstr "Pjesë:" msgid "Labels:" msgstr "Eetiketa:" -#: ../root/statistics/Index.js:120 ../root/statistics/Index.js:729 -#: ../root/statistics/Index.js:761 +#: ../root/statistics/Index.js:120 ../root/statistics/Index.js:733 +#: ../root/statistics/Index.js:765 msgid "Works:" msgstr "" @@ -1463,24 +1463,24 @@ msgstr "" msgid "URLs:" msgstr "" -#: ../root/statistics/Index.js:128 ../root/statistics/Index.js:791 +#: ../root/statistics/Index.js:128 ../root/statistics/Index.js:795 msgid "Areas:" msgstr "" -#: ../root/statistics/Index.js:132 ../root/statistics/Index.js:819 +#: ../root/statistics/Index.js:132 ../root/statistics/Index.js:823 msgid "Places:" msgstr "" -#: ../root/statistics/Index.js:136 ../root/statistics/Index.js:847 +#: ../root/statistics/Index.js:136 ../root/statistics/Index.js:851 msgctxt "plural" msgid "Series:" msgstr "Seri:" -#: ../root/statistics/Index.js:140 ../root/statistics/Index.js:869 +#: ../root/statistics/Index.js:140 ../root/statistics/Index.js:873 msgid "Instruments:" msgstr "" -#: ../root/statistics/Index.js:144 ../root/statistics/Index.js:899 +#: ../root/statistics/Index.js:144 ../root/statistics/Index.js:903 msgid "Events:" msgstr "" @@ -1500,422 +1500,504 @@ msgstr "" msgid "Relationships:" msgstr "Marrëdhënie:" -#: ../root/statistics/Index.js:167 +#: ../root/statistics/Index.js:167 ../root/statistics/Index.js:924 +#: ../root/statistics/Index.js:928 ../root/statistics/Index.js:931 +#: ../root/statistics/stats.js:171 +msgid "Collections" +msgstr "Koleksione" + +#: ../root/statistics/Index.js:171 msgid "CD Stubs (all time / current):" msgstr "" -#: ../root/statistics/Index.js:176 +#: ../root/statistics/Index.js:180 msgid "Tags (raw / aggregated):" msgstr "" -#: ../root/statistics/Index.js:182 +#: ../root/statistics/Index.js:186 msgid "Ratings (raw / aggregated):" msgstr "" -#: ../root/statistics/Index.js:190 +#: ../root/statistics/Index.js:194 msgid "Identifiers" msgstr "Identifikues" -#: ../root/statistics/Index.js:193 +#: ../root/statistics/Index.js:197 msgid "MBIDs:" msgstr "" -#: ../root/statistics/Index.js:197 +#: ../root/statistics/Index.js:201 msgid "ISRCs (all / unique):" msgstr "" -#: ../root/statistics/Index.js:203 +#: ../root/statistics/Index.js:207 msgid "ISWCs (all / unique):" msgstr "" -#: ../root/statistics/Index.js:209 ../root/statistics/Index.js:514 +#: ../root/statistics/Index.js:213 ../root/statistics/Index.js:518 msgid "Disc IDs:" msgstr "" -#: ../root/statistics/Index.js:213 +#: ../root/statistics/Index.js:217 msgid "Barcodes:" msgstr "" -#: ../root/statistics/Index.js:217 +#: ../root/statistics/Index.js:221 msgid "IPIs:" msgstr "" -#: ../root/statistics/Index.js:221 +#: ../root/statistics/Index.js:225 msgid "ISNIs:" msgstr "" -#: ../root/statistics/Index.js:240 +#: ../root/statistics/Index.js:244 msgid "of type Person:" msgstr "" -#: ../root/statistics/Index.js:246 +#: ../root/statistics/Index.js:250 msgid "of type Group:" msgstr "" -#: ../root/statistics/Index.js:252 +#: ../root/statistics/Index.js:256 msgid "of type Orchestra:" msgstr "" -#: ../root/statistics/Index.js:258 +#: ../root/statistics/Index.js:262 msgid "of type Choir:" msgstr "" -#: ../root/statistics/Index.js:264 +#: ../root/statistics/Index.js:268 msgid "of type Character:" msgstr "" -#: ../root/statistics/Index.js:270 +#: ../root/statistics/Index.js:274 msgid "of type Other:" msgstr "" -#: ../root/statistics/Index.js:276 +#: ../root/statistics/Index.js:280 msgid "with no type set:" msgstr "" -#: ../root/statistics/Index.js:282 +#: ../root/statistics/Index.js:286 msgid "with appearances in artist credits:" msgstr "" -#: ../root/statistics/Index.js:288 +#: ../root/statistics/Index.js:292 msgid "with no appearances in artist credits:" msgstr "" -#: ../root/statistics/Index.js:293 +#: ../root/statistics/Index.js:297 msgid "Non-group artists:" msgstr "" -#: ../root/statistics/Index.js:299 +#: ../root/statistics/Index.js:303 msgid "Male:" msgstr "" -#: ../root/statistics/Index.js:310 +#: ../root/statistics/Index.js:314 msgid "Female:" msgstr "" -#: ../root/statistics/Index.js:321 +#: ../root/statistics/Index.js:325 msgid "Other gender:" msgstr "" -#: ../root/statistics/Index.js:332 +#: ../root/statistics/Index.js:336 msgid "Gender not applicable:" msgstr "" -#: ../root/statistics/Index.js:343 +#: ../root/statistics/Index.js:347 msgid "with no gender set:" msgstr "" -#: ../root/statistics/Index.js:355 +#: ../root/statistics/Index.js:359 msgid "Releases, Data Quality, and Disc IDs" msgstr "" -#: ../root/statistics/Index.js:368 +#: ../root/statistics/Index.js:372 msgid "by various artists:" msgstr "" -#: ../root/statistics/Index.js:374 +#: ../root/statistics/Index.js:378 msgid "by a single artist:" msgstr "" -#: ../root/statistics/Index.js:381 +#: ../root/statistics/Index.js:385 msgid "Release Status" msgstr "Gjendje Hedhjeje Në Qarkullim" -#: ../root/statistics/Index.js:400 +#: ../root/statistics/Index.js:404 msgid "No status set" msgstr "" -#: ../root/statistics/Index.js:407 +#: ../root/statistics/Index.js:411 msgid "Release Packaging" msgstr "" -#: ../root/statistics/Index.js:426 +#: ../root/statistics/Index.js:430 msgid "No packaging set" msgstr "" -#: ../root/statistics/Index.js:433 +#: ../root/statistics/Index.js:437 msgid "Cover Art Sources" msgstr "" -#: ../root/statistics/Index.js:442 +#: ../root/statistics/Index.js:446 msgid "CAA:" msgstr "" -#: ../root/statistics/Index.js:448 +#: ../root/statistics/Index.js:452 msgid "Amazon:" msgstr "" -#: ../root/statistics/Index.js:454 +#: ../root/statistics/Index.js:458 msgid "URL Relationships:" msgstr "" -#: ../root/statistics/Index.js:460 +#: ../root/statistics/Index.js:464 msgid "No front cover art:" msgstr "" -#: ../root/statistics/Index.js:467 +#: ../root/statistics/Index.js:471 msgid "Data Quality" msgstr "Cilësi të Dhënash" -#: ../root/statistics/Index.js:476 +#: ../root/statistics/Index.js:480 msgid "High Data Quality:" msgstr "" -#: ../root/statistics/Index.js:482 +#: ../root/statistics/Index.js:486 msgid "Default Data Quality:" msgstr "" -#: ../root/statistics/Index.js:489 +#: ../root/statistics/Index.js:493 msgid "Normal Data Quality:" msgstr "" -#: ../root/statistics/Index.js:496 +#: ../root/statistics/Index.js:500 msgid "Unknown Data Quality:" msgstr "" -#: ../root/statistics/Index.js:504 +#: ../root/statistics/Index.js:508 msgid "Low Data Quality:" msgstr "" -#: ../root/statistics/Index.js:511 ../root/statistics/stats.js:177 +#: ../root/statistics/Index.js:515 ../root/statistics/stats.js:303 msgid "Disc IDs" msgstr "ID Disku" -#: ../root/statistics/Index.js:525 +#: ../root/statistics/Index.js:529 msgid "Releases with no disc IDs:" msgstr "" -#: ../root/statistics/Index.js:532 +#: ../root/statistics/Index.js:536 msgid "Releases with at least one disc ID:" msgstr "" -#: ../root/statistics/Index.js:543 ../root/statistics/Index.js:587 +#: ../root/statistics/Index.js:547 ../root/statistics/Index.js:591 msgid "with {num} disc ID:" msgid_plural "with {num} disc IDs:" msgstr[0] "" msgstr[1] "" -#: ../root/statistics/Index.js:558 ../root/statistics/Index.js:600 +#: ../root/statistics/Index.js:562 ../root/statistics/Index.js:604 msgid "with 10 or more disc IDs:" msgstr "" -#: ../root/statistics/Index.js:569 +#: ../root/statistics/Index.js:573 msgid "Mediums with no disc IDs:" msgstr "" -#: ../root/statistics/Index.js:576 +#: ../root/statistics/Index.js:580 msgid "Mediums with at least one disc ID:" msgstr "" -#: ../root/statistics/Index.js:607 ../root/statistics/stats.js:621 +#: ../root/statistics/Index.js:611 ../root/statistics/stats.js:747 msgid "Release Groups" msgstr "Grupe Hedhjesh Në Qarkullim" -#: ../root/statistics/Index.js:611 +#: ../root/statistics/Index.js:615 msgid "Primary Types" msgstr "" -#: ../root/statistics/Index.js:637 +#: ../root/statistics/Index.js:641 msgid "Secondary Types" msgstr "" -#: ../root/statistics/Index.js:665 ../root/statistics/Index.js:669 -#: ../root/statistics/stats.js:525 +#: ../root/statistics/Index.js:669 ../root/statistics/Index.js:673 +#: ../root/statistics/stats.js:651 msgid "Recordings" msgstr "Incizime" -#: ../root/statistics/Index.js:677 +#: ../root/statistics/Index.js:681 msgid "Videos:" msgstr "" -#: ../root/statistics/Index.js:682 +#: ../root/statistics/Index.js:686 msgctxt "recording" msgid "Standalone" msgstr "" -#: ../root/statistics/Index.js:687 +#: ../root/statistics/Index.js:691 msgid "With ISRCs" msgstr "" -#: ../root/statistics/Index.js:698 ../root/statistics/Index.js:726 -#: ../root/statistics/Index.js:788 ../root/statistics/Index.js:816 -#: ../root/statistics/Index.js:844 ../root/statistics/Index.js:866 -#: ../root/statistics/Index.js:896 +#: ../root/statistics/Index.js:702 ../root/statistics/Index.js:730 +#: ../root/statistics/Index.js:792 ../root/statistics/Index.js:820 +#: ../root/statistics/Index.js:848 ../root/statistics/Index.js:870 +#: ../root/statistics/Index.js:900 msgid "Types" msgstr "" -#: ../root/statistics/Index.js:715 ../root/statistics/Index.js:743 -#: ../root/statistics/Index.js:777 ../root/statistics/Index.js:805 -#: ../root/statistics/Index.js:833 ../root/statistics/Index.js:885 -#: ../root/statistics/Index.js:913 +#: ../root/statistics/Index.js:719 ../root/statistics/Index.js:747 +#: ../root/statistics/Index.js:781 ../root/statistics/Index.js:809 +#: ../root/statistics/Index.js:837 ../root/statistics/Index.js:889 +#: ../root/statistics/Index.js:917 msgid "None" msgstr "Asnjë" -#: ../root/statistics/Index.js:722 ../root/statistics/LanguagesScripts.js:75 -#: ../root/statistics/stats.js:743 +#: ../root/statistics/Index.js:726 ../root/statistics/LanguagesScripts.js:75 +#: ../root/statistics/stats.js:869 msgid "Works" msgstr "Vepra" -#: ../root/statistics/Index.js:748 +#: ../root/statistics/Index.js:752 msgid "With ISWCs" msgstr "" -#: ../root/statistics/Index.js:758 +#: ../root/statistics/Index.js:762 msgid "Attributes" msgstr "Atribute" -#: ../root/statistics/Index.js:784 ../root/statistics/stats.js:39 +#: ../root/statistics/Index.js:788 ../root/statistics/stats.js:39 msgid "Areas" msgstr "Zona" -#: ../root/statistics/Index.js:812 ../root/statistics/stats.js:405 +#: ../root/statistics/Index.js:816 ../root/statistics/stats.js:531 msgid "Places" msgstr "Vende" -#: ../root/statistics/Index.js:840 ../root/statistics/stats.js:627 +#: ../root/statistics/Index.js:844 ../root/statistics/stats.js:753 msgctxt "plural" msgid "Series" msgstr "Seri" -#: ../root/statistics/Index.js:862 ../root/statistics/stats.js:309 +#: ../root/statistics/Index.js:866 ../root/statistics/stats.js:435 msgid "Instruments" msgstr "Instrumenta" -#: ../root/statistics/Index.js:892 ../root/statistics/stats.js:303 +#: ../root/statistics/Index.js:896 ../root/statistics/stats.js:429 msgid "Events" msgstr "Veprimtari" -#: ../root/statistics/Index.js:920 +#: ../root/statistics/Index.js:937 +msgid "Of releases" +msgstr "" + +#: ../root/statistics/Index.js:944 ../root/statistics/Index.js:977 +msgid "Generic" +msgstr "" + +#: ../root/statistics/Index.js:953 +msgid "Owned music" +msgstr "" + +#: ../root/statistics/Index.js:962 +msgid "Wishlist" +msgstr "Listë dëshirash" + +#: ../root/statistics/Index.js:970 +msgid "Of events" +msgstr "" + +#: ../root/statistics/Index.js:986 +msgid "Of type Attending" +msgstr "" + +#: ../root/statistics/Index.js:995 +msgid "Of type Maybe attending" +msgstr "" + +#: ../root/statistics/Index.js:1006 +msgid "Of areas" +msgstr "" + +#: ../root/statistics/Index.js:1012 +msgid "Of artists" +msgstr "" + +#: ../root/statistics/Index.js:1018 +msgid "Of instruments" +msgstr "" + +#: ../root/statistics/Index.js:1024 +msgid "Of labels" +msgstr "" + +#: ../root/statistics/Index.js:1030 +msgid "Of places" +msgstr "" + +#: ../root/statistics/Index.js:1036 +msgid "Of recordings" +msgstr "" + +#: ../root/statistics/Index.js:1042 +msgid "Of release groups" +msgstr "" + +#: ../root/statistics/Index.js:1048 +msgid "Of series" +msgstr "" + +#: ../root/statistics/Index.js:1054 +msgid "Of works" +msgstr "" + +#: ../root/statistics/Index.js:1060 +msgid "Public" +msgstr "Publik" + +#: ../root/statistics/Index.js:1066 +msgid "Private" +msgstr "Privat" + +#: ../root/statistics/Index.js:1072 +msgid "With collaborators" +msgstr "" + +#: ../root/statistics/Index.js:1079 msgid "Editors, Edits, and Votes" msgstr "" -#: ../root/statistics/Index.js:927 +#: ../root/statistics/Index.js:1086 msgid "Editors (valid):" msgstr "" -#: ../root/statistics/Index.js:933 +#: ../root/statistics/Index.js:1092 msgid "active ever:" msgstr "" -#: ../root/statistics/Index.js:941 +#: ../root/statistics/Index.js:1100 msgid "who edited and/or voted in the last 7 days:" msgstr "" -#: ../root/statistics/Index.js:950 +#: ../root/statistics/Index.js:1109 msgid "who edited in the last 7 days:" msgstr "" -#: ../root/statistics/Index.js:958 +#: ../root/statistics/Index.js:1117 msgid "who voted in the last 7 days:" msgstr "" -#: ../root/statistics/Index.js:965 +#: ../root/statistics/Index.js:1124 msgid "who edit:" msgstr "" -#: ../root/statistics/Index.js:972 +#: ../root/statistics/Index.js:1131 msgid "who vote:" msgstr "" -#: ../root/statistics/Index.js:979 +#: ../root/statistics/Index.js:1138 msgid "who leave edit notes:" msgstr "" -#: ../root/statistics/Index.js:986 +#: ../root/statistics/Index.js:1145 msgid "who use tags:" msgstr "" -#: ../root/statistics/Index.js:993 +#: ../root/statistics/Index.js:1152 msgid "who use ratings:" msgstr "" -#: ../root/statistics/Index.js:1002 +#: ../root/statistics/Index.js:1161 msgid "who use subscriptions:" msgstr "" -#: ../root/statistics/Index.js:1011 +#: ../root/statistics/Index.js:1170 msgid "who use collections:" msgstr "" -#: ../root/statistics/Index.js:1021 +#: ../root/statistics/Index.js:1180 msgid "who have registered applications:" msgstr "" -#: ../root/statistics/Index.js:1030 +#: ../root/statistics/Index.js:1189 msgid "validated email only:" msgstr "" -#: ../root/statistics/Index.js:1036 +#: ../root/statistics/Index.js:1195 msgid "inactive:" msgstr "" -#: ../root/statistics/Index.js:1041 +#: ../root/statistics/Index.js:1200 msgid "Editors (deleted):" msgstr "" -#: ../root/statistics/Index.js:1051 ../root/statistics/Index.js:1098 +#: ../root/statistics/Index.js:1210 ../root/statistics/Index.js:1257 msgid "Edits:" msgstr "" -#: ../root/statistics/Index.js:1057 +#: ../root/statistics/Index.js:1216 msgid "Open:" msgstr "" -#: ../root/statistics/Index.js:1063 +#: ../root/statistics/Index.js:1222 msgid "Applied:" msgstr "" -#: ../root/statistics/Index.js:1069 +#: ../root/statistics/Index.js:1228 msgid "Voted down:" msgstr "" -#: ../root/statistics/Index.js:1075 +#: ../root/statistics/Index.js:1234 msgid "Failed (dependency):" msgstr "" -#: ../root/statistics/Index.js:1081 +#: ../root/statistics/Index.js:1240 msgid "Failed (prerequisite):" msgstr "" -#: ../root/statistics/Index.js:1087 +#: ../root/statistics/Index.js:1246 msgid "Failed (internal error):" msgstr "" -#: ../root/statistics/Index.js:1093 +#: ../root/statistics/Index.js:1252 msgid "Cancelled:" msgstr "Të anuluara:" -#: ../root/statistics/Index.js:1104 ../root/statistics/Index.js:1156 +#: ../root/statistics/Index.js:1263 ../root/statistics/Index.js:1315 msgid "Last 7 days:" msgstr "" -#: ../root/statistics/Index.js:1111 ../root/statistics/Index.js:1163 +#: ../root/statistics/Index.js:1270 ../root/statistics/Index.js:1322 msgid "Yesterday:" msgstr "" -#: ../root/statistics/Index.js:1118 ../root/statistics/stats.js:706 +#: ../root/statistics/Index.js:1277 ../root/statistics/stats.js:832 msgid "Votes" msgstr "Vota" -#: ../root/statistics/Index.js:1121 ../root/statistics/Index.js:1150 +#: ../root/statistics/Index.js:1280 ../root/statistics/Index.js:1309 msgid "Votes:" msgstr "" -#: ../root/statistics/Index.js:1127 +#: ../root/statistics/Index.js:1286 msgctxt "vote" msgid "Approve" msgstr "Miratoje" -#: ../root/statistics/Index.js:1133 +#: ../root/statistics/Index.js:1292 msgctxt "vote" msgid "Yes" msgstr "Po" -#: ../root/statistics/Index.js:1139 +#: ../root/statistics/Index.js:1298 msgctxt "vote" msgid "No" msgstr "Jo" -#: ../root/statistics/Index.js:1145 +#: ../root/statistics/Index.js:1304 msgctxt "vote" msgid "Abstain" msgstr "Abstenim" @@ -2192,744 +2274,824 @@ msgstr "" msgid "CDStub tracks" msgstr "" -#: ../root/statistics/stats.js:170 ../root/statistics/stats.js:171 +#: ../root/statistics/stats.js:177 +msgid "Collections with collaborators" +msgstr "" + +#: ../root/statistics/stats.js:183 +msgid "Private collections" +msgstr "" + +#: ../root/statistics/stats.js:189 +msgid "Public collections" +msgstr "" + +#: ../root/statistics/stats.js:195 +msgid "Area collections" +msgstr "" + +#: ../root/statistics/stats.js:201 +msgid "Artist collections" +msgstr "" + +#: ../root/statistics/stats.js:207 +msgid "Collections of type Attending" +msgstr "" + +#: ../root/statistics/stats.js:213 +msgid "Collections of type Event" +msgstr "" + +#: ../root/statistics/stats.js:219 +msgid "Event collections (all types)" +msgstr "" + +#: ../root/statistics/stats.js:225 +msgid "Instrument collections" +msgstr "" + +#: ../root/statistics/stats.js:231 +msgid "Label collections" +msgstr "" + +#: ../root/statistics/stats.js:237 +msgid "Collections of type Maybe attending" +msgstr "" + +#: ../root/statistics/stats.js:243 +msgid "Collections of type Owned music" +msgstr "" + +#: ../root/statistics/stats.js:249 +msgid "Place collections" +msgstr "" + +#: ../root/statistics/stats.js:255 +msgid "Recording collections" +msgstr "" + +#: ../root/statistics/stats.js:261 +msgid "Collections of type Release" +msgstr "" + +#: ../root/statistics/stats.js:267 +msgid "Release collections (all types)" +msgstr "" + +#: ../root/statistics/stats.js:273 +msgid "Release group collections" +msgstr "" + +#: ../root/statistics/stats.js:279 +msgid "Series collections" +msgstr "" + +#: ../root/statistics/stats.js:285 +msgid "Collections of type Wishlist" +msgstr "" + +#: ../root/statistics/stats.js:291 +msgid "Work collections" +msgstr "" + +#: ../root/statistics/stats.js:296 ../root/statistics/stats.js:297 msgid "Pieces of Cover Art" msgstr "" -#: ../root/statistics/stats.js:176 +#: ../root/statistics/stats.js:302 msgid "Count of all Disc IDs" msgstr "" -#: ../root/statistics/stats.js:182 +#: ../root/statistics/stats.js:308 msgid "Count of all edits" msgstr "" -#: ../root/statistics/stats.js:189 +#: ../root/statistics/stats.js:315 msgid "All edits that have been applied" msgstr "" -#: ../root/statistics/stats.js:190 +#: ../root/statistics/stats.js:316 msgid "Applied edits" msgstr "" -#: ../root/statistics/stats.js:195 ../root/statistics/stats.js:196 +#: ../root/statistics/stats.js:321 ../root/statistics/stats.js:322 msgid "Cancelled edits" msgstr "" -#: ../root/statistics/stats.js:201 +#: ../root/statistics/stats.js:327 msgid "All edits that have hit an error" msgstr "" -#: ../root/statistics/stats.js:202 +#: ../root/statistics/stats.js:328 msgid "Error edits" msgstr "" -#: ../root/statistics/stats.js:207 +#: ../root/statistics/stats.js:333 msgid "Evalnochange edits" msgstr "" -#: ../root/statistics/stats.js:208 +#: ../root/statistics/stats.js:334 msgid "Evalnochange Edits" msgstr "" -#: ../root/statistics/stats.js:213 +#: ../root/statistics/stats.js:339 msgid "All edits that have failed dependency checks" msgstr "" -#: ../root/statistics/stats.js:214 +#: ../root/statistics/stats.js:340 msgid "Failed edits (dependency)" msgstr "" -#: ../root/statistics/stats.js:219 +#: ../root/statistics/stats.js:345 msgid "All edits that have failed prerequisite checks" msgstr "" -#: ../root/statistics/stats.js:220 +#: ../root/statistics/stats.js:346 msgid "Failed edits (prerequisite)" msgstr "" -#: ../root/statistics/stats.js:225 +#: ../root/statistics/stats.js:351 msgid "All edits that have failed by being voted down" msgstr "" -#: ../root/statistics/stats.js:226 +#: ../root/statistics/stats.js:352 msgid "Failed edits (voted down)" msgstr "" -#: ../root/statistics/stats.js:231 +#: ../root/statistics/stats.js:357 msgid "Count of open edits" msgstr "" -#: ../root/statistics/stats.js:232 +#: ../root/statistics/stats.js:358 msgid "Open Edits" msgstr "Hapni Përpunime" -#: ../root/statistics/stats.js:237 +#: ../root/statistics/stats.js:363 msgid "Count of edits per day" msgstr "" -#: ../root/statistics/stats.js:239 +#: ../root/statistics/stats.js:365 msgid "Edits per day" msgstr "" -#: ../root/statistics/stats.js:244 +#: ../root/statistics/stats.js:370 msgid "Count of edits per week" msgstr "" -#: ../root/statistics/stats.js:245 +#: ../root/statistics/stats.js:371 msgid "Edits per week" msgstr "" -#: ../root/statistics/stats.js:250 +#: ../root/statistics/stats.js:376 msgid "Count of all editors" msgstr "" -#: ../root/statistics/stats.js:252 +#: ../root/statistics/stats.js:378 msgid "Editors (all)" msgstr "" -#: ../root/statistics/stats.js:258 +#: ../root/statistics/stats.js:384 msgid "Count of active editors (editing or voting) during the last week" msgstr "" -#: ../root/statistics/stats.js:260 +#: ../root/statistics/stats.js:386 msgid "Active Users" msgstr "" -#: ../root/statistics/stats.js:265 +#: ../root/statistics/stats.js:391 msgid "Count of deleted editors" msgstr "" -#: ../root/statistics/stats.js:267 +#: ../root/statistics/stats.js:393 msgid "Editors (deleted)" msgstr "" -#: ../root/statistics/stats.js:273 +#: ../root/statistics/stats.js:399 msgid "Count of editors who have submitted edits during the last 7 days" msgstr "" -#: ../root/statistics/stats.js:275 +#: ../root/statistics/stats.js:401 msgid "Active Editors" msgstr "" -#: ../root/statistics/stats.js:280 +#: ../root/statistics/stats.js:406 msgid "Count of non-deleted editors" msgstr "" -#: ../root/statistics/stats.js:282 +#: ../root/statistics/stats.js:408 msgid "Editors (valid)" msgstr "" -#: ../root/statistics/stats.js:287 +#: ../root/statistics/stats.js:413 msgid "Count of active editors" msgstr "" -#: ../root/statistics/stats.js:289 +#: ../root/statistics/stats.js:415 msgid "Editors (valid & active ever)" msgstr "" -#: ../root/statistics/stats.js:295 +#: ../root/statistics/stats.js:421 msgid "Count of editors who have voted on during the last 7 days" msgstr "" -#: ../root/statistics/stats.js:297 +#: ../root/statistics/stats.js:423 msgid "Active Voters" msgstr "" -#: ../root/statistics/stats.js:302 +#: ../root/statistics/stats.js:428 msgid "Count of all events" msgstr "" -#: ../root/statistics/stats.js:308 +#: ../root/statistics/stats.js:434 msgid "Count of all instruments" msgstr "" -#: ../root/statistics/stats.js:314 +#: ../root/statistics/stats.js:440 msgid "Count of all IPIs" msgstr "" -#: ../root/statistics/stats.js:315 +#: ../root/statistics/stats.js:441 msgid "IPIs" msgstr "" -#: ../root/statistics/stats.js:320 +#: ../root/statistics/stats.js:446 msgid "Count of all IPIs for Artists" msgstr "" -#: ../root/statistics/stats.js:321 +#: ../root/statistics/stats.js:447 msgid "Artist IPIs" msgstr "" -#: ../root/statistics/stats.js:326 +#: ../root/statistics/stats.js:452 msgid "Count of all IPIs for Labels" msgstr "" -#: ../root/statistics/stats.js:327 +#: ../root/statistics/stats.js:453 msgid "Label IPIs" msgstr "" -#: ../root/statistics/stats.js:332 +#: ../root/statistics/stats.js:458 msgid "Count of all ISNIs" msgstr "" -#: ../root/statistics/stats.js:333 +#: ../root/statistics/stats.js:459 msgid "ISNIs" msgstr "" -#: ../root/statistics/stats.js:338 +#: ../root/statistics/stats.js:464 msgid "Count of all ISNIs for Artists" msgstr "" -#: ../root/statistics/stats.js:339 +#: ../root/statistics/stats.js:465 msgid "Artist ISNIs" msgstr "" -#: ../root/statistics/stats.js:344 +#: ../root/statistics/stats.js:470 msgid "Count of all ISNIs for Labels" msgstr "" -#: ../root/statistics/stats.js:345 +#: ../root/statistics/stats.js:471 msgid "Label ISNIs" msgstr "" -#: ../root/statistics/stats.js:350 ../root/statistics/stats.js:356 +#: ../root/statistics/stats.js:476 ../root/statistics/stats.js:482 msgid "Count of all ISRCs" msgstr "" -#: ../root/statistics/stats.js:351 +#: ../root/statistics/stats.js:477 msgid "ISRCs" msgstr "ISRC-ra" -#: ../root/statistics/stats.js:357 +#: ../root/statistics/stats.js:483 msgid "ISRCs (all)" msgstr "" -#: ../root/statistics/stats.js:362 ../root/statistics/stats.js:368 +#: ../root/statistics/stats.js:488 ../root/statistics/stats.js:494 msgid "Count of all ISWCs" msgstr "" -#: ../root/statistics/stats.js:363 +#: ../root/statistics/stats.js:489 msgid "ISWCs" msgstr "" -#: ../root/statistics/stats.js:369 +#: ../root/statistics/stats.js:495 msgid "ISWCs (all)" msgstr "" -#: ../root/statistics/stats.js:374 +#: ../root/statistics/stats.js:500 msgid "Count of all labels" msgstr "" -#: ../root/statistics/stats.js:380 +#: ../root/statistics/stats.js:506 msgid "Labels with no country set" msgstr "" -#: ../root/statistics/stats.js:386 +#: ../root/statistics/stats.js:512 msgid "Count of all mediums" msgstr "" -#: ../root/statistics/stats.js:392 +#: ../root/statistics/stats.js:518 msgid "Mediums with no format set" msgstr "" -#: ../root/statistics/stats.js:393 +#: ../root/statistics/stats.js:519 msgid "Unknown Format (medium)" msgstr "" -#: ../root/statistics/stats.js:398 +#: ../root/statistics/stats.js:524 msgid "Count of all Mediums with Disc IDs" msgstr "" -#: ../root/statistics/stats.js:399 +#: ../root/statistics/stats.js:525 msgid "Mediums with Disc IDs" msgstr "" -#: ../root/statistics/stats.js:404 +#: ../root/statistics/stats.js:530 msgid "Count of all places" msgstr "" -#: ../root/statistics/stats.js:410 +#: ../root/statistics/stats.js:536 msgid "Count of all Releases at Default Data Quality" msgstr "" -#: ../root/statistics/stats.js:411 +#: ../root/statistics/stats.js:537 msgid "Default Data Quality" msgstr "" -#: ../root/statistics/stats.js:416 +#: ../root/statistics/stats.js:542 msgid "Count of all Releases at High Data Quality" msgstr "" -#: ../root/statistics/stats.js:417 +#: ../root/statistics/stats.js:543 msgid "High Data Quality" msgstr "" -#: ../root/statistics/stats.js:422 +#: ../root/statistics/stats.js:548 msgid "Count of all Releases at Low Data Quality" msgstr "" -#: ../root/statistics/stats.js:423 +#: ../root/statistics/stats.js:549 msgid "Low Data Quality" msgstr "" -#: ../root/statistics/stats.js:428 +#: ../root/statistics/stats.js:554 msgid "Count of all Releases at Normal Data Quality" msgstr "" -#: ../root/statistics/stats.js:429 +#: ../root/statistics/stats.js:555 msgid "Normal Data Quality" msgstr "" -#: ../root/statistics/stats.js:434 +#: ../root/statistics/stats.js:560 msgid "Count of all Releases at Unknown Data Quality" msgstr "" -#: ../root/statistics/stats.js:435 +#: ../root/statistics/stats.js:561 msgid "Unknown Data Quality" msgstr "" -#: ../root/statistics/stats.js:440 +#: ../root/statistics/stats.js:566 msgid "Count of all Ratings" msgstr "" -#: ../root/statistics/stats.js:441 +#: ../root/statistics/stats.js:567 msgid "Ratings" msgstr "Vlerësime" -#: ../root/statistics/stats.js:446 +#: ../root/statistics/stats.js:572 msgid "Count of all Artist Ratings" msgstr "" -#: ../root/statistics/stats.js:447 +#: ../root/statistics/stats.js:573 msgid "Artist Ratings" msgstr "" -#: ../root/statistics/stats.js:452 +#: ../root/statistics/stats.js:578 msgid "Count of all Label Ratings" msgstr "" -#: ../root/statistics/stats.js:453 +#: ../root/statistics/stats.js:579 msgid "Label Ratings" msgstr "" -#: ../root/statistics/stats.js:458 +#: ../root/statistics/stats.js:584 msgid "Count of all Place Ratings" msgstr "" -#: ../root/statistics/stats.js:459 +#: ../root/statistics/stats.js:585 msgid "Place Ratings" msgstr "" -#: ../root/statistics/stats.js:464 +#: ../root/statistics/stats.js:590 msgid "Count of all Ratings (raw)" msgstr "" -#: ../root/statistics/stats.js:465 +#: ../root/statistics/stats.js:591 msgid "Ratings (raw)" msgstr "" -#: ../root/statistics/stats.js:470 +#: ../root/statistics/stats.js:596 msgid "Count of all Artist Ratings (raw)" msgstr "" -#: ../root/statistics/stats.js:471 +#: ../root/statistics/stats.js:597 msgid "Artist Ratings (raw)" msgstr "" -#: ../root/statistics/stats.js:476 +#: ../root/statistics/stats.js:602 msgid "Count of all Label Ratings (raw)" msgstr "" -#: ../root/statistics/stats.js:477 +#: ../root/statistics/stats.js:603 msgid "Label Ratings (raw)" msgstr "" -#: ../root/statistics/stats.js:482 +#: ../root/statistics/stats.js:608 msgid "Count of all Place Ratings (raw)" msgstr "" -#: ../root/statistics/stats.js:483 +#: ../root/statistics/stats.js:609 msgid "Place Ratings (raw)" msgstr "" -#: ../root/statistics/stats.js:488 +#: ../root/statistics/stats.js:614 msgid "Count of all Recording Ratings (raw)" msgstr "" -#: ../root/statistics/stats.js:489 +#: ../root/statistics/stats.js:615 msgid "Recording Ratings (raw)" msgstr "" -#: ../root/statistics/stats.js:494 +#: ../root/statistics/stats.js:620 msgid "Count of all Release Group Ratings (raw)" msgstr "" -#: ../root/statistics/stats.js:495 +#: ../root/statistics/stats.js:621 msgid "Release Group Ratings (raw)" msgstr "" -#: ../root/statistics/stats.js:500 +#: ../root/statistics/stats.js:626 msgid "Count of all Work Ratings (raw)" msgstr "" -#: ../root/statistics/stats.js:501 +#: ../root/statistics/stats.js:627 msgid "Work Ratings (raw)" msgstr "" -#: ../root/statistics/stats.js:506 +#: ../root/statistics/stats.js:632 msgid "Count of all Recording Ratings" msgstr "" -#: ../root/statistics/stats.js:507 +#: ../root/statistics/stats.js:633 msgid "Recording Ratings" msgstr "" -#: ../root/statistics/stats.js:512 +#: ../root/statistics/stats.js:638 msgid "Count of all Release Group Ratings" msgstr "" -#: ../root/statistics/stats.js:513 +#: ../root/statistics/stats.js:639 msgid "Release Group Ratings" msgstr "" -#: ../root/statistics/stats.js:518 +#: ../root/statistics/stats.js:644 msgid "Count of all Work Ratings" msgstr "" -#: ../root/statistics/stats.js:519 +#: ../root/statistics/stats.js:645 msgid "Work Ratings" msgstr "" -#: ../root/statistics/stats.js:524 +#: ../root/statistics/stats.js:650 msgid "Count of all recordings" msgstr "" -#: ../root/statistics/stats.js:530 +#: ../root/statistics/stats.js:656 msgid "Count of all Recordings with ISRCs" msgstr "" -#: ../root/statistics/stats.js:531 +#: ../root/statistics/stats.js:657 msgid "Recordings with ISRCs" msgstr "" -#: ../root/statistics/stats.js:536 +#: ../root/statistics/stats.js:662 msgid "Count of all standalone recordings" msgstr "" -#: ../root/statistics/stats.js:537 +#: ../root/statistics/stats.js:663 msgid "Standalone recordings" msgstr "" -#: ../root/statistics/stats.js:542 +#: ../root/statistics/stats.js:668 msgid "Count of all releases" msgstr "" -#: ../root/statistics/stats.js:548 +#: ../root/statistics/stats.js:674 msgid "Releases with no country set" msgstr "" -#: ../root/statistics/stats.js:554 ../root/statistics/stats.js:555 -#: ../root/statistics/stats.js:572 +#: ../root/statistics/stats.js:680 ../root/statistics/stats.js:681 +#: ../root/statistics/stats.js:698 msgid "Releases with Amazon Cover Art" msgstr "" -#: ../root/statistics/stats.js:560 ../root/statistics/stats.js:561 +#: ../root/statistics/stats.js:686 ../root/statistics/stats.js:687 msgid "Releases with CAA Cover Art" msgstr "" -#: ../root/statistics/stats.js:566 ../root/statistics/stats.js:567 +#: ../root/statistics/stats.js:692 ../root/statistics/stats.js:693 msgid "Releases with No Cover Art" msgstr "" -#: ../root/statistics/stats.js:573 +#: ../root/statistics/stats.js:699 msgid "Releases with Cover Art from Relationships" msgstr "" -#: ../root/statistics/stats.js:578 +#: ../root/statistics/stats.js:704 msgid "Releases with a no-format medium" msgstr "" -#: ../root/statistics/stats.js:579 +#: ../root/statistics/stats.js:705 msgid "Unknown Format (release)" msgstr "" -#: ../root/statistics/stats.js:584 ../root/statistics/stats.js:585 +#: ../root/statistics/stats.js:710 ../root/statistics/stats.js:711 msgid "Releases with Cover Art" msgstr "" -#: ../root/statistics/stats.js:590 +#: ../root/statistics/stats.js:716 msgid "Count of all Releases with Disc IDs" msgstr "" -#: ../root/statistics/stats.js:591 +#: ../root/statistics/stats.js:717 msgid "Releases with Disc IDs" msgstr "" -#: ../root/statistics/stats.js:596 +#: ../root/statistics/stats.js:722 msgid "Releases with no language set" msgstr "" -#: ../root/statistics/stats.js:597 +#: ../root/statistics/stats.js:723 msgid "Unknown Language" msgstr "" -#: ../root/statistics/stats.js:602 +#: ../root/statistics/stats.js:728 msgid "Count of all Releases not V.A." msgstr "" -#: ../root/statistics/stats.js:603 +#: ../root/statistics/stats.js:729 msgid "Releases not VA" msgstr "" -#: ../root/statistics/stats.js:608 +#: ../root/statistics/stats.js:734 msgid "Releases with no script set" msgstr "" -#: ../root/statistics/stats.js:609 +#: ../root/statistics/stats.js:735 msgid "Unknown Script" msgstr "" -#: ../root/statistics/stats.js:614 +#: ../root/statistics/stats.js:740 msgid "Count of all Releases by Various Artists" msgstr "" -#: ../root/statistics/stats.js:615 +#: ../root/statistics/stats.js:741 msgid "Releases (VA)" msgstr "" -#: ../root/statistics/stats.js:620 +#: ../root/statistics/stats.js:746 msgid "Count of all release groups" msgstr "" -#: ../root/statistics/stats.js:626 +#: ../root/statistics/stats.js:752 msgid "Count of all series" msgstr "" -#: ../root/statistics/stats.js:632 +#: ../root/statistics/stats.js:758 msgid "Count of all Tags" msgstr "" -#: ../root/statistics/stats.js:633 +#: ../root/statistics/stats.js:759 msgid "Tags" msgstr "Etiketa" -#: ../root/statistics/stats.js:638 +#: ../root/statistics/stats.js:764 msgid "Count of all Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:639 +#: ../root/statistics/stats.js:765 msgid "Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:644 +#: ../root/statistics/stats.js:770 msgid "Count of all Area Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:645 +#: ../root/statistics/stats.js:771 msgid "Area Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:650 +#: ../root/statistics/stats.js:776 msgid "Count of all Artist Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:651 +#: ../root/statistics/stats.js:777 msgid "Artist Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:656 +#: ../root/statistics/stats.js:782 msgid "Count of all Instrument Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:657 +#: ../root/statistics/stats.js:783 msgid "Instrument Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:662 +#: ../root/statistics/stats.js:788 msgid "Count of all Label Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:663 +#: ../root/statistics/stats.js:789 msgid "Label Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:668 +#: ../root/statistics/stats.js:794 msgid "Count of all Recording Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:669 +#: ../root/statistics/stats.js:795 msgid "Recording Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:674 +#: ../root/statistics/stats.js:800 msgid "Count of all Release Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:675 +#: ../root/statistics/stats.js:801 msgid "Release Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:680 +#: ../root/statistics/stats.js:806 msgid "Count of all Release Group Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:681 +#: ../root/statistics/stats.js:807 msgid "Release Group Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:686 +#: ../root/statistics/stats.js:812 msgid "Count of all Series Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:687 +#: ../root/statistics/stats.js:813 msgid "Series Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:692 +#: ../root/statistics/stats.js:818 msgid "Count of all Work Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:693 +#: ../root/statistics/stats.js:819 msgid "Work Tags (raw)" msgstr "" -#: ../root/statistics/stats.js:698 +#: ../root/statistics/stats.js:824 msgid "Count of all Tracks" msgstr "" -#: ../root/statistics/stats.js:699 +#: ../root/statistics/stats.js:825 msgid "Tracks" msgstr "Gjurmë" -#: ../root/statistics/stats.js:704 +#: ../root/statistics/stats.js:830 msgid "Count of all votes" msgstr "" -#: ../root/statistics/stats.js:711 +#: ../root/statistics/stats.js:837 msgid "Count of all Abstain votes" msgstr "" -#: ../root/statistics/stats.js:712 +#: ../root/statistics/stats.js:838 msgid "Abstentions" msgstr "" -#: ../root/statistics/stats.js:717 +#: ../root/statistics/stats.js:843 msgid "Count of all No votes" msgstr "" -#: ../root/statistics/stats.js:718 +#: ../root/statistics/stats.js:844 msgid "No Votes" msgstr "" -#: ../root/statistics/stats.js:723 +#: ../root/statistics/stats.js:849 msgid "Count of votes per day" msgstr "" -#: ../root/statistics/stats.js:725 +#: ../root/statistics/stats.js:851 msgid "Votes per day" msgstr "" -#: ../root/statistics/stats.js:730 +#: ../root/statistics/stats.js:856 msgid "Count of votes per week" msgstr "" -#: ../root/statistics/stats.js:731 +#: ../root/statistics/stats.js:857 msgid "Votes per week" msgstr "" -#: ../root/statistics/stats.js:736 +#: ../root/statistics/stats.js:862 msgid "Count of all Yes votes" msgstr "" -#: ../root/statistics/stats.js:737 +#: ../root/statistics/stats.js:863 msgid "Yes Votes" msgstr "" -#: ../root/statistics/stats.js:742 +#: ../root/statistics/stats.js:868 msgid "Count of all works" msgstr "" -#: ../root/statistics/stats.js:748 +#: ../root/statistics/stats.js:874 msgid "Count of all Works with ISWCs" msgstr "" -#: ../root/statistics/stats.js:749 +#: ../root/statistics/stats.js:875 msgid "Works with ISWCs" msgstr "" -#: ../root/statistics/stats.js:751 +#: ../root/statistics/stats.js:877 msgid "/day" msgstr "" -#: ../root/statistics/stats.js:760 +#: ../root/statistics/stats.js:886 msgid "Count of all Releases with {n} Disc IDs" msgstr "" -#: ../root/statistics/stats.js:762 +#: ../root/statistics/stats.js:888 msgid "Releases with 1 Disc ID" msgid_plural "Releases with {n} Disc IDs" msgstr[0] "" msgstr[1] "" -#: ../root/statistics/stats.js:772 +#: ../root/statistics/stats.js:898 msgid "Count of all Mediums with {n} Disc IDs" msgstr "" -#: ../root/statistics/stats.js:774 +#: ../root/statistics/stats.js:900 msgid "Mediums with 1 Disc ID" msgid_plural "Mediums with {n} Disc IDs" msgstr[0] "" msgstr[1] "" -#: ../root/statistics/stats.js:784 +#: ../root/statistics/stats.js:910 msgid "Count of all Recordings with {n} Releases" msgstr "" -#: ../root/statistics/stats.js:786 +#: ../root/statistics/stats.js:912 msgid "Recordings with 1 Release" msgid_plural "Recordings with {n} Releases" msgstr[0] "" msgstr[1] "" -#: ../root/statistics/stats.js:796 +#: ../root/statistics/stats.js:922 msgid "Count of all Release Groups with {n} Releases" msgstr "" -#: ../root/statistics/stats.js:798 +#: ../root/statistics/stats.js:924 msgid "Release Groups with 1 Release" msgid_plural "Release Groups with {n} Releases" msgstr[0] "" msgstr[1] "" -#: ../root/statistics/stats.js:840 +#: ../root/statistics/stats.js:966 msgid "{country} artists" msgstr "" -#: ../root/statistics/stats.js:847 +#: ../root/statistics/stats.js:973 msgid "{country} labels" msgstr "" -#: ../root/statistics/stats.js:854 +#: ../root/statistics/stats.js:980 msgid "{country} releases" msgstr "" -#: ../root/statistics/stats.js:866 +#: ../root/statistics/stats.js:992 msgid "{name} releases" msgstr "" -#: ../root/statistics/stats.js:873 +#: ../root/statistics/stats.js:999 msgid "{name} mediums" msgstr "" -#: ../root/statistics/stats.js:885 +#: ../root/statistics/stats.js:1011 msgid "{language} releases" msgstr "" -#: ../root/statistics/stats.js:892 +#: ../root/statistics/stats.js:1018 msgid "l_{first}_{second} Relationships" msgstr "" -#: ../root/statistics/stats.js:913 +#: ../root/statistics/stats.js:1039 msgid "{script} releases" msgstr "" diff --git a/root/components/LinkSearchableLanguage.js b/root/components/LinkSearchableLanguage.js index 92059d96cd8..125b2414b8e 100644 --- a/root/components/LinkSearchableLanguage.js +++ b/root/components/LinkSearchableLanguage.js @@ -9,6 +9,9 @@ import * as React from 'react'; +import localizeLanguageName + from '../static/scripts/common/i18n/localizeLanguageName'; + import LinkSearchableProperty from './LinkSearchableProperty'; type Props = { @@ -24,7 +27,7 @@ const LinkSearchableLanguage = ({ entityType={entityType} searchField="lang" searchValue={language.iso_code_3 || ''} - text={l_languages(language.name)} + text={localizeLanguageName(language, entityType === 'work')} /> ); diff --git a/root/edit/components/EditorTypeInfo.js b/root/edit/components/EditorTypeInfo.js index fa28a5801a8..cc66487ed75 100644 --- a/root/edit/components/EditorTypeInfo.js +++ b/root/edit/components/EditorTypeInfo.js @@ -13,35 +13,37 @@ import bracketed from '../../static/scripts/common/utility/bracketed'; import {isBot} from '../../static/scripts/common/utility/privileges'; type Props = { - +editor: EditorT, + +editor: EditorT | null, }; const EditorTypeInfo = ({ editor, -}: Props): React.Element<typeof React.Fragment> => ( - <> - {editor.is_limited ? ( - <span className="editor-class"> - {bracketed( - <span - className="tooltip" - title={l('This user is new to MusicBrainz.')} - > - {l('beginner')} - </span>, - )} - </span> - ) : null} - {isBot(editor) ? ( - <span className="editor-class"> - {bracketed( - <span className="tooltip" title={l('This user is automated.')}> - {l('bot')} - </span>, - )} - </span> - ) : null} - </> +}: Props): React.Element<typeof React.Fragment> | null => ( + editor == null ? null : ( + <> + {editor.is_limited ? ( + <span className="editor-class"> + {bracketed( + <span + className="tooltip" + title={l('This user is new to MusicBrainz.')} + > + {l('beginner')} + </span>, + )} + </span> + ) : null} + {isBot(editor) ? ( + <span className="editor-class"> + {bracketed( + <span className="tooltip" title={l('This user is automated.')}> + {l('bot')} + </span>, + )} + </span> + ) : null} + </> + ) ); export default EditorTypeInfo; diff --git a/root/edit/details/AddWork.js b/root/edit/details/AddWork.js index 85cec9199fb..36119e24104 100644 --- a/root/edit/details/AddWork.js +++ b/root/edit/details/AddWork.js @@ -12,6 +12,8 @@ import * as React from 'react'; import EntityLink from '../../static/scripts/common/components/EntityLink'; import {commaOnlyListText} from '../../static/scripts/common/i18n/commaOnlyList'; +import localizeLanguageName + from '../../static/scripts/common/i18n/localizeLanguageName'; type AddWorkEditT = { ...EditT, @@ -22,7 +24,7 @@ type AddWorkEditT = { +comment: string, +iswc: string, +language?: LanguageT, - +languages?: $ReadOnlyArray<string>, + +languages?: $ReadOnlyArray<LanguageT>, +name: string, +type: WorkTypeT | null, +work: WorkT, @@ -73,7 +75,7 @@ const AddWork = ({edit}: Props): React.MixedElement => { {language ? ( <tr> <th>{addColonText(l('Language'))}</th> - <td>{l_languages(language.name)}</td> + <td>{localizeLanguageName(language, true)}</td> </tr> ) : null} {languages && languages.length ? ( @@ -81,7 +83,7 @@ const AddWork = ({edit}: Props): React.MixedElement => { <th>{addColonText(l('Lyrics Languages'))}</th> <td> {commaOnlyListText(languages.map( - language => l_languages(language), + language => localizeLanguageName(language, true), ))} </td> </tr> diff --git a/root/edit/details/EditWork.js b/root/edit/details/EditWork.js index 4807ce165ee..0b49d85eb78 100644 --- a/root/edit/details/EditWork.js +++ b/root/edit/details/EditWork.js @@ -13,6 +13,8 @@ import DescriptiveLink from '../../static/scripts/common/components/DescriptiveLink'; import {commaOnlyListText} from '../../static/scripts/common/i18n/commaOnlyList'; +import localizeLanguageName + from '../../static/scripts/common/i18n/localizeLanguageName'; import Diff from '../../static/scripts/edit/components/edit/Diff'; import DiffSide from '../../static/scripts/edit/components/edit/DiffSide'; import FullChangeDiff @@ -28,7 +30,7 @@ type EditWorkEditT = { }, +comment?: CompT<string | null>, +iswc?: CompT<string | null>, - +languages?: CompT<$ReadOnlyArray<string>>, + +languages?: CompT<$ReadOnlyArray<LanguageT>>, +name?: CompT<string>, +type?: CompT<WorkTypeT | null>, +work: WorkT, @@ -39,7 +41,7 @@ type Props = { +edit: EditWorkEditT, }; -const localizeLanguageName = name => l_languages(name); +const localizeLanguage = language => localizeLanguageName(language, true); const EditWork = ({edit}: Props): React.Element<'table'> => { const display = edit.display_data; @@ -97,10 +99,10 @@ const EditWork = ({edit}: Props): React.Element<'table'> => { <Diff label={addColonText(l('Lyrics Languages'))} newText={commaOnlyListText( - languages.new.map(localizeLanguageName), + languages.new.map(localizeLanguage), )} oldText={commaOnlyListText( - languages.old.map(localizeLanguageName), + languages.old.map(localizeLanguage), )} split=", " /> diff --git a/root/edit/details/MergeReleases.js b/root/edit/details/MergeReleases.js new file mode 100644 index 00000000000..cd7b9a7e45b --- /dev/null +++ b/root/edit/details/MergeReleases.js @@ -0,0 +1,377 @@ +/* + * @flow strict-local + * Copyright (C) 2021 MetaBrainz Foundation + * + * This file is part of MusicBrainz, the open internet music database, + * and is licensed under the GPL version 2, or (at your option) any + * later version: http://www.gnu.org/licenses/gpl-2.0.txt + */ + +import * as React from 'react'; + +import ReleaseLabelList from '../../components/ReleaseLabelList'; +import ReleaseCatnoList from '../../components/ReleaseCatnoList'; +import ArtistCreditLink + from '../../static/scripts/common/components/ArtistCreditLink'; +import DescriptiveLink + from '../../static/scripts/common/components/DescriptiveLink'; +import EntityLink + from '../../static/scripts/common/components/EntityLink'; +import ReleaseEvents + from '../../static/scripts/common/components/ReleaseEvents'; +import formatBarcode from '../../static/scripts/common/utility/formatBarcode'; +import formatTrackLength from + '../../static/scripts/common/utility/formatTrackLength'; +import loopParity from '../../utility/loopParity'; +import expand2react from '../../static/scripts/common/i18n/expand2react'; + +type MergeReleasesEditT = { + ...EditT, + +display_data: { + +cannot_merge_recordings_reason?: { + +message: string, + +vars: {+[var: string]: string, ...}, + }, + +changes: $ReadOnlyArray<{ + +mediums: $ReadOnlyArray<{ + +id: number, + +new_name: string, + +new_position: number, + +old_name: string, + +old_position: StrOrNum, + }>, + +release: ReleaseT, + }>, + +edit_version: 1 | 2 | 3, + +empty_releases?: $ReadOnlyArray<ReleaseT>, + +merge_strategy: 'append' | 'merge', + +new: ReleaseT, + +old: $ReadOnlyArray<ReleaseT>, + +recording_merges?: $ReadOnlyArray<{ + +destination: RecordingT, + +large_spread: boolean, + +medium: string, + +sources: $ReadOnlyArray<RecordingT>, + +track: string, + }>, + }, +}; + +type Props = { + +edit: MergeReleasesEditT, +}; + +const strategyDescriptions = { + append: N_l('Append mediums to target release'), + merge: N_l('Merge mediums and recordings'), +}; + +function buildReleaseRow(release, index) { + return ( + <tr key={index == null ? null : 'release-' + index}> + {release.gid ? ( + <> + <td> + <EntityLink entity={release} /> + </td> + <td> + <ArtistCreditLink artistCredit={release.artistCredit} /> + </td> + <td> + {nonEmpty(release.combined_format_name) + ? release.combined_format_name + : l('[missing media]')} + </td> + <td> + {nonEmpty(release.combined_track_count) + ? release.combined_track_count + : lp('-', 'missing data')} + </td> + <td> + <ReleaseEvents events={release.events} /> + </td> + <td> + <ReleaseLabelList labels={release.labels} /> + </td> + <td> + <ReleaseCatnoList labels={release.labels} /> + </td> + <td className="barcode-cell"> + {formatBarcode(release.barcode)} + </td> + </> + ) : ( + <td colSpan="8"> + <EntityLink entity={release} /> + </td> + )} + </tr> + ); +} + +function buildChangesRow(change, index, editVersion) { + return ( + <React.Fragment key={'changes-' + index}> + {buildReleaseRow(change.release)} + {change.mediums.map((medium, innerIndex) => { + const hasNames = nonEmpty(medium.old_name) || + nonEmpty(medium.new_name); + const hasBothNames = nonEmpty(medium.old_name) && + nonEmpty(medium.new_name); + + return ( + <tr + className={loopParity(innerIndex)} + key={'changes-' + index + '-medium-' + innerIndex} + > + <td colSpan="9"> + {editVersion === 3 && hasNames ? ( + hasBothNames ? ( + exp.l( + `Medium {position}: {name} + is now medium {new_position}: {new_name}`, + { + name: medium.old_name, + new_name: medium.new_name, + new_position: medium.new_position, + position: medium.old_position, + }, + ) + ) : nonEmpty(medium.old_name) ? ( + exp.l( + 'Medium {position}: {name} is now medium {new_position}', + { + name: medium.old_name, + new_position: medium.new_position, + position: medium.old_position, + }, + ) + ) : ( + exp.l( + `Medium {position} + is now medium {new_position}: {new_name}`, + { + new_name: medium.new_name, + new_position: medium.new_position, + position: medium.old_position, + }, + ) + ) + ) : ( + exp.l( + 'Medium {position} is now medium {new_position}', + { + new_position: medium.new_position, + position: medium.old_position, + }, + ) + )} + </td> + </tr> + ); + })} + </React.Fragment> + ); +} + +function buildRecordingMergeRow(merge, index) { + const rowSpan = merge.sources.length; + + return ( + <React.Fragment key={'recording-merge-' + index}> + <tr className={loopParity(index)}> + <td rowSpan={rowSpan}> + {merge.medium + '.' + merge.track} + </td> + <td> + <DescriptiveLink entity={merge.sources[0]} /> + </td> + <td className={merge.large_spread ? 'warn-lengths' : ''}> + {formatTrackLength(merge.sources[0].length)} + </td> + <td rowSpan={rowSpan}> + <DescriptiveLink entity={merge.destination} /> + </td> + <td + className={merge.large_spread ? 'warn-lengths' : ''} + rowSpan={rowSpan} + > + {formatTrackLength(merge.destination.length)} + </td> + </tr> + {merge.sources.map((source, innerIndex) => { + if (innerIndex === 0) { + return null; + } + return ( + <tr + className={loopParity(index)} + key={'recording-merge-source-' + innerIndex} + > + <td> + <DescriptiveLink entity={source} /> + </td> + <td className={merge.large_spread ? 'warn-lengths' : ''}> + {formatTrackLength(source.length)} + </td> + </tr> + ); + })} + </React.Fragment> + ); +} + +function getHtmlVars(vars) { + if (!vars || Object.keys(vars).length === 0) { + return vars; + } + + const htmlArgs = {}; + + for (const key of Object.keys(vars)) { + htmlArgs[key] = expand2react(vars[key]); + } + + return htmlArgs; +} + +const MergeReleases = ({ + edit, +}: Props): React.Element<typeof React.Fragment> => { + const display = edit.display_data; + const emptyReleases = display.empty_releases; + const changes = display.changes; + const recordingMerges = display.recording_merges; + const cannotMergeRecordingsMessage = display.cannot_merge_recordings_reason; + + return ( + <> + <table className="tbl merge-releases"> + <thead> + <tr> + <th>{l('Release')}</th> + <th>{l('Artist')}</th> + <th>{l('Format')}</th> + <th>{l('Tracks')}</th> + <th>{l('Country') + lp('/', 'and') + l('Date')}</th> + <th>{l('Label')}</th> + <th>{l('Catalog#')}</th> + <th>{l('Barcode')}</th> + </tr> + </thead> + <tbody> + {display.merge_strategy === 'append' ? ( + <> + {emptyReleases ? ( + emptyReleases.map((release, index) => ( + <React.Fragment key={'empty-release-' + index}> + {buildReleaseRow(release)} + <tr className={loopParity(index)}> + <td colSpan="9"> + {l('This release has no media to merge.')} + </td> + </tr> + </React.Fragment> + )) + ) : null} + + {changes.map((change, index) => buildChangesRow( + change, + index, + display.edit_version, + ))} + + {display.edit_version === 1 ? ( + <> + {display.old.map(buildReleaseRow)} + <tr className="subh"> + <th colSpan="9">{l('Into:')}</th> + </tr> + {buildReleaseRow(display.new)} + </> + ) : ( + <> + <tr className="subh"> + <th colSpan="9">{l('Into:')}</th> + </tr> + {buildReleaseRow(display.new)} + </> + )} + </> + ) : display.merge_strategy === 'merge' ? ( + <> + {display.old.map(buildReleaseRow)} + <tr className="subh"> + <th colSpan="9">{l('Into:')}</th> + </tr> + {buildReleaseRow(display.new)} + </> + ) : null} + </tbody> + </table> + + {display.merge_strategy === 'merge' ? ( + recordingMerges?.length ? ( + <table className="tbl"> + <thead> + <tr> + <th colSpan="5">{l('Recording Merges')}</th> + </tr> + <tr> + <th>{l('Track #')}</th> + <th colSpan="2">{l('Recording')}</th> + <th colSpan="2">{l('Into:')}</th> + </tr> + </thead> + <tbody> + {recordingMerges.map(buildRecordingMergeRow)} + </tbody> + </table> + ) : !recordingMerges && !edit.is_open ? ( + <p> + <strong> + {l(`This edit does not store recording merge information + and is closed, so no recording merge information + can be shown.`)} + </strong> + </p> + ) : cannotMergeRecordingsMessage ? ( + <p className="error merge-error"> + <strong> + {exp.l( + cannotMergeRecordingsMessage.message, + getHtmlVars(cannotMergeRecordingsMessage.vars), + )} + </strong> + </p> + ) : ( + <p> + <strong> + {l('All recordings for these releases are already merged.')} + </strong> + </p> + ) + ) : null} + + <table className="details"> + <tr> + <th>{l('Merge strategy:')}</th> + <td>{strategyDescriptions[display.merge_strategy]()}</td> + </tr> + + {display.edit_version === 1 ? ( + <tr> + <th>{addColonText(l('Note'))}</th> + <td> + {l(`The data in this edit originally came + from an older version of this edit, + and may not display correctly`)} + </td> + </tr> + ) : null} + </table> + </> + ); +}; + +export default MergeReleases; diff --git a/root/edit/details/merge_releases.tt b/root/edit/details/merge_releases.tt deleted file mode 100644 index d5e7d6064a9..00000000000 --- a/root/edit/details/merge_releases.tt +++ /dev/null @@ -1,163 +0,0 @@ -[%~ MACRO release_row(release) BLOCK; ~%] - <tr> - <td>[% link_entity(release) %]</td> - <td>[% artist_credit(release.artist_credit) %]</td> - <td>[% html_escape(release.combined_format_name) || l('[missing media]') IF release.gid %]</td> - <td>[% release.combined_track_count || lp('-', 'missing data') IF release.gid %]</td> - <td> - [% React.embed(c, 'static/scripts/common/components/ReleaseEvents', {events => React.to_json_array(release.events)}) %] - </td> - <td>[% release_label_list(release.labels) %]</td> - <td>[% release_catno_list(release.labels) %]</td> - <td class="barcode-cell">[% release.barcode.format %]</td> - </tr> -[%~ END ~%] - -<table class="tbl merge-releases"> - <thead> - <tr> - <th>[% l('Release') %]</th> - <th>[% l('Artist') %]</th> - <th>[% l('Format') %]</th> - <th>[% l('Tracks') %]</th> - <th>[% l('Country') _ lp('/', 'and') _ l('Date') %]</th> - <th>[% l('Label') %]</th> - <th>[% l('Catalog#') %]</th> - <th>[% l('Barcode') %]</th> - </tr> - </thead> - <tbody> - [% IF edit.data.merge_strategy == 1 %] - [% FOR empty_release=edit.display_data.empty_releases %] - [% release_row(empty_release.release) %] - <tr class="[% loop.parity %]"> - <td colspan="9"> - [% l('This release has no media to merge.') %] - </td> - </tr> - [% END %] - [% FOR change=edit.display_data.changes %] - [% release_row(change.release) %] - [% FOR medium=change.mediums %] - <tr class="[% loop.parity %]"> - <td colspan="9"> - [% IF edit.data.item('_edit_version') == 3 && (medium.old_name || medium.new_name); - IF medium.old_name; - IF medium.new_name; - l('Medium {position}: {name} is now medium {new_position}: {new_name}', { - position => medium.old_position, name => medium.old_name, - new_position => medium.new_position, new_name => medium.new_name - }) | html; - ELSE; - l('Medium {position}: {name} is now medium {new_position}', { - position => medium.old_position, name => medium.old_name, - new_position => medium.new_position, new_name => medium.new_name - }) | html; - END; - ELSIF medium.new_name; - l('Medium {position} is now medium {new_position}: {new_name}', { - position => medium.old_position, - new_position => medium.new_position, new_name => medium.new_name - }) | html; - END; - ELSE; - l('Medium {position} is now medium {new_position}', { - position => medium.old_position, - new_position => medium.new_position, - }) | html; - END; %] - </td> - </tr> - [% END %] - [% END %] - [% IF edit.data.item('_edit_version') == 1 %] - [% FOR release = edit.display_data.old; - release_row(release); - END %] - <tr class="subh"> - <th colspan="9">[% l('Into:') %]</th> - </tr> - [% release_row(edit.display_data.new) %] - [% ELSE %] - <tr class="subh"> - <th colspan="9">[% l('Into:') %]</th> - </tr> - [% release_row(edit.display_data.new) %] - [% END%] - [% ELSIF edit.data.merge_strategy == 2 %] - [% FOR release = edit.display_data.old; - release_row(release); - END %] - <tr class="subh"> - <th colspan="9">[% l('Into:') %]</th> - </tr> - [% release_row(edit.display_data.new) %] - [% END %] - </tbody> -</table> - -[%~ IF edit.data.merge_strategy == 2 ~%] -[%~ IF edit.display_data.recording_merges.defined && edit.display_data.recording_merges.size ~%] - <table class="tbl"> - <thead> - <tr> - <th colspan=5>[% l('Recording Merges') %]</th> - <tr> - <tr> - <th>[% l('Track #') %]</th> - <th colspan=2>[% l('Recording') %]</th> - <th colspan=2>[% l('Into:') %]</th> - </tr> - </thead> - <tbody> - [%~ FOR merge = edit.display_data.recording_merges ~%] - [%~ SET rowspan = merge.sources.size ~%] - [%~ SET zebra = loop.parity ~%] - <tr class="[% zebra %]"> - <td[% IF rowspan > 1 %] rowspan=[% rowspan %][% END %]>[% merge.medium %].[% merge.track %]</td> - <td>[% descriptive_link(merge.sources.0) %]</td> - <td[% ' class="warn-lengths"' IF merge.large_spread %]>[% merge.sources.0.length | format_length %]</td> - <td[% IF rowspan > 1 %] rowspan=[% rowspan %][% END %]>[% descriptive_link(merge.destination) %]</td> - <td[% IF rowspan > 1 %] rowspan=[% rowspan %][% END %][% ' class="warn-lengths"' IF merge.large_spread %]>[% merge.destination.length | format_length %]</td> - </tr> - [% FOR source = merge.sources ~%] - [%~ UNLESS loop.first ~%] - <tr class="[% zebra %]"> - <td>[% descriptive_link(source) %]</td> - <td[% ' class="warn-lengths"' IF merge.large_spread %]>[% source.length | format_length %]</td> - </tr> - [%~ END; END %] - [%~ END ~%] - </tbody></table> -[%~ ELSIF !edit.display_data.recording_merges.defined && !edit.is_open ~%] - <p><strong>[% l('This edit does not store recording merge information and is closed, so no recording merge information can be shown.') %]</strong></p> -[%~ ELSIF edit.cannot_merge_recordings_reason ~%] - <p class="error merge-error"> - <strong> - [%- l(edit.cannot_merge_recordings_reason.message, edit.cannot_merge_recordings_reason.args) -%] - </strong> - </p> -[%~ ELSE ~%] - <p><strong>[% l('All recordings for these releases are already merged.') %]</strong></p> -[%~ END ~%] -[%~ END ~%] - -<table class="details"> - <tr> - <th>[% l('Merge strategy:') %]</th> - <td> - [% SWITCH edit.data.merge_strategy; - CASE 1; l('Append mediums to target release'); - CASE 2; l('Merge mediums and recordings'); - END %] - </td> - </tr> - - [% IF edit.data.item('_edit_version') == 1 %] - <tr> - <th>[%~ add_colon(l('Note')) ~%]</th> - <td>[% l('The data in this edit originally came from an older version of this edit, - and may not display correctly') %]</td> - </tr> - [% END %] -</table> diff --git a/root/edit/search_macros.tt b/root/edit/search_macros.tt index 0147a338feb..061bbe3e711 100644 --- a/root/edit/search_macros.tt +++ b/root/edit/search_macros.tt @@ -30,7 +30,7 @@ <option value="vote_closing_asc"' _ selected_if_matches('vote_closing_asc', query.order) _ '>' _ l('voting closing sooner first') _ '</option> <option value="vote_closing_desc"' _ selected_if_matches('vote_closing_desc', query.order) _ '>' _ l('voting closing later first') _ '</option> <option value="latest_note"' _ selected_if_matches('latest_note', query.order) _ '>' _ l('with recent edit notes first') _ '</option> - <option value="rand"' _ selected_if_matches('rand', query.order) _ '>' _ l('randomly') _ '</option> + <option value="rand"' _ selected_if_matches('rand', query.order) _ '>' _ l('in an unspecified order (possibly faster)') _ '</option> </select>' -%] [%- match_or_negation_block = '<select name="negation"> <option value="0"' _ selected_if_matches('0', query.negate, 1) _ '>' _ l('match') _ '</option> diff --git a/root/server/components.js b/root/server/components.js index 073ff8b1518..12cdbfb8e9d 100644 --- a/root/server/components.js +++ b/root/server/components.js @@ -389,6 +389,7 @@ module.exports = { 'edit/details/MergePlaces': require('../edit/details/MergePlaces'), 'edit/details/MergeRecordings': require('../edit/details/MergeRecordings'), 'edit/details/MergeReleaseGroups': require('../edit/details/MergeReleaseGroups'), + 'edit/details/MergeReleases': require('../edit/details/MergeReleases'), 'edit/details/MergeSeries': require('../edit/details/MergeSeries'), 'edit/details/MergeWorks': require('../edit/details/MergeWorks'), 'edit/details/MoveDiscId': require('../edit/details/MoveDiscId'), diff --git a/root/static/images/external-favicons/vimeoondemand-32.png b/root/static/images/external-favicons/vimeoondemand-32.png new file mode 100644 index 00000000000..371bb7caefa Binary files /dev/null and b/root/static/images/external-favicons/vimeoondemand-32.png differ diff --git a/root/static/images/favicons/tidal-32.png b/root/static/images/favicons/tidal-32.png new file mode 100644 index 00000000000..71c4134422b Binary files /dev/null and b/root/static/images/favicons/tidal-32.png differ diff --git a/root/static/scripts/common/MB/Control/Autocomplete.js b/root/static/scripts/common/MB/Control/Autocomplete.js index 57b5e8c11dd..69b499f9a35 100644 --- a/root/static/scripts/common/MB/Control/Autocomplete.js +++ b/root/static/scripts/common/MB/Control/Autocomplete.js @@ -17,6 +17,7 @@ import AddEntityDialog, { import {ENTITIES, MAX_RECENT_ENTITIES} from '../../constants'; import mbEntity from '../../entity'; import commaOnlyList from '../../i18n/commaOnlyList'; +import localizeLanguageName from '../../i18n/localizeLanguageName'; import {reduceArtistCredit} from '../../immutable-entities'; import MB from '../../MB'; import {compactMap, first, groupBy, last} from '../../utility/arrays'; @@ -850,7 +851,7 @@ MB.Control.autocomplete_formatters = { a.prepend( '<span class="autocomplete-language">' + he.escape(commaOnlyList( - item.languages.map(wl => l_languages(wl.language.name)), + item.languages.map(wl => localizeLanguageName(wl.language, true)), )) + '</span>', ); } diff --git a/root/static/scripts/common/components/Autocomplete2/formatters.js b/root/static/scripts/common/components/Autocomplete2/formatters.js index 273ff715c82..707d41ee3c5 100644 --- a/root/static/scripts/common/components/Autocomplete2/formatters.js +++ b/root/static/scripts/common/components/Autocomplete2/formatters.js @@ -18,6 +18,7 @@ import localizeLinkAttributeTypeDescription from '../../i18n/localizeLinkAttributeTypeDescription'; import localizeLinkAttributeTypeName from '../../i18n/localizeLinkAttributeTypeName'; +import localizeLanguageName from '../../i18n/localizeLanguageName'; import {reduceArtistCredit} from '../../immutable-entities'; import bracketed, {bracketedText} from '../../utility/bracketed'; import formatDate from '../../utility/formatDate'; @@ -434,7 +435,7 @@ function formatWork(work: WorkT) { {languages && languages.length ? ( showExtraInfo( commaOnlyListText( - languages.map(wl => l_languages(wl.language.name)), + languages.map(wl => localizeLanguageName(wl.language, true)), ), 'language', ) diff --git a/root/static/scripts/common/components/WorkListEntry.js b/root/static/scripts/common/components/WorkListEntry.js index f9f1819944e..fca9d8c7b83 100644 --- a/root/static/scripts/common/components/WorkListEntry.js +++ b/root/static/scripts/common/components/WorkListEntry.js @@ -9,6 +9,7 @@ import * as React from 'react'; +import localizeLanguageName from '../i18n/localizeLanguageName'; import {CatalystContext} from '../../../../context'; import RatingStars from '../../../../components/RatingStars'; import loopParity from '../../../../utility/loopParity'; @@ -95,7 +96,7 @@ export const WorkListRow = ({ data-iso-639-3={language.language.iso_code_3} key={language.language.id} > - {l_languages(language.language.name)} + {localizeLanguageName(language.language, true)} </li> ))} </ul> diff --git a/root/static/scripts/common/constants.js b/root/static/scripts/common/constants.js index 0ac603bd7cb..59e6494c563 100644 --- a/root/static/scripts/common/constants.js +++ b/root/static/scripts/common/constants.js @@ -175,6 +175,7 @@ export const FAVICON_CLASSES = { 'theatricalia.com': 'theatricalia', 'thedancegypsy.com': 'thedancegypsy', 'thesession.org': 'thesession', + 'tidal.com': 'tidal', 'tipeee.com': 'tipeee', 'touhoudb.com': 'touhoudb', 'traxsource.com': 'traxsource', @@ -189,6 +190,7 @@ export const FAVICON_CLASSES = { 'vgmdb.net': 'vgmdb', 'viaf.org': 'viaf', 'videogam.in': 'videogamin', + 'vimeo.com/ondemand': 'vimeoondemand', 'vimeo.com': 'vimeo', 'vk.com': 'vk', 'vkdb.jp': 'vkdb', diff --git a/root/static/scripts/common/i18n/localizeLanguageName.js b/root/static/scripts/common/i18n/localizeLanguageName.js new file mode 100644 index 00000000000..4007ab628ed --- /dev/null +++ b/root/static/scripts/common/i18n/localizeLanguageName.js @@ -0,0 +1,24 @@ +/* + * @flow strict + * Copyright (C) 2021 MetaBrainz Foundation + * + * This file is part of MusicBrainz, the open internet music database, + * and is licensed under the GPL version 2, or (at your option) any + * later version: http://www.gnu.org/licenses/gpl-2.0.txt + */ + +function localizeLanguageName( + language: LanguageT | null, + isWork?: boolean = false, +): string { + if (!language) { + return l('[removed]'); + } + // For works, "No linguistic content" is meant as "No lyrics" + if (isWork && language.iso_code_3 === 'zxx') { + return l('[No lyrics]'); + } + return l_languages(language.name); +} + +export default localizeLanguageName; diff --git a/root/static/scripts/edit/URLCleanup.js b/root/static/scripts/edit/URLCleanup.js index f2c52351ded..fb402fffd69 100644 --- a/root/static/scripts/edit/URLCleanup.js +++ b/root/static/scripts/edit/URLCleanup.js @@ -246,6 +246,7 @@ export const LINK_TYPES: LinkTypeMap = { artist: 'e8571dcc-35d4-4e91-a577-a3382fd84460', label: 'c4bee4f4-e622-4c74-b80b-585989de27f4', place: '49a08641-0aed-4e10-8311-ec220b8c50ad', + series: '67764397-d154-4f9a-8aa8-cbc4de4df5b8', work: 'b6eaef52-68a0-4b50-b875-8acd7d9212ba', }, videochannel: { @@ -445,17 +446,17 @@ const CLEANUPS: CleanupEntries = { case LINK_TYPES.otherdatabases.artist: return { result: prefix === 'artist', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.otherdatabases.label: return { result: prefix === 'label', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.otherdatabases.release_group: return { result: prefix === 'record', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; } return {result: false, target: ERROR_TARGETS.RELATIONSHIP}; @@ -477,27 +478,27 @@ const CLEANUPS: CleanupEntries = { case LINK_TYPES.otherdatabases.artist: return { result: /^(artist|composer|conductor|orchestra|soloist)$/.test(prefix), - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.otherdatabases.event: return { result: prefix === 'listing', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.otherdatabases.label: return { result: prefix === 'label', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.otherdatabases.place: return { result: prefix === 'venue', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.otherdatabases.release_group: return { result: /^(album|cd|media|music|record)$/.test(prefix), - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; } return {result: false, target: ERROR_TARGETS.RELATIONSHIP}; @@ -519,12 +520,12 @@ const CLEANUPS: CleanupEntries = { case LINK_TYPES.allmusic.artist: return { result: prefix === 'artist/mn', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.allmusic.recording: return { result: prefix === 'performance/mq', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.allmusic.release: if (prefix === 'album/mw') { @@ -551,18 +552,18 @@ const CLEANUPS: CleanupEntries = { } return { result: prefix === 'album/release/mr', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.allmusic.release_group: return { result: prefix === 'album/mw', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.allmusic.work: return { result: prefix === 'composition/mc' || prefix === 'song/mt', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; } return {result: false, target: ERROR_TARGETS.RELATIONSHIP}; @@ -661,12 +662,12 @@ const CLEANUPS: CleanupEntries = { case LINK_TYPES.streamingpaid.artist: return { result: prefix === 'artists', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.streamingpaid.release: return { result: prefix === 'albums', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; } return {result: false, target: ERROR_TARGETS.RELATIONSHIP}; @@ -712,17 +713,17 @@ const CLEANUPS: CleanupEntries = { case LINK_TYPES.otherdatabases.artist: return { result: prefix === 'person', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.otherdatabases.release: return { result: prefix === 'source', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.otherdatabases.recording: return { result: prefix === 'song', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; } return {result: false, target: ERROR_TARGETS.RELATIONSHIP}; @@ -823,7 +824,7 @@ const CLEANUPS: CleanupEntries = { result: /^view\/[1-9][0-9]*\.htm$/.test(path) || /^subview(\/[1-9][0-9]*){2}\.htm$/.test(path) || /^item\/[^\/]+(?:\/[1-9][0-9]*)?$/.test(path), - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; } return {result: false, target: ERROR_TARGETS.RELATIONSHIP}; @@ -857,7 +858,7 @@ const CLEANUPS: CleanupEntries = { not to a specific album or track.`, ), result: false, - target: ERROR_TARGETS.URL, + target: ERROR_TARGETS.ENTITY, }; } return {result: /^https:\/\/[^\/]+\.bandcamp\.com\/$/.test(url)}; @@ -869,22 +870,22 @@ const CLEANUPS: CleanupEntries = { not to a specific album or track.`, ), result: false, - target: ERROR_TARGETS.URL, + target: ERROR_TARGETS.ENTITY, }; } return { result: /^https:\/\/[^\/]+\.bandcamp\.com\/$/.test(url), - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.review.release_group: return { result: /^https:\/\/daily\.bandcamp\.com\/\d+\/\d+\/\d+\/[\w-]+-review\/$/.test(url), - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.lyrics.work: return { result: /^https:\/\/[^\/]+\.bandcamp\.com\/track\/[\w-]+$/.test(url), - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; } return {result: false, target: ERROR_TARGETS.URL}; @@ -918,17 +919,17 @@ const CLEANUPS: CleanupEntries = { return { result: prefix === undefined && target !== undefined || prefix === 'a' && /^[1-9][0-9]*$/.test(target), - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.bandsintown.event: return { result: prefix === 'e' && /^[1-9][0-9]*$/.test(target), - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.bandsintown.place: return { result: prefix === 'v' && /^[1-9][0-9]*$/.test(target), - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; } return {result: false, target: ERROR_TARGETS.RELATIONSHIP}; @@ -995,24 +996,24 @@ const CLEANUPS: CleanupEntries = { case LINK_TYPES.downloadpurchase.artist: return { result: prefix === 'artist', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.downloadpurchase.recording: return { result: prefix === 'track' || prefix === 'stem', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.downloadpurchase.release: return { result: prefix === 'release' || prefix === 'chart' || prefix === 'stem-pack', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.downloadpurchase.label: return { result: prefix === 'label', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; } return {result: false, target: ERROR_TARGETS.RELATIONSHIP}; @@ -1054,12 +1055,12 @@ const CLEANUPS: CleanupEntries = { : l(`Please link to the main page for the label, not a specific product.`), result: false, - target: ERROR_TARGETS.URL, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.mailorder.release: return { result: product !== undefined, - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; } } @@ -1129,13 +1130,13 @@ const CLEANUPS: CleanupEntries = { case LINK_TYPES.otherdatabases.work: return { result: digit === '1' || digit === '2', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.otherdatabases.event: case LINK_TYPES.otherdatabases.release: return { result: digit === '3' || digit === '4', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.otherdatabases.series: return {result: true}; @@ -1172,12 +1173,12 @@ const CLEANUPS: CleanupEntries = { case LINK_TYPES.otherdatabases.work: return { result: prefix === 'works/work', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.otherdatabases.artist: return { result: prefix !== 'works/work', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; } return {result: false, target: ERROR_TARGETS.RELATIONSHIP}; @@ -1201,7 +1202,7 @@ const CLEANUPS: CleanupEntries = { id === LINK_TYPES.otherdatabases.work) { return {result: true}; } - return {result: false, target: ERROR_TARGETS.RELATIONSHIP}; + return {result: false, target: ERROR_TARGETS.ENTITY}; } return {result: false, target: ERROR_TARGETS.URL}; }, @@ -1220,12 +1221,12 @@ const CLEANUPS: CleanupEntries = { case LINK_TYPES.otherdatabases.release_group: return { result: prefix === 'rec/r', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.otherdatabases.work: return { result: prefix === 'tune/t', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; } return {result: false, target: ERROR_TARGETS.RELATIONSHIP}; @@ -1248,12 +1249,12 @@ const CLEANUPS: CleanupEntries = { case LINK_TYPES.otherdatabases.artist: return { result: prefix === 'people', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.otherdatabases.recording: return { result: prefix === 'files', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; } return {result: false, target: ERROR_TARGETS.RELATIONSHIP}; @@ -1296,12 +1297,14 @@ const CLEANUPS: CleanupEntries = { }, 'cdjapan': { match: [new RegExp( - '^(https?://)?(www\\.)?cdjapan\\.co\\.jp/(product|person)/', + '^(https?://)?(www\\.)?cdjapan\\.co\\.jp/(detailview|product|person)', 'i', )], restrict: [LINK_TYPES.mailorder], clean: function (url) { - url = url.replace(/^(?:https?:\/\/)?(?:www\.)?cdjapan\.co\.jp\/(person|product)\/([^\/?#]+)(?:.*)?$/, 'https://www.cdjapan.co.jp/$1/$2'); + url = url.replace(/^(?:https?:\/\/)?(?:www\.)?cdjapan\.co\.jp\//, 'https://www.cdjapan.co.jp/'); + url = url.replace(/^(https:\/\/www\.cdjapan\.co\.jp)\/detailview\.html\?KEY=([^\/?#]+).*$/, '$1/product/$2'); + url = url.replace(/^(https:\/\/www\.cdjapan\.co\.jp)\/(person|product)\/([^\/?#]+).*$/, '$1/$2/$3'); return url; }, }, @@ -1312,7 +1315,7 @@ const CLEANUPS: CleanupEntries = { ], restrict: [LINK_TYPES.patronage], clean: function (url) { - url = url.replace(/^(?:https?:\/\/)?(?:www\.)?changetip\.com\/tipme\/([^\/?#]+)(?:.*)?$/, 'https://www.changetip.com/tipme/$1'); + url = url.replace(/^(?:https?:\/\/)?(?:www\.)?changetip\.com\/tipme\/([^\/?#]+).*$/, 'https://www.changetip.com/tipme/$1'); url = url.replace(/^(?:https?:\/\/)?([^\/?#]+)\.tip\.me(?:[\/?#].*)?$/, 'https://www.changetip.com/tipme/$1'); return url; }, @@ -1346,8 +1349,8 @@ const CLEANUPS: CleanupEntries = { url = url.replace(/^(https:\/\/www\.classicalarchives\.com)\/newca\/#!\/Work\/([^\/?#]+)/, '$1/work/$2.html'); url = url.replace(/^(https:\/\/www\.classicalarchives\.com)\/newca\/#!\/Performer\/e([^\/?#]+)/, '$1/ensemble/$2.html'); url = url.replace(/^(https:\/\/www\.classicalarchives\.com)\/newca\/#!\/Performer\/p([^\/?#]+)/, '$1/artist/$2.html'); - url = url.replace(/^(https:\/\/www\.classicalarchives\.com)\/newca\/#!\/Album\/([^\/?#]+)(?:.*)?$/, '$1/newca/#!/Album/$2'); - url = url.replace(/^(https:\/\/www\.classicalarchives\.com)\/(album|artist|composer|ensemble|work)\/([^\/?#]+)(?:.*)?$/, '$1/$2/$3'); + url = url.replace(/^(https:\/\/www\.classicalarchives\.com)\/newca\/#!\/Album\/([^\/?#]+).*$/, '$1/newca/#!/Album/$2'); + url = url.replace(/^(https:\/\/www\.classicalarchives\.com)\/(album|artist|composer|ensemble|work)\/([^\/?#]+).*$/, '$1/$2/$3'); return url; }, validate: function (url, id) { @@ -1358,17 +1361,17 @@ const CLEANUPS: CleanupEntries = { case LINK_TYPES.otherdatabases.artist: return { result: ['artist', 'composer', 'ensemble'].includes(prefix), - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.otherdatabases.release: return { result: prefix === 'album' || prefix === 'Album', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.otherdatabases.work: return { result: prefix === 'work', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; } return {result: false, target: ERROR_TARGETS.RELATIONSHIP}; @@ -1401,17 +1404,17 @@ const CLEANUPS: CleanupEntries = { case LINK_TYPES.otherdatabases.artist: return { result: prefix === 'talent', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.otherdatabases.recording: return { result: prefix === 'matrix', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.otherdatabases.release: return { result: prefix === 'objects', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; } return {result: false, target: ERROR_TARGETS.RELATIONSHIP}; @@ -1487,17 +1490,17 @@ const CLEANUPS: CleanupEntries = { case LINK_TYPES.streamingfree.artist: return { result: prefix === 'artist', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.streamingfree.release: return { result: prefix === 'album', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.streamingfree.recording: return { result: prefix === 'track' || prefix === 'episode', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; } return {result: false, target: ERROR_TARGETS.RELATIONSHIP}; @@ -1572,23 +1575,23 @@ const CLEANUPS: CleanupEntries = { case LINK_TYPES.discogs.artist: return { result: prefix === 'artist' || prefix === 'user', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.discogs.label: case LINK_TYPES.discogs.series: return { result: prefix === 'label', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.discogs.place: return { result: prefix === 'artist' || prefix === 'label', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.discogs.release_group: return { result: prefix === 'master', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.discogs.release: if (prefix === 'master') { @@ -1609,12 +1612,12 @@ const CLEANUPS: CleanupEntries = { } return { result: prefix === 'release', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.discogs.work: return { result: prefix === 'composition', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; } return {result: false, target: ERROR_TARGETS.RELATIONSHIP}; @@ -1638,20 +1641,21 @@ const CLEANUPS: CleanupEntries = { switch (id) { case LINK_TYPES.otherdatabases.artist: case LINK_TYPES.otherdatabases.place: + case LINK_TYPES.otherdatabases.series: case LINK_TYPES.otherdatabases.work: return { result: /^http:\/\/d-nb\.info\/(?:gnd\/)?(?:1[012]?\d{7}[0-9X]|[47]\d{6}-\d|[1-9]\d{0,7}-[0-9X]|3\d{7}[0-9X])$/.test(url), - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.otherdatabases.label: return { result: /^http:\/\/d-nb\.info\/(?:(?:dnbn|gnd)\/)?(?:1[012]?\d{7}[0-9X]|[47]\d{6}-\d|[1-9]\d{0,7}-[0-9X]|3\d{7}[0-9X])$/.test(url), - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.otherdatabases.release: return { result: /^http:\/\/d-nb\.info\/(?:1[012]?\d{7}[0-9X]|[47]\d{6}-\d|[1-9]\d{0,7}-[0-9X]|3\d{7}[0-9X])$/.test(url), - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; } return {result: false, target: ERROR_TARGETS.RELATIONSHIP}; @@ -1711,22 +1715,22 @@ const CLEANUPS: CleanupEntries = { case LINK_TYPES.streamingfree.artist: return { result: path === 'artists' && query === 'artist', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.streamingfree.label: return { result: path === 'labels' && query === 'label', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.streamingfree.release: return { result: path === 'albums' && query === 'album', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.streamingfree.recording: return { result: path === 'song' && query === 'song_id', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; } return {result: false, target: ERROR_TARGETS.RELATIONSHIP}; @@ -1759,22 +1763,22 @@ const CLEANUPS: CleanupEntries = { case LINK_TYPES.otherdatabases.artist: return { result: /^(composers|ensembles|performers)$/.test(prefix), - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.otherdatabases.release: return { result: prefix === 'albums', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.otherdatabases.label: return { result: prefix === 'labels', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.otherdatabases.instrument: return { result: /^instruments\/[a-z-]+$/.test(prefix), - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; } return {result: false, target: ERROR_TARGETS.RELATIONSHIP}; @@ -1789,8 +1793,8 @@ const CLEANUPS: CleanupEntries = { ], restrict: [LINK_TYPES.patronage], clean: function (url) { - url = url.replace(/^(?:https?:\/\/)?(?:www\.)?d\.rip\/([^\/?#]+)(?:.*)?$/, 'https://d.rip/$1'); - url = url.replace(/^(?:https?:\/\/)?(?:www\.)?drip\.kickstarter.com\/([^\/?#]+)(?:.*)?$/, 'https://d.rip/$1'); + url = url.replace(/^(?:https?:\/\/)?(?:www\.)?d\.rip\/([^\/?#]+).*$/, 'https://d.rip/$1'); + url = url.replace(/^(?:https?:\/\/)?(?:www\.)?drip\.kickstarter.com\/([^\/?#]+).*$/, 'https://d.rip/$1'); return url; }, }, @@ -1803,7 +1807,7 @@ const CLEANUPS: CleanupEntries = { validate: function (url, id) { return { result: id === LINK_TYPES.otherdatabases.release, - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; }, }, @@ -1811,7 +1815,7 @@ const CLEANUPS: CleanupEntries = { match: [new RegExp('^(https?://)?(www\\.)?ester\\.ee/', 'i')], restrict: [LINK_TYPES.otherdatabases], clean: function (url) { - url = url.replace(/^(?:https?:\/\/)?(?:www\.)?ester\.ee\/record=([^~]+)(?:.*)?$/, 'http://www.ester.ee/record=$1~S1*est'); + url = url.replace(/^(?:https?:\/\/)?(?:www\.)?ester\.ee\/record=([^~]+).*$/, 'http://www.ester.ee/record=$1~S1*est'); return url; }, }, @@ -1867,7 +1871,7 @@ const CLEANUPS: CleanupEntries = { )], restrict: [LINK_TYPES.patronage], clean: function (url) { - url = url.replace(/^(?:https?:\/\/)?(?:www\.)?flattr\.com\/profile\/([^\/?#]+)(?:.*)?$/, 'https://flattr.com/profile/$1'); + url = url.replace(/^(?:https?:\/\/)?(?:www\.)?flattr\.com\/profile\/([^\/?#]+).*$/, 'https://flattr.com/profile/$1'); return url; }, }, @@ -1894,7 +1898,7 @@ const CLEANUPS: CleanupEntries = { validate: function (url, id) { return { result: id === LINK_TYPES.otherdatabases.instrument, - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; }, }, @@ -1910,7 +1914,7 @@ const CLEANUPS: CleanupEntries = { id === LINK_TYPES.otherdatabases.label || id === LINK_TYPES.otherdatabases.release_group || id === LINK_TYPES.otherdatabases.work, - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; }, }, @@ -1925,17 +1929,17 @@ const CLEANUPS: CleanupEntries = { case LINK_TYPES.lyrics.artist: return { result: /^https:\/\/genius\.com\/artists\/[\w-]+$/.test(url), - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.lyrics.release_group: return { result: /^https:\/\/genius\.com\/albums\/[\w-]+\/[\w-]+$/.test(url), - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.lyrics.work: return { result: /^https:\/\/genius\.com\/(?!(?:artists|albums)\/)[\w-]+-lyrics$/.test(url), - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; } return {result: false, target: ERROR_TARGETS.URL}; @@ -1977,7 +1981,7 @@ const CLEANUPS: CleanupEntries = { id === LINK_TYPES.otherdatabases.work) { return {result: true}; } - return {result: false, target: ERROR_TARGETS.RELATIONSHIP}; + return {result: false, target: ERROR_TARGETS.ENTITY}; } return {result: false, target: ERROR_TARGETS.URL}; }, @@ -2000,21 +2004,21 @@ const CLEANUPS: CleanupEntries = { result: db === 'mdb' && type === 'author' && slashRef === undefined, - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.mailorder.release: return { result: db === 'products' && type === 'detail' && slashRef !== undefined, - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.lyrics.work: return { result: db === 'mdb' && type === 'detail' && slashRef !== undefined, - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; } return {result: false, target: ERROR_TARGETS.RELATIONSHIP}; @@ -2046,13 +2050,13 @@ const CLEANUPS: CleanupEntries = { result: prefix === 'name/nm' || prefix === 'character/ch' || prefix === 'company/co', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.imdb.label: case LINK_TYPES.imdb.place: return { result: prefix === 'company/co', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.imdb.recording: case LINK_TYPES.imdb.release: @@ -2060,7 +2064,7 @@ const CLEANUPS: CleanupEntries = { case LINK_TYPES.imdb.work: return { result: prefix === 'title/tt', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; } return {result: false, target: ERROR_TARGETS.RELATIONSHIP}; @@ -2230,12 +2234,12 @@ const CLEANUPS: CleanupEntries = { case LINK_TYPES.otherdatabases.release_group: return { result: prefix === 'album', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.otherdatabases.work: return { result: prefix === 'tune', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; } return {result: false, target: ERROR_TARGETS.RELATIONSHIP}; @@ -2290,12 +2294,12 @@ const CLEANUPS: CleanupEntries = { case LINK_TYPES.downloadpurchase.recording: return { result: prefix === 'music-video', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.downloadpurchase.release: return { result: /^(album|audiobook|podcast|preorder)$/.test(prefix), - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; } return {result: false, target: ERROR_TARGETS.RELATIONSHIP}; @@ -2327,12 +2331,12 @@ const CLEANUPS: CleanupEntries = { case LINK_TYPES.lyrics.artist: return { result: prefix === 'artist', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.lyrics.work: return { result: prefix === 'song', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; } return {result: false, target: ERROR_TARGETS.RELATIONSHIP}; @@ -2361,12 +2365,12 @@ const CLEANUPS: CleanupEntries = { case LINK_TYPES.lyrics.artist: return { result: /^kashu\.php\?artist=\d+$/.test(tail), - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.lyrics.work: return { result: /^song_view\.html\?\d+$/.test(tail), - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; } return {result: false, target: ERROR_TARGETS.RELATIONSHIP}; @@ -2395,12 +2399,12 @@ const CLEANUPS: CleanupEntries = { case LINK_TYPES.lyrics.artist: return { result: prefix === 'search/index', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.lyrics.work: return { result: prefix === 'lyric', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; } return {result: false, target: ERROR_TARGETS.RELATIONSHIP}; @@ -2424,7 +2428,7 @@ const CLEANUPS: CleanupEntries = { match: [new RegExp('^(https?://)?(www\\.)?ko-fi.com/[^/?#]', 'i')], restrict: [LINK_TYPES.patronage], clean: function (url) { - url = url.replace(/^(?:https?:\/\/)?(?:www\.)?ko-fi\.com\/([^\/?#]+)(?:.*)?$/, 'https://ko-fi.com/$1'); + url = url.replace(/^(?:https?:\/\/)?(?:www\.)?ko-fi\.com\/([^\/?#]+).*$/, 'https://ko-fi.com/$1'); return url; }, }, @@ -2435,7 +2439,7 @@ const CLEANUPS: CleanupEntries = { )], restrict: [LINK_TYPES.lyrics], clean: function (url) { - return url.replace(/^(?:https?:\/\/)?(?:www\.)?laboiteauxparoles\.com\/(auteur|editeur|interprete|titre)\/([^\/?#]+)(?:.*)?$/, 'https://laboiteauxparoles.com/$1/$2'); + return url.replace(/^(?:https?:\/\/)?(?:www\.)?laboiteauxparoles\.com\/(auteur|editeur|interprete|titre)\/([^\/?#]+).*$/, 'https://laboiteauxparoles.com/$1/$2'); }, validate: function (url, id) { const m = /^https:\/\/laboiteauxparoles\.com\/(auteur|editeur|interprete|titre)\//.exec(url); @@ -2445,17 +2449,17 @@ const CLEANUPS: CleanupEntries = { case LINK_TYPES.lyrics.artist: return { result: /^(?:auteur|interprete)$/.test(prefix), - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.lyrics.label: return { result: prefix === 'editeur', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.lyrics.work: return { result: prefix === 'titre', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; } return {result: false, target: ERROR_TARGETS.RELATIONSHIP}; @@ -2499,10 +2503,11 @@ const CLEANUPS: CleanupEntries = { if (id === LINK_TYPES.otherdatabases.artist || id === LINK_TYPES.otherdatabases.label || id === LINK_TYPES.otherdatabases.place || + id === LINK_TYPES.otherdatabases.series || id === LINK_TYPES.otherdatabases.work) { return {result: true}; } - return {result: false, target: ERROR_TARGETS.RELATIONSHIP}; + return {result: false, target: ERROR_TARGETS.ENTITY}; } return {result: false, target: ERROR_TARGETS.URL}; }, @@ -2553,22 +2558,22 @@ const CLEANUPS: CleanupEntries = { case LINK_TYPES.otherdatabases.artist: return { result: prefix === 'artists', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.otherdatabases.event: return { result: prefix === 'events', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.otherdatabases.series: return { result: prefix === 'groups', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.otherdatabases.place: return { result: prefix === 'venues', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; } return {result: false, target: ERROR_TARGETS.RELATIONSHIP}; @@ -2598,12 +2603,12 @@ const CLEANUPS: CleanupEntries = { case LINK_TYPES.lyrics.artist: return { result: prefix === 'a', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.lyrics.work: return { result: prefix === 'l', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; } return {result: false, target: ERROR_TARGETS.RELATIONSHIP}; @@ -2671,13 +2676,13 @@ const CLEANUPS: CleanupEntries = { case LINK_TYPES.otherdatabases.release: return { result: prefix === 'records', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.lyrics.work: case LINK_TYPES.otherdatabases.work: return { result: prefix === 'songs', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; } return {result: false, target: ERROR_TARGETS.RELATIONSHIP}; @@ -2699,12 +2704,12 @@ const CLEANUPS: CleanupEntries = { case LINK_TYPES.otherdatabases.artist: return { result: prefix === 'artist', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.otherdatabases.release_group: return { result: prefix === 'album', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; } return {result: false, target: ERROR_TARGETS.RELATIONSHIP}; @@ -2729,22 +2734,22 @@ const CLEANUPS: CleanupEntries = { case LINK_TYPES.otherdatabases.artist: return { result: /^(?:artists?|bands?)$/.test(prefix), - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.otherdatabases.label: return { result: prefix === 'labels', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.otherdatabases.release: return { result: prefix === 'albums', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.review.release_group: return { result: prefix === 'reviews', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; } return {result: false, target: ERROR_TARGETS.RELATIONSHIP}; @@ -2771,17 +2776,17 @@ const CLEANUPS: CleanupEntries = { case LINK_TYPES.streamingfree.artist: return { result: prefix === 'music/artist', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.streamingfree.recording: return { result: ['live', 'music/song', 'video/mv'].includes(prefix), - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.streamingfree.release: return { result: prefix === 'music/album', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; } return {result: false, target: ERROR_TARGETS.RELATIONSHIP}; @@ -2817,12 +2822,12 @@ const CLEANUPS: CleanupEntries = { case LINK_TYPES.otherdatabases.artist: return { result: prefix === 'artista' || prefix === 'grupo', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.otherdatabases.release_group: return { result: prefix === 'disco', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; } return {result: false, target: ERROR_TARGETS.RELATIONSHIP}; @@ -2847,17 +2852,17 @@ const CLEANUPS: CleanupEntries = { case LINK_TYPES.otherdatabases.artist: return { result: prefix === 'artist', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.otherdatabases.release: return { result: prefix === 'release', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.otherdatabases.release_group: return { result: prefix === 'album', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; } return {result: false, target: ERROR_TARGETS.RELATIONSHIP}; @@ -2881,7 +2886,7 @@ const CLEANUPS: CleanupEntries = { case LINK_TYPES.lyrics.artist: return { result: prefix === 'artist', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.lyrics.release_group: if (prefix === 'album') { @@ -2901,11 +2906,11 @@ const CLEANUPS: CleanupEntries = { target: ERROR_TARGETS.ENTITY, }; } - return {result: false, target: ERROR_TARGETS.RELATIONSHIP}; + return {result: false, target: ERROR_TARGETS.ENTITY}; case LINK_TYPES.lyrics.work: return { result: prefix === 'lyrics', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; } return {result: false, target: ERROR_TARGETS.RELATIONSHIP}; @@ -2940,22 +2945,22 @@ const CLEANUPS: CleanupEntries = { case LINK_TYPES.otherdatabases.artist: return { result: /^M\d{11}\/(CLASSICAL(?:\/COMPOSER)?|POPULAR)$/.test(subpath), - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.otherdatabases.label: return { result: /^L\d{11}$/.test(subpath), - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.otherdatabases.release: return { result: /^[A-Z]{2,3}\d{4,6}$/.test(subpath), - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.otherdatabases.work: return { result: /^U\d{11}\/(CLASSICAL|POPULAR)$/.test(subpath), - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; } return {result: false, target: ERROR_TARGETS.RELATIONSHIP}; @@ -3008,17 +3013,17 @@ const CLEANUPS: CleanupEntries = { case LINK_TYPES.streamingpaid.artist: return { result: /^https:\/\/[a-z]{2}\.napster\.com\/artist\/[\w-]+$/.test(url), - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.streamingpaid.recording: return { result: /^https:\/\/[a-z]{2}\.napster\.com\/artist\/[\w-]+\/album\/[\w-]+\/track\/[\w-]+$/.test(url), - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.streamingpaid.release: return { result: /^https:\/\/[a-z]{2}\.napster\.com\/artist\/[\w-]+\/album\/[\w-]+$/.test(url), - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; } return {result: false, target: ERROR_TARGETS.URL}; @@ -3115,12 +3120,12 @@ const CLEANUPS: CleanupEntries = { case LINK_TYPES.otherdatabases.recording: return { result: prefix === 'titel', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.otherdatabases.release_group: return { result: prefix === 'album', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; } return {result: false, target: ERROR_TARGETS.RELATIONSHIP}; @@ -3139,7 +3144,7 @@ const CLEANUPS: CleanupEntries = { if (id === LINK_TYPES.lyrics.work) { return {result: true}; } - return {result: false, target: ERROR_TARGETS.RELATIONSHIP}; + return {result: false, target: ERROR_TARGETS.ENTITY}; } return {result: false, target: ERROR_TARGETS.URL}; }, @@ -3179,17 +3184,17 @@ const CLEANUPS: CleanupEntries = { case LINK_TYPES.otherdatabases.artist: return { result: prefix === 'artists', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.otherdatabases.place: return { result: prefix === 'venues', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.otherdatabases.work: return { result: prefix === 'works', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; } return {result: false, target: ERROR_TARGETS.RELATIONSHIP}; @@ -3252,20 +3257,20 @@ const CLEANUPS: CleanupEntries = { case LINK_TYPES.otherdatabases.artist: return { result: prefix === 'artist', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.otherdatabases.event: return { result: prefix === 'performance', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.otherdatabases.work: return { result: prefix === 'expression', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; } - return {result: false, target: ERROR_TARGETS.RELATIONSHIP}; + return {result: false, target: ERROR_TARGETS.ENTITY}; } return {result: false, target: ERROR_TARGETS.URL}; }, @@ -3296,7 +3301,7 @@ const CLEANUPS: CleanupEntries = { match: [new RegExp('^(https?://)?(www\\.)?paypal\\.me/[^/?#]', 'i')], restrict: [LINK_TYPES.patronage], clean: function (url) { - url = url.replace(/^(?:https?:\/\/)?(?:www\.)?paypal\.me\/([^\/?#]+)(?:.*)?$/, 'https://www.paypal.me/$1'); + url = url.replace(/^(?:https?:\/\/)?(?:www\.)?paypal\.me\/([^\/?#]+).*$/, 'https://www.paypal.me/$1'); return url; }, }, @@ -3314,20 +3319,20 @@ const CLEANUPS: CleanupEntries = { case LINK_TYPES.lyrics.artist: return { result: prefix === 'lyrics/artist', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.lyrics.release_group: return { result: prefix === 'lyrics/album', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.lyrics.work: return { result: prefix === 'lyrics', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; } - return {result: false, target: ERROR_TARGETS.RELATIONSHIP}; + return {result: false, target: ERROR_TARGETS.ENTITY}; } return {result: false, target: ERROR_TARGETS.URL}; }, @@ -3356,15 +3361,15 @@ const CLEANUPS: CleanupEntries = { case LINK_TYPES.otherdatabases.artist: return { result: type === 'artist', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.otherdatabases.release_group: return { result: type === 'album', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; } - return {result: false, target: ERROR_TARGETS.RELATIONSHIP}; + return {result: false, target: ERROR_TARGETS.ENTITY}; } return {result: false, target: ERROR_TARGETS.URL}; }, @@ -3400,24 +3405,24 @@ const CLEANUPS: CleanupEntries = { result: type === 'artistes' && page === 'biographie' && /^artistid=\d+$/.test(query), - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.otherdatabases.release_group: return { result: type === 'albums' && page === 'description' && /^albumid=\d+$/.test(query), - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.otherdatabases.work: return { result: type === 'oeuvres' && page === 'oeuvre' && /^oeuvreid=\d+&albumid=\d+$/.test(query), - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; } - return {result: false, target: ERROR_TARGETS.RELATIONSHIP}; + return {result: false, target: ERROR_TARGETS.ENTITY}; } return {result: false, target: ERROR_TARGETS.URL}; }, @@ -3429,48 +3434,55 @@ const CLEANUPS: CleanupEntries = { return url.replace(/^(?:https?:\/\/)?(?:www\.)?rateyourmusic\.com\//, 'https://rateyourmusic.com/'); }, validate: function (url, id) { - const m = /^https:\/\/rateyourmusic\.com\/(\w+)\//.exec(url); + const m = /^https:\/\/rateyourmusic\.com\/(\w+)\/(?:(\w+)\/)?/.exec(url); if (m) { const prefix = m[1]; + const subPath = m[2]; switch (id) { case LINK_TYPES.otherdatabases.artist: return { result: prefix === 'artist', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.otherdatabases.event: return { result: prefix === 'concert', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.otherdatabases.label: return { result: prefix === 'label', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.otherdatabases.place: return { result: prefix === 'venue', + target: ERROR_TARGETS.ENTITY, + }; + case LINK_TYPES.otherdatabases.recording: + return { + error: l('Only RYM music videos can be linked to recordings.'), + result: prefix === 'release' && subPath === 'musicvideo', target: ERROR_TARGETS.RELATIONSHIP, }; case LINK_TYPES.otherdatabases.release: case LINK_TYPES.otherdatabases.release_group: return { result: prefix === 'release', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.otherdatabases.series: return { result: prefix === 'classifiers', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.otherdatabases.work: return { result: prefix === 'work', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; } - return {result: false, target: ERROR_TARGETS.RELATIONSHIP}; + return {result: false, target: ERROR_TARGETS.ENTITY}; } return {result: false, target: ERROR_TARGETS.URL}; }, @@ -3523,37 +3535,37 @@ const CLEANUPS: CleanupEntries = { case LINK_TYPES.discographyentry.release: return { result: prefix === 'podcast', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.otherdatabases.artist: return { result: prefix === 'dj', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.otherdatabases.event: return { result: prefix === 'events', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.otherdatabases.label: return { result: prefix === 'labels', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.otherdatabases.place: return { result: prefix === 'clubs', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.otherdatabases.recording: return { result: prefix === 'tracks', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.review.release_group: return { result: prefix === 'reviews', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; } return {result: false, target: ERROR_TARGETS.RELATIONSHIP}; @@ -3601,20 +3613,20 @@ const CLEANUPS: CleanupEntries = { case LINK_TYPES.otherdatabases.artist: return { result: !subsection, - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.otherdatabases.release_group: return { result: subsection === 'discos', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.otherdatabases.work: return { result: subsection === 'letras', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; } - return {result: false, target: ERROR_TARGETS.RELATIONSHIP}; + return {result: false, target: ERROR_TARGETS.ENTITY}; } // Keep validating URLs from before Rock.com.ar 2017 relaunch m = /^http:\/\/rock\.com\.ar\/(?:(bios|discos|letras)(?:\/[0-9]+){2}\.shtml|(artistas)\/.+)$/.exec(url); @@ -3624,20 +3636,20 @@ const CLEANUPS: CleanupEntries = { case LINK_TYPES.otherdatabases.artist: return { result: prefix === 'artistas' || prefix === 'bios', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.otherdatabases.release_group: return { result: prefix === 'discos', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.otherdatabases.work: return { result: prefix === 'letras', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; } - return {result: false, target: ERROR_TARGETS.RELATIONSHIP}; + return {result: false, target: ERROR_TARGETS.ENTITY}; } return {result: false, target: ERROR_TARGETS.URL}; }, @@ -3683,7 +3695,7 @@ const CLEANUPS: CleanupEntries = { if (id === LINK_TYPES.lyrics.work) { return {result: true}; } - return {result: false, target: ERROR_TARGETS.RELATIONSHIP}; + return {result: false, target: ERROR_TARGETS.ENTITY}; } return {result: false, target: ERROR_TARGETS.URL}; }, @@ -3707,27 +3719,27 @@ const CLEANUPS: CleanupEntries = { case LINK_TYPES.secondhandsongs.artist: return { result: prefix === 'artist', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.secondhandsongs.label: return { result: prefix === 'label', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.secondhandsongs.recording: return { result: prefix === 'performance', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.secondhandsongs.release: return { result: prefix === 'release', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.secondhandsongs.work: return { result: prefix === 'work', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; } return {result: false, target: ERROR_TARGETS.RELATIONSHIP}; @@ -3749,22 +3761,22 @@ const CLEANUPS: CleanupEntries = { case LINK_TYPES.setlistfm.artist: return { result: prefix === 'setlists', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.setlistfm.event: return { result: prefix === 'setlist' || prefix === 'festival', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.setlistfm.place: return { result: prefix === 'venue', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.setlistfm.series: return { result: prefix === 'festivals', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; } return {result: false, target: ERROR_TARGETS.RELATIONSHIP}; @@ -3790,10 +3802,10 @@ const CLEANUPS: CleanupEntries = { case LINK_TYPES.otherdatabases.label: return { result: /^http:\/\/snaccooperative\.org\/ark:\/99166\/[a-z0-9]+$/.test(url), - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.URL, }; } - return {result: false, target: ERROR_TARGETS.RELATIONSHIP}; + return {result: false, target: ERROR_TARGETS.ENTITY}; }, }, 'songfacts': { @@ -3819,17 +3831,17 @@ const CLEANUPS: CleanupEntries = { case LINK_TYPES.songkick.artist: return { result: prefix === 'artists', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.songkick.event: return { result: prefix === 'concerts' || prefix === 'festivals', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.songkick.place: return { result: prefix === 'venues', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; } return {result: false, target: ERROR_TARGETS.RELATIONSHIP}; @@ -3870,15 +3882,15 @@ const CLEANUPS: CleanupEntries = { case LINK_TYPES.otherdatabases.artist: return { result: prefix === 'composer', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.otherdatabases.release_group: return { result: prefix === 'title', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; } - return {result: false, target: ERROR_TARGETS.RELATIONSHIP}; + return {result: false, target: ERROR_TARGETS.ENTITY}; } return {result: false, target: ERROR_TARGETS.URL}; }, @@ -3902,20 +3914,20 @@ const CLEANUPS: CleanupEntries = { case LINK_TYPES.streamingfree.artist: return { result: prefix === 'artist', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.streamingfree.release: return { result: prefix === 'album', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.streamingfree.recording: return { result: prefix === 'track' || prefix === 'episode', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; } - return {result: false, target: ERROR_TARGETS.RELATIONSHIP}; + return {result: false, target: ERROR_TARGETS.ENTITY}; } return {result: false, target: ERROR_TARGETS.URL}; }, @@ -3938,7 +3950,7 @@ const CLEANUPS: CleanupEntries = { match: [new RegExp('^(https?://)?(www\\.)?thesession\\.org', 'i')], restrict: [LINK_TYPES.otherdatabases], clean: function (url) { - return url.replace(/^(?:https?:\/\/)?(?:www\.)?thesession\.org\/(tunes|events|recordings(?:\/artists)?|sessions)(?:\/.*)?\/([0-9]+)(?:.*)?$/, 'https://thesession.org/$1/$2'); + return url.replace(/^(?:https?:\/\/)?(?:www\.)?thesession\.org\/(tunes|events|recordings(?:\/artists)?|sessions)(?:\/.*)?\/([0-9]+).*$/, 'https://thesession.org/$1/$2'); }, validate: function (url, id) { const m = /^https:\/\/thesession\.org\/([a-z\/]+)\/[0-9]+$/.exec(url); @@ -3948,29 +3960,68 @@ const CLEANUPS: CleanupEntries = { case LINK_TYPES.otherdatabases.artist: return { result: prefix === 'recordings/artists', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.otherdatabases.event: return { result: prefix === 'events', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.otherdatabases.place: return { result: prefix === 'sessions', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.otherdatabases.release_group: return { result: prefix === 'recordings', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.otherdatabases.work: return { result: prefix === 'tunes', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; } + return {result: false, target: ERROR_TARGETS.ENTITY}; + } + return {result: false, target: ERROR_TARGETS.URL}; + }, + }, + 'tidal': { + match: [new RegExp( + '^(https?://)?' + + '(([^/]+\\.)*(desktop|listen|stage|store|www)\\.)?tidal\\.com' + + '/.*(album|artist|track|video)/', + 'i', + )], + restrict: [LINK_TYPES.streamingpaid], + clean: function (url) { + url = url.replace(/^(?:https?:\/\/)?(?:(?:[^\/]+\.)*(?:desktop|listen|stage|store|www)\.)?tidal\.com\/(?:#!\/)?([\w\/]+).*$/, 'https://tidal.com/$1'); + url = url.replace(/^https:\/\/tidal\.com\/(?:[a-z]{2}\/)?(?:browse\/|store\/)?(?:[a-z]+\/\d+\/)?([a-z]+)\/(\d+)(?:\/[\w]*)?$/, 'https://tidal.com/$1/$2'); + return url; + }, + validate: function (url, id) { + const m = /^https:\/\/tidal\.com\/([a-z]+)\/\d+$/.exec(url); + if (m) { + const prefix = m[1]; + switch (id) { + case LINK_TYPES.streamingpaid.artist: + if (prefix === 'artist') { + return {result: true}; + } + return {result: false, target: ERROR_TARGETS.ENTITY}; + case LINK_TYPES.streamingpaid.release: + if (prefix === 'album' || prefix === 'video') { + return {result: true}; + } + return {result: false, target: ERROR_TARGETS.ENTITY}; + case LINK_TYPES.streamingpaid.recording: + if (prefix === 'track' || prefix === 'video') { + return {result: true}; + } + return {result: false, target: ERROR_TARGETS.ENTITY}; + } return {result: false, target: ERROR_TARGETS.RELATIONSHIP}; } return {result: false, target: ERROR_TARGETS.URL}; @@ -3980,7 +4031,7 @@ const CLEANUPS: CleanupEntries = { match: [new RegExp('^(https?://)?(?:[^/]+\\.)?tipeee\\.com/[^/?#]', 'i')], restrict: [LINK_TYPES.patronage], clean: function (url) { - url = url.replace(/^(?:https?:\/\/)?(?:[^/]+\.)?tipeee\.com\/([^\/?#]+)(?:.*)?$/, 'https://www.tipeee.com/$1'); + url = url.replace(/^(?:https?:\/\/)?(?:[^/]+\.)?tipeee\.com\/([^\/?#]+).*$/, 'https://www.tipeee.com/$1'); return url; }, }, @@ -3999,25 +4050,25 @@ const CLEANUPS: CleanupEntries = { case LINK_TYPES.downloadpurchase.artist: return { result: prefix === 'artist', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.downloadpurchase.label: return { result: prefix === 'label', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.downloadpurchase.recording: return { result: prefix === 'track', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.downloadpurchase.release: return { result: prefix === 'title', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; } - return {result: false, target: ERROR_TARGETS.RELATIONSHIP}; + return {result: false, target: ERROR_TARGETS.ENTITY}; } return {result: false, target: ERROR_TARGETS.URL}; }, @@ -4029,17 +4080,17 @@ const CLEANUPS: CleanupEntries = { )], restrict: [LINK_TYPES.otherdatabases], clean: function (url) { - url = url.replace(/^(?:https?:\/\/)?trove\.nla\.gov\.au\/work\/([^\/?#]+)(?:.*)?$/, 'https://trove.nla.gov.au/work/$1'); - url = url.replace(/^(?:https?:\/\/)?trove\.nla\.gov\.au\/people\/([^\/?#]+)(?:.*)?$/, 'https://nla.gov.au/nla.party-$1'); - url = url.replace(/^(?:https?:\/\/)?nla\.gov\.au\/(nla\.party-|anbd\.bib-an)([^\/?#]+)(?:.*)?$/, 'https://nla.gov.au/$1$2'); + url = url.replace(/^(?:https?:\/\/)?trove\.nla\.gov\.au\/work\/([^\/?#]+).*$/, 'https://trove.nla.gov.au/work/$1'); + url = url.replace(/^(?:https?:\/\/)?trove\.nla\.gov\.au\/people\/([^\/?#]+).*$/, 'https://nla.gov.au/nla.party-$1'); + url = url.replace(/^(?:https?:\/\/)?nla\.gov\.au\/(nla\.party-|anbd\.bib-an)([^\/?#]+).*$/, 'https://nla.gov.au/$1$2'); return url; }, }, 'twitch': { - match: [new RegExp('^(https?://)?([^/]+\\.)?(twitch\\.tv/)', 'i')], + match: [new RegExp('^(https?://)?([^/]+\\.)?twitch\\.(?:com|tv)/', 'i')], restrict: [{...LINK_TYPES.streamingfree, ...LINK_TYPES.videochannel}], clean: function (url) { - url = url.replace(/^(?:https?:\/\/)?(?:www\.)?twitch\.tv\/((?:videos\/)?[^\/?#]+)(?:.*)?$/, 'https://www.twitch.tv/$1'); + url = url.replace(/^(?:https?:\/\/)?(?:www\.)?twitch\.(?:com|tv)\/((?:videos\/)?[^\/?#]+).*$/, 'https://www.twitch.tv/$1'); return url; }, validate: function (url, id) { @@ -4099,13 +4150,13 @@ const CLEANUPS: CleanupEntries = { return { result: isATweet && (id === LINK_TYPES.streamingfree.recording), - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; } else if (isATweet) { return { error: l('Please link to Twitter profiles, not tweets.'), result: false, - target: ERROR_TARGETS.URL, + target: ERROR_TARGETS.ENTITY, }; } return {result: true}; @@ -4150,28 +4201,28 @@ const CLEANUPS: CleanupEntries = { case LINK_TYPES.otherdatabases.label: return { result: prefix === 'Ar', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.otherdatabases.event: return { result: prefix === 'E', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.otherdatabases.recording: case LINK_TYPES.otherdatabases.work: return { result: prefix === 'S', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.otherdatabases.release_group: return { result: prefix === 'Al', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.otherdatabases.series: return { result: prefix === 'Es', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; } return {result: false, target: ERROR_TARGETS.RELATIONSHIP}; @@ -4193,12 +4244,12 @@ const CLEANUPS: CleanupEntries = { case LINK_TYPES.lyrics.artist: return { result: prefix === 'artist', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.lyrics.work: return { result: prefix === 'song', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; } return {result: false, target: ERROR_TARGETS.RELATIONSHIP}; @@ -4220,12 +4271,12 @@ const CLEANUPS: CleanupEntries = { case LINK_TYPES.lyrics.artist: return { result: prefix === 'artist', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.lyrics.work: return { result: prefix === 'lyric', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; } return {result: false, target: ERROR_TARGETS.RELATIONSHIP}; @@ -4247,27 +4298,27 @@ const CLEANUPS: CleanupEntries = { case LINK_TYPES.vgmdb.artist: return { result: prefix === 'artist' || prefix === 'org', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.vgmdb.release: return { result: prefix === 'album', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.vgmdb.label: return { result: prefix === 'org', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.vgmdb.event: return { result: prefix === 'event', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; case LINK_TYPES.vgmdb.work: return { result: prefix === 'product', - target: ERROR_TARGETS.RELATIONSHIP, + target: ERROR_TARGETS.ENTITY, }; } return {result: false, target: ERROR_TARGETS.RELATIONSHIP}; @@ -4291,7 +4342,10 @@ const CLEANUPS: CleanupEntries = { }, }, 'vimeo': { - match: [new RegExp('^(https?://)?([^/]+\\.)?(vimeo\\.com/)', 'i')], + match: [new RegExp( + '^(https?://)?([^/]+\\.)?vimeo\\.com/(?!(?:ondemand|store/ondemand))', + 'i', + )], restrict: [{...LINK_TYPES.streamingfree, ...LINK_TYPES.videochannel}], clean: function (url) { url = url.replace(/^(?:https?:\/\/)?(?:[^\/]+\.)?vimeo\.com/, 'https://vimeo.com'); @@ -4300,6 +4354,49 @@ const CLEANUPS: CleanupEntries = { return url; }, }, + 'vimeoondemand': { + match: [new RegExp( + '^(https?://)?([^/]+\\.)?vimeo\\.com/(?:ondemand|store/ondemand)', + 'i', + )], + restrict: [LINK_TYPES.downloadpurchase, LINK_TYPES.streamingpaid], + clean: function (url) { + url = url.replace(/^(?:https?:\/\/)?(?:[^\/]+\.)?vimeo\.com\/ondemand\/([^\/?#]+)(?:.*)$/, 'https://vimeo.com/ondemand/$1'); + return url; + }, + validate: function (url, id) { + const isStoreLink = /vimeo\.com\/store\/ondemand/.test(url); + if (isStoreLink) { + return { + error: exp.l( + `Please link to the “{allowed_url_pattern}” page + rather than this “{current_url_pattern}” link.`, + { + allowed_url_pattern: ( + <span className="url-quote">{'/ondemand'}</span> + ), + current_url_pattern: ( + <span className="url-quote">{'/store/ondemand'}</span> + ), + }, + ), + result: false, + target: ERROR_TARGETS.URL, + }; + } + switch (id) { + case LINK_TYPES.downloadpurchase.recording: + case LINK_TYPES.downloadpurchase.release: + case LINK_TYPES.streamingpaid.recording: + case LINK_TYPES.streamingpaid.release: + return { + result: /^https:\/\/vimeo\.com\/ondemand\/([^\/?#]+)*$/.test(url), + target: ERROR_TARGETS.URL, + }; + } + return {result: false, target: ERROR_TARGETS.ENTITY}; + }, + }, 'vine': { match: [new RegExp('^(https?://)?([^/]+\\.)?vine\\.co/', 'i')], restrict: [LINK_TYPES.socialnetwork], @@ -4515,6 +4612,8 @@ const CLEANUPS: CleanupEntries = { clean: function (url) { url = url.replace(/^(?:https?:\/\/)?(?:www\.)?worldcat\.org/, 'https://www.worldcat.org'); url = url.replace(/^https:\/\/www\.worldcat\.org(?:\/title\/[a-zA-Z0-9_-]+)?\/oclc\/([^&?]+)(?:.*)$/, 'https://www.worldcat.org/oclc/$1'); + // oclc permalinks have no ending slash but identities ones do + url = url.replace(/^https:\/\/www\.worldcat\.org\/(?:wc)?identities\/([^&?/]+)(?:.*)$/, 'https://www.worldcat.org/identities/$1/'); return url; }, }, diff --git a/root/static/scripts/edit/externalLinks.js b/root/static/scripts/edit/externalLinks.js index 524d73258dc..b0ff27ceb08 100644 --- a/root/static/scripts/edit/externalLinks.js +++ b/root/static/scripts/edit/externalLinks.js @@ -551,32 +551,32 @@ export class ExternalLinksEditor } else if (isNewOrChangedLink && isMusicBrainz(link.url)) { error = { message: l(`Links to MusicBrainz URLs are not allowed. - Did you mean to paste something else?`), + Did you mean to paste something else?`), target: URLCleanup.ERROR_TARGETS.URL, }; } else if (isNewOrChangedLink && isMalware(link.url)) { error = { message: l(`Links to this website are not allowed - because it is known to host malware.`), + because it is known to host malware.`), target: URLCleanup.ERROR_TARGETS.URL, }; } else if (isNewOrChangedLink && isShortened(link.url)) { error = { message: l(`Please don’t enter bundled/shortened URLs, - enter the destination URL(s) instead.`), + enter the destination URL(s) instead.`), target: URLCleanup.ERROR_TARGETS.URL, }; } else if (isNewOrChangedLink && isGoogleAmp(link.url)) { error = { message: l(`Please don’t enter Google AMP links, - since they are effectively an extra redirect. - Enter the destination URL instead.`), + since they are effectively an extra redirect. + Enter the destination URL instead.`), target: URLCleanup.ERROR_TARGETS.URL, }; } else if (!link.type) { error = { message: l(`Please select a link type for the URL - you’ve entered.`), + you’ve entered.`), target: URLCleanup.ERROR_TARGETS.RELATIONSHIP, }; } else if ( @@ -584,7 +584,7 @@ export class ExternalLinksEditor ) { error = { message: l(`This relationship type is deprecated - and should not be used.`), + and should not be used.`), target: URLCleanup.ERROR_TARGETS.RELATIONSHIP, }; } else if ( @@ -602,18 +602,53 @@ export class ExternalLinksEditor message: '', target: URLCleanup.ERROR_TARGETS.NONE, }; - error.target = check.target || - URLCleanup.ERROR_TARGETS.NONE; + error.target = check.target || URLCleanup.ERROR_TARGETS.NONE; if (error.target === URLCleanup.ERROR_TARGETS.URL) { - error.message = l( - `This URL is not allowed for the selected link type, - or is incorrectly formatted.`, - ); + error.message = l(`This URL is not allowed + for the selected link type, + or is incorrectly formatted.`); } - if (error.target === - URLCleanup.ERROR_TARGETS.RELATIONSHIP) { + if (error.target === URLCleanup.ERROR_TARGETS.RELATIONSHIP) { error.message = l(`This URL is not allowed - for the selected link type.`); + for the selected link type.`); + } + if (error.target === URLCleanup.ERROR_TARGETS.ENTITY) { + switch (checker.entityType) { + case 'area': + error.message = l(`This URL is not allowed for areas.`); + break; + case 'artist': + error.message = l(`This URL is not allowed for artists.`); + break; + case 'event': + error.message = l(`This URL is not allowed for events.`); + break; + case 'instrument': + error.message = l(`This URL is not allowed for instruments.`); + break; + case 'label': + error.message = l(`This URL is not allowed for labels.`); + break; + case 'place': + error.message = l(`This URL is not allowed for places.`); + break; + case 'recording': + error.message = l(`This URL is not allowed for recordings.`); + break; + case 'release': + error.message = l(`This URL is not allowed for releases.`); + break; + case 'release_group': + error.message = l(`This URL is not allowed for release + groups.`); + break; + case 'series': + error.message = l(`This URL is not allowed for series.`); + break; + case 'work': + error.message = l(`This URL is not allowed for works.`); + break; + } } error.message = check.error || error.message; } @@ -899,6 +934,19 @@ const ExternalLinkRelationship = return ( <tr className="relationship-item" key={link.relationship}> <td /> + <td className="link-actions"> + {!props.isOnlyRelationship && !props.urlMatchesType && + <RemoveButton + onClick={() => props.onLinkRemove(link.index)} + title={l('Remove Relationship')} + />} + <ExternalLinkAttributeDialog + onConfirm={ + (attributes) => props.onAttributesChange(link.index, attributes) + } + relationship={link} + /> + </td> <td> <div className="relationship-content"> <label>{addColonText(l('Type'))}</label> @@ -977,19 +1025,6 @@ const ExternalLinkRelationship = {link.error.message} </div>} </td> - <td className="link-actions" style={{minWidth: '38px'}}> - <ExternalLinkAttributeDialog - onConfirm={ - (attributes) => props.onAttributesChange(link.index, attributes) - } - relationship={link} - /> - {!props.isOnlyRelationship && !props.urlMatchesType && - <RemoveButton - onClick={() => props.onLinkRemove(link.index)} - title={l('Remove Relationship')} - />} - </td> </tr> ); }; @@ -1059,6 +1094,26 @@ export class ExternalLink extends React.Component<LinkProps> { {props.index + 1} </label> </td> + <td className="link-actions"> + {notEmpty && + <RemoveButton + data-index={props.index} + onClick={() => props.onUrlRemove()} + title={l('Remove Link')} + />} + {!isEmpty(props) && firstLink.submitted && + <URLInputPopover + cleanupUrl={props.cleanupUrl} + /* + * Randomly choose a link because relationship errors + * are not displayed, thus link type doesn't matter. + */ + link={firstLink} + onConfirm={props.handleUrlChange} + validateLink={props.validateLink} + /> + } + </td> <td> {/* Links that are not submitted will not be grouped, * so it's safe to check the first link only. @@ -1111,26 +1166,6 @@ export class ExternalLink extends React.Component<LinkProps> { </div> } </td> - <td className="link-actions" style={{minWidth: '38px'}}> - {!isEmpty(props) && firstLink.submitted && - <URLInputPopover - cleanupUrl={props.cleanupUrl} - /* - * Randomly choose a link because relationship errors - * are not displayed, thus link type doesn't matter. - */ - link={firstLink} - onConfirm={props.handleUrlChange} - validateLink={props.validateLink} - /> - } - {notEmpty && - <RemoveButton - data-index={props.index} - onClick={() => props.onUrlRemove()} - title={l('Remove Link')} - />} - </td> </tr> {notEmpty && props.relationships.map((link, index) => ( @@ -1171,7 +1206,8 @@ export class ExternalLink extends React.Component<LinkProps> { {notEmpty && firstLink.submitted && !props.urlMatchesType && <tr className="add-relationship"> <td /> - <td className="add-item" colSpan="4"> + <td /> + <td className="add-item"> <button className="add-item with-label" onClick={() => props.onAddRelationship(props.url)} @@ -1466,6 +1502,16 @@ MB.createExternalLinksEditor = function (options: InitialOptionsT) { const entityTypes = [sourceType, 'url'].sort().join('-'); let initialLinks = parseRelationships(sourceData.relationships); + initialLinks.sort(function (a, b) { + const typeA = a.type && linkedEntities.link_type[a.type]; + const typeB = b.type && linkedEntities.link_type[b.type]; + + return compare( + typeA ? l_relationships(typeA.link_phrase).toLowerCase() : '', + typeB ? l_relationships(typeB.link_phrase).toLowerCase() : '', + ); + }); + // Terribly get seeded URLs if (MB.formWasPosted) { if (hasSessionStorage) { @@ -1494,6 +1540,7 @@ MB.createExternalLinksEditor = function (options: InitialOptionsT) { ((Object.values(urls): any): $ReadOnlyArray<SeededUrlShape>) ) { initialLinks.push(newLinkState({ + rawUrl: data.text || '', relationship: uniqueId('new-'), type: parseInt(data.link_type_id, 10) || null, url: data.text || '', @@ -1501,16 +1548,6 @@ MB.createExternalLinksEditor = function (options: InitialOptionsT) { } } - initialLinks.sort(function (a, b) { - const typeA = a.type && linkedEntities.link_type[a.type]; - const typeB = b.type && linkedEntities.link_type[b.type]; - - return compare( - typeA ? l_relationships(typeA.link_phrase).toLowerCase() : '', - typeB ? l_relationships(typeB.link_phrase).toLowerCase() : '', - ); - }); - initialLinks = initialLinks.map(function (link) { /* * Only run the URL cleanup on seeded URLs, i.e. URLs that don't have an diff --git a/root/static/scripts/tests/Control/URLCleanup.js b/root/static/scripts/tests/Control/URLCleanup.js index 6f480cdceeb..2604b12056b 100644 --- a/root/static/scripts/tests/Control/URLCleanup.js +++ b/root/static/scripts/tests/Control/URLCleanup.js @@ -1036,6 +1036,12 @@ const testData = [ expected_relationship_type: 'mailorder', expected_clean_url: 'https://www.cdjapan.co.jp/product/COCC-72267', }, + { + input_url: 'http://www.cdjapan.co.jp/detailview.html?KEY=LACA-15238', + input_entity_type: 'release', + expected_relationship_type: 'mailorder', + expected_clean_url: 'https://www.cdjapan.co.jp/product/LACA-15238', + }, // ChangeTip (Tip.Me) { input_url: 'https://www.changetip.com/tipme/example', @@ -1398,49 +1404,56 @@ const testData = [ input_entity_type: 'artist', expected_relationship_type: 'otherdatabases', expected_clean_url: 'http://d-nb.info/gnd/129802433', - only_valid_entity_types: ['artist', 'label', 'place', 'work'], + only_valid_entity_types: ['artist', 'label', 'place', 'series', 'work'], }, { input_url: 'https://portal.dnb.de/opac.htm?method=simpleSearch&cqlMode=true&query=nid%3D119194901X', input_entity_type: 'artist', expected_relationship_type: 'otherdatabases', expected_clean_url: 'http://d-nb.info/gnd/119194901X', - only_valid_entity_types: ['artist', 'label', 'place', 'work'], + only_valid_entity_types: ['artist', 'label', 'place', 'series', 'work'], + }, + { + input_url: 'https://portal.dnb.de/opac.htm?method=simpleSearch&cqlMode=true&query=nid%3D4507637-6', + input_entity_type: 'series', + expected_relationship_type: 'otherdatabases', + expected_clean_url: 'http://d-nb.info/gnd/4507637-6', + only_valid_entity_types: ['artist', 'label', 'place', 'series', 'work'], }, { input_url: 'https://portal.dnb.de/opac/opacPresentation?cqlMode=true&reset=true&referrerPosition=0&referrerResultId=coriolan%26any&query=idn%3D30001502X', input_entity_type: 'work', expected_relationship_type: 'otherdatabases', expected_clean_url: 'http://d-nb.info/30001502X', - only_valid_entity_types: ['artist', 'label', 'place', 'release', 'work'], + only_valid_entity_types: ['artist', 'label', 'place', 'release', 'series', 'work'], }, { input_url: 'https://portal.dnb.de/opac.htm?method=simpleSearch&cqlMode=true&query=idn%3D1227621485', input_entity_type: 'release', expected_relationship_type: 'otherdatabases', expected_clean_url: 'http://d-nb.info/1227621485', - only_valid_entity_types: ['artist', 'label', 'place', 'release', 'work'], + only_valid_entity_types: ['artist', 'label', 'place', 'release', 'series', 'work'], }, { input_url: 'https://d-nb.info/gnd/2026867-1', input_entity_type: 'artist', expected_relationship_type: 'otherdatabases', expected_clean_url: 'http://d-nb.info/gnd/2026867-1', - only_valid_entity_types: ['artist', 'label', 'place', 'work'], + only_valid_entity_types: ['artist', 'label', 'place', 'series', 'work'], }, { input_url: 'http://d-nb.info/gnd/1133522467', input_entity_type: 'place', expected_relationship_type: 'otherdatabases', expected_clean_url: 'http://d-nb.info/gnd/1133522467', - only_valid_entity_types: ['artist', 'label', 'place', 'work'], + only_valid_entity_types: ['artist', 'label', 'place', 'series', 'work'], }, { input_url: 'http://d-nb.info/gnd/1100718354', input_entity_type: 'work', expected_relationship_type: 'otherdatabases', expected_clean_url: 'http://d-nb.info/gnd/1100718354', - only_valid_entity_types: ['artist', 'label', 'place', 'work'], + only_valid_entity_types: ['artist', 'label', 'place', 'series', 'work'], }, { input_url: 'http://d-nb.info/dnbn/390205699', @@ -1454,7 +1467,7 @@ const testData = [ input_entity_type: 'release', expected_relationship_type: 'otherdatabases', expected_clean_url: 'http://d-nb.info/1181136512', - only_valid_entity_types: ['artist', 'label', 'place', 'release', 'work'], + only_valid_entity_types: ['artist', 'label', 'place', 'release', 'series', 'work'], }, // Dogmazic { @@ -2394,14 +2407,21 @@ const testData = [ input_entity_type: 'artist', expected_relationship_type: 'otherdatabases', expected_clean_url: 'http://id.loc.gov/authorities/names/n79018119', - only_valid_entity_types: ['artist', 'label', 'place', 'work'], + only_valid_entity_types: ['artist', 'label', 'place', 'series', 'work'], }, { input_url: 'https://id.loc.gov/authorities/names/no2016104748.html', input_entity_type: 'artist', expected_relationship_type: 'otherdatabases', expected_clean_url: 'http://id.loc.gov/authorities/names/no2016104748', - only_valid_entity_types: ['artist', 'label', 'place', 'work'], + only_valid_entity_types: ['artist', 'label', 'place', 'series', 'work'], + }, + { + input_url: 'https://id.loc.gov/authorities/names/n86864540.html', + input_entity_type: 'series', + expected_relationship_type: 'otherdatabases', + expected_clean_url: 'http://id.loc.gov/authorities/names/n86864540', + only_valid_entity_types: ['artist', 'label', 'place', 'series', 'work'], }, // LiederNet Archive { @@ -3310,6 +3330,13 @@ const testData = [ expected_clean_url: 'https://rateyourmusic.com/venue/auditorium_parco_della_musica/', only_valid_entity_types: ['place'], }, + { + input_url: 'https://rateyourmusic.com/release/musicvideo/metallica/one/', + input_entity_type: 'recording', + expected_relationship_type: 'otherdatabases', + expected_clean_url: 'https://rateyourmusic.com/release/musicvideo/metallica/one/', + only_valid_entity_types: ['recording', 'release', 'release_group'], + }, { input_url: 'https://rateyourmusic.com/release/single/tori_amos/a_sorta_fairytale/', input_entity_type: 'release_group', @@ -4001,6 +4028,77 @@ const testData = [ expected_clean_url: 'https://thesession.org/tunes/2305', only_valid_entity_types: ['work'], }, + // Tidal + { + input_url: 'http://desktop.tidal.com/artist/8140105', + input_entity_type: 'artist', + expected_relationship_type: 'streamingpaid', + expected_clean_url: 'https://tidal.com/artist/8140105', + only_valid_entity_types: ['artist'], + }, + { + input_url: 'https://desktop.stage.tidal.com/artist/7554203', + input_entity_type: 'artist', + expected_relationship_type: 'streamingpaid', + expected_clean_url: 'https://tidal.com/artist/7554203', + only_valid_entity_types: ['artist'], + }, + { + input_url: 'http://tidal.com/#!/track/73579059', + input_entity_type: 'recording', + expected_relationship_type: 'streamingpaid', + expected_clean_url: 'https://tidal.com/track/73579059', + only_valid_entity_types: ['recording'], + }, + { + input_url: 'https://tidal.com/browse/track/87265743?play=true', + input_entity_type: 'recording', + expected_relationship_type: 'streamingpaid', + expected_clean_url: 'https://tidal.com/track/87265743', + only_valid_entity_types: ['recording'], + }, + { + input_url: 'https://listen.tidal.com/album/92616871/track/92616872', + input_entity_type: 'recording', + expected_relationship_type: 'streamingpaid', + expected_clean_url: 'https://tidal.com/track/92616872', + only_valid_entity_types: ['recording'], + }, + { + input_url: 'http://listen.tidal.com/video/74314756', + input_entity_type: 'recording', + expected_relationship_type: 'streamingpaid', + expected_clean_url: 'https://tidal.com/video/74314756', + only_valid_entity_types: ['recording', 'release'], + }, + { + input_url: 'tidal.com/#!/gb/store/album/80921386', + input_entity_type: 'release', + expected_relationship_type: 'streamingpaid', + expected_clean_url: 'https://tidal.com/album/80921386', + only_valid_entity_types: ['release'], + }, + { + input_url: 'http://www.tidal.com/album/191185943', + input_entity_type: 'release', + expected_relationship_type: 'streamingpaid', + expected_clean_url: 'https://tidal.com/album/191185943', + only_valid_entity_types: ['release'], + }, + { + input_url: 'https://stage.tidal.com/browse/album/77120747', + input_entity_type: 'release', + expected_relationship_type: 'streamingpaid', + expected_clean_url: 'https://tidal.com/album/77120747', + only_valid_entity_types: ['release'], + }, + { + input_url: 'https://store.tidal.com/us/album/58294001', + input_entity_type: 'release', + expected_relationship_type: 'streamingpaid', + expected_clean_url: 'https://tidal.com/album/58294001', + only_valid_entity_types: ['release'], + }, // Tipeee { input_url: 'https://www.tipeee.com/example/news', @@ -4097,6 +4195,13 @@ const testData = [ expected_clean_url: 'https://www.twitch.tv/videos/1234567890', only_valid_entity_types: ['recording', 'release'], }, + { + input_url: 'http://twitch.com/pisceze', + input_entity_type: 'artist', + expected_relationship_type: 'videochannel', + expected_clean_url: 'https://www.twitch.tv/pisceze', + only_valid_entity_types: ['artist', 'event', 'label', 'place', 'series'], + }, // Twitter { input_url: 'http://twitter.com/miguelgrimaldo', @@ -4301,6 +4406,11 @@ const testData = [ input_entity_type: 'label', expected_relationship_type: 'viaf', }, + { + input_url: 'http://viaf.org/viaf/154643080', + input_entity_type: 'series', + expected_relationship_type: 'viaf', + }, { input_url: 'http://viaf.org/viaf/185694157', input_entity_type: 'work', @@ -4351,6 +4461,25 @@ const testData = [ expected_relationship_type: 'streamingfree', expected_clean_url: 'https://vimeo.com/1109226', }, + { + input_url: 'https://vimeo.com/ondemand/inconcert/193518106?autoplay=1', + expected_clean_url: 'https://vimeo.com/ondemand/inconcert', + input_relationship_type: 'downloadpurchase', + only_valid_entity_types: ['recording', 'release'], + }, + { + input_url: 'https://vimeo.com/ondemand/inconcert#comments', + expected_clean_url: 'https://vimeo.com/ondemand/inconcert', + input_relationship_type: 'streamingpaid', + only_valid_entity_types: ['recording', 'release'], + }, + { + input_url: 'https://vimeo.com/store/ondemand/buy/91410', + input_entity_type: 'recording', + expected_relationship_type: undefined, + input_relationship_type: 'downloadpurchase', + only_valid_entity_types: [], + }, // Vine { input_url: 'https://vine.co/destorm', @@ -4626,6 +4755,24 @@ const testData = [ expected_relationship_type: 'otherdatabases', expected_clean_url: 'https://www.worldcat.org/identities/lccn-no2015052484/', }, + { + input_url: 'http://www.worldcat.org/identities/lccn-n50005018', + input_entity_type: 'label', + expected_relationship_type: 'otherdatabases', + expected_clean_url: 'https://www.worldcat.org/identities/lccn-n50005018/', + }, + { + input_url: 'http://worldcat.org/identities/lccn-n79081635/', + input_entity_type: 'place', + expected_relationship_type: 'otherdatabases', + expected_clean_url: 'https://www.worldcat.org/identities/lccn-n79081635/', + }, + { + input_url: 'https://www.worldcat.org/wcidentities/lccn-n94-9040', + input_entity_type: 'artist', + expected_relationship_type: 'otherdatabases', + expected_clean_url: 'https://www.worldcat.org/identities/lccn-n94-9040/', + }, // YouTube { input_url: 'http://youtube.com/user/officialpsy/videos', diff --git a/root/static/styles/favicons.less b/root/static/styles/favicons.less index 58bfd9502cd..0efdd852e87 100644 --- a/root/static/styles/favicons.less +++ b/root/static/styles/favicons.less @@ -141,6 +141,7 @@ .favicon("theatricalia"); .favicon("thedancegypsy"); .favicon("thesession"); +.favicon("tidal", 32); .favicon("tipeee"); .favicon("touhoudb", 32); .favicon("triplejunearthed"); @@ -157,6 +158,7 @@ .favicon("viaf", 32); .favicon("videogamin"); .favicon("vimeo", 32); +.favicon("vimeoondemand", 32); .favicon("vk", 32); .favicon("vkdb"); .favicon("vocadb"); diff --git a/root/static/styles/forms.less b/root/static/styles/forms.less index 29848a6bed1..6f8c3e46648 100644 --- a/root/static/styles/forms.less +++ b/root/static/styles/forms.less @@ -622,16 +622,23 @@ table.artist-credit-editor { padding-top: (@form-margin / 2); &:first-child { - min-width: 75px; + min-width: 42px; + padding-right: 0; } } + td:nth-child(3) { + width: 100%; + padding-left: (@form-margin / 4); + padding-right: 9px; + } + td.link-actions { text-align: right; - padding-right: 0; + min-width: 42px; button.remove-item { - margin-left: 4px !important; + margin: 0 4px !important; } } @@ -690,11 +697,6 @@ table.artist-credit-editor { } } - td.link-actions { - text-align: right; - padding-right: 0; - } - .add-relationship td { padding: 0; } @@ -716,13 +718,13 @@ table.artist-credit-editor { max-width: @form-label-width - @form-margin; } - td:nth-child(2) { width: 100%; } - td.errors ul { margin: 0; } input[type=text], input[type=email], input[type=number], input[type=url] { width: 100%; } } +#work-attributes td:nth-child(2) { width: 100%; } + #external-links-editor span.favicon { display: inline-block; width: @form-icon-size; diff --git a/root/statistics/Index.js b/root/statistics/Index.js index b770c14bc87..8f78b8f6bfa 100644 --- a/root/statistics/Index.js +++ b/root/statistics/Index.js @@ -163,6 +163,10 @@ const Index = ({ <th>{l('Relationships:')}</th> <td colSpan="3">{fc('ar.links')}</td> </tr> + <tr> + <th>{addColonText(l('Collections'))}</th> + <td colSpan="3">{fc('collection')}</td> + </tr> <tr> <th>{l('CD Stubs (all time / current):')}</th> <td>{fc('cdstub.submitted')}</td> @@ -917,6 +921,161 @@ const Index = ({ </tbody> </table> + <h2>{l('Collections')}</h2> + <table className="database-statistics"> + <tbody> + <tr className="thead"> + <th colSpan="5">{l('Collections')}</th> + </tr> + <tr> + <th colSpan="3">{addColonText(l('Collections'))}</th> + <td>{fc('collection')}</td> + <td /> + </tr> + <tr> + <th /> + <th colSpan="2">{addColonText(l('Of releases'))}</th> + <td>{fc('collection.type.release.all')}</td> + <td>{fp('collection.type.release.all', 'collection')}</td> + </tr> + <tr> + <th /> + <th /> + <th>{addColonText(l('Generic'))}</th> + <td>{fc('collection.type.release')}</td> + <td> + {fp('collection.type.release', 'collection.type.release.all')} + </td> + </tr> + <tr> + <th /> + <th /> + <th>{addColonText(l('Owned music'))}</th> + <td>{fc('collection.type.owned')}</td> + <td> + {fp('collection.type.owned', 'collection.type.release.all')} + </td> + </tr> + <tr> + <th /> + <th /> + <th>{addColonText(l('Wishlist'))}</th> + <td>{fc('collection.type.wishlist')}</td> + <td> + {fp('collection.type.wishlist', 'collection.type.release.all')} + </td> + </tr> + <tr> + <th /> + <th colSpan="2">{addColonText(l('Of events'))}</th> + <td>{fc('collection.type.event.all')}</td> + <td>{fp('collection.type.event.all', 'collection')}</td> + </tr> + <tr> + <th /> + <th /> + <th>{addColonText(l('Generic'))}</th> + <td>{fc('collection.type.event')}</td> + <td> + {fp('collection.type.event', 'collection.type.event.all')} + </td> + </tr> + <tr> + <th /> + <th /> + <th>{addColonText(l('Of type Attending'))}</th> + <td>{fc('collection.type.attending')}</td> + <td> + {fp('collection.type.attending', 'collection.type.event.all')} + </td> + </tr> + <tr> + <th /> + <th /> + <th>{addColonText(l('Of type Maybe attending'))}</th> + <td>{fc('collection.type.maybe_attending')}</td> + <td> + {fp( + 'collection.type.maybe_attending', + 'collection.type.event.all', + )} + </td> + </tr> + <tr> + <th /> + <th colSpan="2">{addColonText(l('Of areas'))}</th> + <td>{fc('collection.type.area')}</td> + <td>{fp('collection.type.area', 'collection')}</td> + </tr> + <tr> + <th /> + <th colSpan="2">{addColonText(l('Of artists'))}</th> + <td>{fc('collection.type.artist')}</td> + <td>{fp('collection.type.artist', 'collection')}</td> + </tr> + <tr> + <th /> + <th colSpan="2">{addColonText(l('Of instruments'))}</th> + <td>{fc('collection.type.instrument')}</td> + <td>{fp('collection.type.instrument', 'collection')}</td> + </tr> + <tr> + <th /> + <th colSpan="2">{addColonText(l('Of labels'))}</th> + <td>{fc('collection.type.label')}</td> + <td>{fp('collection.type.label', 'collection')}</td> + </tr> + <tr> + <th /> + <th colSpan="2">{addColonText(l('Of places'))}</th> + <td>{fc('collection.type.place')}</td> + <td>{fp('collection.type.place', 'collection')}</td> + </tr> + <tr> + <th /> + <th colSpan="2">{addColonText(l('Of recordings'))}</th> + <td>{fc('collection.type.recording')}</td> + <td>{fp('collection.type.recording', 'collection')}</td> + </tr> + <tr> + <th /> + <th colSpan="2">{addColonText(l('Of release groups'))}</th> + <td>{fc('collection.type.release_group')}</td> + <td>{fp('collection.type.release_group', 'collection')}</td> + </tr> + <tr> + <th /> + <th colSpan="2">{addColonText(l('Of series'))}</th> + <td>{fc('collection.type.series')}</td> + <td>{fp('collection.type.series', 'collection')}</td> + </tr> + <tr> + <th /> + <th colSpan="2">{addColonText(l('Of works'))}</th> + <td>{fc('collection.type.work')}</td> + <td>{fp('collection.type.work', 'collection')}</td> + </tr> + <tr> + <th /> + <th colSpan="2">{addColonText(l('Public'))}</th> + <td>{fc('collection.public')}</td> + <td>{fp('collection.public', 'collection')}</td> + </tr> + <tr> + <th /> + <th colSpan="2">{addColonText(l('Private'))}</th> + <td>{fc('collection.private')}</td> + <td>{fp('collection.private', 'collection')}</td> + </tr> + <tr> + <th /> + <th colSpan="2">{addColonText(l('With collaborators'))}</th> + <td>{fc('collection.has_collaborators')}</td> + <td>{fp('collection.has_collaborators', 'collection')}</td> + </tr> + </tbody> + </table> + <h2>{l('Editors, Edits, and Votes')}</h2> <table className="database-statistics"> <tbody> diff --git a/root/statistics/stats.js b/root/statistics/stats.js index 585f7014f25..852cb495cdb 100644 --- a/root/statistics/stats.js +++ b/root/statistics/stats.js @@ -164,6 +164,132 @@ const stats = { description: l('Count of all CDStub tracks'), label: l('CDStub tracks'), }, + 'count.collection': { + category: 'collection', + color: '#ff0000', + description: undefined, + label: l('Collections'), + }, + 'count.collection.has_collaborators': { + category: 'collection', + color: '#ff0000', + description: undefined, + label: l('Collections with collaborators'), + }, + 'count.collection.private': { + category: 'collection', + color: '#ff0000', + description: undefined, + label: l('Private collections'), + }, + 'count.collection.public': { + category: 'collection', + color: '#ff0000', + description: undefined, + label: l('Public collections'), + }, + 'count.collection.type.area': { + category: 'collection', + color: '#ff0000', + description: undefined, + label: l('Area collections'), + }, + 'count.collection.type.artist': { + category: 'collection', + color: '#ff0000', + description: undefined, + label: l('Artist collections'), + }, + 'count.collection.type.attending': { + category: 'collection', + color: '#ff0000', + description: undefined, + label: l('Collections of type Attending'), + }, + 'count.collection.type.event': { + category: 'collection', + color: '#ff0000', + description: undefined, + label: l('Collections of type Event'), + }, + 'count.collection.type.event.all': { + category: 'collection', + color: '#ff0000', + description: undefined, + label: l('Event collections (all types)'), + }, + 'count.collection.type.instrument': { + category: 'collection', + color: '#ff0000', + description: undefined, + label: l('Instrument collections'), + }, + 'count.collection.type.label': { + category: 'collection', + color: '#ff0000', + description: undefined, + label: l('Label collections'), + }, + 'count.collection.type.maybe_attending': { + category: 'collection', + color: '#ff0000', + description: undefined, + label: l('Collections of type Maybe attending'), + }, + 'count.collection.type.owned': { + category: 'collection', + color: '#ff0000', + description: undefined, + label: l('Collections of type Owned music'), + }, + 'count.collection.type.place': { + category: 'collection', + color: '#ff0000', + description: undefined, + label: l('Place collections'), + }, + 'count.collection.type.recording': { + category: 'collection', + color: '#ff0000', + description: undefined, + label: l('Recording collections'), + }, + 'count.collection.type.release': { + category: 'collection', + color: '#ff0000', + description: undefined, + label: l('Collections of type Release'), + }, + 'count.collection.type.release.all': { + category: 'collection', + color: '#ff0000', + description: undefined, + label: l('Release collections (all types)'), + }, + 'count.collection.type.release_group': { + category: 'collection', + color: '#ff0000', + description: undefined, + label: l('Release group collections'), + }, + 'count.collection.type.series': { + category: 'collection', + color: '#ff0000', + description: undefined, + label: l('Series collections'), + }, + 'count.collection.type.wishlist': { + category: 'collection', + color: '#ff0000', + description: undefined, + label: l('Collections of type Wishlist'), + }, + 'count.collection.type.work': { + category: 'collection', + color: '#ff0000', + description: undefined, + label: l('Work collections'), + }, 'count.coverart': { category: 'cover-art', color: '#0022dd', diff --git a/root/types/edit.js b/root/types/edit.js index 7f314d4d11c..fbc7a742e37 100644 --- a/root/types/edit.js +++ b/root/types/edit.js @@ -57,7 +57,7 @@ declare type EditT = { // MusicBrainz::Server::Entity::EditNote::TO_JSON declare type EditNoteT = { - +editor: EditorT, + +editor: EditorT | null, +editor_id: number, +formatted_text: string, +post_time: string | null, diff --git a/root/utility/tableColumns.js b/root/utility/tableColumns.js index 6aa13dd6ba3..eafc359a9be 100644 --- a/root/utility/tableColumns.js +++ b/root/utility/tableColumns.js @@ -46,6 +46,8 @@ import formatEndDate from '../static/scripts/common/utility/formatEndDate'; import renderMergeCheckboxElement from '../static/scripts/common/utility/renderMergeCheckboxElement'; import expand2react from '../static/scripts/common/i18n/expand2react'; +import localizeLanguageName + from '../static/scripts/common/i18n/localizeLanguageName'; import yesNo from '../static/scripts/common/utility/yesNo'; import type {ReportRelationshipRoleT} from '../report/types'; @@ -865,7 +867,7 @@ export const workLanguagesColumn: data-iso-639-3={language.language.iso_code_3} key={language.language.id} > - {l_languages(language.language.name)} + {localizeLanguageName(language.language, true)} </li> ))} </ul> diff --git a/script/database_configuration b/script/database_configuration index 2ef7ae88854..13a6a86d55a 100755 --- a/script/database_configuration +++ b/script/database_configuration @@ -13,14 +13,14 @@ if ($ARGV[0]) { my %db = %{ $MusicBrainz::Server::DatabaseConnectionFactory::databases{uc($ARGV[0])} }; - my $port = $db{port} // "5432"; - my $host = $db{host} // "localhost"; + my $port = $db{port} // '5432'; + my $host = $db{host} // 'localhost'; - print "export PGHOST=" . shell_quote($host) . "\n"; - print "export PGPORT=" . shell_quote($port) . "\n"; - print "export PGDATABASE=" . shell_quote($db{database}) . "\n"; - print "export PGUSER=" . shell_quote($db{username}) . "\n"; - print "export PGPASSWORD=" . shell_quote($db{password}) . "\n" if $db{password}; + print 'export PGHOST=' . shell_quote($host) . "\n"; + print 'export PGPORT=' . shell_quote($port) . "\n"; + print 'export PGDATABASE=' . shell_quote($db{database}) . "\n"; + print 'export PGUSER=' . shell_quote($db{username}) . "\n"; + print 'export PGPASSWORD=' . shell_quote($db{password}) . "\n" if $db{password}; } else { diff --git a/script/database_exists b/script/database_exists index 8b8e175303b..d1e88a41fa6 100755 --- a/script/database_exists +++ b/script/database_exists @@ -16,7 +16,7 @@ if ($ARGV[0]) my $sql = Sql->new( $db->conn ); my $so = $sql->select_single_value( - "SELECT TRUE FROM information_schema.information_schema_catalog_name WHERE catalog_name = ?", + 'SELECT TRUE FROM information_schema.information_schema_catalog_name WHERE catalog_name = ?', $db->database->database); exit 0 if $so; exit 1; # E_NODATABASE diff --git a/script/dump-entities-sql.pl b/script/dump-entities-sql.pl index 33e802d7d1b..e1a16e377ab 100755 --- a/script/dump-entities-sql.pl +++ b/script/dump-entities-sql.pl @@ -47,14 +47,14 @@ sub quote_column { my ($type, $data) = @_; - return "NULL" unless defined $data; + return 'NULL' unless defined $data; - croak "no type" unless defined $type; + croak 'no type' unless defined $type; my $ret; given ($type) { - when (/^integer\[\]/) { $ret = "'{" . join(",", @$data) . "}'"; } + when (/^integer\[\]/) { $ret = q('{) . join(',', @$data) . q(}'); } when (/^integer/) { $ret = $data; } when (/^smallint/) { $ret = $data; } default { @@ -115,7 +115,7 @@ sub main { my ($entity_type, @ids) = @ARGV; my $arguments_string = $entity_type . ' ' . join(' ', @ids); - print <<~"EOSQL"; + print <<~"SQL"; -- Automatically generated, do not edit. -- $arguments_string @@ -123,7 +123,7 @@ sub main { -- Temporarily drop triggers. DROP TRIGGER deny_deprecated ON link; - EOSQL + SQL my $dump_method = $DUMP_METHODS{$entity_type} // sub { my ($c, $gids) = @_; @@ -132,11 +132,11 @@ sub main { $dump_method->($c, \@ids); - print <<~'EOSQL'; + print <<~'SQL'; -- Restore triggers. CREATE TRIGGER deny_deprecated BEFORE UPDATE OR INSERT ON link FOR EACH ROW EXECUTE PROCEDURE deny_deprecated_links(); - EOSQL + SQL } diff --git a/script/dump_js_type_info.pl b/script/dump_js_type_info.pl index b314e9c927c..20a79d879f0 100755 --- a/script/dump_js_type_info.pl +++ b/script/dump_js_type_info.pl @@ -26,7 +26,7 @@ print "Writing root/static/scripts/tests/typeInfo.js ...\n"; -open(my $fh, ">", $out_file); +open(my $fh, '>', $out_file); print $fh <<EOF; // Automatically generated, do not edit. exports.linkTypeTree = $type_info; diff --git a/script/webservice_test_data.pl b/script/webservice_test_data.pl index e6d1c623dc3..142c765c135 100755 --- a/script/webservice_test_data.pl +++ b/script/webservice_test_data.pl @@ -28,6 +28,6 @@ my $cmd = "$root/release-group-sql-dump.pl $root/../t/sql/webservice.sql"; -system ("$cmd ".join (" ", @$releasegroups)); +system ("$cmd ".join (' ', @$releasegroups)); diff --git a/t/lib/t/Edit.pm b/t/lib/t/Edit.pm index 246451a489b..a396101be8e 100644 --- a/t/lib/t/Edit.pm +++ b/t/lib/t/Edit.pm @@ -6,11 +6,11 @@ around run_test => sub { my $orig = shift; my $self = shift; - $self->c->sql->do(<<~'EOSQL'); + $self->c->sql->do(<<~'SQL'); INSERT INTO editor (id, name, password, ha1, email, email_confirm_date) VALUES (1, 'editor', '{CLEARTEXT}pass', '3f3edade87115ce351d63f42d92a1834', 'foo@example.com', now()), (200, 'editor200', '{CLEARTEXT}pass', '3f3edade87115ce351d63f42d92a1834', 'foo2@example.com', now()); - EOSQL + SQL $self->$orig(@_); }; diff --git a/t/lib/t/MusicBrainz/Server/Controller/Admin/DeleteEditor.pm b/t/lib/t/MusicBrainz/Server/Controller/Admin/DeleteEditor.pm index 2f0185886c8..afe5cabf690 100644 --- a/t/lib/t/MusicBrainz/Server/Controller/Admin/DeleteEditor.pm +++ b/t/lib/t/MusicBrainz/Server/Controller/Admin/DeleteEditor.pm @@ -56,9 +56,9 @@ test 'Delete account as an admin' => sub { my $c = $test->c; MusicBrainz::Server::Test->prepare_test_database($c, '+editor'); - MusicBrainz::Server::Test->prepare_test_database($c, <<~'EOSQL'); + MusicBrainz::Server::Test->prepare_test_database($c, <<~'SQL'); UPDATE editor SET privs = 128 WHERE id = 3; -- make kuno an account admin - EOSQL + SQL $mech->get('/login'); $mech->submit_form( with_fields => { username => 'kuno', password => 'byld' } ); diff --git a/t/lib/t/MusicBrainz/Server/Controller/Artist/Edit.pm b/t/lib/t/MusicBrainz/Server/Controller/Artist/Edit.pm index ff0ff60f819..c335a63ff9a 100644 --- a/t/lib/t/MusicBrainz/Server/Controller/Artist/Edit.pm +++ b/t/lib/t/MusicBrainz/Server/Controller/Artist/Edit.pm @@ -151,7 +151,7 @@ test 'Test updating artist credits' => sub { my $c = $test->c; my $mech = $test->mech; - $c->sql->do(<<~'EOSQL'); + $c->sql->do(<<~'SQL'); INSERT INTO editor (id, name, password, email, email_confirm_date, ha1) VALUES (1, 'new_editor', '{CLEARTEXT}password', 'example@example.com', '2005-10-20', 'e1dd8fee8ee728b0ddc8027d3a3db478'); INSERT INTO artist (id, gid, name, sort_name) @@ -161,7 +161,7 @@ test 'Test updating artist credits' => sub { VALUES (1, 1, 'Alternative Name'); INSERT INTO artist_credit_name (artist_credit, artist, name, position, join_phrase) VALUES (1, 10, 'Alternative Name', 1, ''); - EOSQL + SQL $mech->get_ok('/login'); $mech->submit_form( with_fields => { username => 'new_editor', password => 'password' } ); diff --git a/t/lib/t/MusicBrainz/Server/Controller/Artist/Show.pm b/t/lib/t/MusicBrainz/Server/Controller/Artist/Show.pm index 039aaf7a46a..75354acf56c 100644 --- a/t/lib/t/MusicBrainz/Server/Controller/Artist/Show.pm +++ b/t/lib/t/MusicBrainz/Server/Controller/Artist/Show.pm @@ -113,7 +113,7 @@ test 'Embedded JSON-LD `member` property' => sub { my $mech = $test->mech; my $c = $test->c; - $c->sql->do(<<~'EOSQL'); + $c->sql->do(<<~'SQL'); INSERT INTO artist (id, gid, name, sort_name, type) VALUES (100, 'dcb48a49-b17d-49b9-aee5-4f168d8004d9', 'Group', 'Group', 2), (22, '2a62773a-cdbf-44c6-a700-50f931504054', 'Person A', 'Person A', 1), @@ -129,7 +129,7 @@ test 'Embedded JSON-LD `member` property' => sub { INSERT INTO link_attribute (link, attribute_type) VALUES (2, 229), (3, 125), (4, 229); - EOSQL + SQL $mech->get_ok('/artist/dcb48a49-b17d-49b9-aee5-4f168d8004d9'); page_test_jsonld $mech => { @@ -200,7 +200,7 @@ test 'Embedded JSON-LD `track` property (for artists with only recordings)' => s my $mech = $test->mech; my $c = $test->c; - $c->sql->do(<<~'EOSQL'); + $c->sql->do(<<~'SQL'); INSERT INTO artist (id, gid, name, sort_name) VALUES (1, 'dcb48a49-b17d-49b9-aee5-4f168d8004d9', 'Group', 'Group'); @@ -212,7 +212,7 @@ test 'Embedded JSON-LD `track` property (for artists with only recordings)' => s INSERT INTO recording (id, gid, name, artist_credit, length) VALUES (1, '7af3d92f-5ef4-4ed4-bbbb-728928984d9c', 'R1', 1, 300000), (2, '67f09ef6-0704-4841-935c-01c5b247574c', 'R2', 1, 250000); - EOSQL + SQL $mech->get_ok('/artist/dcb48a49-b17d-49b9-aee5-4f168d8004d9'); page_test_jsonld $mech => { @@ -242,7 +242,7 @@ test 'Embedded JSON-LD `genre` property' => sub { my $mech = $test->mech; my $c = $test->c; - $c->sql->do(<<~'EOSQL'); + $c->sql->do(<<~'SQL'); INSERT INTO artist (id, gid, name, sort_name) VALUES (1, 'dcb48a49-b17d-49b9-aee5-4f168d8004d9', 'Group', 'Group'); @@ -255,7 +255,7 @@ test 'Embedded JSON-LD `genre` property' => sub { INSERT INTO artist_tag (artist, count, last_updated, tag) VALUES (1, 3, '2011-01-18 15:21:33.71184+00', 30); - EOSQL + SQL $mech->get_ok('/artist/dcb48a49-b17d-49b9-aee5-4f168d8004d9'); page_test_jsonld $mech => { @@ -266,10 +266,10 @@ test 'Embedded JSON-LD `genre` property' => sub { '@context' => 'http://schema.org' }; - $c->sql->do(<<~'EOSQL'); + $c->sql->do(<<~'SQL'); INSERT INTO artist_tag (artist, count, last_updated, tag) VALUES (1, 2, '2011-01-18 15:21:33.71184+00', 31); - EOSQL + SQL $mech->get_ok('/artist/dcb48a49-b17d-49b9-aee5-4f168d8004d9'); page_test_jsonld $mech => { diff --git a/t/lib/t/MusicBrainz/Server/Controller/Artist/Split.pm b/t/lib/t/MusicBrainz/Server/Controller/Artist/Split.pm index d56ffb71cb4..46cd98b4e2a 100644 --- a/t/lib/t/MusicBrainz/Server/Controller/Artist/Split.pm +++ b/t/lib/t/MusicBrainz/Server/Controller/Artist/Split.pm @@ -9,14 +9,14 @@ around run_test => sub { my $c = $test->c; my $mech = $test->mech; - $c->sql->do(<<~'EOSQL'); + $c->sql->do(<<~'SQL'); INSERT INTO editor (id, name, password, email, email_confirm_date, ha1) VALUES (1, 'new_editor', '{CLEARTEXT}password', 'example@example.com', '2005-10-20', 'e1dd8fee8ee728b0ddc8027d3a3db478'); INSERT INTO artist (id, gid, name, sort_name) VALUES (10, '9f0b3e1a-2431-400f-b6ff-2bcebbf0971a', 'Bob & David', 'Bob & David'), (11, '1f0b3e1a-2431-400f-b6ff-2bcebbf0971a', 'Bob', 'Bob'), (12, '2f0b3e1a-2431-400f-b6ff-2bcebbf0971a', 'David', 'David'); - EOSQL + SQL $mech->get_ok('/login'); $mech->submit_form( with_fields => { username => 'new_editor', password => 'password' } ); @@ -30,10 +30,10 @@ test 'Split artist remove all collaboration relationships for that artist' => su my $test = shift; my $c = $test->c; - $c->sql->do(<<~'EOSQL'); + $c->sql->do(<<~'SQL'); INSERT INTO link (id, link_type) VALUES (1, 102); INSERT INTO l_artist_artist (id, link, entity0, entity1) VALUES (1, 1, 11, 10); - EOSQL + SQL my @edits = perform_split($test); @@ -59,14 +59,14 @@ test 'Test splitting an artist' => sub { my $c = $test->c; - $c->sql->do(<<~'EOSQL'); + $c->sql->do(<<~'SQL'); INSERT INTO artist_credit (id, name, artist_count) VALUES (100, 'Bob & David', 1); INSERT INTO artist_credit_name (artist_credit, position, artist, name) VALUES (100, 0, 10, 'Bob & David'); INSERT INTO recording (id, gid, name, artist_credit, length) VALUES (1, '123c079d-374e-4436-9448-da92dedef3cd', 'Bobbing and Daviding', 100, 123456); - EOSQL + SQL my @edits = perform_split($test); diff --git a/t/lib/t/MusicBrainz/Server/Controller/CDTOC/Attach.pm b/t/lib/t/MusicBrainz/Server/Controller/CDTOC/Attach.pm index 7b90cde852e..707b221dc57 100644 --- a/t/lib/t/MusicBrainz/Server/Controller/CDTOC/Attach.pm +++ b/t/lib/t/MusicBrainz/Server/Controller/CDTOC/Attach.pm @@ -9,7 +9,7 @@ test 'Logged in users can see matching CD stubs' => sub { my $c = $test->c; my $mech = $test->mech; - $c->sql->do(<<~'EOSQL'); + $c->sql->do(<<~'SQL'); INSERT INTO release_raw (id, title, artist) VALUES (1, 'CD stub name', 'CD stub artist'); INSERT INTO cdtoc_raw (id, release, discid, track_count, leadout_offset, track_offset) @@ -26,7 +26,7 @@ test 'Logged in users can see matching CD stubs' => sub { 'test@editor.org', 'http://musicbrainz.org', 'biography', '2005-10-20', '1989-07-23', now(), 'e1dd8fee8ee728b0ddc8027d3a3db478' ); - EOSQL + SQL $mech->get_ok('/login'); $mech->submit_form( with_fields => { username => 'new_editor', password => 'password' } ); @@ -44,7 +44,7 @@ test 'A matching CD stub searches for possible releases' => sub { my $c = $test->c; my $mech = $test->mech; - $c->sql->do(<<~'EOSQL'); + $c->sql->do(<<~'SQL'); INSERT INTO release_raw (id, title, artist) VALUES (1, 'Release stub name', 'CD stub artist'); INSERT INTO cdtoc_raw (id, release, discid, track_count, leadout_offset, track_offset) @@ -87,7 +87,7 @@ test 'A matching CD stub searches for possible releases' => sub { 'test@editor.org', 'http://musicbrainz.org', 'biography', '2005-10-20', '1989-07-23', now(), 'e1dd8fee8ee728b0ddc8027d3a3db478' ); - EOSQL + SQL $mech->get_ok('/login'); $mech->submit_form( with_fields => { username => 'new_editor', password => 'password' } ); diff --git a/t/lib/t/MusicBrainz/Server/Controller/CDTOC/SetDurations.pm b/t/lib/t/MusicBrainz/Server/Controller/CDTOC/SetDurations.pm index 79014d4bab6..bb3ebd2dd50 100644 --- a/t/lib/t/MusicBrainz/Server/Controller/CDTOC/SetDurations.pm +++ b/t/lib/t/MusicBrainz/Server/Controller/CDTOC/SetDurations.pm @@ -13,7 +13,7 @@ my $c = $test->c; MusicBrainz::Server::Test->prepare_test_database($c, '+controller_cdtoc'); -MusicBrainz::Server::Test->prepare_test_database($c, <<~'EOSQL'); +MusicBrainz::Server::Test->prepare_test_database($c, <<~'SQL'); INSERT INTO editor ( id, name, password, privs, email, website, bio, @@ -23,7 +23,7 @@ MusicBrainz::Server::Test->prepare_test_database($c, <<~'EOSQL'); 'test@editor.org', 'http://musicbrainz.org', 'biography', '2005-10-20', '1989-07-23', now(), 'e1dd8fee8ee728b0ddc8027d3a3db478' ); - EOSQL + SQL $mech->get_ok('/login'); $mech->submit_form( with_fields => { username => 'new_editor', password => 'password' } ); diff --git a/t/lib/t/MusicBrainz/Server/Controller/Collection/Show.pm b/t/lib/t/MusicBrainz/Server/Controller/Collection/Show.pm index 45328bf9caa..0146a791e7f 100644 --- a/t/lib/t/MusicBrainz/Server/Controller/Collection/Show.pm +++ b/t/lib/t/MusicBrainz/Server/Controller/Collection/Show.pm @@ -57,7 +57,7 @@ test 'Collection view includes description when there is one' => sub { $tx->not_ok('//div[@id=collection]/p[@class=deleted and starts-with(text(), "This content is hidden to prevent spam.")]', 'collection description of beginner/limited user hides for not-logged-in user'); - $test->c->sql->do(<<~"EOSQL"); + $test->c->sql->do(<<~"SQL"); INSERT INTO edit (id, editor, type, status, expire_time, autoedit) VALUES (11, 2, 1, $STATUS_APPLIED, now(), 0), (12, 2, 1, $STATUS_APPLIED, now(), 0), @@ -70,7 +70,7 @@ test 'Collection view includes description when there is one' => sub { (19, 2, 1, $STATUS_APPLIED, now(), 0), (20, 2, 1, $STATUS_APPLIED, now(), 0); UPDATE editor SET member_since = '2007-07-23' WHERE id = 2; - EOSQL + SQL $mech->get_ok('/collection/f34c079d-374e-4436-9448-da92dedef3cb'); $mech->content_like(qr/Testy!/, 'collection description of (not beginner/limited) user shows for everyone'); diff --git a/t/lib/t/MusicBrainz/Server/Controller/Edit/Cancel.pm b/t/lib/t/MusicBrainz/Server/Controller/Edit/Cancel.pm index 5132dd55fab..6aa9e6e66ac 100644 --- a/t/lib/t/MusicBrainz/Server/Controller/Edit/Cancel.pm +++ b/t/lib/t/MusicBrainz/Server/Controller/Edit/Cancel.pm @@ -65,12 +65,12 @@ sub prepare { my $c = $test->c; my $mech = $test->mech; - $c->sql->do(<<~'EOSQL'); + $c->sql->do(<<~'SQL'); INSERT INTO artist (id, gid, name, sort_name) VALUES (1, 'e69a970a-e916-11e0-a751-00508db50876', 'artist', 'artist'); INSERT INTO editor (id, name, password, email, ha1, email_confirm_date) VALUES (1, 'editor1', '{CLEARTEXT}pass', 'editor1@example.com', '16a4862191803cb596ee4b16802bb7ee', now()) - EOSQL + SQL my $edit = $test->c->model('Edit')->create( editor_id => 1, diff --git a/t/lib/t/MusicBrainz/Server/Controller/Place/Edit.pm b/t/lib/t/MusicBrainz/Server/Controller/Place/Edit.pm index e6b235ced95..a5581f9adbb 100644 --- a/t/lib/t/MusicBrainz/Server/Controller/Place/Edit.pm +++ b/t/lib/t/MusicBrainz/Server/Controller/Place/Edit.pm @@ -11,10 +11,10 @@ test 'Remove coordinates from a place' => sub { my $c = $test->c; MusicBrainz::Server::Test->prepare_test_database($c); - MusicBrainz::Server::Test->prepare_test_database($c, <<~'EOSQL'); + MusicBrainz::Server::Test->prepare_test_database($c, <<~'SQL'); INSERT INTO place (gid, name, type, coordinates) VALUES ('a24c9284-a9d2-428b-bacd-fa79cf9a9108', 'Sydney Opera House', 2, POINT(-33.858667,151.214028)); - EOSQL + SQL $mech->get_ok('/login'); $mech->submit_form( with_fields => { username => 'new_editor', password => 'password' } ); diff --git a/t/lib/t/MusicBrainz/Server/Controller/Recording/Edit.pm b/t/lib/t/MusicBrainz/Server/Controller/Recording/Edit.pm index ee46a9c5476..68238a8dcd0 100644 --- a/t/lib/t/MusicBrainz/Server/Controller/Recording/Edit.pm +++ b/t/lib/t/MusicBrainz/Server/Controller/Recording/Edit.pm @@ -15,7 +15,7 @@ my $test = shift; my $mech = $test->mech; my $c = $test->c; -$c->sql->do(<<~'EOSQL'); +$c->sql->do(<<~'SQL'); INSERT INTO artist (id, gid, name, sort_name, comment) VALUES (3, '745c079d-374e-4436-9448-da92dedef3ce', 'ABBA', 'ABBA', 'A'), (6, 'a45c079d-374e-4436-9448-da92dedef3cf', 'ABBA', 'ABBA', 'B'), @@ -28,7 +28,7 @@ $c->sql->do(<<~'EOSQL'); INSERT INTO recording (id, gid, name, artist_credit, length) VALUES (1, '54b9d183-7dab-42ba-94a3-7388a66604b8', 'Dancing Queen', 1, 123456); INSERT INTO isrc (isrc, recording) VALUES ('DEE250800231', 1); - EOSQL + SQL $mech->get_ok('/login'); $mech->submit_form( diff --git a/t/lib/t/MusicBrainz/Server/Controller/Relationship/LinkAttributeType/Create.pm b/t/lib/t/MusicBrainz/Server/Controller/Relationship/LinkAttributeType/Create.pm index 7347a395a13..5e895aa3a87 100644 --- a/t/lib/t/MusicBrainz/Server/Controller/Relationship/LinkAttributeType/Create.pm +++ b/t/lib/t/MusicBrainz/Server/Controller/Relationship/LinkAttributeType/Create.pm @@ -5,10 +5,10 @@ use MusicBrainz::Server::Test qw( capture_edits html_ok ); around run_test => sub { my ($orig, $test, @args) = @_; - $test->c->sql->do(<<~'EOSQL'); + $test->c->sql->do(<<~'SQL'); INSERT INTO editor (id, name, password, email, privs, ha1, email_confirm_date) VALUES (1, 'editor1', '{CLEARTEXT}pass', 'editor1@example.com', 255, '16a4862191803cb596ee4b16802bb7ee', now()) - EOSQL + SQL $test->mech->get('/login'); $test->mech->submit_form( diff --git a/t/lib/t/MusicBrainz/Server/Controller/Relationship/LinkAttributeType/Delete.pm b/t/lib/t/MusicBrainz/Server/Controller/Relationship/LinkAttributeType/Delete.pm index d7ac3108428..b749ff50444 100644 --- a/t/lib/t/MusicBrainz/Server/Controller/Relationship/LinkAttributeType/Delete.pm +++ b/t/lib/t/MusicBrainz/Server/Controller/Relationship/LinkAttributeType/Delete.pm @@ -7,10 +7,10 @@ use HTTP::Request::Common qw( POST ); around run_test => sub { my ($orig, $test, @args) = @_; - $test->c->sql->do(<<~'EOSQL'); + $test->c->sql->do(<<~'SQL'); INSERT INTO editor (id, name, password, email, privs, ha1, email_confirm_date) VALUES (1, 'editor1', '{CLEARTEXT}pass', 'editor1@example.com', 255, '16a4862191803cb596ee4b16802bb7ee', now()) - EOSQL + SQL $test->mech->get('/login'); $test->mech->submit_form( with_fields => { username => 'editor1', password => 'pass' } ); diff --git a/t/lib/t/MusicBrainz/Server/Controller/Relationship/LinkAttributeType/Edit.pm b/t/lib/t/MusicBrainz/Server/Controller/Relationship/LinkAttributeType/Edit.pm index d7bce52dd26..90abde5cb51 100644 --- a/t/lib/t/MusicBrainz/Server/Controller/Relationship/LinkAttributeType/Edit.pm +++ b/t/lib/t/MusicBrainz/Server/Controller/Relationship/LinkAttributeType/Edit.pm @@ -5,10 +5,10 @@ use MusicBrainz::Server::Test qw( capture_edits html_ok ); around run_test => sub { my ($orig, $test, @args) = @_; - $test->c->sql->do(<<~'EOSQL'); + $test->c->sql->do(<<~'SQL'); INSERT INTO editor (id, name, password, email, privs, ha1, email_confirm_date) VALUES (1, 'editor1', '{CLEARTEXT}pass', 'editor1@example.com', 255, '16a4862191803cb596ee4b16802bb7ee', now()) - EOSQL + SQL $test->mech->get('/login'); $test->mech->submit_form( with_fields => { username => 'editor1', password => 'pass' } ); diff --git a/t/lib/t/MusicBrainz/Server/Controller/Relationship/LinkAttributeType/Index.pm b/t/lib/t/MusicBrainz/Server/Controller/Relationship/LinkAttributeType/Index.pm index 03c3becf9d5..4c1dd298e3a 100644 --- a/t/lib/t/MusicBrainz/Server/Controller/Relationship/LinkAttributeType/Index.pm +++ b/t/lib/t/MusicBrainz/Server/Controller/Relationship/LinkAttributeType/Index.pm @@ -5,10 +5,10 @@ use MusicBrainz::Server::Test qw( capture_edits html_ok test_xpath_html ); around run_test => sub { my ($orig, $test, @args) = @_; - $test->c->sql->do(<<~'EOSQL'); + $test->c->sql->do(<<~'SQL'); INSERT INTO editor (id, name, password, email, privs, ha1, email_confirm_date) VALUES (1, 'editor1', '{CLEARTEXT}pass', 'editor1@example.com', 255, '16a4862191803cb596ee4b16802bb7ee', now()) - EOSQL + SQL $test->mech->get('/login'); $test->mech->submit_form( with_fields => { username => 'editor1', password => 'pass' } ); diff --git a/t/lib/t/MusicBrainz/Server/Controller/Relationship/LinkType/Create.pm b/t/lib/t/MusicBrainz/Server/Controller/Relationship/LinkType/Create.pm index aff15b1098c..7cb6bd1bf9e 100644 --- a/t/lib/t/MusicBrainz/Server/Controller/Relationship/LinkType/Create.pm +++ b/t/lib/t/MusicBrainz/Server/Controller/Relationship/LinkType/Create.pm @@ -5,10 +5,10 @@ use MusicBrainz::Server::Test qw( capture_edits html_ok ); around run_test => sub { my ($orig, $test, @args) = @_; - $test->c->sql->do(<<~'EOSQL'); + $test->c->sql->do(<<~'SQL'); INSERT INTO editor (id, name, password, email, privs, ha1, email_confirm_date) VALUES (1, 'editor1', '{CLEARTEXT}pass', 'editor1@example.com', 255, '16a4862191803cb596ee4b16802bb7ee', now()) - EOSQL + SQL $test->mech->get('/login'); $test->mech->submit_form( with_fields => { username => 'editor1', password => 'pass' } ); diff --git a/t/lib/t/MusicBrainz/Server/Controller/Relationship/LinkType/Delete.pm b/t/lib/t/MusicBrainz/Server/Controller/Relationship/LinkType/Delete.pm index 534f6264285..fa66518f460 100644 --- a/t/lib/t/MusicBrainz/Server/Controller/Relationship/LinkType/Delete.pm +++ b/t/lib/t/MusicBrainz/Server/Controller/Relationship/LinkType/Delete.pm @@ -7,10 +7,10 @@ use HTTP::Request::Common qw( POST ); around run_test => sub { my ($orig, $test, @args) = @_; - $test->c->sql->do(<<~'EOSQL'); + $test->c->sql->do(<<~'SQL'); INSERT INTO editor (id, name, password, email, privs, ha1, email_confirm_date) VALUES (1, 'editor1', '{CLEARTEXT}pass', 'editor1@example.com', 255, '16a4862191803cb596ee4b16802bb7ee', now()) - EOSQL + SQL $test->mech->get('/login'); $test->mech->submit_form( with_fields => { username => 'editor1', password => 'pass' } ); diff --git a/t/lib/t/MusicBrainz/Server/Controller/Relationship/LinkType/Edit.pm b/t/lib/t/MusicBrainz/Server/Controller/Relationship/LinkType/Edit.pm index cdc753255b8..2eae8316760 100644 --- a/t/lib/t/MusicBrainz/Server/Controller/Relationship/LinkType/Edit.pm +++ b/t/lib/t/MusicBrainz/Server/Controller/Relationship/LinkType/Edit.pm @@ -5,10 +5,10 @@ use MusicBrainz::Server::Test qw( capture_edits html_ok ); around run_test => sub { my ($orig, $test, @args) = @_; - $test->c->sql->do(<<~'EOSQL'); + $test->c->sql->do(<<~'SQL'); INSERT INTO editor (id, name, password, email, privs, ha1, email_confirm_date) VALUES (1, 'editor1', '{CLEARTEXT}pass', 'editor1@example.com', 255, '16a4862191803cb596ee4b16802bb7ee', now()) - EOSQL + SQL $test->mech->get('/login'); $test->mech->submit_form( with_fields => { username => 'editor1', password => 'pass' } ); diff --git a/t/lib/t/MusicBrainz/Server/Controller/Relationship/LinkType/Index.pm b/t/lib/t/MusicBrainz/Server/Controller/Relationship/LinkType/Index.pm index f61643d04f8..3d40537b3eb 100644 --- a/t/lib/t/MusicBrainz/Server/Controller/Relationship/LinkType/Index.pm +++ b/t/lib/t/MusicBrainz/Server/Controller/Relationship/LinkType/Index.pm @@ -5,10 +5,10 @@ use MusicBrainz::Server::Test qw( html_ok test_xpath_html ); around run_test => sub { my ($orig, $test, @args) = @_; - $test->c->sql->do(<<~'EOSQL'); + $test->c->sql->do(<<~'SQL'); INSERT INTO editor (id, name, password, email, privs, ha1, email_confirm_date) VALUES (1, 'editor1', '{CLEARTEXT}pass', 'editor1@example.com', 255, '16a4862191803cb596ee4b16802bb7ee', now()) - EOSQL + SQL $test->mech->get('/login'); $test->mech->submit_form( with_fields => { username => 'editor1', password => 'pass' } ); diff --git a/t/lib/t/MusicBrainz/Server/Controller/Release/ReorderCoverArt.pm b/t/lib/t/MusicBrainz/Server/Controller/Release/ReorderCoverArt.pm index ea2cf36b956..f8eefac7619 100644 --- a/t/lib/t/MusicBrainz/Server/Controller/Release/ReorderCoverArt.pm +++ b/t/lib/t/MusicBrainz/Server/Controller/Release/ReorderCoverArt.pm @@ -11,7 +11,7 @@ test 'Test reordering cover art' => sub { my $c = $test->c; my $mech = $test->mech; - MusicBrainz::Server::Test->prepare_test_database($c, <<~'EOSQL'); + MusicBrainz::Server::Test->prepare_test_database($c, <<~'SQL'); INSERT INTO editor ( id, name, password, privs, email, website, bio, @@ -39,7 +39,7 @@ test 'Test reordering cover art' => sub { INSERT INTO edit_data (edit, data) VALUES (1, '{}'); INSERT INTO cover_art_archive.cover_art (id, release, mime_type, edit, ordering) VALUES (12345, 1, 'image/jpeg', 1, 1), (12346, 1, 'image/jpeg', 1, 2); - EOSQL + SQL $mech->get_ok('/login'); $mech->submit_form( with_fields => { username => 'new_editor', password => 'password' } ); diff --git a/t/lib/t/MusicBrainz/Server/Controller/Search/Direct.pm b/t/lib/t/MusicBrainz/Server/Controller/Search/Direct.pm index b0f48917fcc..a7a33a10c0b 100644 --- a/t/lib/t/MusicBrainz/Server/Controller/Search/Direct.pm +++ b/t/lib/t/MusicBrainz/Server/Controller/Search/Direct.pm @@ -12,11 +12,11 @@ my $mech = $test->mech; my $c = $test->c; MusicBrainz::Server::Test->prepare_test_database($c); -MusicBrainz::Server::Test->prepare_test_database($c, <<~'EOSQL'); +MusicBrainz::Server::Test->prepare_test_database($c, <<~'SQL'); INSERT INTO link (id, link_type, attribute_count) VALUES (1000, 167, 0); INSERT INTO l_artist_work (id, entity0, link, entity1) VALUES (1000, 6, 1000, 1); - EOSQL + SQL $mech->get_ok('/search?query=Kate&type=artist&direct=on', 'perform artist search'); html_ok($mech->content); diff --git a/t/lib/t/MusicBrainz/Server/Controller/URL/Edit.pm b/t/lib/t/MusicBrainz/Server/Controller/URL/Edit.pm index 008d4b8e1f8..4a592ff56b0 100644 --- a/t/lib/t/MusicBrainz/Server/Controller/URL/Edit.pm +++ b/t/lib/t/MusicBrainz/Server/Controller/URL/Edit.pm @@ -55,7 +55,7 @@ test 'MBS-8590: Clearing relationship credits' => sub { MusicBrainz::Server::Test->prepare_test_database($c, '+editor'); - $c->sql->do(<<~'EOSQL'); + $c->sql->do(<<~'SQL'); INSERT INTO url (id, gid, url) VALUES (1, '94d14d6f-d937-4f24-a814-423cdb977c74', 'http://www.bobmarley.com/'); INSERT INTO artist (id, gid, name, sort_name) @@ -63,7 +63,7 @@ test 'MBS-8590: Clearing relationship credits' => sub { INSERT INTO link (id, link_type) VALUES (1, 183); INSERT INTO l_artist_url (id, link, entity0, entity1, entity0_credit) VALUES (1, 1, 3, 1, 'Bob Marley'); - EOSQL + SQL $mech->get_ok('/login'); $mech->submit_form( with_fields => { username => 'new_editor', password => 'password' } ); diff --git a/t/lib/t/MusicBrainz/Server/Controller/User/Edit.pm b/t/lib/t/MusicBrainz/Server/Controller/User/Edit.pm index 81aecf6eb88..7992ef7bf5b 100644 --- a/t/lib/t/MusicBrainz/Server/Controller/User/Edit.pm +++ b/t/lib/t/MusicBrainz/Server/Controller/User/Edit.pm @@ -91,7 +91,7 @@ test 'Hide biography and website/homepage of beginners/limited users from not-lo $tx->ok('//tr/td[preceding-sibling::th[1][normalize-space(text())="Homepage:"]]/div[@class="deleted" and starts-with(text(), "This content is hidden to prevent spam.")]', 'website field of beginner/limited user is hidden from not-logged-in user'); - $test->c->sql->do(<<~"EOSQL"); + $test->c->sql->do(<<~"SQL"); INSERT INTO edit (id, editor, type, status, expire_time, autoedit) VALUES (1, 1, 1, $STATUS_APPLIED, now(), 0), (2, 1, 1, $STATUS_APPLIED, now(), 0), @@ -103,7 +103,7 @@ test 'Hide biography and website/homepage of beginners/limited users from not-lo (8, 1, 1, $STATUS_APPLIED, now(), 0), (9, 1, 1, $STATUS_APPLIED, now(), 0), (10, 1, 1, $STATUS_APPLIED, now(), 0); - EOSQL + SQL $mech->get('/user/new_editor'); html_ok($mech->content); diff --git a/t/lib/t/MusicBrainz/Server/Controller/User/Login.pm b/t/lib/t/MusicBrainz/Server/Controller/User/Login.pm index ef050e43759..b433a330131 100644 --- a/t/lib/t/MusicBrainz/Server/Controller/User/Login.pm +++ b/t/lib/t/MusicBrainz/Server/Controller/User/Login.pm @@ -81,10 +81,10 @@ test 'Can login with usernames that contain the "/" character' => sub { my $mech = $test->mech; my $enable_ssl = enable_ssl(); - $test->c->sql->do(<<~'EOSQL'); + $test->c->sql->do(<<~'SQL'); INSERT INTO editor (id, name, password, ha1) VALUES (100, 'ocharles/bot', '{CLEARTEXT}mb', 'f067d1b82bbf64c403cbbc996de73cda'); - EOSQL + SQL $mech->get_ok('/user/ocharles%2Fbot'); html_ok($mech->content); diff --git a/t/lib/t/MusicBrainz/Server/Controller/User/Ratings.pm b/t/lib/t/MusicBrainz/Server/Controller/User/Ratings.pm index 2fc186721a2..c01059c832d 100644 --- a/t/lib/t/MusicBrainz/Server/Controller/User/Ratings.pm +++ b/t/lib/t/MusicBrainz/Server/Controller/User/Ratings.pm @@ -12,12 +12,12 @@ my $mech = $test->mech; my $c = $test->c; MusicBrainz::Server::Test->prepare_test_database($c, '+editor'); -MusicBrainz::Server::Test->prepare_test_database($c, <<~'EOSQL'); +MusicBrainz::Server::Test->prepare_test_database($c, <<~'SQL'); INSERT INTO artist (id, gid, name, sort_name) VALUES (7, 'b9d99e40-72d7-11de-8a39-0800200c9a66', 'Kate Bush', 'Kate Bush'); TRUNCATE artist_rating_raw CASCADE; INSERT INTO artist_rating_raw (artist, editor, rating) VALUES (7, 1, 80); - EOSQL + SQL $mech->get('/user/new_editor/ratings'); $mech->content_contains('Kate Bush', 'new_editor has rated Kate Bush'); diff --git a/t/lib/t/MusicBrainz/Server/Controller/User/Tags.pm b/t/lib/t/MusicBrainz/Server/Controller/User/Tags.pm index a02a1c00c92..e2f44e781b8 100644 --- a/t/lib/t/MusicBrainz/Server/Controller/User/Tags.pm +++ b/t/lib/t/MusicBrainz/Server/Controller/User/Tags.pm @@ -11,14 +11,14 @@ test all => sub { my $c = $test->c; MusicBrainz::Server::Test->prepare_test_database($c, '+editor'); - MusicBrainz::Server::Test->prepare_test_database($c, <<~'EOSQL'); + MusicBrainz::Server::Test->prepare_test_database($c, <<~'SQL'); INSERT INTO artist (id, gid, name, sort_name) VALUES (7, 'b9d99e40-72d7-11de-8a39-0800200c9a66', 'Kate Bush', 'Kate Bush'); TRUNCATE artist_tag_raw CASCADE; INSERT INTO tag (id, name) VALUES (1, 'not a musical'); INSERT INTO artist_tag_raw (artist, editor, tag, is_upvote) VALUES (7, 1, 1, 't'); - EOSQL + SQL $mech->get('/user/new_editor/tags'); $mech->content_contains('not a musical', q(new_editor has used the tag 'not a musical')); diff --git a/t/lib/t/MusicBrainz/Server/Controller/WS/2/Authenticated.pm b/t/lib/t/MusicBrainz/Server/Controller/WS/2/Authenticated.pm index 535a8ca55d4..f5fe8821afa 100644 --- a/t/lib/t/MusicBrainz/Server/Controller/WS/2/Authenticated.pm +++ b/t/lib/t/MusicBrainz/Server/Controller/WS/2/Authenticated.pm @@ -21,11 +21,11 @@ my $mech = $test->mech; $mech->default_header('Accept' => 'application/xml'); MusicBrainz::Server::Test->prepare_test_database($c, '+webservice'); -MusicBrainz::Server::Test->prepare_test_database($c, <<~'EOSQL'); +MusicBrainz::Server::Test->prepare_test_database($c, <<~'SQL'); SELECT setval('tag_id_seq', (SELECT MAX(id) FROM tag)); INSERT INTO editor (id, name, password, ha1) VALUES (1, 'new_editor', '{CLEARTEXT}password', 'e1dd8fee8ee728b0ddc8027d3a3db478') - EOSQL + SQL my $content = '<?xml version="1.0" encoding="UTF-8"?> <metadata xmlns="http://musicbrainz.org/ns/mmd-2.0#"> @@ -208,11 +208,11 @@ test 'Same tag can be submitted to multiple entities (MBS-8470)' => sub { my $mech = $test->mech; MusicBrainz::Server::Test->prepare_test_database($c, '+webservice'); - MusicBrainz::Server::Test->prepare_test_database($c, <<~'EOSQL'); + MusicBrainz::Server::Test->prepare_test_database($c, <<~'SQL'); SELECT setval('tag_id_seq', (SELECT MAX(id) FROM tag)); INSERT INTO editor (id, name, password, ha1) VALUES (1, 'new_editor', '{CLEARTEXT}password', 'e1dd8fee8ee728b0ddc8027d3a3db478') - EOSQL + SQL my $content = <<'EOXML'; <?xml version="1.0" encoding="UTF-8"?> @@ -246,11 +246,11 @@ test 'Tags are lowercased and trimmed by the server (MBS-8462)' => sub { my $mech = $test->mech; MusicBrainz::Server::Test->prepare_test_database($c, '+edit_recording'); - MusicBrainz::Server::Test->prepare_test_database($c, <<~'EOSQL'); + MusicBrainz::Server::Test->prepare_test_database($c, <<~'SQL'); SELECT setval('tag_id_seq', (SELECT MAX(id) FROM tag)); INSERT INTO editor (id, name, password, ha1) VALUES (1, 'new_editor', '{CLEARTEXT}password', 'e1dd8fee8ee728b0ddc8027d3a3db478') - EOSQL + SQL my $content = <<'EOXML'; <?xml version="1.0" encoding="UTF-8"?> diff --git a/t/lib/t/MusicBrainz/Server/Controller/WS/2/BrowseRelease.pm b/t/lib/t/MusicBrainz/Server/Controller/WS/2/BrowseRelease.pm index f2482504ac5..d85c3df8b40 100644 --- a/t/lib/t/MusicBrainz/Server/Controller/WS/2/BrowseRelease.pm +++ b/t/lib/t/MusicBrainz/Server/Controller/WS/2/BrowseRelease.pm @@ -18,10 +18,10 @@ my $mech = $test->mech; $mech->default_header('Accept' => 'application/xml'); MusicBrainz::Server::Test->prepare_test_database($c, '+webservice'); -MusicBrainz::Server::Test->prepare_test_database($c, <<~'EOSQL'); +MusicBrainz::Server::Test->prepare_test_database($c, <<~'SQL'); INSERT INTO release_tag (count, release, tag) VALUES (1, 123054, 114); - EOSQL + SQL ws_test 'browse releases via artist (paging)', '/release?artist=3088b672-fba9-4b4b-8ae0-dce13babfbb4&offset=2' => diff --git a/t/lib/t/MusicBrainz/Server/Controller/WS/2/JSON/Authenticated.pm b/t/lib/t/MusicBrainz/Server/Controller/WS/2/JSON/Authenticated.pm index 4c131a89b85..7fabd0c1123 100644 --- a/t/lib/t/MusicBrainz/Server/Controller/WS/2/JSON/Authenticated.pm +++ b/t/lib/t/MusicBrainz/Server/Controller/WS/2/JSON/Authenticated.pm @@ -16,13 +16,13 @@ test 'lookup rating for user' => sub { my $mech = $test->mech; MusicBrainz::Server::Test->prepare_test_database($c, '+webservice'); - MusicBrainz::Server::Test->prepare_test_database($c, <<~'EOSQL'); + MusicBrainz::Server::Test->prepare_test_database($c, <<~'SQL'); SELECT setval('tag_id_seq', (SELECT MAX(id) FROM tag)); INSERT INTO editor (id, name, password, ha1) VALUES (1, 'new_editor', '{CLEARTEXT}password', 'e1dd8fee8ee728b0ddc8027d3a3db478'); INSERT INTO artist_rating_raw (artist, editor, rating) VALUES (265420, 1, 80) - EOSQL + SQL ws_test_json 'ratings lookup for user rejected without authentication', '/rating?id=802673f0-9b88-4e8a-bb5c-dd01d68b086f&entity=artist' => @@ -47,7 +47,7 @@ test 'lookup tag for user' => sub { my $mech = $test->mech; MusicBrainz::Server::Test->prepare_test_database($c, '+webservice'); - MusicBrainz::Server::Test->prepare_test_database($c, <<~'EOSQL'); + MusicBrainz::Server::Test->prepare_test_database($c, <<~'SQL'); SELECT setval('tag_id_seq', (SELECT MAX(id) FROM tag)); INSERT INTO editor (id, name, password, ha1) VALUES (1, 'new_editor', '{CLEARTEXT}password', 'e1dd8fee8ee728b0ddc8027d3a3db478'); @@ -55,7 +55,7 @@ test 'lookup tag for user' => sub { VALUES (265420, 1, '2011-01-18 15:21:33.71184+00', 104); INSERT INTO artist_tag_raw (artist, editor, tag, is_upvote) VALUES (265420, 1, 104, 't') - EOSQL + SQL ws_test_json 'tag lookup for user rejected without authentication', '/tag?id=802673f0-9b88-4e8a-bb5c-dd01d68b086f&entity=artist' => diff --git a/t/lib/t/MusicBrainz/Server/Controller/WS/2/JSON/LookupDiscID.pm b/t/lib/t/MusicBrainz/Server/Controller/WS/2/JSON/LookupDiscID.pm index 80240d0b94f..7ee1fa8c3fe 100644 --- a/t/lib/t/MusicBrainz/Server/Controller/WS/2/JSON/LookupDiscID.pm +++ b/t/lib/t/MusicBrainz/Server/Controller/WS/2/JSON/LookupDiscID.pm @@ -106,13 +106,13 @@ test 'lookup via toc' => sub { my $test = shift; MusicBrainz::Server::Test->prepare_test_database($test->c, '+tracklist'); - MusicBrainz::Server::Test->prepare_test_database($test->c, <<~'EOSQL'); + MusicBrainz::Server::Test->prepare_test_database($test->c, <<~'SQL'); INSERT INTO medium_cdtoc (medium, cdtoc) VALUES (2, 2); INSERT INTO tag (id, name) VALUES (1, 'musical'), (2, 'not-used'); INSERT INTO genre (id, gid, name) VALUES (1, 'ff6d73e8-bf1a-431e-9911-88ae7ffcfdfb', 'musical'); INSERT INTO release_tag (tag, release, count) VALUES (1, 2, 2), (2, 2, 2); - EOSQL + SQL $test->c->model('DurationLookup')->update(2); $test->c->model('DurationLookup')->update(4); diff --git a/t/lib/t/MusicBrainz/Server/Controller/WS/2/JSON/LookupRelease.pm b/t/lib/t/MusicBrainz/Server/Controller/WS/2/JSON/LookupRelease.pm index 54db5145a8d..0d69699f3d7 100644 --- a/t/lib/t/MusicBrainz/Server/Controller/WS/2/JSON/LookupRelease.pm +++ b/t/lib/t/MusicBrainz/Server/Controller/WS/2/JSON/LookupRelease.pm @@ -203,7 +203,7 @@ test 'basic release with collections' => sub { my $c = shift->c; MusicBrainz::Server::Test->prepare_test_database($c, '+webservice'); - MusicBrainz::Server::Test->prepare_test_database($c, <<~'EOSQL'); + MusicBrainz::Server::Test->prepare_test_database($c, <<~'SQL'); INSERT INTO release_tag (count, release, tag) VALUES (1, 123054, 114); INSERT INTO editor (id, name, password, ha1, email, email_confirm_date) @@ -214,7 +214,7 @@ test 'basic release with collections' => sub { VALUES (14934, '5e8dd65f-7d52-4d6e-93f6-f84651e137ca', 15412, 'My Private Collection', FALSE, 1); INSERT INTO editor_collection_release (collection, release) VALUES (14933, 123054), (14934, 123054); - EOSQL + SQL my $common_release_json = { id => 'b3b7e934-445b-4c68-a097-730c6a6d47e6', diff --git a/t/lib/t/MusicBrainz/Server/Controller/WS/2/JSON/LookupWork.pm b/t/lib/t/MusicBrainz/Server/Controller/WS/2/JSON/LookupWork.pm index 1e348a89c46..87cd6a6523a 100644 --- a/t/lib/t/MusicBrainz/Server/Controller/WS/2/JSON/LookupWork.pm +++ b/t/lib/t/MusicBrainz/Server/Controller/WS/2/JSON/LookupWork.pm @@ -13,11 +13,11 @@ test 'basic work lookup' => sub { my $c = shift->c; MusicBrainz::Server::Test->prepare_test_database($c, '+webservice'); - MusicBrainz::Server::Test->prepare_test_database($c, <<~'EOSQL'); + MusicBrainz::Server::Test->prepare_test_database($c, <<~'SQL'); INSERT INTO iswc (work, iswc) VALUES ((SELECT id FROM work WHERE gid = '3c37b9fa-a6c1-37d2-9e90-657a116d337c'), 'T-000.000.002-0') - EOSQL + SQL ws_test_json 'basic work lookup', '/work/3c37b9fa-a6c1-37d2-9e90-657a116d337c' => @@ -60,11 +60,11 @@ test 'work lookup via iswc' => sub { my $c = shift->c; MusicBrainz::Server::Test->prepare_test_database($c, '+webservice'); - MusicBrainz::Server::Test->prepare_test_database($c, <<~'EOSQL'); + MusicBrainz::Server::Test->prepare_test_database($c, <<~'SQL'); INSERT INTO iswc (work, iswc) VALUES ((SELECT id FROM work WHERE gid = '3c37b9fa-a6c1-37d2-9e90-657a116d337c'), 'T-000.000.002-0') - EOSQL + SQL ws_test_json 'work lookup via iswc', '/iswc/T-000.000.002-0' => diff --git a/t/lib/t/MusicBrainz/Server/Controller/WS/2/LookupDiscID.pm b/t/lib/t/MusicBrainz/Server/Controller/WS/2/LookupDiscID.pm index fc7beab3cd3..2678a2de8da 100644 --- a/t/lib/t/MusicBrainz/Server/Controller/WS/2/LookupDiscID.pm +++ b/t/lib/t/MusicBrainz/Server/Controller/WS/2/LookupDiscID.pm @@ -18,13 +18,13 @@ my $mech = $test->mech; $mech->default_header('Accept' => 'application/xml'); MusicBrainz::Server::Test->prepare_test_database($c, '+tracklist'); -MusicBrainz::Server::Test->prepare_test_database($c, <<~'EOSQL'); +MusicBrainz::Server::Test->prepare_test_database($c, <<~'SQL'); INSERT INTO medium_cdtoc (medium, cdtoc) VALUES (2, 2); INSERT INTO tag (id, name) VALUES (1, 'musical'), (2, 'not-used'); INSERT INTO genre (id, gid, name) VALUES (1, 'ff6d73e8-bf1a-431e-9911-88ae7ffcfdfb', 'musical'); INSERT INTO release_tag (tag, release, count) VALUES (1, 2, 2), (2, 2, 2); - EOSQL + SQL ws_test 'direct disc id lookup', '/discid/IeldkVfIh1wep_M8CMuDvA0nQ7Q-' => diff --git a/t/lib/t/MusicBrainz/Server/Controller/WS/2/LookupInstrument.pm b/t/lib/t/MusicBrainz/Server/Controller/WS/2/LookupInstrument.pm index aca6ea66065..5c35a5d17a9 100644 --- a/t/lib/t/MusicBrainz/Server/Controller/WS/2/LookupInstrument.pm +++ b/t/lib/t/MusicBrainz/Server/Controller/WS/2/LookupInstrument.pm @@ -20,11 +20,11 @@ $mech->default_header('Accept' => 'application/xml'); MusicBrainz::Server::Test->prepare_test_database($c, '+webservice'); MusicBrainz::Server::Test->prepare_test_database($c, '+webservice_annotation'); -$c->sql->do(<<~'EOSQL'); +$c->sql->do(<<~'SQL'); UPDATE instrument_alias SET type = 1, locale = 'fr', primary_for_locale = true WHERE id = 1; - EOSQL + SQL $mech->get('/ws/2/instrument/3590521b-8c97-4f4b-b1bb-5f68d3663d8a?inc=coffee'); is($mech->status, 400); diff --git a/t/lib/t/MusicBrainz/Server/Controller/WS/2/LookupRelease.pm b/t/lib/t/MusicBrainz/Server/Controller/WS/2/LookupRelease.pm index 305a55369f8..f6b3ae649f5 100644 --- a/t/lib/t/MusicBrainz/Server/Controller/WS/2/LookupRelease.pm +++ b/t/lib/t/MusicBrainz/Server/Controller/WS/2/LookupRelease.pm @@ -17,7 +17,7 @@ my $c = $test->c; MusicBrainz::Server::Test->prepare_test_database($c, '+webservice'); MusicBrainz::Server::Test->prepare_test_database($c, '+webservice_annotation'); -MusicBrainz::Server::Test->prepare_test_database($c, <<~'EOSQL'); +MusicBrainz::Server::Test->prepare_test_database($c, <<~'SQL'); INSERT INTO release_tag (count, release, tag) VALUES (1, 123054, 114); INSERT INTO editor (id, name, password, ha1, email, email_confirm_date) VALUES (15412, 'editor', '{CLEARTEXT}mb', 'be88da857f697a78656b1307f89f90ab', 'foo@example.com', now()); @@ -27,7 +27,7 @@ MusicBrainz::Server::Test->prepare_test_database($c, <<~'EOSQL'); VALUES (14934, '5e8dd65f-7d52-4d6e-93f6-f84651e137ca', 15412, 'My Private Collection', FALSE, 1); INSERT INTO editor_collection_release (collection, release) VALUES (14933, 123054), (14934, 123054); - EOSQL + SQL ws_test 'basic release lookup', '/release/b3b7e934-445b-4c68-a097-730c6a6d47e6' => diff --git a/t/lib/t/MusicBrainz/Server/Controller/WS/2/LookupWork.pm b/t/lib/t/MusicBrainz/Server/Controller/WS/2/LookupWork.pm index a699788f88e..eb8b2468f64 100644 --- a/t/lib/t/MusicBrainz/Server/Controller/WS/2/LookupWork.pm +++ b/t/lib/t/MusicBrainz/Server/Controller/WS/2/LookupWork.pm @@ -18,11 +18,11 @@ my $c = $test->c; MusicBrainz::Server::Test->prepare_test_database($c, '+webservice'); MusicBrainz::Server::Test->prepare_test_database($c, '+webservice_annotation'); MusicBrainz::Server::Test->prepare_test_database($c, '+multi_language_work'); -MusicBrainz::Server::Test->prepare_test_database($c, <<~'EOSQL'); +MusicBrainz::Server::Test->prepare_test_database($c, <<~'SQL'); INSERT INTO iswc (work, iswc) VALUES ( (SELECT id FROM work WHERE gid = '3c37b9fa-a6c1-37d2-9e90-657a116d337c'), 'T-000.000.002-0'); INSERT INTO work_attribute VALUES (1, 1307406, 1, 33, NULL); - EOSQL + SQL ws_test 'basic work lookup', '/work/3c37b9fa-a6c1-37d2-9e90-657a116d337c' => diff --git a/t/lib/t/MusicBrainz/Server/Controller/WS/2/SubmitRecording.pm b/t/lib/t/MusicBrainz/Server/Controller/WS/2/SubmitRecording.pm index 0b65c0223bf..599de3f29fe 100644 --- a/t/lib/t/MusicBrainz/Server/Controller/WS/2/SubmitRecording.pm +++ b/t/lib/t/MusicBrainz/Server/Controller/WS/2/SubmitRecording.pm @@ -22,12 +22,12 @@ my $mech = $test->mech; $mech->default_header('Accept' => 'application/xml'); MusicBrainz::Server::Test->prepare_test_database($c, '+webservice'); -MusicBrainz::Server::Test->prepare_test_database($c, <<~'EOSQL'); +MusicBrainz::Server::Test->prepare_test_database($c, <<~'SQL'); INSERT INTO editor (id, name, password, ha1, email, email_confirm_date) VALUES (1, 'new_editor', '{CLEARTEXT}password', 'e1dd8fee8ee728b0ddc8027d3a3db478', 'foo@example.com', now()); INSERT INTO recording_gid_redirect (gid, new_id) VALUES ('78ad6e24-dc0a-4c20-8284-db2d44d28fb9', 4223060); - EOSQL + SQL # Check OPTIONS support my $req = HTTP::Request->new('OPTIONS', '/ws/2/recording?client=test-1.0'); diff --git a/t/lib/t/MusicBrainz/Server/Controller/WS/2/SubmitRelease.pm b/t/lib/t/MusicBrainz/Server/Controller/WS/2/SubmitRelease.pm index 5d6a27fff60..b5817fc4bc9 100644 --- a/t/lib/t/MusicBrainz/Server/Controller/WS/2/SubmitRelease.pm +++ b/t/lib/t/MusicBrainz/Server/Controller/WS/2/SubmitRelease.pm @@ -20,12 +20,12 @@ test all => sub { $mech->default_header('Accept' => 'application/xml'); MusicBrainz::Server::Test->prepare_test_database($c, '+webservice'); - MusicBrainz::Server::Test->prepare_test_database($c, <<~'EOSQL'); + MusicBrainz::Server::Test->prepare_test_database($c, <<~'SQL'); INSERT INTO editor (id, name, password, ha1, email, email_confirm_date) VALUES (1, 'new_editor', '{CLEARTEXT}password', 'e1dd8fee8ee728b0ddc8027d3a3db478', 'foo@example.com', now()); INSERT INTO release_gid_redirect (gid, new_id) VALUES ('78ad6e24-dc0a-4c20-8284-db2d44d28fb9', 49161); - EOSQL + SQL my $content = '<?xml version="1.0" encoding="UTF-8"?> <metadata xmlns="http://musicbrainz.org/ns/mmd-2.0#"> diff --git a/t/lib/t/MusicBrainz/Server/Controller/WS/js/CoverArtUpload.pm b/t/lib/t/MusicBrainz/Server/Controller/WS/js/CoverArtUpload.pm index 8e1ef8604d2..b6a0b1f39b7 100644 --- a/t/lib/t/MusicBrainz/Server/Controller/WS/js/CoverArtUpload.pm +++ b/t/lib/t/MusicBrainz/Server/Controller/WS/js/CoverArtUpload.pm @@ -20,13 +20,13 @@ test 'jpg post fields' => sub { # Insert a fake piece of cover art for the release so that we don't # have to perform a bucket ownership check in # /ws/js/cover-art-upload, which requires external HTTP requests. - $c->sql->do(<<~'EOSQL'); + $c->sql->do(<<~'SQL'); INSERT INTO edit (id, editor, type, status, expire_time) VALUES (1, 1, 314, 2, '2000-01-01'); INSERT INTO cover_art_archive.cover_art (id, release, edit, ordering, date_uploaded, mime_type) VALUES (1, 2, 1, 1, now(), 'image/jpeg'); - EOSQL + SQL $mech->get_ok('/login'); $mech->submit_form( with_fields => { username => 'new_editor', password => 'password' } ); diff --git a/t/lib/t/MusicBrainz/Server/Controller/WS/js/Work.pm b/t/lib/t/MusicBrainz/Server/Controller/WS/js/Work.pm index de5e950d3e3..a3ce0cc83e7 100644 --- a/t/lib/t/MusicBrainz/Server/Controller/WS/js/Work.pm +++ b/t/lib/t/MusicBrainz/Server/Controller/WS/js/Work.pm @@ -13,12 +13,12 @@ test all => sub { my $json = JSON->new; MusicBrainz::Server::Test->prepare_test_database($c, '+webservice'); - $c->sql->do(<<~'EOSQL'); + $c->sql->do(<<~'SQL'); INSERT INTO work_alias (work, name, sort_name, locale, primary_for_locale) VALUES (4223060, 'Hello! Let''s Meet Again (7ninmatsuri version)', 'Hello! Let''s Meet Again (7ninmatsuri version)', 'en', FALSE), (4223060, 'Hello! Let''s Meet Again (7ninmatsuri version)', 'Hello! Let''s Meet Again (7ninmatsuri version)', 'en_US', TRUE), (4223060, 'Saluton! Ni Renkontu Denove (7nin-matsuria versio)', 'Saluton! Ni Renkontu Denove (7nin-matsuria versio)', 'eo', TRUE); - EOSQL + SQL my $mech = MusicBrainz::WWW::Mechanize->new(catalyst_app => 'MusicBrainz::Server'); $mech->default_header('Accept' => 'application/json'); @@ -32,10 +32,10 @@ test all => sub { is($data->[0]->{id}, 4223060, 'Got the work expected'); is($data->[0]->{primaryAlias}, q(Hello! Let's Meet Again (7ninmatsuri version)), 'Got correct primary alias (en_US)'); - $c->sql->do(<<~'EOSQL'); + $c->sql->do(<<~'SQL'); INSERT INTO work_alias (work, name, sort_name, locale, primary_for_locale) VALUES (4223060, 'Hello! Let''s Meet Again (7nin Matsuri version)', 'Hello! Let''s Meet Again (7nin Matsuri version)', 'en', TRUE); - EOSQL + SQL $mech = MusicBrainz::WWW::Mechanize->new(catalyst_app => 'MusicBrainz::Server'); $mech->default_header('Accept' => 'application/json'); diff --git a/t/lib/t/MusicBrainz/Server/Controller/Work/Edit.pm b/t/lib/t/MusicBrainz/Server/Controller/Work/Edit.pm index 289bd86788d..2333aa4b58e 100644 --- a/t/lib/t/MusicBrainz/Server/Controller/Work/Edit.pm +++ b/t/lib/t/MusicBrainz/Server/Controller/Work/Edit.pm @@ -100,10 +100,10 @@ test 'Editing works with attributes' => sub { my $c = $test->c; MusicBrainz::Server::Test->prepare_test_database($c); - $c->sql->do(<<~'EOSQL'); + $c->sql->do(<<~'SQL'); -- We aren't interested in ISWC editing DELETE FROM iswc; - EOSQL + SQL $mech->get_ok('/login'); $mech->submit_form( with_fields => { username => 'new_editor', password => 'password' } ); @@ -146,10 +146,10 @@ test 'MBS-8636: Adding a relationship to a series which contains duplicate items MusicBrainz::Server::Test->prepare_test_database($c, '+mbs-8636'); - $c->sql->do(<<~'EOSQL'); + $c->sql->do(<<~'SQL'); INSERT INTO editor (id, name, password, ha1, email, email_confirm_date) VALUES (1, 'editor', '{CLEARTEXT}pass', '3f3edade87115ce351d63f42d92a1834', 'foo@example.com', now()); - EOSQL + SQL $mech->get_ok('/login'); $mech->submit_form(with_fields => { username => 'editor', password => 'pass' }); @@ -220,10 +220,10 @@ test 'Editing works with multiple languages' => sub { my $c = $test->c; MusicBrainz::Server::Test->prepare_test_database($c); - $c->sql->do(<<~'EOSQL'); + $c->sql->do(<<~'SQL'); -- We aren't interested in ISWC editing DELETE FROM iswc; - EOSQL + SQL $mech->get_ok('/login'); $mech->submit_form( with_fields => { username => 'new_editor', password => 'password' } ); diff --git a/t/lib/t/MusicBrainz/Server/Data/Alias.pm b/t/lib/t/MusicBrainz/Server/Data/Alias.pm index 1eba722894b..73a36399ae7 100644 --- a/t/lib/t/MusicBrainz/Server/Data/Alias.pm +++ b/t/lib/t/MusicBrainz/Server/Data/Alias.pm @@ -122,12 +122,12 @@ test 'Merging should not add aliases identical to new name' => sub { my $test = shift; my $c = $test->c; - $c->sql->do(<<~'EOSQL'); + $c->sql->do(<<~'SQL'); INSERT INTO artist (id, gid, name, sort_name, comment) VALUES (1, '945c079d-374e-4436-9448-da92dedef3cf', 'Name', 'Name', 'Artist 1'), (2, '73371ea0-7217-11de-8a39-0800200c9a66', 'Name', 'Name', 'Artist 2'), (3, '686cdcc0-7218-11de-8a39-0800200c9a66', 'Old name', 'Old name', ''); - EOSQL + SQL $c->model('Artist')->alias->merge(1, 2, 3); @@ -141,12 +141,12 @@ test 'Merging should not add aliases that already exist' => sub { my $test = shift; my $c = $test->c; - $c->sql->do(<<~'EOSQL'); + $c->sql->do(<<~'SQL'); INSERT INTO artist (id, gid, name, sort_name) VALUES (1, '945c079d-374e-4436-9448-da92dedef3cf', 'Name', 'Name'), (2, '73371ea0-7217-11de-8a39-0800200c9a66', 'Old name', 'Old name'); INSERT INTO artist_alias (artist, name, sort_name) VALUES (1, 'Old name', 'Old name'); - EOSQL + SQL $c->model('Artist')->alias->merge(1, 2); @@ -160,14 +160,14 @@ test 'Merging should preserve primary_for_locale' => sub { my $test = shift; my $c = $test->c; - $c->sql->do(<<~'EOSQL'); + $c->sql->do(<<~'SQL'); INSERT INTO artist (id, gid, name, sort_name) VALUES (1, '945c079d-374e-4436-9448-da92dedef3cf', 'Name', 'Name'), (2, '73371ea0-7217-11de-8a39-0800200c9a66', 'Old name', 'Old name'); INSERT INTO artist_alias (artist, name, sort_name, locale, primary_for_locale) VALUES (1, 'Old name', 'Old name', 'en_GB', FALSE), (2, 'Foo name', 'Foo name', 'en_GB', TRUE); - EOSQL + SQL $c->model('Artist')->alias->merge(1, 2); my $aliases = $c->model('Artist')->alias->find_by_entity_id(1); @@ -190,14 +190,14 @@ test 'Multiple aliases with a locale are preserved on merge' => sub { my $test = shift; my $c = $test->c; - $c->sql->do(<<~'EOSQL'); + $c->sql->do(<<~'SQL'); INSERT INTO artist (id, gid, name, sort_name) VALUES (1, '945c079d-374e-4436-9448-da92dedef3cf', 'Name', 'Name'), (2, '73371ea0-7217-11de-8a39-0800200c9a66', 'Old name', 'Old name'); INSERT INTO artist_alias (artist, name, sort_name, locale, primary_for_locale) VALUES (1, 'Extra name', 'Extra name', 'en_GB', FALSE), (2, 'Foo name', 'Foo name', 'en_GB', TRUE); - EOSQL + SQL $c->model('Artist')->alias->merge(1, 2); my $aliases = $c->model('Artist')->alias->find_by_entity_id(1); @@ -225,7 +225,7 @@ test 'Exists only checks a single entity' => sub { my $test = shift; my $c = $test->c; - $c->sql->do(<<~'EOSQL'); + $c->sql->do(<<~'SQL'); INSERT INTO artist (id, gid, name, sort_name, comment) VALUES (1, '945c079d-374e-4436-9448-da92dedef3cf', 'Name', 'Name', ''), (2, '73371ea0-7217-11de-8a39-0800200c9a66', 'Old name', 'Old name', 'Artist 2'), @@ -233,7 +233,7 @@ test 'Exists only checks a single entity' => sub { INSERT INTO artist_alias (artist, name, sort_name) VALUES (1, 'Old name', 'Old name'), (2, 'Foo name', 'Foo name'); - EOSQL + SQL my $check_alias = sub { $c->model('Artist')->alias->exists({ diff --git a/t/lib/t/MusicBrainz/Server/Data/Area.pm b/t/lib/t/MusicBrainz/Server/Data/Area.pm index 8613754e3f6..3db3368b02d 100644 --- a/t/lib/t/MusicBrainz/Server/Data/Area.pm +++ b/t/lib/t/MusicBrainz/Server/Data/Area.pm @@ -10,10 +10,10 @@ with 't::Edit'; with 't::Context'; my $AREA_GID = 'f03dd94f-a936-42eb-bb97-819102487899'; -my $INSERT_AREA = <<~"EOSQL"; +my $INSERT_AREA = <<~"SQL"; INSERT INTO area (id, gid, name) VALUES (1, '$AREA_GID', 'Area'); - EOSQL + SQL for my $test_data ( [ 'iso_3166_1', 'CO' ], @@ -27,10 +27,10 @@ for my $test_data ( my $test = shift; my $c = $test->c; - $c->sql->do(<<~"EOSQL"); + $c->sql->do(<<~"SQL"); $INSERT_AREA INSERT INTO $iso (area, code) VALUES (1, '$code'); - EOSQL + SQL my $areas = $c->model('Area')->$method($code, 'NA'); ok(exists $areas->{$code}, "Found an area for $code"); @@ -42,7 +42,7 @@ for my $test_data ( test 'Test load_containment' => sub { my $test = shift; - $test->c->sql->do(<<~'EOSQL'); + $test->c->sql->do(<<~'SQL'); INSERT INTO area (id, gid, name, type) VALUES (1, 'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa', 'descendant', 5), (2, 'bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbaaaa', 'parent city', 3), @@ -53,7 +53,7 @@ test 'Test load_containment' => sub { INSERT INTO link (id, link_type) VALUES (1, 356); INSERT INTO l_area_area (link, entity0, entity1) VALUES (1, 2, 1), (1, 3, 2), (1, 4, 3), (1, 5, 4); - EOSQL + SQL my $area = $test->c->model('Area')->get_by_id(1); is($area->name, 'descendant', 'correct descendant country is loaded'); diff --git a/t/lib/t/MusicBrainz/Server/Data/Artist.pm b/t/lib/t/MusicBrainz/Server/Data/Artist.pm index 3bf5230dce1..7cf531dd838 100644 --- a/t/lib/t/MusicBrainz/Server/Data/Artist.pm +++ b/t/lib/t/MusicBrainz/Server/Data/Artist.pm @@ -21,7 +21,7 @@ with 't::Context'; test 'Test find_by_work' => sub { my $test = shift; - $test->c->sql->do(<<~'EOSQL'); + $test->c->sql->do(<<~'SQL'); INSERT INTO work (id, gid, name) VALUES (1, '745c079d-374e-4436-9448-da92dedef3ce', 'Dancing Queen'); @@ -41,7 +41,7 @@ test 'Test find_by_work' => sub { INSERT INTO l_artist_work (id, entity0, entity1, link) VALUES (1, 2, 1, 1); INSERT INTO l_recording_work (id, entity0, entity1, link) VALUES (1, 1, 1, 1); - EOSQL + SQL my ($artists, $hits) = $test->c->model('Artist')->find_by_work(1, 100, 0); is($hits, 2); @@ -342,7 +342,7 @@ test 'Deny delete "Deleted Artist" trigger' => sub { test 'Merging attributes' => sub { my $c = shift->c; - $c->sql->do(<<~'EOSQL'); + $c->sql->do(<<~'SQL'); INSERT INTO artist (id, gid, name, sort_name) VALUES (3, '745c079d-374e-4436-9448-da92dedef3ce', 'artist name', 'artist name'); @@ -361,7 +361,7 @@ test 'Merging attributes' => sub { 5, '245c079d-374e-4436-9448-da92dedef3ce', 'artist name', 'artist name', 2000, 06, 'Artist 5' ); - EOSQL + SQL $c->model('Artist')->merge(3, [4, 5]); my $artist = $c->model('Artist')->get_by_id(3); @@ -376,11 +376,11 @@ test 'Merging attributes' => sub { test 'Merging "ended" flag' => sub { my $c = shift->c; - $c->sql->do(<<~'EOSQL'); + $c->sql->do(<<~'SQL'); INSERT INTO artist (id, gid, name, sort_name, ended) VALUES (3, 'ac653796-bca1-4d2e-a92a-4ce5ef2efb0b', 'The Artist', 'Artist, The', FALSE), (4, '0db63477-bc98-4aac-a76a-28d78971a07c', 'An Artist', 'Artist, An', TRUE); - EOSQL + SQL $c->model('Artist')->merge(3, [4]); my $artist = $c->model('Artist')->get_by_id(3); @@ -391,7 +391,7 @@ test 'Merging attributes for VA' => sub { my $c = shift->c; MusicBrainz::Server::Test->prepare_test_database($c, '+special-purpose'); MusicBrainz::Server::Test->prepare_test_database($c, '+area'); - $c->sql->do(<<~'EOSQL'); + $c->sql->do(<<~'SQL'); INSERT INTO artist (id, gid, name, sort_name, gender) VALUES (4, '745c079d-374e-4436-9448-da92dedef3ce', 'artist name', 'artist name', 3); @@ -410,7 +410,7 @@ test 'Merging attributes for VA' => sub { 6, '245c079d-374e-4436-9448-da92dedef3ce', 'artist name', 'artist name', 222, 2, 'Artist 5' ); - EOSQL + SQL $c->model('Artist')->merge(1, [4, 5, 6]); my $artist = $c->model('Artist')->get_by_id(1); @@ -428,11 +428,11 @@ test 'Merging attributes for VA' => sub { test 'Cannot edit an artist into something that would violate uniqueness' => sub { my $c = shift->c; - $c->sql->do(<<~'EOSQL'); + $c->sql->do(<<~'SQL'); INSERT INTO artist (id, gid, name, sort_name, comment) VALUES (3, '745c079d-374e-4436-9448-da92dedef3ce', 'A', 'A', ''), (4, '7848d7ce-d650-40c4-b98f-62fc037a678b', 'B', 'A', 'Comment'); - EOSQL + SQL my $conflicts_exception_ok = sub { my ($e, $target) = @_; @@ -460,10 +460,10 @@ test q(Deleting an artist that's in a collection) => sub { MusicBrainz::Server::Test->prepare_test_database($c, '+data_artist'); - $c->sql->do(<<~'EOSQL'); + $c->sql->do(<<~'SQL'); INSERT INTO editor (id, name, password, ha1) VALUES (5, 'me', '{CLEARTEXT}mb', 'a152e69b4cf029912ac2dd9742d8a9fc'); - EOSQL + SQL my $artist = $c->model('Artist')->insert({ name => 'Test123', sort_name => 'Test123' }); @@ -487,10 +487,10 @@ test q(Merging an artist that's in a collection) => sub { MusicBrainz::Server::Test->prepare_test_database($c, '+data_artist'); - $c->sql->do(<<~'EOSQL'); + $c->sql->do(<<~'SQL'); INSERT INTO editor (id, name, password, ha1) VALUES (5, 'me', '{CLEARTEXT}mb', 'a152e69b4cf029912ac2dd9742d8a9fc'); - EOSQL + SQL my $artist1 = $c->model('Artist')->insert({ name => 'Test123', sort_name => 'Test123' }); my $artist2 = $c->model('Artist')->insert({ name => 'Test456', sort_name => 'Test456' }); diff --git a/t/lib/t/MusicBrainz/Server/Data/ArtistCredit.pm b/t/lib/t/MusicBrainz/Server/Data/ArtistCredit.pm index 76b4f8d8056..e9f46527626 100644 --- a/t/lib/t/MusicBrainz/Server/Data/ArtistCredit.pm +++ b/t/lib/t/MusicBrainz/Server/Data/ArtistCredit.pm @@ -17,11 +17,11 @@ test 'merge_artists with renaming works if theres nothing to rename' => sub { my $test = shift; my $c = $test->c; - $c->sql->do(<<~'EOSQL'); + $c->sql->do(<<~'SQL'); INSERT INTO artist (id, gid, name, sort_name) VALUES (1, '945c079d-374e-4436-9448-da92dedef3cf', 'Queen', 'Queen'), (2, '5441c29d-3602-4898-b1a1-b77fa23b8e50', 'David Bowie', 'David Bowie'); - EOSQL + SQL ok !exception { $c->model('ArtistCredit')->merge_artists(1, [2], rename => 1) @@ -57,7 +57,7 @@ test 'Can have artist credits with no join phrase' => sub { test 'Merging should combine ACs which are string-identical before merge (MBS-7482)' => sub { my $test = shift; my $c = $test->c; - $c->sql->do(<<~'EOSQL'); + $c->sql->do(<<~'SQL'); INSERT INTO artist (id, gid, name, sort_name) VALUES (1, '945c079d-374e-4436-9448-da92dedef3cf', 'Queen', 'Queen'), (2, '5441c29d-3602-4898-b1a1-b77fa23b8e50', 'David Bowie', 'David Bowie'), @@ -72,7 +72,7 @@ test 'Merging should combine ACs which are string-identical before merge (MBS-74 (1, 1, 2, 'David Bowie', ''), (2, 0, 1, 'Queen', ' & '), (2, 1, 3, 'David Bowie', ''); - EOSQL + SQL is($c->sql->select_single_value('SELECT count(*) FROM artist_credit'), 2, 'Two artist credits before merge'); $c->model('ArtistCredit')->merge_artists(2, [ 3 ]); diff --git a/t/lib/t/MusicBrainz/Server/Data/Artwork.pm b/t/lib/t/MusicBrainz/Server/Data/Artwork.pm index 478490e3a7d..327b0702b49 100644 --- a/t/lib/t/MusicBrainz/Server/Data/Artwork.pm +++ b/t/lib/t/MusicBrainz/Server/Data/Artwork.pm @@ -8,7 +8,7 @@ test 'Release group artwork is ordered by release date' => sub { my $test = shift; my $c = $test->c; - $c->sql->do(<<~'EOSQL'); + $c->sql->do(<<~'SQL'); INSERT INTO artist (id, gid, name, sort_name) VALUES (1, 'a9d99e40-72d7-11de-8a39-0800200c9a66', 'Name', 'Name'); @@ -30,7 +30,7 @@ test 'Release group artwork is ordered by release date' => sub { INSERT INTO cover_art_archive.cover_art (id, release, edit, ordering, mime_type) VALUES (9876543210, 1, 1, 1, 'image/png'), (2, 2, 2, 1, 'image/png'); INSERT INTO cover_art_archive.cover_art_type (id, type_id) VALUES (9876543210, 1), (2, 1); - EOSQL + SQL my $release_group = $c->model('ReleaseGroup')->get_by_id(1); $c->model('Artwork')->load_for_release_groups($release_group); diff --git a/t/lib/t/MusicBrainz/Server/Data/CDTOC.pm b/t/lib/t/MusicBrainz/Server/Data/CDTOC.pm index 1f19366c948..b635dd006ae 100644 --- a/t/lib/t/MusicBrainz/Server/Data/CDTOC.pm +++ b/t/lib/t/MusicBrainz/Server/Data/CDTOC.pm @@ -16,13 +16,13 @@ test 'Adding a CDTOC to a medium removes CD stubs' => sub { my $test = shift; MusicBrainz::Server::Test->prepare_test_database($test->c, '+cdtoc'); MusicBrainz::Server::Test->prepare_raw_test_database($test->c, '+cdstub_raw'); - MusicBrainz::Server::Test->prepare_test_database($test->c, <<~'EOSQL'); + MusicBrainz::Server::Test->prepare_test_database($test->c, <<~'SQL'); INSERT INTO cdtoc (id, discid, freedb_id, track_count, leadout_offset, track_offset) VALUES (3, 'YfSgiOEayqN77Irs.VNV.UNJ0Zs-', '5908ea07', 7, 171327, ARRAY[150,22179,49905,69318,96240,121186,143398]); - EOSQL + SQL my $discid = 'YfSgiOEayqN77Irs.VNV.UNJ0Zs-'; my $cdstub = $test->c->model('CDStub')->get_by_discid($discid); diff --git a/t/lib/t/MusicBrainz/Server/Data/CoreEntityCache.pm b/t/lib/t/MusicBrainz/Server/Data/CoreEntityCache.pm index 0943410a89a..d7dd988f576 100644 --- a/t/lib/t/MusicBrainz/Server/Data/CoreEntityCache.pm +++ b/t/lib/t/MusicBrainz/Server/Data/CoreEntityCache.pm @@ -137,10 +137,10 @@ test 'Cache is transactional (MBS-7241)' => sub { my $_delete_from_cache = MusicBrainz::Server::Data::Artist->can('_delete_from_cache'); $c1->sql->auto_commit(1); - $c1->sql->do(<<~'EOSQL'); + $c1->sql->do(<<~'SQL'); INSERT INTO artist (id, gid, name, sort_name) VALUES (3, '31456bd3-0e1a-4c47-a5cc-e147a42965f2', 'Test', 'Test'); - EOSQL + SQL my $artist_gid = '31456bd3-0e1a-4c47-a5cc-e147a42965f2'; @@ -187,10 +187,10 @@ test 'Cache is transactional (MBS-7241)' => sub { 'database deletion commits, and after cache deletion'); $c1->sql->auto_commit(1); - $c1->sql->do(<<~'EOSQL'); + $c1->sql->do(<<~'SQL'); DELETE FROM artist WHERE id = 3; DELETE FROM deleted_entity WHERE gid = '31456bd3-0e1a-4c47-a5cc-e147a42965f2'; - EOSQL + SQL *MusicBrainz::Server::Data::Artist::_delete_from_cache = $_delete_from_cache; $c1->connector->disconnect; diff --git a/t/lib/t/MusicBrainz/Server/Data/CoverArt.pm b/t/lib/t/MusicBrainz/Server/Data/CoverArt.pm index c1cc516c8f1..4bbfe811df5 100644 --- a/t/lib/t/MusicBrainz/Server/Data/CoverArt.pm +++ b/t/lib/t/MusicBrainz/Server/Data/CoverArt.pm @@ -83,13 +83,13 @@ test 'Can update release_meta for ASINs with no artwork' => sub { my $c = $test->c; MusicBrainz::Server::Test->prepare_test_database($test->c, '+release'); - $c->sql->do(<<~'EOSQL'); + $c->sql->do(<<~'SQL'); INSERT INTO url (id, gid, url) VALUES (1, 'fbf96576-1c9c-4676-bb7d-7b9d3173edb8', 'http://www.amazon.co.uk/gp/product/B000057QPT'); INSERT INTO link (id, link_type) VALUES (1, 77); INSERT INTO l_release_url (entity0, entity1, link) VALUES (1, 1, 1); - EOSQL + SQL my $release = $c->model('Release')->get_by_id(1); $c->model('Relationship')->load_subset([ 'url' ], $release); diff --git a/t/lib/t/MusicBrainz/Server/Data/DurationLookup.pm b/t/lib/t/MusicBrainz/Server/Data/DurationLookup.pm index 200182d238d..e9db098aa52 100644 --- a/t/lib/t/MusicBrainz/Server/Data/DurationLookup.pm +++ b/t/lib/t/MusicBrainz/Server/Data/DurationLookup.pm @@ -16,11 +16,11 @@ test 'tracklist used to fit lookup criteria but no longer does' => sub { my $c = $test->c; MusicBrainz::Server::Test->prepare_test_database($test->c, '+tracklist'); - $c->sql->do(<<~'EOSQL'); + $c->sql->do(<<~'SQL'); INSERT INTO editor (id, name, password, ha1, email, email_confirm_date) VALUES (1, 'annotation_editor', '{CLEARTEXT}password', '3a115bc4f05ea9856bd4611b75c80bca', 'editor\@example.org', '2005-02-18') - EOSQL + SQL my $artist_credit = { names => [{ artist => { id => 1 }, name => 'Artist', join_phrase => '' }] diff --git a/t/lib/t/MusicBrainz/Server/Data/Edit.pm b/t/lib/t/MusicBrainz/Server/Data/Edit.pm index 36d05c9492b..b4f607f42ac 100644 --- a/t/lib/t/MusicBrainz/Server/Data/Edit.pm +++ b/t/lib/t/MusicBrainz/Server/Data/Edit.pm @@ -36,9 +36,9 @@ my $edit_data; # make file-level, so it can be accessed by subtests test 'Merge entity edit history' => sub { my $test = shift; MusicBrainz::Server::Test->prepare_raw_test_database($test->c, '+edit'); - MusicBrainz::Server::Test->prepare_raw_test_database($test->c, <<~'EOSQL'); + MusicBrainz::Server::Test->prepare_raw_test_database($test->c, <<~'SQL'); INSERT INTO edit_artist (edit, artist) VALUES (4, 3); - EOSQL + SQL { my ($edits, $hits) = $test->c->model('Edit')->find({ artist => 2 }, 10, 0); @@ -332,11 +332,11 @@ test 'Open edits expire in 7 days (MBS-8681)' => sub { is($edit->edit_conditions->{duration}, 7); - my ($expire_time) = @{ $c->sql->select_list_of_hashes(<<~'EOSQL', $edit->id) }; + my ($expire_time) = @{ $c->sql->select_list_of_hashes(<<~'SQL', $edit->id) }; SELECT expire_time AS got, (open_time + interval '@ 7 days') AS expected FROM edit WHERE id = ? - EOSQL + SQL is($expire_time->{got}, $expire_time->{expected}); }; diff --git a/t/lib/t/MusicBrainz/Server/Data/Editor.pm b/t/lib/t/MusicBrainz/Server/Data/Editor.pm index 65d5d6b85db..fb57a649462 100644 --- a/t/lib/t/MusicBrainz/Server/Data/Editor.pm +++ b/t/lib/t/MusicBrainz/Server/Data/Editor.pm @@ -105,7 +105,7 @@ is_deeply($editor, $editor2); $editor2 = $editor_data->get_by_name('nEw_EdItOr'); is_deeply($editor, $editor2, 'fetching by name is case insensitive'); -$test->c->sql->do(<<~"EOSQL", $editor->id); +$test->c->sql->do(<<~"SQL", $editor->id); INSERT INTO edit (id, editor, type, status, expire_time, autoedit) VALUES (1, \$1, 1, $STATUS_APPLIED, now(), 0), (2, \$1, 1, $STATUS_APPLIED, now(), 1), @@ -113,7 +113,7 @@ $test->c->sql->do(<<~"EOSQL", $editor->id); (4, \$1, 1, $STATUS_FAILEDDEP, now(), 0); INSERT INTO edit_data (edit, data) SELECT x, '{}' FROM generate_series(1, 4) x; - EOSQL + SQL $editor = $editor_data->get_by_id($editor->id); $edit_counts = $editor_data->various_edit_counts($editor->id); @@ -200,7 +200,7 @@ test 'Deleting editors without data fully deletes them' => sub { my $c = $test->c; my $model = $c->model('Editor'); - $c->sql->do(<<~'EOSQL'); + $c->sql->do(<<~'SQL'); INSERT INTO area (id, gid, name, type) VALUES (221, '8a754a16-0027-3a29-b6d7-2b40ea0481ed', 'United Kingdom', 1); INSERT INTO iso_3166_1 (area, code) VALUES (221, 'GB'); @@ -214,7 +214,7 @@ test 'Deleting editors without data fully deletes them' => sub { now(), 1, now(), 221, 1, '026299da47965340ef66ca485a57975d'); INSERT INTO editor_language (editor, language, fluency) VALUES (1, 120, 'native'); - EOSQL + SQL $model->delete(1); is($model->get_by_id(1), undef, 'Editor without references in DB is deleted fully.'); }; @@ -224,7 +224,7 @@ test 'Deleting editors removes most information' => sub { my $c = $test->c; my $model = $c->model('Editor'); - $c->sql->do(<<~"EOSQL"); + $c->sql->do(<<~"SQL"); INSERT INTO area (id, gid, name, type) VALUES (221, '8a754a16-0027-3a29-b6d7-2b40ea0481ed', 'United Kingdom', 1); INSERT INTO iso_3166_1 (area, code) VALUES (221, 'GB'); @@ -240,7 +240,7 @@ test 'Deleting editors removes most information' => sub { INSERT INTO tag (id, name, ref_count) VALUES (1, 'foo', 1); INSERT INTO area_tag (area, count, tag) VALUES (221, 1, 1); INSERT INTO area_tag_raw (area, editor, tag, is_upvote) VALUES (221, 1, 1, TRUE); - EOSQL + SQL # Test deleting editors $model->delete(1); @@ -379,13 +379,13 @@ test 'Deleting an editor unsubscribes anyone who was subscribed to them' => sub my $test = shift; my $c = $test->c; - $c->sql->do(<<~'EOSQL'); + $c->sql->do(<<~'SQL'); INSERT INTO editor (id, name, password, ha1) VALUES (1, 'Subject', '{CLEARTEXT}', '46182940755cef2bdcc0a03b6c1a3580'), (2, 'Subscriber', '{CLEARTEXT}', '37d4b8c8bd88e53c69068830c9e34efc'); INSERT INTO editor_subscribe_editor (editor, subscribed_editor, last_edit_sent) VALUES (2, 1, 1); - EOSQL + SQL $c->model('Editor')->delete(1); is(scalar($c->model('Editor')->subscription->get_subscriptions(2)), 0); @@ -424,7 +424,7 @@ test 'Open edit and last-24-hour counts' => sub { test 'subscription_summary' => sub { my $test = shift; - $test->c->sql->do(<<~'EOSQL'); + $test->c->sql->do(<<~'SQL'); INSERT INTO artist (id, gid, name, sort_name) VALUES (1, 'dd448d65-d7c5-4eef-8e13-12e1bfdacdc6', 'artist', 'artist'); INSERT INTO label (id, gid, name) @@ -453,7 +453,7 @@ test 'subscription_summary' => sub { VALUES (1, 1, 1, 1); INSERT INTO editor_subscribe_series (id, editor, series, last_edit_sent) VALUES (1, 1, 1, 1); - EOSQL + SQL is_deeply($test->c->model('Editor')->subscription_summary(1), { artist => 1, @@ -474,14 +474,14 @@ test 'subscription_summary' => sub { test 'Searching editor by email (for admin only)' => sub { my $test = shift; - $test->c->sql->do(<<~'EOSQL'); + $test->c->sql->do(<<~'SQL'); INSERT INTO editor (id, name, password, ha1, email, member_since) VALUES (1, 'z', '{CLEARTEXT}password', '12345678901234567890123456789012', 'abc@f.g.h', '2021-05-31 16:31:36.901272+00'), (2, 'y', '{CLEARTEXT}password', '12345678901234567890123456789012', 'a.b.c+d.e@f.g.h', '2021-05-31 15:32:05.674592+00'), (3, 'x', '{CLEARTEXT}password', '12345678901234567890123456789012', 'a.b.c+d.e@f-g.h', '2021-05-31 14:32:15.079918+00'), -- Reminder: Editor #4 is ModBot (5, 'w', '{CLEARTEXT}password', '12345678901234567890123456789012', 'a.b.c+d@e.f.g.h', '2021-05-31 13:32:28.205096+00'); - EOSQL + SQL my $editor_data = MusicBrainz::Server::Data::Editor->new(c => $test->c); diff --git a/t/lib/t/MusicBrainz/Server/Data/ISRC.pm b/t/lib/t/MusicBrainz/Server/Data/ISRC.pm index 86f6ec38178..114b3d9e020 100644 --- a/t/lib/t/MusicBrainz/Server/Data/ISRC.pm +++ b/t/lib/t/MusicBrainz/Server/Data/ISRC.pm @@ -16,10 +16,10 @@ test 'Can merge with multiple recordings and the same ISRC' => sub { MusicBrainz::Server::Test->prepare_test_database($c, '+isrc'); - MusicBrainz::Server::Test->prepare_test_database($c, <<~'EOSQL'); + MusicBrainz::Server::Test->prepare_test_database($c, <<~'SQL'); INSERT INTO isrc (id, recording, isrc) VALUES (4, 3, 'DEE250800230'); - EOSQL + SQL $c->model('ISRC')->merge_recordings(1, 2, 3); diff --git a/t/lib/t/MusicBrainz/Server/Data/Label.pm b/t/lib/t/MusicBrainz/Server/Data/Label.pm index ea8c932d63a..ae9ea56940e 100644 --- a/t/lib/t/MusicBrainz/Server/Data/Label.pm +++ b/t/lib/t/MusicBrainz/Server/Data/Label.pm @@ -128,11 +128,11 @@ test 'Deny delete "Deleted Label" trigger' => sub { test 'Cannot edit an label into something that would violate uniqueness' => sub { my $c = shift->c; - $c->sql->do(<<~'EOSQL'); + $c->sql->do(<<~'SQL'); INSERT INTO label (id, gid, name, comment) VALUES (3, '745c079d-374e-4436-9448-da92dedef3ce', 'A', ''), (4, '7848d7ce-d650-40c4-b98f-62fc037a678b', 'B', 'Comment'); - EOSQL + SQL my $conflicts_exception_ok = sub { my ($e, $target) = @_; diff --git a/t/lib/t/MusicBrainz/Server/Data/LinkAttributeType.pm b/t/lib/t/MusicBrainz/Server/Data/LinkAttributeType.pm index 1e74945d2d2..f21da82c397 100644 --- a/t/lib/t/MusicBrainz/Server/Data/LinkAttributeType.pm +++ b/t/lib/t/MusicBrainz/Server/Data/LinkAttributeType.pm @@ -70,12 +70,12 @@ test 'Updating a link attribute invalidates cache entries for links' => sub { my $test = shift; my $c = $test->cache_aware_c; - $c->sql->do(<<~'EOSQL'); + $c->sql->do(<<~'SQL'); INSERT INTO link (id, link_type, attribute_count) VALUES (1, 148, 1); INSERT INTO link_attribute (link, attribute_type) VALUES (1, 1); - EOSQL + SQL # Ensure cache is clear before calling get_by_id $c->cache->delete('link:1'); diff --git a/t/lib/t/MusicBrainz/Server/Data/LinkType.pm b/t/lib/t/MusicBrainz/Server/Data/LinkType.pm index 7b7fbdfada9..3af8967d8f1 100644 --- a/t/lib/t/MusicBrainz/Server/Data/LinkType.pm +++ b/t/lib/t/MusicBrainz/Server/Data/LinkType.pm @@ -92,9 +92,9 @@ test 'Can load relationship documentation' => sub { my $c = $test->c; my $expected_documentation = 'Documentation goes here'; - $test->c->sql->do(<<~'EOSQL', $expected_documentation); + $test->c->sql->do(<<~'SQL', $expected_documentation); INSERT INTO documentation.link_type_documentation (id, documentation) VALUES (102, ?); - EOSQL + SQL my $link_types = $c->model('LinkType')->get_by_ids(102, 103); my @all_link_types = values %$link_types; diff --git a/t/lib/t/MusicBrainz/Server/Data/Place.pm b/t/lib/t/MusicBrainz/Server/Data/Place.pm index 939080506ad..25d8c8c7aea 100644 --- a/t/lib/t/MusicBrainz/Server/Data/Place.pm +++ b/t/lib/t/MusicBrainz/Server/Data/Place.pm @@ -234,10 +234,10 @@ test q(Deleting a place that's in a collection) => sub { MusicBrainz::Server::Test->prepare_test_database($c, '+data_place'); - $c->sql->do(<<~'EOSQL'); + $c->sql->do(<<~'SQL'); INSERT INTO editor (id, name, password, ha1) VALUES (5, 'me', '{CLEARTEXT}mb', 'a152e69b4cf029912ac2dd9742d8a9fc'); - EOSQL + SQL my $place = $c->model('Place')->insert({ name => 'Test123' }); @@ -261,10 +261,10 @@ test q(Merging a place that's in a collection) => sub { MusicBrainz::Server::Test->prepare_test_database($c, '+data_place'); - $c->sql->do(<<~'EOSQL'); + $c->sql->do(<<~'SQL'); INSERT INTO editor (id, name, password, ha1) VALUES (5, 'me', '{CLEARTEXT}mb', 'a152e69b4cf029912ac2dd9742d8a9fc'); - EOSQL + SQL my $place1 = $c->model('Place')->insert({ name => 'Test123' }); my $place2 = $c->model('Place')->insert({ name => 'Test456' }); diff --git a/t/lib/t/MusicBrainz/Server/Data/Rating.pm b/t/lib/t/MusicBrainz/Server/Data/Rating.pm index e7ea68c1730..b6617c29925 100644 --- a/t/lib/t/MusicBrainz/Server/Data/Rating.pm +++ b/t/lib/t/MusicBrainz/Server/Data/Rating.pm @@ -15,7 +15,7 @@ with 't::Context'; test all => sub { my $test = shift; -MusicBrainz::Server::Test->prepare_test_database($test->c, <<~'EOSQL'); +MusicBrainz::Server::Test->prepare_test_database($test->c, <<~'SQL'); SET client_min_messages TO 'warning'; TRUNCATE artist CASCADE; @@ -36,7 +36,7 @@ MusicBrainz::Server::Test->prepare_test_database($test->c, <<~'EOSQL'); INSERT INTO artist_rating_raw (artist, editor, rating) VALUES (1, 11, 50), (2, 12, 50), (1, 13, 40), (1, 14, 10); - EOSQL + SQL my $rating_data = MusicBrainz::Server::Data::Rating->new( c => $test->c, type => 'artist', parent => $test->c->model('Artist') ); @@ -103,11 +103,11 @@ $test->c->sql->commit; @ratings = $rating_data->find_by_entity_id(1); is( scalar(@ratings), 0 ); -MusicBrainz::Server::Test->prepare_raw_test_database($test->c, <<~'EOSQL'); +MusicBrainz::Server::Test->prepare_raw_test_database($test->c, <<~'SQL'); TRUNCATE artist_rating_raw CASCADE; INSERT INTO artist_rating_raw (artist, editor, rating) VALUES (1, 11, 50), (2, 11, 60), (2, 12, 70), (1, 13, 40), (1, 14, 10); - EOSQL + SQL $test->c->sql->begin; $rating_data->_update_aggregate_rating(1); @@ -142,7 +142,7 @@ test 'Test find_editor_ratings' => sub { my $test = shift; my $c = $test->c; - MusicBrainz::Server::Test->prepare_test_database($test->c, <<~'EOSQL'); + MusicBrainz::Server::Test->prepare_test_database($test->c, <<~'SQL'); INSERT INTO artist (id, gid, name, sort_name, comment) VALUES (1, 'c09150d1-1e1b-46ad-9873-cc76d0c44499', 'Test', 'Test', 'Test 1'), (2, 'd09150d1-1e1b-46ad-9873-cc76d0c44499', 'Test', 'Test', 'Test 2'); @@ -156,7 +156,7 @@ test 'Test find_editor_ratings' => sub { INSERT INTO artist_rating_raw (artist, editor, rating) VALUES (1, 11, 50), (2, 11, 60), (1, 12, 40); - EOSQL + SQL my @tests = ( { editor_id => 11, limit => 1, offset => 0, expected_hits => 2, expected_ids => [ 2 ] }, diff --git a/t/lib/t/MusicBrainz/Server/Data/Recording.pm b/t/lib/t/MusicBrainz/Server/Data/Recording.pm index dd50faaa507..ffa62dc47cc 100644 --- a/t/lib/t/MusicBrainz/Server/Data/Recording.pm +++ b/t/lib/t/MusicBrainz/Server/Data/Recording.pm @@ -135,10 +135,10 @@ test q(Deleting a recording that's in a collection) => sub { MusicBrainz::Server::Test->prepare_test_database($c, '+tracklist'); MusicBrainz::Server::Test->prepare_test_database($c, '+recording'); - $c->sql->do(<<~'EOSQL'); + $c->sql->do(<<~'SQL'); INSERT INTO editor (id, name, password, ha1) VALUES (5, 'me', '{CLEARTEXT}mb', 'a152e69b4cf029912ac2dd9742d8a9fc'); - EOSQL + SQL my $recording = $c->model('Recording')->insert({ name => 'Test123', artist_credit => 1}); @@ -163,10 +163,10 @@ test q(Merging a recording that's in a collection) => sub { MusicBrainz::Server::Test->prepare_test_database($c, '+tracklist'); MusicBrainz::Server::Test->prepare_test_database($c, '+recording'); - $c->sql->do(<<~'EOSQL'); + $c->sql->do(<<~'SQL'); INSERT INTO editor (id, name, password, ha1) VALUES (5, 'me', '{CLEARTEXT}mb', 'a152e69b4cf029912ac2dd9742d8a9fc'); - EOSQL + SQL my $recording1 = $c->model('Recording')->insert({ name => 'Test123', artist_credit => 1 }); my $recording2 = $c->model('Recording')->insert({ name => 'Test456', artist_credit => 1 }); diff --git a/t/lib/t/MusicBrainz/Server/Data/Relationship.pm b/t/lib/t/MusicBrainz/Server/Data/Relationship.pm index 31e3c15d48c..ba260c690b5 100644 --- a/t/lib/t/MusicBrainz/Server/Data/Relationship.pm +++ b/t/lib/t/MusicBrainz/Server/Data/Relationship.pm @@ -21,10 +21,10 @@ test 'Relationships between merged entities' => sub { my $c = $test->c; MusicBrainz::Server::Test->prepare_test_database($test->c, '+relationship_merging'); - MusicBrainz::Server::Test->prepare_test_database($c, <<~'EOSQL'); + MusicBrainz::Server::Test->prepare_test_database($c, <<~'SQL'); INSERT INTO l_label_label (id, link, entity0, entity1) VALUES (1, 1, 2, 3), (2, 1, 1, 3); - EOSQL + SQL $c->model('Relationship')->merge_entities('label', 1, [2, 3]); @@ -38,10 +38,10 @@ test 'Merge matching dated/undated rels on entity merge' => sub { my $c = $test->c; MusicBrainz::Server::Test->prepare_test_database($test->c, '+relationship_merging'); - MusicBrainz::Server::Test->prepare_test_database($c, <<~'EOSQL'); + MusicBrainz::Server::Test->prepare_test_database($c, <<~'SQL'); INSERT INTO l_label_label (id, link, entity0, entity1) VALUES (1, 1, 2, 3), (2, 2, 1, 3); - EOSQL + SQL $c->model('Relationship')->merge_entities('label', 1, [2]); @@ -55,12 +55,12 @@ test 'Merge matching dated/undated rels on entity merge (3 entities)' => sub { my $c = $test->c; MusicBrainz::Server::Test->prepare_test_database($test->c, '+relationship_merging'); - MusicBrainz::Server::Test->prepare_test_database($c, <<~'EOSQL'); + MusicBrainz::Server::Test->prepare_test_database($c, <<~'SQL'); INSERT INTO label (id, name, gid, comment) VALUES (4, 3, 'e2a083a9-0042-4f8e-b4d2-8396350b95f7', 'label 4'); INSERT INTO l_label_label (id, link, entity0, entity1) VALUES (1, 1, 2, 3), (2, 2, 1, 3), (3, 2, 4, 3); - EOSQL + SQL $c->model('Relationship')->merge_entities('label', 1, [2]); @@ -74,12 +74,12 @@ test 'Merge matching dated/undated rels on entity merge (3 entities, some flippe my $c = $test->c; MusicBrainz::Server::Test->prepare_test_database($test->c, '+relationship_merging'); - MusicBrainz::Server::Test->prepare_test_database($c, <<~'EOSQL'); + MusicBrainz::Server::Test->prepare_test_database($c, <<~'SQL'); INSERT INTO label (id, name, gid, comment) VALUES (4, 3, 'e2a083a9-0042-4f8e-b4d2-8396350b95f7', 'label 4'); INSERT INTO l_label_label (id, link, entity0, entity1) VALUES (1, 1, 2, 3), (2, 2, 3, 1), (3, 2, 3, 4); - EOSQL + SQL $c->model('Relationship')->merge_entities('label', 1, [2]); @@ -93,10 +93,10 @@ test 'Merge matching undated rels on entity merge' => sub { my $c = $test->c; MusicBrainz::Server::Test->prepare_test_database($test->c, '+relationship_merging'); - MusicBrainz::Server::Test->prepare_test_database($c, <<~'EOSQL'); + MusicBrainz::Server::Test->prepare_test_database($c, <<~'SQL'); INSERT INTO l_label_label (id, link, entity0, entity1) VALUES (1, 1, 1, 3), (2, 1, 2, 3); - EOSQL + SQL $c->model('Relationship')->merge_entities('label', 1, [2]); @@ -110,10 +110,10 @@ test q(Don't merge matching dated/undated rels on entity merge if they originate my $c = $test->c; MusicBrainz::Server::Test->prepare_test_database($test->c, '+relationship_merging'); - MusicBrainz::Server::Test->prepare_test_database($c, <<~'EOSQL'); + MusicBrainz::Server::Test->prepare_test_database($c, <<~'SQL'); INSERT INTO l_label_label (id, link, entity0, entity1) VALUES (1, 1, 2, 3), (2, 2, 1, 3), (3, 1, 1, 3); - EOSQL + SQL $c->model('Relationship')->merge_entities('label', 1, [2]); @@ -127,10 +127,10 @@ test q(Don't merge matching rels, other than attributes) => sub { my $c = $test->c; MusicBrainz::Server::Test->prepare_test_database($test->c, '+relationship_merging'); - MusicBrainz::Server::Test->prepare_test_database($c, <<~'EOSQL'); + MusicBrainz::Server::Test->prepare_test_database($c, <<~'SQL'); INSERT INTO l_artist_artist (id, link, entity0, entity1) VALUES (1, 3, 2, 3), (2, 4, 1, 3); - EOSQL + SQL $c->model('Relationship')->merge_entities('artist', 1, [2]); @@ -144,10 +144,10 @@ test q(Don't merge matching rels, other than link_order) => sub { my $c = $test->c; MusicBrainz::Server::Test->prepare_test_database($test->c, '+relationship_merging'); - MusicBrainz::Server::Test->prepare_test_database($c, <<~'EOSQL'); + MusicBrainz::Server::Test->prepare_test_database($c, <<~'SQL'); INSERT INTO l_artist_artist (id, link, link_order, entity0, entity1) VALUES (1, 1, 1, 2, 3), (2, 1, 2, 1, 3); - EOSQL + SQL $c->model('Relationship')->merge_entities('artist', 1, [2]); @@ -178,7 +178,7 @@ test 'Entity credits are merged' => sub { my $c = $test->c; MusicBrainz::Server::Test->prepare_test_database($c, '+relationship_merging'); - MusicBrainz::Server::Test->prepare_test_database($c, <<~'EOSQL'); + MusicBrainz::Server::Test->prepare_test_database($c, <<~'SQL'); INSERT INTO label (id, name, gid) VALUES (4, 'D', '71a79efe-ab55-4a5a-a221-72062f5acb2f'), (5, 'E', '36df2c0e-c56d-43e5-a031-4049480c5a40'), @@ -216,7 +216,7 @@ test 'Entity credits are merged' => sub { -- empty source values are ignored (14, 1, 2, 9, 'kept9', ''), (15, 1, 3, 9, '', 'kept10'); - EOSQL + SQL $c->model('Relationship')->merge_entities('label', 1, [2, 3], rename_credits => 1); @@ -243,7 +243,7 @@ test 'Entity credits plus dates merge harmoniously' => sub { my $c = $test->c; MusicBrainz::Server::Test->prepare_test_database($c, '+relationship_merging'); - MusicBrainz::Server::Test->prepare_test_database($c, <<~'EOSQL'); + MusicBrainz::Server::Test->prepare_test_database($c, <<~'SQL'); INSERT INTO label (id, name, gid) VALUES (4, 'D', '71a79efe-ab55-4a5a-a221-72062f5acb2f'); @@ -258,7 +258,7 @@ test 'Entity credits plus dates merge harmoniously' => sub { -- The relationship on the source entity has a begin date and no credits. (3, 1, 1, 4, 'credit2', 'credit3'), (4, 2, 2, 4, '', ''); - EOSQL + SQL $c->model('Relationship')->merge_entities('label', 1, [2], rename_credits => 1); @@ -279,10 +279,10 @@ test 'Duplicate relationships that only exist among source entities are merged' my $c = $test->c; MusicBrainz::Server::Test->prepare_test_database($test->c, '+relationship_merging'); - MusicBrainz::Server::Test->prepare_test_database($c, <<~'EOSQL'); + MusicBrainz::Server::Test->prepare_test_database($c, <<~'SQL'); INSERT INTO l_artist_label (id, link, entity0, entity1) VALUES (1, 5, 2, 1), (2, 5, 3, 1); - EOSQL + SQL $c->model('Relationship')->merge_entities('artist', 1, [2, 3]); diff --git a/t/lib/t/MusicBrainz/Server/Data/Release.pm b/t/lib/t/MusicBrainz/Server/Data/Release.pm index 347b375277b..033b240b276 100644 --- a/t/lib/t/MusicBrainz/Server/Data/Release.pm +++ b/t/lib/t/MusicBrainz/Server/Data/Release.pm @@ -18,7 +18,7 @@ with 't::Context'; test 'filter_barcode_changes' => sub { my $test = shift; - $test->c->sql->do(<<~'EOSQL'); + $test->c->sql->do(<<~'SQL'); INSERT INTO artist (id, gid, name, sort_name) VALUES (1, 'a9d99e40-72d7-11de-8a39-0800200c9a66', 'Name', 'Name'); INSERT INTO artist_credit (id, name, artist_count) VALUES (1, 'Name', 1); @@ -33,7 +33,7 @@ test 'filter_barcode_changes' => sub { (3, '6b4faa80-72d9-11de-8a39-0800200c9a66', 'R1', 1, 1, NULL); INSERT INTO release_gid_redirect (gid, new_id) VALUES ('1b4faa80-72d9-11de-8a39-0800200c9a66', 1); - EOSQL + SQL { my @in = (); @@ -197,7 +197,7 @@ test 'can_merge for the merge strategy' => sub { test 'can_merge for the append strategy' => sub { my $test = shift; - $test->c->sql->do(<<~'EOSQL'); + $test->c->sql->do(<<~'SQL'); INSERT INTO artist (id, gid, name, sort_name) VALUES (1, 'a9d99e40-72d7-11de-8a39-0800200c9a66', 'Name', 'Name'); INSERT INTO artist_credit (id, name, artist_count) VALUES (1, 'Name', 1); @@ -215,7 +215,7 @@ test 'can_merge for the append strategy' => sub { VALUES (1, 1, 1, 1), (2, 2, 1, 1), (3, 3, 1, 1); - EOSQL + SQL my $can_merge; @@ -565,7 +565,7 @@ test 'find_by_artist orders by release date and country for non-VA, id only for my $c = $test->c; MusicBrainz::Server::Test->prepare_test_database($test->c, '+release'); - $c->sql->do(<<~'EOSQL'); + $c->sql->do(<<~'SQL'); INSERT INTO area (id, gid, name, type) VALUES (1, '8a754a16-0027-4a29-c6d7-2b40ea0481ed', 'Estonia', 1), (2, '8a754a16-0027-3a29-c6d7-2b40ea0481ed', 'France', 1); @@ -577,7 +577,7 @@ test 'find_by_artist orders by release date and country for non-VA, id only for INSERT INTO release_country (release, country, date_year, date_month, date_day) VALUES (7, 2, 2009, 5, 8), (7, 1, 2009, 5, 8); - EOSQL + SQL my ($releases, undef) = $c->model('Release')->find_by_artist(1, 10, 0); is_deeply( @@ -585,9 +585,9 @@ test 'find_by_artist orders by release date and country for non-VA, id only for [1, 2, 6, 7, 8, 9, 100, 110] ); - $c->sql->do(<<~'EOSQL'); + $c->sql->do(<<~'SQL'); UPDATE release SET artist_credit = 3 WHERE artist_credit = 1; - EOSQL + SQL ($releases, undef) = $c->model('Release')->find_by_artist(3, 10, 0); is_deeply( @@ -601,7 +601,7 @@ test 'find_by_label orders by release date, catalog_number, name, country, barco my $c = $test->c; MusicBrainz::Server::Test->prepare_test_database($test->c, '+release'); - $c->sql->do(<<~'EOSQL'); + $c->sql->do(<<~'SQL'); INSERT INTO area (id, gid, name, type) VALUES (1, '8a754a16-0027-4a29-c6d7-2b40ea0481ed', 'Estonia', 1), (2, '8a754a16-0027-3a29-c6d7-2b40ea0481ed', 'France', 1); @@ -613,7 +613,7 @@ test 'find_by_label orders by release date, catalog_number, name, country, barco INSERT INTO release_label (release, label, catalog_number) VALUES (2, 1, 'ABC-123'), (7, 1, 'ZZZ'); - EOSQL + SQL my ($releases, undef) = $c->model('Release')->find_by_label(1, 10, 0); is_deeply( @@ -675,10 +675,10 @@ test 'find_by_collection ordering' => sub { my $c = $test->c; MusicBrainz::Server::Test->prepare_test_database($c, '+collection'); - MusicBrainz::Server::Test->prepare_test_database($c, <<~'EOSQL'); + MusicBrainz::Server::Test->prepare_test_database($c, <<~'SQL'); INSERT INTO medium (id, release, track_count, position) VALUES (1, 1, 0, 1), (3, 3, 0, 1); - EOSQL + SQL for my $order (qw( date title country label artist catno format tracks )) { my ($releases, undef) = @@ -692,7 +692,7 @@ test 'merge release events' => sub { my $test = shift; my $c = $test->c; MusicBrainz::Server::Test->prepare_test_database($c, '+release'); - $c->sql->do(<<~'EOSQL'); + $c->sql->do(<<~'SQL'); INSERT INTO area (id, gid, name, type) VALUES (5, 'e01da61e-99a8-3c76-a27d-774c3f4982f0', 'Andorra', 1), (122, 'd2007481-eefe-37c0-be71-2256dfe148cb', 'Liechtenstein', 1), @@ -713,7 +713,7 @@ test 'merge release events' => sub { INSERT INTO release_unknown_country (release, date_year, date_month, date_day) VALUES (8, 2013, 11, 22), (9, 2014, 1, 5); - EOSQL + SQL $c->model('Release')->merge( merge_strategy => $MusicBrainz::Server::Data::Release::MERGE_MERGE, @@ -769,7 +769,7 @@ test 'Merging releases with the same date should discard unknown country events' my $release_data = $c->model('Release'); MusicBrainz::Server::Test->prepare_test_database($test->c, '+release'); - $c->sql->do(<<~'EOSQL'); + $c->sql->do(<<~'SQL'); INSERT INTO area (id, gid, name, type) VALUES (1, '8a754a16-0027-4a29-c6d7-2b40ea0481ed', 'Estonia', 1); INSERT INTO country_area (area) VALUES (1); @@ -779,7 +779,7 @@ test 'Merging releases with the same date should discard unknown country events' INSERT INTO release_country (release, country, date_year, date_month, date_day) VALUES (9, 1, 2009, 5, 8); - EOSQL + SQL $release_data->merge( old_ids => [ 9 ], diff --git a/t/lib/t/MusicBrainz/Server/Data/ReleaseGroup.pm b/t/lib/t/MusicBrainz/Server/Data/ReleaseGroup.pm index d8425c6fe91..ce4abd894d7 100644 --- a/t/lib/t/MusicBrainz/Server/Data/ReleaseGroup.pm +++ b/t/lib/t/MusicBrainz/Server/Data/ReleaseGroup.pm @@ -118,7 +118,7 @@ $sql->commit; test 'Delete release groups with secondary types' => sub { my $test = shift; - $test->c->sql->do(<<~'EOSQL'); + $test->c->sql->do(<<~'SQL'); INSERT INTO artist (id, gid, name, sort_name) VALUES (1, 'a9d99e40-72d7-11de-8a39-0800200c9a66', 'Name', 'Name'); INSERT INTO artist_credit (id, name, artist_count) VALUES (1, 'Name', 1); @@ -129,7 +129,7 @@ test 'Delete release groups with secondary types' => sub { VALUES (1, '7b5d22d0-72d7-11de-8a39-0800200c9a66', 'Release Group', 1, 1, 'Comment', 2); INSERT INTO release_group_secondary_type_join (release_group, secondary_type) VALUES (1, 7); - EOSQL + SQL $test->c->model('ReleaseGroup')->delete(1); ok(!defined $test->c->model('ReleaseGroup')->get_by_id(1)); @@ -140,21 +140,21 @@ test 'Merge releases in seperate release groups where release groups have cover my $test = shift; MusicBrainz::Server::Test->prepare_test_database($test->c, '+releasegroup'); - $test->c->sql->do(<<~'EOSQL'); + $test->c->sql->do(<<~'SQL'); INSERT INTO cover_art_archive.release_group_cover_art (release_group, release) VALUES (4, 4), (5, 5) - EOSQL + SQL ok( $test->c->model('Release')->merge( new_id => 4, old_ids => [ 5 ], merge_strategy => $MusicBrainz::Server::Data::Release::MERGE_MERGE ), 'Merge releases with cover art'); - my $results = $test->c->sql->select_list_of_hashes(<<~'EOSQL'); + my $results = $test->c->sql->select_list_of_hashes(<<~'SQL'); SELECT release_group, release FROM cover_art_archive.release_group_cover_art ORDER BY release_group, release - EOSQL + SQL my $expected = [ { release_group => 4, release => 4 } ]; @@ -167,21 +167,21 @@ test 'Merge releases in the same release group where the release group has cover MusicBrainz::Server::Test->prepare_test_database($test->c, '+releasegroup'); $test->c->sql->do('UPDATE release SET release_group = 4 WHERE id = 5'); - $test->c->sql->do(<<~'EOSQL'); + $test->c->sql->do(<<~'SQL'); INSERT INTO cover_art_archive.release_group_cover_art (release_group, release) VALUES (4, 5) - EOSQL + SQL ok( $test->c->model('Release')->merge( new_id => 4, old_ids => [ 5 ], merge_strategy => $MusicBrainz::Server::Data::Release::MERGE_MERGE ), 'Merge releases with cover art'); - my $results = $test->c->sql->select_list_of_hashes(<<~'EOSQL'); + my $results = $test->c->sql->select_list_of_hashes(<<~'SQL'); SELECT release_group, release FROM cover_art_archive.release_group_cover_art ORDER BY release_group, release - EOSQL + SQL my $expected = [ { release_group => 4, release => 4 } ]; @@ -193,18 +193,18 @@ test 'Delete release which is set as cover art for a release group' => sub { my $test = shift; MusicBrainz::Server::Test->prepare_test_database($test->c, '+releasegroup'); - $test->c->sql->do(<<~'EOSQL'); + $test->c->sql->do(<<~'SQL'); INSERT INTO cover_art_archive.release_group_cover_art (release_group, release) VALUES (4, 4), (5, 5) - EOSQL + SQL $test->c->model('Release')->delete(4); - my $results = $test->c->sql->select_list_of_hashes(<<~'EOSQL'); + my $results = $test->c->sql->select_list_of_hashes(<<~'SQL'); SELECT release_group, release FROM cover_art_archive.release_group_cover_art ORDER BY release_group, release - EOSQL + SQL my $expected = [ { release_group => 5, release => 5 } ]; @@ -217,10 +217,10 @@ test 'Merging release groups with cover art set preserves target cover art' => s MusicBrainz::Server::Test->prepare_test_database($c, '+releasegroup'); - $c->sql->do(<<~'EOSQL'); + $c->sql->do(<<~'SQL'); INSERT INTO cover_art_archive.release_group_cover_art (release_group, release) VALUES (4, 4), (5, 5) - EOSQL + SQL $c->model('CoverArtArchive')->merge_release_groups(4, 5); @@ -238,10 +238,10 @@ test 'Merging release groups with cover art otherwise uses a random choice' => s MusicBrainz::Server::Test->prepare_test_database($c, '+releasegroup'); - $c->sql->do(<<~'EOSQL'); + $c->sql->do(<<~'SQL'); INSERT INTO cover_art_archive.release_group_cover_art (release_group, release) VALUES (4, 4), (5, 5) - EOSQL + SQL $c->model('CoverArtArchive')->merge_release_groups(3, 4, 5); diff --git a/t/lib/t/MusicBrainz/Server/Data/ReleaseLabel.pm b/t/lib/t/MusicBrainz/Server/Data/ReleaseLabel.pm index 4e7065e48d4..ea24611d971 100644 --- a/t/lib/t/MusicBrainz/Server/Data/ReleaseLabel.pm +++ b/t/lib/t/MusicBrainz/Server/Data/ReleaseLabel.pm @@ -37,7 +37,7 @@ $sql->commit; test 'Merging release labels' => sub { my $test = shift; - MusicBrainz::Server::Test->prepare_test_database($test->c, <<~'EOSQL'); + MusicBrainz::Server::Test->prepare_test_database($test->c, <<~'SQL'); INSERT INTO artist (id, gid, name, sort_name) VALUES (1, 'a9d99e40-72d7-11de-8a39-0800200c9a66', 'Artist', 'Artist'); @@ -60,7 +60,7 @@ test 'Merging release labels' => sub { INSERT INTO release_label (release, label, catalog_number) VALUES (1, 1, 'ABC'), (2, 1, 'ABC'), (2, 1, 'XYZ'), (3, NULL, 'MARVIN001'), (4, NULL, 'MARVIN001'); - EOSQL + SQL subtest 'Merging when label and catalog numbers are not null' => sub { $test->c->model('ReleaseLabel')->merge_releases(1, 2); @@ -90,7 +90,7 @@ test 'Merging release labels' => sub { test 'Release labels are intelligently merged when one release label has a catalog and the other does not' => sub { my $test = shift; - MusicBrainz::Server::Test->prepare_test_database($test->c, <<~'EOSQL'); + MusicBrainz::Server::Test->prepare_test_database($test->c, <<~'SQL'); INSERT INTO artist (id, gid, name, sort_name) VALUES (1, 'a9d99e40-72d7-11de-8a39-0800200c9a66', 'Artist', 'Artist'); INSERT INTO artist_credit (id, name, artist_count) VALUES (1, 'Artist', 1); @@ -106,7 +106,7 @@ test 'Release labels are intelligently merged when one release label has a catal INSERT INTO release_label (release, label, catalog_number) VALUES (1, 1, 'ABC'), (2, 1, NULL); - EOSQL + SQL $test->c->model('ReleaseLabel')->merge_releases(1, 2); diff --git a/t/lib/t/MusicBrainz/Server/Data/Role/Collection.pm b/t/lib/t/MusicBrainz/Server/Data/Role/Collection.pm index 2e8637984c6..46504e09f55 100644 --- a/t/lib/t/MusicBrainz/Server/Data/Role/Collection.pm +++ b/t/lib/t/MusicBrainz/Server/Data/Role/Collection.pm @@ -50,11 +50,11 @@ for my $entity_type (entities_with('collections')) { MusicBrainz::Server::Test->prepare_test_database($test->c, '+releasegroup'); - $c->sql->do(<<~"EOSQL"); + $c->sql->do(<<~"SQL"); INSERT INTO editor (id, name, password, ha1) VALUES (5, 'me', '{CLEARTEXT}mb', 'a152e69b4cf029912ac2dd9742d8a9fc'); SELECT setval('${entity_type}_id_seq', 666, FALSE); - EOSQL + SQL my $model = $c->model($ENTITIES{$entity_type}{model}); my $entity = $model->insert(create_insert($entity_type, 'Test123')); @@ -70,11 +70,11 @@ for my $entity_type (entities_with('collections')) { MusicBrainz::Server::Test->prepare_test_database($test->c, '+releasegroup'); - $c->sql->do(<<~"EOSQL"); + $c->sql->do(<<~"SQL"); INSERT INTO editor (id, name, password, ha1) VALUES (5, 'me', '{CLEARTEXT}mb', 'a152e69b4cf029912ac2dd9742d8a9fc'); SELECT setval('${entity_type}_id_seq', 666, FALSE); - EOSQL + SQL my $model = $c->model($ENTITIES{$entity_type}{model}); my $entity1 = $model->insert(create_insert($entity_type, 'Test123')); diff --git a/t/lib/t/MusicBrainz/Server/Data/Series.pm b/t/lib/t/MusicBrainz/Server/Data/Series.pm index f48a0e1be55..15ebf5f983f 100644 --- a/t/lib/t/MusicBrainz/Server/Data/Series.pm +++ b/t/lib/t/MusicBrainz/Server/Data/Series.pm @@ -9,7 +9,7 @@ test 'Items should be ordered by relationship date' => sub { MusicBrainz::Server::Test->prepare_test_database($c, '+series'); - $c->sql->do(<<~'EOSQL'); + $c->sql->do(<<~'SQL'); UPDATE link_type SET has_dates = TRUE WHERE id = 743; INSERT INTO series (id, gid, name, type, ordering_attribute, ordering_type) @@ -21,7 +21,7 @@ test 'Items should be ordered by relationship date' => sub { (7, 'c22690d8-50d7-4428-bac8-ce13c69d37d8', 'W7', 1), (8, '6c4c97f4-54ef-4441-85df-c4d2a00517da', 'W8', 1), (9, '1ec80148-8943-46c3-a5a0-d587bca15e6e', 'W9', 1); - EOSQL + SQL $c->model('Relationship')->insert('series', 'work', { entity0_id => 4, @@ -79,7 +79,7 @@ test 'Events should be ordered by event date, then name (MBS-7557, MBS-7987)' => MusicBrainz::Server::Test->prepare_test_database($c, '+series'); - $c->sql->do(<<~'EOSQL'); + $c->sql->do(<<~'SQL'); INSERT INTO series (id, gid, name, type, ordering_attribute, ordering_type) VALUES (4, '8658de67-6bb3-4281-be04-1340604ecaae', 'S', 8, 788, 1); @@ -91,7 +91,7 @@ test 'Events should be ordered by event date, then name (MBS-7557, MBS-7987)' => (5, '98f2b54d-44d7-4421-85b7-c7a3d8e11445', 'E5', 1), (6, '2e345567-89d7-45cf-987b-73dc706440d2', 'E1', 1), (7, 'c214be92-a6a2-4211-b2ae-a55f9f49227d', 'E4', 1); - EOSQL + SQL $c->model('Relationship')->insert('event', 'series', { entity0_id => 1, @@ -169,7 +169,7 @@ test 'Releases should be ordered by date, then catalog number, then name (MBS-75 MusicBrainz::Server::Test->prepare_test_database($c, '+series'); - $c->sql->do(<<~'EOSQL'); + $c->sql->do(<<~'SQL'); INSERT INTO series (id, gid, name, type, ordering_attribute, ordering_type) VALUES (4, '8658de67-6bb3-4281-be04-1340604ecaae', 'S', 2, 788, 1); @@ -188,7 +188,7 @@ test 'Releases should be ordered by date, then catalog number, then name (MBS-75 VALUES (1, 'f36b8255-5ad2-487b-a62d-c46db2f25f76', 'E3', 1, 1), (2, 'd359aebf-c9be-4131-a717-c45566994b32', 'E2', 1, 1), (3, 'ab164bf3-4c23-4611-bdd7-04d31af0dbee', 'E1', 1, 1); - EOSQL + SQL $c->model('Relationship')->insert('release', 'series', { entity0_id => 1, @@ -263,7 +263,7 @@ test 'Release groups should be ordered by first release date, then name (MBS-755 MusicBrainz::Server::Test->prepare_test_database($c, '+series'); - $c->sql->do(<<~'EOSQL'); + $c->sql->do(<<~'SQL'); INSERT INTO series (id, gid, name, type, ordering_attribute, ordering_type) VALUES (4, '8658de67-6bb3-4281-be04-1340604ecaae', 'S', 1, 788, 1); @@ -279,7 +279,7 @@ test 'Release groups should be ordered by first release date, then name (MBS-755 VALUES (1, 'b11f4f4d-9feb-4487-85ee-79a3be288e2c', 'RG3', 1, 1), (2, 'e54c7cbf-6130-426e-bca3-1b5ef85e75eb', 'RG2', 1, 1), (3, '7441fe18-52c4-463c-a866-1e9cd94b689f', 'RG1', 1, 1); - EOSQL + SQL $c->model('Relationship')->insert('release_group', 'series', { entity0_id => 1, @@ -311,7 +311,7 @@ test 'Release groups should be ordered by first release date, then name (MBS-755 ($items, $count) = $c->model('Series')->get_entities($series, 3, 0); is_deeply([map { $_->{entity}->id } @$items], [1, 2, 3], 'release groups are re-ordered after names change'); - $c->sql->do(<<~'EOSQL'); + $c->sql->do(<<~'SQL'); INSERT INTO release (id, gid, name, release_group, artist_credit) VALUES (1, '6fc3beb7-046f-4f45-b834-dc26c3254b49', 'E1', 1, 1), (2, '6f77ac91-ba0a-4ddd-8d02-dcac6339ea83', 'E2', 1, 1), @@ -319,7 +319,7 @@ test 'Release groups should be ordered by first release date, then name (MBS-755 (4, '547e4b5c-d1d6-4224-9bbc-27448338a622', 'E4', 2, 1), (5, 'ce7b51bc-74ba-4c59-a4e9-7fcb0d0f04f8', 'E5', 3, 1), (6, '006758a6-1cb3-4e55-a278-d8c32d1c8afe', 'E6', 3, 1); - EOSQL + SQL $c->model('Release')->update(1, { events => [ @@ -372,7 +372,7 @@ test 'Can reorder series with multiple of the same item without conflicts (MBS-8 MusicBrainz::Server::Test->prepare_test_database($c, '+series'); - $c->sql->do(<<~'EOSQL'); + $c->sql->do(<<~'SQL'); INSERT INTO series (id, gid, name, type, ordering_attribute, ordering_type) VALUES (4, '8658de67-6bb3-4281-be04-1340604ecaae', 'S', 2, 788, 1); @@ -381,7 +381,7 @@ test 'Can reorder series with multiple of the same item without conflicts (MBS-8 INSERT INTO release (id, gid, name, release_group, artist_credit) VALUES (1, 'f36b8255-5ad2-487b-a62d-c46db2f25f76', 'R', 1, 1); - EOSQL + SQL $c->model('Relationship')->insert('release', 'series', { entity0_id => 1, diff --git a/t/lib/t/MusicBrainz/Server/Data/Statistics.pm b/t/lib/t/MusicBrainz/Server/Data/Statistics.pm index 15c01ea5415..4d47e2af1b1 100644 --- a/t/lib/t/MusicBrainz/Server/Data/Statistics.pm +++ b/t/lib/t/MusicBrainz/Server/Data/Statistics.pm @@ -15,7 +15,7 @@ test 'get_statistic works as expected' => sub { my $c = $test->c; - MusicBrainz::Server::Test->prepare_test_database($test->c, <<~'EOSQL'); + MusicBrainz::Server::Test->prepare_test_database($test->c, <<~'SQL'); INSERT INTO statistics.statistic (id, date_collected, name, value) VALUES (1, '2011-03-27', 'count.artist', 300000), (2, '2011-03-28', 'count.artist', 400000), @@ -24,7 +24,7 @@ test 'get_statistic works as expected' => sub { VALUES (4, '2011-03-27', 'count.release', 50000), (5, '2011-03-28', 'count.release', 50001), (6, '2011-03-29', 'count.release', 50002); - EOSQL + SQL my $tc1 = $c->model('Statistics::ByName')->get_statistic('count.artist'); is($tc1->statistic_for('2011-03-27') => 300000); @@ -50,7 +50,7 @@ test 'test recalculate_all' => sub { test 'top_recently_active_editors' => sub { my $test = shift; - $test->c->sql->do(<<~'EOSQL'); + $test->c->sql->do(<<~'SQL'); INSERT INTO editor (id, name, password, ha1, email, email_confirm_date) SELECT x, 'Editor ' || x, '{CLEARTEXT}pass', md5('Editor ' || x || ':musicbrainz:pass'), '', now() FROM generate_series(11, 14) s(x); @@ -68,7 +68,7 @@ test 'top_recently_active_editors' => sub { (5, 2, 1, '1970-01-01', now(), 14); INSERT INTO edit_data (edit, data) SELECT generate_series(1, 4), '{}'; - EOSQL + SQL ok !exception { $test->c->model('Statistics')->recalculate_all }; my $stats = $test->c->model('Statistics::ByDate')->get_latest_statistics(); @@ -84,7 +84,7 @@ test 'top_recently_active_editors' => sub { test 'top_editors' => sub { my $test = shift; - $test->c->sql->do(<<~'EOSQL'); + $test->c->sql->do(<<~'SQL'); INSERT INTO editor (id, name, password, ha1, email, email_confirm_date) SELECT x, 'Editor ' || x, '{CLEARTEXT}pass', md5('Editor ' || x || ':musicbrainz:pass'), '', now() FROM generate_series(11, 14) s(x); @@ -102,7 +102,7 @@ test 'top_editors' => sub { (5, 2, 1, '1970-01-01', now(), 14); INSERT INTO edit_data (edit, data) SELECT generate_series(1, 4), '{}'; - EOSQL + SQL ok !exception { $test->c->model('Statistics')->recalculate_all }; my $stats = $test->c->model('Statistics::ByDate')->get_latest_statistics(); @@ -119,7 +119,7 @@ test 'top_editors' => sub { test 'top_recently_active_voters' => sub { my $test = shift; - $test->c->sql->do(<<~'EOSQL'); + $test->c->sql->do(<<~'SQL'); INSERT INTO editor (id, name, password, ha1, email, email_confirm_date) SELECT x, 'Editor ' || x, '{CLEARTEXT}pass', md5('Editor ' || x || ':musicbrainz:pass'), '', now() FROM generate_series(11, 15) s(x); INSERT INTO edit (id, status, type, open_time, expire_time, editor) @@ -142,7 +142,7 @@ test 'top_recently_active_voters' => sub { -- Superseded votes don't count (6, 1, 1, now(), 15, TRUE), (7, 1, -1, now(), 15, FALSE); - EOSQL + SQL ok !exception { $test->c->model('Statistics')->recalculate_all }; my $stats = $test->c->model('Statistics::ByDate')->get_latest_statistics(); @@ -158,7 +158,7 @@ test 'top_recently_active_voters' => sub { test 'top_voters' => sub { my $test = shift; - $test->c->sql->do(<<~'EOSQL'); + $test->c->sql->do(<<~'SQL'); INSERT INTO editor (id, name, password, ha1, email, email_confirm_date) SELECT x, 'Editor ' || x, '{CLEARTEXT}pass', md5('Editor ' || x || ':musicbrainz:pass'), '', now() FROM generate_series(11, 15) s(x); INSERT INTO edit (id, status, type, open_time, expire_time, editor) @@ -181,7 +181,7 @@ test 'top_voters' => sub { -- Superseded votes don't count (6, 1, 1, now(), 15, TRUE), (7, 1, -1, now(), 15, FALSE); - EOSQL + SQL ok !exception { $test->c->model('Statistics')->recalculate_all }; my $stats = $test->c->model('Statistics::ByDate')->get_latest_statistics(); diff --git a/t/lib/t/MusicBrainz/Server/Data/WatchArtist.pm b/t/lib/t/MusicBrainz/Server/Data/WatchArtist.pm index 34808191e08..783ef670de0 100644 --- a/t/lib/t/MusicBrainz/Server/Data/WatchArtist.pm +++ b/t/lib/t/MusicBrainz/Server/Data/WatchArtist.pm @@ -109,20 +109,20 @@ test 'WatchArtist->find_new_releases' => sub { subtest 'Find releases within our notification timeframe' => sub { $test->sql->begin; - $test->sql->do(<<~'EOSQL'); + $test->sql->do(<<~'SQL'); UPDATE release SET date_year = EXTRACT(YEAR FROM NOW() + '@ 3 week'), date_month = EXTRACT(MONTH FROM NOW() + '@ 3 week'), date_day = EXTRACT(MONTH FROM NOW() + '@ 3 week') - EOSQL + SQL my @releases = $test->c->model('WatchArtist')->find_new_releases(1); is(@releases => 0, 'found no releases with 1 week timeframe'); - $test->sql->do(<<~'EOSQL'); + $test->sql->do(<<~'SQL'); UPDATE editor_watch_preferences SET notification_timeframe = '@ 1 month' WHERE editor = 1 - EOSQL + SQL @releases = $test->c->model('WatchArtist')->find_new_releases(1); is(@releases => 1, 'found releases with a 1 month timeframe'); diff --git a/t/lib/t/MusicBrainz/Server/Data/WikipediaExtract.pm b/t/lib/t/MusicBrainz/Server/Data/WikipediaExtract.pm index 1dc11c89fdb..88f7453e2e0 100644 --- a/t/lib/t/MusicBrainz/Server/Data/WikipediaExtract.pm +++ b/t/lib/t/MusicBrainz/Server/Data/WikipediaExtract.pm @@ -170,7 +170,7 @@ test 'Request tr page via wikidata, fallback to it (according to editor known la ]); # Set editor known languages to native Finnish and basic Macedonian - $c->sql->do(<<~'EOSQL'); + $c->sql->do(<<~'SQL'); INSERT INTO area (id, gid, name, type) VALUES (221, '8a754a16-0027-3a29-b6d7-2b40ea0481ed', 'United Kingdom', 1); INSERT INTO iso_3166_1 (area, code) VALUES (221, 'GB'); @@ -188,7 +188,7 @@ test 'Request tr page via wikidata, fallback to it (according to editor known la (254, 'mkd', 'mk', 'Macedonian'); INSERT INTO editor_language (editor, language, fluency) VALUES (1, 131, 'native'), (1, 254, 'basic'); - EOSQL + SQL my $model = $c->model('Editor'); my $bob = $model->get_by_id(1); diff --git a/t/lib/t/MusicBrainz/Server/Data/Work.pm b/t/lib/t/MusicBrainz/Server/Data/Work.pm index 135104da648..607b1585375 100644 --- a/t/lib/t/MusicBrainz/Server/Data/Work.pm +++ b/t/lib/t/MusicBrainz/Server/Data/Work.pm @@ -131,7 +131,7 @@ ok(!defined $work); test 'Merge with funky relationships' => sub { my $test = shift; - MusicBrainz::Server::Test->prepare_test_database($test->c, <<~'EOSQL'); + MusicBrainz::Server::Test->prepare_test_database($test->c, <<~'SQL'); INSERT INTO artist (id, gid, name, sort_name) VALUES (1, '5f9913b0-7219-11de-8a39-0800200c9a66', 'Artist', 'Artist'); @@ -144,7 +144,7 @@ test 'Merge with funky relationships' => sub { INSERT INTO l_artist_work (id, entity0, link, entity1) VALUES (1, 1, 1, 2), (2, 1, 1, 3); - EOSQL + SQL $test->c->model('Work')->merge(1, 2, 3); diff --git a/t/lib/t/MusicBrainz/Server/Edit/Area/Merge.pm b/t/lib/t/MusicBrainz/Server/Edit/Area/Merge.pm index 9d30b209d01..758bd23d591 100644 --- a/t/lib/t/MusicBrainz/Server/Edit/Area/Merge.pm +++ b/t/lib/t/MusicBrainz/Server/Edit/Area/Merge.pm @@ -15,13 +15,13 @@ test 'Can merge areas are used as entity areas' => sub { my $c = $test->c; MusicBrainz::Server::Test->prepare_test_database($c, '+area'); - $c->sql->do(<<~'EOSQL'); + $c->sql->do(<<~'SQL'); INSERT INTO artist (id, gid, name, sort_name, area, begin_area, end_area) VALUES (5, 'c5655a7c-bba0-46aa-a8fd-db707d47aa5c', 'Artist', 'Artist', 13, 13, 13); INSERT INTO label (id, gid, name, area) VALUES (5, 'c5655a7c-bba0-46aa-a8fd-db707d47aa5c', 'Artist', 13); - EOSQL + SQL my $editor = $c->model('Editor')->get_by_id(1); $c->model('Editor')->update_privileges($editor, { location_editor => 1 }); @@ -41,7 +41,7 @@ test 'Can merge country areas' => sub { my $c = $test->c; MusicBrainz::Server::Test->prepare_test_database($c, '+area'); - $c->sql->do(<<~'EOSQL'); + $c->sql->do(<<~'SQL'); INSERT INTO artist (id, gid, name, sort_name) VALUES (1, '8469c1b7-04a1-4ca7-a090-a5ed2df2e7ac', 'Artist', 'Artist'); INSERT INTO artist_credit (id, name, artist_count) VALUES (1, 'Artist', 1); @@ -53,7 +53,7 @@ test 'Can merge country areas' => sub { VALUES (1, 'a2d13b15-4002-4d04-8a08-b9a9a7fbe9ad', 'Release', 1, 1); INSERT INTO release_country (release, country) VALUES (1, 13); - EOSQL + SQL my $editor = $c->model('Editor')->get_by_id(1); $c->model('Editor')->update_privileges($editor, { location_editor => 1 }); diff --git a/t/lib/t/MusicBrainz/Server/Edit/Artist/Create.pm b/t/lib/t/MusicBrainz/Server/Edit/Artist/Create.pm index 1da655978a7..4b2df289514 100644 --- a/t/lib/t/MusicBrainz/Server/Edit/Artist/Create.pm +++ b/t/lib/t/MusicBrainz/Server/Edit/Artist/Create.pm @@ -22,10 +22,10 @@ test all => sub { my $test = shift; my $c = $test->c; - MusicBrainz::Server::Test->prepare_test_database($c, <<~'EOSQL'); + MusicBrainz::Server::Test->prepare_test_database($c, <<~'SQL'); SET client_min_messages TO warning; TRUNCATE artist CASCADE; - EOSQL + SQL # avoid artist_va_check violation $c->sql->do(q(SELECT setval('artist_id_seq', 1))); diff --git a/t/lib/t/MusicBrainz/Server/Edit/Artist/Edit.pm b/t/lib/t/MusicBrainz/Server/Edit/Artist/Edit.pm index f4a53188bb2..3db45b9f033 100644 --- a/t/lib/t/MusicBrainz/Server/Edit/Artist/Edit.pm +++ b/t/lib/t/MusicBrainz/Server/Edit/Artist/Edit.pm @@ -348,10 +348,10 @@ test 'Fails edits trying to change the gender of a group (MBS-8722)' => sub { my $test = shift; my $c = $test->c; - $c->sql->do(<<~'EOSQL'); + $c->sql->do(<<~'SQL'); INSERT INTO artist (id, gid, name, sort_name, type) VALUES (2, 'cdf5588d-cca8-4e0c-bae1-d53bc73b012a', 'group', 'group', 1); - EOSQL + SQL my $edit = $c->model('Edit')->create( edit_type => $EDIT_ARTIST_EDIT, @@ -375,10 +375,10 @@ test 'Fails edits trying to set an artist with a gender as a group' => sub { my $test = shift; my $c = $test->c; - $c->sql->do(<<~'EOSQL'); + $c->sql->do(<<~'SQL'); INSERT INTO artist (id, gid, name, sort_name) VALUES (2, 'cdf5588d-cca8-4e0c-bae1-d53bc73b012a', 'person', 'person'); - EOSQL + SQL my $edit = $c->model('Edit')->create( edit_type => $EDIT_ARTIST_EDIT, @@ -402,10 +402,10 @@ test 'Type can be set to group when gender is removed (MBS-8801)' => sub { my $test = shift; my $c = $test->c; - $c->sql->do(<<~'EOSQL'); + $c->sql->do(<<~'SQL'); INSERT INTO artist (id, gid, name, sort_name, gender) VALUES (2, 'cdf5588d-cca8-4e0c-bae1-d53bc73b012a', 'Foo Baz', 'Foo Baz', 2); - EOSQL + SQL my $edit = $c->model('Edit')->create( edit_type => $EDIT_ARTIST_EDIT, diff --git a/t/lib/t/MusicBrainz/Server/Edit/Artist/Merge.pm b/t/lib/t/MusicBrainz/Server/Edit/Artist/Merge.pm index 697755c6c10..00327be4d53 100644 --- a/t/lib/t/MusicBrainz/Server/Edit/Artist/Merge.pm +++ b/t/lib/t/MusicBrainz/Server/Edit/Artist/Merge.pm @@ -34,10 +34,10 @@ test 'Merging a person with a gender into a group' => sub { my $c = $test->c; MusicBrainz::Server::Test->prepare_test_database($c, '+edit_artist_merge'); - $c->sql->do(<<~'EOSQL'); + $c->sql->do(<<~'SQL'); UPDATE artist SET type = 2, gender = NULL WHERE id = 4; UPDATE artist SET type = 1, gender = 2 WHERE id = 3; - EOSQL + SQL # merge 3 -> 4 my $edit = create_edit($c); @@ -67,10 +67,10 @@ test 'Merging an artist with no type and a gender into a group' => sub { my $c = $test->c; MusicBrainz::Server::Test->prepare_test_database($c, '+edit_artist_merge'); - $c->sql->do(<<~'EOSQL'); + $c->sql->do(<<~'SQL'); UPDATE artist SET type = 2, gender = NULL WHERE id = 4; UPDATE artist SET type = NULL, gender = 2 WHERE id = 3; - EOSQL + SQL # merge 3 -> 4 my $edit = create_edit($c); @@ -100,10 +100,10 @@ test 'Merging a group into an artist with no type and a gender' => sub { my $c = $test->c; MusicBrainz::Server::Test->prepare_test_database($c, '+edit_artist_merge'); - $c->sql->do(<<~'EOSQL'); + $c->sql->do(<<~'SQL'); UPDATE artist SET type = NULL, gender = 2 WHERE id = 4; UPDATE artist SET type = 2, gender = NULL WHERE id = 3; - EOSQL + SQL # merge 3 -> 4 my $edit = create_edit($c); @@ -133,10 +133,10 @@ test 'Merging a group into a person with a gender' => sub { my $c = $test->c; MusicBrainz::Server::Test->prepare_test_database($c, '+edit_artist_merge'); - $c->sql->do(<<~'EOSQL'); + $c->sql->do(<<~'SQL'); UPDATE artist SET type = 1, gender = 2 WHERE id = 4; UPDATE artist SET type = 2, gender = NULL WHERE id = 3; - EOSQL + SQL # merge 3 -> 4 my $edit = create_edit($c); @@ -157,11 +157,11 @@ test 'Merging a group, and an artist with no type and a gender, into an artist w my $c = $test->c; MusicBrainz::Server::Test->prepare_test_database($c, '+edit_artist_merge'); - $c->sql->do(<<~'EOSQL'); + $c->sql->do(<<~'SQL'); UPDATE artist SET type = NULL, gender = NULL WHERE id = 4; UPDATE artist SET type = 2, gender = NULL WHERE id = 3; UPDATE artist SET type = NULL, gender = 1 WHERE id = 5; - EOSQL + SQL # merge 3 & 5 -> 4 my $edit = $c->model('Edit')->create( @@ -284,12 +284,12 @@ test 'Downvoted tags are preserved post-merge (MBS-8524)' => sub { MusicBrainz::Server::Test->prepare_test_database($c, '+edit_artist_merge'); - $c->sql->do(<<~'EOSQL'); + $c->sql->do(<<~'SQL'); INSERT INTO tag (id, name, ref_count) VALUES (1, 'electronic', 0); INSERT INTO artist_tag_raw (artist, editor, tag, is_upvote) VALUES (3, 1, 1, FALSE); INSERT INTO artist_tag (artist, count, tag) VALUES (3, -1, 1); - EOSQL + SQL my $edit = create_edit($c); accept_edit($c, $edit); diff --git a/t/lib/t/MusicBrainz/Server/Edit/Event/Edit.pm b/t/lib/t/MusicBrainz/Server/Edit/Event/Edit.pm index d8de5457465..d73d74b6cdd 100644 --- a/t/lib/t/MusicBrainz/Server/Edit/Event/Edit.pm +++ b/t/lib/t/MusicBrainz/Server/Edit/Event/Edit.pm @@ -14,10 +14,10 @@ test 'MBS-8837' => sub { my $test = shift; my $c = $test->c; - $c->sql->do(<<~'EOSQL'); + $c->sql->do(<<~'SQL'); INSERT INTO event (id, name, gid, time) VALUES (1, 'test', '5140d04f-a0f9-4846-8b23-b53a36b5c5ff', '19:30:00'); - EOSQL + SQL my $edit = $c->model('Edit')->create( edit_type => $EDIT_EVENT_EDIT, diff --git a/t/lib/t/MusicBrainz/Server/Edit/Label/Create.pm b/t/lib/t/MusicBrainz/Server/Edit/Label/Create.pm index 9dc98897485..e10c3b60aaf 100644 --- a/t/lib/t/MusicBrainz/Server/Edit/Label/Create.pm +++ b/t/lib/t/MusicBrainz/Server/Edit/Label/Create.pm @@ -113,7 +113,7 @@ test q(Rejected edits are applied if the label can't be deleted) => sub { my $edit = create_edit($c, privileges => $UNTRUSTED_FLAG); my $label_id = $edit->entity_id; - $c->sql->do(<<~"EOSQL"); + $c->sql->do(<<~"SQL"); INSERT INTO artist (id, gid, name, sort_name) VALUES (1, '01aa077b-ea92-437a-833f-4bf617dac3e7', 'A', 'A'); @@ -128,7 +128,7 @@ test q(Rejected edits are applied if the label can't be deleted) => sub { VALUES (1, '357cfecb-8afd-41b7-a357-c1fde7ce46cd', 'R', 1, 1); INSERT INTO release_label (release, label, catalog_number) VALUES (1, $label_id, ''); - EOSQL + SQL reject_edit($c, $edit); is($edit->status, $STATUS_APPLIED); diff --git a/t/lib/t/MusicBrainz/Server/Edit/Label/Merge.pm b/t/lib/t/MusicBrainz/Server/Edit/Label/Merge.pm index 9fd360de43c..7c6266eeadb 100644 --- a/t/lib/t/MusicBrainz/Server/Edit/Label/Merge.pm +++ b/t/lib/t/MusicBrainz/Server/Edit/Label/Merge.pm @@ -60,7 +60,7 @@ test 'Can merge labels with editors subscribed at both ends' => sub { my $c = $test->c; MusicBrainz::Server::Test->prepare_test_database($c, '+edit_label_merge'); - $c->sql->do(<<~'EOSQL'); + $c->sql->do(<<~'SQL'); INSERT INTO editor (id, name, password, ha1, email, email_confirm_date) VALUES (10, 'Fred', '{CLEARTEXT}mb', '', '', now()); @@ -72,7 +72,7 @@ test 'Can merge labels with editors subscribed at both ends' => sub { VALUES (10, 2, 1), (10, 3, 1); ALTER SEQUENCE edit_id_seq RESTART 2; - EOSQL + SQL my $edit = create_edit($c); $edit->accept; @@ -94,11 +94,11 @@ test 'Duplicate release labels are merged' => sub { my $release; MusicBrainz::Server::Test->prepare_test_database($c, '+edit_release_label'); - $c->sql->do(<<~'EOSQL'); + $c->sql->do(<<~'SQL'); INSERT INTO release_label (release, label, catalog_number) SELECT 1, label, catalog_number FROM release_label WHERE release = 1 - EOSQL + SQL my $edit = $c->model('Edit')->create( edit_type => $EDIT_LABEL_MERGE, diff --git a/t/lib/t/MusicBrainz/Server/Edit/Medium/AddDiscID.pm b/t/lib/t/MusicBrainz/Server/Edit/Medium/AddDiscID.pm index 30eb2677795..604715a8619 100644 --- a/t/lib/t/MusicBrainz/Server/Edit/Medium/AddDiscID.pm +++ b/t/lib/t/MusicBrainz/Server/Edit/Medium/AddDiscID.pm @@ -6,13 +6,13 @@ use Test::Fatal; around run_test => sub { my ($orig, $test) = splice(@_, 0, 2); MusicBrainz::Server::Test->prepare_test_database($test->c, '+edit_medium'); - MusicBrainz::Server::Test->prepare_test_database($test->c, <<~'EOSQL'); + MusicBrainz::Server::Test->prepare_test_database($test->c, <<~'SQL'); INSERT INTO track (id, gid, name, medium, recording, artist_credit, position, number) VALUES (1, '15d6a884-0274-486c-81fe-94ff57b8cf36', 1, 1, 1, 1, 1, 1), (2, '03d0854f-6053-416c-a67f-8c79a796ed39', 1, 1, 1, 1, 2, 2), (3, '04a37721-9932-48b8-b2a8-b4754c1bff73', 'Pregap Track', 2, 2, 1, 0, '0'), (4, '4b194683-837f-4fe6-bc96-d2098157b587', 'Track', 2, 1, 1, 1, '1'); - EOSQL + SQL $test->_clear_edit; $test->$orig(@_); }; diff --git a/t/lib/t/MusicBrainz/Server/Edit/Medium/Delete.pm b/t/lib/t/MusicBrainz/Server/Edit/Medium/Delete.pm index fc1ad40137e..b73358f7452 100644 --- a/t/lib/t/MusicBrainz/Server/Edit/Medium/Delete.pm +++ b/t/lib/t/MusicBrainz/Server/Edit/Medium/Delete.pm @@ -51,11 +51,11 @@ test 'Deleting a medium will also delete its tracks' => sub { my $c = $test->c; MusicBrainz::Server::Test->prepare_test_database($c, '+edit_medium'); - MusicBrainz::Server::Test->prepare_test_database($c, <<~'EOSQL'); + MusicBrainz::Server::Test->prepare_test_database($c, <<~'SQL'); INSERT INTO track (id, gid, name, medium, recording, artist_credit, position, number) VALUES (1, '15d6a884-0274-486c-81fe-94ff57b8cf36', 1, 1, 1, 1, 1, 'A1'), (2, '03d0854f-6053-416c-a67f-8c79a796ed39', 1, 1, 1, 1, 2, 'A2'); - EOSQL + SQL my $edit = _create_edit($c); accept_edit($c, $edit); diff --git a/t/lib/t/MusicBrainz/Server/Edit/Medium/MoveDiscID.pm b/t/lib/t/MusicBrainz/Server/Edit/Medium/MoveDiscID.pm index 74682b87751..ed44bbf7808 100644 --- a/t/lib/t/MusicBrainz/Server/Edit/Medium/MoveDiscID.pm +++ b/t/lib/t/MusicBrainz/Server/Edit/Medium/MoveDiscID.pm @@ -51,9 +51,9 @@ test 'Moving a DiscID to the medium it already is attached to does not change an my $c = $test->c; MusicBrainz::Server::Test->prepare_test_database($c, '+cdtoc'); - MusicBrainz::Server::Test->prepare_test_database($c, <<~'EOSQL'); + MusicBrainz::Server::Test->prepare_test_database($c, <<~'SQL'); DELETE FROM medium_cdtoc WHERE id = 2; - EOSQL + SQL my $medium = $c->model('Medium')->get_by_id(1); my $medium_cdtoc = $c->model('MediumCDTOC')->get_by_id(1); diff --git a/t/lib/t/MusicBrainz/Server/Edit/Recording/Create.pm b/t/lib/t/MusicBrainz/Server/Edit/Recording/Create.pm index 08740418327..7d4237c4143 100644 --- a/t/lib/t/MusicBrainz/Server/Edit/Recording/Create.pm +++ b/t/lib/t/MusicBrainz/Server/Edit/Recording/Create.pm @@ -17,7 +17,7 @@ use MusicBrainz::Server::Constants qw( :edit_status ); around run_test => sub { my ($orig, $test, @args) = @_; - MusicBrainz::Server::Test->prepare_test_database($test->c, <<~'EOSQL'); + MusicBrainz::Server::Test->prepare_test_database($test->c, <<~'SQL'); INSERT INTO artist (id, gid, name, sort_name) VALUES (1, 'a9d99e40-72d7-11de-8a39-0800200c9a66', 'Name', 'Name'); INSERT INTO artist_credit (id, name, artist_count) VALUES (1, 'Name', 1); @@ -28,7 +28,7 @@ around run_test => sub { VALUES (22, 'エアリアル', 22, 1, '888695fa-8acf-4ddb-8726-23edf32e48c5'); INSERT INTO medium (id, release, position) VALUES (22, 22, 1); ALTER SEQUENCE artist_id_seq RESTART 2; - EOSQL + SQL $test->$orig(@args); }; @@ -66,12 +66,12 @@ test 'Reject when in use' => sub { my $edit = create_edit($test->c, privileges => $UNTRUSTED_FLAG); my $entity_id = $edit->entity_id; - $test->c->sql->do(<<~"EOSQL"); + $test->c->sql->do(<<~"SQL"); INSERT INTO track (id, gid, medium, artist_credit, name, recording, position, number) VALUES (1, '32b10778-137d-46bd-957d-2bef4435882f', 22, (SELECT id FROM artist_credit LIMIT 1), (SELECT name FROM recording LIMIT 1), $entity_id, 1, 1); - EOSQL + SQL reject_edit($test->c, $edit); diff --git a/t/lib/t/MusicBrainz/Server/Edit/Relationship/Edit.pm b/t/lib/t/MusicBrainz/Server/Edit/Relationship/Edit.pm index f8fcd9986ad..4abae4dcb4c 100644 --- a/t/lib/t/MusicBrainz/Server/Edit/Relationship/Edit.pm +++ b/t/lib/t/MusicBrainz/Server/Edit/Relationship/Edit.pm @@ -201,7 +201,7 @@ test 'Editing a relationship refreshes existing cover art' => sub { my $test = shift; my $c = $test->c; - $c->sql->do(<<~'EOSQL'); + $c->sql->do(<<~'SQL'); INSERT INTO artist (id, gid, name, sort_name) VALUES (1, '9d0ed9ec-ebd4-40d3-80ec-af70c07c3667', 'Artist', 'Artist'); INSERT INTO artist_credit (id, artist_count, name) VALUES (1, 1, 'Artist'); @@ -224,7 +224,7 @@ test 'Editing a relationship refreshes existing cover art' => sub { INSERT INTO link (id, link_type) VALUES (1, 78); UPDATE link_type SET is_deprecated = TRUE WHERE id = 78; INSERT INTO l_release_url (id, entity0, entity1, link) VALUES (1, 1, 1, 1); - EOSQL + SQL my $rel = $c->model('Relationship')->get_by_id('release', 'url', 1); $c->model('Link')->load($rel); diff --git a/t/lib/t/MusicBrainz/Server/Edit/Release/DeleteReleaseLabel.pm b/t/lib/t/MusicBrainz/Server/Edit/Release/DeleteReleaseLabel.pm index 9240d8493e5..c7f00d98757 100644 --- a/t/lib/t/MusicBrainz/Server/Edit/Release/DeleteReleaseLabel.pm +++ b/t/lib/t/MusicBrainz/Server/Edit/Release/DeleteReleaseLabel.pm @@ -99,10 +99,10 @@ test q(Loads correctly when there's just a catalog number) => sub { my $c = $test->c; MusicBrainz::Server::Test->prepare_test_database($c, '+edit_release_label'); - $c->sql->do(<<~'EOSQL'); + $c->sql->do(<<~'SQL'); INSERT INTO release_label (id, release, label, catalog_number) VALUES (2, 1, NULL, 'ABC-456'); - EOSQL + SQL my $edit = create_edit($c, 2); $c->model('Edit')->load_all($edit); diff --git a/t/lib/t/MusicBrainz/Server/Edit/Release/Edit.pm b/t/lib/t/MusicBrainz/Server/Edit/Release/Edit.pm index de81eccec0b..0fba17b6c16 100644 --- a/t/lib/t/MusicBrainz/Server/Edit/Release/Edit.pm +++ b/t/lib/t/MusicBrainz/Server/Edit/Release/Edit.pm @@ -17,10 +17,10 @@ test 'Editing releases should not remove release events' => sub { my $c = $test->c; MusicBrainz::Server::Test->prepare_test_database($c, '+edit_release'); - $c->sql->do(<<~'EOSQL'); + $c->sql->do(<<~'SQL'); INSERT INTO release_unknown_country (release, date_year) VALUES (1, 2000); - EOSQL + SQL my $load_release = sub { $c->model('Release')->get_by_id(1) }; diff --git a/t/lib/t/MusicBrainz/Server/Edit/Release/EditReleaseLabel.pm b/t/lib/t/MusicBrainz/Server/Edit/Release/EditReleaseLabel.pm index 64d0ca84ff3..50ddd67ba69 100644 --- a/t/lib/t/MusicBrainz/Server/Edit/Release/EditReleaseLabel.pm +++ b/t/lib/t/MusicBrainz/Server/Edit/Release/EditReleaseLabel.pm @@ -303,10 +303,10 @@ test 'Can add a label where one is currently missing' => sub { my $c = $test->c; MusicBrainz::Server::Test->prepare_test_database($c, '+edit_release_label'); - $c->sql->do(<<~'EOSQL'); + $c->sql->do(<<~'SQL'); INSERT INTO release_label (id, release, label, catalog_number) VALUES (2, 1, NULL, 'ABC-456'); - EOSQL + SQL my $edit = create_edit( $c, @@ -323,10 +323,10 @@ test q(Edits that only change the catalog number show up in the label's edit his my $c = $test->c; MusicBrainz::Server::Test->prepare_test_database($c, '+edit_release_label'); - $c->sql->do(<<~'EOSQL'); + $c->sql->do(<<~'SQL'); INSERT INTO release_label (id, release, label, catalog_number) VALUES (2, 1, 2, 'FOO'); - EOSQL + SQL my $edit = create_edit( $c, @@ -342,10 +342,10 @@ test 'Edits that only change the catalog number still store and display the labe my $c = $test->c; MusicBrainz::Server::Test->prepare_test_database($c, '+edit_release_label'); - $c->sql->do(<<~'EOSQL'); + $c->sql->do(<<~'SQL'); INSERT INTO release_label (id, release, label, catalog_number) VALUES (2, 1, 2, 'FOO'); - EOSQL + SQL my $edit = create_edit( $c, @@ -374,10 +374,10 @@ test 'Edits that only change the label still store and display the catalog numbe my $c = $test->c; MusicBrainz::Server::Test->prepare_test_database($c, '+edit_release_label'); - $c->sql->do(<<~'EOSQL'); + $c->sql->do(<<~'SQL'); INSERT INTO release_label (id, release, label, catalog_number) VALUES (2, 1, 2, 'FOO'); - EOSQL + SQL my $edit = create_edit( $c, diff --git a/t/lib/t/MusicBrainz/Server/Edit/Release/Merge.pm b/t/lib/t/MusicBrainz/Server/Edit/Release/Merge.pm index 1bb2e73fe28..7d4021965fa 100644 --- a/t/lib/t/MusicBrainz/Server/Edit/Release/Merge.pm +++ b/t/lib/t/MusicBrainz/Server/Edit/Release/Merge.pm @@ -254,7 +254,7 @@ test 'Relationships used as documentation examples are merged (MBS-8516)' => sub my $c = $test->c; MusicBrainz::Server::Test->prepare_test_database($c, '+release'); - MusicBrainz::Server::Test->prepare_test_database($c, <<~'EOSQL'); + MusicBrainz::Server::Test->prepare_test_database($c, <<~'SQL'); INSERT INTO url (id, gid, url) VALUES (1, '4ced912c-11a5-4d7d-b280-b5adf30d81b3', 'http://en.wikipedia.org/wiki/Release'); @@ -273,7 +273,7 @@ test 'Relationships used as documentation examples are merged (MBS-8516)' => sub INSERT INTO documentation.l_release_url_example (id, published, name) VALUES (1, TRUE, 'E1'), (2, TRUE, 'E2'), (3, TRUE, 'E3'); - EOSQL + SQL my $edit = $c->model('Edit')->create( edit_type => $EDIT_RELEASE_MERGE, @@ -400,10 +400,10 @@ test 'Release merges should not fail if a recording is both a merge source and m MusicBrainz::Server::Test->prepare_test_database($c, '+mbs-8614'); - $c->sql->do(<<~'EOSQL'); + $c->sql->do(<<~'SQL'); INSERT INTO editor (id, name, password, email, email_confirm_date, ha1) VALUES (1, 'new_editor', '{CLEARTEXT}password', 'example@example.com', '2005-10-20', 'e1dd8fee8ee728b0ddc8027d3a3db478'); - EOSQL + SQL my $edit = $c->model('Edit')->create( edit_type => $EDIT_RELEASE_MERGE, diff --git a/t/lib/t/MusicBrainz/Server/Edit/Release/ReorderMediums.pm b/t/lib/t/MusicBrainz/Server/Edit/Release/ReorderMediums.pm index 0c5dd25fd36..9736c5b7ab8 100644 --- a/t/lib/t/MusicBrainz/Server/Edit/Release/ReorderMediums.pm +++ b/t/lib/t/MusicBrainz/Server/Edit/Release/ReorderMediums.pm @@ -14,7 +14,7 @@ use MusicBrainz::Server::Test qw( accept_edit reject_edit ); around run_test => sub { my ($orig, $test, @args) = @_; - $test->c->sql->do(<<~'EOSQL'); + $test->c->sql->do(<<~'SQL'); INSERT INTO artist (id, gid, name, sort_name) VALUES (1, 'a9d99e40-72d7-11de-8a39-0800200c9a66', 'Name', 'Name'); @@ -34,7 +34,7 @@ around run_test => sub { (103, 1, 1, 3), (104, 1, 1, 4), (105, 1, 1, 5); - EOSQL + SQL $test->clear_edit; $test->clear_release; @@ -128,10 +128,10 @@ test 'MBS-8580' => sub { ok($edit->is_open); - $c->sql->do(<<~'EOSQL'); + $c->sql->do(<<~'SQL'); INSERT INTO medium (id, release, position, format, name) VALUES (106, 1, 6, NULL, ''); - EOSQL + SQL isa_ok exception { $edit->accept }, 'MusicBrainz::Server::Edit::Exceptions::FailedDependency'; diff --git a/t/lib/t/MusicBrainz/Server/Edit/Series/Merge.pm b/t/lib/t/MusicBrainz/Server/Edit/Series/Merge.pm index f89817abbb4..c8e9c4f8687 100644 --- a/t/lib/t/MusicBrainz/Server/Edit/Series/Merge.pm +++ b/t/lib/t/MusicBrainz/Server/Edit/Series/Merge.pm @@ -92,7 +92,7 @@ test 'Can merge series with editors subscribed at both ends' => sub { my $c = $test->c; MusicBrainz::Server::Test->prepare_test_database($c, '+series'); - $c->sql->do(<<~'EOSQL'); + $c->sql->do(<<~'SQL'); INSERT INTO editor (id, name, password, ha1, email, email_confirm_date) VALUES (10, 'Fred', '{CLEARTEXT}mb', '', '', now()); @@ -104,7 +104,7 @@ test 'Can merge series with editors subscribed at both ends' => sub { VALUES (10, 1, 1), (10, 3, 1); ALTER SEQUENCE edit_id_seq RESTART 2; - EOSQL + SQL my $edit = create_merge_edit($c); $edit->accept; diff --git a/t/lib/t/MusicBrainz/Server/Edit/Work/Edit.pm b/t/lib/t/MusicBrainz/Server/Edit/Work/Edit.pm index 8d4cc470c79..e43baa482c3 100644 --- a/t/lib/t/MusicBrainz/Server/Edit/Work/Edit.pm +++ b/t/lib/t/MusicBrainz/Server/Edit/Work/Edit.pm @@ -15,14 +15,14 @@ use MusicBrainz::Server::Test qw( accept_edit reject_edit ); test 'Old edit work edits to add ISWCs still pass (insert)' => sub { my $test = shift; my $c = $test->c; - $c->sql->do(<<~'EOSQL'); + $c->sql->do(<<~'SQL'); INSERT INTO work (id, gid, name) VALUES (1, '51546e7c-b11d-410e-a0ff-6c88aa91f5ac', 'Work'); INSERT INTO edit (expire_time, id, editor, type, status) VALUES (now(), 1, 1, 42, 1); INSERT INTO edit_data (edit, data) VALUES (1, '{"entity":{"name":"Work","id":1},"new":{"iswc":"T-910.986.678-6"},"old":{"iswc":null}}'); - EOSQL + SQL $c->model('Edit')->accept($c->model('Edit')->get_by_id(1)); @@ -33,7 +33,7 @@ test 'Old edit work edits to add ISWCs still pass (insert)' => sub { test 'Old edit work edits to add ISWCs still pass (update)' => sub { my $test = shift; my $c = $test->c; - $c->sql->do(<<~'EOSQL'); + $c->sql->do(<<~'SQL'); INSERT INTO work (id, gid, name) VALUES (1, '51546e7c-b11d-410e-a0ff-6c88aa91f5ac', 'Work'); INSERT INTO iswc (id, work, iswc) VALUES (1, 1, 'T-110.986.678-6'); @@ -41,7 +41,7 @@ test 'Old edit work edits to add ISWCs still pass (update)' => sub { VALUES (now(), 1, 1, 42, 1); INSERT INTO edit_data (edit, data) VALUES (1, '{"entity":{"name":"Work","id":1},"new":{"iswc":"T-910.986.678-6"},"old":{"iswc":"T-110.986.678-6"}}'); - EOSQL + SQL $c->model('Edit')->accept($c->model('Edit')->get_by_id(1)); @@ -52,7 +52,7 @@ test 'Old edit work edits to add ISWCs still pass (update)' => sub { test 'Old edit work edits to add ISWCs still pass (delete)' => sub { my $test = shift; my $c = $test->c; - $c->sql->do(<<~'EOSQL'); + $c->sql->do(<<~'SQL'); INSERT INTO work (id, gid, name) VALUES (1, '51546e7c-b11d-410e-a0ff-6c88aa91f5ac', 'Work'); INSERT INTO iswc (id, work, iswc) VALUES (1, 1, 'T-110.986.678-6'); @@ -60,7 +60,7 @@ test 'Old edit work edits to add ISWCs still pass (delete)' => sub { VALUES (now(), 1, 1, 42, 1); INSERT INTO edit_data (edit, data) VALUES (1, '{"entity":{"name":"Work","id":1},"new":{"iswc":null},"old":{"iswc":"T-110.986.678-6"}}'); - EOSQL + SQL $c->model('Edit')->accept($c->model('Edit')->get_by_id(1)); @@ -71,7 +71,7 @@ test 'Old edit work edits to add ISWCs still pass (delete)' => sub { test 'Old edit work edits to add ISWCs still pass (conflict)' => sub { my $test = shift; my $c = $test->c; - $c->sql->do(<<~'EOSQL'); + $c->sql->do(<<~'SQL'); INSERT INTO work (id, gid, name) VALUES (1, '51546e7c-b11d-410e-a0ff-6c88aa91f5ac', 'Work'); INSERT INTO iswc (id, work, iswc) VALUES (1, 1, 'T-110.986.678-6'); @@ -79,7 +79,7 @@ test 'Old edit work edits to add ISWCs still pass (conflict)' => sub { VALUES (now(), 1, 1, 42, 1); INSERT INTO edit_data (edit, data) VALUES (1, '{"entity":{"name":"Work","id":1},"new":{"iswc":"T-910.986.678-6"},"old":{"iswc":null}}'); - EOSQL + SQL $c->model('Edit')->accept($c->model('Edit')->get_by_id(1)); diff --git a/t/lib/t/MusicBrainz/Server/EditQueue.pm b/t/lib/t/MusicBrainz/Server/EditQueue.pm index e2c4672a7b7..cfd92c90938 100644 --- a/t/lib/t/MusicBrainz/Server/EditQueue.pm +++ b/t/lib/t/MusicBrainz/Server/EditQueue.pm @@ -53,11 +53,11 @@ has 'edit_queue' => ( test 'Edit queue does not close open edits with insufficient votes' => sub { my $test = shift; - $test->c->sql->do(<<~"EOSQL"); + $test->c->sql->do(<<~"SQL"); INSERT INTO editor (id, name, password, ha1, email, email_confirm_date) VALUES (10, 'Editor', '{CLEARTEXT}pass', 'b5ba49bbd92eb35ddb35b5acd039440d', '', now()); INSERT INTO edit (id, editor, type, status, open_time, expire_time) VALUES (101, 10, $mock_class, 1, now() - interval '6 days', now() + interval '1 day'); INSERT INTO edit_data (edit, data) VALUES (101, '{}'); - EOSQL + SQL my $errors = $test->edit_queue->process_edits; is($errors, 0, 'without errors'); @@ -73,7 +73,7 @@ test 'Edit queue correctly handles locked edits' => sub { my $other_dbh = MusicBrainz::Server::DatabaseConnectionFactory->get_connection('TEST', fresh => 1); Sql::run_in_transaction(sub { - $other_dbh->sql->do(<<~"EOSQL"); + $other_dbh->sql->do(<<~"SQL"); INSERT INTO editor (id, name, password, ha1, email, email_confirm_date) VALUES (10, 'Editor', '{CLEARTEXT}pass', 'b5ba49bbd92eb35ddb35b5acd039440d', '', now()); INSERT INTO edit (id, editor, type, status, open_time, expire_time) VALUES (101, 10, $mock_class, 1, now() - interval '7 days', now()); INSERT INTO edit_data (edit, data) VALUES (101, '{}'); @@ -82,7 +82,7 @@ test 'Edit queue correctly handles locked edits' => sub { SELECT generate_series(11, 15), 'Voter ' || generate_series(1, 5), '{CLEARTEXT}pass', 'b5ba49bbd92eb35ddb35b5acd039440d', '', now(); INSERT INTO vote (editor, vote, vote_time, edit) SELECT generate_series(11, 15), 1, now(), 101; - EOSQL + SQL }, $other_dbh->sql); my $c = $test->c->meta->clone_object($test->c, connector => $edit_queue_dbh); @@ -119,7 +119,7 @@ test 'Edit queue correctly handles locked edits' => sub { test 'Edit queue can close edits with sufficient yes votes early' => sub { my $test = shift; - $test->c->sql->do(<<~"EOSQL"); + $test->c->sql->do(<<~"SQL"); INSERT INTO editor (id, name, password, ha1, email, email_confirm_date) VALUES (10, 'Editor', '{CLEARTEXT}pass', 'b5ba49bbd92eb35ddb35b5acd039440d', '', now()); INSERT INTO edit (id, editor, type, status, open_time, expire_time) VALUES (101, 10, $mock_class, 1, now() - interval '5 days', now() + interval '2 days'); @@ -129,7 +129,7 @@ test 'Edit queue can close edits with sufficient yes votes early' => sub { SELECT generate_series(11, 15), 'Voter ' || generate_series(1, 5), '{CLEARTEXT}pass', 'b5ba49bbd92eb35ddb35b5acd039440d', '', now(); INSERT INTO vote (editor, vote, vote_time, edit) SELECT generate_series(11, 15), 1, now(), 101; - EOSQL + SQL my $errors = $test->edit_queue->process_edits; is($errors, 0, 'without errors'); @@ -140,7 +140,7 @@ test 'Edit queue can close edits with sufficient yes votes early' => sub { test q(Edit queue won't close recent destructive edits even with sufficient yes votes) => sub { my $test = shift; - $test->c->sql->do(<<~"EOSQL"); + $test->c->sql->do(<<~"SQL"); INSERT INTO editor (id, name, password, ha1, email, email_confirm_date) VALUES (10, 'Editor', '{CLEARTEXT}pass', 'b5ba49bbd92eb35ddb35b5acd039440d', '', now()); INSERT INTO edit (id, editor, type, status, open_time, expire_time) VALUES (101, 10, $mock_class, 1, now() - interval '3 hours', now() + interval '6 days 21 hours'); @@ -150,7 +150,7 @@ test q(Edit queue won't close recent destructive edits even with sufficient yes SELECT generate_series(11, 15), 'Voter ' || generate_series(1, 5), '{CLEARTEXT}pass', 'b5ba49bbd92eb35ddb35b5acd039440d', '', now(); INSERT INTO vote (editor, vote, vote_time, edit) SELECT generate_series(11, 15), 1, now(), 101; - EOSQL + SQL my $errors = $test->edit_queue->process_edits; is($errors, 0, 'without errors'); diff --git a/t/lib/t/MusicBrainz/Server/Form/Area.pm b/t/lib/t/MusicBrainz/Server/Form/Area.pm index d429ab89d79..76fa6ba244a 100644 --- a/t/lib/t/MusicBrainz/Server/Form/Area.pm +++ b/t/lib/t/MusicBrainz/Server/Form/Area.pm @@ -59,10 +59,10 @@ for my $config ( sub prepare_conflict { my ($c, $iso_field, $iso_code) = @_; - $c->sql->do(<<~"EOSQL"); + $c->sql->do(<<~"SQL"); INSERT INTO area (id, gid, name) VALUES (1, '$AREA_GID', 'Area'); INSERT INTO $iso_field (area, code) VALUES (1, '$iso_code'); - EOSQL + SQL } sub form_context { diff --git a/t/script/BuildSitemaps.t b/t/script/BuildSitemaps.t index 57ef5f76dc9..2f6b2fce232 100644 --- a/t/script/BuildSitemaps.t +++ b/t/script/BuildSitemaps.t @@ -26,7 +26,7 @@ test 'Sitemap build scripts' => sub { system 'sh', '-c' => "echo $sql | $psql TEST_SITEMAPS"; }; - $exec_sql->(<<~'EOSQL'); + $exec_sql->(<<~'SQL'); DO $$ BEGIN EXECUTE 'ALTER DATABASE ' || current_database() || @@ -41,7 +41,7 @@ test 'Sitemap build scripts' => sub { INSERT INTO artist_credit_name (artist_credit, position, artist, name, join_phrase) VALUES (1, 0, 1, 'A', ''); - EOSQL + SQL my $tmp = tempdir('t-sitemaps-XXXXXXXX', DIR => '/tmp', CLEANUP => 1); my $output_dir = File::Spec->catdir($tmp, 'sitemaps'); @@ -312,12 +312,12 @@ EOF 3\tf\t"id"='3' "name"='C' "gid"='79e0f9b8-db97-4bfb-9995-217478dd6c3e' "last_updated"='2015-10-04 00:01:02.050000+00'\x{20} EOF - $exec_sql->(<<~'EOSQL'); + $exec_sql->(<<~'SQL'); INSERT INTO work (id, gid, name) VALUES (1, 'daf4327f-19a0-450b-9448-e0ea1c707136', 'A'), (2, 'b6c76104-d64c-4883-b395-c74f782b751c', 'B'), (3, '79e0f9b8-db97-4bfb-9995-217478dd6c3e', 'C'); - EOSQL + SQL $build_packet->(2, $dbmirror_pending, $dbmirror_pendingdata); my $build_time3 = '2015-10-04T03:33:33.030000Z'; @@ -406,7 +406,7 @@ EOF 4\tf\t"id"='3' "gid"='79e0f9b8-db97-4bfb-9995-217478dd6c3e' "name"='C?' "type"= "comment"='' "edits_pending"='0' "last_updated"='2017-04-05 01:12:36.172561+00' "language"=\x{20} EOF - $exec_sql->(<<~'EOSQL'); + $exec_sql->(<<~'SQL'); INSERT INTO iswc (id, work, iswc, created) VALUES (1, 1, 'T-100.000.000-1', '2015-10-05 06:54:32.101234-05'); INSERT INTO link (id, link_type, attribute_count, ended, created) @@ -414,7 +414,7 @@ EOF INSERT INTO l_artist_work (id, link, entity0, entity1, last_updated) VALUES (1, 1, 1, 2, '2017-04-05 00:59:46.503449+00'); UPDATE work SET name = 'C?' WHERE id = 3; - EOSQL + SQL $build_packet->(3, $dbmirror_pending, $dbmirror_pendingdata); my $build_time4 = '2015-10-05T13:59:59.000123Z'; @@ -589,7 +589,7 @@ EOF 16\tf\t"id"='13' "release"='2' "position"='1' "track_count"='102'\x{20} EOF - $exec_sql->(<<~'EOSQL'); + $exec_sql->(<<~'SQL'); INSERT INTO release_group (id, gid, name, artist_credit, last_updated) VALUES (1, 'b8f8a738-f75c-43df-9f3f-7afb3ceb5173', 'R', 1, '2021-06-10 20:59:59.571049+00'); @@ -610,15 +610,15 @@ EOF (11, 1, 11, 1), (12, 1, 13, 1); - EOSQL + SQL - $exec_sql->(<<~'EOSQL'); + $exec_sql->(<<~'SQL'); INSERT INTO release (id, gid, name, artist_credit, release_group, last_updated) VALUES (2, '996d3d48-0cfa-4d30-9031-ea50d806b88a', 'R2', 1, 1, '2021-06-10 20:59:59.571049+00'); INSERT INTO medium (id, release, position, track_count) VALUES (13, 2, 1, 102); - EOSQL + SQL $build_packet->(5, $dbmirror_pending, $dbmirror_pendingdata); @@ -713,12 +713,12 @@ EOF }, ]); - $exec_sql->(<<~'EOSQL'); + $exec_sql->(<<~'SQL'); TRUNCATE artist CASCADE; TRUNCATE work CASCADE; TRUNCATE sitemaps.control; TRUNCATE sitemaps.tmp_checked_entities; - EOSQL + SQL }; run_me; diff --git a/t/script/DumpJSON.t b/t/script/DumpJSON.t index 8f1f2b9aa0b..a47d2fa64bf 100755 --- a/t/script/DumpJSON.t +++ b/t/script/DumpJSON.t @@ -38,12 +38,12 @@ test all => sub { system 'sh', '-c' => "echo $sql | $psql TEST_JSON_DUMP"; }; - $exec_sql->(<<~"EOSQL"); + $exec_sql->(<<~"SQL"); INSERT INTO replication_control (current_schema_sequence, current_replication_sequence, last_replication_date) VALUES ($schema_seq, 1, now() - interval '1 hour'); INSERT INTO artist (id, gid, name, sort_name) VALUES (1, '30238ead-59fa-41e2-a7ab-b7f6e6363c4b', 'Blue Guy', 'Blues Guy'); - EOSQL + SQL my $output_dir; my $new_output_dir = sub { @@ -613,7 +613,7 @@ EOF ]); $test_dumps_empty_except->($output_dir, qw( artist recording release-group work )); - $exec_sql->(<<~'EOSQL'); + $exec_sql->(<<~'SQL'); TRUNCATE artist CASCADE; TRUNCATE artist_credit CASCADE; TRUNCATE artist_credit_name CASCADE; @@ -625,7 +625,7 @@ EOF TRUNCATE work CASCADE; TRUNCATE json_dump.control; TRUNCATE json_dump.tmp_checked_entities; - EOSQL + SQL }; run_me; diff --git a/t/script/ExportAllTables.t b/t/script/ExportAllTables.t index 6572b47801c..2f503df8e61 100755 --- a/t/script/ExportAllTables.t +++ b/t/script/ExportAllTables.t @@ -34,7 +34,7 @@ test all => sub { my $long_unicode_tag1 = '松' x 255; my $long_unicode_tag2 = '変' x 255; - $exec_sql->(<<~"EOSQL"); + $exec_sql->(<<~"SQL"); BEGIN; INSERT INTO replication_control (current_schema_sequence, current_replication_sequence, last_replication_date) VALUES ($schema_seq, 1, now() - interval '1 hour'); @@ -66,7 +66,7 @@ test all => sub { '35c1f5f73559130eddbef34e50e22ad6', 'f' ); COMMIT; - EOSQL + SQL system ( File::Spec->catfile($root, 'admin/ExportAllTables'), @@ -83,7 +83,7 @@ test all => sub { system("cd $quoted_output_dir && sha256sum -c SHA256SUMS") == 0 or die $!; - $exec_sql->(<<~"EOSQL"); + $exec_sql->(<<~"SQL"); SET client_min_messages TO WARNING; INSERT INTO dbmirror_pending VALUES (1, '"musicbrainz"."artist"', 'i', 1), @@ -96,7 +96,7 @@ test all => sub { (2, 'f', '"name"=''Updated A'' '), (3, 'f', '"id"=''2'' "name"=''$long_unicode_tag2'' "ref_count"=''1'' '), (4, 'f', '"artist"=''667'' "tag"=''2'' "count"=''1'' "last_updated"=''2016-05-03 20:00:00+00'' '); - EOSQL + SQL system ( File::Spec->catfile($root, 'admin/ExportAllTables'), @@ -129,12 +129,12 @@ test all => sub { my $replication_setup = File::Spec->catfile($root, 'admin/sql/ReplicationSetup.sql'); system 'sh', '-c' => "$psql TEST_FULL_EXPORT < $replication_setup"; - $exec_sql->(<<~"EOSQL"); + $exec_sql->(<<~"SQL"); SET client_min_messages TO WARNING; TRUNCATE replication_control CASCADE; INSERT INTO replication_control (current_schema_sequence, current_replication_sequence, last_replication_date) VALUES ($schema_seq, 1, now() - interval '1 hour'); - EOSQL + SQL system ( File::Spec->catfile($root, 'admin/replication/LoadReplicationChanges'), @@ -247,12 +247,12 @@ test all => sub { }, ]); - $exec_sql->(<<~'EOSQL'); + $exec_sql->(<<~'SQL'); SET client_min_messages TO WARNING; TRUNCATE artist CASCADE; TRUNCATE artist_tag CASCADE; TRUNCATE tag CASCADE; - EOSQL + SQL }; run_me; diff --git a/t/script/MergeDuplicateArtistCredits.t b/t/script/MergeDuplicateArtistCredits.t index 56fa4e7bd04..9dd7f05ba09 100644 --- a/t/script/MergeDuplicateArtistCredits.t +++ b/t/script/MergeDuplicateArtistCredits.t @@ -21,7 +21,7 @@ test all => sub { system 'sh', '-c' => "echo $sql | $psql TEST"; }; - $exec_sql->(<<~'EOSQL'); + $exec_sql->(<<~'SQL'); BEGIN; INSERT INTO artist VALUES @@ -69,7 +69,7 @@ test all => sub { (15351681, '6d0598f0-a044-409f-a77a-97bbbb072b14', 1723928, 1372126, 12, 12, 'Blood Money (remix)', 1216448, 237000, 0, '2015-09-03 01:00:44.001512+00', 'f'); COMMIT; - EOSQL + SQL # Should skip all ACs with edits_pending != 0 system ( @@ -259,7 +259,7 @@ test all => sub { }, ]); - $exec_sql->(<<~'EOSQL'); + $exec_sql->(<<~'SQL'); SET client_min_messages TO WARNING; TRUNCATE artist CASCADE; TRUNCATE artist_credit CASCADE; @@ -269,7 +269,7 @@ test all => sub { TRUNCATE medium CASCADE; TRUNCATE recording CASCADE; TRUNCATE track CASCADE; - EOSQL + SQL }; run_me; diff --git a/t/selenium/External_Links_Editor.json5 b/t/selenium/External_Links_Editor.json5 index 0db7c5d9929..fe5be7d4b69 100644 --- a/t/selenium/External_Links_Editor.json5 +++ b/t/selenium/External_Links_Editor.json5 @@ -189,7 +189,7 @@ // Test keeping changes when lost focus { command: 'click', - target: "xpath=(//table[@id='external-links-editor']//input[@type='url'])[1]", + target: "xpath=(//table[@id='external-links-editor']//span[contains(@class, 'favicon')])[1]", value: '', }, // Open popover diff --git a/upgrade.json b/upgrade.json index 8c15f2adb88..5989f8d3cf3 100755 --- a/upgrade.json +++ b/upgrade.json @@ -105,6 +105,7 @@ "27": { "slave": ["20210526-a_upd_release_event.sql", "20210606-mbs-11682.sql"], - "standalone": ["20210702-mbs-11760.sql"] + "standalone": ["20210702-mbs-11760.sql", + "20210916-mbs-11896.sql"] } } diff --git a/yarn.lock b/yarn.lock index ef23ec02119..679fbafb0b8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2945,10 +2945,10 @@ flatted@^2.0.0: resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== -flow-bin@0.159.0: - version "0.159.0" - resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.159.0.tgz#f788480d54db6da021e3440648c1dbb5dbc8aee8" - integrity sha512-5SugX7mOdfruzn2/+42DF74bxJO2SGmSEzCvTH9wOoBi98Ie87D5Hmb9OoGfwAE5SnXJmB6OCwN2WDiJe4lI+w== +flow-bin@0.160.2: + version "0.160.2" + resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.160.2.tgz#4d579f6bbd48ca975e13237b66e503e0c519c8b9" + integrity sha512-vrsiPwcqdaBsuQmPZXjF0tdKqgoVc2wH+nHamvqFzvgnQLJMLN+N0seqaOMH8t/3YKnAEbY/uZ440mALE/+WLw== follow-redirects@^1.0.0: version "1.11.0"