mirror of
https://github.com/zotero/zotero.git
synced 2026-10-10 03:28:10 +00:00
Compare commits
173 commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a7e6fc330c | ||
|
|
677499865a | ||
|
|
0e60389ee4 | ||
|
|
2271913e49 | ||
|
|
ff5e09201d | ||
|
|
0b89b15f66 | ||
|
|
f6e11981e3 | ||
|
|
230fc7f2df | ||
|
|
f179f0a54f | ||
|
|
ea09aac616 | ||
|
|
4a49ffec0a | ||
|
|
0d09618865 | ||
|
|
b96fcd41b1 | ||
|
|
c13d17b5e6 | ||
|
|
eb255c5868 | ||
|
|
88217492f9 | ||
|
|
64897455f4 | ||
|
|
5015b0e4cc | ||
|
|
a2d378448a | ||
|
|
32b64b3cf1 | ||
|
|
66fccec6b4 | ||
|
|
894309d061 | ||
|
|
b24c7577ec | ||
|
|
ca4ced1e9f | ||
|
|
6646be66d0 | ||
|
|
ef0811bd4c | ||
|
|
f893206dfd | ||
|
|
ae5de2c2f5 | ||
|
|
a3b45a74e9 | ||
|
|
e474ca524b | ||
|
|
bc0f6203e1 | ||
|
|
91ae576074 | ||
|
|
c255104ada | ||
|
|
75f5d6aca1 | ||
|
|
d156bef42a | ||
|
|
79246196ac | ||
|
|
262e1964ae | ||
|
|
f4dfea6849 | ||
|
|
999f78b0f5 | ||
|
|
2e6321a4bf | ||
|
|
35a1bb20cb | ||
|
|
8c80ea431e | ||
|
|
3abd720957 | ||
|
|
8379540719 | ||
|
|
b373291c02 | ||
|
|
3391f3bc99 | ||
|
|
6ca854a018 | ||
|
|
fa32eb6790 | ||
|
|
96c4427d6c | ||
|
|
5a8b5a1829 | ||
|
|
f368a53311 | ||
|
|
49020b02a2 | ||
|
|
20c6fe6737 | ||
|
|
80351a496b | ||
|
|
2d2e787111 | ||
|
|
eaba3ae099 | ||
|
|
4746300d33 | ||
|
|
85b0c9dbad | ||
|
|
318e4852e9 | ||
|
|
3dc3359cff | ||
|
|
b505c630d3 | ||
|
|
21b7baee35 | ||
|
|
df59cee94a | ||
|
|
d1275f9964 | ||
|
|
d4a7de2e8d | ||
|
|
864fd03c87 | ||
|
|
d3cb7c86d9 | ||
|
|
e4e3c72036 | ||
|
|
0857cefb0c | ||
|
|
9b7b4fe134 | ||
|
|
a9c3fc7790 | ||
|
|
20d0f103fd | ||
|
|
20eca3781d | ||
|
|
87455d28c3 | ||
|
|
2048319541 | ||
|
|
d03b0a716d | ||
|
|
bb2b37a73a | ||
|
|
7ec54fdaa9 | ||
|
|
5a659b070d | ||
|
|
ad96323881 | ||
|
|
fc0f6157d0 | ||
|
|
6733f2edca | ||
|
|
e1997620a4 | ||
|
|
a396771cbc | ||
|
|
0e0997078b | ||
|
|
0785b3a086 | ||
|
|
ba5cb7d5c6 | ||
|
|
d822da4c06 | ||
|
|
a297692487 | ||
|
|
6921268dc0 | ||
|
|
ba1906c054 | ||
|
|
b5be7cbd57 | ||
|
|
5c61815f36 | ||
|
|
b5ca5aed3a | ||
|
|
4b6598acc4 | ||
|
|
14a6ce000e | ||
|
|
9d0cd005f8 | ||
|
|
26db75971e | ||
|
|
cc45e9019b | ||
|
|
98d6f40e4a | ||
|
|
2cad5b00d1 | ||
|
|
95239db0fd | ||
|
|
4c063e7b6e | ||
|
|
07f1517712 | ||
|
|
f0e0971c69 | ||
|
|
acba90f272 | ||
|
|
26a5e2900a | ||
|
|
34d66381d1 | ||
|
|
f7dbcdde4b | ||
|
|
c4563af381 | ||
|
|
56e7f0a10f | ||
|
|
3a160b2630 | ||
|
|
124c18d54d | ||
|
|
57c582e171 | ||
|
|
cf8819cc06 | ||
|
|
fe74b02d28 | ||
|
|
1dcc2728dd | ||
|
|
c5dbf0169f | ||
|
|
3f282fc25f | ||
|
|
7163a196f8 | ||
|
|
8c0499468e | ||
|
|
629892b0b8 | ||
|
|
2ff67c987e | ||
|
|
a8ed30ce80 | ||
|
|
43f15e7517 | ||
|
|
df11227e0a | ||
|
|
d418d79e70 | ||
|
|
42aebccbf4 | ||
|
|
7b6e19435b | ||
|
|
f650f95081 | ||
|
|
0357026865 | ||
|
|
92d89becc7 | ||
|
|
49f9642c0d | ||
|
|
94372111f5 | ||
|
|
f0b896d282 | ||
|
|
ec68216310 | ||
|
|
b215d93ac9 | ||
|
|
bf1480f8f0 | ||
|
|
6f089445a5 | ||
|
|
14e62ee34f | ||
|
|
43c86c0e58 | ||
|
|
6f3f5d2ea8 | ||
|
|
4fb0661b50 | ||
|
|
57ab92b5b9 | ||
|
|
7b20972c27 | ||
|
|
dc045250a6 | ||
|
|
256bd157ed | ||
|
|
2b45b7fea3 | ||
|
|
1d5fd1308a | ||
|
|
d8069fac50 | ||
|
|
18516a33d9 | ||
|
|
b658f09dd8 | ||
|
|
5799bdd554 | ||
|
|
62c7b4db2b | ||
|
|
caa0b05e5f | ||
|
|
5095543bef | ||
|
|
6af3b0276a | ||
|
|
67700f8a2c | ||
|
|
d12f3eda61 | ||
|
|
deabf3f042 | ||
|
|
28ed3e34b5 | ||
|
|
354183c25d | ||
|
|
b0f69ef7e3 | ||
|
|
ebc23d73b0 | ||
|
|
419f74379b | ||
|
|
603b843f71 | ||
|
|
1e3959020d | ||
|
|
3fd0abf6b0 | ||
|
|
111a254696 | ||
|
|
69616500d8 | ||
|
|
693f9a7e1b | ||
|
|
0c0afb129b | ||
|
|
a11c5987ad |
267 changed files with 7600 additions and 4385 deletions
|
|
@ -7,8 +7,9 @@ content zotero-platform chrome/content/zotero-platform/unix/ os=FreeBSD
|
|||
content zotero-platform chrome/content/zotero-platform/unix/ os=OpenBSD
|
||||
|
||||
content zotero-platform-version chrome/content/zotero-platform/default-version/
|
||||
# Big Sur shows up as 10.16 when linked against 10.11
|
||||
content zotero-platform-version chrome/content/zotero-platform/mac-big-sur/ os=Darwin osversion=10.16
|
||||
# Big Sur and later show up as 10.16 when linked against 10.11
|
||||
# (Usually: https://forums.zotero.org/discussion/98406/zotero-will-not-open-mac-os-monterey)
|
||||
content zotero-platform-version chrome/content/zotero-platform/mac-big-sur/ os=Darwin osversion>=10.16
|
||||
#content zotero-platform-version chrome/content/zotero-platform/mac-big-sur/ os=Darwin
|
||||
|
||||
resource zotero resource/
|
||||
|
|
|
|||
|
|
@ -98,16 +98,7 @@ var Scaffold = new function () {
|
|||
);
|
||||
}
|
||||
});
|
||||
|
||||
// Set font size from general pref
|
||||
Zotero.setFontSize(document.getElementById('scaffold-pane'));
|
||||
|
||||
// Set font size of code editor
|
||||
var size = Zotero.Prefs.get("scaffold.fontSize");
|
||||
if (size) {
|
||||
this.setFontSize(size);
|
||||
}
|
||||
|
||||
|
||||
this.generateTranslatorID();
|
||||
|
||||
// Add List fields help menu entries for all other item types
|
||||
|
|
@ -146,6 +137,15 @@ var Scaffold = new function () {
|
|||
this.initCodeEditor();
|
||||
this.initTestsEditor();
|
||||
|
||||
// Set font size from general pref
|
||||
Zotero.setFontSize(document.getElementById('scaffold-pane'));
|
||||
|
||||
// Set font size of code editor
|
||||
var size = Zotero.Prefs.get("scaffold.fontSize");
|
||||
if (size) {
|
||||
this.setFontSize(size);
|
||||
}
|
||||
|
||||
// Listen for Scaffold coming to the foreground and reload translators
|
||||
window.addEventListener('activate', () => this.reloadTranslators());
|
||||
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@
|
|||
*/
|
||||
|
||||
|
||||
async function detectWeb(doc, url) {
|
||||
function detectWeb(doc, url) {
|
||||
// TODO: adjust the logic here
|
||||
if ($$CURSOR$$url.includes('/article/')) {
|
||||
return 'newspaperArticle';
|
||||
|
|
@ -52,12 +52,12 @@ function getSearchResults(doc, checkOnly) {
|
|||
}
|
||||
|
||||
async function doWeb(doc, url) {
|
||||
if (await detectWeb(doc, url) == 'multiple') {
|
||||
if (detectWeb(doc, url) == 'multiple') {
|
||||
let items = await Zotero.selectItems(getSearchResults(doc, false));
|
||||
if (items) {
|
||||
await Promise.all(
|
||||
Object.keys(items)
|
||||
.map(url => requestDocument(url).then(doc => scrape(doc, url)))
|
||||
.map(url => requestDocument(url).then(scrape))
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -65,3 +65,8 @@ async function doWeb(doc, url) {
|
|||
await scrape(doc, url);
|
||||
}
|
||||
}
|
||||
|
||||
async function scrape(doc, url = doc.location.href) {
|
||||
// TODO: implement or add a scrape function template
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
async function scrape(doc, url) {
|
||||
async function scrape(doc, url = doc.location.href) {
|
||||
// TODO adjust the url building
|
||||
let m = url.match(/FId=([\w\d]+)&/);
|
||||
if (m) {
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
async function scrape(doc, url) {
|
||||
async function scrape(doc, url = doc.location.href) {
|
||||
let translator = Zotero.loadTranslator('web');
|
||||
// Embedded Metadata
|
||||
translator.setTranslator('951c027d-74ac-47d4-a107-9c3069ab7b48');
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
async function scrape(doc, url) {
|
||||
async function scrape(doc, url = doc.location.href) {
|
||||
// TODO adjust the selector for the lines here
|
||||
let lines = doc.querySelectorAll('table#marcData tr');
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
async function scrape(doc, url) {
|
||||
async function scrape(doc, url = doc.location.href) {
|
||||
let DOI = url.match(/\/(10\.[^#?]+)/)[1];
|
||||
// TODO adjust the URL here
|
||||
let risURL = `http://citation-needed.services.springer.com/v2/references/${DOI}?format=refman&flavour=citation`;
|
||||
|
|
|
|||
|
|
@ -25,6 +25,12 @@ row > label:first-child, .creator-type-label, #more-creators-label
|
|||
max-height: 7px;
|
||||
}
|
||||
|
||||
.zotero-focusable:focus {
|
||||
/* At least in Fx60, the color doesn't quite match Monterey's native textbox outline,
|
||||
but it will have to do for now */
|
||||
outline: 2px solid -moz-mac-focusring !important;
|
||||
}
|
||||
|
||||
textbox
|
||||
{
|
||||
margin: -1px 5px -1px 0;
|
||||
|
|
|
|||
|
|
@ -96,6 +96,8 @@ var ZoteroAdvancedSearch = new function() {
|
|||
ref: _searchBox.search,
|
||||
isSearchMode: () => true,
|
||||
getItems: async function () {
|
||||
await Zotero.Libraries.get(_libraryID).waitForDataLoad('item');
|
||||
|
||||
var search = _searchBox.search.clone();
|
||||
search.libraryID = _libraryID;
|
||||
var ids = await search.search();
|
||||
|
|
|
|||
|
|
@ -719,7 +719,7 @@
|
|||
<![CDATA[
|
||||
// getCreatorFields(), switchCreatorMode() and handleCreatorAutoCompleteSelect()
|
||||
// may need need to be adjusted if this DOM structure changes
|
||||
|
||||
var tabindex = this._tabIndexMinCreators + (this._creatorCount * 6);
|
||||
var fieldMode = Zotero.Prefs.get('lastCreatorFieldMode');
|
||||
var firstName = '';
|
||||
var lastName = '';
|
||||
|
|
@ -757,9 +757,15 @@
|
|||
}
|
||||
typeBox.setAttribute("fieldname", 'creator-' + this._creatorCount + '-typeID');
|
||||
if (this.editable) {
|
||||
typeBox.className = 'creator-type-label zotero-clicky';
|
||||
typeBox.className = 'creator-type-label zotero-clicky zotero-focusable';
|
||||
typeBox.setAttribute('ztabindex', tabindex - 1);
|
||||
typeBox.setAttribute('role', 'listbox');
|
||||
typeBox.addEventListener('focus', ev => {
|
||||
this._lastTabIndex = parseInt(ev.target.getAttribute('ztabindex'));
|
||||
});
|
||||
var img = document.createElement('image');
|
||||
typeBox.appendChild(img);
|
||||
typeBox.setAttribute('onkeypress', 'return document.getBindingParent(this).handleKeyPress(event)');
|
||||
}
|
||||
else {
|
||||
typeBox.className = 'creator-type-label';
|
||||
|
|
@ -772,12 +778,18 @@
|
|||
|
||||
var hbox = document.createElement("hbox");
|
||||
hbox.className = 'creator-type-value';
|
||||
|
||||
hbox.addEventListener('focusin', ev => {
|
||||
if(ev.target.classList.contains('zotero-focusable')) {
|
||||
this._lastTabIndex = parseInt(ev.target.getAttribute('ztabindex'));
|
||||
}
|
||||
});
|
||||
|
||||
// Name
|
||||
var firstlast = document.createElement("hbox");
|
||||
firstlast.className = 'creator-name-box';
|
||||
firstlast.setAttribute("flex","1");
|
||||
var tabindex = this._tabIndexMinCreators + (this._creatorCount * 2);
|
||||
|
||||
var fieldName = 'creator-' + this._creatorCount + '-lastName';
|
||||
var lastNameLabel = firstlast.appendChild(
|
||||
this.createValueElement(
|
||||
|
|
@ -820,29 +832,40 @@
|
|||
var toggleButton = document.createElement('label');
|
||||
toggleButton.setAttribute('fieldname',
|
||||
'creator-' + this._creatorCount + '-fieldMode');
|
||||
toggleButton.className = 'zotero-field-toggle zotero-clicky';
|
||||
toggleButton.setAttribute('ztabindex', tabindex + 2);
|
||||
toggleButton.setAttribute('role', 'button');
|
||||
toggleButton.className = 'zotero-field-toggle zotero-focusable zotero-clicky';
|
||||
toggleButton.setAttribute('onkeypress', 'return document.getBindingParent(this).handleKeyPress(event)');
|
||||
hbox.appendChild(toggleButton);
|
||||
|
||||
// Minus (-) button
|
||||
var removeButton = document.createElement('label');
|
||||
removeButton.setAttribute('ztabindex', tabindex + 3);
|
||||
removeButton.setAttribute('role', 'button');
|
||||
removeButton.setAttribute('aria-label', Zotero.getString('general.delete'));
|
||||
removeButton.setAttribute("value","-");
|
||||
removeButton.setAttribute("class","zotero-clicky zotero-clicky-minus");
|
||||
removeButton.setAttribute('class','zotero-clicky zotero-focusable zotero-clicky-minus');
|
||||
removeButton.setAttribute('onkeypress', 'return document.getBindingParent(this).handleKeyPress(event)');
|
||||
// If default first row, don't let user remove it
|
||||
if (defaultRow) {
|
||||
this.disableButton(removeButton);
|
||||
}
|
||||
else {
|
||||
removeButton.setAttribute("onclick",
|
||||
"document.getBindingParent(this).removeCreator("
|
||||
+ this._creatorCount
|
||||
+ ", this.parentNode.parentNode)");
|
||||
let index = this._creatorCount;
|
||||
removeButton.onclick = (ev) => {
|
||||
document.getBindingParent(ev.currentTarget)
|
||||
.removeCreator(index, ev.currentTarget.parentNode.parentNode);
|
||||
}
|
||||
}
|
||||
hbox.appendChild(removeButton);
|
||||
|
||||
// Plus (+) button
|
||||
var addButton = document.createElement('label');
|
||||
addButton.setAttribute('ztabindex', tabindex + 4);
|
||||
addButton.setAttribute("value","+");
|
||||
addButton.setAttribute("class", "zotero-clicky zotero-clicky-plus");
|
||||
addButton.setAttribute('role', 'button');
|
||||
addButton.setAttribute('class', 'zotero-clicky zotero-focusable zotero-clicky-plus');
|
||||
addButton.setAttribute('onkeypress', 'return document.getBindingParent(this).handleKeyPress(event)');
|
||||
// If row isn't saved, don't let user add more
|
||||
if (unsaved) {
|
||||
this.disableButton(addButton);
|
||||
|
|
@ -958,7 +981,11 @@
|
|||
button.style.background = `url("chrome://zotero/skin/textfield-dual${Zotero.hiDPISuffix}.png") center/21px auto no-repeat`;
|
||||
button.setAttribute('tooltiptext', Zotero.getString('pane.item.switchFieldMode.two'));
|
||||
lastName.setAttribute('fieldMode', '1');
|
||||
button.setAttribute('onclick', "document.getBindingParent(this).switchCreatorMode(Zotero.getAncestorByTagName(this, 'row'), 0, false, true)");
|
||||
button.onclick = (ev) => {
|
||||
document
|
||||
.getBindingParent(ev.currentTarget)
|
||||
.switchCreatorMode(Zotero.getAncestorByTagName(ev.currentTarget, 'row'), 0, false, true);
|
||||
};
|
||||
lastName.setAttribute('flex', '1');
|
||||
delete lastName.style.width;
|
||||
delete lastName.style.maxWidth;
|
||||
|
|
@ -998,7 +1025,11 @@
|
|||
button.style.background = `url("chrome://zotero/skin/textfield-single${Zotero.hiDPISuffix}.png") center/21px auto no-repeat`;
|
||||
button.setAttribute('tooltiptext', Zotero.getString('pane.item.switchFieldMode.one'));
|
||||
lastName.setAttribute('fieldMode', '0');
|
||||
button.setAttribute('onclick', "document.getBindingParent(this).switchCreatorMode(Zotero.getAncestorByTagName(this, 'row'), 1, false, true)");
|
||||
button.onclick = (ev) => {
|
||||
document
|
||||
.getBindingParent(ev.currentTarget)
|
||||
.switchCreatorMode(Zotero.getAncestorByTagName(ev.currentTarget, 'row'), 1, false, true)
|
||||
};
|
||||
lastName.setAttribute('flex', '0');
|
||||
|
||||
// appropriately truncate lastName
|
||||
|
|
@ -1720,6 +1751,19 @@
|
|||
<![CDATA[
|
||||
var target = event.target;
|
||||
var focused = document.commandDispatcher.focusedElement;
|
||||
|
||||
if ((event.key == 'ArrowUp' || event.key === 'ArrowDown')
|
||||
&& target.classList.contains('creator-type-label')) {
|
||||
event.preventDefault();
|
||||
target.click();
|
||||
return true;
|
||||
}
|
||||
|
||||
if (event.key === ' ' && target.classList.contains('zotero-focusable')) {
|
||||
event.preventDefault();
|
||||
target.click();
|
||||
return true;
|
||||
}
|
||||
|
||||
switch (event.keyCode)
|
||||
{
|
||||
|
|
@ -1932,8 +1976,6 @@
|
|||
|
||||
newVal = val;
|
||||
|
||||
// Reset creator mode settings here so that flex attribute gets reset
|
||||
this.switchCreatorMode(row, (otherFields.fieldMode ? 1 : 0), true);
|
||||
if (Zotero.ItemTypes.getName(this.item.itemTypeID) === "bookSection") {
|
||||
var creatorTypeLabels = document.getAnonymousNodes(this)[0].getElementsByClassName("creator-type-label");
|
||||
Zotero.debug(creatorTypeLabels[creatorTypeLabels.length-1] + "");
|
||||
|
|
@ -2018,6 +2060,11 @@
|
|||
// Disassociate textbox from label
|
||||
label.setAttribute('control', elem.getAttribute('id'));
|
||||
|
||||
if (field == 'creator') {
|
||||
// Set correct flex settings and fieldMode attribute
|
||||
this.switchCreatorMode(row, (otherFields.fieldMode ? 1 : 0), true);
|
||||
}
|
||||
|
||||
if (this.saveOnEdit) {
|
||||
await this.item.saveTx();
|
||||
}
|
||||
|
|
@ -2295,6 +2342,18 @@
|
|||
</method>
|
||||
|
||||
|
||||
<method name="focusField">
|
||||
<parameter name="fieldName"/>
|
||||
<body>
|
||||
<![CDATA[
|
||||
let field = document.getAnonymousNodes(this)[0].querySelector(`[fieldname="${fieldName}"][ztabindex]`);
|
||||
if (!field) return false;
|
||||
return this._focusNextField(field.getAttribute('ztabindex'));
|
||||
]]>
|
||||
</body>
|
||||
</method>
|
||||
|
||||
|
||||
<!--
|
||||
Advance the field focus forward or backward
|
||||
|
||||
|
|
@ -2312,7 +2371,7 @@
|
|||
tabindex = parseInt(tabindex);
|
||||
|
||||
// Get all fields with ztabindex attributes
|
||||
var tabbableFields = box.querySelectorAll('*[ztabindex]');
|
||||
var tabbableFields = box.querySelectorAll('*[ztabindex]:not([disabled=true])');
|
||||
|
||||
if (!tabbableFields.length) {
|
||||
Zotero.debug("No tabbable fields found");
|
||||
|
|
@ -2323,16 +2382,20 @@
|
|||
if (back) {
|
||||
Zotero.debug('Looking for previous tabindex before ' + tabindex, 4);
|
||||
for (let i = tabbableFields.length - 1; i >= 0; i--) {
|
||||
if (parseInt(tabbableFields[i].getAttribute('ztabindex')) < tabindex) {
|
||||
let field = tabbableFields[i];
|
||||
let tabIndexHere = parseInt(field.getAttribute('ztabindex'));
|
||||
if (tabIndexHere !== -1 && tabIndexHere < tabindex) {
|
||||
next = tabbableFields[i];
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
Zotero.debug('Looking for tabindex ' + tabindex, 4);
|
||||
for (var pos = 0; pos < tabbableFields.length; pos++) {
|
||||
if (parseInt(tabbableFields[pos].getAttribute('ztabindex')) >= tabindex) {
|
||||
let field = tabbableFields[pos];
|
||||
let tabIndexHere = parseInt(field.getAttribute('ztabindex'));
|
||||
if (tabIndexHere !== -1 && tabIndexHere >= tabindex) {
|
||||
next = tabbableFields[pos];
|
||||
break;
|
||||
}
|
||||
|
|
@ -2345,7 +2408,7 @@
|
|||
}
|
||||
|
||||
// Drop-down needs to be focused
|
||||
if (next.id == 'item-type-menu') {
|
||||
if (next.id == 'item-type-menu' || next.classList.contains('zotero-focusable')) {
|
||||
next.focus();
|
||||
}
|
||||
// Fields need to be clicked
|
||||
|
|
|
|||
|
|
@ -353,15 +353,16 @@
|
|||
<body>
|
||||
<![CDATA[
|
||||
(async () => {
|
||||
let n = 0;
|
||||
while (!this._editorInstance && n++ < 100) {
|
||||
await Zotero.Promise.delay(10);
|
||||
}
|
||||
await this._editorInstance._initPromise;
|
||||
this._iframe.focus();
|
||||
try {
|
||||
let n = 0;
|
||||
while (!this._editorInstance && n++ < 100) {
|
||||
await Zotero.Promise.delay(10);
|
||||
}
|
||||
await this._editorInstance._initPromise;
|
||||
this._iframe.focus();
|
||||
this._editorInstance._iframeWindow.document.querySelector('.toolbar-button-return').focus();
|
||||
} catch(e) {
|
||||
}
|
||||
catch (e) {
|
||||
}
|
||||
})();
|
||||
]]>
|
||||
|
|
|
|||
|
|
@ -640,11 +640,8 @@ var CollectionTree = class CollectionTree extends LibraryTree {
|
|||
this.tree.invalidate();
|
||||
return;
|
||||
}
|
||||
if (action == 'refresh') {
|
||||
// If trash is refreshed, we probably need to update the icon from full to empty
|
||||
if (type == 'trash') {
|
||||
this.tree.invalidate();
|
||||
}
|
||||
if (action == 'refresh' && type != 'trash') {
|
||||
// Trash handled below
|
||||
return;
|
||||
}
|
||||
if (type == 'feed' && (action == 'unreadCountUpdated' || action == 'statusChanged')) {
|
||||
|
|
@ -826,6 +823,11 @@ var CollectionTree = class CollectionTree extends LibraryTree {
|
|||
}
|
||||
}
|
||||
}
|
||||
else if (action == 'refresh' && type == 'trash') {
|
||||
// We need to update the trash's status (full or empty), and if empty,
|
||||
// the row might be removed
|
||||
await this.reload();
|
||||
}
|
||||
|
||||
this.forceUpdate();
|
||||
var promise = this.waitForSelect();
|
||||
|
|
@ -839,6 +841,7 @@ var CollectionTree = class CollectionTree extends LibraryTree {
|
|||
* @param ids {String[]} list of row ids to be highlighted
|
||||
*/
|
||||
async setHighlightedRows(ids) {
|
||||
if (this._editing) return;
|
||||
try {
|
||||
this._highlightedRows = new Set();
|
||||
|
||||
|
|
@ -1614,7 +1617,7 @@ var CollectionTree = class CollectionTree extends LibraryTree {
|
|||
return false;
|
||||
}
|
||||
|
||||
let newAttachment = Zotero.Attachments.copyAttachmentToLibrary(item, targetLibraryID);
|
||||
let newAttachment = await Zotero.Attachments.copyAttachmentToLibrary(item, targetLibraryID);
|
||||
if (options.annotations) {
|
||||
await Zotero.Items.copyChildItems(item, newAttachment);
|
||||
}
|
||||
|
|
@ -2306,7 +2309,7 @@ var CollectionTree = class CollectionTree extends LibraryTree {
|
|||
}
|
||||
|
||||
if (showTrash) {
|
||||
let deletedItems = await Zotero.Items.getDeleted(libraryID);
|
||||
let deletedItems = await Zotero.Items.getDeleted(libraryID, true);
|
||||
if (deletedItems.length || Zotero.Prefs.get("showTrashWhenEmpty")) {
|
||||
var ref = {
|
||||
libraryID: libraryID
|
||||
|
|
|
|||
|
|
@ -48,7 +48,7 @@ function AnnotationBox({ data }) {
|
|||
<div className="title">{Zotero.getString('itemTypes.annotation')}</div>
|
||||
<div className="container">
|
||||
<div className="header">
|
||||
<div>{Zotero.getString('citation.locator.page')} {data.pageLabel}</div>
|
||||
<div>{Zotero.Cite.getLocatorString('page')} {data.pageLabel}</div>
|
||||
</div>
|
||||
{data.text !== undefined
|
||||
? <div className="text" style={textStyle}>{data.text}</div>
|
||||
|
|
|
|||
|
|
@ -235,7 +235,7 @@ const TabBar = forwardRef(function (props, ref) {
|
|||
|
||||
function handleWheel(event) {
|
||||
// Normalize wheel speed
|
||||
let x = event.deltaX;
|
||||
let x = event.deltaX || event.deltaY;
|
||||
if (x && event.deltaMode) {
|
||||
if (event.deltaMode === 1) {
|
||||
x *= 20;
|
||||
|
|
@ -302,7 +302,10 @@ const TabBar = forwardRef(function (props, ref) {
|
|||
onWheel={handleWheel}
|
||||
>
|
||||
<div className="pinned-tabs">
|
||||
<div className="tabs">
|
||||
<div
|
||||
className="tabs"
|
||||
onMouseOut={handleTabBarMouseOut}
|
||||
>
|
||||
{tabs.length ? renderTab(tabs[0], 0) : null}
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -660,7 +660,14 @@ class VirtualizedTable extends React.Component {
|
|||
this._isMouseDrag = true;
|
||||
}
|
||||
|
||||
_onDragEnd = () => {
|
||||
_onDragEnd = async () => {
|
||||
// macOS force-click sometimes causes a second mouseup event to be fired some time later
|
||||
// causing a collection change on dragend, so we add a delay here. It shouldn't cause any issues
|
||||
// because isMouseDrag is only used in mouseup handler to exactly prevent from accidentally switching
|
||||
// selection after dragend.
|
||||
if (Zotero.isMac) {
|
||||
await Zotero.Promise.delay(500);
|
||||
}
|
||||
this._isMouseDrag = false;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -51,7 +51,10 @@ var ZoteroContextPane = new function () {
|
|||
|
||||
var _itemContexts = [];
|
||||
var _notesContexts = [];
|
||||
|
||||
|
||||
var _globalDeckIndex = [];
|
||||
var _preventGlobalDeckChange = false;
|
||||
|
||||
// Using attribute instead of property to set 'selectedIndex'
|
||||
// is more reliable
|
||||
|
||||
|
|
@ -176,6 +179,20 @@ var ZoteroContextPane = new function () {
|
|||
if (Zotero_Tabs.deck.children.length == 1) {
|
||||
_notesContexts.forEach(x => x.notesListRef.current.setExpanded(false));
|
||||
}
|
||||
// Close tab specific notes if tab id no longer exists, but
|
||||
// do that only when unloaded tab is reloaded
|
||||
setTimeout(() => {
|
||||
var contextNodes = Array.from(_notesPaneDeck.children);
|
||||
for (let contextNode of contextNodes) {
|
||||
var nodes = Array.from(contextNode.querySelector('.zotero-context-pane-tab-notes-deck').children);
|
||||
for (let node of nodes) {
|
||||
var tabID = node.getAttribute('data-tab-id');
|
||||
if (!document.getElementById(tabID)) {
|
||||
node.remove();
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
else if (action == 'select') {
|
||||
// It seems that changing `hidden` or `collapsed` values might
|
||||
|
|
@ -188,6 +205,14 @@ var ZoteroContextPane = new function () {
|
|||
_tabCover.hidden = true;
|
||||
}
|
||||
else if (Zotero_Tabs.selectedType == 'reader') {
|
||||
if (_panesDeck.selectedIndex == 1
|
||||
&& _notesPaneDeck.selectedPanel.selectedIndex != 2
|
||||
&& !_preventGlobalDeckChange) {
|
||||
let libraryID = _notesPaneDeck.selectedPanel.getAttribute('data-library-id');
|
||||
_globalDeckIndex[libraryID] = _notesPaneDeck.selectedPanel.selectedIndex;
|
||||
}
|
||||
_preventGlobalDeckChange = false;
|
||||
|
||||
var reader = Zotero.Reader.getByTabID(Zotero_Tabs.selectedID);
|
||||
if (reader) {
|
||||
_tabCover.hidden = false;
|
||||
|
|
@ -207,11 +232,25 @@ var ZoteroContextPane = new function () {
|
|||
var notesContext = _getNotesContext(attachment.libraryID);
|
||||
notesContext.updateFromCache();
|
||||
}
|
||||
|
||||
let tabNotesDeck = _notesPaneDeck.selectedPanel.querySelector('.zotero-context-pane-tab-notes-deck');
|
||||
let selectedIndex = Array.from(tabNotesDeck.children).findIndex(x => x.getAttribute('data-tab-id') == ids[0]);
|
||||
if (selectedIndex != -1) {
|
||||
tabNotesDeck.setAttribute('selectedIndex', selectedIndex);
|
||||
_notesPaneDeck.selectedPanel.setAttribute('selectedIndex', 2);
|
||||
}
|
||||
else {
|
||||
let libraryID = _notesPaneDeck.selectedPanel.getAttribute('data-library-id');
|
||||
_notesPaneDeck.selectedPanel.setAttribute('selectedIndex', _globalDeckIndex[libraryID] || 0);
|
||||
}
|
||||
})();
|
||||
}
|
||||
|
||||
_contextPaneSplitter.setAttribute('hidden', false);
|
||||
// It seems that on heavy load (i.e. syncing) the line below doesn't set the correct value
|
||||
|
||||
_contextPane.setAttribute('collapsed', !(_contextPaneSplitter.getAttribute('state') != 'collapsed'));
|
||||
// It seems that on heavy load (i.e. syncing) the line below doesn't set the correct value,
|
||||
// therefore we repeat the same operation at the end of JS message queue
|
||||
setTimeout(() => {
|
||||
_contextPane.setAttribute('collapsed', !(_contextPaneSplitter.getAttribute('state') != 'collapsed'));
|
||||
});
|
||||
|
|
@ -243,9 +282,14 @@ var ZoteroContextPane = new function () {
|
|||
|
||||
if (splitter.getAttribute('state') != 'collapsed') {
|
||||
if (_panesDeck.selectedIndex == 1) {
|
||||
var node = _notesPaneDeck.selectedPanel;
|
||||
if (node.selectedIndex == 1) {
|
||||
return node.querySelector('zoteronoteeditor');
|
||||
var libraryContext = _notesPaneDeck.selectedPanel;
|
||||
// Global note
|
||||
if (libraryContext.selectedIndex == 1) {
|
||||
return libraryContext.querySelector('zoteronoteeditor');
|
||||
}
|
||||
// Tab specific child note
|
||||
else if (libraryContext.selectedIndex == 2) {
|
||||
return libraryContext.querySelector('.zotero-context-pane-tab-notes-deck').selectedPanel.querySelector('zoteronoteeditor');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -419,12 +463,21 @@ var ZoteroContextPane = new function () {
|
|||
editor.className = 'zotero-context-pane-pinned-note';
|
||||
editor.setAttribute('flex', 1);
|
||||
noteContainer.append(title, editor);
|
||||
|
||||
var tabNotesContainer = document.createElement('vbox');
|
||||
var title = document.createElement('vbox');
|
||||
title.className = 'zotero-context-pane-editor-parent-line';
|
||||
let tabNotesDeck = document.createElement('deck');
|
||||
tabNotesDeck.className = 'zotero-context-pane-tab-notes-deck';
|
||||
tabNotesDeck.setAttribute('flex', 1);
|
||||
tabNotesContainer.append(title, tabNotesDeck);
|
||||
|
||||
let contextNode = document.createElement('deck');
|
||||
contextNode.append(list, noteContainer);
|
||||
contextNode.append(list, noteContainer, tabNotesContainer);
|
||||
_notesPaneDeck.append(contextNode);
|
||||
|
||||
contextNode.className = 'context-node';
|
||||
contextNode.setAttribute('data-library-id', libraryID);
|
||||
contextNode.setAttribute('selectedIndex', 0);
|
||||
|
||||
editor.returnHandler = () => {
|
||||
|
|
@ -440,8 +493,15 @@ var ZoteroContextPane = new function () {
|
|||
if (!attachment) {
|
||||
return;
|
||||
}
|
||||
var annotations = attachment.getAnnotations().filter(x => x.annotationType != 'ink');
|
||||
if (!annotations.length) {
|
||||
return;
|
||||
}
|
||||
var note = await Zotero.EditorInstance.createNoteFromAnnotations(
|
||||
attachment.getAnnotations().filter(x => x.annotationType != 'ink'), child && attachment.parentID
|
||||
annotations,
|
||||
{
|
||||
parentID: child && attachment.parentID
|
||||
}
|
||||
);
|
||||
|
||||
_updateAddToNote();
|
||||
|
|
@ -449,7 +509,7 @@ var ZoteroContextPane = new function () {
|
|||
input.value = '';
|
||||
_updateNotesList();
|
||||
|
||||
_setPinnedNote(note.id);
|
||||
_setPinnedNote(note);
|
||||
}
|
||||
|
||||
function _createNote(child) {
|
||||
|
|
@ -463,10 +523,7 @@ var ZoteroContextPane = new function () {
|
|||
}
|
||||
item.parentID = attachment.parentID;
|
||||
}
|
||||
editor.mode = 'edit';
|
||||
editor.item = item;
|
||||
editor.parentItem = null;
|
||||
editor.focus();
|
||||
_setPinnedNote(item);
|
||||
_updateAddToNote();
|
||||
|
||||
input.value = '';
|
||||
|
|
@ -672,7 +729,10 @@ var ZoteroContextPane = new function () {
|
|||
<NotesList
|
||||
ref={notesListRef}
|
||||
onClick={(id) => {
|
||||
_setPinnedNote(id);
|
||||
let item = Zotero.Items.get(id);
|
||||
if (item) {
|
||||
_setPinnedNote(item);
|
||||
}
|
||||
}}
|
||||
onContextMenu={(id, event) => {
|
||||
document.getElementById('context-pane-list-move-to-trash').setAttribute('disabled', readOnly);
|
||||
|
|
@ -727,21 +787,63 @@ var ZoteroContextPane = new function () {
|
|||
return !Zotero.Libraries.get(libraryID).editable;
|
||||
}
|
||||
|
||||
function _setPinnedNote(itemID) {
|
||||
var item = Zotero.Items.get(itemID);
|
||||
if (!item) {
|
||||
return;
|
||||
}
|
||||
function _setPinnedNote(item) {
|
||||
var readOnly = _isLibraryReadOnly(item.libraryID);
|
||||
var context = _getNotesContext(item.libraryID);
|
||||
if (context) {
|
||||
var { editor, node } = context;
|
||||
node.setAttribute('selectedIndex', 1);
|
||||
editor.mode = readOnly ? 'view' : 'edit';
|
||||
editor.item = item;
|
||||
editor.parentItem = null;
|
||||
|
||||
node.querySelector('.zotero-context-pane-editor-parent-line').innerHTML = '';
|
||||
|
||||
let isChild = false;
|
||||
var reader = Zotero.Reader.getByTabID(Zotero_Tabs.selectedID);
|
||||
if (reader) {
|
||||
let attachment = Zotero.Items.get(reader.itemID);
|
||||
if (attachment.parentItemID == item.parentItemID) {
|
||||
isChild = true;
|
||||
}
|
||||
}
|
||||
|
||||
var tabNotesDeck = _notesPaneDeck.selectedPanel.querySelector('.zotero-context-pane-tab-notes-deck');
|
||||
var parentTitleContainer;
|
||||
if (isChild) {
|
||||
var vbox = document.createElement('vbox');
|
||||
vbox.setAttribute('data-tab-id', Zotero_Tabs.selectedID);
|
||||
vbox.style.display = 'flex';
|
||||
|
||||
editor = document.createElement('zoteronoteeditor');
|
||||
editor.style.display = 'flex';
|
||||
editor.style.width = '100%';
|
||||
vbox.append(editor);
|
||||
|
||||
tabNotesDeck.append(vbox);
|
||||
|
||||
editor.mode = readOnly ? 'view' : 'edit';
|
||||
editor.item = item;
|
||||
editor.parentItem = null;
|
||||
editor.returnHandler = () => {
|
||||
_panesDeck.setAttribute('selectedIndex', 1);
|
||||
_notesPaneDeck.selectedPanel.setAttribute('selectedIndex', 0);
|
||||
vbox.remove();
|
||||
_updateAddToNote();
|
||||
_preventGlobalDeckChange = true;
|
||||
};
|
||||
|
||||
_notesPaneDeck.selectedPanel.setAttribute('selectedIndex', 2);
|
||||
tabNotesDeck.setAttribute('selectedIndex', tabNotesDeck.children.length - 1);
|
||||
|
||||
parentTitleContainer = _notesPaneDeck.selectedPanel.children[2].querySelector('.zotero-context-pane-editor-parent-line');
|
||||
}
|
||||
else {
|
||||
node.setAttribute('selectedIndex', 1);
|
||||
editor.mode = readOnly ? 'view' : 'edit';
|
||||
editor.item = item;
|
||||
editor.parentItem = null;
|
||||
|
||||
parentTitleContainer = node.querySelector('.zotero-context-pane-editor-parent-line');
|
||||
}
|
||||
|
||||
editor.focus();
|
||||
|
||||
parentTitleContainer.innerHTML = '';
|
||||
var parentItem = item.parentItem;
|
||||
if (parentItem) {
|
||||
var container = document.createElementNS(HTML_NS, 'div');
|
||||
|
|
@ -752,7 +854,7 @@ var ZoteroContextPane = new function () {
|
|||
title.append(parentItem.getDisplayTitle());
|
||||
title.className = 'parent-title';
|
||||
container.append(img, title);
|
||||
node.querySelector('.zotero-context-pane-editor-parent-line').append(container);
|
||||
parentTitleContainer.append(container);
|
||||
}
|
||||
_updateAddToNote();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9,6 +9,9 @@ const parseCitavi5Quads = (quadsRaw) => {
|
|||
const ImportCitaviAnnotatons = async (translation) => {
|
||||
const IDMap = translation._itemSaver._IDMap;
|
||||
const ZU = translation._sandboxZotero.Utilities;
|
||||
|
||||
// stream might be closed by now, re-init to make sure getXML() works
|
||||
translation._io.init('xml/dom');
|
||||
const doc = translation._sandboxZotero.getXML();
|
||||
const isCitavi5 = ZU.xpathText(doc, '//CitaviExchangeData/@Version').startsWith('5');
|
||||
var annotationNodes = ZU.xpath(doc, '//Annotations/Annotation');
|
||||
|
|
@ -29,17 +32,29 @@ const ImportCitaviAnnotatons = async (translation) => {
|
|||
const stageProgress = 50;
|
||||
let progress = baseProgress;
|
||||
translation.getProgress = () => progress;
|
||||
|
||||
|
||||
for (var i = 0, n = annotationNodes.length; i < n; i++) {
|
||||
const id = ZU.xpathText(annotationNodes[i], '@id');
|
||||
const quadsRaw = ZU.xpathText(annotationNodes[i], './Quads');
|
||||
const locationID = ZU.xpathText(annotationNodes[i], './LocationID');
|
||||
|
||||
const location = ZU.xpath(doc, `//Locations/Location[@${isCitavi5 ? 'ID' : 'id'}='${locationID}']`)[0];
|
||||
const location = ZU.xpath(doc, `//Locations/Location[@id='${locationID}']|//Locations/Location[@ID='${locationID}']`)[0];
|
||||
|
||||
if (!location) {
|
||||
Zotero.debug(`Missing <Location> entry for annotation ${id}, skipping...`);
|
||||
continue;
|
||||
}
|
||||
|
||||
const referenceID = ZU.xpathText(location, './ReferenceID');
|
||||
const entityLink = ZU.xpath(doc, `//EntityLinks/EntityLink[TargetID='${id}']`)[0];
|
||||
|
||||
if (!entityLink) {
|
||||
Zotero.debug(`Missing <EntityLink> entry for annotation ${id}, skipping...`);
|
||||
continue;
|
||||
}
|
||||
|
||||
const entitySourceID = ZU.xpathText(entityLink, './SourceID');
|
||||
const knowledgeItem = ZU.xpath(doc, `//KnowledgeItems/KnowledgeItem[@${isCitavi5 ? 'ID' : 'id'}='${entitySourceID}']`)[0];
|
||||
const knowledgeItem = ZU.xpath(doc, `//KnowledgeItems/KnowledgeItem[@id='${entitySourceID}']|//KnowledgeItems/KnowledgeItem[@ID='${entitySourceID}']`)[0];
|
||||
const keywordsIDsText = ZU.xpathText(doc, `//KnowledgeItemKeywords/OnetoN[starts-with(text(), "${entitySourceID}")]`);
|
||||
const keywords = keywordsIDsText
|
||||
? keywordsIDsText
|
||||
|
|
@ -134,16 +149,22 @@ const ImportCitaviAnnotatons = async (translation) => {
|
|||
|
||||
annotations.push(annotation);
|
||||
});
|
||||
|
||||
annotations = await Zotero.PDFWorker.processCitaviAnnotations(
|
||||
itemAttachment.getFilePath(), annotations
|
||||
);
|
||||
|
||||
annotations.forEach((annotation) => {
|
||||
promises.push(Zotero.Annotations.saveFromJSON(
|
||||
itemAttachment, annotation, { skipSelect: true }
|
||||
));
|
||||
});
|
||||
|
||||
|
||||
try {
|
||||
// eslint-disable-next-line no-await-in-loop
|
||||
annotations = await Zotero.PDFWorker.processCitaviAnnotations(
|
||||
itemAttachment.getFilePath(), annotations
|
||||
);
|
||||
annotations.forEach((annotation) => {
|
||||
promises.push(Zotero.Annotations.saveFromJSON(
|
||||
itemAttachment, annotation, { skipSelect: true }
|
||||
));
|
||||
});
|
||||
}
|
||||
catch (e) {
|
||||
Zotero.debug(`Could not process annotations for attachment item ${itemAttachment.key} (file path: ${itemAttachment.getFilePath()})`);
|
||||
}
|
||||
|
||||
progress = baseProgress + Math.ceil((i / annotationNodes.length) * stageProgress);
|
||||
translation._runHandler('itemDone', []);
|
||||
|
|
|
|||
|
|
@ -57,7 +57,12 @@ var Zotero_Import_Wizard = {
|
|||
|
||||
Zotero.Translators.init(); // async
|
||||
},
|
||||
|
||||
|
||||
onCancel: function () {
|
||||
if (this._translation && this._translation.interrupt) {
|
||||
this._translation.interrupt();
|
||||
}
|
||||
},
|
||||
|
||||
onModeChosen: async function () {
|
||||
var wizard = this._wizard;
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@
|
|||
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
|
||||
xmlns:html="http://www.w3.org/1999/xhtml"
|
||||
title="&zotero.import;"
|
||||
onwizardcancel="Zotero_Import_Wizard.onCancel()"
|
||||
onload="Zotero_Import_Wizard.init()">
|
||||
|
||||
<script src="../include.js"/>
|
||||
|
|
|
|||
|
|
@ -33,7 +33,7 @@ const getNextLinkFromResponse = (response) => {
|
|||
|
||||
const apiFetchUrl = async (tokens, url, headers = {}, options = {}) => {
|
||||
headers = { ...headers, Authorization: `Bearer ${tokens.access_token}` };
|
||||
options = { ...options, headers };
|
||||
options = { ...options, headers, timeout: 60000 };
|
||||
const method = 'GET';
|
||||
|
||||
// Run the request. If we see 401 or 403, try to refresh tokens and run the request again
|
||||
|
|
@ -64,16 +64,18 @@ const get = async (tokens, endPoint, params = {}, headers = {}, options = {}) =>
|
|||
return JSON.parse(response.responseText);
|
||||
};
|
||||
|
||||
const getAll = async (tokens, endPoint, params = {}, headers = {}, options = {}) => {
|
||||
const getAll = async (tokens, endPoint, params = {}, headers = {}, options = {}, interruptChecker = () => {}) => {
|
||||
const PER_PAGE = endPoint === 'annotations' ? 200 : 500;
|
||||
const response = await apiFetch(tokens, endPoint, { ...params, limit: PER_PAGE }, headers, options);
|
||||
var next = getNextLinkFromResponse(response);
|
||||
var data = JSON.parse(response.responseText);
|
||||
interruptChecker();
|
||||
|
||||
while (next) {
|
||||
const response = await apiFetchUrl(tokens, next, headers, options); //eslint-disable-line no-await-in-loop
|
||||
data = [...data, ...JSON.parse(response.responseText)];
|
||||
next = getNextLinkFromResponse(response);
|
||||
interruptChecker();
|
||||
}
|
||||
|
||||
return data;
|
||||
|
|
|
|||
|
|
@ -1,15 +1,29 @@
|
|||
/* global map:false, mendeleyOnlineMappings:false, mendeleyAPIUtils:false */
|
||||
var EXPORTED_SYMBOLS = ["Zotero_Import_Mendeley"];
|
||||
/* eslint-disable no-await-in-loop, camelcase */
|
||||
/* global mendeleyDBMaps:false, mendeleyOnlineMappings:false, mendeleyAPIUtils:false */
|
||||
var EXPORTED_SYMBOLS = ["Zotero_Import_Mendeley"]; //eslint-disable-line no-unused-vars
|
||||
|
||||
Components.utils.import("resource://gre/modules/Services.jsm");
|
||||
Components.utils.import("resource://gre/modules/osfile.jsm");
|
||||
Services.scriptloader.loadSubScript("chrome://zotero/content/include.js");
|
||||
Services.scriptloader.loadSubScript("chrome://zotero/content/import/mendeley/mendeleyOnlineMappings.js");
|
||||
Services.scriptloader.loadSubScript("chrome://zotero/content/import/mendeley/mendeleyAPIUtils.js");
|
||||
Services.scriptloader.loadSubScript("chrome://zotero/content/import/mendeley/mendeleySchemaMap.js");
|
||||
|
||||
const { apiTypeToDBType, apiFieldToDBField } = mendeleyOnlineMappings;
|
||||
const { apiFetch, get, getAll, getTokens } = mendeleyAPIUtils;
|
||||
|
||||
const colorMap = new Map();
|
||||
colorMap.set('rgb(255, 245, 173)', '#ffd400');
|
||||
colorMap.set('#fff5ad', '#ffd400');
|
||||
colorMap.set('rgb(255, 181, 182)', '#ff6666');
|
||||
colorMap.set('#ffb5b6', '#ff6666');
|
||||
colorMap.set('rgb(186, 226, 255)', '#2ea8e5');
|
||||
colorMap.set('#bae2ff', '#2ea8e5');
|
||||
colorMap.set('rgb(211, 194, 255)', '#a28ae5');
|
||||
colorMap.set('#d3c2ff', '#a28ae5');
|
||||
colorMap.set('rgb(220, 255, 176)', '#5fb236');
|
||||
colorMap.set('#dcffb0', '#5fb236');
|
||||
|
||||
var Zotero_Import_Mendeley = function () {
|
||||
this.createNewCollection = null;
|
||||
this.linkFiles = null;
|
||||
|
|
@ -17,13 +31,32 @@ var Zotero_Import_Mendeley = function () {
|
|||
this.mendeleyCode = null;
|
||||
|
||||
this._tokens = null;
|
||||
this._db;
|
||||
this._file;
|
||||
this._db = null;
|
||||
this._file = null;
|
||||
this._saveOptions = null;
|
||||
this._itemDone;
|
||||
this._itemDone = () => {};
|
||||
this._progress = 0;
|
||||
this._progressMax;
|
||||
this._progressMax = 0;
|
||||
this._tmpFilesToDelete = [];
|
||||
this._caller = null;
|
||||
this._interrupted = false;
|
||||
this._totalSize = 0;
|
||||
this._started = Date.now();
|
||||
this._interruptChecker = (tickProgress = false) => {
|
||||
if (this._interrupted) {
|
||||
throw new Error(`Mendeley import interrupted!
|
||||
Started: ${this._started} (${Math.round((Date.now() - this._started) / 1000)}s ago)
|
||||
Progress: ${this._progress} / ${this._progressMax}
|
||||
New items created: ${this.newItems.length}
|
||||
Total size of files to download: ${Math.round(this._totalSize / 1024)}KB
|
||||
`);
|
||||
}
|
||||
|
||||
if (tickProgress) {
|
||||
this._progress++;
|
||||
this._itemDone();
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
Zotero_Import_Mendeley.prototype.setLocation = function (file) {
|
||||
|
|
@ -32,9 +65,9 @@ Zotero_Import_Mendeley.prototype.setLocation = function (file) {
|
|||
|
||||
Zotero_Import_Mendeley.prototype.setHandler = function (name, handler) {
|
||||
switch (name) {
|
||||
case 'itemDone':
|
||||
this._itemDone = handler;
|
||||
break;
|
||||
case 'itemDone':
|
||||
this._itemDone = handler;
|
||||
break;
|
||||
}
|
||||
};
|
||||
|
||||
|
|
@ -57,34 +90,16 @@ Zotero_Import_Mendeley.prototype.translate = async function (options = {}) {
|
|||
...(options.saveOptions || {})
|
||||
};
|
||||
|
||||
if (true) {
|
||||
Services.scriptloader.loadSubScript("chrome://zotero/content/import/mendeley/mendeleySchemaMap.js");
|
||||
}
|
||||
// TEMP: Load uncached from ~/zotero-client for development
|
||||
else {
|
||||
Components.utils.import("resource://gre/modules/FileUtils.jsm");
|
||||
let file = FileUtils.getDir("Home", []);
|
||||
file = OS.Path.join(file.path, 'zotero-client', 'chrome', 'content', 'zotero', 'import', 'mendeley', 'mendeleySchemaMap.js');
|
||||
let fileURI = OS.Path.toFileURI(file);
|
||||
let xmlhttp = await Zotero.HTTP.request(
|
||||
'GET',
|
||||
fileURI,
|
||||
{
|
||||
noCache: true,
|
||||
responseType: 'text'
|
||||
}
|
||||
);
|
||||
eval(xmlhttp.response);
|
||||
}
|
||||
|
||||
const libraryID = options.libraryID || Zotero.Libraries.userLibraryID;
|
||||
const { key: rootCollectionKey } = options.collections
|
||||
? Zotero.Collections.getLibraryAndKeyFromID(options.collections[0])
|
||||
: {};
|
||||
|
||||
Zotero.debug(`Begining Mendeley import at ${this._started}. libraryID: ${libraryID}, linkFiles: ${this.linkFiles}, rootCollectionKey: ${rootCollectionKey}`);
|
||||
|
||||
// TODO: Get appropriate version based on schema version
|
||||
const mapVersion = 83;
|
||||
map = map[mapVersion];
|
||||
const map = mendeleyDBMaps[mapVersion];
|
||||
|
||||
const mendeleyGroupID = 0;
|
||||
|
||||
|
|
@ -94,7 +109,7 @@ Zotero_Import_Mendeley.prototype.translate = async function (options = {}) {
|
|||
if (this._file) {
|
||||
this._db = new Zotero.DBConnection(this._file);
|
||||
}
|
||||
|
||||
|
||||
try {
|
||||
if (this._file && !await this._isValidDatabase()) {
|
||||
throw new Error("Not a valid Mendeley database");
|
||||
|
|
@ -108,14 +123,22 @@ Zotero_Import_Mendeley.prototype.translate = async function (options = {}) {
|
|||
throw new Error("Missing import token");
|
||||
}
|
||||
|
||||
// we don't know how long the import will be but want to show progress to give
|
||||
// feedback that import has started so we arbitrary set progress at 2%
|
||||
this._progress = 1;
|
||||
this._progressMax = 50;
|
||||
this._itemDone();
|
||||
|
||||
const folders = this._tokens
|
||||
? await this._getFoldersAPI(mendeleyGroupID)
|
||||
: await this._getFoldersDB(mendeleyGroupID);
|
||||
|
||||
const collectionJSON = this._foldersToAPIJSON(folders, rootCollectionKey);
|
||||
const folderKeys = this._getFolderKeys(collectionJSON);
|
||||
|
||||
await this._saveCollections(libraryID, collectionJSON, folderKeys);
|
||||
|
||||
this._interruptChecker(true);
|
||||
//
|
||||
// Items
|
||||
//
|
||||
|
|
@ -123,40 +146,59 @@ Zotero_Import_Mendeley.prototype.translate = async function (options = {}) {
|
|||
? await this._getDocumentsAPI(mendeleyGroupID)
|
||||
: await this._getDocumentsDB(mendeleyGroupID);
|
||||
|
||||
this._progressMax = documents.length;
|
||||
// Update progress to reflect items to import and remaining meta data stages
|
||||
// We arbitrary set progress at approx 4%. We then add 8, one "tick" for each remaining meta data download.
|
||||
this._progress = Math.max(Math.floor(0.04 * documents.length), 2);
|
||||
this._progressMax = documents.length + this._progress + 8;
|
||||
// Get various attributes mapped to document ids
|
||||
let urls = this._tokens
|
||||
? await this._getDocumentURLsAPI(documents)
|
||||
: await this._getDocumentURLsDB(mendeleyGroupID);
|
||||
|
||||
this._interruptChecker(true);
|
||||
|
||||
let creators = this._tokens
|
||||
? await this._getDocumentCreatorsAPI(documents)
|
||||
: await this._getDocumentCreatorsDB(mendeleyGroupID, map.creatorTypes);
|
||||
|
||||
this._interruptChecker(true);
|
||||
|
||||
let tags = this._tokens
|
||||
? await this._getDocumentTagsAPI(documents)
|
||||
: await this._getDocumentTagsDB(mendeleyGroupID);
|
||||
|
||||
this._interruptChecker(true);
|
||||
|
||||
let collections = this._tokens
|
||||
? await this._getDocumentCollectionsAPI(documents, rootCollectionKey, folderKeys)
|
||||
: await this._getDocumentCollectionsDB(mendeleyGroupID, documents, rootCollectionKey, folderKeys);
|
||||
|
||||
this._interruptChecker(true);
|
||||
|
||||
let files = this._tokens
|
||||
? await this._getDocumentFilesAPI(documents)
|
||||
: await this._getDocumentFilesDB(mendeleyGroupID);
|
||||
|
||||
|
||||
this._interruptChecker(true);
|
||||
|
||||
let annotations = this._tokens
|
||||
? await this._getDocumentAnnotationsAPI(mendeleyGroupID)
|
||||
: await this._getDocumentAnnotationsDB(mendeleyGroupID);
|
||||
|
||||
this._interruptChecker(true);
|
||||
|
||||
let profile = this._tokens
|
||||
? await this._getProfileAPI()
|
||||
: await this._getProfileDB();
|
||||
|
||||
this._interruptChecker(true);
|
||||
|
||||
let groups = this._tokens
|
||||
? await this._getGroupsAPI()
|
||||
: await this._getGroupsDB();
|
||||
|
||||
this._interruptChecker(true);
|
||||
|
||||
const fileHashLookup = new Map();
|
||||
|
||||
for (let [documentID, fileEntries] of files) {
|
||||
|
|
@ -165,7 +207,6 @@ Zotero_Import_Mendeley.prototype.translate = async function (options = {}) {
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
for (let group of groups) {
|
||||
let groupAnnotations = this._tokens
|
||||
? await this._getDocumentAnnotationsAPI(group.id, profile.id)
|
||||
|
|
@ -263,11 +304,12 @@ Zotero_Import_Mendeley.prototype.translate = async function (options = {}) {
|
|||
);
|
||||
}
|
||||
this.newItems.push(Zotero.Items.get(documentIDMap.get(document.id)));
|
||||
this._progress++;
|
||||
if (this._itemDone) {
|
||||
this._itemDone();
|
||||
}
|
||||
this._interruptChecker(true);
|
||||
}
|
||||
Zotero.debug(`Completed Mendeley import in ${Math.round((Date.now() - this._started) / 1000)}s. (Started: ${this._started})`);
|
||||
}
|
||||
catch (e) {
|
||||
Zotero.logError(e);
|
||||
}
|
||||
finally {
|
||||
try {
|
||||
|
|
@ -275,6 +317,7 @@ Zotero_Import_Mendeley.prototype.translate = async function (options = {}) {
|
|||
await this._db.closeDatabase();
|
||||
}
|
||||
if (this._tokens) {
|
||||
Zotero.debug(`Clearing ${this._tmpFilesToDelete.length} temporary files after Mendeley import`);
|
||||
await Promise.all(
|
||||
this._tmpFilesToDelete.map(f => this._removeTemporaryFile(f))
|
||||
);
|
||||
|
|
@ -288,14 +331,20 @@ Zotero_Import_Mendeley.prototype.translate = async function (options = {}) {
|
|||
}
|
||||
};
|
||||
|
||||
Zotero_Import_Mendeley.prototype.interrupt = function () {
|
||||
this._interrupted = true;
|
||||
|
||||
if (this._caller) {
|
||||
this._caller.stop();
|
||||
}
|
||||
};
|
||||
|
||||
Zotero_Import_Mendeley.prototype._removeTemporaryFile = async function (file) {
|
||||
const containingDir = OS.Path.dirname(file);
|
||||
try {
|
||||
await Zotero.File.removeIfExists(file);
|
||||
await OS.File.removeEmptyDir(containingDir);
|
||||
}
|
||||
catch (e) {
|
||||
Zotero.logError(e);
|
||||
Zotero.logError("Error while removing temporary file " + file + ": " + e);
|
||||
}
|
||||
};
|
||||
|
||||
|
|
@ -345,7 +394,7 @@ Zotero_Import_Mendeley.prototype._getFoldersAPI = async function (groupID) {
|
|||
if (groupID && groupID !== 0) {
|
||||
params.group_id = groupID; //eslint-disable-line camelcase
|
||||
}
|
||||
return (await getAll(this._tokens, 'folders', params, headers)).map(f => ({
|
||||
return (await getAll(this._tokens, 'folders', params, headers, {}, this._interruptChecker)).map(f => ({
|
||||
id: f.id,
|
||||
uuid: f.id,
|
||||
name: f.name,
|
||||
|
|
@ -365,11 +414,11 @@ Zotero_Import_Mendeley.prototype._foldersToAPIJSON = function (folderRows, paren
|
|||
};
|
||||
|
||||
Zotero_Import_Mendeley.prototype._getFolderDescendents = function (folderID, folderKey, folderRows, maxDepth) {
|
||||
if (maxDepth == 0) return []
|
||||
if (maxDepth == 0) return [];
|
||||
var descendents = [];
|
||||
var children = folderRows
|
||||
.filter(f => f.parentId == folderID)
|
||||
.map(f => {
|
||||
.map((f) => {
|
||||
let c = {
|
||||
folderID: f.id,
|
||||
remoteUUID: f.remoteUuid,
|
||||
|
|
@ -492,7 +541,7 @@ Zotero_Import_Mendeley.prototype._getDocumentsAPI = async function (groupID) {
|
|||
}
|
||||
|
||||
|
||||
return (await getAll(this._tokens, 'documents', params, headers)).map(d => ({
|
||||
return (await getAll(this._tokens, 'documents', params, headers, {}, this._interruptChecker)).map(d => ({
|
||||
...d,
|
||||
uuid: d.id,
|
||||
remoteUuid: d.id
|
||||
|
|
@ -693,12 +742,13 @@ Zotero_Import_Mendeley.prototype._fetchFile = async function (fileID, filePath)
|
|||
Zotero_Import_Mendeley.prototype._getDocumentFilesAPI = async function (documents) {
|
||||
const map = new Map();
|
||||
|
||||
let totalSize = 0;
|
||||
this._totalSize = 0;
|
||||
|
||||
Components.utils.import("resource://zotero/concurrentCaller.js");
|
||||
var caller = new ConcurrentCaller({
|
||||
this._caller = new ConcurrentCaller({
|
||||
numConcurrent: 6,
|
||||
onError: e => Zotero.logError(e),
|
||||
logger: Zotero.debug,
|
||||
Promise: Zotero.Promise
|
||||
});
|
||||
|
||||
|
|
@ -712,7 +762,7 @@ Zotero_Import_Mendeley.prototype._getDocumentFilesAPI = async function (document
|
|||
let tmpFile = OS.Path.join(Zotero.getTempDirectory().path, `m-api-${file.id}.${ext}`);
|
||||
|
||||
this._tmpFilesToDelete.push(tmpFile);
|
||||
caller.add(this._fetchFile.bind(this, file.id, tmpFile));
|
||||
this._caller.add(this._fetchFile.bind(this, file.id, tmpFile));
|
||||
files.push({
|
||||
fileURL: OS.Path.toFileURI(tmpFile),
|
||||
title: file.file_name || '',
|
||||
|
|
@ -720,13 +770,14 @@ Zotero_Import_Mendeley.prototype._getDocumentFilesAPI = async function (document
|
|||
hash: file.filehash,
|
||||
fileBaseName
|
||||
});
|
||||
totalSize += file.size;
|
||||
this._totalSize += file.size;
|
||||
this._progressMax += 1;
|
||||
}
|
||||
map.set(doc.id, files);
|
||||
}
|
||||
// TODO: check if enough space available totalSize
|
||||
await caller.runAll();
|
||||
await this._caller.runAll();
|
||||
this._caller = null;
|
||||
return map;
|
||||
};
|
||||
|
||||
|
|
@ -823,7 +874,7 @@ Zotero_Import_Mendeley.prototype._getDocumentAnnotationsAPI = async function (gr
|
|||
}
|
||||
|
||||
const map = new Map();
|
||||
(await getAll(this._tokens, 'annotations', params, { Accept: 'application/vnd.mendeley-annotation.1+json' }))
|
||||
(await getAll(this._tokens, 'annotations', params, { Accept: 'application/vnd.mendeley-annotation.1+json' }, {}, this._interruptChecker))
|
||||
.forEach((a) => {
|
||||
if (profileID !== null && a.profile_id !== profileID) {
|
||||
// optionally filter annotations by profile id
|
||||
|
|
@ -885,7 +936,7 @@ Zotero_Import_Mendeley.prototype._getGroupsAPI = async function () {
|
|||
const params = { type: 'all' };
|
||||
const headers = { Accept: 'application/vnd.mendeley-group-list+json' };
|
||||
|
||||
return getAll(this._tokens, 'groups/v2', params, headers);
|
||||
return getAll(this._tokens, 'groups/v2', params, headers, {}, this._interruptChecker);
|
||||
};
|
||||
|
||||
Zotero_Import_Mendeley.prototype._getGroupsDB = async function () {
|
||||
|
|
@ -985,14 +1036,14 @@ Zotero_Import_Mendeley.prototype._documentToAPIJSON = async function (map, docum
|
|||
|
||||
for (let field in parent) {
|
||||
switch (field) {
|
||||
case 'itemType':
|
||||
case 'key':
|
||||
case 'parentItem':
|
||||
case 'note':
|
||||
case 'creators':
|
||||
case 'dateAdded':
|
||||
case 'dateModified':
|
||||
continue;
|
||||
case 'itemType':
|
||||
case 'key':
|
||||
case 'parentItem':
|
||||
case 'note':
|
||||
case 'creators':
|
||||
case 'dateAdded':
|
||||
case 'dateModified':
|
||||
continue;
|
||||
}
|
||||
|
||||
// Move unknown/invalid fields to Extra
|
||||
|
|
@ -1035,7 +1086,7 @@ Zotero_Import_Mendeley.prototype._documentToAPIJSON = async function (map, docum
|
|||
// seriesEditor isn't valid on some item types (e.g., book)
|
||||
if (creator.creatorType == 'seriesEditor'
|
||||
&& !Zotero.CreatorTypes.isValidForItemType(
|
||||
Zotero.CreatorTypes.getID('seriesEditor'), itemTypeID)) {
|
||||
Zotero.CreatorTypes.getID('seriesEditor'), itemTypeID)) {
|
||||
creator.creatorType = 'editor';
|
||||
}
|
||||
}
|
||||
|
|
@ -1160,7 +1211,6 @@ Zotero_Import_Mendeley.prototype._processField = function (parent, children, zFi
|
|||
}
|
||||
else {
|
||||
Zotero.warn(`Unknown function subfield: ${subfield}`);
|
||||
return;
|
||||
}
|
||||
}
|
||||
else {
|
||||
|
|
@ -1191,20 +1241,21 @@ Zotero_Import_Mendeley.prototype._makeCreator = function (creatorType, firstName
|
|||
Zotero_Import_Mendeley.prototype._addExtraField = function (extra, field, val) {
|
||||
// Strip the field if it appears at the beginning of the value (to avoid "DOI: DOI: 10...")
|
||||
if (typeof val == 'string') {
|
||||
val = val.replace(new RegExp(`^${field}:\s*`, 'i'), "");
|
||||
val = val.replace(new RegExp(`^${field}:\\s*`, 'i'), "");
|
||||
}
|
||||
extra = extra ? extra + '\n' : '';
|
||||
if (field != 'arXiv') {
|
||||
field = field[0].toUpperCase() + field.substr(1);
|
||||
field = field.replace(/([a-z])([A-Z][a-z])/, "$1 $2");
|
||||
}
|
||||
|
||||
return extra + `${field}: ${val}`;
|
||||
};
|
||||
|
||||
Zotero_Import_Mendeley.prototype._convertNote = function (note) {
|
||||
return note
|
||||
// Add newlines after <br>
|
||||
.replace(/<br\s*\/>/g, '<br\/>\n')
|
||||
.replace(/<br\s*\/>/g, '<br/>\n')
|
||||
//
|
||||
// Legacy pre-HTML stuff
|
||||
//
|
||||
|
|
@ -1360,7 +1411,7 @@ Zotero_Import_Mendeley.prototype._findExistingItem = async function (libraryID,
|
|||
Zotero.debug(`Found existing item ${existingItem.libraryKey} for `
|
||||
+ `${predicate} ${itemJSON.relations[predicate]}`);
|
||||
return existingItem;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
Zotero_Import_Mendeley.prototype._getItemByRelation = async function (libraryID, predicate, object) {
|
||||
|
|
@ -1443,7 +1494,7 @@ Zotero_Import_Mendeley.prototype._saveFilesAndAnnotations = async function (file
|
|||
Zotero.logError(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
Zotero_Import_Mendeley.prototype._findExistingFile = function (parentItemID, file) {
|
||||
|
|
@ -1460,7 +1511,7 @@ Zotero_Import_Mendeley.prototype._findExistingFile = function (parentItemID, fil
|
|||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
Zotero_Import_Mendeley.prototype._isDownloadedFile = function (path) {
|
||||
var parentDir = OS.Path.dirname(path);
|
||||
|
|
@ -1468,7 +1519,7 @@ Zotero_Import_Mendeley.prototype._isDownloadedFile = function (path) {
|
|||
|| parentDir.endsWith(OS.Path.join('Local', 'Mendeley Ltd', 'Mendeley Desktop', 'Downloaded'))
|
||||
|| parentDir.endsWith(OS.Path.join('Local', 'Mendeley Ltd.', 'Mendeley Desktop', 'Downloaded'))
|
||||
|| parentDir.endsWith(OS.Path.join('data', 'Mendeley Ltd.', 'Mendeley Desktop', 'Downloaded'));
|
||||
}
|
||||
};
|
||||
|
||||
Zotero_Import_Mendeley.prototype._isTempDownloadedFile = function (path) {
|
||||
return path.startsWith(OS.Path.join(Zotero.getTempDirectory().path, 'm-api'));
|
||||
|
|
@ -1498,7 +1549,7 @@ Zotero_Import_Mendeley.prototype._getRealFilePath = async function (path) {
|
|||
return altPath;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
Zotero_Import_Mendeley.prototype._saveAnnotations = async function (annotations, parentItemID, attachmentItemID, fileHash) {
|
||||
if (!annotations.length) return;
|
||||
|
|
@ -1507,7 +1558,6 @@ Zotero_Import_Mendeley.prototype._saveAnnotations = async function (annotations,
|
|||
var libraryID = parentItem.libraryID;
|
||||
if (attachmentItemID) {
|
||||
var attachmentItem = Zotero.Items.get(attachmentItemID);
|
||||
var attachmentURIPath = Zotero.API.getLibraryPrefix(libraryID) + '/items/' + attachmentItem.key;
|
||||
|
||||
if (attachmentItem) {
|
||||
let file = await attachmentItem.getFilePathAsync();
|
||||
|
|
@ -1530,6 +1580,10 @@ Zotero_Import_Mendeley.prototype._saveAnnotations = async function (annotations,
|
|||
}
|
||||
// PDFWorker needs 'id'
|
||||
annotations.forEach(annotation => annotation.id = annotation.uuid);
|
||||
annotations.forEach(annotation => (colorMap.has(annotation.color)
|
||||
? annotation.color = colorMap.get(annotation.color)
|
||||
: annotation.color
|
||||
));
|
||||
// Returns 'id', 'position', 'type', 'pageLabel', 'sortIndex', 'text' (for highlight)
|
||||
Zotero.debug("Processing annotations in " + file);
|
||||
annotations = await Zotero.PDFWorker.processMendeleyAnnotations(file, annotations);
|
||||
|
|
@ -1616,7 +1670,7 @@ Zotero_Import_Mendeley.prototype._saveAnnotations = async function (annotations,
|
|||
});
|
||||
}
|
||||
note.setNote('<h1>' + Zotero.getString('extractedAnnotations') + '</h1>\n' + noteStrings.join('\n'));
|
||||
return note.saveTx(this._saveOptions);
|
||||
await note.saveTx(this._saveOptions);
|
||||
};
|
||||
|
||||
|
||||
|
|
@ -1633,17 +1687,7 @@ Zotero_Import_Mendeley.prototype._updateParentKeys = function (objectType, json,
|
|||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Zotero_Import_Mendeley.prototype._updateItemCollectionKeys = function (json, oldKey, newKey) {
|
||||
for (; i < json.length; i++) {
|
||||
let x = json[i];
|
||||
if (x[prop] == oldKey) {
|
||||
x[prop] = newKey;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
//
|
||||
// Clean up extra files created <5.0.51
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
var map = {
|
||||
// eslint-disable-next-line no-unused-vars
|
||||
var mendeleyDBMaps = {
|
||||
83: {
|
||||
itemTypes: {
|
||||
Bill: "bill",
|
||||
|
|
|
|||
|
|
@ -113,9 +113,10 @@ var Zotero_Citation_Dialog = new function () {
|
|||
var menu = document.getElementById("label");
|
||||
var label_list = document.getElementById("locator-type-popup");
|
||||
var i = 0;
|
||||
var pageLocatorIndex;
|
||||
for(var value in locators) {
|
||||
var locator = locators[value];
|
||||
var locatorLabel = Zotero.getString('citation.locator.'+locator.replace(/\s/g,''));
|
||||
let locatorLabel = Zotero.Cite.getLocatorString(locator);
|
||||
// add to list of labels
|
||||
var child = document.createElement("menuitem");
|
||||
child.setAttribute("value", value);
|
||||
|
|
@ -124,9 +125,13 @@ var Zotero_Citation_Dialog = new function () {
|
|||
// add to array
|
||||
_locatorIndexArray[locator] = i;
|
||||
_locatorNameArray[i] = locator;
|
||||
if (locator == 'page') {
|
||||
pageLocatorIndex = i;
|
||||
_preserveData.label[1] = i;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
menu.selectedIndex = 0;
|
||||
menu.selectedIndex = pageLocatorIndex;
|
||||
|
||||
// load (from selectItemsDialog.js)
|
||||
yield doLoad();
|
||||
|
|
|
|||
|
|
@ -116,10 +116,9 @@ var Zotero_QuickFormat = new function () {
|
|||
|
||||
// add labels to popup
|
||||
var locators = Zotero.Cite.labels;
|
||||
var menu = document.getElementById("locator-label");
|
||||
var labelList = document.getElementById("locator-label-popup");
|
||||
for(var locator of locators) {
|
||||
var locatorLabel = Zotero.getString('citation.locator.'+locator.replace(/\s/g,''));
|
||||
let locatorLabel = Zotero.Cite.getLocatorString(locator);
|
||||
|
||||
// add to list of labels
|
||||
var child = document.createElement("menuitem");
|
||||
|
|
@ -127,7 +126,6 @@ var Zotero_QuickFormat = new function () {
|
|||
child.setAttribute("label", locatorLabel);
|
||||
labelList.appendChild(child);
|
||||
}
|
||||
menu.selectedIndex = 0;
|
||||
|
||||
}
|
||||
|
||||
|
|
@ -1085,15 +1083,16 @@ var Zotero_QuickFormat = new function () {
|
|||
let citationItem = JSON.parse(target.dataset.citationItem);
|
||||
panelPrefix.value = citationItem["prefix"] ? citationItem["prefix"] : "";
|
||||
panelSuffix.value = citationItem["suffix"] ? citationItem["suffix"] : "";
|
||||
var pageOption = panelLocatorLabel.getElementsByAttribute("value", "page")[0];
|
||||
if(citationItem["label"]) {
|
||||
var option = panelLocatorLabel.getElementsByAttribute("value", citationItem["label"]);
|
||||
if(option.length) {
|
||||
panelLocatorLabel.selectedItem = option[0];
|
||||
} else {
|
||||
panelLocatorLabel.selectedIndex = 0;
|
||||
panelLocatorLabel.selectedItem = pageOption;
|
||||
}
|
||||
} else {
|
||||
panelLocatorLabel.selectedIndex = 0;
|
||||
panelLocatorLabel.selectedItem = pageOption;
|
||||
}
|
||||
panelLocator.value = citationItem["locator"] ? citationItem["locator"] : "";
|
||||
panelSuppressAuthor.checked = !!citationItem["suppress-author"];
|
||||
|
|
|
|||
|
|
@ -40,7 +40,6 @@ Cu.import("resource://gre/modules/osfile.jsm");
|
|||
const CHILD_INDENT = 12;
|
||||
const COLORED_TAGS_RE = new RegExp("^[0-" + Zotero.Tags.MAX_COLORED_TAGS + "]{1}$");
|
||||
const COLUMN_PREFS_FILEPATH = OS.Path.join(Zotero.Profile.dir, "treePrefs.json");
|
||||
const EMOJI_RE = /\p{Emoji_Modifier_Base}\p{Emoji_Modifier}?|\p{Emoji_Presentation}|\p{Emoji}\uFE0F/gu;
|
||||
const HTML_NS = "http://www.w3.org/1999/xhtml";
|
||||
const ATTACHMENT_STATE_LOAD_DELAY = 150; //ms
|
||||
|
||||
|
|
@ -448,11 +447,20 @@ var ItemTree = class ItemTree extends LibraryTree {
|
|||
let row = this.getRowIndexByID(id);
|
||||
if (row === false) continue;
|
||||
let item = Zotero.Items.get(id);
|
||||
if (!item.deleted && !item.numChildren()) {
|
||||
// Remove parent row if it isn't deleted and doesn't have any deleted children
|
||||
// (shown by the numChildren including deleted being the same as numChildren not including deleted)
|
||||
if (!item.deleted && (!item.isRegularItem() || item.numChildren(true) == item.numChildren(false))) {
|
||||
rows.push(row);
|
||||
// And all its children in the tree
|
||||
for (let child = row + 1; child < this.rowCount && this.getLevel(child) > this.getLevel(row); child++) {
|
||||
rows.push(child);
|
||||
}
|
||||
}
|
||||
}
|
||||
this._removeRows(rows);
|
||||
if (rows.length) {
|
||||
this._removeRows(rows);
|
||||
this.tree.invalidate();
|
||||
}
|
||||
}
|
||||
|
||||
return;
|
||||
|
|
@ -475,14 +483,17 @@ var ItemTree = class ItemTree extends LibraryTree {
|
|||
return;
|
||||
}
|
||||
|
||||
var visibleSubcollections = Zotero.Prefs.get('recursiveCollections')
|
||||
? collectionTreeRow.ref.getDescendents(false, 'collection')
|
||||
: [];
|
||||
var splitIDs = [];
|
||||
for (let id of ids) {
|
||||
var split = id.split('-');
|
||||
// Skip if not an item in this collection
|
||||
if (split[0] != collectionTreeRow.ref.id) {
|
||||
continue;
|
||||
// Include if an item in this collection or a visible subcollection
|
||||
if (split[0] == collectionTreeRow.ref.id
|
||||
|| visibleSubcollections.some(c => split[0] == c.id)) {
|
||||
splitIDs.push(split[1]);
|
||||
}
|
||||
splitIDs.push(split[1]);
|
||||
}
|
||||
ids = splitIDs;
|
||||
}
|
||||
|
|
@ -1241,20 +1252,14 @@ var ItemTree = class ItemTree extends LibraryTree {
|
|||
? `for ${itemIDs.length} ` + Zotero.Utilities.pluralize(itemIDs.length, ['item', 'items'])
|
||||
: ""));
|
||||
|
||||
// Set whether rows with empty values should be displayed last,
|
||||
// which may be different for primary and secondary sorting.
|
||||
var emptyFirst = {};
|
||||
switch (primaryField) {
|
||||
case 'title':
|
||||
emptyFirst.title = true;
|
||||
break;
|
||||
|
||||
// When sorting by title we want empty titles at the top, but if not
|
||||
// sorting by title, empty titles should sort to the bottom so that new
|
||||
// empty items don't get sorted to the middle of the items list.
|
||||
default:
|
||||
emptyFirst.title = false;
|
||||
}
|
||||
// Set whether rows with empty values should sort at the beginning
|
||||
var emptyFirst = {
|
||||
title: true,
|
||||
|
||||
// Date columns start descending, so put empty rows at end
|
||||
date: true,
|
||||
year: true,
|
||||
};
|
||||
|
||||
// Cache primary values while sorting, since base-field-mapped getField()
|
||||
// calls are relatively expensive
|
||||
|
|
@ -1262,7 +1267,7 @@ var ItemTree = class ItemTree extends LibraryTree {
|
|||
sortFields.forEach(x => cache[x] = {});
|
||||
|
||||
// Get the display field for a row (which might be a placeholder title)
|
||||
function getField(field, row) {
|
||||
let getField = (field, row) => {
|
||||
var item = row.ref;
|
||||
|
||||
switch (field) {
|
||||
|
|
@ -1270,23 +1275,12 @@ var ItemTree = class ItemTree extends LibraryTree {
|
|||
return Zotero.Items.getSortTitle(item.getDisplayTitle());
|
||||
|
||||
case 'hasAttachment':
|
||||
if (item.isFileAttachment()) {
|
||||
var state = item.fileExistsCached() ? 1 : -1;
|
||||
}
|
||||
else if (item.isRegularItem()) {
|
||||
var state = item.getBestAttachmentStateCached();
|
||||
if (this._canGetBestAttachmentState(item)) {
|
||||
return item.getBestAttachmentStateCached();
|
||||
}
|
||||
else {
|
||||
return 0;
|
||||
}
|
||||
// Make sort order present, missing, empty when ascending
|
||||
if (state === 1) {
|
||||
state = 2;
|
||||
}
|
||||
else if (state === -1) {
|
||||
state = 1;
|
||||
}
|
||||
return state;
|
||||
|
||||
case 'numNotes':
|
||||
return row.numNotes(false, true) || 0;
|
||||
|
|
@ -1350,7 +1344,11 @@ var ItemTree = class ItemTree extends LibraryTree {
|
|||
}
|
||||
|
||||
if (sortField == 'hasAttachment') {
|
||||
return fieldB - fieldA;
|
||||
// PDFs at the top
|
||||
const order = ['pdf', 'snapshot', 'other', 'none'];
|
||||
fieldA = order.indexOf(fieldA.type || 'none') + (fieldA.exists ? 0 : 4);
|
||||
fieldB = order.indexOf(fieldB.type || 'none') + (fieldB.exists ? 0 : 4);
|
||||
return fieldA - fieldB;
|
||||
}
|
||||
|
||||
if (sortField == 'callNumber') {
|
||||
|
|
@ -1439,18 +1437,27 @@ var ItemTree = class ItemTree extends LibraryTree {
|
|||
var openItemIDs = this._saveOpenState(true);
|
||||
|
||||
// Sort specific items
|
||||
if (itemIDs) {
|
||||
let idsToSort = new Set(itemIDs);
|
||||
this._rows.sort((a, b) => {
|
||||
// Don't re-sort existing items. This assumes a stable sort(), which is the case in Firefox
|
||||
// but not Chrome/v8.
|
||||
if (!idsToSort.has(a.ref.id) && !idsToSort.has(b.ref.id)) return 0;
|
||||
return rowSort(a, b) * order;
|
||||
});
|
||||
try {
|
||||
if (itemIDs) {
|
||||
let idsToSort = new Set(itemIDs);
|
||||
this._rows.sort((a, b) => {
|
||||
// Don't re-sort existing items. This assumes a stable sort(), which is the case in Firefox
|
||||
// but not Chrome/v8.
|
||||
if (!idsToSort.has(a.ref.id) && !idsToSort.has(b.ref.id)) return 0;
|
||||
return rowSort(a, b) * order;
|
||||
});
|
||||
}
|
||||
// Full sort
|
||||
else {
|
||||
this._rows.sort((a, b) => rowSort(a, b) * order);
|
||||
}
|
||||
}
|
||||
// Full sort
|
||||
else {
|
||||
this._rows.sort((a, b) => rowSort(a, b) * order);
|
||||
catch (e) {
|
||||
Zotero.logError("Error sorting fields: " + e.message);
|
||||
Zotero.debug(e, 1);
|
||||
// Clear anything that might be contributing to the error
|
||||
Zotero.Prefs.clear('secondarySort.' + this.getSortField());
|
||||
Zotero.Prefs.clear('fallbackSort');
|
||||
}
|
||||
|
||||
this._refreshRowMap();
|
||||
|
|
@ -1748,8 +1755,21 @@ var ItemTree = class ItemTree extends LibraryTree {
|
|||
await Zotero.Items.trashTx(ids);
|
||||
}
|
||||
else if (collectionTreeRow.isCollection()) {
|
||||
let collectionIDs = [collectionTreeRow.ref.id];
|
||||
if (Zotero.Prefs.get('recursiveCollections')) {
|
||||
collectionIDs.push(...collectionTreeRow.ref.getDescendents(false, 'collection').map(c => c.id));
|
||||
}
|
||||
|
||||
await Zotero.DB.executeTransaction(async () => {
|
||||
await collectionTreeRow.ref.removeItems(ids);
|
||||
for (let itemID of ids) {
|
||||
let item = Zotero.Items.get(itemID);
|
||||
for (let collectionID of collectionIDs) {
|
||||
item.removeFromCollection(collectionID);
|
||||
}
|
||||
await item.save({
|
||||
skipDateModifiedUpdate: true
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
else if (collectionTreeRow.isPublications()) {
|
||||
|
|
@ -1788,6 +1808,11 @@ var ItemTree = class ItemTree extends LibraryTree {
|
|||
return this._rows.map(row => asIDs ? row.ref.id : row.ref);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the current sort order of the items list
|
||||
*
|
||||
* @return {Number} - -1 for descending, 1 for ascending
|
||||
*/
|
||||
getSortDirection(sortFields) {
|
||||
sortFields = sortFields || this.getSortFields();
|
||||
if (this.collectionTreeRow.isFeed()) {
|
||||
|
|
@ -2752,93 +2777,60 @@ var ItemTree = class ItemTree extends LibraryTree {
|
|||
|
||||
// TEMP: For now, we use the blue bullet for all non-PDF attachments, but there's
|
||||
// commented-out code for showing different icons for snapshots, files, and URL/DOI links
|
||||
if (this.isContainer(index)) {
|
||||
if (item.isRegularItem()) {
|
||||
const { type, exists } = item.getBestAttachmentStateCached();
|
||||
let icon = "";
|
||||
let ariaLabel;
|
||||
// If the item has a child attachment
|
||||
if (type !== null && type != 'none') {
|
||||
if (type == 'pdf') {
|
||||
icon = getDOMElement('IconTreeitemAttachmentPDF');
|
||||
ariaLabel = Zotero.getString('pane.item.attachments.hasPDF');
|
||||
if (!exists) {
|
||||
icon.classList.add('icon-missing-file');
|
||||
}
|
||||
}
|
||||
else if (type == 'snapshot') {
|
||||
//icon = getDOMElement('IconTreeitemAttachmentSnapshot');
|
||||
icon = exists ? getDOMElement('IconBulletBlue') : getDOMElement('IconBulletBlueEmpty');
|
||||
ariaLabel = Zotero.getString('pane.item.attachments.hasSnapshot');
|
||||
}
|
||||
else {
|
||||
//icon = getDOMElement('IconTreeitem');
|
||||
icon = exists ? getDOMElement('IconBulletBlue') : getDOMElement('IconBulletBlueEmpty');
|
||||
ariaLabel = Zotero.getString('pane.item.attachments.has');
|
||||
}
|
||||
icon.classList.add('cell-icon');
|
||||
//if (!exists) {
|
||||
// icon.classList.add('icon-missing-file');
|
||||
//}
|
||||
}
|
||||
//else if (type == 'none') {
|
||||
// if (item.getField('url') || item.getField('DOI')) {
|
||||
// icon = getDOMElement('IconLink');
|
||||
// ariaLabel = Zotero.getString('pane.item.attachments.hasLink');
|
||||
// icon.classList.add('cell-icon');
|
||||
// }
|
||||
//}
|
||||
if (ariaLabel) {
|
||||
icon.setAttribute('aria-label', ariaLabel + '.');
|
||||
span.setAttribute('title', ariaLabel);
|
||||
}
|
||||
span.append(icon);
|
||||
|
||||
// Don't run this immediately since it might cause a db check and disk access
|
||||
// but delay for some time and see if the item is still visible in the tree
|
||||
// (i.e. if we haven't scrolled right past it)
|
||||
setTimeout(() => {
|
||||
if (!this.tree.rowIsVisible(index)) return;
|
||||
item.getBestAttachmentState()
|
||||
// Refresh cell when promise is fulfilled
|
||||
.then(({ type: newType, exists: newExists }) => {
|
||||
if (newType !== type || newExists !== exists) {
|
||||
this.tree.invalidateRow(index);
|
||||
}
|
||||
});
|
||||
}, ATTACHMENT_STATE_LOAD_DELAY);
|
||||
}
|
||||
}
|
||||
|
||||
if (item.isFileAttachment()) {
|
||||
const exists = item.fileExistsCached();
|
||||
if (this._canGetBestAttachmentState(item)) {
|
||||
const { type, exists } = item.getBestAttachmentStateCached();
|
||||
let icon = "";
|
||||
if (exists !== null) {
|
||||
if (item.isPDFAttachment()) {
|
||||
let ariaLabel;
|
||||
// If the item has a child attachment
|
||||
if (type !== null && type != 'none') {
|
||||
if (type == 'pdf') {
|
||||
icon = getDOMElement('IconTreeitemAttachmentPDF');
|
||||
ariaLabel = Zotero.getString('pane.item.attachments.hasPDF');
|
||||
if (!exists) {
|
||||
icon.classList.add('icon-missing-file');
|
||||
}
|
||||
}
|
||||
else if (item.isSnapshotAttachment()) {
|
||||
else if (type == 'snapshot') {
|
||||
//icon = getDOMElement('IconTreeitemAttachmentSnapshot');
|
||||
icon = exists ? getDOMElement('IconBulletBlue') : getDOMElement('IconBulletBlueEmpty');
|
||||
ariaLabel = Zotero.getString('pane.item.attachments.hasSnapshot');
|
||||
}
|
||||
else {
|
||||
//icon = getDOMElement('IconTreeitem');
|
||||
icon = exists ? getDOMElement('IconBulletBlue') : getDOMElement('IconBulletBlueEmpty');
|
||||
ariaLabel = Zotero.getString('pane.item.attachments.has');
|
||||
}
|
||||
icon.classList.add('cell-icon');
|
||||
//if (!exists) {
|
||||
// icon.classList.add('icon-missing-file');
|
||||
//}
|
||||
}
|
||||
//else if (type == 'none') {
|
||||
// if (item.getField('url') || item.getField('DOI')) {
|
||||
// icon = getDOMElement('IconLink');
|
||||
// ariaLabel = Zotero.getString('pane.item.attachments.hasLink');
|
||||
// icon.classList.add('cell-icon');
|
||||
// }
|
||||
//}
|
||||
if (ariaLabel) {
|
||||
icon.setAttribute('aria-label', ariaLabel + '.');
|
||||
span.setAttribute('title', ariaLabel);
|
||||
}
|
||||
span.append(icon);
|
||||
|
||||
item.fileExists()
|
||||
// TODO: With no cell refreshing this is possibly somewhat inefficient
|
||||
// Refresh cell when promise is fulfilled
|
||||
.then(realExists => realExists != exists && this.tree.invalidateRow(index));
|
||||
// Don't run this immediately since it might cause a db check and disk access
|
||||
// but delay for some time and see if the item is still visible in the tree
|
||||
// (i.e. if we haven't scrolled right past it)
|
||||
setTimeout(() => {
|
||||
if (!this.tree.rowIsVisible(index)) return;
|
||||
item.getBestAttachmentState()
|
||||
// Refresh cell when promise is fulfilled
|
||||
.then(({ type: newType, exists: newExists }) => {
|
||||
if (newType !== type || newExists !== exists) {
|
||||
this.tree.invalidateRow(index);
|
||||
}
|
||||
});
|
||||
}, ATTACHMENT_STATE_LOAD_DELAY);
|
||||
}
|
||||
|
||||
return span;
|
||||
|
|
@ -3550,7 +3542,7 @@ var ItemTree = class ItemTree extends LibraryTree {
|
|||
let t = new Date();
|
||||
for (let i = 0; i < this._rows.length; i++) {
|
||||
let item = this.getRow(i).ref;
|
||||
if (item.isRegularItem()) {
|
||||
if (this._canGetBestAttachmentState(item)) {
|
||||
await item.getBestAttachmentState();
|
||||
}
|
||||
}
|
||||
|
|
@ -3824,10 +3816,10 @@ var ItemTree = class ItemTree extends LibraryTree {
|
|||
}
|
||||
return icon;
|
||||
}
|
||||
|
||||
_isOnlyEmoji(str) {
|
||||
// Remove emoji and zero-width joiner and see if anything's left
|
||||
return !str.replace(EMOJI_RE, '').replace(/\u200D/g,'');
|
||||
|
||||
_canGetBestAttachmentState(item) {
|
||||
return (item.isRegularItem() && item.numAttachments())
|
||||
|| (item.isFileAttachment() && item.isTopLevelItem());
|
||||
}
|
||||
|
||||
_getTagSwatch(tag, color) {
|
||||
|
|
@ -3837,7 +3829,7 @@ var ItemTree = class ItemTree extends LibraryTree {
|
|||
//
|
||||
// TODO: Check for a maximum number of graphemes, which is hard to do
|
||||
// https://stackoverflow.com/a/54369605
|
||||
if (this._isOnlyEmoji(tag)) {
|
||||
if (Zotero.Utilities.Internal.isOnlyEmoji(tag)) {
|
||||
span.textContent = tag;
|
||||
}
|
||||
// Otherwise display color
|
||||
|
|
|
|||
|
|
@ -207,6 +207,14 @@ const COLUMNS = [
|
|||
flex: 1,
|
||||
zoteroPersist: new Set(["width", "hidden", "sortDirection"])
|
||||
},
|
||||
{
|
||||
dataKey: "number",
|
||||
disabledIn: "feed",
|
||||
submenu: true,
|
||||
label: "itemFields.number",
|
||||
flex: 1,
|
||||
zoteroPersist: new Set(["width", "hidden", "sortDirection"])
|
||||
},
|
||||
{
|
||||
dataKey: "pages",
|
||||
disabledIn: "feed",
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
Subproject commit 4877f181b1a962ea3e26d23f12d1acba3ccce347
|
||||
Subproject commit cb98d366912a0c0be361880e12fbc43cef6d383e
|
||||
|
|
@ -30,9 +30,8 @@ var Zotero_Report_Interface = new function() {
|
|||
*/
|
||||
this.loadCollectionReport = function () {
|
||||
var sortColumn = ZoteroPane_Local.getSortField();
|
||||
var sortDirection = ZoteroPane_Local.getSortDirection();
|
||||
var queryString = '?sort=' + sortColumn
|
||||
+ '&direction=' + (sortDirection == 'ascending' ? 'asc' : 'desc');
|
||||
+ '&direction=' + (ZoteroPane.getSortDirection() == 1 ? 'asc' : 'desc');
|
||||
|
||||
var url = 'zotero://report/';
|
||||
|
||||
|
|
|
|||
|
|
@ -192,12 +192,9 @@ const ZoteroStandalone = new function() {
|
|||
if (numFiles) {
|
||||
menuitem.hidden = false;
|
||||
sep.hidden = false;
|
||||
if (numFiles == 1) {
|
||||
menuitem.label = 'Export PDF…';
|
||||
}
|
||||
else {
|
||||
menuitem.label = 'Export PDFs…';
|
||||
}
|
||||
menuitem.label = Zotero.getString(
|
||||
'pane.items.menu.exportPDF' + (numFiles == 1 ? '' : '.multiple')
|
||||
);
|
||||
}
|
||||
else {
|
||||
menuitem.hidden = true;
|
||||
|
|
|
|||
|
|
@ -84,6 +84,11 @@ var Zotero_Tabs = new function () {
|
|||
window.Zotero_Tooltip.stop();
|
||||
};
|
||||
|
||||
this.getTabIDByItemID = function (itemID) {
|
||||
let tab = this._tabs.find(tab => tab.data && tab.data.itemID === itemID);
|
||||
return tab && tab.id;
|
||||
};
|
||||
|
||||
this.init = function () {
|
||||
ReactDOM.render(
|
||||
<TabBar
|
||||
|
|
@ -128,12 +133,23 @@ var Zotero_Tabs = new function () {
|
|||
}
|
||||
else if (tab.type === 'reader') {
|
||||
if (Zotero.Items.exists(tab.data.itemID)) {
|
||||
this.add({
|
||||
type: 'reader-unloaded',
|
||||
title: tab.title,
|
||||
index: i,
|
||||
data: tab.data
|
||||
});
|
||||
if (tab.selected) {
|
||||
Zotero.Reader.open(tab.data.itemID,
|
||||
null,
|
||||
{
|
||||
title: tab.title,
|
||||
openInBackground: !tab.selected
|
||||
}
|
||||
);
|
||||
}
|
||||
else {
|
||||
this.add({
|
||||
type: 'reader-unloaded',
|
||||
title: tab.title,
|
||||
index: i,
|
||||
data: tab.data
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -152,7 +168,7 @@ var Zotero_Tabs = new function () {
|
|||
* @param {Function} onClose
|
||||
* @return {{ id: string, container: XULElement}} id - tab id, container - a new tab container created in the deck
|
||||
*/
|
||||
this.add = function ({ type, data, title, index, select, onClose }) {
|
||||
this.add = function ({ id, type, data, title, index, select, onClose }) {
|
||||
if (typeof type != 'string') {
|
||||
}
|
||||
if (typeof title != 'string') {
|
||||
|
|
@ -164,7 +180,7 @@ var Zotero_Tabs = new function () {
|
|||
if (onClose !== undefined && typeof onClose != 'function') {
|
||||
throw new Error(`'onClose' should be a function (was ${typeof onClose})`);
|
||||
}
|
||||
var id = 'tab-' + Zotero.Utilities.randomString();
|
||||
id = id || 'tab-' + Zotero.Utilities.randomString();
|
||||
var container = document.createElement('vbox');
|
||||
container.id = id;
|
||||
this.deck.appendChild(container);
|
||||
|
|
@ -251,7 +267,7 @@ var Zotero_Tabs = new function () {
|
|||
closedIDs.push(id);
|
||||
}
|
||||
this._history.push(historyEntry);
|
||||
Zotero.Notifier.trigger('close', 'tab', [closedIDs]);
|
||||
Zotero.Notifier.trigger('close', 'tab', [closedIDs], true);
|
||||
this._update();
|
||||
};
|
||||
|
||||
|
|
@ -321,7 +337,7 @@ var Zotero_Tabs = new function () {
|
|||
* @param {String} id
|
||||
* @param {Boolean} reopening
|
||||
*/
|
||||
this.select = function (id, reopening) {
|
||||
this.select = function (id, reopening, options) {
|
||||
var { tab, tabIndex } = this._getTab(id);
|
||||
if (!tab || tab.id === this._selectedID) {
|
||||
return;
|
||||
|
|
@ -332,7 +348,8 @@ var Zotero_Tabs = new function () {
|
|||
}
|
||||
if (tab.type === 'reader-unloaded') {
|
||||
this.close(tab.id);
|
||||
Zotero.Reader.open(tab.data.itemID, null, {
|
||||
Zotero.Reader.open(tab.data.itemID, options && options.location, {
|
||||
tabID: tab.id,
|
||||
title: tab.title,
|
||||
tabIndex,
|
||||
allowDuplicate: true
|
||||
|
|
@ -385,6 +402,7 @@ var Zotero_Tabs = new function () {
|
|||
}
|
||||
this.close(tab.id);
|
||||
this.add({
|
||||
id: tab.id,
|
||||
type: 'reader-unloaded',
|
||||
title: tab.title,
|
||||
index: tabIndex,
|
||||
|
|
|
|||
|
|
@ -59,10 +59,8 @@ var Zotero_CSL_Editor = new function() {
|
|||
|
||||
var pageList = document.getElementById('zotero-csl-page-type');
|
||||
var locators = Zotero.Cite.labels;
|
||||
for (let type of locators) {
|
||||
var locator = type;
|
||||
locator = Zotero.getString('citation.locator.'+locator.replace(/\s/g,''));
|
||||
pageList.appendItem(locator, type);
|
||||
for (let locator of locators) {
|
||||
pageList.appendItem(Zotero.Cite.getLocatorString(locator), locator);
|
||||
}
|
||||
|
||||
pageList.selectedIndex = 0;
|
||||
|
|
|
|||
|
|
@ -177,7 +177,7 @@ Zotero.Annotations = new function () {
|
|||
o.tags = tags;
|
||||
}
|
||||
|
||||
o.dateModified = item.dateModified;
|
||||
o.dateModified = Zotero.Date.sqlToISO8601(item.dateModified);
|
||||
return o;
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -270,7 +270,7 @@ Zotero.Attachments = new function(){
|
|||
|
||||
|
||||
/**
|
||||
* @param {Object} options - 'file', 'url', 'title', 'contentType', 'charset', 'parentItemID', 'singleFile'
|
||||
* @param {Object} options - 'file', 'url', 'title', 'contentType', 'charset', 'libraryID', 'parentItemID', 'singleFile'
|
||||
* @param {Object} [options.saveOptions] - Options to pass to Zotero.Item::save()
|
||||
* @return {Promise<Zotero.Item>}
|
||||
*/
|
||||
|
|
@ -287,10 +287,19 @@ Zotero.Attachments = new function(){
|
|||
var title = options.title;
|
||||
var contentType = options.contentType;
|
||||
var charset = options.charset;
|
||||
var libraryID = options.libraryID;
|
||||
var parentItemID = options.parentItemID;
|
||||
var saveOptions = options.saveOptions;
|
||||
|
||||
if (!parentItemID) {
|
||||
if (parentItemID) {
|
||||
libraryID = Zotero.Items.getLibraryAndKeyFromID(parentItemID).libraryID;
|
||||
}
|
||||
else if (contentType == 'text/html') {
|
||||
throw new Error("parentItemID not provided");
|
||||
}
|
||||
|
||||
// Webpage snapshots must have parent items
|
||||
if (!parentItemID && contentType == 'text/html') {
|
||||
throw new Error("parentItemID not provided");
|
||||
}
|
||||
|
||||
|
|
@ -299,8 +308,9 @@ Zotero.Attachments = new function(){
|
|||
yield Zotero.DB.executeTransaction(function* () {
|
||||
// Create a new attachment
|
||||
attachmentItem = new Zotero.Item('attachment');
|
||||
let {libraryID, key: parentKey} = Zotero.Items.getLibraryAndKeyFromID(parentItemID);
|
||||
attachmentItem.libraryID = libraryID;
|
||||
if (libraryID) {
|
||||
attachmentItem.libraryID = libraryID;
|
||||
}
|
||||
attachmentItem.setField('title', title);
|
||||
attachmentItem.setField('url', url);
|
||||
attachmentItem.parentID = parentItemID;
|
||||
|
|
@ -563,7 +573,8 @@ Zotero.Attachments = new function(){
|
|||
reject(e);
|
||||
},
|
||||
true,
|
||||
cookieSandbox
|
||||
cookieSandbox,
|
||||
{ allowImages: true }
|
||||
);
|
||||
});
|
||||
};
|
||||
|
|
@ -1143,67 +1154,82 @@ Zotero.Attachments = new function(){
|
|||
*/
|
||||
this.downloadPDFViaBrowser = async function (url, path, options = {}) {
|
||||
Zotero.debug(`downloadPDFViaBrowser: Downloading file via browser from ${url}`);
|
||||
const onLoadTimeout = 1e3;
|
||||
const onLoadTimeout = Zotero.Prefs.get('downloadPDFViaBrowser.onLoadTimeout');
|
||||
// Technically this is not a download, but the full operation timeout
|
||||
const downloadTimeout = 60e3;
|
||||
const downloadTimeout = Zotero.Prefs.get('downloadPDFViaBrowser.downloadTimeout');
|
||||
let channelBrowser, hiddenBrowser;
|
||||
let hiddenBrowserPDFFoundDeferred = Zotero.Promise.defer();
|
||||
|
||||
var pdfMIMETypeHandler = async (blob, name, _, channel) => {
|
||||
Zotero.debug(`downloadPDFViaBrowser: Sniffing a PDF loaded at ${name}`);
|
||||
|
||||
let isOurPDF = false;
|
||||
// try the browser
|
||||
try {
|
||||
channelBrowser = channel.notificationCallbacks.getInterface(Ci.nsIWebNavigation)
|
||||
.QueryInterface(Ci.nsIDocShell).chromeEventHandler;
|
||||
}
|
||||
catch (e) {}
|
||||
if (channelBrowser) {
|
||||
isOurPDF = hiddenBrowser === channelBrowser;
|
||||
}
|
||||
else {
|
||||
// try the document for the load group
|
||||
|
||||
let isOurPDF = false;
|
||||
var pdfMIMETypeHandler = {
|
||||
onStartRequest: function (name, _, channel) {
|
||||
Zotero.debug(`downloadPDFViaBrowser: Sniffing a PDF loaded at ${name}`);
|
||||
// try the browser
|
||||
try {
|
||||
channelBrowser = channel.loadGroup.notificationCallbacks.getInterface(Ci.nsIWebNavigation)
|
||||
channelBrowser = channel.notificationCallbacks.getInterface(Ci.nsIWebNavigation)
|
||||
.QueryInterface(Ci.nsIDocShell).chromeEventHandler;
|
||||
}
|
||||
catch(e) {}
|
||||
catch (e) {}
|
||||
if (channelBrowser) {
|
||||
isOurPDF = hiddenBrowser === channelBrowser;
|
||||
}
|
||||
}
|
||||
|
||||
if (isOurPDF) {
|
||||
Zotero.debug(`downloadPDFViaBrowser: Found our PDF at ${name}`);
|
||||
await Zotero.File.putContentsAsync(path, blob);
|
||||
hiddenBrowserPDFFoundDeferred.resolve();
|
||||
return true;
|
||||
}
|
||||
else {
|
||||
Zotero.debug(`downloadPDFViaBrowser: Not our PDF at ${name}`);
|
||||
return false;
|
||||
else {
|
||||
// try the document for the load group
|
||||
try {
|
||||
channelBrowser = channel.loadGroup.notificationCallbacks.getInterface(Ci.nsIWebNavigation)
|
||||
.QueryInterface(Ci.nsIDocShell).chromeEventHandler;
|
||||
}
|
||||
catch(e) {}
|
||||
if (channelBrowser) {
|
||||
isOurPDF = hiddenBrowser === channelBrowser;
|
||||
}
|
||||
}
|
||||
},
|
||||
onContent: async (blob, name, _, channel) => {
|
||||
if (isOurPDF) {
|
||||
Zotero.debug(`downloadPDFViaBrowser: Found our PDF at ${name}`);
|
||||
await Zotero.File.putContentsAsync(path, blob);
|
||||
hiddenBrowserPDFFoundDeferred.resolve();
|
||||
return true;
|
||||
}
|
||||
else {
|
||||
Zotero.debug(`downloadPDFViaBrowser: Not our PDF at ${name}`);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
};
|
||||
try {
|
||||
Zotero.MIMETypeHandler.addHandler("application/pdf", pdfMIMETypeHandler, true);
|
||||
let noop = () => 0;
|
||||
Zotero.MIMETypeHandler.addHandlers("application/pdf", pdfMIMETypeHandler, true);
|
||||
function noop() {};
|
||||
hiddenBrowser = Zotero.HTTP.loadDocuments([url], noop, noop, noop, true, options.cookieSandbox);
|
||||
let onLoadTimeoutDeferred = Zotero.Promise.defer();
|
||||
hiddenBrowser.addEventListener("load", async function onLoad() {
|
||||
Zotero.debug(`downloadPDFViaBrowser: Page with potential JS redirect loaded, giving it ${onLoadTimeout}ms to process`);
|
||||
hiddenBrowser.addEventListener("unload", () => {
|
||||
Zotero.debug(`downloadPDFViaBrowser: A JS redirect occurred, short timeout cancelled`);
|
||||
hiddenBrowser.removeEventListener('load', onLoad);
|
||||
});
|
||||
await Zotero.Promise.delay(onLoadTimeout);
|
||||
onLoadTimeoutDeferred.reject(`Loading PDF via browser timed out on the JS challenge page after ${onLoadTimeout}ms`);
|
||||
}, true);
|
||||
let currentUrl = "";
|
||||
hiddenBrowser.addProgressListener({
|
||||
QueryInterface: XPCOMUtils.generateQI([Components.interfaces.nsIWebProgressListener,
|
||||
Components.interfaces.nsISupportsWeakReference]),
|
||||
onProgressChange: noop,
|
||||
onStateChange: noop,
|
||||
onStatusChange: noop,
|
||||
onSecurityChange: noop,
|
||||
async onLocationChange() {
|
||||
let url = hiddenBrowser.contentDocument.location.href;
|
||||
if (currentUrl) {
|
||||
Zotero.debug(`downloadPDFViaBrowser: A JS redirect occurred to ${hiddenBrowser.contentDocument.location.href}`);
|
||||
}
|
||||
currentUrl = url;
|
||||
Zotero.debug(`downloadPDFViaBrowser: Page with potential JS redirect loaded, giving it ${onLoadTimeout}ms to process`);
|
||||
await Zotero.Promise.delay(onLoadTimeout);
|
||||
// If URL changed that means we got redirected and the onLoadTimeout needs to restart
|
||||
if (currentUrl === url && !isOurPDF) {
|
||||
onLoadTimeoutDeferred.reject(new Error(`downloadPDFViaBrowser: Loading PDF via browser timed out on the JS challenge page after ${onLoadTimeout}ms`));
|
||||
}
|
||||
}
|
||||
});
|
||||
await Zotero.Promise.race([
|
||||
onLoadTimeoutDeferred.promise,
|
||||
Zotero.Promise.delay(downloadTimeout).then(() => {
|
||||
if (!hiddenBrowserPDFFoundDeferred.promise.isResolved()) {
|
||||
throw new Error(`Loading PDF via browser timed out after ${downloadTimeout}ms`);
|
||||
if (!isOurPDF) {
|
||||
throw new Error(`downloadPDFViaBrowser: Loading PDF via browser timed out after ${downloadTimeout}ms`);
|
||||
}
|
||||
}),
|
||||
hiddenBrowserPDFFoundDeferred.promise
|
||||
|
|
@ -1213,13 +1239,13 @@ Zotero.Attachments = new function(){
|
|||
try {
|
||||
await OS.File.remove(path, { ignoreAbsent: true });
|
||||
}
|
||||
catch (e) {
|
||||
Zotero.logError(e, 1);
|
||||
catch (err) {
|
||||
Zotero.logError(err);
|
||||
}
|
||||
throw e;
|
||||
}
|
||||
finally {
|
||||
Zotero.MIMETypeHandler.removeHandler('application/pdf', pdfMIMETypeHandler);
|
||||
Zotero.MIMETypeHandler.removeHandlers('application/pdf', pdfMIMETypeHandler);
|
||||
if (hiddenBrowser) {
|
||||
Zotero.Browser.deleteHiddenBrowser(hiddenBrowser);
|
||||
}
|
||||
|
|
@ -1259,6 +1285,7 @@ Zotero.Attachments = new function(){
|
|||
|
||||
this.canFindPDFForItem = function (item) {
|
||||
return item.isRegularItem()
|
||||
&& !item.isFeedItem
|
||||
&& (!!item.getField('DOI') || !!item.getField('url') || !!item.getExtraField('DOI'))
|
||||
&& item.numPDFAttachments() == 0;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -8,9 +8,110 @@ Zotero.Cite = {
|
|||
/**
|
||||
* Locator labels
|
||||
*/
|
||||
"labels":["page", "book", "chapter", "column", "figure", "folio",
|
||||
"issue", "line", "note", "opus", "paragraph", "part", "section", "sub verbo",
|
||||
"volume", "verse"],
|
||||
"labels": [
|
||||
"act",
|
||||
"appendix",
|
||||
"article-locator",
|
||||
"book",
|
||||
"canon",
|
||||
"chapter",
|
||||
"column",
|
||||
"elocation",
|
||||
"equation",
|
||||
"figure",
|
||||
"folio",
|
||||
"issue",
|
||||
"line",
|
||||
"note",
|
||||
"opus",
|
||||
"page",
|
||||
"paragraph",
|
||||
"part",
|
||||
"rule",
|
||||
"scene",
|
||||
"section",
|
||||
"sub-verbo",
|
||||
"table",
|
||||
//"timestamp",
|
||||
"title-locator",
|
||||
"verse",
|
||||
"volume"
|
||||
],
|
||||
|
||||
_locatorStrings: new Map(),
|
||||
|
||||
/**
|
||||
* Get localized string for locator
|
||||
*
|
||||
* @param {String} locator - Locator name (e.g., 'book')
|
||||
* @return {String} - Localized string (e.g., 'Livre')
|
||||
*/
|
||||
getLocatorString: function (locator) {
|
||||
// 'timestamp' not included in CSL locales
|
||||
if (locator == 'timestamp') {
|
||||
return Zotero.getString('citation.locator.timestamp');
|
||||
}
|
||||
|
||||
// Get the best CSL locale for the current Zotero locale
|
||||
var cslLocale = Zotero.Utilities.Internal.resolveLocale(
|
||||
Zotero.locale,
|
||||
Object.keys(Zotero.Styles.locales)
|
||||
);
|
||||
|
||||
// If locator strings are already cached for the current locale, use that
|
||||
if (this._locatorStrings.has(cslLocale)) {
|
||||
return this._locatorStrings.get(cslLocale).get(locator);
|
||||
}
|
||||
var map = new Map();
|
||||
this._locatorStrings.set(cslLocale, map);
|
||||
|
||||
var localeXML = Zotero.Cite.Locale.get(cslLocale);
|
||||
var parser;
|
||||
if (Zotero.platformMajorVersion > 60) {
|
||||
parser = new DOMParser();
|
||||
}
|
||||
else {
|
||||
parser = Components.classes["@mozilla.org/xmlextras/domparser;1"]
|
||||
.createInstance(Components.interfaces.nsIDOMParser);
|
||||
}
|
||||
var doc = parser.parseFromString(localeXML, 'text/xml');
|
||||
var englishDoc;
|
||||
// Cache all locators for the current locale
|
||||
for (let locator of this.labels) {
|
||||
let elem = doc.querySelector(`term[name="${locator}"]:not([form="short"]) > single`);
|
||||
if (!elem) {
|
||||
// If locator not found, get from the U.S. English locale
|
||||
if (cslLocale != 'en-US') {
|
||||
Zotero.logError(`Locator '${locator}' not found in ${cslLocale} locale -- trying en-US`);
|
||||
if (!englishDoc) {
|
||||
englishDoc = parser.parseFromString(Zotero.Cite.Locale.get('en-US'), 'text/xml');
|
||||
}
|
||||
elem = englishDoc.querySelector(`term[name="${locator}"]:not([form="short"]) > single`);
|
||||
if (!elem) {
|
||||
Zotero.logError(`Locator '${locator}' not found in en-US locale -- using name`);
|
||||
}
|
||||
}
|
||||
else {
|
||||
Zotero.logError(`Locator '${locator}' not found in en-US locale -- using name`);
|
||||
}
|
||||
// If still not found, use the locator name directly
|
||||
if (!elem) {
|
||||
map.set(locator, Zotero.Utilities.capitalize(locator));
|
||||
continue;
|
||||
}
|
||||
}
|
||||
// If <single> is empty, use the locator name directly
|
||||
let str = elem.textContent;
|
||||
if (!str) {
|
||||
Zotero.logError(`Locator '${locator}' is empty in ${cslLocale} locale -- using name`);
|
||||
map.set(locator, Zotero.Utilities.capitalize(locator));
|
||||
continue;
|
||||
}
|
||||
map.set(locator, Zotero.Utilities.capitalize(str));
|
||||
}
|
||||
|
||||
return map.get(locator);
|
||||
},
|
||||
|
||||
/**
|
||||
* Remove specified item IDs in-place from a citeproc-js bibliography object returned
|
||||
|
|
|
|||
|
|
@ -22261,7 +22261,7 @@ CSL.Output.Formats.prototype.text = {
|
|||
return "\n"+str;
|
||||
},
|
||||
"@display/left-margin": function (state, str) {
|
||||
return str;
|
||||
return str + " ";
|
||||
},
|
||||
"@display/right-inline": function (state, str) {
|
||||
return str;
|
||||
|
|
|
|||
|
|
@ -383,6 +383,10 @@ Zotero.CookieSandbox.Observer = new function() {
|
|||
if(trackedBy) {
|
||||
var cookiesForURI = trackedBy.getCookiesForURI(channel.URI);
|
||||
}
|
||||
|
||||
if (trackedBy && trackedBy.userAgent) {
|
||||
channel.setRequestHeader("User-Agent", trackedBy.userAgent, false);
|
||||
}
|
||||
|
||||
if(!trackedBy || !cookiesForURI) {
|
||||
channel.setRequestHeader("Cookie", "", false);
|
||||
|
|
@ -390,11 +394,7 @@ Zotero.CookieSandbox.Observer = new function() {
|
|||
Zotero.debug("CookieSandbox: Cleared cookies to be sent to "+channelURI, 5);
|
||||
return;
|
||||
}
|
||||
|
||||
if(trackedBy.userAgent) {
|
||||
channel.setRequestHeader("User-Agent", trackedBy.userAgent, false);
|
||||
}
|
||||
|
||||
|
||||
// add cookies to be sent to this domain
|
||||
channel.setRequestHeader("Cookie", Zotero.CookieSandbox.generateCookieString(cookiesForURI), false);
|
||||
Zotero.debug("CookieSandbox: Added cookies for request to "+channelURI, 5);
|
||||
|
|
|
|||
|
|
@ -275,7 +275,7 @@ Zotero.DataObjectUtilities = {
|
|||
var pred2 = Object.keys(data2);
|
||||
pred2.sort();
|
||||
if (!Zotero.Utilities.arrayEquals(pred1, pred2)) return true;
|
||||
for (let pred in pred1) {
|
||||
for (let pred of pred1) {
|
||||
let vals1 = typeof data1[pred] == 'string' ? [data1[pred]] : data1[pred];
|
||||
let vals2 = (!data2[pred] || data2[pred] === '')
|
||||
? []
|
||||
|
|
|
|||
|
|
@ -133,8 +133,9 @@ Zotero.Feeds = new function() {
|
|||
for (let feedElem of feedElems) {
|
||||
let url = feedElem.getAttribute('xmlUrl');
|
||||
if (!url) url = feedElem.getAttribute('url');
|
||||
let name = feedElem.getAttribute('title');
|
||||
if (!name) name = feedElem.getAttribute('text');
|
||||
let name = feedElem.getAttribute('title')
|
||||
|| feedElem.getAttribute('text')
|
||||
|| Zotero.getString('pane.collections.untitled');
|
||||
if (Zotero.Feeds.existsByURL(url) || registeredUrls.has(url)) {
|
||||
Zotero.debug("Feed Import from OPML: Feed " + name + " : " + url + " already exists. Skipping");
|
||||
continue;
|
||||
|
|
|
|||
|
|
@ -153,7 +153,16 @@ Zotero.defineProperty(Zotero.Item.prototype, 'parentItemKey', {
|
|||
Zotero.defineProperty(Zotero.Item.prototype, 'parentItem', {
|
||||
get: function() { return Zotero.Items.get(this.parentID) || undefined; },
|
||||
});
|
||||
|
||||
Zotero.defineProperty(Zotero.Item.prototype, 'topLevelItem', {
|
||||
get: function () {
|
||||
var item = this; // eslint-disable-line consistent-this
|
||||
var parentItem;
|
||||
while ((parentItem = item.parentItem)) {
|
||||
item = parentItem;
|
||||
}
|
||||
return item;
|
||||
}
|
||||
});
|
||||
|
||||
Zotero.defineProperty(Zotero.Item.prototype, 'firstCreator', {
|
||||
get: function() { return this._firstCreator; }
|
||||
|
|
@ -3713,7 +3722,7 @@ Zotero.Item.prototype.getBestAttachments = Zotero.Promise.coroutine(function* ()
|
|||
|
||||
|
||||
/**
|
||||
* Return state of best attachment
|
||||
* Return state of best attachment (or this item if it's a standalone attachment)
|
||||
*
|
||||
* @return {Promise<Object>} - Promise for object with string 'type' ('none'|'pdf'|'snapshot'|'other')
|
||||
* and boolean 'exists'
|
||||
|
|
@ -3722,7 +3731,9 @@ Zotero.Item.prototype.getBestAttachmentState = async function () {
|
|||
if (this._bestAttachmentState !== null) {
|
||||
return this._bestAttachmentState;
|
||||
}
|
||||
var item = await this.getBestAttachment();
|
||||
var item = this.isAttachment() && this.isTopLevelItem()
|
||||
? this
|
||||
: await this.getBestAttachment();
|
||||
if (!item) {
|
||||
return this._bestAttachmentState = {
|
||||
type: 'none'
|
||||
|
|
@ -3953,6 +3964,29 @@ Zotero.Item.prototype.getAnnotations = function (includeTrashed) {
|
|||
};
|
||||
|
||||
|
||||
/**
|
||||
* Determine if the item is a PDF attachment that exists on disk and contains
|
||||
* embedded markup annotations.
|
||||
*
|
||||
* @return {Promise<Boolean>}
|
||||
*/
|
||||
Zotero.Item.prototype.hasEmbeddedAnnotations = async function () {
|
||||
if (!this.isPDFAttachment()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
let path = await this.getFilePathAsync();
|
||||
if (!path) {
|
||||
return false;
|
||||
}
|
||||
|
||||
let contents = await Zotero.File.getContentsAsync(path);
|
||||
// Check for "markup" annotations per the PDF spec
|
||||
// https://opensource.adobe.com/dc-acrobat-sdk-docs/pdfstandards/PDF32000_2008.pdf, p. 390
|
||||
let re = /\s\/Subtype\s+\/(Text|FreeText|Line|Square|Circle|Polygon|PolyLine|Highlight|Underline|Squiggly|StrikeOut|Stamp|Caret|Ink|FileAttachment|Sound|Redact)\s/;
|
||||
return re.test(contents);
|
||||
};
|
||||
|
||||
|
||||
//
|
||||
// Methods dealing with item tags
|
||||
|
|
|
|||
|
|
@ -1035,6 +1035,29 @@ Zotero.Items = function() {
|
|||
for (let otherItem of otherItems) {
|
||||
let mergedMasterAttachments = new Set();
|
||||
|
||||
let doMerge = async (fromAttachment, toAttachment) => {
|
||||
mergedMasterAttachments.add(toAttachment.id);
|
||||
|
||||
await this.moveChildItems(fromAttachment, toAttachment, true);
|
||||
await this._moveEmbeddedNote(fromAttachment, toAttachment);
|
||||
await this._moveRelations(fromAttachment, toAttachment);
|
||||
|
||||
fromAttachment.deleted = true;
|
||||
await fromAttachment.save();
|
||||
|
||||
// Later on, when processing notes, we'll use this to remap
|
||||
// URLs pointing to the old attachment.
|
||||
remapAttachmentKeys.set(fromAttachment.key, toAttachment.key);
|
||||
|
||||
// Items can only have one replaced item predicate
|
||||
if (!toAttachment.getRelationsByPredicate(Zotero.Relations.replacedItemPredicate)) {
|
||||
toAttachment.addRelation(Zotero.Relations.replacedItemPredicate,
|
||||
Zotero.URI.getItemURI(fromAttachment));
|
||||
}
|
||||
|
||||
await toAttachment.save();
|
||||
};
|
||||
|
||||
for (let otherAttachment of await this.getAsync(otherItem.getAttachments(true))) {
|
||||
if (!otherAttachment.isPDFAttachment()) {
|
||||
continue;
|
||||
|
|
@ -1065,13 +1088,12 @@ Zotero.Items = function() {
|
|||
await otherAttachment.save();
|
||||
continue;
|
||||
}
|
||||
mergedMasterAttachments.add(masterAttachmentID);
|
||||
|
||||
let masterAttachment = await this.getAsync(masterAttachmentID);
|
||||
|
||||
if (masterAttachment.attachmentContentType !== otherAttachment.attachmentContentType) {
|
||||
Zotero.debug(`Master attachment ${masterAttachment.key} matches ${otherAttachment.key}, `
|
||||
+ 'but content types differ - moving');
|
||||
+ 'but content types differ - keeping both');
|
||||
otherAttachment.parentItemID = item.id;
|
||||
await otherAttachment.save();
|
||||
continue;
|
||||
|
|
@ -1080,31 +1102,35 @@ Zotero.Items = function() {
|
|||
if (!((masterAttachment.isImportedAttachment() && otherAttachment.isImportedAttachment())
|
||||
|| (masterAttachment.isLinkedFileAttachment() && otherAttachment.isLinkedFileAttachment()))) {
|
||||
Zotero.debug(`Master attachment ${masterAttachment.key} matches ${otherAttachment.key}, `
|
||||
+ 'but link modes differ - moving');
|
||||
+ 'but link modes differ - keeping both');
|
||||
otherAttachment.parentItemID = item.id;
|
||||
await otherAttachment.save();
|
||||
continue;
|
||||
}
|
||||
|
||||
Zotero.debug(`Master attachment ${masterAttachment.key} matches ${otherAttachment.key} - merging`);
|
||||
await this.moveChildItems(otherAttachment, masterAttachment, true);
|
||||
await this._moveEmbeddedNote(otherAttachment, masterAttachment);
|
||||
await this._moveRelations(otherAttachment, masterAttachment);
|
||||
|
||||
otherAttachment.deleted = true;
|
||||
await otherAttachment.save();
|
||||
|
||||
// Later on, when processing notes, we'll use this to remap
|
||||
// URLs pointing to the old attachment.
|
||||
remapAttachmentKeys.set(otherAttachment.key, masterAttachment.key);
|
||||
|
||||
// Items can only have one replaced item predicate
|
||||
if (!masterAttachment.getRelationsByPredicate(Zotero.Relations.replacedItemPredicate)) {
|
||||
masterAttachment.addRelation(Zotero.Relations.replacedItemPredicate,
|
||||
Zotero.URI.getItemURI(otherAttachment));
|
||||
// Check whether master and other have embedded annotations
|
||||
// Master yes, other yes -> keep both
|
||||
// Master yes, other no -> keep master
|
||||
// Master no, other yes -> keep other
|
||||
if (await otherAttachment.hasEmbeddedAnnotations()) {
|
||||
if (await masterAttachment.hasEmbeddedAnnotations()) {
|
||||
Zotero.debug(`Master attachment ${masterAttachment.key} matches ${otherAttachment.key}, `
|
||||
+ 'but both have embedded annotations - keeping both');
|
||||
otherAttachment.parentItemID = item.id;
|
||||
await otherAttachment.save();
|
||||
}
|
||||
else {
|
||||
Zotero.debug(`Master attachment ${masterAttachment.key} matches ${otherAttachment.key}, `
|
||||
+ 'but other has embedded annotations - merging into other');
|
||||
await doMerge(masterAttachment, otherAttachment);
|
||||
otherAttachment.parentItemID = item.id;
|
||||
await otherAttachment.save();
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
await masterAttachment.save();
|
||||
Zotero.debug(`Master attachment ${masterAttachment.key} matches ${otherAttachment.key} - merging into master`);
|
||||
await doMerge(otherAttachment, masterAttachment);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1477,6 +1503,7 @@ Zotero.Items = function() {
|
|||
);
|
||||
}
|
||||
Zotero.debug("Emptied " + deleted.length + " item(s) from trash in " + (new Date() - t) + " ms");
|
||||
Zotero.Notifier.trigger('refresh', 'trash', libraryID);
|
||||
}
|
||||
|
||||
return deleted.length;
|
||||
|
|
@ -1709,22 +1736,40 @@ Zotero.Items = function() {
|
|||
|
||||
|
||||
/**
|
||||
* Returns an array of items with children of selected parents removed
|
||||
* Get the top-level items of all passed items
|
||||
*
|
||||
* @param {Zotero.Item[]} items
|
||||
* @return {Zotero.Item[]}
|
||||
*/
|
||||
this.keepParents = function (items) {
|
||||
var parentItems = new Set(
|
||||
items
|
||||
.filter(item => item.isTopLevelItem())
|
||||
.map(item => item.id)
|
||||
this.getTopLevel = function (items) {
|
||||
return [...new Set(items.map(item => item.topLevelItem))];
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Return an array of items with descendants of selected top-level items removed
|
||||
*
|
||||
* Non-top-level items that aren't descendents of selected items are kept.
|
||||
*
|
||||
* @param {Zotero.Item[]}
|
||||
* @return {Zotero.Item[]}
|
||||
*/
|
||||
this.keepTopLevel = function (items) {
|
||||
var topLevelItems = new Set(
|
||||
items.filter(item => item.isTopLevelItem())
|
||||
);
|
||||
return items.filter(item => {
|
||||
var parentItemID = item.parentItemID;
|
||||
return items.filter((item) => {
|
||||
var topLevelItem = !item.isTopLevelItem() && item.topLevelItem;
|
||||
// Not a child item or not a child of one of the passed items
|
||||
return !parentItemID || !parentItems.has(parentItemID);
|
||||
return !topLevelItem || !topLevelItems.has(topLevelItem);
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
this.keepParents = function (items) {
|
||||
Zotero.debug("Zotero.Items.keepParents() is deprecated -- use Zotero.Items.keepTopLevel() instead");
|
||||
return this.keepTopLevel(items);
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -948,7 +948,11 @@ Zotero.Search.idsToTempTable = Zotero.Promise.coroutine(function* (ids) {
|
|||
Zotero.Search.prototype._buildQuery = Zotero.Promise.coroutine(function* () {
|
||||
this._requireData('conditions');
|
||||
|
||||
var sql = 'SELECT itemID FROM items';
|
||||
// TEMP: Match parent attachment for annotation matches
|
||||
// var sql = 'SELECT itemID FROM items';
|
||||
var sql = "SELECT COALESCE(IA.parentItemID, itemID) AS itemID FROM items "
|
||||
+ "LEFT JOIN itemAnnotations IA USING (itemID)";
|
||||
|
||||
var sqlParams = [];
|
||||
// Separate ANY conditions for 'required' condition support
|
||||
var anySQL = '';
|
||||
|
|
@ -962,7 +966,8 @@ Zotero.Search.prototype._buildQuery = Zotero.Promise.coroutine(function* () {
|
|||
let conditionData = Zotero.SearchConditions.get(name);
|
||||
|
||||
// Has a table (or 'savedSearch', which doesn't have a table but isn't special)
|
||||
if (conditionData.table || name == 'savedSearch' || name == 'tempTable') {
|
||||
// TEMP: Or 'tag', which needs to match annotation parents
|
||||
if (conditionData.table || name == 'savedSearch' || name == 'tempTable' || name == 'tag') {
|
||||
// For conditions with an inline filter using 'is'/'isNot', combine with last condition
|
||||
// if the same
|
||||
if (lastCondition
|
||||
|
|
@ -1077,14 +1082,15 @@ Zotero.Search.prototype._buildQuery = Zotero.Promise.coroutine(function* () {
|
|||
}
|
||||
|
||||
if (unfiled) {
|
||||
sql += " AND (itemID NOT IN (SELECT itemID FROM collectionItems) "
|
||||
sql += " AND (itemID NOT IN ("
|
||||
+ "SELECT itemID FROM collectionItems "
|
||||
// Exclude children
|
||||
+ "AND itemID NOT IN "
|
||||
+ "(SELECT itemID FROM itemAttachments WHERE parentItemID IS NOT NULL "
|
||||
+ "UNION SELECT itemID FROM itemNotes WHERE parentItemID IS NOT NULL)"
|
||||
+ ") "
|
||||
+ "UNION SELECT itemID FROM itemAttachments WHERE parentItemID IS NOT NULL "
|
||||
+ "UNION SELECT itemID FROM itemNotes WHERE parentItemID IS NOT NULL "
|
||||
+ "UNION SELECT itemID FROM itemAnnotations "
|
||||
// Exclude My Publications
|
||||
+ "AND itemID NOT IN (SELECT itemID FROM publicationsItems)";
|
||||
+ "UNION SELECT itemID FROM publicationsItems "
|
||||
+ "))";
|
||||
}
|
||||
|
||||
if (retracted) {
|
||||
|
|
@ -1119,22 +1125,35 @@ Zotero.Search.prototype._buildQuery = Zotero.Promise.coroutine(function* () {
|
|||
//
|
||||
// Special table handling
|
||||
//
|
||||
if (condition['table']){
|
||||
switch (condition['table']){
|
||||
default:
|
||||
condSelectSQL += 'itemID '
|
||||
switch (condition['operator']){
|
||||
case 'isNot':
|
||||
case 'doesNotContain':
|
||||
condSelectSQL += 'NOT ';
|
||||
break;
|
||||
}
|
||||
condSelectSQL += 'IN (';
|
||||
selectOpenParens = 1;
|
||||
condSQL += 'SELECT itemID FROM ' +
|
||||
condition['table'] + ' WHERE (';
|
||||
openParens = 1;
|
||||
if (condition.table) {
|
||||
condSelectSQL += 'itemID '
|
||||
switch (condition.operator) {
|
||||
case 'isNot':
|
||||
case 'doesNotContain':
|
||||
condSelectSQL += 'NOT ';
|
||||
break;
|
||||
}
|
||||
condSelectSQL += 'IN (';
|
||||
selectOpenParens = 1;
|
||||
|
||||
switch (condition.name) {
|
||||
// TEMP: Match parent attachments of matching annotations
|
||||
case 'tag':
|
||||
condSQL += "SELECT COALESCE(IAnT.parentItemID, itemID) FROM itemTags "
|
||||
+ "LEFT JOIN itemAnnotations IAnT USING (itemID) WHERE (";
|
||||
break;
|
||||
|
||||
// TEMP: Match parent attachments of matching annotations
|
||||
case 'annotationText':
|
||||
case 'annotationComment':
|
||||
condSQL += `SELECT parentItemID FROM ${condition.table} WHERE (`
|
||||
break;
|
||||
|
||||
default:
|
||||
condSQL += `SELECT itemID FROM ${condition.table} WHERE (`;
|
||||
}
|
||||
|
||||
openParens = 1;
|
||||
}
|
||||
|
||||
//
|
||||
|
|
@ -1709,7 +1728,11 @@ Zotero.Search.prototype._buildQuery = Zotero.Promise.coroutine(function* () {
|
|||
|
||||
// Add on quicksearch conditions
|
||||
if (quicksearchSQLSet) {
|
||||
sql = "SELECT itemID FROM items WHERE itemID IN (" + sql + ") "
|
||||
// TEMP: Match parent attachments for annotations
|
||||
//sql = "SELECT itemID FROM items WHERE itemID IN (" + sql + ") "
|
||||
sql = "SELECT COALESCE(IAn.parentItemID, itemID) AS itemID FROM items "
|
||||
+ "LEFT JOIN itemAnnotations IAn USING (itemID) "
|
||||
+ "WHERE itemID IN (" + sql + ") "
|
||||
+ "AND ((" + quicksearchSQLSet.join(') AND (') + "))";
|
||||
|
||||
for (var k=0; k<quicksearchParamsSet.length; k++) {
|
||||
|
|
|
|||
|
|
@ -163,9 +163,6 @@ Zotero.Tags = new function() {
|
|||
if (libraryID) {
|
||||
sql += "JOIN items USING (itemID) WHERE libraryID = ? ";
|
||||
params.push(libraryID);
|
||||
// TEMP: Don't show annotation tags in tag selector
|
||||
sql += "AND itemTypeID != ? ";
|
||||
params.push(Zotero.ItemTypes.getID('annotation'));
|
||||
}
|
||||
else {
|
||||
sql += "WHERE 1 ";
|
||||
|
|
@ -174,7 +171,11 @@ Zotero.Tags = new function() {
|
|||
if (libraryID) {
|
||||
throw new Error("tmpTable and libraryID are mutually exclusive");
|
||||
}
|
||||
sql += "AND itemID IN (SELECT itemID FROM " + tmpTable + ") ";
|
||||
sql += "AND itemID IN (SELECT itemID FROM " + tmpTable;
|
||||
// TEMP: Match parent attachments for annotation tags
|
||||
sql += " UNION SELECT itemID FROM itemAnnotations WHERE parentItemID IN "
|
||||
+ "(SELECT itemID FROM " + tmpTable + ")";
|
||||
sql += ") ";
|
||||
}
|
||||
if (types && types.length) {
|
||||
sql += "AND type IN (" + new Array(types.length).fill('?').join(', ') + ") ";
|
||||
|
|
|
|||
|
|
@ -25,6 +25,8 @@
|
|||
|
||||
Components.utils.import("resource://gre/modules/InlineSpellChecker.jsm");
|
||||
|
||||
import FilePicker from 'zotero/modules/filePicker';
|
||||
|
||||
// Note: TinyMCE is automatically doing some meaningless corrections to
|
||||
// note-editor produced HTML. Which might result to more
|
||||
// conflicts, especially in group libraries
|
||||
|
|
@ -43,9 +45,6 @@ const DOWNLOADED_IMAGE_TYPE = [
|
|||
'image/png'
|
||||
];
|
||||
|
||||
// Schema version here has to be the same as in note-editor!
|
||||
const SCHEMA_VERSION = 8;
|
||||
|
||||
class EditorInstance {
|
||||
constructor() {
|
||||
this.instanceID = Zotero.Utilities.randomString();
|
||||
|
|
@ -89,6 +88,76 @@ class EditorInstance {
|
|||
return doc.execCommand(command, ui, value);
|
||||
};
|
||||
|
||||
// Translate note HTML into Markdown, for setting it as text/plain in clipboard (on text copy/drag)
|
||||
this._iframeWindow.wrappedJSObject.zoteroTranslateToMarkdown = (html) => {
|
||||
let item = new Zotero.Item('note');
|
||||
item.libraryID = this._item.libraryID;
|
||||
item.setNote(html);
|
||||
let text = '';
|
||||
var translation = new Zotero.Translate.Export;
|
||||
translation.noWait = true;
|
||||
translation.setItems([item]);
|
||||
translation.setTranslator(Zotero.Translators.TRANSLATOR_ID_NOTE_MARKDOWN);
|
||||
translation.setHandler("done", (obj, worked) => {
|
||||
if (worked) {
|
||||
text = obj.string.replace(/\r\n/g, '\n');
|
||||
}
|
||||
});
|
||||
translation.translate();
|
||||
return text;
|
||||
};
|
||||
|
||||
this._iframeWindow.wrappedJSObject.zoteroCopyImage = async (dataURL) => {
|
||||
let parts = dataURL.split(',');
|
||||
if (!parts[0].includes('base64')) {
|
||||
return;
|
||||
}
|
||||
let mime = parts[0].match(/:(.*?);/)[1];
|
||||
let bstr = atob(parts[1]);
|
||||
let n = bstr.length;
|
||||
let u8arr = new Uint8Array(n);
|
||||
while (n--) {
|
||||
u8arr[n] = bstr.charCodeAt(n);
|
||||
}
|
||||
let imgTools = Components.classes["@mozilla.org/image/tools;1"]
|
||||
.getService(Components.interfaces.imgITools);
|
||||
let transferable = Components.classes['@mozilla.org/widget/transferable;1']
|
||||
.createInstance(Components.interfaces.nsITransferable);
|
||||
let clipboardService = Components.classes['@mozilla.org/widget/clipboard;1']
|
||||
.getService(Components.interfaces.nsIClipboard);
|
||||
let imgPtr = Components.classes["@mozilla.org/supports-interface-pointer;1"]
|
||||
.createInstance(Components.interfaces.nsISupportsInterfacePointer);
|
||||
imgPtr.data = imgTools.decodeImageFromArrayBuffer(u8arr.buffer, mime);
|
||||
transferable.init(null);
|
||||
transferable.addDataFlavor(mime);
|
||||
transferable.setTransferData(mime, imgPtr, 0);
|
||||
clipboardService.setData(transferable, null, Components.interfaces.nsIClipboard.kGlobalClipboard);
|
||||
};
|
||||
|
||||
this._iframeWindow.wrappedJSObject.zoteroSaveImageAs = async (dataURL) => {
|
||||
let parts = dataURL.split(',');
|
||||
if (!parts[0].includes('base64')) {
|
||||
return;
|
||||
}
|
||||
let mime = parts[0].match(/:(.*?);/)[1];
|
||||
let bstr = atob(parts[1]);
|
||||
let n = bstr.length;
|
||||
let u8arr = new Uint8Array(n);
|
||||
while (n--) {
|
||||
u8arr[n] = bstr.charCodeAt(n);
|
||||
}
|
||||
let ext = Zotero.MIME.getPrimaryExtension(mime, '');
|
||||
let fp = new FilePicker();
|
||||
fp.init(this._iframeWindow, Zotero.getString('noteEditor.saveImageAs'), fp.modeSave);
|
||||
fp.appendFilters(fp.filterImages);
|
||||
fp.defaultString = Zotero.getString('fileTypes.image').toLowerCase() + '.' + ext;
|
||||
let rv = await fp.show();
|
||||
if (rv === fp.returnOK || rv === fp.returnReplace) {
|
||||
let outputPath = fp.file;
|
||||
await OS.File.writeAtomic(outputPath, u8arr);
|
||||
}
|
||||
};
|
||||
|
||||
this._iframeWindow.addEventListener('message', this._messageHandler);
|
||||
this._iframeWindow.addEventListener('error', (event) => {
|
||||
Zotero.logError(event.error);
|
||||
|
|
@ -697,6 +766,9 @@ class EditorInstance {
|
|||
}
|
||||
menuitem.setAttribute('checked', item.checked);
|
||||
menuitem.addEventListener('command', () => {
|
||||
if (item.name === 'insertImage') {
|
||||
return this._iframeWindow.eval('openImageFilePicker()');
|
||||
}
|
||||
this._postMessage({
|
||||
action: 'contextMenuAction',
|
||||
ctxAction: item.name,
|
||||
|
|
@ -1193,10 +1265,12 @@ class EditorInstance {
|
|||
* Create note from annotations
|
||||
*
|
||||
* @param {Zotero.Item[]} annotations
|
||||
* @param {Integer} parentID Creates standalone note if not provided
|
||||
* @param {Object} options
|
||||
* @param {Integer} options.parentID - Creates standalone note if not provided
|
||||
* @param {Integer} options.collectionID - Only valid if parentID not provided
|
||||
* @returns {Promise<Zotero.Item>}
|
||||
*/
|
||||
static async createNoteFromAnnotations(annotations, parentID) {
|
||||
static async createNoteFromAnnotations(annotations, { parentID, collectionID } = {}) {
|
||||
if (!annotations.length) {
|
||||
throw new Error("No annotations provided");
|
||||
}
|
||||
|
|
@ -1217,7 +1291,12 @@ class EditorInstance {
|
|||
|
||||
let note = new Zotero.Item('note');
|
||||
note.libraryID = annotations[0].libraryID;
|
||||
note.parentID = parentID;
|
||||
if (parentID) {
|
||||
note.parentID = parentID;
|
||||
}
|
||||
else if (collectionID) {
|
||||
note.addToCollection(collectionID);
|
||||
}
|
||||
await note.saveTx();
|
||||
let editorInstance = new EditorInstance();
|
||||
editorInstance._item = note;
|
||||
|
|
@ -1239,10 +1318,61 @@ class EditorInstance {
|
|||
html += '\n';
|
||||
|
||||
await editorInstance.importImages(jsonAnnotations);
|
||||
let { html: serializedHTML, citationItems } = Zotero.EditorInstanceUtilities.serializeAnnotations(jsonAnnotations, true);
|
||||
html += serializedHTML;
|
||||
|
||||
let multipleParentParent = false;
|
||||
let lastParentParentID;
|
||||
let lastParentID;
|
||||
// Group annotations per attachment
|
||||
let groups = [];
|
||||
for (let i = 0; i < annotations.length; i++) {
|
||||
let annotation = annotations[i];
|
||||
let jsonAnnotation = jsonAnnotations[i];
|
||||
let parentParentID = annotation.parentItem.parentID;
|
||||
let parentID = annotation.parentID;
|
||||
if (groups.length) {
|
||||
if (parentParentID !== lastParentParentID) {
|
||||
// Multiple top level regular items detected, allow including their titles
|
||||
multipleParentParent = true;
|
||||
}
|
||||
}
|
||||
if (!groups.length || parentID !== lastParentID) {
|
||||
groups.push({
|
||||
parentTitle: annotation.parentItem.getDisplayTitle(),
|
||||
parentParentID,
|
||||
parentParentTitle: annotation.parentItem.parentItem && annotation.parentItem.parentItem.getDisplayTitle(),
|
||||
jsonAnnotations: [jsonAnnotation]
|
||||
});
|
||||
}
|
||||
else {
|
||||
let group = groups[groups.length - 1];
|
||||
group.jsonAnnotations.push(jsonAnnotation);
|
||||
}
|
||||
lastParentParentID = parentParentID;
|
||||
lastParentID = parentID;
|
||||
}
|
||||
let citationItems = [];
|
||||
lastParentParentID = null;
|
||||
for (let group of groups) {
|
||||
if (multipleParentParent && group.parentParentTitle && lastParentParentID !== group.parentParentID) {
|
||||
html += `<h2>${group.parentParentTitle}</h2>\n`;
|
||||
}
|
||||
lastParentParentID = group.parentParentID;
|
||||
// If attachment doesn't have a parent or there are more attachments with the same parent, show attachment title
|
||||
if (!group.parentParentID || groups.filter(x => x.parentParentID === group.parentParentID).length > 1) {
|
||||
html += `<h3>${group.parentTitle}</h3>\n`;
|
||||
}
|
||||
let { html: _html, citationItems: _citationItems } = Zotero.EditorInstanceUtilities.serializeAnnotations(group.jsonAnnotations, true);
|
||||
html += _html + '\n';
|
||||
for (let _citationItem of _citationItems) {
|
||||
if (!citationItems.find(item => item.uris.some(uri => _citationItem.uris.includes(uri)))) {
|
||||
citationItems.push(_citationItem);
|
||||
}
|
||||
}
|
||||
}
|
||||
citationItems = encodeURIComponent(JSON.stringify(citationItems));
|
||||
html = `<div data-citation-items="${citationItems}" data-schema-version="${SCHEMA_VERSION}">${html}</div>`;
|
||||
// Note: Update schema version only if using new features
|
||||
let schemaVersion = 8;
|
||||
html = `<div data-citation-items="${citationItems}" data-schema-version="${schemaVersion}">${html}</div>`;
|
||||
note.setNote(html);
|
||||
await note.saveTx();
|
||||
return note;
|
||||
|
|
@ -1359,16 +1489,24 @@ class EditorInstanceUtilities {
|
|||
template = '<p>{{image}}<br/>{{citation}} {{comment}}</p>';
|
||||
}
|
||||
|
||||
Zotero.debug('Using note template:');
|
||||
Zotero.debug(template);
|
||||
|
||||
template = template.replace(
|
||||
/(<blockquote>[^<>]*?)({{highlight}})([\s\S]*?<\/blockquote>)/g,
|
||||
(match, p1, p2, p3) => p1 + "{{highlight quotes='false'}}" + p3
|
||||
);
|
||||
|
||||
let vars = {
|
||||
color: annotation.color || '',
|
||||
highlight: (attrs) => attrs.quotes === 'true' ? quotedHighlightHTML : highlightHTML,
|
||||
// Include quotation marks by default, but allow to disable with `quotes='false'`
|
||||
highlight: (attrs) => attrs.quotes === 'false' ? highlightHTML : quotedHighlightHTML,
|
||||
comment: commentHTML,
|
||||
citation: citationHTML,
|
||||
image: imageHTML,
|
||||
tags: (attrs) => (annotation.tags && annotation.tags.map(tag => tag.name) || []).join(attrs.join || ' ')
|
||||
};
|
||||
Zotero.debug('Using note template:');
|
||||
Zotero.debug(template);
|
||||
|
||||
let templateHTML = Zotero.Utilities.Internal.generateHTMLFromTemplate(template, vars);
|
||||
// Remove some spaces at the end of paragraph
|
||||
templateHTML = templateHTML.replace(/([\s]*)(<\/p)/g, '$2');
|
||||
|
|
@ -1529,5 +1667,4 @@ class EditorInstanceUtilities {
|
|||
}
|
||||
|
||||
Zotero.EditorInstance = EditorInstance;
|
||||
Zotero.EditorInstance.SCHEMA_VERSION = SCHEMA_VERSION;
|
||||
Zotero.EditorInstanceUtilities = new EditorInstanceUtilities();
|
||||
|
|
|
|||
|
|
@ -166,46 +166,48 @@ Zotero.HTTP = new function() {
|
|||
if (e.xmlhttp.status == 503 && await _checkRetry(e.xmlhttp)) {
|
||||
continue;
|
||||
}
|
||||
// Don't retry if errorDelayMax is 0
|
||||
if (options.errorDelayMax === 0) {
|
||||
throw e;
|
||||
}
|
||||
// Automatically retry other 5xx errors by default
|
||||
if (options.errorDelayMax !== 0) {
|
||||
if (!errorDelayGenerator) {
|
||||
// Keep trying for up to an hour
|
||||
errorDelayGenerator = Zotero.Utilities.Internal.delayGenerator(
|
||||
options.errorDelayIntervals || _errorDelayIntervals,
|
||||
options.errorDelayMax !== undefined
|
||||
? options.errorDelayMax
|
||||
: _errorDelayMax
|
||||
);
|
||||
if (!errorDelayGenerator) {
|
||||
// Keep trying for up to an hour
|
||||
errorDelayGenerator = Zotero.Utilities.Internal.delayGenerator(
|
||||
options.errorDelayIntervals || _errorDelayIntervals,
|
||||
options.errorDelayMax !== undefined
|
||||
? options.errorDelayMax
|
||||
: _errorDelayMax
|
||||
);
|
||||
}
|
||||
let delayPromise = errorDelayGenerator.next().value;
|
||||
let keepGoing;
|
||||
// Provide caller with a callback to cancel while waiting to retry
|
||||
if (options.cancellerReceiver) {
|
||||
let resolve;
|
||||
let reject;
|
||||
let cancelPromise = new Zotero.Promise((res, rej) => {
|
||||
resolve = res;
|
||||
reject = function () {
|
||||
rej(new Zotero.HTTP.CancelledException);
|
||||
};
|
||||
});
|
||||
options.cancellerReceiver(reject);
|
||||
try {
|
||||
keepGoing = await Promise.race([delayPromise, cancelPromise]);
|
||||
}
|
||||
let delayPromise = errorDelayGenerator.next().value;
|
||||
let keepGoing;
|
||||
// Provide caller with a callback to cancel while waiting to retry
|
||||
if (options.cancellerReceiver) {
|
||||
let resolve;
|
||||
let reject;
|
||||
let cancelPromise = new Zotero.Promise((res, rej) => {
|
||||
resolve = res;
|
||||
reject = function () {
|
||||
rej(new Zotero.HTTP.CancelledException);
|
||||
};
|
||||
});
|
||||
options.cancellerReceiver(reject);
|
||||
try {
|
||||
keepGoing = await Promise.race([delayPromise, cancelPromise]);
|
||||
}
|
||||
catch (e) {
|
||||
Zotero.debug("Request cancelled");
|
||||
throw e;
|
||||
}
|
||||
resolve();
|
||||
}
|
||||
else {
|
||||
keepGoing = await delayPromise;
|
||||
}
|
||||
if (!keepGoing) {
|
||||
Zotero.logError("Failed too many times");
|
||||
catch (e) {
|
||||
Zotero.debug("Request cancelled");
|
||||
throw e;
|
||||
}
|
||||
resolve();
|
||||
}
|
||||
else {
|
||||
keepGoing = await delayPromise;
|
||||
}
|
||||
if (!keepGoing) {
|
||||
Zotero.logError("Failed too many times");
|
||||
throw e;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
|
@ -1217,9 +1219,10 @@ Zotero.HTTP = new function() {
|
|||
* @param {Boolean} dontDelete Don't delete the hidden browser upon completion; calling function
|
||||
* must call deleteHiddenBrowser itself.
|
||||
* @param {Zotero.CookieSandbox} [cookieSandbox] Cookie sandbox object
|
||||
* @param {Object} [docShellPrefs] See Zotero.Browser.createHiddenBrowser
|
||||
* @return {browser} Hidden browser used for loading
|
||||
*/
|
||||
this.loadDocuments = function (urls, processor, onDone, onError, dontDelete, cookieSandbox) {
|
||||
this.loadDocuments = function (urls, processor, onDone, onError, dontDelete, cookieSandbox, docShellPrefs={}) {
|
||||
// (Approximately) how many seconds to wait if the document is left in the loading state and
|
||||
// pageshow is called before we call pageshow with an incomplete document
|
||||
const LOADING_STATE_TIMEOUT = 120;
|
||||
|
|
@ -1342,6 +1345,9 @@ Zotero.HTTP = new function() {
|
|||
currentURL = 0;
|
||||
for(var i=0; i<urls.length; i++) {
|
||||
let hiddenBrowser = Zotero.Browser.createHiddenBrowser();
|
||||
for (let pref in docShellPrefs) {
|
||||
hiddenBrowser.docShell[pref] = docShellPrefs[pref];
|
||||
}
|
||||
if (cookieSandbox) {
|
||||
cookieSandbox.attachToBrowser(hiddenBrowser);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -55,20 +55,22 @@ Zotero.MIMETypeHandler = new function () {
|
|||
_observers = [];
|
||||
|
||||
// Install styles from the Cite preferences
|
||||
this.addHandler("application/vnd.citationstyles.style+xml", async function (blob, origin) {
|
||||
let win = Services.wm.getMostRecentWindow("zotero:basicViewer");
|
||||
var data = await Zotero.Utilities.Internal.blobToText(blob);
|
||||
try {
|
||||
await Zotero.Styles.install(data, origin, true);
|
||||
}
|
||||
catch (e) {
|
||||
Zotero.logError(e);
|
||||
(new Zotero.Exception.Alert("styles.install.unexpectedError",
|
||||
origin, "styles.install.title", e)).present();
|
||||
}
|
||||
// Close styles page in basic viewer after installing a style
|
||||
if (win) {
|
||||
win.close();
|
||||
this.addHandlers("application/vnd.citationstyles.style+xml", {
|
||||
onContent: async function (blob, origin) {
|
||||
let win = Services.wm.getMostRecentWindow("zotero:basicViewer");
|
||||
var data = await Zotero.Utilities.Internal.blobToText(blob);
|
||||
try {
|
||||
await Zotero.Styles.install(data, origin, true);
|
||||
}
|
||||
catch (e) {
|
||||
Zotero.logError(e);
|
||||
(new Zotero.Exception.Alert("styles.install.unexpectedError",
|
||||
origin, "styles.install.title", e)).present();
|
||||
}
|
||||
// Close styles page in basic viewer after installing a style
|
||||
if (win) {
|
||||
win.close();
|
||||
}
|
||||
}
|
||||
}, true);
|
||||
};
|
||||
|
|
@ -76,17 +78,25 @@ Zotero.MIMETypeHandler = new function () {
|
|||
/**
|
||||
* Adds a handler to handle a specific MIME type
|
||||
* @param {String} type MIME type to handle
|
||||
* @param {Function} fn Function to call to handle type - fn(string, uri)
|
||||
* @param {Object} handlers
|
||||
* - handlers.onContent - function to call when content is received
|
||||
* - handlers.onStartRequest - function to call when response for content type is first received
|
||||
* @param {Boolean} ignoreContentDisposition If true, ignores the Content-Disposition header,
|
||||
* which is often used to force a file to download rather than let it be handled by the web
|
||||
* browser
|
||||
*/
|
||||
this.addHandler = function (type, fn, ignoreContentDisposition) {
|
||||
this.addHandlers = function (type, handlers, ignoreContentDisposition) {
|
||||
if (typeof handlers == 'function') {
|
||||
handlers = {
|
||||
onContent: handlers
|
||||
};
|
||||
Zotero.debug('MIMETypeHandler.addHandler: second parameter function is deprecated. Pass an object', 1)
|
||||
}
|
||||
if (_typeHandlers[type]) {
|
||||
_typeHandlers[type].push(fn);
|
||||
_typeHandlers[type].push(handlers);
|
||||
}
|
||||
else {
|
||||
_typeHandlers[type] = [fn];
|
||||
_typeHandlers[type] = [handlers];
|
||||
}
|
||||
if (ignoreContentDisposition) {
|
||||
_ignoreContentDispositionTypes.add(type);
|
||||
|
|
@ -96,19 +106,19 @@ Zotero.MIMETypeHandler = new function () {
|
|||
/**
|
||||
* Removes a handler for a specific MIME type
|
||||
* @param {String} type MIME type to handle
|
||||
* @param {Function} handler Function handler to remove
|
||||
* @param {Object} handlers Function handlers to remove
|
||||
*/
|
||||
this.removeHandler = function (type, handler) {
|
||||
this.removeHandlers = function (type, handlers) {
|
||||
// If no handler specified or this is the last handler for the type
|
||||
// stop monitoring the content type completely.
|
||||
if (!handler || _typeHandlers[type] && _typeHandlers[type].length <= 1) {
|
||||
if (!handlers || _typeHandlers[type] && _typeHandlers[type].length <= 1) {
|
||||
delete _typeHandlers[type];
|
||||
_ignoreContentDispositionTypes.delete(type);
|
||||
}
|
||||
else if (_typeHandlers[type]) {
|
||||
var i = _typeHandlers[type].indexOf(handler);
|
||||
var i = _typeHandlers[type].indexOf(handlers);
|
||||
if (i != -1) {
|
||||
_typeHandlers.splice(i, 1);
|
||||
_typeHandlers[type].splice(i, 1);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
@ -214,10 +224,27 @@ Zotero.MIMETypeHandler = new function () {
|
|||
}
|
||||
|
||||
/**
|
||||
* Called when the request is started; we ignore this
|
||||
* Called when the request is started
|
||||
*/
|
||||
_StreamListener.prototype.onStartRequest = function(channel, context) {}
|
||||
|
||||
_StreamListener.prototype.onStartRequest = async function(channel, context) {
|
||||
try {
|
||||
if (!_typeHandlers[this._contentType]) return;
|
||||
for (let handlers of _typeHandlers[this._contentType]) {
|
||||
if (!handlers.onStartRequest) continue;
|
||||
let maybePromise = handlers.onStartRequest(
|
||||
this._request.name ? this._request.name : null,
|
||||
this._contentType,
|
||||
channel
|
||||
);
|
||||
if (maybePromise && maybePromise.then) {
|
||||
maybePromise = await maybePromise;
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (e) {
|
||||
Zotero.logError(e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Called when there's data available; we collect this data and keep it until the request is
|
||||
|
|
@ -259,14 +286,16 @@ Zotero.MIMETypeHandler = new function () {
|
|||
|
||||
var handled = false;
|
||||
try {
|
||||
for (let handler of _typeHandlers[this._contentType]) {
|
||||
let maybePromise = handler(
|
||||
if (!_typeHandlers[this._contentType]) return;
|
||||
for (let handlers of _typeHandlers[this._contentType]) {
|
||||
if (!handlers.onContent) continue;
|
||||
let maybePromise = handlers.onContent(
|
||||
blob,
|
||||
this._request.name ? this._request.name : null,
|
||||
this._contentType,
|
||||
channel
|
||||
);
|
||||
if (maybePromise.then) {
|
||||
if (maybePromise && maybePromise.then) {
|
||||
maybePromise = await maybePromise;
|
||||
}
|
||||
handled = handled || maybePromise;
|
||||
|
|
|
|||
|
|
@ -410,6 +410,162 @@ class PDFWorker {
|
|||
}
|
||||
await Promise.all(promises);
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete pages from PDF attachment
|
||||
*
|
||||
* @param {Integer} itemID Attachment item id
|
||||
* @param {Array} pageIndexes
|
||||
* @param {Boolean} [isPriority]
|
||||
* @param {String} [password]
|
||||
* @returns {Promise}
|
||||
*/
|
||||
async deletePages(itemID, pageIndexes, isPriority, password) {
|
||||
return this._enqueue(async () => {
|
||||
let attachment = await Zotero.Items.getAsync(itemID);
|
||||
|
||||
Zotero.debug(`Deleting [${pageIndexes.join(', ')}] pages for item ${attachment.libraryKey}`);
|
||||
let t = new Date();
|
||||
|
||||
if (!attachment.isPDFAttachment()) {
|
||||
throw new Error('Item must be a PDF attachment');
|
||||
}
|
||||
|
||||
let annotations = attachment
|
||||
.getAnnotations()
|
||||
.map(annotation => ({
|
||||
id: annotation.id,
|
||||
position: JSON.parse(annotation.annotationPosition)
|
||||
}));
|
||||
|
||||
let path = await attachment.getFilePathAsync();
|
||||
let buf = await OS.File.read(path, {});
|
||||
buf = new Uint8Array(buf).buffer;
|
||||
|
||||
try {
|
||||
var { buf: modifiedBuf } = await this._query('deletePages', {
|
||||
buf, pageIndexes, password
|
||||
}, [buf]);
|
||||
}
|
||||
catch (e) {
|
||||
let error = new Error(`Worker 'deletePages' failed: ${JSON.stringify({ error: e.message })}`);
|
||||
try {
|
||||
error.name = JSON.parse(e.message).name;
|
||||
}
|
||||
catch (e) {
|
||||
Zotero.logError(e);
|
||||
}
|
||||
Zotero.logError(error);
|
||||
throw error;
|
||||
}
|
||||
|
||||
// Delete annotations from deleted pages
|
||||
let ids = [];
|
||||
for (let i = annotations.length - 1; i >= 0; i--) {
|
||||
let { id, position } = annotations[i];
|
||||
if (pageIndexes.includes(position.pageIndex)) {
|
||||
ids.push(id);
|
||||
annotations.splice(i, 1);
|
||||
}
|
||||
}
|
||||
if (ids.length) {
|
||||
await Zotero.Items.erase(ids);
|
||||
}
|
||||
|
||||
// Shift page index for other annotations
|
||||
ids = [];
|
||||
await Zotero.DB.executeTransaction(async function () {
|
||||
let rows = await Zotero.DB.queryAsync('SELECT itemID, position FROM itemAnnotations WHERE parentItemID=?', itemID);
|
||||
for (let { itemID, position } of rows) {
|
||||
try {
|
||||
position = JSON.parse(position);
|
||||
}
|
||||
catch (e) {
|
||||
Zotero.logError(e);
|
||||
continue;
|
||||
}
|
||||
// Find the count of deleted pages before the current annotation page
|
||||
let shift = pageIndexes.reduce((prev, cur) => cur < position.pageIndex ? prev + 1 : prev, 0);
|
||||
if (shift > 0) {
|
||||
position.pageIndex -= shift;
|
||||
position = JSON.stringify(position);
|
||||
await Zotero.DB.queryAsync('UPDATE itemAnnotations SET position=? WHERE itemID=?', [position, itemID]);
|
||||
ids.push(itemID);
|
||||
}
|
||||
}
|
||||
});
|
||||
let objectsClass = Zotero.DataObjectUtilities.getObjectsClassForObjectType('item');
|
||||
let loadedObjects = objectsClass.getLoaded();
|
||||
for (let object of loadedObjects) {
|
||||
if (ids.includes(object.id)) {
|
||||
await object.reload(null, true);
|
||||
}
|
||||
}
|
||||
await Zotero.Notifier.trigger('modify', 'item', ids, {});
|
||||
|
||||
await OS.File.writeAtomic(path, new Uint8Array(modifiedBuf));
|
||||
let mtime = Math.floor(await attachment.attachmentModificationTime / 1000);
|
||||
attachment.attachmentLastProcessedModificationTime = mtime;
|
||||
await attachment.saveTx({
|
||||
skipAll: true
|
||||
});
|
||||
|
||||
Zotero.debug(`Deleted pages for item ${attachment.libraryKey} in ${new Date() - t} ms`);
|
||||
}, isPriority);
|
||||
}
|
||||
|
||||
/**
|
||||
* Rotate pages in PDF attachment
|
||||
*
|
||||
* @param {Integer} itemID Attachment item id
|
||||
* @param {Array} pageIndexes
|
||||
* @param {Integer} degrees 90, 180, 270
|
||||
* @param {Boolean} [isPriority]
|
||||
* @param {String} [password]
|
||||
* @returns {Promise}
|
||||
*/
|
||||
async rotatePages(itemID, pageIndexes, degrees, isPriority, password) {
|
||||
return this._enqueue(async () => {
|
||||
let attachment = await Zotero.Items.getAsync(itemID);
|
||||
|
||||
Zotero.debug(`Rotating [${pageIndexes.join(', ')}] pages for item ${attachment.libraryKey}`);
|
||||
let t = new Date();
|
||||
|
||||
if (!attachment.isPDFAttachment()) {
|
||||
throw new Error('Item must be a PDF attachment');
|
||||
}
|
||||
|
||||
let path = await attachment.getFilePathAsync();
|
||||
let buf = await OS.File.read(path, {});
|
||||
buf = new Uint8Array(buf).buffer;
|
||||
|
||||
try {
|
||||
var { buf: modifiedBuf } = await this._query('rotatePages', {
|
||||
buf, pageIndexes, degrees, password
|
||||
}, [buf]);
|
||||
}
|
||||
catch (e) {
|
||||
let error = new Error(`Worker 'rotatePages' failed: ${JSON.stringify({ error: e.message })}`);
|
||||
try {
|
||||
error.name = JSON.parse(e.message).name;
|
||||
}
|
||||
catch (e) {
|
||||
Zotero.logError(e);
|
||||
}
|
||||
Zotero.logError(error);
|
||||
throw error;
|
||||
}
|
||||
|
||||
await OS.File.writeAtomic(path, new Uint8Array(modifiedBuf));
|
||||
let mtime = Math.floor(await attachment.attachmentModificationTime / 1000);
|
||||
attachment.attachmentLastProcessedModificationTime = mtime;
|
||||
await attachment.saveTx({
|
||||
skipAll: true
|
||||
});
|
||||
|
||||
Zotero.debug(`Rotated pages for item ${attachment.libraryKey} in ${new Date() - t} ms`);
|
||||
}, isPriority);
|
||||
}
|
||||
}
|
||||
|
||||
Zotero.PDFWorker = new PDFWorker();
|
||||
|
|
|
|||
|
|
@ -230,6 +230,7 @@ Zotero.Prefs = new function(){
|
|||
Zotero.setFontSize(
|
||||
Zotero.getActiveZoteroPane().document.getElementById('zotero-pane')
|
||||
);
|
||||
Zotero.setFontSize(Zotero.getActiveZoteroPane().document.getElementById('zotero-context-pane'));
|
||||
Zotero.getActiveZoteroPane().collectionsView && Zotero.getActiveZoteroPane().collectionsView.updateFontSize();
|
||||
Zotero.getActiveZoteroPane().itemsView && Zotero.getActiveZoteroPane().itemsView.updateFontSize();
|
||||
}],
|
||||
|
|
|
|||
|
|
@ -23,6 +23,8 @@
|
|||
***** END LICENSE BLOCK *****
|
||||
*/
|
||||
|
||||
import FilePicker from 'zotero/modules/filePicker';
|
||||
|
||||
class ReaderInstance {
|
||||
constructor() {
|
||||
this.pdfStateFileName = '.zotero-pdf-state';
|
||||
|
|
@ -50,6 +52,42 @@ class ReaderInstance {
|
|||
}
|
||||
}
|
||||
|
||||
async migrateMendeleyColors(libraryID, annotations) {
|
||||
let colorMap = new Map();
|
||||
colorMap.set('#fff5ad', '#ffd400');
|
||||
colorMap.set('#ffb5b6', '#ff6666');
|
||||
colorMap.set('#bae2ff', '#2ea8e5');
|
||||
colorMap.set('#d3c2ff', '#a28ae5');
|
||||
colorMap.set('#dcffb0', '#5fb236');
|
||||
let updatedAnnotations = [];
|
||||
for (let annotation of annotations) {
|
||||
let color = colorMap.get(annotation.color);
|
||||
if (color) {
|
||||
annotation.color = color;
|
||||
updatedAnnotations.push(annotation);
|
||||
}
|
||||
}
|
||||
if (!updatedAnnotations.length) {
|
||||
return false;
|
||||
}
|
||||
Zotero.debug('Migrating Mendeley colors');
|
||||
let notifierQueue = new Zotero.Notifier.Queue();
|
||||
try {
|
||||
for (let annotation of updatedAnnotations) {
|
||||
let { id: key, color } = annotation;
|
||||
let item = Zotero.Items.getByLibraryAndKey(libraryID, key);
|
||||
if (item && item.isEditable()) {
|
||||
item.annotationColor = color;
|
||||
await item.saveTx({ skipDateModifiedUpdate: true, notifierQueue });
|
||||
}
|
||||
}
|
||||
}
|
||||
finally {
|
||||
await Zotero.Notifier.commit(notifierQueue);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
async open({ itemID, state, location }) {
|
||||
let { libraryID } = Zotero.Items.getLibraryAndKeyFromID(itemID);
|
||||
let library = Zotero.Libraries.get(libraryID);
|
||||
|
|
@ -68,6 +106,15 @@ class ReaderInstance {
|
|||
buf = new Uint8Array(buf).buffer;
|
||||
let annotationItems = item.getAnnotations();
|
||||
let annotations = (await Promise.all(annotationItems.map(x => this._getAnnotation(x)))).filter(x => x);
|
||||
|
||||
// TODO: Remove after some time
|
||||
// Migrate Mendeley colors to Zotero PDF reader colors
|
||||
let migrated = await this.migrateMendeleyColors(libraryID, annotations);
|
||||
if (migrated) {
|
||||
annotationItems = item.getAnnotations();
|
||||
annotations = (await Promise.all(annotationItems.map(x => this._getAnnotation(x)))).filter(x => x);
|
||||
}
|
||||
|
||||
this.annotationItemIDs = annotationItems.map(x => x.id);
|
||||
state = state || await this._getState();
|
||||
this._postMessage({
|
||||
|
|
@ -83,6 +130,7 @@ class ReaderInstance {
|
|||
sidebarOpen: this._sidebarOpen,
|
||||
bottomPlaceholderHeight: this._bottomPlaceholderHeight,
|
||||
rtl: Zotero.rtl,
|
||||
fontSize: Zotero.Prefs.get('fontSize'),
|
||||
localizedStrings: {
|
||||
...Zotero.Intl.getPrefixedStrings('general.'),
|
||||
...Zotero.Intl.getPrefixedStrings('pdfReader.')
|
||||
|
|
@ -90,8 +138,17 @@ class ReaderInstance {
|
|||
}, [buf]);
|
||||
// Set title once again, because `ReaderWindow` isn't loaded the first time
|
||||
this.updateTitle();
|
||||
|
||||
this._prefObserverIDs = [
|
||||
Zotero.Prefs.registerObserver('fontSize', this._handleFontSizeChange)
|
||||
];
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
uninit() {
|
||||
this._prefObserverIDs.forEach(id => Zotero.Prefs.unregisterObserver(id));
|
||||
}
|
||||
|
||||
get itemID() {
|
||||
return this._itemID;
|
||||
|
|
@ -249,6 +306,33 @@ class ReaderInstance {
|
|||
);
|
||||
return !index;
|
||||
}
|
||||
|
||||
promptToDeletePages(num) {
|
||||
let ps = Services.prompt;
|
||||
let buttonFlags = ps.BUTTON_POS_0 * ps.BUTTON_TITLE_IS_STRING
|
||||
+ ps.BUTTON_POS_1 * ps.BUTTON_TITLE_CANCEL;
|
||||
let index = ps.confirmEx(
|
||||
null,
|
||||
Zotero.getString('pdfReader.promptDeletePages.title'),
|
||||
Zotero.getString(
|
||||
'pdfReader.promptDeletePages.text',
|
||||
new Intl.NumberFormat().format(num),
|
||||
num
|
||||
),
|
||||
buttonFlags,
|
||||
Zotero.getString('general.continue'),
|
||||
null, null, null, {}
|
||||
);
|
||||
return !index;
|
||||
}
|
||||
|
||||
async reload() {
|
||||
let item = Zotero.Items.get(this._itemID);
|
||||
let path = await item.getFilePathAsync();
|
||||
let buf = await OS.File.read(path, {});
|
||||
buf = new Uint8Array(buf).buffer;
|
||||
this._postMessage({ action: 'reload', buf, }, [buf]);
|
||||
}
|
||||
|
||||
async menuCmd(cmd) {
|
||||
if (cmd === 'transferFromPDF') {
|
||||
|
|
@ -369,6 +453,54 @@ class ReaderInstance {
|
|||
);
|
||||
return !index;
|
||||
};
|
||||
|
||||
this._iframeWindow.wrappedJSObject.zoteroCopyImage = async (dataURL) => {
|
||||
let parts = dataURL.split(',');
|
||||
if (!parts[0].includes('base64')) {
|
||||
return;
|
||||
}
|
||||
let bstr = atob(parts[1]);
|
||||
let n = bstr.length;
|
||||
let u8arr = new Uint8Array(n);
|
||||
while (n--) {
|
||||
u8arr[n] = bstr.charCodeAt(n);
|
||||
}
|
||||
let imgTools = Components.classes["@mozilla.org/image/tools;1"]
|
||||
.getService(Components.interfaces.imgITools);
|
||||
let transferable = Components.classes['@mozilla.org/widget/transferable;1']
|
||||
.createInstance(Components.interfaces.nsITransferable);
|
||||
let clipboardService = Components.classes['@mozilla.org/widget/clipboard;1']
|
||||
.getService(Components.interfaces.nsIClipboard);
|
||||
let imgPtr = Components.classes["@mozilla.org/supports-interface-pointer;1"]
|
||||
.createInstance(Components.interfaces.nsISupportsInterfacePointer);
|
||||
let mimeType = `image/png`;
|
||||
imgPtr.data = imgTools.decodeImageFromArrayBuffer(u8arr.buffer, mimeType);
|
||||
transferable.init(null);
|
||||
transferable.addDataFlavor(mimeType);
|
||||
transferable.setTransferData(mimeType, imgPtr, 0);
|
||||
clipboardService.setData(transferable, null, Components.interfaces.nsIClipboard.kGlobalClipboard);
|
||||
};
|
||||
|
||||
this._iframeWindow.wrappedJSObject.zoteroSaveImageAs = async (dataURL) => {
|
||||
let fp = new FilePicker();
|
||||
fp.init(this._iframeWindow, Zotero.getString('pdfReader.saveImageAs'), fp.modeSave);
|
||||
fp.appendFilter("PNG", "*.png");
|
||||
fp.defaultString = Zotero.getString('fileTypes.image').toLowerCase() + '.png';
|
||||
let rv = await fp.show();
|
||||
if (rv === fp.returnOK || rv === fp.returnReplace) {
|
||||
let outputPath = fp.file;
|
||||
let parts = dataURL.split(',');
|
||||
if (parts[0].includes('base64')) {
|
||||
let bstr = atob(parts[1]);
|
||||
let n = bstr.length;
|
||||
let u8arr = new Uint8Array(n);
|
||||
while (n--) {
|
||||
u8arr[n] = bstr.charCodeAt(n);
|
||||
}
|
||||
await OS.File.writeAtomic(outputPath, u8arr);
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
async _setState(state) {
|
||||
|
|
@ -424,6 +556,10 @@ class ReaderInstance {
|
|||
|| item.parentItem && item.parentItem.deleted;
|
||||
}
|
||||
|
||||
_handleFontSizeChange = () => {
|
||||
this._postMessage({ action: 'setFontSize', fontSize: Zotero.Prefs.get('fontSize') });
|
||||
};
|
||||
|
||||
_dataURLtoBlob(dataurl) {
|
||||
let parts = dataurl.split(',');
|
||||
let mime = parts[0].match(/:(.*?);/)[1];
|
||||
|
|
@ -614,6 +750,26 @@ class ReaderInstance {
|
|||
}
|
||||
// Separator
|
||||
popup.appendChild(this._window.document.createElement('menuseparator'));
|
||||
|
||||
if (data.enableImageOptions) {
|
||||
// Copy Image
|
||||
menuitem = this._window.document.createElement('menuitem');
|
||||
menuitem.setAttribute('label', Zotero.getString('pdfReader.copyImage'));
|
||||
menuitem.addEventListener('command', () => {
|
||||
this._postMessage({ action: 'popupCmd', cmd: 'copyImage', data });
|
||||
});
|
||||
popup.appendChild(menuitem);
|
||||
// Save Image As…
|
||||
menuitem = this._window.document.createElement('menuitem');
|
||||
menuitem.setAttribute('label', Zotero.getString('pdfReader.saveImageAs'));
|
||||
menuitem.addEventListener('command', () => {
|
||||
this._postMessage({ action: 'popupCmd', cmd: 'saveImageAs', data });
|
||||
});
|
||||
popup.appendChild(menuitem);
|
||||
// Separator
|
||||
popup.appendChild(this._window.document.createElement('menuseparator'));
|
||||
}
|
||||
|
||||
// Delete
|
||||
menuitem = this._window.document.createElement('menuitem');
|
||||
menuitem.setAttribute('label', Zotero.getString('general.delete'));
|
||||
|
|
@ -661,6 +817,60 @@ class ReaderInstance {
|
|||
popup.openPopup(element, 'after_start', 0, 0, true);
|
||||
}
|
||||
|
||||
_openThumbnailPopup(data) {
|
||||
let popup = this._window.document.createElement('menupopup');
|
||||
this._popupset.appendChild(popup);
|
||||
popup.addEventListener('popuphidden', function () {
|
||||
popup.remove();
|
||||
});
|
||||
let menuitem;
|
||||
// Rotate Left
|
||||
menuitem = this._window.document.createElement('menuitem');
|
||||
menuitem.setAttribute('label', Zotero.getString('pdfReader.rotateLeft'));
|
||||
menuitem.addEventListener('command', async () => {
|
||||
this._postMessage({ action: 'reloading' });
|
||||
await Zotero.PDFWorker.rotatePages(this._itemID, data.pageIndexes, 270, true);
|
||||
await this.reload();
|
||||
});
|
||||
popup.appendChild(menuitem);
|
||||
// Rotate Right
|
||||
menuitem = this._window.document.createElement('menuitem');
|
||||
menuitem.setAttribute('label', Zotero.getString('pdfReader.rotateRight'));
|
||||
menuitem.addEventListener('command', async () => {
|
||||
this._postMessage({ action: 'reloading' });
|
||||
await Zotero.PDFWorker.rotatePages(this._itemID, data.pageIndexes, 90, true);
|
||||
await this.reload();
|
||||
});
|
||||
popup.appendChild(menuitem);
|
||||
// Rotate 180
|
||||
menuitem = this._window.document.createElement('menuitem');
|
||||
menuitem.setAttribute('label', Zotero.getString('pdfReader.rotate180'));
|
||||
menuitem.addEventListener('command', async () => {
|
||||
this._postMessage({ action: 'reloading' });
|
||||
await Zotero.PDFWorker.rotatePages(this._itemID, data.pageIndexes, 180, true);
|
||||
await this.reload();
|
||||
});
|
||||
popup.appendChild(menuitem);
|
||||
// Separator
|
||||
popup.appendChild(this._window.document.createElement('menuseparator'));
|
||||
// Delete
|
||||
menuitem = this._window.document.createElement('menuitem');
|
||||
menuitem.setAttribute('label', Zotero.getString('general.delete'));
|
||||
menuitem.addEventListener('command', async () => {
|
||||
if (this.promptToDeletePages(data.pageIndexes.length)) {
|
||||
this._postMessage({ action: 'reloading' });
|
||||
try {
|
||||
await Zotero.PDFWorker.deletePages(this._itemID, data.pageIndexes, true);
|
||||
}
|
||||
catch (e) {
|
||||
}
|
||||
await this.reload();
|
||||
}
|
||||
});
|
||||
popup.appendChild(menuitem);
|
||||
popup.openPopupAtScreen(data.x, data.y, true);
|
||||
}
|
||||
|
||||
_openSelectorPopup(data) {
|
||||
let popup = this._window.document.createElement('menupopup');
|
||||
this._popupset.appendChild(popup);
|
||||
|
|
@ -799,6 +1009,14 @@ class ReaderInstance {
|
|||
this._openColorPopup(message.data);
|
||||
return;
|
||||
}
|
||||
case 'openThumbnailPopup': {
|
||||
this._openThumbnailPopup(message.data);
|
||||
return;
|
||||
}
|
||||
case 'openSelectorPopup': {
|
||||
this._openSelectorPopup(message.data);
|
||||
return;
|
||||
}
|
||||
case 'closePopup': {
|
||||
// Note: This currently only closes tags popup when annotations are
|
||||
// disappearing from pdf-reader sidebar
|
||||
|
|
@ -847,18 +1065,17 @@ class ReaderInstance {
|
|||
return;
|
||||
}
|
||||
case 'focusSplitButton': {
|
||||
let win = Zotero.getMainWindow();
|
||||
if (win) {
|
||||
win.document.getElementById('zotero-tb-toggle-item-pane').focus();
|
||||
if (this instanceof ReaderTab) {
|
||||
let win = Zotero.getMainWindow();
|
||||
if (win) {
|
||||
win.document.getElementById('zotero-tb-toggle-item-pane').focus();
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
case 'focusContextPane': {
|
||||
let win = Zotero.getMainWindow();
|
||||
if (win) {
|
||||
if (!this._window.ZoteroContextPane.focus()) {
|
||||
this.focusFirst();
|
||||
}
|
||||
if (this instanceof ReaderWindow || !this._window.ZoteroContextPane.focus()) {
|
||||
this.focusFirst();
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
|
@ -925,7 +1142,7 @@ class ReaderInstance {
|
|||
}
|
||||
|
||||
class ReaderTab extends ReaderInstance {
|
||||
constructor({ itemID, title, sidebarWidth, sidebarOpen, bottomPlaceholderHeight, index, background }) {
|
||||
constructor({ itemID, title, sidebarWidth, sidebarOpen, bottomPlaceholderHeight, index, tabID, background }) {
|
||||
super();
|
||||
this._itemID = itemID;
|
||||
this._sidebarWidth = sidebarWidth;
|
||||
|
|
@ -934,6 +1151,7 @@ class ReaderTab extends ReaderInstance {
|
|||
this._showItemPaneToggle = true;
|
||||
this._window = Services.wm.getMostRecentWindow('navigator:browser');
|
||||
let { id, container } = this._window.Zotero_Tabs.add({
|
||||
id: tabID,
|
||||
type: 'reader',
|
||||
title: title || '',
|
||||
index,
|
||||
|
|
@ -968,20 +1186,24 @@ class ReaderTab extends ReaderInstance {
|
|||
// events in PDF reader iframe when mouse up happens over another iframe
|
||||
// i.e. note-editor. There should be a better way to solve this
|
||||
this._window.addEventListener('pointerup', (event) => {
|
||||
if (this._window.Zotero_Tabs.selectedID === this.tabID
|
||||
&& this._iframeWindow
|
||||
&& event.target
|
||||
&& event.target.closest
|
||||
&& !event.target.closest('#outerContainer')) {
|
||||
let evt = new this._iframeWindow.CustomEvent('mouseup', { bubbles: false });
|
||||
evt.clientX = event.clientX;
|
||||
evt.clientY = event.clientY;
|
||||
this._iframeWindow.dispatchEvent(evt);
|
||||
try {
|
||||
if (this._window.Zotero_Tabs.selectedID === this.tabID
|
||||
&& this._iframeWindow
|
||||
&& event.target
|
||||
&& event.target.closest
|
||||
&& !event.target.closest('#outerContainer')) {
|
||||
let evt = new this._iframeWindow.CustomEvent('mouseup', { bubbles: false });
|
||||
evt.clientX = event.clientX;
|
||||
evt.clientY = event.clientY;
|
||||
this._iframeWindow.dispatchEvent(evt);
|
||||
|
||||
evt = new this._iframeWindow.CustomEvent('pointerup', { bubbles: false });
|
||||
evt.clientX = event.clientX;
|
||||
evt.clientY = event.clientY;
|
||||
this._iframeWindow.dispatchEvent(evt);
|
||||
evt = new this._iframeWindow.CustomEvent('pointerup', { bubbles: false });
|
||||
evt.clientX = event.clientX;
|
||||
evt.clientY = event.clientY;
|
||||
this._iframeWindow.dispatchEvent(evt);
|
||||
}
|
||||
}
|
||||
catch(e) {
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
@ -1199,6 +1421,7 @@ class Reader {
|
|||
for (let id of ids) {
|
||||
let reader = Zotero.Reader.getByTabID(id);
|
||||
if (reader) {
|
||||
reader.uninit();
|
||||
this._readers.splice(this._readers.indexOf(reader), 1);
|
||||
}
|
||||
}
|
||||
|
|
@ -1270,11 +1493,24 @@ class Reader {
|
|||
await this.open(item.id, location, options);
|
||||
}
|
||||
|
||||
async open(itemID, location, { title, tabIndex, openInBackground, openInWindow, allowDuplicate } = {}) {
|
||||
async open(itemID, location, { title, tabIndex, tabID, openInBackground, openInWindow, allowDuplicate } = {}) {
|
||||
this._loadSidebarState();
|
||||
this.triggerAnnotationsImportCheck(itemID);
|
||||
let reader;
|
||||
|
||||
// If duplicating is not allowed, and no reader instance is loaded for itemID,
|
||||
// try to find an unloaded tab and select it. Zotero.Reader.open will then be called again
|
||||
if (!allowDuplicate && !this._readers.find(r => r._itemID === itemID)) {
|
||||
let win = Zotero.getMainWindow();
|
||||
if (win) {
|
||||
let existingTabID = win.Zotero_Tabs.getTabIDByItemID(itemID);
|
||||
if (existingTabID) {
|
||||
win.Zotero_Tabs.select(existingTabID, false, { location });
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (openInWindow) {
|
||||
reader = this._readers.find(r => r._itemID === itemID && (r instanceof ReaderWindow));
|
||||
}
|
||||
|
|
@ -1312,6 +1548,7 @@ class Reader {
|
|||
itemID,
|
||||
title,
|
||||
index: tabIndex,
|
||||
tabID,
|
||||
background: openInBackground,
|
||||
sidebarWidth: this._sidebarWidth,
|
||||
sidebarOpen: this._sidebarOpen,
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@
|
|||
***** END LICENSE BLOCK *****
|
||||
*/
|
||||
|
||||
Zotero.SingleFile = {
|
||||
Zotero.SingleFile = Object.assign(Zotero.SingleFile || {}, {
|
||||
// These are defaults from SingleFile
|
||||
// Located in: zotero/resources/SingleFile/extension/core/bg/config.js
|
||||
CONFIG: {
|
||||
|
|
@ -32,7 +32,9 @@ Zotero.SingleFile = {
|
|||
removeUnusedFonts: true,
|
||||
removeFrames: true,
|
||||
removeImports: true,
|
||||
removeScripts: true,
|
||||
blockScripts: true,
|
||||
blockVideos: true,
|
||||
blockAudios: true,
|
||||
compressHTML: true,
|
||||
compressCSS: false,
|
||||
loadDeferredImages: true,
|
||||
|
|
@ -40,6 +42,7 @@ Zotero.SingleFile = {
|
|||
loadDeferredImagesBlockCookies: false,
|
||||
loadDeferredImagesBlockStorage: false,
|
||||
loadDeferredImagesKeepZoomLevel: false,
|
||||
loadDeferredImagesNativeTimeout: true, // See https://github.com/gildas-lormeau/SingleFile/issues/1026
|
||||
filenameTemplate: "{page-title} ({date-iso} {time-locale}).html",
|
||||
infobarTemplate: "",
|
||||
includeInfobar: false,
|
||||
|
|
@ -58,8 +61,6 @@ Zotero.SingleFile = {
|
|||
progressBarEnabled: true,
|
||||
maxResourceSizeEnabled: false,
|
||||
maxResourceSize: 10,
|
||||
removeAudioSrc: true,
|
||||
removeVideoSrc: true,
|
||||
displayInfobar: true,
|
||||
displayStats: false,
|
||||
backgroundSave: true,
|
||||
|
|
@ -95,4 +96,4 @@ Zotero.SingleFile = {
|
|||
insertSingleFileComment: true,
|
||||
blockMixedContent: false,
|
||||
}
|
||||
};
|
||||
});
|
||||
|
|
|
|||
|
|
@ -762,6 +762,8 @@ Zotero.Style.prototype.getCiteProc = function(locale, format, automaticJournalAb
|
|||
var xml = this.getXML();
|
||||
}
|
||||
|
||||
xml = this._eventToEventTitle(xml);
|
||||
|
||||
try {
|
||||
var citeproc;
|
||||
if (Zotero.Prefs.get('cite.useCiteprocRs')) {
|
||||
|
|
@ -801,6 +803,39 @@ Zotero.Style.prototype.getCiteProc = function(locale, format, automaticJournalAb
|
|||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Temporarily substitute `event-title` for `event`
|
||||
*
|
||||
* Until https://github.com/citation-style-language/styles/issues/6151
|
||||
*/
|
||||
Zotero.Style.prototype._eventToEventTitle = function (xml) {
|
||||
var parser = Components.classes["@mozilla.org/xmlextras/domparser;1"]
|
||||
.createInstance(Components.interfaces.nsIDOMParser);
|
||||
var doc = parser.parseFromString(xml, "text/xml");
|
||||
// Ignore styles that already include `event-title`
|
||||
if (doc.querySelector('[variable*="event-title"]')) {
|
||||
return xml;
|
||||
}
|
||||
var elems = doc.querySelectorAll('[variable*="event"]');
|
||||
if (!elems.length) {
|
||||
return xml;
|
||||
}
|
||||
var changed = false;
|
||||
for (let elem of elems) {
|
||||
let variable = elem.getAttribute('variable');
|
||||
// Must be "event" or "event foo", not, say, "event-place"
|
||||
if (!/event( |$)/.test(variable)) {
|
||||
continue;
|
||||
}
|
||||
elem.setAttribute('variable', variable.replace(/event(?= |$)/, 'event-title'));
|
||||
changed = true;
|
||||
}
|
||||
if (changed) {
|
||||
xml = doc.documentElement.outerHTML;
|
||||
}
|
||||
return xml;
|
||||
};
|
||||
|
||||
Zotero.Style.prototype.__defineGetter__("class",
|
||||
/**
|
||||
* Retrieves the style class, either from the metadata that's already loaded or by loading the file
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
Subproject commit 5595949fd1223802159fd1716a116da62fe8f917
|
||||
Subproject commit 81991533dd3531acb9bfd6bb9457136a0af75f0f
|
||||
|
|
@ -668,6 +668,7 @@ Zotero.Translate.ItemSaver.prototype = {
|
|||
title: attachment.title,
|
||||
contentType: attachment.mimeType,
|
||||
charset: attachment.charset,
|
||||
libraryID: this._libraryID,
|
||||
parentItemID,
|
||||
collections: !parentItemID ? this._collections : undefined,
|
||||
saveOptions: this._saveOptions,
|
||||
|
|
@ -678,6 +679,7 @@ Zotero.Translate.ItemSaver.prototype = {
|
|||
newItem = yield Zotero.Attachments.importFromFile({
|
||||
file: file,
|
||||
parentItemID,
|
||||
libraryID: this._libraryID,
|
||||
collections: !parentItemID ? this._collections : undefined,
|
||||
saveOptions: this._saveOptions,
|
||||
});
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
Subproject commit a0a145a4b534721148da362a3bae3befc8d65121
|
||||
Subproject commit 4d8d7d3e92cbc3b4d62b82478e212a6f63b9a35f
|
||||
|
|
@ -405,6 +405,12 @@ Zotero.Utilities.Internal = {
|
|||
return s;
|
||||
},
|
||||
|
||||
isOnlyEmoji: function (str) {
|
||||
// Remove emoji, Zero Width Joiner, and Variation Selector-16 and see if anything's left
|
||||
const re = /\p{Extended_Pictographic}|\u200D|\uFE0F/gu;
|
||||
return !str.replace(re, '');
|
||||
},
|
||||
|
||||
/**
|
||||
* Display a prompt from an error with custom buttons and a callback
|
||||
*/
|
||||
|
|
@ -564,11 +570,10 @@ Zotero.Utilities.Internal = {
|
|||
|
||||
const SCRIPTS = [
|
||||
// This first script replace in the INDEX_SCRIPTS from the single file cli loader
|
||||
"dist/single-file.js",
|
||||
"lib/single-file.js",
|
||||
|
||||
// Web SCRIPTS
|
||||
"dist/web/hooks/hooks-frames-web.js",
|
||||
"dist/web/hooks/hooks-web.js",
|
||||
"lib/single-file-hooks-frames.js",
|
||||
];
|
||||
|
||||
const { loadSubScript } = Components.classes['@mozilla.org/moz/jssubscript-loader;1']
|
||||
|
|
@ -594,8 +599,8 @@ Zotero.Utilities.Internal = {
|
|||
// List of scripts from:
|
||||
// resource/SingleFile/extension/lib/single-file/core/bg/scripts.js
|
||||
const frameScripts = [
|
||||
"dist/web/hooks/hooks-frames-web.js",
|
||||
"dist/single-file-frames.js",
|
||||
"lib/single-file-hooks-frames.js",
|
||||
"lib/single-file-frames.js",
|
||||
];
|
||||
|
||||
// Create sandboxes for all the frames we find
|
||||
|
|
@ -647,7 +652,7 @@ Zotero.Utilities.Internal = {
|
|||
// Mostly copied from:
|
||||
// resources/SingleFile/extension/lib/single-file/fetch/bg/fetch.js::fetchResource
|
||||
sandbox.coFetch = Components.utils.exportFunction(
|
||||
function (url, onDone) {
|
||||
function (url, options, onDone) {
|
||||
const xhrRequest = new XMLHttpRequest();
|
||||
xhrRequest.withCredentials = true;
|
||||
xhrRequest.responseType = "arraybuffer";
|
||||
|
|
@ -673,6 +678,11 @@ Zotero.Utilities.Internal = {
|
|||
}
|
||||
};
|
||||
xhrRequest.open("GET", url, true);
|
||||
if (options && options.headers) {
|
||||
for (const entry of Object.entries(options.headers)) {
|
||||
xhrRequest.setRequestHeader(entry[0], entry[1]);
|
||||
}
|
||||
}
|
||||
xhrRequest.send();
|
||||
},
|
||||
sandbox
|
||||
|
|
@ -683,14 +693,14 @@ Zotero.Utilities.Internal = {
|
|||
// resources/SingleFile/extension/lib/single-file/fetch/content/content-fetch.js::fetch
|
||||
Components.utils.evalInSandbox(
|
||||
`
|
||||
ZoteroFetch = async function (url) {
|
||||
ZoteroFetch = async function (url, options) {
|
||||
try {
|
||||
let response = await fetch(url, { cache: "force-cache" });
|
||||
let response = await fetch(url, { cache: "force-cache", headers: options.headers });
|
||||
return response;
|
||||
}
|
||||
catch (error) {
|
||||
let response = await new Promise((resolve, reject) => {
|
||||
coFetch(url, (response) => {
|
||||
coFetch(url, { headers: options.headers }, (response) => {
|
||||
if (response.error) {
|
||||
Zotero.debug("Error retrieving url: " + url);
|
||||
Zotero.debug(response);
|
||||
|
|
|
|||
|
|
@ -2098,7 +2098,7 @@ Zotero.Browser = new function() {
|
|||
hiddenBrowser.docShell.allowJavascript = options.allowJavaScript !== false
|
||||
hiddenBrowser.docShell.allowMetaRedirects = false;
|
||||
hiddenBrowser.docShell.allowPlugins = false;
|
||||
Zotero.debug("Created hidden browser (" + (nBrowsers++) + ")");
|
||||
Zotero.debug("Created hidden browser (" + (++nBrowsers) + ")");
|
||||
return hiddenBrowser;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -99,6 +99,7 @@ var ZoteroPane = new function()
|
|||
|
||||
var zp = document.getElementById('zotero-pane');
|
||||
Zotero.setFontSize(zp);
|
||||
Zotero.setFontSize(document.getElementById('zotero-context-pane'));
|
||||
ZoteroPane_Local.updateLayout();
|
||||
ZoteroPane_Local.updateToolbarPosition();
|
||||
this.updateWindow();
|
||||
|
|
@ -148,6 +149,26 @@ var ZoteroPane = new function()
|
|||
Zotero.hiDPI = window.devicePixelRatio > 1;
|
||||
Zotero.hiDPISuffix = Zotero.hiDPI ? "@2x" : "";
|
||||
|
||||
// Show warning in toolbar for 'dev' channel builds
|
||||
try {
|
||||
let isDevBuild = Zotero.version.includes('-dev');
|
||||
// Uncomment to test
|
||||
//isDevBuild = isDevBuild || Zotero.version.includes('.SOURCE');
|
||||
if (isDevBuild) {
|
||||
let label = document.createElement('label');
|
||||
label.setAttribute('value', 'TEST BUILD — DO NOT USE');
|
||||
label.setAttribute('style', 'font-weight: bold; color: red; cursor: pointer');
|
||||
label.onclick = function () {
|
||||
Zotero.launchURL('https://www.zotero.org/support/kb/test_builds');
|
||||
};
|
||||
let syncStop = document.getElementById('zotero-tb-sync-stop');
|
||||
syncStop.parentNode.insertBefore(label, syncStop);
|
||||
}
|
||||
}
|
||||
catch (e) {
|
||||
Zotero.logError(e);
|
||||
}
|
||||
|
||||
Zotero_Tabs.init();
|
||||
ZoteroContextPane.init();
|
||||
await ZoteroPane.initCollectionsTree();
|
||||
|
|
@ -1788,6 +1809,71 @@ var ZoteroPane = new function()
|
|||
});
|
||||
|
||||
|
||||
this.duplicateAndConvertSelectedItem = async function () {
|
||||
if (this.getSelectedItems().length != 1
|
||||
|| !['book', 'bookSection'].includes(this.getSelectedItems()[0].itemType)) {
|
||||
throw new Error('duplicateAndConvertSelectedItem requires a single book or bookSection to be selected');
|
||||
}
|
||||
|
||||
let authorCreatorType = Zotero.CreatorTypes.getID('author');
|
||||
let bookAuthorCreatorType = Zotero.CreatorTypes.getID('bookAuthor');
|
||||
|
||||
let original = this.getSelectedItems()[0];
|
||||
let duplicate = await this.duplicateSelectedItem();
|
||||
if (!duplicate) return null;
|
||||
|
||||
// TODO: Move this logic to duplicateSelectedItem() with a `targetItemType` flag to avoid
|
||||
// extra saves?
|
||||
if (duplicate.itemType == 'book') {
|
||||
duplicate.setType(Zotero.ItemTypes.getID('bookSection'));
|
||||
for (let i = 0; i < duplicate.numCreators(); i++) {
|
||||
let creator = duplicate.getCreator(i);
|
||||
if (creator.creatorTypeID == authorCreatorType) {
|
||||
creator.creatorTypeID = bookAuthorCreatorType;
|
||||
}
|
||||
duplicate.setCreator(i, creator);
|
||||
}
|
||||
// Remove related-item relations to other book sections of this book
|
||||
for (let relItemKey of [...duplicate.relatedItems]) {
|
||||
let relItem = await Zotero.Items.getByLibraryAndKeyAsync(
|
||||
duplicate.libraryID, relItemKey
|
||||
);
|
||||
if (relItem.itemType == 'bookSection'
|
||||
&& relItem.getField('bookTitle') == original.getField('title')) {
|
||||
duplicate.removeRelatedItem(relItem);
|
||||
relItem.removeRelatedItem(duplicate);
|
||||
await relItem.saveTx();
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
duplicate.setField('title', false); // So bookTitle becomes title
|
||||
duplicate.setType(Zotero.ItemTypes.getID('book'));
|
||||
// Get creators from the original item because setType() will have changed the types
|
||||
let creators = original.getCreators()
|
||||
// Remove authors of the individual book section
|
||||
.filter(creator => creator.creatorTypeID !== authorCreatorType);
|
||||
for (let creator of creators) {
|
||||
if (creator.creatorTypeID == bookAuthorCreatorType) {
|
||||
creator.creatorTypeID = authorCreatorType;
|
||||
}
|
||||
}
|
||||
duplicate.setCreators(creators);
|
||||
}
|
||||
|
||||
duplicate.setField('abstractNote', '');
|
||||
|
||||
duplicate.addRelatedItem(original);
|
||||
original.addRelatedItem(duplicate);
|
||||
|
||||
await original.saveTx({ skipDateModifiedUpdate: true });
|
||||
await duplicate.saveTx();
|
||||
|
||||
document.getElementById('zotero-editpane-item-box').focusField('title');
|
||||
return duplicate;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Return whether every selected item can be deleted from the current
|
||||
* collection context (library, trash, collection, etc.).
|
||||
|
|
@ -1877,13 +1963,39 @@ var ZoteroPane = new function()
|
|||
var prompt = (force && !fromMenu) ? false : toTrash;
|
||||
}
|
||||
else if (collectionTreeRow.isCollection()) {
|
||||
|
||||
// Ignore unmodified action if only child items are selected
|
||||
if (!force && this.itemsView.getSelectedItems().every(item => !item.isTopLevelItem())) {
|
||||
return;
|
||||
if (force) {
|
||||
var prompt = toTrash;
|
||||
}
|
||||
else {
|
||||
// Ignore unmodified action if only child items are selected
|
||||
if (this.itemsView.getSelectedItems().every(item => !item.isTopLevelItem())) {
|
||||
return;
|
||||
}
|
||||
|
||||
// If unmodified, recursiveCollections is true, and items are in
|
||||
// descendant collections (even if also in the selected collection),
|
||||
// prompt to remove from all
|
||||
if (Zotero.Prefs.get('recursiveCollections')) {
|
||||
let descendants = collectionTreeRow.ref.getDescendents(false, 'collection');
|
||||
let inSubcollection = descendants
|
||||
.some(({ id }) => this.itemsView.getSelectedItems()
|
||||
.some(item => item.inCollection(id)));
|
||||
if (inSubcollection) {
|
||||
var prompt = {
|
||||
title: Zotero.getString('pane.items.removeRecursive.title'),
|
||||
text: Zotero.getString(
|
||||
'pane.items.removeRecursive' + (this.itemsView.selection.count > 1 ? '.multiple' : '')
|
||||
)
|
||||
};
|
||||
}
|
||||
else {
|
||||
var prompt = toRemove;
|
||||
}
|
||||
}
|
||||
else {
|
||||
var prompt = toRemove;
|
||||
}
|
||||
}
|
||||
|
||||
var prompt = force ? toTrash : toRemove;
|
||||
}
|
||||
else if (collectionTreeRow.isTrash() || collectionTreeRow.isBucket()) {
|
||||
var prompt = toDelete;
|
||||
|
|
@ -1920,8 +2032,9 @@ var ZoteroPane = new function()
|
|||
this.deleteSelectedCollection = function (deleteItems) {
|
||||
var collectionTreeRow = this.getCollectionTreeRow();
|
||||
|
||||
// Don't allow deleting libraries
|
||||
if (collectionTreeRow.isLibrary(true) && !collectionTreeRow.isFeed()) {
|
||||
// Don't allow deleting libraries or My Publications
|
||||
if (collectionTreeRow.isLibrary(true) && !collectionTreeRow.isFeed()
|
||||
|| collectionTreeRow.isPublications()) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -3038,7 +3151,6 @@ var ZoteroPane = new function()
|
|||
'sep1',
|
||||
'addNote',
|
||||
'createNoteFromAnnotations',
|
||||
'createNoteFromAnnotationsMenu',
|
||||
'addAttachments',
|
||||
'sep2',
|
||||
'findPDF',
|
||||
|
|
@ -3046,6 +3158,7 @@ var ZoteroPane = new function()
|
|||
'toggleRead',
|
||||
'addToCollection',
|
||||
'removeItems',
|
||||
'duplicateAndConvert',
|
||||
'duplicateItem',
|
||||
'restoreToLibrary',
|
||||
'moveToTrash',
|
||||
|
|
@ -3173,12 +3286,33 @@ var ZoteroPane = new function()
|
|||
}
|
||||
}
|
||||
|
||||
// "Add Notes from Annotation" and "Find Available PDFs"
|
||||
// "Add/Create Note from Annotations" and "Find Available PDFs"
|
||||
if (collectionTreeRow.filesEditable
|
||||
&& !collectionTreeRow.isDuplicates()
|
||||
&& !collectionTreeRow.isFeed()) {
|
||||
if (items.some(item => attachmentsWithExtractableAnnotations(item).length)) {
|
||||
if (items.some(item => attachmentsWithExtractableAnnotations(item).length)
|
||||
|| items.some(item => isAttachmentWithExtractableAnnotations(item))) {
|
||||
let menuitem = menu.childNodes[m.createNoteFromAnnotations];
|
||||
show.add(m.createNoteFromAnnotations);
|
||||
let key;
|
||||
// If all from a single item, show "Add Note from Annotations"
|
||||
if (Zotero.Items.getTopLevel(items).length == 1) {
|
||||
key = 'addNoteFromAnnotations';
|
||||
menuitem.onclick = async () => {
|
||||
return this.addNoteFromAnnotationsFromSelected();
|
||||
};
|
||||
}
|
||||
// Otherwise show "Create Note from Annotations"
|
||||
else {
|
||||
key = 'createNoteFromAnnotations';
|
||||
menuitem.onclick = async () => {
|
||||
return this.createStandaloneNoteFromAnnotationsFromSelected();
|
||||
};
|
||||
}
|
||||
menuitem.setAttribute(
|
||||
'label',
|
||||
Zotero.getString('pane.items.menu.' + key)
|
||||
);
|
||||
show.add(m.sep3);
|
||||
}
|
||||
|
||||
|
|
@ -3238,43 +3372,42 @@ var ZoteroPane = new function()
|
|||
show.add(m.sep1);
|
||||
}
|
||||
|
||||
// Show "Add Note from Annotations" on parent item with any extractable annotations
|
||||
if (item.isRegularItem() && !item.isFeedItem) {
|
||||
show.add(m.addNote);
|
||||
show.add(m.addAttachments);
|
||||
show.add(m.sep2);
|
||||
|
||||
// Create Note from Annotations
|
||||
let popup = document.getElementById('create-note-from-annotations-popup');
|
||||
popup.textContent = '';
|
||||
let eligibleAttachments = Zotero.Items.get(item.getAttachments())
|
||||
.filter(item => item.isPDFAttachment());
|
||||
let attachmentsWithAnnotations = eligibleAttachments
|
||||
let attachmentsWithAnnotations = Zotero.Items.get(item.getAttachments())
|
||||
.filter(item => isAttachmentWithExtractableAnnotations(item));
|
||||
if (attachmentsWithAnnotations.length) {
|
||||
// Display submenu if there's more than one PDF attachment, even if
|
||||
// there's only attachment with annotations, so it's clear which one
|
||||
// the annotations are coming from
|
||||
if (eligibleAttachments.length > 1) {
|
||||
show.add(m.createNoteFromAnnotationsMenu);
|
||||
for (let attachment of attachmentsWithAnnotations) {
|
||||
let menuitem = document.createElement('menuitem');
|
||||
menuitem.setAttribute('label', attachment.getDisplayTitle());
|
||||
menuitem.onclick = () => {
|
||||
ZoteroPane.createNoteFromAnnotationsForAttachment(attachment);
|
||||
};
|
||||
popup.appendChild(menuitem);
|
||||
}
|
||||
}
|
||||
// Single attachment with annotations
|
||||
else {
|
||||
show.add(m.createNoteFromAnnotations);
|
||||
}
|
||||
show.add(m.createNoteFromAnnotations);
|
||||
}
|
||||
}
|
||||
else if (isAttachmentWithExtractableAnnotations(item) && !item.isTopLevelItem()) {
|
||||
// Show "(Create|Add) Note from Annotations" on attachment with extractable annotations
|
||||
else if (isAttachmentWithExtractableAnnotations(item)) {
|
||||
show.add(m.createNoteFromAnnotations);
|
||||
show.add(m.sep2);
|
||||
}
|
||||
if (show.has(m.createNoteFromAnnotations)) {
|
||||
let menuitem = menu.childNodes[m.createNoteFromAnnotations];
|
||||
let str;
|
||||
// Show "Create" on standalone attachments
|
||||
if (item.isAttachment() && item.isTopLevelItem()) {
|
||||
str = 'pane.items.menu.createNoteFromAnnotations';
|
||||
menuitem.onclick = async () => {
|
||||
return this.createStandaloneNoteFromAnnotationsFromSelected();
|
||||
};
|
||||
}
|
||||
// And "Add" otherwise
|
||||
else {
|
||||
str = 'pane.items.menu.addNoteFromAnnotations';
|
||||
menuitem.onclick = async () => {
|
||||
return this.addNoteFromAnnotationsFromSelected();
|
||||
};
|
||||
}
|
||||
menuitem.setAttribute('label', Zotero.getString(str));
|
||||
}
|
||||
|
||||
if (Zotero.Attachments.canFindPDFForItem(item)) {
|
||||
show.add(m.findPDF);
|
||||
|
|
@ -3325,6 +3458,12 @@ var ZoteroPane = new function()
|
|||
}
|
||||
}
|
||||
else if (!collectionTreeRow.isPublications()) {
|
||||
if (item.itemType == 'book' || item.itemType == 'bookSection') {
|
||||
menu.childNodes[m.duplicateAndConvert].setAttribute('label', Zotero.getString('pane.items.menu.duplicateAndConvert.'
|
||||
+ (item.itemType == 'book' ? 'toBookSection' : 'toBook')));
|
||||
show.add(m.duplicateAndConvert);
|
||||
}
|
||||
|
||||
show.add(m.duplicateItem);
|
||||
}
|
||||
}
|
||||
|
|
@ -3434,8 +3573,6 @@ var ZoteroPane = new function()
|
|||
}
|
||||
|
||||
// Set labels, plural if necessary
|
||||
menu.childNodes[m.createNoteFromAnnotations].setAttribute('label', Zotero.getString('pane.items.menu.addNoteFromAnnotations' + multiple));
|
||||
menu.childNodes[m.createNoteFromAnnotationsMenu].setAttribute('label', Zotero.getString('pane.items.menu.addNoteFromAnnotations' + multiple));
|
||||
menu.childNodes[m.findPDF].setAttribute('label', Zotero.getString('pane.items.menu.findAvailablePDF' + multiple));
|
||||
menu.childNodes[m.moveToTrash].setAttribute('label', Zotero.getString('pane.items.menu.moveToTrash' + multiple));
|
||||
menu.childNodes[m.deleteFromLibrary].setAttribute('label', Zotero.getString('pane.items.menu.delete'));
|
||||
|
|
@ -3507,6 +3644,9 @@ var ZoteroPane = new function()
|
|||
throw new Error('collection must be null if createNew is true');
|
||||
}
|
||||
let id = await this.newCollection();
|
||||
if (!id) {
|
||||
return;
|
||||
}
|
||||
collection = Zotero.Collections.get(id);
|
||||
}
|
||||
|
||||
|
|
@ -4279,12 +4419,25 @@ var ZoteroPane = new function()
|
|||
extraData && extraData.location,
|
||||
{
|
||||
openInWindow: (event && event.shiftKey)
|
||||
|| (extraData && extraData.forceOpenPDFInWindow)
|
||||
|| (extraData && extraData.forceOpenPDFInWindow),
|
||||
allowDuplicate: event && event.shiftKey
|
||||
}
|
||||
);
|
||||
return;
|
||||
}
|
||||
// Try to open external reader to page number if specified
|
||||
else {
|
||||
let pageIndex = extraData?.location?.position?.pageIndex;
|
||||
if (pageIndex !== undefined) {
|
||||
await Zotero.OpenPDF.openToPage(
|
||||
item,
|
||||
parseInt(pageIndex) + 1
|
||||
);
|
||||
return;
|
||||
}
|
||||
}
|
||||
// Custom PDF handler
|
||||
// TODO: Remove this and unify with Zotero.OpenPDF
|
||||
if (pdfHandler != 'system') {
|
||||
try {
|
||||
if (await OS.File.exists(pdfHandler)) {
|
||||
|
|
@ -4817,14 +4970,21 @@ var ZoteroPane = new function()
|
|||
};
|
||||
|
||||
|
||||
this.createNoteFromAnnotationsForAttachment = async function (attachment, { skipSelect } = {}) {
|
||||
this.addNoteFromAnnotationsForAttachment = async function (attachment, { skipSelect } = {}) {
|
||||
if (!this.canEdit()) {
|
||||
this.displayCannotEditLibraryMessage();
|
||||
return;
|
||||
}
|
||||
await Zotero.PDFWorker.import(attachment.id, true);
|
||||
var annotations = attachment.getAnnotations().filter(x => x.annotationType != 'ink');
|
||||
if (!annotations.length) {
|
||||
return;
|
||||
}
|
||||
var note = await Zotero.EditorInstance.createNoteFromAnnotations(
|
||||
attachment.getAnnotations().filter(x => x.annotationType != 'ink'), attachment.parentID
|
||||
annotations,
|
||||
{
|
||||
parentID: attachment.parentID
|
||||
}
|
||||
);
|
||||
if (!skipSelect) {
|
||||
await this.selectItem(note.id);
|
||||
|
|
@ -4833,7 +4993,75 @@ var ZoteroPane = new function()
|
|||
};
|
||||
|
||||
|
||||
this.createNoteFromAnnotationsFromSelected = async function () {
|
||||
/**
|
||||
* Add a single child note with the annotations from all selected items, including from all
|
||||
* child attachments of a selected regular item
|
||||
*
|
||||
* Selected items must all have the same top-level item
|
||||
*/
|
||||
this.addNoteFromAnnotationsFromSelected = async function () {
|
||||
if (!this.canEdit()) {
|
||||
this.displayCannotEditLibraryMessage();
|
||||
return;
|
||||
}
|
||||
var items = this.getSelectedItems();
|
||||
var topLevelItems = [...new Set(Zotero.Items.getTopLevel(items))];
|
||||
if (topLevelItems.length > 1) {
|
||||
throw new Error("Can't create child attachment from different top-level items");
|
||||
}
|
||||
var topLevelItem = topLevelItems[0];
|
||||
if (!topLevelItem.isRegularItem()) {
|
||||
throw new Error("Can't add note to standalone attachment");
|
||||
}
|
||||
|
||||
// Ignore top-level item if specific child items are also selected
|
||||
if (items.length > 1) {
|
||||
items = items.filter(item => !item.isRegularItem());
|
||||
}
|
||||
|
||||
var attachments = [];
|
||||
for (let item of items) {
|
||||
if (item.isRegularItem()) {
|
||||
// Find all child items with extractable annotations
|
||||
attachments.push(
|
||||
...Zotero.Items.get(item.getAttachments())
|
||||
.filter(item => isAttachmentWithExtractableAnnotations(item))
|
||||
);
|
||||
}
|
||||
else if (isAttachmentWithExtractableAnnotations(item)) {
|
||||
attachments.push(item);
|
||||
}
|
||||
else {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
if (!attachments.length) {
|
||||
Zotero.debug("No attachments found", 2);
|
||||
return;
|
||||
}
|
||||
|
||||
var annotations = [];
|
||||
for (let attachment of attachments) {
|
||||
annotations.push(...attachment.getAnnotations());
|
||||
}
|
||||
var note = await Zotero.EditorInstance.createNoteFromAnnotations(
|
||||
annotations,
|
||||
{
|
||||
parentID: topLevelItem.id
|
||||
}
|
||||
);
|
||||
await this.selectItem(note.id);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Create separate child notes for each selected item, including all child attachments of
|
||||
* selected regular items
|
||||
*
|
||||
* No longer exposed via UI
|
||||
*/
|
||||
this.addNotesFromAnnotationsFromSelected = async function () {
|
||||
if (!this.canEdit()) {
|
||||
this.displayCannotEditLibraryMessage();
|
||||
return;
|
||||
|
|
@ -4859,16 +5087,71 @@ var ZoteroPane = new function()
|
|||
continue;
|
||||
}
|
||||
for (let attachment of attachments) {
|
||||
let note = await this.createNoteFromAnnotationsForAttachment(
|
||||
let note = await this.addNoteFromAnnotationsForAttachment(
|
||||
attachment,
|
||||
{ skipSelect: true }
|
||||
);
|
||||
itemIDsToSelect.push(note.id);
|
||||
if (note) {
|
||||
itemIDsToSelect.push(note.id);
|
||||
}
|
||||
}
|
||||
}
|
||||
await this.selectItems(itemIDsToSelect);
|
||||
};
|
||||
|
||||
|
||||
this.createStandaloneNoteFromAnnotationsFromSelected = async function () {
|
||||
if (!this.canEdit()) {
|
||||
this.displayCannotEditLibraryMessage();
|
||||
return;
|
||||
}
|
||||
var items = this.getSelectedItems();
|
||||
|
||||
// Ignore selected top-level items if any descendant items are also selected
|
||||
var topLevelOfSelectedDescendants = new Set();
|
||||
for (let item of items) {
|
||||
if (!item.isTopLevelItem()) {
|
||||
topLevelOfSelectedDescendants.add(item.topLevelItem);
|
||||
}
|
||||
}
|
||||
items = items.filter(item => !topLevelOfSelectedDescendants.has(item));
|
||||
|
||||
var annotations = [];
|
||||
for (let item of items) {
|
||||
let attachments = [];
|
||||
if (item.isRegularItem()) {
|
||||
// Find all child attachments with extractable annotations
|
||||
attachments.push(
|
||||
...Zotero.Items.get(item.getAttachments())
|
||||
.filter(item => isAttachmentWithExtractableAnnotations(item))
|
||||
);
|
||||
}
|
||||
else if (isAttachmentWithExtractableAnnotations(item)) {
|
||||
attachments.push(item);
|
||||
}
|
||||
else {
|
||||
continue;
|
||||
}
|
||||
for (let attachment of attachments) {
|
||||
annotations.push(...attachment.getAnnotations());
|
||||
}
|
||||
}
|
||||
|
||||
if (!annotations.length) {
|
||||
Zotero.debug("No annotations found", 2);
|
||||
return;
|
||||
}
|
||||
|
||||
var note = await Zotero.EditorInstance.createNoteFromAnnotations(
|
||||
annotations,
|
||||
{
|
||||
collectionID: this.getSelectedCollection(true)
|
||||
}
|
||||
);
|
||||
await this.selectItem(note.id);
|
||||
};
|
||||
|
||||
|
||||
this.createEmptyParent = async function (item) {
|
||||
await Zotero.DB.executeTransaction(async function () {
|
||||
// TODO: remove once there are no top-level web attachments
|
||||
|
|
|
|||
|
|
@ -293,11 +293,7 @@
|
|||
<!-- with icon: <menuitem class="menuitem-iconic" id="zotero-menuitem-note" label="&zotero.items.menu.attach.note;" oncommand="ZoteroPane_Local.newNote(false, this.parentNode.getAttribute('itemID'))"/>-->
|
||||
<menuitem class="menuitem-iconic zotero-menuitem-attach-note" label="&zotero.items.menu.attach.note;" oncommand="ZoteroPane_Local.newNote(false, this.parentNode.getAttribute('itemKey'))"/>
|
||||
|
||||
<menuitem class="menuitem-iconic zotero-menuitem-create-note-from-annotations"
|
||||
oncommand="ZoteroPane.createNoteFromAnnotationsFromSelected()"/>
|
||||
<menu class="menuitem-iconic zotero-menuitem-create-note-from-annotations">
|
||||
<menupopup id="create-note-from-annotations-popup"/>
|
||||
</menu>
|
||||
<menuitem class="menuitem-iconic zotero-menuitem-create-note-from-annotations"/>
|
||||
|
||||
<menu class="menu-iconic zotero-menuitem-attach" label="&zotero.items.menu.attach;">
|
||||
<menupopup id="zotero-add-attachment-popup">
|
||||
|
|
@ -317,6 +313,7 @@
|
|||
</menupopup>
|
||||
</menu>
|
||||
<menuitem class="menuitem-iconic zotero-menuitem-remove-items" oncommand="ZoteroPane_Local.deleteSelectedItems();"/>
|
||||
<menuitem class="menuitem-iconic zotero-menuitem-duplicate-and-convert" oncommand="ZoteroPane_Local.duplicateAndConvertSelectedItem();"/>
|
||||
<menuitem class="menuitem-iconic zotero-menuitem-duplicate-item" label="&zotero.items.menu.duplicateItem;" oncommand="ZoteroPane_Local.duplicateSelectedItem().done();"/>
|
||||
<menuitem class="menuitem-iconic zotero-menuitem-restore-to-library" label="&zotero.items.menu.restoreToLibrary;" oncommand="ZoteroPane_Local.restoreSelectedItems();"/>
|
||||
<menuitem class="menuitem-iconic zotero-menuitem-move-to-trash" oncommand="ZoteroPane_Local.deleteSelectedItems(true, true);"/>
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<!ENTITY styles.preview "Zotero Style Preview">
|
||||
|
||||
<!ENTITY styles.preview.citationFormat "Citation Format:">
|
||||
<!ENTITY styles.preview.citationFormat.all "all">
|
||||
<!ENTITY styles.preview.citationFormat.all "alles">
|
||||
<!ENTITY styles.preview.citationFormat.author "author">
|
||||
<!ENTITY styles.preview.citationFormat.authorDate "author-date">
|
||||
<!ENTITY styles.preview.citationFormat.label "label">
|
||||
|
|
|
|||
|
|
@ -58,7 +58,7 @@
|
|||
<!ENTITY zotero.items.itemType "Tipe item">
|
||||
<!ENTITY zotero.items.creator_column "Skepper">
|
||||
<!ENTITY zotero.items.year_column "Jaar">
|
||||
<!ENTITY zotero.items.dateModified_column "Date Modified">
|
||||
<!ENTITY zotero.items.dateModified_column "Datum gewysig">
|
||||
<!ENTITY zotero.items.moreColumns.label "More Columns">
|
||||
<!ENTITY zotero.items.restoreColumnOrder.label "Restore Column Order">
|
||||
|
||||
|
|
@ -129,7 +129,7 @@
|
|||
<!ENTITY zotero.toolbar.attachment.weblink "Save Link to Current Page">
|
||||
<!ENTITY zotero.toolbar.attachment.snapshot "Take Snapshot of Current Page">
|
||||
<!ENTITY zotero.toolbar.context.item "Item">
|
||||
<!ENTITY zotero.toolbar.context.notes "Notes">
|
||||
<!ENTITY zotero.toolbar.context.notes "Notas">
|
||||
|
||||
<!ENTITY zotero.tagSelector.noTagsToDisplay "No tags to display">
|
||||
<!ENTITY zotero.tagSelector.loadingTags "Loading tags…">
|
||||
|
|
@ -148,7 +148,7 @@
|
|||
<!ENTITY zotero.tagColorChooser.removeColor "Remove Color">
|
||||
|
||||
<!ENTITY zotero.lookup.description "Enter ISBNs, DOIs, PMIDs, arXiv IDs, or ADS Bibcodes to add to your library:">
|
||||
<!ENTITY zotero.lookup.button.search "Search">
|
||||
<!ENTITY zotero.lookup.button.search "Soek">
|
||||
|
||||
<!ENTITY zotero.createParent.title "Create Parent Item">
|
||||
<!ENTITY zotero.createParent.button.manual "Manual Entry">
|
||||
|
|
|
|||
|
|
@ -19,8 +19,8 @@ general.unknownErrorOccurred=An unknown error occurred.
|
|||
general.invalidResponseServer=Invalid response from server.
|
||||
general.tryAgainLater=Please try again in a few minutes.
|
||||
general.serverError=The server returned an error. Please try again.
|
||||
general.pleaseRestart=Please restart %S.
|
||||
general.pleaseRestartAndTryAgain=Please restart %S and try again.
|
||||
general.pleaseRestart=Please restart Firefox.
|
||||
general.pleaseRestartAndTryAgain=Please restart Firefox and try again.
|
||||
general.checkForUpdate=Check for Update
|
||||
general.checkForUpdates=Check for Updates
|
||||
general.actionCannotBeUndone=This action cannot be undone.
|
||||
|
|
@ -40,10 +40,10 @@ general.and=and
|
|||
general.etAl=et al.
|
||||
general.accessDenied=Access Denied
|
||||
general.permissionDenied=Permission Denied
|
||||
general.character.singular=character
|
||||
general.character.plural=characters
|
||||
general.character.singular=karakter
|
||||
general.character.plural=karakters
|
||||
general.create=Create
|
||||
general.delete=Delete
|
||||
general.delete=Skrap
|
||||
general.remove=Remove
|
||||
general.import=Import
|
||||
general.export=Export
|
||||
|
|
@ -76,7 +76,7 @@ general.continue=Continue
|
|||
general.copy=Copy
|
||||
general.copyToClipboard=Copy to Clipboard
|
||||
general.cancel=Cancel
|
||||
general.clear=Clear
|
||||
general.clear=Skoon
|
||||
general.processing=Processing
|
||||
general.finished=Finished
|
||||
general.submitted=Submitted
|
||||
|
|
@ -92,6 +92,7 @@ general.custom=Custom
|
|||
general.loading=Loading…
|
||||
general.richText=Rich Text
|
||||
general.clearSelection=Clear Selection
|
||||
general.insert=Insert
|
||||
|
||||
general.yellow=Yellow
|
||||
general.red=Red
|
||||
|
|
@ -318,7 +319,7 @@ pane.items.attach.link.uri.file=To attach a link to a file, please use “%S”.
|
|||
pane.items.trash.title=Move to Trash
|
||||
pane.items.trash=Are you sure you want to move the selected item to the Trash?
|
||||
pane.items.trash.multiple=Are you sure you want to move the selected items to the Trash?
|
||||
pane.items.delete.title=Delete
|
||||
pane.items.delete.title=Skrap
|
||||
pane.items.delete=Are you sure you want to delete the selected item?
|
||||
pane.items.delete.multiple=Are you sure you want to delete the selected items?
|
||||
pane.items.remove.title=Remove from Collection
|
||||
|
|
@ -327,8 +328,11 @@ pane.items.remove.multiple=Are you sure you want to remove the selected items fr
|
|||
pane.items.removeFromPublications.title=Remove from My Publications
|
||||
pane.items.removeFromPublications=Are you sure you want to remove the selected item from My Publications?
|
||||
pane.items.removeFromPublications.multiple=Are you sure you want to remove the selected items from My Publications?
|
||||
pane.items.removeRecursive.title=Remove from Collection and Subcollections
|
||||
pane.items.removeRecursive=Are you sure you want to remove the selected item from this collection and all subcollections?
|
||||
pane.items.removeRecursive.multiple=Are you sure you want to remove the selected items from this collection and all subcollections?
|
||||
pane.items.menu.addNoteFromAnnotations=Add Note from Annotations
|
||||
pane.items.menu.addNoteFromAnnotations.multiple=Add Notes from Annotations
|
||||
pane.items.menu.createNoteFromAnnotations=Create Note from Annotations
|
||||
pane.items.menu.findAvailablePDF=Find Available PDF
|
||||
pane.items.menu.findAvailablePDF.multiple=Find Available PDFs
|
||||
pane.items.menu.addToCollection=Add to Collection
|
||||
|
|
@ -343,6 +347,8 @@ pane.items.menu.export=Export Selected Item...
|
|||
pane.items.menu.export.multiple=Export Selected Items...
|
||||
pane.items.menu.exportNote=Export Note…
|
||||
pane.items.menu.exportNote.multiple=Export Notes…
|
||||
pane.items.menu.exportPDF=Export PDF…
|
||||
pane.items.menu.exportPDF.multiple=Export PDFs…
|
||||
pane.items.menu.createBib=Create Bibliography from Selected Item...
|
||||
pane.items.menu.createBib.multiple=Create Bibliography from Selected Items...
|
||||
pane.items.menu.generateReport=Generate Report from Selected Item...
|
||||
|
|
@ -355,6 +361,8 @@ pane.items.menu.createParent=Create Parent Item…
|
|||
pane.items.menu.createParent.multiple=Create Parent Items
|
||||
pane.items.menu.renameAttachments=Rename File from Parent Metadata
|
||||
pane.items.menu.renameAttachments.multiple=Rename Files from Parent Metadata
|
||||
pane.items.menu.duplicateAndConvert.toBookSection=Create Book Section
|
||||
pane.items.menu.duplicateAndConvert.toBook=Create Book from Book Section
|
||||
pane.items.showItemInLibrary=Show Item in Library
|
||||
|
||||
pane.items.letter.oneParticipant=Letter to %S
|
||||
|
|
@ -478,34 +486,34 @@ itemTypes.preprint=Preprint
|
|||
|
||||
itemFields.itemType=Type
|
||||
itemFields.title=Title
|
||||
itemFields.dateAdded=Date Added
|
||||
itemFields.dateAdded=Datum bygevoeg
|
||||
itemFields.dateModified=Modified
|
||||
itemFields.source=Source
|
||||
itemFields.notes=Notes
|
||||
itemFields.tags=Tags
|
||||
itemFields.attachments=Attachments
|
||||
itemFields.related=Related
|
||||
itemFields.notes=Notas
|
||||
itemFields.tags=Etikette
|
||||
itemFields.attachments=Aanhegsels
|
||||
itemFields.related=Verwant
|
||||
itemFields.url=URL
|
||||
itemFields.rights=Rights
|
||||
itemFields.rights=Regte
|
||||
itemFields.series=Series
|
||||
itemFields.volume=Volume
|
||||
itemFields.issue=Issue
|
||||
itemFields.edition=Edition
|
||||
itemFields.place=Place
|
||||
itemFields.publisher=Publisher
|
||||
itemFields.publisher=Uitgewer
|
||||
itemFields.pages=Pages
|
||||
itemFields.ISBN=ISBN
|
||||
itemFields.publicationTitle=Publication
|
||||
itemFields.publicationTitle=Publikasie
|
||||
itemFields.ISSN=ISSN
|
||||
itemFields.date=Date
|
||||
itemFields.date=Datum
|
||||
itemFields.section=Section
|
||||
itemFields.callNumber=Call Number
|
||||
itemFields.callNumber=Telefoonnommer
|
||||
itemFields.archiveLocation=Loc. in Archive
|
||||
itemFields.distributor=Distributor
|
||||
itemFields.extra=Extra
|
||||
itemFields.journalAbbreviation=Journal Abbr
|
||||
itemFields.journalAbbreviation=Joernaalafkorting
|
||||
itemFields.DOI=DOI
|
||||
itemFields.accessDate=Accessed
|
||||
itemFields.accessDate=Gebruik/Toegang verkry
|
||||
itemFields.seriesTitle=Series Title
|
||||
itemFields.seriesText=Series Text
|
||||
itemFields.seriesNumber=Series Number
|
||||
|
|
@ -529,7 +537,7 @@ itemFields.codeNumber=Code Number
|
|||
itemFields.artworkMedium=Medium
|
||||
itemFields.number=Number
|
||||
itemFields.artworkSize=Artwork Size
|
||||
itemFields.libraryCatalog=Library Catalog
|
||||
itemFields.libraryCatalog=Biblioteekkatalogus
|
||||
itemFields.videoRecordingFormat=Format
|
||||
itemFields.interviewMedium=Medium
|
||||
itemFields.letterType=Type
|
||||
|
|
@ -812,11 +820,11 @@ searchOperator.isInTheLast=is in the last
|
|||
searchConditions.tooltip.fields=Fields:
|
||||
searchConditions.collection=Collection
|
||||
searchConditions.savedSearch=Saved Search
|
||||
searchConditions.itemTypeID=Item Type
|
||||
searchConditions.itemTypeID=Tipe item
|
||||
searchConditions.tag=Tag
|
||||
searchConditions.note=Note
|
||||
searchConditions.childNote=Child Note
|
||||
searchConditions.creator=Creator
|
||||
searchConditions.creator=Skepper
|
||||
searchConditions.type=Type
|
||||
searchConditions.thesisType=Thesis Type
|
||||
searchConditions.reportType=Report Type
|
||||
|
|
@ -830,7 +838,7 @@ searchConditions.presentationType=Presentation Type
|
|||
searchConditions.mapType=Map Type
|
||||
searchConditions.medium=Medium
|
||||
searchConditions.artworkMedium=Artwork Medium
|
||||
searchConditions.dateModified=Date Modified
|
||||
searchConditions.dateModified=Datum gewysig
|
||||
searchConditions.fulltextContent=Attachment Content
|
||||
searchConditions.programmingLanguage=Programming Language
|
||||
searchConditions.fileTypeID=Attachment File Type
|
||||
|
|
@ -863,23 +871,8 @@ citation.singleSource=Single Source...
|
|||
citation.showEditor=Show Editor...
|
||||
citation.hideEditor=Hide Editor...
|
||||
citation.citations=Citations
|
||||
citation.notes=Notes
|
||||
citation.locator.page=Page
|
||||
citation.locator.book=Book
|
||||
citation.locator.chapter=Chapter
|
||||
citation.locator.column=Column
|
||||
citation.locator.figure=Figure
|
||||
citation.locator.folio=Folio
|
||||
citation.locator.issue=Issue
|
||||
citation.locator.line=Line
|
||||
citation.locator.note=Note
|
||||
citation.locator.opus=Opus
|
||||
citation.locator.paragraph=Paragraph
|
||||
citation.locator.part=Part
|
||||
citation.locator.section=Section
|
||||
citation.locator.subverbo=Sub verbo
|
||||
citation.locator.volume=Volume
|
||||
citation.locator.verse=Verse
|
||||
citation.notes=Notas
|
||||
citation.locator.timestamp=Timestamp
|
||||
|
||||
report.title.default=Zotero Report
|
||||
report.parentItem=Parent Item:
|
||||
|
|
@ -1098,8 +1091,8 @@ sync.storage.mbRemaining=%SMB remaining
|
|||
sync.storage.kbRemaining=%SKB remaining
|
||||
sync.storage.filesRemaining=%1$S/%2$S files
|
||||
sync.storage.none=None
|
||||
sync.storage.downloads=Downloads:
|
||||
sync.storage.uploads=Uploads:
|
||||
sync.storage.downloads=Aflaaie:
|
||||
sync.storage.uploads=Oplaaie:
|
||||
sync.storage.localFile=Local File
|
||||
sync.storage.remoteFile=Remote File
|
||||
sync.storage.savedFile=Saved File
|
||||
|
|
@ -1303,20 +1296,21 @@ noteEditor.enterLink=Enter Link
|
|||
noteEditor.heading1=Heading 1
|
||||
noteEditor.heading2=Heading 2
|
||||
noteEditor.heading3=Heading 3
|
||||
noteEditor.paragraph=Paragraph
|
||||
noteEditor.paragraph=Paragraaf
|
||||
noteEditor.monospaced=Monospaced
|
||||
noteEditor.bulletList=Bulleted List
|
||||
noteEditor.orderedList=Numbered List
|
||||
noteEditor.blockquote=Block Quote
|
||||
noteEditor.mathBlock=Math Block
|
||||
noteEditor.formatText=Format Text
|
||||
noteEditor.highlightText=Highlight Text
|
||||
noteEditor.highlightText=Verligmerk teks
|
||||
noteEditor.removeColor=Remove Color
|
||||
noteEditor.bold=Bold
|
||||
noteEditor.italic=Italic
|
||||
noteEditor.underline=Underline
|
||||
noteEditor.bold=Vetdruk
|
||||
noteEditor.italic=Kursief
|
||||
noteEditor.underline=Onderstreep
|
||||
noteEditor.strikethrough=Strikethrough
|
||||
noteEditor.subscript=Subscript
|
||||
noteEditor.superscript=Superscript
|
||||
noteEditor.subscript=Onderskrif
|
||||
noteEditor.superscript=Boskrif
|
||||
noteEditor.returnToNotesList=Return to Notes List
|
||||
noteEditor.insertLink=Insert Link
|
||||
noteEditor.clearFormatting=Clear Formatting
|
||||
|
|
@ -1338,7 +1332,7 @@ noteEditor.editCitation=Edit Citation
|
|||
noteEditor.showOnPage=Show on Page
|
||||
noteEditor.unlink=Unlink
|
||||
noteEditor.set=Set
|
||||
noteEditor.edit=Edit
|
||||
noteEditor.edit=Redigeer
|
||||
noteEditor.addCitation=Add Citation
|
||||
noteEditor.removeCitation=Hide Citation
|
||||
noteEditor.findAndReplace=Find and Replace
|
||||
|
|
@ -1347,7 +1341,11 @@ noteEditor.applyAnnotationColors=Show Annotation Colors
|
|||
noteEditor.removeAnnotationColors=Hide Annotation Colors
|
||||
noteEditor.addCitations=Show Annotation Citations
|
||||
noteEditor.removeCitations=Hide Annotation Citations
|
||||
noteEditor.insertTable=Insert Table
|
||||
noteEditor.image=Image
|
||||
noteEditor.math=Math
|
||||
noteEditor.table=Table
|
||||
noteEditor.copyImage=Copy Image
|
||||
noteEditor.saveImageAs=Save Image As…
|
||||
noteEditor.insertRowBefore=Insert Row Above
|
||||
noteEditor.insertRowAfter=Insert Row Below
|
||||
noteEditor.insertColumnBefore=Insert Column Left
|
||||
|
|
@ -1360,10 +1358,10 @@ pdfReader.annotations=Annotations
|
|||
pdfReader.showAnnotations=Show Annotations
|
||||
pdfReader.searchAnnotations=Search Annotations
|
||||
pdfReader.noAnnotations=Create an annotation to see it in the sidebar
|
||||
pdfReader.addText=Add extracted text
|
||||
pdfReader.noExtractedText=No extracted text
|
||||
pdfReader.addComment=Add comment
|
||||
pdfReader.addTags=Add tags…
|
||||
pdfReader.highlightText=Highlight Text
|
||||
pdfReader.highlightText=Verligmerk teks
|
||||
pdfReader.addNote=Add Note
|
||||
pdfReader.selectArea=Select Area
|
||||
pdfReader.pickColor=Pick a Color
|
||||
|
|
@ -1375,15 +1373,22 @@ pdfReader.zoomPageWidth=Zoom to Page Width
|
|||
pdfReader.zoomPageHeight=Zoom to Page Height
|
||||
pdfReader.nextPage=Next Page
|
||||
pdfReader.previousPage=Previous Page
|
||||
pdfReader.page=Page
|
||||
pdfReader.page=Bladsy
|
||||
pdfReader.readOnly=Read-only
|
||||
pdfReader.promptTransferFromPDF.title=Import Annotations
|
||||
pdfReader.promptTransferFromPDF.text=Annotations stored in the PDF file will be moved to %1$S.
|
||||
pdfReader.promptTransferToPDF.title=Store Annotations in File
|
||||
pdfReader.promptTransferToPDF.text=Annotations will be transferred to the PDF file and will no longer be editable in %S.
|
||||
pdfReader.promptPasswordProtected=The operation is not supported for password-protected PDF files.
|
||||
pdfReader.promptDeletePages.title=Delete Pages
|
||||
pdfReader.promptDeletePages.text=Are you sure you want to delete %1$S page from the PDF file?;Are you sure you want to delete %1$S pages from the PDF file?
|
||||
pdfReader.rotateLeft=Rotate Left
|
||||
pdfReader.rotateRight=Rotate Right
|
||||
pdfReader.rotate180=Rotate 180°
|
||||
pdfReader.editPageNumber=Edit Page Number…
|
||||
pdfReader.editHighlightedText=Edit Highlighted Text
|
||||
pdfReader.copyImage=Copy Image
|
||||
pdfReader.saveImageAs=Save Image As…
|
||||
pdfReader.pageNumberPopupHeader=Change page number for:
|
||||
pdfReader.thisAnnotation=This annotation
|
||||
pdfReader.selectedAnnotations=Selected annotations
|
||||
|
|
|
|||
|
|
@ -5,6 +5,12 @@
|
|||
"general_done": {
|
||||
"message": "تم"
|
||||
},
|
||||
"general_yes": {
|
||||
"message": "نعم"
|
||||
},
|
||||
"general_no": {
|
||||
"message": "لا"
|
||||
},
|
||||
"general_tryAgain": {
|
||||
"message": "حاول مرة أخرى"
|
||||
},
|
||||
|
|
@ -14,6 +20,9 @@
|
|||
"general_cancel": {
|
||||
"message": "إلغاء"
|
||||
},
|
||||
"general_copyToClipboard": {
|
||||
"message": "انسخ إلى الحافظة"
|
||||
},
|
||||
"progressWindow_savingTo": {
|
||||
"message": "الحفظ في"
|
||||
},
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
<!ENTITY zotero.general.deselectAll "إلغاء تحديد الكل">
|
||||
<!ENTITY zotero.general.edit "تحرير">
|
||||
<!ENTITY zotero.general.delete "حذف">
|
||||
<!ENTITY zotero.general.moveToTrash "Move to Trash">
|
||||
<!ENTITY zotero.general.moveToTrash "نقل لسلة المحذوفات">
|
||||
<!ENTITY zotero.general.ok "موافق">
|
||||
<!ENTITY zotero.general.cancel "الغاء">
|
||||
<!ENTITY zotero.general.refresh "اعادة تحميل">
|
||||
|
|
@ -307,7 +307,7 @@
|
|||
<!ENTITY zotero.context.addStandaloneNoteFromAnnotations "Add Standalone Note from Annotations">
|
||||
<!ENTITY zotero.context.editInWindow "Edit in a Separate Window">
|
||||
|
||||
<!ENTITY zotero.pdfReader.firstPage "First Page">
|
||||
<!ENTITY zotero.pdfReader.firstPage "الصفحة الأولى">
|
||||
<!ENTITY zotero.pdfReader.lastPage "Last Page">
|
||||
<!ENTITY zotero.pdfReader.back "Back">
|
||||
<!ENTITY zotero.pdfReader.forward "Forward">
|
||||
|
|
|
|||
|
|
@ -89,9 +89,10 @@ general.back=Back
|
|||
general.languages=Languages
|
||||
general.default=Default
|
||||
general.custom=Custom
|
||||
general.loading=Loading…
|
||||
general.loading=التحميل
|
||||
general.richText=Rich Text
|
||||
general.clearSelection=Clear Selection
|
||||
general.insert=Insert
|
||||
|
||||
general.yellow=Yellow
|
||||
general.red=Red
|
||||
|
|
@ -183,7 +184,7 @@ dataDir.unsafeLocation.existing.cloud=Your %S data directory appears to be withi
|
|||
dataDir.unsafeLocation.existing.chooseDifferent=Would you like to choose a different location now?
|
||||
dataDir.selectedDirNonEmpty.title=المجلد غير فارغ
|
||||
dataDir.selectedDirNonEmpty.text=المجلد المحدد غير فارغ، ولا يبدو انه مجلد بيانات زوتيرو.\n\nهل ترغب بإنشاء ملفات زوتيرو في هذا الدليل؟
|
||||
dataDir.mustSelectEmpty.title=Directory Not Empty
|
||||
dataDir.mustSelectEmpty.title=المجلد غير فارغ
|
||||
dataDir.mustSelectEmpty.text=The directory you selected is not empty. You must select an empty directory to continue.
|
||||
dataDir.selectedDirEmpty.title=مجلد فارغ
|
||||
dataDir.selectedDirEmpty.text=الدليل الذي حددته فارغ. لنقل دليل بيانات زوتيرو موجود ، ستحتاج إلى نقل الملفات يدوياً من دليل البيانات الموجود إلى الموقع الجديد بعد إغلاق %1$S.
|
||||
|
|
@ -255,10 +256,10 @@ pane.collections.savedSearchName=أدخل اسماً لهذا البحث الم
|
|||
pane.collections.rename=إعادة تسمية مجموعة العناصر:
|
||||
pane.collections.library=مكتبتي
|
||||
pane.collections.publications=منشوراتي
|
||||
pane.collections.feeds=Feeds
|
||||
pane.collections.feeds=الملقمات
|
||||
pane.collections.libraryAndFeeds=My Library & Feeds
|
||||
pane.collections.groupLibraries=مكتبات المجموعات
|
||||
pane.collections.feedLibraries=Feeds
|
||||
pane.collections.feedLibraries=الملقمات
|
||||
pane.collections.trash=سلة المحذوفات
|
||||
pane.collections.untitled=بدون عنوان
|
||||
pane.collections.unfiled=العناصر الغير مصنفة
|
||||
|
|
@ -270,7 +271,7 @@ pane.collections.removeLibrary.text=Are you sure you want to permanently remove
|
|||
pane.collections.menu.rename.collection=إعادة تسمية مجموعة العناصر...
|
||||
pane.collections.menu.duplicate.savedSearch=تكرار البحث المحفوظ
|
||||
pane.collections.menu.edit.savedSearch=تحرير البحث المحفوظ
|
||||
pane.collections.menu.edit.feed=Edit Feed…
|
||||
pane.collections.menu.edit.feed=تحرير الخلاصة...
|
||||
pane.collections.menu.remove.library=إزالة المكتبة...
|
||||
pane.collections.menu.delete.collection=امسح مجموعة العناصر...
|
||||
pane.collections.menu.delete.collectionAndItems=Delete Collection and Items…
|
||||
|
|
@ -288,7 +289,7 @@ pane.collections.menu.generateReport.collection=انتاج تقرير من مج
|
|||
pane.collections.menu.generateReport.savedSearch=انتاج تقرير من البحث المخزن...
|
||||
pane.collections.menu.generateReport.feed=Generate Report from Feed…
|
||||
|
||||
pane.collections.menu.refresh.feed=Refresh Feed
|
||||
pane.collections.menu.refresh.feed=تحديث الخلاصة
|
||||
|
||||
pane.tagSelector.rename.title=إعادة تسمية الوسم
|
||||
pane.tagSelector.rename.message=من فضلك ادخل إسماً لهذا الوسم الجديد.\n\nسيتم إعادة تسمية الوسم في جميع العناصر المرتبطة.
|
||||
|
|
@ -327,8 +328,11 @@ pane.items.remove.multiple=Are you sure you want to remove the selected items fr
|
|||
pane.items.removeFromPublications.title=أزل من منشوراتي
|
||||
pane.items.removeFromPublications=Are you sure you want to remove the selected item from My Publications?
|
||||
pane.items.removeFromPublications.multiple=Are you sure you want to remove the selected items from My Publications?
|
||||
pane.items.removeRecursive.title=Remove from Collection and Subcollections
|
||||
pane.items.removeRecursive=Are you sure you want to remove the selected item from this collection and all subcollections?
|
||||
pane.items.removeRecursive.multiple=Are you sure you want to remove the selected items from this collection and all subcollections?
|
||||
pane.items.menu.addNoteFromAnnotations=Add Note from Annotations
|
||||
pane.items.menu.addNoteFromAnnotations.multiple=Add Notes from Annotations
|
||||
pane.items.menu.createNoteFromAnnotations=Create Note from Annotations
|
||||
pane.items.menu.findAvailablePDF=ابحث عن ملف PDF متاح
|
||||
pane.items.menu.findAvailablePDF.multiple=ابحث عن ملفات PDF متاحة
|
||||
pane.items.menu.addToCollection=Add to Collection
|
||||
|
|
@ -338,11 +342,13 @@ pane.items.menu.removeFromPublications=أزل العنصر من منشوراتي
|
|||
pane.items.menu.removeFromPublications.multiple=أزل العناصر من منشوراتي...
|
||||
pane.items.menu.moveToTrash=انقل العنصر لسلة المحذوفات...
|
||||
pane.items.menu.moveToTrash.multiple=انقل العناصر لسلة المحذوفات...
|
||||
pane.items.menu.delete=Delete Permanently…
|
||||
pane.items.menu.delete=حذف نهائي...
|
||||
pane.items.menu.export=تصدير العنصر المحدد...
|
||||
pane.items.menu.export.multiple=تصدير العناصر المحددة...
|
||||
pane.items.menu.exportNote=Export Note…
|
||||
pane.items.menu.exportNote.multiple=Export Notes…
|
||||
pane.items.menu.exportPDF=Export PDF…
|
||||
pane.items.menu.exportPDF.multiple=Export PDFs…
|
||||
pane.items.menu.createBib=إنشاء ببليوجرافية من العنصر المحدد...
|
||||
pane.items.menu.createBib.multiple=إنشاء ببليوجرافية من العناصر المحددة...
|
||||
pane.items.menu.generateReport=انتاج تقرير من العنصر المحدد...
|
||||
|
|
@ -355,6 +361,8 @@ pane.items.menu.createParent=انشئ عنصر رئيسي…
|
|||
pane.items.menu.createParent.multiple=انشئ عناصر رئيسية
|
||||
pane.items.menu.renameAttachments=إعادة تسمية الملف وفقا للبيانات الوصفية للعنصر الرئيسي
|
||||
pane.items.menu.renameAttachments.multiple=إعادة تسمية الملفات وفقا للبيانات الوصفية للعنصر الرئيسي
|
||||
pane.items.menu.duplicateAndConvert.toBookSection=Create Book Section
|
||||
pane.items.menu.duplicateAndConvert.toBook=Create Book from Book Section
|
||||
pane.items.showItemInLibrary=عرض العنصر في المكتبة
|
||||
|
||||
pane.items.letter.oneParticipant=خطاب إلى %S
|
||||
|
|
@ -430,11 +438,11 @@ pane.item.related.count.zero=لا توجد ارتباطات:
|
|||
pane.item.related.count.singular=%S ارتباطات:
|
||||
pane.item.related.count.plural=%S ارتباط:
|
||||
pane.item.parentItem=عنصر رئيسي:
|
||||
pane.item.viewOnline.tooltip=Go to this item online
|
||||
pane.item.viewOnline.tooltip=الذهاب لهذا العنصر على الانترنت
|
||||
|
||||
pane.context.noParent=No parent item
|
||||
pane.context.itemNotes=Item Notes
|
||||
pane.context.allNotes=All Notes
|
||||
pane.context.allNotes=كل الملاحظات
|
||||
pane.context.noNotes=No notes
|
||||
|
||||
itemTypes.note=ملاحظة
|
||||
|
|
@ -547,7 +555,7 @@ itemFields.runningTime=وقت التشغيل
|
|||
itemFields.network=الشبكة
|
||||
itemFields.postType=نوع الموضوع
|
||||
itemFields.audioFileType=نوع الملف الصوتي
|
||||
itemFields.versionNumber=Version
|
||||
itemFields.versionNumber=الإصدارة
|
||||
itemFields.system=النظام
|
||||
itemFields.company=الشركة
|
||||
itemFields.conferenceName=اسم المؤتمر
|
||||
|
|
@ -757,7 +765,7 @@ zotero.debugOutputLogging.enabledAfterRestart=Debug output logging will be enabl
|
|||
dragAndDrop.existingFiles=لم يتم نسخ الملفات التالية لأنها موجودة بالفعل في المجلد الهدف:
|
||||
dragAndDrop.filesNotFound=لم يتم نسخ الملفات التالية لأنه لم يتم العثور عليها:
|
||||
|
||||
fileInterface.importing=Importing…
|
||||
fileInterface.importing=استيراد...
|
||||
fileInterface.importComplete=Import Complete
|
||||
fileInterface.itemsWereImported=%1$S item was imported;%1$S items were imported
|
||||
fileInterface.itemsExported=تصدير العناصر...
|
||||
|
|
@ -864,22 +872,7 @@ citation.showEditor=عرض المحرر...
|
|||
citation.hideEditor=إخفاء المحرر...
|
||||
citation.citations=استشهادات
|
||||
citation.notes=ملاحظات
|
||||
citation.locator.page=صفحة
|
||||
citation.locator.book=كتاب
|
||||
citation.locator.chapter=فصل
|
||||
citation.locator.column=عمود
|
||||
citation.locator.figure=شكل
|
||||
citation.locator.folio=Folio
|
||||
citation.locator.issue=اصدار
|
||||
citation.locator.line=سطر
|
||||
citation.locator.note=ملاحظة
|
||||
citation.locator.opus=Opus
|
||||
citation.locator.paragraph=فقرة
|
||||
citation.locator.part=جزء
|
||||
citation.locator.section=قسم
|
||||
citation.locator.subverbo=Sub verbo
|
||||
citation.locator.volume=مجلد
|
||||
citation.locator.verse=Verse
|
||||
citation.locator.timestamp=Timestamp
|
||||
|
||||
report.title.default=تقرير زوتيرو
|
||||
report.parentItem=عنصر رئيسي:
|
||||
|
|
@ -1005,7 +998,7 @@ sync.skipGroup=Skip Group
|
|||
sync.removeGroupsAndSync=ازالة مجموعات المشاركة و المزامنة
|
||||
|
||||
sync.reminder.setUp.message=Back up your library with %S syncing.
|
||||
sync.reminder.setUp.action=Set Up Syncing
|
||||
sync.reminder.setUp.action=إعداد المزامنة
|
||||
sync.reminder.autoSync.message=%S hasn’t synced in a while. Do you want to enable automatic syncing?
|
||||
|
||||
sync.error.usernameNotSet=لم يتم تعيين اسم المستخدم
|
||||
|
|
@ -1072,8 +1065,8 @@ sync.conflict.tag.addedToLocal=It has been added to the following local items:
|
|||
sync.conflict.localItem=Local Item
|
||||
sync.conflict.remoteItem=Remote Item
|
||||
sync.conflict.mergedItem=Merged Item
|
||||
sync.conflict.localFile=Local File
|
||||
sync.conflict.remoteFile=Remote File
|
||||
sync.conflict.localFile=ملف محلي
|
||||
sync.conflict.remoteFile=ملف عن بعد
|
||||
sync.conflict.resolveAllLocal=Use the local version for all remaining conflicts
|
||||
sync.conflict.resolveAllRemote=Use the remote version for all remaining conflicts
|
||||
sync.conflict.itemChanged=The following item has been changed in multiple locations. Click the version to use for resolving conflicting fields, and then click %S.
|
||||
|
|
@ -1124,7 +1117,7 @@ sync.storage.error.createNow=هل تريد إنشاؤه الآن؟
|
|||
|
||||
sync.storage.error.webdav.default=A WebDAV file sync error occurred. Please try syncing again.\n\nIf you receive this message repeatedly, check your WebDAV server settings in the Sync pane of the Zotero preferences.
|
||||
sync.storage.error.webdav.defaultRestart=A WebDAV file sync error occurred. Please restart %S and try syncing again.\n\nIf you receive this message repeatedly, check your WebDAV server settings in the Sync pane of the Zotero preferences.
|
||||
sync.storage.error.webdav.enterURL=Please enter a WebDAV URL.
|
||||
sync.storage.error.webdav.enterURL=برجاء ادخال موقع WebDAV.
|
||||
sync.storage.error.webdav.invalidURL=%S موقع WebDAV غير صالح.
|
||||
sync.storage.error.webdav.invalidLogin=لم يقبل خادم WebDAV اسم المستخدم وكلمة السر التي قمت بإدخالهما.
|
||||
sync.storage.error.webdav.permissionDenied=ليس لديك الصلاحية للوصول الى %S على خادم WebDAV.
|
||||
|
|
@ -1293,9 +1286,9 @@ retraction.citationWarning=سُحِب أحد الاقتباسات في مستن
|
|||
retraction.citationWarning.dontWarn=لا تحذرني حول هذا العنصر ثانية
|
||||
|
||||
noteEditor.annotationsDateLine=(%S)
|
||||
noteEditor.cut=Cut
|
||||
noteEditor.copy=Copy
|
||||
noteEditor.paste=Paste
|
||||
noteEditor.cut=قص
|
||||
noteEditor.copy=نسخ
|
||||
noteEditor.paste=لصق
|
||||
noteEditor.rightToLeft=Right to Left
|
||||
noteEditor.leftToRight=Left to Right
|
||||
noteEditor.updateNotice=This note was edited with a newer version of %1$S.\nPlease update %1$S to make changes.
|
||||
|
|
@ -1303,20 +1296,21 @@ noteEditor.enterLink=Enter Link
|
|||
noteEditor.heading1=Heading 1
|
||||
noteEditor.heading2=Heading 2
|
||||
noteEditor.heading3=Heading 3
|
||||
noteEditor.paragraph=Paragraph
|
||||
noteEditor.paragraph=فقرة
|
||||
noteEditor.monospaced=Monospaced
|
||||
noteEditor.bulletList=Bulleted List
|
||||
noteEditor.orderedList=Numbered List
|
||||
noteEditor.blockquote=Block Quote
|
||||
noteEditor.mathBlock=Math Block
|
||||
noteEditor.formatText=Format Text
|
||||
noteEditor.highlightText=Highlight Text
|
||||
noteEditor.removeColor=Remove Color
|
||||
noteEditor.bold=Bold
|
||||
noteEditor.italic=Italic
|
||||
noteEditor.underline=Underline
|
||||
noteEditor.highlightText=تمييز النص
|
||||
noteEditor.removeColor=ازالة اللون
|
||||
noteEditor.bold=غامق
|
||||
noteEditor.italic=مائل
|
||||
noteEditor.underline=تسطير
|
||||
noteEditor.strikethrough=Strikethrough
|
||||
noteEditor.subscript=Subscript
|
||||
noteEditor.superscript=Superscript
|
||||
noteEditor.subscript=منخفض
|
||||
noteEditor.superscript=مرتفع
|
||||
noteEditor.returnToNotesList=Return to Notes List
|
||||
noteEditor.insertLink=Insert Link
|
||||
noteEditor.clearFormatting=Clear Formatting
|
||||
|
|
@ -1325,8 +1319,8 @@ noteEditor.alignLeft=Align Left
|
|||
noteEditor.alignCenter=Align Center
|
||||
noteEditor.alignRight=Align Right
|
||||
noteEditor.insertCitation=Insert Citation
|
||||
noteEditor.more=More
|
||||
noteEditor.find=Find
|
||||
noteEditor.more=المزيد
|
||||
noteEditor.find=اعثر
|
||||
noteEditor.replace=Replace
|
||||
noteEditor.previous=Previous
|
||||
noteEditor.next=Next
|
||||
|
|
@ -1338,7 +1332,7 @@ noteEditor.editCitation=Edit Citation
|
|||
noteEditor.showOnPage=Show on Page
|
||||
noteEditor.unlink=Unlink
|
||||
noteEditor.set=Set
|
||||
noteEditor.edit=Edit
|
||||
noteEditor.edit=تحرير
|
||||
noteEditor.addCitation=Add Citation
|
||||
noteEditor.removeCitation=Hide Citation
|
||||
noteEditor.findAndReplace=Find and Replace
|
||||
|
|
@ -1347,7 +1341,11 @@ noteEditor.applyAnnotationColors=Show Annotation Colors
|
|||
noteEditor.removeAnnotationColors=Hide Annotation Colors
|
||||
noteEditor.addCitations=Show Annotation Citations
|
||||
noteEditor.removeCitations=Hide Annotation Citations
|
||||
noteEditor.insertTable=Insert Table
|
||||
noteEditor.image=صورة
|
||||
noteEditor.math=Math
|
||||
noteEditor.table=Table
|
||||
noteEditor.copyImage=Copy Image
|
||||
noteEditor.saveImageAs=Save Image As…
|
||||
noteEditor.insertRowBefore=Insert Row Above
|
||||
noteEditor.insertRowAfter=Insert Row Below
|
||||
noteEditor.insertColumnBefore=Insert Column Left
|
||||
|
|
@ -1360,11 +1358,11 @@ pdfReader.annotations=Annotations
|
|||
pdfReader.showAnnotations=عرض التعليقات
|
||||
pdfReader.searchAnnotations=بحث في التعليقات
|
||||
pdfReader.noAnnotations=Create an annotation to see it in the sidebar
|
||||
pdfReader.addText=Add extracted text
|
||||
pdfReader.noExtractedText=No extracted text
|
||||
pdfReader.addComment=Add comment
|
||||
pdfReader.addTags=Add tags…
|
||||
pdfReader.highlightText=Highlight Text
|
||||
pdfReader.addNote=Add Note
|
||||
pdfReader.highlightText=تمييز النص
|
||||
pdfReader.addNote=اضافة ملاحظة
|
||||
pdfReader.selectArea=Select Area
|
||||
pdfReader.pickColor=Pick a Color
|
||||
pdfReader.addToNote=Add to Note
|
||||
|
|
@ -1375,15 +1373,22 @@ pdfReader.zoomPageWidth=Zoom to Page Width
|
|||
pdfReader.zoomPageHeight=Zoom to Page Height
|
||||
pdfReader.nextPage=Next Page
|
||||
pdfReader.previousPage=Previous Page
|
||||
pdfReader.page=Page
|
||||
pdfReader.page=صفحة
|
||||
pdfReader.readOnly=Read-only
|
||||
pdfReader.promptTransferFromPDF.title=Import Annotations
|
||||
pdfReader.promptTransferFromPDF.text=Annotations stored in the PDF file will be moved to %1$S.
|
||||
pdfReader.promptTransferToPDF.title=Store Annotations in File
|
||||
pdfReader.promptTransferToPDF.text=Annotations will be transferred to the PDF file and will no longer be editable in %S.
|
||||
pdfReader.promptPasswordProtected=The operation is not supported for password-protected PDF files.
|
||||
pdfReader.promptDeletePages.title=Delete Pages
|
||||
pdfReader.promptDeletePages.text=Are you sure you want to delete %1$S page from the PDF file?;Are you sure you want to delete %1$S pages from the PDF file?
|
||||
pdfReader.rotateLeft=Rotate Left
|
||||
pdfReader.rotateRight=Rotate Right
|
||||
pdfReader.rotate180=Rotate 180°
|
||||
pdfReader.editPageNumber=Edit Page Number…
|
||||
pdfReader.editHighlightedText=Edit Highlighted Text
|
||||
pdfReader.copyImage=Copy Image
|
||||
pdfReader.saveImageAs=Save Image As…
|
||||
pdfReader.pageNumberPopupHeader=Change page number for:
|
||||
pdfReader.thisAnnotation=هذا التعليق
|
||||
pdfReader.selectedAnnotations=Selected annotations
|
||||
|
|
|
|||
|
|
@ -5,12 +5,24 @@
|
|||
"general_done": {
|
||||
"message": "Готово"
|
||||
},
|
||||
"general_yes": {
|
||||
"message": "Да"
|
||||
},
|
||||
"general_no": {
|
||||
"message": "Не"
|
||||
},
|
||||
"general_tryAgain": {
|
||||
"message": "Опитайте отново"
|
||||
},
|
||||
"general_warning": {
|
||||
"message": "Предупреждение"
|
||||
},
|
||||
"general_cancel": {
|
||||
"message": "Отказ"
|
||||
},
|
||||
"general_copyToClipboard": {
|
||||
"message": "Копиране в клипборда"
|
||||
},
|
||||
"progressWindow_savingTo": {
|
||||
"message": "Записване в"
|
||||
},
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
<!ENTITY zotero.general.deselectAll "Отказ на всички">
|
||||
<!ENTITY zotero.general.edit "Редактиране">
|
||||
<!ENTITY zotero.general.delete "Изтриване">
|
||||
<!ENTITY zotero.general.moveToTrash "Move to Trash">
|
||||
<!ENTITY zotero.general.moveToTrash "Премества в кошчето за боклук">
|
||||
<!ENTITY zotero.general.ok "OK">
|
||||
<!ENTITY zotero.general.cancel "Отказ">
|
||||
<!ENTITY zotero.general.refresh "Опресняване">
|
||||
|
|
@ -21,7 +21,7 @@
|
|||
<!ENTITY zotero.general.other "Други...">
|
||||
<!ENTITY zotero.general.bigger "Bigger">
|
||||
<!ENTITY zotero.general.smaller "Smaller">
|
||||
<!ENTITY zotero.general.reset "Reset">
|
||||
<!ENTITY zotero.general.reset "Нулиране">
|
||||
|
||||
|
||||
<!ENTITY zotero.errorReport.title "Зотеро доклад за проблем">
|
||||
|
|
@ -93,7 +93,7 @@
|
|||
<!ENTITY zotero.toolbar.import.label "Внасяне...">
|
||||
<!ENTITY zotero.toolbar.importFromClipboard "Внасяне от клипборда">
|
||||
<!ENTITY zotero.toolbar.export.label "Изнасяне на библиотека...">
|
||||
<!ENTITY zotero.toolbar.rtfScan.label "RTF Scan">
|
||||
<!ENTITY zotero.toolbar.rtfScan.label "Сканиране на RTF">
|
||||
<!ENTITY zotero.toolbar.timeline.label "Създаване на хронология">
|
||||
<!ENTITY zotero.toolbar.preferences.label "Предпочитания...">
|
||||
<!ENTITY zotero.toolbar.supportAndDocumentation "Подръжка и документация">
|
||||
|
|
@ -128,7 +128,7 @@
|
|||
<!ENTITY zotero.toolbar.attachment.add "Запазване на копие от файл">
|
||||
<!ENTITY zotero.toolbar.attachment.weblink "Запазване на връзка към настоящата страница">
|
||||
<!ENTITY zotero.toolbar.attachment.snapshot "Направи "моментна снимка" на настоящата страница">
|
||||
<!ENTITY zotero.toolbar.context.item "Item">
|
||||
<!ENTITY zotero.toolbar.context.item "Елемент">
|
||||
<!ENTITY zotero.toolbar.context.notes "Notes">
|
||||
|
||||
<!ENTITY zotero.tagSelector.noTagsToDisplay "Няма маркери, които да бъдат показани">
|
||||
|
|
@ -185,7 +185,7 @@
|
|||
<!ENTITY zotero.import.lastModified "Променено за последно">
|
||||
<!ENTITY zotero.import.size "Размер">
|
||||
<!ENTITY zotero.import.createCollection "Поместване на внесените колекции и записи в нова колекция">
|
||||
<!ENTITY zotero.import.fileHandling "File Handling">
|
||||
<!ENTITY zotero.import.fileHandling "Обработка на файловете">
|
||||
|
||||
<!ENTITY zotero.exportOptions.title "Изнасяне...">
|
||||
<!ENTITY zotero.exportOptions.format.label "Формат:">
|
||||
|
|
@ -307,7 +307,7 @@
|
|||
<!ENTITY zotero.context.addStandaloneNoteFromAnnotations "Add Standalone Note from Annotations">
|
||||
<!ENTITY zotero.context.editInWindow "Edit in a Separate Window">
|
||||
|
||||
<!ENTITY zotero.pdfReader.firstPage "First Page">
|
||||
<!ENTITY zotero.pdfReader.firstPage "Първа страница">
|
||||
<!ENTITY zotero.pdfReader.lastPage "Last Page">
|
||||
<!ENTITY zotero.pdfReader.back "Back">
|
||||
<!ENTITY zotero.pdfReader.forward "Forward">
|
||||
|
|
|
|||
|
|
@ -52,7 +52,7 @@ general.moreInformation=Повече информация
|
|||
general.learnMore=Learn More
|
||||
general.seeForMoreInformation=Вижте %S за повече информация.
|
||||
general.open=Отваряне на %S
|
||||
general.close=Close
|
||||
general.close=Затвори
|
||||
general.enable=Включване
|
||||
general.disable=Изключване
|
||||
general.reset=Нулиране
|
||||
|
|
@ -71,7 +71,7 @@ general.fix=Поправяне…
|
|||
general.tryAgain=Опит отново
|
||||
general.tryLater=Опит по-късно
|
||||
general.showDirectory=Показване на директорията
|
||||
general.showInLibrary=Show in Library
|
||||
general.showInLibrary=Показване в библиотеката
|
||||
general.continue=Продължаване
|
||||
general.copy=Copy
|
||||
general.copyToClipboard=Копиране в клипборда
|
||||
|
|
@ -89,9 +89,10 @@ general.back=Back
|
|||
general.languages=Languages
|
||||
general.default=Default
|
||||
general.custom=Custom
|
||||
general.loading=Loading…
|
||||
general.loading=Зареждане...
|
||||
general.richText=Rich Text
|
||||
general.clearSelection=Clear Selection
|
||||
general.insert=Insert
|
||||
|
||||
general.yellow=Yellow
|
||||
general.red=Red
|
||||
|
|
@ -327,8 +328,11 @@ pane.items.remove.multiple=Are you sure you want to remove the selected items fr
|
|||
pane.items.removeFromPublications.title=Remove from My Publications
|
||||
pane.items.removeFromPublications=Are you sure you want to remove the selected item from My Publications?
|
||||
pane.items.removeFromPublications.multiple=Are you sure you want to remove the selected items from My Publications?
|
||||
pane.items.removeRecursive.title=Remove from Collection and Subcollections
|
||||
pane.items.removeRecursive=Are you sure you want to remove the selected item from this collection and all subcollections?
|
||||
pane.items.removeRecursive.multiple=Are you sure you want to remove the selected items from this collection and all subcollections?
|
||||
pane.items.menu.addNoteFromAnnotations=Add Note from Annotations
|
||||
pane.items.menu.addNoteFromAnnotations.multiple=Add Notes from Annotations
|
||||
pane.items.menu.createNoteFromAnnotations=Create Note from Annotations
|
||||
pane.items.menu.findAvailablePDF=Find Available PDF
|
||||
pane.items.menu.findAvailablePDF.multiple=Find Available PDFs
|
||||
pane.items.menu.addToCollection=Add to Collection
|
||||
|
|
@ -338,11 +342,13 @@ pane.items.menu.removeFromPublications=Remove Item from My Publications…
|
|||
pane.items.menu.removeFromPublications.multiple=Remove Items from My Publications…
|
||||
pane.items.menu.moveToTrash=Move Item to Trash…
|
||||
pane.items.menu.moveToTrash.multiple=Move Items to Trash…
|
||||
pane.items.menu.delete=Delete Permanently…
|
||||
pane.items.menu.delete=Изтриване окончателно...
|
||||
pane.items.menu.export=Експорт на избрания запис...
|
||||
pane.items.menu.export.multiple=Експорт на избраните записи...
|
||||
pane.items.menu.exportNote=Export Note…
|
||||
pane.items.menu.exportNote.multiple=Export Notes…
|
||||
pane.items.menu.exportPDF=Export PDF…
|
||||
pane.items.menu.exportPDF.multiple=Export PDFs…
|
||||
pane.items.menu.createBib=Създава библиография от избрания запис...
|
||||
pane.items.menu.createBib.multiple=Създава библиография от избраните записи...
|
||||
pane.items.menu.generateReport=Създава отчет от избрания запис...
|
||||
|
|
@ -355,6 +361,8 @@ pane.items.menu.createParent=Create Parent Item…
|
|||
pane.items.menu.createParent.multiple=Create Parent Items
|
||||
pane.items.menu.renameAttachments=Преименува файла въз основа на родителските метадани
|
||||
pane.items.menu.renameAttachments.multiple=Преименува файловете въз основа на родителските метадани
|
||||
pane.items.menu.duplicateAndConvert.toBookSection=Create Book Section
|
||||
pane.items.menu.duplicateAndConvert.toBook=Create Book from Book Section
|
||||
pane.items.showItemInLibrary=Show Item in Library
|
||||
|
||||
pane.items.letter.oneParticipant=Писмо до %S
|
||||
|
|
@ -438,7 +446,7 @@ pane.context.allNotes=All Notes
|
|||
pane.context.noNotes=No notes
|
||||
|
||||
itemTypes.note=Бележка
|
||||
itemTypes.annotation=Annotation
|
||||
itemTypes.annotation=Анотация
|
||||
itemTypes.attachment=Приложение
|
||||
itemTypes.book=Книга
|
||||
itemTypes.bookSection=Глава от книга
|
||||
|
|
@ -864,22 +872,7 @@ citation.showEditor=Показва редактора...
|
|||
citation.hideEditor=Скрива редактора...
|
||||
citation.citations=Citations
|
||||
citation.notes=Notes
|
||||
citation.locator.page=Page
|
||||
citation.locator.book=Book
|
||||
citation.locator.chapter=Chapter
|
||||
citation.locator.column=Column
|
||||
citation.locator.figure=Figure
|
||||
citation.locator.folio=Folio
|
||||
citation.locator.issue=Issue
|
||||
citation.locator.line=Line
|
||||
citation.locator.note=Note
|
||||
citation.locator.opus=Opus
|
||||
citation.locator.paragraph=Paragraph
|
||||
citation.locator.part=Part
|
||||
citation.locator.section=Section
|
||||
citation.locator.subverbo=Sub verbo
|
||||
citation.locator.volume=Volume
|
||||
citation.locator.verse=Verse
|
||||
citation.locator.timestamp=Timestamp
|
||||
|
||||
report.title.default=Зотеро отчет
|
||||
report.parentItem=Родителски запис:
|
||||
|
|
@ -1005,7 +998,7 @@ sync.skipGroup=Skip Group
|
|||
sync.removeGroupsAndSync=Отстранява групите и синхронизация
|
||||
|
||||
sync.reminder.setUp.message=Back up your library with %S syncing.
|
||||
sync.reminder.setUp.action=Set Up Syncing
|
||||
sync.reminder.setUp.action=Настройване на синхронизирането
|
||||
sync.reminder.autoSync.message=%S hasn’t synced in a while. Do you want to enable automatic syncing?
|
||||
|
||||
sync.error.usernameNotSet=Потребителското име не е въведено
|
||||
|
|
@ -1176,10 +1169,10 @@ recognizePDF.couldNotRead=Текста на този PDF файл не може
|
|||
recognizePDF.noMatches=No matching references found
|
||||
recognizePDF.fileNotFound=File not found
|
||||
recognizePDF.error=An unexpected error occurred
|
||||
recognizePDF.recognizing.label=Retrieving Metadata…
|
||||
recognizePDF.recognizing.label=Извлича на метаданите...
|
||||
recognizePDF.complete.label=Metadata Retrieval Complete
|
||||
recognizePDF.pdfName.label=PDF Name
|
||||
recognizePDF.itemName.label=Item Name
|
||||
recognizePDF.pdfName.label=Име на PDF
|
||||
recognizePDF.itemName.label=Име на запис
|
||||
|
||||
rtfScan.openTitle=Изберете файл, който да бъде сканиран
|
||||
rtfScan.scanning.label=Сканира RTF документ...
|
||||
|
|
@ -1308,15 +1301,16 @@ noteEditor.monospaced=Monospaced
|
|||
noteEditor.bulletList=Bulleted List
|
||||
noteEditor.orderedList=Numbered List
|
||||
noteEditor.blockquote=Block Quote
|
||||
noteEditor.mathBlock=Math Block
|
||||
noteEditor.formatText=Format Text
|
||||
noteEditor.highlightText=Highlight Text
|
||||
noteEditor.removeColor=Remove Color
|
||||
noteEditor.bold=Bold
|
||||
noteEditor.italic=Italic
|
||||
noteEditor.underline=Underline
|
||||
noteEditor.highlightText=Акцентиране на текст
|
||||
noteEditor.removeColor=Премахване на цвят
|
||||
noteEditor.bold=Удебелен
|
||||
noteEditor.italic=Наклонен
|
||||
noteEditor.underline=Подчертан
|
||||
noteEditor.strikethrough=Strikethrough
|
||||
noteEditor.subscript=Subscript
|
||||
noteEditor.superscript=Superscript
|
||||
noteEditor.subscript=Субскрипт / Долни букви
|
||||
noteEditor.superscript=Суперскрипт / Горни букви
|
||||
noteEditor.returnToNotesList=Return to Notes List
|
||||
noteEditor.insertLink=Insert Link
|
||||
noteEditor.clearFormatting=Clear Formatting
|
||||
|
|
@ -1325,7 +1319,7 @@ noteEditor.alignLeft=Align Left
|
|||
noteEditor.alignCenter=Align Center
|
||||
noteEditor.alignRight=Align Right
|
||||
noteEditor.insertCitation=Insert Citation
|
||||
noteEditor.more=More
|
||||
noteEditor.more=Още
|
||||
noteEditor.find=Find
|
||||
noteEditor.replace=Replace
|
||||
noteEditor.previous=Previous
|
||||
|
|
@ -1338,7 +1332,7 @@ noteEditor.editCitation=Edit Citation
|
|||
noteEditor.showOnPage=Show on Page
|
||||
noteEditor.unlink=Unlink
|
||||
noteEditor.set=Set
|
||||
noteEditor.edit=Edit
|
||||
noteEditor.edit=Редактиране
|
||||
noteEditor.addCitation=Add Citation
|
||||
noteEditor.removeCitation=Hide Citation
|
||||
noteEditor.findAndReplace=Find and Replace
|
||||
|
|
@ -1347,7 +1341,11 @@ noteEditor.applyAnnotationColors=Show Annotation Colors
|
|||
noteEditor.removeAnnotationColors=Hide Annotation Colors
|
||||
noteEditor.addCitations=Show Annotation Citations
|
||||
noteEditor.removeCitations=Hide Annotation Citations
|
||||
noteEditor.insertTable=Insert Table
|
||||
noteEditor.image=Образ
|
||||
noteEditor.math=Math
|
||||
noteEditor.table=Table
|
||||
noteEditor.copyImage=Copy Image
|
||||
noteEditor.saveImageAs=Save Image As…
|
||||
noteEditor.insertRowBefore=Insert Row Above
|
||||
noteEditor.insertRowAfter=Insert Row Below
|
||||
noteEditor.insertColumnBefore=Insert Column Left
|
||||
|
|
@ -1360,11 +1358,11 @@ pdfReader.annotations=Annotations
|
|||
pdfReader.showAnnotations=Show Annotations
|
||||
pdfReader.searchAnnotations=Search Annotations
|
||||
pdfReader.noAnnotations=Create an annotation to see it in the sidebar
|
||||
pdfReader.addText=Add extracted text
|
||||
pdfReader.noExtractedText=No extracted text
|
||||
pdfReader.addComment=Add comment
|
||||
pdfReader.addTags=Add tags…
|
||||
pdfReader.highlightText=Highlight Text
|
||||
pdfReader.addNote=Add Note
|
||||
pdfReader.highlightText=Акцентиране на текст
|
||||
pdfReader.addNote=Добавяне на бележка
|
||||
pdfReader.selectArea=Select Area
|
||||
pdfReader.pickColor=Pick a Color
|
||||
pdfReader.addToNote=Add to Note
|
||||
|
|
@ -1382,8 +1380,15 @@ pdfReader.promptTransferFromPDF.text=Annotations stored in the PDF file will be
|
|||
pdfReader.promptTransferToPDF.title=Store Annotations in File
|
||||
pdfReader.promptTransferToPDF.text=Annotations will be transferred to the PDF file and will no longer be editable in %S.
|
||||
pdfReader.promptPasswordProtected=The operation is not supported for password-protected PDF files.
|
||||
pdfReader.promptDeletePages.title=Delete Pages
|
||||
pdfReader.promptDeletePages.text=Are you sure you want to delete %1$S page from the PDF file?;Are you sure you want to delete %1$S pages from the PDF file?
|
||||
pdfReader.rotateLeft=Rotate Left
|
||||
pdfReader.rotateRight=Rotate Right
|
||||
pdfReader.rotate180=Rotate 180°
|
||||
pdfReader.editPageNumber=Edit Page Number…
|
||||
pdfReader.editHighlightedText=Edit Highlighted Text
|
||||
pdfReader.copyImage=Copy Image
|
||||
pdfReader.saveImageAs=Save Image As…
|
||||
pdfReader.pageNumberPopupHeader=Change page number for:
|
||||
pdfReader.thisAnnotation=This annotation
|
||||
pdfReader.selectedAnnotations=Selected annotations
|
||||
|
|
|
|||
|
|
@ -23,6 +23,9 @@
|
|||
"general_pleaseWait": {
|
||||
"message": "Gortozit mar plij..."
|
||||
},
|
||||
"general_copyToClipboard": {
|
||||
"message": "Eilañ er golver"
|
||||
},
|
||||
"progressWindow_savingTo": {
|
||||
"message": "Enrollañ e-barzh"
|
||||
},
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
<!ENTITY zotero.general.deselectAll "Diziuzañ pep-tra">
|
||||
<!ENTITY zotero.general.edit "Aozañ">
|
||||
<!ENTITY zotero.general.delete "Dilemel">
|
||||
<!ENTITY zotero.general.moveToTrash "Move to Trash">
|
||||
<!ENTITY zotero.general.moveToTrash "Kas d'ar pod-lastez">
|
||||
<!ENTITY zotero.general.ok "Mat eo">
|
||||
<!ENTITY zotero.general.cancel "Nullañ">
|
||||
<!ENTITY zotero.general.refresh "Freskaat">
|
||||
|
|
@ -129,7 +129,7 @@
|
|||
<!ENTITY zotero.toolbar.attachment.weblink "Enrollañ al liamm d'ar bajenn a-vremañ">
|
||||
<!ENTITY zotero.toolbar.attachment.snapshot "Kemer un dapadenn-skramm eus ar bajenn a-vremañ">
|
||||
<!ENTITY zotero.toolbar.context.item "Elfenn">
|
||||
<!ENTITY zotero.toolbar.context.notes "Notes">
|
||||
<!ENTITY zotero.toolbar.context.notes "Notennoù">
|
||||
|
||||
<!ENTITY zotero.tagSelector.noTagsToDisplay "Baliz ebet da ziskouez">
|
||||
<!ENTITY zotero.tagSelector.loadingTags "O kargañ ar balizoù...">
|
||||
|
|
@ -307,9 +307,9 @@
|
|||
<!ENTITY zotero.context.addStandaloneNoteFromAnnotations "Add Standalone Note from Annotations">
|
||||
<!ENTITY zotero.context.editInWindow "Edit in a Separate Window">
|
||||
|
||||
<!ENTITY zotero.pdfReader.firstPage "First Page">
|
||||
<!ENTITY zotero.pdfReader.firstPage "Pajenn gentañ">
|
||||
<!ENTITY zotero.pdfReader.lastPage "Last Page">
|
||||
<!ENTITY zotero.pdfReader.back "Back">
|
||||
<!ENTITY zotero.pdfReader.back "Distreiñ">
|
||||
<!ENTITY zotero.pdfReader.forward "Forward">
|
||||
<!ENTITY zotero.pdfReader.rotateClockwise "Rotate Clockwise">
|
||||
<!ENTITY zotero.pdfReader.rotateCounterclockwise "Rotate Counterclockwise">
|
||||
|
|
@ -320,8 +320,8 @@
|
|||
<!ENTITY zotero.pdfReader.noSpreads "No Spreads">
|
||||
<!ENTITY zotero.pdfReader.oddSpreads "Odd Spreads">
|
||||
<!ENTITY zotero.pdfReader.evenSpreads "Even Spreads">
|
||||
<!ENTITY zotero.pdfReader.zoomIn "Zoom In">
|
||||
<!ENTITY zotero.pdfReader.zoomOut "Zoom Out">
|
||||
<!ENTITY zotero.pdfReader.zoomIn "Zoumañ">
|
||||
<!ENTITY zotero.pdfReader.zoomOut "Dizoumañ">
|
||||
<!ENTITY zotero.pdfReader.zoomAuto "Automatically Resize">
|
||||
<!ENTITY zotero.pdfReader.zoomPageWidth "Zoom to Page Width">
|
||||
<!ENTITY zotero.pdfReader.zoomPageHeight "Zoom to Page Height">
|
||||
|
|
|
|||
|
|
@ -71,9 +71,9 @@ general.fix=Kempenn...
|
|||
general.tryAgain=Klask en-dro
|
||||
general.tryLater=Klask diwezhatoc'h
|
||||
general.showDirectory=Diskouez ar c'havlec'h
|
||||
general.showInLibrary=Show in Library
|
||||
general.showInLibrary=Diskouez el levraoueg:
|
||||
general.continue=Kenderc'hel
|
||||
general.copy=Copy
|
||||
general.copy=Eilañ
|
||||
general.copyToClipboard=Eilañ er golver
|
||||
general.cancel=Nullañ
|
||||
general.clear=Diverkañ
|
||||
|
|
@ -92,6 +92,7 @@ general.custom=Custom
|
|||
general.loading=O kargañ...
|
||||
general.richText=Rich Text
|
||||
general.clearSelection=Clear Selection
|
||||
general.insert=Insert
|
||||
|
||||
general.yellow=Melen
|
||||
general.red=Ruz
|
||||
|
|
@ -327,8 +328,11 @@ pane.items.remove.multiple=Ha sur oc'h ho peus c'hoant da zilemel an elfennoù d
|
|||
pane.items.removeFromPublications.title=Tennañ diwar Ma Embannadennoù
|
||||
pane.items.removeFromPublications=Ha sur ho peus c'hoant da zilemel an elfenn diuzet diwar Ma Embannadennoù?
|
||||
pane.items.removeFromPublications.multiple=Ha sur ho peus c'hoant da zilemel an elfennoù diuzet diwar Ma Embannadennoù?
|
||||
pane.items.removeRecursive.title=Remove from Collection and Subcollections
|
||||
pane.items.removeRecursive=Are you sure you want to remove the selected item from this collection and all subcollections?
|
||||
pane.items.removeRecursive.multiple=Are you sure you want to remove the selected items from this collection and all subcollections?
|
||||
pane.items.menu.addNoteFromAnnotations=Add Note from Annotations
|
||||
pane.items.menu.addNoteFromAnnotations.multiple=Add Notes from Annotations
|
||||
pane.items.menu.createNoteFromAnnotations=Create Note from Annotations
|
||||
pane.items.menu.findAvailablePDF=Kavout ur PDF hegerz
|
||||
pane.items.menu.findAvailablePDF.multiple=Kavout PDFoù hegerz
|
||||
pane.items.menu.addToCollection=Add to Collection
|
||||
|
|
@ -338,11 +342,13 @@ pane.items.menu.removeFromPublications=Tennañ an elfenn diwar Ma Embannadennoù
|
|||
pane.items.menu.removeFromPublications.multiple=Tennañ an elfennoù diwar Ma Embannadennoù...
|
||||
pane.items.menu.moveToTrash=Kas an elfenn d'ar pod-lastez...
|
||||
pane.items.menu.moveToTrash.multiple=Kas an elfennoù d'ar pod-lastez...
|
||||
pane.items.menu.delete=Delete Permanently…
|
||||
pane.items.menu.delete=Dilemel da virviken...
|
||||
pane.items.menu.export=Ezporzhiañ an elfenn...
|
||||
pane.items.menu.export.multiple=Ezporzhiañ an elfennoù...
|
||||
pane.items.menu.exportNote=Export Note…
|
||||
pane.items.menu.exportNote.multiple=Export Notes…
|
||||
pane.items.menu.exportPDF=Export PDF…
|
||||
pane.items.menu.exportPDF.multiple=Export PDFs…
|
||||
pane.items.menu.createBib=Krouiñ ul levrlennadur diwar an elfenn...
|
||||
pane.items.menu.createBib.multiple=Krouiñ ul levrlennadur diwar an elfennoù...
|
||||
pane.items.menu.generateReport=Genel un danevell diwar an elfenn...
|
||||
|
|
@ -355,6 +361,8 @@ pane.items.menu.createParent=Krouiñ un elfenn kar...
|
|||
pane.items.menu.createParent.multiple=Krouiñ elfennoù kar
|
||||
pane.items.menu.renameAttachments=Adenvel ar restr diwar ar meta-roadenn kar
|
||||
pane.items.menu.renameAttachments.multiple=Adenvel ar restroù diwar ar meta-roadenn kar
|
||||
pane.items.menu.duplicateAndConvert.toBookSection=Create Book Section
|
||||
pane.items.menu.duplicateAndConvert.toBook=Create Book from Book Section
|
||||
pane.items.showItemInLibrary=Diskouez an elfenn el levraoueg
|
||||
|
||||
pane.items.letter.oneParticipant=Lizher da %S
|
||||
|
|
@ -430,7 +438,7 @@ pane.item.related.count.zero=%S kevreet:
|
|||
pane.item.related.count.singular=%S kevreet:
|
||||
pane.item.related.count.plural=%S kevreet:
|
||||
pane.item.parentItem=Elfenn kar:
|
||||
pane.item.viewOnline.tooltip=Go to this item online
|
||||
pane.item.viewOnline.tooltip=Mont d'an elfenn-mañ enlinenn
|
||||
|
||||
pane.context.noParent=Elfenn kar ebet
|
||||
pane.context.itemNotes=Item Notes
|
||||
|
|
@ -864,22 +872,7 @@ citation.showEditor=Diskouez an aozer...
|
|||
citation.hideEditor=Kuzhat an aozer...
|
||||
citation.citations=Arroudennoù
|
||||
citation.notes=Notennoù
|
||||
citation.locator.page=Pajenn
|
||||
citation.locator.book=Levr
|
||||
citation.locator.chapter=Chabistr
|
||||
citation.locator.column=Bann
|
||||
citation.locator.figure=Lun
|
||||
citation.locator.folio=Folio
|
||||
citation.locator.issue=Niverenn
|
||||
citation.locator.line=Linenn
|
||||
citation.locator.note=Notenn
|
||||
citation.locator.opus=Opus
|
||||
citation.locator.paragraph=Rannbennad
|
||||
citation.locator.part=Lodenn
|
||||
citation.locator.section=Kevrenn
|
||||
citation.locator.subverbo=Sub verbo
|
||||
citation.locator.volume=Levrenn
|
||||
citation.locator.verse=Gwerzad
|
||||
citation.locator.timestamp=Timestamp
|
||||
|
||||
report.title.default=Danevell Zotero
|
||||
report.parentItem=Elfenn kar:
|
||||
|
|
@ -1005,7 +998,7 @@ sync.skipGroup=Tremen ar strollad
|
|||
sync.removeGroupsAndSync=Tennañ ar strolladoù ha sinkro
|
||||
|
||||
sync.reminder.setUp.message=Back up your library with %S syncing.
|
||||
sync.reminder.setUp.action=Set Up Syncing
|
||||
sync.reminder.setUp.action=Termeniñ ar sinkro
|
||||
sync.reminder.autoSync.message=%S hasn’t synced in a while. Do you want to enable automatic syncing?
|
||||
|
||||
sync.error.usernameNotSet=Anv-implijer didermenet:
|
||||
|
|
@ -1308,15 +1301,16 @@ noteEditor.monospaced=Monospaced
|
|||
noteEditor.bulletList=Bulleted List
|
||||
noteEditor.orderedList=Numbered List
|
||||
noteEditor.blockquote=Block Quote
|
||||
noteEditor.mathBlock=Math Block
|
||||
noteEditor.formatText=Format Text
|
||||
noteEditor.highlightText=Highlight Text
|
||||
noteEditor.removeColor=Remove Color
|
||||
noteEditor.bold=Bold
|
||||
noteEditor.italic=Italic
|
||||
noteEditor.highlightText=Usskediñ an destenn
|
||||
noteEditor.removeColor=Dilemel al liv
|
||||
noteEditor.bold=Druz
|
||||
noteEditor.italic=Stouet
|
||||
noteEditor.underline=Islinennet
|
||||
noteEditor.strikethrough=Strikethrough
|
||||
noteEditor.subscript=Subscript
|
||||
noteEditor.superscript=Superscript
|
||||
noteEditor.subscript=Isskrid
|
||||
noteEditor.superscript=Usskrid
|
||||
noteEditor.returnToNotesList=Return to Notes List
|
||||
noteEditor.insertLink=Insert Link
|
||||
noteEditor.clearFormatting=Clear Formatting
|
||||
|
|
@ -1327,7 +1321,7 @@ noteEditor.alignRight=Align Right
|
|||
noteEditor.insertCitation=Insert Citation
|
||||
noteEditor.more=Muioc'h
|
||||
noteEditor.find=Find
|
||||
noteEditor.replace=Replace
|
||||
noteEditor.replace=Erlec'hiañ
|
||||
noteEditor.previous=Previous
|
||||
noteEditor.next=Da-heul
|
||||
noteEditor.replaceNext=Erlec'hiañ
|
||||
|
|
@ -1347,7 +1341,11 @@ noteEditor.applyAnnotationColors=Show Annotation Colors
|
|||
noteEditor.removeAnnotationColors=Hide Annotation Colors
|
||||
noteEditor.addCitations=Show Annotation Citations
|
||||
noteEditor.removeCitations=Hide Annotation Citations
|
||||
noteEditor.insertTable=Insert Table
|
||||
noteEditor.image=Skeudenn
|
||||
noteEditor.math=Math
|
||||
noteEditor.table=Table
|
||||
noteEditor.copyImage=Copy Image
|
||||
noteEditor.saveImageAs=Save Image As…
|
||||
noteEditor.insertRowBefore=Insert Row Above
|
||||
noteEditor.insertRowAfter=Insert Row Below
|
||||
noteEditor.insertColumnBefore=Insert Column Left
|
||||
|
|
@ -1360,10 +1358,10 @@ pdfReader.annotations=Ennotadurioù
|
|||
pdfReader.showAnnotations=Show Annotations
|
||||
pdfReader.searchAnnotations=Search Annotations
|
||||
pdfReader.noAnnotations=Create an annotation to see it in the sidebar
|
||||
pdfReader.addText=Add extracted text
|
||||
pdfReader.noExtractedText=No extracted text
|
||||
pdfReader.addComment=Add comment
|
||||
pdfReader.addTags=Add tags…
|
||||
pdfReader.highlightText=Highlight Text
|
||||
pdfReader.highlightText=Usskediñ an destenn
|
||||
pdfReader.addNote=Ouzhpennañ un notenn
|
||||
pdfReader.selectArea=Select Area
|
||||
pdfReader.pickColor=Pick a Color
|
||||
|
|
@ -1375,15 +1373,22 @@ pdfReader.zoomPageWidth=Zoom to Page Width
|
|||
pdfReader.zoomPageHeight=Zoom to Page Height
|
||||
pdfReader.nextPage=Pajenn da-heul
|
||||
pdfReader.previousPage=Previous Page
|
||||
pdfReader.page=Page
|
||||
pdfReader.page=Pajenn
|
||||
pdfReader.readOnly=Read-only
|
||||
pdfReader.promptTransferFromPDF.title=Import Annotations
|
||||
pdfReader.promptTransferFromPDF.text=Annotations stored in the PDF file will be moved to %1$S.
|
||||
pdfReader.promptTransferToPDF.title=Store Annotations in File
|
||||
pdfReader.promptTransferToPDF.text=Annotations will be transferred to the PDF file and will no longer be editable in %S.
|
||||
pdfReader.promptPasswordProtected=The operation is not supported for password-protected PDF files.
|
||||
pdfReader.promptDeletePages.title=Delete Pages
|
||||
pdfReader.promptDeletePages.text=Are you sure you want to delete %1$S page from the PDF file?;Are you sure you want to delete %1$S pages from the PDF file?
|
||||
pdfReader.rotateLeft=Rotate Left
|
||||
pdfReader.rotateRight=Rotate Right
|
||||
pdfReader.rotate180=Rotate 180°
|
||||
pdfReader.editPageNumber=Edit Page Number…
|
||||
pdfReader.editHighlightedText=Edit Highlighted Text
|
||||
pdfReader.copyImage=Copy Image
|
||||
pdfReader.saveImageAs=Save Image As…
|
||||
pdfReader.pageNumberPopupHeader=Change page number for:
|
||||
pdfReader.thisAnnotation=This annotation
|
||||
pdfReader.selectedAnnotations=Selected annotations
|
||||
|
|
|
|||
|
|
@ -5,9 +5,18 @@
|
|||
"general_moreInfo": {
|
||||
"message": "Més informació…"
|
||||
},
|
||||
"general_needHelp": {
|
||||
"message": "Us cal ajuda?"
|
||||
},
|
||||
"general_done": {
|
||||
"message": "Fet"
|
||||
},
|
||||
"general_yes": {
|
||||
"message": "Sí"
|
||||
},
|
||||
"general_no": {
|
||||
"message": "No"
|
||||
},
|
||||
"general_tryAgain": {
|
||||
"message": "Torna-ho a provar"
|
||||
},
|
||||
|
|
@ -32,9 +41,15 @@
|
|||
"progressWindow_error_translation": {
|
||||
"message": "S'ha produït un error desar l'element. Vegeu $1 per a més informació. "
|
||||
},
|
||||
"progressWindow_error_siteAccessLimitsError": {
|
||||
"message": "S'ha produït un error en desar l'element. $1 pot limitar el nombre d'elements que podeu desar cada vegada. Vegeu $2 per a més informació."
|
||||
},
|
||||
"progressWindow_error_troubleshootingTranslatorIssues": {
|
||||
"message": "Resolució d'incidències dels tradutors"
|
||||
},
|
||||
"progressWindow_error_siteAccessLimits": {
|
||||
"message": "Límits d'accés al lloc"
|
||||
},
|
||||
"progressWindow_error_fallback": {
|
||||
"message": "S'ha produït un error desant $1. Es provarà de desar-ho fent servir $2."
|
||||
},
|
||||
|
|
@ -50,6 +65,18 @@
|
|||
"upgradeApp": {
|
||||
"message": "Actualitza $1"
|
||||
},
|
||||
"firstRun_title": {
|
||||
"message": "Heu instal·lat el connector de $1!"
|
||||
},
|
||||
"firstRun_text1": {
|
||||
"message": "El connector de $1 us permet <a href=\"$2\">desar elements al $1</a> des del vostre navegador amb un sol clic."
|
||||
},
|
||||
"firstRun_text2": {
|
||||
"message": "Si no ho heu fet encara, <a href=\"$2\">baixeu</a> la versió d'escriptori del $1 per a gaudir d'una millor experiència."
|
||||
},
|
||||
"firstRun_acceptButton": {
|
||||
"message": "Entesos"
|
||||
},
|
||||
"error_connection_isAppRunning": {
|
||||
"message": "Està executant-se el $1?"
|
||||
},
|
||||
|
|
@ -92,6 +119,15 @@
|
|||
"integration_googleDocs_docxAlert": {
|
||||
"message": "La integració de $1 no és disponible quan s'editen fitxers .docx de Microsoft Word directament a Google Docs. Trieu Fitxer → Desa com a Google Docs per a habilitar aquesta funcionalitat. <br/><br/>Si voleu transferir un document de Word amb citacions de $1 a Google Docs, consulteu <a href=\"https://www.zotero.org/support/kb/moving_documents_between_word_processors\">Moure documents entre processadors de text</a>."
|
||||
},
|
||||
"integration_googleDocs_documentLocked": {
|
||||
"message": "Les cites del document estan sent editades per un altre usuari del $1. Torneu-ho a provar més endavant."
|
||||
},
|
||||
"integration_googleDocs_documentLocked_moreInfo": {
|
||||
"message": "El $1 bloqueja el vostre document per a evitar que diferents usuaris puguin editar-hi cites al mateix moment. L'edició concurrent de cites en un mateix document pot portar a la seva corrupció. Circumstàncies no esperades, com ara problemes de xarxa, poden provocar que el document quedi bloquejat de forma permanent. Si creieu que ha passat això, podeu sobreescriure el bloqueig. <br/><br/>Voleu sobreescriure el bloqueig del document?"
|
||||
},
|
||||
"integration_googleDocs_documentPermissionError": {
|
||||
"message": "El compte de Google que heu seleccionat no té permisos per a editar el document. Torneu-ho a provar i assegureu-vos que trieu el compte amb accessos d'edició."
|
||||
},
|
||||
"integration_googleDocs_orphanedCitations_buttonTooltip": {
|
||||
"message": "Mostra cites de $1 no enllaçades"
|
||||
},
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@
|
|||
<!ENTITY zotero.preferences.groups.whenCopyingInclude "Quan copiïs elements entre les biblioteques, inclou-hi:">
|
||||
<!ENTITY zotero.preferences.groups.childNotes "notes descendents">
|
||||
<!ENTITY zotero.preferences.groups.childFiles "instantànies descendents i fitxers importats">
|
||||
<!ENTITY zotero.preferences.groups.annotations "annotations">
|
||||
<!ENTITY zotero.preferences.groups.annotations "anotacions">
|
||||
<!ENTITY zotero.preferences.groups.childLinks "enllaços descendents">
|
||||
<!ENTITY zotero.preferences.groups.tags "etiquetes">
|
||||
|
||||
|
|
@ -40,7 +40,7 @@
|
|||
<!ENTITY zotero.preferences.feeds.sorting.oldest "Els elements més antics primer">
|
||||
<!ENTITY zotero.preferences.feeds.feedDefaults "Paràmetres per defecte dels canals">
|
||||
|
||||
<!ENTITY zotero.preferences.openurl.choose "Choose a resolver…">
|
||||
<!ENTITY zotero.preferences.openurl.choose "Trieu un resolutor:">
|
||||
<!ENTITY zotero.preferences.openurl.custom "Personalitza…">
|
||||
<!ENTITY zotero.preferences.openurl.server "Resolutor:">
|
||||
<!ENTITY zotero.preferences.openurl.version "Versió:">
|
||||
|
|
@ -105,8 +105,8 @@
|
|||
<!ENTITY zotero.preferences.export.citePaperJournalArticleURL.description "Quan aquesta opció està deshabilitada, el Zotero inclou les URL quan se citen articles de premsa, revistes i revistes acadèmiques només si l'article no té un ran dge pàgines assignat.">
|
||||
|
||||
<!ENTITY zotero.preferences.quickCopy.caption "Còpia ràpida">
|
||||
<!ENTITY zotero.preferences.quickCopy.itemFormat "Item Format:">
|
||||
<!ENTITY zotero.preferences.quickCopy.noteFormat "Note Format:">
|
||||
<!ENTITY zotero.preferences.quickCopy.itemFormat "Format d'element:">
|
||||
<!ENTITY zotero.preferences.quickCopy.noteFormat "Format de nota:">
|
||||
<!ENTITY zotero.preferences.quickCopy.copyAsHTML "Copia com a HTML">
|
||||
<!ENTITY zotero.preferences.quickCopy.siteEditor.setings "Configuració específica per a llocs web:">
|
||||
<!ENTITY zotero.preferences.quickCopy.siteEditor.domainPath "Domini/Ruta">
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@
|
|||
|
||||
<!ENTITY copyCitationCmd.label "Copia la cita">
|
||||
<!ENTITY copyBibliographyCmd.label "Copia la bibliografia">
|
||||
<!ENTITY copyNoteCmd.label "Copy Note">
|
||||
<!ENTITY copyNoteCmd.label "Copia la nota">
|
||||
|
||||
<!ENTITY bidiSwitchPageDirectionItem.label "Canvia la direcció de la pàgina">
|
||||
<!ENTITY bidiSwitchPageDirectionItem.accesskey "g">
|
||||
|
|
|
|||
|
|
@ -147,7 +147,7 @@
|
|||
<!ENTITY zotero.tagColorChooser.setColor "Estableix el color">
|
||||
<!ENTITY zotero.tagColorChooser.removeColor "Elimina el color">
|
||||
|
||||
<!ENTITY zotero.lookup.description "Enter ISBNs, DOIs, PMIDs, arXiv IDs, or ADS Bibcodes to add to your library:">
|
||||
<!ENTITY zotero.lookup.description "Introduïu codis ISBN, DOI, PMID, arXiv ID o ADS Bibcodes per afegir a la vostra biblioteca:">
|
||||
<!ENTITY zotero.lookup.button.search "Cerca">
|
||||
|
||||
<!ENTITY zotero.createParent.title "Crea un element pare">
|
||||
|
|
@ -196,7 +196,7 @@
|
|||
|
||||
<!ENTITY zotero.citation.keepSorted.label "Mantingues les fonts ordenades">
|
||||
|
||||
<!ENTITY zotero.citation.suppressAuthor.label "Omit Author">
|
||||
<!ENTITY zotero.citation.suppressAuthor.label "Omet l'autor">
|
||||
<!ENTITY zotero.citation.prefix.label "Prefix:">
|
||||
<!ENTITY zotero.citation.suffix.label "Sufix:">
|
||||
<!ENTITY zotero.citation.editorWarning.label "Avís: Si editeu la cita a l'editor de cites no s'actualitzarà més i no reflectirà els canvis en la base de dades o de l'estil de cita.">
|
||||
|
|
@ -316,13 +316,13 @@
|
|||
<!ENTITY zotero.pdfReader.handTool "Eina de mà">
|
||||
<!ENTITY zotero.pdfReader.verticalScrolling "Desplaçament vertical">
|
||||
<!ENTITY zotero.pdfReader.horizontalScrolling "Desplaçament horitzontal">
|
||||
<!ENTITY zotero.pdfReader.wrappedScrolling "Wrapped Scrolling">
|
||||
<!ENTITY zotero.pdfReader.noSpreads "No Spreads">
|
||||
<!ENTITY zotero.pdfReader.oddSpreads "Odd Spreads">
|
||||
<!ENTITY zotero.pdfReader.evenSpreads "Even Spreads">
|
||||
<!ENTITY zotero.pdfReader.zoomIn "Zoom In">
|
||||
<!ENTITY zotero.pdfReader.zoomOut "Zoom Out">
|
||||
<!ENTITY zotero.pdfReader.zoomAuto "Automatically Resize">
|
||||
<!ENTITY zotero.pdfReader.zoomPageWidth "Zoom to Page Width">
|
||||
<!ENTITY zotero.pdfReader.zoomPageHeight "Zoom to Page Height">
|
||||
<!ENTITY zotero.pdfReader.transferFromPDF "Import Annotations…">
|
||||
<!ENTITY zotero.pdfReader.wrappedScrolling "Desplaçament ajustat">
|
||||
<!ENTITY zotero.pdfReader.noSpreads "Cap disposició">
|
||||
<!ENTITY zotero.pdfReader.oddSpreads "Disposició en senars">
|
||||
<!ENTITY zotero.pdfReader.evenSpreads "Disposició en parells">
|
||||
<!ENTITY zotero.pdfReader.zoomIn "Amplia">
|
||||
<!ENTITY zotero.pdfReader.zoomOut "Redueix">
|
||||
<!ENTITY zotero.pdfReader.zoomAuto "Redimensiona automàticament">
|
||||
<!ENTITY zotero.pdfReader.zoomPageWidth "Ajusta a l'amplada de la pàgina">
|
||||
<!ENTITY zotero.pdfReader.zoomPageHeight "Ajusta a l'alçada de la pàgina">
|
||||
<!ENTITY zotero.pdfReader.transferFromPDF "Importa anotacions…">
|
||||
|
|
|
|||
|
|
@ -26,8 +26,8 @@ general.checkForUpdates=Comprova si hi ha actualitzacions
|
|||
general.actionCannotBeUndone=Aquesta acció no es pot desfer.
|
||||
general.install=Instal·la
|
||||
general.updateAvailable=Hi ha una actualització disponible
|
||||
general.downloading=Downloading %S…
|
||||
general.downloading.quoted=Downloading “%S”…
|
||||
general.downloading=S'està baixant %S…
|
||||
general.downloading.quoted=S'està baixant «%S»…
|
||||
general.noUpdatesFound=No s'han trobat actualitzacions
|
||||
general.isUpToDate=%S està actualitzat.
|
||||
general.upgrade=Actualitza
|
||||
|
|
@ -47,12 +47,12 @@ general.delete=Suprimeix
|
|||
general.remove=Elimina
|
||||
general.import=Importa
|
||||
general.export=Exporta
|
||||
general.update=Update
|
||||
general.update=Actualitza
|
||||
general.moreInformation=Més informació
|
||||
general.learnMore=Learn More
|
||||
general.learnMore=Més informació
|
||||
general.seeForMoreInformation=Mira %S per a més informació.
|
||||
general.open=Obre %S
|
||||
general.close=Close
|
||||
general.close=Tanca
|
||||
general.enable=Habilita
|
||||
general.disable=Deshabilita
|
||||
general.reset=Reinicia
|
||||
|
|
@ -65,13 +65,13 @@ general.openPreferences=Obre les preferències
|
|||
general.keys.ctrlShift=Ctrl+Shift+
|
||||
general.keys.cmdShift=Cmd+Shift+
|
||||
general.dontShowAgain=No ho tornis a mostrar
|
||||
general.dontAskAgain=Don’t Ask Again
|
||||
general.remindMeLater=Remind Me Later
|
||||
general.dontAskAgain=No m'ho tornis a demanar
|
||||
general.remindMeLater=Recorda-m'ho més tard
|
||||
general.fix=Arregla…
|
||||
general.tryAgain=Torna-ho a provar
|
||||
general.tryLater=Prova-ho després
|
||||
general.showDirectory=Mostra el directori
|
||||
general.showInLibrary=Show in Library
|
||||
general.showInLibrary=Mostra a la biblioteca
|
||||
general.continue=Continua
|
||||
general.copy=Copia
|
||||
general.copyToClipboard=Copia al portaretalls
|
||||
|
|
@ -86,18 +86,19 @@ general.nMegabytes=%S MB
|
|||
general.item=Element
|
||||
general.pdf=PDF
|
||||
general.back=Enrere
|
||||
general.languages=Languages
|
||||
general.default=Default
|
||||
general.custom=Custom
|
||||
general.loading=Loading…
|
||||
general.richText=Rich Text
|
||||
general.clearSelection=Clear Selection
|
||||
general.languages=Llengües
|
||||
general.default=Per defecte
|
||||
general.custom=Personalitzat
|
||||
general.loading=S'està carregant…
|
||||
general.richText=Text enriquit
|
||||
general.clearSelection=Buida la selecció
|
||||
general.insert=Insert
|
||||
|
||||
general.yellow=Yellow
|
||||
general.red=Red
|
||||
general.green=Green
|
||||
general.blue=Blue
|
||||
general.purple=Purple
|
||||
general.yellow=Groc
|
||||
general.red=Vermell
|
||||
general.green=Verd
|
||||
general.blue=Blau
|
||||
general.purple=Lila
|
||||
|
||||
general.operationInProgress=Una operació del Zotero està actualment en curs.
|
||||
general.operationInProgress.waitUntilFinished=Espereu fins que hagi acabat.
|
||||
|
|
@ -105,14 +106,14 @@ general.operationInProgress.waitUntilFinishedAndTryAgain=Si us plau, espereu fin
|
|||
|
||||
networkError.connectionNotSecure=El %S no ha pogut establir una connexió segura.
|
||||
networkError.errorViaProxy=S'ha produït un error en connectar-se a través del servidor intermediari
|
||||
networkError.connectionMonitored=Your connection is likely being monitored, and %S has not been configured to trust the intermediate server.
|
||||
networkError.connectionMonitored=La vostra connexió possiblement està monitorada, i el %S no està configurat per a confiar en el servidor intermediari.
|
||||
|
||||
about.createdBy=El %1$S és un projecte de %2$S i està desenvolupat per una [comunitat global].
|
||||
about.openSource=El %S és [programari de codi obert] i depèn de molts altres [projectes de codi obert excepcionals].
|
||||
about.getInvolved=Voleu ajudar-hi? [Impliqueu-vos-hi] avui mateix!
|
||||
|
||||
punctuation.openingQMark=“
|
||||
punctuation.closingQMark=”
|
||||
punctuation.openingQMark=«
|
||||
punctuation.closingQMark=»
|
||||
punctuation.colon=:
|
||||
punctuation.ellipsis=…
|
||||
|
||||
|
|
@ -175,7 +176,7 @@ dataDir.selectDir=Selecciona el directori de dades per al Zotero
|
|||
dataDir.selectNewDir=Seleccioneu un nou directori de dades del %S
|
||||
dataDir.changeDataDirectory=Canvia el directori de dades…
|
||||
dataDir.chooseNewDataDirectory=Trieu un directori de dades nou…
|
||||
dataDir.cannotBeSetWithAlternative=The data directory cannot be set to a “%S” directory. Did you mean %S?
|
||||
dataDir.cannotBeSetWithAlternative=El directori de dades no es pot definir en un directori del «%S». Volíeu dir %S?
|
||||
dataDir.cannotBeLinkedAttachmentBaseDirectory=El directori de dades no pot definir-se en la mateixa ubicació que el directori base d'adjuncions enllaçades.
|
||||
dataDir.unsafeLocation.selected.cloud=Emmagatzemar el directori de dades en una carpeta d'emmagatzematge al núvol molt probablement corromprà la vostra base de dades.
|
||||
dataDir.unsafeLocation.selected.areYouSure=Esteu segur que voleu utilitzar aquesta ubicació?
|
||||
|
|
@ -236,7 +237,7 @@ date.relative.daysAgo.multiple=Fa %S dies
|
|||
date.relative.yearsAgo.one=Fa 1 any
|
||||
date.relative.yearsAgo.multiple=Fa %S anys
|
||||
|
||||
pane.collections.title=Collections
|
||||
pane.collections.title=Col·leccions
|
||||
pane.collections.delete.title=Suprimeix la col·lecció
|
||||
pane.collections.delete=Segur que voleu eliminar la col·lecció seleccionada?
|
||||
pane.collections.delete.keepItems=Els elements d'aquesta col·lecció no s'esborraran
|
||||
|
|
@ -308,7 +309,7 @@ pane.items.intro.text1=Us donem la benvinguda a %S!
|
|||
pane.items.intro.text2=Consulteu la [guia de primers passos] per a aprendre a confeccionar la vostra biblioteca, i assegureu-vos d'[instal·lar un %S] per a poder afegir elements al %S a mesura que navegueu.
|
||||
pane.items.intro.text3=Utilitzeu el %S en un altre ordinador? [Configureu la sincronització] per a reprendre-ho allà on ho hàgiu deixat.
|
||||
|
||||
pane.items.title=Items
|
||||
pane.items.title=Elements
|
||||
pane.items.loading=S'estan carregant els elements…
|
||||
pane.items.loadError=S'ha produït un error en carregar la llista d'elements
|
||||
pane.items.columnChooser.moreColumns=Més columnes
|
||||
|
|
@ -327,22 +328,27 @@ pane.items.remove.multiple=Segur que voleu eliminar els elements seleccionats d'
|
|||
pane.items.removeFromPublications.title=Suprimeix de les meves publicacions
|
||||
pane.items.removeFromPublications=Esteu segur que voleu suprimir l'element seleccionat de 'Les meves publicacions'?
|
||||
pane.items.removeFromPublications.multiple=Esteu segur que voleu suprimir els elements seleccionats de 'Les meves publicacions'?
|
||||
pane.items.menu.addNoteFromAnnotations=Add Note from Annotations
|
||||
pane.items.menu.addNoteFromAnnotations.multiple=Add Notes from Annotations
|
||||
pane.items.removeRecursive.title=Suprimeix de la col·lecció i de les subcol·leccions
|
||||
pane.items.removeRecursive=Esteu segur que voleu eliminar l'element seleccionat d'aquesta col·lecció i de totes les subcol·leccions?
|
||||
pane.items.removeRecursive.multiple=Esteu segur que voleu eliminar els elements seleccionats d'aquesta col·lecció i de totes les subcol·leccions?
|
||||
pane.items.menu.addNoteFromAnnotations=Afegeix nota de les anotacions
|
||||
pane.items.menu.createNoteFromAnnotations=Create Note from Annotations
|
||||
pane.items.menu.findAvailablePDF=Cerca els PDF disponibles
|
||||
pane.items.menu.findAvailablePDF.multiple=Cerca els PDF disponibles
|
||||
pane.items.menu.addToCollection=Add to Collection
|
||||
pane.items.menu.addToCollection=Afegeix a la col·lecció
|
||||
pane.items.menu.remove=Elimina l'element de la col·lecció...
|
||||
pane.items.menu.remove.multiple=Elimina els elements de la col·lecció...
|
||||
pane.items.menu.removeFromPublications=Suprimeix l'element de les meves publicacions…
|
||||
pane.items.menu.removeFromPublications.multiple=Suprimeix els elements de les meves publicacions…
|
||||
pane.items.menu.moveToTrash=Desplaça l'element a la paperera.
|
||||
pane.items.menu.moveToTrash.multiple=Desplaça els elements a la paperera...
|
||||
pane.items.menu.delete=Delete Permanently…
|
||||
pane.items.menu.delete=Elimina permanentment…
|
||||
pane.items.menu.export=Exporta l'element seleccionat...
|
||||
pane.items.menu.export.multiple=Exporta els elements seleccionats...
|
||||
pane.items.menu.exportNote=Export Note…
|
||||
pane.items.menu.exportNote.multiple=Export Notes…
|
||||
pane.items.menu.exportNote=Exporta la nota…
|
||||
pane.items.menu.exportNote.multiple=Exporta les notes…
|
||||
pane.items.menu.exportPDF=Exporta el PDF…
|
||||
pane.items.menu.exportPDF.multiple=Exporta els PDF…
|
||||
pane.items.menu.createBib=Crea una bibliografia a partir de l'element seleccionat...
|
||||
pane.items.menu.createBib.multiple=Crea una bibliografia a partir dels elements seleccionats...
|
||||
pane.items.menu.generateReport=Genera un informe a partir de l'element seleccionat...
|
||||
|
|
@ -355,6 +361,8 @@ pane.items.menu.createParent=Crea un element pare…
|
|||
pane.items.menu.createParent.multiple=Crea elements pare
|
||||
pane.items.menu.renameAttachments=Canvia el nom del fitxer amb les metadades ascendents
|
||||
pane.items.menu.renameAttachments.multiple=Canvia els noms del fitxers amb les metadades ascendents
|
||||
pane.items.menu.duplicateAndConvert.toBookSection=Crea una secció de llibre
|
||||
pane.items.menu.duplicateAndConvert.toBook=Crea un llibre d'una secció de llibre
|
||||
pane.items.showItemInLibrary=Mostra l'element a la biblioteca
|
||||
|
||||
pane.items.letter.oneParticipant=Carta a %S
|
||||
|
|
@ -397,7 +405,7 @@ pane.item.notes.allNotes=Totes les notes
|
|||
pane.item.notes.untitled=Nota sense títol
|
||||
pane.item.notes.delete.confirm=Segur que voleu eliminar aquesta nota?
|
||||
pane.item.notes.count=%1$S nota;%1$S notes
|
||||
pane.item.notes.ignoreMissingImage=Some note images are missing and cannot be copied.
|
||||
pane.item.notes.ignoreMissingImage=Falten imatges de notes i no poden copiar-se.
|
||||
pane.item.attachments.rename.title=Nou títol:
|
||||
pane.item.attachments.rename.renameAssociatedFile=Canvia el nom del fitxer associat
|
||||
pane.item.attachments.rename.error=S'ha produït un error quan es canviava el nom del fitxer.
|
||||
|
|
@ -411,10 +419,10 @@ pane.item.attachments.delete.confirm=Estàs segur que vols eliminar aquest arxiu
|
|||
pane.item.attachments.count.zero=Cap fitxer adjunt:
|
||||
pane.item.attachments.count.singular=%S arxiu adjunt:
|
||||
pane.item.attachments.count.plural=%S fitxers adjunts:
|
||||
pane.item.attachments.has=Has attachment
|
||||
pane.item.attachments.hasPDF=Has PDF attachment
|
||||
pane.item.attachments.hasSnapshot=Has snapshot
|
||||
pane.item.attachments.hasLink=Has link
|
||||
pane.item.attachments.has=Té una adjunció
|
||||
pane.item.attachments.hasPDF=Té una adjunció PDF
|
||||
pane.item.attachments.hasSnapshot=Té una captura
|
||||
pane.item.attachments.hasLink=Té un enllaç
|
||||
pane.item.attachments.select=Selecciona un fitxer
|
||||
pane.item.attachments.PDF.installTools.title=PDF Tools no es troba instal·lat
|
||||
pane.item.attachments.PDF.installTools.text=Per a utilitzar aquesta funcionalitat, heu d'instal·lar primer les eines PDF en la subfinestra Cerca de les preferències del Zotero.
|
||||
|
|
@ -430,7 +438,7 @@ pane.item.related.count.zero=Cap element relacionat:
|
|||
pane.item.related.count.singular=%S element relacionat:
|
||||
pane.item.related.count.plural=%S elements relacionats:
|
||||
pane.item.parentItem=Element ascendent
|
||||
pane.item.viewOnline.tooltip=Go to this item online
|
||||
pane.item.viewOnline.tooltip=Vés a aquest element en línia
|
||||
|
||||
pane.context.noParent=No hi ha cap element pare
|
||||
pane.context.itemNotes=Notes dels elements
|
||||
|
|
@ -474,7 +482,7 @@ itemTypes.conferencePaper=Text d'una conferència
|
|||
itemTypes.document=Document
|
||||
itemTypes.encyclopediaArticle=Article enciclopèdic
|
||||
itemTypes.dictionaryEntry=Entrada de diccionari
|
||||
itemTypes.preprint=Preprint
|
||||
itemTypes.preprint=Prepublicació
|
||||
|
||||
itemFields.itemType=Tipus
|
||||
itemFields.title=Títol
|
||||
|
|
@ -587,10 +595,10 @@ itemFields.issuingAuthority=Autoritat emissora
|
|||
itemFields.filingDate=Data de presentació
|
||||
itemFields.genre=Gènere
|
||||
itemFields.archive=Arxiu
|
||||
itemFields.attachmentPDF=PDF Attachment
|
||||
itemFields.repository=Repository
|
||||
itemFields.archiveID=Archive ID
|
||||
itemFields.citationKey=Citation Key
|
||||
itemFields.attachmentPDF=Adjunció PDF
|
||||
itemFields.repository=Repositori
|
||||
itemFields.archiveID=ID d'arxiu
|
||||
itemFields.citationKey=Clau de cita
|
||||
|
||||
creatorTypes.author=Autor
|
||||
creatorTypes.contributor=Col·laborador
|
||||
|
|
@ -722,7 +730,7 @@ zotero.preferences.export.quickCopy.citationInstructions=Per als estils de cita,
|
|||
|
||||
zotero.preferences.wordProcessors.installationSuccess=La instal·lació s'ha realitzat amb èxit.
|
||||
zotero.preferences.wordProcessors.installationError=No s'ha pogut completar la instal·lació perquè s'ha produït un error. Assegureu-vos que el %1$S estigui tancant i llavors reinicieu-lo.
|
||||
zotero.preferences.wordProcessors.manualInstallation.button=Manual Installation
|
||||
zotero.preferences.wordProcessors.manualInstallation.button=Instal·lació manual
|
||||
zotero.preferences.wordProcessors.installed=El complement %S està instal·lat.
|
||||
zotero.preferences.wordProcessors.notInstalled=El complement %S no està instal·lat.
|
||||
zotero.preferences.wordProcessors.install=Instal·la el connector %S
|
||||
|
|
@ -845,7 +853,7 @@ fulltext.indexState.queued=En cua
|
|||
exportOptions.exportNotes=Exporta les notes
|
||||
exportOptions.exportFileData=Exporta els fitxers adjunts
|
||||
exportOptions.includeAnnotations=Inclou anotacions
|
||||
exportOptions.includeAppLinks=Include %S Links
|
||||
exportOptions.includeAppLinks=Inclou enllaços %S
|
||||
exportOptions.useJournalAbbreviation=Utilitza l'abreviació de la publicació
|
||||
charset.UTF8withoutBOM=Unicode (UTF-8 sense BOM)
|
||||
charset.autoDetect=(Detecció automàtica)
|
||||
|
|
@ -864,22 +872,7 @@ citation.showEditor=Mostra editor...
|
|||
citation.hideEditor=Oculta l'editor...
|
||||
citation.citations=Cites
|
||||
citation.notes=Notes
|
||||
citation.locator.page=Pàgina
|
||||
citation.locator.book=Llibre
|
||||
citation.locator.chapter=Capítol
|
||||
citation.locator.column=Columna
|
||||
citation.locator.figure=Figura
|
||||
citation.locator.folio=Infoli
|
||||
citation.locator.issue=Número
|
||||
citation.locator.line=Línia
|
||||
citation.locator.note=Nota
|
||||
citation.locator.opus=Opus
|
||||
citation.locator.paragraph=Paràgraf
|
||||
citation.locator.part=Part
|
||||
citation.locator.section=Secció
|
||||
citation.locator.subverbo=Sub verbo
|
||||
citation.locator.volume=Volum
|
||||
citation.locator.verse=Vers
|
||||
citation.locator.timestamp=Marca horària
|
||||
|
||||
report.title.default=Informe del Zotero
|
||||
report.parentItem=Element pare:
|
||||
|
|
@ -942,10 +935,10 @@ integration.error.misconfiguredWordStartupFolder.fix=El connector no pot aparèi
|
|||
integration.error.macWordSBPermissionsMissing.title=Hi manca el permís
|
||||
integration.error.macWordSBPermissionsMissing=El Zotero no té permisos per a controlar el Word. Per a atorgar-li:\n\n1) Obriu les preferències del sistema\n2) Feu clic a «Seguretat i privadesa»\n3) Seleccioneu la pestanya de «Privadesa»\n4) Trobeu i seleccioneu «Automatització» a l'esquerra\n5) Marqueu la casella de «Microsoft Word» sota «Zotero»\n6) Reinicieu el Word
|
||||
integration.error.macWordSBPermissionsMissing.pre2016=Si «Microsoft Word» no apareix sota «Automatització», assegureu-vos que esteu executant el Word 2011 versió 14.7.7 o superior.
|
||||
integration.error.m1UpgradeOS.title=macOS Upgrade Required
|
||||
integration.error.m1UpgradeOS.title=Cal una actualització del macOS
|
||||
integration.error.m1UpgradeOS=Citing in Word on an Apple Silicon Mac with macOS 11.3 or earlier is not supported and may cause %S to freeze. Please upgrade to macOS 11.4 or later.
|
||||
integration.error.viewTroubleshootingInfo=Voleu veure les instruccions de resolució de problemes?
|
||||
integration.error.tabUnavailable=The operation cannot be completed because the %S tab is no longer available.
|
||||
integration.error.tabUnavailable=No es pot completar l'operació perquè la pestanya %S ja no és disponible.
|
||||
|
||||
integration.replace=Substitueix aquest camp del Zotero?
|
||||
integration.missingItem.single=Aquest element ja no existeix a la base de dades del Zotero. Voleu seleccionar un altre element?
|
||||
|
|
@ -1004,9 +997,9 @@ sync.resetGroupFilesAndSync=Reinicia els fitxers de grup i sincronitza
|
|||
sync.skipGroup=Omet el grup
|
||||
sync.removeGroupsAndSync=Elimina el grup i sincronitza
|
||||
|
||||
sync.reminder.setUp.message=Back up your library with %S syncing.
|
||||
sync.reminder.setUp.action=Set Up Syncing
|
||||
sync.reminder.autoSync.message=%S hasn’t synced in a while. Do you want to enable automatic syncing?
|
||||
sync.reminder.setUp.message=Feu una còpia de seguretat de la biblioteca amb la sincronització del %S.
|
||||
sync.reminder.setUp.action=Configura la sincronització
|
||||
sync.reminder.autoSync.message=El %S fa temps que no se sincronitza. Voleu activar-ne la sincronització automàtica?
|
||||
|
||||
sync.error.usernameNotSet=No s'ha establit un nom d'usuari
|
||||
sync.error.usernameNotSet.text=Cal que introduïu el vostre nom d'usuari i contrasenya de zotero.org en les preferències de Zotero per a sincronitzar amb el servidor de Zotero.
|
||||
|
|
@ -1043,7 +1036,7 @@ account.unlinkWarning=Si es desvincula el vostre compte, s'evitarà que %S sincr
|
|||
account.unlinkWarning.removeData=Suprimeix les meves dades de %S d'aquest ordinador
|
||||
account.unlinkWarning.button=Desvincula el compte
|
||||
account.warning.emptyLibrary=You are about to sync to an empty %1$S database. This could happen if you accidentally deleted the %2$S file in your %1$S data directory or the location of your data directory changed.
|
||||
account.warning.emptyLibrary.dataWillBeDownloaded=If you continue, data in the ‘%1$S’ account will be downloaded to this computer. Your online library won’t be affected.
|
||||
account.warning.emptyLibrary.dataWillBeDownloaded=Si continueu, les dades del compte «%1$S» es baixaran en aquest ordinador. La biblioteca en línia no es veurà afectada.
|
||||
account.warning.existingDataElsewhere=Si les dades del %S existeixen en un altre lloc de l'ordinador, caldria que les mogueu al directori de dades actual o bé canvieu la ubicació del directori de dades perquè apunti on es troben les dades que ja existeixen.
|
||||
account.lastSyncWithDifferentAccount=La base de dades del %1$S s'ha sincronitzat per darrera vegada amb un compte diferent («%2$S») del que esteu provant de sincronitzar-vos ara («%3$S»). Si continueu, totes les biblioteques de %1$S associades amb el compte «%2$S» se suprimiran d'aquest ordinador.
|
||||
account.lastSyncWithDifferentAccount.beforeContinuing=Abans de continuar, assegureu-vos que totes les dades i fitxers que voleu conservar estiguin sincronitzats amb el compte «%S» o que tingueu una còpia de seguretat del directori de dades de %S.
|
||||
|
|
@ -1210,8 +1203,8 @@ lookup.failureTooMany.description=Massa identificadors. Introduïu-ne un només
|
|||
createParent.prompt=Enter a DOI, ISBN, PMID, arXiv ID, or ADS Bibcode to identify this file
|
||||
|
||||
locate.online.label=Veure en línia
|
||||
locate.pdf.label=Open PDF
|
||||
locate.pdfNewWindow.label=Open PDF in New Window
|
||||
locate.pdf.label=Obre el PDF
|
||||
locate.pdfNewWindow.label=Obre el PDF en una finestra nova
|
||||
locate.snapshot.label=Veure l'instantània
|
||||
locate.file.label=Veure el fitxer
|
||||
locate.externalViewer.label=Obre en un visor extern
|
||||
|
|
@ -1298,112 +1291,124 @@ noteEditor.copy=Copia
|
|||
noteEditor.paste=Enganxa
|
||||
noteEditor.rightToLeft=De dreta a esquerra
|
||||
noteEditor.leftToRight=D'esquerra a dreta
|
||||
noteEditor.updateNotice=This note was edited with a newer version of %1$S.\nPlease update %1$S to make changes.
|
||||
noteEditor.enterLink=Enter Link
|
||||
noteEditor.heading1=Heading 1
|
||||
noteEditor.heading2=Heading 2
|
||||
noteEditor.heading3=Heading 3
|
||||
noteEditor.paragraph=Paragraph
|
||||
noteEditor.updateNotice=La nota es va editar en una versió més nova del %1$S.\nActualitzeu el %1$S per a fer-ne canvis.
|
||||
noteEditor.enterLink=Introdueix un enllaç
|
||||
noteEditor.heading1=Encapçalament 1
|
||||
noteEditor.heading2=Encapçalament 2
|
||||
noteEditor.heading3=Encapçalament 3
|
||||
noteEditor.paragraph=Paràgraf
|
||||
noteEditor.monospaced=Monospaced
|
||||
noteEditor.bulletList=Bulleted List
|
||||
noteEditor.orderedList=Numbered List
|
||||
noteEditor.bulletList=Llista de pics
|
||||
noteEditor.orderedList=Llista numerada
|
||||
noteEditor.blockquote=Block Quote
|
||||
noteEditor.mathBlock=Math Block
|
||||
noteEditor.formatText=Format Text
|
||||
noteEditor.highlightText=Highlight Text
|
||||
noteEditor.removeColor=Remove Color
|
||||
noteEditor.bold=Bold
|
||||
noteEditor.italic=Italic
|
||||
noteEditor.underline=Underline
|
||||
noteEditor.strikethrough=Strikethrough
|
||||
noteEditor.subscript=Subscript
|
||||
noteEditor.superscript=Superscript
|
||||
noteEditor.returnToNotesList=Return to Notes List
|
||||
noteEditor.insertLink=Insert Link
|
||||
noteEditor.clearFormatting=Clear Formatting
|
||||
noteEditor.align=Align
|
||||
noteEditor.alignLeft=Align Left
|
||||
noteEditor.alignCenter=Align Center
|
||||
noteEditor.alignRight=Align Right
|
||||
noteEditor.insertCitation=Insert Citation
|
||||
noteEditor.highlightText=Marca el text
|
||||
noteEditor.removeColor=Elimina el color
|
||||
noteEditor.bold=Negreta
|
||||
noteEditor.italic=Cursiva
|
||||
noteEditor.underline=Subratllat
|
||||
noteEditor.strikethrough=Ratllat
|
||||
noteEditor.subscript=Subíndex
|
||||
noteEditor.superscript=Superíndex
|
||||
noteEditor.returnToNotesList=Torna a la llista de notes
|
||||
noteEditor.insertLink=Insereix un enllaç
|
||||
noteEditor.clearFormatting=Neteja el format
|
||||
noteEditor.align=Alinea
|
||||
noteEditor.alignLeft=Alinea a l'esquerra
|
||||
noteEditor.alignCenter=Alinea al centre
|
||||
noteEditor.alignRight=Alinea a la dreta
|
||||
noteEditor.insertCitation=Insereix una cita
|
||||
noteEditor.more=Més
|
||||
noteEditor.find=Find
|
||||
noteEditor.replace=Replace
|
||||
noteEditor.previous=Previous
|
||||
noteEditor.next=Next
|
||||
noteEditor.replaceNext=Replace
|
||||
noteEditor.replaceAll=Replace All
|
||||
noteEditor.goToPage=Go to Page
|
||||
noteEditor.showItem=Show Item
|
||||
noteEditor.editCitation=Edit Citation
|
||||
noteEditor.showOnPage=Show on Page
|
||||
noteEditor.find=Cerca
|
||||
noteEditor.replace=Reemplaça
|
||||
noteEditor.previous=Anterior
|
||||
noteEditor.next=Següent
|
||||
noteEditor.replaceNext=Reemplaça
|
||||
noteEditor.replaceAll=Reemplaça-ho tot
|
||||
noteEditor.goToPage=Vés a la pàgina
|
||||
noteEditor.showItem=Mostra l'element
|
||||
noteEditor.editCitation=Edita la cita
|
||||
noteEditor.showOnPage=Mostra-ho a la pàgina
|
||||
noteEditor.unlink=Unlink
|
||||
noteEditor.set=Set
|
||||
noteEditor.edit=Edit
|
||||
noteEditor.addCitation=Add Citation
|
||||
noteEditor.removeCitation=Hide Citation
|
||||
noteEditor.findAndReplace=Find and Replace
|
||||
noteEditor.editInWindow=Edit in a Separate Window
|
||||
noteEditor.applyAnnotationColors=Show Annotation Colors
|
||||
noteEditor.removeAnnotationColors=Hide Annotation Colors
|
||||
noteEditor.addCitations=Show Annotation Citations
|
||||
noteEditor.removeCitations=Hide Annotation Citations
|
||||
noteEditor.insertTable=Insert Table
|
||||
noteEditor.insertRowBefore=Insert Row Above
|
||||
noteEditor.insertRowAfter=Insert Row Below
|
||||
noteEditor.insertColumnBefore=Insert Column Left
|
||||
noteEditor.insertColumnAfter=Insert Column Right
|
||||
noteEditor.deleteRow=Delete Row
|
||||
noteEditor.deleteColumn=Delete Column
|
||||
noteEditor.deleteTable=Delete Table
|
||||
noteEditor.edit=Edita
|
||||
noteEditor.addCitation=Afegeix una cita
|
||||
noteEditor.removeCitation=Amaga la cita
|
||||
noteEditor.findAndReplace=Cerca i reemplaça
|
||||
noteEditor.editInWindow=Edita en una finestra separada
|
||||
noteEditor.applyAnnotationColors=Mostra els colors d'anotació
|
||||
noteEditor.removeAnnotationColors=Amaga els colors d'anotació
|
||||
noteEditor.addCitations=Mostra les cites d'anotació
|
||||
noteEditor.removeCitations=Amaga les cites d'anotació
|
||||
noteEditor.image=Imatge
|
||||
noteEditor.math=Math
|
||||
noteEditor.table=Table
|
||||
noteEditor.copyImage=Copy Image
|
||||
noteEditor.saveImageAs=Save Image As…
|
||||
noteEditor.insertRowBefore=Insereix una fila a sobre
|
||||
noteEditor.insertRowAfter=Insereix una fila a sota
|
||||
noteEditor.insertColumnBefore=Insereix una columna a l'esquerra
|
||||
noteEditor.insertColumnAfter=Insereix una columna a la dreta
|
||||
noteEditor.deleteRow=Suprimeix la fila
|
||||
noteEditor.deleteColumn=Suprimeix la columna
|
||||
noteEditor.deleteTable=Suprimeix la taula
|
||||
|
||||
pdfReader.annotations=Annotations
|
||||
pdfReader.showAnnotations=Show Annotations
|
||||
pdfReader.searchAnnotations=Search Annotations
|
||||
pdfReader.noAnnotations=Create an annotation to see it in the sidebar
|
||||
pdfReader.addText=Add extracted text
|
||||
pdfReader.addComment=Add comment
|
||||
pdfReader.addTags=Add tags…
|
||||
pdfReader.highlightText=Highlight Text
|
||||
pdfReader.addNote=Add Note
|
||||
pdfReader.selectArea=Select Area
|
||||
pdfReader.pickColor=Pick a Color
|
||||
pdfReader.addToNote=Add to Note
|
||||
pdfReader.zoomIn=Zoom In
|
||||
pdfReader.zoomOut=Zoom Out
|
||||
pdfReader.zoomAuto=Automatically Resize
|
||||
pdfReader.zoomPageWidth=Zoom to Page Width
|
||||
pdfReader.zoomPageHeight=Zoom to Page Height
|
||||
pdfReader.annotations=Anotacions
|
||||
pdfReader.showAnnotations=Mostra les anotacions
|
||||
pdfReader.searchAnnotations=Cerca anotacions
|
||||
pdfReader.noAnnotations=Creeu una anotació per a veure-la en la barra lateral
|
||||
pdfReader.noExtractedText=Text no extret
|
||||
pdfReader.addComment=Afegeix un comentari
|
||||
pdfReader.addTags=Afegeix etiquetes…
|
||||
pdfReader.highlightText=Marca el text
|
||||
pdfReader.addNote=Afegeix una nota
|
||||
pdfReader.selectArea=Selecciona l'àrea
|
||||
pdfReader.pickColor=Tria un color
|
||||
pdfReader.addToNote=Afegeix a la nota
|
||||
pdfReader.zoomIn=Amplia
|
||||
pdfReader.zoomOut=Redueix
|
||||
pdfReader.zoomAuto=Redimensiona automàticament
|
||||
pdfReader.zoomPageWidth=Ajusta a l'amplada de la pàgina
|
||||
pdfReader.zoomPageHeight=Ajusta a l'alçada de la pàgina
|
||||
pdfReader.nextPage=Pàgina següent
|
||||
pdfReader.previousPage=Pàgina anterior
|
||||
pdfReader.page=Pàgina
|
||||
pdfReader.readOnly=Només de lectura
|
||||
pdfReader.promptTransferFromPDF.title=Import Annotations
|
||||
pdfReader.promptTransferFromPDF.text=Annotations stored in the PDF file will be moved to %1$S.
|
||||
pdfReader.promptTransferToPDF.title=Store Annotations in File
|
||||
pdfReader.promptTransferToPDF.text=Annotations will be transferred to the PDF file and will no longer be editable in %S.
|
||||
pdfReader.promptTransferFromPDF.title=Importa anotacions
|
||||
pdfReader.promptTransferFromPDF.text=Les anotacions emmagatzemades en el fitxer PDF es mouran a %1$S.
|
||||
pdfReader.promptTransferToPDF.title=Emmagatzema les anotacions en un fitxer
|
||||
pdfReader.promptTransferToPDF.text=Les anotacions es transferiran al fixer PDF i ja no podren ser editades més al %S.
|
||||
pdfReader.promptPasswordProtected=The operation is not supported for password-protected PDF files.
|
||||
pdfReader.editPageNumber=Edit Page Number…
|
||||
pdfReader.editHighlightedText=Edit Highlighted Text
|
||||
pdfReader.pageNumberPopupHeader=Change page number for:
|
||||
pdfReader.thisAnnotation=This annotation
|
||||
pdfReader.selectedAnnotations=Selected annotations
|
||||
pdfReader.thisPage=This page
|
||||
pdfReader.thisPageAndLaterPages=This page and later pages
|
||||
pdfReader.allPages=All pages
|
||||
pdfReader.autoDetect=Auto-Detect
|
||||
pdfReader.deleteAnnotation.singular=Are you sure you want to delete the selected annotation?
|
||||
pdfReader.deleteAnnotation.plural=Are you sure you want to delete the selected annotations?
|
||||
pdfReader.promptDeletePages.title=Elimina les pàgines
|
||||
pdfReader.promptDeletePages.text=Are you sure you want to delete %1$S page from the PDF file?;Are you sure you want to delete %1$S pages from the PDF file?
|
||||
pdfReader.rotateLeft=Gira a l'esquerra
|
||||
pdfReader.rotateRight=Gira a la dreta
|
||||
pdfReader.rotate180=Gira 180°
|
||||
pdfReader.editPageNumber=Edita el número de pàgina…
|
||||
pdfReader.editHighlightedText=Edita el text ressaltat
|
||||
pdfReader.copyImage=Copy Image
|
||||
pdfReader.saveImageAs=Save Image As…
|
||||
pdfReader.pageNumberPopupHeader=Canvia el número de la pàgina per:
|
||||
pdfReader.thisAnnotation=Aquesta anotació
|
||||
pdfReader.selectedAnnotations=Anotacions seleccionades
|
||||
pdfReader.thisPage=Aquesta pàgina
|
||||
pdfReader.thisPageAndLaterPages=Aquesta pàgina i posteriors
|
||||
pdfReader.allPages=Totes les pàgines
|
||||
pdfReader.autoDetect=Detecció automàtica
|
||||
pdfReader.deleteAnnotation.singular=Esteu segur que voleu eliminar l'anotació seleccionada?
|
||||
pdfReader.deleteAnnotation.plural=Esteu segur que voleu eliminar les anotacions seleccionades?
|
||||
|
||||
spellCheck.checkSpelling=Check Spelling
|
||||
spellCheck.addRemoveDictionaries=Add/Remove Dictionaries…
|
||||
spellCheck.dictionaryManager.title=Add/Remove Dictionaries
|
||||
spellCheck.dictionaryManager.updateAvailable=%S (update available)
|
||||
spellCheck.dictionaryManager.error.unableToInstall=Unable to install “%S”:
|
||||
spellCheck.checkSpelling=Revisa l'ortografia
|
||||
spellCheck.addRemoveDictionaries=Afegeix/Suprimeix diccionaris…
|
||||
spellCheck.dictionaryManager.title=Afegeix/Suprimeix diccionaris
|
||||
spellCheck.dictionaryManager.updateAvailable=%S (actualització disponible)
|
||||
spellCheck.dictionaryManager.error.unableToInstall=No s'ha pogut instal·lar «%S»:
|
||||
|
||||
tabs.move=Move Tab
|
||||
tabs.moveToStart=Move to Start
|
||||
tabs.moveToEnd=Move to End
|
||||
tabs.moveToWindow=Move to New Window
|
||||
tabs.duplicate=Duplicate Tab
|
||||
tabs.undoClose=Reopen Closed Tab;Reopen Closed Tabs
|
||||
tabs.closeOther=Close Other Tabs
|
||||
tabs.move=Mou la pestanya
|
||||
tabs.moveToStart=Mou a l'inici
|
||||
tabs.moveToEnd=Mou al final
|
||||
tabs.moveToWindow=Mou a una finestra nova
|
||||
tabs.duplicate=Duplica la pestanya
|
||||
tabs.undoClose=Torna a obrir la pestanya tancada;Torna a obrir les pestanyes tancades
|
||||
tabs.closeOther=Tanca les altres pestanyes
|
||||
|
|
|
|||
|
|
@ -5,6 +5,12 @@
|
|||
"general_done": {
|
||||
"message": "Hotovo"
|
||||
},
|
||||
"general_yes": {
|
||||
"message": "Ano"
|
||||
},
|
||||
"general_no": {
|
||||
"message": "Ne"
|
||||
},
|
||||
"general_tryAgain": {
|
||||
"message": "Zkusit znovu"
|
||||
},
|
||||
|
|
@ -14,6 +20,9 @@
|
|||
"general_cancel": {
|
||||
"message": "Zrušit"
|
||||
},
|
||||
"general_copyToClipboard": {
|
||||
"message": "Kopírovat do schránky"
|
||||
},
|
||||
"progressWindow_savingTo": {
|
||||
"message": "Ukládám do"
|
||||
},
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@
|
|||
<!ENTITY zotero.preferences.groups.whenCopyingInclude "Při kopírování položek mezi knihovnami zahrnout:">
|
||||
<!ENTITY zotero.preferences.groups.childNotes "dceřiné poznámky">
|
||||
<!ENTITY zotero.preferences.groups.childFiles "dceřiné snímky a importované soubory">
|
||||
<!ENTITY zotero.preferences.groups.annotations "annotations">
|
||||
<!ENTITY zotero.preferences.groups.annotations "anotace">
|
||||
<!ENTITY zotero.preferences.groups.childLinks "dceřiné odkazy">
|
||||
<!ENTITY zotero.preferences.groups.tags "štítky">
|
||||
|
||||
|
|
@ -105,8 +105,8 @@
|
|||
<!ENTITY zotero.preferences.export.citePaperJournalArticleURL.description "Pokud je tato volba neaktivní, Zotero zahrne URL v případě citování článku (z časopisu, magazínu nebo novin) pouze když článek nemá specifikovaný rozsah stran.">
|
||||
|
||||
<!ENTITY zotero.preferences.quickCopy.caption "Rychlé kopírování">
|
||||
<!ENTITY zotero.preferences.quickCopy.itemFormat "Item Format:">
|
||||
<!ENTITY zotero.preferences.quickCopy.noteFormat "Note Format:">
|
||||
<!ENTITY zotero.preferences.quickCopy.itemFormat "Formát položky">
|
||||
<!ENTITY zotero.preferences.quickCopy.noteFormat "Formát poznámky">
|
||||
<!ENTITY zotero.preferences.quickCopy.copyAsHTML "Kopírovat jako HTML">
|
||||
<!ENTITY zotero.preferences.quickCopy.siteEditor.setings "Nastavení dle stránky:">
|
||||
<!ENTITY zotero.preferences.quickCopy.siteEditor.domainPath "Doména/Cesta">
|
||||
|
|
@ -144,7 +144,7 @@
|
|||
<!ENTITY zotero.preferences.proxies.proxyOptions "Možnosti Proxy">
|
||||
<!ENTITY zotero.preferences.proxies.desc_before_link "Zotero bude transparentně přesměrovávat požadavky skrz uložené proxy servery. Více informací najdete v">
|
||||
<!ENTITY zotero.preferences.proxies.desc_link "dokumentaci k proxy">
|
||||
<!ENTITY zotero.preferences.proxies.desc_after_link ".">
|
||||
<!ENTITY zotero.preferences.proxies.desc_after_link "pro další informace.">
|
||||
<!ENTITY zotero.preferences.proxies.transparent "Automaticky přesměrovávat požadavky skrz dříve použité proxy servery.">
|
||||
<!ENTITY zotero.preferences.proxies.autoRecognize "Automaticky rozpoznávat proxované zdroje">
|
||||
<!ENTITY zotero.preferences.proxies.showRedirectNotification "Zobrazovat upozornění při přesměrování přes proxy">
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@
|
|||
|
||||
<!ENTITY copyCitationCmd.label "Kopírovat citaci">
|
||||
<!ENTITY copyBibliographyCmd.label "Kopírovat bibliografii">
|
||||
<!ENTITY copyNoteCmd.label "Copy Note">
|
||||
<!ENTITY copyNoteCmd.label "Kopírovat poznámku">
|
||||
|
||||
<!ENTITY bidiSwitchPageDirectionItem.label "Přepnout směr stránky">
|
||||
<!ENTITY bidiSwitchPageDirectionItem.accesskey "g">
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
<!ENTITY zotero.general.deselectAll "Odznačit vše">
|
||||
<!ENTITY zotero.general.edit "Editovat">
|
||||
<!ENTITY zotero.general.delete "Smazat">
|
||||
<!ENTITY zotero.general.moveToTrash "Move to Trash">
|
||||
<!ENTITY zotero.general.moveToTrash "Přesunout do Koše">
|
||||
<!ENTITY zotero.general.ok "OK">
|
||||
<!ENTITY zotero.general.cancel "Zrušit">
|
||||
<!ENTITY zotero.general.refresh "Obnovit">
|
||||
|
|
@ -128,8 +128,8 @@
|
|||
<!ENTITY zotero.toolbar.attachment.add "Uložit kopii souboru...">
|
||||
<!ENTITY zotero.toolbar.attachment.weblink "Uložit odkaz na aktuální stránku">
|
||||
<!ENTITY zotero.toolbar.attachment.snapshot "Vytvořit snímek aktuální stránky">
|
||||
<!ENTITY zotero.toolbar.context.item "Item">
|
||||
<!ENTITY zotero.toolbar.context.notes "Notes">
|
||||
<!ENTITY zotero.toolbar.context.item "Položka">
|
||||
<!ENTITY zotero.toolbar.context.notes "Poznámky">
|
||||
|
||||
<!ENTITY zotero.tagSelector.noTagsToDisplay "Žádné štítky k zobrazení">
|
||||
<!ENTITY zotero.tagSelector.loadingTags "Nahrávám štítky...">
|
||||
|
|
@ -307,7 +307,7 @@
|
|||
<!ENTITY zotero.context.addStandaloneNoteFromAnnotations "Add Standalone Note from Annotations">
|
||||
<!ENTITY zotero.context.editInWindow "Edit in a Separate Window">
|
||||
|
||||
<!ENTITY zotero.pdfReader.firstPage "First Page">
|
||||
<!ENTITY zotero.pdfReader.firstPage "První strana">
|
||||
<!ENTITY zotero.pdfReader.lastPage "Last Page">
|
||||
<!ENTITY zotero.pdfReader.back "Back">
|
||||
<!ENTITY zotero.pdfReader.forward "Forward">
|
||||
|
|
|
|||
|
|
@ -52,7 +52,7 @@ general.moreInformation=Více informací
|
|||
general.learnMore=Learn More
|
||||
general.seeForMoreInformation=Pro více informací se podívejte na %S
|
||||
general.open=Otevřít %S
|
||||
general.close=Close
|
||||
general.close=Zavřít
|
||||
general.enable=Povolit
|
||||
general.disable=Zakázat
|
||||
general.reset=Resetovat
|
||||
|
|
@ -71,9 +71,9 @@ general.fix=Fix...
|
|||
general.tryAgain=Zkusit znovu
|
||||
general.tryLater=Zkusit později
|
||||
general.showDirectory=Zobrazit adresář
|
||||
general.showInLibrary=Show in Library
|
||||
general.showInLibrary=Ukázat v knihovně
|
||||
general.continue=Pokračovat
|
||||
general.copy=Copy
|
||||
general.copy=Kopírovat
|
||||
general.copyToClipboard=Kopírovat do schránky
|
||||
general.cancel=Zrušit
|
||||
general.clear=Vyčistit
|
||||
|
|
@ -89,9 +89,10 @@ general.back=Back
|
|||
general.languages=Languages
|
||||
general.default=Default
|
||||
general.custom=Custom
|
||||
general.loading=Loading…
|
||||
general.loading=Nahrává se...
|
||||
general.richText=Rich Text
|
||||
general.clearSelection=Clear Selection
|
||||
general.insert=Insert
|
||||
|
||||
general.yellow=Yellow
|
||||
general.red=Red
|
||||
|
|
@ -327,8 +328,11 @@ pane.items.remove.multiple=Opravdu chcete odstranit vybrané položky z této ko
|
|||
pane.items.removeFromPublications.title=Odstranit z Mých publikací
|
||||
pane.items.removeFromPublications=Opravdu chcete odstranit vybranou položku z Mých publikací?
|
||||
pane.items.removeFromPublications.multiple=Opravdu chcete odstranit vybrané položky z Mých publikací?
|
||||
pane.items.menu.addNoteFromAnnotations=Add Note from Annotations
|
||||
pane.items.menu.addNoteFromAnnotations.multiple=Add Notes from Annotations
|
||||
pane.items.removeRecursive.title=Remove from Collection and Subcollections
|
||||
pane.items.removeRecursive=Are you sure you want to remove the selected item from this collection and all subcollections?
|
||||
pane.items.removeRecursive.multiple=Are you sure you want to remove the selected items from this collection and all subcollections?
|
||||
pane.items.menu.addNoteFromAnnotations=Přidat poznámku z anotací
|
||||
pane.items.menu.createNoteFromAnnotations=Create Note from Annotations
|
||||
pane.items.menu.findAvailablePDF=Najít dostupné PDF
|
||||
pane.items.menu.findAvailablePDF.multiple=Najít dostupná PDF
|
||||
pane.items.menu.addToCollection=Add to Collection
|
||||
|
|
@ -338,11 +342,13 @@ pane.items.menu.removeFromPublications=Odstranit položku z Mých publikací
|
|||
pane.items.menu.removeFromPublications.multiple=Odstranit položky z Mých publikací...
|
||||
pane.items.menu.moveToTrash=Přesunout položku do Koše...
|
||||
pane.items.menu.moveToTrash.multiple=Přesunout položky do Koše...
|
||||
pane.items.menu.delete=Delete Permanently…
|
||||
pane.items.menu.delete=Definitivně smazat...
|
||||
pane.items.menu.export=Exportovat vybranou položku...
|
||||
pane.items.menu.export.multiple=Exportovat vybrané položky...
|
||||
pane.items.menu.exportNote=Export Note…
|
||||
pane.items.menu.exportNote.multiple=Export Notes…
|
||||
pane.items.menu.exportPDF=Export PDF…
|
||||
pane.items.menu.exportPDF.multiple=Export PDFs…
|
||||
pane.items.menu.createBib=Vytvořit bibliografii z vybrané položky...
|
||||
pane.items.menu.createBib.multiple=Vytvořit bibliografii z vybraných položek...
|
||||
pane.items.menu.generateReport=Vygenerovat zprávu z vybrané položky...
|
||||
|
|
@ -355,6 +361,8 @@ pane.items.menu.createParent=Create Parent Item…
|
|||
pane.items.menu.createParent.multiple=Create Parent Items
|
||||
pane.items.menu.renameAttachments=Přejmenovat soubor z rodičovských metadat
|
||||
pane.items.menu.renameAttachments.multiple=Přejmenovat soubory z rodičovských metadat
|
||||
pane.items.menu.duplicateAndConvert.toBookSection=Create Book Section
|
||||
pane.items.menu.duplicateAndConvert.toBook=Create Book from Book Section
|
||||
pane.items.showItemInLibrary=Zobrazit položku v Knihovně.
|
||||
|
||||
pane.items.letter.oneParticipant=Dopis pro %S
|
||||
|
|
@ -393,7 +401,7 @@ pane.item.switchFieldMode.two=Přepnout na více polí
|
|||
pane.item.creator.moveToTop=Přesunout nahoru
|
||||
pane.item.creator.moveUp=Posunout nahoru
|
||||
pane.item.creator.moveDown=Posunout dolů
|
||||
pane.item.notes.allNotes=All Notes
|
||||
pane.item.notes.allNotes=Všechny poznámky
|
||||
pane.item.notes.untitled=Nepojmenovaná poznámka
|
||||
pane.item.notes.delete.confirm=Jste si jistý, že chcete smazat tuto poznámku?
|
||||
pane.item.notes.count=%1$S note;%1$S notes
|
||||
|
|
@ -430,15 +438,15 @@ pane.item.related.count.zero=%S souvisejících:
|
|||
pane.item.related.count.singular=%S související:
|
||||
pane.item.related.count.plural=%S souvisejících:
|
||||
pane.item.parentItem=Rodičovská položka:
|
||||
pane.item.viewOnline.tooltip=Go to this item online
|
||||
pane.item.viewOnline.tooltip=Přejít na tuto položku online
|
||||
|
||||
pane.context.noParent=No parent item
|
||||
pane.context.itemNotes=Item Notes
|
||||
pane.context.allNotes=All Notes
|
||||
pane.context.noNotes=No notes
|
||||
pane.context.allNotes=Všechny poznámky
|
||||
pane.context.noNotes=Žádné poznámky
|
||||
|
||||
itemTypes.note=Poznámka
|
||||
itemTypes.annotation=Annotation
|
||||
itemTypes.annotation=Anotace
|
||||
itemTypes.attachment=Příloha
|
||||
itemTypes.book=Kniha
|
||||
itemTypes.bookSection=Kapitola knihy
|
||||
|
|
@ -864,22 +872,7 @@ citation.showEditor=Zobrazit editor...
|
|||
citation.hideEditor=Skrýt editor...
|
||||
citation.citations=Citace
|
||||
citation.notes=Poznámky
|
||||
citation.locator.page=Stránka
|
||||
citation.locator.book=Kniha
|
||||
citation.locator.chapter=Kapitola
|
||||
citation.locator.column=Sloupec
|
||||
citation.locator.figure=Obrázek
|
||||
citation.locator.folio=Složka
|
||||
citation.locator.issue=Číslo
|
||||
citation.locator.line=Řádek
|
||||
citation.locator.note=Poznámka
|
||||
citation.locator.opus=Opus
|
||||
citation.locator.paragraph=Odstavec
|
||||
citation.locator.part=Část
|
||||
citation.locator.section=Sekce
|
||||
citation.locator.subverbo=Pod heslem
|
||||
citation.locator.volume=Ročník
|
||||
citation.locator.verse=Verš
|
||||
citation.locator.timestamp=Timestamp
|
||||
|
||||
report.title.default=Zotero report
|
||||
report.parentItem=Rodičovská položka:
|
||||
|
|
@ -1005,7 +998,7 @@ sync.skipGroup=Přeskočit skupinu
|
|||
sync.removeGroupsAndSync=Odstranit skupinu a synchronizovat
|
||||
|
||||
sync.reminder.setUp.message=Back up your library with %S syncing.
|
||||
sync.reminder.setUp.action=Set Up Syncing
|
||||
sync.reminder.setUp.action=Nastavení synchronizace
|
||||
sync.reminder.autoSync.message=%S hasn’t synced in a while. Do you want to enable automatic syncing?
|
||||
|
||||
sync.error.usernameNotSet=Uživatelské jméno není nastaveno
|
||||
|
|
@ -1293,9 +1286,9 @@ retraction.citationWarning=Ve vašem dokumentu byly odvoláno publikování cita
|
|||
retraction.citationWarning.dontWarn=Varování k této položce mi příště nezobrazujte
|
||||
|
||||
noteEditor.annotationsDateLine=(%S)
|
||||
noteEditor.cut=Cut
|
||||
noteEditor.copy=Copy
|
||||
noteEditor.paste=Paste
|
||||
noteEditor.cut=Vyjmout
|
||||
noteEditor.copy=Kopírovat
|
||||
noteEditor.paste=Vložit
|
||||
noteEditor.rightToLeft=Right to Left
|
||||
noteEditor.leftToRight=Left to Right
|
||||
noteEditor.updateNotice=This note was edited with a newer version of %1$S.\nPlease update %1$S to make changes.
|
||||
|
|
@ -1303,21 +1296,22 @@ noteEditor.enterLink=Enter Link
|
|||
noteEditor.heading1=Heading 1
|
||||
noteEditor.heading2=Heading 2
|
||||
noteEditor.heading3=Heading 3
|
||||
noteEditor.paragraph=Paragraph
|
||||
noteEditor.paragraph=Odstavec
|
||||
noteEditor.monospaced=Monospaced
|
||||
noteEditor.bulletList=Bulleted List
|
||||
noteEditor.orderedList=Numbered List
|
||||
noteEditor.blockquote=Block Quote
|
||||
noteEditor.mathBlock=Math Block
|
||||
noteEditor.formatText=Format Text
|
||||
noteEditor.highlightText=Highlight Text
|
||||
noteEditor.removeColor=Remove Color
|
||||
noteEditor.bold=Bold
|
||||
noteEditor.italic=Italic
|
||||
noteEditor.underline=Underline
|
||||
noteEditor.highlightText=Zvýraznit text
|
||||
noteEditor.removeColor=Odstranit barvu
|
||||
noteEditor.bold=Tučné
|
||||
noteEditor.italic=Kurzíva
|
||||
noteEditor.underline=Podtržené
|
||||
noteEditor.strikethrough=Strikethrough
|
||||
noteEditor.subscript=Subscript
|
||||
noteEditor.superscript=Superscript
|
||||
noteEditor.returnToNotesList=Return to Notes List
|
||||
noteEditor.subscript=Spodní index
|
||||
noteEditor.superscript=Horní index
|
||||
noteEditor.returnToNotesList=Návrat do seznamu poznámek
|
||||
noteEditor.insertLink=Insert Link
|
||||
noteEditor.clearFormatting=Clear Formatting
|
||||
noteEditor.align=Align
|
||||
|
|
@ -1325,8 +1319,8 @@ noteEditor.alignLeft=Align Left
|
|||
noteEditor.alignCenter=Align Center
|
||||
noteEditor.alignRight=Align Right
|
||||
noteEditor.insertCitation=Insert Citation
|
||||
noteEditor.more=More
|
||||
noteEditor.find=Find
|
||||
noteEditor.more=Více
|
||||
noteEditor.find=Najít
|
||||
noteEditor.replace=Replace
|
||||
noteEditor.previous=Previous
|
||||
noteEditor.next=Next
|
||||
|
|
@ -1338,16 +1332,20 @@ noteEditor.editCitation=Edit Citation
|
|||
noteEditor.showOnPage=Show on Page
|
||||
noteEditor.unlink=Unlink
|
||||
noteEditor.set=Set
|
||||
noteEditor.edit=Edit
|
||||
noteEditor.edit=Upravit
|
||||
noteEditor.addCitation=Add Citation
|
||||
noteEditor.removeCitation=Hide Citation
|
||||
noteEditor.findAndReplace=Find and Replace
|
||||
noteEditor.editInWindow=Edit in a Separate Window
|
||||
noteEditor.applyAnnotationColors=Show Annotation Colors
|
||||
noteEditor.removeAnnotationColors=Hide Annotation Colors
|
||||
noteEditor.applyAnnotationColors=Zobrazit barvu anotací
|
||||
noteEditor.removeAnnotationColors=Skrýt barvu anotací
|
||||
noteEditor.addCitations=Show Annotation Citations
|
||||
noteEditor.removeCitations=Hide Annotation Citations
|
||||
noteEditor.insertTable=Insert Table
|
||||
noteEditor.image=Obrázek
|
||||
noteEditor.math=Math
|
||||
noteEditor.table=Table
|
||||
noteEditor.copyImage=Copy Image
|
||||
noteEditor.saveImageAs=Save Image As…
|
||||
noteEditor.insertRowBefore=Insert Row Above
|
||||
noteEditor.insertRowAfter=Insert Row Below
|
||||
noteEditor.insertColumnBefore=Insert Column Left
|
||||
|
|
@ -1356,18 +1354,18 @@ noteEditor.deleteRow=Delete Row
|
|||
noteEditor.deleteColumn=Delete Column
|
||||
noteEditor.deleteTable=Delete Table
|
||||
|
||||
pdfReader.annotations=Annotations
|
||||
pdfReader.showAnnotations=Show Annotations
|
||||
pdfReader.searchAnnotations=Search Annotations
|
||||
pdfReader.annotations=Anotace
|
||||
pdfReader.showAnnotations=Zobrazit anotace
|
||||
pdfReader.searchAnnotations=Vyhledat anotace
|
||||
pdfReader.noAnnotations=Create an annotation to see it in the sidebar
|
||||
pdfReader.addText=Add extracted text
|
||||
pdfReader.noExtractedText=No extracted text
|
||||
pdfReader.addComment=Add comment
|
||||
pdfReader.addTags=Add tags…
|
||||
pdfReader.highlightText=Highlight Text
|
||||
pdfReader.addNote=Add Note
|
||||
pdfReader.highlightText=Zvýraznit text
|
||||
pdfReader.addNote=Přidat poznámku
|
||||
pdfReader.selectArea=Select Area
|
||||
pdfReader.pickColor=Pick a Color
|
||||
pdfReader.addToNote=Add to Note
|
||||
pdfReader.addToNote=Přidat do poznámky
|
||||
pdfReader.zoomIn=Zoom In
|
||||
pdfReader.zoomOut=Zoom Out
|
||||
pdfReader.zoomAuto=Automatically Resize
|
||||
|
|
@ -1375,18 +1373,25 @@ pdfReader.zoomPageWidth=Zoom to Page Width
|
|||
pdfReader.zoomPageHeight=Zoom to Page Height
|
||||
pdfReader.nextPage=Next Page
|
||||
pdfReader.previousPage=Previous Page
|
||||
pdfReader.page=Page
|
||||
pdfReader.page=Stránka
|
||||
pdfReader.readOnly=Read-only
|
||||
pdfReader.promptTransferFromPDF.title=Import Annotations
|
||||
pdfReader.promptTransferFromPDF.title=Importovat anotace
|
||||
pdfReader.promptTransferFromPDF.text=Annotations stored in the PDF file will be moved to %1$S.
|
||||
pdfReader.promptTransferToPDF.title=Store Annotations in File
|
||||
pdfReader.promptTransferToPDF.title=Uložit anotace v souboru
|
||||
pdfReader.promptTransferToPDF.text=Annotations will be transferred to the PDF file and will no longer be editable in %S.
|
||||
pdfReader.promptPasswordProtected=The operation is not supported for password-protected PDF files.
|
||||
pdfReader.promptDeletePages.title=Delete Pages
|
||||
pdfReader.promptDeletePages.text=Are you sure you want to delete %1$S page from the PDF file?;Are you sure you want to delete %1$S pages from the PDF file?
|
||||
pdfReader.rotateLeft=Rotate Left
|
||||
pdfReader.rotateRight=Rotate Right
|
||||
pdfReader.rotate180=Rotate 180°
|
||||
pdfReader.editPageNumber=Edit Page Number…
|
||||
pdfReader.editHighlightedText=Edit Highlighted Text
|
||||
pdfReader.copyImage=Copy Image
|
||||
pdfReader.saveImageAs=Save Image As…
|
||||
pdfReader.pageNumberPopupHeader=Change page number for:
|
||||
pdfReader.thisAnnotation=This annotation
|
||||
pdfReader.selectedAnnotations=Selected annotations
|
||||
pdfReader.thisAnnotation=Tato anotace
|
||||
pdfReader.selectedAnnotations=Vybrané anotace
|
||||
pdfReader.thisPage=This page
|
||||
pdfReader.thisPageAndLaterPages=This page and later pages
|
||||
pdfReader.allPages=All pages
|
||||
|
|
|
|||
|
|
@ -5,6 +5,12 @@
|
|||
"general_done": {
|
||||
"message": "Færdig"
|
||||
},
|
||||
"general_yes": {
|
||||
"message": "Ja"
|
||||
},
|
||||
"general_no": {
|
||||
"message": "Nej"
|
||||
},
|
||||
"general_tryAgain": {
|
||||
"message": "Prøv igen"
|
||||
},
|
||||
|
|
@ -14,6 +20,9 @@
|
|||
"general_cancel": {
|
||||
"message": "Annullér"
|
||||
},
|
||||
"general_copyToClipboard": {
|
||||
"message": "Kopiér til udklipsholderen"
|
||||
},
|
||||
"progressWindow_savingTo": {
|
||||
"message": "Gemmer i"
|
||||
},
|
||||
|
|
|
|||
|
|
@ -6,14 +6,14 @@
|
|||
<!ENTITY zotero.general.deselectAll "Fravælg alle">
|
||||
<!ENTITY zotero.general.edit "Rediger">
|
||||
<!ENTITY zotero.general.delete "Slet">
|
||||
<!ENTITY zotero.general.moveToTrash "Move to Trash">
|
||||
<!ENTITY zotero.general.moveToTrash "Flyt til papirkurv">
|
||||
<!ENTITY zotero.general.ok "OK">
|
||||
<!ENTITY zotero.general.cancel "Annullér">
|
||||
<!ENTITY zotero.general.refresh "Opdatér">
|
||||
<!ENTITY zotero.general.saveAs "Gem som...">
|
||||
<!ENTITY zotero.general.options "Indstillinger">
|
||||
<!ENTITY zotero.general.advancedOptions.label "Avancerede indstillinger">
|
||||
<!ENTITY zotero.general.tools "Tools">
|
||||
<!ENTITY zotero.general.tools "Værktøj">
|
||||
<!ENTITY zotero.general.more "Mere">
|
||||
<!ENTITY zotero.general.loading "Indlæser...">
|
||||
<!ENTITY zotero.general.close "Luk">
|
||||
|
|
@ -21,7 +21,7 @@
|
|||
<!ENTITY zotero.general.other "Andet...">
|
||||
<!ENTITY zotero.general.bigger "Bigger">
|
||||
<!ENTITY zotero.general.smaller "Smaller">
|
||||
<!ENTITY zotero.general.reset "Reset">
|
||||
<!ENTITY zotero.general.reset "Nulstil">
|
||||
|
||||
|
||||
<!ENTITY zotero.errorReport.title "Zotero fejlrapport">
|
||||
|
|
@ -128,8 +128,8 @@
|
|||
<!ENTITY zotero.toolbar.attachment.add "Gem kopi af filen...">
|
||||
<!ENTITY zotero.toolbar.attachment.weblink "Gem link til den aktuelle side">
|
||||
<!ENTITY zotero.toolbar.attachment.snapshot "Tag kopi af den aktuelle side">
|
||||
<!ENTITY zotero.toolbar.context.item "Item">
|
||||
<!ENTITY zotero.toolbar.context.notes "Notes">
|
||||
<!ENTITY zotero.toolbar.context.item "Element">
|
||||
<!ENTITY zotero.toolbar.context.notes "Noter">
|
||||
|
||||
<!ENTITY zotero.tagSelector.noTagsToDisplay "Der er ingen mærker at vise">
|
||||
<!ENTITY zotero.tagSelector.loadingTags "Indlæser mærker...">
|
||||
|
|
@ -150,7 +150,7 @@
|
|||
<!ENTITY zotero.lookup.description "Enter ISBNs, DOIs, PMIDs, arXiv IDs, or ADS Bibcodes to add to your library:">
|
||||
<!ENTITY zotero.lookup.button.search "Søg">
|
||||
|
||||
<!ENTITY zotero.createParent.title "Create Parent Item">
|
||||
<!ENTITY zotero.createParent.title "Opret moder-element">
|
||||
<!ENTITY zotero.createParent.button.manual "Manual Entry">
|
||||
|
||||
<!ENTITY zotero.selectitems.title "Vælg elementer">
|
||||
|
|
@ -307,7 +307,7 @@
|
|||
<!ENTITY zotero.context.addStandaloneNoteFromAnnotations "Add Standalone Note from Annotations">
|
||||
<!ENTITY zotero.context.editInWindow "Edit in a Separate Window">
|
||||
|
||||
<!ENTITY zotero.pdfReader.firstPage "First Page">
|
||||
<!ENTITY zotero.pdfReader.firstPage "Første side">
|
||||
<!ENTITY zotero.pdfReader.lastPage "Last Page">
|
||||
<!ENTITY zotero.pdfReader.back "Back">
|
||||
<!ENTITY zotero.pdfReader.forward "Forward">
|
||||
|
|
|
|||
|
|
@ -45,14 +45,14 @@ general.character.plural=tegn
|
|||
general.create=Opret
|
||||
general.delete=Slet
|
||||
general.remove=Fjern
|
||||
general.import=Import
|
||||
general.export=Export
|
||||
general.import=Importér
|
||||
general.export=Eksportér
|
||||
general.update=Update
|
||||
general.moreInformation=Mere information
|
||||
general.learnMore=Learn More
|
||||
general.seeForMoreInformation=Se %S for nærmere oplysninger.
|
||||
general.open=Åbn %S
|
||||
general.close=Close
|
||||
general.close=Luk
|
||||
general.enable=Slå til
|
||||
general.disable=Slå fra
|
||||
general.reset=Nulstil
|
||||
|
|
@ -71,9 +71,9 @@ general.fix=Løs...
|
|||
general.tryAgain=Prøv igen
|
||||
general.tryLater=Prøv igen senere
|
||||
general.showDirectory=Vis mappe
|
||||
general.showInLibrary=Show in Library
|
||||
general.showInLibrary=Vis i bibliotek
|
||||
general.continue=Fortsæt
|
||||
general.copy=Copy
|
||||
general.copy=Kopier
|
||||
general.copyToClipboard=Kopiér til udklipsholderen
|
||||
general.cancel=Annullér
|
||||
general.clear=Ryd
|
||||
|
|
@ -89,9 +89,10 @@ general.back=Back
|
|||
general.languages=Languages
|
||||
general.default=Default
|
||||
general.custom=Custom
|
||||
general.loading=Loading…
|
||||
general.loading=Indlæser...
|
||||
general.richText=Rich Text
|
||||
general.clearSelection=Clear Selection
|
||||
general.insert=Insert
|
||||
|
||||
general.yellow=Yellow
|
||||
general.red=Red
|
||||
|
|
@ -327,8 +328,11 @@ pane.items.remove.multiple=Er du sikker på, du vil slette de valgte elementer f
|
|||
pane.items.removeFromPublications.title=Fjern fra Mine publikationer
|
||||
pane.items.removeFromPublications=Er du sikker på, du vil slette det valgte element fra Mine publikationer?
|
||||
pane.items.removeFromPublications.multiple=Er du sikker på, du vil slette det valgte element fra Mine publikationer?
|
||||
pane.items.removeRecursive.title=Remove from Collection and Subcollections
|
||||
pane.items.removeRecursive=Are you sure you want to remove the selected item from this collection and all subcollections?
|
||||
pane.items.removeRecursive.multiple=Are you sure you want to remove the selected items from this collection and all subcollections?
|
||||
pane.items.menu.addNoteFromAnnotations=Add Note from Annotations
|
||||
pane.items.menu.addNoteFromAnnotations.multiple=Add Notes from Annotations
|
||||
pane.items.menu.createNoteFromAnnotations=Create Note from Annotations
|
||||
pane.items.menu.findAvailablePDF=Find tilgængelig PDF
|
||||
pane.items.menu.findAvailablePDF.multiple=Find tilgængelige PDF'er
|
||||
pane.items.menu.addToCollection=Add to Collection
|
||||
|
|
@ -338,11 +342,13 @@ pane.items.menu.removeFromPublications=Fjern element fra Mine publikationer...
|
|||
pane.items.menu.removeFromPublications.multiple=Fjern elementer fra Mine publikationer...
|
||||
pane.items.menu.moveToTrash=Flyt element til papirkurven...
|
||||
pane.items.menu.moveToTrash.multiple=Flyt elementer til papirkurven...
|
||||
pane.items.menu.delete=Delete Permanently…
|
||||
pane.items.menu.delete=Slet permanent...
|
||||
pane.items.menu.export=Eksportér dette element...
|
||||
pane.items.menu.export.multiple=Eksportér disse elementer...
|
||||
pane.items.menu.exportNote=Export Note…
|
||||
pane.items.menu.exportNote.multiple=Export Notes…
|
||||
pane.items.menu.exportPDF=Export PDF…
|
||||
pane.items.menu.exportPDF.multiple=Export PDFs…
|
||||
pane.items.menu.createBib=Dan en referenceliste ud fra element...
|
||||
pane.items.menu.createBib.multiple=Dan en referenceliste ud fra elementer...
|
||||
pane.items.menu.generateReport=Opret rapport ud fra element...
|
||||
|
|
@ -352,9 +358,11 @@ pane.items.menu.reindexItem.multiple=Indeksér elementer igen
|
|||
pane.items.menu.recognizePDF=Hent metadata for pdf-filen.
|
||||
pane.items.menu.recognizePDF.multiple=Hent metadata for pdf-filerne
|
||||
pane.items.menu.createParent=Create Parent Item…
|
||||
pane.items.menu.createParent.multiple=Create Parent Items
|
||||
pane.items.menu.createParent.multiple=Opret moder-elementer
|
||||
pane.items.menu.renameAttachments=Omdøb fil fra moder-metadata
|
||||
pane.items.menu.renameAttachments.multiple=Omdøb filer fra moder-metadata
|
||||
pane.items.menu.duplicateAndConvert.toBookSection=Create Book Section
|
||||
pane.items.menu.duplicateAndConvert.toBook=Create Book from Book Section
|
||||
pane.items.showItemInLibrary=Vis element i Bibliotek
|
||||
|
||||
pane.items.letter.oneParticipant=Brev til %S
|
||||
|
|
@ -404,8 +412,8 @@ pane.item.attachments.rename.error=Der opstod en fejl under omdøbningen af file
|
|||
pane.item.attachments.fileNotFound.title=Fil ikke fundet
|
||||
pane.item.attachments.fileNotFound.text1=Den vedhæftede fil kunne ikke findes.
|
||||
pane.item.attachments.fileNotFound.text1.path=The attached file could not be found at the following path:
|
||||
pane.item.attachments.fileNotFound.text2.stored=It may have been moved or deleted outside of %1$S, or, if the file was added on another computer, it may not yet have been synced to or from %2$S.
|
||||
pane.item.attachments.fileNotFound.text2.stored.notOnServer=It may have been moved or deleted outside of %1$S, or, if the file was added on another computer, it may not yet have been synced to %2$S.
|
||||
pane.item.attachments.fileNotFound.text2.stored=Den kan være blevet slettet eller flyttet uden for %1$S eller, hvis filen blev tilføjet på en anden computer, er den måske endnu ikke blevet synkroniseret til eller fra %2$S.
|
||||
pane.item.attachments.fileNotFound.text2.stored.notOnServer=Den kan være blevet slettet eller flyttet uden for %1$S eller, hvis filen blev tilføjet på en anden computer, er den måske endnu ikke blevet synkroniseret til eller fra %2$S.
|
||||
pane.item.attachments.fileNotFound.text2.linked=It may have been moved or deleted outside of %1$S, or a Linked Attachment Base Directory may be set incorrectly on one of your computers.
|
||||
pane.item.attachments.delete.confirm=Er du sikker på, du vil slette denne vedhæftning ?
|
||||
pane.item.attachments.count.zero=%S vedhæftninger:
|
||||
|
|
@ -430,7 +438,7 @@ pane.item.related.count.zero=%S relaterede:
|
|||
pane.item.related.count.singular=%S relateret:
|
||||
pane.item.related.count.plural=%S relaterede:
|
||||
pane.item.parentItem=Overordnet element:
|
||||
pane.item.viewOnline.tooltip=Go to this item online
|
||||
pane.item.viewOnline.tooltip=Gå til dette element online
|
||||
|
||||
pane.context.noParent=No parent item
|
||||
pane.context.itemNotes=Item Notes
|
||||
|
|
@ -438,7 +446,7 @@ pane.context.allNotes=All Notes
|
|||
pane.context.noNotes=No notes
|
||||
|
||||
itemTypes.note=Note
|
||||
itemTypes.annotation=Annotation
|
||||
itemTypes.annotation=Annotering
|
||||
itemTypes.attachment=Vedhæftning
|
||||
itemTypes.book=Bog
|
||||
itemTypes.bookSection=Bidrag til bog
|
||||
|
|
@ -864,22 +872,7 @@ citation.showEditor=Vis redaktør...
|
|||
citation.hideEditor=Skjul redaktør...
|
||||
citation.citations=Henvisninger
|
||||
citation.notes=Noter
|
||||
citation.locator.page=Side
|
||||
citation.locator.book=Bog
|
||||
citation.locator.chapter=Kapitel
|
||||
citation.locator.column=Spalte
|
||||
citation.locator.figure=Figur
|
||||
citation.locator.folio=Folio
|
||||
citation.locator.issue=Nummer
|
||||
citation.locator.line=Linje
|
||||
citation.locator.note=Note
|
||||
citation.locator.opus=Værk
|
||||
citation.locator.paragraph=Afsnit
|
||||
citation.locator.part=Del
|
||||
citation.locator.section=Afsnit
|
||||
citation.locator.subverbo=Under ordet
|
||||
citation.locator.volume=Bind
|
||||
citation.locator.verse=Vers
|
||||
citation.locator.timestamp=Timestamp
|
||||
|
||||
report.title.default=Zotero-rapport
|
||||
report.parentItem=Overordnet element:
|
||||
|
|
@ -1005,7 +998,7 @@ sync.skipGroup=Spring gruppe over
|
|||
sync.removeGroupsAndSync=Fjern grupper og synkronisering
|
||||
|
||||
sync.reminder.setUp.message=Back up your library with %S syncing.
|
||||
sync.reminder.setUp.action=Set Up Syncing
|
||||
sync.reminder.setUp.action=Indstil synkronisering
|
||||
sync.reminder.autoSync.message=%S hasn’t synced in a while. Do you want to enable automatic syncing?
|
||||
|
||||
sync.error.usernameNotSet=Brugernavn ikke angivet
|
||||
|
|
@ -1293,9 +1286,9 @@ retraction.citationWarning=A citation in your document has been retracted:
|
|||
retraction.citationWarning.dontWarn=Don’t warn me about this item again
|
||||
|
||||
noteEditor.annotationsDateLine=(%S)
|
||||
noteEditor.cut=Cut
|
||||
noteEditor.copy=Copy
|
||||
noteEditor.paste=Paste
|
||||
noteEditor.cut=Klip
|
||||
noteEditor.copy=Kopier
|
||||
noteEditor.paste=Indsæt
|
||||
noteEditor.rightToLeft=Right to Left
|
||||
noteEditor.leftToRight=Left to Right
|
||||
noteEditor.updateNotice=This note was edited with a newer version of %1$S.\nPlease update %1$S to make changes.
|
||||
|
|
@ -1303,20 +1296,21 @@ noteEditor.enterLink=Enter Link
|
|||
noteEditor.heading1=Heading 1
|
||||
noteEditor.heading2=Heading 2
|
||||
noteEditor.heading3=Heading 3
|
||||
noteEditor.paragraph=Paragraph
|
||||
noteEditor.paragraph=Afsnit
|
||||
noteEditor.monospaced=Monospaced
|
||||
noteEditor.bulletList=Bulleted List
|
||||
noteEditor.orderedList=Numbered List
|
||||
noteEditor.blockquote=Block Quote
|
||||
noteEditor.mathBlock=Math Block
|
||||
noteEditor.formatText=Format Text
|
||||
noteEditor.highlightText=Highlight Text
|
||||
noteEditor.removeColor=Remove Color
|
||||
noteEditor.bold=Bold
|
||||
noteEditor.italic=Italic
|
||||
noteEditor.underline=Underline
|
||||
noteEditor.highlightText=Marker tekst
|
||||
noteEditor.removeColor=Fjern farve
|
||||
noteEditor.bold=Fed
|
||||
noteEditor.italic=Kursiv
|
||||
noteEditor.underline=Understreg
|
||||
noteEditor.strikethrough=Strikethrough
|
||||
noteEditor.subscript=Subscript
|
||||
noteEditor.superscript=Superscript
|
||||
noteEditor.subscript=Sænket skrift
|
||||
noteEditor.superscript=Hævet skrift
|
||||
noteEditor.returnToNotesList=Return to Notes List
|
||||
noteEditor.insertLink=Insert Link
|
||||
noteEditor.clearFormatting=Clear Formatting
|
||||
|
|
@ -1325,7 +1319,7 @@ noteEditor.alignLeft=Align Left
|
|||
noteEditor.alignCenter=Align Center
|
||||
noteEditor.alignRight=Align Right
|
||||
noteEditor.insertCitation=Insert Citation
|
||||
noteEditor.more=More
|
||||
noteEditor.more=Mere
|
||||
noteEditor.find=Find
|
||||
noteEditor.replace=Replace
|
||||
noteEditor.previous=Previous
|
||||
|
|
@ -1338,7 +1332,7 @@ noteEditor.editCitation=Edit Citation
|
|||
noteEditor.showOnPage=Show on Page
|
||||
noteEditor.unlink=Unlink
|
||||
noteEditor.set=Set
|
||||
noteEditor.edit=Edit
|
||||
noteEditor.edit=Rediger
|
||||
noteEditor.addCitation=Add Citation
|
||||
noteEditor.removeCitation=Hide Citation
|
||||
noteEditor.findAndReplace=Find and Replace
|
||||
|
|
@ -1347,7 +1341,11 @@ noteEditor.applyAnnotationColors=Show Annotation Colors
|
|||
noteEditor.removeAnnotationColors=Hide Annotation Colors
|
||||
noteEditor.addCitations=Show Annotation Citations
|
||||
noteEditor.removeCitations=Hide Annotation Citations
|
||||
noteEditor.insertTable=Insert Table
|
||||
noteEditor.image=Grafik
|
||||
noteEditor.math=Math
|
||||
noteEditor.table=Table
|
||||
noteEditor.copyImage=Copy Image
|
||||
noteEditor.saveImageAs=Save Image As…
|
||||
noteEditor.insertRowBefore=Insert Row Above
|
||||
noteEditor.insertRowAfter=Insert Row Below
|
||||
noteEditor.insertColumnBefore=Insert Column Left
|
||||
|
|
@ -1360,11 +1358,11 @@ pdfReader.annotations=Annotations
|
|||
pdfReader.showAnnotations=Show Annotations
|
||||
pdfReader.searchAnnotations=Search Annotations
|
||||
pdfReader.noAnnotations=Create an annotation to see it in the sidebar
|
||||
pdfReader.addText=Add extracted text
|
||||
pdfReader.noExtractedText=No extracted text
|
||||
pdfReader.addComment=Add comment
|
||||
pdfReader.addTags=Add tags…
|
||||
pdfReader.highlightText=Highlight Text
|
||||
pdfReader.addNote=Add Note
|
||||
pdfReader.highlightText=Marker tekst
|
||||
pdfReader.addNote=Tilføj note
|
||||
pdfReader.selectArea=Select Area
|
||||
pdfReader.pickColor=Pick a Color
|
||||
pdfReader.addToNote=Add to Note
|
||||
|
|
@ -1375,15 +1373,22 @@ pdfReader.zoomPageWidth=Zoom to Page Width
|
|||
pdfReader.zoomPageHeight=Zoom to Page Height
|
||||
pdfReader.nextPage=Next Page
|
||||
pdfReader.previousPage=Previous Page
|
||||
pdfReader.page=Page
|
||||
pdfReader.page=Side
|
||||
pdfReader.readOnly=Read-only
|
||||
pdfReader.promptTransferFromPDF.title=Import Annotations
|
||||
pdfReader.promptTransferFromPDF.text=Annotations stored in the PDF file will be moved to %1$S.
|
||||
pdfReader.promptTransferToPDF.title=Store Annotations in File
|
||||
pdfReader.promptTransferToPDF.text=Annotations will be transferred to the PDF file and will no longer be editable in %S.
|
||||
pdfReader.promptPasswordProtected=The operation is not supported for password-protected PDF files.
|
||||
pdfReader.promptDeletePages.title=Delete Pages
|
||||
pdfReader.promptDeletePages.text=Are you sure you want to delete %1$S page from the PDF file?;Are you sure you want to delete %1$S pages from the PDF file?
|
||||
pdfReader.rotateLeft=Rotate Left
|
||||
pdfReader.rotateRight=Rotate Right
|
||||
pdfReader.rotate180=Rotate 180°
|
||||
pdfReader.editPageNumber=Edit Page Number…
|
||||
pdfReader.editHighlightedText=Edit Highlighted Text
|
||||
pdfReader.copyImage=Copy Image
|
||||
pdfReader.saveImageAs=Save Image As…
|
||||
pdfReader.pageNumberPopupHeader=Change page number for:
|
||||
pdfReader.thisAnnotation=This annotation
|
||||
pdfReader.selectedAnnotations=Selected annotations
|
||||
|
|
|
|||
|
|
@ -311,8 +311,8 @@
|
|||
<!ENTITY zotero.pdfReader.lastPage "Letzte Seite">
|
||||
<!ENTITY zotero.pdfReader.back "Zurück">
|
||||
<!ENTITY zotero.pdfReader.forward "Vorwärts">
|
||||
<!ENTITY zotero.pdfReader.rotateClockwise "Drehe im Uhrzeigersinn">
|
||||
<!ENTITY zotero.pdfReader.rotateCounterclockwise "Drehe gegen den Uhrzeigersinn">
|
||||
<!ENTITY zotero.pdfReader.rotateClockwise "Im Uhrzeigersinn drehen">
|
||||
<!ENTITY zotero.pdfReader.rotateCounterclockwise "Gegen den Uhrzeigersinn drehen">
|
||||
<!ENTITY zotero.pdfReader.handTool "Hand-Werkzeug">
|
||||
<!ENTITY zotero.pdfReader.verticalScrolling "Vertikale Seitenanordnung">
|
||||
<!ENTITY zotero.pdfReader.horizontalScrolling "Horizontale Seitenanordnung">
|
||||
|
|
|
|||
|
|
@ -92,6 +92,7 @@ general.custom=Benutzerdefiniert
|
|||
general.loading=Lädt...
|
||||
general.richText=Rich Text
|
||||
general.clearSelection=Auswahl aufheben
|
||||
general.insert=Insert
|
||||
|
||||
general.yellow=Gelb
|
||||
general.red=Rot
|
||||
|
|
@ -111,8 +112,8 @@ about.createdBy=%1$S ist ein Projekt von %2$S und wird von einer [globalen Commu
|
|||
about.openSource=%S ist eine [Open-Source-Software] und hängt ab von vielen [außergewöhnlichen Open-Source-Projekten].
|
||||
about.getInvolved=Möchten Sie helfen? [Beteiligen Sie sich] gleich heute!
|
||||
|
||||
punctuation.openingQMark="
|
||||
punctuation.closingQMark="
|
||||
punctuation.openingQMark=„
|
||||
punctuation.closingQMark=“
|
||||
punctuation.colon=:
|
||||
punctuation.ellipsis=…
|
||||
|
||||
|
|
@ -157,7 +158,7 @@ attachmentBasePath.clearBasePath.title=Auf absolute Pfade zurücksetzen
|
|||
attachmentBasePath.clearBasePath.message=Neue verlinkte Dateianhänge werden mit absoluten Pfaden gespeichert.
|
||||
attachmentBasePath.clearBasePath.existingAttachments.singular=Ein Dateianhang im alten Basisverzeichnis wird zu einem absoluten Pfad konvertiert
|
||||
attachmentBasePath.clearBasePath.existingAttachments.plural=%S Dateinanhänge im alten Basisverzeichnis werden zu absoluten Pfaden konvertiert
|
||||
attachmentBasePath.clearBasePath.button=Basisverzeichnis Einstellungen löschen
|
||||
attachmentBasePath.clearBasePath.button=Basisverzeichnis-Einstellungen löschen
|
||||
|
||||
dataDir.dirCannotBeCreated=Das %S-Datenverzeichnis (%S) kann nicht erstellt werden.
|
||||
dataDir.checkDirWriteAccess=Stellen Sie sicher, dass Sie Schreibberechtigungen für dieses Verzeichnis haben, und, dass Sicherheitssoftware das Schreiben von %S auf der Festplatte nicht verhindert.
|
||||
|
|
@ -171,17 +172,17 @@ dataDir.useNewLocation=Neuen Ort verwenden
|
|||
dataDir.previousDir=Vorheriger Ordner:
|
||||
dataDir.default=Standard (%S)
|
||||
dataDir.useDefaultLocation=Standardverzeichnis benutzen
|
||||
dataDir.selectDir=Zotero-Daten-Ordner auswählen
|
||||
dataDir.selectNewDir=Wählen Sie ein neues %S Daten-Verzeichnis
|
||||
dataDir.selectDir=Zotero-Datenverzeichnis auswählen
|
||||
dataDir.selectNewDir=Wählen Sie ein neues %S Datenverzeichnis
|
||||
dataDir.changeDataDirectory=Datenverzeichnis ändern...
|
||||
dataDir.chooseNewDataDirectory=Wählen Sie das neue Daten-Verzeichnis
|
||||
dataDir.chooseNewDataDirectory=Wählen Sie das neue Datenverzeichnis
|
||||
dataDir.cannotBeSetWithAlternative=Das Daten-Verzeichnis kann nicht auf ein "%S"-Verzeichnis gesetzt werden. Meinten Sie %S?
|
||||
dataDir.cannotBeLinkedAttachmentBaseDirectory=Das Daten-Verzeichnis kann nicht auf den gleichen Speicherort wie das Basisverzeichnis für verlinkte Anhänge eingestellt werden.
|
||||
dataDir.unsafeLocation.selected.cloud=Das Speichern des Daten-Verzeichnisses in einem Cloud-Verzeichnis führt mit hoher Wahrscheinlichkeit zu einer Beschädigung Ihrer Datenbank.
|
||||
dataDir.unsafeLocation.selected.areYouSure=Sind Sie sicher, dass Sie diesen Speicherort nutzen möchten?
|
||||
dataDir.unsafeLocation.existing.cloud=Ihr %S-Daten-Verzeichnis scheint in einem Cloud-Speicherordner zu liegen, was mit hoher Wahrscheinlichkeit zu einer Beschädigung Ihrer Datenbank führt.
|
||||
dataDir.unsafeLocation.existing.chooseDifferent=Möchten Sie ein anderes Verzeichnis wählen?
|
||||
dataDir.selectedDirNonEmpty.title=Ordner nicht leer
|
||||
dataDir.selectedDirNonEmpty.title=Verzeichnis nicht leer
|
||||
dataDir.selectedDirNonEmpty.text=Der Ordner, den Sie ausgewählt haben, ist nicht leer und scheint kein Zotero-Daten-Verzeichnis zu sein.\n\nDie Zotero-Dateien trotzdem in diesem Ordner anlegen?
|
||||
dataDir.mustSelectEmpty.title=Verzeichnis ist nicht leer
|
||||
dataDir.mustSelectEmpty.text=Das Verzeichnis, das Sie ausgewählt haben, ist nicht leer. Sie müssen ein leeres Verzeichnis auswählen um fortzufahren.
|
||||
|
|
@ -189,7 +190,7 @@ dataDir.selectedDirEmpty.title=Verzeichnis ist leer
|
|||
dataDir.selectedDirEmpty.text=Das ausgewählte Verzeichnis ist leer. Um ein bestehendes Zotero Datenverzeichnis zu verschieben, müssen Sie die Dateien manuell aus dem bestehenden Verzeichnis an den neuen Speicherort verschieben, nachdem %1$S geschlossen wurde.
|
||||
dataDir.selectedDirEmpty.useNewDir=Das neue Verzeichnis verwenden?
|
||||
dataDir.moveFilesToNewLocation=Sie sollten die Dateien aus Ihrem Zotero-Datenverzeichnis an den neuen Speicherort verschieben, bevor Sie %1$S erneut öffnen.
|
||||
dataDir.incompatibleDbVersion.title=Datenbank Version ist nicht kompatibel
|
||||
dataDir.incompatibleDbVersion.title=Datenbankversion ist nicht kompatibel
|
||||
dataDir.incompatibleDbVersion.text=Das ausgewählte Datenverzeichnis ist zu alt um dies mit dieser Version von Zotero zu nutzen. Führen sie zuerst ein Upgrade des Datenverzeichnis unter Zuhilfenahme von Zotero 4.0 für Firefox durch, oder wählen sie ein anderes Datenverzeichnis für Zotero aus.
|
||||
dataDir.migration.inProgress=Datenmigration wird durchgeführt...
|
||||
dataDir.migration.failure.title=Fehler bei der Migration des Datenverzeichnis
|
||||
|
|
@ -201,7 +202,7 @@ dataDir.migration.failure.partial.showDirectoriesAndQuit=Verzeichnisse anzeigen
|
|||
dataDir.migration.failure.full.automatic.text1=%S hat versucht das Daten-Verzeichnis in ein neues Standard-Verzeichnis zu verschieben, aber die Migration konnte nicht abgeschlossen werden.
|
||||
dataDir.migration.failure.full.automatic.text2=Es ist empfohlen, dass Sie %S schließen und manuell das Datenverzeichnis verschieben.
|
||||
dataDir.migration.failure.full.automatic.newDirOnDifferentDrive=%S hat versucht das Daten-Verzeichnis in ein neues Standard-Verzeichnis zu verschieben, aber das alte Verzeichnis befindet sich auf einer anderen Festplatte und kann nicht automatisch migriert werden.
|
||||
dataDir.migration.failure.full.manual.text1=Der %S Daten-Ordner konnte nicht migriert werden.
|
||||
dataDir.migration.failure.full.manual.text1=Das %S Datenverzeichnis konnte nicht migriert werden.
|
||||
dataDir.migration.failure.full.manual.text2=Es ist empfohlen, dass Sie %S schließen und manuell das Datenverzeichnis an den neuen Standard-Speicherort verschieben.
|
||||
dataDir.migration.failure.full.firefoxOpen=Das Datenverzeichnis kann nicht migriert werden, während Zotero für Firefox offen ist. Bitte schließen Sie Firefox und versuchen Sie es erneut.
|
||||
dataDir.migration.failure.full.current=Aktuelles Verzeichnis: %S
|
||||
|
|
@ -295,7 +296,7 @@ pane.tagSelector.rename.message=Bitte geben Sie einen neuen Namen für dieses Ta
|
|||
pane.tagSelector.delete.title=Tag löschen
|
||||
pane.tagSelector.delete.message=Sind Sie sicher, dass Sie dieses Tag löschen wollen?\n\nDas Tag wird aus allen Einträgen entfernt werden.
|
||||
pane.tagSelector.deleteAutomatic.title=Lösche automatische Tags...
|
||||
pane.tagSelector.deleteAutomatic.message=Sind Sie sicher dass Sie %1$S automatisches Tag in dieser Bibliothek löschen wollen?;Sind Sie sicher dass Sie %1$S automatische Tags in dieser Bibliothek löschen wollen?
|
||||
pane.tagSelector.deleteAutomatic.message=Sind Sie sicher, dass Sie %1$S automatisches Tag in dieser Bibliothek löschen wollen?;Sind Sie sicher, dass Sie %1$S automatische Tags in dieser Bibliothek löschen wollen?
|
||||
pane.tagSelector.numSelected.none=0 Tags ausgewählt
|
||||
pane.tagSelector.numSelected.singular=%S Tag ausgewählt
|
||||
pane.tagSelector.numSelected.plural=%S Tags ausgewählt
|
||||
|
|
@ -327,8 +328,11 @@ pane.items.remove.multiple=Sind Sie sicher, dass Sie die ausgewählten Einträge
|
|||
pane.items.removeFromPublications.title=Bei Meine Veröffentlichungen löschen
|
||||
pane.items.removeFromPublications=Sind Sie sicher, dass Sie den ausgewählten Eintrag aus Meine Veröffentlichungen entfernen möchten?
|
||||
pane.items.removeFromPublications.multiple=Sind Sie sicher, dass Sie die ausgewählten Einträge aus Meine Veröffentlichungen entfernen möchten?
|
||||
pane.items.removeRecursive.title=Aus Sammlung und Untersammlungen entfernen
|
||||
pane.items.removeRecursive=Sind Sie sicher, dass Sie den ausgewählten Eintrag aus dieser Sammlung und allen Untersammlungen entfernen möchten?
|
||||
pane.items.removeRecursive.multiple=Sind Sie sicher, dass Sie die ausgewählten Einträge aus dieser Sammlung und allen Untersammlungen entfernen möchten?
|
||||
pane.items.menu.addNoteFromAnnotations=Notiz aus Anmerkungen hinzufügen
|
||||
pane.items.menu.addNoteFromAnnotations.multiple=Notizen aus Anmerkungen hinzufügen
|
||||
pane.items.menu.createNoteFromAnnotations=Create Note from Annotations
|
||||
pane.items.menu.findAvailablePDF=Verfügbares PDF finden
|
||||
pane.items.menu.findAvailablePDF.multiple=Verfügbare PDFs finden
|
||||
pane.items.menu.addToCollection=Zu Sammlung hinzufügen
|
||||
|
|
@ -343,6 +347,8 @@ pane.items.menu.export=Exportieren...
|
|||
pane.items.menu.export.multiple=Exportieren...
|
||||
pane.items.menu.exportNote=Notiz exportieren…
|
||||
pane.items.menu.exportNote.multiple=Notizen exportieren…
|
||||
pane.items.menu.exportPDF=PDF exportieren…
|
||||
pane.items.menu.exportPDF.multiple=PDFs exportieren…
|
||||
pane.items.menu.createBib=Literaturverzeichnis erstellen
|
||||
pane.items.menu.createBib.multiple=Literaturverzeichnis erstellen
|
||||
pane.items.menu.generateReport=Bericht erstellen...
|
||||
|
|
@ -355,6 +361,8 @@ pane.items.menu.createParent=Übergeordneten Eintrag erstellen…
|
|||
pane.items.menu.createParent.multiple=Übergeordnete Einträge erstellen
|
||||
pane.items.menu.renameAttachments=Datei nach Metadaten des übergeordneten Eintrags umbenennen
|
||||
pane.items.menu.renameAttachments.multiple=Dateien nach Metadaten des übergeordneten Eintrags umbenennen
|
||||
pane.items.menu.duplicateAndConvert.toBookSection=Buchteil erstellen
|
||||
pane.items.menu.duplicateAndConvert.toBook=Buch aus Buchteil erstellen
|
||||
pane.items.showItemInLibrary=Eintrag in Bibliothek anzeigen
|
||||
|
||||
pane.items.letter.oneParticipant=Brief an %S
|
||||
|
|
@ -590,7 +598,7 @@ itemFields.archive=Archiv
|
|||
itemFields.attachmentPDF=PDF-Anhang
|
||||
itemFields.repository=Repositorium
|
||||
itemFields.archiveID=Archiv-ID
|
||||
itemFields.citationKey=Zitationsschlüssel
|
||||
itemFields.citationKey=Zitierschlüssel
|
||||
|
||||
creatorTypes.author=Autor
|
||||
creatorTypes.contributor=Mitarbeiter
|
||||
|
|
@ -864,22 +872,7 @@ citation.showEditor=Editor anzeigen...
|
|||
citation.hideEditor=Editor verbergen...
|
||||
citation.citations=Zitationen
|
||||
citation.notes=Fußnoten
|
||||
citation.locator.page=Seite
|
||||
citation.locator.book=Buch
|
||||
citation.locator.chapter=Kapitel
|
||||
citation.locator.column=Spalte
|
||||
citation.locator.figure=Abbildung
|
||||
citation.locator.folio=Folio
|
||||
citation.locator.issue=Ausgabe
|
||||
citation.locator.line=Zeile
|
||||
citation.locator.note=Fußnote
|
||||
citation.locator.opus=Opus
|
||||
citation.locator.paragraph=Absatz
|
||||
citation.locator.part=Teil
|
||||
citation.locator.section=Abschnitt
|
||||
citation.locator.subverbo=Sub voce
|
||||
citation.locator.volume=Band
|
||||
citation.locator.verse=Vers
|
||||
citation.locator.timestamp=Zeitstempel
|
||||
|
||||
report.title.default=Zotero-Bericht
|
||||
report.parentItem=Übergeordneter Eintrag:
|
||||
|
|
@ -987,8 +980,8 @@ styles.installed=Der Stil "%S" wurde erfolgreich installiert.
|
|||
styles.installError=%S scheint keine gültige Zitierstils-Datei zu sein.
|
||||
styles.validationWarning="%S" ist keine gültige CSL 1.0.2 Zitierstil-Datei, daher funktioniert sie möglicherweise nicht korrekt mit %S.\n\nMöchten Sie dennoch fortfahren?
|
||||
styles.installSourceError=%1$S ruft eine ungültige oder nicht existierenden CSL-Datei unter %2$S als Quelle auf.
|
||||
styles.deleteStyle=Sind Sie sicher, dass Sie den Stil "%1$S" löschen wollen?
|
||||
styles.deleteStyles=Sind Sie sicher, dass Sie die ausgewählten Stile löschen wollen?
|
||||
styles.deleteStyle=Sind Sie sicher, dass Sie den Stil "%1$S" löschen möchten?
|
||||
styles.deleteStyles=Sind Sie sicher, dass Sie die ausgewählten Stile löschen möchten?
|
||||
|
||||
styles.abbreviations.title=Abkürzungen laden
|
||||
styles.abbreviations.parseError=Die Kürzel-Datei "%1$S" ist nicht gültig gemäß JSON.
|
||||
|
|
@ -1308,6 +1301,7 @@ noteEditor.monospaced=Nichtproportional
|
|||
noteEditor.bulletList=Aufzählungsliste
|
||||
noteEditor.orderedList=Nummerierte Liste
|
||||
noteEditor.blockquote=Blockzitat
|
||||
noteEditor.mathBlock=Math Block
|
||||
noteEditor.formatText=Text formatieren
|
||||
noteEditor.highlightText=Text hervorheben
|
||||
noteEditor.removeColor=Farbe entfernen
|
||||
|
|
@ -1347,7 +1341,11 @@ noteEditor.applyAnnotationColors=Anmerkungsfarben anzeigen
|
|||
noteEditor.removeAnnotationColors=Anmerkungsfarben verbergen
|
||||
noteEditor.addCitations=Anmerkungszitationen anzeigen
|
||||
noteEditor.removeCitations=Anmerkungszitationen verbergen
|
||||
noteEditor.insertTable=Tabelle einfügen
|
||||
noteEditor.image=Bild
|
||||
noteEditor.math=Math
|
||||
noteEditor.table=Table
|
||||
noteEditor.copyImage=Copy Image
|
||||
noteEditor.saveImageAs=Save Image As…
|
||||
noteEditor.insertRowBefore=Zeile darüber einfügen
|
||||
noteEditor.insertRowAfter=Zeile darunter einfügen
|
||||
noteEditor.insertColumnBefore=Spalte links einfügen
|
||||
|
|
@ -1360,7 +1358,7 @@ pdfReader.annotations=Anmerkungen
|
|||
pdfReader.showAnnotations=Anmerkungen anzeigen
|
||||
pdfReader.searchAnnotations=Anmerkungen durchsuchen
|
||||
pdfReader.noAnnotations=Fügen Sie eine Anmerkung hinzu, um sie in der Sidebar zu sehen
|
||||
pdfReader.addText=Extrahierten Text hinzufügen
|
||||
pdfReader.noExtractedText=Kein extrahierter Text
|
||||
pdfReader.addComment=Kommentar hinzufügen
|
||||
pdfReader.addTags=Tags hinzufügen…
|
||||
pdfReader.highlightText=Text hervorheben
|
||||
|
|
@ -1382,8 +1380,15 @@ pdfReader.promptTransferFromPDF.text=In der PDF-Datei gespeicherte Anmerkungen w
|
|||
pdfReader.promptTransferToPDF.title=Anmerkungen in der Datei speichern
|
||||
pdfReader.promptTransferToPDF.text=Anmerkungen werden in die PDF-Datei übertragen und können nicht mehr in %S bearbeitet werden.
|
||||
pdfReader.promptPasswordProtected=Dieser Vorgang wird für passwortgeschützte PDF-Dateien nicht unterstützt.
|
||||
pdfReader.promptDeletePages.title=Seiten löschen
|
||||
pdfReader.promptDeletePages.text=Sind Sie sicher, dass Sie %1$S Seite aus der PDF-Datei löschen möchten?;Sind Sie sicher, dass Sie %1$S Seiten aus der PDF-Datei löschen möchten?
|
||||
pdfReader.rotateLeft=Nach links drehen
|
||||
pdfReader.rotateRight=Nach rechts drehen
|
||||
pdfReader.rotate180=Um 180° drehen
|
||||
pdfReader.editPageNumber=Seitenzahl bearbeiten…
|
||||
pdfReader.editHighlightedText=Hervorgehobenen Text bearbeiten
|
||||
pdfReader.copyImage=Copy Image
|
||||
pdfReader.saveImageAs=Save Image As…
|
||||
pdfReader.pageNumberPopupHeader=Seitenzahl ändern für:
|
||||
pdfReader.thisAnnotation=Diese Anmerkung
|
||||
pdfReader.selectedAnnotations=Ausgewählte Anmerkungen
|
||||
|
|
|
|||
|
|
@ -5,6 +5,12 @@
|
|||
"general_done": {
|
||||
"message": "Ολοκληρώθηκε"
|
||||
},
|
||||
"general_yes": {
|
||||
"message": "Ναι"
|
||||
},
|
||||
"general_no": {
|
||||
"message": "Όχι"
|
||||
},
|
||||
"general_tryAgain": {
|
||||
"message": "Ξαναπροσπάθηστε"
|
||||
},
|
||||
|
|
@ -17,6 +23,9 @@
|
|||
"general_pleaseWait": {
|
||||
"message": "Παρακαλώ περιμένετε..."
|
||||
},
|
||||
"general_copyToClipboard": {
|
||||
"message": "Αντιγραφή στο Πρόχειρο"
|
||||
},
|
||||
"progressWindow_savingTo": {
|
||||
"message": "Αποθήκευση σε"
|
||||
},
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
<!ENTITY zotero.general.deselectAll "Αποεπιλογή όλων">
|
||||
<!ENTITY zotero.general.edit "Επεξεργασία">
|
||||
<!ENTITY zotero.general.delete "Διαγραφή">
|
||||
<!ENTITY zotero.general.moveToTrash "Move to Trash">
|
||||
<!ENTITY zotero.general.moveToTrash "Μετακίνηση στον Κάδο απορριμμάτων">
|
||||
<!ENTITY zotero.general.ok "ΟΚ">
|
||||
<!ENTITY zotero.general.cancel "Ακύρωση">
|
||||
<!ENTITY zotero.general.refresh "Ανανέωση">
|
||||
|
|
@ -128,8 +128,8 @@
|
|||
<!ENTITY zotero.toolbar.attachment.add "Αποθήκευση αντιγράφου του αρχείου...">
|
||||
<!ENTITY zotero.toolbar.attachment.weblink "Αποθήκευση Συνδέσμου στην Τρέχουσα Σελίδα">
|
||||
<!ENTITY zotero.toolbar.attachment.snapshot "Λήψη Στιγμιότυπου της Τρέχουσας Σελίδας">
|
||||
<!ENTITY zotero.toolbar.context.item "Item">
|
||||
<!ENTITY zotero.toolbar.context.notes "Notes">
|
||||
<!ENTITY zotero.toolbar.context.item "Είδος">
|
||||
<!ENTITY zotero.toolbar.context.notes "Σημείωση">
|
||||
|
||||
<!ENTITY zotero.tagSelector.noTagsToDisplay "Δεν υπάρχουν ετικέτες προς εμφάνιση">
|
||||
<!ENTITY zotero.tagSelector.loadingTags "Φόρτωση ετικετών...">
|
||||
|
|
@ -307,7 +307,7 @@
|
|||
<!ENTITY zotero.context.addStandaloneNoteFromAnnotations "Add Standalone Note from Annotations">
|
||||
<!ENTITY zotero.context.editInWindow "Edit in a Separate Window">
|
||||
|
||||
<!ENTITY zotero.pdfReader.firstPage "First Page">
|
||||
<!ENTITY zotero.pdfReader.firstPage "Πρώτη Σελίδα">
|
||||
<!ENTITY zotero.pdfReader.lastPage "Last Page">
|
||||
<!ENTITY zotero.pdfReader.back "Back">
|
||||
<!ENTITY zotero.pdfReader.forward "Forward">
|
||||
|
|
|
|||
|
|
@ -52,7 +52,7 @@ general.moreInformation=Περισσότερες πληροφορίες
|
|||
general.learnMore=Learn More
|
||||
general.seeForMoreInformation=Για περισσότερες πληροφορίες δείτε %S.
|
||||
general.open=Άνοιξε %S
|
||||
general.close=Close
|
||||
general.close=Κλείσιμο
|
||||
general.enable=Ενεργοποίηση
|
||||
general.disable=Απενεργοποίηση
|
||||
general.reset=Επανεκκίνηση
|
||||
|
|
@ -71,9 +71,9 @@ general.fix=Διορθώσετε…
|
|||
general.tryAgain=Προσπάθησε Πάλι
|
||||
general.tryLater=Προσπάθησε αργότερα
|
||||
general.showDirectory=Εμφάνιση Καταλόγου
|
||||
general.showInLibrary=Show in Library
|
||||
general.showInLibrary=Εμφάνιση στην Βιβλιοθήκη
|
||||
general.continue=Συνέχεια
|
||||
general.copy=Copy
|
||||
general.copy=Αντιγραφή
|
||||
general.copyToClipboard=Αντιγραφή στο Πρόχειρο
|
||||
general.cancel=Άκυρο
|
||||
general.clear=Καθαρισμός
|
||||
|
|
@ -89,9 +89,10 @@ general.back=Back
|
|||
general.languages=Languages
|
||||
general.default=Default
|
||||
general.custom=Custom
|
||||
general.loading=Loading…
|
||||
general.loading=Φόρτωση...
|
||||
general.richText=Rich Text
|
||||
general.clearSelection=Clear Selection
|
||||
general.insert=Insert
|
||||
|
||||
general.yellow=Yellow
|
||||
general.red=Red
|
||||
|
|
@ -327,8 +328,11 @@ pane.items.remove.multiple=Είστε βέβαιοι ότι θέλετε να κ
|
|||
pane.items.removeFromPublications.title=Κατάργηση από τις Δημοσιεύσεις μου
|
||||
pane.items.removeFromPublications=Είστε βέβαιοι ότι θέλετε να καταργήσετε το επιλεγμένο στοιχείο από τις Δημοσιεύσεις μου;
|
||||
pane.items.removeFromPublications.multiple=Είστε βέβαιοι ότι θέλετε να καταργήσετε τα επιλεγμένα στοιχεία από τις Δημοσιεύσεις μου;
|
||||
pane.items.removeRecursive.title=Remove from Collection and Subcollections
|
||||
pane.items.removeRecursive=Are you sure you want to remove the selected item from this collection and all subcollections?
|
||||
pane.items.removeRecursive.multiple=Are you sure you want to remove the selected items from this collection and all subcollections?
|
||||
pane.items.menu.addNoteFromAnnotations=Add Note from Annotations
|
||||
pane.items.menu.addNoteFromAnnotations.multiple=Add Notes from Annotations
|
||||
pane.items.menu.createNoteFromAnnotations=Create Note from Annotations
|
||||
pane.items.menu.findAvailablePDF=Εύρεση διαθέσιμου αρχείου PDF
|
||||
pane.items.menu.findAvailablePDF.multiple=Εύρεση διαθέσιμων αρχείων PDF
|
||||
pane.items.menu.addToCollection=Add to Collection
|
||||
|
|
@ -338,11 +342,13 @@ pane.items.menu.removeFromPublications=Κατάργηση αντικειμένο
|
|||
pane.items.menu.removeFromPublications.multiple=Κατάργηση αντικειμένων από τις Δημοσιεύσεις μου…
|
||||
pane.items.menu.moveToTrash=Μετακίνηση στοιχείου στον Κάδο απορριμμάτων…
|
||||
pane.items.menu.moveToTrash.multiple=Μετακίνηση στοιχείων στον Κάδο απορριμμάτων…
|
||||
pane.items.menu.delete=Delete Permanently…
|
||||
pane.items.menu.delete=Μόνιμη διαγραφή...;
|
||||
pane.items.menu.export=Export Selected Item...
|
||||
pane.items.menu.export.multiple=Export Selected Items...
|
||||
pane.items.menu.exportNote=Export Note…
|
||||
pane.items.menu.exportNote.multiple=Export Notes…
|
||||
pane.items.menu.exportPDF=Export PDF…
|
||||
pane.items.menu.exportPDF.multiple=Export PDFs…
|
||||
pane.items.menu.createBib=Create Bibliography from Selected Item...
|
||||
pane.items.menu.createBib.multiple=Create Bibliography from Selected Items...
|
||||
pane.items.menu.generateReport=Generate Report from Selected Item...
|
||||
|
|
@ -355,6 +361,8 @@ pane.items.menu.createParent=Δημιουργία γονικού στοιχεί
|
|||
pane.items.menu.createParent.multiple=Δημιουργία γονικών στοιχείων…
|
||||
pane.items.menu.renameAttachments=Μετονομασία Αρχείου από γονικά μεταδεδομένα
|
||||
pane.items.menu.renameAttachments.multiple=Μετονομασία Αρχείων από γονικά μεταδεδομένα
|
||||
pane.items.menu.duplicateAndConvert.toBookSection=Create Book Section
|
||||
pane.items.menu.duplicateAndConvert.toBook=Create Book from Book Section
|
||||
pane.items.showItemInLibrary=Εμφάνιση Στοιχείου στη Βιβλιοθήκη
|
||||
|
||||
pane.items.letter.oneParticipant=Επιστολή προς %S
|
||||
|
|
@ -430,7 +438,7 @@ pane.item.related.count.zero=%S σχετικό:
|
|||
pane.item.related.count.singular=%S σχετικό:
|
||||
pane.item.related.count.plural=%S σχετικό:
|
||||
pane.item.parentItem=Γονικό Στοιχείο:
|
||||
pane.item.viewOnline.tooltip=Go to this item online
|
||||
pane.item.viewOnline.tooltip=Μεταβείτε διαδικτυακά σε αυτό το αντικείμενο
|
||||
|
||||
pane.context.noParent=No parent item
|
||||
pane.context.itemNotes=Item Notes
|
||||
|
|
@ -503,9 +511,9 @@ itemFields.callNumber=Αριθμός κλήσης
|
|||
itemFields.archiveLocation=Τοπ. στο Αρχείο
|
||||
itemFields.distributor=Διανομέας
|
||||
itemFields.extra=Επιπλέον
|
||||
itemFields.journalAbbreviation=Journal Abbr
|
||||
itemFields.journalAbbreviation=Συντομογραφία περιοδικού
|
||||
itemFields.DOI=DOI
|
||||
itemFields.accessDate=Accessed
|
||||
itemFields.accessDate=Πρόσβαση
|
||||
itemFields.seriesTitle=Τίτλος Σειράς
|
||||
itemFields.seriesText=Series Text
|
||||
itemFields.seriesNumber=Αριθμός Σειράς
|
||||
|
|
@ -526,12 +534,12 @@ itemFields.issueDate=Ημερομηνία Έκδοσης
|
|||
itemFields.references=Αναφορές
|
||||
itemFields.legalStatus=Νομική Υπόσταση
|
||||
itemFields.codeNumber=Code Number
|
||||
itemFields.artworkMedium=Medium
|
||||
itemFields.artworkMedium=Μέσο
|
||||
itemFields.number=Αριθμός
|
||||
itemFields.artworkSize=Μέγεθος έργου τέχνης
|
||||
itemFields.libraryCatalog=Κατάλογος Βιβλιοθήκης
|
||||
itemFields.videoRecordingFormat=Μορφή
|
||||
itemFields.interviewMedium=Medium
|
||||
itemFields.interviewMedium=Μέσο
|
||||
itemFields.letterType=Τύπος
|
||||
itemFields.manuscriptType=Τύπος
|
||||
itemFields.mapType=Τύπος
|
||||
|
|
@ -573,7 +581,7 @@ itemFields.applicationNumber=Application Number
|
|||
itemFields.forumTitle=Forum/Listserv Title
|
||||
itemFields.episodeNumber=Αριθμός Επεισοδίου
|
||||
itemFields.blogTitle=Blog Title
|
||||
itemFields.medium=Medium
|
||||
itemFields.medium=Μέσο
|
||||
itemFields.caseName=Case Name
|
||||
itemFields.nameOfAct=Name of Act
|
||||
itemFields.subject=Θέμα
|
||||
|
|
@ -585,7 +593,7 @@ itemFields.numPages=# από Σελίδες
|
|||
itemFields.programTitle=Program Title
|
||||
itemFields.issuingAuthority=Issuing Authority
|
||||
itemFields.filingDate=Filing Date
|
||||
itemFields.genre=Genre
|
||||
itemFields.genre=Είδος
|
||||
itemFields.archive=Αρχείο
|
||||
itemFields.attachmentPDF=PDF Attachment
|
||||
itemFields.repository=Repository
|
||||
|
|
@ -747,7 +755,7 @@ zotero.preferences.advanced.migrateDataDir.directoryWillBeMoved=Your %1$S data d
|
|||
zotero.preferences.advanced.migrateDataDir.appMustBeRestarted=%S must be restarted to complete the migration.
|
||||
zotero.preferences.advanced.migrateDataDir.manualMigration=You can also quit %1$S and move your existing data directory to %2$S manually, which may be faster for larger data directories. %3$S will automatically detect the new location.
|
||||
|
||||
zotero.debugOutputLogging=Debug Output Logging
|
||||
zotero.debugOutputLogging=Αποσφαλμάτωση Καταγραφή Εξόδου
|
||||
zotero.debugOutputLogging.linesLogged=%1$S line logged;%1$S lines logged
|
||||
zotero.debugOutputLogging.dialog.title=Debug Output Submitted
|
||||
zotero.debugOutputLogging.dialog.sent=Debug output has been sent to %S.\n\nThe Debug ID is D%S.
|
||||
|
|
@ -757,7 +765,7 @@ zotero.debugOutputLogging.enabledAfterRestart=Debug output logging will be enabl
|
|||
dragAndDrop.existingFiles=The following files already existed in the destination directory and were not copied:
|
||||
dragAndDrop.filesNotFound=The following files were not found and could not be copied:
|
||||
|
||||
fileInterface.importing=Importing…
|
||||
fileInterface.importing=Εισαγωγή ...
|
||||
fileInterface.importComplete=Import Complete
|
||||
fileInterface.itemsWereImported=%1$S item was imported;%1$S items were imported
|
||||
fileInterface.itemsExported=Exporting items...
|
||||
|
|
@ -828,7 +836,7 @@ searchConditions.interviewMedium=Interview Medium
|
|||
searchConditions.manuscriptType=Manuscript Type
|
||||
searchConditions.presentationType=Presentation Type
|
||||
searchConditions.mapType=Map Type
|
||||
searchConditions.medium=Medium
|
||||
searchConditions.medium=Μέσο
|
||||
searchConditions.artworkMedium=Artwork Medium
|
||||
searchConditions.dateModified=Ημερομηνία Τροποποίησης
|
||||
searchConditions.fulltextContent=Attachment Content
|
||||
|
|
@ -864,22 +872,7 @@ citation.showEditor=Show Editor...
|
|||
citation.hideEditor=Hide Editor...
|
||||
citation.citations=Citations
|
||||
citation.notes=Σημείωση
|
||||
citation.locator.page=Σελίδα
|
||||
citation.locator.book=Βιβλίο
|
||||
citation.locator.chapter=Chapter
|
||||
citation.locator.column=Column
|
||||
citation.locator.figure=Figure
|
||||
citation.locator.folio=Folio
|
||||
citation.locator.issue=Τεύχος
|
||||
citation.locator.line=Line
|
||||
citation.locator.note=Σημείωση
|
||||
citation.locator.opus=Εργασία
|
||||
citation.locator.paragraph=Παράγραφος
|
||||
citation.locator.part=Μέρος
|
||||
citation.locator.section=Ενότητα
|
||||
citation.locator.subverbo=Sub verbo
|
||||
citation.locator.volume=Τόμος
|
||||
citation.locator.verse=Στίχος
|
||||
citation.locator.timestamp=Timestamp
|
||||
|
||||
report.title.default=Αναφορά Zotero
|
||||
report.parentItem=Γονικό Στοιχείο:
|
||||
|
|
@ -1005,7 +998,7 @@ sync.skipGroup=Παράλειψη Ομάδας
|
|||
sync.removeGroupsAndSync=Κατάργηση Ομάδων και Συγχρονισμού
|
||||
|
||||
sync.reminder.setUp.message=Back up your library with %S syncing.
|
||||
sync.reminder.setUp.action=Set Up Syncing
|
||||
sync.reminder.setUp.action=Ρύθμιση Συγχρονισμού
|
||||
sync.reminder.autoSync.message=%S hasn’t synced in a while. Do you want to enable automatic syncing?
|
||||
|
||||
sync.error.usernameNotSet=Το όνομα χρήστη δεν έχει οριστεί
|
||||
|
|
@ -1293,9 +1286,9 @@ retraction.citationWarning=Μια αναφορά στο έγγραφό σας έ
|
|||
retraction.citationWarning.dontWarn=Μην με προειδοποιείτε για το στοιχείο αυτό ξανά
|
||||
|
||||
noteEditor.annotationsDateLine=(%S)
|
||||
noteEditor.cut=Cut
|
||||
noteEditor.copy=Copy
|
||||
noteEditor.paste=Paste
|
||||
noteEditor.cut=Αποκοπή
|
||||
noteEditor.copy=Αντιγραφή
|
||||
noteEditor.paste=Επικόλληση
|
||||
noteEditor.rightToLeft=Right to Left
|
||||
noteEditor.leftToRight=Left to Right
|
||||
noteEditor.updateNotice=This note was edited with a newer version of %1$S.\nPlease update %1$S to make changes.
|
||||
|
|
@ -1303,20 +1296,21 @@ noteEditor.enterLink=Enter Link
|
|||
noteEditor.heading1=Heading 1
|
||||
noteEditor.heading2=Heading 2
|
||||
noteEditor.heading3=Heading 3
|
||||
noteEditor.paragraph=Paragraph
|
||||
noteEditor.paragraph=Παράγραφος
|
||||
noteEditor.monospaced=Monospaced
|
||||
noteEditor.bulletList=Bulleted List
|
||||
noteEditor.orderedList=Numbered List
|
||||
noteEditor.blockquote=Block Quote
|
||||
noteEditor.mathBlock=Math Block
|
||||
noteEditor.formatText=Format Text
|
||||
noteEditor.highlightText=Highlight Text
|
||||
noteEditor.removeColor=Remove Color
|
||||
noteEditor.bold=Bold
|
||||
noteEditor.italic=Italic
|
||||
noteEditor.underline=Underline
|
||||
noteEditor.highlightText=Υπογράμμιση κειμένου
|
||||
noteEditor.removeColor=Απομάκρυνση χρώματος
|
||||
noteEditor.bold=Έντονα
|
||||
noteEditor.italic=Πλάγια
|
||||
noteEditor.underline=Υπογραμμισμένα
|
||||
noteEditor.strikethrough=Strikethrough
|
||||
noteEditor.subscript=Subscript
|
||||
noteEditor.superscript=Superscript
|
||||
noteEditor.subscript=Δείκτης
|
||||
noteEditor.superscript=Εκθέτης
|
||||
noteEditor.returnToNotesList=Return to Notes List
|
||||
noteEditor.insertLink=Insert Link
|
||||
noteEditor.clearFormatting=Clear Formatting
|
||||
|
|
@ -1325,8 +1319,8 @@ noteEditor.alignLeft=Align Left
|
|||
noteEditor.alignCenter=Align Center
|
||||
noteEditor.alignRight=Align Right
|
||||
noteEditor.insertCitation=Insert Citation
|
||||
noteEditor.more=More
|
||||
noteEditor.find=Find
|
||||
noteEditor.more=Περισσότερα
|
||||
noteEditor.find=Εύρεση
|
||||
noteEditor.replace=Replace
|
||||
noteEditor.previous=Previous
|
||||
noteEditor.next=Next
|
||||
|
|
@ -1338,7 +1332,7 @@ noteEditor.editCitation=Edit Citation
|
|||
noteEditor.showOnPage=Show on Page
|
||||
noteEditor.unlink=Unlink
|
||||
noteEditor.set=Set
|
||||
noteEditor.edit=Edit
|
||||
noteEditor.edit=Επεξεργασία
|
||||
noteEditor.addCitation=Add Citation
|
||||
noteEditor.removeCitation=Hide Citation
|
||||
noteEditor.findAndReplace=Find and Replace
|
||||
|
|
@ -1347,7 +1341,11 @@ noteEditor.applyAnnotationColors=Show Annotation Colors
|
|||
noteEditor.removeAnnotationColors=Hide Annotation Colors
|
||||
noteEditor.addCitations=Show Annotation Citations
|
||||
noteEditor.removeCitations=Hide Annotation Citations
|
||||
noteEditor.insertTable=Insert Table
|
||||
noteEditor.image=Εικόνα
|
||||
noteEditor.math=Math
|
||||
noteEditor.table=Table
|
||||
noteEditor.copyImage=Copy Image
|
||||
noteEditor.saveImageAs=Save Image As…
|
||||
noteEditor.insertRowBefore=Insert Row Above
|
||||
noteEditor.insertRowAfter=Insert Row Below
|
||||
noteEditor.insertColumnBefore=Insert Column Left
|
||||
|
|
@ -1360,11 +1358,11 @@ pdfReader.annotations=Annotations
|
|||
pdfReader.showAnnotations=Show Annotations
|
||||
pdfReader.searchAnnotations=Search Annotations
|
||||
pdfReader.noAnnotations=Create an annotation to see it in the sidebar
|
||||
pdfReader.addText=Add extracted text
|
||||
pdfReader.noExtractedText=No extracted text
|
||||
pdfReader.addComment=Add comment
|
||||
pdfReader.addTags=Add tags…
|
||||
pdfReader.highlightText=Highlight Text
|
||||
pdfReader.addNote=Add Note
|
||||
pdfReader.highlightText=Υπογράμμιση κειμένου
|
||||
pdfReader.addNote=Προσθήκη σημείωσης
|
||||
pdfReader.selectArea=Select Area
|
||||
pdfReader.pickColor=Pick a Color
|
||||
pdfReader.addToNote=Add to Note
|
||||
|
|
@ -1375,15 +1373,22 @@ pdfReader.zoomPageWidth=Zoom to Page Width
|
|||
pdfReader.zoomPageHeight=Zoom to Page Height
|
||||
pdfReader.nextPage=Next Page
|
||||
pdfReader.previousPage=Previous Page
|
||||
pdfReader.page=Page
|
||||
pdfReader.page=Σελίδα
|
||||
pdfReader.readOnly=Read-only
|
||||
pdfReader.promptTransferFromPDF.title=Import Annotations
|
||||
pdfReader.promptTransferFromPDF.text=Annotations stored in the PDF file will be moved to %1$S.
|
||||
pdfReader.promptTransferToPDF.title=Store Annotations in File
|
||||
pdfReader.promptTransferToPDF.text=Annotations will be transferred to the PDF file and will no longer be editable in %S.
|
||||
pdfReader.promptPasswordProtected=The operation is not supported for password-protected PDF files.
|
||||
pdfReader.promptDeletePages.title=Delete Pages
|
||||
pdfReader.promptDeletePages.text=Are you sure you want to delete %1$S page from the PDF file?;Are you sure you want to delete %1$S pages from the PDF file?
|
||||
pdfReader.rotateLeft=Rotate Left
|
||||
pdfReader.rotateRight=Rotate Right
|
||||
pdfReader.rotate180=Rotate 180°
|
||||
pdfReader.editPageNumber=Edit Page Number…
|
||||
pdfReader.editHighlightedText=Edit Highlighted Text
|
||||
pdfReader.copyImage=Copy Image
|
||||
pdfReader.saveImageAs=Save Image As…
|
||||
pdfReader.pageNumberPopupHeader=Change page number for:
|
||||
pdfReader.thisAnnotation=This annotation
|
||||
pdfReader.selectedAnnotations=Selected annotations
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
<!ENTITY zotero.general.deselectAll "Deselect All">
|
||||
<!ENTITY zotero.general.edit "Edit">
|
||||
<!ENTITY zotero.general.delete "Delete">
|
||||
<!ENTITY zotero.general.moveToTrash "Move to Trash">
|
||||
<!ENTITY zotero.general.moveToTrash "Move to Bin">
|
||||
<!ENTITY zotero.general.ok "OK">
|
||||
<!ENTITY zotero.general.cancel "Cancel">
|
||||
<!ENTITY zotero.general.refresh "Refresh">
|
||||
|
|
|
|||
|
|
@ -92,6 +92,7 @@ general.custom=Custom
|
|||
general.loading=Loading…
|
||||
general.richText=Rich Text
|
||||
general.clearSelection=Clear Selection
|
||||
general.insert=Insert
|
||||
|
||||
general.yellow=Yellow
|
||||
general.red=Red
|
||||
|
|
@ -327,8 +328,11 @@ pane.items.remove.multiple=Are you sure you want to remove the selected items fr
|
|||
pane.items.removeFromPublications.title=Remove from My Publications
|
||||
pane.items.removeFromPublications=Are you sure you want to remove the selected item from My Publications?
|
||||
pane.items.removeFromPublications.multiple=Are you sure you want to remove the selected items from My Publications?
|
||||
pane.items.removeRecursive.title=Remove from Collection and Subcollections
|
||||
pane.items.removeRecursive=Are you sure you want to remove the selected item from this collection and all subcollections?
|
||||
pane.items.removeRecursive.multiple=Are you sure you want to remove the selected items from this collection and all subcollections?
|
||||
pane.items.menu.addNoteFromAnnotations=Add Note from Annotations
|
||||
pane.items.menu.addNoteFromAnnotations.multiple=Add Notes from Annotations
|
||||
pane.items.menu.createNoteFromAnnotations=Create Note from Annotations
|
||||
pane.items.menu.findAvailablePDF=Find Available PDF
|
||||
pane.items.menu.findAvailablePDF.multiple=Find Available PDFs
|
||||
pane.items.menu.addToCollection=Add to Collection
|
||||
|
|
@ -343,6 +347,8 @@ pane.items.menu.export=Export Item…
|
|||
pane.items.menu.export.multiple=Export Items…
|
||||
pane.items.menu.exportNote=Export Note…
|
||||
pane.items.menu.exportNote.multiple=Export Notes…
|
||||
pane.items.menu.exportPDF=Export PDF…
|
||||
pane.items.menu.exportPDF.multiple=Export PDFs…
|
||||
pane.items.menu.createBib=Create Bibliography from Item…
|
||||
pane.items.menu.createBib.multiple=Create Bibliography from Items…
|
||||
pane.items.menu.generateReport=Generate Report from Item…
|
||||
|
|
@ -355,6 +361,8 @@ pane.items.menu.createParent=Create Parent Item…
|
|||
pane.items.menu.createParent.multiple=Create Parent Items
|
||||
pane.items.menu.renameAttachments=Rename File from Parent Metadata
|
||||
pane.items.menu.renameAttachments.multiple=Rename Files from Parent Metadata
|
||||
pane.items.menu.duplicateAndConvert.toBookSection=Create Book Section
|
||||
pane.items.menu.duplicateAndConvert.toBook=Create Book from Book Section
|
||||
pane.items.showItemInLibrary=Show Item in Library
|
||||
|
||||
pane.items.letter.oneParticipant=Letter to %S
|
||||
|
|
@ -529,7 +537,7 @@ itemFields.codeNumber=Code Number
|
|||
itemFields.artworkMedium=Medium
|
||||
itemFields.number=Number
|
||||
itemFields.artworkSize=Artwork Size
|
||||
itemFields.libraryCatalog=Library Catalog
|
||||
itemFields.libraryCatalog=Library Catalogue
|
||||
itemFields.videoRecordingFormat=Format
|
||||
itemFields.interviewMedium=Medium
|
||||
itemFields.letterType=Type
|
||||
|
|
@ -864,22 +872,7 @@ citation.showEditor=Show Editor…
|
|||
citation.hideEditor=Hide Editor…
|
||||
citation.citations=Citations
|
||||
citation.notes=Notes
|
||||
citation.locator.page=Page
|
||||
citation.locator.book=Book
|
||||
citation.locator.chapter=Chapter
|
||||
citation.locator.column=Column
|
||||
citation.locator.figure=Figure
|
||||
citation.locator.folio=Folio
|
||||
citation.locator.issue=Issue
|
||||
citation.locator.line=Line
|
||||
citation.locator.note=Note
|
||||
citation.locator.opus=Opus
|
||||
citation.locator.paragraph=Paragraph
|
||||
citation.locator.part=Part
|
||||
citation.locator.section=Section
|
||||
citation.locator.subverbo=Sub verbo
|
||||
citation.locator.volume=Volume
|
||||
citation.locator.verse=Verse
|
||||
citation.locator.timestamp=Timestamp
|
||||
|
||||
report.title.default=Zotero Report
|
||||
report.parentItem=Parent Item:
|
||||
|
|
@ -1308,9 +1301,10 @@ noteEditor.monospaced=Monospaced
|
|||
noteEditor.bulletList=Bulleted List
|
||||
noteEditor.orderedList=Numbered List
|
||||
noteEditor.blockquote=Block Quote
|
||||
noteEditor.mathBlock=Math Block
|
||||
noteEditor.formatText=Format Text
|
||||
noteEditor.highlightText=Highlight Text
|
||||
noteEditor.removeColor=Remove Color
|
||||
noteEditor.removeColor=Remove Colour
|
||||
noteEditor.bold=Bold
|
||||
noteEditor.italic=Italic
|
||||
noteEditor.underline=Underline
|
||||
|
|
@ -1347,7 +1341,11 @@ noteEditor.applyAnnotationColors=Show Annotation Colors
|
|||
noteEditor.removeAnnotationColors=Hide Annotation Colors
|
||||
noteEditor.addCitations=Show Annotation Citations
|
||||
noteEditor.removeCitations=Hide Annotation Citations
|
||||
noteEditor.insertTable=Insert Table
|
||||
noteEditor.image=Image
|
||||
noteEditor.math=Math
|
||||
noteEditor.table=Table
|
||||
noteEditor.copyImage=Copy Image
|
||||
noteEditor.saveImageAs=Save Image As…
|
||||
noteEditor.insertRowBefore=Insert Row Above
|
||||
noteEditor.insertRowAfter=Insert Row Below
|
||||
noteEditor.insertColumnBefore=Insert Column Left
|
||||
|
|
@ -1360,7 +1358,7 @@ pdfReader.annotations=Annotations
|
|||
pdfReader.showAnnotations=Show Annotations
|
||||
pdfReader.searchAnnotations=Search Annotations
|
||||
pdfReader.noAnnotations=Create an annotation to see it in the sidebar
|
||||
pdfReader.addText=Add extracted text
|
||||
pdfReader.noExtractedText=No extracted text
|
||||
pdfReader.addComment=Add comment
|
||||
pdfReader.addTags=Add tags…
|
||||
pdfReader.highlightText=Highlight Text
|
||||
|
|
@ -1382,8 +1380,15 @@ pdfReader.promptTransferFromPDF.text=Annotations stored in the PDF file will be
|
|||
pdfReader.promptTransferToPDF.title=Store Annotations in File
|
||||
pdfReader.promptTransferToPDF.text=Annotations will be transferred to the PDF file and will no longer be editable in %S.
|
||||
pdfReader.promptPasswordProtected=The operation is not supported for password-protected PDF files.
|
||||
pdfReader.promptDeletePages.title=Delete Pages
|
||||
pdfReader.promptDeletePages.text=Are you sure you want to delete %1$S page from the PDF file?;Are you sure you want to delete %1$S pages from the PDF file?
|
||||
pdfReader.rotateLeft=Rotate Left
|
||||
pdfReader.rotateRight=Rotate Right
|
||||
pdfReader.rotate180=Rotate 180°
|
||||
pdfReader.editPageNumber=Edit Page Number…
|
||||
pdfReader.editHighlightedText=Edit Highlighted Text
|
||||
pdfReader.copyImage=Copy Image
|
||||
pdfReader.saveImageAs=Save Image As…
|
||||
pdfReader.pageNumberPopupHeader=Change page number for:
|
||||
pdfReader.thisAnnotation=This annotation
|
||||
pdfReader.selectedAnnotations=Selected annotations
|
||||
|
|
|
|||
|
|
@ -93,6 +93,7 @@ general.custom = Custom
|
|||
general.loading = Loading…
|
||||
general.richText = Rich Text
|
||||
general.clearSelection = Clear Selection
|
||||
general.insert = Insert
|
||||
|
||||
general.yellow = Yellow
|
||||
general.red = Red
|
||||
|
|
@ -328,8 +329,11 @@ pane.items.remove.multiple = Are you sure you want to remove the selected items
|
|||
pane.items.removeFromPublications.title = Remove from My Publications
|
||||
pane.items.removeFromPublications = Are you sure you want to remove the selected item from My Publications?
|
||||
pane.items.removeFromPublications.multiple = Are you sure you want to remove the selected items from My Publications?
|
||||
pane.items.removeRecursive.title = Remove from Collection and Subcollections
|
||||
pane.items.removeRecursive = Are you sure you want to remove the selected item from this collection and all subcollections?
|
||||
pane.items.removeRecursive.multiple = Are you sure you want to remove the selected items from this collection and all subcollections?
|
||||
pane.items.menu.addNoteFromAnnotations = Add Note from Annotations
|
||||
pane.items.menu.addNoteFromAnnotations.multiple = Add Notes from Annotations
|
||||
pane.items.menu.createNoteFromAnnotations = Create Note from Annotations
|
||||
pane.items.menu.findAvailablePDF = Find Available PDF
|
||||
pane.items.menu.findAvailablePDF.multiple = Find Available PDFs
|
||||
pane.items.menu.addToCollection = Add to Collection
|
||||
|
|
@ -344,6 +348,8 @@ pane.items.menu.export = Export Item…
|
|||
pane.items.menu.export.multiple = Export Items…
|
||||
pane.items.menu.exportNote = Export Note…
|
||||
pane.items.menu.exportNote.multiple = Export Notes…
|
||||
pane.items.menu.exportPDF = Export PDF…
|
||||
pane.items.menu.exportPDF.multiple = Export PDFs…
|
||||
pane.items.menu.createBib = Create Bibliography from Item…
|
||||
pane.items.menu.createBib.multiple = Create Bibliography from Items…
|
||||
pane.items.menu.generateReport = Generate Report from Item…
|
||||
|
|
@ -356,6 +362,8 @@ pane.items.menu.createParent = Create Parent Item…
|
|||
pane.items.menu.createParent.multiple = Create Parent Items
|
||||
pane.items.menu.renameAttachments = Rename File from Parent Metadata
|
||||
pane.items.menu.renameAttachments.multiple = Rename Files from Parent Metadata
|
||||
pane.items.menu.duplicateAndConvert.toBookSection = Create Book Section
|
||||
pane.items.menu.duplicateAndConvert.toBook = Create Book from Book Section
|
||||
pane.items.showItemInLibrary = Show Item in Library
|
||||
|
||||
pane.items.letter.oneParticipant = Letter to %S
|
||||
|
|
@ -865,22 +873,7 @@ citation.showEditor = Show Editor…
|
|||
citation.hideEditor = Hide Editor…
|
||||
citation.citations = Citations
|
||||
citation.notes = Notes
|
||||
citation.locator.page = Page
|
||||
citation.locator.book = Book
|
||||
citation.locator.chapter = Chapter
|
||||
citation.locator.column = Column
|
||||
citation.locator.figure = Figure
|
||||
citation.locator.folio = Folio
|
||||
citation.locator.issue = Issue
|
||||
citation.locator.line = Line
|
||||
citation.locator.note = Note
|
||||
citation.locator.opus = Opus
|
||||
citation.locator.paragraph = Paragraph
|
||||
citation.locator.part = Part
|
||||
citation.locator.section = Section
|
||||
citation.locator.subverbo = Sub verbo
|
||||
citation.locator.volume = Volume
|
||||
citation.locator.verse = Verse
|
||||
citation.locator.timestamp = Timestamp
|
||||
|
||||
report.title.default = Zotero Report
|
||||
report.parentItem = Parent Item:
|
||||
|
|
@ -1309,6 +1302,7 @@ noteEditor.monospaced = Monospaced
|
|||
noteEditor.bulletList = Bulleted List
|
||||
noteEditor.orderedList = Numbered List
|
||||
noteEditor.blockquote = Block Quote
|
||||
noteEditor.mathBlock = Math Block
|
||||
noteEditor.formatText = Format Text
|
||||
noteEditor.highlightText = Highlight Text
|
||||
noteEditor.removeColor = Remove Color
|
||||
|
|
@ -1348,7 +1342,11 @@ noteEditor.applyAnnotationColors = Show Annotation Colors
|
|||
noteEditor.removeAnnotationColors = Hide Annotation Colors
|
||||
noteEditor.addCitations = Show Annotation Citations
|
||||
noteEditor.removeCitations = Hide Annotation Citations
|
||||
noteEditor.insertTable = Insert Table
|
||||
noteEditor.image = Image
|
||||
noteEditor.math = Math
|
||||
noteEditor.table = Table
|
||||
noteEditor.copyImage = Copy Image
|
||||
noteEditor.saveImageAs = Save Image As…
|
||||
noteEditor.insertRowBefore = Insert Row Above
|
||||
noteEditor.insertRowAfter = Insert Row Below
|
||||
noteEditor.insertColumnBefore = Insert Column Left
|
||||
|
|
@ -1361,7 +1359,7 @@ pdfReader.annotations = Annotations
|
|||
pdfReader.showAnnotations = Show Annotations
|
||||
pdfReader.searchAnnotations = Search Annotations
|
||||
pdfReader.noAnnotations = Create an annotation to see it in the sidebar
|
||||
pdfReader.addText = Add extracted text
|
||||
pdfReader.noExtractedText = No extracted text
|
||||
pdfReader.addComment = Add comment
|
||||
pdfReader.addTags = Add tags…
|
||||
pdfReader.highlightText = Highlight Text
|
||||
|
|
@ -1383,8 +1381,15 @@ pdfReader.promptTransferFromPDF.text = Annotations stored in the PDF file will b
|
|||
pdfReader.promptTransferToPDF.title = Store Annotations in File
|
||||
pdfReader.promptTransferToPDF.text = Annotations will be transferred to the PDF file and will no longer be editable in %S.
|
||||
pdfReader.promptPasswordProtected = The operation is not supported for password-protected PDF files.
|
||||
pdfReader.promptDeletePages.title = Delete Pages
|
||||
pdfReader.promptDeletePages.text = Are you sure you want to delete %1$S page from the PDF file?;Are you sure you want to delete %1$S pages from the PDF file?
|
||||
pdfReader.rotateLeft = Rotate Left
|
||||
pdfReader.rotateRight = Rotate Right
|
||||
pdfReader.rotate180 = Rotate 180°
|
||||
pdfReader.editPageNumber = Edit Page Number…
|
||||
pdfReader.editHighlightedText = Edit Highlighted Text
|
||||
pdfReader.copyImage = Copy Image
|
||||
pdfReader.saveImageAs = Save Image As…
|
||||
pdfReader.pageNumberPopupHeader = Change page number for:
|
||||
pdfReader.thisAnnotation = This annotation
|
||||
pdfReader.selectedAnnotations = Selected annotations
|
||||
|
|
|
|||
263
chrome/locale/en-US/zotero/zoterobib.json
Normal file
263
chrome/locale/en-US/zotero/zoterobib.json
Normal file
|
|
@ -0,0 +1,263 @@
|
|||
{
|
||||
"zbib.about.CTA": {
|
||||
"string": "Awesome! Let’s start!"
|
||||
},
|
||||
"zbib.about.feature1.paragraph": {
|
||||
"string": "Simply find what you’re looking for in another browser tab and copy the page URL to the ZoteroBib search bar. ZoteroBib can automatically pull in data from newspaper and magazine articles, library catalogs, journal articles, sites like Amazon and Google Books, and much more. You can also paste or type in an ISBN, DOI, PMID, or arXiv ID, or you can search by title."
|
||||
},
|
||||
"zbib.about.feature1.title": {
|
||||
"string": "Adding a bibliography entry"
|
||||
},
|
||||
"zbib.about.feature10.paragraph": {
|
||||
"string": "If you want to edit your bibliography on another device, share it with someone else, or switch to another bibliography, you can generate a link to a copy of the current version on zbib.org. Use the link to retrieve your bibliography later."
|
||||
},
|
||||
"zbib.about.feature10.title": {
|
||||
"string": "Link to this version"
|
||||
},
|
||||
"zbib.about.feature2.paragraph": {
|
||||
"string": "If automatic import doesn’t find what you’re looking for or you’re entering something without a URL or identifier, you can enter the reference information by hand."
|
||||
},
|
||||
"zbib.about.feature2.title": {
|
||||
"string": "Manual entry"
|
||||
},
|
||||
"zbib.about.feature3.paragraph": {
|
||||
"string": "To rename your bibliography, just click its title. A title can be useful if you’re switching between multiple projects or sharing a bibliography with others."
|
||||
},
|
||||
"zbib.about.feature3.title": {
|
||||
"string": "Bibliography title"
|
||||
},
|
||||
"zbib.about.feature4.paragraph": {
|
||||
"string": "You might need to add or change a few fields after adding an item. Click on a bibliography entry to make manual changes."
|
||||
},
|
||||
"zbib.about.feature4.title": {
|
||||
"string": "Editing an item"
|
||||
},
|
||||
"zbib.about.feature5.paragraph": {
|
||||
"string": "Click the { deleteIcon } next to a bibliography entry to delete it. To start a new bibliography, click <i>Delete All</i> to remove all entries."
|
||||
},
|
||||
"zbib.about.feature5.title": {
|
||||
"string": "Deleting items"
|
||||
},
|
||||
"zbib.about.feature6.paragraph": {
|
||||
"string": "Format your bibliography using APA, MLA, Chicago / Turabian, Harvard, or any of the {citationStylesCount, plural, other {#+ other <link>CSL</link> styles} }."
|
||||
},
|
||||
"zbib.about.feature6.title": {
|
||||
"string": "Style selection"
|
||||
},
|
||||
"zbib.about.feature7.paragraph": {
|
||||
"string": "As you’re writing, you can quickly generate parenthetical citations or footnotes /endnotes to paste into your document without typing names or dates by hand."
|
||||
},
|
||||
"zbib.about.feature7.title": {
|
||||
"string": "Copy Citation / Note"
|
||||
},
|
||||
"zbib.about.feature8.paragraph": {
|
||||
"string": "When you’re done, you can copy a formatted bibliography to the clipboard and paste it into your document. You can also export HTML to add to a webpage, an RTF document to open in a word processor, or a RIS or BibTeX file to import into a reference manager."
|
||||
},
|
||||
"zbib.about.feature8.title": {
|
||||
"string": "Export"
|
||||
},
|
||||
"zbib.about.feature9.paragraph": {
|
||||
"string": "ZoteroBib automatically saves your bibliography to your browser’s local storage — you can close the page and return to it anytime. (If you’re using private / incognito mode in your browser, your bibliography will be cleared when you close the window.)"
|
||||
},
|
||||
"zbib.about.feature9.title": {
|
||||
"string": "Autosave"
|
||||
},
|
||||
"zbib.about.questionsFaq": {
|
||||
"string": "<block>Still have questions?</block> Check the <link>FAQ</link>."
|
||||
},
|
||||
"zbib.about.summary": {
|
||||
"string": "ZoteroBib helps you build a bibliography instantly from any computer or device, without creating an account or installing any software. It’s brought to you by the team behind <link>Zotero</link>, the powerful open-source research tool recommended by thousands of universities worldwide, so you can trust it to help you seamlessly add sources and produce perfect bibliographies. If you need to reuse sources across multiple projects or build a shared research library, we recommend using Zotero instead."
|
||||
},
|
||||
"zbib.about.title": {
|
||||
"string": "Cite anything"
|
||||
},
|
||||
"zbib.bibliography.deleteAll": {
|
||||
"string": "Delete All"
|
||||
},
|
||||
"zbib.bibliography.edit": {
|
||||
"string": "Edit Bibliography"
|
||||
},
|
||||
"zbib.bibliography.emptyLead": {
|
||||
"string": "<i>T</i>o add a source, paste or type its URL, ISBN, DOI, PMID, arXiv ID, or title into the search box above"
|
||||
},
|
||||
"zbib.bibliography.emptyTitle": {
|
||||
"string": "<i>Y</i>our bibliography is empty."
|
||||
},
|
||||
"zbib.bibliography.override": {
|
||||
"string": "There is an existing bibliography with {localCitationsCount, plural, one {# entry} other {# entries} } in the editor. If you continue, the existing bibliography will be replaced with this one."
|
||||
},
|
||||
"zbib.citation.copiedFeedback": {
|
||||
"string": "Copied!"
|
||||
},
|
||||
"zbib.citation.copyCitation": {
|
||||
"string": "Copy Citation"
|
||||
},
|
||||
"zbib.citation.copyNote": {
|
||||
"string": "Copy Note"
|
||||
},
|
||||
"zbib.citation.moveDown": {
|
||||
"string": "Move Down"
|
||||
},
|
||||
"zbib.citation.moveToTop": {
|
||||
"string": "Move to Top"
|
||||
},
|
||||
"zbib.citation.moveUp": {
|
||||
"string": "Move Up"
|
||||
},
|
||||
"zbib.citation.omitAuthor": {
|
||||
"string": "Omit Author"
|
||||
},
|
||||
"zbib.citation.preview": {
|
||||
"string": "Preview:"
|
||||
},
|
||||
"zbib.citePrompt": {
|
||||
"string": "Enter a URL, ISBN, DOI, PMID, arXiv ID, or title"
|
||||
},
|
||||
"zbib.confirmCase.confirm": {
|
||||
"string": "OK, I’ll Edit Them"
|
||||
},
|
||||
"zbib.confirmCase.conversionExample": {
|
||||
"string": "<b>ZoteroBib conversion:</b> <i>Circadian mood variations in twitter content</i>"
|
||||
},
|
||||
"zbib.confirmCase.explanation": {
|
||||
"string": "The style you’ve selected requires titles to be in sentence case rather than title case. When you use this style, ZoteroBib will convert the titles of entries to sentence case for you, but you’ll need to manually edit some entries to capitalize proper nouns:"
|
||||
},
|
||||
"zbib.confirmCase.sentenceCaseExample": {
|
||||
"string": "<b>Sentence case:</b> <i>Circadian mood variations in <r>T</r>witter content</i>"
|
||||
},
|
||||
"zbib.confirmCase.title": {
|
||||
"string": "Converting Titles to Sentence Case"
|
||||
},
|
||||
"zbib.confirmCase.titleCaseExample": {
|
||||
"string": "<b>Title case:</b> <i>Circadian Mood Variations in Twitter Content</i>"
|
||||
},
|
||||
"zbib.confirmDeleteAll.confirm": {
|
||||
"string": "Delete"
|
||||
},
|
||||
"zbib.confirmDeleteAll.prompt": {
|
||||
"string": "{bibliographyCount, plural, one {# entry} other {# entries} } will be deleted."
|
||||
},
|
||||
"zbib.confirmDeleteAll.title": {
|
||||
"string": "Clear Bibliography?"
|
||||
},
|
||||
"zbib.creator.moveDown": {
|
||||
"string": "Move Down"
|
||||
},
|
||||
"zbib.creator.moveToTop": {
|
||||
"string": "Move to Top"
|
||||
},
|
||||
"zbib.creator.moveUp": {
|
||||
"string": "Move Up"
|
||||
},
|
||||
"zbib.creator.placeholderDual": {
|
||||
"string": "last name, first name"
|
||||
},
|
||||
"zbib.creator.placeholderSingle": {
|
||||
"string": "name"
|
||||
},
|
||||
"zbib.dialog.confirmAddThisCitation": {
|
||||
"string": "Add this citation to your bibliography?"
|
||||
},
|
||||
"zbib.editor.title": {
|
||||
"string": "Item Editor"
|
||||
},
|
||||
"zbib.error.fetchMetadata": {
|
||||
"string": "Failed to obtain metadata. Please check your connection and try again."
|
||||
},
|
||||
"zbib.export": {
|
||||
"string": "Export"
|
||||
},
|
||||
"zbib.export.copiedFeedback": {
|
||||
"string": "Copied!"
|
||||
},
|
||||
"zbib.footer.follow": {
|
||||
"string": "Stay in touch! Follow <link>@zotero</link> on Twitter."
|
||||
},
|
||||
"zbib.general.add": {
|
||||
"string": "Add"
|
||||
},
|
||||
"zbib.general.cancel": {
|
||||
"string": "Cancel"
|
||||
},
|
||||
"zbib.general.cite": {
|
||||
"string": "Cite"
|
||||
},
|
||||
"zbib.general.close": {
|
||||
"string": "Close"
|
||||
},
|
||||
"zbib.general.delete": {
|
||||
"string": "Delete"
|
||||
},
|
||||
"zbib.general.done": {
|
||||
"string": "Done"
|
||||
},
|
||||
"zbib.general.edit": {
|
||||
"string": "Edit"
|
||||
},
|
||||
"zbib.help": {
|
||||
"string": "Help"
|
||||
},
|
||||
"zbib.linkToThis": {
|
||||
"string": "Link to this version"
|
||||
},
|
||||
"zbib.manualEntry": {
|
||||
"string": "Manual Entry"
|
||||
},
|
||||
"zbib.multipleChoice.more": {
|
||||
"string": "More…"
|
||||
},
|
||||
"zbib.multipleChoice.prompt": {
|
||||
"string": "Please select a citation from the list"
|
||||
},
|
||||
"zbib.multipleItems.confirm": {
|
||||
"string": "Add Selected"
|
||||
},
|
||||
"zbib.multipleItems.prompt": {
|
||||
"string": "Please select a citation from the list"
|
||||
},
|
||||
"zbib.permalink.copyFeedback": {
|
||||
"string": "Copied!"
|
||||
},
|
||||
"zbib.permalink.copyURL": {
|
||||
"string": "Copy URL"
|
||||
},
|
||||
"zbib.permalink.create": {
|
||||
"string": "Create"
|
||||
},
|
||||
"zbib.permalink.view": {
|
||||
"string": "View"
|
||||
},
|
||||
"zbib.review.newItem": {
|
||||
"string": "New item…"
|
||||
},
|
||||
"zbib.saveToZotero.message": {
|
||||
"string": "Once you’ve <a>installed Zotero and the Zotero Connector</a>, you can export your bibliography to Zotero by clicking the “Save to Zotero” button in your browser’s toolbar."
|
||||
},
|
||||
"zbib.saveToZotero.title": {
|
||||
"string": "Save to Zotero"
|
||||
},
|
||||
"zbib.styleInstaller.active": {
|
||||
"string": "Active"
|
||||
},
|
||||
"zbib.styleInstaller.add": {
|
||||
"string": "Add"
|
||||
},
|
||||
"zbib.styleInstaller.default": {
|
||||
"string": "Default"
|
||||
},
|
||||
"zbib.styleInstaller.remove": {
|
||||
"string": "Remove"
|
||||
},
|
||||
"zbib.styleInstaller.searchPlaceholder": {
|
||||
"string": "Enter three or more characters to search"
|
||||
},
|
||||
"zbib.styleInstaller.title": {
|
||||
"string": "Add a Citation Style"
|
||||
},
|
||||
"zbib.styleSelector.otherStyles": {
|
||||
"string": "{citationStylesCount, plural, other {#+ other styles} } available…"
|
||||
},
|
||||
"zbib.whatsThis": {
|
||||
"string": "What’s this?"
|
||||
}
|
||||
}
|
||||
|
|
@ -92,6 +92,7 @@ general.custom=Personalizar
|
|||
general.loading=Cargando...
|
||||
general.richText=Texto enriquecido
|
||||
general.clearSelection=Borrar selección
|
||||
general.insert=Insertar
|
||||
|
||||
general.yellow=Amarillo
|
||||
general.red=Rojo
|
||||
|
|
@ -327,8 +328,11 @@ pane.items.remove.multiple=¿Está seguro de que quiere eliminar los elementos s
|
|||
pane.items.removeFromPublications.title=Eliminar de Mis Publicaciones
|
||||
pane.items.removeFromPublications=¿Está seguro de que quiere eliminar el elemento seleccionado de Mis publicaciones?
|
||||
pane.items.removeFromPublications.multiple=¿Está seguro de que quiere eliminar los elementos seleccionados de Mis publicaciones?
|
||||
pane.items.removeRecursive.title=Eliminar de la colección y subcolecciones
|
||||
pane.items.removeRecursive=¿Está seguro de que quiere eliminar el elemento seleccionado de esta colección y de todas las subcolecciones?
|
||||
pane.items.removeRecursive.multiple=¿Está seguro de que quiere eliminar los elementos seleccionados de esta colección y de todas las subcolecciones?
|
||||
pane.items.menu.addNoteFromAnnotations=Añadir una nota a partir de anotaciones
|
||||
pane.items.menu.addNoteFromAnnotations.multiple=Añadir notas a partir de anotaciones
|
||||
pane.items.menu.createNoteFromAnnotations=Crear nota a partir de anotaciones
|
||||
pane.items.menu.findAvailablePDF=Buscar PDF disponible
|
||||
pane.items.menu.findAvailablePDF.multiple=Buscar PDFs disponibles
|
||||
pane.items.menu.addToCollection=Añadir a la colección
|
||||
|
|
@ -343,6 +347,8 @@ pane.items.menu.export=Exportar elemento...
|
|||
pane.items.menu.export.multiple=Exportar elementos...
|
||||
pane.items.menu.exportNote=Exportar nota....
|
||||
pane.items.menu.exportNote.multiple=Exportar notas...
|
||||
pane.items.menu.exportPDF=Exportar PDF...
|
||||
pane.items.menu.exportPDF.multiple=Exportar PDFs...
|
||||
pane.items.menu.createBib=Crear una bibliografía a partir del elemento...
|
||||
pane.items.menu.createBib.multiple=Crear una bibliografía a partir de los elementos...
|
||||
pane.items.menu.generateReport=Generar un informe a partir del elemento...
|
||||
|
|
@ -355,6 +361,8 @@ pane.items.menu.createParent=Crear elemento contenedor...
|
|||
pane.items.menu.createParent.multiple=Crear elementos contenedores
|
||||
pane.items.menu.renameAttachments=Renombar archivo a partir de los metadatos del contenedor
|
||||
pane.items.menu.renameAttachments.multiple=Renombrar archivos a partir de los metadatos del contenedor
|
||||
pane.items.menu.duplicateAndConvert.toBookSection=Crear sección de un libro
|
||||
pane.items.menu.duplicateAndConvert.toBook=Crear libro desde sección de un libro
|
||||
pane.items.showItemInLibrary=Mostrar elemento en la biblioteca
|
||||
|
||||
pane.items.letter.oneParticipant=Carta a %S
|
||||
|
|
@ -864,22 +872,7 @@ citation.showEditor=Mostrar editor...
|
|||
citation.hideEditor=Ocultar editor...
|
||||
citation.citations=Citas
|
||||
citation.notes=Notas
|
||||
citation.locator.page=Página
|
||||
citation.locator.book=Libro
|
||||
citation.locator.chapter=Capítulo
|
||||
citation.locator.column=Columna
|
||||
citation.locator.figure=Figura
|
||||
citation.locator.folio=Folio
|
||||
citation.locator.issue=Número
|
||||
citation.locator.line=Línea
|
||||
citation.locator.note=Nota
|
||||
citation.locator.opus=Opus
|
||||
citation.locator.paragraph=Párrafo
|
||||
citation.locator.part=Pieza
|
||||
citation.locator.section=Sección
|
||||
citation.locator.subverbo=Sub voce
|
||||
citation.locator.volume=Volumen
|
||||
citation.locator.verse=Versículo
|
||||
citation.locator.timestamp=Marca de tiempo
|
||||
|
||||
report.title.default=Informe de Zotero
|
||||
report.parentItem=Elemento contenedor:
|
||||
|
|
@ -1308,6 +1301,7 @@ noteEditor.monospaced=Monoespaciado
|
|||
noteEditor.bulletList=Lista con viñetas
|
||||
noteEditor.orderedList=Lista numerada
|
||||
noteEditor.blockquote=Bloque de cita
|
||||
noteEditor.mathBlock=Bloque de matemáticas
|
||||
noteEditor.formatText=Formatear texto
|
||||
noteEditor.highlightText=Resaltar texto
|
||||
noteEditor.removeColor=Eliminar color
|
||||
|
|
@ -1342,12 +1336,16 @@ noteEditor.edit=Editar
|
|||
noteEditor.addCitation=Añadir cita
|
||||
noteEditor.removeCitation=Ocultar cita
|
||||
noteEditor.findAndReplace=Buscar y reemplazar
|
||||
noteEditor.editInWindow=Editar en una ventana separada
|
||||
noteEditor.editInWindow=Editar en una ventana aparte
|
||||
noteEditor.applyAnnotationColors=Mostrar los colores de las anotaciones
|
||||
noteEditor.removeAnnotationColors=Ocultar los colores de las anotaciones
|
||||
noteEditor.addCitations=Mostrar citas de anotaciones
|
||||
noteEditor.removeCitations=Ocultar citas de anotaciones
|
||||
noteEditor.insertTable=Insertar tabla
|
||||
noteEditor.image=Imagen
|
||||
noteEditor.math=Matemáticas
|
||||
noteEditor.table=Tabla
|
||||
noteEditor.copyImage=Copiar imagen
|
||||
noteEditor.saveImageAs=Guardar imagen como...
|
||||
noteEditor.insertRowBefore=Insertar fila arriba
|
||||
noteEditor.insertRowAfter=Insertar columna debajo
|
||||
noteEditor.insertColumnBefore=Insertar columna a la izquierda
|
||||
|
|
@ -1360,7 +1358,7 @@ pdfReader.annotations=Anotaciones
|
|||
pdfReader.showAnnotations=Mostrar anotaciones
|
||||
pdfReader.searchAnnotations=Buscar anotaciones
|
||||
pdfReader.noAnnotations=Crear una anotación para verla en la barra lateral
|
||||
pdfReader.addText=Añadir texto extraído
|
||||
pdfReader.noExtractedText=Ningún texto extraído
|
||||
pdfReader.addComment=Añadir comentario
|
||||
pdfReader.addTags=Añadir etiquetas...
|
||||
pdfReader.highlightText=Resaltar texto
|
||||
|
|
@ -1382,8 +1380,15 @@ pdfReader.promptTransferFromPDF.text=Las anotaciones guardadas en el archivo PDF
|
|||
pdfReader.promptTransferToPDF.title=Guardar anotaciones en archivo
|
||||
pdfReader.promptTransferToPDF.text=Las anotaciones se transferirán al archivo PDF y ya no se podrán editar en %S.
|
||||
pdfReader.promptPasswordProtected=La operación no es compatible con archivos PDF protegidos por contraseña.
|
||||
pdfReader.promptDeletePages.title=Borrar páginas
|
||||
pdfReader.promptDeletePages.text=¿Está seguro de que desea borrar la página %1$S del archivo PDF?;¿Está seguro de que desea borrar las páginas %1$S del archivo PDF?
|
||||
pdfReader.rotateLeft=Girar a la izquierda
|
||||
pdfReader.rotateRight=Girar a la derecha
|
||||
pdfReader.rotate180=Rotar 180º
|
||||
pdfReader.editPageNumber=Editar número de página...
|
||||
pdfReader.editHighlightedText=Editar texto resaltado
|
||||
pdfReader.copyImage=Copiar imagen
|
||||
pdfReader.saveImageAs=Guardar imagen como...
|
||||
pdfReader.pageNumberPopupHeader=Cambiar número de página por::
|
||||
pdfReader.thisAnnotation=Esta anotación
|
||||
pdfReader.selectedAnnotations=Anotaciones seleccionadas
|
||||
|
|
|
|||
|
|
@ -69,8 +69,8 @@
|
|||
<!ENTITY zotero.preferences.sync.fileSyncing.tos2 "tingimuste ja piirangutega">
|
||||
<!ENTITY zotero.preferences.sync.librariesToSync "Libraries to Sync">
|
||||
<!ENTITY zotero.preferences.sync.librariesToSync.button "Choose Libraries…">
|
||||
<!ENTITY zotero.preferences.sync.librariesToSync.sync "Sync">
|
||||
<!ENTITY zotero.preferences.sync.librariesToSync.library "Library">
|
||||
<!ENTITY zotero.preferences.sync.librariesToSync.sync "Sünkroonimine">
|
||||
<!ENTITY zotero.preferences.sync.librariesToSync.library "Raamatukogu">
|
||||
<!ENTITY zotero.preferences.sync.reset.warning1 "Järgnevad toimingud on mõeldud vaid erakordseteks ja spetsiifilisteks olukordadeks ja neid ei tohiks kasutada üldiseks probleemide lahendamiseks. Paljudel juhtudel võib algseadistamine lisaprobleeme põhjustada. Vt ">
|
||||
<!ENTITY zotero.preferences.sync.reset.warning2 "Sünkroniseerimise alglaadimise seaded">
|
||||
<!ENTITY zotero.preferences.sync.reset.warning3 "edasine info.">
|
||||
|
|
@ -111,7 +111,7 @@
|
|||
<!ENTITY zotero.preferences.quickCopy.siteEditor.setings "Leheküljespetsiifilised seaded:">
|
||||
<!ENTITY zotero.preferences.quickCopy.siteEditor.domainPath "Domeen/aadress">
|
||||
<!ENTITY zotero.preferences.quickCopy.siteEditor.domainPath.example "(e.g., wikipedia.org)">
|
||||
<!ENTITY zotero.preferences.quickCopy.siteEditor.format "Format">
|
||||
<!ENTITY zotero.preferences.quickCopy.siteEditor.format "Formaat">
|
||||
<!ENTITY zotero.preferences.quickCopy.siteEditor.locale "Keel">
|
||||
<!ENTITY zotero.preferences.quickCopy.dragLimit "Peatada kiirkopeerimine juhul kui lohistatakse rohkem kui">
|
||||
|
||||
|
|
@ -182,7 +182,7 @@
|
|||
<!ENTITY zotero.preferences.dataDir "Lao asukoht">
|
||||
<!ENTITY zotero.preferences.dataDir.useProfile "Kasutada Firefoxi profiili kataloogi">
|
||||
<!ENTITY zotero.preferences.dataDir.custom "Oma valik:">
|
||||
<!ENTITY zotero.preferences.dataDir.choose "Choose…">
|
||||
<!ENTITY zotero.preferences.dataDir.choose "Valida...">
|
||||
<!ENTITY zotero.preferences.dataDir.viaCommandLine "(specified via command line)">
|
||||
<!ENTITY zotero.preferences.dataDir.reveal "Andmete kataloogi näitamine">
|
||||
<!ENTITY zotero.preferences.dataDir.migrate "Migrate To New Default Location…">
|
||||
|
|
|
|||
|
|
@ -25,9 +25,9 @@
|
|||
<!ENTITY closeCmd.accesskey "C">
|
||||
<!ENTITY manageAttachments.label "Manage Attachments">
|
||||
<!ENTITY convertToStored.label "Convert Linked Files to Stored Files…">
|
||||
<!ENTITY importCmd.label "Import…">
|
||||
<!ENTITY importCmd.label "Import...">
|
||||
<!ENTITY importCmd.key "I">
|
||||
<!ENTITY importFromClipboardCmd.label "Import from Clipboard">
|
||||
<!ENTITY importFromClipboardCmd.label "Lõikepuhvrist importimine">
|
||||
<!ENTITY quitApplicationCmdWin.label "Väljuda">
|
||||
<!ENTITY quitApplicationCmdWin.accesskey "x">
|
||||
<!ENTITY quitApplicationCmd.label "Väljuda">
|
||||
|
|
@ -92,14 +92,14 @@
|
|||
<!ENTITY helpFeedbackPage.label "Discussion Forums">
|
||||
<!ENTITY helpFeedbackPage.accesskey "F">
|
||||
|
||||
<!ENTITY helpReportErrors.label "Report Errors…">
|
||||
<!ENTITY helpReportErrors.label "Andke vigadest teada...">
|
||||
<!ENTITY helpReportErrors.accesskey "R">
|
||||
|
||||
<!ENTITY debugOutputLogging.label "Debug Output Logging">
|
||||
<!ENTITY debugOutputLogging.label "Veateadete logimine">
|
||||
<!ENTITY debugOutputLogging.accesskey "L">
|
||||
<!ENTITY debugOutputLogging.submit "Submit Output">
|
||||
<!ENTITY debugOutputLogging.view "View Output">
|
||||
<!ENTITY debugOutputLogging.clear "Clear Output">
|
||||
<!ENTITY debugOutputLogging.view "Logi vaatamine">
|
||||
<!ENTITY debugOutputLogging.clear "Logi tühjendamine">
|
||||
<!ENTITY debugOutputLogging.restartWithLoggingEnabled "Restart with Logging Enabled…">
|
||||
|
||||
<!ENTITY helpCheckForUpdates.label "Uuenduste kontrollimine">
|
||||
|
|
|
|||
|
|
@ -1,27 +1,27 @@
|
|||
<!ENTITY zotero.general.yes "Yes">
|
||||
<!ENTITY zotero.general.no "No">
|
||||
<!ENTITY zotero.general.yes "Jah">
|
||||
<!ENTITY zotero.general.no "Ei">
|
||||
<!ENTITY zotero.general.optional "(Valikuline)">
|
||||
<!ENTITY zotero.general.note "Märkus:">
|
||||
<!ENTITY zotero.general.selectAll "Valida kõik">
|
||||
<!ENTITY zotero.general.deselectAll "Tühistada kõik valikud">
|
||||
<!ENTITY zotero.general.edit "Toimetada">
|
||||
<!ENTITY zotero.general.delete "Kustutada">
|
||||
<!ENTITY zotero.general.moveToTrash "Move to Trash">
|
||||
<!ENTITY zotero.general.moveToTrash "Liiguta Prahi hulka">
|
||||
<!ENTITY zotero.general.ok "OK">
|
||||
<!ENTITY zotero.general.cancel "Tühistada">
|
||||
<!ENTITY zotero.general.refresh "Värskenda">
|
||||
<!ENTITY zotero.general.saveAs "Salvestada kui...">
|
||||
<!ENTITY zotero.general.options "Options">
|
||||
<!ENTITY zotero.general.advancedOptions.label "Advanced Options">
|
||||
<!ENTITY zotero.general.tools "Tools">
|
||||
<!ENTITY zotero.general.more "More">
|
||||
<!ENTITY zotero.general.tools "Tööriistad">
|
||||
<!ENTITY zotero.general.more "Veel">
|
||||
<!ENTITY zotero.general.loading "Loading…">
|
||||
<!ENTITY zotero.general.close "Close">
|
||||
<!ENTITY zotero.general.minimize "Minimize">
|
||||
<!ENTITY zotero.general.close "Sulge">
|
||||
<!ENTITY zotero.general.minimize "Minimeerida">
|
||||
<!ENTITY zotero.general.other "Other…">
|
||||
<!ENTITY zotero.general.bigger "Bigger">
|
||||
<!ENTITY zotero.general.smaller "Smaller">
|
||||
<!ENTITY zotero.general.reset "Reset">
|
||||
<!ENTITY zotero.general.reset "Lähtestamine">
|
||||
|
||||
|
||||
<!ENTITY zotero.errorReport.title "Zotero vearaport">
|
||||
|
|
@ -93,7 +93,7 @@
|
|||
<!ENTITY zotero.toolbar.import.label "Import...">
|
||||
<!ENTITY zotero.toolbar.importFromClipboard "Lõikepuhvrist importimine">
|
||||
<!ENTITY zotero.toolbar.export.label "Raamatukogu eksport...">
|
||||
<!ENTITY zotero.toolbar.rtfScan.label "RTF Scan">
|
||||
<!ENTITY zotero.toolbar.rtfScan.label "RTF Skänn">
|
||||
<!ENTITY zotero.toolbar.timeline.label "Ajajoone loomine">
|
||||
<!ENTITY zotero.toolbar.preferences.label "Eelistused...">
|
||||
<!ENTITY zotero.toolbar.supportAndDocumentation "Abi ja dokumentatsioon">
|
||||
|
|
@ -129,7 +129,7 @@
|
|||
<!ENTITY zotero.toolbar.attachment.weblink "Salvestada link käesolevale leheküljele">
|
||||
<!ENTITY zotero.toolbar.attachment.snapshot "Teha käesolevast leheküljest momentülesvõte">
|
||||
<!ENTITY zotero.toolbar.context.item "Item">
|
||||
<!ENTITY zotero.toolbar.context.notes "Notes">
|
||||
<!ENTITY zotero.toolbar.context.notes "Märkused">
|
||||
|
||||
<!ENTITY zotero.tagSelector.noTagsToDisplay "Lipikud puuduvad">
|
||||
<!ENTITY zotero.tagSelector.loadingTags "Loading tags…">
|
||||
|
|
@ -264,7 +264,7 @@
|
|||
<!ENTITY zotero.feedSettings.title "Feed Settings">
|
||||
<!ENTITY zotero.feedSettings.saveButton.label "Save">
|
||||
<!ENTITY zotero.feedSettings.url.label "URL:">
|
||||
<!ENTITY zotero.feedSettings.title.label "Title:">
|
||||
<!ENTITY zotero.feedSettings.title.label "Pealkiri:">
|
||||
<!ENTITY zotero.feedSettings.refresh.label1 "Update feed every">
|
||||
<!ENTITY zotero.feedSettings.refresh.label2 "hour(s)">
|
||||
<!ENTITY zotero.feedSettings.cleanupUnreadAfter.label1 "Remove unread feed items after">
|
||||
|
|
@ -307,7 +307,7 @@
|
|||
<!ENTITY zotero.context.addStandaloneNoteFromAnnotations "Add Standalone Note from Annotations">
|
||||
<!ENTITY zotero.context.editInWindow "Edit in a Separate Window">
|
||||
|
||||
<!ENTITY zotero.pdfReader.firstPage "First Page">
|
||||
<!ENTITY zotero.pdfReader.firstPage "Esimene lehekülg">
|
||||
<!ENTITY zotero.pdfReader.lastPage "Last Page">
|
||||
<!ENTITY zotero.pdfReader.back "Back">
|
||||
<!ENTITY zotero.pdfReader.forward "Forward">
|
||||
|
|
|
|||
|
|
@ -19,8 +19,8 @@ general.unknownErrorOccurred=Tundmatu viga.
|
|||
general.invalidResponseServer=Server andis vigase vastuse
|
||||
general.tryAgainLater=Palun mõne minuti pärast uuesti proovida
|
||||
general.serverError=Server andis veateate. Palun uuesti proovida.
|
||||
general.pleaseRestart=Please restart %S.
|
||||
general.pleaseRestartAndTryAgain=Please restart %S and try again.
|
||||
general.pleaseRestart=Palun Firefox alglaadida.
|
||||
general.pleaseRestartAndTryAgain=Palun Firefox alglaadida ja siis uuesti proovida.
|
||||
general.checkForUpdate=Uuenduste kontrollimine
|
||||
general.checkForUpdates=Check for Updates
|
||||
general.actionCannotBeUndone=Seda ei saa tagasi võtta.
|
||||
|
|
@ -43,16 +43,16 @@ general.permissionDenied=Juurdepääs keelatud
|
|||
general.character.singular=tähemärk
|
||||
general.character.plural=tähemärgid
|
||||
general.create=Luua
|
||||
general.delete=Delete
|
||||
general.delete=Kustutada
|
||||
general.remove=Eemaldada
|
||||
general.import=Import
|
||||
general.export=Export
|
||||
general.export=Eksport
|
||||
general.update=Update
|
||||
general.moreInformation=More Information
|
||||
general.learnMore=Learn More
|
||||
general.seeForMoreInformation=Edasise info tarbeks vaadake %S.
|
||||
general.open=Open %S
|
||||
general.close=Close
|
||||
general.close=Sulge
|
||||
general.enable=Lubada
|
||||
general.disable=Keelata
|
||||
general.reset=Lähtestamine
|
||||
|
|
@ -71,12 +71,12 @@ general.fix=Fix…
|
|||
general.tryAgain=Try Again
|
||||
general.tryLater=Try Later
|
||||
general.showDirectory=Show Directory
|
||||
general.showInLibrary=Show in Library
|
||||
general.showInLibrary=Näidata raamatukogus
|
||||
general.continue=Continue
|
||||
general.copy=Copy
|
||||
general.copyToClipboard=Copy to Clipboard
|
||||
general.cancel=Cancel
|
||||
general.clear=Clear
|
||||
general.copy=Kopeerida
|
||||
general.copyToClipboard=Lõikepuhvrisse kopeerimine
|
||||
general.cancel=Tühistada
|
||||
general.clear=Tühjendada
|
||||
general.processing=Processing
|
||||
general.finished=Finished
|
||||
general.submitted=Submitted
|
||||
|
|
@ -92,6 +92,7 @@ general.custom=Custom
|
|||
general.loading=Loading…
|
||||
general.richText=Rich Text
|
||||
general.clearSelection=Clear Selection
|
||||
general.insert=Insert
|
||||
|
||||
general.yellow=Yellow
|
||||
general.red=Red
|
||||
|
|
@ -183,7 +184,7 @@ dataDir.unsafeLocation.existing.cloud=Your %S data directory appears to be withi
|
|||
dataDir.unsafeLocation.existing.chooseDifferent=Would you like to choose a different location now?
|
||||
dataDir.selectedDirNonEmpty.title=Kataloog ei ole tühi
|
||||
dataDir.selectedDirNonEmpty.text=Kataloog, mille valisite ei ole ilmselt tühi ja ei ole ka Zotero andmete kataloog.\n\nLuua Zotero failid sellest hoolimata sinna kataloogi?
|
||||
dataDir.mustSelectEmpty.title=Directory Not Empty
|
||||
dataDir.mustSelectEmpty.title=Kataloog ei ole tühi
|
||||
dataDir.mustSelectEmpty.text=The directory you selected is not empty. You must select an empty directory to continue.
|
||||
dataDir.selectedDirEmpty.title=Kataloog on tühi
|
||||
dataDir.selectedDirEmpty.text=Kataloog, mille valisite, on tühi. Et liigutada olemasolev Zotero andmekataloog, on tarvis käsitsi kopeerida failid olemasolevast kataloogist uued asukohta. Selleks on vajalik kõigepealt sulgeda %1$S.
|
||||
|
|
@ -311,7 +312,7 @@ pane.items.intro.text3=Already using %S on another computer? [Set up syncing] to
|
|||
pane.items.title=Items
|
||||
pane.items.loading=Loading items…
|
||||
pane.items.loadError=Error loading items list
|
||||
pane.items.columnChooser.moreColumns=More Columns
|
||||
pane.items.columnChooser.moreColumns=Rohkem tulpasid
|
||||
pane.items.columnChooser.secondarySort=Secondary Sort (%S)
|
||||
pane.items.attach.link.uri.unrecognized=Zotero did not recognize the URI you entered. Please check the address and try again.
|
||||
pane.items.attach.link.uri.file=To attach a link to a file, please use “%S”.
|
||||
|
|
@ -327,8 +328,11 @@ pane.items.remove.multiple=Are you sure you want to remove the selected items fr
|
|||
pane.items.removeFromPublications.title=Remove from My Publications
|
||||
pane.items.removeFromPublications=Are you sure you want to remove the selected item from My Publications?
|
||||
pane.items.removeFromPublications.multiple=Are you sure you want to remove the selected items from My Publications?
|
||||
pane.items.removeRecursive.title=Remove from Collection and Subcollections
|
||||
pane.items.removeRecursive=Are you sure you want to remove the selected item from this collection and all subcollections?
|
||||
pane.items.removeRecursive.multiple=Are you sure you want to remove the selected items from this collection and all subcollections?
|
||||
pane.items.menu.addNoteFromAnnotations=Add Note from Annotations
|
||||
pane.items.menu.addNoteFromAnnotations.multiple=Add Notes from Annotations
|
||||
pane.items.menu.createNoteFromAnnotations=Create Note from Annotations
|
||||
pane.items.menu.findAvailablePDF=Find Available PDF
|
||||
pane.items.menu.findAvailablePDF.multiple=Find Available PDFs
|
||||
pane.items.menu.addToCollection=Add to Collection
|
||||
|
|
@ -343,6 +347,8 @@ pane.items.menu.export=Valitud kirje eksportimine...
|
|||
pane.items.menu.export.multiple=Valitud kirjete eksportimine...
|
||||
pane.items.menu.exportNote=Export Note…
|
||||
pane.items.menu.exportNote.multiple=Export Notes…
|
||||
pane.items.menu.exportPDF=Export PDF…
|
||||
pane.items.menu.exportPDF.multiple=Export PDFs…
|
||||
pane.items.menu.createBib=Valitud kirjest bibliograafia loomine...
|
||||
pane.items.menu.createBib.multiple=Valitud kirjetest bibliograafia loomine...
|
||||
pane.items.menu.generateReport=Valitud kirjest raporti loomine...
|
||||
|
|
@ -355,6 +361,8 @@ pane.items.menu.createParent=Create Parent Item…
|
|||
pane.items.menu.createParent.multiple=Create Parent Items
|
||||
pane.items.menu.renameAttachments=Nimetada fail ülemkirje metadata alusel ümber
|
||||
pane.items.menu.renameAttachments.multiple=Nimetada failid ülemkirjete metadata alusel ümber
|
||||
pane.items.menu.duplicateAndConvert.toBookSection=Create Book Section
|
||||
pane.items.menu.duplicateAndConvert.toBook=Create Book from Book Section
|
||||
pane.items.showItemInLibrary=Show Item in Library
|
||||
|
||||
pane.items.letter.oneParticipant=Kiri %S-le
|
||||
|
|
@ -430,7 +438,7 @@ pane.item.related.count.zero=%S seotut:
|
|||
pane.item.related.count.singular=%S seotud:
|
||||
pane.item.related.count.plural=%S seotut:
|
||||
pane.item.parentItem=Ülemkirje:
|
||||
pane.item.viewOnline.tooltip=Go to this item online
|
||||
pane.item.viewOnline.tooltip=Selle kirje vaatamine võrgus
|
||||
|
||||
pane.context.noParent=No parent item
|
||||
pane.context.itemNotes=Item Notes
|
||||
|
|
@ -438,7 +446,7 @@ pane.context.allNotes=All Notes
|
|||
pane.context.noNotes=No notes
|
||||
|
||||
itemTypes.note=Märkus
|
||||
itemTypes.annotation=Annotation
|
||||
itemTypes.annotation=Annotatsioon
|
||||
itemTypes.attachment=Manus
|
||||
itemTypes.book=Raamat
|
||||
itemTypes.bookSection=Osa raamatust
|
||||
|
|
@ -547,7 +555,7 @@ itemFields.runningTime=Kestvus
|
|||
itemFields.network=Võrk
|
||||
itemFields.postType=Postituse tüüp
|
||||
itemFields.audioFileType=Faili tüüp
|
||||
itemFields.versionNumber=Version
|
||||
itemFields.versionNumber=Versioon
|
||||
itemFields.system=Süsteem
|
||||
itemFields.company=Firma
|
||||
itemFields.conferenceName=Konverentsi nimi
|
||||
|
|
@ -747,7 +755,7 @@ zotero.preferences.advanced.migrateDataDir.directoryWillBeMoved=Your %1$S data d
|
|||
zotero.preferences.advanced.migrateDataDir.appMustBeRestarted=%S must be restarted to complete the migration.
|
||||
zotero.preferences.advanced.migrateDataDir.manualMigration=You can also quit %1$S and move your existing data directory to %2$S manually, which may be faster for larger data directories. %3$S will automatically detect the new location.
|
||||
|
||||
zotero.debugOutputLogging=Debug Output Logging
|
||||
zotero.debugOutputLogging=Veateadete logimine
|
||||
zotero.debugOutputLogging.linesLogged=%1$S line logged;%1$S lines logged
|
||||
zotero.debugOutputLogging.dialog.title=Debug Output Submitted
|
||||
zotero.debugOutputLogging.dialog.sent=Debug output has been sent to %S.\n\nThe Debug ID is D%S.
|
||||
|
|
@ -864,22 +872,7 @@ citation.showEditor=Toimetaja näidata...
|
|||
citation.hideEditor=Toimetaja peita...
|
||||
citation.citations=Viited
|
||||
citation.notes=Märkused
|
||||
citation.locator.page=Page
|
||||
citation.locator.book=Book
|
||||
citation.locator.chapter=Chapter
|
||||
citation.locator.column=Column
|
||||
citation.locator.figure=Figure
|
||||
citation.locator.folio=Folio
|
||||
citation.locator.issue=Issue
|
||||
citation.locator.line=Line
|
||||
citation.locator.note=Note
|
||||
citation.locator.opus=Opus
|
||||
citation.locator.paragraph=Paragraph
|
||||
citation.locator.part=Part
|
||||
citation.locator.section=Section
|
||||
citation.locator.subverbo=Sub verbo
|
||||
citation.locator.volume=Volume
|
||||
citation.locator.verse=Verse
|
||||
citation.locator.timestamp=Timestamp
|
||||
|
||||
report.title.default=Zotero raport
|
||||
report.parentItem=Ülemkirje:
|
||||
|
|
@ -994,7 +987,7 @@ styles.abbreviations.title=Load Abbreviations
|
|||
styles.abbreviations.parseError=The abbreviations file "%1$S" is not valid JSON.
|
||||
styles.abbreviations.missingInfo=The abbreviations file "%1$S" does not specify a complete info block.
|
||||
|
||||
sync.sync=Sync
|
||||
sync.sync=Sünkroonimine
|
||||
sync.syncWith=Sync with %S
|
||||
sync.stopping=Stopping…
|
||||
sync.cancel=Lõpeta sync
|
||||
|
|
@ -1072,8 +1065,8 @@ sync.conflict.tag.addedToLocal=It has been added to the following local items:
|
|||
sync.conflict.localItem=Local Item
|
||||
sync.conflict.remoteItem=Remote Item
|
||||
sync.conflict.mergedItem=Merged Item
|
||||
sync.conflict.localFile=Local File
|
||||
sync.conflict.remoteFile=Remote File
|
||||
sync.conflict.localFile=Kohalik fail
|
||||
sync.conflict.remoteFile=Serveris asuv fail
|
||||
sync.conflict.resolveAllLocal=Use the local version for all remaining conflicts
|
||||
sync.conflict.resolveAllRemote=Use the remote version for all remaining conflicts
|
||||
sync.conflict.itemChanged=The following item has been changed in multiple locations. Click the version to use for resolving conflicting fields, and then click %S.
|
||||
|
|
@ -1098,8 +1091,8 @@ sync.storage.mbRemaining=%SMB remaining
|
|||
sync.storage.kbRemaining=jäänud on %SKB
|
||||
sync.storage.filesRemaining=%1$S/%2$S faili
|
||||
sync.storage.none=Midagi
|
||||
sync.storage.downloads=Downloads:
|
||||
sync.storage.uploads=Uploads:
|
||||
sync.storage.downloads=Allalaadimised:
|
||||
sync.storage.uploads=Üleslaadimised:
|
||||
sync.storage.localFile=Kohalik fail
|
||||
sync.storage.remoteFile=Serveris asuv fail
|
||||
sync.storage.savedFile=Salvestatud fail
|
||||
|
|
@ -1124,7 +1117,7 @@ sync.storage.error.createNow=Kas soovite seda luua?
|
|||
|
||||
sync.storage.error.webdav.default=A WebDAV file sync error occurred. Please try syncing again.\n\nIf you receive this message repeatedly, check your WebDAV server settings in the Sync pane of the Zotero preferences.
|
||||
sync.storage.error.webdav.defaultRestart=A WebDAV file sync error occurred. Please restart %S and try syncing again.\n\nIf you receive this message repeatedly, check your WebDAV server settings in the Sync pane of the Zotero preferences.
|
||||
sync.storage.error.webdav.enterURL=Please enter a WebDAV URL.
|
||||
sync.storage.error.webdav.enterURL=Sisestage WebDAV URL.
|
||||
sync.storage.error.webdav.invalidURL=%S ei ole korrektne WebDAV URL.
|
||||
sync.storage.error.webdav.invalidLogin=WebDAV server ei tunnista sisestatud kasutajanime ja salasõna.
|
||||
sync.storage.error.webdav.permissionDenied=Teil puudub WebDAV serveris ligipääs %S-le.
|
||||
|
|
@ -1176,10 +1169,10 @@ recognizePDF.couldNotRead=PDFist ei õnnetstu teksti lugeda
|
|||
recognizePDF.noMatches=Sobivaid vasteid ei leitud.
|
||||
recognizePDF.fileNotFound=Faili ei leitud.
|
||||
recognizePDF.error=An unexpected error occurred
|
||||
recognizePDF.recognizing.label=Retrieving Metadata…
|
||||
recognizePDF.recognizing.label=Metaandmete laadimine...
|
||||
recognizePDF.complete.label=Metaandmete kogumine lõppenud.
|
||||
recognizePDF.pdfName.label=PDF Name
|
||||
recognizePDF.itemName.label=Item Name
|
||||
recognizePDF.pdfName.label=PDFi nimi
|
||||
recognizePDF.itemName.label=Kirje nimi
|
||||
|
||||
rtfScan.openTitle=Faili valimine (RTF skänn)
|
||||
rtfScan.scanning.label=RTF dokumendi skänn...
|
||||
|
|
@ -1225,7 +1218,7 @@ standalone.corruptInstallation=Your Zotero installation appears to be corrupted
|
|||
standalone.addonInstallationFailed.title=Lisa paigaldamine nurjus
|
||||
standalone.addonInstallationFailed.body=The add-on "%S" could not be installed. It may be incompatible with this version of Zotero.
|
||||
standalone.rootWarning=You appear to be running Zotero as root. This is insecure and may prevent Zotero from functioning when launched from your user account.\n\nIf you wish to install an automatic update, modify the Zotero program directory to be writable by your user account.
|
||||
standalone.rootWarning.exit=Exit
|
||||
standalone.rootWarning.exit=Väljuda
|
||||
standalone.rootWarning.continue=Continue
|
||||
standalone.updateMessage=A recommended update is available, but you do not have permission to install it. To update automatically, modify the Zotero program directory to be writeable by your user account.
|
||||
|
||||
|
|
@ -1239,7 +1232,7 @@ firstRunGuidance.toolbarButton.new=Click the ‘Z’ button to open Zotero, or u
|
|||
firstRunGuidance.toolbarButton.upgrade=The Zotero icon can now be found in the Firefox toolbar. Click the icon to open Zotero, or use the %S keyboard shortcut.
|
||||
firstRunGuidance.saveButton=Click this button to save any web page to your Zotero library. On some pages, Zotero will be able to save full details, including author and date.
|
||||
|
||||
styles.bibliography=Bibliography
|
||||
styles.bibliography=Biblograafia
|
||||
styles.editor.save=Save Citation Style
|
||||
styles.editor.warning.noItems=No items selected in Zotero.
|
||||
styles.editor.warning.parseError=Error parsing style:
|
||||
|
|
@ -1293,9 +1286,9 @@ retraction.citationWarning=A citation in your document has been retracted:
|
|||
retraction.citationWarning.dontWarn=Don’t warn me about this item again
|
||||
|
||||
noteEditor.annotationsDateLine=(%S)
|
||||
noteEditor.cut=Cut
|
||||
noteEditor.copy=Copy
|
||||
noteEditor.paste=Paste
|
||||
noteEditor.cut=Lõigata
|
||||
noteEditor.copy=Kopeerida
|
||||
noteEditor.paste=Asetada
|
||||
noteEditor.rightToLeft=Right to Left
|
||||
noteEditor.leftToRight=Left to Right
|
||||
noteEditor.updateNotice=This note was edited with a newer version of %1$S.\nPlease update %1$S to make changes.
|
||||
|
|
@ -1303,20 +1296,21 @@ noteEditor.enterLink=Enter Link
|
|||
noteEditor.heading1=Heading 1
|
||||
noteEditor.heading2=Heading 2
|
||||
noteEditor.heading3=Heading 3
|
||||
noteEditor.paragraph=Paragraph
|
||||
noteEditor.paragraph=Paragrahv
|
||||
noteEditor.monospaced=Monospaced
|
||||
noteEditor.bulletList=Bulleted List
|
||||
noteEditor.orderedList=Numbered List
|
||||
noteEditor.blockquote=Block Quote
|
||||
noteEditor.mathBlock=Math Block
|
||||
noteEditor.formatText=Format Text
|
||||
noteEditor.highlightText=Highlight Text
|
||||
noteEditor.removeColor=Remove Color
|
||||
noteEditor.bold=Bold
|
||||
noteEditor.italic=Italic
|
||||
noteEditor.underline=Underline
|
||||
noteEditor.highlightText=Teksti esiletõstmine
|
||||
noteEditor.removeColor=Värvi eemaldamine
|
||||
noteEditor.bold=Rasvane
|
||||
noteEditor.italic=Kaldkiri
|
||||
noteEditor.underline=Allajoonitud
|
||||
noteEditor.strikethrough=Strikethrough
|
||||
noteEditor.subscript=Subscript
|
||||
noteEditor.superscript=Superscript
|
||||
noteEditor.subscript=Alaindeks
|
||||
noteEditor.superscript=Ülaindeks
|
||||
noteEditor.returnToNotesList=Return to Notes List
|
||||
noteEditor.insertLink=Insert Link
|
||||
noteEditor.clearFormatting=Clear Formatting
|
||||
|
|
@ -1325,8 +1319,8 @@ noteEditor.alignLeft=Align Left
|
|||
noteEditor.alignCenter=Align Center
|
||||
noteEditor.alignRight=Align Right
|
||||
noteEditor.insertCitation=Insert Citation
|
||||
noteEditor.more=More
|
||||
noteEditor.find=Find
|
||||
noteEditor.more=Veel
|
||||
noteEditor.find=Otsida
|
||||
noteEditor.replace=Replace
|
||||
noteEditor.previous=Previous
|
||||
noteEditor.next=Next
|
||||
|
|
@ -1338,7 +1332,7 @@ noteEditor.editCitation=Edit Citation
|
|||
noteEditor.showOnPage=Show on Page
|
||||
noteEditor.unlink=Unlink
|
||||
noteEditor.set=Set
|
||||
noteEditor.edit=Edit
|
||||
noteEditor.edit=Toimetada
|
||||
noteEditor.addCitation=Add Citation
|
||||
noteEditor.removeCitation=Hide Citation
|
||||
noteEditor.findAndReplace=Find and Replace
|
||||
|
|
@ -1347,7 +1341,11 @@ noteEditor.applyAnnotationColors=Show Annotation Colors
|
|||
noteEditor.removeAnnotationColors=Hide Annotation Colors
|
||||
noteEditor.addCitations=Show Annotation Citations
|
||||
noteEditor.removeCitations=Hide Annotation Citations
|
||||
noteEditor.insertTable=Insert Table
|
||||
noteEditor.image=Kujutis
|
||||
noteEditor.math=Math
|
||||
noteEditor.table=Table
|
||||
noteEditor.copyImage=Copy Image
|
||||
noteEditor.saveImageAs=Save Image As…
|
||||
noteEditor.insertRowBefore=Insert Row Above
|
||||
noteEditor.insertRowAfter=Insert Row Below
|
||||
noteEditor.insertColumnBefore=Insert Column Left
|
||||
|
|
@ -1360,11 +1358,11 @@ pdfReader.annotations=Annotations
|
|||
pdfReader.showAnnotations=Show Annotations
|
||||
pdfReader.searchAnnotations=Search Annotations
|
||||
pdfReader.noAnnotations=Create an annotation to see it in the sidebar
|
||||
pdfReader.addText=Add extracted text
|
||||
pdfReader.noExtractedText=No extracted text
|
||||
pdfReader.addComment=Add comment
|
||||
pdfReader.addTags=Add tags…
|
||||
pdfReader.highlightText=Highlight Text
|
||||
pdfReader.addNote=Add Note
|
||||
pdfReader.highlightText=Teksti esiletõstmine
|
||||
pdfReader.addNote=Märkuse lisamine
|
||||
pdfReader.selectArea=Select Area
|
||||
pdfReader.pickColor=Pick a Color
|
||||
pdfReader.addToNote=Add to Note
|
||||
|
|
@ -1375,15 +1373,22 @@ pdfReader.zoomPageWidth=Zoom to Page Width
|
|||
pdfReader.zoomPageHeight=Zoom to Page Height
|
||||
pdfReader.nextPage=Next Page
|
||||
pdfReader.previousPage=Previous Page
|
||||
pdfReader.page=Page
|
||||
pdfReader.page=Lehekülg
|
||||
pdfReader.readOnly=Read-only
|
||||
pdfReader.promptTransferFromPDF.title=Import Annotations
|
||||
pdfReader.promptTransferFromPDF.text=Annotations stored in the PDF file will be moved to %1$S.
|
||||
pdfReader.promptTransferToPDF.title=Store Annotations in File
|
||||
pdfReader.promptTransferToPDF.text=Annotations will be transferred to the PDF file and will no longer be editable in %S.
|
||||
pdfReader.promptPasswordProtected=The operation is not supported for password-protected PDF files.
|
||||
pdfReader.promptDeletePages.title=Delete Pages
|
||||
pdfReader.promptDeletePages.text=Are you sure you want to delete %1$S page from the PDF file?;Are you sure you want to delete %1$S pages from the PDF file?
|
||||
pdfReader.rotateLeft=Rotate Left
|
||||
pdfReader.rotateRight=Rotate Right
|
||||
pdfReader.rotate180=Rotate 180°
|
||||
pdfReader.editPageNumber=Edit Page Number…
|
||||
pdfReader.editHighlightedText=Edit Highlighted Text
|
||||
pdfReader.copyImage=Copy Image
|
||||
pdfReader.saveImageAs=Save Image As…
|
||||
pdfReader.pageNumberPopupHeader=Change page number for:
|
||||
pdfReader.thisAnnotation=This annotation
|
||||
pdfReader.selectedAnnotations=Selected annotations
|
||||
|
|
|
|||
|
|
@ -92,6 +92,7 @@ general.custom=Pertsonalizatua
|
|||
general.loading=Kargatzen...
|
||||
general.richText=Testu aberatsa
|
||||
general.clearSelection=Hautaketa garbitu
|
||||
general.insert=Insert
|
||||
|
||||
general.yellow=Horia
|
||||
general.red=Gorria
|
||||
|
|
@ -263,7 +264,7 @@ pane.collections.trash=Zaborra
|
|||
pane.collections.untitled=Titulu gabe
|
||||
pane.collections.unfiled=Artxibatu gabeko elementuak
|
||||
pane.collections.retracted=Erretiratutako elementuak
|
||||
pane.collections.duplicate=Bikoiztu elementuak
|
||||
pane.collections.duplicate=Bikoiztutako elementuak
|
||||
pane.collections.removeLibrary=Liburutegiak ezabatu
|
||||
pane.collections.removeLibrary.text=Ziur zaude "%S" betirako ezabatu nahi duzula ordenagailu honetatik?
|
||||
|
||||
|
|
@ -327,8 +328,11 @@ pane.items.remove.multiple=Ziur zaude hautatutako elementuak bilduma honetatik e
|
|||
pane.items.removeFromPublications.title=Ezabatu Nire argitalpenetatik
|
||||
pane.items.removeFromPublications=Ziur zaude hautatutako elementua Nire argitalpenak ataletik ezabatu nahi duzula?
|
||||
pane.items.removeFromPublications.multiple=Ziur zaude hautatutako elementuak Nire argitalpenak ataletik ezabatu nahi dituzula?
|
||||
pane.items.menu.addNoteFromAnnotations=Gehitu oharra oharpenetatik
|
||||
pane.items.menu.addNoteFromAnnotations.multiple=Gehitu oharrak oharpenetatik
|
||||
pane.items.removeRecursive.title=Remove from Collection and Subcollections
|
||||
pane.items.removeRecursive=Are you sure you want to remove the selected item from this collection and all subcollections?
|
||||
pane.items.removeRecursive.multiple=Are you sure you want to remove the selected items from this collection and all subcollections?
|
||||
pane.items.menu.addNoteFromAnnotations=Sortu ohar bat oharpenekin
|
||||
pane.items.menu.createNoteFromAnnotations=Create Note from Annotations
|
||||
pane.items.menu.findAvailablePDF=Aurkitu eskuragarri den PDFa
|
||||
pane.items.menu.findAvailablePDF.multiple=Aurkitu eskuragarri diren PDFak
|
||||
pane.items.menu.addToCollection=Bilduman gehitu
|
||||
|
|
@ -343,6 +347,8 @@ pane.items.menu.export=Elementua esportatu...
|
|||
pane.items.menu.export.multiple=Elementuak esportatu...
|
||||
pane.items.menu.exportNote=Esportatu oharra...
|
||||
pane.items.menu.exportNote.multiple=Esportatu oharrak...
|
||||
pane.items.menu.exportPDF=Export PDF…
|
||||
pane.items.menu.exportPDF.multiple=Export PDFs…
|
||||
pane.items.menu.createBib=Sortu bibliografia elementutik...
|
||||
pane.items.menu.createBib.multiple=Sortu bibliografia elementuetatik...
|
||||
pane.items.menu.generateReport=Sortu txostena elementutik...
|
||||
|
|
@ -355,6 +361,8 @@ pane.items.menu.createParent=Guraso elementua sortu...
|
|||
pane.items.menu.createParent.multiple=Elementu gurasoak sortu
|
||||
pane.items.menu.renameAttachments=Berrizendatu fitxategia gurasoaren metadatuen arabera
|
||||
pane.items.menu.renameAttachments.multiple=Berrizendatu fitxategiak gurasoen metadatuen arabera
|
||||
pane.items.menu.duplicateAndConvert.toBookSection=Create Book Section
|
||||
pane.items.menu.duplicateAndConvert.toBook=Create Book from Book Section
|
||||
pane.items.showItemInLibrary=Erakutsi elementua liburutegian
|
||||
|
||||
pane.items.letter.oneParticipant=Gutuna %S-(r)i
|
||||
|
|
@ -430,7 +438,7 @@ pane.item.related.count.zero=%S erlaziodun:
|
|||
pane.item.related.count.singular=erlaziodun %S:
|
||||
pane.item.related.count.plural=%S erlaziodun:
|
||||
pane.item.parentItem=Guraso elementua:
|
||||
pane.item.viewOnline.tooltip=Go to this item online
|
||||
pane.item.viewOnline.tooltip=Ikusi elementu hau linean
|
||||
|
||||
pane.context.noParent=Ez du guraso elementurik
|
||||
pane.context.itemNotes=Elementuaren oharrak
|
||||
|
|
@ -722,7 +730,7 @@ zotero.preferences.export.quickCopy.citationInstructions=Aipuen estilotarako, ai
|
|||
|
||||
zotero.preferences.wordProcessors.installationSuccess=Instalazioa zuzen burutu da.
|
||||
zotero.preferences.wordProcessors.installationError=Ezin izan da instalazioa burutu errore bat gertatu delako. Mesedez ziurtatu %1$S itxita dagoela, eta orduan berrabiarazi %2$S.
|
||||
zotero.preferences.wordProcessors.manualInstallation.button=Manual Installation
|
||||
zotero.preferences.wordProcessors.manualInstallation.button=Eskuz instalatu
|
||||
zotero.preferences.wordProcessors.installed=%S gehigarria instalatuta dago.
|
||||
zotero.preferences.wordProcessors.notInstalled=%S gehigarria ez dago instalatuta.
|
||||
zotero.preferences.wordProcessors.install=%S gehigarria instalatu
|
||||
|
|
@ -864,22 +872,7 @@ citation.showEditor=Erakutsi Editorea...
|
|||
citation.hideEditor=Ezkutatu Editorea...
|
||||
citation.citations=Aipuak
|
||||
citation.notes=Oharrak
|
||||
citation.locator.page=Orrialdea
|
||||
citation.locator.book=Liburua
|
||||
citation.locator.chapter=Kapitulua
|
||||
citation.locator.column=Zutabea
|
||||
citation.locator.figure=Irudia
|
||||
citation.locator.folio=Folioa
|
||||
citation.locator.issue=Zenbakia
|
||||
citation.locator.line=Lerroa
|
||||
citation.locator.note=Oharra
|
||||
citation.locator.opus=Opusa
|
||||
citation.locator.paragraph=Paragrafoa
|
||||
citation.locator.part=Zatia
|
||||
citation.locator.section=Atala
|
||||
citation.locator.subverbo=Sub verbo
|
||||
citation.locator.volume=Liburukia
|
||||
citation.locator.verse=Bertsoa
|
||||
citation.locator.timestamp=Timestamp
|
||||
|
||||
report.title.default=Zotero Txostena
|
||||
report.parentItem=Guraso elementua:
|
||||
|
|
@ -1210,8 +1203,8 @@ lookup.failureTooMany.description=Identifikatzaile gehiegi. Mesedez sar ezazu id
|
|||
createParent.prompt=Adierazi DOI, ISBN, PMID, arXiv ID edo ADS Bibcode bat fitxategi hau identifikatzeko
|
||||
|
||||
locate.online.label=Linean ikusi
|
||||
locate.pdf.label=Open PDF
|
||||
locate.pdfNewWindow.label=Open PDF in New Window
|
||||
locate.pdf.label=Ireki PDFa
|
||||
locate.pdfNewWindow.label=Ireki PDFa leiho berrian
|
||||
locate.snapshot.label=Pantaila-argazkia ikusi
|
||||
locate.file.label=Ikusi fitxategia
|
||||
locate.externalViewer.label=Kanpo-ikustailean ireki
|
||||
|
|
@ -1308,6 +1301,7 @@ noteEditor.monospaced=Tarte bakarrekoa
|
|||
noteEditor.bulletList=Buletdun zerrenda
|
||||
noteEditor.orderedList=Zerrenda zenbakitua
|
||||
noteEditor.blockquote=Aipu blokea
|
||||
noteEditor.mathBlock=Math Block
|
||||
noteEditor.formatText=Testuari formatua eman
|
||||
noteEditor.highlightText=Testua nabarmendu
|
||||
noteEditor.removeColor=Ezabatu kolorea
|
||||
|
|
@ -1347,20 +1341,24 @@ noteEditor.applyAnnotationColors=Oharpenen koloreak erakutsi
|
|||
noteEditor.removeAnnotationColors=Oharpenen koloreak ezkutatu
|
||||
noteEditor.addCitations=Oharpen aipuak erakutsi
|
||||
noteEditor.removeCitations=Oharpen aipuak ezkutatu
|
||||
noteEditor.insertTable=Insert Table
|
||||
noteEditor.insertRowBefore=Insert Row Above
|
||||
noteEditor.insertRowAfter=Insert Row Below
|
||||
noteEditor.insertColumnBefore=Insert Column Left
|
||||
noteEditor.insertColumnAfter=Insert Column Right
|
||||
noteEditor.deleteRow=Delete Row
|
||||
noteEditor.deleteColumn=Delete Column
|
||||
noteEditor.deleteTable=Delete Table
|
||||
noteEditor.image=Irudia
|
||||
noteEditor.math=Math
|
||||
noteEditor.table=Table
|
||||
noteEditor.copyImage=Copy Image
|
||||
noteEditor.saveImageAs=Save Image As…
|
||||
noteEditor.insertRowBefore=Txertatu errenkada gainean
|
||||
noteEditor.insertRowAfter=Txertatu errenkada azpian
|
||||
noteEditor.insertColumnBefore=Txertatu zutabea ezkerrean
|
||||
noteEditor.insertColumnAfter=Txertatu zutabea eskubian
|
||||
noteEditor.deleteRow=Ezabatu errenkada
|
||||
noteEditor.deleteColumn=Ezabatu zutabea
|
||||
noteEditor.deleteTable=Ezabatu taula
|
||||
|
||||
pdfReader.annotations=Oharpenak
|
||||
pdfReader.showAnnotations=Erakutsi oharpenak
|
||||
pdfReader.searchAnnotations=Bilatu oharpenak
|
||||
pdfReader.noAnnotations=Alboko barran ikusteko oharpena sortu
|
||||
pdfReader.addText=Erauzitako testua gehitu
|
||||
pdfReader.noExtractedText=No extracted text
|
||||
pdfReader.addComment=Iruzkina gehitu
|
||||
pdfReader.addTags=Etiketak gehitu...
|
||||
pdfReader.highlightText=Testua nabarmendu
|
||||
|
|
@ -1382,8 +1380,15 @@ pdfReader.promptTransferFromPDF.text=PDF fitxategian jasotako oharpenak %1$S(e)r
|
|||
pdfReader.promptTransferToPDF.title=Oharpenak fitxategian gorde
|
||||
pdfReader.promptTransferToPDF.text=Oharpenak PDF fitxategira transferituko dira eta ezingo dira aurrerantzean %S(e)n editatu.
|
||||
pdfReader.promptPasswordProtected=Prozedura ez da onartzen pasahitzez babestutako PDF fitxategietan.
|
||||
pdfReader.promptDeletePages.title=Delete Pages
|
||||
pdfReader.promptDeletePages.text=Are you sure you want to delete %1$S page from the PDF file?;Are you sure you want to delete %1$S pages from the PDF file?
|
||||
pdfReader.rotateLeft=Rotate Left
|
||||
pdfReader.rotateRight=Rotate Right
|
||||
pdfReader.rotate180=Rotate 180°
|
||||
pdfReader.editPageNumber=Orrialde zenbakia editatu...
|
||||
pdfReader.editHighlightedText=Nabarmendutako testua editatu
|
||||
pdfReader.copyImage=Copy Image
|
||||
pdfReader.saveImageAs=Save Image As…
|
||||
pdfReader.pageNumberPopupHeader=Honakoagatik aldatu orrialde zenbakia:
|
||||
pdfReader.thisAnnotation=Oharpen hau
|
||||
pdfReader.selectedAnnotations=Hautatutako oharpenak
|
||||
|
|
@ -1404,6 +1409,6 @@ tabs.move=Mugitu fitxa
|
|||
tabs.moveToStart=Hasierara mugitu
|
||||
tabs.moveToEnd=Amaierara mugitu
|
||||
tabs.moveToWindow=Leiho berri batera mugitu
|
||||
tabs.duplicate=Duplicate Tab
|
||||
tabs.duplicate=Bikoiztu fitxa
|
||||
tabs.undoClose=Ireki berriro itxitako fitxa;Ireki berriro itxitako fitxak
|
||||
tabs.closeOther=Itxi beste fitxak
|
||||
|
|
|
|||
|
|
@ -5,6 +5,21 @@
|
|||
"general_done": {
|
||||
"message": "انجام شد"
|
||||
},
|
||||
"general_yes": {
|
||||
"message": "بله"
|
||||
},
|
||||
"general_no": {
|
||||
"message": "خیر"
|
||||
},
|
||||
"general_warning": {
|
||||
"message": "اخطار"
|
||||
},
|
||||
"general_cancel": {
|
||||
"message": "انصراف"
|
||||
},
|
||||
"general_copyToClipboard": {
|
||||
"message": "رونوشت به حافظه"
|
||||
},
|
||||
"progressWindow_savingTo": {
|
||||
"message": "ذخیره در"
|
||||
},
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<!ENTITY styles.preview "Zotero Style Preview">
|
||||
|
||||
<!ENTITY styles.preview.citationFormat "Citation Format:">
|
||||
<!ENTITY styles.preview.citationFormat.all "all">
|
||||
<!ENTITY styles.preview.citationFormat.all "همه">
|
||||
<!ENTITY styles.preview.citationFormat.author "author">
|
||||
<!ENTITY styles.preview.citationFormat.authorDate "author-date">
|
||||
<!ENTITY styles.preview.citationFormat.label "label">
|
||||
|
|
|
|||
|
|
@ -41,7 +41,7 @@
|
|||
<!ENTITY zotero.preferences.feeds.feedDefaults "Feed Defaults">
|
||||
|
||||
<!ENTITY zotero.preferences.openurl.choose "Choose a resolver…">
|
||||
<!ENTITY zotero.preferences.openurl.custom "Custom…">
|
||||
<!ENTITY zotero.preferences.openurl.custom "سفارشی...">
|
||||
<!ENTITY zotero.preferences.openurl.server "تشخیصدهنده (resolver):">
|
||||
<!ENTITY zotero.preferences.openurl.version "نگارش:">
|
||||
|
||||
|
|
@ -164,7 +164,7 @@
|
|||
|
||||
<!ENTITY zotero.preferences.prefpane.advanced "پیشرفته">
|
||||
<!ENTITY zotero.preferences.advanced.filesAndFolders "پروندهها و پوشهها">
|
||||
<!ENTITY zotero.preferences.advanced.keys "Shortcuts">
|
||||
<!ENTITY zotero.preferences.advanced.keys "کلیدهای میانبر">
|
||||
|
||||
<!ENTITY zotero.preferences.advanced.advancedConfiguration "Advanced Configuration">
|
||||
|
||||
|
|
@ -182,7 +182,7 @@
|
|||
<!ENTITY zotero.preferences.dataDir "محل ذخیره اطلاعات">
|
||||
<!ENTITY zotero.preferences.dataDir.useProfile "استفاده از پوشه پروفایل فایرفاکس">
|
||||
<!ENTITY zotero.preferences.dataDir.custom "محل دلخواه:">
|
||||
<!ENTITY zotero.preferences.dataDir.choose "Choose…">
|
||||
<!ENTITY zotero.preferences.dataDir.choose "انتخاب...">
|
||||
<!ENTITY zotero.preferences.dataDir.viaCommandLine "(specified via command line)">
|
||||
<!ENTITY zotero.preferences.dataDir.reveal "نمایش محل ذخیره اطلاعات">
|
||||
<!ENTITY zotero.preferences.dataDir.migrate "Migrate To New Default Location…">
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue