[% l('Please enter the barcode of the release you are entering, see Barcode for more information.',
diff --git a/root/static/scripts/release-editor/bubbles.js b/root/static/scripts/release-editor/bubbles.js
index b30fcea5ed5..0d2d929274d 100644
--- a/root/static/scripts/release-editor/bubbles.js
+++ b/root/static/scripts/release-editor/bubbles.js
@@ -37,6 +37,10 @@ releaseEditor.dateBubble = bubbleDoc({
},
});
+releaseEditor.languageBubble = bubbleDoc();
+
+releaseEditor.scriptBubble = bubbleDoc();
+
releaseEditor.packagingBubble = bubbleDoc();
releaseEditor.labelBubble = bubbleDoc({
From 8be92ebf25cc4958c3bacab4ec90e2825cb6847f Mon Sep 17 00:00:00 2001
From: Michael Wiencek
Date: Sat, 7 Oct 2023 14:05:10 +0200
Subject: [PATCH 036/194] Upgrade Flow to 0.215.0
---
package.json | 2 +-
yarn.lock | 8 ++++----
2 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/package.json b/package.json
index 440e9db892b..4c4c3dab013 100644
--- a/package.json
+++ b/package.json
@@ -84,7 +84,7 @@
"eslint-plugin-react": "7.33.1",
"eslint-plugin-react-hooks": "4.6.0",
"file-url": "2.0.2",
- "flow-bin": "0.214.0",
+ "flow-bin": "0.215.0",
"gettext-parser": "3.1.0",
"hermes-eslint": "0.16.0",
"http-proxy": "1.18.1",
diff --git a/yarn.lock b/yarn.lock
index 24cc4276209..d04dde5f81a 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2662,10 +2662,10 @@ flatted@^3.2.7:
resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.9.tgz#7eb4c67ca1ba34232ca9d2d93e9886e611ad7daf"
integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==
-flow-bin@0.214.0:
- version "0.214.0"
- resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.214.0.tgz#3ace7984a69309392e056f96cf3bf8623fa93d1c"
- integrity sha512-rPexleFynYsxsBAPHqRvCIqzcRZ9KkPjlFbuOATmFlHyG6vdy9V+SWPYdzBtgsfhGbj9PZ14pzv1zzgNd7rmvQ==
+flow-bin@0.215.0:
+ version "0.215.0"
+ resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.215.0.tgz#6f6b42ab34a56758f381bbd0543173f06a20b7be"
+ integrity sha512-oleH4I3o1moLjN8wwfiiD4H9VVhgq6EP7y3xcrQaBMm0/qiYSmnhcSnqcDnc2KPTI9a+X2Z5BWSbO/lXeRTW5A==
follow-redirects@^1.0.0:
version "1.15.3"
From e1182d00fe3aec0d96a6f6ae18cf639762116aea Mon Sep 17 00:00:00 2001
From: Michael Wiencek
Date: Sat, 7 Oct 2023 14:05:49 +0200
Subject: [PATCH 037/194] Upgrade Flow to 0.215.1
---
package.json | 2 +-
yarn.lock | 8 ++++----
2 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/package.json b/package.json
index 4c4c3dab013..c99f13a48b0 100644
--- a/package.json
+++ b/package.json
@@ -84,7 +84,7 @@
"eslint-plugin-react": "7.33.1",
"eslint-plugin-react-hooks": "4.6.0",
"file-url": "2.0.2",
- "flow-bin": "0.215.0",
+ "flow-bin": "0.215.1",
"gettext-parser": "3.1.0",
"hermes-eslint": "0.16.0",
"http-proxy": "1.18.1",
diff --git a/yarn.lock b/yarn.lock
index d04dde5f81a..4faa69181e7 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2662,10 +2662,10 @@ flatted@^3.2.7:
resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.9.tgz#7eb4c67ca1ba34232ca9d2d93e9886e611ad7daf"
integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==
-flow-bin@0.215.0:
- version "0.215.0"
- resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.215.0.tgz#6f6b42ab34a56758f381bbd0543173f06a20b7be"
- integrity sha512-oleH4I3o1moLjN8wwfiiD4H9VVhgq6EP7y3xcrQaBMm0/qiYSmnhcSnqcDnc2KPTI9a+X2Z5BWSbO/lXeRTW5A==
+flow-bin@0.215.1:
+ version "0.215.1"
+ resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.215.1.tgz#1df7f284087a2edca89b6af5df8e7cc13f53f926"
+ integrity sha512-Q8Ed0w492tI9O/US11bC2Gtme0gkK/RNZBLTXBgSnRo3JaQor2cPRcKcwQX2mPBoV9/KrtAVVCnhzu4zTpkWTg==
follow-redirects@^1.0.0:
version "1.15.3"
From 4ca90a976e15ca0c08629ee4da4ffdbc389187f7 Mon Sep 17 00:00:00 2001
From: Michael Wiencek
Date: Sat, 7 Oct 2023 14:06:33 +0200
Subject: [PATCH 038/194] Upgrade Flow to 0.216.0
---
package.json | 2 +-
yarn.lock | 8 ++++----
2 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/package.json b/package.json
index c99f13a48b0..84163f6fda7 100644
--- a/package.json
+++ b/package.json
@@ -84,7 +84,7 @@
"eslint-plugin-react": "7.33.1",
"eslint-plugin-react-hooks": "4.6.0",
"file-url": "2.0.2",
- "flow-bin": "0.215.1",
+ "flow-bin": "0.216.0",
"gettext-parser": "3.1.0",
"hermes-eslint": "0.16.0",
"http-proxy": "1.18.1",
diff --git a/yarn.lock b/yarn.lock
index 4faa69181e7..ae0d59e7f2d 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2662,10 +2662,10 @@ flatted@^3.2.7:
resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.9.tgz#7eb4c67ca1ba34232ca9d2d93e9886e611ad7daf"
integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==
-flow-bin@0.215.1:
- version "0.215.1"
- resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.215.1.tgz#1df7f284087a2edca89b6af5df8e7cc13f53f926"
- integrity sha512-Q8Ed0w492tI9O/US11bC2Gtme0gkK/RNZBLTXBgSnRo3JaQor2cPRcKcwQX2mPBoV9/KrtAVVCnhzu4zTpkWTg==
+flow-bin@0.216.0:
+ version "0.216.0"
+ resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.216.0.tgz#7d5967fba730d4296ae41500ac0ba18c4924b056"
+ integrity sha512-f1+TsvnPEL0V7XerPhLkoX6XlEkEAkLbKT7Z5Y7LT4OLd5K2FlfZ9/ChsL/HXQFBqCjnNQJwJvAyiSPIa7+hCw==
follow-redirects@^1.0.0:
version "1.15.3"
From e80d8560899bc13c4d3559107b9141f7bbdcd05b Mon Sep 17 00:00:00 2001
From: Michael Wiencek
Date: Sat, 7 Oct 2023 14:07:02 +0200
Subject: [PATCH 039/194] Upgrade Flow to 0.216.1
---
package.json | 2 +-
yarn.lock | 8 ++++----
2 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/package.json b/package.json
index 84163f6fda7..c244aab9cb5 100644
--- a/package.json
+++ b/package.json
@@ -84,7 +84,7 @@
"eslint-plugin-react": "7.33.1",
"eslint-plugin-react-hooks": "4.6.0",
"file-url": "2.0.2",
- "flow-bin": "0.216.0",
+ "flow-bin": "0.216.1",
"gettext-parser": "3.1.0",
"hermes-eslint": "0.16.0",
"http-proxy": "1.18.1",
diff --git a/yarn.lock b/yarn.lock
index ae0d59e7f2d..1675821b228 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2662,10 +2662,10 @@ flatted@^3.2.7:
resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.9.tgz#7eb4c67ca1ba34232ca9d2d93e9886e611ad7daf"
integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==
-flow-bin@0.216.0:
- version "0.216.0"
- resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.216.0.tgz#7d5967fba730d4296ae41500ac0ba18c4924b056"
- integrity sha512-f1+TsvnPEL0V7XerPhLkoX6XlEkEAkLbKT7Z5Y7LT4OLd5K2FlfZ9/ChsL/HXQFBqCjnNQJwJvAyiSPIa7+hCw==
+flow-bin@0.216.1:
+ version "0.216.1"
+ resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.216.1.tgz#c370af830e46645087a2aea4056507cc44acc031"
+ integrity sha512-mdhkQiSSZ/nyPq/pmk2tdbV3btYTlTYqBT/96nSSTGQmvTWQ0no9XMLZ/SygNafL4PPerfkpwQwprA1M35+9Bg==
follow-redirects@^1.0.0:
version "1.15.3"
From 4a5c53d0678e8c9e3267c0229f9b898b06e0928a Mon Sep 17 00:00:00 2001
From: Michael Wiencek
Date: Thu, 19 Oct 2023 05:27:54 -0500
Subject: [PATCH 040/194] Fix indentation in PhraseVarArgs class
For some reason, the class members/methods were indented 3 spaces instead of 2.
---
.../static/scripts/edit/utility/linkPhrase.js | 76 +++++++++----------
1 file changed, 38 insertions(+), 38 deletions(-)
diff --git a/root/static/scripts/edit/utility/linkPhrase.js b/root/static/scripts/edit/utility/linkPhrase.js
index 924fc3536c0..8758491fe7c 100644
--- a/root/static/scripts/edit/utility/linkPhrase.js
+++ b/root/static/scripts/edit/utility/linkPhrase.js
@@ -54,44 +54,44 @@ class PhraseVarArgs
* didn't appear in the link phrase, so that we can display them
* separately).
*/
- +usedPhraseAttributes: Array;
-
- constructor(
- args: ?VarArgsObject,
- i18n: LinkPhraseI18n,
- entity0: ?T,
- entity1: ?T,
- ) {
- super(args || EMPTY_OBJECT);
- this.i18n = i18n;
- this.entity0 = nonEmpty(entity0) ? entity0 : '';
- this.entity1 = nonEmpty(entity1) ? entity1 : '';
- this.usedPhraseAttributes = [];
- }
-
- get(name: string): T | string {
- if (name === 'entity0') {
- return this.entity0;
- }
- if (name === 'entity1') {
- return this.entity1;
- }
- const attributes = this.data[name];
- if (attributes == null) {
- return '';
- }
- if (Array.isArray(attributes)) {
- return this.i18n.commaList(
- attributes.map(this.i18n.displayLinkAttribute),
- );
- }
- return this.i18n.displayLinkAttribute(attributes);
- }
-
- has(name: string): boolean {
- this.usedPhraseAttributes.push(name);
- return true;
- }
+ +usedPhraseAttributes: Array;
+
+ constructor(
+ args: ?VarArgsObject,
+ i18n: LinkPhraseI18n,
+ entity0: ?T,
+ entity1: ?T,
+ ) {
+ super(args || EMPTY_OBJECT);
+ this.i18n = i18n;
+ this.entity0 = nonEmpty(entity0) ? entity0 : '';
+ this.entity1 = nonEmpty(entity1) ? entity1 : '';
+ this.usedPhraseAttributes = [];
+ }
+
+ get(name: string): T | string {
+ if (name === 'entity0') {
+ return this.entity0;
+ }
+ if (name === 'entity1') {
+ return this.entity1;
+ }
+ const attributes = this.data[name];
+ if (attributes == null) {
+ return '';
+ }
+ if (Array.isArray(attributes)) {
+ return this.i18n.commaList(
+ attributes.map(this.i18n.displayLinkAttribute),
+ );
+ }
+ return this.i18n.displayLinkAttribute(attributes);
+ }
+
+ has(name: string): boolean {
+ this.usedPhraseAttributes.push(name);
+ return true;
+ }
}
export type LinkPhraseI18n = {
From 2e7cf4c8b626c44be19f95548e8f4e2e95d49a65 Mon Sep 17 00:00:00 2001
From: Michael Wiencek
Date: Fri, 20 Oct 2023 14:58:38 -0500
Subject: [PATCH 041/194] Remove unnecessary check in concatStringMatch
We don't need to check `gotMatch(match)` here, because `parseContinuous` only
invokes `matchCallback` on matches.
---
root/static/scripts/common/i18n/expand2.js | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/root/static/scripts/common/i18n/expand2.js b/root/static/scripts/common/i18n/expand2.js
index d40d250ebae..796ad35d01a 100644
--- a/root/static/scripts/common/i18n/expand2.js
+++ b/root/static/scripts/common/i18n/expand2.js
@@ -167,11 +167,11 @@ export function parseContinuous(
function concatStringMatch(
accum: string | NO_MATCH,
- match: string | NO_MATCH,
+ match: string,
): string {
return (
(gotMatch(accum) ? accum : '') +
- (gotMatch(match) ? match : '')
+ match
);
}
From 9a59f6d904997fa0066894bab8b08896b4ab167d Mon Sep 17 00:00:00 2001
From: Michael Wiencek
Date: Wed, 18 Oct 2023 10:28:29 -0500
Subject: [PATCH 042/194] Upgrade Flow to 0.217.0
https://github.com/facebook/flow/releases/tag/v0.217.0
The primary change here is that variance annotations in functions are no longer
supported. I guess they didn't do anything before, anyway -- kinda, because
simply removing them revealed some new errors that I've fixed here.
---
package.json | 2 +-
.../common/components/Autocomplete2.js | 6 ++--
.../components/Autocomplete2/formatters.js | 4 +--
.../components/Autocomplete2/recentItems.js | 8 ++---
.../components/Autocomplete2/reducer.js | 24 +++++++--------
.../components/Autocomplete2/searchItems.js | 14 ++++-----
root/static/scripts/common/i18n/expand2.js | 11 ++++---
.../scripts/common/i18n/expand2react.js | 2 +-
.../scripts/common/utility/buildOptionList.js | 2 +-
.../scripts/common/utility/cloneDeep.mjs | 10 +++----
.../common/utility/formatDatePeriod.js | 2 +-
.../scripts/common/utility/formatEndDate.js | 2 +-
root/static/scripts/common/utility/memoize.js | 6 ++--
.../scripts/common/utility/pThrottle.js | 4 +--
.../edit/components/edit/RelationshipDiff.js | 1 +
.../edit/components/withLoadedTypeInfo.js | 8 ++---
.../scripts/edit/utility/createField.js | 2 +-
root/static/scripts/edit/utility/editDiff.js | 2 +-
.../static/scripts/edit/utility/linkPhrase.js | 30 +++++++++----------
.../edit/utility/reducerWithErrorHandling.js | 2 +-
.../utility/exportTypeInfo.js | 4 +--
.../utility/prettyPrintRelationshipState.js | 2 +-
root/utility/age.js | 4 +--
yarn.lock | 8 ++---
24 files changed, 80 insertions(+), 80 deletions(-)
diff --git a/package.json b/package.json
index c244aab9cb5..99e7d05b7ea 100644
--- a/package.json
+++ b/package.json
@@ -84,7 +84,7 @@
"eslint-plugin-react": "7.33.1",
"eslint-plugin-react-hooks": "4.6.0",
"file-url": "2.0.2",
- "flow-bin": "0.216.1",
+ "flow-bin": "0.217.0",
"gettext-parser": "3.1.0",
"hermes-eslint": "0.16.0",
"http-proxy": "1.18.1",
diff --git a/root/static/scripts/common/components/Autocomplete2.js b/root/static/scripts/common/components/Autocomplete2.js
index 0c74c2bbdea..bd1e949ae75 100644
--- a/root/static/scripts/common/components/Autocomplete2.js
+++ b/root/static/scripts/common/components/Autocomplete2.js
@@ -167,7 +167,7 @@ type InitialStateT = {
const EMPTY_ITEMS: $ReadOnlyArray> = Object.freeze([]);
-export function createInitialState<+T: EntityItemT>(
+export function createInitialState(
initialState: InitialStateT,
): {...StateT} {
const {
@@ -238,7 +238,7 @@ type AutocompleteItemPropsT = {
selectItem: (ItemT) => boolean,
};
-const AutocompleteItem = React.memo(<+T: EntityItemT>({
+const AutocompleteItem = React.memo(({
autocompleteId,
dispatch,
formatOptions,
@@ -308,7 +308,7 @@ const AutocompleteItem = React.memo(<+T: EntityItemT>({
);
});
-const Autocomplete2 = (React.memo(<+T: EntityItemT>(
+const Autocomplete2 = (React.memo((
props: PropsT,
): React$Element<'div'> => {
const {dispatch, state} = props;
diff --git a/root/static/scripts/common/components/Autocomplete2/formatters.js b/root/static/scripts/common/components/Autocomplete2/formatters.js
index dcc6a880a75..f3edc3fbee5 100644
--- a/root/static/scripts/common/components/Autocomplete2/formatters.js
+++ b/root/static/scripts/common/components/Autocomplete2/formatters.js
@@ -65,7 +65,7 @@ function showExtraInfoLine(
);
}
-function formatName<+T: EntityItemT>(entity: T): string {
+function formatName(entity: T): string {
return unwrapNl(entity.name);
}
@@ -560,7 +560,7 @@ export type FormatOptionsT = {
+showDescriptions?: boolean,
};
-export default function formatItem<+T: EntityItemT>(
+export default function formatItem(
item: ItemT,
options?: ?FormatOptionsT,
): Expand2ReactOutput {
diff --git a/root/static/scripts/common/components/Autocomplete2/recentItems.js b/root/static/scripts/common/components/Autocomplete2/recentItems.js
index 57f1788b374..5082ccae4fa 100644
--- a/root/static/scripts/common/components/Autocomplete2/recentItems.js
+++ b/root/static/scripts/common/components/Autocomplete2/recentItems.js
@@ -33,7 +33,7 @@ import type {
*/
type RecentEntitiesT = {[entityTypeKey: string]: mixed};
-type WsJsEntitiesDataT<+T: EntityItemT> = {
+type WsJsEntitiesDataT = {
+results: {+[id: string]: ?T},
};
@@ -156,7 +156,7 @@ export function clearRecentItems(
const _recentItemsCache =
new Map>>();
-export function getRecentItems<+T: EntityItemT>(
+export function getRecentItems(
key: string,
): $ReadOnlyArray> {
// $FlowIgnore[incompatible-return]
@@ -180,7 +180,7 @@ function getEntityName(
}
}
-export async function getOrFetchRecentItems<+T: EntityItemT>(
+export async function getOrFetchRecentItems(
entityType: string,
key?: string = entityType,
): Promise<$ReadOnlyArray>> {
@@ -253,7 +253,7 @@ export async function getOrFetchRecentItems<+T: EntityItemT>(
return Promise.resolve(cachedList);
}
-export function pushRecentItem<+T: EntityItemT>(
+export function pushRecentItem(
item: OptionItemT,
key?: string = item.entity.entityType,
): $ReadOnlyArray> {
diff --git a/root/static/scripts/common/components/Autocomplete2/reducer.js b/root/static/scripts/common/components/Autocomplete2/reducer.js
index e2986b0f961..2c975956902 100644
--- a/root/static/scripts/common/components/Autocomplete2/reducer.js
+++ b/root/static/scripts/common/components/Autocomplete2/reducer.js
@@ -45,7 +45,7 @@ import type {
StateT,
} from './types.js';
-function initSearch<+T: EntityItemT>(
+function initSearch(
state: {...StateT},
action: SearchActionT,
) {
@@ -69,7 +69,7 @@ function initSearch<+T: EntityItemT>(
}
}
-export function generateItems<+T: EntityItemT>(
+export function generateItems(
state: StateT,
): $ReadOnlyArray> {
const items: Array> = [];
@@ -188,7 +188,7 @@ export function generateItems<+T: EntityItemT>(
return items;
}
-export function determineIfUserCanAddEntities<+T: EntityItemT>(
+export function determineIfUserCanAddEntities(
state: StateT,
): boolean {
const user = getCatalystContext().user;
@@ -212,7 +212,7 @@ export function determineIfUserCanAddEntities<+T: EntityItemT>(
}
}
-function getFirstHighlightableIndex<+T: EntityItemT>(
+function getFirstHighlightableIndex(
state: StateT,
): number {
const items = state.items;
@@ -227,7 +227,7 @@ function getFirstHighlightableIndex<+T: EntityItemT>(
return -1;
}
-export function generateStatusMessage<+T: EntityItemT>(
+export function generateStatusMessage(
state: StateT,
): string {
if (state.isOpen) {
@@ -270,7 +270,7 @@ export function generateStatusMessage<+T: EntityItemT>(
return '';
}
-export function filterStaticItems<+T: EntityItemT>(
+export function filterStaticItems(
state: {...StateT},
newInputValue: string,
): void {
@@ -279,7 +279,7 @@ export function filterStaticItems<+T: EntityItemT>(
state.results = searchItems(staticItems, newInputValue);
}
-export function resetPage<+T: EntityItemT>(
+export function resetPage(
state: {...StateT},
): void {
state.highlightedIndex = -1;
@@ -289,7 +289,7 @@ export function resetPage<+T: EntityItemT>(
state.error = 0;
}
-function selectItem<+T: EntityItemT>(
+function selectItem(
state: {...StateT},
item: ItemT,
) {
@@ -327,7 +327,7 @@ function selectItem<+T: EntityItemT>(
state.pendingSearch = null;
}
-function setError<+T: EntityItemT>(
+function setError(
state: {...StateT},
error: number,
) {
@@ -335,7 +335,7 @@ function setError<+T: EntityItemT>(
state.isOpen = true;
}
-function highlightNextItem<+T: EntityItemT>(
+function highlightNextItem(
state: {...StateT},
startingIndex: number,
offset: number,
@@ -365,7 +365,7 @@ function highlightNextItem<+T: EntityItemT>(
}
// `runReducer` should only be run on a copy of the existing state.
-export function runReducer<+T: EntityItemT>(
+export function runReducer(
state: {...StateT},
action: ActionT,
): void {
@@ -625,7 +625,7 @@ export function runReducer<+T: EntityItemT>(
}
}
-export default function reducer<+T: EntityItemT>(
+export default function reducer(
state: StateT,
action: ActionT,
): StateT {
diff --git a/root/static/scripts/common/components/Autocomplete2/searchItems.js b/root/static/scripts/common/components/Autocomplete2/searchItems.js
index 597e412308f..96747b53fd9 100644
--- a/root/static/scripts/common/components/Autocomplete2/searchItems.js
+++ b/root/static/scripts/common/components/Autocomplete2/searchItems.js
@@ -62,16 +62,16 @@ function* getNGrams(
}
}
-export function getItemName<+T: EntityItemT>(
+export function getItemName(
item: OptionItemT,
): Array {
return [unwrapNl(item.name)];
}
const createItemSet =
- <+T: EntityItemT>(): Set> => new Set();
+ (): Set> => new Set();
-export function indexItems<+T: EntityItemT>(
+export function indexItems(
items: $ReadOnlyArray>,
extractSearchTerms: (OptionItemT) => Array,
): void {
@@ -99,7 +99,7 @@ export function indexItems<+T: EntityItemT>(
itemIndexes.set(items, index);
}
-function getItem<+T: EntityItemT>(
+function getItem(
itemAndRank: [OptionItemT, number],
): OptionItemT {
const itemCopy = {...itemAndRank[0]};
@@ -112,14 +112,14 @@ function getItem<+T: EntityItemT>(
return itemCopy;
}
-function compareItemRanks<+T: EntityItemT>(
+function compareItemRanks(
a: [OptionItemT, number],
b: [OptionItemT, number],
): number {
return b[1] - a[1];
}
-function weightEntry<+T: EntityItemT>(
+function weightEntry(
itemAndRank: [OptionItemT, number],
searchTerm: string,
): number {
@@ -146,7 +146,7 @@ function weightEntry<+T: EntityItemT>(
return rank;
}
-export default function searchItems<+T: EntityItemT>(
+export default function searchItems(
items: $ReadOnlyArray>,
searchTerm: string,
): $ReadOnlyArray> {
diff --git a/root/static/scripts/common/i18n/expand2.js b/root/static/scripts/common/i18n/expand2.js
index 796ad35d01a..de8be9034bc 100644
--- a/root/static/scripts/common/i18n/expand2.js
+++ b/root/static/scripts/common/i18n/expand2.js
@@ -34,14 +34,14 @@ export interface VarArgsClass<+T> {
has(name: string): boolean,
}
-export class VarArgs<+T, +U = T> implements VarArgsClass {
+export class VarArgs<+T> implements VarArgsClass {
+data: VarArgsObject;
constructor(data: VarArgsObject) {
this.data = data;
}
- get(name: string): T | U {
+ get(name: string): T {
return this.data[name];
}
@@ -53,7 +53,6 @@ export class VarArgs<+T, +U = T> implements VarArgsClass {
export type Parser<+T, -V> = (VarArgsClass) => T;
const EMPTY_OBJECT = Object.freeze({});
-const EMPTY_VARARGS = new VarArgs(EMPTY_OBJECT);
type State = {
/*
@@ -187,7 +186,7 @@ export function parseContinuousString(
);
}
-export const createTextContentParser = <+T, V>(
+export const createTextContentParser = (
textPattern: RegExp,
mapValue: (string) => T,
): Parser => () => {
@@ -276,7 +275,7 @@ export const createCondSubstParser = (
* Thus these signatures provide type safety on both the return value
* and input arg values.
*/
-export default function expand<+T, V>(
+export default function expand(
rootParser: (VarArgsClass) => T,
source: ?string,
args: ?VarArgsClass,
@@ -300,7 +299,7 @@ export default function expand<+T, V>(
let result;
try {
- result = rootParser(args ?? EMPTY_VARARGS);
+ result = rootParser(args ?? (new VarArgs(EMPTY_OBJECT)));
if (state.remainder) {
throw error('unexpected token');
diff --git a/root/static/scripts/common/i18n/expand2react.js b/root/static/scripts/common/i18n/expand2react.js
index e0d02d0ee2c..c1d82e90c16 100644
--- a/root/static/scripts/common/i18n/expand2react.js
+++ b/root/static/scripts/common/i18n/expand2react.js
@@ -131,7 +131,7 @@ const parseLinkSubst: Parser<
if (typeof props === 'string') {
props = ({href: props}: AnchorProps);
}
- if (!props || typeof props === 'number' || empty(props.href)) {
+ if (props == null || typeof props !== 'object' || empty(props.href)) {
throw error('bad link props');
}
return React.createElement('a', props, ...children);
diff --git a/root/static/scripts/common/utility/buildOptionList.js b/root/static/scripts/common/utility/buildOptionList.js
index 11200115ad1..27aa4e85e52 100644
--- a/root/static/scripts/common/utility/buildOptionList.js
+++ b/root/static/scripts/common/utility/buildOptionList.js
@@ -15,7 +15,7 @@ import {groupBy} from './arrays.js';
* Unlike MB.forms.buildOptionsTree, this builds from a flat list.
* TODO: These should probably be combined at some point?
*/
-export default function buildOptionList<+T>(
+export default function buildOptionList(
options: $ReadOnlyArray>,
localizeName: (string) => string,
): OptionListT {
diff --git a/root/static/scripts/common/utility/cloneDeep.mjs b/root/static/scripts/common/utility/cloneDeep.mjs
index 8759d6dab30..e01bcf24f89 100644
--- a/root/static/scripts/common/utility/cloneDeep.mjs
+++ b/root/static/scripts/common/utility/cloneDeep.mjs
@@ -7,7 +7,7 @@
* later version: http://www.gnu.org/licenses/gpl-2.0.txt
*/
-function _cloneDeep<+T>(
+function _cloneDeep(
value: T,
seen: WeakMap,
): any {
@@ -24,7 +24,7 @@ function _cloneDeep<+T>(
return value;
}
-function _cloneArrayDeep<+T>(
+function _cloneArrayDeep(
array: $ReadOnlyArray,
seen: WeakMap,
): $ReadOnlyArray {
@@ -37,7 +37,7 @@ function _cloneArrayDeep<+T>(
return clone;
}
-export function cloneArrayDeep<+T>(
+export function cloneArrayDeep(
array: $ReadOnlyArray,
): $ReadOnlyArray {
return _cloneArrayDeep(array, new WeakMap());
@@ -50,7 +50,7 @@ export function cloneArrayDeep<+T>(
// $FlowIgnore[method-unbinding]
const hasOwnProperty = Object.prototype.hasOwnProperty;
-function _cloneObjectDeep<+T: {...}>(
+function _cloneObjectDeep(
object: T,
seen: WeakMap,
): T {
@@ -64,7 +64,7 @@ function _cloneObjectDeep<+T: {...}>(
return clone;
}
-export function cloneObjectDeep<+T: {...}>(
+export function cloneObjectDeep(
object: T,
): T {
return _cloneObjectDeep(object, new WeakMap());
diff --git a/root/static/scripts/common/utility/formatDatePeriod.js b/root/static/scripts/common/utility/formatDatePeriod.js
index 9a6066760e6..97cdb887927 100644
--- a/root/static/scripts/common/utility/formatDatePeriod.js
+++ b/root/static/scripts/common/utility/formatDatePeriod.js
@@ -12,7 +12,7 @@ import ko from 'knockout';
import formatDate from './formatDate.js';
function formatDatePeriod<
- +T: $ReadOnly<{...DatePeriodRoleT, ...}>,
+ T: $ReadOnly<{...DatePeriodRoleT, ...}>,
>(entity: T): string {
const beginDate = formatDate(entity.begin_date);
const endDate = formatDate(entity.end_date);
diff --git a/root/static/scripts/common/utility/formatEndDate.js b/root/static/scripts/common/utility/formatEndDate.js
index a297ee0e170..09160883650 100644
--- a/root/static/scripts/common/utility/formatEndDate.js
+++ b/root/static/scripts/common/utility/formatEndDate.js
@@ -9,7 +9,7 @@
import formatDate from './formatDate.js';
-export default function formatEndDate<+T: $ReadOnly<{
+export default function formatEndDate>(entity: T): null | string {
diff --git a/root/static/scripts/common/utility/memoize.js b/root/static/scripts/common/utility/memoize.js
index 8b4f1fcb9d0..a1b9ecedae0 100644
--- a/root/static/scripts/common/utility/memoize.js
+++ b/root/static/scripts/common/utility/memoize.js
@@ -21,7 +21,7 @@ type ObjectType = interface {} | $ReadOnlyArray;
const createWeakMap =
(): WeakMap => new WeakMap();
-function memoizeGeneric<-T, +U>(
+function memoizeGeneric(
func: (T) => U,
createCache: () => MapInterface,
): (T) => U {
@@ -37,13 +37,13 @@ function memoizeGeneric<-T, +U>(
};
}
-export default function memoize<-T: interface {}, +U>(
+export default function memoize(
func: (T) => U,
): (T) => U {
return memoizeGeneric(func, createWeakMap);
}
-export function memoizeWithDefault<-T: interface {}, +U>(
+export function memoizeWithDefault(
func: (T) => U,
defaultValue: U,
): (?T) => U {
diff --git a/root/static/scripts/common/utility/pThrottle.js b/root/static/scripts/common/utility/pThrottle.js
index b0232eecb88..3e4b1270c26 100644
--- a/root/static/scripts/common/utility/pThrottle.js
+++ b/root/static/scripts/common/utility/pThrottle.js
@@ -50,8 +50,8 @@ export type ThrottleResultT<+R: mixed> = {
};
const pThrottle = <
- -A: $ReadOnlyArray,
- +R: mixed,
+ A: $ReadOnlyArray,
+ R: mixed,
>({
interval,
limit,
diff --git a/root/static/scripts/edit/components/edit/RelationshipDiff.js b/root/static/scripts/edit/components/edit/RelationshipDiff.js
index 1f69f890525..900a8bc8c1a 100644
--- a/root/static/scripts/edit/components/edit/RelationshipDiff.js
+++ b/root/static/scripts/edit/components/edit/RelationshipDiff.js
@@ -72,6 +72,7 @@ const RelationshipDiff = (React.memo(({
const i18nConfig: LinkPhraseI18n = {
commaList,
+ defaultValue: '',
displayLinkAttribute: function (attr: LinkAttrT) {
const typeId = String(attr.typeID);
const display = displayLinkAttribute(attr);
diff --git a/root/static/scripts/edit/components/withLoadedTypeInfo.js b/root/static/scripts/edit/components/withLoadedTypeInfo.js
index a0a7a60d163..34c444c522b 100644
--- a/root/static/scripts/edit/components/withLoadedTypeInfo.js
+++ b/root/static/scripts/edit/components/withLoadedTypeInfo.js
@@ -20,14 +20,14 @@ import {
const typeInfoPromises = new Map>();
const loadedTypeInfo = new Set();
-export default function withLoadedTypeInfo<-Config, +Instance = mixed>(
+export default function withLoadedTypeInfo(
WrappedComponent: React$AbstractComponent,
typeInfoToLoad: $ReadOnlySet,
): React$AbstractComponent {
const ComponentWrapper = React.forwardRef((
props: Config,
ref:
- | {current: Instance | null, ...}
+ | {-current: Instance | null, ...}
| ((Instance | null) => mixed),
) => {
const [isLoading, setLoading] = React.useState(true);
@@ -154,8 +154,8 @@ export default function withLoadedTypeInfo<-Config, +Instance = mixed>(
}
export function withLoadedTypeInfoForRelationshipEditor<
- -Config,
- +Instance = mixed,
+ Config,
+ Instance = mixed,
>(
WrappedComponent: React$AbstractComponent,
extraTypeInfoToLoad?: $ReadOnlyArray = [],
diff --git a/root/static/scripts/edit/utility/createField.js b/root/static/scripts/edit/utility/createField.js
index a7a5416f63f..2c1e9a202d1 100644
--- a/root/static/scripts/edit/utility/createField.js
+++ b/root/static/scripts/edit/utility/createField.js
@@ -40,7 +40,7 @@ export function createCompoundFieldFromObject<
};
}
-export function createCompoundField<+T>(
+export function createCompoundField(
name: string,
fieldValues: T,
): ReadOnlyCompoundFieldT {
diff --git a/root/static/scripts/edit/utility/editDiff.js b/root/static/scripts/edit/utility/editDiff.js
index 016b6ad4670..f04982e028e 100644
--- a/root/static/scripts/edit/utility/editDiff.js
+++ b/root/static/scripts/edit/utility/editDiff.js
@@ -48,7 +48,7 @@ export type StringEditDiff = {
+type: EditType,
};
-function getChangeType<+T>(diff: GenericEditDiff): EditType {
+function getChangeType(diff: GenericEditDiff): EditType {
if (!diff.added && !diff.removed) {
return EQUAL;
}
diff --git a/root/static/scripts/edit/utility/linkPhrase.js b/root/static/scripts/edit/utility/linkPhrase.js
index 8758491fe7c..f7934cc380d 100644
--- a/root/static/scripts/edit/utility/linkPhrase.js
+++ b/root/static/scripts/edit/utility/linkPhrase.js
@@ -11,7 +11,6 @@ import commaList, {commaListText} from '../../common/i18n/commaList.js';
import {
type VarArgsClass,
type VarArgsObject,
- VarArgs,
} from '../../common/i18n/expand2.js';
import {
expand2reactWithVarArgsInstance,
@@ -39,14 +38,14 @@ export type LinkPhraseProp =
| 'long_link_phrase'
| 'reverse_link_phrase';
-class PhraseVarArgs
- extends VarArgs
- implements VarArgsClass {
+class PhraseVarArgs implements VarArgsClass {
+ +data: VarArgsObject;
+
+i18n: LinkPhraseI18n;
- +entity0: T | string;
+ +entity0: T;
- +entity1: T | string;
+ +entity1: T;
/*
* Contains attributes that appear in the text of the given link
@@ -62,14 +61,14 @@ class PhraseVarArgs
entity0: ?T,
entity1: ?T,
) {
- super(args || EMPTY_OBJECT);
+ this.data = args || EMPTY_OBJECT;
this.i18n = i18n;
- this.entity0 = nonEmpty(entity0) ? entity0 : '';
- this.entity1 = nonEmpty(entity1) ? entity1 : '';
+ this.entity0 = nonEmpty(entity0) ? entity0 : i18n.defaultValue;
+ this.entity1 = nonEmpty(entity1) ? entity1 : i18n.defaultValue;
this.usedPhraseAttributes = [];
}
- get(name: string): T | string {
+ get(name: string): T {
if (name === 'entity0') {
return this.entity0;
}
@@ -78,7 +77,7 @@ class PhraseVarArgs
}
const attributes = this.data[name];
if (attributes == null) {
- return '';
+ return this.i18n.defaultValue;
}
if (Array.isArray(attributes)) {
return this.i18n.commaList(
@@ -96,24 +95,26 @@ class PhraseVarArgs
export type LinkPhraseI18n = {
commaList: ($ReadOnlyArray) => T,
+ defaultValue: T,
displayLinkAttribute: (LinkAttrT) => T,
expand: (string, VarArgsClass) => T,
};
const reactI18n: LinkPhraseI18n = {
commaList,
+ defaultValue: '',
displayLinkAttribute,
expand: expand2reactWithVarArgsInstance,
};
const textI18n: LinkPhraseI18n = {
commaList: commaListText,
+ defaultValue: '',
displayLinkAttribute: displayLinkAttributeText,
expand: expand2textWithVarArgsClass,
};
-function _getAttributesByRootName(
- i18n: LinkPhraseI18n,
+function _getAttributesByRootName(
linkType: LinkTypeT,
attributes: $ReadOnlyArray,
): LinkAttrsByRootName {
@@ -218,8 +219,7 @@ export function getPhraseAndExtraAttributes(
return ['', []];
}
- const attributesByRootName = _getAttributesByRootName(
- i18n,
+ const attributesByRootName = _getAttributesByRootName(
linkType,
attributes,
);
diff --git a/root/static/scripts/edit/utility/reducerWithErrorHandling.js b/root/static/scripts/edit/utility/reducerWithErrorHandling.js
index 5a1884312d3..c68386c33a7 100644
--- a/root/static/scripts/edit/utility/reducerWithErrorHandling.js
+++ b/root/static/scripts/edit/utility/reducerWithErrorHandling.js
@@ -19,7 +19,7 @@ import coerceToError from '../../common/utility/coerceToError.js';
*/
export default function reducerWithErrorHandling<
S: {+reducerError: Error | null, ...},
- -A,
+ A,
>(
reducer: (S, A) => S,
): (S, A) => S {
diff --git a/root/static/scripts/relationship-editor/utility/exportTypeInfo.js b/root/static/scripts/relationship-editor/utility/exportTypeInfo.js
index 348016b513d..7285b0af83c 100644
--- a/root/static/scripts/relationship-editor/utility/exportTypeInfo.js
+++ b/root/static/scripts/relationship-editor/utility/exportTypeInfo.js
@@ -24,7 +24,7 @@ export function exportLinkTypeInfo(
[entityTypes: string]: Array,
} = {};
- function mapItems<-T: LinkTypeT>(
+ function mapItems(
result: {-[idOrGid: StrOrNum]: T},
item: T,
) {
@@ -78,7 +78,7 @@ export function exportLinkAttributeTypeInfo(
const linkAttributeTypeChildren =
groupBy(allLinkAttributeTypes, x => String(x.parent_id));
- function mapItems<-T: LinkAttrTypeT>(
+ function mapItems(
result: {-[idOrGid: StrOrNum]: T},
item: T,
) {
diff --git a/root/static/scripts/relationship-editor/utility/prettyPrintRelationshipState.js b/root/static/scripts/relationship-editor/utility/prettyPrintRelationshipState.js
index 8038d423e7c..d19460f9aa4 100644
--- a/root/static/scripts/relationship-editor/utility/prettyPrintRelationshipState.js
+++ b/root/static/scripts/relationship-editor/utility/prettyPrintRelationshipState.js
@@ -25,7 +25,7 @@ const _displayLinkType = (linkType: LinkTypeT | null): string => {
return linkType ? linkType.name : 'none';
};
-const _displayAttribute = (attribute: LinkAttrT): string => {
+const _displayAttribute = (attribute: LinkAttrT): StrOrNum => {
return displayLinkAttributeCustom(
attribute,
(x) => x.name,
diff --git a/root/utility/age.js b/root/utility/age.js
index 165971f31a5..422a5439181 100644
--- a/root/utility/age.js
+++ b/root/utility/age.js
@@ -18,7 +18,7 @@ function timestamp(date: PartialDateT) {
);
}
-export function hasAge<+T: $ReadOnly<{...DatePeriodRoleT, ...}>>(
+export function hasAge>(
entity: T,
): boolean {
const begin = entity.begin_date;
@@ -79,7 +79,7 @@ export function hasAge<+T: $ReadOnly<{...DatePeriodRoleT, ...}>>(
return false;
}
-export function age<+T: $ReadOnly<{...DatePeriodRoleT, ...}>>(
+export function age>(
entity: T,
): [number, number, number] | null {
const begin = entity.begin_date;
diff --git a/yarn.lock b/yarn.lock
index 1675821b228..39180696048 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2662,10 +2662,10 @@ flatted@^3.2.7:
resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.9.tgz#7eb4c67ca1ba34232ca9d2d93e9886e611ad7daf"
integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==
-flow-bin@0.216.1:
- version "0.216.1"
- resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.216.1.tgz#c370af830e46645087a2aea4056507cc44acc031"
- integrity sha512-mdhkQiSSZ/nyPq/pmk2tdbV3btYTlTYqBT/96nSSTGQmvTWQ0no9XMLZ/SygNafL4PPerfkpwQwprA1M35+9Bg==
+flow-bin@0.217.0:
+ version "0.217.0"
+ resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.217.0.tgz#c255b4d8d815520d396416c2f712ab849d61f467"
+ integrity sha512-AbbDE6QUpR+jpY9ejNROAk0P5D/2PxJzjU4D5vfmMwtS+QjjPjzfZGuatEJIn2k4PTZ2agbncaCtyHGO0AvG7A==
follow-redirects@^1.0.0:
version "1.15.3"
From eda720c20c4ffa8d9c9b2f944952056a0a0dac6c Mon Sep 17 00:00:00 2001
From: Michael Wiencek
Date: Thu, 19 Oct 2023 05:35:08 -0500
Subject: [PATCH 043/194] Upgrade Flow to 0.217.1
---
package.json | 2 +-
yarn.lock | 8 ++++----
2 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/package.json b/package.json
index 99e7d05b7ea..088cff26f32 100644
--- a/package.json
+++ b/package.json
@@ -84,7 +84,7 @@
"eslint-plugin-react": "7.33.1",
"eslint-plugin-react-hooks": "4.6.0",
"file-url": "2.0.2",
- "flow-bin": "0.217.0",
+ "flow-bin": "0.217.1",
"gettext-parser": "3.1.0",
"hermes-eslint": "0.16.0",
"http-proxy": "1.18.1",
diff --git a/yarn.lock b/yarn.lock
index 39180696048..65b4d1d9e2d 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2662,10 +2662,10 @@ flatted@^3.2.7:
resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.9.tgz#7eb4c67ca1ba34232ca9d2d93e9886e611ad7daf"
integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==
-flow-bin@0.217.0:
- version "0.217.0"
- resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.217.0.tgz#c255b4d8d815520d396416c2f712ab849d61f467"
- integrity sha512-AbbDE6QUpR+jpY9ejNROAk0P5D/2PxJzjU4D5vfmMwtS+QjjPjzfZGuatEJIn2k4PTZ2agbncaCtyHGO0AvG7A==
+flow-bin@0.217.1:
+ version "0.217.1"
+ resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.217.1.tgz#45fd32309cf968bd6ff6656aaeaafbc1c30b006a"
+ integrity sha512-CJ4nIKzkCDcQ6BxbQz84xVGbtcOuousPsDvCJiuQQO305nukPGXEPNBirCgqg/HJK+aqTRWMbPm38UDC7eNpWA==
follow-redirects@^1.0.0:
version "1.15.3"
From f5e0a780a35bc137a3e78c8a151b06ff1c752da8 Mon Sep 17 00:00:00 2001
From: Michael Wiencek
Date: Thu, 19 Oct 2023 05:35:43 -0500
Subject: [PATCH 044/194] Upgrade Flow to 0.217.2
---
package.json | 2 +-
yarn.lock | 8 ++++----
2 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/package.json b/package.json
index 088cff26f32..a88d008fbfc 100644
--- a/package.json
+++ b/package.json
@@ -84,7 +84,7 @@
"eslint-plugin-react": "7.33.1",
"eslint-plugin-react-hooks": "4.6.0",
"file-url": "2.0.2",
- "flow-bin": "0.217.1",
+ "flow-bin": "0.217.2",
"gettext-parser": "3.1.0",
"hermes-eslint": "0.16.0",
"http-proxy": "1.18.1",
diff --git a/yarn.lock b/yarn.lock
index 65b4d1d9e2d..40b7a4854f8 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2662,10 +2662,10 @@ flatted@^3.2.7:
resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.9.tgz#7eb4c67ca1ba34232ca9d2d93e9886e611ad7daf"
integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==
-flow-bin@0.217.1:
- version "0.217.1"
- resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.217.1.tgz#45fd32309cf968bd6ff6656aaeaafbc1c30b006a"
- integrity sha512-CJ4nIKzkCDcQ6BxbQz84xVGbtcOuousPsDvCJiuQQO305nukPGXEPNBirCgqg/HJK+aqTRWMbPm38UDC7eNpWA==
+flow-bin@0.217.2:
+ version "0.217.2"
+ resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.217.2.tgz#96affa17f3cb303019f740bffeb28cfab7ce1250"
+ integrity sha512-fk4NcfybYjzlww1sEsfk71nqXvonAYpMRFEjmZxibDWWBiaw8DGmqXWZ7XzSunVB15VkJfOstn/sYP1EYPPyWg==
follow-redirects@^1.0.0:
version "1.15.3"
From 253ba80e340713235892e34ea8bbbd63cc5799fc Mon Sep 17 00:00:00 2001
From: Michael Wiencek
Date: Thu, 19 Oct 2023 05:36:21 -0500
Subject: [PATCH 045/194] Upgrade Flow to 0.218.0
---
package.json | 2 +-
yarn.lock | 8 ++++----
2 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/package.json b/package.json
index a88d008fbfc..6d2875ae0db 100644
--- a/package.json
+++ b/package.json
@@ -84,7 +84,7 @@
"eslint-plugin-react": "7.33.1",
"eslint-plugin-react-hooks": "4.6.0",
"file-url": "2.0.2",
- "flow-bin": "0.217.2",
+ "flow-bin": "0.218.0",
"gettext-parser": "3.1.0",
"hermes-eslint": "0.16.0",
"http-proxy": "1.18.1",
diff --git a/yarn.lock b/yarn.lock
index 40b7a4854f8..96cbd66e97e 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2662,10 +2662,10 @@ flatted@^3.2.7:
resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.9.tgz#7eb4c67ca1ba34232ca9d2d93e9886e611ad7daf"
integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==
-flow-bin@0.217.2:
- version "0.217.2"
- resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.217.2.tgz#96affa17f3cb303019f740bffeb28cfab7ce1250"
- integrity sha512-fk4NcfybYjzlww1sEsfk71nqXvonAYpMRFEjmZxibDWWBiaw8DGmqXWZ7XzSunVB15VkJfOstn/sYP1EYPPyWg==
+flow-bin@0.218.0:
+ version "0.218.0"
+ resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.218.0.tgz#f91acd8a31d472cd8568442819d925c0881081f7"
+ integrity sha512-u4E0+AIoKKMSuv09Co2mNiQB2DqCcakWtMAPbMkVvvTTNoBSo+gYKrYKoRrmb0QqhdyHy1mRXQXjESW8Lml/MA==
follow-redirects@^1.0.0:
version "1.15.3"
From d9e9f148244c99b81326704470d75126f225319e Mon Sep 17 00:00:00 2001
From: Michael Wiencek
Date: Thu, 19 Oct 2023 05:37:06 -0500
Subject: [PATCH 046/194] Upgrade Flow to 0.218.1
---
package.json | 2 +-
yarn.lock | 8 ++++----
2 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/package.json b/package.json
index 6d2875ae0db..9a02fb23752 100644
--- a/package.json
+++ b/package.json
@@ -84,7 +84,7 @@
"eslint-plugin-react": "7.33.1",
"eslint-plugin-react-hooks": "4.6.0",
"file-url": "2.0.2",
- "flow-bin": "0.218.0",
+ "flow-bin": "0.218.1",
"gettext-parser": "3.1.0",
"hermes-eslint": "0.16.0",
"http-proxy": "1.18.1",
diff --git a/yarn.lock b/yarn.lock
index 96cbd66e97e..0c94183156e 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2662,10 +2662,10 @@ flatted@^3.2.7:
resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.9.tgz#7eb4c67ca1ba34232ca9d2d93e9886e611ad7daf"
integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==
-flow-bin@0.218.0:
- version "0.218.0"
- resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.218.0.tgz#f91acd8a31d472cd8568442819d925c0881081f7"
- integrity sha512-u4E0+AIoKKMSuv09Co2mNiQB2DqCcakWtMAPbMkVvvTTNoBSo+gYKrYKoRrmb0QqhdyHy1mRXQXjESW8Lml/MA==
+flow-bin@0.218.1:
+ version "0.218.1"
+ resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.218.1.tgz#2d6c14509db57b3b3ab609cc87bef44faf2970db"
+ integrity sha512-D0479Oxu6HWCBiALCTjf5RF99FkPODhbDQnLDK4f0FGS+L3+XVqFPZPdzOzWwe2k5jAWCfARLVjqKVa6brAgtg==
follow-redirects@^1.0.0:
version "1.15.3"
From e30c473b0475f284bd0299d9fbb8d85d9def75bc Mon Sep 17 00:00:00 2001
From: Michael Wiencek
Date: Thu, 19 Oct 2023 05:37:47 -0500
Subject: [PATCH 047/194] Upgrade Flow to 0.219.0
---
package.json | 2 +-
yarn.lock | 8 ++++----
2 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/package.json b/package.json
index 9a02fb23752..568bbf6a197 100644
--- a/package.json
+++ b/package.json
@@ -84,7 +84,7 @@
"eslint-plugin-react": "7.33.1",
"eslint-plugin-react-hooks": "4.6.0",
"file-url": "2.0.2",
- "flow-bin": "0.218.1",
+ "flow-bin": "0.219.0",
"gettext-parser": "3.1.0",
"hermes-eslint": "0.16.0",
"http-proxy": "1.18.1",
diff --git a/yarn.lock b/yarn.lock
index 0c94183156e..350eaf49ef1 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2662,10 +2662,10 @@ flatted@^3.2.7:
resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.9.tgz#7eb4c67ca1ba34232ca9d2d93e9886e611ad7daf"
integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==
-flow-bin@0.218.1:
- version "0.218.1"
- resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.218.1.tgz#2d6c14509db57b3b3ab609cc87bef44faf2970db"
- integrity sha512-D0479Oxu6HWCBiALCTjf5RF99FkPODhbDQnLDK4f0FGS+L3+XVqFPZPdzOzWwe2k5jAWCfARLVjqKVa6brAgtg==
+flow-bin@0.219.0:
+ version "0.219.0"
+ resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.219.0.tgz#193ae6551e4eccad7435b2ec0cfa455a40f38889"
+ integrity sha512-nX1hLdYI+mRaO5hG4acjwMni9K3KqQzt3v0pDPHKGu1lEvxEPbL3GxruFbaq8dhKR3Ntk13ptsf2krYubZ1nCw==
follow-redirects@^1.0.0:
version "1.15.3"
From 643afa083d4d826fa671f2d01c72ede2ad726d0a Mon Sep 17 00:00:00 2001
From: Michael Wiencek
Date: Thu, 19 Oct 2023 05:38:19 -0500
Subject: [PATCH 048/194] Upgrade Flow to 0.219.2
---
package.json | 2 +-
yarn.lock | 8 ++++----
2 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/package.json b/package.json
index 568bbf6a197..77360a46548 100644
--- a/package.json
+++ b/package.json
@@ -84,7 +84,7 @@
"eslint-plugin-react": "7.33.1",
"eslint-plugin-react-hooks": "4.6.0",
"file-url": "2.0.2",
- "flow-bin": "0.219.0",
+ "flow-bin": "0.219.2",
"gettext-parser": "3.1.0",
"hermes-eslint": "0.16.0",
"http-proxy": "1.18.1",
diff --git a/yarn.lock b/yarn.lock
index 350eaf49ef1..6622a61224b 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2662,10 +2662,10 @@ flatted@^3.2.7:
resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.9.tgz#7eb4c67ca1ba34232ca9d2d93e9886e611ad7daf"
integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==
-flow-bin@0.219.0:
- version "0.219.0"
- resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.219.0.tgz#193ae6551e4eccad7435b2ec0cfa455a40f38889"
- integrity sha512-nX1hLdYI+mRaO5hG4acjwMni9K3KqQzt3v0pDPHKGu1lEvxEPbL3GxruFbaq8dhKR3Ntk13ptsf2krYubZ1nCw==
+flow-bin@0.219.2:
+ version "0.219.2"
+ resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.219.2.tgz#46d32f51df0e855974ef97ebda12acce8ff5652a"
+ integrity sha512-E0Dh5ZFIgjeW4VoCEr9KNPG3LS4PKqLMHOGQrzlJ/wOyFQvpNS4gXsxAPeqtxD+MHeV/tVeoD17WYJXkAXpgYw==
follow-redirects@^1.0.0:
version "1.15.3"
From 3b70d775b8f8e4696b5ed0c87531719792c86a0b Mon Sep 17 00:00:00 2001
From: Michael Wiencek
Date: Thu, 19 Oct 2023 05:44:07 -0500
Subject: [PATCH 049/194] Replace $MakeReadOnly type with one using infer
https://flow.org/en/docs/types/conditional/
I took the new implementation from https://github.com/facebook/flow/commit/5914a18
---
entities.mjs | 6 +-----
root/types/misc.js | 4 ++++
2 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/entities.mjs b/entities.mjs
index 4ffdaaeb97d..59f26a3ef48 100644
--- a/entities.mjs
+++ b/entities.mjs
@@ -21,10 +21,6 @@ type AutomaticRemovalPropsT = {
...
};
-type $MakeReadOnly =
- & ((T) => $ReadOnly<$ObjMap>)
- & ((T) => T);
-
const ENTITIES = {
annotation: {
model: 'Annotation',
@@ -895,4 +891,4 @@ const ENTITIES = {
deepFreeze(ENTITIES);
-export default (ENTITIES: $Call<$MakeReadOnly, typeof ENTITIES>);
+export default (ENTITIES: DeepReadOnly);
diff --git a/root/types/misc.js b/root/types/misc.js
index 75dd3eb210c..8bb87245d10 100644
--- a/root/types/misc.js
+++ b/root/types/misc.js
@@ -9,6 +9,10 @@
/* eslint-disable no-unused-vars */
+declare type DeepReadOnly =
+ T extends $ReadOnlyArray ? $ReadOnlyArray> :
+ T extends {...} ? {+[K in keyof T]: DeepReadOnly} : T;
+
/*
* See http://search.cpan.org/~lbrocard/Data-Page-2.02/lib/Data/Page.pm
* Serialized in MusicBrainz::Server::TO_JSON.
From 8641fc87d9b47d5c0b32ddd8a5c3e387c31561ee Mon Sep 17 00:00:00 2001
From: Michael Wiencek
Date: Thu, 19 Oct 2023 06:22:27 -0500
Subject: [PATCH 050/194] Remove uses of any in SeriesIndex.js
Make use of the mapped types feature to generate ListPickerProps, which can
then be refined as a tagged union.
---
lib/MusicBrainz/Server/Controller/Series.pm | 7 ++-
root/series/SeriesIndex.js | 56 +++++++++------------
root/types/entity.js | 25 ++++-----
3 files changed, 40 insertions(+), 48 deletions(-)
diff --git a/lib/MusicBrainz/Server/Controller/Series.pm b/lib/MusicBrainz/Server/Controller/Series.pm
index 6db89ea9268..977a1d2cc4b 100644
--- a/lib/MusicBrainz/Server/Controller/Series.pm
+++ b/lib/MusicBrainz/Server/Controller/Series.pm
@@ -109,11 +109,14 @@ sub show : PathPart('') Chained('load') {
}
my %props = (
- entities => to_json_array(\@entities),
+ listProps => {
+ entities => to_json_array(\@entities),
+ seriesEntityType => $series->type->item_entity_type,
+ seriesItemNumbers => \@item_numbers,
+ },
numberOfRevisions => $c->stash->{number_of_revisions},
pager => serialize_pager($c->stash->{pager}),
series => $series->TO_JSON,
- seriesItemNumbers => \@item_numbers,
wikipediaExtract => to_json_object($c->stash->{wikipedia_extract}),
);
diff --git a/root/series/SeriesIndex.js b/root/series/SeriesIndex.js
index 1e5714ecaf1..10ab040cde0 100644
--- a/root/series/SeriesIndex.js
+++ b/root/series/SeriesIndex.js
@@ -1,5 +1,5 @@
/*
- * @flow
+ * @flow strict-local
* Copyright (C) 2019 MetaBrainz Foundation
*
* This file is part of MusicBrainz, the open internet music database,
@@ -26,25 +26,25 @@ import {formatPluralEntityTypeName}
import SeriesLayout from './SeriesLayout.js';
-type ListPickerProps = {
- ...SeriesItemNumbersRoleT,
- +entities: $ReadOnlyArray,
- +seriesEntityType: EntityWithSeriesTypeT,
-};
+type ListPickerProps = $Values<{
+ +[EntityType in keyof EntityWithSeriesMapT]: {
+ ...SeriesItemNumbersRoleT,
+ +entities: $ReadOnlyArray,
+ +seriesEntityType: EntityType,
+ },
+}>;
-const listPicker = ({
- entities,
- seriesEntityType,
- seriesItemNumbers,
-}: ListPickerProps) => {
+const listPicker = (
+ props: ListPickerProps,
+): React$MixedElement => {
const sharedProps = {
- seriesItemNumbers: seriesItemNumbers,
+ seriesItemNumbers: props.seriesItemNumbers,
};
- switch (seriesEntityType) {
+ switch (props.seriesEntityType) {
case 'artist':
return (
)}
+ artists={props.entities}
showBeginEnd
showRatings
{...sharedProps}
@@ -53,7 +53,7 @@ const listPicker = ({
case 'event':
return (
)}
+ events={props.entities}
showArtists
showLocation
showRatings
@@ -63,9 +63,7 @@ const listPicker = ({
case 'recording':
return (
)
- }
+ recordings={props.entities}
showRatings
{...sharedProps}
/>
@@ -73,14 +71,14 @@ const listPicker = ({
case 'release':
return (
)}
+ releases={props.entities}
{...sharedProps}
/>
);
case 'release_group':
return (
)}
+ releaseGroups={props.entities}
showRatings
{...sharedProps}
/>
@@ -89,19 +87,19 @@ const listPicker = ({
return (
)}
+ works={props.entities}
{...sharedProps}
/>
);
default:
- throw `Unsupported entity type value: ${seriesEntityType}`;
+ throw `Unsupported entity type value: ${props.seriesEntityType}`;
}
};
type SeriesIndexProps = {
...SeriesItemNumbersRoleT,
+eligibleForCleanup: boolean,
- +entities: ?$ReadOnlyArray,
+ +listProps: ListPickerProps,
+numberOfRevisions: number,
+pager: PagerT,
+series: $ReadOnly<{...SeriesT, +type: SeriesTypeT}>,
@@ -110,15 +108,13 @@ type SeriesIndexProps = {
const SeriesIndex = ({
eligibleForCleanup,
- entities,
+ listProps,
numberOfRevisions,
pager,
series,
- seriesItemNumbers,
wikipediaExtract,
}: SeriesIndexProps): React$Element => {
const seriesEntityType = series.type.item_entity_type;
- const existingEntities = entities?.length ? entities : null;
return (
{eligibleForCleanup ? (
@@ -137,13 +133,9 @@ const SeriesIndex = ({
{formatPluralEntityTypeName(seriesEntityType)}
- {existingEntities ? (
+ {listProps.entities?.length ? (
- {listPicker({
- entities: existingEntities,
- seriesEntityType,
- seriesItemNumbers,
- })}
+ {listPicker(listProps)}
) : (
diff --git a/root/types/entity.js b/root/types/entity.js
index d97ade2d7e6..62821ea4b24 100644
--- a/root/types/entity.js
+++ b/root/types/entity.js
@@ -37,21 +37,18 @@ declare type EntityWithAliasesTypeT =
| 'series'
| 'work';
-declare type EntityWithSeriesT =
- | ArtistT
- | EventT
- | RecordingT
- | ReleaseT
- | ReleaseGroupT
- | WorkT;
+declare type EntityWithSeriesMapT = {
+ 'artist': ArtistT,
+ 'event': EventT,
+ 'recording': RecordingWithArtistCreditT,
+ 'release': ReleaseT,
+ 'release_group': ReleaseGroupT,
+ 'work': WorkT,
+};
-declare type EntityWithSeriesTypeT =
- | 'artist'
- | 'event'
- | 'recording'
- | 'release'
- | 'release_group'
- | 'work';
+declare type EntityWithSeriesT = $Values;
+
+declare type EntityWithSeriesTypeT = $Keys;
declare type AppearancesT = {
+hits: number,
From 3c4756b88151623df99b9b1a7eb811bb647a23e6 Mon Sep 17 00:00:00 2001
From: Michael Wiencek
Date: Fri, 20 Oct 2023 06:27:23 -0500
Subject: [PATCH 051/194] Remove a few $FlowIgnores
---
root/edit/components/EditNote.js | 6 +----
root/release/ChangeQuality.js | 8 +++---
.../common/utility/relationshipDateText.js | 27 ++++++++++---------
.../edit/components/FormRowCheckbox.js | 2 +-
4 files changed, 20 insertions(+), 23 deletions(-)
diff --git a/root/edit/components/EditNote.js b/root/edit/components/EditNote.js
index 8a00cd9b89e..3b27a20c6c4 100644
--- a/root/edit/components/EditNote.js
+++ b/root/edit/components/EditNote.js
@@ -87,7 +87,7 @@ const EditNote = ({
const changeReason = editNote.latest_change?.reason;
const changeTime = editNote.latest_change?.change_time
? formatUserDate($c, editNote.latest_change.change_time)
- : null;
+ : '';
/*
* We only want to show the controls for modifying/removing a note
@@ -212,14 +212,12 @@ const EditNote = ({
Reason given: “{reason}”.`,
{
reason: changeReason,
- // $FlowIgnore[incompatible-call]
time: changeTime,
},
)
) : (
texp.l(
'Last modified by the note author ({time}).',
- // $FlowIgnore[incompatible-call]
{time: changeTime},
)
)
@@ -230,14 +228,12 @@ const EditNote = ({
Reason given: “{reason}”.`,
{
reason: changeReason,
- // $FlowIgnore[incompatible-call]
time: changeTime,
},
)
) : (
texp.l(
'Last modified by an admin ({time}).',
- // $FlowIgnore[incompatible-call]
{time: changeTime},
)
)
diff --git a/root/release/ChangeQuality.js b/root/release/ChangeQuality.js
index d350d09135b..bd1d4a09a11 100644
--- a/root/release/ChangeQuality.js
+++ b/root/release/ChangeQuality.js
@@ -13,6 +13,7 @@ import EnterEditNote
from '../static/scripts/edit/components/EnterEditNote.js';
import FormRowSelect
from '../static/scripts/edit/components/FormRowSelect.js';
+import {expect} from '../utility/invariant.js';
import ReleaseLayout from './ReleaseLayout.js';
@@ -37,9 +38,9 @@ const ChangeQuality = ({
const qualityOptions = {
grouped: false,
options: [
- {label: QUALITY_NAMES.get(0), value: 0},
- {label: QUALITY_NAMES.get(1), value: 1},
- {label: QUALITY_NAMES.get(2), value: 2},
+ {label: expect(QUALITY_NAMES.get(0)), value: 0},
+ {label: expect(QUALITY_NAMES.get(1)), value: 1},
+ {label: expect(QUALITY_NAMES.get(2)), value: 2},
],
};
@@ -64,7 +65,6 @@ const ChangeQuality = ({
diff --git a/root/static/scripts/common/utility/relationshipDateText.js b/root/static/scripts/common/utility/relationshipDateText.js
index 06b0745e7df..96cc4f5d474 100644
--- a/root/static/scripts/common/utility/relationshipDateText.js
+++ b/root/static/scripts/common/utility/relationshipDateText.js
@@ -16,25 +16,26 @@ export default function relationshipDateText(
r: $ReadOnly<{...DatePeriodRoleT, ...}>,
bracketEnded?: boolean = true,
): string {
- if (!isDateEmpty(r.begin_date)) {
- if (!isDateEmpty(r.end_date)) {
- if (areDatesEqual(r.begin_date, r.end_date)) {
- // $FlowIssue[incompatible-use]
- if (r.begin_date.day != null) {
- return texp.l('on {date}', {date: formatDate(r.begin_date)});
+ const beginDate = r.begin_date;
+ const endDate = r.end_date;
+ if (!isDateEmpty(beginDate)) {
+ if (!isDateEmpty(endDate)) {
+ if (areDatesEqual(beginDate, endDate)) {
+ if (beginDate.day != null) {
+ return texp.l('on {date}', {date: formatDate(beginDate)});
}
- return texp.l('in {date}', {date: formatDate(r.begin_date)});
+ return texp.l('in {date}', {date: formatDate(beginDate)});
}
return texp.l('from {begin_date} until {end_date}', {
- begin_date: formatDate(r.begin_date),
- end_date: formatDate(r.end_date),
+ begin_date: formatDate(beginDate),
+ end_date: formatDate(endDate),
});
} else if (r.ended) {
- return texp.l('from {date} to ????', {date: formatDate(r.begin_date)});
+ return texp.l('from {date} to ????', {date: formatDate(beginDate)});
}
- return texp.l('from {date} to present', {date: formatDate(r.begin_date)});
- } else if (!isDateEmpty(r.end_date)) {
- return texp.l('until {date}', {date: formatDate(r.end_date)});
+ return texp.l('from {date} to present', {date: formatDate(beginDate)});
+ } else if (!isDateEmpty(endDate)) {
+ return texp.l('until {date}', {date: formatDate(endDate)});
} else if (r.ended) {
let text = l('ended');
if (bracketEnded) {
diff --git a/root/static/scripts/edit/components/FormRowCheckbox.js b/root/static/scripts/edit/components/FormRowCheckbox.js
index be66202e4b0..86a718fd2fc 100644
--- a/root/static/scripts/edit/components/FormRowCheckbox.js
+++ b/root/static/scripts/edit/components/FormRowCheckbox.js
@@ -27,6 +27,7 @@ type Props =
}>
| $ReadOnly<{
...CommonProps,
+ onChange?: void,
uncontrolled: true,
}>;
@@ -37,7 +38,6 @@ const FormRowCheckbox = ({
hasNoMargin = false,
help,
label,
- // $FlowIssue[prop-missing]
onChange,
uncontrolled,
}: Props): React$Element => {
From 50a692bb491ad9ecf3a2a18516bed3e4cdcb7c6e Mon Sep 17 00:00:00 2001
From: Michael Wiencek
Date: Sat, 21 Oct 2023 15:48:20 -0500
Subject: [PATCH 052/194] Upgrade Flow to 0.219.3
---
package.json | 2 +-
yarn.lock | 8 ++++----
2 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/package.json b/package.json
index 77360a46548..fcea4624431 100644
--- a/package.json
+++ b/package.json
@@ -84,7 +84,7 @@
"eslint-plugin-react": "7.33.1",
"eslint-plugin-react-hooks": "4.6.0",
"file-url": "2.0.2",
- "flow-bin": "0.219.2",
+ "flow-bin": "0.219.3",
"gettext-parser": "3.1.0",
"hermes-eslint": "0.16.0",
"http-proxy": "1.18.1",
diff --git a/yarn.lock b/yarn.lock
index 6622a61224b..0dcf41c0cfe 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2662,10 +2662,10 @@ flatted@^3.2.7:
resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.9.tgz#7eb4c67ca1ba34232ca9d2d93e9886e611ad7daf"
integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==
-flow-bin@0.219.2:
- version "0.219.2"
- resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.219.2.tgz#46d32f51df0e855974ef97ebda12acce8ff5652a"
- integrity sha512-E0Dh5ZFIgjeW4VoCEr9KNPG3LS4PKqLMHOGQrzlJ/wOyFQvpNS4gXsxAPeqtxD+MHeV/tVeoD17WYJXkAXpgYw==
+flow-bin@0.219.3:
+ version "0.219.3"
+ resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.219.3.tgz#a3a26d27c726c7e20477f394570ec6b1fb41fbe0"
+ integrity sha512-5O+G8pXqu0UClXLhTj2g/ZdNCQo4odYKs/6VHCnhOcvATrJIJcOJuW7WgjXMsGuV4aVeBmeFO93isE4cop9K/Q==
follow-redirects@^1.0.0:
version "1.15.3"
From 39abb32457ecb64c8e30b1d0f4c46e8a8f1a1d72 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Nicol=C3=A1s=20Tamargo?=
Date: Thu, 26 Oct 2023 12:29:43 +0300
Subject: [PATCH 053/194] Split new editor creation test to new subtest
Also removing a couple checks that seem pointless
and adding labels to the rest.
---
t/lib/t/MusicBrainz/Server/Data/Editor.pm | 106 ++++++++++++++--------
1 file changed, 70 insertions(+), 36 deletions(-)
diff --git a/t/lib/t/MusicBrainz/Server/Data/Editor.pm b/t/lib/t/MusicBrainz/Server/Data/Editor.pm
index 695f4307e18..a6962adc591 100644
--- a/t/lib/t/MusicBrainz/Server/Data/Editor.pm
+++ b/t/lib/t/MusicBrainz/Server/Data/Editor.pm
@@ -82,6 +82,75 @@ test 'Remember me tokens' => sub {
'Allocating tokens for unknown users returns undefined');
};
+test 'Creating a new editor' => sub {
+ my $test = shift;
+ MusicBrainz::Server::Test->prepare_test_database($test->c, '+editor');
+ my $editor_data = MusicBrainz::Server::Data::Editor->new(c => $test->c);
+
+ note('We create a new editor with just name / password');
+ my $new_editor_2 = $editor_data->insert({
+ name => 'new_editor_2',
+ password => 'password',
+ });
+ is(
+ $new_editor_2->name,
+ 'new_editor_2',
+ 'The new editor has the expected name',
+ );
+ ok(
+ $new_editor_2->match_password('password'),
+ 'The new editor has the expected password',
+ );
+ is(
+ $editor_data->various_edit_counts($new_editor_2->id)->{accepted_count},
+ 0,
+ 'The new editor has no accepted edits',
+ );
+
+ my $editor = $editor_data->get_by_id($new_editor_2->id);
+ is($editor->email, undef, 'The new editor has no stored email');
+ is(
+ $editor->email_confirmation_date,
+ undef,
+ 'The new editor has no email confirmation date',
+ );
+ is(
+ $editor->ha1,
+ md5_hex(join(':', $editor->name, 'musicbrainz.org', 'password')),
+ 'The ha1 for the new editor was generated correctly',
+ );
+
+ my $now = DateTime::Format::Pg->parse_datetime(
+ $test->c->sql->select_single_value('SELECT now()'));
+ note('We set an email for the new editor with update_email');
+ $editor_data->update_email($new_editor_2, 'editor@example.com');
+
+ $editor = $editor_data->get_by_id($new_editor_2->id);
+ is(
+ $editor->email,
+ 'editor@example.com',
+ 'The new editor has the correct e-mail address',
+ );
+ ok(
+ $now <= $editor->email_confirmation_date,
+ 'The email confirmation date was updated correctly',
+ );
+
+ note('We set a new password for the new editor with update_password');
+ $editor_data->update_password($new_editor_2->name, 'password2');
+
+ $editor = $editor_data->get_by_id($new_editor_2->id);
+ ok(
+ $editor->match_password('password2'),
+ 'The new editor has the expected new password',
+ );
+
+ note('We search for the new editor email with find_by_email');
+ my @editors = $editor_data->find_by_email('editor@example.com');
+ is(scalar(@editors), 1, 'An editor was found with the exact email');
+ is($editors[0]->id, $new_editor_2->id, 'The right editor was found');
+};
+
test all => sub {
my $test = shift;
@@ -144,42 +213,7 @@ is($alice->preferences->public_ratings, 0, 'load preferences');
is($alice->preferences->datetime_format, '%m/%d/%Y %H:%M:%S', 'datetime_format loaded');
is($alice->preferences->timezone, 'UTC', 'timezone loaded');
-
-my $new_editor_2 = $editor_data->insert({
- name => 'new_editor_2',
- password => 'password',
-});
-ok($new_editor_2->id > $editor->id);
-is($new_editor_2->name, 'new_editor_2', 'new editor 2 has name new_editor_2');
-ok($new_editor_2->match_password('password'), 'new editor 2 has correct password');
-is($editor_data->various_edit_counts($new_editor_2->id)->{accepted_count}, 0, 'new editor 2 has no accepted edits');
-
-
-$editor = $editor_data->get_by_id($new_editor_2->id);
-is($editor->email, undef);
-is($editor->email_confirmation_date, undef);
-is($editor->ha1, md5_hex(join(':', $editor->name, 'musicbrainz.org', 'password')), 'ha1 was generated correctly');
-
-my $now = DateTime::Format::Pg->parse_datetime(
- $test->c->sql->select_single_value('SELECT now()'));
-$editor_data->update_email($new_editor_2, 'editor@example.com');
-
-$editor = $editor_data->get_by_id($new_editor_2->id);
-is($editor->email, 'editor@example.com', 'editor has correct e-mail address');
-ok($now <= $editor->email_confirmation_date, 'email confirmation date updated correctly');
-is($new_editor_2->email_confirmation_date, $editor->email_confirmation_date);
-
-$editor_data->update_password($new_editor_2->name, 'password2');
-
-$editor = $editor_data->get_by_id($new_editor_2->id);
-ok($editor->match_password('password2'));
-
-my @editors = $editor_data->find_by_email('editor@example.com');
-is(scalar(@editors), 1);
-is($editors[0]->id, $new_editor_2->id);
-
-
-@editors = $editor_data->find_by_subscribed_editor(2, 10, 0);
+my @editors = $editor_data->find_by_subscribed_editor(2, 10, 0);
is($editors[1], 1, 'alice is subscribed to one person ...');
is($editors[0][0]->id, 1, ' ... that person is new_editor');
From 2c808bb8b7828bdaee77a52760ac83d4ba8134a8 Mon Sep 17 00:00:00 2001
From: Daniel Erat
Date: Thu, 26 Oct 2023 12:36:35 -0400
Subject: [PATCH 054/194] MBS-13320: Prompt before unloading modified forms
(#3054)
Install a beforeunload event listener on the artist, event,
label, place, recording, release group, series, and work
edit pages that prompts the user if any of the form's inputs
have been changed. This is intended to prevent data loss
if the page is accidentally closed before the form has been
submitted.
One limitation of the approach used here is that it doesn't
detect relationship changes.
Note that the release editor already displays a prompt if
the page is unloaded with unsubmitted changes.
---
root/artist/edit_form.tt | 2 ++
root/event/edit_form.tt | 2 ++
root/label/edit_form.tt | 2 ++
root/place/edit_form.tt | 6 ++++
root/recording/edit_form.tt | 1 +
root/release_group/edit_form.tt | 1 +
root/series/edit_form.tt | 1 +
root/static/scripts/edit/components/forms.js | 33 ++++++++++++++++++++
root/work/edit_form.tt | 6 ++++
t/selenium/Artist_Credit_Editor.json5 | 11 +++++++
t/selenium/Check_Duplicates.json5 | 11 +++++++
t/selenium/External_Links_Editor.json5 | 17 ++++++++++
t/selenium/MBS-9941.json5 | 6 ++++
13 files changed, 99 insertions(+)
diff --git a/root/artist/edit_form.tt b/root/artist/edit_form.tt
index 053fc45a8c7..5de06ded150 100644
--- a/root/artist/edit_form.tt
+++ b/root/artist/edit_form.tt
@@ -111,5 +111,7 @@
MB.Control.initializeBubble("#ipi-bubble", "input[name=edit-artist\\.ipi_codes\\.0]");
MB.Control.initializeBubble("#isni-bubble", "input[name=edit-artist\\.isni_codes\\.0]");
+
+ MB.installFormUnloadWarning();
}());
diff --git a/root/event/edit_form.tt b/root/event/edit_form.tt
index 6b52d27d753..6b04214c6e6 100644
--- a/root/event/edit_form.tt
+++ b/root/event/edit_form.tt
@@ -68,5 +68,7 @@
MB.Control.initializeGuessCase("event", "id-edit-event");
MB.initializeTooShortYearChecks('event');
+
+ MB.installFormUnloadWarning();
}());
diff --git a/root/label/edit_form.tt b/root/label/edit_form.tt
index f3b0b01675c..2fe0ec5a986 100644
--- a/root/label/edit_form.tt
+++ b/root/label/edit_form.tt
@@ -69,5 +69,7 @@
MB.Control.initializeBubble("#ipi-bubble", "input[name=edit-label\\.ipi_codes\\.0]");
MB.Control.initializeBubble("#isni-bubble", "input[name=edit-label\\.isni_codes\\.0]");
+
+ MB.installFormUnloadWarning();
}());
diff --git a/root/place/edit_form.tt b/root/place/edit_form.tt
index 51feb112ea7..7f6d591bfa7 100644
--- a/root/place/edit_form.tt
+++ b/root/place/edit_form.tt
@@ -59,3 +59,9 @@
[%- guesscase_options() -%]
[% script_manifest('place/edit.js') %]
+
+
diff --git a/root/recording/edit_form.tt b/root/recording/edit_form.tt
index 290256dbf73..4c31b3a4811 100644
--- a/root/recording/edit_form.tt
+++ b/root/recording/edit_form.tt
@@ -70,5 +70,6 @@
);
MB.Control.initGuessFeatButton('edit-recording');
MB.Control.initializeBubble("#isrcs-bubble", "input[name=edit-recording\\.isrcs\\.0]");
+ MB.installFormUnloadWarning();
});
diff --git a/root/release_group/edit_form.tt b/root/release_group/edit_form.tt
index dcb377d901b..4b565bbaf86 100644
--- a/root/release_group/edit_form.tt
+++ b/root/release_group/edit_form.tt
@@ -40,5 +40,6 @@
);
MB.Control.initializeGuessCase("release_group", "id-edit-release-group");
MB.Control.initGuessFeatButton('edit-release-group');
+ MB.installFormUnloadWarning();
});
diff --git a/root/series/edit_form.tt b/root/series/edit_form.tt
index 7406f6d8651..241d99895cf 100644
--- a/root/series/edit_form.tt
+++ b/root/series/edit_form.tt
@@ -48,6 +48,7 @@
$(function () {
[%- USE JSON.Escape -%]
MB.orderingTypesByID = [% series_ordering_types.json %];
+ MB.installFormUnloadWarning();
});
diff --git a/root/static/scripts/edit/components/forms.js b/root/static/scripts/edit/components/forms.js
index 132ed3d68f6..33d0d70081d 100644
--- a/root/static/scripts/edit/components/forms.js
+++ b/root/static/scripts/edit/components/forms.js
@@ -59,3 +59,36 @@ MB.initializeArtistCredit = function (form, initialArtistCredit) {
);
});
};
+
+/*
+ * Registers a beforeunload event listener on the window that prompts
+ * the user if any of the page's form inputs have been changed.
+ */
+MB.installFormUnloadWarning = function () {
+ let modified = false;
+
+ const form = document.querySelector('#page form');
+
+ /*
+ * This is somewhat heavy-handed, in that it will still warn even if the
+ * user changes an input back to its original value.
+ */
+ form.addEventListener('change', () => {
+ modified = true;
+ });
+
+ // Disarm the warning when the form is being submitted.
+ form.addEventListener('submit', () => {
+ modified = false;
+ });
+
+ window.addEventListener('beforeunload', event => {
+ if (!modified) {
+ return false;
+ }
+ event.returnValue = l(
+ 'All of your changes will be lost if you leave this page.',
+ );
+ return event.returnValue;
+ });
+};
diff --git a/root/work/edit_form.tt b/root/work/edit_form.tt
index d45fec9ca93..f51d3f67899 100644
--- a/root/work/edit_form.tt
+++ b/root/work/edit_form.tt
@@ -109,3 +109,9 @@
[%- USE JSON.Escape;
script_manifest('work/edit.js', {'data-args' => work_form_json.json})
-%]
+
+
diff --git a/t/selenium/Artist_Credit_Editor.json5 b/t/selenium/Artist_Credit_Editor.json5
index 8d491531b3f..430eac33c84 100644
--- a/t/selenium/Artist_Credit_Editor.json5
+++ b/t/selenium/Artist_Credit_Editor.json5
@@ -300,6 +300,17 @@
target: '/release/add',
value: '',
},
+ // dismiss the beforeunload alert (shown since inputs were changed)
+ {
+ command: 'handleAlert',
+ target: 'accept',
+ value: '',
+ },
+ {
+ command: 'waitUntilUrlIs',
+ target: '/release/add',
+ value: '',
+ },
{
command: 'click',
target: 'css=a[href="#tracklist"]',
diff --git a/t/selenium/Check_Duplicates.json5 b/t/selenium/Check_Duplicates.json5
index b5b89bd9ca7..a5420d4ff1e 100644
--- a/t/selenium/Check_Duplicates.json5
+++ b/t/selenium/Check_Duplicates.json5
@@ -80,5 +80,16 @@
target: 'document.getElementById("id-edit-artist.comment").getAttribute("required")',
value: 'required',
},
+ {
+ command: 'open',
+ target: '/',
+ value: '',
+ },
+ // dismiss the beforeunload alert (shown since inputs were changed)
+ {
+ command: 'handleAlert',
+ target: 'accept',
+ value: '',
+ },
],
}
diff --git a/t/selenium/External_Links_Editor.json5 b/t/selenium/External_Links_Editor.json5
index 0236845a160..72309f8f1db 100644
--- a/t/selenium/External_Links_Editor.json5
+++ b/t/selenium/External_Links_Editor.json5
@@ -32,6 +32,17 @@
target: '/artist/create',
value: '',
},
+ // dismiss the beforeunload alert (shown since inputs were changed)
+ {
+ command: 'handleAlert',
+ target: 'accept',
+ value: '',
+ },
+ {
+ command: 'waitUntilUrlIs',
+ target: '/artist/create',
+ value: '',
+ },
// automatic link type detection for URL
{
command: 'click',
@@ -463,6 +474,12 @@
target: '/release/24d4159a-99d9-425d-a7b8-1b9ec0261a33/edit',
value: '',
},
+ // dismiss the beforeunload alert (shown since inputs were changed)
+ {
+ command: 'handleAlert',
+ target: 'accept',
+ value: '',
+ },
{
command: 'pause',
target: '1500',
diff --git a/t/selenium/MBS-9941.json5 b/t/selenium/MBS-9941.json5
index 3037c56e8df..98e675cb743 100644
--- a/t/selenium/MBS-9941.json5
+++ b/t/selenium/MBS-9941.json5
@@ -81,5 +81,11 @@
target: '/set-language/en',
value: '',
},
+ // Dismiss the beforeunload alert (shown since inputs were changed).
+ {
+ command: 'handleAlert',
+ target: 'accept',
+ value: '',
+ },
],
}
From 32da5cb5f7c3c1a34adcf2dd82ea7f09ed890c15 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Nicol=C3=A1s=20Tamargo?=
Date: Thu, 26 Oct 2023 12:50:58 +0300
Subject: [PATCH 055/194] Split and expand email checking tests
To be expanded further once MBS-13334 is fixed
(right now the ALLCAPS example breaks find_by_email).
---
t/lib/t/MusicBrainz/Server/Data/Editor.pm | 33 +++++++++++++++++++++++
1 file changed, 33 insertions(+)
diff --git a/t/lib/t/MusicBrainz/Server/Data/Editor.pm b/t/lib/t/MusicBrainz/Server/Data/Editor.pm
index a6962adc591..f3f39db24b0 100644
--- a/t/lib/t/MusicBrainz/Server/Data/Editor.pm
+++ b/t/lib/t/MusicBrainz/Server/Data/Editor.pm
@@ -144,11 +144,44 @@ test 'Creating a new editor' => sub {
$editor->match_password('password2'),
'The new editor has the expected new password',
);
+};
+
+test 'find_by_email and is_email_used_elsewhere' => sub {
+ my $test = shift;
+ MusicBrainz::Server::Test->prepare_test_database($test->c, '+editor');
+ my $editor_data = MusicBrainz::Server::Data::Editor->new(c => $test->c);
+
+ note('We create a new editor with just name / password');
+ my $new_editor_2 = $editor_data->insert({
+ name => 'new_editor_2',
+ password => 'password',
+ });
+ # For testing is_email_used_elsewhere
+ my $future_editor_id = $new_editor_2->id + 1;
+
+ note('We set an email for the new editor with update_email');
+ $editor_data->update_email($new_editor_2, 'editor@example.com');
note('We search for the new editor email with find_by_email');
my @editors = $editor_data->find_by_email('editor@example.com');
is(scalar(@editors), 1, 'An editor was found with the exact email');
is($editors[0]->id, $new_editor_2->id, 'The right editor was found');
+
+ note('We check is_email_used_elsewhere shows the email as being in use');
+ ok(
+ $editor_data->is_email_used_elsewhere(
+ 'editor@example.com',
+ $future_editor_id,
+ ),
+ 'The exact email is shown to be in use if another editor wants it',
+ );
+ ok(
+ $editor_data->is_email_used_elsewhere(
+ 'EDITOR@example.com',
+ $future_editor_id,
+ ),
+ 'The email is shown to be in use even if searching with all caps',
+ );
};
test all => sub {
From 4736feb674bfe7009c2bd8a56d59bca74a21e5ba Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Nicol=C3=A1s=20Tamargo?=
Date: Thu, 26 Oct 2023 13:04:02 +0300
Subject: [PATCH 056/194] MBS-13334: Also find emails with capitalization
differences
find_by_email was not finding emails with capitalization differences,
meaning lost_username would tell editors their email was not in use.
We had a better query in is_email_used_elsewhere so this just
reuses effectively the same query for find_by_email.
Using _get_by_keys ran load_preferences, which this does not.
Since we don't seem to use the preferences for our use of find_by_email
I did not bother loading them with the new method.
Added some tests to ensure the right responses by email methods
regardless of caps.
---
lib/MusicBrainz/Server/Data/Editor.pm | 7 ++++-
t/lib/t/MusicBrainz/Server/Data/Editor.pm | 34 ++++++++++++++++++++++-
2 files changed, 39 insertions(+), 2 deletions(-)
diff --git a/lib/MusicBrainz/Server/Data/Editor.pm b/lib/MusicBrainz/Server/Data/Editor.pm
index b4aa1f5045b..7e837a07c70 100644
--- a/lib/MusicBrainz/Server/Data/Editor.pm
+++ b/lib/MusicBrainz/Server/Data/Editor.pm
@@ -182,7 +182,12 @@ around '_get_by_keys' => sub {
sub find_by_email
{
my ($self, $email) = @_;
- return $self->_get_by_keys('email', $email);
+
+ my $query = 'SELECT ' . $self->_columns .
+ ' FROM ' . $self->_table .
+ ' WHERE lower(email) = lower(?)';
+
+ $self->query_to_list($query, [$email]);
}
sub find_by_ip {
diff --git a/t/lib/t/MusicBrainz/Server/Data/Editor.pm b/t/lib/t/MusicBrainz/Server/Data/Editor.pm
index f3f39db24b0..2b9de36fbe3 100644
--- a/t/lib/t/MusicBrainz/Server/Data/Editor.pm
+++ b/t/lib/t/MusicBrainz/Server/Data/Editor.pm
@@ -167,6 +167,10 @@ test 'find_by_email and is_email_used_elsewhere' => sub {
is(scalar(@editors), 1, 'An editor was found with the exact email');
is($editors[0]->id, $new_editor_2->id, 'The right editor was found');
+ @editors = $editor_data->find_by_email('EDITOR@EXAMPLE.COM');
+ is(scalar(@editors), 1, 'An editor was found searching with all caps');
+ is($editors[0]->id, $new_editor_2->id, 'The right editor was found');
+
note('We check is_email_used_elsewhere shows the email as being in use');
ok(
$editor_data->is_email_used_elsewhere(
@@ -177,11 +181,39 @@ test 'find_by_email and is_email_used_elsewhere' => sub {
);
ok(
$editor_data->is_email_used_elsewhere(
- 'EDITOR@example.com',
+ 'EDITOR@EXAMPLE.COM',
$future_editor_id,
),
'The email is shown to be in use even if searching with all caps',
);
+
+ note('We set an all caps email for the new editor with update_email');
+ $editor_data->update_email($new_editor_2, 'EDITOR@EXAMPLE.COM');
+
+ note('We search for the new editor email with find_by_email');
+ my @editors = $editor_data->find_by_email('EDITOR@EXAMPLE.COM');
+ is(scalar(@editors), 1, 'An editor was found with the exact email');
+ is($editors[0]->id, $new_editor_2->id, 'The right editor was found');
+
+ @editors = $editor_data->find_by_email('editor@example.com');
+ is(scalar(@editors), 1, 'An editor was found searching with normal caps');
+ is($editors[0]->id, $new_editor_2->id, 'The right editor was found');
+
+ note('We check is_email_used_elsewhere shows the email as being in use');
+ ok(
+ $editor_data->is_email_used_elsewhere(
+ 'EDITOR@EXAMPLE.COM',
+ $future_editor_id,
+ ),
+ 'The exact email is shown to be in use if another editor wants it',
+ );
+ ok(
+ $editor_data->is_email_used_elsewhere(
+ 'editor@example.com',
+ $future_editor_id,
+ ),
+ 'The email is shown to be in use even if searching with normal caps',
+ );
};
test all => sub {
From 453ce8d8e39bac21b51613bc038e91e7054acb6b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Nicol=C3=A1s=20Tamargo?=
Date: Thu, 26 Oct 2023 13:18:47 +0300
Subject: [PATCH 057/194] Split editor subscription methods into separate test
For clarity / readability. Also improve labels.
---
t/lib/t/MusicBrainz/Server/Data/Editor.pm | 66 +++++++++++++----------
1 file changed, 38 insertions(+), 28 deletions(-)
diff --git a/t/lib/t/MusicBrainz/Server/Data/Editor.pm b/t/lib/t/MusicBrainz/Server/Data/Editor.pm
index 2b9de36fbe3..6ed452a5d48 100644
--- a/t/lib/t/MusicBrainz/Server/Data/Editor.pm
+++ b/t/lib/t/MusicBrainz/Server/Data/Editor.pm
@@ -277,46 +277,56 @@ $editor_data->load_preferences($alice);
is($alice->preferences->public_ratings, 0, 'load preferences');
is($alice->preferences->datetime_format, '%m/%d/%Y %H:%M:%S', 'datetime_format loaded');
is($alice->preferences->timezone, 'UTC', 'timezone loaded');
+};
+
+test 'Editor subscription methods' => sub {
+ my $test = shift;
-my @editors = $editor_data->find_by_subscribed_editor(2, 10, 0);
-is($editors[1], 1, 'alice is subscribed to one person ...');
-is($editors[0][0]->id, 1, ' ... that person is new_editor');
+ MusicBrainz::Server::Test->prepare_test_database($test->c, '+editor');
+ my $editor_data = MusicBrainz::Server::Data::Editor->new(c => $test->c);
-@editors = $editor_data->find_subscribers(1, 10, 0);
-is($editors[1], 1, 'new_editor has one subscriber ...');
-is($editors[0][0]->id, 2, ' ... that subscriber is alice');
+ subtest 'find_by_subscribed_editor' => sub {
+ my @editors = $editor_data->find_by_subscribed_editor(2, 10, 0);
+ is($editors[1], 1, 'alice is subscribed to one person ...');
+ is($editors[0][0]->id, 1, ' ... that person is new_editor');
+ @editors = $editor_data->find_by_subscribed_editor(1, 10, 0);
+ is($editors[1], 0, 'new_editor has not subscribed to anyone');
+ };
-@editors = $editor_data->find_by_subscribed_editor(1, 10, 0);
-is($editors[1], 0, 'new_editor has not subscribed to anyone');
+ subtest 'find_subscribers' => sub {
+ my @editors = $editor_data->find_subscribers(1, 10, 0);
+ is($editors[1], 1, 'new_editor has one subscriber ...');
+ is($editors[0][0]->id, 2, ' ... that subscriber is alice');
-@editors = $editor_data->find_subscribers(2, 10, 0);
-is($editors[1], 0, 'alice has no subscribers');
-subtest 'Find editors with subscriptions' => sub {
- my @editors = $editor_data->editors_with_subscriptions(0, 1000);
- is(@editors => 1, 'found 1 editor');
- is($editors[0]->id => 2, 'is editor #2');
+ @editors = $editor_data->find_subscribers(2, 10, 0);
+ is($editors[1], 0, 'alice has no subscribers');
+ };
- @editors = $editor_data->editors_with_subscriptions(1, 1000);
- is(@editors => 1, 'found 1 editor');
- is($editors[0]->id => 2, 'is editor #2');
+ subtest 'editors_with_subscriptions' => sub {
+ my @editors = $editor_data->editors_with_subscriptions(0, 1000);
+ is(@editors => 1, 'Found 1 editor searching with no offset');
+ is($editors[0]->id => 2, 'The editor is editor #2');
- @editors = $editor_data->editors_with_subscriptions(2, 1000);
- is(@editors => 0, 'found no editor');
+ @editors = $editor_data->editors_with_subscriptions(1, 1000);
+ is(@editors => 1, 'Found 1 editor searching with offset 1');
+ is($editors[0]->id => 2, 'The editor is editor #2');
- note('We mark editor #2 as a spammer (plus block edits and notes privs)');
- $test->c->sql->do(<<~'SQL');
- UPDATE editor
- SET privs = 7168
- WHERE id = 2
- SQL
+ @editors = $editor_data->editors_with_subscriptions(2, 1000);
+ is(@editors => 0, 'Found no editors searching with offset 2');
- @editors = $editor_data->editors_with_subscriptions(0, 1000);
- is(@editors => 0, 'now-spammer editor #2 is no longer returned');
-};
+ note('We mark editor #2 as a spammer (+ block edit & notes privs)');
+ $test->c->sql->do(<<~'SQL');
+ UPDATE editor
+ SET privs = 7168
+ WHERE id = 2
+ SQL
+ @editors = $editor_data->editors_with_subscriptions(0, 1000);
+ is(@editors => 0, 'Found no editors since spammer is not returned');
+ };
};
test 'Deleting editors without data fully deletes them' => sub {
From cb7724918f9ddf258bacce1a452a9eaffde32720 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Nicol=C3=A1s=20Tamargo?=
Date: Thu, 26 Oct 2023 13:30:51 +0300
Subject: [PATCH 058/194] Split various_edit_counts into separate test
For clarity / readability. Also improve labels.
---
t/lib/t/MusicBrainz/Server/Data/Editor.pm | 55 ++++++++++++++---------
1 file changed, 33 insertions(+), 22 deletions(-)
diff --git a/t/lib/t/MusicBrainz/Server/Data/Editor.pm b/t/lib/t/MusicBrainz/Server/Data/Editor.pm
index 6ed452a5d48..2ab3a331789 100644
--- a/t/lib/t/MusicBrainz/Server/Data/Editor.pm
+++ b/t/lib/t/MusicBrainz/Server/Data/Editor.pm
@@ -231,11 +231,6 @@ is($editor->id, 1, 'id');
is($editor->name, 'new_editor', 'name');
ok($editor->match_password('password'));
is($editor->privileges, 1+8+32+512, 'privileges');
-my $edit_counts = $editor_data->various_edit_counts($editor->id);
-is($edit_counts->{accepted_count}, 0, 'accepted edits');
-is($edit_counts->{rejected_count}, 0, 'rejected edits');
-is($edit_counts->{failed_count}, 0, 'failed edits');
-is($edit_counts->{accepted_auto_count}, 0, 'auto edits');
is_deeply($editor->last_login_date, DateTime->new(year => 2013, month => 4, day => 5),
'last login date');
@@ -254,23 +249,6 @@ 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(<<~"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),
- (3, \$1, 1, $STATUS_FAILEDVOTE, now(), 0),
- (4, \$1, 1, $STATUS_FAILEDDEP, now(), 0);
- INSERT INTO edit_data (edit, data)
- SELECT x, '{}' FROM generate_series(1, 4) x;
- SQL
-
-$editor = $editor_data->get_by_id($editor->id);
-$edit_counts = $editor_data->various_edit_counts($editor->id);
-is($edit_counts->{accepted_count}, 1, 'accepted edits');
-is($edit_counts->{rejected_count}, 1, 'rejected edits');
-is($edit_counts->{failed_count}, 1, 'failed edits');
-is($edit_counts->{accepted_auto_count}, 1, 'auto edits');
-
my $alice = $editor_data->get_by_name('alice');
# Test preferences
$editor_data->load_preferences($alice);
@@ -279,6 +257,39 @@ is($alice->preferences->datetime_format, '%m/%d/%Y %H:%M:%S', 'datetime_format l
is($alice->preferences->timezone, 'UTC', 'timezone loaded');
};
+test 'various_edit_counts' => sub {
+ my $test = shift;
+ MusicBrainz::Server::Test->prepare_test_database($test->c, '+editor');
+ my $editor_data = MusicBrainz::Server::Data::Editor->new(c => $test->c);
+
+ my $editor = $editor_data->get_by_id(1);
+ note('We load various_edit_counts for editor 1 (should be empty)');
+ my $edit_counts = $editor_data->various_edit_counts(1);
+ is($edit_counts->{accepted_count}, 0, 'There are no accepted edits');
+ is($edit_counts->{rejected_count}, 0, 'There are no rejected edits');
+ is($edit_counts->{failed_count}, 0, 'There are no failed edits');
+ is($edit_counts->{accepted_auto_count}, 0, 'There are no auto edits');
+
+ note('We insert a bunch of edits for editor 1');
+ $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),
+ (3, \$1, 1, $STATUS_FAILEDVOTE, now(), 0),
+ (4, \$1, 1, $STATUS_FAILEDDEP, now(), 0);
+ INSERT INTO edit_data (edit, data)
+ SELECT x, '{}' FROM generate_series(1, 4) x;
+ SQL
+
+ $editor = $editor_data->get_by_id(1);
+ note('We load various_edit_counts for editor 1 again');
+ $edit_counts = $editor_data->various_edit_counts($editor->id);
+ is($edit_counts->{accepted_count}, 1, 'There is 1 accepted edit');
+ is($edit_counts->{rejected_count}, 1, 'There is 1 rejected edit');
+ is($edit_counts->{failed_count}, 1, 'There is 1 failed edit');
+ is($edit_counts->{accepted_auto_count}, 1, 'There is 1 auto edit');
+};
+
test 'Editor subscription methods' => sub {
my $test = shift;
From 1d859080a983de1b5a211ffe8d7876e24efa6eba Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Nicol=C3=A1s=20Tamargo?=
Date: Thu, 26 Oct 2023 13:36:38 +0300
Subject: [PATCH 059/194] Give a name to remaining 'all' test and add labels
---
t/lib/t/MusicBrainz/Server/Data/Editor.pm | 93 +++++++++++++++--------
1 file changed, 63 insertions(+), 30 deletions(-)
diff --git a/t/lib/t/MusicBrainz/Server/Data/Editor.pm b/t/lib/t/MusicBrainz/Server/Data/Editor.pm
index 2ab3a331789..6c77815ab00 100644
--- a/t/lib/t/MusicBrainz/Server/Data/Editor.pm
+++ b/t/lib/t/MusicBrainz/Server/Data/Editor.pm
@@ -216,45 +216,78 @@ test 'find_by_email and is_email_used_elsewhere' => sub {
);
};
-test all => sub {
-
-my $test = shift;
-
-MusicBrainz::Server::Test->prepare_test_database($test->c, '+editor');
-
-my $editor_data = MusicBrainz::Server::Data::Editor->new(c => $test->c);
+test 'Getting/loading existing editors' => sub {
+ my $test = shift;
-my $editor = $editor_data->get_by_id(1);
-ok(defined $editor, 'no editor returned');
-isa_ok($editor, 'MusicBrainz::Server::Entity::Editor', 'not a editor');
-is($editor->id, 1, 'id');
-is($editor->name, 'new_editor', 'name');
-ok($editor->match_password('password'));
-is($editor->privileges, 1+8+32+512, 'privileges');
+ MusicBrainz::Server::Test->prepare_test_database($test->c, '+editor');
-is_deeply($editor->last_login_date, DateTime->new(year => 2013, month => 4, day => 5),
- 'last login date');
+ my $editor_data = MusicBrainz::Server::Data::Editor->new(c => $test->c);
-is_deeply($editor->email_confirmation_date, DateTime->new(year => 2005, month => 10, day => 20),
- 'email confirm');
+ note('We get the editor with id 1 using get_by_id');
+ my $editor = $editor_data->get_by_id(1);
+ ok(defined $editor, 'An editor was returned');
+ isa_ok($editor, 'MusicBrainz::Server::Entity::Editor');
+ is($editor->id, 1, 'The editor has the expected id');
+ is($editor->name, 'new_editor', 'The editor has the expected name');
+ ok(
+ $editor->match_password('password'),
+ 'The editor has the expected password',
+ );
+ is(
+ $editor->privileges,
+ 1+8+32+512,
+ 'The editor has the expected privileges',
+ );
-is_deeply($editor->registration_date, DateTime->new(year => 1989, month => 7, day => 23),
- 'registration date');
+ is_deeply(
+ $editor->last_login_date,
+ DateTime->new(year => 2013, month => 4, day => 5),
+ 'The editor has the expected last login date',
+ );
+ is_deeply(
+ $editor->email_confirmation_date,
+ DateTime->new(year => 2005, month => 10, day => 20),
+ 'The editor has the expected email confirmation date',
+ );
-my $editor2 = $editor_data->get_by_name('new_editor');
-is_deeply($editor, $editor2);
+ is_deeply(
+ $editor->registration_date,
+ DateTime->new(year => 1989, month => 7, day => 23),
+ 'The editor has the expected registration date',
+ );
+ my $editor2 = $editor_data->get_by_name('new_editor');
+ is_deeply(
+ $editor,
+ $editor2,
+ 'Fetching the editor by name with get_by_name returns the same data',
+ );
-$editor2 = $editor_data->get_by_name('nEw_EdItOr');
-is_deeply($editor, $editor2, 'fetching by name is case insensitive');
+ $editor2 = $editor_data->get_by_name('nEw_EdItOr');
+ is_deeply(
+ $editor,
+ $editor2,
+ 'Fetching the editor by name with get_by_name is case-insensitive',
+ );
-my $alice = $editor_data->get_by_name('alice');
-# Test preferences
-$editor_data->load_preferences($alice);
-is($alice->preferences->public_ratings, 0, 'load preferences');
-is($alice->preferences->datetime_format, '%m/%d/%Y %H:%M:%S', 'datetime_format loaded');
-is($alice->preferences->timezone, 'UTC', 'timezone loaded');
+ note('We load editor "alice" and their preferences');
+ my $alice = $editor_data->get_by_name('alice');
+ $editor_data->load_preferences($alice);
+ is(
+ $alice->preferences->public_ratings,
+ 0,
+ 'The preference to make ratings private is loaded',
+ );
+ is(
+ $alice->preferences->datetime_format,
+ '%m/%d/%Y %H:%M:%S',
+ 'The datetime_format preference is loaded');
+ is(
+ $alice->preferences->timezone,
+ 'UTC',
+ 'The preferred timezone is loaded',
+ );
};
test 'various_edit_counts' => sub {
From ddd6dd026b05868bdfa85a56862d45ace5dac391 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Nicol=C3=A1s=20Tamargo?=
Date: Thu, 26 Oct 2023 19:00:19 +0300
Subject: [PATCH 060/194] Add labels to all tests in Data::Editor
---
t/lib/t/MusicBrainz/Server/Data/Editor.pm | 181 +++++++++++++++-------
1 file changed, 123 insertions(+), 58 deletions(-)
diff --git a/t/lib/t/MusicBrainz/Server/Data/Editor.pm b/t/lib/t/MusicBrainz/Server/Data/Editor.pm
index 6c77815ab00..24f05c5fa54 100644
--- a/t/lib/t/MusicBrainz/Server/Data/Editor.pm
+++ b/t/lib/t/MusicBrainz/Server/Data/Editor.pm
@@ -1,6 +1,7 @@
package t::MusicBrainz::Server::Data::Editor;
use strict;
use warnings;
+use utf8;
use Test::Fatal;
use Test::Routine;
@@ -424,20 +425,47 @@ test 'Deleting editors removes most information' => sub {
$model->delete(1);
my $bob = $model->get_by_id(1);
- is($bob->name, 'Deleted Editor #' . $bob->id);
- is($bob->password, Authen::Passphrase::RejectAll->new->as_rfc2307);
- is($bob->privileges, 0);
+ is(
+ $bob->name,
+ 'Deleted Editor #' . $bob->id,
+ 'The editor name is now "Deleted Editor" plus an ID',
+ );
+ is(
+ $bob->password,
+ Authen::Passphrase::RejectAll->new->as_rfc2307,
+ 'The password has been deleted',
+ );
+ is($bob->privileges, 0, 'The editor privileges have been blanked');
my $edit_counts = $model->various_edit_counts($bob->id);
- is($edit_counts->{accepted_count}, 1);
- is($edit_counts->{rejected_count}, 1);
- is($edit_counts->{accepted_auto_count}, 0);
- is($edit_counts->{failed_count}, 1);
- is($bob->deleted, 1);
+ is(
+ $edit_counts->{accepted_count},
+ 1,
+ 'The editor’s accepted edit count is unchanged',
+ );
+ is(
+ $edit_counts->{rejected_count},
+ 1,
+ 'The editor’s rejected edit count is unchanged',
+ );
+ is(
+ $edit_counts->{accepted_auto_count},
+ 0,
+ 'The editor’s auto-accepted edit count is unchanged',
+ );
+ is(
+ $edit_counts->{failed_count},
+ 1,
+ 'The editor’s failed edit count is unchanged',
+ );
+ is($bob->deleted, 1, 'The editor is marked as deleted');
# The name should be prevented from being reused by default (MBS-9271).
- ok($c->sql->select_single_value(
- 'SELECT 1 FROM old_editor_name WHERE name = ?', 'Bob'
- ));
+ ok(
+ $c->sql->select_single_value(
+ 'SELECT 1 FROM old_editor_name WHERE name = ?', 'Bob'
+ ),
+ 'The editor name is listed in old_editor_name as not reusable',
+ );
# Ensure all other attributes are cleared
my $exclusions = Set::Scalar->new(
@@ -448,12 +476,12 @@ test 'Deleting editors removes most information' => sub {
for my $attribute (grep { !$exclusions->contains($_->name) }
object_attributes($bob)) {
attribute_value_is($attribute, $bob, undef,
- $attribute->name . ' is now undef');
+ $attribute->name . ' has been blanked');
}
# Ensure all languages have been cleared
$c->model('EditorLanguage')->load_for_editor($bob);
- is(@{ $bob->languages }, 0);
+ is(@{ $bob->languages }, 0, 'The editor languages have been blanked');
# Ensure all preferences are cleared
my $prefs = $bob->preferences;
@@ -464,7 +492,7 @@ test 'Deleting editors removes most information' => sub {
else {
attribute_value_is(
$attribute, $prefs, $attribute->default($prefs),
- 'Preference ' . $attribute->name . ' was cleared');
+ 'Preference ' . $attribute->name . ' has been blanked');
}
}
@@ -472,7 +500,7 @@ test 'Deleting editors removes most information' => sub {
my $tags = $c->sql->select_single_column_array(
'SELECT tag FROM area_tag_raw WHERE editor = ?', 1
);
- is(@$tags, 0);
+ is(@$tags, 0, 'All tags by the editor have been blanked');
};
test 'Deleting an editor cancels all open edits' => sub {
@@ -481,6 +509,7 @@ test 'Deleting an editor cancels all open edits' => sub {
MusicBrainz::Server::Test->prepare_test_database($test->c, '+editor');
+ note('We enter an autoedit for the editor');
my $applied_edit = $c->model('Edit')->create(
edit_type => $EDIT_ARTIST_EDIT,
editor_id => 1,
@@ -490,8 +519,13 @@ test 'Deleting an editor cancels all open edits' => sub {
isni_codes => [],
);
- is($applied_edit->status, $STATUS_APPLIED);
+ is(
+ $applied_edit->status,
+ $STATUS_APPLIED,
+ 'The edit is marked as applied',
+ );
+ note('We enter a normal edit for the editor');
my $open_edit = $c->model('Edit')->create(
edit_type => $EDIT_ARTIST_EDIT,
editor_id => 1,
@@ -502,12 +536,21 @@ test 'Deleting an editor cancels all open edits' => sub {
privileges => $UNTRUSTED_FLAG,
);
- is($open_edit->status, $STATUS_OPEN);
+ is($open_edit->status, $STATUS_OPEN, 'The edit is marked as open');
+ note('We delete the editor');
$c->model('Editor')->delete(1);
- is($c->model('Edit')->get_by_id($applied_edit->id)->status, $STATUS_APPLIED);
- is($c->model('Edit')->get_by_id($open_edit->id)->status, $STATUS_DELETED);
+ is(
+ $c->model('Edit')->get_by_id($applied_edit->id)->status,
+ $STATUS_APPLIED,
+ 'The autoedit is still marked as applied',
+ );
+ is(
+ $c->model('Edit')->get_by_id($open_edit->id)->status,
+ $STATUS_DELETED,
+ 'The open edit is now marked as cancelled',
+ );
};
test 'Deleting an editor changes all Yes/No votes on open edits to Abstain' => sub {
@@ -614,7 +657,11 @@ test 'Deleting an editor unsubscribes anyone who was subscribed to them' => sub
SQL
$c->model('Editor')->delete(1);
- is(scalar($c->model('Editor')->subscription->get_subscriptions(2)), 0);
+ is(
+ scalar($c->model('Editor')->subscription->get_subscriptions(2)),
+ 0,
+ 'The editor has no subscribers anymore',
+ );
};
test 'Open edit and last-24-hour counts' => sub {
@@ -623,6 +670,7 @@ test 'Open edit and last-24-hour counts' => sub {
MusicBrainz::Server::Test->prepare_test_database($test->c, '+editor');
+ note('We enter an autoedit for the editor');
$c->model('Edit')->create(
edit_type => $EDIT_ARTIST_EDIT,
editor_id => 1,
@@ -632,7 +680,8 @@ test 'Open edit and last-24-hour counts' => sub {
isni_codes => []
);
- my $open_edit = $c->model('Edit')->create(
+ note('We enter a normal for the editor');
+ $c->model('Edit')->create(
edit_type => $EDIT_ARTIST_EDIT,
editor_id => 1,
to_edit => $c->model('Artist')->get_by_id(1),
@@ -642,10 +691,16 @@ test 'Open edit and last-24-hour counts' => sub {
privileges => $UNTRUSTED_FLAG,
);
- is($open_edit->status, $STATUS_OPEN);
-
- is($c->model('Editor')->various_edit_counts(1)->{open_count}, 1, 'Open edit count is 1');
- is($c->model('Editor')->last_24h_edit_count(1), 2, 'Last 24h count is 2');
+ is(
+ $c->model('Editor')->various_edit_counts(1)->{open_count},
+ 1,
+ 'The editor’s open edit count is 1',
+ );
+ is(
+ $c->model('Editor')->last_24h_edit_count(1),
+ 2,
+ 'The editor’s last 24h edit count is 2',
+ );
};
test 'subscription_summary' => sub {
@@ -681,19 +736,29 @@ test 'subscription_summary' => sub {
INSERT INTO editor_subscribe_series (id, editor, series, last_edit_sent) VALUES (1, 1, 1, 1);
SQL
- is_deeply($test->c->model('Editor')->subscription_summary(1),
- { artist => 1,
- collection => 1,
- label => 1,
- editor => 1,
- series => 1 });
-
- is_deeply($test->c->model('Editor')->subscription_summary(2),
- { artist => 0,
- collection => 0,
- label => 1,
- editor => 0,
- series => 0 });
+ is_deeply(
+ $test->c->model('Editor')->subscription_summary(1),
+ {
+ artist => 1,
+ collection => 1,
+ label => 1,
+ editor => 1,
+ series => 1,
+ },
+ 'The subscription summary for editor 1 has the expected counts',
+ );
+
+ is_deeply(
+ $test->c->model('Editor')->subscription_summary(2),
+ {
+ artist => 0,
+ collection => 0,
+ label => 1,
+ editor => 0,
+ series => 0,
+ },
+ 'The subscription summary for editor 2 has the expected counts',
+ );
};
@@ -713,45 +778,45 @@ test 'Searching editor by email (for admin only)' => sub {
diag('Bounded search with trimmed user info and escaped host name (recommended)');
my ($editors, $hits) = $editor_data->search_by_email('^abc@f\.g\.h$');
- is($hits => 2, 'found 2 editors');
- is(@$editors[0]->id => 1, 'is editor #1');
- is(@$editors[1]->id => 2, 'is editor #2');
+ is($hits => 2, 'Found 2 editors');
+ is(@$editors[0]->id => 1, 'First is editor #1');
+ is(@$editors[1]->id => 2, 'Second is editor #2');
diag('Bounded search with trimmed user info and escaped host name (ALL CAPS)');
($editors, $hits) = $editor_data->search_by_email('^ABC@F\.G\.H$');
- is($hits => 2, 'found 2 editors');
- is(@$editors[0]->id => 1, 'is editor #1');
- is(@$editors[1]->id => 2, 'is editor #2');
+ is($hits => 2, 'Found 2 editors');
+ is(@$editors[0]->id => 1, 'First is editor #1');
+ is(@$editors[1]->id => 2, 'Second is editor #2');
diag('Search with trimmed user info suffix and escaped host name prefix');
($editors, $hits) = $editor_data->search_by_email('bc@f\.g');
- is($hits => 2, 'found 2 editors');
- is(@$editors[0]->id => 1, 'is editor #1');
- is(@$editors[1]->id => 2, 'is editor #2');
+ is($hits => 2, 'Found 2 editors');
+ is(@$editors[0]->id => 1, 'First is editor #1');
+ is(@$editors[1]->id => 2, 'Second is editor #2');
diag('Search with trimmed user info and unescaped host name');
($editors, $hits) = $editor_data->search_by_email('abc@f.g.h');
- is($hits => 3, 'found 3 editors');
- is(@$editors[0]->id => 1, 'is editor #1');
- is(@$editors[1]->id => 2, 'is editor #2');
+ is($hits => 3, 'Found 3 editors');
+ is(@$editors[0]->id => 1, 'First is editor #1');
+ is(@$editors[1]->id => 2, 'Second is editor #2');
# Special character '.' matches '-'
- is(@$editors[2]->id => 3, 'is editor #3');
+ is(@$editors[2]->id => 3, 'Third is editor #3');
diag('Search with trimmed user info only');
($editors, $hits) = $editor_data->search_by_email('abc@');
- is($hits => 4, 'found 4 editors');
- is(@$editors[0]->id => 1, 'is editor #1');
- is(@$editors[1]->id => 2, 'is editor #2');
- is(@$editors[2]->id => 3, 'is editor #3');
- is(@$editors[3]->id => 5, 'is editor #5');
+ is($hits => 4, 'Found 4 editors');
+ is(@$editors[0]->id => 1, 'First is editor #1');
+ is(@$editors[1]->id => 2, 'Second is editor #2');
+ is(@$editors[2]->id => 3, 'Third is editor #3');
+ is(@$editors[3]->id => 5, 'Fourth is editor #5');
diag('Search with untrimmed unescaped user info only');
($editors, $hits) = $editor_data->search_by_email('a.b.c+d.e@');
- is($hits => 0, 'found 0 editors');
+ is($hits => 0, 'Found 0 editors');
diag('Search with untrimmed escaped user info only');
($editors, $hits) = $editor_data->search_by_email('a\.b\.c\+d\.e@');
- is($hits => 0, 'found 0 editors');
+ is($hits => 0, 'Found 0 editors');
};
1;
From ebbadda47b6186597838db03ecdd0dcc67072d96 Mon Sep 17 00:00:00 2001
From: Daniel Erat
Date: Tue, 31 Oct 2023 13:24:14 -0400
Subject: [PATCH 061/194] MBS-13320 (II): Warn on form unload with rel changes
(#3064)
Make the beforeunload listener installed by
MB.installFormUnloadWarning additionally use CSS selectors
to check for pending relationship or URL changes.
Previously, only changes to input elements were detected.
---
root/static/scripts/edit/components/forms.js | 22 ++++++++++++++++----
t/selenium/MBS-12641.json5 | 11 ++++++++++
2 files changed, 29 insertions(+), 4 deletions(-)
diff --git a/root/static/scripts/edit/components/forms.js b/root/static/scripts/edit/components/forms.js
index 33d0d70081d..9030e5a9d97 100644
--- a/root/static/scripts/edit/components/forms.js
+++ b/root/static/scripts/edit/components/forms.js
@@ -65,7 +65,8 @@ MB.initializeArtistCredit = function (form, initialArtistCredit) {
* the user if any of the page's form inputs have been changed.
*/
MB.installFormUnloadWarning = function () {
- let modified = false;
+ let inputsChanged = false;
+ let submittingForm = false;
const form = document.querySelector('#page form');
@@ -74,18 +75,31 @@ MB.installFormUnloadWarning = function () {
* user changes an input back to its original value.
*/
form.addEventListener('change', () => {
- modified = true;
+ inputsChanged = true;
});
// Disarm the warning when the form is being submitted.
form.addEventListener('submit', () => {
- modified = false;
+ submittingForm = true;
});
window.addEventListener('beforeunload', event => {
- if (!modified) {
+ if (submittingForm) {
return false;
}
+
+ // Check if there are pending relationship or URL changes.
+ if (!inputsChanged && !form.querySelector([
+ '#relationship-editor .rel-add',
+ '#relationship-editor .rel-edit',
+ '#relationship-editor .rel-remove',
+ '#external-links-editor .rel-add',
+ '#external-links-editor .rel-edit',
+ '#external-links-editor .rel-remove',
+ ].join(', '))) {
+ return false;
+ }
+
event.returnValue = l(
'All of your changes will be lost if you leave this page.',
);
diff --git a/t/selenium/MBS-12641.json5 b/t/selenium/MBS-12641.json5
index ddd0b2ccd0e..157b63db852 100644
--- a/t/selenium/MBS-12641.json5
+++ b/t/selenium/MBS-12641.json5
@@ -66,5 +66,16 @@
target: 'document.activeElement === document.querySelector("#add-relationship-dialog select.entity-type")',
value: 'true',
},
+ {
+ command: 'open',
+ target: '/',
+ value: '',
+ },
+ // Dismiss the beforeunload alert (shown since relationships were changed).
+ {
+ command: 'handleAlert',
+ target: 'accept',
+ value: '',
+ },
],
}
From c0925591bf11d69cd0c1fd01e18bf64f2025e8c6 Mon Sep 17 00:00:00 2001
From: Michael Wiencek
Date: Tue, 31 Oct 2023 12:31:02 -0500
Subject: [PATCH 062/194] Upgrade Flow to 0.220.0
https://github.com/facebook/flow/releases/tag/v0.220.0
Fixes one issue where a parameter to CompT (in EditAliasEditGenericT) was
expected to only occur in output positions. I'm not sure which changelog entry
is relevant.
---
package.json | 2 +-
root/types/edit.js | 2 +-
yarn.lock | 8 ++++----
3 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/package.json b/package.json
index fcea4624431..8cef7fbaa08 100644
--- a/package.json
+++ b/package.json
@@ -84,7 +84,7 @@
"eslint-plugin-react": "7.33.1",
"eslint-plugin-react-hooks": "4.6.0",
"file-url": "2.0.2",
- "flow-bin": "0.219.3",
+ "flow-bin": "0.220.0",
"gettext-parser": "3.1.0",
"hermes-eslint": "0.16.0",
"http-proxy": "1.18.1",
diff --git a/root/types/edit.js b/root/types/edit.js
index c7b41148f4f..641cef4c813 100644
--- a/root/types/edit.js
+++ b/root/types/edit.js
@@ -9,7 +9,7 @@
/* eslint-disable no-unused-vars */
-declare type CompT = {
+declare type CompT<+T> = {
+new: T,
+old: T,
};
diff --git a/yarn.lock b/yarn.lock
index 0dcf41c0cfe..5b75d831080 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2662,10 +2662,10 @@ flatted@^3.2.7:
resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.9.tgz#7eb4c67ca1ba34232ca9d2d93e9886e611ad7daf"
integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==
-flow-bin@0.219.3:
- version "0.219.3"
- resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.219.3.tgz#a3a26d27c726c7e20477f394570ec6b1fb41fbe0"
- integrity sha512-5O+G8pXqu0UClXLhTj2g/ZdNCQo4odYKs/6VHCnhOcvATrJIJcOJuW7WgjXMsGuV4aVeBmeFO93isE4cop9K/Q==
+flow-bin@0.220.0:
+ version "0.220.0"
+ resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.220.0.tgz#4d4736597ad79be5991b1c24014a6d355190ee76"
+ integrity sha512-FcnXLu6AlkoL54hp2IUKgHkYRhSpt7PtTolHLAC/7nq9Lqkfv3kt8JYaRBb5yufLaC4HNJ/G7KRoa1phJy8yGA==
follow-redirects@^1.0.0:
version "1.15.3"
From c3afb58da3daf7e045266e13016279c341b5ef42 Mon Sep 17 00:00:00 2001
From: Vac31
Date: Tue, 31 Oct 2023 22:27:55 +0000
Subject: [PATCH 063/194] Translated using Weblate (Lithuanian)
Currently translated at 72.9% (400 of 548 strings)
Translated using Weblate (Lithuanian)
Currently translated at 20.4% (360 of 1762 strings)
Translated using Weblate (Lithuanian)
Currently translated at 18.2% (321 of 1762 strings)
Translated using Weblate (Lithuanian)
Currently translated at 16.6% (294 of 1762 strings)
Translated using Weblate (Lithuanian)
Currently translated at 72.6% (398 of 548 strings)
Translated using Weblate (Lithuanian)
Currently translated at 70.4% (386 of 548 strings)
Translated using Weblate (Lithuanian)
Currently translated at 100.0% (258 of 258 strings)
Translated using Weblate (Lithuanian)
Currently translated at 9.5% (318 of 3323 strings)
Translated using Weblate (Lithuanian)
Currently translated at 100.0% (159 of 159 strings)
Translated using Weblate (Lithuanian)
Currently translated at 67.8% (372 of 548 strings)
Translated using Weblate (Lithuanian)
Currently translated at 100.0% (258 of 258 strings)
Translated using Weblate (Lithuanian)
Currently translated at 62.5% (343 of 548 strings)
Translated using Weblate (Lithuanian)
Currently translated at 100.0% (159 of 159 strings)
Translated using Weblate (Lithuanian)
Currently translated at 61.6% (338 of 548 strings)
Translated using Weblate (Lithuanian)
Currently translated at 4.6% (75 of 1625 strings)
Translated using Weblate (Lithuanian)
Currently translated at 100.0% (159 of 159 strings)
Translated using Weblate (Lithuanian)
Currently translated at 45.4% (249 of 548 strings)
Translated using Weblate (Lithuanian)
Currently translated at 9.5% (317 of 3323 strings)
Translated using Weblate (Lithuanian)
Currently translated at 14.5% (256 of 1762 strings)
Translated using Weblate (Lithuanian)
Currently translated at 10.7% (190 of 1762 strings)
Translated using Weblate (Lithuanian)
Currently translated at 8.9% (158 of 1762 strings)
Translated using Weblate (Lithuanian)
Currently translated at 8.4% (149 of 1762 strings)
Translated using Weblate (Lithuanian)
Currently translated at 5.9% (105 of 1762 strings)
Translated using Weblate (Lithuanian)
Currently translated at 5.6% (37 of 660 strings)
Translated using Weblate (Lithuanian)
Currently translated at 5.9% (104 of 1762 strings)
Translated using Weblate (Lithuanian)
Currently translated at 9.5% (317 of 3323 strings)
Translated using Weblate (Lithuanian)
Currently translated at 100.0% (159 of 159 strings)
Translated using Weblate (Lithuanian)
Currently translated at 18.6% (102 of 548 strings)
Translated using Weblate (Lithuanian)
Currently translated at 3.1% (55 of 1762 strings)
Co-authored-by: Vac31
Translate-URL: https://translations.metabrainz.org/projects/musicbrainz/attributes/lt/
Translate-URL: https://translations.metabrainz.org/projects/musicbrainz/countries/lt/
Translate-URL: https://translations.metabrainz.org/projects/musicbrainz/languages/lt/
Translate-URL: https://translations.metabrainz.org/projects/musicbrainz/relationship-types/lt/
Translate-URL: https://translations.metabrainz.org/projects/musicbrainz/scripts/lt/
Translate-URL: https://translations.metabrainz.org/projects/musicbrainz/server/lt/
Translate-URL: https://translations.metabrainz.org/projects/musicbrainz/statistics/lt/
Translation: MusicBrainz/Attributes
Translation: MusicBrainz/Countries
Translation: MusicBrainz/Languages
Translation: MusicBrainz/Relationship Types
Translation: MusicBrainz/Scripts
Translation: MusicBrainz/Server
Translation: MusicBrainz/Statistics
---
po/attributes.lt.po | 88 +++--
po/countries.lt.po | 10 +-
po/languages.lt.po | 634 ++++++++++++++++-----------------
po/mb_server.lt.po | 16 +-
po/relationships.lt.po | 782 ++++++++++++++++++++++++-----------------
po/scripts.lt.po | 40 +--
po/statistics.lt.po | 4 +-
7 files changed, 883 insertions(+), 691 deletions(-)
diff --git a/po/attributes.lt.po b/po/attributes.lt.po
index 9ff4b6cf554..7c02bf53417 100644
--- a/po/attributes.lt.po
+++ b/po/attributes.lt.po
@@ -5,7 +5,7 @@
msgid ""
msgstr ""
"Project-Id-Version: MusicBrainz\n"
-"PO-Revision-Date: 2023-09-24 15:27+0000\n"
+"PO-Revision-Date: 2023-10-08 19:27+0000\n"
"Last-Translator: \"Vac31.\" \n"
"Language-Team: Lithuanian \n"
@@ -14,8 +14,8 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100 < "
-"11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? "
-"1 : n % 1 != 0 ? 2: 3);\n"
+"11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? 1 :"
+" n % 1 != 0 ? 2: 3);\n"
"X-Generator: Weblate 5.0.2\n"
#: DB:work_type/description:9
@@ -120,6 +120,8 @@ msgid ""
"90 rpm, vertical-cut shellac discs, produced by the Pathé label from 1906 to "
"1932."
msgstr ""
+"90 apsukų per minutę, vertikaliai pjaustyti šelako diskai, kuriuos leidykla "
+"Pathé gamino nuo 1906 iki 1932 m."
#: DB:release_group_secondary_type/description:1
msgctxt "release_group_secondary_type"
@@ -271,6 +273,9 @@ msgid ""
"often in the first track, that will have to be skipped in many audio "
"players. Relatively common in old video game CDs."
msgstr ""
+"CD, kuriame yra ir garsas, ir duomenys tame pačiame seanse. Duomenys dažnai "
+"būna pirmajame takelyje, kurį daugelyje garso grotuvų tenka praleisti. "
+"Santykinai dažnai sutinkamas senuose vaizdo žaidimų CD."
#: DB:medium_format/description:42
msgctxt "medium_format"
@@ -279,6 +284,9 @@ msgid ""
"they are properly separated, audio players will not try to play the data "
"session and it won't be part of the disc ID for the CD."
msgstr ""
+"CD, kuriame yra dvi sesijos – viena su garsu, kita su duomenimis. Kadangi "
+"jos tinkamai atskirtos, garso grotuvai nebandys groti duomenų sesijos ir ji "
+"nebus įtraukta į CD disko ID."
#: DB:release_group_secondary_type/description:8
msgctxt "release_group_secondary_type"
@@ -289,6 +297,11 @@ msgid ""
"manner, and the DJ who does this modification is usually (although not "
"always) credited in a fairly prominent way."
msgstr ""
+"DJ miksas – tai kelių įrašų, grojantys vienas po kito, seka, kiekvienas "
+"modifikuotas taip, kad susilietų į vientisą muzikos srautą. DJ mikso "
+"leidinys reikalauja, kad įrašai būtų kaip nors modifikuoti, o šį "
+"modifikavimą atlikęs (-usi) DJ paprastai (nors ne visada) būna įrašytas (-a) "
+"gana ryškiai."
#: DB:work_attribute_type_allowed_value/value:794
msgctxt "work_attribute_type_allowed_value"
@@ -366,6 +379,9 @@ msgid ""
"A grouping of multiple musicians who perform together (in some cases, some "
"or all of the members might differ in different performances or recordings)."
msgstr ""
+"Grupė, susidedanti iš kelių muzikantų, kurie muzikuoja kartu (kai kuriais "
+"atvejais, kai kurie ar visi nariai gali skirtis skirtinguose pasirodymuose "
+"arba įrašuose)."
#: DB:instrument_type/description:7
msgctxt "instrument_type"
@@ -373,11 +389,14 @@ msgid ""
"A grouping of related but different instruments, like the different violin-"
"like instruments"
msgstr ""
+"Susijusių, bet skirtingų instrumentų grupė, kaip skirtingi į smuiką panašūs "
+"instrumentai"
#: DB:label_type/description:5
msgctxt "label_type"
msgid "A label that primarily puts out unsanctioned (bootleg) releases."
msgstr ""
+"Leidykla, kuri daugiausia išleidžia nesankcionuotus (neoficialus) leidinius."
#: DB:release_packaging/description:55
msgctxt "release_packaging"
@@ -391,7 +410,7 @@ msgstr ""
#: DB:place_type/description:43
msgctxt "place_type"
msgid "A large, permanent outdoor stage, typically with a fixed seating area."
-msgstr ""
+msgstr "Didelė nuolatinė lauko scena, paprastai su stacionaria sėdimų vieta."
#: DB:work_attribute_type_allowed_value/value:28
msgctxt "work_attribute_type_allowed_value"
@@ -488,6 +507,9 @@ msgid ""
"Religious buildings often host concerts and serve as recording locations, "
"especially for classical music."
msgstr ""
+"Vieta, kurioje atliekama pagrindinė garbinimo ar religijos studijų funkcija. "
+"Religiniuose pastatuose dažnai rengiami koncertai ir naudojamos kaip įrašų "
+"vietos, ypač klasikinės muzikos."
#: DB:place_type/description:4
msgctxt "place_type"
@@ -587,31 +609,33 @@ msgid ""
"A school, university or other similar educational institution (especially, "
"but not only, one where music is taught)"
msgstr ""
+"Mokykla, universitetas ar kita panaši švietimo įstaiga (ypač, bet ne tik ta, "
+"kurioje mokoma muzikos)"
#: DB:series_type/description:14
msgctxt "series_type"
msgid "A series of artists honoured by the same award."
-msgstr ""
+msgstr "Serija atlikėjų, pagerbtų tuo pačiu apdovanojimu."
#: DB:series_type/description:13
msgctxt "series_type"
msgid "A series of artists."
-msgstr ""
+msgstr "Atlikėjų serija."
#: DB:series_type/description:15
msgctxt "series_type"
msgid "A series of award ceremonies, usually one per year."
-msgstr ""
+msgstr "Apdovanojimų ceremonijų serija, paprastai viena per metus."
#: DB:series_type/description:6
msgctxt "series_type"
msgid "A series of events."
-msgstr ""
+msgstr "Renginių serija."
#: DB:series_type/description:9
msgctxt "series_type"
msgid "A series of performances of the same show at the same venue."
-msgstr ""
+msgstr "Pasirodymų serija to paties šou toje pačioje vietoje."
#: DB:series_type/description:48
msgctxt "series_type"
@@ -708,6 +732,10 @@ msgid ""
"as soundtracks because the musical properties of the CDs are more "
"interesting to MusicBrainz than their data properties."
msgstr ""
+"Garso takelis – filmo, televizijos serialo, scenos šou, vaizdo žaidimo ar "
+"kitos medijos muzikinė partitūra. Vaizdo žaidimų CD su garso takeliais "
+"turėtų būti klasifikuojami kaip garso takeliai, nes MusicBrainz labiau "
+"domina muzikinės CD ypatybės nei jų duomenų ypatybės."
#: DB:instrument_type/description:6
msgctxt "instrument_type"
@@ -787,6 +815,9 @@ msgid ""
"and sung scenes, the latter incorporating operatic and popular song, as well "
"as dance."
msgstr ""
+"Zarzuela – ispanų lyrinis dramos kūrinys, kuriame kaitaliojamos kalbamos ir "
+"dainuojamos scenos, į pastarąsias įtraukiamos operinės ir populiarios "
+"dainos, taip pat šokiai."
#: DB:work_attribute_type_allowed_value/value:26
msgctxt "work_attribute_type_allowed_value"
@@ -811,42 +842,42 @@ msgstr ""
#: DB:work_attribute_type/name:57
msgctxt "work_attribute_type"
msgid "AACIMH ID"
-msgstr ""
+msgstr "AACIMH ID"
#: DB:work_attribute_type/name:44
msgctxt "work_attribute_type"
msgid "ACAM ID"
-msgstr ""
+msgstr "ACAM ID"
#: DB:work_attribute_type/name:47
msgctxt "work_attribute_type"
msgid "ACDAM ID"
-msgstr ""
+msgstr "ACDAM ID"
#: DB:work_attribute_type/name:58
msgctxt "work_attribute_type"
msgid "AEI ID"
-msgstr ""
+msgstr "AEI ID"
#: DB:work_attribute_type/name:43
msgctxt "work_attribute_type"
msgid "AGADU ID"
-msgstr ""
+msgstr "AGADU ID"
#: DB:work_attribute_type/name:63
msgctxt "work_attribute_type"
msgid "AKKA/LAA ID"
-msgstr ""
+msgstr "AKKA/LAA ID"
#: DB:work_attribute_type/name:23
msgctxt "work_attribute_type"
msgid "AKM ID"
-msgstr ""
+msgstr "AKM ID"
#: DB:work_attribute_type/name:38
msgctxt "work_attribute_type"
msgid "AMRA ID"
-msgstr ""
+msgstr "AMRA ID"
#: DB:work_attribute_type/name:46
msgctxt "work_attribute_type"
@@ -856,22 +887,22 @@ msgstr "APA ID"
#: DB:work_attribute_type/name:41
msgctxt "work_attribute_type"
msgid "APDAYC ID"
-msgstr ""
+msgstr "APDAYC ID"
#: DB:work_attribute_type/name:13
msgctxt "work_attribute_type"
msgid "APRA ID"
-msgstr ""
+msgstr "APRA ID"
#: DB:work_attribute_type/name:48
msgctxt "work_attribute_type"
msgid "ARTISJUS ID"
-msgstr ""
+msgstr "ARTISJUS ID"
#: DB:work_attribute_type/name:6
msgctxt "work_attribute_type"
msgid "ASCAP ID"
-msgstr ""
+msgstr "ASCAP ID"
#: DB:work_attribute_type_allowed_value/value:299
msgctxt "work_attribute_type_allowed_value"
@@ -1054,6 +1085,9 @@ msgid ""
"accompaniment. They are most common inside operas, but also appear in "
"cantatas, oratorios and even on their own (concert arias)."
msgstr ""
+"Arija – tai savarankiškas kūrinys vienam balsui, paprastai su orkestro "
+"akompanimentu. Dažniausiai jos būna operose, tačiau taip pat skamba "
+"kantatose, oratorijose ir netgi atskirai (koncertinės arijos)."
#: DB:work_type/description:25
msgctxt "work_type"
@@ -1061,6 +1095,8 @@ msgid ""
"An audio drama is a dramatized, purely acoustic performance, broadcast on "
"radio or published on an audio medium (tape, CD, etc.)."
msgstr ""
+"Garso drama – dramatizuotas grynai akustinis spektaklis, transliuotas per "
+"radiją arba išleistas garso laikmenoje (kasetėje, CD ir pan.)."
#: DB:release_group_secondary_type/description:11
msgctxt "release_group_secondary_type"
@@ -1069,11 +1105,14 @@ msgid ""
"always, meant for radio). Unlike audiobooks, it usually has multiple "
"performers rather than a main narrator."
msgstr ""
+"Garso drama – tai tik garsinis pjesės atlikimas (dažnai, bet ne visada, "
+"skirtas radijui). Skirtingai nei garso knygose, paprastai ją atlieka keli "
+"atlikėjai, o ne pagrindinis pasakotojas (-a)."
#: DB:release_group_secondary_type/description:5
msgctxt "release_group_secondary_type"
msgid "An audiobook is a book read by a narrator without music."
-msgstr ""
+msgstr "Garso knyga – knyga, kurią skaito pasakotojas (-a) be muzikos."
#: DB:event_type/description:7
msgctxt "event_type"
@@ -1082,6 +1121,9 @@ msgid ""
"but often includes musical performances in between the awarding of said "
"prizes, especially for musical awards."
msgstr ""
+"Apdovanojimų ceremonija – tai renginys, kuriame daugiausia dėmesio skiriama "
+"apdovanojimams įteikti, tačiau dažnai tarp apdovanojimų įteikimo vyksta "
+"muzikiniai pasirodymai, ypač muzikinių apdovanojimai."
#: DB:release_group_primary_type/description:12
msgctxt "release_group_primary_type"
@@ -1089,6 +1131,8 @@ msgid ""
"An episodic release that was originally broadcast via radio, television, or "
"the Internet, including podcasts."
msgstr ""
+"Epizodinis leidinys, kuris iš pradžių buvo transliuojamas per radiją, "
+"televiziją ar internetą, įskaitant tinklalaides."
#: DB:event_type/description:2
msgctxt "event_type"
diff --git a/po/countries.lt.po b/po/countries.lt.po
index d3359ea3a34..e00c63ec7d7 100644
--- a/po/countries.lt.po
+++ b/po/countries.lt.po
@@ -5,7 +5,7 @@
msgid ""
msgstr ""
"Project-Id-Version: MusicBrainz\n"
-"PO-Revision-Date: 2023-09-15 22:27+0000\n"
+"PO-Revision-Date: 2023-10-09 22:27+0000\n"
"Last-Translator: \"Vac31.\" \n"
"Language-Team: Lithuanian \n"
@@ -16,7 +16,7 @@ msgstr ""
"Plural-Forms: nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100 < "
"11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? 1 :"
" n % 1 != 0 ? 2: 3);\n"
-"X-Generator: Weblate 5.0.1\n"
+"X-Generator: Weblate 5.0.2\n"
#. iso.code:AF
#: DB:area JOIN iso_3166_1 iso ON iso.area = area.id/area.name:1
@@ -796,7 +796,7 @@ msgstr "Namibija"
#. iso.code:NR
#: DB:area JOIN iso_3166_1 iso ON iso.area = area.id/area.name:148
msgid "Nauru"
-msgstr "Nauru"
+msgstr "Naurų"
#. iso.code:NP
#: DB:area JOIN iso_3166_1 iso ON iso.area = area.id/area.name:149
@@ -1166,7 +1166,7 @@ msgstr "Togas"
#. iso.code:TK
#: DB:area JOIN iso_3166_1 iso ON iso.area = area.id/area.name:210
msgid "Tokelau"
-msgstr "Tokelavas"
+msgstr "Tokelavų"
#. iso.code:TO
#: DB:area JOIN iso_3166_1 iso ON iso.area = area.id/area.name:211
@@ -1196,7 +1196,7 @@ msgstr "Terkso ir Kaikoso salos"
#. iso.code:TV
#: DB:area JOIN iso_3166_1 iso ON iso.area = area.id/area.name:217
msgid "Tuvalu"
-msgstr "Tuvalu"
+msgstr "Tuvalų"
#. iso.code:TR
#: DB:area JOIN iso_3166_1 iso ON iso.area = area.id/area.name:214
diff --git a/po/languages.lt.po b/po/languages.lt.po
index e991296f1d6..85c42b2cb51 100644
--- a/po/languages.lt.po
+++ b/po/languages.lt.po
@@ -5,7 +5,7 @@
msgid ""
msgstr ""
"Project-Id-Version: MusicBrainz\n"
-"PO-Revision-Date: 2023-10-01 20:27+0000\n"
+"PO-Revision-Date: 2023-10-14 18:27+0000\n"
"Last-Translator: \"Vac31.\" \n"
"Language-Team: Lithuanian \n"
@@ -231,52 +231,52 @@ msgstr "Balučių"
#. frequency:1 iso_code_3:bam
#: DB:language/name:39
msgid "Bambara"
-msgstr ""
+msgstr "Bambarų"
#. frequency:0 iso_code_3:null
#: DB:language/name:36
msgid "Bamileke languages"
-msgstr ""
+msgstr "Bamilekių kalbos"
#. frequency:0 iso_code_3:null
#: DB:language/name:35
msgid "Banda languages"
-msgstr ""
+msgstr "Bangų kalbos"
#. frequency:0 iso_code_3:null
#: DB:language/name:55
msgid "Bantu languages"
-msgstr ""
+msgstr "Bantų kalbos"
#. frequency:1 iso_code_3:bas
#: DB:language/name:42
msgid "Basa"
-msgstr ""
+msgstr "Basų"
#. frequency:1 iso_code_3:bak
#: DB:language/name:37
msgid "Bashkir"
-msgstr ""
+msgstr "Baškirų"
#. frequency:1 iso_code_3:eus
#: DB:language/name:41
msgid "Basque"
-msgstr ""
+msgstr "Baskų"
#. frequency:0 iso_code_3:null
#: DB:language/name:59
msgid "Batak languages"
-msgstr ""
+msgstr "Batakų kalbos"
#. frequency:1 iso_code_3:bar
#: DB:language/name:982
msgid "Bavarian"
-msgstr ""
+msgstr "Bavarų"
#. frequency:1 iso_code_3:bej
#: DB:language/name:44
msgid "Beja"
-msgstr ""
+msgstr "Bejų"
#. frequency:1 iso_code_3:bel
#: DB:language/name:45
@@ -296,37 +296,37 @@ msgstr "Bengalų"
#. frequency:0 iso_code_3:null
#: DB:language/name:48
msgid "Berber languages"
-msgstr ""
+msgstr "Berberų kalbos"
#. frequency:1 iso_code_3:bho
#: DB:language/name:49
msgid "Bhojpuri"
-msgstr ""
+msgstr "Bhojpurų"
#. frequency:0 iso_code_3:null
#: DB:language/name:50
msgid "Bihari languages"
-msgstr ""
+msgstr "Biharų kalbos"
#. frequency:1 iso_code_3:bik
#: DB:language/name:51
msgid "Bikol"
-msgstr ""
+msgstr "Bikolių"
#. frequency:1 iso_code_3:bin
#: DB:language/name:52
msgid "Bini"
-msgstr ""
+msgstr "Binių"
#. frequency:1 iso_code_3:bis
#: DB:language/name:53
msgid "Bislama"
-msgstr ""
+msgstr "Bislamų"
#. frequency:1 iso_code_3:byn
#: DB:language/name:64
msgid "Blin"
-msgstr ""
+msgstr "Blinų"
#. frequency:0 iso_code_3:zbl
#: DB:language/name:482
@@ -336,27 +336,27 @@ msgstr "Bliuzo simbolių"
#. frequency:1 iso_code_3:brx
#: DB:language/name:1394
msgid "Bodo (India)"
-msgstr ""
+msgstr "Bodų (Indija)"
#. frequency:1 iso_code_3:bos
#: DB:language/name:56
msgid "Bosnian"
-msgstr ""
+msgstr "Bosnių"
#. frequency:1 iso_code_3:bra
#: DB:language/name:57
msgid "Braj"
-msgstr ""
+msgstr "Bradžių"
#. frequency:1 iso_code_3:bre
#: DB:language/name:58
msgid "Breton"
-msgstr ""
+msgstr "Bretonų"
#. frequency:1 iso_code_3:box
#: DB:language/name:1322
msgid "Buamu"
-msgstr ""
+msgstr "Buamų"
#. frequency:1 iso_code_3:bug
#: DB:language/name:61
@@ -366,92 +366,92 @@ msgstr "Buginų"
#. frequency:1 iso_code_3:bul
#: DB:language/name:62
msgid "Bulgarian"
-msgstr ""
+msgstr "Bulgarų"
#. frequency:1 iso_code_3:bua
#: DB:language/name:60
msgid "Buriat"
-msgstr ""
+msgstr "Buriatų"
#. frequency:1 iso_code_3:mya
#: DB:language/name:63
msgid "Burmese"
-msgstr ""
+msgstr "Birmiečių"
#. frequency:1 iso_code_3:bsk
#: DB:language/name:1406
msgid "Burushaski"
-msgstr ""
+msgstr "Burušaskų"
#. frequency:1 iso_code_3:cad
#: DB:language/name:65
msgid "Caddo"
-msgstr ""
+msgstr "Kaddų"
#. frequency:1 iso_code_3:frc
#: DB:language/name:2311
msgid "Cajun French"
-msgstr ""
+msgstr "Kajunų prancūzų"
#. frequency:1 iso_code_3:cat
#: DB:language/name:68
msgid "Catalan"
-msgstr ""
+msgstr "Katalonų"
#. frequency:0 iso_code_3:null
#: DB:language/name:69
msgid "Caucasian languages"
-msgstr ""
+msgstr "Kaukaziečių kalbos"
#. frequency:1 iso_code_3:ceb
#: DB:language/name:70
msgid "Cebuano"
-msgstr ""
+msgstr "Cebuanų"
#. frequency:1 iso_code_3:xce
#: DB:language/name:7217
msgid "Celtiberian"
-msgstr ""
+msgstr "Keltiberų"
#. frequency:0 iso_code_3:null
#: DB:language/name:71
msgid "Celtic languages"
-msgstr ""
+msgstr "Keltų kalbos"
#. frequency:0 iso_code_3:null
#: DB:language/name:66
msgid "Central American Indian languages"
-msgstr ""
+msgstr "Centrinės Amerikos indėnų kalbos"
#. frequency:1 iso_code_3:ryu
#: DB:language/name:5809
msgid "Central Okinawan"
-msgstr ""
+msgstr "Centrinė okinavų"
#. frequency:1 iso_code_3:esu
#: DB:language/name:2243
msgid "Central Yupik"
-msgstr ""
+msgstr "Centrinė jupikų"
#. frequency:1 iso_code_3:chg
#: DB:language/name:75
msgid "Chagatai"
-msgstr ""
+msgstr "Čagatų"
#. frequency:0 iso_code_3:null
#: DB:language/name:86
msgid "Chamic languages"
-msgstr ""
+msgstr "Chamų kalbos"
#. frequency:1 iso_code_3:cha
#: DB:language/name:72
msgid "Chamorro"
-msgstr ""
+msgstr "Čamorrų"
#. frequency:1 iso_code_3:che
#: DB:language/name:74
msgid "Chechen"
-msgstr ""
+msgstr "Čečėnų"
#. frequency:1 iso_code_3:chr
#: DB:language/name:82
@@ -461,62 +461,62 @@ msgstr "Čerokių"
#. frequency:1 iso_code_3:chy
#: DB:language/name:85
msgid "Cheyenne"
-msgstr ""
+msgstr "Šajenų"
#. frequency:1 iso_code_3:chb
#: DB:language/name:73
msgid "Chibcha"
-msgstr ""
+msgstr "Čibčų"
#. frequency:1 iso_code_3:nya
#: DB:language/name:313
msgid "Chichewa"
-msgstr ""
+msgstr "Čičevų"
#. frequency:2 iso_code_3:zho
#: DB:language/name:76
msgid "Chinese"
-msgstr ""
+msgstr "Kinų"
#. frequency:1 iso_code_3:chn
#: DB:language/name:79
msgid "Chinook jargon"
-msgstr ""
+msgstr "Činokių žargono"
#. frequency:1 iso_code_3:chp
#: DB:language/name:81
msgid "Chipewyan"
-msgstr ""
+msgstr "Čipevjanų"
#. frequency:1 iso_code_3:cho
#: DB:language/name:80
msgid "Choctaw"
-msgstr ""
+msgstr "Čokotų"
#. frequency:1 iso_code_3:chu
#: DB:language/name:83
msgid "Church Slavic"
-msgstr ""
+msgstr "Bažnyčios slavų"
#. frequency:1 iso_code_3:chk
#: DB:language/name:77
msgid "Chuukese"
-msgstr ""
+msgstr "Čuukiečių"
#. frequency:1 iso_code_3:chv
#: DB:language/name:84
msgid "Chuvash"
-msgstr ""
+msgstr "Čuvašų"
#. frequency:0 iso_code_3:nwc
#: DB:language/name:312
msgid "Classical Newari"
-msgstr ""
+msgstr "Klasikinė niūarų"
#. frequency:0 iso_code_3:syc
#: DB:language/name:481
msgid "Classical Syriac"
-msgstr ""
+msgstr "Klasikinė sirų"
#. frequency:1 iso_code_3:cop
#: DB:language/name:87
@@ -526,242 +526,242 @@ msgstr "Koptų"
#. frequency:1 iso_code_3:cor
#: DB:language/name:88
msgid "Cornish"
-msgstr ""
+msgstr "Kornvalų"
#. frequency:1 iso_code_3:cos
#: DB:language/name:89
msgid "Corsican"
-msgstr ""
+msgstr "Korsikiečių"
#. frequency:1 iso_code_3:cre
#: DB:language/name:93
msgid "Cree"
-msgstr ""
+msgstr "Kryų"
#. frequency:1 iso_code_3:mus
#: DB:language/name:286
msgid "Creek"
-msgstr ""
+msgstr "Kriukų"
#. frequency:0 iso_code_3:null
#: DB:language/name:95
msgid "Creoles and pidgins"
-msgstr ""
+msgstr "Kreolų ir pidžinų"
#. frequency:0 iso_code_3:null
#: DB:language/name:90
msgid "Creoles and pidgins, English based"
-msgstr ""
+msgstr "Kreolų ir pidžinų, anglų kalba"
#. frequency:0 iso_code_3:null
#: DB:language/name:91
msgid "Creoles and pidgins, French-based"
-msgstr ""
+msgstr "Kreolų ir pidžinų, prancūzų kalba"
#. frequency:0 iso_code_3:null
#: DB:language/name:92
msgid "Creoles and pidgins, Portuguese-based"
-msgstr ""
+msgstr "Kreolų ir pidžinų, portugalų kalba"
#. frequency:1 iso_code_3:crh
#: DB:language/name:94
msgid "Crimean Tatar"
-msgstr ""
+msgstr "Krymo totorių"
#. frequency:1 iso_code_3:hrv
#: DB:language/name:366
msgid "Croatian"
-msgstr ""
+msgstr "Kroatų"
#. frequency:1 iso_code_3:xlu
#: DB:language/name:7303
msgid "Cuneiform Luwian"
-msgstr ""
+msgstr "Kaunietiška luvių"
#. frequency:0 iso_code_3:null
#: DB:language/name:97
msgid "Cushitic languages"
-msgstr ""
+msgstr "Kušitų kalbos"
#. frequency:1 iso_code_3:ces
#: DB:language/name:98
msgid "Czech"
-msgstr ""
+msgstr "Čekų"
#. frequency:1 iso_code_3:dak
#: DB:language/name:99
msgid "Dakota"
-msgstr ""
+msgstr "Dakotų"
#. frequency:1 iso_code_3:dan
#: DB:language/name:100
msgid "Danish"
-msgstr ""
+msgstr "Danų"
#. frequency:1 iso_code_3:dar
#: DB:language/name:101
msgid "Dargwa"
-msgstr ""
+msgstr "Dargvių"
#. frequency:1 iso_code_3:del
#: DB:language/name:103
msgid "Delaware"
-msgstr ""
+msgstr "Delavarų"
#. frequency:1 iso_code_3:din
#: DB:language/name:106
msgid "Dinka"
-msgstr ""
+msgstr "Dinkų"
#. frequency:1 iso_code_3:div
#: DB:language/name:107
msgid "Divehi"
-msgstr ""
+msgstr "Divehių"
#. frequency:1 iso_code_3:doi
#: DB:language/name:108
msgid "Dogri"
-msgstr ""
+msgstr "Dogrų"
#. frequency:1 iso_code_3:dgr
#: DB:language/name:105
msgid "Dogrib"
-msgstr ""
+msgstr "Dogribų"
#. frequency:0 iso_code_3:null
#: DB:language/name:109
msgid "Dravidian languages"
-msgstr ""
+msgstr "Dravidų kalbos"
#. frequency:1 iso_code_3:dua
#: DB:language/name:111
msgid "Duala"
-msgstr ""
+msgstr "Dualų"
#. frequency:2 iso_code_3:nld
#: DB:language/name:113
msgid "Dutch"
-msgstr ""
+msgstr "Olandų"
#. frequency:1 iso_code_3:dum
#: DB:language/name:112
msgid "Dutch, Middle (ca.1050-1350)"
-msgstr ""
+msgstr "Olandų, vidurinioji (apie 1050-1350 m.)"
#. frequency:1 iso_code_3:dyu
#: DB:language/name:114
msgid "Dyula"
-msgstr ""
+msgstr "Diulių"
#. frequency:1 iso_code_3:dzo
#: DB:language/name:115
msgid "Dzongkha"
-msgstr ""
+msgstr "Dzongkhų"
#. frequency:1 iso_code_3:aer
#: DB:language/name:584
msgid "Eastern Arrernte"
-msgstr ""
+msgstr "Rytų Arrerntės"
#. frequency:1 iso_code_3:efi
#: DB:language/name:116
msgid "Efik"
-msgstr ""
+msgstr "Efikų"
#. frequency:1 iso_code_3:egy
#: DB:language/name:117
msgid "Egyptian (Ancient)"
-msgstr ""
+msgstr "Egiptiečių (senovės)"
#. frequency:1 iso_code_3:eka
#: DB:language/name:118
msgid "Ekajuk"
-msgstr ""
+msgstr "Ekajukų"
#. frequency:1 iso_code_3:elx
#: DB:language/name:119
msgid "Elamite"
-msgstr ""
+msgstr "Elamitų"
#. frequency:2 iso_code_3:eng
#: DB:language/name:120
msgid "English"
-msgstr "Anglų k."
+msgstr "Anglų"
#. frequency:1 iso_code_3:enm
#: DB:language/name:121
msgid "English, Middle (1100-1500)"
-msgstr ""
+msgstr "Anglų, vidurinioji (1100-1500 m.)"
#. frequency:1 iso_code_3:ang
#: DB:language/name:16
msgid "English, Old (ca.450-1100)"
-msgstr ""
+msgstr "Anglų, senoji (apie 450-1100 m.)"
#. frequency:1 iso_code_3:myv
#: DB:language/name:290
msgid "Erzya"
-msgstr ""
+msgstr "Eržų"
#. frequency:1 iso_code_3:epo
#: DB:language/name:122
msgid "Esperanto"
-msgstr ""
+msgstr "Esperantų"
#. frequency:1 iso_code_3:est
#: DB:language/name:123
msgid "Estonian"
-msgstr "Estų kalba"
+msgstr "Estų"
#. frequency:1 iso_code_3:ewe
#: DB:language/name:124
msgid "Ewe"
-msgstr ""
+msgstr "Avių"
#. frequency:1 iso_code_3:ewo
#: DB:language/name:125
msgid "Ewondo"
-msgstr ""
+msgstr "Evondų"
#. frequency:1 iso_code_3:fan
#: DB:language/name:126
msgid "Fang"
-msgstr ""
+msgstr "Fangų"
#. frequency:1 iso_code_3:fat
#: DB:language/name:128
msgid "Fanti"
-msgstr ""
+msgstr "Fantų"
#. frequency:1 iso_code_3:fao
#: DB:language/name:127
msgid "Faroese"
-msgstr ""
+msgstr "Farerų"
#. frequency:1 iso_code_3:fij
#: DB:language/name:129
msgid "Fijian"
-msgstr ""
+msgstr "Fidžų"
#. frequency:1 iso_code_3:fil
#: DB:language/name:130
msgid "Filipino"
-msgstr ""
+msgstr "Filipinų"
#. frequency:2 iso_code_3:fin
#: DB:language/name:131
msgid "Finnish"
-msgstr "Suomių kalba"
+msgstr "Suomių"
#. frequency:0 iso_code_3:null
#: DB:language/name:132
msgid "Finno-Ugrian languages"
-msgstr ""
+msgstr "Finougrų kalbos"
#. frequency:1 iso_code_3:fon
#: DB:language/name:133
msgid "Fon"
-msgstr ""
+msgstr "Fonų"
#. frequency:2 iso_code_3:fra
#: DB:language/name:134
@@ -771,167 +771,167 @@ msgstr "Prancūzų"
#. frequency:0 iso_code_3:frm
#: DB:language/name:135
msgid "French, Middle (ca.1400-1600)"
-msgstr ""
+msgstr "Prancūzų, vidurinioji (apie 1400-1600 m.)"
#. frequency:1 iso_code_3:fro
#: DB:language/name:136
msgid "French, Old (842-ca.1400)"
-msgstr ""
+msgstr "Prancūzų, senoji (842-apie 1400 m.)"
#. frequency:1 iso_code_3:frs
#: DB:language/name:485
msgid "Frisian, Eastern"
-msgstr ""
+msgstr "Fryzų, rytų"
#. frequency:1 iso_code_3:frr
#: DB:language/name:484
msgid "Frisian, Northern"
-msgstr ""
+msgstr "Fryzų, šiaurės"
#. frequency:1 iso_code_3:fry
#: DB:language/name:137
msgid "Frisian, Western"
-msgstr ""
+msgstr "Fryzų, vakarų"
#. frequency:1 iso_code_3:fur
#: DB:language/name:139
msgid "Friulian"
-msgstr ""
+msgstr "Friulių"
#. frequency:1 iso_code_3:ful
#: DB:language/name:138
msgid "Fulah"
-msgstr ""
+msgstr "Fulagų"
#. frequency:1 iso_code_3:gaa
#: DB:language/name:140
msgid "Ga"
-msgstr ""
+msgstr "Gų"
#. frequency:1 iso_code_3:car
#: DB:language/name:67
msgid "Galibi Carib"
-msgstr ""
+msgstr "Galibi karibų"
#. frequency:1 iso_code_3:glg
#: DB:language/name:150
msgid "Galician"
-msgstr ""
+msgstr "Galisų"
#. frequency:1 iso_code_3:lug
#: DB:language/name:249
msgid "Ganda"
-msgstr ""
+msgstr "Gandrų"
#. frequency:1 iso_code_3:cab
#: DB:language/name:1591
msgid "Garifuna"
-msgstr ""
+msgstr "Garifunų"
#. frequency:1 iso_code_3:gay
#: DB:language/name:141
msgid "Gayo"
-msgstr ""
+msgstr "Gajų"
#. frequency:1 iso_code_3:gba
#: DB:language/name:142
msgid "Gbaya"
-msgstr ""
+msgstr "Gbajų"
#. frequency:1 iso_code_3:gez
#: DB:language/name:146
msgid "Geez"
-msgstr ""
+msgstr "Gizų"
#. frequency:1 iso_code_3:kat
#: DB:language/name:144
msgid "Georgian"
-msgstr "Gruziniškas"
+msgstr "Gruzinų"
#. frequency:2 iso_code_3:deu
#: DB:language/name:145
msgid "German"
-msgstr "Vokiečių kalba"
+msgstr "Vokiečių"
#. frequency:1 iso_code_3:nds
#: DB:language/name:299
msgid "German, Low"
-msgstr ""
+msgstr "Vokiečių, žemoji"
#. frequency:1 iso_code_3:gmh
#: DB:language/name:152
msgid "German, Middle High (ca.1050-1500)"
-msgstr ""
+msgstr "Vokiečių, vidurinioji aukštoji (apie 1050-1500 m.)"
#. frequency:1 iso_code_3:goh
#: DB:language/name:153
msgid "German, Old High (ca.750-1050)"
-msgstr ""
+msgstr "Vokiečių, senoji aukštoji (apie 750-1050 m.)"
#. frequency:1 iso_code_3:gsw
#: DB:language/name:476
msgid "German, Swiss"
-msgstr ""
+msgstr "Vokiečių, šveicarų"
#. frequency:0 iso_code_3:null
#: DB:language/name:143
msgid "Germanic languages"
-msgstr ""
+msgstr "Germanų kalbos"
#. frequency:1 iso_code_3:gil
#: DB:language/name:147
msgid "Gilbertese"
-msgstr ""
+msgstr "Gilbertų"
#. frequency:1 iso_code_3:gon
#: DB:language/name:154
msgid "Gondi"
-msgstr ""
+msgstr "Gondių"
#. frequency:1 iso_code_3:gor
#: DB:language/name:155
msgid "Gorontalo"
-msgstr ""
+msgstr "Gorontalų"
#. frequency:1 iso_code_3:got
#: DB:language/name:156
msgid "Gothic"
-msgstr "Gotikinis"
+msgstr "Gotų"
#. frequency:1 iso_code_3:grb
#: DB:language/name:157
msgid "Grebo"
-msgstr ""
+msgstr "Grebų"
#. frequency:2 iso_code_3:ell
#: DB:language/name:159
msgid "Greek"
-msgstr "Graikiškas"
+msgstr "Graikų"
#. frequency:1 iso_code_3:grc
#: DB:language/name:158
msgid "Greek, Ancient"
-msgstr ""
+msgstr "Graikų, senovės"
#. frequency:1 iso_code_3:kal
#: DB:language/name:204
msgid "Greenlandic"
-msgstr ""
+msgstr "Grenlandų"
#. frequency:1 iso_code_3:gos
#: DB:language/name:2534
msgid "Gronings"
-msgstr ""
+msgstr "Groningų"
#. frequency:1 iso_code_3:gcf
#: DB:language/name:2386
msgid "Guadeloupean Creole French"
-msgstr ""
+msgstr "Gvadelupės kreolų prancūzų"
#. frequency:1 iso_code_3:grn
#: DB:language/name:160
msgid "Guarani"
-msgstr ""
+msgstr "Guaranių"
#. frequency:1 iso_code_3:guj
#: DB:language/name:161
@@ -941,42 +941,42 @@ msgstr "Gudžaratų"
#. frequency:1 iso_code_3:gnn
#: DB:language/name:2511
msgid "Gumatj"
-msgstr ""
+msgstr "Gumačių"
#. frequency:1 iso_code_3:guf
#: DB:language/name:2581
msgid "Gupapuyngu"
-msgstr ""
+msgstr "Gupapuindžų"
#. frequency:1 iso_code_3:gyn
#: DB:language/name:2638
msgid "Guyanese Creole English"
-msgstr ""
+msgstr "Gajanos kreolų anglų"
#. frequency:1 iso_code_3:gwi
#: DB:language/name:162
msgid "Gwich'in"
-msgstr ""
+msgstr "Gvičinų"
#. frequency:1 iso_code_3:hai
#: DB:language/name:163
msgid "Haida"
-msgstr ""
+msgstr "Haidų"
#. frequency:1 iso_code_3:hat
#: DB:language/name:164
msgid "Haitian Creole"
-msgstr ""
+msgstr "Haičio kreolų"
#. frequency:1 iso_code_3:hau
#: DB:language/name:165
msgid "Hausa"
-msgstr ""
+msgstr "Hausų"
#. frequency:1 iso_code_3:haw
#: DB:language/name:166
msgid "Hawaiian"
-msgstr ""
+msgstr "Havajiečių"
#. frequency:1 iso_code_3:heb
#: DB:language/name:167
@@ -986,162 +986,162 @@ msgstr "Hebrajų"
#. frequency:1 iso_code_3:her
#: DB:language/name:168
msgid "Herero"
-msgstr ""
+msgstr "Hererų"
#. frequency:1 iso_code_3:hil
#: DB:language/name:169
msgid "Hiligaynon"
-msgstr ""
+msgstr "Hiligainonų"
#. frequency:0 iso_code_3:null
#: DB:language/name:170
msgid "Himachali languages"
-msgstr ""
+msgstr "Himačalių kalbos"
#. frequency:2 iso_code_3:hin
#: DB:language/name:171
msgid "Hindi"
-msgstr ""
+msgstr "Hindų"
#. frequency:1 iso_code_3:hmo
#: DB:language/name:174
msgid "Hiri Motu"
-msgstr ""
+msgstr "Hiri Motų"
#. frequency:0 iso_code_3:hit
#: DB:language/name:172
msgid "Hittite"
-msgstr ""
+msgstr "Hetitų"
#. frequency:1 iso_code_3:hmn
#: DB:language/name:173
msgid "Hmong"
-msgstr ""
+msgstr "Hmongų"
#. frequency:1 iso_code_3:hun
#: DB:language/name:176
msgid "Hungarian"
-msgstr ""
+msgstr "Vengrų"
#. frequency:1 iso_code_3:hup
#: DB:language/name:177
msgid "Hupa"
-msgstr ""
+msgstr "Hupų"
#. frequency:1 iso_code_3:iba
#: DB:language/name:178
msgid "Iban"
-msgstr ""
+msgstr "Ibanų"
#. frequency:1 iso_code_3:isl
#: DB:language/name:180
msgid "Icelandic"
-msgstr ""
+msgstr "Islandų"
#. frequency:1 iso_code_3:ido
#: DB:language/name:181
msgid "Ido"
-msgstr ""
+msgstr "Idų"
#. frequency:1 iso_code_3:ibo
#: DB:language/name:179
msgid "Igbo"
-msgstr ""
+msgstr "Igbų"
#. frequency:0 iso_code_3:null
#: DB:language/name:183
msgid "Ijo languages"
-msgstr ""
+msgstr "Idžų kalbos"
#. frequency:1 iso_code_3:ilo
#: DB:language/name:186
msgid "Iloko"
-msgstr ""
+msgstr "Ilokų"
#. frequency:0 iso_code_3:null
#: DB:language/name:188
msgid "Indic languages"
-msgstr ""
+msgstr "Indų kalbos"
#. frequency:0 iso_code_3:null
#: DB:language/name:190
msgid "Indo-European languages"
-msgstr ""
+msgstr "Indoeuropiečių kalbos"
#. frequency:1 iso_code_3:ind
#: DB:language/name:189
msgid "Indonesian"
-msgstr ""
+msgstr "Indoneziečių"
#. frequency:1 iso_code_3:izh
#: DB:language/name:2967
msgid "Ingrian"
-msgstr ""
+msgstr "Ingrų"
#. frequency:1 iso_code_3:inh
#: DB:language/name:191
msgid "Ingush"
-msgstr ""
+msgstr "Ingušų"
#. frequency:1 iso_code_3:moe
#: DB:language/name:4369
msgid "Innu"
-msgstr ""
+msgstr "Innų"
#. frequency:1 iso_code_3:ina
#: DB:language/name:187
msgid "Interlingua"
-msgstr ""
+msgstr "Interlingvių"
#. frequency:1 iso_code_3:ile
#: DB:language/name:185
msgid "Interlingue"
-msgstr ""
+msgstr "Interlingų"
#. frequency:1 iso_code_3:iku
#: DB:language/name:184
msgid "Inuktitut"
-msgstr ""
+msgstr "Inuktitutų"
#. frequency:1 iso_code_3:ipk
#: DB:language/name:192
msgid "Inupiaq"
-msgstr ""
+msgstr "Inupiakų"
#. frequency:0 iso_code_3:null
#: DB:language/name:193
msgid "Iranian languages"
-msgstr ""
+msgstr "Iraniečių kalbos"
#. frequency:1 iso_code_3:gle
#: DB:language/name:149
msgid "Irish"
-msgstr ""
+msgstr "Airių"
#. frequency:0 iso_code_3:mga
#: DB:language/name:270
msgid "Irish, Middle (900-1200)"
-msgstr ""
+msgstr "Airių, vidurinioji (900-1200 m.)"
#. frequency:0 iso_code_3:sga
#: DB:language/name:369
msgid "Irish, Old (to 900)"
-msgstr ""
+msgstr "Airių, senoji (iki 900 m.)"
#. frequency:0 iso_code_3:null
#: DB:language/name:194
msgid "Iroquoian languages"
-msgstr ""
+msgstr "Irokėzų kalbos"
#. frequency:2 iso_code_3:ita
#: DB:language/name:195
msgid "Italian"
-msgstr "Italų kalba"
+msgstr "Italų"
#. frequency:1 iso_code_3:jam
#: DB:language/name:2980
msgid "Jamaican Creole English"
-msgstr ""
+msgstr "Jamaikos kreolų anglų"
#. frequency:2 iso_code_3:jpn
#: DB:language/name:198
@@ -1156,47 +1156,47 @@ msgstr "Javanų"
#. frequency:1 iso_code_3:tmr
#: DB:language/name:6526
msgid "Jewish Babylonian Aramaic (ca. 200-1200 CE)"
-msgstr ""
+msgstr "Žydų babiloniečių aramėjų (apie 200-1200 m. po Kr.)"
#. frequency:1 iso_code_3:jrb
#: DB:language/name:200
msgid "Judeo-Arabic"
-msgstr ""
+msgstr "Judėjų arabų"
#. frequency:1 iso_code_3:jpr
#: DB:language/name:199
msgid "Judeo-Persian"
-msgstr ""
+msgstr "Judėjų persų"
#. frequency:1 iso_code_3:kbd
#: DB:language/name:212
msgid "Kabardian"
-msgstr ""
+msgstr "Kabardų"
#. frequency:1 iso_code_3:kea
#: DB:language/name:3185
msgid "Kabuverdianu"
-msgstr ""
+msgstr "Kabuverdianų"
#. frequency:1 iso_code_3:kab
#: DB:language/name:202
msgid "Kabyle"
-msgstr ""
+msgstr "Kabilų"
#. frequency:1 iso_code_3:kac
#: DB:language/name:203
msgid "Kachin"
-msgstr ""
+msgstr "Kačinų"
#. frequency:1 iso_code_3:xal
#: DB:language/name:459
msgid "Kalmyk"
-msgstr ""
+msgstr "Kalmukų"
#. frequency:1 iso_code_3:kam
#: DB:language/name:205
msgid "Kamba"
-msgstr ""
+msgstr "Kambų"
#. frequency:1 iso_code_3:kan
#: DB:language/name:206
@@ -1206,122 +1206,122 @@ msgstr "Kanadų"
#. frequency:1 iso_code_3:kau
#: DB:language/name:209
msgid "Kanuri"
-msgstr ""
+msgstr "Kanurų"
#. frequency:1 iso_code_3:kaa
#: DB:language/name:201
msgid "Kara-Kalpak"
-msgstr ""
+msgstr "Kara kalpakų"
#. frequency:1 iso_code_3:krc
#: DB:language/name:227
msgid "Karachay-Balkar"
-msgstr ""
+msgstr "Karačajų balkarų"
#. frequency:1 iso_code_3:krl
#: DB:language/name:477
msgid "Karelian"
-msgstr ""
+msgstr "Karelų"
#. frequency:0 iso_code_3:null
#: DB:language/name:207
msgid "Karen languages"
-msgstr ""
+msgstr "Karenų kalbos"
#. frequency:1 iso_code_3:kas
#: DB:language/name:208
msgid "Kashmiri"
-msgstr ""
+msgstr "Kašmyrų"
#. frequency:1 iso_code_3:csb
#: DB:language/name:96
msgid "Kashubian"
-msgstr ""
+msgstr "Kašubų"
#. frequency:0 iso_code_3:kaw
#: DB:language/name:210
msgid "Kawi"
-msgstr ""
+msgstr "Kavių"
#. frequency:1 iso_code_3:kaz
#: DB:language/name:211
msgid "Kazakh"
-msgstr ""
+msgstr "Kazachų"
#. frequency:1 iso_code_3:kca
#: DB:language/name:3137
msgid "Khanty"
-msgstr ""
+msgstr "Chantų"
#. frequency:1 iso_code_3:kha
#: DB:language/name:213
msgid "Khasi"
-msgstr ""
+msgstr "Khasų"
#. frequency:1 iso_code_3:khm
#: DB:language/name:215
msgid "Khmer, Central"
-msgstr ""
+msgstr "Khmerų, centrinė"
#. frequency:0 iso_code_3:null
#: DB:language/name:214
msgid "Khoisan languages"
-msgstr ""
+msgstr "Khoisanų kalbos"
#. frequency:0 iso_code_3:kho
#: DB:language/name:216
msgid "Khotanese"
-msgstr ""
+msgstr "Chotanų"
#. frequency:1 iso_code_3:kik
#: DB:language/name:217
msgid "Kikuyu"
-msgstr ""
+msgstr "Kikujų"
#. frequency:1 iso_code_3:kmb
#: DB:language/name:220
msgid "Kimbundu"
-msgstr ""
+msgstr "Kimbundų"
#. frequency:1 iso_code_3:kin
#: DB:language/name:218
msgid "Kinyarwanda"
-msgstr ""
+msgstr "Kinjarvandų"
#. frequency:1 iso_code_3:kir
#: DB:language/name:219
msgid "Kirghiz"
-msgstr ""
+msgstr "Kirgizų"
#. frequency:1 iso_code_3:tlh
#: DB:language/name:421
msgid "Klingon"
-msgstr ""
+msgstr "Klingonų"
#. frequency:1 iso_code_3:kom
#: DB:language/name:222
msgid "Komi"
-msgstr ""
+msgstr "Komių"
#. frequency:1 iso_code_3:kon
#: DB:language/name:223
msgid "Kongo"
-msgstr ""
+msgstr "Kongų"
#. frequency:1 iso_code_3:kok
#: DB:language/name:221
msgid "Konkani"
-msgstr ""
+msgstr "Konkanų"
#. frequency:2 iso_code_3:kor
#: DB:language/name:224
msgid "Korean"
-msgstr "Korėjietiškas"
+msgstr "Korėjiečių"
#. frequency:1 iso_code_3:kos
#: DB:language/name:225
msgid "Kosraean"
-msgstr ""
+msgstr "Kosrajų"
#. frequency:1 iso_code_3:kpe
#: DB:language/name:226
@@ -1331,37 +1331,37 @@ msgstr "Kpelių"
#. frequency:0 iso_code_3:null
#: DB:language/name:228
msgid "Kru languages"
-msgstr ""
+msgstr "Krų kalbos"
#. frequency:1 iso_code_3:kua
#: DB:language/name:230
msgid "Kuanyama"
-msgstr ""
+msgstr "Kuanjamų"
#. frequency:1 iso_code_3:kum
#: DB:language/name:231
msgid "Kumyk"
-msgstr ""
+msgstr "Kumykų"
#. frequency:1 iso_code_3:xug
#: DB:language/name:7421
msgid "Kunigami"
-msgstr ""
+msgstr "Kunigamių"
#. frequency:1 iso_code_3:kur
#: DB:language/name:232
msgid "Kurdish"
-msgstr ""
+msgstr "Kurdų"
#. frequency:1 iso_code_3:kru
#: DB:language/name:229
msgid "Kurukh"
-msgstr ""
+msgstr "Kurukų"
#. frequency:1 iso_code_3:kut
#: DB:language/name:233
msgid "Kutenai"
-msgstr ""
+msgstr "Kutenų"
#. frequency:1 iso_code_3:ksh
#: DB:language/name:3529
@@ -1371,37 +1371,37 @@ msgstr ""
#. frequency:1 iso_code_3:lld
#: DB:language/name:3885
msgid "Ladin"
-msgstr ""
+msgstr "Ladų"
#. frequency:1 iso_code_3:lad
#: DB:language/name:234
msgid "Ladino"
-msgstr ""
+msgstr "Ladinų"
#. frequency:1 iso_code_3:lah
#: DB:language/name:235
msgid "Lahnda"
-msgstr ""
+msgstr "Lahndų"
#. frequency:1 iso_code_3:lkt
#: DB:language/name:3880
msgid "Lakota"
-msgstr ""
+msgstr "Lakotų"
#. frequency:1 iso_code_3:lam
#: DB:language/name:236
msgid "Lamba"
-msgstr ""
+msgstr "Lambų"
#. frequency:0 iso_code_3:null
#: DB:language/name:102
msgid "Land Dayak languages"
-msgstr ""
+msgstr "Žemės dajakų kalbos"
#. frequency:1 iso_code_3:lao
#: DB:language/name:237
msgid "Lao"
-msgstr "Laoso"
+msgstr "Laosų"
#. frequency:1 iso_code_3:lat
#: DB:language/name:238
@@ -1411,127 +1411,127 @@ msgstr "Lotynų"
#. frequency:1 iso_code_3:lav
#: DB:language/name:239
msgid "Latvian"
-msgstr ""
+msgstr "Latvių"
#. frequency:1 iso_code_3:lzz
#: DB:language/name:4039
msgid "Laz"
-msgstr ""
+msgstr "Lazų"
#. frequency:1 iso_code_3:lez
#: DB:language/name:240
msgid "Lezghian"
-msgstr ""
+msgstr "Lezgių"
#. frequency:1 iso_code_3:lim
#: DB:language/name:241
msgid "Limburgish"
-msgstr ""
+msgstr "Limburgų"
#. frequency:1 iso_code_3:lin
#: DB:language/name:242
msgid "Lingala"
-msgstr ""
+msgstr "Lingalų"
#. frequency:1 iso_code_3:lit
#: DB:language/name:243
msgid "Lithuanian"
-msgstr ""
+msgstr "Lietuvių"
#. frequency:1 iso_code_3:liv
#: DB:language/name:3858
msgid "Liv"
-msgstr ""
+msgstr "Lyvių"
#. frequency:1 iso_code_3:jbo
#: DB:language/name:197
msgid "Lojban"
-msgstr ""
+msgstr "Ložbanų"
#. frequency:1 iso_code_3:lou
#: DB:language/name:3958
msgid "Louisiana Creole French"
-msgstr ""
+msgstr "Luizianos kreolų prancūzų"
#. frequency:1 iso_code_3:loz
#: DB:language/name:245
msgid "Lozi"
-msgstr ""
+msgstr "Lozių"
#. frequency:1 iso_code_3:lub
#: DB:language/name:248
msgid "Luba-Katanga"
-msgstr ""
+msgstr "Luba katangų"
#. frequency:1 iso_code_3:lua
#: DB:language/name:247
msgid "Luba-Lulua"
-msgstr ""
+msgstr "Lubų lulua"
#. frequency:1 iso_code_3:lui
#: DB:language/name:250
msgid "Luiseno"
-msgstr ""
+msgstr "Luisenų"
#. frequency:1 iso_code_3:lun
#: DB:language/name:251
msgid "Lunda"
-msgstr ""
+msgstr "Lundų"
#. frequency:1 iso_code_3:luo
#: DB:language/name:252
msgid "Luo"
-msgstr ""
+msgstr "Lumių"
#. frequency:1 iso_code_3:lus
#: DB:language/name:253
msgid "Lushai"
-msgstr ""
+msgstr "Lušajų"
#. frequency:1 iso_code_3:ltz
#: DB:language/name:246
msgid "Luxembourgish"
-msgstr ""
+msgstr "Liuksemburgiečių"
#. frequency:1 iso_code_3:luy
#: DB:language/name:4018
msgid "Luyia"
-msgstr ""
+msgstr "Lujų"
#. frequency:1 iso_code_3:mkd
#: DB:language/name:254
msgid "Macedonian"
-msgstr ""
+msgstr "Makedoniečių"
#. frequency:1 iso_code_3:mad
#: DB:language/name:255
msgid "Madurese"
-msgstr ""
+msgstr "Madurezų"
#. frequency:1 iso_code_3:mag
#: DB:language/name:256
msgid "Magahi"
-msgstr ""
+msgstr "Magahių"
#. frequency:1 iso_code_3:mai
#: DB:language/name:258
msgid "Maithili"
-msgstr ""
+msgstr "Maithilių"
#. frequency:1 iso_code_3:mak
#: DB:language/name:259
msgid "Makasar"
-msgstr ""
+msgstr "Makasarų"
#. frequency:1 iso_code_3:mlg
#: DB:language/name:275
msgid "Malagasy"
-msgstr ""
+msgstr "Malagasių"
#. frequency:1 iso_code_3:msa
#: DB:language/name:266
msgid "Malay"
-msgstr ""
+msgstr "Malajiečių"
#. frequency:1 iso_code_3:mal
#: DB:language/name:260
@@ -1541,182 +1541,182 @@ msgstr "Malajalamų"
#. frequency:1 iso_code_3:mlt
#: DB:language/name:276
msgid "Maltese"
-msgstr ""
+msgstr "Maltiečių"
#. frequency:1 iso_code_3:mnc
#: DB:language/name:277
msgid "Manchu"
-msgstr ""
+msgstr "Mandžiūrų"
#. frequency:1 iso_code_3:mdr
#: DB:language/name:268
msgid "Mandar"
-msgstr ""
+msgstr "Mandarų"
#. frequency:1 iso_code_3:cmn
#: DB:language/name:1739
msgid "Mandarin Chinese"
-msgstr ""
+msgstr "Mandarinų kinų"
#. frequency:1 iso_code_3:man
#: DB:language/name:261
msgid "Mandingo"
-msgstr ""
+msgstr "Mandingų"
#. frequency:1 iso_code_3:mni
#: DB:language/name:278
msgid "Manipuri"
-msgstr ""
+msgstr "Manipurų"
#. frequency:0 iso_code_3:null
#: DB:language/name:279
msgid "Manobo languages"
-msgstr ""
+msgstr "Manobų kalbos"
#. frequency:1 iso_code_3:mns
#: DB:language/name:4358
msgid "Mansi"
-msgstr ""
+msgstr "Mansių"
#. frequency:1 iso_code_3:glv
#: DB:language/name:151
msgid "Manx"
-msgstr ""
+msgstr "Manksų"
#. frequency:1 iso_code_3:mri
#: DB:language/name:262
msgid "Maori"
-msgstr ""
+msgstr "Maorių"
#. frequency:1 iso_code_3:arn
#: DB:language/name:22
msgid "Mapudungun"
-msgstr ""
+msgstr "Mapudungunų"
#. frequency:1 iso_code_3:mar
#: DB:language/name:264
msgid "Marathi"
-msgstr ""
+msgstr "Maratų"
#. frequency:1 iso_code_3:chm
#: DB:language/name:78
msgid "Mari"
-msgstr ""
+msgstr "Marių"
#. frequency:1 iso_code_3:mah
#: DB:language/name:257
msgid "Marshallese"
-msgstr ""
+msgstr "Maršalų"
#. frequency:1 iso_code_3:mwr
#: DB:language/name:288
msgid "Marwari"
-msgstr ""
+msgstr "Marvarių"
#. frequency:1 iso_code_3:mas
#: DB:language/name:265
msgid "Masai"
-msgstr ""
+msgstr "Masajų"
#. frequency:0 iso_code_3:null
#: DB:language/name:289
msgid "Mayan languages"
-msgstr ""
+msgstr "Majų kalbos"
#. frequency:1 iso_code_3:men
#: DB:language/name:269
msgid "Mende"
-msgstr ""
+msgstr "Mendų"
#. frequency:1 iso_code_3:mic
#: DB:language/name:271
msgid "Mi'kmaq"
-msgstr ""
+msgstr "Mikmakų"
#. frequency:1 iso_code_3:nan
#: DB:language/name:4663
msgid "Min Nan Chinese"
-msgstr ""
+msgstr "Min Nan kinų"
#. frequency:1 iso_code_3:hna
#: DB:language/name:2735
msgid "Mina (Cameroon)"
-msgstr ""
+msgstr "Minų (Kamerūnas)"
#. frequency:1 iso_code_3:min
#: DB:language/name:272
msgid "Minangkabau"
-msgstr ""
+msgstr "Minangkabų"
#. frequency:1 iso_code_3:mwl
#: DB:language/name:287
msgid "Mirandese"
-msgstr ""
+msgstr "Mirandiečių"
#. frequency:1 iso_code_3:mvi
#: DB:language/name:4538
msgid "Miyako"
-msgstr ""
+msgstr "Mijakų"
#. frequency:1 iso_code_3:moh
#: DB:language/name:280
msgid "Mohawk"
-msgstr ""
+msgstr "Mohavkų"
#. frequency:1 iso_code_3:mdf
#: DB:language/name:267
msgid "Moksha"
-msgstr ""
+msgstr "Mokošų"
#. frequency:0 iso_code_3:null
#: DB:language/name:281
msgid "Moldavian"
-msgstr ""
+msgstr "Moldavų"
#. frequency:0 iso_code_3:null
#: DB:language/name:274
msgid "Mon-Khmer languages"
-msgstr ""
+msgstr "Mon khmerų kalbos"
#. frequency:1 iso_code_3:lol
#: DB:language/name:244
msgid "Mongo"
-msgstr ""
+msgstr "Mongų"
#. frequency:1 iso_code_3:mon
#: DB:language/name:282
msgid "Mongolian"
-msgstr ""
+msgstr "Mongolų"
#. frequency:1 iso_code_3:mos
#: DB:language/name:283
msgid "Mossi"
-msgstr ""
+msgstr "Mosių"
#. frequency:0 iso_code_3:null
#: DB:language/name:285
msgid "Munda languages"
-msgstr ""
+msgstr "Mundų kalbos"
#. frequency:1 iso_code_3:nqo
#: DB:language/name:478
msgid "N'Ko"
-msgstr ""
+msgstr "N'Ko"
#. frequency:0 iso_code_3:null
#: DB:language/name:291
msgid "Nahuatl languages"
-msgstr ""
+msgstr "Nahuatlų kalbos"
#. frequency:1 iso_code_3:nau
#: DB:language/name:294
msgid "Nauru"
-msgstr "Nauru"
+msgstr "Naurų"
#. frequency:1 iso_code_3:nav
#: DB:language/name:295
msgid "Navajo"
-msgstr ""
+msgstr "Navahų"
#. frequency:1 iso_code_3:nde
#: DB:language/name:297
@@ -2291,7 +2291,7 @@ msgstr ""
#. frequency:2 iso_code_3:spa
#: DB:language/name:393
msgid "Spanish"
-msgstr "Ispanų kalba"
+msgstr "Ispanų"
#. frequency:1 iso_code_3:srn
#: DB:language/name:480
@@ -2336,12 +2336,12 @@ msgstr ""
#. frequency:2 iso_code_3:swe
#: DB:language/name:403
msgid "Swedish"
-msgstr "Švedų kalba"
+msgstr "Švedų"
#. frequency:1 iso_code_3:syr
#: DB:language/name:404
msgid "Syriac"
-msgstr "Siriškas"
+msgstr "Sirų"
#. frequency:1 iso_code_3:tgl
#: DB:language/name:414
@@ -2421,97 +2421,97 @@ msgstr ""
#. frequency:1 iso_code_3:tiv
#: DB:language/name:419
msgid "Tiv"
-msgstr ""
+msgstr "Tivų"
#. frequency:1 iso_code_3:tli
#: DB:language/name:422
msgid "Tlingit"
-msgstr ""
+msgstr "Tlingitų"
#. frequency:1 iso_code_3:tpi
#: DB:language/name:426
msgid "Tok Pisin"
-msgstr ""
+msgstr "Tok pisinų"
#. frequency:1 iso_code_3:tkl
#: DB:language/name:420
msgid "Tokelau"
-msgstr "Tokelavas"
+msgstr "Tokelavų"
#. frequency:1 iso_code_3:tok
#: DB:language/name:7845
msgid "Toki Pona"
-msgstr ""
+msgstr "Toki ponų"
#. frequency:1 iso_code_3:tog
#: DB:language/name:424
msgid "Tonga (Nyasa)"
-msgstr ""
+msgstr "Tongų (Nyasa)"
#. frequency:1 iso_code_3:ton
#: DB:language/name:425
msgid "Tonga (Tonga Islands)"
-msgstr ""
+msgstr "Tongų (Tongos salos)"
#. frequency:1 iso_code_3:tsi
#: DB:language/name:427
msgid "Tsimshian"
-msgstr ""
+msgstr "Timšėnų"
#. frequency:1 iso_code_3:tso
#: DB:language/name:429
msgid "Tsonga"
-msgstr ""
+msgstr "Tsongų"
#. frequency:1 iso_code_3:tsn
#: DB:language/name:428
msgid "Tswana"
-msgstr ""
+msgstr "Tsvanų"
#. frequency:1 iso_code_3:tum
#: DB:language/name:431
msgid "Tumbuka"
-msgstr ""
+msgstr "Tumbukų"
#. frequency:0 iso_code_3:null
#: DB:language/name:432
msgid "Tupi languages"
-msgstr ""
+msgstr "Tupių kalbos"
#. frequency:2 iso_code_3:tur
#: DB:language/name:433
msgid "Turkish"
-msgstr ""
+msgstr "Turkų"
#. frequency:1 iso_code_3:ota
#: DB:language/name:324
msgid "Turkish, Ottoman"
-msgstr ""
+msgstr "Turkų, osmanų"
#. frequency:1 iso_code_3:tuk
#: DB:language/name:430
msgid "Turkmen"
-msgstr ""
+msgstr "Turkmėnų"
#. frequency:1 iso_code_3:tvl
#: DB:language/name:435
msgid "Tuvalu"
-msgstr "Tuvalu"
+msgstr "Tuvalų"
#. frequency:1 iso_code_3:tyv
#: DB:language/name:437
msgid "Tuvinian"
-msgstr ""
+msgstr "Tuvinų"
#. frequency:1 iso_code_3:twi
#: DB:language/name:436
msgid "Twi"
-msgstr ""
+msgstr "Tvių"
#. frequency:1 iso_code_3:udm
#: DB:language/name:438
msgid "Udmurt"
-msgstr ""
+msgstr "Udmurtų"
#. frequency:0 iso_code_3:uga
#: DB:language/name:439
@@ -2526,12 +2526,12 @@ msgstr ""
#. frequency:1 iso_code_3:ukr
#: DB:language/name:441
msgid "Ukrainian"
-msgstr ""
+msgstr "Ukrainiečių"
#. frequency:1 iso_code_3:umb
#: DB:language/name:442
msgid "Umbundu"
-msgstr ""
+msgstr "Umbundų"
#. frequency:1 iso_code_3:sju
#: DB:language/name:5995
@@ -2541,7 +2541,7 @@ msgstr ""
#. frequency:0 iso_code_3:mis
#: DB:language/name:273
msgid "Uncoded languages"
-msgstr ""
+msgstr "Nekoduotos kalbos"
#. frequency:0 iso_code_3:und
#: DB:language/name:443
@@ -2596,37 +2596,37 @@ msgstr ""
#. frequency:0 iso_code_3:null
#: DB:language/name:451
msgid "Wakashan languages"
-msgstr ""
+msgstr "Vakašanų kalbos"
#. frequency:1 iso_code_3:wln
#: DB:language/name:457
msgid "Walloon"
-msgstr ""
+msgstr "Valonų"
#. frequency:1 iso_code_3:wae
#: DB:language/name:6981
msgid "Walser"
-msgstr ""
+msgstr "Valserių"
#. frequency:1 iso_code_3:war
#: DB:language/name:453
msgid "Waray"
-msgstr ""
+msgstr "Varajų"
#. frequency:1 iso_code_3:wbp
#: DB:language/name:7009
msgid "Warlpiri"
-msgstr ""
+msgstr "Varlpirių"
#. frequency:1 iso_code_3:was
#: DB:language/name:454
msgid "Washo"
-msgstr ""
+msgstr "Vašų"
#. frequency:1 iso_code_3:cym
#: DB:language/name:455
msgid "Welsh"
-msgstr ""
+msgstr "Velsiečių"
#. frequency:1 iso_code_3:are
#: DB:language/name:820
@@ -2651,7 +2651,7 @@ msgstr ""
#. frequency:1 iso_code_3:xho
#: DB:language/name:460
msgid "Xhosa"
-msgstr ""
+msgstr "Ksosų"
#. frequency:1 iso_code_3:rys
#: DB:language/name:5808
@@ -2681,7 +2681,7 @@ msgstr ""
#. frequency:1 iso_code_3:yox
#: DB:language/name:7602
msgid "Yoron"
-msgstr ""
+msgstr "Joronų"
#. frequency:1 iso_code_3:yor
#: DB:language/name:464
@@ -2756,4 +2756,4 @@ msgstr "[Kelios kalbos]"
#. frequency:1 iso_code_3:zxx
#: DB:language/name:486
msgid "[No linguistic content]"
-msgstr ""
+msgstr "[Nėra kalbinio turinio]"
diff --git a/po/mb_server.lt.po b/po/mb_server.lt.po
index 57ed5b8440e..edc4be00471 100644
--- a/po/mb_server.lt.po
+++ b/po/mb_server.lt.po
@@ -12,7 +12,7 @@ msgstr ""
"Project-Id-Version: MusicBrainz\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-09-27 17:01+0000\n"
-"PO-Revision-Date: 2023-09-24 15:27+0000\n"
+"PO-Revision-Date: 2023-10-09 22:27+0000\n"
"Last-Translator: \"Vac31.\" \n"
"Language-Team: Lithuanian \n"
@@ -21,8 +21,8 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100 < "
-"11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? "
-"1 : n % 1 != 0 ? 2: 3);\n"
+"11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? 1 :"
+" n % 1 != 0 ? 2: 3);\n"
"X-Generator: Weblate 5.0.2\n"
#: ../root/components/common-macros.tt:12
@@ -1077,7 +1077,7 @@ msgstr "Galutinis taškas:"
#: ../root/components/forms.tt:258 ../root/components/forms.tt:283
#: ../root/static/scripts/edit/components/GuessCaseOptions.js:113
msgid "English"
-msgstr "Anglų k."
+msgstr "Anglų"
#: ../root/release/edit/tracklist.tt:3
msgid "Enter a tracklist below:"
@@ -3102,7 +3102,7 @@ msgstr ""
#: ../root/components/forms.tt:261 ../root/components/forms.tt:286
#: ../root/static/scripts/edit/components/GuessCaseOptions.js:116
msgid "Turkish"
-msgstr ""
+msgstr "Turkų"
#: ../root/layout.tt:118 ../root/layout/components/Footer.js:34
msgid "Twitter"
@@ -6329,7 +6329,7 @@ msgstr ""
#: ../root/admin/EditBanner.js:39 ../root/admin/wikidoc/EditWikiDoc.js:51
#: ../root/admin/wikidoc/WikiDocIndex.js:102
msgid "Update"
-msgstr ""
+msgstr "Atnaujinti"
#: ../root/account/applications/RegisterApplication.js:22
#: ../root/account/applications/RegisterApplication.js:23
@@ -6400,7 +6400,7 @@ msgstr ""
#: ../root/admin/DeleteUser.js:75
msgid "Delete {e}"
-msgstr ""
+msgstr "Ištrinti {e}"
#: ../root/admin/DeleteUser.js:84
msgid ""
@@ -6456,7 +6456,7 @@ msgstr ""
#: ../root/admin/EditUser.js:79 ../root/admin/PrivilegeSearch.js:67
msgid "Auto-editor"
-msgstr ""
+msgstr "Autoredaktorius (-ė)"
#: ../root/admin/EditUser.js:84 ../root/admin/PrivilegeSearch.js:72
msgid "Transclusion editor"
diff --git a/po/relationships.lt.po b/po/relationships.lt.po
index 4807934e8f9..4c9dbb7bc3c 100644
--- a/po/relationships.lt.po
+++ b/po/relationships.lt.po
@@ -1,24 +1,28 @@
#
# Translators:
# Vaclovas lntas (Vac.) , 2023
+# "Vac31." , 2023.
msgid ""
msgstr ""
"Project-Id-Version: MusicBrainz\n"
-"PO-Revision-Date: 2012-05-24 18:50+0000\n"
-"Last-Translator: Vaclovas lntas (Vac.) , 2023\n"
-"Language-Team: Lithuanian (http://app.transifex.com/musicbrainz/musicbrainz/"
-"language/lt/)\n"
+"PO-Revision-Date: 2023-10-14 18:27+0000\n"
+"Last-Translator: \"Vac31.\" \n"
+"Language-Team: Lithuanian \n"
"Language: lt\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100 < "
-"11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? "
-"1 : n % 1 != 0 ? 2: 3);\n"
+"11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? 1 :"
+" n % 1 != 0 ? 2: 3);\n"
+"X-Generator: Weblate 5.0.2\n"
#: DB:link_attribute_type/description:1355
msgid "A performance-centered, usually one to three year postgraduate program."
msgstr ""
+"Į atlikimą orientuota, paprastai vienų-trejų metų trukmės antrosios pakopos "
+"studijų programa."
#: DB:link_type/description:218
msgid ""
@@ -27,10 +31,10 @@ msgid ""
"people involved with the label can post content to. Examples include "
"Facebook pages, and accounts on Twitter, Instagram and Flickr."
msgstr ""
-"Socialinio tinklo puslapis − tai serijos leidyklos puslapis socialiniame tinkle, "
-"kuriame turinį gali skelbti tik su leidykla susiję asmenys. Pavyzdžiui, "
-"„Facebook“ puslapiai, paskyros „Twitter“, „Instagram“ ir „Flickr“."
+"Socialinio tinklo puslapis − tai nuosavas leidyklos puslapis socialiniame tinkle"
+"a>, kuriame turinį gali skelbti tik su leidykla susiję asmenys. Pavyzdžiai – "
+"Facebook puslapiai, paskyros Twitter, Instagram ir Flickr."
#: DB:link_type/description:784
msgid ""
@@ -41,8 +45,8 @@ msgid ""
msgstr ""
"Socialinio tinklo puslapis − tai serijos puslapis socialiniame tinkle, "
-"kuriame turinį gali skelbti tik su serija susiję asmenys. Pavyzdžiui, "
-"„Facebook“ puslapiai, paskyros „Twitter“, „Instagram“ ir „Flickr“."
+"kuriame turinį gali skelbti tik su serija susiję žmonės. Pavyzdžiai – "
+"Facebook puslapiai, paskyros Twitter, Instagram ir Flickr."
#: DB:link_type/description:429
msgid ""
@@ -51,10 +55,10 @@ msgid ""
"people involved with the place can post content to. Examples include "
"Facebook pages, and accounts on Twitter, Instagram and Flickr."
msgstr ""
-"Socialinio tinklo puslapis − tai serijos puslapis socialiniame tinkle, "
-"kuriame turinį gali skelbti tik su vieta susiję asmenys. Pavyzdžiui, "
-"„Facebook“ puslapiai, paskyros „Twitter“, „Instagram“ ir „Flickr“."
+"kuriame turinį gali skelbti tik su vieta susiję žmonės. Pavyzdžiui – "
+"Facebook puslapiai, paskyros Twitter, Instagram ir Flickr."
#: DB:link_type/description:192
msgid ""
@@ -66,13 +70,13 @@ msgid ""
"Examples include Facebook pages and profiles, Last.fm users and accounts on "
"Twitter, Instagram and Flickr."
msgstr ""
-"Socialinio tinklo puslapis – tai atlikėjo profilio puslapis socialiniame tinkle, kuriame turinį gali skelbti tik jie (arba jų "
-"vadovybė). Kiti žmonės gali susikurti savo profilius ir bendrauti su "
-"atlikėju, pvz., įtraukti juos į draugus arba komentuoti dalykus, kuriuos jie "
-"skelbia. Pavyzdžiui, „Facebook“ puslapiai ir profiliai, „Last.fm“ naudotojai "
-"ir „Twitter“, „Instagram“, „Flickr“ paskyros."
+"Socialinio tinklo puslapis – tai atlikėjo profilio puslapis socialiniame tinkle, kuriame turinį gali skelbti tik jie (arba jų "
+"valdyba). Kiti žmonės gali susikurti savo profilius ir bendrauti su "
+"atlikėju, pvz., pridėti juos į draugus arba komentuoti dalykus, kuriuos jie "
+"skelbia. Pavyzdžiui – Facebook puslapiai ir profiliai, Last.fm naudotojai ir "
+"Twitter, Instagram, Flickr paskyros."
#: DB:link_type/description:783
msgid ""
@@ -84,8 +88,8 @@ msgid ""
msgstr ""
"Socialinio tinklo puslapis − tai renginio puslapis socialiniame tinkle, "
-"kuriame turinį gali skelbti tik su renginiu susiję asmenys. Pavyzdžiui, "
-"„Facebook“ puslapiai, paskyros „Twitter“, „Instagram“ ir „Flickr“."
+"kuriame turinį gali skelbti tik su renginiu susiję žmonės. Pavyzdžiai – "
+"Facebook puslapiai, paskyros Twitter, Instagram ir Flickr."
#: DB:link_type/link_phrase:77 DB:link_type/reverse_link_phrase:77
msgid "ASIN"
@@ -95,53 +99,53 @@ msgstr "ASIN"
#: DB:link_type/link_phrase:283 DB:link_type/link_phrase:285
#: DB:link_type/link_phrase:1093 DB:link_type/reverse_link_phrase:286
msgid "Allmusic"
-msgstr ""
+msgstr "Allmusic"
#: DB:link_type/link_phrase:286 DB:link_type/reverse_link_phrase:755
#: DB:link_type/reverse_link_phrase:284 DB:link_type/reverse_link_phrase:283
#: DB:link_type/reverse_link_phrase:285 DB:link_type/reverse_link_phrase:1093
msgid "Allmusic page for"
-msgstr ""
+msgstr "Allmusic puslapis, skirtas"
#: DB:link_type/link_phrase:1131 DB:link_type/link_phrase:1130
msgid "Apple Music"
-msgstr ""
+msgstr "Apple Music"
#: DB:link_type/reverse_link_phrase:1131 DB:link_type/reverse_link_phrase:1130
msgid "Apple Music page for"
-msgstr ""
+msgstr "Apple Music puslapis, skirtas"
#: DB:link_type/link_phrase:190
msgid "BBC Music"
-msgstr ""
+msgstr "BBC Music"
#: DB:link_type/name:190
msgid "BBC Music page"
-msgstr ""
+msgstr "BBC Music puslapis"
#: DB:link_type/reverse_link_phrase:190
msgid "BBC Music page for"
-msgstr ""
+msgstr "BBC Music puslapis, skirtas"
#: DB:link_type/link_phrase:1092 DB:link_type/link_phrase:718
#: DB:link_type/link_phrase:719
msgid "Bandcamp"
-msgstr ""
+msgstr "Bandcamp"
#: DB:link_type/reverse_link_phrase:1092 DB:link_type/reverse_link_phrase:718
#: DB:link_type/reverse_link_phrase:719
msgid "Bandcamp page for"
-msgstr ""
+msgstr "Bandcamp puslapis, skirtas"
#: DB:link_type/link_phrase:861 DB:link_type/link_phrase:862
#: DB:link_type/link_phrase:860
msgid "Bandsintown"
-msgstr ""
+msgstr "Bandsintown"
#: DB:link_type/reverse_link_phrase:861 DB:link_type/reverse_link_phrase:862
#: DB:link_type/reverse_link_phrase:860
msgid "Bandsintown page for"
-msgstr ""
+msgstr "Bandsintown puslapis, skirtas"
#: DB:link_type/link_phrase:851 DB:link_type/link_phrase:852
#: DB:link_type/link_phrase:853 DB:link_type/link_phrase:1167
@@ -149,114 +153,124 @@ msgstr ""
#: DB:link_type/name:853 DB:link_type/name:1167 DB:link_type/name:854
#: DB:link_type/name:850 DB:link_type/reverse_link_phrase:854
msgid "BookBrainz"
-msgstr ""
+msgstr "BookBrainz"
#: DB:link_type/link_phrase:854 DB:link_type/reverse_link_phrase:851
#: DB:link_type/reverse_link_phrase:852 DB:link_type/reverse_link_phrase:853
#: DB:link_type/reverse_link_phrase:1167 DB:link_type/reverse_link_phrase:850
msgid "BookBrainz page for"
-msgstr ""
+msgstr "BookBrainz puslapis, skirtas"
#: DB:link_type/link_phrase:919 DB:link_type/name:919
msgid "CD Baby"
-msgstr ""
+msgstr "CD Baby"
#: DB:link_type/reverse_link_phrase:919
msgid "CD Baby page for"
-msgstr ""
+msgstr "CD Baby puslapis, skirtas"
#: DB:link_type/link_phrase:981 DB:link_type/name:981
msgid "CPDL"
-msgstr ""
+msgstr "CPDL"
#: DB:link_type/reverse_link_phrase:981
msgid "CPDL page for"
-msgstr ""
+msgstr "CPDL puslapis, skirtas"
#: DB:link_type/name:227 DB:link_type/name:8
msgid "DJ-mix"
-msgstr ""
+msgstr "DJ miksas"
#: DB:link_type/link_phrase:227 DB:link_type/link_phrase:8
msgid "DJ-mix of"
-msgstr ""
+msgstr "DJ miksas iš"
#: DB:link_type/link_phrase:155 DB:link_type/long_link_phrase:155
msgid "DJ-mixed"
-msgstr ""
+msgstr "DJ sumiksuotas"
#: DB:link_type/reverse_link_phrase:8
msgid "DJ-mixed versions"
-msgstr ""
+msgstr "DJ sumiksuotos versijos"
#: DB:link_type/long_link_phrase:43
msgid "DJ-mixed {medium:% of}"
-msgstr ""
+msgstr "DJ sumiksuotas {medium:% iš}"
#: DB:link_type/link_phrase:43
msgid "DJ-mixed {medium}"
-msgstr ""
+msgstr "DJ sumiksuotas {medium}"
#: DB:link_type/reverse_link_phrase:155
msgid "DJ-mixer"
-msgstr ""
+msgstr "DJ mikseris (-ė)"
#: DB:link_type/reverse_link_phrase:43
msgid "DJ-mixer {medium}"
-msgstr ""
+msgstr "DJ mikseris (-ė) {laikmena}"
#: DB:link_type/reverse_link_phrase:227
msgid "DJ-mixes"
-msgstr ""
+msgstr "DJ miksai"
#: DB:link_type/description:704
msgid ""
"Describes the fact a person was contracted by a place as a mastering "
"engineer."
msgstr ""
+"Apibūdina faktą, kad su asmeniu buvo sudaryta sutartis su vieta kaip "
+"masteringo inžinieriumi."
#: DB:link_type/description:703
msgid ""
"Describes the fact a person was contracted by a place as a mixing engineer."
msgstr ""
+"Apibūdina faktą, kad su asmeniu buvo sudaryta sutartis su vieta kaip "
+"miksavimo inžinieriumi."
#: DB:link_type/description:702
msgid ""
"Describes the fact a person was contracted by a place as a recording "
"engineer."
msgstr ""
+"Apibūdina faktą, kad su asmeniu buvo sudaryta sutartis su vieta kaip įrašymo "
+"inžinieriumi."
#: DB:link_type/description:701
msgid "Describes the fact a person was contracted by a place as an engineer."
msgstr ""
+"Apibūdina faktą, kad su asmeniu buvo sudaryta sutartis su vieta kaip "
+"inžinieriumi."
#: DB:link_type/description:357
msgid "Designates that a work is or was the anthem for an area"
-msgstr ""
+msgstr "Nurodo, kad kūrinys yra arba buvo vietovės himnas"
#: DB:link_type/description:356
msgid "Designates that one area is contained by another."
-msgstr ""
+msgstr "Nurodo, kad viena vietovė apima kitą."
#: DB:link_type/link_phrase:1089 DB:link_type/link_phrase:180
#: DB:link_type/link_phrase:76 DB:link_type/link_phrase:217
#: DB:link_type/link_phrase:90 DB:link_type/link_phrase:747
#: DB:link_type/link_phrase:705 DB:link_type/reverse_link_phrase:971
msgid "Discogs"
-msgstr ""
+msgstr "Discogs"
#: DB:link_type/link_phrase:971 DB:link_type/reverse_link_phrase:1089
#: DB:link_type/reverse_link_phrase:180 DB:link_type/reverse_link_phrase:76
#: DB:link_type/reverse_link_phrase:217 DB:link_type/reverse_link_phrase:90
#: DB:link_type/reverse_link_phrase:747 DB:link_type/reverse_link_phrase:705
msgid "Discogs page for"
-msgstr ""
+msgstr "Discogs puslapis, skirtas"
#: DB:link_attribute_type/description:1020
msgid ""
"For indicating the step-spouse of the artist's parent, or the sibling "
"relationship with the children of such a spouse"
msgstr ""
+"Nurodant atlikėjo patėvio sutuoktinį arba brolių ir seserų santykį su tokio "
+"sutuoktinio vaikais"
#: DB:link_attribute_type/description:580
msgid ""
@@ -264,18 +278,22 @@ msgid ""
"relevant to this recording. Examples include instrumental arrangements, or "
"\"beats\" from hip-hop songs which may be reused with different lyrics."
msgstr ""
+"Kūriniams, kurie turi dainų žodžius, tai reiškia, kad tie dainų žodžiai nėra "
+"susiję su šiuo įrašu. Pavyzdžiai – instrumentinės aranžuotės arba hiphopo "
+"dainų „ritmai“, kurie gali būti pakartotinai naudojami su kitais dainų "
+"žodžiais."
#: DB:link_type/link_phrase:934 DB:link_type/link_phrase:713
msgid "Geonames"
-msgstr ""
+msgstr "Geonames"
#: DB:link_type/reverse_link_phrase:934 DB:link_type/reverse_link_phrase:713
msgid "Geonames page for"
-msgstr ""
+msgstr "Geonames puslapis, skirtas"
#: DB:link_type/name:83 DB:link_type/name:258
msgid "IMDB samples"
-msgstr ""
+msgstr "IMDB mėginiai"
#: DB:link_type/link_phrase:313 DB:link_type/link_phrase:178
#: DB:link_type/link_phrase:97 DB:link_type/link_phrase:706
@@ -283,35 +301,37 @@ msgstr ""
#: DB:link_type/name:97 DB:link_type/name:706
#: DB:link_type/reverse_link_phrase:843
msgid "IMDb"
-msgstr ""
+msgstr "IMDb"
#: DB:link_type/reverse_link_phrase:83 DB:link_type/reverse_link_phrase:258
msgid "IMDb entry sampled in"
-msgstr ""
+msgstr "IMDb įrašas, paimtas iš"
#: DB:link_type/link_phrase:843 DB:link_type/reverse_link_phrase:313
#: DB:link_type/reverse_link_phrase:178 DB:link_type/reverse_link_phrase:97
#: DB:link_type/reverse_link_phrase:706
msgid "IMDb page for"
-msgstr ""
+msgstr "IMDb puslapis, skirtas"
#: DB:link_type/link_phrase:754 DB:link_type/name:754
msgid "IMSLP"
-msgstr ""
+msgstr "IMSLP"
#: DB:link_type/reverse_link_phrase:754
msgid "IMSLP page for"
-msgstr ""
+msgstr "IMSLP puslapis, skirtas"
#: DB:link_attribute_type/description:516
msgid "Indicates a bonus disc"
-msgstr ""
+msgstr "Nurodo papildomą diską"
#: DB:link_type/description:162
msgid ""
"Indicates a miscellaneous support role. This is usually stated in the liner "
"notes of an album."
msgstr ""
+"Nurodo įvairias pagalbines funkcijas. Paprastai tai nurodoma įvadinėse "
+"albumo užrašuose."
#: DB:link_type/description:105
msgid ""
@@ -320,6 +340,10 @@ msgid ""
"normally applies to well-known solo artists, although it can sometimes apply "
"to groups."
msgstr ""
+"Nurodo muzikantą (-ę), kuris (-i) ilgą laiką daro instrumentinę palaikymą "
+"kitam muzikantui (-ei) albumuose ir (arba) koncertuose. Tai – asmens ir "
+"atlikėjo santykis, kuris paprastai taikomas žinomiems solo atlikėjams, nors "
+"kartais gali būti taikomas ir grupėms."
#: DB:link_type/description:107
msgid ""
@@ -328,48 +352,57 @@ msgid ""
"applies to well-known solo artists, although it can sometimes apply to "
"groups."
msgstr ""
+"Nurodo muzikantą (-ę), kuris (-i) ilgą laiką daro vokalinį palaikymą kitam "
+"muzikantui (-ei) albumuose ir (arba) koncertuose. Tai – asmens ir atlikėjo "
+"santykis, kuris paprastai taikomas žinomiems solo atlikėjams, nors kartais "
+"gali būti taikomas ir grupėms."
#: DB:link_type/description:1083
msgid "Indicates a page with an official schedule for an event series."
-msgstr ""
+msgstr "Nurodo puslapį su oficialiu renginių serijos tvarkaraščiu."
#: DB:link_type/description:109
msgid "Indicates a parent-child relationship."
-msgstr ""
+msgstr "Nurodo tėvo ir vaiko santykį."
#: DB:link_type/description:396
msgid "Indicates a pictorial image (JPEG, GIF, PNG) of a place"
-msgstr ""
+msgstr "Nurodo vietos (JPEG, GIF, PNG) vaizdą"
#: DB:link_type/description:173
msgid "Indicates a pictorial image (JPEG, GIF, PNG) of an artist."
-msgstr ""
+msgstr "Nurodo atlikėjo (JPEG, GIF, PNG) paveikslėlį."
#: DB:link_type/description:943
msgid ""
"Indicates a place that moved from one location to another, while still being "
"generally considered the same."
msgstr ""
+"Nurodo vietą, kuri persikėlė iš vienos vietos į kitą, tačiau iš esmės vis "
+"dar laikoma ta pačia."
#: DB:link_attribute_type/description:1019
msgid "Indicates a sibling with whom the artist has only one parent in common"
msgstr ""
+"Nurodo brolį ar seserį, su kuriuo (-ia) atlikėjas (-a) turi tik vieną bendrą "
+"tėvą ar motiną"
#: DB:link_type/description:842
msgid "Indicates a webpage that reviews the event in question."
-msgstr ""
+msgstr "Nurodo tinklalapį, kuriame apžvelgiamas atitinkamas renginys."
#: DB:link_type/description:94
msgid "Indicates a webpage that reviews the release (group) in question."
-msgstr ""
+msgstr "Nurodo tinklalapį, kuris apžvelgia atitinkamą leidinį (grupę)."
#: DB:link_type/description:958
msgid "Indicates a webpage where you can download a label's releases for free."
msgstr ""
+"Nurodo tinklalapį, kuriame galima nemokamai atsisiųsti leidyklos leidinius."
#: DB:link_type/description:177
msgid "Indicates a webpage where you can download an artist's work for free."
-msgstr ""
+msgstr "Nurodo tinklalapį, kuriame galima nemokamai atsisiųsti atlikėjo kūrinį."
#: DB:link_type/description:834
msgid ""
@@ -377,6 +410,9 @@ msgid ""
"attributed to, but who is currently confirmed (or very strongly suspected) "
"not to be the real author."
msgstr ""
+"Nurodo atlikėją (paprastai kompozitorių (-ę)), kuriam (-iai) anksčiau buvo "
+"priskiriamas šis kūrinys, tačiau šiuo metu patvirtinta (arba labai stipriai "
+"įtariama), kad jis (-i) nėra tikrasis autorius (-ė)."
#: DB:link_type/description:104
msgid ""
@@ -385,73 +421,84 @@ msgid ""
"relationship that normally applies to well-known solo artists, although it "
"can sometimes apply to groups."
msgstr ""
+"Nurodo atlikėją, kuris (-i) ilgą laiką daro instrumentinį ar vokalinį "
+"palaikymą kitam atlikėjui albumuose ir (arba) koncertuose. Tai – asmens ir "
+"atlikėjo santykis, paprastai taikoma žinomiems solo atlikėjams, nors kartais "
+"gali būti taikoma ir grupėms."
#: DB:link_type/description:156
msgid "Indicates an artist that performed on this recording."
-msgstr ""
+msgstr "Nurodo atlikėją, kuris (-i) atliko šiame įraše."
#: DB:link_type/description:51
msgid "Indicates an artist that performed on this release."
-msgstr ""
+msgstr "Nurodo atlikėją, kuris (-i) atliko šiame leidinyje."
#: DB:link_type/description:148
msgid ""
"Indicates an artist that performed one or more instruments on this recording."
msgstr ""
+"Nurodo atlikėją, kuris (-i) šiame įraše atliko vieną ar daugiau instrumentų."
#: DB:link_type/description:44
msgid ""
"Indicates an artist that performed one or more instruments on this release."
msgstr ""
+"Nurodo atlikėją, kuris (-i) šiame leidinyje atliko vieną ar daugiau "
+"instrumentų."
#: DB:link_type/description:149
msgid "Indicates an artist that performed vocals on this recording."
-msgstr ""
+msgstr "Nurodo atlikėją, kuris (-i) šiame įraše atliko vokalus."
#: DB:link_type/description:60
msgid "Indicates an artist that performed vocals on this release."
-msgstr ""
+msgstr "Nurodo atlikėją, kuris (-i) šiame leidinyje atliko vokalus."
#: DB:link_type/description:150
msgid "Indicates an orchestra that performed on this recording."
-msgstr ""
+msgstr "Nurodo orkestrą, kuris atliko šiame įraše."
#: DB:link_type/description:45
msgid "Indicates an orchestra that performed on this release."
-msgstr ""
+msgstr "Nurodo orkestrą, kuris atliko šiame leidinyje."
#: DB:link_attribute_type/description:1080
msgid ""
"Indicates how many of a specific instrument an ensemble usually includes."
-msgstr ""
+msgstr "Nurodo, kiek konkretaus instrumento paprastai įtraukia ansamblis."
#: DB:link_type/description:844
msgid ""
"Indicates that an artist revised a work. In most cases, this will be the "
"original composer revising the work at a later date."
msgstr ""
+"Nurodo, kad atlikėjas (-a) pataisė kūrinį. Dažniausiai tai būna pirminis "
+"kompozitorius (-ė), kuris (-i) kūrinį pataisė vėlesnę datą."
#: DB:link_type/description:887
msgid ""
"Indicates that an event was intended as a performance of a specific release "
"group (usually an album)."
msgstr ""
+"Nurodo, kad renginys buvo skirtas konkrečios leidinio grupės (paprastai "
+"albumo) pasirodymui."
#: DB:link_attribute_type/description:567
msgid "Indicates that one entity is a cover of another entity"
-msgstr ""
+msgstr "Nurodo, kad vienas subjektas yra kito subjekto priedanga"
#: DB:link_type/description:996
msgid "Indicates that the artist is part of a series."
-msgstr ""
+msgstr "Nurodo, kad atlikėjas (-a) yra serijos dalis."
#: DB:link_type/description:802
msgid "Indicates that the event is part of a series."
-msgstr ""
+msgstr "Nurodo, kad renginys yra serijos dalis."
#: DB:link_type/description:231
msgid "Indicates that the recording contains samples from another."
-msgstr ""
+msgstr "Nurodo, kad įraše yra kito įrašo pavyzdžių."
#: DB:link_type/description:154
msgid ""
@@ -459,18 +506,21 @@ msgid ""
"artist. Use this only if you really cannot figure out the particular "
"recording that has been sampled."
msgstr ""
+"Nurodo, kad įraše yra nurodyto atlikėjo iš medžiagos pavyzdžių. Naudok tik "
+"tuo atveju, jei tikrai negali nustatyti šio konkretaus įrašo, iš kurio buvo "
+"paimti pavyzdžiai."
#: DB:link_type/description:69
msgid "Indicates that the recording contains samples from this release."
-msgstr ""
+msgstr "Nurodo, kad įraše yra šio leidinio pavyzdžių."
#: DB:link_type/description:740
msgid "Indicates that the recording is part of a series."
-msgstr ""
+msgstr "Nurodo, kad įrašas yra serijos dalis."
#: DB:link_attribute_type/description:1053
msgid "Indicates that the relationship is optional - doesn't always apply."
-msgstr ""
+msgstr "Nurodo, kad sąsajas pasirinktinis – ne visada taikomas."
#: DB:link_type/description:49
msgid ""
@@ -478,54 +528,64 @@ msgid ""
"artist. Use this only if you really cannot figure out the particular "
"recording that has been sampled."
msgstr ""
+"Nurodo, kad leidinyje yra nurodyto atlikėjo iš medžiagos pavyzdžių. Naudok "
+"tik tuo atveju, jei tikrai negali nustatyti šio konkretaus įrašo, iš kurio "
+"buvo paimti pavyzdžiai."
#: DB:link_type/description:742
msgid "Indicates that the release group is part of a series."
-msgstr ""
+msgstr "Nurodo, kad leidinių grupė yra serijos dalis."
#: DB:link_type/description:741
msgid "Indicates that the release is part of a series."
-msgstr ""
+msgstr "Nurodo, kad leidinys yra serijos dalis."
#: DB:link_type/description:743
msgid "Indicates that the work is part of a series."
-msgstr ""
+msgstr "Nurodo, kad kūrinys yra serijos dalis."
#: DB:link_type/description:112
msgid ""
"Indicates that two persons were romantically involved with each other "
"without being married."
msgstr ""
+"Nurodo, kad du asmenys, nesudarę santuokos, buvo susiję romantiškais ryšiais."
#: DB:link_type/description:1085
msgid "Indicates the area an event series was held at."
-msgstr ""
+msgstr "Nurodo vietovę, kurioje vyko renginių serija."
#: DB:link_type/description:715
msgid "Indicates the area where the work had its first performance"
-msgstr ""
+msgstr "Nurodo sritį, kurioje kūrinys buvo pristatytas pirmą kartą"
#: DB:link_type/description:956
msgid ""
"Indicates the artist(s) who gave the first performance of the work; this is "
"usually mostly relevant for classical music"
msgstr ""
+"Nurodo atlikėją (-us), kuris (-ie) pirmą kartą pristatė kūrinį; paprastai "
+"tai dažniausiai aktualu klasikinei muzikai"
#: DB:link_type/description:55
msgid ""
"Indicates the composer for this release, i.e. the artist who wrote the music "
"(not necessarily the lyrics)."
msgstr ""
+"Nurodo šio leidinio kompozitorių (-ę), t. y. atlikėją, kuris (-i) parašė "
+"muziką (nebūtinai dainų žodžius)."
#: DB:link_type/description:168
msgid ""
"Indicates the composer for this work, i.e. the artist who wrote the music "
"(not necessarily the lyrics)."
msgstr ""
+"Nurodo šio kūrinio kompozitorių (-ę), t. y. atlikėją, kuris (-i) parašė "
+"muziką (nebūtinai dainų žodžius)."
#: DB:link_type/description:845
msgid "Indicates the event where the work had its first performance"
-msgstr ""
+msgstr "Nurodo renginį, kuriame kūrinys buvo pristatytas pirmą kartą"
#: DB:link_type/description:986
msgid ""
@@ -553,15 +613,15 @@ msgstr ""
#: DB:link_type/description:56
msgid "Indicates the lyricist for this release."
-msgstr ""
+msgstr "Nurodo šio leidinio dainų žodžių autorių (-ę)."
#: DB:link_type/description:165
msgid "Indicates the lyricist for this work."
-msgstr ""
+msgstr "Nurodo šio kūrinio dainų žodžių autorių (-ę)."
#: DB:link_type/description:42
msgid "Indicates the mastering engineer for this work."
-msgstr ""
+msgstr "Nurodo šio kūrinio masteringo inžinierių (-ę)."
#: DB:link_type/description:219
msgid "Indicates the official homepage for a label."
@@ -594,7 +654,7 @@ msgstr ""
#: DB:link_type/description:716
msgid "Indicates the place where the work had its first performance"
-msgstr ""
+msgstr "Nurodo vietovę, kurioje kūrinys buvo pristatytas pirmą kartą"
#: DB:link_type/description:32
msgid ""
@@ -602,134 +662,162 @@ msgid ""
"same concept as the record label"
"a>."
msgstr ""
+"Nurodo šio leidinio leidėją. Tai nėrata pati sąvoka kaip įrašų leidykla."
#: DB:link_type/description:161
msgid ""
"Indicates the publisher of this work. This is not the same "
"concept as the record label."
msgstr ""
+"Nurodo šio kūrinio leidėją. Tai nėrata pati sąvoka kaip įrašų leidykla."
#: DB:link_type/description:208
msgid ""
"Indicates the publisher of this work. This is not the same "
"concept as the record label."
msgstr ""
+"Nurodo šio kūrinio leidėją. Tai nėrata pati sąvoka kaip įrašų leidykla."
#: DB:link_type/link_phrase:840 DB:link_type/link_phrase:837
#: DB:link_type/link_phrase:839 DB:link_type/link_phrase:838
msgid "Last.fm"
-msgstr ""
+msgstr "Last.fm"
#: DB:link_type/reverse_link_phrase:840 DB:link_type/reverse_link_phrase:837
#: DB:link_type/reverse_link_phrase:839 DB:link_type/reverse_link_phrase:838
msgid "Last.fm page for"
-msgstr ""
+msgstr "Last.fm puslapis, skirtas"
#: DB:link_attribute_type/description:4
msgid "Lead or solo vocal"
-msgstr ""
+msgstr "Pagrindinis arba solinis vokalas"
#: DB:link_type/description:864
msgid ""
"Links a recording to the area it was arranged in. Use only when the place is "
"unknown!"
msgstr ""
+"Sujungia įrašą su teritorija, kurioje jis buvo suvestas. Naudok tik tada, "
+"kai vieta nežinoma!"
#: DB:link_type/description:821
msgid ""
"Links a recording to the area it was edited in. Use only when the place is "
"unknown!"
msgstr ""
+"Sujungia įrašą su teritorija, kurioje jis buvo redaguotas. Naudok tik tada, "
+"kai vieta nežinoma!"
#: DB:link_type/description:814
msgid ""
"Links a recording to the area it was engineered in. Use only when the place "
"is unknown!"
msgstr ""
+"Sujungia įrašą su teritorija, kurioje jis buvo inžinieriškai sukurtas. "
+"Naudok tik tada, kai vieta nežinoma!"
#: DB:link_type/description:758
msgid ""
"Links a recording to the area it was mixed in. Use only when the place is "
"unknown!"
msgstr ""
+"Sujungia įrašą su teritorija, kurioje jis buvo sumiksuotas. Naudok tik tada, "
+"kai vieta nežinoma!"
#: DB:link_type/description:827
msgid ""
"Links a recording to the area it was produced in. Use only when the place is "
"unknown!"
msgstr ""
+"Sujungia įrašą su teritorija, kurioje jis buvo sukurtas. Naudok tik tada, "
+"kai vieta nežinoma!"
#: DB:link_type/description:698
msgid ""
"Links a recording to the area it was recorded in. Use only when the place is "
"unknown!"
msgstr ""
+"Sujungia įrašą su teritorija, kurioje jis buvo įrašytas. Naudok tik tada, "
+"kai vieta nežinoma!"
#: DB:link_type/description:830
msgid ""
"Links a recording to the area it was remixed in. Use only when the place is "
"unknown!"
msgstr ""
+"Sujungia įrašą su teritorija, kurioje jis buvo suremiksuotas. Naudok tik "
+"tada, kai vieta nežinoma!"
#: DB:link_type/description:809
msgid "Links a recording to the event it was recorded at."
-msgstr ""
+msgstr "Sujungia įrašą su renginiu, kurioje jis buvo įrašytas."
#: DB:link_type/description:1006
msgid ""
"Links a recording to the event series (tour, residency, etc.) it was "
"recorded during."
msgstr ""
+"Sujungia įrašą su renginių serija (turu, rezidencija ir t. t.), kurios metu "
+"jis buvo įrašytas."
#: DB:link_type/description:866
msgid "Links a recording to the place it was arranged at."
-msgstr ""
+msgstr "Sujungia įrašą su vieta, kurioje jis buvo suvestas."
#: DB:link_type/description:819
msgid "Links a recording to the place it was edited at."
-msgstr ""
+msgstr "Sujungia įrašą su vieta, kurioje jis buvo redaguotas."
#: DB:link_type/description:813
msgid "Links a recording to the place it was engineered at."
-msgstr ""
+msgstr "Sujungia įrašą su vieta, kurioje jis buvo inžinieriškai sukurtas."
#: DB:link_type/description:694
msgid "Links a recording to the place it was mixed at."
-msgstr ""
+msgstr "Sujungia įrašą su vieta, kurioje jis buvo sumiksuotas."
#: DB:link_type/description:825
msgid "Links a recording to the place it was produced at."
-msgstr ""
+msgstr "Sujungia įrašą su vieta, kurioje jis buvo sukurtas."
#: DB:link_type/description:693
msgid "Links a recording to the place it was recorded at."
-msgstr ""
+msgstr "Sujungia įrašą su vieta, kurioje jis buvo įrašytas."
#: DB:link_type/description:829
msgid "Links a recording to the place it was remixed at."
-msgstr ""
+msgstr "Sujungia įrašą su vieta, kurioje jis buvo suremiksuotas."
#: DB:link_type/description:1008
msgid ""
"Links a recording, release or release group series to the event series "
"(tour, residency, etc.) it was recorded during."
msgstr ""
+"Sujungia įrašo, leidinio ar leidinių grupės seriją su renginių serija (turu, "
+"rezidencija ir pan.), kurios metu jis buvo įrašytas."
#: DB:link_type/description:1007
msgid ""
"Links a release group to the event series (tour, residency, etc.) it was "
"recorded during."
msgstr ""
+"Sujungia leidinio grupę su renginių serija (turu, rezidencija ir t. t.), "
+"kurios metu jis buvo įrašytas."
#: DB:link_type/description:797
msgid "Links a release group with a launch event for it."
-msgstr ""
+msgstr "Sujungia leidinio grupę su jos išleidimo renginiu."
#: DB:link_type/description:863
msgid ""
"Links a release to the area it was arranged in. Use only when the place is "
"unknown!"
msgstr ""
+"Sujungia leidinį su teritorija, kurioje jis buvo suvestas. Naudok tik tada, "
+"kai vieta nežinoma!"
#: DB:link_type/description:822
msgid ""
@@ -796,18 +884,19 @@ msgstr ""
#: DB:link_type/description:969
msgid "Links a release to the engineer who did the lacquer cutting for it."
msgstr ""
+"Sujungia leidinį su inžinieriumi (-e), kuris (-i) atliko jo lako pjaustymą."
#: DB:link_type/description:810
msgid "Links a release to the event it was recorded at."
-msgstr ""
+msgstr "Sujungia leidinį su renginiu, kuriame jis buvo įrašytas."
#: DB:link_type/description:865
msgid "Links a release to the place it was arranged at."
-msgstr ""
+msgstr "Sujungia leidinį su vieta, kurioje jis buvo suvestas."
#: DB:link_type/description:820
msgid "Links a release to the place it was edited at."
-msgstr ""
+msgstr "Sujungia leidinį su vieta, kurioje jis buvo redaguotas."
#: DB:link_type/description:812
msgid "Links a release to the place it was engineered at."
@@ -872,7 +961,7 @@ msgstr ""
#: DB:link_type/description:823
msgid "Links a series to another series that exists within it."
-msgstr ""
+msgstr "Sujungia seriją su kita joje esančia serija."
#: DB:link_type/description:1094
msgid ""
@@ -953,64 +1042,68 @@ msgstr ""
#: DB:link_type/link_phrase:215 DB:link_type/link_phrase:462
#: DB:link_type/link_phrase:189
msgid "Myspace"
-msgstr ""
+msgstr "Myspace"
#: DB:link_type/reverse_link_phrase:215 DB:link_type/reverse_link_phrase:462
#: DB:link_type/reverse_link_phrase:189
msgid "Myspace page for"
-msgstr ""
+msgstr "Myspace puslapis, skirtas"
#: DB:link_attribute_type/description:461
msgid "Other vocalizations"
-msgstr ""
+msgstr "Kiti vokalizavimai"
#: DB:link_type/description:852
msgid "Points to the BookBrainz page for this artist."
-msgstr ""
+msgstr "Nukreipia į šio atlikėjo BookBrainz puslapį."
#: DB:link_type/description:851
msgid "Points to the BookBrainz page for this label."
-msgstr ""
+msgstr "Nukreipia į šios leidyklos BookBrainz puslapį."
#: DB:link_type/description:853
msgid "Points to the BookBrainz page for this release group."
-msgstr ""
+msgstr "Nukreipia į šios leidinio grupės BookBrainz puslapį."
#: DB:link_type/description:850
msgid "Points to the BookBrainz page for this release."
-msgstr ""
+msgstr "Nukreipia į šio leidinio BookBrainz puslapį."
#: DB:link_type/description:1167
msgid "Points to the BookBrainz page for this series."
-msgstr ""
+msgstr "Nukreipia į šios serijos BookBrainz puslapį."
#: DB:link_type/description:854
msgid "Points to the BookBrainz page for this work."
-msgstr ""
+msgstr "Nukreipia į šio kūrinio BookBrainz puslapį."
#: DB:link_type/description:713
msgid "Points to the Geonames page for this area."
-msgstr ""
+msgstr "Nukreipia į šios srities Geonames puslapį."
#: DB:link_type/description:934
msgid "Points to the Geonames page for this place."
-msgstr ""
+msgstr "Nukreipia į šios vietos Geonames puslapį."
#: DB:link_type/description:706
msgid "Points to the Internet Movie Database page for this place."
-msgstr ""
+msgstr "Nukreipia į Internet Movie Database puslapį šiai vietai."
#: DB:link_type/description:358
msgid ""
"Points to the Wikidata page for this area, and will be used to fetch "
"Wikipedia summaries"
msgstr ""
+"Nukreipia į šios srities Vikiduomenio puslapį, kuris bus naudojamas "
+"Vikipedijos santraukoms gauti"
#: DB:link_type/description:352
msgid ""
"Points to the Wikidata page for this artist, and will be used to fetch "
"Wikipedia summaries"
msgstr ""
+"Nukreipia į šio atlikėjo Vikiduomenio puslapį, kuris bus naudojamas "
+"Vikipedijos santraukoms gauti"
#: DB:link_type/description:790
msgid ""
@@ -1062,35 +1155,35 @@ msgstr ""
#: DB:link_type/description:89
msgid "Points to the Wikipedia page for this album."
-msgstr ""
+msgstr "Nukreipia į šio albumo Vikipedijos puslapį."
#: DB:link_type/description:355
msgid "Points to the Wikipedia page for this area."
-msgstr ""
+msgstr "Nukreipia į šios srities Vikipedijos puslapį."
#: DB:link_type/description:179
msgid "Points to the Wikipedia page for this artist."
-msgstr ""
+msgstr "Nukreipia į šio atlikėjo Vikipedijos puslapį."
#: DB:link_type/description:789
msgid "Points to the Wikipedia page for this event."
-msgstr ""
+msgstr "Nukreipia į šio renginio Vikipedijos puslapį."
#: DB:link_type/description:731
msgid "Points to the Wikipedia page for this instrument."
-msgstr ""
+msgstr "Nukreipia į šio instrumento Vikipedijos puslapį."
#: DB:link_type/description:595
msgid "Points to the Wikipedia page for this place"
-msgstr ""
+msgstr "Nukreipia į šios vietos Vikipedijos puslapį"
#: DB:link_type/description:744
msgid "Points to the Wikipedia page for this series."
-msgstr ""
+msgstr "Nukreipia į šios serijos Vikipedijos puslapį."
#: DB:link_type/description:279
msgid "Points to the Wikipedia page for this work."
-msgstr ""
+msgstr "Nukreipia į šio kūrinio Vikipedijos puslapį."
#: DB:link_type/description:127
msgid ""
@@ -1098,70 +1191,75 @@ msgid ""
"not the same concept as the record label."
msgstr ""
+"Vietoj to leidėjai turėtų būti pridėti prie kūrinių. Atmink, kad tai "
+"nėra ta pati sąvoka kaip įrašų leidykla."
#: DB:link_type/link_phrase:174
msgid "PureVolume"
-msgstr ""
+msgstr "PureVolume"
#: DB:link_type/reverse_link_phrase:174
msgid "PureVolume page for"
-msgstr ""
+msgstr "PureVolume puslapis, skirtas"
#: DB:link_type/link_phrase:308 DB:link_type/link_phrase:976
#: DB:link_type/link_phrase:977 DB:link_type/link_phrase:307
#: DB:link_type/reverse_link_phrase:280
msgid "SecondHandSongs"
-msgstr ""
+msgstr "SecondHandSongs"
#: DB:link_type/link_phrase:280 DB:link_type/reverse_link_phrase:308
#: DB:link_type/reverse_link_phrase:976 DB:link_type/reverse_link_phrase:977
#: DB:link_type/reverse_link_phrase:307
msgid "SecondHandSongs page for"
-msgstr ""
+msgstr "SecondHandSongs puslapis, skirtas"
#: DB:link_type/reverse_link_phrase:289
msgid "Songfacts"
-msgstr ""
+msgstr "Songfacts"
#: DB:link_type/link_phrase:289
msgid "Songfacts page for"
-msgstr ""
+msgstr "Songfacts puslapis, skirtas"
#: DB:link_type/link_phrase:786 DB:link_type/link_phrase:785
#: DB:link_type/link_phrase:787
msgid "Songkick"
-msgstr ""
+msgstr "Songkick"
#: DB:link_type/reverse_link_phrase:786 DB:link_type/reverse_link_phrase:785
#: DB:link_type/reverse_link_phrase:787
msgid "Songkick page for"
-msgstr ""
+msgstr "Songkick puslapis, skirtas"
#: DB:link_type/link_phrase:870 DB:link_type/link_phrase:291
#: DB:link_type/link_phrase:290 DB:link_type/link_phrase:940
msgid "SoundCloud"
-msgstr ""
+msgstr "SoundCloud"
#: DB:link_type/reverse_link_phrase:870 DB:link_type/reverse_link_phrase:291
#: DB:link_type/reverse_link_phrase:290 DB:link_type/reverse_link_phrase:940
msgid "SoundCloud page for"
-msgstr ""
+msgstr "SoundCloud puslapis, skirtas"
#: DB:link_attribute_type/description:1135
msgid ""
"Specifies the level of studies that a student studied towards in an "
"educational institution."
-msgstr ""
+msgstr "Nurodo studijų lygį, kurį studentas (-ė) studijavo švietimo įstaigoje."
#: DB:link_attribute_type/description:1125
msgid ""
"Specifies the subject that was taught by a teacher in an institution and/or "
"to a student."
msgstr ""
+"Nurodo objektą, kurį mokytojas (-a) dėstė institucijoje ir (arba) mokiniui "
+"(-ei)."
#: DB:link_attribute_type/description:561
msgid "Spoken vocals (speech)"
-msgstr ""
+msgstr "Sakytys vokalai (kalba)"
#: DB:link_type/long_link_phrase:880
msgid ""
@@ -1197,23 +1295,27 @@ msgstr ""
#: DB:link_type/description:933
msgid "This allows linking a series to the label who publishes it."
-msgstr ""
+msgstr "Tai leidžia sujungti seriją su leidėją, kuris ją išleidžia."
#: DB:link_attribute_type/description:3
msgid "This attribute describes a type of vocal performance."
-msgstr ""
+msgstr "Šis požymis apibūdina vokalinio atlikimo tipą."
#: DB:link_attribute_type/description:2
msgid ""
"This attribute describes if a particular collaboration was considered equal "
"or minor."
msgstr ""
+"Šis požymis apibūdina, ar konkretus bendradarbiavimas buvo laikomas "
+"lygiaverčiu, ar antraeiliu."
#: DB:link_attribute_type/description:1
msgid ""
"This attribute describes if a particular role was considered normal or "
"additional."
msgstr ""
+"Šis požymis apibūdina, ar tam tikras vaidmuo buvo laikomas įprastu, ar "
+"papildomu."
#: DB:link_attribute_type/description:14
msgid ""
@@ -1223,30 +1325,42 @@ msgid ""
"Can't find an instrument? Request it!"
msgstr ""
+"Šis požymis apibūdina galimus instrumentus, kuriuos galima užfiksuoti kaip "
+"atlikimo dalį.\n"
+"
\n"
+"Negali rasti instrumento? Paprašyk jo!"
#: DB:link_attribute_type/description:194
msgid ""
"This attribute indicates a 'guest' performance where the performer is not "
"usually part of the band."
msgstr ""
+"Šis požymis nurodo „kviestinį“ pasirodymą, kai muzikantas (-ė) paprastai "
+"nėra grupės narys (-ė)."
#: DB:link_attribute_type/description:1094
msgid ""
"This attribute indicates a member the band is named after and without which "
"it wouldn't exist (e.g. Miles Davis -> Miles Davis Sextet)"
msgstr ""
+"Šis požymis nurodo narį, kurio vardu pavadinta grupė ir be kurio ji "
+"neegzistuotų (pvz., Miles Davis -> Miles Davis Sextet)"
#: DB:link_attribute_type/description:511
msgid ""
"This attribute indicates a version with satirical, ironic, or otherwise "
"humorous intent. Parodies in most cases have altered lyrics."
msgstr ""
+"Šis požymis nurodo satyrinę, ironišką ar kitaip humoristinę versiją. "
+"Parodijų dainų žodžiai dažniausiai būna pakeisti."
#: DB:link_attribute_type/description:517
msgid ""
"This attribute indicates a version with the lyrics in a different language "
"than the original."
msgstr ""
+"Šis požymis nurodo versiją su dainų žodžiais kita kalba nei originalo kalba."
#: DB:link_attribute_type/description:525
msgid ""
@@ -1335,12 +1449,21 @@ msgid ""
"into The Verve Music "
"Group, as Verve continued its existence thereafter as an imprint."
msgstr ""
+"Tai apibūdina situaciją, kai leidykla pakeitė savo pavadinimą dėl estetinių "
+"priežasčių arba po išpirkimo, pardavimo, atskyrimo. Reikėtų būti ypač "
+"atsargiems tais atvejais, kai atliekamos sudėtingos susijungimo, padalijimo "
+"ar pertvarkymo finansinės operacijos. Pavyzdžiui, nėra gera idėja pervadinti "
+"leidyklą „Verve“ "
+"į „The Verve Music "
+"Group“, nes vėliau „Verve“ toliau gyvavo kaip atspaudas."
#: DB:link_type/description:1079
msgid ""
"This describes a situation where an artist (generally a group) changed its "
"name, leading to the start of a new project."
msgstr ""
+"Tai apibūdina situaciją, kai atlikėjas (-a) (paprastai grupė) pakeitė "
+"pavadinimą ir pradėta naują projektą."
#: DB:link_type/description:200
msgid ""
@@ -1350,12 +1473,18 @@ msgid ""
"corporate acquisition of the former label, has become a subdivision of "
"another one."
msgstr ""
+"Tai apibūdina situaciją, kai viena leidykla tam tikru laikotarpiu yra (arba "
+"buvo) kitos leidyklos dukterinė bendrovė. Šis turėtų būti naudojamas "
+"apibūdinti faktą, kad leidykla yra kitos leidyklos padalinys arba, įmonei "
+"įsigijus ankstesnę leidyklą, tapo kitos leidyklos padaliniu."
#: DB:link_type/description:203
msgid ""
"This describes a situation where one label is distributing (part of) another "
"label's catalog, in a country/region of the world, during a period of time."
msgstr ""
+"Tai apibūdina situaciją, kai viena leidykla tam tikrą laikotarpį platina "
+"kitos leidyklos katalogą (jo dalį) tam tikroje pasaulio šalyje arba regione."
#: DB:link_type/description:201
msgid ""
@@ -1369,6 +1498,15 @@ msgid ""
"A bootleg label reissues another label's catalog.\n"
""
msgstr ""
+"Tai apibūdina situaciją, kai viena leidykla savo vardu perleidžia kitos "
+"leidyklos katalogo (dalį). Taip gali atsitikti bent trimis atvejais:\n"
+"\n"
+"- Leidykla tam tikram laikotarpiui įsigyja kitos leidyklos katalogo nuomą "
+"tam tikrame pasaulio regione.
\n"
+"- Leidykla nusiperka teises į nebeegzistuojančios leidyklos katalogą arba "
+"nusiperka leidyklą (su jos katalogu) ir ją išardo.
\n"
+"- Nelegali leidykla perleidžia kitos leidyklos katalogą.
\n"
+"
"
#: DB:link_type/description:140 DB:link_type/description:31
msgid ""
@@ -1427,10 +1565,11 @@ msgstr ""
#: DB:link_type/description:28 DB:link_type/description:138
msgid "This describes an engineer who performed a general engineering role."
msgstr ""
+"Tai apibūdina inžinierių (-ę), atliekantį bendrąsias inžinerines užduotis."
#: DB:link_type/description:103
msgid "This indicates a person is a member of a group."
-msgstr ""
+msgstr "Tai nurodo, kad asmuo yra grupės narys (-ė)."
#: DB:link_type/description:135 DB:link_type/description:62
msgid ""
@@ -1465,30 +1604,37 @@ msgid ""
"publishing label is a small label (usually a subdivision of a larger one) "
"that exclusively handles the rights to works by that artist."
msgstr ""
+"Tai nurodo asmeninę atlikėjo leidėjo leidyklą. Asmeninė leidėjos leidykla – "
+"tai nedidelė leidykla (paprastai didesnės leidyklos padalinys), kuri "
+"išimtinai rūpinasi tik to atlikėjo kūrinių teisėmis."
#: DB:link_type/description:1011
msgid ""
"This indicates a recording engineer that recorded field recordings for the "
"recording."
msgstr ""
+"Tai nurodo įrašo inžinierių (-ę), kuris (-i) įrašinėjo lauko įrašus šiam "
+"įrašui."
#: DB:link_type/description:1012
msgid ""
"This indicates a recording engineer that recorded field recordings for the "
"release."
msgstr ""
+"Tai nurodo įrašo inžinierių (-ę), kuris (-i) įrašinėjo lauko įrašus "
+"leidiniui."
#: DB:link_type/description:1174
msgid "This indicates an agency that did the art direction for the release."
-msgstr ""
+msgstr "Tai nurodo agentūrą, kuri kūrė leidinio meno vadovą."
#: DB:link_type/description:1171
msgid "This indicates an agency who did design for the release."
-msgstr ""
+msgstr "Tai nurodo agentūrą, kuri kūrė leidinio dizainą."
#: DB:link_type/description:1173
msgid "This indicates an agency who did illustration for the release."
-msgstr ""
+msgstr "Tai nurodo agentūrą, kuri atliko leidinio iliustraciją."
#: DB:link_type/description:1172
msgid ""
@@ -1516,17 +1662,19 @@ msgstr ""
#: DB:link_attribute_type/description:921
msgid "This indicates an artist cancelled their appearance at an event."
-msgstr ""
+msgstr "Tai nurodo, kad atlikėjas (-a) atšaukė savo pasirodymą renginyje."
#: DB:link_type/description:917
msgid ""
"This indicates an artist reconstructed a work (usually one where the score "
"was lost) to make it ready for performance."
msgstr ""
+"Tai nurodo, kad atlikėjas (-a) rekonstravo kūrinį (paprastai tokį, kurio "
+"partitūra buvo prarasta), kad paruoštų jį atlikimui."
#: DB:link_type/description:18
msgid "This indicates an artist that did the art direction for the release."
-msgstr ""
+msgstr "Tai nurodo atlikėją, kuris (-i) kūrė leidinio meno vadovą."
#: DB:link_type/description:151
msgid ""
@@ -1612,7 +1760,7 @@ msgstr ""
msgid ""
"This indicates that a person or agency did the art direction for the "
"recording."
-msgstr ""
+msgstr "Tai nurodo, kad įrašo meno vadovavimą kūrė asmuo arba agentūra."
#: DB:link_type/description:142
msgid ""
@@ -3886,7 +4034,7 @@ msgstr ""
#: DB:link_type/name:137 DB:link_type/name:1174 DB:link_type/name:18
msgid "art direction"
-msgstr ""
+msgstr "meno vadovavimas"
#: DB:link_type/link_phrase:1192
msgid "art galleries"
@@ -4655,65 +4803,65 @@ msgstr ""
#: DB:link_type/name:1011 DB:link_type/name:1012
msgid "field recordist"
-msgstr ""
+msgstr "lauko įrašinėtojas (-a)"
#: DB:link_type/link_phrase:1011 DB:link_type/link_phrase:1012
msgid "field recordist for"
-msgstr ""
+msgstr "lauko įrašinėtojas (-a)"
#: DB:link_type/name:238
msgid "first track release"
-msgstr ""
+msgstr "pirmojo takelio išleidimas"
#: DB:link_attribute_type/name:1133
msgid "folk music"
-msgstr ""
+msgstr "liaudies muzika"
#: DB:link_type/link_phrase:832 DB:link_type/link_phrase:116
#: DB:link_type/link_phrase:895 DB:link_type/link_phrase:1004
#: DB:link_type/long_link_phrase:832 DB:link_type/long_link_phrase:116
#: DB:link_type/long_link_phrase:895 DB:link_type/long_link_phrase:1004
msgid "founded"
-msgstr ""
+msgstr "įkurta"
#: DB:link_type/reverse_link_phrase:895
msgid "founded by"
-msgstr ""
+msgstr "įkūrė"
#: DB:link_type/name:832 DB:link_type/name:895 DB:link_type/name:1004
msgid "founder"
-msgstr ""
+msgstr "įkūrėjas (-a)"
#: DB:link_type/reverse_link_phrase:832 DB:link_type/reverse_link_phrase:116
#: DB:link_type/reverse_link_phrase:1004
msgid "founders"
-msgstr ""
+msgstr "įkūrėjai"
#: DB:link_type/reverse_link_phrase:958 DB:link_type/reverse_link_phrase:75
#: DB:link_type/reverse_link_phrase:177 DB:link_type/reverse_link_phrase:255
msgid "free download page for"
-msgstr ""
+msgstr "nemokamas atsisiuntimo puslapis"
#: DB:link_type/link_phrase:274
msgid "free download page for the score of"
-msgstr ""
+msgstr "nemokamas atsisiuntimo partitūros puslapis"
#: DB:link_type/reverse_link_phrase:997 DB:link_type/reverse_link_phrase:194
msgid "free music streaming page for"
-msgstr ""
+msgstr "nemokamas muzikos srautinės transliacijos puslapis"
#: DB:link_type/reverse_link_phrase:85 DB:link_type/reverse_link_phrase:268
msgid "free music {video} streaming page for"
-msgstr ""
+msgstr "nemokamas muzikos {video} srautinės transliacijos puslapis"
#: DB:link_type/name:997 DB:link_type/name:85 DB:link_type/name:268
#: DB:link_type/name:194
msgid "free streaming"
-msgstr ""
+msgstr "nemokamas srautinis transliavimas"
#: DB:link_type/reverse_link_phrase:1088 DB:link_type/reverse_link_phrase:752
msgid "from"
-msgstr ""
+msgstr "iš"
#: DB:link_type/link_phrase:1096 DB:link_type/name:1096
msgid "fusion of"
@@ -4721,15 +4869,15 @@ msgstr ""
#: DB:link_type/name:1088
msgid "genre origin"
-msgstr ""
+msgstr "žanro kilmė"
#: DB:link_type/link_phrase:1088
msgid "genres"
-msgstr ""
+msgstr "žanrai"
#: DB:link_type/name:934 DB:link_type/name:713
msgid "geonames"
-msgstr ""
+msgstr "geonames"
#: DB:link_type/link_phrase:957 DB:link_type/link_phrase:257
#: DB:link_type/link_phrase:73 DB:link_type/link_phrase:1091
@@ -4741,12 +4889,12 @@ msgstr ""
#: DB:link_type/long_link_phrase:257 DB:link_type/long_link_phrase:73
#: DB:link_type/long_link_phrase:1091 DB:link_type/long_link_phrase:187
msgid "get the music"
-msgstr ""
+msgstr "gauti muziką"
#: DB:link_type/link_phrase:911 DB:link_type/name:911
#: DB:link_type/reverse_link_phrase:911 DB:link_type/long_link_phrase:911
msgid "get the score"
-msgstr ""
+msgstr "gauti partitūrą"
#: DB:link_type/link_phrase:955 DB:link_type/name:955
#: DB:link_type/long_link_phrase:955
@@ -4759,19 +4907,19 @@ msgstr ""
#: DB:link_type/reverse_link_phrase:955
msgid "glass mastered by"
-msgstr ""
+msgstr "stiklo meistravimas padarė"
#: DB:link_type/link_phrase:954
msgid "glass mastering location for"
-msgstr ""
+msgstr "stiklo meistravimo vieta"
#: DB:link_type/name:1172 DB:link_type/name:125 DB:link_type/name:27
msgid "graphic design"
-msgstr ""
+msgstr "grafinis dizainas"
#: DB:link_attribute_type/name:194
msgid "guest"
-msgstr ""
+msgstr "svečias"
#: DB:link_type/name:800
msgid "guest performer"
@@ -4823,16 +4971,16 @@ msgstr ""
#: DB:link_type/long_link_phrase:77
msgid "has Amazon ASIN"
-msgstr ""
+msgstr "turi Amazon ASIN"
#: DB:link_type/long_link_phrase:1131 DB:link_type/long_link_phrase:1130
msgid "has Apple Music page at"
-msgstr ""
+msgstr "turi Apple Music puslapį"
#: DB:link_type/long_link_phrase:1092 DB:link_type/long_link_phrase:718
#: DB:link_type/long_link_phrase:719
msgid "has Bandcamp page at"
-msgstr ""
+msgstr "turi Bandcamp puslapis"
#: DB:link_type/long_link_phrase:919
msgid "has CD Baby page at"
@@ -4904,13 +5052,13 @@ msgstr ""
#: DB:link_type/long_link_phrase:870 DB:link_type/long_link_phrase:291
#: DB:link_type/long_link_phrase:290 DB:link_type/long_link_phrase:940
msgid "has a SoundCloud page at"
-msgstr ""
+msgstr "turi SoundCloud puslapį"
#: DB:link_type/long_link_phrase:86 DB:link_type/long_link_phrase:191
#: DB:link_type/long_link_phrase:210 DB:link_type/long_link_phrase:788
#: DB:link_type/long_link_phrase:1013
msgid "has a VGMdb page at"
-msgstr ""
+msgstr "turi VGMdb puslapį"
#: DB:link_type/long_link_phrase:1087 DB:link_type/long_link_phrase:353
#: DB:link_type/long_link_phrase:749 DB:link_type/long_link_phrase:594
@@ -4991,7 +5139,7 @@ msgstr ""
#: DB:link_type/long_link_phrase:173 DB:link_type/long_link_phrase:396
#: DB:link_type/long_link_phrase:732
msgid "has a picture at"
-msgstr ""
+msgstr "turi nuotrauką"
#: DB:link_type/long_link_phrase:842 DB:link_type/long_link_phrase:94
msgid "has a review page at"
@@ -5085,15 +5233,15 @@ msgstr ""
#: DB:link_type/long_link_phrase:735
msgid "has child"
-msgstr ""
+msgstr "turi vaiką"
#: DB:link_type/long_link_phrase:78
msgid "has cover art at"
-msgstr ""
+msgstr "turi viršelį"
#: DB:link_type/long_link_phrase:737
msgid "has derived instrument"
-msgstr ""
+msgstr "išvedė instrumentą"
#: DB:link_type/reverse_link_phrase:1096
msgid "has fusion genres"
@@ -5105,7 +5253,7 @@ msgstr ""
#: DB:link_type/long_link_phrase:725
msgid "has imprint"
-msgstr ""
+msgstr "turi įspaudą"
#: DB:link_type/long_link_phrase:1097
msgid "has influences of"
@@ -5166,7 +5314,7 @@ msgstr ""
#: DB:link_type/long_link_phrase:1095
msgid "has subgenre"
-msgstr ""
+msgstr "turi subžanrą"
#: DB:link_type/long_link_phrase:823
msgid "has subseries"
@@ -5213,14 +5361,14 @@ msgstr ""
#: DB:link_type/link_phrase:708 DB:link_type/link_phrase:709
#: DB:link_type/long_link_phrase:708 DB:link_type/long_link_phrase:709
msgid "holds copyright (©) for"
-msgstr ""
+msgstr "turi autorines teises (©)"
#: DB:link_type/link_phrase:867 DB:link_type/link_phrase:711
#: DB:link_type/link_phrase:710 DB:link_type/link_phrase:869
#: DB:link_type/long_link_phrase:867 DB:link_type/long_link_phrase:711
#: DB:link_type/long_link_phrase:710 DB:link_type/long_link_phrase:869
msgid "holds phonographic copyright (℗) for"
-msgstr ""
+msgstr "turi fonografijos autorių teises (℗)"
#: DB:link_type/name:801
msgid "host"
@@ -5249,7 +5397,7 @@ msgstr ""
#: DB:link_type/name:725
msgid "imprint"
-msgstr ""
+msgstr "įspaudas"
#: DB:link_type/reverse_link_phrase:725
msgid "imprint of"
@@ -5257,15 +5405,15 @@ msgstr ""
#: DB:link_type/link_phrase:725
msgid "imprints"
-msgstr ""
+msgstr "įspaudai"
#: DB:link_attribute_type/name:1134
msgid "improvisation"
-msgstr ""
+msgstr "improvizacija"
#: DB:link_type/link_phrase:894 DB:link_type/name:894
msgid "included in"
-msgstr ""
+msgstr "įtraukta į"
#: DB:link_type/reverse_link_phrase:894
msgid "includes"
@@ -5334,7 +5482,7 @@ msgstr ""
#: DB:link_type/link_phrase:896 DB:link_type/name:896 DB:link_type/name:918
#: DB:link_type/reverse_link_phrase:918 DB:link_type/long_link_phrase:896
msgid "invented"
-msgstr ""
+msgstr "išrado"
#: DB:link_type/link_phrase:918 DB:link_type/reverse_link_phrase:896
msgid "invented by"
@@ -5392,11 +5540,11 @@ msgstr ""
#: DB:link_type/long_link_phrase:11
msgid "is a single/EP which was taken from"
-msgstr ""
+msgstr "yra singlas/mini albumas, kuris buvo paimtas iš"
#: DB:link_type/long_link_phrase:728
msgid "is a tribute to"
-msgstr ""
+msgstr "yra padėka"
#: DB:link_type/long_link_phrase:278
msgid ""
@@ -5451,7 +5599,7 @@ msgstr ""
#: DB:link_type/long_link_phrase:238
msgid "is the earliest release of"
-msgstr ""
+msgstr "yra anksčiausias leidinys"
#: DB:link_type/long_link_phrase:241
msgid "is the earliest version of {translated} {parody}"
@@ -5513,39 +5661,39 @@ msgstr ""
#: DB:link_attribute_type/name:1132
msgid "jazz"
-msgstr ""
+msgstr "džiazas"
#: DB:link_attribute_type/name:1261 DB:link_type/name:226
msgid "karaoke"
-msgstr ""
+msgstr "karaokė"
#: DB:link_type/reverse_link_phrase:226
msgid "karaoke version of"
-msgstr ""
+msgstr "karaokės versija"
#: DB:link_type/link_phrase:226
msgid "karaoke versions"
-msgstr ""
+msgstr "karaokė versijos"
#: DB:link_type/name:203
msgid "label distribution"
-msgstr ""
+msgstr "leidyklos platinimas"
#: DB:link_type/name:116
msgid "label founder"
-msgstr ""
+msgstr "leidyklos įkūrėjas"
#: DB:link_type/name:200
msgid "label ownership"
-msgstr ""
+msgstr "leidyklos nuosavybė"
#: DB:link_type/name:201
msgid "label reissue"
-msgstr ""
+msgstr "leidyklos pakartotinis leidimas"
#: DB:link_type/name:202
msgid "label rename"
-msgstr ""
+msgstr "leidyklos pervadinimas"
#: DB:link_type/link_phrase:969 DB:link_type/name:969
#: DB:link_type/reverse_link_phrase:969
@@ -5567,15 +5715,15 @@ msgstr ""
#: DB:link_type/name:840 DB:link_type/name:837 DB:link_type/name:839
#: DB:link_type/name:838
msgid "last.fm"
-msgstr ""
+msgstr "last.fm"
#: DB:link_type/link_phrase:238
msgid "later releases"
-msgstr ""
+msgstr "vėlesni leidiniai"
#: DB:link_type/link_phrase:241
msgid "later {translated} {parody} versions"
-msgstr ""
+msgstr "vėlesnės {translated} {parody} versijos"
#: DB:link_type/name:796 DB:link_type/name:797
msgid "launch event"
@@ -5636,15 +5784,15 @@ msgstr ""
#: DB:link_type/link_phrase:712 DB:link_type/link_phrase:1010
#: DB:link_type/long_link_phrase:712 DB:link_type/long_link_phrase:1010
msgid "licensed"
-msgstr ""
+msgstr "licencijuota"
#: DB:link_type/reverse_link_phrase:712 DB:link_type/reverse_link_phrase:1010
msgid "licensed from"
-msgstr ""
+msgstr "licencijuota iš"
#: DB:link_type/reverse_link_phrase:833
msgid "licensed to"
-msgstr ""
+msgstr "licencijuota į"
#: DB:link_type/name:833
msgid "licensee"
@@ -5656,19 +5804,19 @@ msgstr ""
#: DB:link_type/name:712 DB:link_type/name:1010
msgid "licensor"
-msgstr ""
+msgstr "licencijos davėjas"
#: DB:link_type/name:24
msgid "liner notes"
-msgstr ""
+msgstr "linijinės užrašai"
#: DB:link_attribute_type/name:578
msgid "live"
-msgstr ""
+msgstr "gyvai"
#: DB:link_type/name:17
msgid "live performance"
-msgstr ""
+msgstr "gyvas pasirodymas"
#: DB:link_type/link_phrase:17
msgid "live performance of"
@@ -5676,15 +5824,15 @@ msgstr ""
#: DB:link_type/reverse_link_phrase:17
msgid "live performances"
-msgstr ""
+msgstr "gyvi pasirodymai"
#: DB:link_type/link_phrase:995 DB:link_type/link_phrase:1085
msgid "location for"
-msgstr ""
+msgstr "vieta"
#: DB:link_type/name:213
msgid "logo"
-msgstr ""
+msgstr "logotipas"
#: DB:link_type/reverse_link_phrase:213
msgid "logo of"
@@ -5700,17 +5848,17 @@ msgstr ""
#: DB:link_type/name:56 DB:link_type/name:165
msgid "lyricist"
-msgstr ""
+msgstr "dainų tekstų autorius (-ė)"
#: DB:link_type/name:93 DB:link_type/name:271 DB:link_type/name:197
#: DB:link_type/name:982
msgid "lyrics"
-msgstr ""
+msgstr "dainų tekstai"
#: DB:link_type/link_phrase:93 DB:link_type/link_phrase:197
#: DB:link_type/link_phrase:982 DB:link_type/reverse_link_phrase:271
msgid "lyrics page"
-msgstr ""
+msgstr "dainų tekstų puslapis"
#: DB:link_type/link_phrase:271 DB:link_type/reverse_link_phrase:93
#: DB:link_type/reverse_link_phrase:197 DB:link_type/reverse_link_phrase:982
@@ -5753,27 +5901,27 @@ msgstr ""
#: DB:link_type/link_phrase:360 DB:link_type/name:360
#: DB:link_type/long_link_phrase:360
msgid "manufactured"
-msgstr ""
+msgstr "pagamintas"
#: DB:link_type/name:953 DB:link_type/reverse_link_phrase:953
msgid "manufactured at"
-msgstr ""
+msgstr "pagaminta"
#: DB:link_type/reverse_link_phrase:360
msgid "manufactured by"
-msgstr ""
+msgstr "pagamino"
#: DB:link_type/name:952 DB:link_type/reverse_link_phrase:952
msgid "manufactured for"
-msgstr ""
+msgstr "pagaminta"
#: DB:link_type/name:835 DB:link_type/reverse_link_phrase:835
msgid "manufactured in"
-msgstr ""
+msgstr "pagamintas"
#: DB:link_type/link_phrase:835 DB:link_type/link_phrase:953
msgid "manufacturing location for"
-msgstr ""
+msgstr "gamybos vieta"
#: DB:link_type/link_phrase:848 DB:link_type/name:848
#: DB:link_type/long_link_phrase:848
@@ -5815,11 +5963,11 @@ msgstr ""
#: DB:link_type/name:136 DB:link_type/name:42
msgid "mastering"
-msgstr ""
+msgstr "masteringas"
#: DB:link_type/name:704
msgid "mastering engineer position"
-msgstr ""
+msgstr "masteringo inžinieriaus (-ės) pozicija"
#: DB:link_type/link_phrase:704
msgid "mastering engineer position at"
@@ -5843,39 +5991,39 @@ msgstr ""
#: DB:link_attribute_type/name:570
msgid "medium 1"
-msgstr ""
+msgstr "laikmena 1"
#: DB:link_attribute_type/name:569
msgid "medium 2"
-msgstr ""
+msgstr "laikmena 2"
#: DB:link_attribute_type/name:571
msgid "medium 3"
-msgstr ""
+msgstr "laikmena 3"
#: DB:link_attribute_type/name:577
msgid "medium 4"
-msgstr ""
+msgstr "laikmena 4"
#: DB:link_attribute_type/name:576
msgid "medium 5"
-msgstr ""
+msgstr "laikmena 5"
#: DB:link_attribute_type/name:575
msgid "medium 6"
-msgstr ""
+msgstr "laikmena 6"
#: DB:link_attribute_type/name:574
msgid "medium 7"
-msgstr ""
+msgstr "laikmena 7"
#: DB:link_attribute_type/name:573
msgid "medium 8"
-msgstr ""
+msgstr "laikmena 8"
#: DB:link_attribute_type/name:572
msgid "medium 9"
-msgstr ""
+msgstr "laikmena 9"
#: DB:link_attribute_type/name:750 DB:link_type/name:239
msgid "medley"
@@ -5906,62 +6054,62 @@ msgstr ""
#: DB:link_type/link_phrase:25 DB:link_type/link_phrase:998
#: DB:link_type/link_phrase:999
msgid "miscellaneous roles"
-msgstr ""
+msgstr "įvairūs vaidmenys"
#: DB:link_type/reverse_link_phrase:162 DB:link_type/reverse_link_phrase:129
#: DB:link_type/reverse_link_phrase:25 DB:link_type/reverse_link_phrase:998
#: DB:link_type/reverse_link_phrase:999
msgid "miscellaneous support"
-msgstr ""
+msgstr "įvairi pagalba"
#: DB:link_type/name:26 DB:link_type/name:143
msgid "mix"
-msgstr ""
+msgstr "miksas"
#: DB:link_type/name:43 DB:link_type/name:155
msgid "mix-DJ"
-msgstr ""
+msgstr "miksas DJ"
#: DB:link_type/name:694 DB:link_type/name:696
msgid "mixed at"
-msgstr ""
+msgstr "sumiksuotas"
#: DB:link_type/name:946 DB:link_type/name:947
#: DB:link_type/reverse_link_phrase:946 DB:link_type/reverse_link_phrase:947
msgid "mixed for"
-msgstr ""
+msgstr "sumiksuota"
#: DB:link_type/name:757 DB:link_type/name:758
msgid "mixed in"
-msgstr ""
+msgstr "sumiksuoti"
#: DB:link_type/name:703
msgid "mixing engineer position"
-msgstr ""
+msgstr "miksavimo inžinieriaus (-ės) pozicija"
#: DB:link_type/link_phrase:703
msgid "mixing engineer position at"
-msgstr ""
+msgstr "miksavimo inžinieriaus (-ės) pozicija"
#: DB:link_type/reverse_link_phrase:703
msgid "mixing engineers"
-msgstr ""
+msgstr "miksavimo inžinieriai"
#: DB:link_attribute_type/name:1031
msgid "movement"
-msgstr ""
+msgstr "judėjimas"
#: DB:link_type/long_link_phrase:958 DB:link_type/long_link_phrase:177
msgid "music can be downloaded for free at"
-msgstr ""
+msgstr "muziką galima nemokamai atsisiųsti iš"
#: DB:link_type/long_link_phrase:959 DB:link_type/long_link_phrase:176
msgid "music can be purchased for download at"
-msgstr ""
+msgstr "muziką galima nusipirkti atsisiuntimui iš"
#: DB:link_type/long_link_phrase:960 DB:link_type/long_link_phrase:175
msgid "music can be purchased for mail-order at"
-msgstr ""
+msgstr "muziką galima nusipirkti užsakant paštu iš"
#: DB:link_type/long_link_phrase:997 DB:link_type/long_link_phrase:194
msgid "music can be streamed for free at"
@@ -5985,97 +6133,97 @@ msgstr ""
#: DB:link_attribute_type/name:1222
msgid "music theory"
-msgstr ""
+msgstr "muzikos teorija"
#: DB:link_attribute_type/name:1203
msgid "music therapy"
-msgstr ""
+msgstr "muzikos terapija"
#: DB:link_type/name:857
msgid "music video"
-msgstr ""
+msgstr "muzikinis vaizdo įrašas"
#: DB:link_type/reverse_link_phrase:857
msgid "music video for"
-msgstr ""
+msgstr "muzikinis vaizdo įrašas, skirtas"
#: DB:link_type/link_phrase:857
msgid "music videos"
-msgstr ""
+msgstr "muzikiniai vaizdo įrašai"
#: DB:link_type/name:1046
msgid "musical quotation"
-msgstr ""
+msgstr "muzikinė citata"
#: DB:link_type/link_phrase:106 DB:link_type/reverse_link_phrase:106
#: DB:link_type/long_link_phrase:106
msgid "musical relationship"
-msgstr ""
+msgstr "muzikinis santykis"
#: DB:link_type/name:106
msgid "musical relationships"
-msgstr ""
+msgstr "muzikiniai santykiai"
#: DB:link_attribute_type/name:1221
msgid "musical theatre"
-msgstr ""
+msgstr "muzikinis teatras"
#: DB:link_attribute_type/name:1141
msgid "musicology"
-msgstr ""
+msgstr "muzikologija"
#: DB:link_type/name:215 DB:link_type/name:462 DB:link_type/name:189
msgid "myspace"
-msgstr ""
+msgstr "myspace"
#: DB:link_type/link_phrase:973 DB:link_type/link_phrase:972
#: DB:link_type/link_phrase:974 DB:link_type/name:973 DB:link_type/name:972
#: DB:link_type/name:975 DB:link_type/name:974 DB:link_type/name:1000
#: DB:link_type/reverse_link_phrase:975 DB:link_type/reverse_link_phrase:1000
msgid "named after"
-msgstr ""
+msgstr "pavadintas pagal"
#: DB:link_type/link_phrase:935 DB:link_type/name:935
#: DB:link_type/reverse_link_phrase:935 DB:link_type/long_link_phrase:935
msgid "non-performing relationships"
-msgstr ""
+msgstr "neatliekančios santykiai"
#: DB:link_attribute_type/name:788 DB:link_attribute_type/name:1032
msgid "number"
-msgstr ""
+msgstr "numeris"
#: DB:link_type/name:745 DB:link_type/name:782 DB:link_type/name:183
#: DB:link_type/name:363 DB:link_type/name:287
msgid "official homepage"
-msgstr ""
+msgstr "oficialus pagrindinis puslapis"
#: DB:link_type/reverse_link_phrase:745 DB:link_type/reverse_link_phrase:782
#: DB:link_type/reverse_link_phrase:183 DB:link_type/reverse_link_phrase:219
#: DB:link_type/reverse_link_phrase:363
msgid "official homepage for"
-msgstr ""
+msgstr "oficialus pagrindinis puslapis, skirtas"
#: DB:link_type/link_phrase:745 DB:link_type/link_phrase:782
#: DB:link_type/link_phrase:183 DB:link_type/link_phrase:219
#: DB:link_type/link_phrase:363
msgid "official homepages"
-msgstr ""
+msgstr "oficialūs pagrindiniai puslapiai"
#: DB:link_type/name:219
msgid "official site"
-msgstr ""
+msgstr "oficiali svetainė"
#: DB:link_type/link_phrase:185
msgid "online communities"
-msgstr ""
+msgstr "interneto bendruomenės"
#: DB:link_type/name:185
msgid "online community"
-msgstr ""
+msgstr "internetinė bendruomenė"
#: DB:link_type/reverse_link_phrase:185
msgid "online community page for"
-msgstr ""
+msgstr "internetinis bendruomenės puslapis, skirtas"
#: DB:link_type/link_phrase:841 DB:link_type/link_phrase:221
#: DB:link_type/link_phrase:660 DB:link_type/name:841 DB:link_type/name:221
@@ -6084,19 +6232,19 @@ msgstr ""
#: DB:link_type/long_link_phrase:841 DB:link_type/long_link_phrase:221
#: DB:link_type/long_link_phrase:660
msgid "online data"
-msgstr ""
+msgstr "internetiniai duomenys"
#: DB:link_attribute_type/name:1220
msgid "opera"
-msgstr ""
+msgstr "opera"
#: DB:link_attribute_type/name:1053
msgid "optional"
-msgstr ""
+msgstr "pasirinktinai"
#: DB:link_type/name:807
msgid "orchestra"
-msgstr ""
+msgstr "orkestras"
#: DB:link_type/link_phrase:807
msgid "orchestra at"
@@ -6104,15 +6252,15 @@ msgstr ""
#: DB:link_type/long_link_phrase:150 DB:link_type/long_link_phrase:45
msgid "orchestra {additional:additionally} performed"
-msgstr ""
+msgstr "orkestras {additional:papildomai} atliko"
#: DB:link_type/reverse_link_phrase:807
msgid "orchestras"
-msgstr ""
+msgstr "orkestrai"
#: DB:link_type/name:316
msgid "orchestration"
-msgstr ""
+msgstr "orkestravimas"
#: DB:link_type/reverse_link_phrase:316
msgid "orchestration of"
@@ -6140,7 +6288,7 @@ msgstr ""
#: DB:link_attribute_type/name:1225 DB:link_attribute_type/name:1128
msgid "other"
-msgstr ""
+msgstr "kiti"
#: DB:link_type/link_phrase:1086 DB:link_type/link_phrase:753
#: DB:link_type/link_phrase:730 DB:link_type/link_phrase:82
@@ -6159,37 +6307,37 @@ msgstr ""
#: DB:link_type/reverse_link_phrase:561 DB:link_type/reverse_link_phrase:746
#: DB:link_type/reverse_link_phrase:96 DB:link_type/reverse_link_phrase:803
msgid "other databases"
-msgstr ""
+msgstr "kitos duomenų bazės"
#: DB:link_type/name:241
msgid "other version"
-msgstr ""
+msgstr "kita versija"
#: DB:link_type/link_phrase:233 DB:link_type/name:233
#: DB:link_type/reverse_link_phrase:233 DB:link_type/long_link_phrase:233
msgid "other versions"
-msgstr ""
+msgstr "kitos versijos"
#: DB:link_attribute_type/name:461
msgid "other vocals"
-msgstr ""
+msgstr "kiti vokalai"
#: DB:link_type/name:988 DB:link_type/name:989 DB:link_type/name:991
#: DB:link_type/reverse_link_phrase:988 DB:link_type/reverse_link_phrase:989
#: DB:link_type/reverse_link_phrase:991
msgid "owner"
-msgstr ""
+msgstr "savininkas (-ė)"
#: DB:link_type/link_phrase:990 DB:link_type/name:990
#: DB:link_type/reverse_link_phrase:990 DB:link_type/long_link_phrase:990
msgid "ownership"
-msgstr ""
+msgstr "nuosavybė"
#: DB:link_type/link_phrase:988 DB:link_type/link_phrase:989
#: DB:link_type/link_phrase:991 DB:link_type/long_link_phrase:988
#: DB:link_type/long_link_phrase:989 DB:link_type/long_link_phrase:991
msgid "owns"
-msgstr ""
+msgstr "priklauso"
#: DB:link_type/name:109
msgid "parent"
@@ -6236,42 +6384,42 @@ msgstr ""
#: DB:link_type/name:901 DB:link_type/name:900 DB:link_type/name:898
#: DB:link_type/name:899 DB:link_type/name:897
msgid "patronage"
-msgstr ""
+msgstr "mecenatystė"
#: DB:link_type/link_phrase:901 DB:link_type/link_phrase:900
#: DB:link_type/link_phrase:898 DB:link_type/link_phrase:899
#: DB:link_type/link_phrase:897
msgid "patronage page"
-msgstr ""
+msgstr "mecenavimo puslapis"
#: DB:link_type/reverse_link_phrase:901 DB:link_type/reverse_link_phrase:900
#: DB:link_type/reverse_link_phrase:898 DB:link_type/reverse_link_phrase:899
#: DB:link_type/reverse_link_phrase:897
msgid "patronage page for"
-msgstr ""
+msgstr "mecenavimo puslapis, skirtas"
#: DB:link_type/link_phrase:34 DB:link_type/link_phrase:122
#: DB:link_type/name:34 DB:link_type/name:122 DB:link_type/name:278
#: DB:link_type/reverse_link_phrase:34 DB:link_type/reverse_link_phrase:122
#: DB:link_type/long_link_phrase:34 DB:link_type/long_link_phrase:122
msgid "performance"
-msgstr ""
+msgstr "atlikimas"
#: DB:link_type/reverse_link_phrase:108
msgid "performance name of"
-msgstr ""
+msgstr "atlikimo pavadinimas"
#: DB:link_type/link_phrase:887 DB:link_type/name:887
msgid "performance of"
-msgstr ""
+msgstr "atlikimas"
#: DB:link_type/reverse_link_phrase:887
msgid "performed at"
-msgstr ""
+msgstr "atlikta"
#: DB:link_type/long_link_phrase:292
msgid "performed the voice of"
-msgstr ""
+msgstr "atliko balsą"
#: DB:link_type/long_link_phrase:152 DB:link_type/long_link_phrase:53
msgid "performed {additional} {assistant} chorus master on"
@@ -6321,50 +6469,50 @@ msgstr ""
#: DB:link_type/name:867 DB:link_type/name:711 DB:link_type/name:710
#: DB:link_type/name:869
msgid "phonographic copyright"
-msgstr ""
+msgstr "fonografijos autorių teisės"
#: DB:link_type/reverse_link_phrase:867 DB:link_type/reverse_link_phrase:711
#: DB:link_type/reverse_link_phrase:710 DB:link_type/reverse_link_phrase:869
msgid "phonographic copyright (℗) by"
-msgstr ""
+msgstr "fonografines autorių teises (℗)"
#: DB:link_type/name:123 DB:link_type/name:1175 DB:link_type/name:20
msgid "photography"
-msgstr ""
+msgstr "fotografija"
#: DB:link_type/link_phrase:173 DB:link_type/link_phrase:396
#: DB:link_type/link_phrase:732
msgid "picture"
-msgstr ""
+msgstr "nuotrauka"
#: DB:link_type/reverse_link_phrase:173 DB:link_type/reverse_link_phrase:396
#: DB:link_type/reverse_link_phrase:732
msgid "picture of"
-msgstr ""
+msgstr "nuotrauka"
#: DB:link_type/link_phrase:915 DB:link_type/name:915
msgid "podcast feed"
-msgstr ""
+msgstr "tinklalaidės kanalas"
#: DB:link_type/reverse_link_phrase:915
msgid "podcast feed for"
-msgstr ""
+msgstr "tinklalaidės kanalas, skirtas"
#: DB:link_attribute_type/name:1200
msgid "popular / rock music"
-msgstr ""
+msgstr "populiarioji / roko muzika"
#: DB:link_type/link_phrase:808 DB:link_type/name:808
msgid "poster"
-msgstr ""
+msgstr "plakatas"
#: DB:link_type/reverse_link_phrase:808
msgid "poster for"
-msgstr ""
+msgstr "plakatas, skirtas"
#: DB:link_attribute_type/name:1219
msgid "postgraduate"
-msgstr ""
+msgstr "antrosios pakopos studijos"
#: DB:link_attribute_type/name:1353
msgid "pre"
@@ -6373,35 +6521,35 @@ msgstr ""
#: DB:link_type/name:845 DB:link_type/name:716 DB:link_type/name:715
#: DB:link_type/name:956
msgid "premiere"
-msgstr ""
+msgstr "premjera"
#: DB:link_type/reverse_link_phrase:845 DB:link_type/reverse_link_phrase:716
msgid "premiered at"
-msgstr ""
+msgstr "premjeruota"
#: DB:link_type/reverse_link_phrase:956
msgid "premiered by"
-msgstr ""
+msgstr "premjera atliko"
#: DB:link_type/reverse_link_phrase:715
msgid "premiered in"
-msgstr ""
+msgstr "premjeruotas"
#: DB:link_type/link_phrase:845
msgid "premieres"
-msgstr ""
+msgstr "premjeros"
#: DB:link_type/link_phrase:716 DB:link_type/link_phrase:715
msgid "premieres hosted"
-msgstr ""
+msgstr "premjeros surengtos"
#: DB:link_type/name:1168 DB:link_type/reverse_link_phrase:1168
msgid "presented"
-msgstr ""
+msgstr "pristatyta"
#: DB:link_type/link_phrase:1168
msgid "presented by"
-msgstr ""
+msgstr "pristatė"
#: DB:link_type/link_phrase:942 DB:link_type/name:942
#: DB:link_type/long_link_phrase:942
@@ -6528,7 +6676,7 @@ msgstr ""
#: DB:link_type/long_link_phrase:137 DB:link_type/long_link_phrase:1174
#: DB:link_type/long_link_phrase:18
msgid "provided {additional} art direction on"
-msgstr ""
+msgstr "pateikė {additional:papildomą} meno vadovavimą"
#: DB:link_type/long_link_phrase:993 DB:link_type/long_link_phrase:1170
msgid "provided {additional} artwork on"
@@ -7792,7 +7940,7 @@ msgstr ""
#: DB:link_type/link_phrase:18 DB:link_type/reverse_link_phrase:137
#: DB:link_type/reverse_link_phrase:1174 DB:link_type/reverse_link_phrase:18
msgid "{additional} art direction"
-msgstr ""
+msgstr "{additional:papildomas} meno vadovavimas"
#: DB:link_type/link_phrase:993 DB:link_type/link_phrase:1170
#: DB:link_type/reverse_link_phrase:993 DB:link_type/reverse_link_phrase:1170
diff --git a/po/scripts.lt.po b/po/scripts.lt.po
index cdc7bbc544c..4d8572615ca 100644
--- a/po/scripts.lt.po
+++ b/po/scripts.lt.po
@@ -5,7 +5,7 @@
msgid ""
msgstr ""
"Project-Id-Version: MusicBrainz\n"
-"PO-Revision-Date: 2023-10-01 20:27+0000\n"
+"PO-Revision-Date: 2023-10-09 17:27+0000\n"
"Last-Translator: \"Vac31.\" \n"
"Language-Team: Lithuanian \n"
@@ -21,7 +21,7 @@ msgstr ""
#. frequency:1 iso_code:Afak
#: DB:script/name:133
msgid "Afaka"
-msgstr "Afakų"
+msgstr "Afaka"
#. frequency:4 iso_code:Arab
#: DB:script/name:18
@@ -76,12 +76,12 @@ msgstr "Knyga Pahlavų"
#. frequency:3 iso_code:Bopo
#: DB:script/name:42
msgid "Bopomofo"
-msgstr "Bopomofotų"
+msgstr "Bopomofo"
#. frequency:1 iso_code:Brah
#: DB:script/name:47
msgid "Brahmi"
-msgstr "Brahmų"
+msgstr "Brahmi"
#. frequency:2 iso_code:Brai
#: DB:script/name:96
@@ -216,27 +216,27 @@ msgstr "Etiopų"
#. frequency:3 iso_code:Geor
#: DB:script/name:36
msgid "Georgian"
-msgstr "Gruziniškas"
+msgstr "Gruzinų"
#. frequency:2 iso_code:Glag
#: DB:script/name:33
msgid "Glagolitic"
-msgstr "Glagolinis"
+msgstr "Glagolų"
#. frequency:2 iso_code:Goth
#: DB:script/name:24
msgid "Gothic"
-msgstr "Gotikinis"
+msgstr "Gotų"
#. frequency:1 iso_code:Gran
#: DB:script/name:152
msgid "Grantha"
-msgstr "Granthos"
+msgstr "Grantha"
#. frequency:4 iso_code:Grek
#: DB:script/name:22
msgid "Greek"
-msgstr "Graikiškas"
+msgstr "Graikų"
#. frequency:3 iso_code:Gujr
#: DB:script/name:52
@@ -246,7 +246,7 @@ msgstr "Gudžaratų"
#. frequency:3 iso_code:Guru
#: DB:script/name:49
msgid "Gurmukhi"
-msgstr "Gurmuchų"
+msgstr "Gurmuchi"
#. frequency:4 iso_code:Hani
#: DB:script/name:92
@@ -266,7 +266,7 @@ msgstr "Hanų (tradicinis variantas)"
#. frequency:3 iso_code:Hang
#: DB:script/name:101
msgid "Hangul"
-msgstr "Hangulo"
+msgstr "Hangul"
#. frequency:2 iso_code:Hano
#: DB:script/name:77
@@ -371,7 +371,7 @@ msgstr "Chutsurų"
#. frequency:4 iso_code:Kore
#: DB:script/name:43
msgid "Korean"
-msgstr "Korėjietiškas"
+msgstr "Korėjiečių"
#. frequency:1 iso_code:Kpel
#: DB:script/name:146
@@ -381,7 +381,7 @@ msgstr "Kpelių"
#. frequency:3 iso_code:Laoo
#: DB:script/name:69
msgid "Lao"
-msgstr "Laoso"
+msgstr "Laosų"
#. frequency:4 iso_code:Latn
#: DB:script/name:28
@@ -471,32 +471,32 @@ msgstr "Meitei Majekų"
#. frequency:1 iso_code:Mend
#: DB:script/name:148
msgid "Mende"
-msgstr ""
+msgstr "Mendų"
#. frequency:1 iso_code:Merc
#: DB:script/name:153
msgid "Meroitic Cursive"
-msgstr ""
+msgstr "Meroitų kursyvas"
#. frequency:1 iso_code:Mero
#: DB:script/name:8
msgid "Meroitic Hieroglyphs"
-msgstr ""
+msgstr "Meroitų hieroglifai"
#. frequency:1 iso_code:Plrd
#: DB:script/name:41
msgid "Miao"
-msgstr ""
+msgstr "Miao"
#. frequency:3 iso_code:Mong
#: DB:script/name:17
msgid "Mongolian"
-msgstr ""
+msgstr "Mongolų"
#. frequency:1 iso_code:Moon
#: DB:script/name:119
msgid "Moon"
-msgstr ""
+msgstr "Mėnulis"
#. frequency:1 iso_code:Mroo
#: DB:script/name:135
@@ -686,7 +686,7 @@ msgstr "Simbolių"
#. frequency:2 iso_code:Syrc
#: DB:script/name:12
msgid "Syriac"
-msgstr "Siriškas"
+msgstr "Sirų"
#. frequency:1 iso_code:Syrn
#: DB:script/name:13
diff --git a/po/statistics.lt.po b/po/statistics.lt.po
index 5a293c89532..c0dc7fe45ae 100644
--- a/po/statistics.lt.po
+++ b/po/statistics.lt.po
@@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: MusicBrainz\n"
"Report-Msgid-Bugs-To: \n"
-"PO-Revision-Date: 2023-09-24 15:27+0000\n"
+"PO-Revision-Date: 2023-10-03 22:27+0000\n"
"Last-Translator: \"Vac31.\" \n"
"Language-Team: Lithuanian \n"
@@ -572,7 +572,7 @@ msgstr ""
#: DB:statistics.statistic_event/title:2007-11-07
msgid "Last.fm"
-msgstr ""
+msgstr "Last.fm"
#: DB:statistics.statistic_event/description:2007-11-07
msgid "Last.fm signs up with MetaBrainz and starts using MusicBrainz data."
From 9a446e9dc5dfa0ed3f992371aac55f0f3ea00c33 Mon Sep 17 00:00:00 2001
From: "salo.rock"
Date: Tue, 31 Oct 2023 22:27:55 +0000
Subject: [PATCH 064/194] Translated using Weblate (Italian)
Currently translated at 100.0% (3323 of 3323 strings)
Translated using Weblate (Italian)
Currently translated at 100.0% (1762 of 1762 strings)
Translated using Weblate (Italian)
Currently translated at 100.0% (1625 of 1625 strings)
Translated using Weblate (Italian)
Currently translated at 100.0% (3323 of 3323 strings)
Co-authored-by: salo.rock
Translate-URL: https://translations.metabrainz.org/projects/musicbrainz/attributes/it/
Translate-URL: https://translations.metabrainz.org/projects/musicbrainz/relationship-types/it/
Translate-URL: https://translations.metabrainz.org/projects/musicbrainz/server/it/
Translation: MusicBrainz/Attributes
Translation: MusicBrainz/Relationship Types
Translation: MusicBrainz/Server
---
po/attributes.it.po | 10 +++++++---
po/mb_server.it.po | 39 ++++++++++++++++++++-------------------
po/relationships.it.po | 15 +++++++++------
3 files changed, 36 insertions(+), 28 deletions(-)
diff --git a/po/attributes.it.po b/po/attributes.it.po
index bfe7afd9159..7ce5c508cc1 100644
--- a/po/attributes.it.po
+++ b/po/attributes.it.po
@@ -15,7 +15,7 @@
msgid ""
msgstr ""
"Project-Id-Version: MusicBrainz\n"
-"PO-Revision-Date: 2023-09-23 15:27+0000\n"
+"PO-Revision-Date: 2023-10-04 03:27+0000\n"
"Last-Translator: \"salo.rock\" \n"
"Language-Team: Italian \n"
"Language-Team: Italian "
msgstr ""
"Attenzione! \"1990-10-25\" è la data fasulla che Amazon assegna a tutte le "
-"pubblicazioni di cui non conosce la data reale. Utilizza questa data "
-"solo se sei sicuro che sia corretta!"
+"pubblicazioni di cui non conosce la data reale. Usa questa data solo "
+"se sei sicuro che sia corretta!"
#: ../root/release/edit/tracklist.tt:345 ../root/release/edit/tracklist.tt:408
msgid "Warning:"
@@ -3637,7 +3637,7 @@ msgstr "Non hai effettuato nessuna modifica!"
#: ../root/edit/search_macros.tt:414
msgid "You must be logged in to use this option."
-msgstr "Devi effettuare l'accesso per utilizzare questa opzione."
+msgstr "Devi effettuare l'accesso per utilizzare quest'opzione."
#: ../root/components/common-macros.tt:576
msgid "You must enter a disambiguation comment for this entity."
@@ -9909,6 +9909,8 @@ msgstr "Nuovo artista"
#: ../root/edit/details/EditRecording.js:63
msgid "This edit makes subsecond changes to the recording length"
msgstr ""
+"Questa modifica apporta cambiamenti inferiori al secondo alla durata della "
+"registrazione"
#: ../root/edit/details/EditRelationshipType.js:146
#: ../root/edit/details/historic/EditRelationship.js:44
@@ -15216,10 +15218,9 @@ msgid ""
"new name. Only use this if you are sure the existing credits are incorrect "
"(e.g. for typos)."
msgstr ""
-"Questa opzione inserirà modifiche aggiuntive per cambiare ogni "
-"accreditamento secondo il nuovo nome. Utilizza questa opzione solo se sei "
-"sicuro che gli accreditamenti esistenti sono errati (per es. a causa di "
-"refusi)."
+"Quest'opzione inserirà modifiche aggiuntive per cambiare ogni accreditamento "
+"secondo il nuovo nome. Usa quest'opzione solo se sei sicuro che gli "
+"accreditamenti esistenti sono errati (per es. a causa di refusi)."
#: ../root/static/scripts/artist/components/ArtistCreditRenamer.js:231
msgid ""
@@ -16839,9 +16840,9 @@ msgid ""
"Some tracks/mediums haven’t been loaded yet. If you want to use this option, "
"please close this dialog and load all tracks/mediums beforehand."
msgstr ""
-"Alcune tracce/alcuni supporti non sono ancora stati caricati. Se vuoi usare "
-"questa opzione, chiudi questa finestra di dialogo e carica prima tutte le "
-"tracce/i supporti."
+"Alcune tracce/alcuni supporti non sono ancora stati caricati. Se vuoi "
+"utilizzare quest'opzione, chiudi questa finestra di dialogo e carica prima "
+"tutte le tracce/i supporti."
#: ../root/static/scripts/relationship-editor/components/DialogEntityCredit.js:149
msgid "All of these relationships."
@@ -17194,8 +17195,8 @@ msgid ""
"Only use this option after you’ve tried searching for the work(s) you want "
"to create, and are certain they do not already exist on MusicBrainz."
msgstr ""
-"Usa questa opzione solo dopo aver cercato l'opera/e che intendi creare e se "
-"sei certo che essa non esiste già su MusicBrainz."
+"Usa quest'opzione solo dopo aver cercato l'opera/e che intendi creare ed "
+"esserti assicurato che non esista(no) già su MusicBrainz."
#: ../root/static/scripts/release/components/BatchCreateWorksDialog.js:323
#: ../root/static/scripts/release/components/RelationshipEditorBatchTools.js:94
diff --git a/po/relationships.it.po b/po/relationships.it.po
index 0aaae148c99..00713c6aebe 100644
--- a/po/relationships.it.po
+++ b/po/relationships.it.po
@@ -19,7 +19,7 @@
msgid ""
msgstr ""
"Project-Id-Version: MusicBrainz\n"
-"PO-Revision-Date: 2023-09-23 15:27+0000\n"
+"PO-Revision-Date: 2023-10-04 03:27+0000\n"
"Last-Translator: \"salo.rock\" \n"
"Language-Team: Italian
Date: Tue, 31 Oct 2023 22:27:55 +0000
Subject: [PATCH 065/194] Translated using Weblate (German)
Currently translated at 78.6% (2615 of 3323 strings)
Translated using Weblate (German)
Currently translated at 78.6% (2614 of 3323 strings)
Co-authored-by: Philipp Wolfer
Translate-URL: https://translations.metabrainz.org/projects/musicbrainz/server/de/
Translation: MusicBrainz/Server
---
po/mb_server.de.po | 17 ++++++++---------
1 file changed, 8 insertions(+), 9 deletions(-)
diff --git a/po/mb_server.de.po b/po/mb_server.de.po
index cf9181fbb3f..386f41dffb9 100644
--- a/po/mb_server.de.po
+++ b/po/mb_server.de.po
@@ -72,7 +72,7 @@ msgstr ""
"Project-Id-Version: MusicBrainz\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-09-27 17:01+0000\n"
-"PO-Revision-Date: 2023-08-31 20:27+0000\n"
+"PO-Revision-Date: 2023-10-12 13:27+0000\n"
"Last-Translator: Philipp Wolfer \n"
"Language-Team: German \n"
@@ -81,7 +81,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.18.2\n"
+"X-Generator: Weblate 5.0.2\n"
#: ../root/components/common-macros.tt:12
msgid " ({text})"
@@ -6108,7 +6108,7 @@ msgstr ""
#: ../lib/MusicBrainz/Server/Form/User/Report.pm:40
#: ../root/user/ReportUser.js:69
msgid "Editor has violated some other part of our Code of Conduct"
-msgstr "Bearbeiter verletzte einen anderen Teil unserer Verhaltensregeln"
+msgstr "Bearbeiter verletzte einen anderen Teil unseres Verhaltenskodex"
#: ../lib/MusicBrainz/Server/Form/Utils.pm:46
#: ../root/static/scripts/common/i18n/localizeLanguageName.js:19
@@ -9174,8 +9174,8 @@ msgid ""
"writing edit notes!"
msgstr ""
"Bearbeitungsbemerkungen unterstützen {doc_formatting|eine begrenzte Anzahl "
-"von Wiki-Formatierungsoptionen}. Bitte beachte immer die {doc_coc|"
-"Verhaltensregeln}, wenn du Bemerkungen schreibst!"
+"von Wiki-Formatierungsoptionen}. Bitte beachte immer den "
+"{doc_coc|Verhaltenskodex}, wenn du Bemerkungen schreibst!"
#: ../root/edit/components/EditNotes.js:55
msgid "No edit notes have been added."
@@ -10854,7 +10854,7 @@ msgstr "Gesellschaftsvertrag"
#: ../root/layout/components/BottomMenu.js:141
msgid "Code of Conduct"
-msgstr "Verhaltensregeln"
+msgstr "Verhaltenskodex"
#: ../root/layout/components/BottomMenu.js:144
msgid "Privacy Policy"
@@ -11406,7 +11406,7 @@ msgstr "Koordinaten:"
#: ../root/layout/components/sidebar/PlayOnListenBrainzButton.js:59
msgid "ListenBrainz"
-msgstr ""
+msgstr "ListenBrainz"
#: ../root/layout/components/sidebar/PlayOnListenBrainzButton.js:64
msgid "Play on ListenBrainz"
@@ -17149,8 +17149,7 @@ msgstr ""
#: ../root/user/ReportUser.js:101
msgid "Please review our {uri|Code of Conduct} before sending a report."
-msgstr ""
-"Bitte lies unseren {uri|Code of Conduct}, bevor du eine Meldung machst."
+msgstr "Bitte lies unseren {uri|Verhaltenskodex}, bevor du eine Meldung machst."
#: ../root/user/ReportUser.js:109
msgid ""
From 9b71cb830d704302ba90cafdf7ca096734c69988 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=D0=92=D0=BE=D0=B4=D0=BA=D0=B0665?=
Date: Tue, 31 Oct 2023 22:27:55 +0000
Subject: [PATCH 066/194] Translated using Weblate (Portuguese)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Currently translated at 0.9% (16 of 1625 strings)
Co-authored-by: Водка665
Translate-URL: https://translations.metabrainz.org/projects/musicbrainz/attributes/pt/
Translation: MusicBrainz/Attributes
---
po/attributes.pt.po | 46 ++++++++++++++++++++++++++-------------------
1 file changed, 27 insertions(+), 19 deletions(-)
diff --git a/po/attributes.pt.po b/po/attributes.pt.po
index b64c71747cb..f345e068335 100644
--- a/po/attributes.pt.po
+++ b/po/attributes.pt.po
@@ -1,18 +1,20 @@
#
# Translators:
+# Водка665 , 2023.
msgid ""
msgstr ""
"Project-Id-Version: MusicBrainz\n"
-"PO-Revision-Date: 2012-05-24 18:52+0000\n"
-"Last-Translator: FULL NAME \n"
-"Language-Team: Portuguese (http://app.transifex.com/musicbrainz/musicbrainz/"
-"language/pt/)\n"
+"PO-Revision-Date: 2023-10-09 17:27+0000\n"
+"Last-Translator: Водка665 \n"
+"Language-Team: Portuguese \n"
"Language: pt\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % "
-"1000000 == 0 ? 1 : 2;\n"
+"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : ((n != 0 && n % "
+"1000000 == 0) ? 1 : 2);\n"
+"X-Generator: Weblate 5.0.2\n"
#: DB:work_type/description:9
msgctxt "work_type"
@@ -21,6 +23,9 @@ msgid ""
"unaccompanied) choral works. What exactly is a motet depends quite a bit on "
"the period."
msgstr ""
+"«Motete» é um termo que se aplica a diferentes tipos de obras corais ("
+"geralmente sem acompanhamento). O que é exatamente um motete depende "
+"bastante do período."
#: DB:work_type/description:5
msgctxt "work_type"
@@ -28,61 +33,64 @@ msgid ""
"\"Sonata\" is a general term used to describe small scale (very often solo "
"or solo + keyboard) instrumental works, initially in baroque music."
msgstr ""
+"«Sonata» é um termo geral usado para descrever obras instrumentais de "
+"pequena escala (muitas vezes a solo ou solo + teclado), inicialmente na "
+"música barroca."
#: DB:medium_format/name:54
msgctxt "medium_format"
msgid "10\" Shellac"
-msgstr ""
+msgstr "Shellac de 10\""
#: DB:medium_format/name:30
msgctxt "medium_format"
msgid "10\" Vinyl"
-msgstr ""
+msgstr "Vinil de 10\""
#: DB:medium_format/name:72
msgctxt "medium_format"
msgid "12\" LaserDisc"
-msgstr ""
+msgstr "LaserDisc de 12\""
#: DB:medium_format/name:55
msgctxt "medium_format"
msgid "12\" Shellac"
-msgstr ""
+msgstr "Shellac de 12\""
#: DB:medium_format/name:31
msgctxt "medium_format"
msgid "12\" Vinyl"
-msgstr ""
+msgstr "Vinil de 12\""
#: DB:medium_format/name:49
msgctxt "medium_format"
msgid "3.5\" Floppy Disk"
-msgstr ""
+msgstr "Disquete de 3.5\""
#: DB:medium_format/name:91
msgctxt "medium_format"
msgid "5.25\" Floppy Disk"
-msgstr ""
+msgstr "Disquete de 5.25\""
#: DB:medium_format/name:52
msgctxt "medium_format"
msgid "7\" Flexi-disc"
-msgstr ""
+msgstr "Disco flexível de 7\""
#: DB:medium_format/name:56
msgctxt "medium_format"
msgid "7\" Shellac"
-msgstr ""
+msgstr "Shellac de 7\""
#: DB:medium_format/name:29
msgctxt "medium_format"
msgid "7\" Vinyl"
-msgstr ""
+msgstr "Vinil de 7\""
#: DB:medium_format/name:71
msgctxt "medium_format"
msgid "8\" LaserDisc"
-msgstr ""
+msgstr "LaserDisc de 8\""
#: DB:medium_format/name:78
msgctxt "medium_format"
@@ -92,12 +100,12 @@ msgstr ""
#: DB:medium_format/name:34
msgctxt "medium_format"
msgid "8cm CD"
-msgstr ""
+msgstr "CD de 8cm"
#: DB:medium_format/name:40
msgctxt "medium_format"
msgid "8cm CD+G"
-msgstr ""
+msgstr "CD+G de 8cm"
#: DB:medium_format/description:166
msgctxt "medium_format"
From ee51b8fc5108bbc286eb4ab228899808b52400f5 Mon Sep 17 00:00:00 2001
From: "joysriram.sarkar.56"
Date: Tue, 31 Oct 2023 22:27:56 +0000
Subject: [PATCH 067/194] Translated using Weblate (Bengali)
Currently translated at 53.4% (85 of 159 strings)
Translated using Weblate (Bengali)
Currently translated at 47.2% (259 of 548 strings)
Translated using Weblate (Bengali)
Currently translated at 100.0% (258 of 258 strings)
Translated using Weblate (Japanese)
Currently translated at 100.0% (159 of 159 strings)
Translated using Weblate (Spanish)
Currently translated at 100.0% (159 of 159 strings)
Translated using Weblate (Japanese)
Currently translated at 100.0% (548 of 548 strings)
Translated using Weblate (Spanish)
Currently translated at 100.0% (548 of 548 strings)
Translated using Weblate (Japanese)
Currently translated at 100.0% (258 of 258 strings)
Translated using Weblate (Spanish)
Currently translated at 100.0% (258 of 258 strings)
Co-authored-by: joysriram.sarkar.56
Translate-URL: https://translations.metabrainz.org/projects/musicbrainz/countries/bn/
Translate-URL: https://translations.metabrainz.org/projects/musicbrainz/countries/es/
Translate-URL: https://translations.metabrainz.org/projects/musicbrainz/countries/ja/
Translate-URL: https://translations.metabrainz.org/projects/musicbrainz/languages/bn/
Translate-URL: https://translations.metabrainz.org/projects/musicbrainz/languages/es/
Translate-URL: https://translations.metabrainz.org/projects/musicbrainz/languages/ja/
Translate-URL: https://translations.metabrainz.org/projects/musicbrainz/scripts/bn/
Translate-URL: https://translations.metabrainz.org/projects/musicbrainz/scripts/es/
Translate-URL: https://translations.metabrainz.org/projects/musicbrainz/scripts/ja/
Translation: MusicBrainz/Countries
Translation: MusicBrainz/Languages
Translation: MusicBrainz/Scripts
---
po/countries.bn.po | 15 +-
po/countries.es.po | 15 +-
po/countries.ja.po | 18 +--
po/languages.bn.po | 343 +++++++++++++++++++++++----------------------
po/languages.es.po | 23 +--
po/languages.ja.po | 32 +++--
po/scripts.bn.po | 139 +++++++++---------
po/scripts.es.po | 18 +--
po/scripts.ja.po | 12 +-
9 files changed, 314 insertions(+), 301 deletions(-)
diff --git a/po/countries.bn.po b/po/countries.bn.po
index 1caed12a2ee..51e53b640d3 100644
--- a/po/countries.bn.po
+++ b/po/countries.bn.po
@@ -3,11 +3,12 @@
# জয়শ্রীরাম সরকার , 2022
# জয়শ্রীরাম সরকার , 2022
# Philipp Wolfer , 2023.
+# "joysriram.sarkar.56" , 2023.
msgid ""
msgstr ""
"Project-Id-Version: MusicBrainz\n"
-"PO-Revision-Date: 2023-08-24 14:27+0000\n"
-"Last-Translator: Philipp Wolfer \n"
+"PO-Revision-Date: 2023-10-10 13:27+0000\n"
+"Last-Translator: \"joysriram.sarkar.56\" \n"
"Language-Team: Bengali \n"
"Language: bn\n"
@@ -15,7 +16,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Weblate 4.18.2\n"
+"X-Generator: Weblate 5.0.2\n"
#. iso.code:AF
#: DB:area JOIN iso_3166_1 iso ON iso.area = area.id/area.name:1
@@ -305,7 +306,7 @@ msgstr "সাইপ্রাস"
#. iso.code:CZ
#: DB:area JOIN iso_3166_1 iso ON iso.area = area.id/area.name:56
msgid "Czechia"
-msgstr ""
+msgstr "চেকিয়া"
#. iso.code:XC
#: DB:area JOIN iso_3166_1 iso ON iso.area = area.id/area.name:245
@@ -380,7 +381,7 @@ msgstr "এস্তোনিয়া"
#. iso.code:SZ
#: DB:area JOIN iso_3166_1 iso ON iso.area = area.id/area.name:201
msgid "Eswatini"
-msgstr ""
+msgstr "ইসোয়াতিনি"
#. iso.code:ET
#: DB:area JOIN iso_3166_1 iso ON iso.area = area.id/area.name:68
@@ -855,7 +856,7 @@ msgstr "উত্তর কোরিয়া"
#. iso.code:MK
#: DB:area JOIN iso_3166_1 iso ON iso.area = area.id/area.name:126
msgid "North Macedonia"
-msgstr ""
+msgstr "উত্তর মেসিডোনিয়া"
#. iso.code:MP
#: DB:area JOIN iso_3166_1 iso ON iso.area = area.id/area.name:159
@@ -1200,7 +1201,7 @@ msgstr "টুভালু"
#. iso.code:TR
#: DB:area JOIN iso_3166_1 iso ON iso.area = area.id/area.name:214
msgid "Türkiye"
-msgstr ""
+msgstr "তুরস্ক"
#. iso.code:VI
#: DB:area JOIN iso_3166_1 iso ON iso.area = area.id/area.name:231
diff --git a/po/countries.es.po b/po/countries.es.po
index bec8549f63f..709c6af5348 100644
--- a/po/countries.es.po
+++ b/po/countries.es.po
@@ -11,11 +11,12 @@
# Tobias Quathamer , 2007
# t0n3t