Merge branch '4.0'

Conflicts:
	chrome/content/zotero/xpcom/schema.js
	chrome/content/zotero/xpcom/translation/translate.js
	chrome/content/zotero/xpcom/zotero.js
	install.rdf
	update.rdf
This commit is contained in:
Dan Stillman 2015-01-29 19:59:47 -05:00
commit b0e37a38a2
172 changed files with 3452 additions and 2596 deletions

View File

@ -47,6 +47,54 @@
padding: 5px 1px 5px 11px; padding: 5px 1px 5px 11px;
} }
/*
* The searchbox focus ring is incorrect in Yosemite pre-Fx34, so use the old searchbox shape
* (with code borrowed from the Fx Add-ons window and icons borrowed from the Fx searchbar).
* These styles, the 'oldsearchfield' assignment in zoteroPane.js, and the Search.png icons
* can be removed after Fx31 ESR.
*
* Note: This uses navigator.oscpu in zoteroPane.js to test for Yosemite instead of
* -moz-mac-yosemite-theme here because the latter isn't defined in Fx31.
*/
#zotero-pane-stack[oldsearchfield] textbox[type=search] {
margin: 0;
-moz-appearance: none;
padding: 3px 5px 2px;
border: 1px solid rgba(60,73,97,0.5);
border-radius: 10000px;
box-shadow: inset 0 1px 1px rgba(0,0,0,0.15), 0 1px rgba(255,255,255,0.25);
background-clip: padding-box;
}
#zotero-pane-stack[oldsearchfield] textbox[type=search][focused] {
box-shadow: 0 0 1px -moz-mac-focusring inset, 0 0 4px 1px -moz-mac-focusring, 0 0 1.5px 1px -moz-mac-focusring, inset 0 1px 1px rgba(0,0,0,0.15);
border-color: -moz-mac-focusring;
}
#zotero-pane-stack[oldsearchfield] textbox[type=search] > .textbox-input-box {
-moz-padding-start: 15px;
background: url("chrome://zotero/skin/mac/moz/Search.png") left no-repeat;
background-size: 14px;
}
@media (min-resolution: 2dppx) {
#zotero-pane-stack[oldsearchfield] textbox[type=search] > .textbox-input-box {
background: url("chrome://zotero/skin/mac/moz/Search@2x.png") left no-repeat;
background-size: 14px;
}
}
#zotero-pane-stack[oldsearchfield] textbox[type=search] > .textbox-input-box:-moz-locale-dir(rtl) {
background-position: right;
}
#zotero-pane-stack[oldsearchfield] textbox[type=search] > .textbox-input-box > html|*.textbox-input::-moz-placeholder {
opacity: 1.0;
}
/* End searchbox focus fix */
#zotero-tb-search-menu-button #zotero-tb-search-menu-button
{ {
margin: -6px -2px -6px -16px; margin: -6px -2px -6px -16px;
@ -207,7 +255,7 @@
background-color: #8b8b8b !important; background-color: #8b8b8b !important;
} }
#zotero-collections-splitter[state=collapsed] #zotero-collections-splitter[state=collapsed], #zotero-items-splitter[state=collapsed]
{ {
border-right: 1px; border-right: 1px;
border-color: #A5A5A5; border-color: #A5A5A5;
@ -219,7 +267,7 @@
padding: 0; padding: 0;
} }
#zotero-collections-splitter[state=collapsed] > grippy #zotero-collections-splitter[state=collapsed] > grippy, #zotero-items-splitter[state=collapsed] > grippy
{ {
-moz-appearance: none; -moz-appearance: none;
background-image: url("chrome://zotero/skin/mac/vgrippy.png"); background-image: url("chrome://zotero/skin/mac/vgrippy.png");
@ -249,7 +297,7 @@
height: 8px; height: 8px;
} }
#zotero-tags-splitter > grippy:hover, #zotero-collections-splitter > grippy:hover #zotero-tags-splitter > grippy:hover, #zotero-collections-splitter > grippy:hover, #zotero-items-splitter > grippy:hover
{ {
background-color:transparent; background-color:transparent;
} }

View File

@ -35,6 +35,7 @@ var ZoteroAdvancedSearch = new function() {
this.itemsView = false; this.itemsView = false;
var _searchBox; var _searchBox;
var _libraryID;
function onLoad() { function onLoad() {
_searchBox = document.getElementById('zotero-search-box'); _searchBox = document.getElementById('zotero-search-box');
@ -53,8 +54,11 @@ var ZoteroAdvancedSearch = new function() {
_searchBox.updateSearch(); _searchBox.updateSearch();
_searchBox.active = true; _searchBox.active = true;
// A minimal implementation of Zotero.CollectionTreeView // A minimal implementation of Zotero.ItemGroup
var itemGroup = { var itemGroup = {
ref: {
libraryID: _libraryID
},
isSearchMode: function() { return true; }, isSearchMode: function() { return true; },
getItems: function () { getItems: function () {
var search = _searchBox.search.clone(); var search = _searchBox.search.clone();
@ -147,6 +151,7 @@ var ZoteroAdvancedSearch = new function() {
this.onLibraryChange = function (libraryID) { this.onLibraryChange = function (libraryID) {
_libraryID = libraryID;
document.getElementById('zotero-search-save').disabled = !Zotero.Libraries.isEditable(libraryID); document.getElementById('zotero-search-save').disabled = !Zotero.Libraries.isEditable(libraryID);
} }

View File

@ -0,0 +1,60 @@
/*
***** BEGIN LICENSE BLOCK *****
Copyright © 2014 Center for History and New Media
George Mason University, Fairfax, Virginia, USA
http://zotero.org
This file is part of Zotero.
Zotero is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Zotero is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with Zotero. If not, see <http://www.gnu.org/licenses/>.
***** END LICENSE BLOCK *****
*/
var Zotero_AttachLink = new function() {
function getAttachFileLabel() {
return window.opener.document
.getElementById('zotero-tb-attachment-add-file-link')
.label;
};
this.submit = function() {
var link = document.getElementById('zotero-attach-uri-input').value;
var message = document.getElementById('zotero-attach-uri-message');
var cleanURI = Zotero.Attachments.cleanAttachmentURI(link, true);
if (!cleanURI) {
message.textContent = Zotero.getString('pane.items.attach.link.uri.unrecognized');
window.sizeToContent();
document.getElementById('zotero-attach-uri-input').select();
return false;
}
// Don't allow "file:" links, because using "Attach link to file" is the right way
else if (cleanURI.toLowerCase().indexOf('file:') == 0) {
message.textContent = Zotero.getString('pane.items.attach.link.uri.file',
[getAttachFileLabel()]);
window.sizeToContent();
document.getElementById('zotero-attach-uri-input').select();
return false;
}
else {
window.arguments[0].out = {
link: cleanURI,
title: document.getElementById('zotero-attach-uri-title').value
};
return true;
}
};
}

View File

@ -0,0 +1,32 @@
<?xml version="1.0"?>
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
<?xml-stylesheet href="chrome://zotero/skin/zotero.css" type="text/css"?>
<!DOCTYPE window SYSTEM "chrome://zotero/locale/zotero.dtd">
<dialog
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
buttons="accept,cancel"
ondialogaccept="return Zotero_AttachLink.submit();"
id="zotero-attach-uri-dialog"
title="&zotero.attachLink.title;"
>
<script src="include.js"/>
<script src="AttachLink.js"/>
<vbox id="zotero-attach-uri-container">
<hbox>
<description id="zotero-attach-uri-message" class="zotero-message-error"></description>
</hbox>
<hbox align="center">
<label id="zotero-attach-uri-label-input" value="&zotero.attachLink.label.link;" control="zotero-attach-uri-input"></label>
<textbox id="zotero-attach-uri-input" flex="1"/>
</hbox>
<hbox align="center">
<label id="zotero-attach-uri-label-title" value="&zotero.attachLink.label.title;" control="zotero-attach-uri-title"></label>
<textbox id="zotero-attach-uri-title" flex="1" placeholder="&zotero.general.optional;"/>
</hbox>
</vbox>
</dialog>

View File

@ -1467,9 +1467,24 @@
t.select(); t.select();
// Leave text field open when window loses focus
var ignoreBlur = function () {
this.ignoreBlur = true;
}.bind(this);
var unignoreBlur = function () {
this.ignoreBlur = false;
}.bind(this);
addEventListener("deactivate", ignoreBlur);
addEventListener("activate", unignoreBlur);
t.addEventListener('blur', function () { t.addEventListener('blur', function () {
document.getBindingParent(this).blurHandler(this); var self = document.getBindingParent(this);
}, false); if (self.ignoreBlur) return;
removeEventListener("deactivate", ignoreBlur);
removeEventListener("activate", unignoreBlur);
self.blurHandler(this);
});
t.setAttribute('onkeypress', "return document.getBindingParent(this).handleKeyPress(event)"); t.setAttribute('onkeypress', "return document.getBindingParent(this).handleKeyPress(event)");
this._tabDirection = false; this._tabDirection = false;

View File

@ -107,7 +107,9 @@
<parameter name="skipRefresh"/> <parameter name="skipRefresh"/>
<body> <body>
<![CDATA[ <![CDATA[
this._search = val ? val.toLowerCase() : false; this._search = val
? val.toLowerCase().normalize()
: false;
if (!skipRefresh) { if (!skipRefresh) {
this.refresh(); this.refresh();

View File

@ -63,11 +63,19 @@ var Zotero_DownloadOverlay = new function() {
.getMostRecentWindow("navigator:browser"); .getMostRecentWindow("navigator:browser");
var libraryID, collection; var libraryID, collection;
try { try {
if(win.ZoteroPane.getItemGroup().filesEditable) { let itemGroup = win.ZoteroPane.getItemGroup();
if (itemGroup.filesEditable) {
libraryID = win.ZoteroPane.getSelectedLibraryID(); libraryID = win.ZoteroPane.getSelectedLibraryID();
collection = win.ZoteroPane.getSelectedCollection(); collection = win.ZoteroPane.getSelectedCollection();
} }
} catch(e) {}; // TODO: Just show an error instead?
else {
Zotero.debug("Cannot save files to library " + itemGroup.ref.libraryID
+ " -- saving to personal library instead", 2);
}
} catch(e) {
Zotero.debug(e, 1);
};
var recognizePDF = document.getElementById('zotero-recognizePDF').checked var recognizePDF = document.getElementById('zotero-recognizePDF').checked
&& !document.getElementById('zotero-recognizePDF').hidden && !document.getElementById('zotero-recognizePDF').hidden

View File

@ -11,6 +11,8 @@
<script> <script>
<![CDATA[ <![CDATA[
Components.utils.import("resource://zotero/config.js");
var Zotero_Error_Report = new function() { var Zotero_Error_Report = new function() {
this.init = init; this.init = init;
this.sendErrorReport = sendErrorReport; this.sendErrorReport = sendErrorReport;
@ -74,7 +76,7 @@
body += key + '=' + encodeURIComponent(parts[key]) + '&'; body += key + '=' + encodeURIComponent(parts[key]) + '&';
} }
body = body.substr(0, body.length - 1); body = body.substr(0, body.length - 1);
var url = 'https://repo.zotero.org/repo/report'; var url = ZOTERO_CONFIG.REPOSITORY_URL + "report";
Zotero.HTTP.promise('POST', url, Zotero.HTTP.promise('POST', url,
{ body: body, successCodes: false, foreground: true }) { body: body, successCodes: false, foreground: true })
.then(_sendErrorReportCallback) .then(_sendErrorReportCallback)

View File

@ -420,9 +420,10 @@ var Zotero_File_Interface = new function() {
var clipboardService = Components.classes["@mozilla.org/widget/clipboard;1"]. var clipboardService = Components.classes["@mozilla.org/widget/clipboard;1"].
getService(Components.interfaces.nsIClipboard); getService(Components.interfaces.nsIClipboard);
var style = Zotero.Styles.get(style); var style = Zotero.Styles.get(style);
var cslEngine = style.getCiteProc();
// add HTML // add HTML
var bibliography = Zotero.Cite.makeFormattedBibliographyOrCitationList(style, items, "html", asCitations); var bibliography = Zotero.Cite.makeFormattedBibliographyOrCitationList(cslEngine, items, "html", asCitations);
var str = Components.classes["@mozilla.org/supports-string;1"]. var str = Components.classes["@mozilla.org/supports-string;1"].
createInstance(Components.interfaces.nsISupportsString); createInstance(Components.interfaces.nsISupportsString);
str.data = bibliography; str.data = bibliography;
@ -431,7 +432,7 @@ var Zotero_File_Interface = new function() {
// add text (or HTML source) // add text (or HTML source)
if(!asHTML) { if(!asHTML) {
var bibliography = Zotero.Cite.makeFormattedBibliographyOrCitationList(style, items, "text", asCitations); var bibliography = Zotero.Cite.makeFormattedBibliographyOrCitationList(cslEngine, items, "text", asCitations);
} }
var str = Components.classes["@mozilla.org/supports-string;1"]. var str = Components.classes["@mozilla.org/supports-string;1"].
createInstance(Components.interfaces.nsISupportsString); createInstance(Components.interfaces.nsISupportsString);
@ -517,7 +518,8 @@ var Zotero_File_Interface = new function() {
} }
else { else {
var style = Zotero.Styles.get(io.style); var style = Zotero.Styles.get(io.style);
var bibliography = Zotero.Cite.makeFormattedBibliographyOrCitationList(style, var cslEngine = style.getCiteProc();
var bibliography = Zotero.Cite.makeFormattedBibliographyOrCitationList(cslEngine,
items, format, io.mode === "citations"); items, format, io.mode === "citations");
} }
} catch(e) { } catch(e) {

@ -1 +1 @@
Subproject commit 76af9741424cc1432ffa0165d7b7bd5bbebe0d26 Subproject commit 23920d2cea52e12f2c3caac097266c13757e5acf

View File

@ -107,6 +107,17 @@ var ZoteroOverlay = new function()
document.getElementById('appcontent').addEventListener('mousemove', Zotero.ProgressWindowSet.updateTimers, false); document.getElementById('appcontent').addEventListener('mousemove', Zotero.ProgressWindowSet.updateTimers, false);
if (icon) { if (icon) {
// TODO: move to strings
let str = 'Zotero';
let key = Zotero.Keys.getKeyForCommand('openZotero');
if (key) {
str += ' ('
+ (Zotero.isMac ? '⇧⌘' : Zotero.getString('general.keys.ctrlShift'))
+ key
+ ')';
}
icon.setAttribute('tooltiptext', str);
if (iconPref == 1) { if (iconPref == 1) {
icon.setAttribute('compact', true); icon.setAttribute('compact', true);
} }

View File

@ -630,7 +630,9 @@ Zotero_Preferences.Debug_Output = {
document.getElementById('debug-output-submit').disabled = true; document.getElementById('debug-output-submit').disabled = true;
document.getElementById('debug-output-submit-progress').hidden = false; document.getElementById('debug-output-submit-progress').hidden = false;
var url = "https://repo.zotero.org/repo/report?debug=1"; Components.utils.import("resource://zotero/config.js");
var url = ZOTERO_CONFIG.REPOSITORY_URL + "report?debug=1";
var output = Zotero.Debug.get( var output = Zotero.Debug.get(
Zotero.Prefs.get('debug.store.submitSize'), Zotero.Prefs.get('debug.store.submitSize'),
Zotero.Prefs.get('debug.store.submitLineLength') Zotero.Prefs.get('debug.store.submitLineLength')

View File

@ -66,7 +66,6 @@ Zotero_Preferences.Cite = {
var treerow = document.createElement('treerow'); var treerow = document.createElement('treerow');
var titleCell = document.createElement('treecell'); var titleCell = document.createElement('treecell');
var updatedCell = document.createElement('treecell'); var updatedCell = document.createElement('treecell');
var cslCell = document.createElement('treecell');
if (style.updated) { if (style.updated) {
var updatedDate = Zotero.Date.formatDate(Zotero.Date.strToDate(style.updated), true); var updatedDate = Zotero.Date.formatDate(Zotero.Date.strToDate(style.updated), true);
@ -78,14 +77,9 @@ Zotero_Preferences.Cite = {
treeitem.setAttribute('id', 'zotero-csl-' + style.styleID); treeitem.setAttribute('id', 'zotero-csl-' + style.styleID);
titleCell.setAttribute('label', style.title); titleCell.setAttribute('label', style.title);
updatedCell.setAttribute('label', updatedDate); updatedCell.setAttribute('label', updatedDate);
// if not EN
if(style.type == "csl") {
cslCell.setAttribute('src', 'chrome://zotero/skin/tick.png');
}
treerow.appendChild(titleCell); treerow.appendChild(titleCell);
treerow.appendChild(updatedCell); treerow.appendChild(updatedCell);
treerow.appendChild(cslCell);
treeitem.appendChild(treerow); treeitem.appendChild(treerow);
treechildren.appendChild(treeitem); treechildren.appendChild(treeitem);

View File

@ -58,9 +58,8 @@
onselect="document.getElementById('styleManager-delete').disabled = undefined" onselect="document.getElementById('styleManager-delete').disabled = undefined"
onkeypress="if (event.keyCode == event.DOM_VK_DELETE) { Zotero_Preferences.Cite.deleteSelectedStyle(); }"> onkeypress="if (event.keyCode == event.DOM_VK_DELETE) { Zotero_Preferences.Cite.deleteSelectedStyle(); }">
<treecols> <treecols>
<treecol id="styleManager-title" label="&zotero.preferences.cite.styles.styleManager.title;" flex="3"/> <treecol id="styleManager-title" label="&zotero.preferences.cite.styles.styleManager.title;" flex="1"/>
<treecol id="styleManager-updated" label="&zotero.preferences.cite.styles.styleManager.updated;" flex="1"/> <treecol id="styleManager-updated" label="&zotero.preferences.cite.styles.styleManager.updated;"/>
<treecol id="styleManager-csl" label="&zotero.preferences.cite.styles.styleManager.csl;"/>
</treecols> </treecols>
<treechildren id="styleManager-rows"/> <treechildren id="styleManager-rows"/>
</tree> </tree>

View File

@ -148,8 +148,8 @@
onsynctopreference="Zotero_Preferences.Sync.unverifyStorageServer()" onsynctopreference="Zotero_Preferences.Sync.unverifyStorageServer()"
style="padding: 0; width: 7em"> style="padding: 0; width: 7em">
<menupopup> <menupopup>
<menuitem label="http" value="http" style="padding: 0"/>
<menuitem label="https" value="https" style="padding: 0"/> <menuitem label="https" value="https" style="padding: 0"/>
<menuitem label="http" value="http" style="padding: 0"/>
</menupopup> </menupopup>
</menulist> </menulist>
<label value="://"/> <label value="://"/>
@ -240,7 +240,7 @@
<vbox> <vbox>
<hbox id="storage-terms" style="margin-top: .4em; display: block" align="center"> <hbox id="storage-terms" style="margin-top: .4em; display: block" align="center">
<label>&zotero.preferences.sync.fileSyncing.tos1;</label> <label>&zotero.preferences.sync.fileSyncing.tos1;</label>
<label class="zotero-text-link" href="http://www.digitalscholar.org/z_terms" value="&zotero.preferences.sync.fileSyncing.tos2;"/> <label class="zotero-text-link" href="https://www.zotero.org/support/terms/terms_of_service" value="&zotero.preferences.sync.fileSyncing.tos2;"/>
<label>&zotero.preferences.period;</label> <label>&zotero.preferences.period;</label>
</hbox> </hbox>
</vbox> </vbox>

View File

@ -95,27 +95,31 @@ var Zotero_RecognizePDF = new function() {
// Look up DOI // Look up DOI
Zotero.debug("RecognizePDF: Found DOI: "+doi); Zotero.debug("RecognizePDF: Found DOI: "+doi);
var translate = new Zotero.Translate.Search(); var translateDOI = new Zotero.Translate.Search();
translate.setTranslator("11645bd1-0420-45c1-badb-53fb41eeb753"); translateDOI.setTranslator("11645bd1-0420-45c1-badb-53fb41eeb753");
translate.setSearch({"itemType":"journalArticle", "DOI":doi}); translateDOI.setSearch({"itemType":"journalArticle", "DOI":doi});
promise = _promiseTranslate(translate, libraryID); promise = _promiseTranslate(translateDOI, libraryID);
} else { } else {
promise = Q.reject("No DOI found in text");
}
return promise
// Look for ISBNs if no DOI // Look for ISBNs if no DOI
.fail(function(error) {
Zotero.debug("RecognizePDF: " + error);
var isbns = _findISBNs(allText); var isbns = _findISBNs(allText);
if (isbns.length) { if (isbns.length) {
Zotero.debug("RecognizePDF: Found ISBNs: " + isbns); Zotero.debug("RecognizePDF: Found ISBNs: " + isbns);
var translate = new Zotero.Translate.Search(); var translate = new Zotero.Translate.Search();
translate.setTranslator("c73a4a8c-3ef1-4ec8-8229-7531ee384cc4");
translate.setSearch({"itemType":"book", "ISBN":isbns[0]}); translate.setSearch({"itemType":"book", "ISBN":isbns[0]});
promise = _promiseTranslate(translate, libraryID); return _promiseTranslate(translate, libraryID);
} else { } else {
promise = Q.reject("No ISBN or DOI found"); return Q.reject("No ISBN found in text.");
} }
} })
// If no DOI or ISBN, query Google Scholar // If no DOI or ISBN, query Google Scholar
return promise.fail(function(error) { .fail(function(error) {
Zotero.debug("RecognizePDF: " + error); Zotero.debug("RecognizePDF: " + error);
return me.GSFullTextSearch.findItem(lines, libraryID, stopCheckCallback); return me.GSFullTextSearch.findItem(lines, libraryID, stopCheckCallback);
}); });
@ -196,7 +200,10 @@ var Zotero_RecognizePDF = new function() {
if(success && translate.newItems.length) { if(success && translate.newItems.length) {
deferred.resolve(translate.newItems[0]); deferred.resolve(translate.newItems[0]);
} else { } else {
deferred.reject("Translation with Google Scholar failed"); deferred.reject(translate.translator && translate.translator.length
? "Translation with " + translate.translator.map(t => t.label) + " failed"
: "Could not find a translator for given search item"
);
} }
}); });
translate.translate(libraryID, false); translate.translate(libraryID, false);

View File

@ -44,25 +44,28 @@
function init() { function init() {
//refresh(); //refresh();
var iframe = document.getElementById('zotero-csl-preview-box');
iframe.contentDocument.documentElement.innerHTML = '<html><head><title></title></head><body><p>Select one or more items in Zotero and click the "Refresh" button to see how these items are rendered by the installed CSL citation styles.</p></body></html>';
} }
function refresh() { function refresh() {
var iframe = document.getElementById('zotero-csl-preview-box'); var iframe = document.getElementById('zotero-csl-preview-box');
var items = Zotero.getActiveZoteroPane().getSelectedItems(); var items = Zotero.getActiveZoteroPane().getSelectedItems();
if (items.length == 0) { if (items.length === 0) {
iframe.contentDocument.documentElement.innerHTML = '<html><head><title></title></head><body><p style="color: red">No references selected in Zotero.</p></body></html>'; iframe.contentDocument.documentElement.innerHTML = '<html><head><title></title></head><body><p style="color: red">No items selected in Zotero.</p></body></html>';
return; return;
} }
var progressWin = new Zotero.ProgressWindow(); var progressWin = new Zotero.ProgressWindow();
// XXX needs its own string really! // XXX needs its own string really!
progressWin.changeHeadline(Zotero.getString("pane.items.menu.createBib.multiple")); progressWin.changeHeadline(Zotero.getString("pane.items.menu.createBib.multiple"));
var icon = 'chrome://zotero/skin/treeitem-attachment-file.png'; var icon = 'chrome://zotero/skin/treeitem-attachment-file.png';
progressWin.addLines(document.title, icon) progressWin.addLines(document.title, icon);
progressWin.show(); progressWin.show();
progressWin.startCloseTimer(); progressWin.startCloseTimer();
var f = function() { var f = function() {
var styles = Zotero.Styles.getAll(); var styles = Zotero.Styles.getAll();
// XXX needs its own string really for the title! // XXX needs its own string really for the title!
var str = '<html><head><title></title></head><body><h1>Citation/Bibliography list<h1>'; var str = '<html><head><title></title></head><body>';
for each(var style in styles) { for each(var style in styles) {
if (style.source) { if (style.source) {
continue; continue;
@ -70,14 +73,15 @@
Zotero.debug("Generate Bib for " + style.title); Zotero.debug("Generate Bib for " + style.title);
var cite = generateBibliography(style); var cite = generateBibliography(style);
if (cite) { if (cite) {
str += '<hr><h2>' + style.title + '</h2>'; str += '<h3>' + style.title + '</h3>';
str += cite; str += cite;
str += '<hr>';
} }
} }
str += '</body></html>'; str += '</body></html>';
iframe.contentDocument.documentElement.innerHTML = str; iframe.contentDocument.documentElement.innerHTML = str;
} };
// Give progress window time to appear // Give progress window time to appear
setTimeout(f, 100); setTimeout(f, 100);
} }
@ -86,33 +90,13 @@
var iframe = document.getElementById('zotero-csl-preview-box'); var iframe = document.getElementById('zotero-csl-preview-box');
var items = Zotero.getActiveZoteroPane().getSelectedItems(); var items = Zotero.getActiveZoteroPane().getSelectedItems();
if (items.length == 0) { if (items.length === 0) {
iframe.contentDocument.documentElement.innerHTML = '<html><head><title></title></head><body><p style="color: red">No references selected in Zotero.</p></body></html>';
return ''; return '';
} }
var authordate = document.getElementById("format-author-date"); var citationFormat = document.getElementById("citation-format").selectedItem.value;
var numeric = document.getElementById("format-numeric"); if (citationFormat != "all" && citationFormat != style.categories) {
Zotero.debug("style class is " + style.class); Zotero.debug("CSL IGNORE: citation format is " + style.categories);
if (document.getElementById("format-note").checked == false && style.class == "note") {
Zotero.debug("CSL IGNORE NOTE one");
return '';
}
if (document.getElementById("format-in-text").checked == false && style.class == "in-text") {
Zotero.debug("CSL IGNORE IN-TEXT one");
return '';
}
var terms = new Object();
for each(var cat in style.categories) {
Zotero.debug("TERM is " + cat.toString());
terms[cat.toString()] = true;
}
if (!numeric.checked && terms["numeric"]) {
Zotero.debug("CSL IGNORE this numeric");
return '';
}
if (!authordate.checked && terms["author-date"]) {
Zotero.debug("CSL IGNORE this AD");
return ''; return '';
} }
var styleEngine = style.getCiteProc(); var styleEngine = style.getCiteProc();
@ -123,19 +107,17 @@
[], [], "html"); [], [], "html");
// Generate bibliography // Generate bibliography
if(!style.hasBibliography) {
var bibliography = ''; var bibliography = '';
} else { if(style.hasBibliography) {
styleEngine.updateItems([item.id for each(item in items)]); styleEngine.updateItems([item.id for each(item in items)]);
var bibliography = '<p>' + Zotero.Cite.makeFormattedBibliography(styleEngine, "html"); bibliography = Zotero.Cite.makeFormattedBibliography(styleEngine, "html");
} }
return '<div>' + return '<p>' + citations + '</p>' + bibliography;
citations + bibliography + '</div>';
} }
} }();
]]> ]]>
</script> </script>
<!-- NEEDS LOCALISING --> <!-- NEEDS LOCALISING -->
@ -144,18 +126,20 @@
<hbox align="center"> <hbox align="center">
<button id="preview-refresh-button" label="Refresh" oncommand="Zotero_CSL_Preview.refresh()"/> <button id="preview-refresh-button" label="Refresh" oncommand="Zotero_CSL_Preview.refresh()"/>
<groupbox orient="horizontal" align="center"> <groupbox orient="horizontal" align="center">
<label value="Class:"/> <label value="Citation format:" />
<checkbox id="format-in-text" label="In-Text" checked="true"/> <menulist id="citation-format" oncommand="Zotero_CSL_Preview.refresh()">
<checkbox id="format-note" label="Notes" checked="true"/> <menupopup>
</groupbox> <menuitem label="all" value="all"/>
<groupbox orient="horizontal" align="center"> <menuitem label="author" value="author"/>
<label value="Citation form:"/> <menuitem label="author-date" value="author-date"/>
<checkbox id="format-author-date" label="Author Date" checked="true"/> <menuitem label="label" value="label"/>
<checkbox id="format-numeric" label="Numeric" checked="true"/> <menuitem label="note" value="note"/>
<menuitem label="numeric" value="numeric"/>
</menupopup>
</menulist>
</groupbox> </groupbox>
</hbox> </hbox>
</hbox> </hbox>
<splitter/>
<iframe id="zotero-csl-preview-box" flex="1" style="padding: 0 1em; background:white;" overflow="auto" type="content"/> <iframe id="zotero-csl-preview-box" flex="1" style="padding: 0 1em; background:white;" overflow="auto" type="content"/>
</vbox> </vbox>

View File

@ -34,7 +34,6 @@ Zotero.Attachments = new function(){
this.linkFromFile = linkFromFile; this.linkFromFile = linkFromFile;
this.importSnapshotFromFile = importSnapshotFromFile; this.importSnapshotFromFile = importSnapshotFromFile;
this.importFromURL = importFromURL; this.importFromURL = importFromURL;
this.linkFromURL = linkFromURL;
this.linkFromDocument = linkFromDocument; this.linkFromDocument = linkFromDocument;
this.importFromDocument = importFromDocument; this.importFromDocument = importFromDocument;
this.createMissingAttachment = createMissingAttachment; this.createMissingAttachment = createMissingAttachment;
@ -399,38 +398,68 @@ Zotero.Attachments = new function(){
} }
this.cleanAttachmentURI = function (uri, tryHttp) {
uri = uri.trim();
if (!uri) return false;
var ios = Components.classes["@mozilla.org/network/io-service;1"]
.getService(Components.interfaces.nsIIOService);
try {
return ios.newURI(uri, null, null).spec // Valid URI if succeeds
} catch (e) {
if (e instanceof Components.Exception
&& e.result == Components.results.NS_ERROR_MALFORMED_URI
) {
if (tryHttp && /\w\.\w/.test(uri)) {
// Assume it's a URL missing "http://" part
try {
return ios.newURI('http://' + uri, null, null).spec;
} catch (e) {}
}
Zotero.debug('cleanAttachmentURI: Invalid URI: ' + uri, 2);
return false;
}
throw e;
}
}
/* /*
* Create a link attachment from a URL * Create a link attachment from a URL
* *
* @param {String} url * @param {String} url Validated URI
* @param {Integer} sourceItemID Parent item * @param {Integer} sourceItemID Parent item
* @param {String} [mimeType] MIME type of page * @param {String} [mimeType] MIME type of page
* @param {String} [title] Title to use for attachment * @param {String} [title] Title to use for attachment
*/ */
function linkFromURL(url, sourceItemID, mimeType, title){ this.linkFromURL = function (url, sourceItemID, mimeType, title) {
Zotero.debug('Linking attachment from URL'); Zotero.debug('Linking attachment from ' + url);
/* Throw error on invalid URLs
We currently accept the following protocols:
PersonalBrain (brain://)
DevonThink (x-devonthink-item://)
Notational Velocity (nv://)
MyLife Organized (mlo://)
Evernote (evernote://)
OneNote (onenote://)
Kindle (kindle://)
Logos (logosres:)
Zotero (zotero://) */
var urlRe = /^((https?|zotero|evernote|onenote|brain|nv|mlo|kindle|x-devonthink-item|ftp):\/\/|logosres:)[^\s]*$/;
var matches = urlRe.exec(url);
if (!matches) {
throw ("Invalid URL '" + url + "' in Zotero.Attachments.linkFromURL()");
}
// If no title provided, figure it out from the URL // If no title provided, figure it out from the URL
// Web addresses with paths will be whittled to the last element
// excluding references and queries. All others are the full string
if (!title) { if (!title) {
title = url.substring(url.lastIndexOf('/')+1); var ioService = Components.classes["@mozilla.org/network/io-service;1"]
.getService(Components.interfaces.nsIIOService);
var titleURL = ioService.newURI(url, null, null);
if (titleURL.scheme == 'http' || titleURL.scheme == 'https') {
titleURL = titleURL.QueryInterface(Components.interfaces.nsIURL);
if (titleURL.path == '/') {
title = titleURL.host;
}
else if (titleURL.fileName) {
title = titleURL.fileName;
}
else {
var dir = titleURL.directory.split('/');
title = dir[dir.length - 2];
}
}
else {
title = url;
}
} }
// Override MIME type to application/pdf if extension is .pdf -- // Override MIME type to application/pdf if extension is .pdf --
@ -446,7 +475,6 @@ Zotero.Attachments = new function(){
return itemID; return itemID;
} }
// TODO: what if called on file:// document? // TODO: what if called on file:// document?
function linkFromDocument(document, sourceItemID, parentCollectionIDs){ function linkFromDocument(document, sourceItemID, parentCollectionIDs){
Zotero.debug('Linking attachment from document'); Zotero.debug('Linking attachment from document');
@ -1046,6 +1074,11 @@ Zotero.Attachments = new function(){
return path; return path;
} }
if (!baseDir.exists()) {
Zotero.debug("Base directory '" + baseDir.path + "' doesn't exist", 2);
return path;
}
// Get nsIFile for file // Get nsIFile for file
var attachmentFile = Components.classes["@mozilla.org/file/local;1"] var attachmentFile = Components.classes["@mozilla.org/file/local;1"]
.createInstance(Components.interfaces.nsILocalFile); .createInstance(Components.interfaces.nsILocalFile);

View File

@ -71,8 +71,7 @@ Zotero.Cite = {
* @param {String} format The format of the output (html, text, or rtf) * @param {String} format The format of the output (html, text, or rtf)
* @return {String} Bibliography or item list in specified format * @return {String} Bibliography or item list in specified format
*/ */
"makeFormattedBibliographyOrCitationList":function(style, items, format, asCitationList) { "makeFormattedBibliographyOrCitationList":function(cslEngine, items, format, asCitationList) {
var cslEngine = style.getCiteProc();
cslEngine.setOutputFormat(format); cslEngine.setOutputFormat(format);
cslEngine.updateItems([item.id for each(item in items)]); cslEngine.updateItems([item.id for each(item in items)]);
@ -81,7 +80,7 @@ Zotero.Cite = {
if(bibliography) return bibliography; if(bibliography) return bibliography;
} }
var styleClass = style.class; var styleClass = cslEngine.opt.class;
var citations = [cslEngine.appendCitationCluster({"citationItems":[{"id":item.id}], "properties":{}}, true)[0][1] var citations = [cslEngine.appendCitationCluster({"citationItems":[{"id":item.id}], "properties":{}}, true)[0][1]
for each(item in items)]; for each(item in items)];

View File

@ -80,7 +80,7 @@ if (!Array.indexOf) {
}; };
} }
var CSL = { var CSL = {
PROCESSOR_VERSION: "1.0.539", PROCESSOR_VERSION: "1.0.543",
CONDITION_LEVEL_TOP: 1, CONDITION_LEVEL_TOP: 1,
CONDITION_LEVEL_BOTTOM: 2, CONDITION_LEVEL_BOTTOM: 2,
PLAIN_HYPHEN_REGEX: /(?:[^\\]-|\u2013)/, PLAIN_HYPHEN_REGEX: /(?:[^\\]-|\u2013)/,
@ -2595,6 +2595,9 @@ CSL.Engine.prototype.setAbbreviations = function (arg) {
this.sys.setAbbreviations(arg); this.sys.setAbbreviations(arg);
} }
}; };
CSL.Engine.prototype.setSuppressTrailingPunctuation = function (arg) {
this.citation.opt.suppressTrailingPunctuation = !!arg;
};
CSL.Output = {}; CSL.Output = {};
CSL.Output.Queue = function (state) { CSL.Output.Queue = function (state) {
this.levelname = ["top"]; this.levelname = ["top"];
@ -3209,19 +3212,30 @@ CSL.Output.Queue.adjust = function (punctInQuote) {
return false; return false;
} }
function matchLastChar(blob, chr) { function matchLastChar(blob, chr) {
if (blob.strings.suffix.slice(0, 1) === chr) { if (!PUNCT[chr]) {
return true; return false;
} else if ("string" === typeof blob.blobs) { }
if ("string" === typeof blob.blobs) {
if (blob.blobs.slice(-1) === chr) { if (blob.blobs.slice(-1) === chr) {
return true; return true;
} else { } else {
return false; return false;
} }
} } else {
for (var i=0,ilen=blob.blobs.length;i<ilen;i++) { var child = blob.blobs[blob.blobs.length-1];
if (matchLastChar(blob.blobs[i])) return true; if (child) {
} var childChar = child.strings.suffix.slice(-1);
if (!childChar) {
return matchLastChar(child,chr);
} else if (child.strings.suffix.slice(-1) == chr) {
return true;
} else {
return false; return false;
}
} else {
return false;
}
}
}; };
function mergeChars (First, first, Second, second, merge_right) { function mergeChars (First, first, Second, second, merge_right) {
FirstStrings = "blobs" === first ? First : First.strings; FirstStrings = "blobs" === first ? First : First.strings;
@ -3282,7 +3296,13 @@ CSL.Output.Queue.adjust = function (punctInQuote) {
} }
}; };
function upward (parent) { function upward (parent) {
if ("object" !== typeof parent || "object" !== typeof parent.blobs || !parent.blobs.length) { if (parent.blobs && "string" == typeof parent.blobs) {
if (PUNCT[parent.strings.suffix.slice(0,1)]
&& parent.strings.suffix.slice(0,1) === parent.blobs.slice(-1)) {
parent.strings.suffix = parent.strings.suffix.slice(1);
}
return;
} else if ("object" !== typeof parent || "object" !== typeof parent.blobs || !parent.blobs.length) {
return; return;
} }
var parentDecorations = blobHasDecorations(parent,true); var parentDecorations = blobHasDecorations(parent,true);
@ -3343,8 +3363,14 @@ CSL.Output.Queue.adjust = function (punctInQuote) {
} }
} }
}; };
function downward (parent) { function downward (parent, top) {
if ("object" !== typeof parent || "object" !== typeof parent.blobs || !parent.blobs.length) { if (parent.blobs && "string" == typeof parent.blobs) {
if (PUNCT[parent.strings.suffix.slice(0,1)]
&& parent.strings.suffix.slice(0,1) === parent.blobs.slice(-1)) {
parent.strings.suffix = parent.strings.suffix.slice(1);
}
return;
} else if ("object" !== typeof parent || "object" !== typeof parent.blobs || !parent.blobs.length) {
return; return;
} }
var parentStrings = parent.strings; var parentStrings = parent.strings;
@ -3379,25 +3405,28 @@ CSL.Output.Queue.adjust = function (punctInQuote) {
if (PUNCT[parentChar]) { if (PUNCT[parentChar]) {
if (!blobEndsInNumber(child)) { if (!blobEndsInNumber(child)) {
mergeChars(child, 'suffix', parent, 'suffix'); mergeChars(child, 'suffix', parent, 'suffix');
if (parentStrings.suffix.slice(0,1) === ".") {
childStrings.suffix += parentStrings.suffix.slice(0,1);
parentStrings.suffix = parentStrings.suffix.slice(1);
}
} }
} }
if (childStrings.suffix.slice(-1) === " " && parentStrings.suffix.slice(0,1)) { if (childStrings.suffix.slice(-1) === " " && parentStrings.suffix.slice(0,1)) {
parentStrings.suffix = parentStrings.suffix.slice(1); parentStrings.suffix = parentStrings.suffix.slice(1);
} }
} else {
if (matchLastChar(child,parent.strings.suffix.slice(0,1))) {
parent.strings.suffix = parent.strings.suffix.slice(1);
}
} }
if (PUNCT_OR_SPACE[childStrings.suffix.slice(0,1)]) { if (PUNCT_OR_SPACE[childStrings.suffix.slice(0,1)]) {
if ("string" === typeof child.blobs && child.blobs.slice(-1) === childStrings.suffix.slice(0,1)) { if ("string" === typeof child.blobs && child.blobs.slice(-1) === childStrings.suffix.slice(0,1)) {
childStrings.suffix = childStrings.suffix.slice(1); childStrings.suffix = childStrings.suffix.slice(1);
} }
if (childStrings.suffix.slice(-1) === parentStrings.suffix.slice(0, 1)) { if (childStrings.suffix.slice(-1) === parentStrings.suffix.slice(0, 1)) {
childStrings.suffix = childStrings.suffix.slice(0, -1); parentStrings.suffix = parentStrings.suffix.slice(0, -1);
} }
} }
} }
if (matchLastChar(parent,parent.strings.suffix.slice(0,1))) {
parent.strings.suffix = parent.strings.suffix.slice(1);
}
} else if (parentStrings.delimiter) { } else if (parentStrings.delimiter) {
if (PUNCT_OR_SPACE[parentStrings.delimiter.slice(0,1)] if (PUNCT_OR_SPACE[parentStrings.delimiter.slice(0,1)]
&& parentStrings.delimiter.slice(0, 1) === childStrings.suffix.slice(-1)) { && parentStrings.delimiter.slice(0, 1) === childStrings.suffix.slice(-1)) {
@ -4198,7 +4227,7 @@ CSL.Engine.prototype.processCitationCluster = function (citation, citationsPre,
this.tmp.citation_id = "" + citation.citationID; this.tmp.citation_id = "" + citation.citationID;
obj = []; obj = [];
obj.push(citationsPre.length); obj.push(citationsPre.length);
obj.push(this.process_CitationCluster.call(this, sortedItems)); obj.push(this.process_CitationCluster.call(this, sortedItems, citation.citationID));
ret.push(obj); ret.push(obj);
ret.sort(function (a, b) { ret.sort(function (a, b) {
if (a[0] > b[0]) { if (a[0] > b[0]) {
@ -4329,9 +4358,14 @@ CSL.getCitationCluster = function (inputList, citationID) {
this.tmp.last_years_used = []; this.tmp.last_years_used = [];
this.tmp.backref_index = []; this.tmp.backref_index = [];
this.tmp.cite_locales = []; this.tmp.cite_locales = [];
var suppressTrailingPunctuation = false;
if (this.opt.xclass === "note" && this.citation.opt.suppressTrailingPunctuation) {
suppressTrailingPunctuation = true;
}
if (citationID) { if (citationID) {
this.registry.citationreg.citationById[citationID].properties.backref_index = false; if (this.registry.citationreg.citationById[citationID].properties["suppress-trailing-punctuation"]) {
this.registry.citationreg.citationById[citationID].properties.backref_citation = false; suppressTrailingPunctuation = true;
}
} }
if (this.opt.xclass === "note") { if (this.opt.xclass === "note") {
var parasets = []; var parasets = [];
@ -4460,7 +4494,9 @@ CSL.getCitationCluster = function (inputList, citationID) {
&& this.sys.wrapCitationEntry && this.sys.wrapCitationEntry
&& !this.tmp.just_looking && !this.tmp.just_looking
&& this.tmp.area === "citation")) { && this.tmp.area === "citation")) {
if (!suppressTrailingPunctuation) {
this.output.queue[this.output.queue.length - 1].strings.suffix = use_layout_suffix; this.output.queue[this.output.queue.length - 1].strings.suffix = use_layout_suffix;
}
this.output.queue[0].strings.prefix = this.citation.opt.layout_prefix; this.output.queue[0].strings.prefix = this.citation.opt.layout_prefix;
} }
} }
@ -4933,7 +4969,7 @@ CSL.getBibliographyEntries = function (bibsection) {
for (var j=0,jlen=this.output.queue.length;j<jlen;j+=1) { for (var j=0,jlen=this.output.queue.length;j<jlen;j+=1) {
this.output.adjust.upward(this.output.queue[j]); this.output.adjust.upward(this.output.queue[j]);
this.output.adjust.leftward(this.output.queue[j]); this.output.adjust.leftward(this.output.queue[j]);
this.output.adjust.downward(this.output.queue[j]); this.output.adjust.downward(this.output.queue[j],true);
this.output.adjust.fix(this.output.queue[j]); this.output.adjust.fix(this.output.queue[j]);
} }
res = this.output.string(this, this.output.queue)[0]; res = this.output.string(this, this.output.queue)[0];
@ -6408,15 +6444,17 @@ CSL.Node.layout = {
var sp; var sp;
if (item && item.prefix) { if (item && item.prefix) {
sp = ""; sp = "";
var test_prefix = item.prefix.replace(/<[^>]+>/g, "").replace(/["'\u201d\u2019]/g,"").replace(/\s+$/, "").replace(/^[.\s]+/, ""); var test_prefix = item.prefix.replace(/<[^>]+>/g, "").replace(/["'\u201d\u2019\u00bb\u202f\u00a0 ]+$/g,"");
var test_char = test_prefix.slice(-1);
if (test_prefix.match(CSL.ENDSWITH_ROMANESQUE_REGEXP)) { if (test_prefix.match(CSL.ENDSWITH_ROMANESQUE_REGEXP)) {
sp = " "; sp = " ";
} else if (CSL.TERMINAL_PUNCTUATION.slice(0,-1).indexOf(test_prefix.slice(-1))) { } else if (CSL.TERMINAL_PUNCTUATION.slice(0,-1).indexOf(test_char) > -1) {
sp = " ";
} else if (test_char.match(/[\)\],0-9]/)) {
sp = " "; sp = " ";
} }
var ignorePredecessor = false; var ignorePredecessor = false;
if (CSL.TERMINAL_PUNCTUATION.slice(0,-1).indexOf(test_prefix.slice(-1)) > -1 if (CSL.TERMINAL_PUNCTUATION.slice(0,-1).indexOf(test_char) > -1) {
&& test_prefix.slice(0, 1) != test_prefix.slice(0, 1).toLowerCase()) {
state.tmp.term_predecessor = false; state.tmp.term_predecessor = false;
ignorePredecessor = true; ignorePredecessor = true;
} }
@ -7214,6 +7252,10 @@ CSL.NameOutput.prototype.setCommonTerm = function () {
} }
freeters_offset += 1; freeters_offset += 1;
} }
if (this.persons[v].length !== this.persons[vv].length) {
this.common_term = false;
return;
}
for (var j = 0, jlen = this.persons[v].length; j < jlen; j += 1) { for (var j = 0, jlen = this.persons[v].length; j < jlen; j += 1) {
if (this.etal_spec[v].persons[j] !== this.etal_spec[vv].persons[j] if (this.etal_spec[v].persons[j] !== this.etal_spec[vv].persons[j]
|| !this._compareNamesets(this.persons[v][j], this.persons[vv][j])) { || !this._compareNamesets(this.persons[v][j], this.persons[vv][j])) {
@ -12654,7 +12696,7 @@ CSL.Util.FlipFlopper.prototype.init = function (str, blob) {
}; };
CSL.Util.FlipFlopper.prototype._normalizeString = function (str) { CSL.Util.FlipFlopper.prototype._normalizeString = function (str) {
var i, ilen; var i, ilen;
str = str.replace(/\s+'\s+/," ","g"); str = str.replace(/\s+'\s+/g," ");
if (str.indexOf(this.quotechars[0]) > -1) { if (str.indexOf(this.quotechars[0]) > -1) {
for (i = 0, ilen = 2; i < ilen; i += 1) { for (i = 0, ilen = 2; i < ilen; i += 1) {
if (this.quotechars[i + 2]) { if (this.quotechars[i + 2]) {

View File

@ -28,7 +28,11 @@ Zotero.Connector = new function() {
const CONNECTOR_API_VERSION = 2; const CONNECTOR_API_VERSION = 2;
var _ieStandaloneIframeTarget, _ieConnectorCallbacks; var _ieStandaloneIframeTarget, _ieConnectorCallbacks;
this.isOnline = null; // As of Chrome 38 (and corresponding Opera version 24?) pages loaded over
// https (i.e. the zotero bookmarklet iframe) can not send requests over
// http, so pinging Standalone at http://127.0.0.1 fails.
// Disable for all browsers, except IE, which may be used frequently with ZSA
this.isOnline = Zotero.isBookmarklet && !Zotero.isIE ? false : null;
/** /**
* Checks if Zotero is online and passes current status to callback * Checks if Zotero is online and passes current status to callback
@ -36,7 +40,10 @@ Zotero.Connector = new function() {
*/ */
this.checkIsOnline = function(callback) { this.checkIsOnline = function(callback) {
// Only check once in bookmarklet // Only check once in bookmarklet
if(Zotero.isBookmarklet && this.isOnline !== null) callback(this.isOnline); if(Zotero.isBookmarklet && this.isOnline !== null) {
callback(this.isOnline);
return;
}
if(Zotero.isIE) { if(Zotero.isIE) {
if(window.location.protocol !== "http:") { if(window.location.protocol !== "http:") {
@ -233,25 +240,7 @@ Zotero.Connector_Debug = new function() {
* Submit data to the sserver * Submit data to the sserver
*/ */
this.submitReport = function(callback) { this.submitReport = function(callback) {
var uploadCallback = function (xmlhttp) { Zotero.HTTP.doPost(ZOTERO_CONFIG.REPOSITORY_URL + "report?debug=1", Zotero.Debug.get(),
var ps = Components.classes["@mozilla.org/embedcomp/prompt-service;1"]
.getService(Components.interfaces.nsIPromptService);
if (!xmlhttp.responseXML) {
callback(false, 'Invalid response from server');
return;
}
var reported = xmlhttp.responseXML.getElementsByTagName('reported');
if (reported.length != 1) {
callback(false, 'The server returned an error. Please try again.');
return;
}
var reportID = reported[0].getAttribute('reportID');
callback(true, reportID);
}
Zotero.HTTP.doPost("http://www.zotero.org/repo/report?debug=1", Zotero.Debug.get(),
function(xmlhttp) { function(xmlhttp) {
if (!xmlhttp.responseXML) { if (!xmlhttp.responseXML) {
callback(false, 'Invalid response from server'); callback(false, 'Invalid response from server');

View File

@ -66,7 +66,7 @@ Zotero.Repo = new function() {
} }
// then try repo // then try repo
Zotero.HTTP.doGet(ZOTERO_CONFIG.REPOSITORY_URL+"/code/"+translatorID+"?version="+Zotero.version, Zotero.HTTP.doGet(ZOTERO_CONFIG.REPOSITORY_URL + "code/" + translatorID + "?version=" + Zotero.version,
function(xmlhttp) { function(xmlhttp) {
_haveCode(xmlhttp.status === 200 ? xmlhttp.responseText : false, translatorID, _haveCode(xmlhttp.status === 200 ? xmlhttp.responseText : false, translatorID,
Zotero.Repo.SOURCE_REPO, callback); Zotero.Repo.SOURCE_REPO, callback);
@ -137,7 +137,7 @@ Zotero.Repo = new function() {
* Retrieve metadata from repository * Retrieve metadata from repository
*/ */
function _updateFromRepo(reset, callback) { function _updateFromRepo(reset, callback) {
var url = ZOTERO_CONFIG.REPOSITORY_URL+"/metadata?version="+Zotero.version+"&last="+ var url = ZOTERO_CONFIG.REPOSITORY_URL + "metadata?version=" + Zotero.version + "&last="+
(reset ? "0" : Zotero.Prefs.get("connector.repo.lastCheck.repoTime")); (reset ? "0" : Zotero.Prefs.get("connector.repo.lastCheck.repoTime"));
Zotero.HTTP.doGet(url, function(xmlhttp) { Zotero.HTTP.doGet(url, function(xmlhttp) {

View File

@ -196,7 +196,7 @@ Zotero.Translate.ItemSaver.prototype = {
Zotero.API.createItem({"items":newItems}, function(statusCode, response) { Zotero.API.createItem({"items":newItems}, function(statusCode, response) {
if(statusCode !== 200) { if(statusCode !== 200) {
callback(false, new Error("Save to server failed with "+statusCode+" "+response)); callback(false, new Error("Save to server failed with "+statusCode+" "+response));
retrun; return;
} }
try { try {

View File

@ -113,7 +113,7 @@ Zotero.Collection.prototype._set = function (field, val) {
return; return;
case 'name': case 'name':
val = Zotero.Utilities.trim(val); val = Zotero.Utilities.trim(val).normalize();
break; break;
} }

View File

@ -104,7 +104,7 @@ Zotero.Creator.prototype._set = function (field, val) {
case 'lastName': case 'lastName':
case 'shortName': case 'shortName':
if (val) { if (val) {
val = Zotero.Utilities.trim(val); val = Zotero.Utilities.trim(val).normalize();
} }
else { else {
val = ''; val = '';

View File

@ -691,7 +691,7 @@ Zotero.Item.prototype.inCollection = function(collectionID) {
*/ */
Zotero.Item.prototype.setField = function(field, value, loadIn) { Zotero.Item.prototype.setField = function(field, value, loadIn) {
if (typeof value == 'string') { if (typeof value == 'string') {
value = value.trim(); value = value.trim().normalize();
} }
this._disabledCheck(); this._disabledCheck();
@ -877,11 +877,12 @@ Zotero.Item.prototype.getDisplayTitle = function (includeAuthorAndDate) {
var itemTypeName = Zotero.ItemTypes.getName(itemTypeID); var itemTypeName = Zotero.ItemTypes.getName(itemTypeID);
if (!title && (itemTypeID == 8 || itemTypeID == 10)) { // 'letter' and 'interview' itemTypeIDs if (!title && (itemTypeID == 8 || itemTypeID == 10)) { // 'letter' and 'interview' itemTypeIDs
var creators = this.getCreators(); let creators = this.getCreators();
var authors = []; let authors = [];
var participants = []; let participants = [];
if (creators) { if (creators) {
for each(var creator in creators) { for (let i=0; i<creators.length; i++) {
let creator = creators[i];
if ((itemTypeID == 8 && creator.creatorTypeID == 16) || // 'letter'/'recipient' if ((itemTypeID == 8 && creator.creatorTypeID == 16) || // 'letter'/'recipient'
(itemTypeID == 10 && creator.creatorTypeID == 7)) { // 'interview'/'interviewer' (itemTypeID == 10 && creator.creatorTypeID == 7)) { // 'interview'/'interviewer'
participants.push(creator); participants.push(creator);
@ -896,9 +897,9 @@ Zotero.Item.prototype.getDisplayTitle = function (includeAuthorAndDate) {
var strParts = []; var strParts = [];
if (includeAuthorAndDate) { if (includeAuthorAndDate) {
var names = []; let names = [];
for each(author in authors) { for (let i=0; i<authors.length; i++) {
names.push(author.ref.lastName); names.push(authors[i].ref.lastName);
} }
// TODO: Use same logic as getFirstCreatorSQL() (including "et al.") // TODO: Use same logic as getFirstCreatorSQL() (including "et al.")
@ -908,9 +909,10 @@ Zotero.Item.prototype.getDisplayTitle = function (includeAuthorAndDate) {
} }
if (participants.length > 0) { if (participants.length > 0) {
var names = []; let names = [];
for each(participant in participants) { let max = Math.min(4, participants.length);
names.push(participant.ref.lastName); for (let i=0; i<max; i++) {
names.push(participants[i].ref.lastName);
} }
switch (names.length) { switch (names.length) {
case 1: case 1:

View File

@ -98,7 +98,7 @@ Zotero.Tag.prototype._set = function (field, val) {
return; return;
case 'name': case 'name':
val = Zotero.Utilities.trim(val); val = Zotero.Utilities.trim(val).normalize();
break; break;
} }

View File

@ -46,23 +46,6 @@ Zotero.Debug = new function () {
return; return;
} }
// Properly display thrown Error objects
if (message && message.constructor) {
switch (message.constructor.name) {
case 'Error':
case 'EvalError':
case 'RangeError':
case 'ReferenceError':
case 'SyntaxError':
case 'TypeError':
case 'URIError':
message = "'message' => \"" + message.message + "\"\n"
+ Zotero.Utilities.varDump(message) + "\n"
+ message.stack;
break;
}
}
if (typeof message != 'string') { if (typeof message != 'string') {
message = Zotero.Utilities.varDump(message); message = Zotero.Utilities.varDump(message);
} }

View File

@ -170,7 +170,9 @@ Zotero.Duplicates.prototype._findDuplicates = function () {
} }
// If no comparison function, check for exact match // If no comparison function, check for exact match
else { else {
if (rows[i].value !== rows[j].value) { if (!rows[i].value || !rows[j].value
|| (rows[i].value !== rows[j].value)
) {
break; break;
} }
} }
@ -205,8 +207,8 @@ Zotero.Duplicates.prototype._findDuplicates = function () {
var isbnCache = {}; var isbnCache = {};
if (rows) { if (rows) {
for each(var row in rows) { for each(var row in rows) {
row.value = (row.value+'').replace(/[^\dX]+/ig, '').toUpperCase(); //ignore formatting row.value = Zotero.Utilities.cleanISBN('' + row.value);
isbnCache[row.itemID] = row.value; if (row.value) isbnCache[row.itemID] = row.value;
} }
rows.sort(sortByValue); rows.sort(sortByValue);
processRows(); processRows();

View File

@ -372,6 +372,115 @@ Zotero.File = new function(){
} }
this.createShortened = function (file, type, mode, maxBytes) {
if (!maxBytes) {
maxBytes = 255;
}
// Limit should be 255, but leave room for unique numbering if necessary
var padding = 3;
while (true) {
var newLength = maxBytes - padding;
try {
file.create(type, mode);
}
catch (e) {
let pathError = false;
let pathByteLength = Zotero.Utilities.Internal.byteLength(file.path);
let fileNameByteLength = Zotero.Utilities.Internal.byteLength(file.leafName);
// Windows API only allows paths of 260 characters
//
// I think this should be >260 but we had a report of an error with exactly
// 260 chars: https://forums.zotero.org/discussion/41410
if (e.name == "NS_ERROR_FILE_NOT_FOUND" && pathByteLength >= 260) {
Zotero.debug("Path is " + file.path);
pathError = true;
}
// ext3/ext4/HFS+ have a filename length limit of ~254 bytes
else if ((e.name == "NS_ERROR_FAILURE" || e.name == "NS_ERROR_FILE_NAME_TOO_LONG")
&& (fileNameByteLength >= 254 || (Zotero.isLinux && fileNameByteLength > 143))) {
Zotero.debug("Filename is '" + file.leafName + "'");
}
else {
Zotero.debug("Path is " + file.path);
throw e;
}
// Preserve extension
var matches = file.leafName.match(/.+(\.[a-z0-9]{0,20})$/i);
var ext = matches ? matches[1] : "";
if (pathError) {
let pathLength = pathByteLength - fileNameByteLength;
newLength -= pathLength;
// Make sure there's a least 1 character of the basename left over
if (newLength - ext.length < 1) {
throw new Error("Path is too long");
}
}
// Shorten the filename
//
// Shortened file could already exist if there was another file with a
// similar name that was also longer than the limit, so we do this in a
// loop, adding numbers if necessary
var uniqueFile = file.clone();
var step = 0;
while (step < 100) {
let newBaseName = uniqueFile.leafName.substr(0, newLength - ext.length);
if (step == 0) {
var newName = newBaseName + ext;
}
else {
var newName = newBaseName + "-" + step + ext;
}
// Check actual byte length, and shorten more if necessary
if (Zotero.Utilities.Internal.byteLength(newName) > maxBytes) {
step = 0;
newLength--;
continue;
}
uniqueFile.leafName = newName;
if (!uniqueFile.exists()) {
break;
}
step++;
}
var msg = "Shortening filename to '" + newName + "'";
Zotero.debug(msg, 2);
Zotero.log(msg, 'warning');
try {
uniqueFile.create(Components.interfaces.nsIFile.type, mode);
}
catch (e) {
// On Linux, try 143, which is the max filename length with eCryptfs
if (e.name == "NS_ERROR_FILE_NAME_TOO_LONG" && Zotero.isLinux && uniqueFile.leafName.length > 143) {
Zotero.debug("Trying shorter filename in case of filesystem encryption", 2);
maxBytes = 143;
continue;
}
else {
throw e;
}
}
file.leafName = uniqueFile.leafName;
}
break;
}
}
this.copyToUnique = function (file, newFile) { this.copyToUnique = function (file, newFile) {
newFile.createUnique(Components.interfaces.nsIFile.NORMAL_FILE_TYPE, 0644); newFile.createUnique(Components.interfaces.nsIFile.NORMAL_FILE_TYPE, 0644);
var newName = newFile.leafName; var newName = newFile.leafName;
@ -607,10 +716,13 @@ Zotero.File = new function(){
var opWord = Zotero.getString('file.accessError.updated'); var opWord = Zotero.getString('file.accessError.updated');
} }
Zotero.debug(file.path);
Zotero.debug(e, 1);
Components.utils.reportError(e);
if (e.name == 'NS_ERROR_FILE_ACCESS_DENIED' || e.name == 'NS_ERROR_FILE_IS_LOCKED' if (e.name == 'NS_ERROR_FILE_ACCESS_DENIED' || e.name == 'NS_ERROR_FILE_IS_LOCKED'
// These show up on some Windows systems // These show up on some Windows systems
|| e.name == 'NS_ERROR_FAILURE' || e.name == 'NS_ERROR_FILE_NOT_FOUND') { || e.name == 'NS_ERROR_FAILURE' || e.name == 'NS_ERROR_FILE_NOT_FOUND') {
Zotero.debug(e);
str = str + " " + Zotero.getString('file.accessError.cannotBe') + " " + opWord + "."; str = str + " " + Zotero.getString('file.accessError.cannotBe') + " " + opWord + ".";
var checkFileWindows = Zotero.getString('file.accessError.message.windows'); var checkFileWindows = Zotero.getString('file.accessError.message.windows');
var checkFileOther = Zotero.getString('file.accessError.message.other'); var checkFileOther = Zotero.getString('file.accessError.message.other');

View File

@ -990,17 +990,11 @@ Zotero.HTTP = new function() {
if(typeof url !== "object") { if(typeof url !== "object") {
url = Services.io.newURI(url, null, null).QueryInterface(Components.interfaces.nsIURL); url = Services.io.newURI(url, null, null).QueryInterface(Components.interfaces.nsIURL);
} }
var parser = Components.classes["@mozilla.org/xmlextras/domparser;1"]
.createInstance(Components.interfaces.nsIDOMParser);
var secMan = Components.classes["@mozilla.org/scriptsecuritymanager;1"]
.getService(Components.interfaces.nsIScriptSecurityManager);
parser.init(secMan.getCodebasePrincipal(url), url, url);
return Zotero.Translate.DOMWrapper.wrap(doc, { return Zotero.Translate.DOMWrapper.wrap(doc, {
"documentURI":{ "enumerable":true, "value":url.spec }, "documentURI":url.spec,
"URL":{ "enumerable":true, "value":url.spec }, "URL":url.spec,
"location":{ "enumerable":true, "value":(new Zotero.HTTP.Location(url)) }, "location":new Zotero.HTTP.Location(url),
"defaultView":{ "enumerable":true, "value":(new Zotero.HTTP.Window(url)) } "defaultView":new Zotero.HTTP.Window(url)
}); });
} }
} }

View File

@ -568,10 +568,21 @@ Zotero.ItemTreeView.prototype.notify = function(action, type, ids, extraData)
for (var i=0, len=ids.length; i<len; i++) { for (var i=0, len=ids.length; i<len; i++) {
if (action == 'delete' || action == 'trash' || if (action == 'delete' || action == 'trash' ||
!itemGroup.ref.hasItem(ids[i])) { !itemGroup.ref.hasItem(ids[i])) {
let row = this._itemRowMap[ids[i]];
// Row might already be gone (e.g. if this is a child and // Row might already be gone (e.g. if this is a child and
// 'modify' was sent to parent) // 'modify' was sent to parent)
if (this._itemRowMap[ids[i]] != undefined) { if (row == undefined) {
rows.push(this._itemRowMap[ids[i]]); continue;
}
rows.push(row);
// Remove child items of removed parents
if (this.isContainer(row) && this.isContainerOpen(row)) {
while (++row < this.rowCount && this.getLevel(row) > 0) {
rows.push(row);
}
} }
} }
} }
@ -1444,22 +1455,47 @@ Zotero.ItemTreeView.prototype.sort = function(itemID)
var firstCreatorSortCache = {}; var firstCreatorSortCache = {};
// Regexp to extract the whole string up to an optional "and" or "et al."
var andEtAlRegExp = new RegExp(
// Extract the beginning of the string in non-greedy mode
"^.+?"
// up to either the end of the string, "et al." at the end of string
+ "(?=(?: " + Zotero.getString('general.etAl').replace('.', '\.') + ")?$"
// or ' and '
+ "| " + Zotero.getString('general.and') + " "
+ ")"
);
function creatorSort(a, b) { function creatorSort(a, b) {
// //
// Try sorting by first word in firstCreator field, since we already have it // Try sorting by the first name in the firstCreator field, since we already have it
//
// For sortCreatorAsString mode, just use the whole string
// //
var aItemID = a.id, var aItemID = a.id,
bItemID = b.id, bItemID = b.id,
fieldA = firstCreatorSortCache[aItemID], fieldA = firstCreatorSortCache[aItemID],
fieldB = firstCreatorSortCache[bItemID]; fieldB = firstCreatorSortCache[bItemID];
if (fieldA === undefined) { if (fieldA === undefined) {
var matches = Zotero.Items.getSortTitle(a.getField('firstCreator')).match(/^[^\s]+/); let firstCreator = Zotero.Items.getSortTitle(a.getField('firstCreator'));
if (sortCreatorAsString) {
var fieldA = firstCreator;
}
else {
var matches = andEtAlRegExp.exec(firstCreator);
var fieldA = matches ? matches[0] : ''; var fieldA = matches ? matches[0] : '';
}
firstCreatorSortCache[aItemID] = fieldA; firstCreatorSortCache[aItemID] = fieldA;
} }
if (fieldB === undefined) { if (fieldB === undefined) {
var matches = Zotero.Items.getSortTitle(b.getField('firstCreator')).match(/^[^\s]+/); let firstCreator = Zotero.Items.getSortTitle(b.getField('firstCreator'));
if (sortCreatorAsString) {
var fieldB = firstCreator;
}
else {
var matches = andEtAlRegExp.exec(firstCreator);
var fieldB = matches ? matches[0] : ''; var fieldB = matches ? matches[0] : '';
}
firstCreatorSortCache[bItemID] = fieldB; firstCreatorSortCache[bItemID] = fieldB;
} }
@ -1473,7 +1509,7 @@ Zotero.ItemTreeView.prototype.sort = function(itemID)
} }
// //
// If first word is the same, compare actual creators // If first name is the same, compare actual creators
// //
var aRef = a.ref, var aRef = a.ref,
bRef = b.ref, bRef = b.ref,

View File

@ -395,8 +395,8 @@ Zotero.MIME = new function(){
.getService(Components.interfaces.nsIAppShellService) .getService(Components.interfaces.nsIAppShellService)
.hiddenDOMWindow.navigator.mimeTypes; .hiddenDOMWindow.navigator.mimeTypes;
for (var i in types){ for (let type of types) {
if (types[i].type && types[i].type == mimeType){ if (type.type && type.type == mimeType) {
Zotero.debug('MIME type ' + mimeType + ' can be handled by plugins'); Zotero.debug('MIME type ' + mimeType + ' can be handled by plugins');
return true; return true;
} }

View File

@ -356,8 +356,9 @@ Zotero.QuickCopy = new function() {
var text = csl.previewCitationCluster(citation, [], [], "text"); var text = csl.previewCitationCluster(citation, [], [], "text");
} else { } else {
var style = Zotero.Styles.get(format); var style = Zotero.Styles.get(format);
var html = Zotero.Cite.makeFormattedBibliographyOrCitationList(style, items, "html"); var cslEngine = style.getCiteProc();
var text = Zotero.Cite.makeFormattedBibliographyOrCitationList(style, items, "text"); var html = Zotero.Cite.makeFormattedBibliographyOrCitationList(cslEngine, items, "html");
var text = Zotero.Cite.makeFormattedBibliographyOrCitationList(cslEngine, items, "text");
} }
return {text:(contentType == "html" ? html : text), html:html}; return {text:(contentType == "html" ? html : text), html:html};

View File

@ -964,7 +964,7 @@ Zotero.Schema = new function(){
// Get the last timestamp we got from the server // Get the last timestamp we got from the server
return self.getDBVersion('repository') return self.getDBVersion('repository')
.then(function (lastUpdated) { .then(function (lastUpdated) {
var url = ZOTERO_CONFIG['REPOSITORY_URL'] + '/updated?' var url = ZOTERO_CONFIG.REPOSITORY_URL + '/updated?'
+ (lastUpdated ? 'last=' + lastUpdated + '&' : '') + (lastUpdated ? 'last=' + lastUpdated + '&' : '')
+ 'version=' + Zotero.version; + 'version=' + Zotero.version;

View File

@ -114,7 +114,7 @@ Zotero.Search.prototype._set = function (field, val) {
return; return;
case 'name': case 'name':
val = Zotero.Utilities.trim(val); val = Zotero.Utilities.trim(val).normalize();
break; break;
} }
@ -420,6 +420,8 @@ Zotero.Search.prototype.addCondition = function(condition, operator, value, requ
if (condition == 'quicksearch-titleCreatorYear') { if (condition == 'quicksearch-titleCreatorYear') {
this.addCondition('title', operator, part.text, false); this.addCondition('title', operator, part.text, false);
this.addCondition('publicationTitle', operator, part.text, false); this.addCondition('publicationTitle', operator, part.text, false);
this.addCondition('shortTitle', operator, part.text, false);
this.addCondition('court', operator, part.text, false);
this.addCondition('year', operator, part.text, false); this.addCondition('year', operator, part.text, false);
} }
else { else {
@ -481,6 +483,8 @@ Zotero.Search.prototype.addCondition = function(condition, operator, value, requ
var [condition, mode] = Zotero.SearchConditions.parseCondition(condition); var [condition, mode] = Zotero.SearchConditions.parseCondition(condition);
if (typeof value == 'string') value = value.normalize();
this._conditions[searchConditionID] = { this._conditions[searchConditionID] = {
id: searchConditionID, id: searchConditionID,
condition: condition, condition: condition,
@ -520,6 +524,8 @@ Zotero.Search.prototype.updateCondition = function(searchConditionID, condition,
var [condition, mode] = Zotero.SearchConditions.parseCondition(condition); var [condition, mode] = Zotero.SearchConditions.parseCondition(condition);
if (typeof value == 'string') value = value.normalize();
this._conditions[searchConditionID] = { this._conditions[searchConditionID] = {
id: parseInt(searchConditionID), id: parseInt(searchConditionID),
condition: condition, condition: condition,
@ -2383,6 +2389,7 @@ Zotero.SearchConditions = new function(){
return Zotero.getString('searchConditions.' + str) return Zotero.getString('searchConditions.' + str)
} }
catch (e) { catch (e) {
Zotero.debug("String not found for searchConditions." + str, 2);
return Zotero.ItemFields.getLocalizedString(null, str); return Zotero.ItemFields.getLocalizedString(null, str);
} }
} }

View File

@ -375,8 +375,8 @@ Zotero.Server.Connector.SaveItem.prototype = {
sendResponseCallback(500); sendResponseCallback(500);
} }
} else { } else {
Zotero.logError(items);
sendResponseCallback(500); sendResponseCallback(500);
throw newItems;
} }
}, Zotero.Server.Connector.AttachmentProgressManager.onProgress); }, Zotero.Server.Connector.AttachmentProgressManager.onProgress);
} }

View File

@ -1097,7 +1097,7 @@ Zotero.Sync.Storage = new function () {
// If library isn't editable but filename was changed, update // If library isn't editable but filename was changed, update
// database without updating the item's mod time, which would result // database without updating the item's mod time, which would result
// in a library access error // in a library access error
if (!Zotero.Items.editCheck(item)) { if (!Zotero.Items.isEditable(item)) {
Zotero.debug("File renamed without library access -- " Zotero.debug("File renamed without library access -- "
+ "updating itemAttachments path", 3); + "updating itemAttachments path", 3);
item.relinkAttachmentFile(newFile, true); item.relinkAttachmentFile(newFile, true);
@ -1366,80 +1366,51 @@ Zotero.Sync.Storage = new function () {
Zotero.debug("Moving download file " + tempFile.leafName + " into attachment directory as '" + fileName + "'"); Zotero.debug("Moving download file " + tempFile.leafName + " into attachment directory as '" + fileName + "'");
try { try {
tempFile.moveTo(parentDir, fileName); var destFile = parentDir.clone();
destFile.append(fileName);
Zotero.File.createShortened(destFile, Components.interfaces.nsIFile.NORMAL_FILE_TYPE, 0644);
} }
catch (e) { catch (e) {
var destFile = file.clone(); Zotero.File.checkFileAccessError(e, destFile, 'create');
var windowsLength = false;
var nameLength = false;
// Windows API only allows paths of 260 characters
if (e.name == "NS_ERROR_FILE_NOT_FOUND" && destFile.path.length > 255) {
windowsLength = true;
}
// ext3/ext4/HFS+ have a filename length limit of ~254 bytes
//
// These filenames will almost always be ASCII ad files,
// but allow an extra 10 bytes anyway
else if (e.name == "NS_ERROR_FAILURE" && destFile.leafName.length >= 244) {
nameLength = true;
}
// Filesystem encryption (or, more specifically, filename encryption)
// can result in a lower limit -- not much we can do about this,
// but log a warning and skip the file
else if (e.name == "NS_ERROR_FAILURE" && Zotero.isLinux && destFile.leafName.length > 130) {
Zotero.debug(e);
var msg = Zotero.getString('sync.storage.error.encryptedFilenames', destFile.leafName);
Components.utils.reportError(msg);
return;
} }
if (windowsLength || nameLength) { if (destFile.leafName != fileName) {
// Preserve extension Zotero.debug("Changed filename '" + fileName + "' to '" + destFile.leafName + "'");
var matches = destFile.leafName.match(/\.[a-z0-9]{0,8}$/);
var ext = matches ? matches[0] : "";
if (windowsLength) { // Abort if Windows path limitation would cause filenames to be overly truncated
var pathLength = destFile.path.length - destFile.leafName.length; if (Zotero.isWin && destFile.leafName.length < 40) {
var newLength = 255 - pathLength; try {
// Require 40 available characters in path -- this is arbitrary, destFile.remove(false);
// but otherwise filenames are going to end up being cut off }
if (newLength < 40) { catch (e) {}
// TODO: localize
var msg = "Due to a Windows path length limitation, your Zotero data directory " var msg = "Due to a Windows path length limitation, your Zotero data directory "
+ "is too deep in the filesystem for syncing to work reliably. " + "is too deep in the filesystem for syncing to work reliably. "
+ "Please relocate your Zotero data to a higher directory."; + "Please relocate your Zotero data to a higher directory.";
throw (msg); Zotero.debug(msg, 1);
} throw new Error(msg);
}
else {
var newLength = 254;
} }
// Shorten file if it's too long -- we don't relink it, but this should
// be pretty rare and probably only occurs on extraneous files with
// gibberish for filenames
var fileName = destFile.leafName.substr(0, newLength - (ext.length + 1)) + ext;
var msg = "Shortening filename to '" + fileName + "'";
Zotero.debug(msg, 2);
Components.utils.reportError(msg);
tempFile.moveTo(parentDir, fileName);
renamed = true; renamed = true;
} }
else {
Components.utils.reportError(e); try {
var msg = Zotero.getString('sync.storage.error.fileNotCreated', parentDir.leafName + '/' + fileName); tempFile.moveTo(parentDir, destFile.leafName);
throw(msg);
} }
catch (e) {
try {
destFile.remove(false);
}
catch (e) {}
Zotero.File.checkFileAccessError(e, destFile, 'create');
} }
var returnFile = null; var returnFile = null;
// processDownload() needs to know that we're renaming the file // processDownload() needs to know that we're renaming the file
if (renamed) { if (renamed) {
var returnFile = file.clone(); returnFile = destFile.clone();
} }
return returnFile; return returnFile;
} }
@ -1569,124 +1540,48 @@ Zotero.Sync.Storage = new function () {
} }
try { try {
destFile.create(Components.interfaces.nsIFile.NORMAL_FILE_TYPE, 0644); Zotero.File.createShortened(destFile, Components.interfaces.nsIFile.NORMAL_FILE_TYPE, 0644);
} }
catch (e) { catch (e) {
Zotero.debug(e, 1); Zotero.debug(e, 1);
Components.utils.reportError(e);
var windowsLength = false;
var nameLength = false;
// Windows API only allows paths of 260 characters
if (e.name == "NS_ERROR_FILE_NOT_FOUND" && destFile.path.length > 255) {
Zotero.debug("Path is " + destFile.path);
windowsLength = true;
}
// ext3/ext4/HFS+ have a filename length limit of ~254 bytes
//
// These filenames will almost always be ASCII ad files,
// but allow an extra 10 bytes anyway
else if (e.name == "NS_ERROR_FAILURE" && destFile.leafName.length >= 244) {
Zotero.debug("Filename is " + destFile.leafName);
nameLength = true;
}
// Filesystem encryption (or, more specifically, filename encryption)
// can result in a lower limit -- not much we can do about this,
// but log a warning and skip the file
else if (e.name == "NS_ERROR_FAILURE" && Zotero.isLinux && destFile.leafName.length > 130) {
var msg = Zotero.getString('sync.storage.error.encryptedFilenames', destFile.leafName);
Components.utils.reportError(msg);
continue;
}
else {
Zotero.debug("Path is " + destFile.path);
}
if (windowsLength || nameLength) {
// Preserve extension
var matches = destFile.leafName.match(/\.[a-z0-9]{0,8}$/);
var ext = matches ? matches[0] : "";
if (windowsLength) {
var pathLength = destFile.path.length - destFile.leafName.length;
// Limit should be 255, but a shorter limit seems to be
// enforced for nsIZipReader.extract() below on
// non-English systems
var newLength = 240 - pathLength;
// Require 40 available characters in path -- this is arbitrary,
// but otherwise filenames are going to end up being cut off
if (newLength < 40) {
zipReader.close(); zipReader.close();
Zotero.File.checkFileAccessError(e, destFile, 'create');
}
if (destFile.leafName != fileName) {
Zotero.debug("Changed filename '" + fileName + "' to '" + destFile.leafName + "'");
// Abort if Windows path limitation would cause filenames to be overly truncated
if (Zotero.isWin && destFile.leafName.length < 40) {
try {
destFile.remove(false);
}
catch (e) {}
zipReader.close();
// TODO: localize
var msg = "Due to a Windows path length limitation, your Zotero data directory " var msg = "Due to a Windows path length limitation, your Zotero data directory "
+ "is too deep in the filesystem for syncing to work reliably. " + "is too deep in the filesystem for syncing to work reliably. "
+ "Please relocate your Zotero data to a higher directory."; + "Please relocate your Zotero data to a higher directory.";
throw (msg); Zotero.debug(msg, 1);
} throw new Error(msg);
}
else {
var newLength = 240;
}
// Shorten file if it's too long -- we don't relink it, but this should
// be pretty rare and probably only occurs on extraneous files with
// gibberish for filenames
//
// Shortened file could already exist if there was another file with a
// similar name that was also longer than the limit, so we do this in a
// loop, adding numbers if necessary
var step = 0;
do {
if (step == 0) {
var newName = destFile.leafName.substr(0, newLength - ext.length) + ext;
}
else {
var newName = destFile.leafName.substr(0, newLength - ext.length) + "-" + step + ext;
}
destFile.leafName = newName;
step++;
}
while (destFile.exists());
var msg = "Shortening filename to '" + newName + "'";
Zotero.debug(msg, 2);
Components.utils.reportError(msg);
try {
destFile.create(Components.interfaces.nsIFile.NORMAL_FILE_TYPE, 0644);
}
catch (e) {
// See above
if (e.name == "NS_ERROR_FAILURE" && Zotero.isLinux && destFile.leafName.length > 130) {
Zotero.debug(e);
var msg = Zotero.getString('sync.storage.error.encryptedFilenames', destFile.leafName);
Components.utils.reportError(msg);
continue;
}
zipReader.close();
Components.utils.reportError(e);
var msg = Zotero.getString('sync.storage.error.fileNotCreated', parentDir.leafName + '/' + fileName);
throw(msg);
} }
if (primaryFile) { if (primaryFile) {
renamed = true; renamed = true;
} }
} }
else {
zipReader.close();
Components.utils.reportError(e);
var msg = Zotero.getString('sync.storage.error.fileNotCreated', parentDir.leafName + '/' + fileName);
throw(msg);
}
}
try { try {
zipReader.extract(entryName, destFile); zipReader.extract(entryName, destFile);
} }
catch (e) { catch (e) {
Zotero.debug(destFile.path); try {
destFile.remove(false);
}
catch (e) {}
// For advertising junk files, ignore a bug on Windows where // For advertising junk files, ignore a bug on Windows where
// destFile.create() works but zipReader.extract() doesn't // destFile.create() works but zipReader.extract() doesn't

View File

@ -310,8 +310,7 @@ Zotero.Sync.Storage.ZFS = (function () {
var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"] var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"]
.getService(Components.interfaces.nsIWindowMediator); .getService(Components.interfaces.nsIWindowMediator);
var win = wm.getMostRecentWindow("navigator:browser"); var win = wm.getMostRecentWindow("navigator:browser");
var browser = win.getBrowser(); win.ZoteroPane.loadURI(url);
browser.selectedTab = browser.addTab(url);
} }
} }
@ -414,7 +413,8 @@ Zotero.Sync.Storage.ZFS = (function () {
var fis = Components.classes["@mozilla.org/network/file-input-stream;1"] var fis = Components.classes["@mozilla.org/network/file-input-stream;1"]
.createInstance(Components.interfaces.nsIFileInputStream); .createInstance(Components.interfaces.nsIFileInputStream);
fis.init(file, 0x01, 0, Components.interfaces.nsIFileInputStream.CLOSE_ON_EOF); fis.init(file, 0x01, 0, Components.interfaces.nsIFileInputStream.CLOSE_ON_EOF
| Components.interfaces.nsIFileInputStream.REOPEN_ON_REWIND);
var bis = Components.classes["@mozilla.org/network/buffered-input-stream;1"] var bis = Components.classes["@mozilla.org/network/buffered-input-stream;1"]
.createInstance(Components.interfaces.nsIBufferedInputStream) .createInstance(Components.interfaces.nsIBufferedInputStream)

View File

@ -444,17 +444,29 @@ Zotero.Style = function(arg) {
Zotero.Styles.ns); Zotero.Styles.ns);
this.updated = Zotero.Utilities.xpathText(doc, '/csl:style/csl:info[1]/csl:updated[1]', this.updated = Zotero.Utilities.xpathText(doc, '/csl:style/csl:info[1]/csl:updated[1]',
Zotero.Styles.ns).replace(/(.+)T([^\+]+)\+?.*/, "$1 $2"); Zotero.Styles.ns).replace(/(.+)T([^\+]+)\+?.*/, "$1 $2");
this.categories = [category.getAttribute("term") this.locale = Zotero.Utilities.xpathText(doc, '/csl:style/@default-locale',
for each(category in Zotero.Utilities.xpath(doc, Zotero.Styles.ns) || null;
'/csl:style/csl:info[1]/csl:category', Zotero.Styles.ns))
if(category.hasAttribute("term"))];
this._class = doc.documentElement.getAttribute("class"); this._class = doc.documentElement.getAttribute("class");
this._usesAbbreviation = !!Zotero.Utilities.xpath(doc, this._usesAbbreviation = !!Zotero.Utilities.xpath(doc,
'//csl:text[(@variable="container-title" and @form="short") or (@variable="container-title-short")][1]', '//csl:text[(@variable="container-title" and @form="short") or (@variable="container-title-short")][1]',
Zotero.Styles.ns).length; Zotero.Styles.ns).length;
this._hasBibliography = !!doc.getElementsByTagName("bibliography").length; this._hasBibliography = !!doc.getElementsByTagName("bibliography").length;
this._version = doc.documentElement.getAttribute("version"); this._version = doc.documentElement.getAttribute("version");
if(!this._version) this._version = "0.8"; if(!this._version) {
this._version = "0.8";
//In CSL 0.8.1, the "term" attribute on cs:category stored both
//citation formats and fields.
this.categories = [category.getAttribute("term")
for each(category in Zotero.Utilities.xpath(doc,
'/csl:style/csl:info[1]/csl:category', Zotero.Styles.ns))
if(category.hasAttribute("term"))];
} else {
//CSL 1.0 introduced a dedicated "citation-format" attribute on cs:category
this.categories = Zotero.Utilities.xpathText(doc,
'/csl:style/csl:info[1]/csl:category[@citation-format][1]/@citation-format',
Zotero.Styles.ns);
}
this.source = Zotero.Utilities.xpathText(doc, this.source = Zotero.Utilities.xpathText(doc,
'/csl:style/csl:info[1]/csl:link[@rel="source" or @rel="independent-parent"][1]/@href', '/csl:style/csl:info[1]/csl:link[@rel="source" or @rel="independent-parent"][1]/@href',
@ -478,6 +490,7 @@ Zotero.Style.prototype.getCiteProc = function(automaticJournalAbbreviations) {
} }
// determine version of parent style // determine version of parent style
var overrideLocale = false; // to force dependent style locale
if(this.source) { if(this.source) {
var parentStyle = Zotero.Styles.get(this.source); var parentStyle = Zotero.Styles.get(this.source);
if(!parentStyle) { if(!parentStyle) {
@ -485,6 +498,14 @@ Zotero.Style.prototype.getCiteProc = function(automaticJournalAbbreviations) {
Zotero.Styles.ios.newFileURI(this.file).spec, null)); Zotero.Styles.ios.newFileURI(this.file).spec, null));
} }
var version = parentStyle._version; var version = parentStyle._version;
// citeproc-js will not know anything about the dependent style, including
// the default-locale, so we need to force locale if a dependent style
// contains one
if(this.locale) {
overrideLocale = true;
locale = this.locale;
}
} else { } else {
var version = this._version; var version = this._version;
} }
@ -519,7 +540,12 @@ Zotero.Style.prototype.getCiteProc = function(automaticJournalAbbreviations) {
} }
try { try {
return new Zotero.CiteProc.CSL.Engine(new Zotero.Cite.System(automaticJournalAbbreviations), xml, locale); return new Zotero.CiteProc.CSL.Engine(
new Zotero.Cite.System(automaticJournalAbbreviations),
xml,
locale,
overrideLocale
);
} catch(e) { } catch(e) {
Zotero.logError(e); Zotero.logError(e);
throw e; throw e;

View File

@ -1627,7 +1627,7 @@ Zotero.Sync.Server = new function () {
_error(e); _error(e);
} }
Q.async(Zotero.Sync.Server.Data.processUpdatedXML( var result = Q.async(Zotero.Sync.Server.Data.processUpdatedXML(
responseNode.getElementsByTagName('updated')[0], responseNode.getElementsByTagName('updated')[0],
lastLocalSyncDate, lastLocalSyncDate,
syncSession, syncSession,
@ -1836,13 +1836,11 @@ Zotero.Sync.Server = new function () {
Zotero.HTTP.doPost(url, body, uploadCallback); Zotero.HTTP.doPost(url, body, uploadCallback);
} }
} }
))() ))();
.then(
null, if (Q.isPromise(result)) {
function (e) { result.catch(errorHandler);
errorHandler(e);
} }
);
} }
catch (e) { catch (e) {
_error(e); _error(e);
@ -1974,7 +1972,7 @@ Zotero.Sync.Server = new function () {
catch (e) { catch (e) {
Zotero.debug(e); Zotero.debug(e);
} }
var kbURL = 'http://zotero.org/support/kb/ssl_certificate_error'; var kbURL = 'https://zotero.org/support/kb/ssl_certificate_error';
_error(Zotero.getString('sync.storage.error.webdav.sslCertificateError', host) + "\n\n" _error(Zotero.getString('sync.storage.error.webdav.sslCertificateError', host) + "\n\n"
+ Zotero.getString('general.seeForMoreInformation', kbURL), + Zotero.getString('general.seeForMoreInformation', kbURL),
false, noReloadOnFailure); false, noReloadOnFailure);
@ -2676,8 +2674,6 @@ Zotero.Sync.Server.Data = new function() {
this.processUpdatedXML = function (updatedNode, lastLocalSyncDate, syncSession, defaultLibraryID, callback) { this.processUpdatedXML = function (updatedNode, lastLocalSyncDate, syncSession, defaultLibraryID, callback) {
yield true;
updatedNode.xpath = function (path) { updatedNode.xpath = function (path) {
return Zotero.Utilities.xpath(this, path); return Zotero.Utilities.xpath(this, path);
}; };

View File

@ -240,7 +240,16 @@ Zotero.Translate.Sandbox = {
if(!Zotero.isBookmarklet) arg = JSON.parse(JSON.stringify(arg)); if(!Zotero.isBookmarklet) arg = JSON.parse(JSON.stringify(arg));
return translation.setSearch(arg); return translation.setSearch(arg);
}; };
safeTranslator.setDocument = function(arg) { return translation.setDocument(arg) }; safeTranslator.setDocument = function(arg) {
if (Zotero.isFx && !Zotero.isBookmarklet) {
if (arg.wrappedJSObject && arg.wrappedJSObject.__wrappedObject) {
arg = arg.wrappedJSObject.__wrappedObject;
}
return translation.setDocument(new XPCNativeWrapper(arg));
} else {
return translation.setDocument(arg);
}
};
var errorHandlerSet = false; var errorHandlerSet = false;
safeTranslator.setHandler = function(arg1, arg2) { safeTranslator.setHandler = function(arg1, arg2) {
if(arg1 === "error") errorHandlerSet = true; if(arg1 === "error") errorHandlerSet = true;
@ -249,15 +258,14 @@ Zotero.Translate.Sandbox = {
try { try {
item = item.wrappedJSObject ? item.wrappedJSObject : item; item = item.wrappedJSObject ? item.wrappedJSObject : item;
if(arg1 == "itemDone") { if(arg1 == "itemDone") {
var sbZotero = translate._sandboxManager.sandbox.Zotero;
if(sbZotero.wrappedJSObject) sbZotero = sbZotero.wrappedJSObject;
if(Zotero.isFx && !Zotero.isBookmarklet
&& (translate instanceof Zotero.Translate.Web
|| translate instanceof Zotero.Translate.Search)) {
// Necessary to get around object wrappers in Firefox
item = translate._sandboxManager._copyObject(item);
}
item.complete = translate._sandboxZotero.Item.prototype.complete; item.complete = translate._sandboxZotero.Item.prototype.complete;
} else if(arg1 == "translators" && Zotero.isFx && !Zotero.isBookmarklet) {
var translators = new translate._sandboxManager.sandbox.Array();
translators = translators.wrappedJSObject || translators;
for (var i=0; i<item.length; i++) {
translators.push(item[i]);
}
item = translators;
} }
arg2(obj, item); arg2(obj, item);
} catch(e) { } catch(e) {
@ -344,7 +352,6 @@ Zotero.Translate.Sandbox = {
if(!Zotero.Utilities.isEmpty(sandbox.exports)) { if(!Zotero.Utilities.isEmpty(sandbox.exports)) {
sandbox.exports.Zotero = sandbox.Zotero; sandbox.exports.Zotero = sandbox.Zotero;
sandbox = sandbox.exports; sandbox = sandbox.exports;
if(Zotero.isFx && sandbox.wrappedJSObject) sandbox = sandbox.wrappedJSObject;
} else { } else {
translate._debug("COMPAT WARNING: "+translation.translator[0].label+" does "+ translate._debug("COMPAT WARNING: "+translation.translator[0].label+" does "+
"not export any properties. Only detect"+translation._entryFunctionSuffix+ "not export any properties. Only detect"+translation._entryFunctionSuffix+
@ -360,6 +367,18 @@ Zotero.Translate.Sandbox = {
}); });
}; };
if(Zotero.isFx && Zotero.platformMajorVersion >= 33) {
for(var i in safeTranslator) {
if (typeof(safeTranslator[i]) === "function") {
safeTranslator[i] = translate._sandboxManager._makeContentForwarder(function(func) {
return function() {
func.apply(safeTranslator, this.args.wrappedJSObject || this.args);
}
}(safeTranslator[i]));
}
}
}
return safeTranslator; return safeTranslator;
}, },
@ -405,7 +424,7 @@ Zotero.Translate.Sandbox = {
*/ */
"selectItems":function(translate, items, callback) { "selectItems":function(translate, items, callback) {
function transferObject(obj) { function transferObject(obj) {
return Zotero.isFx ? translate._sandboxManager.sandbox.JSON.parse(JSON.stringify(obj)) : obj; return Zotero.isFx ? translate._sandboxManager.copyObject(obj) : obj;
} }
if(Zotero.Utilities.isEmpty(items)) { if(Zotero.Utilities.isEmpty(items)) {
@ -1080,13 +1099,23 @@ Zotero.Translate.Base.prototype = {
* @param {Boolean} [saveAttachments=true] Exclude attachments (e.g., snapshots) on import * @param {Boolean} [saveAttachments=true] Exclude attachments (e.g., snapshots) on import
*/ */
"translate":function(libraryID, saveAttachments) { // initialize properties specific to each translation "translate":function(libraryID, saveAttachments) { // initialize properties specific to each translation
this._currentState = "translate";
if(!this.translator || !this.translator.length) { if(!this.translator || !this.translator.length) {
this.complete(false, new Error("No translator specified")); var args = arguments;
Zotero.debug("Translate: translate called without specifying a translator. Running detection first.");
this.setHandler('translators', function(me, translators) {
if(!translators.length) {
me.complete(false, "Could not find an appropriate translator");
} else {
me.setTranslator(translators);
Zotero.Translate.Base.prototype.translate.apply(me, args);
}
});
this.getTranslators();
return; return;
} }
this._currentState = "translate";
this._libraryID = libraryID; this._libraryID = libraryID;
this._saveAttachments = saveAttachments === undefined || saveAttachments; this._saveAttachments = saveAttachments === undefined || saveAttachments;
this._savingAttachments = []; this._savingAttachments = [];
@ -1123,7 +1152,7 @@ Zotero.Translate.Base.prototype = {
// translate // translate
try { try {
this._sandboxManager.sandbox["do"+this._entryFunctionSuffix].apply(null, this._getParameters()); Function.prototype.apply.call(this._sandboxManager.sandbox["do"+this._entryFunctionSuffix], null, this._getParameters());
} catch(e) { } catch(e) {
this.complete(false, e); this.complete(false, e);
return false; return false;
@ -1396,7 +1425,7 @@ Zotero.Translate.Base.prototype = {
this.incrementAsyncProcesses("Zotero.Translate#getTranslators"); this.incrementAsyncProcesses("Zotero.Translate#getTranslators");
try { try {
var returnValue = this._sandboxManager.sandbox["detect"+this._entryFunctionSuffix].apply(null, this._getParameters()); var returnValue = Function.prototype.apply.call(this._sandboxManager.sandbox["detect"+this._entryFunctionSuffix], null, this._getParameters());
} catch(e) { } catch(e) {
this.complete(false, e); this.complete(false, e);
return; return;
@ -1451,7 +1480,11 @@ Zotero.Translate.Base.prototype = {
*/ */
"_generateSandbox":function() { "_generateSandbox":function() {
Zotero.debug("Translate: Binding sandbox to "+(typeof this._sandboxLocation == "object" ? this._sandboxLocation.document.location : this._sandboxLocation), 4); Zotero.debug("Translate: Binding sandbox to "+(typeof this._sandboxLocation == "object" ? this._sandboxLocation.document.location : this._sandboxLocation), 4);
if (this._parentTranslator && this._parentTranslator._sandboxManager.newChild) {
this._sandboxManager = this._parentTranslator._sandboxManager.newChild();
} else {
this._sandboxManager = new Zotero.Translate.SandboxManager(this._sandboxLocation); this._sandboxManager = new Zotero.Translate.SandboxManager(this._sandboxLocation);
}
const createArrays = "['creators', 'notes', 'tags', 'seeAlso', 'attachments']"; const createArrays = "['creators', 'notes', 'tags', 'seeAlso', 'attachments']";
var src = "var Zotero = {};"+ var src = "var Zotero = {};"+
"Zotero.Item = function (itemType) {"+ "Zotero.Item = function (itemType) {"+
@ -1656,7 +1689,14 @@ Zotero.Translate.Web.prototype._getSandboxLocation = function() {
/** /**
* Pass document and location to detect* and do* functions * Pass document and location to detect* and do* functions
*/ */
Zotero.Translate.Web.prototype._getParameters = function() { return [this.document, this.location]; } Zotero.Translate.Web.prototype._getParameters = function() {
if (Zotero.Translate.DOMWrapper && Zotero.Translate.DOMWrapper.isWrapped(this.document)) {
return [this._sandboxManager.wrap(Zotero.Translate.DOMWrapper.unwrap(this.document), null,
this.document.__wrapperOverrides), this.location];
} else {
return [this.document, this.location];
}
};
/** /**
* Prepare translation * Prepare translation
@ -1824,7 +1864,7 @@ Zotero.Translate.Web.prototype.complete = function(returnValue, error) {
"&lastUpdated=" + encodeURIComponent(translator.lastUpdated) + "&lastUpdated=" + encodeURIComponent(translator.lastUpdated) +
"&diagnostic=" + encodeURIComponent(info) + "&diagnostic=" + encodeURIComponent(info) +
"&errorData=" + encodeURIComponent(errorString); "&errorData=" + encodeURIComponent(errorString);
Zotero.HTTP.doPost("http://www.zotero.org/repo/report", postBody); Zotero.HTTP.doPost(ZOTERO_CONFIG.REPOSITORY_URL + "report", postBody);
}); });
} }
} }
@ -1927,13 +1967,13 @@ Zotero.Translate.Import.prototype._loadTranslatorPrepareIO = function(translator
if(!this._io) { if(!this._io) {
if(Zotero.Translate.IO.Read && this.location && this.location instanceof Components.interfaces.nsIFile) { if(Zotero.Translate.IO.Read && this.location && this.location instanceof Components.interfaces.nsIFile) {
try { try {
this._io = new Zotero.Translate.IO.Read(this.location); this._io = new Zotero.Translate.IO.Read(this.location, this._sandboxManager);
} catch(e) { } catch(e) {
err = e; err = e;
} }
} else { } else {
try { try {
this._io = new Zotero.Translate.IO.String(this._string, this.path ? this.path : ""); this._io = new Zotero.Translate.IO.String(this._string, this.path ? this.path : "", this._sandboxManager);
} catch(e) { } catch(e) {
err = e; err = e;
} }
@ -2101,7 +2141,7 @@ Zotero.Translate.Export.prototype._prepareTranslation = function() {
// this is currently hackish since we pass null callbacks to the init function (they have // this is currently hackish since we pass null callbacks to the init function (they have
// callbacks to be consistent with import, but they are synchronous, so we ignore them) // callbacks to be consistent with import, but they are synchronous, so we ignore them)
if(!this.location) { if(!this.location) {
this._io = new Zotero.Translate.IO.String(null, this.path ? this.path : ""); this._io = new Zotero.Translate.IO.String(null, this.path ? this.path : "", this._sandboxManager);
this._io.init(configOptions["dataMode"], function() {}); this._io.init(configOptions["dataMode"], function() {});
} else if(!Zotero.Translate.IO.Write) { } else if(!Zotero.Translate.IO.Write) {
throw new Error("Writing to files is not supported in this build of Zotero."); throw new Error("Writing to files is not supported in this build of Zotero.");
@ -2115,6 +2155,19 @@ Zotero.Translate.Export.prototype._prepareTranslation = function() {
this._sandboxManager.importObject(this._io); this._sandboxManager.importObject(this._io);
} }
/**
* Overload Zotero.Translate.Base#translate to make sure that
* Zotero.Translate.Export#translate is not called without setting a
* translator first. Doesn't make sense to run detection for export.
*/
Zotero.Translate.Export.prototype.translate = function() {
if(!this.translator || !this.translator.length) {
this.complete(false, new Error("Export translation initiated without setting a translator"));
} else {
Zotero.Translate.Base.prototype.translate.apply(this, arguments);
}
};
/** /**
* Return the progress of the import operation, or null if progress cannot be determined * Return the progress of the import operation, or null if progress cannot be determined
*/ */
@ -2208,7 +2261,7 @@ Zotero.Translate.Search.prototype.complete = function(returnValue, error) {
*/ */
Zotero.Translate.Search.prototype._getParameters = function() { Zotero.Translate.Search.prototype._getParameters = function() {
if(Zotero.isFx) { if(Zotero.isFx) {
return [this._sandboxManager._copyObject(this.search)]; return [this._sandboxManager.copyObject(this.search)];
} }
return [this.search]; return [this.search];
}; };
@ -2276,7 +2329,7 @@ Zotero.Translate.IO = {
/** /**
* @class Translate backend for translating from a string * @class Translate backend for translating from a string
*/ */
Zotero.Translate.IO.String = function(string, uri) { Zotero.Translate.IO.String = function(string, uri, sandboxManager) {
if(string && typeof string === "string") { if(string && typeof string === "string") {
this.string = string; this.string = string;
} else { } else {
@ -2285,6 +2338,7 @@ Zotero.Translate.IO.String = function(string, uri) {
this.contentLength = this.string.length; this.contentLength = this.string.length;
this.bytesRead = 0; this.bytesRead = 0;
this._uri = uri; this._uri = uri;
this._sandboxManager = sandboxManager;
} }
Zotero.Translate.IO.String.prototype = { Zotero.Translate.IO.String.prototype = {
@ -2374,7 +2428,7 @@ Zotero.Translate.IO.String.prototype = {
this._xmlInvalid = true; this._xmlInvalid = true;
throw e; throw e;
} }
return (Zotero.isFx ? Zotero.Translate.DOMWrapper.wrap(xml) : xml); return (Zotero.isFx && !Zotero.isBookmarklet ? this._sandboxManager.wrap(xml) : xml);
}, },
"init":function(newMode, callback) { "init":function(newMode, callback) {

View File

@ -49,7 +49,7 @@ Zotero.Translate.DOMWrapper = new function() {
}; };
function isWrapper(x) { function isWrapper(x) {
return isWrappable(x) && (typeof x.SpecialPowers_wrappedObject !== "undefined"); return isWrappable(x) && (typeof x.__wrappedObject !== "undefined");
}; };
function unwrapIfWrapped(x) { function unwrapIfWrapped(x) {
@ -130,7 +130,7 @@ Zotero.Translate.DOMWrapper = new function() {
throw "Trying to unwrap a non-wrapped object!"; throw "Trying to unwrap a non-wrapped object!";
// Unwrap. // Unwrap.
return x.SpecialPowers_wrappedObject; return x.__wrappedObject;
}; };
function crawlProtoChain(obj, fn) { function crawlProtoChain(obj, fn) {
@ -172,8 +172,10 @@ Zotero.Translate.DOMWrapper = new function() {
SpecialPowersHandler.prototype.doGetPropertyDescriptor = function(name, own) { SpecialPowersHandler.prototype.doGetPropertyDescriptor = function(name, own) {
// Handle our special API. // Handle our special API.
if (name == "SpecialPowers_wrappedObject") if (name == "__wrappedObject")
return { value: this.wrappedObject, writeable: false, configurable: false, enumerable: false }; return { value: this.wrappedObject, writeable: false, configurable: false, enumerable: false };
if (name == "__wrapperOverrides")
return { value: this.overrides, writeable: false, configurable: false, enumerable: false };
// Handle __exposedProps__. // Handle __exposedProps__.
if (name == "__exposedProps__") if (name == "__exposedProps__")
return { value: ExposedPropsWaiver, writable: false, configurable: false, enumerable: false }; return { value: ExposedPropsWaiver, writable: false, configurable: false, enumerable: false };
@ -196,7 +198,7 @@ Zotero.Translate.DOMWrapper = new function() {
// Hack for overriding some properties // Hack for overriding some properties
if (this.overrides.hasOwnProperty(name)) if (this.overrides.hasOwnProperty(name))
return this.overrides[name]; return { "enumerable": true, "value": this.overrides[name] };
// Case 1: Own Properties. // Case 1: Own Properties.
// //
// This one is easy, thanks to Object.getOwnPropertyDescriptor(). // This one is easy, thanks to Object.getOwnPropertyDescriptor().
@ -281,7 +283,7 @@ Zotero.Translate.DOMWrapper = new function() {
// Insert our special API. It's not enumerable, but getPropertyNames() // Insert our special API. It's not enumerable, but getPropertyNames()
// includes non-enumerable properties. // includes non-enumerable properties.
var specialAPI = 'SpecialPowers_wrappedObject'; var specialAPI = '__wrappedObject';
if (props.indexOf(specialAPI) == -1) if (props.indexOf(specialAPI) == -1)
props.push(specialAPI); props.push(specialAPI);
@ -367,6 +369,14 @@ Zotero.Translate.DOMWrapper = new function() {
} }
} }
/**
* Wraps an object in the same sandbox as another object
*/
this.wrapIn = function(obj, insamebox) {
if(insamebox.__wrappingManager) return insamebox.__wrappingManager.wrap(obj);
return this.wrap(obj);
}
/** /**
* Checks whether an object is wrapped by a DOM wrapper * Checks whether an object is wrapped by a DOM wrapper
* @param {XPCCrossOriginWrapper} obj * @param {XPCCrossOriginWrapper} obj
@ -381,7 +391,8 @@ Zotero.Translate.DOMWrapper = new function() {
* @param {String|window} sandboxLocation * @param {String|window} sandboxLocation
*/ */
Zotero.Translate.SandboxManager = function(sandboxLocation) { Zotero.Translate.SandboxManager = function(sandboxLocation) {
this.sandbox = new Components.utils.Sandbox(sandboxLocation); // sandboxLocation = Components.classes["@mozilla.org/systemprincipal;1"].createInstance(Components.interfaces.nsIPrincipal);
var sandbox = this.sandbox = new Components.utils.Sandbox(sandboxLocation, {wantComponents:false, wantGlobalProperties:["XMLHttpRequest"]});
this.sandbox.Zotero = {}; this.sandbox.Zotero = {};
// import functions missing from global scope into Fx sandbox // import functions missing from global scope into Fx sandbox
@ -389,28 +400,14 @@ Zotero.Translate.SandboxManager = function(sandboxLocation) {
if(typeof sandboxLocation === "object" && "DOMParser" in sandboxLocation) { if(typeof sandboxLocation === "object" && "DOMParser" in sandboxLocation) {
this.sandbox.DOMParser = sandboxLocation.DOMParser; this.sandbox.DOMParser = sandboxLocation.DOMParser;
} else { } else {
var sandbox = this.sandbox;
this.sandbox.DOMParser = function() { this.sandbox.DOMParser = function() {
var uri, principal;
// get URI
if(typeof sandboxLocation === "string") { // if sandbox specified by URI
var secMan = Services.scriptSecurityManager;
uri = Services.io.newURI(sandboxLocation, "UTF-8", null);
principal = (secMan.getCodebasePrincipal || secMan.getSimpleCodebasePrincipal)(uri);
} else { // if sandbox specified by DOM document
principal = sandboxLocation.document.nodePrincipal;
uri = sandboxLocation.document.documentURIObject;
}
// initialize DOM parser
var _DOMParser = Components.classes["@mozilla.org/xmlextras/domparser;1"]
.createInstance(Components.interfaces.nsIDOMParser);
_DOMParser.init(principal, uri, uri);
// expose parseFromString
this.__exposedProps__ = {"parseFromString":"r"}; this.__exposedProps__ = {"parseFromString":"r"};
this.parseFromString = function(str, contentType) { this.parseFromString = function(str, contentType) {
return Zotero.Translate.DOMWrapper.wrap(_DOMParser.parseFromString(str, contentType)); var xhr = sandbox.XMLHttpRequest();
xhr.open("GET", "data:"+contentType+";charset=utf-8,"+encodeURIComponent(str), false);
xhr.send();
if (!xhr.responseXML) throw new Error("error parsing XML");
return xhr.responseXML;
} }
}; };
} }
@ -425,6 +422,58 @@ Zotero.Translate.SandboxManager = function(sandboxLocation) {
}; };
this.sandbox.XMLSerializer.__exposedProps__ = {"prototype":"r"}; this.sandbox.XMLSerializer.__exposedProps__ = {"prototype":"r"};
this.sandbox.XMLSerializer.prototype = {"__exposedProps__":{"serializeToString":"r"}}; this.sandbox.XMLSerializer.prototype = {"__exposedProps__":{"serializeToString":"r"}};
var expr = "(function(x) { return function() { this.args = arguments; return Function.prototype.apply.call(x, this); }.bind({}); })";
this._makeContentForwarder = Components.utils.evalInSandbox(expr, sandbox);
if (Zotero.platformMajorVersion >= 35) {
var _proxy = Components.utils.evalInSandbox('(function (target, x, overrides) {'+
' return new Proxy(x, ProxyHandler(target, overrides));'+
'})', sandbox);
var wrap = this.wrap = function(target, x, overrides) {
if (target === null || (typeof target !== "object" && typeof target !== "function")) return target;
if (!x) x = new sandbox.Object();
return _proxy(target, x, overrides);
};
var me = this;
sandbox.ProxyHandler = this._makeContentForwarder(function() {
var target = (this.args.wrappedJSObject || this.args)[0];
var overrides = (this.args.wrappedJSObject || this.args)[1] || {};
if(target instanceof Components.interfaces.nsISupports) {
target = new XPCNativeWrapper(target);
}
var ret = new sandbox.Object();
ret.wrappedJSObject.has = function(x, prop) {
return overrides.hasOwnProperty(prop) || prop in target;
};
ret.wrappedJSObject.get = function(x, prop, receiver) {
if (prop === "__wrappedObject") return target;
if (prop === "__wrappingManager") return me;
var y = overrides.hasOwnProperty(prop) ? overrides[prop] : target[prop];
if (y === null || (typeof y !== "object" && typeof y !== "function")) return y;
return wrap(y, typeof y === "function" ? function() {
var args = Array.prototype.slice.apply(arguments);
for (var i = 0; i < args.length; i++) {
if (typeof args[i] === "object" && args[i] !== null &&
args[i].wrappedJSObject && args[i].wrappedJSObject.__wrappedObject)
args[i] = new XPCNativeWrapper(args[i].wrappedJSObject.__wrappedObject);
}
return wrap(y.apply(target, args));
} : new sandbox.Object());
};
ret.wrappedJSObject.ownKeys = function(x) {
return Components.utils.cloneInto(target.getOwnPropertyNames(), sandbox);
};
ret.wrappedJSObject.enumerate = function(x) {
var y = new sandbox.Array();
for (var i in target) y.wrappedJSObject.push(i);
return y;
};
return ret;
});
} else {
this.wrap = Zotero.Translate.DOMWrapper.wrap;
}
} }
Zotero.Translate.SandboxManager.prototype = { Zotero.Translate.SandboxManager.prototype = {
@ -447,9 +496,7 @@ Zotero.Translate.SandboxManager.prototype = {
"importObject":function(object, passAsFirstArgument, attachTo) { "importObject":function(object, passAsFirstArgument, attachTo) {
if(!attachTo) attachTo = this.sandbox.Zotero; if(!attachTo) attachTo = this.sandbox.Zotero;
if(attachTo.wrappedJSObject) attachTo = attachTo.wrappedJSObject; if(attachTo.wrappedJSObject) attachTo = attachTo.wrappedJSObject;
var newExposedProps = false, var newExposedProps = false, sandbox = this.sandbox, me = this;
sandbox = this.sandbox,
me = this;
if(!object.__exposedProps__) newExposedProps = {}; if(!object.__exposedProps__) newExposedProps = {};
for(var key in (newExposedProps ? object : object.__exposedProps__)) { for(var key in (newExposedProps ? object : object.__exposedProps__)) {
let localKey = key; let localKey = key;
@ -460,13 +507,27 @@ Zotero.Translate.SandboxManager.prototype = {
var isObject = typeof object[localKey] === "object"; var isObject = typeof object[localKey] === "object";
if(isFunction || isObject) { if(isFunction || isObject) {
if(isFunction) { if(isFunction) {
if (Zotero.platformMajorVersion >= 33) {
attachTo[localKey] = this._makeContentForwarder(function() {
var args = Array.prototype.slice.apply(this.args.wrappedJSObject || this.args);
for(var i = 0; i<args.length; i++) {
// Make sure we keep XPCNativeWrappers
if(args[i] instanceof Components.interfaces.nsISupports) {
args[i] = new XPCNativeWrapper(args[i]);
}
}
if(passAsFirstArgument) args.unshift(passAsFirstArgument);
return me.copyObject(object[localKey].apply(object, args));
});
} else {
attachTo[localKey] = function() { attachTo[localKey] = function() {
var args = Array.prototype.slice.apply(arguments); var args = Array.prototype.slice.apply(arguments);
if(passAsFirstArgument) args.unshift(passAsFirstArgument); if(passAsFirstArgument) args.unshift(passAsFirstArgument);
return me._copyObject(object[localKey].apply(object, args)); return me.copyObject(object[localKey].apply(object, args));
}; };
}
} else { } else {
attachTo[localKey] = {}; attachTo[localKey] = new sandbox.Object();
} }
// attach members // attach members
@ -488,7 +549,7 @@ Zotero.Translate.SandboxManager.prototype = {
"_canCopy":function(obj) { "_canCopy":function(obj) {
if(typeof obj !== "object" || obj === null) return false; if(typeof obj !== "object" || obj === null) return false;
if((obj.constructor.name !== "Object" && obj.constructor.name !== "Array") || if((obj.constructor.name !== "Object" && obj.constructor.name !== "Array") ||
"__exposedProps__" in obj) { "__exposedProps__" in obj || (obj.wrappedJSObject && obj.wrappedJSObject.__wrappingManager)) {
return false; return false;
} }
return true; return true;
@ -499,8 +560,8 @@ Zotero.Translate.SandboxManager.prototype = {
* @param {Object} obj * @param {Object} obj
* @return {Object} * @return {Object}
*/ */
"_copyObject":function(obj, wm) { "copyObject":function(obj, wm) {
if(!this._canCopy(obj)) return obj if(!this._canCopy(obj)) return obj;
if(!wm) wm = new WeakMap(); if(!wm) wm = new WeakMap();
var obj2 = (obj.constructor.name === "Array" ? this.sandbox.Array() : this.sandbox.Object()); var obj2 = (obj.constructor.name === "Array" ? this.sandbox.Array() : this.sandbox.Object());
var wobj2 = obj2.wrappedJSObject ? obj2.wrappedJSObject : obj2; var wobj2 = obj2.wrappedJSObject ? obj2.wrappedJSObject : obj2;
@ -511,7 +572,7 @@ Zotero.Translate.SandboxManager.prototype = {
if(this._canCopy(prop1)) { if(this._canCopy(prop1)) {
var prop2 = wm.get(prop1); var prop2 = wm.get(prop1);
if(prop2 === undefined) { if(prop2 === undefined) {
prop2 = this._copyObject(prop1, wm); prop2 = this.copyObject(prop1, wm);
wm.set(prop1, prop2); wm.set(prop1, prop2);
} }
wobj2[i] = prop2; wobj2[i] = prop2;
@ -520,6 +581,56 @@ Zotero.Translate.SandboxManager.prototype = {
} }
} }
return obj2; return obj2;
},
"newChild":function() {
return new Zotero.Translate.ChildSandboxManager(this);
}
}
Zotero.Translate.ChildSandboxManager = function(parent) {
this._wrappedSandbox = new parent.sandbox.Object();
this._wrappedSandbox.Zotero = new parent.sandbox.Object();
this.sandbox = this._wrappedSandbox.wrappedJSObject || this._wrappedSandbox;
this._parent = parent;
}
Zotero.Translate.ChildSandboxManager.prototype = {
"eval":function(code, functions, path) {
// eval in sandbox scope
if(functions) {
for(var i = 0; i < functions.length; i++) {
delete this.sandbox[functions[i]];
}
}
this._parent.sandbox._withSandbox = this._wrappedSandbox;
Components.utils.evalInSandbox("with(_withSandbox){"+code+"};", this._parent.sandbox, "1.8", path, 1);
if(functions) {
for(var i = 0; i < functions.length; i++) {
try {
this._wrappedSandbox[functions[i]] = Components.utils.evalInSandbox(functions[i], this._parent.sandbox);
} catch(e) {}
}
}
this._parent.sandbox._withSandbox = undefined;
},
"importObject":function(object, passAsFirstArgument, attachTo) {
if(!attachTo) attachTo = this.sandbox.Zotero;
// Zotero.debug(object);
// Zotero.debug(attachTo);
this._parent.importObject(object, passAsFirstArgument, attachTo);
// Zotero.debug(attachTo);
},
"copyObject":function(obj) {
return this._parent.copyObject(obj);
},
"newChild":function() {
return this._parent.newChild();
},
"_makeContentForwarder":function(f) {
return this._parent._makeContentForwarder(f);
},
"wrap":function(x) {
return this._parent.wrap(x);
} }
} }
@ -532,10 +643,11 @@ Zotero.Translate.IO.maintainedInstances = [];
/******* (Native) Read support *******/ /******* (Native) Read support *******/
Zotero.Translate.IO.Read = function(file, mode) { Zotero.Translate.IO.Read = function(file, sandboxManager) {
Zotero.Translate.IO.maintainedInstances.push(this); Zotero.Translate.IO.maintainedInstances.push(this);
this.file = file; this.file = file;
this._sandboxManager = sandboxManager;
// open file // open file
this._openRawStream(); this._openRawStream();
@ -800,7 +912,7 @@ Zotero.Translate.IO.Read.prototype = {
this._xmlInvalid = true; this._xmlInvalid = true;
throw e; throw e;
} }
return (Zotero.isFx ? Zotero.Translate.DOMWrapper.wrap(xml) : xml); return (Zotero.isFx ? this._sandboxManager.wrap(xml) : xml);
}, },
"init":function(newMode, callback) { "init":function(newMode, callback) {

View File

@ -217,29 +217,42 @@ Zotero.Translate.ItemSaver.prototype = {
}, },
"_saveAttachmentFile":function(attachment, parentID, attachmentCallback) { "_saveAttachmentFile":function(attachment, parentID, attachmentCallback) {
const urlRe = /(([a-z][-+\.a-z0-9]*):\/\/[^\s]*)/i; //according to RFC3986
Zotero.debug("Translate: Adding attachment", 4); Zotero.debug("Translate: Adding attachment", 4);
if(!attachment.url && !attachment.path) { if(!attachment.url && !attachment.path) {
Zotero.debug("Translate: Ignoring attachment: no path or URL specified", 2); let e = "Translate: Ignoring attachment: no path or URL specified";
Zotero.debug(e, 2);
attachmentCallback(attachment, false, e);
return false; return false;
} }
if(!attachment.path) { if(!attachment.path) {
let url = Zotero.Attachments.cleanAttachmentURI(attachment.url);
if (!url) {
let e = "Translate: Invalid attachment URL specified <" + attachment.url + ">";
Zotero.debug(e, 2);
attachmentCallback(attachment, false, e);
return false;
}
attachment.url = url;
url = Components.classes["@mozilla.org/network/io-service;1"]
.getService(Components.interfaces.nsIIOService)
.newURI(url, null, null); // This cannot fail, since we check above
// see if this is actually a file URL // see if this is actually a file URL
var m = urlRe.exec(attachment.url); if(url.scheme == "file") {
var protocol = m ? m[2].toLowerCase() : "file";
if(protocol == "file") {
attachment.path = attachment.url; attachment.path = attachment.url;
attachment.url = false; attachment.url = false;
} else if(protocol != "http" && protocol != "https") { } else if(url.scheme != "http" && url.scheme != "https") {
Zotero.debug("Translate: Unrecognized protocol "+protocol, 2); let e = "Translate: " + url.scheme + " protocol is not allowed for attachments from translators.";
Zotero.debug(e, 2);
attachmentCallback(attachment, false, e);
return false; return false;
} }
} }
if(!attachment.path) { if(!attachment.path) {
// create from URL // At this point, must be a valid HTTP/HTTPS url
attachment.linkMode = "linked_file"; attachment.linkMode = "linked_file";
try { try {
var myID = Zotero.Attachments.linkFromURL(attachment.url, parentID, var myID = Zotero.Attachments.linkFromURL(attachment.url, parentID,
@ -399,9 +412,10 @@ Zotero.Translate.ItemSaver.prototype = {
} }
} }
var doc = undefined;
if(attachment.document) { if(attachment.document) {
attachment.document = Zotero.Translate.DOMWrapper.unwrap(attachment.document); doc = new XPCNativeWrapper(Zotero.Translate.DOMWrapper.unwrap(attachment.document));
if(!attachment.title) attachment.title = attachment.document.title; if(!attachment.title) attachment.title = doc.title;
} }
var title = attachment.title || null; var title = attachment.title || null;
if(!title) { if(!title) {
@ -412,39 +426,49 @@ Zotero.Translate.ItemSaver.prototype = {
if(attachment.snapshot === false || !this._saveFiles) { if(attachment.snapshot === false || !this._saveFiles) {
// if snapshot is explicitly set to false, attach as link // if snapshot is explicitly set to false, attach as link
attachment.linkMode = "linked_url"; attachment.linkMode = "linked_url";
if(attachment.document) { let url, mimeType;
try { if(doc) {
Zotero.Attachments.linkFromURL(attachment.document.location.href, parentID, url = doc.location.href;
(attachment.mimeType ? attachment.mimeType : attachment.document.contentType), mimeType = attachment.mimeType ? attachment.mimeType : doc.contentType;
title);
attachmentCallback(attachment, 100);
} catch(e) {
Zotero.debug("Translate: Error adding attachment "+attachment.url, 2);
attachmentCallback(attachment, false, e);
}
return true;
} else { } else {
if(!attachment.mimeType || !title) { url = attachment.url
Zotero.debug("Translate: Either mimeType or title is missing; attaching file will be slower", 3); mimeType = attachment.mimeType ? attachment.mimeType : undefined;
}
let cleanURI = Zotero.Attachments.cleanAttachmentURI(url);
if (!cleanURI) {
let e = "Translate: Invalid attachment URL specified <" + url + ">";
Zotero.debug(e, 2);
attachmentCallback(attachment, false, e);
return false;
}
url = Components.classes["@mozilla.org/network/io-service;1"]
.getService(Components.interfaces.nsIIOService)
.newURI(cleanURI, null, null); // This cannot fail, since we check above
// Only HTTP/HTTPS links are allowed
if(url.scheme != "http" && url.scheme != "https") {
let e = "Translate: " + url.scheme + " protocol is not allowed for attachments from translators.";
Zotero.debug(e, 2);
attachmentCallback(attachment, false, e);
return false;
} }
try { try {
Zotero.Attachments.linkFromURL(attachment.url, parentID, Zotero.Attachments.linkFromURL(cleanURI, parentID, mimeType, title);
(attachment.mimeType ? attachment.mimeType : undefined),
title);
attachmentCallback(attachment, 100); attachmentCallback(attachment, 100);
} catch(e) { } catch(e) {
Zotero.debug("Translate: Error adding attachment "+attachment.url, 2); Zotero.debug("Translate: Error adding attachment "+attachment.url, 2);
attachmentCallback(attachment, false, e); attachmentCallback(attachment, false, e);
return false;
} }
return true; return true;
}
} else { } else {
// if snapshot is not explicitly set to false, retrieve snapshot // if snapshot is not explicitly set to false, retrieve snapshot
if(attachment.document) { if(doc) {
try { try {
attachment.linkMode = "imported_url"; attachment.linkMode = "imported_url";
Zotero.Attachments.importFromDocument(attachment.document, Zotero.Attachments.importFromDocument(doc,
parentID, title, null, function(status, err) { parentID, title, null, function(status, err) {
if(status) { if(status) {
attachmentCallback(attachment, 100); attachmentCallback(attachment, 100);

View File

@ -229,7 +229,7 @@ Zotero.Utilities = {
*/ */
"trimInternal":function(/**String*/ s) { "trimInternal":function(/**String*/ s) {
if (typeof(s) != "string") { if (typeof(s) != "string") {
throw "trimInternal: argument must be a string"; throw new Error("trimInternal: argument must be a string");
} }
s = s.replace(/[\xA0\r\n\s]+/g, " "); s = s.replace(/[\xA0\r\n\s]+/g, " ");
@ -1046,11 +1046,11 @@ Zotero.Utilities = {
// For some reason, if elements is wrapped by an object // For some reason, if elements is wrapped by an object
// Xray, we won't be able to unwrap the DOMWrapper around // Xray, we won't be able to unwrap the DOMWrapper around
// the element. So waive the object Xray. // the element. So waive the object Xray.
var element = elements.wrappedJSObject ? elements.wrappedJSObject[i] : elements[i]; var maybeWrappedEl = elements.wrappedJSObject ? elements.wrappedJSObject[i] : elements[i];
// Firefox 5 hack, so we will preserve Fx5DOMWrappers // Firefox 5 hack, so we will preserve Fx5DOMWrappers
var isWrapped = Zotero.Translate.DOMWrapper && Zotero.Translate.DOMWrapper.isWrapped(element); var isWrapped = Zotero.Translate.DOMWrapper && Zotero.Translate.DOMWrapper.isWrapped(maybeWrappedEl);
if(isWrapped) element = Zotero.Translate.DOMWrapper.unwrap(element); var element = isWrapped ? Zotero.Translate.DOMWrapper.unwrap(maybeWrappedEl) : maybeWrappedEl;
// We waived the object Xray above, which will waive the // We waived the object Xray above, which will waive the
// DOM Xray, so make sure we have a DOM Xray wrapper. // DOM Xray, so make sure we have a DOM Xray wrapper.
@ -1083,7 +1083,7 @@ Zotero.Utilities = {
var newEl; var newEl;
while(newEl = xpathObject.iterateNext()) { while(newEl = xpathObject.iterateNext()) {
// Firefox 5 hack // Firefox 5 hack
results.push(isWrapped ? Zotero.Translate.DOMWrapper.wrap(newEl) : newEl); results.push(isWrapped ? Zotero.Translate.DOMWrapper.wrapIn(newEl, maybeWrappedEl) : newEl);
} }
} else if("selectNodes" in element) { } else if("selectNodes" in element) {
// We use JavaScript-XPath in IE for HTML documents, but with an XML // We use JavaScript-XPath in IE for HTML documents, but with an XML
@ -1125,6 +1125,8 @@ Zotero.Utilities = {
var strings = new Array(elements.length); var strings = new Array(elements.length);
for(var i=0, n=elements.length; i<n; i++) { for(var i=0, n=elements.length; i<n; i++) {
var el = elements[i]; var el = elements[i];
if(el.wrappedJSObject) el = el.wrappedJSObject;
if(Zotero.Translate.DOMWrapper) el = Zotero.Translate.DOMWrapper.unwrap(el);
strings[i] = strings[i] =
(el.nodeType === 2 /*ATTRIBUTE_NODE*/ && "value" in el) ? el.value (el.nodeType === 2 /*ATTRIBUTE_NODE*/ && "value" in el) ? el.value
: "textContent" in el ? el.textContent : "textContent" in el ? el.textContent
@ -1159,8 +1161,42 @@ Zotero.Utilities = {
* *
* Adapted from http://binnyva.blogspot.com/2005/10/dump-function-javascript-equivalent-of.html * Adapted from http://binnyva.blogspot.com/2005/10/dump-function-javascript-equivalent-of.html
*/ */
"varDump":function(arr,level,maxLevel,parentObjects,path) { "varDump": function(obj,level,maxLevel,parentObjects,path) {
var dumped_text = ""; // Simple dump
var type = typeof obj;
if (type == 'number' || type == 'undefined' || type == 'boolean' || obj === null) {
if (!level) {
// When dumping these directly, make sure to distinguish them from regular
// strings as output by Zotero.debug (i.e. no quotes)
return '===>' + obj + '<=== (' + type + ')';
}
else {
return '' + obj;
}
}
else if (type == 'string') {
return JSON.stringify(obj);
}
else if (type == 'function') {
var funcStr = ('' + obj).trim();
if (!level) {
// Dump function contents as well if only dumping function
return funcStr;
}
// Display [native code] label for native functions, but make it one line
if (/^[^{]+{\s*\[native code\]\s*}$/i.test(funcStr)) {
return funcStr.replace(/\s*(\[native code\])\s*/i, ' $1 ');
}
// For non-native functions, display an elipsis
return ('' + obj).replace(/{[\s\S]*}/, '{...}');
}
else if (type != 'object') {
return '<<Unknown type: ' + type + '>> ' + obj;
}
// More complex dump with indentation for objects
if (level === undefined) { if (level === undefined) {
level = 0; level = 0;
} }
@ -1169,86 +1205,89 @@ Zotero.Utilities = {
maxLevel = 4; maxLevel = 4;
} }
var objType = Object.prototype.toString.call(obj);
if (level > maxLevel) {
return objType + " <<Maximum depth reached>>";
}
// The padding given at the beginning of the line. // The padding given at the beginning of the line.
var level_padding = ""; var level_padding = "";
for (var j=0; j<level+1; j++) { for (var j=0; j<level+1; j++) {
level_padding += " "; level_padding += " ";
} }
if (level > maxLevel){ //Special handling for Error
return dumped_text + level_padding + "<<Maximum depth reached>>...\n"; var isError = obj instanceof Error;
if (!isError && obj.constructor) {
switch (obj.constructor.name) {
case 'Error':
case 'EvalError':
case 'RangeError':
case 'ReferenceError':
case 'SyntaxError':
case 'TypeError':
case 'URIError':
isError = true;
}
}
if (isError) {
return (obj.constructor.name ? obj.constructor.name : 'Error') + ': '
+ (obj.message ? ('' + obj.message).replace(/^/gm, level_padding).trim() : '')
+ '\n' + level_padding + "===== Stack Trace =====\n"
+ (obj.stack ? obj.stack.trim().replace(/^(?=.)/gm, level_padding) : '')
+ '\n' + level_padding + "=======================";
} }
if (typeof(arr) == 'object') { // Array/Hashes/Objects // Only dump single level for nsIDOMNode objects (including document)
var isRequest = Zotero.isFx && !Zotero.isBookmarklet if (Zotero.isFx && !Zotero.isBookmarklet
&& arr instanceof Components.interfaces.nsIRequest; && obj instanceof Components.interfaces.nsIDOMNode
) {
level = maxLevel;
}
//array for checking recursion // Recursion checking
//initialise at first itteration
if(!parentObjects) { if(!parentObjects) {
parentObjects = [arr]; parentObjects = [obj];
path = ['ROOT']; path = ['ROOT'];
} }
for (var item in arr) { var isArray = objType == '[object Array]'
var dumpedText = isArray ? '[' : objType + ' {';
for (var prop in obj) {
dumpedText += '\n' + level_padding + JSON.stringify(prop) + ": ";
try { try {
// Don't display nsIRequest.name, which can contain password var value = obj[prop];
if (isRequest && item == 'name') {
dumped_text += level_padding + "'" + item + "' => <<Skipped>>\n";
continue;
}
var value = arr[item];
} catch(e) { } catch(e) {
dumped_text += level_padding + "'" + item + "' => <<Access Denied>>\n"; dumpedText += "<<Access Denied>>";
continue; continue;
} }
if (typeof(value) == 'object') { // If it is an array // Check for recursion
//check for recursion if (typeof(value) == 'object') {
var i = parentObjects.indexOf(value); var i = parentObjects.indexOf(value);
if(i != -1) { if(i != -1) {
var parentName = path.slice(0,i+1).join('->'); var parentName = path.slice(0,i+1).join('->');
dumped_text += level_padding + "'" + item + "' => <<Reference to parent object " + parentName + " >>\n"; dumpedText += "<<Reference to parent object " + parentName + " >>";
continue; continue;
} }
var openBrace = '{', closeBrace = '}';
var type = Object.prototype.toString.call(value);
if(type == '[object Array]') {
openBrace = '[';
closeBrace = ']';
} }
dumped_text += level_padding + "'" + item + "' => " + type + ' ' + openBrace;
//only recurse if there's anything in the object, purely cosmetical
try { try {
for(var i in value) { dumpedText += Zotero.Utilities.varDump(value,level+1,maxLevel,parentObjects.concat([value]),path.concat([prop]));
dumped_text += "\n" + Zotero.Utilities.varDump(value,level+1,maxLevel,parentObjects.concat([value]),path.concat([item])) + level_padding;
break;
}
} catch(e) { } catch(e) {
dumped_text += "<<Error processing object:\n" + e + ">>\n"; dumpedText += "<<Error processing property: " + e.message + " (" + value + ")>>";
}
dumped_text += closeBrace + "\n";
}
else {
if (typeof value == 'function'){
dumped_text += level_padding + "'" + item + "' => function(...){...} \n";
}
else if (typeof value == 'number') {
dumped_text += level_padding + "'" + item + "' => " + value + "\n";
}
else {
dumped_text += level_padding + "'" + item + "' => \"" + value + "\"\n";
} }
} }
var lastChar = dumpedText.charAt(dumpedText.length - 1);
if (lastChar != '[' && lastChar != '{') {
dumpedText += '\n' + level_padding.substr(4);
} }
} dumpedText += isArray ? ']' : '}';
else { // Stings/Chars/Numbers etc.
dumped_text = "===>"+arr+"<===("+typeof(arr)+")"; return dumpedText;
}
return dumped_text;
}, },
/** /**

View File

@ -193,6 +193,23 @@ Zotero.Utilities.Internal = {
}, },
/**
* Return the byte length of a UTF-8 string
*
* http://stackoverflow.com/a/23329386
*/
byteLength: function (str) {
var s = str.length;
for (var i=str.length-1; i>=0; i--) {
var code = str.charCodeAt(i);
if (code > 0x7f && code <= 0x7ff) s++;
else if (code > 0x7ff && code <= 0xffff) s+=2;
if (code >= 0xDC00 && code <= 0xDFFF) i--; //trail surrogate
}
return s;
},
/** /**
* Display a prompt from an error with custom buttons and a callback * Display a prompt from an error with custom buttons and a callback
*/ */

View File

@ -268,9 +268,9 @@ Zotero.Utilities.Translate.prototype.processDocuments = function(urls, processor
if(!processor) return; if(!processor) return;
var newLoc = doc.location; var newLoc = doc.location;
if(Zotero.isFx && (protocol != newLoc.protocol || host != newLoc.host)) { if(Zotero.isFx && !Zotero.isBookmarklet && (protocol != newLoc.protocol || host != newLoc.host)) {
// Cross-site; need to wrap // Cross-site; need to wrap
processor(Zotero.Translate.DOMWrapper.wrap(doc), newLoc.toString()); processor(translate._sandboxManager.wrap(doc), newLoc.toString());
} else { } else {
// Not cross-site; no need to wrap // Not cross-site; no need to wrap
processor(doc, newLoc.toString()); processor(doc, newLoc.toString());

View File

@ -23,24 +23,8 @@
***** END LICENSE BLOCK ***** ***** END LICENSE BLOCK *****
*/ */
const ZOTERO_CONFIG = {
GUID: 'zotero@chnm.gmu.edu',
REPOSITORY_URL: 'https://repo.zotero.org/repo',
REPOSITORY_CHECK_INTERVAL: 86400, // 24 hours
REPOSITORY_RETRY_INTERVAL: 3600, // 1 hour
BASE_URI: 'http://zotero.org/',
WWW_BASE_URL: 'http://www.zotero.org/',
PROXY_AUTH_URL: 'http://zotero.org.s3.amazonaws.com/proxy-auth',
SYNC_URL: 'https://sync.zotero.org/',
API_URL: 'https://api.zotero.org/',
API_VERSION: 2,
PREF_BRANCH: 'extensions.zotero.',
BOOKMARKLET_ORIGIN : 'https://www.zotero.org',
HTTP_BOOKMARKLET_ORIGIN : 'http://www.zotero.org',
BOOKMARKLET_URL: 'https://www.zotero.org/bookmarklet/'
};
// Commonly used imports accessible anywhere // Commonly used imports accessible anywhere
Components.utils.import("resource://zotero/config.js");
Components.utils.import("resource://zotero/q.js"); Components.utils.import("resource://zotero/q.js");
Components.utils.import("resource://gre/modules/XPCOMUtils.jsm"); Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");
Components.utils.import("resource://gre/modules/Services.jsm"); Components.utils.import("resource://gre/modules/Services.jsm");
@ -63,7 +47,6 @@ Components.utils.import("resource://gre/modules/osfile.jsm");
this.logError = logError; this.logError = logError;
this.getErrors = getErrors; this.getErrors = getErrors;
this.getSystemInfo = getSystemInfo; this.getSystemInfo = getSystemInfo;
this.safeDebug = safeDebug;
this.getString = getString; this.getString = getString;
this.localeJoin = localeJoin; this.localeJoin = localeJoin;
this.setFontSize = setFontSize; this.setFontSize = setFontSize;
@ -1319,10 +1302,11 @@ Components.utils.import("resource://gre/modules/osfile.jsm");
} }
/** /**
* Log a JS error to the Mozilla JS error console. * Log a JS error to Mozilla JS error console and debug output
* @param {Exception} err * @param {Exception} err
*/ */
function logError(err) { function logError(err) {
Zotero.debug(err, 1);
log(err.message ? err.message : err.toString(), "error", log(err.message ? err.message : err.toString(), "error",
err.fileName ? err.fileName : (err.filename ? err.filename : null), null, err.fileName ? err.fileName : (err.filename ? err.filename : null), null,
err.lineNumber ? err.lineNumber : null, null); err.lineNumber ? err.lineNumber : null, null);
@ -1419,22 +1403,6 @@ Components.utils.import("resource://gre/modules/osfile.jsm");
AddonManager.getAllAddons(onHaveInstalledAddons); AddonManager.getAllAddons(onHaveInstalledAddons);
} }
function safeDebug(obj){
for (var i in obj){
try {
Zotero.debug(i + ': ' + obj[i]);
}
catch (e){
try {
Zotero.debug(i + ': ERROR');
}
catch (e){}
}
}
}
function getString(name, params){ function getString(name, params){
try { try {
if (params != undefined){ if (params != undefined){
@ -1448,6 +1416,13 @@ Components.utils.import("resource://gre/modules/osfile.jsm");
} }
} }
catch (e){ catch (e){
if (e.name == 'NS_ERROR_ILLEGAL_VALUE') {
Zotero.debug(params, 1);
}
else if (e.name != 'NS_ERROR_FAILURE') {
Components.utils.reportError(e);
Zotero.debug(e, 1);
}
throw ('Localized string not available for ' + name); throw ('Localized string not available for ' + name);
} }
return l10n; return l10n;
@ -2660,6 +2635,9 @@ Zotero.DragDrop = {
return false; return false;
} }
var win = sourceNode.ownerDocument.defaultView; var win = sourceNode.ownerDocument.defaultView;
if (win.document.documentElement.getAttribute('windowtype') == 'zotero:search') {
return win.ZoteroAdvancedSearch.itemsView.itemGroup;
}
return win.ZoteroPane.collectionsView.itemGroup; return win.ZoteroPane.collectionsView.itemGroup;
} }
else { else {

View File

@ -123,6 +123,12 @@ var ZoteroPane = new function()
document.getElementById('zotero-pane-stack').setAttribute('platform', 'win'); document.getElementById('zotero-pane-stack').setAttribute('platform', 'win');
} }
// Use pre-Yosemite search fields before Fx34
// See note in chrome/content/zotero-platform/mac/overlay.css
if (Zotero.isMac && Zotero.platformMajorVersion < 34 && Zotero.oscpu.contains(' 10.10')) {
document.getElementById('zotero-pane-stack').setAttribute('oldsearchfield', 'true')
}
// register an observer for Zotero reload // register an observer for Zotero reload
observerService = Components.classes["@mozilla.org/observer-service;1"] observerService = Components.classes["@mozilla.org/observer-service;1"]
.getService(Components.interfaces.nsIObserverService); .getService(Components.interfaces.nsIObserverService);
@ -588,7 +594,7 @@ var ZoteroPane = new function()
} }
else if ((event.keyCode == event.DOM_VK_BACK_SPACE && Zotero.isMac) || else if ((event.keyCode == event.DOM_VK_BACK_SPACE && Zotero.isMac) ||
event.keyCode == event.DOM_VK_DELETE) { event.keyCode == event.DOM_VK_DELETE) {
// If Cmd/Ctrl delete, use forced mode, which does different // If Cmd/Shift delete, use forced mode, which does different
// things depending on the context // things depending on the context
var force = event.metaKey || (!Zotero.isMac && event.shiftKey); var force = event.metaKey || (!Zotero.isMac && event.shiftKey);
ZoteroPane_Local.deleteSelectedItems(force); ZoteroPane_Local.deleteSelectedItems(force);
@ -3036,19 +3042,13 @@ var ZoteroPane = new function()
this.displayCannotEditLibraryMessage(); this.displayCannotEditLibraryMessage();
return; return;
} }
var ps = Components.classes["@mozilla.org/embedcomp/prompt-service;1"]
.getService(Components.interfaces.nsIPromptService);
var input = {}; var io = {};
var check = {value : false}; window.openDialog('chrome://zotero/content/attachLink.xul',
'zotero-attach-uri-dialog', 'centerscreen, modal', io);
// TODO: Allow title to be specified? if (io.out) {
var result = ps.prompt(null, Zotero.getString('pane.items.attach.link.uri.title'), Zotero.Attachments.linkFromURL(io.out.link, itemID, null, io.out.title);
Zotero.getString('pane.items.attach.link.uri'), input, "", {}); }
if (!result || !input.value) return false;
// Create a new attachment
Zotero.Attachments.linkFromURL(input.value, itemID);
} }
@ -4102,18 +4102,51 @@ var ZoteroPane = new function()
*/ */
this.updateToolbarPosition = function() { this.updateToolbarPosition = function() {
if(document.getElementById("zotero-pane-stack").hidden) return; if(document.getElementById("zotero-pane-stack").hidden) return;
const PANES = ["collections", "items"];
for each(var paneName in PANES) {
var pane = document.getElementById("zotero-"+paneName+"-pane");
var splitter = document.getElementById("zotero-"+paneName+"-splitter");
var toolbar = document.getElementById("zotero-"+paneName+"-toolbar");
var paneComputedStyle = window.getComputedStyle(pane, null); var collectionsPane = document.getElementById("zotero-collections-pane");
var splitterComputedStyle = window.getComputedStyle(splitter, null); var collectionsToolbar = document.getElementById("zotero-collections-toolbar");
var collectionsSplitter = document.getElementById("zotero-collections-splitter");
var itemsPane = document.getElementById("zotero-items-pane");
var itemsToolbar = document.getElementById("zotero-items-toolbar");
var itemsSplitter = document.getElementById("zotero-items-splitter");
var itemPane = document.getElementById("zotero-item-pane");
var itemToolbar = document.getElementById("zotero-item-toolbar");
toolbar.style.width = paneComputedStyle.getPropertyValue("width"); var collectionsPaneComputedStyle = window.getComputedStyle(collectionsPane, null);
toolbar.style.marginRight = splitterComputedStyle.getPropertyValue("width"); var collectionsSplitterComputedStyle = window.getComputedStyle(collectionsSplitter, null);
var itemsPaneComputedStyle = window.getComputedStyle(itemsPane, null);
var itemsSplitterComputedStyle = window.getComputedStyle(itemsSplitter, null);
var itemPaneComputedStyle = window.getComputedStyle(itemPane, null);
var collectionsPaneWidth = collectionsPaneComputedStyle.getPropertyValue("width");
var collectionsSplitterWidth = collectionsSplitterComputedStyle.getPropertyValue("width");
var itemsPaneWidth = itemsPaneComputedStyle.getPropertyValue("width");
var itemsSplitterWidth = itemsSplitterComputedStyle.getPropertyValue("width");
var itemPaneWidth = itemPaneComputedStyle.getPropertyValue("width");
collectionsToolbar.style.width = collectionsPaneWidth;
collectionsToolbar.style.marginRight = collectionsSplitterWidth;
itemsToolbar.style.marginRight = itemsSplitterWidth;
var itemsToolbarWidthNumber = parseInt(itemsPaneWidth, 10);
if (collectionsPane.collapsed) {
var collectionsToolbarComputedStyle = window.getComputedStyle(collectionsToolbar, null);
var collectionsToolbarWidth = collectionsToolbarComputedStyle.getPropertyValue("width");// real width (nonzero) after the new definition
itemsToolbarWidthNumber = itemsToolbarWidthNumber-parseInt(collectionsToolbarWidth, 10);
} }
if (itemPane.collapsed) {
// Then the itemsToolbar and itemToolbar share the same space, and it seems best to use some flex attribute from right (because there might be other icons appearing or vanishing).
itemsToolbar.style.removeProperty('width');
itemsToolbar.setAttribute("flex", "1");
itemToolbar.setAttribute("flex", "0");
} else {
itemsToolbar.style.width = itemsToolbarWidthNumber + "px";
itemsToolbar.setAttribute("flex", "0");
itemToolbar.setAttribute("flex", "1");
}
} }
/** /**

View File

@ -174,7 +174,7 @@
<menuitem class="menuitem-iconic zotero-menuitem-attachments-web-link standalone-no-display" label="&zotero.items.menu.attach.link;" oncommand="var itemID = ZoteroPane_Local.getSelectedItems()[0].id; ZoteroPane_Local.addAttachmentFromPage(true, itemID)"/> <menuitem class="menuitem-iconic zotero-menuitem-attachments-web-link standalone-no-display" label="&zotero.items.menu.attach.link;" oncommand="var itemID = ZoteroPane_Local.getSelectedItems()[0].id; ZoteroPane_Local.addAttachmentFromPage(true, itemID)"/>
<menuitem class="menuitem-iconic zotero-menuitem-attachments-web-link" label="&zotero.items.menu.attach.link.uri;" oncommand="var itemID = ZoteroPane_Local.getSelectedItems()[0].id; ZoteroPane_Local.addAttachmentFromURI(true, itemID);"/> <menuitem class="menuitem-iconic zotero-menuitem-attachments-web-link" label="&zotero.items.menu.attach.link.uri;" oncommand="var itemID = ZoteroPane_Local.getSelectedItems()[0].id; ZoteroPane_Local.addAttachmentFromURI(true, itemID);"/>
<menuitem class="menuitem-iconic zotero-menuitem-attachments-file" label="&zotero.items.menu.attach.file;" oncommand="var itemID = ZoteroPane_Local.getSelectedItems()[0].id; ZoteroPane_Local.addAttachmentFromDialog(false, itemID);"/> <menuitem class="menuitem-iconic zotero-menuitem-attachments-file" label="&zotero.items.menu.attach.file;" oncommand="var itemID = ZoteroPane_Local.getSelectedItems()[0].id; ZoteroPane_Local.addAttachmentFromDialog(false, itemID);"/>
<menuitem class="menuitem-iconic zotero-menuitem-attachments-link" label="&zotero.items.menu.attach.fileLink;" oncommand="var itemID = ZoteroPane_Local.getSelectedItems()[0].id; ZoteroPane_Local.addAttachmentFromDialog(true, itemID);"/> <menuitem class="menuitem-iconic zotero-menuitem-attachments-link" label="&zotero.items.menu.attach.fileLink;" oncommand="var itemID = ZoteroPane_Local.getSelectedItems()[0].id; ZoteroPane_Local.addAttachmentFromDialog(true, itemID);" id="zotero-tb-attachment-add-file-link"/>
</menupopup> </menupopup>
</toolbarbutton> </toolbarbutton>
<toolbarseparator/> <toolbarseparator/>
@ -538,9 +538,11 @@
</deck> </deck>
</vbox> </vbox>
<splitter id="zotero-items-splitter" resizebefore="closest" resizeafter="closest" <splitter id="zotero-items-splitter" resizebefore="closest" resizeafter="closest" collapse="after" zotero-persist="state"
onmousemove="ZoteroPane_Local.updateToolbarPosition()" onmousemove="ZoteroPane_Local.updateToolbarPosition()"
oncommand="ZoteroPane_Local.updateToolbarPosition()"/> oncommand="ZoteroPane_Local.updateToolbarPosition()">
<grippy id="zotero-items-grippy"/>
</splitter>
<!-- itemPane.xul --> <!-- itemPane.xul -->
<vbox id="zotero-item-pane"/> <vbox id="zotero-item-pane"/>

View File

@ -284,3 +284,9 @@
<!ENTITY zotero.downloadManager.label "Save to Zotero"> <!ENTITY zotero.downloadManager.label "Save to Zotero">
<!ENTITY zotero.downloadManager.saveToLibrary.description "Attachments cannot be saved to the currently selected library. This item will be saved to your library instead."> <!ENTITY zotero.downloadManager.saveToLibrary.description "Attachments cannot be saved to the currently selected library. This item will be saved to your library instead.">
<!ENTITY zotero.downloadManager.noPDFTools.description "To use this feature, you must first install the PDF tools in the Search pane of the Zotero preferences."> <!ENTITY zotero.downloadManager.noPDFTools.description "To use this feature, you must first install the PDF tools in the Search pane of the Zotero preferences.">
<!ENTITY zotero.attachLink.title "Attach Link to URI">
<!ENTITY zotero.attachLink.label.link "Link:">
<!ENTITY zotero.attachLink.label.title "Title:">

View File

@ -195,8 +195,8 @@ tagColorChooser.maxTags=Up to %S tags in each library can have colors assigned.
pane.items.loading=Loading items list... pane.items.loading=Loading items list...
pane.items.columnChooser.moreColumns=More Columns pane.items.columnChooser.moreColumns=More Columns
pane.items.columnChooser.secondarySort=Secondary Sort (%S) pane.items.columnChooser.secondarySort=Secondary Sort (%S)
pane.items.attach.link.uri.title=Attach Link to URI 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=Enter a URI: 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.title=Move to Trash
pane.items.trash=Are you sure you want to move the selected item to the 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.trash.multiple=Are you sure you want to move the selected items to the Trash?

View File

@ -284,3 +284,9 @@
<!ENTITY zotero.downloadManager.label "احفظ في زوتيرو"> <!ENTITY zotero.downloadManager.label "احفظ في زوتيرو">
<!ENTITY zotero.downloadManager.saveToLibrary.description "Attachments cannot be saved to the currently selected library. This item will be saved to your library instead."> <!ENTITY zotero.downloadManager.saveToLibrary.description "Attachments cannot be saved to the currently selected library. This item will be saved to your library instead.">
<!ENTITY zotero.downloadManager.noPDFTools.description "To use this feature, you must first install the PDF tools in the Search pane of the Zotero preferences."> <!ENTITY zotero.downloadManager.noPDFTools.description "To use this feature, you must first install the PDF tools in the Search pane of the Zotero preferences.">
<!ENTITY zotero.attachLink.title "Attach Link to URI">
<!ENTITY zotero.attachLink.label.link "Link:">
<!ENTITY zotero.attachLink.label.title "Title:">

View File

@ -195,8 +195,8 @@ tagColorChooser.maxTags=Up to %S tags in each library can have colors assigned.
pane.items.loading=تحميل قائمة العناصر... pane.items.loading=تحميل قائمة العناصر...
pane.items.columnChooser.moreColumns=More Columns pane.items.columnChooser.moreColumns=More Columns
pane.items.columnChooser.secondarySort=Secondary Sort (%S) pane.items.columnChooser.secondarySort=Secondary Sort (%S)
pane.items.attach.link.uri.title=Attach Link to URI 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=Enter a URI: pane.items.attach.link.uri.file=To attach a link to a file, please use “%S”.
pane.items.trash.title=نقل لسلة المحذوفات pane.items.trash.title=نقل لسلة المحذوفات
pane.items.trash=هل ترغب في نقل العنصر المحدد إلى سلة المحذوفات؟ pane.items.trash=هل ترغب في نقل العنصر المحدد إلى سلة المحذوفات؟
pane.items.trash.multiple=هل ترغب في نقل العناصر المحددة إلى سلة المحذوفات؟ pane.items.trash.multiple=هل ترغب في نقل العناصر المحددة إلى سلة المحذوفات؟

View File

@ -284,3 +284,9 @@
<!ENTITY zotero.downloadManager.label "Save to Zotero"> <!ENTITY zotero.downloadManager.label "Save to Zotero">
<!ENTITY zotero.downloadManager.saveToLibrary.description "Attachments cannot be saved to the currently selected library. This item will be saved to your library instead."> <!ENTITY zotero.downloadManager.saveToLibrary.description "Attachments cannot be saved to the currently selected library. This item will be saved to your library instead.">
<!ENTITY zotero.downloadManager.noPDFTools.description "To use this feature, you must first install the PDF tools in the Search pane of the Zotero preferences."> <!ENTITY zotero.downloadManager.noPDFTools.description "To use this feature, you must first install the PDF tools in the Search pane of the Zotero preferences.">
<!ENTITY zotero.attachLink.title "Attach Link to URI">
<!ENTITY zotero.attachLink.label.link "Link:">
<!ENTITY zotero.attachLink.label.title "Title:">

View File

@ -195,8 +195,8 @@ tagColorChooser.maxTags=Up to %S tags in each library can have colors assigned.
pane.items.loading=Зарежда списъка на записите... pane.items.loading=Зарежда списъка на записите...
pane.items.columnChooser.moreColumns=More Columns pane.items.columnChooser.moreColumns=More Columns
pane.items.columnChooser.secondarySort=Secondary Sort (%S) pane.items.columnChooser.secondarySort=Secondary Sort (%S)
pane.items.attach.link.uri.title=Attach Link to URI 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=Enter a URI: pane.items.attach.link.uri.file=To attach a link to a file, please use “%S”.
pane.items.trash.title=Премества в кошчето за боклук pane.items.trash.title=Премества в кошчето за боклук
pane.items.trash=Сигурни ли сте, че искате да преместите избраният запис в кошчето за боклук? pane.items.trash=Сигурни ли сте, че искате да преместите избраният запис в кошчето за боклук?
pane.items.trash.multiple=Сигурни ли сте, че искате да преместите избраните записи в кошчето за боклук? pane.items.trash.multiple=Сигурни ли сте, че искате да преместите избраните записи в кошчето за боклук?

View File

@ -284,3 +284,9 @@
<!ENTITY zotero.downloadManager.label "Desa al Zotero"> <!ENTITY zotero.downloadManager.label "Desa al Zotero">
<!ENTITY zotero.downloadManager.saveToLibrary.description "Els adjunts no es poden desar a la biblioteca seleccionada. Aquest element es desarà a la biblioteca."> <!ENTITY zotero.downloadManager.saveToLibrary.description "Els adjunts no es poden desar a la biblioteca seleccionada. Aquest element es desarà a la biblioteca.">
<!ENTITY zotero.downloadManager.noPDFTools.description "Per utilitzar aquesta funció, primer cal instal·lar les eines de PDF en les preferències del Zotero."> <!ENTITY zotero.downloadManager.noPDFTools.description "Per utilitzar aquesta funció, primer cal instal·lar les eines de PDF en les preferències del Zotero.">
<!ENTITY zotero.attachLink.title "Attach Link to URI">
<!ENTITY zotero.attachLink.label.link "Link:">
<!ENTITY zotero.attachLink.label.title "Title:">

View File

@ -83,7 +83,7 @@ errorReport.reportErrors=Notifica errors...
errorReport.reportInstructions=Podeu notificar aquest error seleccionat "%S" des del menú Accions (engranatge) errorReport.reportInstructions=Podeu notificar aquest error seleccionat "%S" des del menú Accions (engranatge)
errorReport.followingReportWillBeSubmitted=The following report will be submitted: errorReport.followingReportWillBeSubmitted=The following report will be submitted:
errorReport.noErrorsLogged=No errors have been logged since %S started. errorReport.noErrorsLogged=No errors have been logged since %S started.
errorReport.advanceMessage=Press %S to send the report to the Zotero developers. errorReport.advanceMessage=Premeu %S per enviar un informe als desenvolupadors de Zotero.
errorReport.stepsToReproduce=Passos per a reproduir-lo: errorReport.stepsToReproduce=Passos per a reproduir-lo:
errorReport.expectedResult=Resultat esperat: errorReport.expectedResult=Resultat esperat:
errorReport.actualResult=Resultat real: errorReport.actualResult=Resultat real:
@ -195,8 +195,8 @@ tagColorChooser.maxTags=Fins a %S etiquetes de cada biblioteca poden tenir color
pane.items.loading=Carregant la llista d'elements... pane.items.loading=Carregant la llista d'elements...
pane.items.columnChooser.moreColumns=Més columnes pane.items.columnChooser.moreColumns=Més columnes
pane.items.columnChooser.secondarySort=Secondary Sort (%S) pane.items.columnChooser.secondarySort=Secondary Sort (%S)
pane.items.attach.link.uri.title=Attach Link to URI 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=Enter a URI: pane.items.attach.link.uri.file=To attach a link to a file, please use “%S”.
pane.items.trash.title=Mou a la paperera pane.items.trash.title=Mou a la paperera
pane.items.trash=Segur que voleu moure l'element seleccionat a la paperera? pane.items.trash=Segur que voleu moure l'element seleccionat a la paperera?
pane.items.trash.multiple=Segur que voleu moure els elements seleccionats a la paperera? pane.items.trash.multiple=Segur que voleu moure els elements seleccionats a la paperera?

View File

@ -1,6 +1,6 @@
<!ENTITY zotero.search.name "Jméno:"> <!ENTITY zotero.search.name "Jméno:">
<!ENTITY zotero.search.searchInLibrary "Search in library:"> <!ENTITY zotero.search.searchInLibrary "Hledat v knihovně:">
<!ENTITY zotero.search.joinMode.prefix "Odpovídá"> <!ENTITY zotero.search.joinMode.prefix "Odpovídá">
<!ENTITY zotero.search.joinMode.any "některému"> <!ENTITY zotero.search.joinMode.any "některému">

View File

@ -8,7 +8,7 @@
<!ENTITY zotero.general.cancel "Zrušit"> <!ENTITY zotero.general.cancel "Zrušit">
<!ENTITY zotero.errorReport.title "Chybová zpráva Zotera"> <!ENTITY zotero.errorReport.title "Chybová zpráva Zotera">
<!ENTITY zotero.errorReport.unrelatedMessages "This may include messages unrelated to Zotero."> <!ENTITY zotero.errorReport.unrelatedMessages "Může obsahovat zprávy nesouvisející se Zoterem.">
<!ENTITY zotero.errorReport.submissionInProgress "Čekejte, prosím, dokud nebude zpráva o chybách odeslána."> <!ENTITY zotero.errorReport.submissionInProgress "Čekejte, prosím, dokud nebude zpráva o chybách odeslána.">
<!ENTITY zotero.errorReport.submitted "Zpráva o chybách byla odeslána."> <!ENTITY zotero.errorReport.submitted "Zpráva o chybách byla odeslána.">
<!ENTITY zotero.errorReport.reportID "ID hlášení:"> <!ENTITY zotero.errorReport.reportID "ID hlášení:">
@ -45,7 +45,7 @@
<!ENTITY zotero.collections.showUnfiledItems "Zobrazit sjednocené položky"> <!ENTITY zotero.collections.showUnfiledItems "Zobrazit sjednocené položky">
<!ENTITY zotero.items.itemType "Typ položky"> <!ENTITY zotero.items.itemType "Typ položky">
<!ENTITY zotero.items.type_column "Item Type"> <!ENTITY zotero.items.type_column "Typ položky">
<!ENTITY zotero.items.title_column "Název"> <!ENTITY zotero.items.title_column "Název">
<!ENTITY zotero.items.creator_column "Tvůrce"> <!ENTITY zotero.items.creator_column "Tvůrce">
<!ENTITY zotero.items.date_column "Datum"> <!ENTITY zotero.items.date_column "Datum">
@ -284,3 +284,9 @@
<!ENTITY zotero.downloadManager.label "Uložit do Zotera"> <!ENTITY zotero.downloadManager.label "Uložit do Zotera">
<!ENTITY zotero.downloadManager.saveToLibrary.description "Do zvolené knihovny nemohou být uloženy přílohy. Tato položka bude místo toho uložena do vaší knihovny."> <!ENTITY zotero.downloadManager.saveToLibrary.description "Do zvolené knihovny nemohou být uloženy přílohy. Tato položka bude místo toho uložena do vaší knihovny.">
<!ENTITY zotero.downloadManager.noPDFTools.description "Pokud chcete využít této funkce, musíte nejdříve v nastavení Zotera nainstalovat nástroje pro práci s PDF."> <!ENTITY zotero.downloadManager.noPDFTools.description "Pokud chcete využít této funkce, musíte nejdříve v nastavení Zotera nainstalovat nástroje pro práci s PDF.">
<!ENTITY zotero.attachLink.title "Připojit odkaz na URI">
<!ENTITY zotero.attachLink.label.link "Odkaz:">
<!ENTITY zotero.attachLink.label.title "Název:">

View File

@ -81,9 +81,9 @@ upgrade.couldNotMigrate.restart=Pokud se tato zpráva objevuje opakovaně, resta
errorReport.reportError=Zpráva o chybě... errorReport.reportError=Zpráva o chybě...
errorReport.reportErrors=Nahlásit chyby... errorReport.reportErrors=Nahlásit chyby...
errorReport.reportInstructions=Můžete nahlásit tuto chybu volbou "%S" z menu Akce (ozubené kolečko). errorReport.reportInstructions=Můžete nahlásit tuto chybu volbou "%S" z menu Akce (ozubené kolečko).
errorReport.followingReportWillBeSubmitted=The following report will be submitted: errorReport.followingReportWillBeSubmitted=Bude odeslána následující zpráva:
errorReport.noErrorsLogged=No errors have been logged since %S started. errorReport.noErrorsLogged=Od spuštění %S nebyly zalogovány žádné chyby.
errorReport.advanceMessage=Press %S to send the report to the Zotero developers. errorReport.advanceMessage=Stisknutím %S odešlete zprávu vývojářům Zotera.
errorReport.stepsToReproduce=Kroky k zopakování: errorReport.stepsToReproduce=Kroky k zopakování:
errorReport.expectedResult=Očekávaný výsledek: errorReport.expectedResult=Očekávaný výsledek:
errorReport.actualResult=Dosažený výsledek: errorReport.actualResult=Dosažený výsledek:
@ -193,10 +193,10 @@ tagColorChooser.numberKeyInstructions=Stisknutím klávesy $NUMBER můžete při
tagColorChooser.maxTags=Barvy může mít přiřazeno až %S štítků v každé knihovně. tagColorChooser.maxTags=Barvy může mít přiřazeno až %S štítků v každé knihovně.
pane.items.loading=Nahrávám seznam položek... pane.items.loading=Nahrávám seznam položek...
pane.items.columnChooser.moreColumns=More Columns pane.items.columnChooser.moreColumns=Více sloupců
pane.items.columnChooser.secondarySort=Secondary Sort (%S) pane.items.columnChooser.secondarySort=Sekundární řazení (%S)
pane.items.attach.link.uri.title=Připojit odkaz k URI pane.items.attach.link.uri.unrecognized=Zotero nerozeznalo URI, kterou jste zadali. Prosím zkontrolujte adresu a zkuste to znovu.
pane.items.attach.link.uri=Vložte URI: pane.items.attach.link.uri.file=Odkaz můžete připojit k souboru pomocí "%S".
pane.items.trash.title=Přesunout do Koše pane.items.trash.title=Přesunout do Koše
pane.items.trash=Jste si jisti, že chcete přesunout vybranou položku do Koše? pane.items.trash=Jste si jisti, že chcete přesunout vybranou položku do Koše?
pane.items.trash.multiple=Jste si jisti, že chcete přesunout vybranou položku do Koše? pane.items.trash.multiple=Jste si jisti, že chcete přesunout vybranou položku do Koše?
@ -483,7 +483,7 @@ ingester.scrapingTo=Ukládám do
ingester.scrapeComplete=Položka uložena ingester.scrapeComplete=Položka uložena
ingester.scrapeError=Nebylo možné uložit položku ingester.scrapeError=Nebylo možné uložit položku
ingester.scrapeErrorDescription=Při ukládání této položky nastala chyba. Zkontrolujte %S pro více informací. ingester.scrapeErrorDescription=Při ukládání této položky nastala chyba. Zkontrolujte %S pro více informací.
ingester.scrapeErrorDescription.linkText=Troubleshooting Translator Issues ingester.scrapeErrorDescription.linkText=Řešení problémů s překladači
ingester.scrapeErrorDescription.previousError=Ukládání selhalo z důvodu předchozí chyby v Zoteru. ingester.scrapeErrorDescription.previousError=Ukládání selhalo z důvodu předchozí chyby v Zoteru.
ingester.importReferRISDialog.title=Import RIS/Refer do Zotera ingester.importReferRISDialog.title=Import RIS/Refer do Zotera
@ -966,5 +966,5 @@ firstRunGuidance.saveIcon=Zotero rozpoznalo na této stránce citaci. Pro její
firstRunGuidance.authorMenu=Zotero umožňuje zvolit i editory a překladatele. Volbou v tomto menu můžete změnit autora na editora či překladatele. firstRunGuidance.authorMenu=Zotero umožňuje zvolit i editory a překladatele. Volbou v tomto menu můžete změnit autora na editora či překladatele.
firstRunGuidance.quickFormat=Napište název, nebo autora k nimž hledáte citaci.\n\n Když si vyberete, kliknutím na bublinu, nebo stiskem Ctrl-\u2193 můžete přidat čísla stran, prefixy, či sufixy. Číslo stránky můžete vložit přímo k vašim vyhledávaným výrazům.\n\nCitace můžete editovat přímo ve vašem textovém procesoru. firstRunGuidance.quickFormat=Napište název, nebo autora k nimž hledáte citaci.\n\n Když si vyberete, kliknutím na bublinu, nebo stiskem Ctrl-\u2193 můžete přidat čísla stran, prefixy, či sufixy. Číslo stránky můžete vložit přímo k vašim vyhledávaným výrazům.\n\nCitace můžete editovat přímo ve vašem textovém procesoru.
firstRunGuidance.quickFormatMac=Napište název, nebo autora k nimž hledáte citaci.\n\n Když si vyberete, kliknutím na bublinu, nebo stiskem Ctrl-\u2193 můžete přidat čísla stran, prefixy, či sufixy. Číslo stránky můžete vložit přímo k vašim vyhledávaným výrazům.\n\nCitace můžete editovat přímo ve vašem textovém procesoru. firstRunGuidance.quickFormatMac=Napište název, nebo autora k nimž hledáte citaci.\n\n Když si vyberete, kliknutím na bublinu, nebo stiskem Ctrl-\u2193 můžete přidat čísla stran, prefixy, či sufixy. Číslo stránky můžete vložit přímo k vašim vyhledávaným výrazům.\n\nCitace můžete editovat přímo ve vašem textovém procesoru.
firstRunGuidance.toolbarButton.new=Click here to open Zotero, or use the %S keyboard shortcut. firstRunGuidance.toolbarButton.new=Zotero otevřete kliknutím sem, nebo použitím klávesové zkratky %S
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.toolbarButton.upgrade=Ikona Zotero se nyní nachází v Panelu nástrojů Firefoxu. Zotero otevřete kliknutím na ikonu, nebo stisknutím %S.

View File

@ -169,7 +169,7 @@
<!ENTITY zotero.preferences.locate.locateEngineManager "Håndtering af søgemaskiner for artikler"> <!ENTITY zotero.preferences.locate.locateEngineManager "Håndtering af søgemaskiner for artikler">
<!ENTITY zotero.preferences.locate.description "Beskrivelse"> <!ENTITY zotero.preferences.locate.description "Beskrivelse">
<!ENTITY zotero.preferences.locate.name "Navn"> <!ENTITY zotero.preferences.locate.name "Navn">
<!ENTITY zotero.preferences.locate.locateEnginedescription "En søgemaskine udvider mulighederne drop-down-menuen for Lokalisering i Info-vinduet. Hvis man aktiverer søgemaskinerne i nedenstående liste, bliver de føjet til drop-down-menuen og kan anvendes til at lokalisere Elementer fra dit Bibliotek på WWW."> <!ENTITY zotero.preferences.locate.locateEnginedescription "En søgemaskine udvider mulighederne i drop-down-menuen for Find i Info-fanebladet. Hvis man aktiverer søgemaskinerne i nedenstående liste, bliver de føjet til drop-down-menuen og kan anvendes til at lokalisere elementer fra dit bibliotek på WWW.">
<!ENTITY zotero.preferences.locate.addDescription "To add a Lookup Engine that is not on the list, visit the desired search engine in your browser and select 'Add' from the Firefox Search Bar. When you reopen this preference pane you will have the option to enable the new Lookup Engine."> <!ENTITY zotero.preferences.locate.addDescription "To add a Lookup Engine that is not on the list, visit the desired search engine in your browser and select 'Add' from the Firefox Search Bar. When you reopen this preference pane you will have the option to enable the new Lookup Engine.">
<!ENTITY zotero.preferences.locate.restoreDefaults "Gendan Defaults"> <!ENTITY zotero.preferences.locate.restoreDefaults "Gendan Defaults">

View File

@ -1,6 +1,6 @@
<!ENTITY zotero.search.name "Navn:"> <!ENTITY zotero.search.name "Navn:">
<!ENTITY zotero.search.searchInLibrary "Search in library:"> <!ENTITY zotero.search.searchInLibrary "Søg i bibliotek:">
<!ENTITY zotero.search.joinMode.prefix "Match"> <!ENTITY zotero.search.joinMode.prefix "Match">
<!ENTITY zotero.search.joinMode.any "enhver"> <!ENTITY zotero.search.joinMode.any "enhver">

View File

@ -8,7 +8,7 @@
<!ENTITY zotero.general.cancel "Annullér"> <!ENTITY zotero.general.cancel "Annullér">
<!ENTITY zotero.errorReport.title "Zotero fejlrapport"> <!ENTITY zotero.errorReport.title "Zotero fejlrapport">
<!ENTITY zotero.errorReport.unrelatedMessages "This may include messages unrelated to Zotero."> <!ENTITY zotero.errorReport.unrelatedMessages "Dette kan inkludere beskeder, som ikke har noget med Zotero at gøre.">
<!ENTITY zotero.errorReport.submissionInProgress "Vent venligst mens fejlrapporten registreres."> <!ENTITY zotero.errorReport.submissionInProgress "Vent venligst mens fejlrapporten registreres.">
<!ENTITY zotero.errorReport.submitted "Din fejlrapport er registreret."> <!ENTITY zotero.errorReport.submitted "Din fejlrapport er registreret.">
<!ENTITY zotero.errorReport.reportID "Rapport-ID:"> <!ENTITY zotero.errorReport.reportID "Rapport-ID:">
@ -45,7 +45,7 @@
<!ENTITY zotero.collections.showUnfiledItems "Vis ukategoriserede elementer"> <!ENTITY zotero.collections.showUnfiledItems "Vis ukategoriserede elementer">
<!ENTITY zotero.items.itemType "Type"> <!ENTITY zotero.items.itemType "Type">
<!ENTITY zotero.items.type_column "Item Type"> <!ENTITY zotero.items.type_column "Elementtype">
<!ENTITY zotero.items.title_column "Titel"> <!ENTITY zotero.items.title_column "Titel">
<!ENTITY zotero.items.creator_column "Ophav"> <!ENTITY zotero.items.creator_column "Ophav">
<!ENTITY zotero.items.date_column "Dato"> <!ENTITY zotero.items.date_column "Dato">
@ -284,3 +284,9 @@
<!ENTITY zotero.downloadManager.label "Gem til Zotero"> <!ENTITY zotero.downloadManager.label "Gem til Zotero">
<!ENTITY zotero.downloadManager.saveToLibrary.description "Vedhæftede filer kan ikke gemmes til det valgte bibliotek. Dette element vil blive gemt i dit bibliotek i stedet."> <!ENTITY zotero.downloadManager.saveToLibrary.description "Vedhæftede filer kan ikke gemmes til det valgte bibliotek. Dette element vil blive gemt i dit bibliotek i stedet.">
<!ENTITY zotero.downloadManager.noPDFTools.description "For at bruge denne funktion skal du først installere PDF-værktøjerne i Zoteros indstillinger."> <!ENTITY zotero.downloadManager.noPDFTools.description "For at bruge denne funktion skal du først installere PDF-værktøjerne i Zoteros indstillinger.">
<!ENTITY zotero.attachLink.title "Attach Link to URI">
<!ENTITY zotero.attachLink.label.link "Link:">
<!ENTITY zotero.attachLink.label.title "Title:">

View File

@ -81,9 +81,9 @@ upgrade.couldNotMigrate.restart=Hvis du fortsat får denne meddelelse, så genst
errorReport.reportError=Send rapport om fejl... errorReport.reportError=Send rapport om fejl...
errorReport.reportErrors=Send rapport om fejl.... errorReport.reportErrors=Send rapport om fejl....
errorReport.reportInstructions=Du kan sende denne fejlmelding ved at vælge "%S" fra Handlinger-menuen (tandhjulikonet). errorReport.reportInstructions=Du kan sende denne fejlmelding ved at vælge "%S" fra Handlinger-menuen (tandhjulikonet).
errorReport.followingReportWillBeSubmitted=The following report will be submitted: errorReport.followingReportWillBeSubmitted=Følgende rapport vil blive sendt:
errorReport.noErrorsLogged=No errors have been logged since %S started. errorReport.noErrorsLogged=Der er ikke registreret nogen fejl, siden %S startede.
errorReport.advanceMessage=Press %S to send the report to the Zotero developers. errorReport.advanceMessage=Tryk %S for at sende rapporten til Zotero-udviklerne.
errorReport.stepsToReproduce=Følgende skridt kan genskabe situationen: errorReport.stepsToReproduce=Følgende skridt kan genskabe situationen:
errorReport.expectedResult=Forventet resultat: errorReport.expectedResult=Forventet resultat:
errorReport.actualResult=Faktisk resultat: errorReport.actualResult=Faktisk resultat:
@ -193,10 +193,10 @@ tagColorChooser.numberKeyInstructions=Du kan tilføje dette mærke til valgte el
tagColorChooser.maxTags=Op til %S mærker i hvert bibliotek kan have farver tilknyttet. tagColorChooser.maxTags=Op til %S mærker i hvert bibliotek kan have farver tilknyttet.
pane.items.loading=Henter listen med elementer... pane.items.loading=Henter listen med elementer...
pane.items.columnChooser.moreColumns=More Columns pane.items.columnChooser.moreColumns=Flere kolonner
pane.items.columnChooser.secondarySort=Secondary Sort (%S) pane.items.columnChooser.secondarySort=Sekundær sortering (%S)
pane.items.attach.link.uri.title=Vedhæft henvisning til URI 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=Indtast en URI: pane.items.attach.link.uri.file=To attach a link to a file, please use “%S”.
pane.items.trash.title=Flyt til papirkurv pane.items.trash.title=Flyt til papirkurv
pane.items.trash=Er du sikker på, du vil lægge dette element i papirkurven? pane.items.trash=Er du sikker på, du vil lægge dette element i papirkurven?
pane.items.trash.multiple=Er du sikker på, du vil lægge disse elementer i papirkurven? pane.items.trash.multiple=Er du sikker på, du vil lægge disse elementer i papirkurven?
@ -483,7 +483,7 @@ ingester.scrapingTo=Gemmer i
ingester.scrapeComplete=Elementet er gemt ingester.scrapeComplete=Elementet er gemt
ingester.scrapeError=Elementet kunne ikke gemmes ingester.scrapeError=Elementet kunne ikke gemmes
ingester.scrapeErrorDescription=En fejl opstod under forsøget på at gemme elementet. Tjek %S for mere information. ingester.scrapeErrorDescription=En fejl opstod under forsøget på at gemme elementet. Tjek %S for mere information.
ingester.scrapeErrorDescription.linkText=Troubleshooting Translator Issues ingester.scrapeErrorDescription.linkText=Fejlsøg oversætterproblemer
ingester.scrapeErrorDescription.previousError=Processen kunne ikke udføres pga. en tidligere Zotero-fejl. ingester.scrapeErrorDescription.previousError=Processen kunne ikke udføres pga. en tidligere Zotero-fejl.
ingester.importReferRISDialog.title=Import til Zotero med RIS/Refer ingester.importReferRISDialog.title=Import til Zotero med RIS/Refer
@ -948,7 +948,7 @@ locate.showFile.label=Vis fil
locate.showFile.tooltip=Åbn mappen, som filen findes i locate.showFile.tooltip=Åbn mappen, som filen findes i
locate.libraryLookup.label=Opslag i bibliotekskatalogen locate.libraryLookup.label=Opslag i bibliotekskatalogen
locate.libraryLookup.tooltip=Slå dette element op med den valgte OpenURL fortolker locate.libraryLookup.tooltip=Slå dette element op med den valgte OpenURL fortolker
locate.manageLocateEngines=Håndtér opslagsmaskiner... locate.manageLocateEngines=Håndtér søgemaskiner...
standalone.corruptInstallation=Din Zotero Standalone installation lader til at være ødelagt pga. en fejlslagen automatisk opdatering. Selvom Zotero måske fortsat vil du, tilrådes det at hente den seneste version på http://zotero.org/support/standalone for at undgå mulige fejl. standalone.corruptInstallation=Din Zotero Standalone installation lader til at være ødelagt pga. en fejlslagen automatisk opdatering. Selvom Zotero måske fortsat vil du, tilrådes det at hente den seneste version på http://zotero.org/support/standalone for at undgå mulige fejl.
standalone.addonInstallationFailed.title=Installation af udvidelsesmodul slog fejl standalone.addonInstallationFailed.title=Installation af udvidelsesmodul slog fejl

View File

@ -284,3 +284,9 @@
<!ENTITY zotero.downloadManager.label "In Zotero speichern"> <!ENTITY zotero.downloadManager.label "In Zotero speichern">
<!ENTITY zotero.downloadManager.saveToLibrary.description "Anhänge können in der aktuell gewählten Bibliothek nicht gespeichert werden. Der Eintrag wird stattdessen in Ihrer Bibliothek gespeichert."> <!ENTITY zotero.downloadManager.saveToLibrary.description "Anhänge können in der aktuell gewählten Bibliothek nicht gespeichert werden. Der Eintrag wird stattdessen in Ihrer Bibliothek gespeichert.">
<!ENTITY zotero.downloadManager.noPDFTools.description "Um diese Funktion zu nutzen, müssen Sie zuerst die PDF-Werkzeuge in den Zotero-Einstellungen installieren."> <!ENTITY zotero.downloadManager.noPDFTools.description "Um diese Funktion zu nutzen, müssen Sie zuerst die PDF-Werkzeuge in den Zotero-Einstellungen installieren.">
<!ENTITY zotero.attachLink.title "Link zu einer URI anhängen">
<!ENTITY zotero.attachLink.label.link "Link:">
<!ENTITY zotero.attachLink.label.title "Titel:">

View File

@ -195,8 +195,8 @@ tagColorChooser.maxTags=Sie können bis zu %S Tags in jeder Bibliothek Farben zu
pane.items.loading=Lade die Liste der Einträge... pane.items.loading=Lade die Liste der Einträge...
pane.items.columnChooser.moreColumns=Weitere Spalten pane.items.columnChooser.moreColumns=Weitere Spalten
pane.items.columnChooser.secondarySort=Sekundäre Sortierung (%S) pane.items.columnChooser.secondarySort=Sekundäre Sortierung (%S)
pane.items.attach.link.uri.title=Link zu einer URI anhängen pane.items.attach.link.uri.unrecognized=Zotero hat die eingegeben URI nicht erkannt. Bitte überprüfen Sie die Adresse und versuchen Sie es erneut.
pane.items.attach.link.uri=URI eingeben: pane.items.attach.link.uri.file=Um einen Link zu einer Datei hinzuzufügen, verwenden Sie bitte "%S".
pane.items.trash.title=In den Papierkorb verschieben pane.items.trash.title=In den Papierkorb verschieben
pane.items.trash=Sind Sie sicher, dass Sie den ausgewählten Eintrag in den Papierkorb verschieben wollen? pane.items.trash=Sind Sie sicher, dass Sie den ausgewählten Eintrag in den Papierkorb verschieben wollen?
pane.items.trash.multiple=Sind Sie sicher, dass Sie die ausgewählten Einträge in den Papierkorb verschieben wollen? pane.items.trash.multiple=Sind Sie sicher, dass Sie die ausgewählten Einträge in den Papierkorb verschieben wollen?

View File

@ -284,3 +284,9 @@
<!ENTITY zotero.downloadManager.label "Save to Zotero"> <!ENTITY zotero.downloadManager.label "Save to Zotero">
<!ENTITY zotero.downloadManager.saveToLibrary.description "Attachments cannot be saved to the currently selected library. This item will be saved to your library instead."> <!ENTITY zotero.downloadManager.saveToLibrary.description "Attachments cannot be saved to the currently selected library. This item will be saved to your library instead.">
<!ENTITY zotero.downloadManager.noPDFTools.description "To use this feature, you must first install the PDF tools in the Search pane of the Zotero preferences."> <!ENTITY zotero.downloadManager.noPDFTools.description "To use this feature, you must first install the PDF tools in the Search pane of the Zotero preferences.">
<!ENTITY zotero.attachLink.title "Attach Link to URI">
<!ENTITY zotero.attachLink.label.link "Link:">
<!ENTITY zotero.attachLink.label.title "Title:">

View File

@ -195,8 +195,8 @@ tagColorChooser.maxTags=Up to %S tags in each library can have colors assigned.
pane.items.loading=Loading items list... pane.items.loading=Loading items list...
pane.items.columnChooser.moreColumns=More Columns pane.items.columnChooser.moreColumns=More Columns
pane.items.columnChooser.secondarySort=Secondary Sort (%S) pane.items.columnChooser.secondarySort=Secondary Sort (%S)
pane.items.attach.link.uri.title=Attach Link to URI 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=Enter a URI: 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.title=Move to Trash
pane.items.trash=Are you sure you want to move the selected item to the 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.trash.multiple=Are you sure you want to move the selected items to the Trash?

View File

@ -284,3 +284,9 @@
<!ENTITY zotero.downloadManager.label "Save to Zotero"> <!ENTITY zotero.downloadManager.label "Save to Zotero">
<!ENTITY zotero.downloadManager.saveToLibrary.description "Attachments cannot be saved to the currently selected library. This item will be saved to your library instead."> <!ENTITY zotero.downloadManager.saveToLibrary.description "Attachments cannot be saved to the currently selected library. This item will be saved to your library instead.">
<!ENTITY zotero.downloadManager.noPDFTools.description "To use this feature, you must first install the PDF tools in the Search pane of the Zotero preferences."> <!ENTITY zotero.downloadManager.noPDFTools.description "To use this feature, you must first install the PDF tools in the Search pane of the Zotero preferences.">
<!ENTITY zotero.attachLink.title "Attach Link to URI">
<!ENTITY zotero.attachLink.label.link "Link:">
<!ENTITY zotero.attachLink.label.title "Title:">

View File

@ -195,8 +195,8 @@ tagColorChooser.maxTags = Up to %S tags in each library c
pane.items.loading = Loading items list… pane.items.loading = Loading items list…
pane.items.columnChooser.moreColumns = More Columns pane.items.columnChooser.moreColumns = More Columns
pane.items.columnChooser.secondarySort = Secondary Sort (%S) pane.items.columnChooser.secondarySort = Secondary Sort (%S)
pane.items.attach.link.uri.title = Attach Link to URI 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 = Enter a URI: 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.title = Move to Trash
pane.items.trash = Are you sure you want to move the selected item to the 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.trash.multiple = Are you sure you want to move the selected items to the Trash?

View File

@ -18,12 +18,12 @@
<!ENTITY zotero.preferences.fontSize.small "Pequeña"> <!ENTITY zotero.preferences.fontSize.small "Pequeña">
<!ENTITY zotero.preferences.fontSize.medium "Mediana"> <!ENTITY zotero.preferences.fontSize.medium "Mediana">
<!ENTITY zotero.preferences.fontSize.large "Grande"> <!ENTITY zotero.preferences.fontSize.large "Grande">
<!ENTITY zotero.preferences.fontSize.xlarge "Súper grande"> <!ENTITY zotero.preferences.fontSize.xlarge "Super grande">
<!ENTITY zotero.preferences.fontSize.notes "Tamaño de letra en las notas:"> <!ENTITY zotero.preferences.fontSize.notes "Tamaño de letra en las notas:">
<!ENTITY zotero.preferences.miscellaneous "Miscelánea"> <!ENTITY zotero.preferences.miscellaneous "Miscelánea">
<!ENTITY zotero.preferences.autoUpdate "Automáticamente comprobar si hay traductores y estilos actualizados "> <!ENTITY zotero.preferences.autoUpdate "Automáticamente comprobar si hay traductores y estilos actualizados ">
<!ENTITY zotero.preferences.updateNow "Hacerlo ahora"> <!ENTITY zotero.preferences.updateNow "Actualizarlo">
<!ENTITY zotero.preferences.reportTranslationFailure "Informar de fallos en los traductores de página"> <!ENTITY zotero.preferences.reportTranslationFailure "Informar de fallos en los traductores de página">
<!ENTITY zotero.preferences.zoteroDotOrgVersionHeader "Permitir que zotero.org personalice contenido basándose en la versión actual de Zotero"> <!ENTITY zotero.preferences.zoteroDotOrgVersionHeader "Permitir que zotero.org personalice contenido basándose en la versión actual de Zotero">
<!ENTITY zotero.preferences.zoteroDotOrgVersionHeader.tooltip "Si se activa, la versión actual de Zotero se añadirá a las peticiones HTTP a zotero.org"> <!ENTITY zotero.preferences.zoteroDotOrgVersionHeader.tooltip "Si se activa, la versión actual de Zotero se añadirá a las peticiones HTTP a zotero.org">
@ -61,11 +61,11 @@
<!ENTITY zotero.preferences.sync.fileSyncing "Sincronización de archivos"> <!ENTITY zotero.preferences.sync.fileSyncing "Sincronización de archivos">
<!ENTITY zotero.preferences.sync.fileSyncing.url "URL:"> <!ENTITY zotero.preferences.sync.fileSyncing.url "URL:">
<!ENTITY zotero.preferences.sync.fileSyncing.myLibrary "Sincronizar los archivos adjuntos en Mi biblioteca usando"> <!ENTITY zotero.preferences.sync.fileSyncing.myLibrary "Sincronizar los archivos adjuntos en Mi biblioteca usando">
<!ENTITY zotero.preferences.sync.fileSyncing.groups "Sincronizar los archivos en bibliotecas de grupo usando el almacén Zotero"> <!ENTITY zotero.preferences.sync.fileSyncing.groups "Sincronizar los archivos en bibliotecas de grupo usando el almacenaje de Zotero">
<!ENTITY zotero.preferences.sync.fileSyncing.download "Descargar archivos"> <!ENTITY zotero.preferences.sync.fileSyncing.download "Descargar archivos">
<!ENTITY zotero.preferences.sync.fileSyncing.download.atSyncTime "en el momento de sincronizar"> <!ENTITY zotero.preferences.sync.fileSyncing.download.atSyncTime "en el momento de sincronizar">
<!ENTITY zotero.preferences.sync.fileSyncing.download.onDemand "según se necesite"> <!ENTITY zotero.preferences.sync.fileSyncing.download.onDemand "según se necesite">
<!ENTITY zotero.preferences.sync.fileSyncing.tos1 "Al usar el almacén de Zotero, acepta sus"> <!ENTITY zotero.preferences.sync.fileSyncing.tos1 "Mediante el uso de almacenamiento provisto por Zotero, acepta quedar obligado por su">
<!ENTITY zotero.preferences.sync.fileSyncing.tos2 "términos y condiciones"> <!ENTITY zotero.preferences.sync.fileSyncing.tos2 "términos y condiciones">
<!ENTITY zotero.preferences.sync.reset.warning1 "Las siguientes operaciones son para utilizar sólo en situaciones raras, específicas, y no deberían usarse para una gestión de problemas generales. En muchos casos, reestablecer causará problemas adicionales. Vea"> <!ENTITY zotero.preferences.sync.reset.warning1 "Las siguientes operaciones son para utilizar sólo en situaciones raras, específicas, y no deberían usarse para una gestión de problemas generales. En muchos casos, reestablecer causará problemas adicionales. Vea">
<!ENTITY zotero.preferences.sync.reset.warning2 "Opciones para reestablecer la sincronización"> <!ENTITY zotero.preferences.sync.reset.warning2 "Opciones para reestablecer la sincronización">
@ -82,22 +82,22 @@
<!ENTITY zotero.preferences.sync.reset.button "Restablecer…"> <!ENTITY zotero.preferences.sync.reset.button "Restablecer…">
<!ENTITY zotero.preferences.prefpane.search "Búsqueda"> <!ENTITY zotero.preferences.prefpane.search "Buscar">
<!ENTITY zotero.preferences.search.fulltextCache "Copia local para búsquedas a texto completo"> <!ENTITY zotero.preferences.search.fulltextCache "Copia local para búsquedas a texto completo">
<!ENTITY zotero.preferences.search.pdfIndexing "Indización de PDF"> <!ENTITY zotero.preferences.search.pdfIndexing "Indexación de PDF">
<!ENTITY zotero.preferences.search.indexStats "Estadísticas de indización"> <!ENTITY zotero.preferences.search.indexStats "Estadísticas de indexación">
<!ENTITY zotero.preferences.search.indexStats.indexed "Indizados:"> <!ENTITY zotero.preferences.search.indexStats.indexed "Indexado:">
<!ENTITY zotero.preferences.search.indexStats.partial "Parciales:"> <!ENTITY zotero.preferences.search.indexStats.partial "Parciales:">
<!ENTITY zotero.preferences.search.indexStats.unindexed "No indizados:"> <!ENTITY zotero.preferences.search.indexStats.unindexed "No indexados:">
<!ENTITY zotero.preferences.search.indexStats.words "Palabras:"> <!ENTITY zotero.preferences.search.indexStats.words "Palabras:">
<!ENTITY zotero.preferences.fulltext.textMaxLength "Máximo de caracteres indizados por archivo:"> <!ENTITY zotero.preferences.fulltext.textMaxLength "Máximo de caracteres indexados por archivo:">
<!ENTITY zotero.preferences.fulltext.pdfMaxPages "Máximo de páginas indizadas por archivo:"> <!ENTITY zotero.preferences.fulltext.pdfMaxPages "Máximo de páginas indexadas por archivo:">
<!ENTITY zotero.preferences.prefpane.export "Exportar"> <!ENTITY zotero.preferences.prefpane.export "Exportar">
<!ENTITY zotero.preferences.citationOptions.caption "Opciones de cita"> <!ENTITY zotero.preferences.citationOptions.caption "Opciones de citas">
<!ENTITY zotero.preferences.export.citePaperJournalArticleURL "Incluir los URL de los artículos en las referencias"> <!ENTITY zotero.preferences.export.citePaperJournalArticleURL "Incluir los URL de los artículos en las referencias">
<!ENTITY zotero.preferences.export.citePaperJournalArticleURL.description "Sin esta opción, Zotero solo incluye los URL al citar artículos de revistas y periódicos si el artículo no tiene un intervalo de páginas especificado."> <!ENTITY zotero.preferences.export.citePaperJournalArticleURL.description "Sin esta opción, Zotero solo incluye los URL al citar artículos de revistas y periódicos si el artículo no tiene un intervalo de páginas especificado.">
@ -132,18 +132,18 @@
<!ENTITY zotero.preferences.keys.toggleFullscreen "Conmutar el modo de pantalla completa"> <!ENTITY zotero.preferences.keys.toggleFullscreen "Conmutar el modo de pantalla completa">
<!ENTITY zotero.preferences.keys.focusLibrariesPane "Enfocar el panel de bibliotecas"> <!ENTITY zotero.preferences.keys.focusLibrariesPane "Enfocar el panel de bibliotecas">
<!ENTITY zotero.preferences.keys.quicksearch "Búsqueda rápida"> <!ENTITY zotero.preferences.keys.quicksearch "Búsqueda rápida">
<!ENTITY zotero.preferences.keys.newItem "Crear un New Item"> <!ENTITY zotero.preferences.keys.newItem "Crear un nuevo elemento">
<!ENTITY zotero.preferences.keys.newNote "Crear una Nueva nota"> <!ENTITY zotero.preferences.keys.newNote "Crear una Nueva nota">
<!ENTITY zotero.preferences.keys.toggleTagSelector "Conmutar el selector de marcas"> <!ENTITY zotero.preferences.keys.toggleTagSelector "Conmutar el selector de marcas">
<!ENTITY zotero.preferences.keys.copySelectedItemCitationsToClipboard "Copiar las citas para los ítems seleccionados al portapapeles"> <!ENTITY zotero.preferences.keys.copySelectedItemCitationsToClipboard "Copiar las citas para los elementos seleccionados al portapapeles">
<!ENTITY zotero.preferences.keys.copySelectedItemsToClipboard "Copiar los ítems seleccionados al portapapeles"> <!ENTITY zotero.preferences.keys.copySelectedItemsToClipboard "Copiar los elementos seleccionados al portapapeles">
<!ENTITY zotero.preferences.keys.importFromClipboard "Importar desde el portapapeles"> <!ENTITY zotero.preferences.keys.importFromClipboard "Importar desde el portapapeles">
<!ENTITY zotero.preferences.keys.changesTakeEffect "Los cambios tendrán efecto sólo en las ventanas nuevas"> <!ENTITY zotero.preferences.keys.changesTakeEffect "Los cambios tendrán efecto sólo en las ventanas nuevas">
<!ENTITY zotero.preferences.prefpane.proxies "Servidores Proxies"> <!ENTITY zotero.preferences.prefpane.proxies "Servidores proxies">
<!ENTITY zotero.preferences.proxies.proxyOptions "Opciones de servidor proxy"> <!ENTITY zotero.preferences.proxies.proxyOptions "Opciones de servidor proxy">
<!ENTITY zotero.preferences.proxies.desc_before_link "Zotero transparentemente redirigirá las peticiones a través de los servidores proxies guardados. Consulte la"> <!ENTITY zotero.preferences.proxies.desc_before_link "Zotero redirigirá transparentemente las peticiones a través de los servidores proxies guardados. Consulte la">
<!ENTITY zotero.preferences.proxies.desc_link "Documentación del servidor proxy"> <!ENTITY zotero.preferences.proxies.desc_link "Documentación del servidor proxy">
<!ENTITY zotero.preferences.proxies.desc_after_link "para mayor información."> <!ENTITY zotero.preferences.proxies.desc_after_link "para mayor información.">
<!ENTITY zotero.preferences.proxies.transparent "Habilitar el redireccionamiento del servidor proxy"> <!ENTITY zotero.preferences.proxies.transparent "Habilitar el redireccionamiento del servidor proxy">
@ -155,7 +155,7 @@
<!ENTITY zotero.preferences.proxies.multiSite "Multi-sitio"> <!ENTITY zotero.preferences.proxies.multiSite "Multi-sitio">
<!ENTITY zotero.preferences.proxies.autoAssociate "Automáticamente asociar nuevos hosts"> <!ENTITY zotero.preferences.proxies.autoAssociate "Automáticamente asociar nuevos hosts">
<!ENTITY zotero.preferences.proxies.variables "Puede usar las siguientes variables en su esquema del servidor proxy:"> <!ENTITY zotero.preferences.proxies.variables "Puede usar las siguientes variables en su esquema de servidor proxy:">
<!ENTITY zotero.preferences.proxies.h_variable "&#37;h - El nombre del sistema del sitio proxificado (ejemplo: www.zotero.org)"> <!ENTITY zotero.preferences.proxies.h_variable "&#37;h - El nombre del sistema del sitio proxificado (ejemplo: www.zotero.org)">
<!ENTITY zotero.preferences.proxies.p_variable "&#37;p - La ruta de la página proxificado excluyendo la barra invertida (ejemplo: acerca/index.html)"> <!ENTITY zotero.preferences.proxies.p_variable "&#37;p - La ruta de la página proxificado excluyendo la barra invertida (ejemplo: acerca/index.html)">
<!ENTITY zotero.preferences.proxies.d_variable "&#37;d - La ruta del directorio (ejemplo: acerca/)"> <!ENTITY zotero.preferences.proxies.d_variable "&#37;d - La ruta del directorio (ejemplo: acerca/)">
@ -170,20 +170,20 @@
<!ENTITY zotero.preferences.locate.description "Descripción"> <!ENTITY zotero.preferences.locate.description "Descripción">
<!ENTITY zotero.preferences.locate.name "Nombre"> <!ENTITY zotero.preferences.locate.name "Nombre">
<!ENTITY zotero.preferences.locate.locateEnginedescription "Un motor de búsqueda amplía la capacidad de la lista desplegable Localizar en el panel de información. Habilitando dichos motores de búsqueda a la lista de abajo, éstas se agregarán a la lista desplegable y se pueden utilizar para localizar los recursos de su biblioteca en la red."> <!ENTITY zotero.preferences.locate.locateEnginedescription "Un motor de búsqueda amplía la capacidad de la lista desplegable Localizar en el panel de información. Habilitando dichos motores de búsqueda a la lista de abajo, éstas se agregarán a la lista desplegable y se pueden utilizar para localizar los recursos de su biblioteca en la red.">
<!ENTITY zotero.preferences.locate.addDescription "Para añadir un motor de búsqueda que no está en la lista, visita en tu navegador el motor de búsqueda y selecciona &#34;Añadir&#34; desde el menú Localizar de Zotero."> <!ENTITY zotero.preferences.locate.addDescription "Para añadir un motor de búsqueda que no está en la lista, visite en su navegador el motor de búsqueda y selecciona &#34;Añadir&#34; desde el menú Localizar de Zotero.">
<!ENTITY zotero.preferences.locate.restoreDefaults "Restaurar configuración por omisión"> <!ENTITY zotero.preferences.locate.restoreDefaults "Restaurar configuración por omisión">
<!ENTITY zotero.preferences.charset "Codificación de caracteres"> <!ENTITY zotero.preferences.charset "Codificación de caracteres">
<!ENTITY zotero.preferences.charset.importCharset "Importar codificación de caracteres"> <!ENTITY zotero.preferences.charset.importCharset "Importar codificación de caracteres">
<!ENTITY zotero.preferences.charset.displayExportOption "Mostrar opción de codificación de caracteres en la exportación"> <!ENTITY zotero.preferences.charset.displayExportOption "Mostrar opción de codificación de caracteres en la exportación">
<!ENTITY zotero.preferences.dataDir "Lugar de almacenamiento"> <!ENTITY zotero.preferences.dataDir "Lugar del directorio de almacenamiento">
<!ENTITY zotero.preferences.dataDir.useProfile "Usar el directorio del perfil de usuario"> <!ENTITY zotero.preferences.dataDir.useProfile "Usar el directorio del perfil de usuario">
<!ENTITY zotero.preferences.dataDir.custom "Especial:"> <!ENTITY zotero.preferences.dataDir.custom "Personalizar:">
<!ENTITY zotero.preferences.dataDir.choose "Elegir..."> <!ENTITY zotero.preferences.dataDir.choose "Elegir...">
<!ENTITY zotero.preferences.dataDir.reveal "Mostrar el directorio de datos"> <!ENTITY zotero.preferences.dataDir.reveal "Mostrar el directorio de datos">
<!ENTITY zotero.preferences.attachmentBaseDir.caption "Directorio base de adjunto enlazado"> <!ENTITY zotero.preferences.attachmentBaseDir.caption "Directorio base de adjuntos enlazados">
<!ENTITY zotero.preferences.attachmentBaseDir.message "Zotero usará caminos relativos para los archivos adjuntos enlazados dentro del directorio base, permitiéndole acceder a los archivos desde diferentes ordenadores, siempre que la estructura de archivos dentro del directorio base se mantenga igual."> <!ENTITY zotero.preferences.attachmentBaseDir.message "Zotero usará caminos relativos para los archivos adjuntos enlazados dentro del directorio base, permitiéndole acceder a los archivos desde diferentes ordenadores, siempre que la estructura de archivos dentro del directorio base se mantenga igual.">
<!ENTITY zotero.preferences.attachmentBaseDir.basePath "Directorio base:"> <!ENTITY zotero.preferences.attachmentBaseDir.basePath "Directorio base:">
<!ENTITY zotero.preferences.attachmentBaseDir.selectBasePath "Elegir..."> <!ENTITY zotero.preferences.attachmentBaseDir.selectBasePath "Elegir...">

View File

@ -284,3 +284,9 @@
<!ENTITY zotero.downloadManager.label "Guardar en Zotero"> <!ENTITY zotero.downloadManager.label "Guardar en Zotero">
<!ENTITY zotero.downloadManager.saveToLibrary.description "Los archivos adjuntos no se pueden guardar en la biblioteca seleccionada. Así, este ítem será guardado en su biblioteca."> <!ENTITY zotero.downloadManager.saveToLibrary.description "Los archivos adjuntos no se pueden guardar en la biblioteca seleccionada. Así, este ítem será guardado en su biblioteca.">
<!ENTITY zotero.downloadManager.noPDFTools.description "Para utilizar esta función, debe primeramente instalar las herramientas PDF en las preferencias de Zotero."> <!ENTITY zotero.downloadManager.noPDFTools.description "Para utilizar esta función, debe primeramente instalar las herramientas PDF en las preferencias de Zotero.">
<!ENTITY zotero.attachLink.title "Adjuntar enlace a URI">
<!ENTITY zotero.attachLink.label.link "Enlace:">
<!ENTITY zotero.attachLink.label.title "Título:">

View File

@ -27,7 +27,7 @@ general.updateAvailable=Actualización disponible
general.noUpdatesFound=No hay actualizaciones. general.noUpdatesFound=No hay actualizaciones.
general.isUpToDate=%S está actualizado. general.isUpToDate=%S está actualizado.
general.upgrade=Actualizar general.upgrade=Actualizar
general.yes=Sí general.yes=Si
general.no=No general.no=No
general.notNow=no ahora general.notNow=no ahora
general.passed=Superado general.passed=Superado
@ -135,7 +135,7 @@ startupError.zoteroVersionIsOlder.upgrade=Actualízalo a la última versión en
startupError.zoteroVersionIsOlder.current=Versión actual: %S startupError.zoteroVersionIsOlder.current=Versión actual: %S
startupError.databaseUpgradeError=Error de actualización de la base de datos startupError.databaseUpgradeError=Error de actualización de la base de datos
date.relative.secondsAgo.one=Hace un segundo date.relative.secondsAgo.one=Hace 1 segundo
date.relative.secondsAgo.multiple=Hace %S segundos date.relative.secondsAgo.multiple=Hace %S segundos
date.relative.minutesAgo.one=Hace un minuto date.relative.minutesAgo.one=Hace un minuto
date.relative.minutesAgo.multiple=Hace %S minutos date.relative.minutesAgo.multiple=Hace %S minutos
@ -195,8 +195,8 @@ tagColorChooser.maxTags=Se puede asignar colores a hasta %S etiquetas de cada bi
pane.items.loading=Cargando la lista de ítems... pane.items.loading=Cargando la lista de ítems...
pane.items.columnChooser.moreColumns=Más columnas pane.items.columnChooser.moreColumns=Más columnas
pane.items.columnChooser.secondarySort=Orden secundario (%S) pane.items.columnChooser.secondarySort=Orden secundario (%S)
pane.items.attach.link.uri.title=Adjuntar enlace a URI pane.items.attach.link.uri.unrecognized=Zotero no reconoce la dirección URL que ingresó. Por favor verifiquela e intente nuevamente.
pane.items.attach.link.uri=Introducir una URI: pane.items.attach.link.uri.file=Para adjuntar un enlace a un archivo, por favor utilice “%S”.
pane.items.trash.title=Enviar a la papelera pane.items.trash.title=Enviar a la papelera
pane.items.trash=¿Seguro que quieres enviar el ítem a la papelera? pane.items.trash=¿Seguro que quieres enviar el ítem a la papelera?
pane.items.trash.multiple=¿Seguro que quieres enviar los ítems a la papelera? pane.items.trash.multiple=¿Seguro que quieres enviar los ítems a la papelera?

View File

@ -284,3 +284,9 @@
<!ENTITY zotero.downloadManager.label "Zoterosse salvestamine"> <!ENTITY zotero.downloadManager.label "Zoterosse salvestamine">
<!ENTITY zotero.downloadManager.saveToLibrary.description "Valitud raamatukokku ei ole võimalik manuseid salvestada. See kirje salvestatakse teie isiklikku raamatukokku."> <!ENTITY zotero.downloadManager.saveToLibrary.description "Valitud raamatukokku ei ole võimalik manuseid salvestada. See kirje salvestatakse teie isiklikku raamatukokku.">
<!ENTITY zotero.downloadManager.noPDFTools.description "Selle funktsiooni kasutamiseks on kõigepealt tarvis paigaldada PDF tööriistad Zotero seadetes."> <!ENTITY zotero.downloadManager.noPDFTools.description "Selle funktsiooni kasutamiseks on kõigepealt tarvis paigaldada PDF tööriistad Zotero seadetes.">
<!ENTITY zotero.attachLink.title "Attach Link to URI">
<!ENTITY zotero.attachLink.label.link "Link:">
<!ENTITY zotero.attachLink.label.title "Title:">

View File

@ -195,8 +195,8 @@ tagColorChooser.maxTags=Up to %S tags in each library can have colors assigned.
pane.items.loading=Kirjete nimekirja laadimine... pane.items.loading=Kirjete nimekirja laadimine...
pane.items.columnChooser.moreColumns=More Columns pane.items.columnChooser.moreColumns=More Columns
pane.items.columnChooser.secondarySort=Secondary Sort (%S) pane.items.columnChooser.secondarySort=Secondary Sort (%S)
pane.items.attach.link.uri.title=Attach Link to URI 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=Enter a URI: pane.items.attach.link.uri.file=To attach a link to a file, please use “%S”.
pane.items.trash.title=Liiguta Prahi hulka pane.items.trash.title=Liiguta Prahi hulka
pane.items.trash=Olete kindel, et soovite valitud kirje Prahi hulka liigutada? pane.items.trash=Olete kindel, et soovite valitud kirje Prahi hulka liigutada?
pane.items.trash.multiple=Olete kindel, et soovite valitud kirjed Prahi hulka liigutada? pane.items.trash.multiple=Olete kindel, et soovite valitud kirjed Prahi hulka liigutada?

View File

@ -284,3 +284,9 @@
<!ENTITY zotero.downloadManager.label "Save to Zotero"> <!ENTITY zotero.downloadManager.label "Save to Zotero">
<!ENTITY zotero.downloadManager.saveToLibrary.description "Attachments cannot be saved to the currently selected library. This item will be saved to your library instead."> <!ENTITY zotero.downloadManager.saveToLibrary.description "Attachments cannot be saved to the currently selected library. This item will be saved to your library instead.">
<!ENTITY zotero.downloadManager.noPDFTools.description "To use this feature, you must first install the PDF tools in the Search pane of the Zotero preferences."> <!ENTITY zotero.downloadManager.noPDFTools.description "To use this feature, you must first install the PDF tools in the Search pane of the Zotero preferences.">
<!ENTITY zotero.attachLink.title "Attach Link to URI">
<!ENTITY zotero.attachLink.label.link "Link:">
<!ENTITY zotero.attachLink.label.title "Title:">

View File

@ -195,8 +195,8 @@ tagColorChooser.maxTags=Up to %S tags in each library can have colors assigned.
pane.items.loading=datuak kargatzen ari... pane.items.loading=datuak kargatzen ari...
pane.items.columnChooser.moreColumns=More Columns pane.items.columnChooser.moreColumns=More Columns
pane.items.columnChooser.secondarySort=Secondary Sort (%S) pane.items.columnChooser.secondarySort=Secondary Sort (%S)
pane.items.attach.link.uri.title=Attach Link to URI 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=Enter a URI: pane.items.attach.link.uri.file=To attach a link to a file, please use “%S”.
pane.items.trash.title=Zaborrara bota pane.items.trash.title=Zaborrara bota
pane.items.trash=Hautatutako itema zaborrera bota? pane.items.trash=Hautatutako itema zaborrera bota?
pane.items.trash.multiple=Hautatutako itemak zaborrera bota? pane.items.trash.multiple=Hautatutako itemak zaborrera bota?

View File

@ -284,3 +284,9 @@
<!ENTITY zotero.downloadManager.label "ذخیره در زوترو"> <!ENTITY zotero.downloadManager.label "ذخیره در زوترو">
<!ENTITY zotero.downloadManager.saveToLibrary.description "Attachments cannot be saved to the currently selected library. This item will be saved to your library instead."> <!ENTITY zotero.downloadManager.saveToLibrary.description "Attachments cannot be saved to the currently selected library. This item will be saved to your library instead.">
<!ENTITY zotero.downloadManager.noPDFTools.description "To use this feature, you must first install the PDF tools in the Search pane of the Zotero preferences."> <!ENTITY zotero.downloadManager.noPDFTools.description "To use this feature, you must first install the PDF tools in the Search pane of the Zotero preferences.">
<!ENTITY zotero.attachLink.title "Attach Link to URI">
<!ENTITY zotero.attachLink.label.link "Link:">
<!ENTITY zotero.attachLink.label.title "Title:">

View File

@ -195,8 +195,8 @@ tagColorChooser.maxTags=Up to %S tags in each library can have colors assigned.
pane.items.loading=بار کردن لیست آیتم‌ها... pane.items.loading=بار کردن لیست آیتم‌ها...
pane.items.columnChooser.moreColumns=More Columns pane.items.columnChooser.moreColumns=More Columns
pane.items.columnChooser.secondarySort=Secondary Sort (%S) pane.items.columnChooser.secondarySort=Secondary Sort (%S)
pane.items.attach.link.uri.title=Attach Link to URI 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=Enter a URI: pane.items.attach.link.uri.file=To attach a link to a file, please use “%S”.
pane.items.trash.title=انتقال به سطل بازیافت pane.items.trash.title=انتقال به سطل بازیافت
pane.items.trash=آیتم‌ انتخاب شده به سطل بازیافت برود؟ pane.items.trash=آیتم‌ انتخاب شده به سطل بازیافت برود؟
pane.items.trash.multiple=آیتم‌‌های انتخاب شده به سطل بازیافت بروند؟ pane.items.trash.multiple=آیتم‌‌های انتخاب شده به سطل بازیافت بروند؟

View File

@ -3,7 +3,7 @@
<!ENTITY zotero.preferences.default "Oletus:"> <!ENTITY zotero.preferences.default "Oletus:">
<!ENTITY zotero.preferences.items "nimikkeet"> <!ENTITY zotero.preferences.items "nimikkeet">
<!ENTITY zotero.preferences.period "."> <!ENTITY zotero.preferences.period ".">
<!ENTITY zotero.preferences.settings "Settings"> <!ENTITY zotero.preferences.settings "Asetukset">
<!ENTITY zotero.preferences.prefpane.general "Yleistä"> <!ENTITY zotero.preferences.prefpane.general "Yleistä">
@ -22,12 +22,12 @@
<!ENTITY zotero.preferences.fontSize.notes "Muistiinpanojen kirjasinkoko:"> <!ENTITY zotero.preferences.fontSize.notes "Muistiinpanojen kirjasinkoko:">
<!ENTITY zotero.preferences.miscellaneous "Sekalaista"> <!ENTITY zotero.preferences.miscellaneous "Sekalaista">
<!ENTITY zotero.preferences.autoUpdate "Automatically check for updated translators and styles"> <!ENTITY zotero.preferences.autoUpdate "Tarkista sivutulkkien ja tyylien päivitykset automaattisesti">
<!ENTITY zotero.preferences.updateNow "Päivitä nyt"> <!ENTITY zotero.preferences.updateNow "Päivitä nyt">
<!ENTITY zotero.preferences.reportTranslationFailure "Ilmoita toimimattomista sivutulkeista"> <!ENTITY zotero.preferences.reportTranslationFailure "Ilmoita toimimattomista sivutulkeista">
<!ENTITY zotero.preferences.zoteroDotOrgVersionHeader "Anna zotero.orgin muunnella sisältöään nykyisen Zotero-version perusteella"> <!ENTITY zotero.preferences.zoteroDotOrgVersionHeader "Anna zotero.orgin muunnella sisältöään nykyisen Zotero-version perusteella">
<!ENTITY zotero.preferences.zoteroDotOrgVersionHeader.tooltip "If enabled, the current Zotero version will be added to HTTP requests to zotero.org."> <!ENTITY zotero.preferences.zoteroDotOrgVersionHeader.tooltip "If enabled, the current Zotero version will be added to HTTP requests to zotero.org.">
<!ENTITY zotero.preferences.parseRISRefer "Use Zotero for downloaded BibTeX/RIS/Refer files"> <!ENTITY zotero.preferences.parseRISRefer "Käytä Zoteroa ladattujen BibTeX/Refer-tiedostojen avaamiseen">
<!ENTITY zotero.preferences.automaticSnapshots "Ota tilannekuvat automaattisesti luotaessa nimikettä web-sivusta"> <!ENTITY zotero.preferences.automaticSnapshots "Ota tilannekuvat automaattisesti luotaessa nimikettä web-sivusta">
<!ENTITY zotero.preferences.downloadAssociatedFiles "Liitä automaattisesti asiaankuuluvat PDF:t ja muut tiedostot"> <!ENTITY zotero.preferences.downloadAssociatedFiles "Liitä automaattisesti asiaankuuluvat PDF:t ja muut tiedostot">
<!ENTITY zotero.preferences.automaticTags "Merkitse automaattisesti nimikkeisiin avainsanat ja otsikot"> <!ENTITY zotero.preferences.automaticTags "Merkitse automaattisesti nimikkeisiin avainsanat ja otsikot">
@ -55,8 +55,8 @@
<!ENTITY zotero.preferences.sync.createAccount "Luo käyttäjätili"> <!ENTITY zotero.preferences.sync.createAccount "Luo käyttäjätili">
<!ENTITY zotero.preferences.sync.lostPassword "Unohditko salasanan?"> <!ENTITY zotero.preferences.sync.lostPassword "Unohditko salasanan?">
<!ENTITY zotero.preferences.sync.syncAutomatically "Synkronoi automaattisesti"> <!ENTITY zotero.preferences.sync.syncAutomatically "Synkronoi automaattisesti">
<!ENTITY zotero.preferences.sync.syncFullTextContent "Sync full-text content"> <!ENTITY zotero.preferences.sync.syncFullTextContent "Synkronisoi kokotekstit">
<!ENTITY zotero.preferences.sync.syncFullTextContent.desc "Zotero can sync the full-text content of files in your Zotero libraries with zotero.org and other linked devices, allowing you to easily search for your files wherever you are. The full-text content of your files will not be shared publicly."> <!ENTITY zotero.preferences.sync.syncFullTextContent.desc "Zotero voi synkronisoida kirjastossasi olevien tiedostojen kokotekstisisällön zotero.orgiin ja linkattuihin laitteisiin, joten voi helposti hakea tietoja missä vain. Tiedostojen kokotekstisisältöä ei jaeta julkisesti.">
<!ENTITY zotero.preferences.sync.about "Tietoa synkronoinnista"> <!ENTITY zotero.preferences.sync.about "Tietoa synkronoinnista">
<!ENTITY zotero.preferences.sync.fileSyncing "Tiedostojen synkronointi"> <!ENTITY zotero.preferences.sync.fileSyncing "Tiedostojen synkronointi">
<!ENTITY zotero.preferences.sync.fileSyncing.url "Osoite:"> <!ENTITY zotero.preferences.sync.fileSyncing.url "Osoite:">
@ -64,12 +64,12 @@
<!ENTITY zotero.preferences.sync.fileSyncing.groups "Synkronoi ryhmäkirjastojen liitetiedostot käyttäen Zoteron tallennustilaa"> <!ENTITY zotero.preferences.sync.fileSyncing.groups "Synkronoi ryhmäkirjastojen liitetiedostot käyttäen Zoteron tallennustilaa">
<!ENTITY zotero.preferences.sync.fileSyncing.download "Lataa tiedostot"> <!ENTITY zotero.preferences.sync.fileSyncing.download "Lataa tiedostot">
<!ENTITY zotero.preferences.sync.fileSyncing.download.atSyncTime "synkronoinnin yhteydessä"> <!ENTITY zotero.preferences.sync.fileSyncing.download.atSyncTime "synkronoinnin yhteydessä">
<!ENTITY zotero.preferences.sync.fileSyncing.download.onDemand "as needed"> <!ENTITY zotero.preferences.sync.fileSyncing.download.onDemand "tarvittaessa">
<!ENTITY zotero.preferences.sync.fileSyncing.tos1 "Käyttämällä Zoteron tallennustilaa sitoudut samalla siihen liittyviin"> <!ENTITY zotero.preferences.sync.fileSyncing.tos1 "Käyttämällä Zoteron tallennustilaa sitoudut samalla siihen liittyviin">
<!ENTITY zotero.preferences.sync.fileSyncing.tos2 "käyttöehtoihin"> <!ENTITY zotero.preferences.sync.fileSyncing.tos2 "käyttöehtoihin">
<!ENTITY zotero.preferences.sync.reset.warning1 "Seuraavat toiminnot ovat tarpeen vain äärimmäisen harvinaisissa tilanteissa, eikä niitä tulisi käyttää tavalliseen virheenetsintään. Monissa tapauksissa asetusten nollaus voi aiheuttaa lisää ongelmia. Katso "> <!ENTITY zotero.preferences.sync.reset.warning1 "Seuraavat toiminnot ovat tarpeen vain äärimmäisen harvinaisissa tilanteissa, eikä niitä tulisi käyttää tavalliseen virheenetsintään. Monissa tapauksissa asetusten nollaus voi aiheuttaa lisää ongelmia. Katso ">
<!ENTITY zotero.preferences.sync.reset.warning2 "Synkroinnin nollauksen asetukset"> <!ENTITY zotero.preferences.sync.reset.warning2 "Synkroinnin nollauksen asetukset">
<!ENTITY zotero.preferences.sync.reset.warning3 " for more information."> <!ENTITY zotero.preferences.sync.reset.warning3 "saadaksesi lisätietoja.">
<!ENTITY zotero.preferences.sync.reset.fullSync "Täydellinen synkronointi Zotero-palvelimen kanssa"> <!ENTITY zotero.preferences.sync.reset.fullSync "Täydellinen synkronointi Zotero-palvelimen kanssa">
<!ENTITY zotero.preferences.sync.reset.fullSync.desc "Yhdistä paikallinen Zotero-aineisto synkronointipalvelimen aineiston kanssa jättäen synkronointihistoria huomioimatta"> <!ENTITY zotero.preferences.sync.reset.fullSync.desc "Yhdistä paikallinen Zotero-aineisto synkronointipalvelimen aineiston kanssa jättäen synkronointihistoria huomioimatta">
<!ENTITY zotero.preferences.sync.reset.restoreFromServer "Palauta aineisto Zotero-palvelimelta"> <!ENTITY zotero.preferences.sync.reset.restoreFromServer "Palauta aineisto Zotero-palvelimelta">
@ -78,7 +78,7 @@
<!ENTITY zotero.preferences.sync.reset.restoreToServer.desc "Poista kaikki palvelimella oleva aineisto ja korvaa se paikallisella Zotero-aineistolla"> <!ENTITY zotero.preferences.sync.reset.restoreToServer.desc "Poista kaikki palvelimella oleva aineisto ja korvaa se paikallisella Zotero-aineistolla">
<!ENTITY zotero.preferences.sync.reset.resetFileSyncHistory "Poista tiedostojen synkronointihistoria"> <!ENTITY zotero.preferences.sync.reset.resetFileSyncHistory "Poista tiedostojen synkronointihistoria">
<!ENTITY zotero.preferences.sync.reset.resetFileSyncHistory.desc "Tarkistaa jokaisen paikallisen liitetiedoston löytymisen tallennuspalvelimelta"> <!ENTITY zotero.preferences.sync.reset.resetFileSyncHistory.desc "Tarkistaa jokaisen paikallisen liitetiedoston löytymisen tallennuspalvelimelta">
<!ENTITY zotero.preferences.sync.reset "Reset"> <!ENTITY zotero.preferences.sync.reset "Nollaa">
<!ENTITY zotero.preferences.sync.reset.button "Palauta"> <!ENTITY zotero.preferences.sync.reset.button "Palauta">
@ -128,12 +128,12 @@
<!ENTITY zotero.preferences.prefpane.keys "Shortcut Keys"> <!ENTITY zotero.preferences.prefpane.keys "Shortcut Keys">
<!ENTITY zotero.preferences.keys.openZotero "Avaa/sulje Zotero-ikkuna"> <!ENTITY zotero.preferences.keys.openZotero "Avaa/sulje Zotero-ikkuna">
<!ENTITY zotero.preferences.keys.saveToZotero "Save to Zotero (address bar icon)"> <!ENTITY zotero.preferences.keys.saveToZotero "Tallenna Zoteroon (osoitepalkin kuvake)">
<!ENTITY zotero.preferences.keys.toggleFullscreen "Koko ruudun tila"> <!ENTITY zotero.preferences.keys.toggleFullscreen "Koko ruudun tila">
<!ENTITY zotero.preferences.keys.focusLibrariesPane "Focus Libraries Pane"> <!ENTITY zotero.preferences.keys.focusLibrariesPane "Kohdista kirjastonäkymään">
<!ENTITY zotero.preferences.keys.quicksearch "Pikahaku"> <!ENTITY zotero.preferences.keys.quicksearch "Pikahaku">
<!ENTITY zotero.preferences.keys.newItem "Create a New Item"> <!ENTITY zotero.preferences.keys.newItem "Luo uusi nimike">
<!ENTITY zotero.preferences.keys.newNote "Create a New Note"> <!ENTITY zotero.preferences.keys.newNote "Luo uusi muistiinpanot">
<!ENTITY zotero.preferences.keys.toggleTagSelector "Aiheenvalitsin päälle/pois"> <!ENTITY zotero.preferences.keys.toggleTagSelector "Aiheenvalitsin päälle/pois">
<!ENTITY zotero.preferences.keys.copySelectedItemCitationsToClipboard "Kopioi valittujen nimikkeiden sitaatit leikepöydälle"> <!ENTITY zotero.preferences.keys.copySelectedItemCitationsToClipboard "Kopioi valittujen nimikkeiden sitaatit leikepöydälle">
<!ENTITY zotero.preferences.keys.copySelectedItemsToClipboard "Kopioi valitut nimikkeet leikepöydälle"> <!ENTITY zotero.preferences.keys.copySelectedItemsToClipboard "Kopioi valitut nimikkeet leikepöydälle">
@ -146,7 +146,7 @@
<!ENTITY zotero.preferences.proxies.desc_before_link "Zotero välittää huomaamattomasti pyyntöjä tallennettujen välityspalvelinten kautta. Katso"> <!ENTITY zotero.preferences.proxies.desc_before_link "Zotero välittää huomaamattomasti pyyntöjä tallennettujen välityspalvelinten kautta. Katso">
<!ENTITY zotero.preferences.proxies.desc_link "välityspalvelinten ohjeesta"> <!ENTITY zotero.preferences.proxies.desc_link "välityspalvelinten ohjeesta">
<!ENTITY zotero.preferences.proxies.desc_after_link "lisätietoja."> <!ENTITY zotero.preferences.proxies.desc_after_link "lisätietoja.">
<!ENTITY zotero.preferences.proxies.transparent "Transparently redirect requests through previously used proxies"> <!ENTITY zotero.preferences.proxies.transparent "Käytä välityspalvelinta uudelleenohjaukseen">
<!ENTITY zotero.preferences.proxies.autoRecognize "Tunnista välitetyt resurssit automaattisesti"> <!ENTITY zotero.preferences.proxies.autoRecognize "Tunnista välitetyt resurssit automaattisesti">
<!ENTITY zotero.preferences.proxies.disableByDomain "Poista käytöstä välitetty uudelleenohjaus, kun palvelinnimessä on"> <!ENTITY zotero.preferences.proxies.disableByDomain "Poista käytöstä välitetty uudelleenohjaus, kun palvelinnimessä on">
<!ENTITY zotero.preferences.proxies.configured "Konfiguroidut välityspalvelimet"> <!ENTITY zotero.preferences.proxies.configured "Konfiguroidut välityspalvelimet">
@ -163,14 +163,14 @@
<!ENTITY zotero.preferences.proxies.a_variable "&#37;a - Mikä tahansa merkkijono"> <!ENTITY zotero.preferences.proxies.a_variable "&#37;a - Mikä tahansa merkkijono">
<!ENTITY zotero.preferences.prefpane.advanced "Lisäasetukset"> <!ENTITY zotero.preferences.prefpane.advanced "Lisäasetukset">
<!ENTITY zotero.preferences.advanced.filesAndFolders "Files and Folders"> <!ENTITY zotero.preferences.advanced.filesAndFolders "Tiedostot ja kansiot">
<!ENTITY zotero.preferences.prefpane.locate "Paikanna"> <!ENTITY zotero.preferences.prefpane.locate "Paikanna">
<!ENTITY zotero.preferences.locate.locateEngineManager "Artikkelihakumoottorin hallinta"> <!ENTITY zotero.preferences.locate.locateEngineManager "Artikkelihakumoottorin hallinta">
<!ENTITY zotero.preferences.locate.description "Kuvaus"> <!ENTITY zotero.preferences.locate.description "Kuvaus">
<!ENTITY zotero.preferences.locate.name "Nimi"> <!ENTITY zotero.preferences.locate.name "Nimi">
<!ENTITY zotero.preferences.locate.locateEnginedescription "Artikkelihakumoottori laajentaa Info-sivulla olevan Paikanna-valikon toimintaa. Laittamalla päälle alla luetellut artikkelihakumoottori ne lisätään pudotusvalikkoon ja niitä voi käyttää kirjastossasi olevien resurssien etsimiseen webistä."> <!ENTITY zotero.preferences.locate.locateEnginedescription "Artikkelihakumoottori laajentaa Info-sivulla olevan Paikanna-valikon toimintaa. Laittamalla päälle alla luetellut artikkelihakumoottorit ne lisätään pudotusvalikkoon ja niitä voi käyttää kirjastossasi olevien resurssien etsimiseen webistä.">
<!ENTITY zotero.preferences.locate.addDescription "To add a Lookup Engine that is not on the list, visit the desired search engine in your browser and select 'Add' from the Firefox Search Bar. When you reopen this preference pane you will have the option to enable the new Lookup Engine."> <!ENTITY zotero.preferences.locate.addDescription "Lisätäksesi artikkelihakumoottorin, jota ei ole luettelossa, vieraile kyseisellä nettisivulla ja valitse 'Add' (Lisää) Firefoxin hakupalkista. Kun avaat uudelleen asetukset, voit aktivoida uuden artikkelihakumoottorin.">
<!ENTITY zotero.preferences.locate.restoreDefaults "Palauta oletusarvot"> <!ENTITY zotero.preferences.locate.restoreDefaults "Palauta oletusarvot">
<!ENTITY zotero.preferences.charset "Merkistökoodaus"> <!ENTITY zotero.preferences.charset "Merkistökoodaus">
@ -183,11 +183,11 @@
<!ENTITY zotero.preferences.dataDir.choose "Valitse..."> <!ENTITY zotero.preferences.dataDir.choose "Valitse...">
<!ENTITY zotero.preferences.dataDir.reveal "Näytä datahakemisto"> <!ENTITY zotero.preferences.dataDir.reveal "Näytä datahakemisto">
<!ENTITY zotero.preferences.attachmentBaseDir.caption "Linked Attachment Base Directory"> <!ENTITY zotero.preferences.attachmentBaseDir.caption "Linkattujen liitteiden juurikansio">
<!ENTITY zotero.preferences.attachmentBaseDir.message "Zotero will use relative paths for linked file attachments within the base directory, allowing you to access files on different computers as long as the file structure within the base directory remains the same."> <!ENTITY zotero.preferences.attachmentBaseDir.message "Zotero käyttää suhteellisia polkuja viitatakseen tiedostoliitteisiin juurikansiossa, joten voit käyttää tiedostoja eri tietokoneilla, kunhan tiedostorakenne juurikansion sisällä pysyy samana.">
<!ENTITY zotero.preferences.attachmentBaseDir.basePath "Base directory:"> <!ENTITY zotero.preferences.attachmentBaseDir.basePath "Juurikansio:">
<!ENTITY zotero.preferences.attachmentBaseDir.selectBasePath "Choose…"> <!ENTITY zotero.preferences.attachmentBaseDir.selectBasePath "Valitse...">
<!ENTITY zotero.preferences.attachmentBaseDir.resetBasePath "Revert to Absolute Paths…"> <!ENTITY zotero.preferences.attachmentBaseDir.resetBasePath "Palauta absoluuttiset polut...">
<!ENTITY zotero.preferences.dbMaintenance "Tietokannan huolto"> <!ENTITY zotero.preferences.dbMaintenance "Tietokannan huolto">
<!ENTITY zotero.preferences.dbMaintenance.integrityCheck "Tarkista tietokannan eheys"> <!ENTITY zotero.preferences.dbMaintenance.integrityCheck "Tarkista tietokannan eheys">
@ -206,4 +206,4 @@
<!ENTITY zotero.preferences.openAboutConfig "Avaa about:config"> <!ENTITY zotero.preferences.openAboutConfig "Avaa about:config">
<!ENTITY zotero.preferences.openCSLEdit "Avaa CSL-muokkain"> <!ENTITY zotero.preferences.openCSLEdit "Avaa CSL-muokkain">
<!ENTITY zotero.preferences.openCSLPreview "Avaa CSL-esikatselu"> <!ENTITY zotero.preferences.openCSLPreview "Avaa CSL-esikatselu">
<!ENTITY zotero.preferences.openAboutMemory "Open about:memory"> <!ENTITY zotero.preferences.openAboutMemory "Avaa about:memory">

View File

@ -1,6 +1,6 @@
<!ENTITY zotero.search.name "Nimi:"> <!ENTITY zotero.search.name "Nimi:">
<!ENTITY zotero.search.searchInLibrary "Search in library:"> <!ENTITY zotero.search.searchInLibrary "Etsi kirjastosta:">
<!ENTITY zotero.search.joinMode.prefix "Vertaa"> <!ENTITY zotero.search.joinMode.prefix "Vertaa">
<!ENTITY zotero.search.joinMode.any "joku"> <!ENTITY zotero.search.joinMode.any "joku">
@ -14,7 +14,7 @@
<!ENTITY zotero.search.textModes.phrase "Lause"> <!ENTITY zotero.search.textModes.phrase "Lause">
<!ENTITY zotero.search.textModes.phraseBinary "Lause (sis. binääritiedostot)"> <!ENTITY zotero.search.textModes.phraseBinary "Lause (sis. binääritiedostot)">
<!ENTITY zotero.search.textModes.regexp "Säännöllinen lauseke"> <!ENTITY zotero.search.textModes.regexp "Säännöllinen lauseke">
<!ENTITY zotero.search.textModes.regexpCS "Säännöllinen lauseke (kirjaintaso)"> <!ENTITY zotero.search.textModes.regexpCS "Säännöllinen lauseke (merkkikokoriippuvainen)">
<!ENTITY zotero.search.date.units.days "päivää"> <!ENTITY zotero.search.date.units.days "päivää">
<!ENTITY zotero.search.date.units.months "kuukautta"> <!ENTITY zotero.search.date.units.months "kuukautta">

View File

@ -3,9 +3,9 @@ general.filter=Suodata:
general.highlight=Korosta: general.highlight=Korosta:
general.clearAll=Tyhjennä kaikki general.clearAll=Tyhjennä kaikki
general.jumpToYear=Hyppää vuoteen: general.jumpToYear=Hyppää vuoteen:
general.firstBand=Nauha yksi: general.firstBand=Ensimmäinen kaista:
general.secondBand=Nauha kaksi: general.secondBand=Toinen kaista:
general.thirdBand=Nauha kolme: general.thirdBand=Kolmas kaista:
general.dateType=Päiväysmuoto: general.dateType=Päiväysmuoto:
general.timelineHeight=Aikajanan korkeus general.timelineHeight=Aikajanan korkeus
general.fitToScreen=Sovita näytölle general.fitToScreen=Sovita näytölle

View File

@ -8,12 +8,12 @@
<!ENTITY zotero.general.cancel "Peruuta"> <!ENTITY zotero.general.cancel "Peruuta">
<!ENTITY zotero.errorReport.title "Zoteron virheraportti"> <!ENTITY zotero.errorReport.title "Zoteron virheraportti">
<!ENTITY zotero.errorReport.unrelatedMessages "This may include messages unrelated to Zotero."> <!ENTITY zotero.errorReport.unrelatedMessages "Mukana saattaa olla Zoteroon liittymättömiä viestejä.">
<!ENTITY zotero.errorReport.submissionInProgress "Odota"> <!ENTITY zotero.errorReport.submissionInProgress "Odota, kunnes virheraportti on toimitettu.">
<!ENTITY zotero.errorReport.submitted "Virheraporttisi on toimitettu."> <!ENTITY zotero.errorReport.submitted "Virheraporttisi on toimitettu.">
<!ENTITY zotero.errorReport.reportID "Raportin tunnus:"> <!ENTITY zotero.errorReport.reportID "Raportin tunnus:">
<!ENTITY zotero.errorReport.postToForums "Lähetä Zoteron keskustelualueelle (forums.zotero.org) viesti, joka sisältää raportin tunnuksen, ongelman kuvauksen sekä toimenpiteet, joilla virhe saadaan toistettua."> <!ENTITY zotero.errorReport.postToForums "Lähetä Zoteron keskustelualueelle (forums.zotero.org) viesti, joka sisältää raportin tunnuksen, ongelman kuvauksen sekä toimenpiteet, joilla virhe saadaan toistettua.">
<!ENTITY zotero.errorReport.notReviewed "Error reports are generally not reviewed unless referred to in the forums."> <!ENTITY zotero.errorReport.notReviewed "Virheraportteja ei yleensä käsitellä, jos niihin ei ole viitattu keskustelualueella.">
<!ENTITY zotero.upgrade.title "Zoteron päivitysvelho"> <!ENTITY zotero.upgrade.title "Zoteron päivitysvelho">
<!ENTITY zotero.upgrade.newVersionInstalled "Olet asentanut Zoteron uuden version."> <!ENTITY zotero.upgrade.newVersionInstalled "Olet asentanut Zoteron uuden version.">
@ -26,7 +26,7 @@
<!ENTITY zotero.upgrade.upgradeInProgress "Odota päivitysprosessin päättymistä. Tämä saattaa kestää muutamia minuutteja."> <!ENTITY zotero.upgrade.upgradeInProgress "Odota päivitysprosessin päättymistä. Tämä saattaa kestää muutamia minuutteja.">
<!ENTITY zotero.upgrade.upgradeSucceeded "Zotero-tietokantasi on onnistuneesti päivitetty."> <!ENTITY zotero.upgrade.upgradeSucceeded "Zotero-tietokantasi on onnistuneesti päivitetty.">
<!ENTITY zotero.upgrade.changeLogBeforeLink "Katso"> <!ENTITY zotero.upgrade.changeLogBeforeLink "Katso">
<!ENTITY zotero.upgrade.changeLogLink "muutoslogi"> <!ENTITY zotero.upgrade.changeLogLink "muutosloki">
<!ENTITY zotero.upgrade.changeLogAfterLink "tutustuaksesi uusiin ominaisuuksiin ja päivityksiin."> <!ENTITY zotero.upgrade.changeLogAfterLink "tutustuaksesi uusiin ominaisuuksiin ja päivityksiin.">
<!ENTITY zotero.contextMenu.addTextToCurrentNote "Lisää valinta Zotero-muistiinpanoon"> <!ENTITY zotero.contextMenu.addTextToCurrentNote "Lisää valinta Zotero-muistiinpanoon">
@ -37,7 +37,7 @@
<!ENTITY zotero.tabs.info.label "Tiedot"> <!ENTITY zotero.tabs.info.label "Tiedot">
<!ENTITY zotero.tabs.notes.label "Muistiinpanot"> <!ENTITY zotero.tabs.notes.label "Muistiinpanot">
<!ENTITY zotero.tabs.attachments.label "Liitteet"> <!ENTITY zotero.tabs.attachments.label "Liitteet">
<!ENTITY zotero.tabs.tags.label "Merkit"> <!ENTITY zotero.tabs.tags.label "Avainsanat">
<!ENTITY zotero.tabs.related.label "Liittyvät"> <!ENTITY zotero.tabs.related.label "Liittyvät">
<!ENTITY zotero.notes.separate "Muokkaa erillisessä ikkunassa"> <!ENTITY zotero.notes.separate "Muokkaa erillisessä ikkunassa">
@ -45,7 +45,7 @@
<!ENTITY zotero.collections.showUnfiledItems "Näytä arkistoimattomat nimikkeet"> <!ENTITY zotero.collections.showUnfiledItems "Näytä arkistoimattomat nimikkeet">
<!ENTITY zotero.items.itemType "Nimikkeen tyyppi"> <!ENTITY zotero.items.itemType "Nimikkeen tyyppi">
<!ENTITY zotero.items.type_column "Item Type"> <!ENTITY zotero.items.type_column "Nimikkeen tyyppi">
<!ENTITY zotero.items.title_column "Otsikko"> <!ENTITY zotero.items.title_column "Otsikko">
<!ENTITY zotero.items.creator_column "Luoja"> <!ENTITY zotero.items.creator_column "Luoja">
<!ENTITY zotero.items.date_column "Päiväys"> <!ENTITY zotero.items.date_column "Päiväys">
@ -66,7 +66,7 @@
<!ENTITY zotero.items.place_column "Paikka"> <!ENTITY zotero.items.place_column "Paikka">
<!ENTITY zotero.items.volume_column "Vuosikerta"> <!ENTITY zotero.items.volume_column "Vuosikerta">
<!ENTITY zotero.items.edition_column "Painos"> <!ENTITY zotero.items.edition_column "Painos">
<!ENTITY zotero.items.pages_column "Sivuja"> <!ENTITY zotero.items.pages_column "Sivut">
<!ENTITY zotero.items.issue_column "Numero"> <!ENTITY zotero.items.issue_column "Numero">
<!ENTITY zotero.items.series_column "Sarja"> <!ENTITY zotero.items.series_column "Sarja">
<!ENTITY zotero.items.seriesTitle_column "Sarjan nimi"> <!ENTITY zotero.items.seriesTitle_column "Sarjan nimi">
@ -97,20 +97,20 @@
<!ENTITY zotero.toolbar.moreItemTypes.label "Lisää"> <!ENTITY zotero.toolbar.moreItemTypes.label "Lisää">
<!ENTITY zotero.toolbar.newItemFromPage.label "Uusi nimike nykyisestä sivusta"> <!ENTITY zotero.toolbar.newItemFromPage.label "Uusi nimike nykyisestä sivusta">
<!ENTITY zotero.toolbar.lookup.label "Uusi nimike tunnisteen perusteella"> <!ENTITY zotero.toolbar.lookup.label "Uusi nimike tunnisteen perusteella">
<!ENTITY zotero.toolbar.removeItem.label "Remove Item..."> <!ENTITY zotero.toolbar.removeItem.label "Poista nimike...">
<!ENTITY zotero.toolbar.newCollection.label "New Collection..."> <!ENTITY zotero.toolbar.newCollection.label "Uusi kokoelma...">
<!ENTITY zotero.toolbar.newGroup "New Group..."> <!ENTITY zotero.toolbar.newGroup "Uusi ryhmä...">
<!ENTITY zotero.toolbar.newSubcollection.label "New Subcollection..."> <!ENTITY zotero.toolbar.newSubcollection.label "Uusi alakokoelma...">
<!ENTITY zotero.toolbar.newSavedSearch.label "New Saved Search..."> <!ENTITY zotero.toolbar.newSavedSearch.label "Uusi tallennettu haku...">
<!ENTITY zotero.toolbar.emptyTrash.label "Tyhjennä roskakori"> <!ENTITY zotero.toolbar.emptyTrash.label "Tyhjennä roskakori">
<!ENTITY zotero.toolbar.tagSelector.label "Näytä/piilota merkkivalitsin"> <!ENTITY zotero.toolbar.tagSelector.label "Näytä/piilota merkkivalitsin">
<!ENTITY zotero.toolbar.actions.label "Toiminnot"> <!ENTITY zotero.toolbar.actions.label "Toiminnot">
<!ENTITY zotero.toolbar.import.label "Import..."> <!ENTITY zotero.toolbar.import.label "Tuo...">
<!ENTITY zotero.toolbar.importFromClipboard "Tuo leikepöydältä"> <!ENTITY zotero.toolbar.importFromClipboard "Tuo leikepöydältä">
<!ENTITY zotero.toolbar.export.label "Export Library..."> <!ENTITY zotero.toolbar.export.label "Vie kirjasto...">
<!ENTITY zotero.toolbar.rtfScan.label "RTF Scan..."> <!ENTITY zotero.toolbar.rtfScan.label "RTF-skannaus...">
<!ENTITY zotero.toolbar.timeline.label "Luo aikajana"> <!ENTITY zotero.toolbar.timeline.label "Luo aikajana">
<!ENTITY zotero.toolbar.preferences.label "Preferences..."> <!ENTITY zotero.toolbar.preferences.label "Asetukset...">
<!ENTITY zotero.toolbar.supportAndDocumentation "Ohjeet ja tuki"> <!ENTITY zotero.toolbar.supportAndDocumentation "Ohjeet ja tuki">
<!ENTITY zotero.toolbar.about.label "Tietoja Zoterosta"> <!ENTITY zotero.toolbar.about.label "Tietoja Zoterosta">
<!ENTITY zotero.toolbar.advancedSearch "Tarkennettu haku"> <!ENTITY zotero.toolbar.advancedSearch "Tarkennettu haku">
@ -128,22 +128,22 @@
<!ENTITY zotero.toolbar.newNote "Uusi muistiinpano"> <!ENTITY zotero.toolbar.newNote "Uusi muistiinpano">
<!ENTITY zotero.toolbar.note.standalone "Uusi itsenäinen muistiinpano"> <!ENTITY zotero.toolbar.note.standalone "Uusi itsenäinen muistiinpano">
<!ENTITY zotero.toolbar.note.child "Uusi alamuistiinpano"> <!ENTITY zotero.toolbar.note.child "Uusi alamuistiinpano">
<!ENTITY zotero.toolbar.lookup "Lookup by Identifier..."> <!ENTITY zotero.toolbar.lookup "Etsi tunnisteen perusteella...">
<!ENTITY zotero.toolbar.attachment.linked "Link to File..."> <!ENTITY zotero.toolbar.attachment.linked "Linkitä tiedostoon...">
<!ENTITY zotero.toolbar.attachment.add "Store Copy of File..."> <!ENTITY zotero.toolbar.attachment.add "Tallenna tiedoston kopio...">
<!ENTITY zotero.toolbar.attachment.weblink "Tallenna linkki nykyiselle sivulle"> <!ENTITY zotero.toolbar.attachment.weblink "Tallenna linkki nykyiselle sivulle">
<!ENTITY zotero.toolbar.attachment.snapshot "Ota tilannekuva nykyisestä sivusta"> <!ENTITY zotero.toolbar.attachment.snapshot "Ota tilannekuva nykyisestä sivusta">
<!ENTITY zotero.tagSelector.noTagsToDisplay "Ei merkkejä"> <!ENTITY zotero.tagSelector.noTagsToDisplay "Ei näytettäviä avainsanoja">
<!ENTITY zotero.tagSelector.filter "Suodatin:"> <!ENTITY zotero.tagSelector.filter "Suodatin:">
<!ENTITY zotero.tagSelector.showAutomatic "Show automatic"> <!ENTITY zotero.tagSelector.showAutomatic "Show automatic">
<!ENTITY zotero.tagSelector.displayAllInLibrary "Display all tags in this library"> <!ENTITY zotero.tagSelector.displayAllInLibrary "Näytä tämän kirjaston kaikki avainsanat">
<!ENTITY zotero.tagSelector.selectVisible "Select visible"> <!ENTITY zotero.tagSelector.selectVisible "Valitse näkyvät">
<!ENTITY zotero.tagSelector.clearVisible "Deselect visible"> <!ENTITY zotero.tagSelector.clearVisible "Poista näkyvät valinnat">
<!ENTITY zotero.tagSelector.clearAll "Deselect all"> <!ENTITY zotero.tagSelector.clearAll "Poista kaikki valinnat">
<!ENTITY zotero.tagSelector.assignColor "Aseta väri"> <!ENTITY zotero.tagSelector.assignColor "Aseta väri">
<!ENTITY zotero.tagSelector.renameTag "Rename Tag..."> <!ENTITY zotero.tagSelector.renameTag "Nimeä avainsana uudelleen...">
<!ENTITY zotero.tagSelector.deleteTag "Delete Tag..."> <!ENTITY zotero.tagSelector.deleteTag "Poista avainsana...">
<!ENTITY zotero.tagColorChooser.title "Valitse avainsanan väri ja sijainti"> <!ENTITY zotero.tagColorChooser.title "Valitse avainsanan väri ja sijainti">
<!ENTITY zotero.tagColorChooser.color "Väri:"> <!ENTITY zotero.tagColorChooser.color "Väri:">
@ -176,7 +176,7 @@
<!ENTITY zotero.progress.title "Eteneminen"> <!ENTITY zotero.progress.title "Eteneminen">
<!ENTITY zotero.exportOptions.title "Export..."> <!ENTITY zotero.exportOptions.title "Vie...">
<!ENTITY zotero.exportOptions.format.label "Muoto:"> <!ENTITY zotero.exportOptions.format.label "Muoto:">
<!ENTITY zotero.exportOptions.translatorOptions.label "Kääntäjän asetukset"> <!ENTITY zotero.exportOptions.translatorOptions.label "Kääntäjän asetukset">
@ -211,7 +211,7 @@
<!ENTITY zotero.integration.prefs.formatUsing.label "Muotoile käyttäen:"> <!ENTITY zotero.integration.prefs.formatUsing.label "Muotoile käyttäen:">
<!ENTITY zotero.integration.prefs.bookmarks.label "Kirjanmerkit"> <!ENTITY zotero.integration.prefs.bookmarks.label "Kirjanmerkit">
<!ENTITY zotero.integration.prefs.bookmarks.caption "Bookmarks are preserved across Microsoft Word and OpenOffice, but may be accidentally modified."> <!ENTITY zotero.integration.prefs.bookmarks.caption "Kirjanmerkit säilytetään Microsoft Wordin ja OpenOfficen välillä, mutta ne voivat tahattomasti muuttua.">
<!ENTITY zotero.integration.prefs.automaticJournalAbbeviations.label "Lyhennä lehtien nimet automaattisesti"> <!ENTITY zotero.integration.prefs.automaticJournalAbbeviations.label "Lyhennä lehtien nimet automaattisesti">
@ -251,7 +251,7 @@
<!ENTITY zotero.proxy.recognized.disable.label "Älä automaattisesti uudelleenohjaa pyyntöjä aiemmin tunnistettujen välitystyspalvelinten kautta"> <!ENTITY zotero.proxy.recognized.disable.label "Älä automaattisesti uudelleenohjaa pyyntöjä aiemmin tunnistettujen välitystyspalvelinten kautta">
<!ENTITY zotero.proxy.recognized.ignore.label "Ohita"> <!ENTITY zotero.proxy.recognized.ignore.label "Ohita">
<!ENTITY zotero.recognizePDF.recognizing.label "Retrieving Metadata..."> <!ENTITY zotero.recognizePDF.recognizing.label "Haetaan metatietoja...">
<!ENTITY zotero.recognizePDF.cancel.label "Peruuta"> <!ENTITY zotero.recognizePDF.cancel.label "Peruuta">
<!ENTITY zotero.recognizePDF.pdfName.label "PDF:n nimi"> <!ENTITY zotero.recognizePDF.pdfName.label "PDF:n nimi">
<!ENTITY zotero.recognizePDF.itemName.label "Nimikkeen nimi"> <!ENTITY zotero.recognizePDF.itemName.label "Nimikkeen nimi">
@ -264,7 +264,7 @@
<!ENTITY zotero.rtfScan.ambiguousCitations.label "Monimerkityksiset sitaatit"> <!ENTITY zotero.rtfScan.ambiguousCitations.label "Monimerkityksiset sitaatit">
<!ENTITY zotero.rtfScan.mappedCitations.label "Paikannetut sitaatit"> <!ENTITY zotero.rtfScan.mappedCitations.label "Paikannetut sitaatit">
<!ENTITY zotero.rtfScan.introPage.label "Johdanto"> <!ENTITY zotero.rtfScan.introPage.label "Johdanto">
<!ENTITY zotero.rtfScan.introPage.description "Zotero can automatically extract and reformat citations and insert a bibliography into RTF files. To get started, choose an RTF file below."> <!ENTITY zotero.rtfScan.introPage.description "Zotero voi automaattisesti seuloa ja uudelleenmuotoilla viittaukset ja lisätä kirjallisuusluettelon RTF-tiedostoon. Valitse aluksi RTF-tiedosto.">
<!ENTITY zotero.rtfScan.introPage.description2 "Valitse aluksi luettava RTF-tiedosto sekä kirjoitettava tiedosto:"> <!ENTITY zotero.rtfScan.introPage.description2 "Valitse aluksi luettava RTF-tiedosto sekä kirjoitettava tiedosto:">
<!ENTITY zotero.rtfScan.scanPage.label "Etsitään sitaatteja"> <!ENTITY zotero.rtfScan.scanPage.label "Etsitään sitaatteja">
<!ENTITY zotero.rtfScan.scanPage.description "Zotero etsii asiakirjasta sitaatteja. Malta vielä hetki."> <!ENTITY zotero.rtfScan.scanPage.description "Zotero etsii asiakirjasta sitaatteja. Malta vielä hetki.">
@ -278,9 +278,15 @@
<!ENTITY zotero.rtfScan.inputFile.label "Luettava tiedosto"> <!ENTITY zotero.rtfScan.inputFile.label "Luettava tiedosto">
<!ENTITY zotero.rtfScan.outputFile.label "Kirjoitettava tiedosto"> <!ENTITY zotero.rtfScan.outputFile.label "Kirjoitettava tiedosto">
<!ENTITY zotero.file.choose.label "Choose File..."> <!ENTITY zotero.file.choose.label "Valitse tiedosto...">
<!ENTITY zotero.file.noneSelected.label "Tiedostoa ei ole valittu"> <!ENTITY zotero.file.noneSelected.label "Tiedostoa ei ole valittu">
<!ENTITY zotero.downloadManager.label "Tallenna Zoteroon"> <!ENTITY zotero.downloadManager.label "Tallenna Zoteroon">
<!ENTITY zotero.downloadManager.saveToLibrary.description "Liitteitä ei voi tallentaa valittuun kirjastoon. Nimike sen sijaan tallennetaan kirjastoon."> <!ENTITY zotero.downloadManager.saveToLibrary.description "Liitteitä ei voi tallentaa valittuun kirjastoon. Nimike sen sijaan tallennetaan kirjastoon.">
<!ENTITY zotero.downloadManager.noPDFTools.description "Käyttääksesi tätä ominaisuutta tulee sinun ensin asentaa PDF-työkalut Zoteron asetuksista."> <!ENTITY zotero.downloadManager.noPDFTools.description "Käyttääksesi tätä ominaisuutta tulee sinun ensin asentaa PDF-työkalut Zoteron asetuksista.">
<!ENTITY zotero.attachLink.title "Attach Link to URI">
<!ENTITY zotero.attachLink.label.link "Link:">
<!ENTITY zotero.attachLink.label.title "Title:">

View File

@ -33,7 +33,7 @@ general.notNow=Ei nyt
general.passed=Onnistui general.passed=Onnistui
general.failed=Epäonnistui general.failed=Epäonnistui
general.and=ja general.and=ja
general.etAl=et al. general.etAl=ym.
general.accessDenied=Pääsy evätty general.accessDenied=Pääsy evätty
general.permissionDenied=Ei riittäviä oikeuksia general.permissionDenied=Ei riittäviä oikeuksia
general.character.singular=kirjain general.character.singular=kirjain
@ -45,15 +45,15 @@ general.seeForMoreInformation=Katso %S, jos haluat tietää lisää.
general.enable=Laita päälle general.enable=Laita päälle
general.disable=Ota pois päältä general.disable=Ota pois päältä
general.remove=Poista general.remove=Poista
general.reset=Reset general.reset=Nollaa
general.hide=Kätke general.hide=Kätke
general.quit=Lopeta general.quit=Lopeta
general.useDefault=Käytä oletusarvoa general.useDefault=Käytä oletusarvoa
general.openDocumentation=Avaa käyttöohje general.openDocumentation=Avaa käyttöohje
general.numMore=%S more… general.numMore=%S lisää...
general.openPreferences=Avaa asetukset general.openPreferences=Avaa asetukset
general.keys.ctrlShift=Ctrl+Shift+ general.keys.ctrlShift=Ctrl+Shift+
general.keys.cmdShift=Cmd+Shift+ general.keys.cmdShift=Cmd+Shift
general.operationInProgress=Zoteron toimenpide on käynnissä. general.operationInProgress=Zoteron toimenpide on käynnissä.
general.operationInProgress.waitUntilFinished=Odota, kunnes se valmis. general.operationInProgress.waitUntilFinished=Odota, kunnes se valmis.
@ -62,7 +62,7 @@ general.operationInProgress.waitUntilFinishedAndTryAgain=Odota, kunnes se on val
punctuation.openingQMark=" punctuation.openingQMark="
punctuation.closingQMark=" punctuation.closingQMark="
punctuation.colon=: punctuation.colon=:
punctuation.ellipsis= punctuation.ellipsis=...
install.quickStartGuide=Quick Start Guide install.quickStartGuide=Quick Start Guide
install.quickStartGuide.message.welcome=Tervetuloa Zoteroon! install.quickStartGuide.message.welcome=Tervetuloa Zoteroon!
@ -81,28 +81,28 @@ upgrade.couldNotMigrate.restart=Jos saat toistuvasti tämän viestin, käynnist
errorReport.reportError=Report Error... errorReport.reportError=Report Error...
errorReport.reportErrors=Kerro virheestä... errorReport.reportErrors=Kerro virheestä...
errorReport.reportInstructions=Voit raportoida tämän virheen valitsemalla "%S" Toimintovalikosta (hammasratas). errorReport.reportInstructions=Voit raportoida tämän virheen valitsemalla "%S" Toimintovalikosta (hammasratas).
errorReport.followingReportWillBeSubmitted=The following report will be submitted: errorReport.followingReportWillBeSubmitted=Seuraavanlainen raportti toimitetaan eteenpäin:
errorReport.noErrorsLogged=No errors have been logged since %S started. errorReport.noErrorsLogged=Virheitä ei ole kirjattu lokiin %S:n käynnistämisen jälkeen.
errorReport.advanceMessage=Paina %S lähettääksesi raportin Zoteron kehittäjille. errorReport.advanceMessage=Paina %S lähettääksesi raportin Zoteron kehittäjille.
errorReport.stepsToReproduce=Virheen saa aikaan tekemällä näin: errorReport.stepsToReproduce=Virheen saa aikaan tekemällä näin:
errorReport.expectedResult=Odottamani lopputulos: errorReport.expectedResult=Odottamani lopputulos:
errorReport.actualResult=Todellinen lopputulos: errorReport.actualResult=Todellinen lopputulos:
errorReport.noNetworkConnection=Ei verkkoyhteyttä errorReport.noNetworkConnection=Ei verkkoyhteyttä
errorReport.invalidResponseRepository=Invalid response from repository errorReport.invalidResponseRepository=Virheellinen vastaus tyylivalikoimasta
errorReport.repoCannotBeContacted=Repository cannot be contacted errorReport.repoCannotBeContacted=Tyylivalikoimaan ei saada yhteyttä
attachmentBasePath.selectDir=Choose Base Directory attachmentBasePath.selectDir=Valitse juurihakemisto
attachmentBasePath.chooseNewPath.title=Confirm New Base Directory attachmentBasePath.chooseNewPath.title=Vahvista uusi juurihakemisto
attachmentBasePath.chooseNewPath.message=Linked file attachments below this directory will be saved using relative paths. attachmentBasePath.chooseNewPath.message=Linkatut tiedostoliitteet tämän hakemiston sisällä tallennetaan käyttäen suhteellisia polkuja.
attachmentBasePath.chooseNewPath.existingAttachments.singular=One existing attachment was found within the new base directory. attachmentBasePath.chooseNewPath.existingAttachments.singular=Yksi olemassaoleva liite löytyi juurikansion alta.
attachmentBasePath.chooseNewPath.existingAttachments.plural=%S existing attachments were found within the new base directory. attachmentBasePath.chooseNewPath.existingAttachments.plural=%S olemassaolevaa liitettä löytyi juurikansion alta.
attachmentBasePath.chooseNewPath.button=Change Base Directory Setting attachmentBasePath.chooseNewPath.button=Muuta juurihakemiston asetuksia
attachmentBasePath.clearBasePath.title=Revert to Absolute Paths attachmentBasePath.clearBasePath.title=Palauta absoluuttiset polut
attachmentBasePath.clearBasePath.message=New linked file attachments will be saved using absolute paths. attachmentBasePath.clearBasePath.message=Uudet tiedostoliitteet tallennetaan absoluuttisia polkuja käyttäen.
attachmentBasePath.clearBasePath.existingAttachments.singular=One existing attachment within the old base directory will be converted to use an absolute path. attachmentBasePath.clearBasePath.existingAttachments.singular=Yksi olemassaoleva liite vanhassa juurikansiossa muunnetaan käyttämään absoluuttista polkua.
attachmentBasePath.clearBasePath.existingAttachments.plural=%S existing attachments within the old base directory will be converted to use absolute paths. attachmentBasePath.clearBasePath.existingAttachments.plural=%S olemassaolevaa liitettä vanhassa juurikansiossa muutetaan käyttämään absoluuttisia polkuja.
attachmentBasePath.clearBasePath.button=Clear Base Directory Setting attachmentBasePath.clearBasePath.button=Nollaa juurikansioasetus
dataDir.notFound=Zoteron datakansiota ei löytynyt. dataDir.notFound=Zoteron datakansiota ei löytynyt.
dataDir.previousDir=Edellinen kansio: dataDir.previousDir=Edellinen kansio:
@ -110,12 +110,12 @@ dataDir.useProfileDir=Käytä Firefoxin profiilikansiota
dataDir.selectDir=Valitse kansio Zoteron datalle dataDir.selectDir=Valitse kansio Zoteron datalle
dataDir.selectedDirNonEmpty.title=Kansio ei ole tyhjä dataDir.selectedDirNonEmpty.title=Kansio ei ole tyhjä
dataDir.selectedDirNonEmpty.text=Valitsemasi kansio ei ole tyhjä eikä ilmeisesti Zoteron datakansio.\n\nLuodaanko Zoteron tiedot tähän kansioon siitä huolimatta? dataDir.selectedDirNonEmpty.text=Valitsemasi kansio ei ole tyhjä eikä ilmeisesti Zoteron datakansio.\n\nLuodaanko Zoteron tiedot tähän kansioon siitä huolimatta?
dataDir.selectedDirEmpty.title=Directory Empty dataDir.selectedDirEmpty.title=Hakemisto on tyhjä
dataDir.selectedDirEmpty.text=The directory you selected is empty. To move an existing Zotero data directory, you will need to manually move files from the existing data directory to the new location after %1$S has closed. dataDir.selectedDirEmpty.text=Valitsemasi hakemisto on tyhjä. Siirtääksesi olemassaoleva Zoteron datahakemiston sinun pitää käsin siirtää tiedostot olemassaolevasta datahakemistosta uuteen sijaintiin, kunhan %1$S on sulkeutunut.
dataDir.selectedDirEmpty.useNewDir=Käytetäänkö uutta hakemistoa? dataDir.selectedDirEmpty.useNewDir=Käytetäänkö uutta hakemistoa?
dataDir.moveFilesToNewLocation=Be sure to move files from your existing Zotero data directory to the new location before reopening %1$S. dataDir.moveFilesToNewLocation=Siirräthän tiedostot nykyisestä Zoteron datakansiosta uuteen sijaintiin ennen kuin avaat %1$S:n uudelleen.
dataDir.incompatibleDbVersion.title=Incompatible Database Version dataDir.incompatibleDbVersion.title=Yhteensopimaton tietokantaversio
dataDir.incompatibleDbVersion.text=The currently selected data directory is not compatible with Zotero Standalone, which can share a database only with Zotero for Firefox 2.1b3 or later.\n\nUpgrade to the latest version of Zotero for Firefox first or select a different data directory for use with Zotero Standalone. dataDir.incompatibleDbVersion.text=Valittu datahakemisto ei ole yhteensopiva Zotero Standalonen kanssa. Zotero Standalone voi jakaa tieokannan Zotero for Firefoxin version 2.1b3 tai uudemman kanssa.\n\nPäivitä Zotero for Firefox ensin uusimpaan versioon tai valitse toinen datakansio Zoteron Standalonen kanssa käytettäväksi.
dataDir.standaloneMigration.title=Aiempi Zotero-kirjasto löytyi dataDir.standaloneMigration.title=Aiempi Zotero-kirjasto löytyi
dataDir.standaloneMigration.description=Tämä vaikuttaa olevan ensimmäinen %1$S-kertasi. Haluatko, että %1$S tuo asetukset %2$S:sta ja käyttää aiempaa datahakemistoa? dataDir.standaloneMigration.description=Tämä vaikuttaa olevan ensimmäinen %1$S-kertasi. Haluatko, että %1$S tuo asetukset %2$S:sta ja käyttää aiempaa datahakemistoa?
dataDir.standaloneMigration.multipleProfiles=%1$S jakaa datahakemiston viimeisimmän käytetyn profiilin kanssa. dataDir.standaloneMigration.multipleProfiles=%1$S jakaa datahakemiston viimeisimmän käytetyn profiilin kanssa.
@ -148,7 +148,7 @@ date.relative.yearsAgo.multiple=%S vuotta sitten
pane.collections.delete.title=Poista kokoelma pane.collections.delete.title=Poista kokoelma
pane.collections.delete=Haluatko varmasti poistaa valitun kokoelman? pane.collections.delete=Haluatko varmasti poistaa valitun kokoelman?
pane.collections.delete.keepItems=Items within this collection will not be deleted. pane.collections.delete.keepItems=Tässä kokoelmassa olevia nimikkeitä ei poisteta.
pane.collections.deleteWithItems.title=Poista kokoelma ja nimikkeet pane.collections.deleteWithItems.title=Poista kokoelma ja nimikkeet
pane.collections.deleteWithItems=Haluatko varmasti poistaa valitun kokoelman ja siirtää kaikki siihen kuuluvat nimikkeet roskakoriin? pane.collections.deleteWithItems=Haluatko varmasti poistaa valitun kokoelman ja siirtää kaikki siihen kuuluvat nimikkeet roskakoriin?
@ -161,7 +161,7 @@ pane.collections.newSavedSeach=Uusi tallennettu haku
pane.collections.savedSearchName=Anna tälle tallennetulle haulle nimi: pane.collections.savedSearchName=Anna tälle tallennetulle haulle nimi:
pane.collections.rename=Anna kokoelmalle uusi nimi: pane.collections.rename=Anna kokoelmalle uusi nimi:
pane.collections.library=Oma Kirjasto pane.collections.library=Oma Kirjasto
pane.collections.groupLibraries=Group Libraries pane.collections.groupLibraries=Ryhmäkirjastot
pane.collections.trash=Roskakori pane.collections.trash=Roskakori
pane.collections.untitled=Nimetön pane.collections.untitled=Nimetön
pane.collections.unfiled=Lajittelemattomat nimikkeet pane.collections.unfiled=Lajittelemattomat nimikkeet
@ -187,16 +187,16 @@ pane.tagSelector.delete.message=Haluatko varmasti poistaa tämän merkin?\n\nMer
pane.tagSelector.numSelected.none=0 merkkiä valittuna pane.tagSelector.numSelected.none=0 merkkiä valittuna
pane.tagSelector.numSelected.singular=%S merkki valittuna pane.tagSelector.numSelected.singular=%S merkki valittuna
pane.tagSelector.numSelected.plural=%S merkkiä valittuna pane.tagSelector.numSelected.plural=%S merkkiä valittuna
pane.tagSelector.maxColoredTags=Only %S tags in each library can have colors assigned. pane.tagSelector.maxColoredTags=Vain %S avainsanalla kussakin kirjastossa voi olla oma värinsä.
tagColorChooser.numberKeyInstructions=You can add this tag to selected items by pressing the $NUMBER key on the keyboard. tagColorChooser.numberKeyInstructions=Voit lisätä tämän avainsanan valittuihin nimikkeisiin painamalla $NUMBER-näppäintä.
tagColorChooser.maxTags=Up to %S tags in each library can have colors assigned. tagColorChooser.maxTags=Enintään %S avainsanalla kussakin kirjastossa voi olla oma värinsä.
pane.items.loading=Ladataan kohdeluettelo... pane.items.loading=Ladataan kohdeluettelo...
pane.items.columnChooser.moreColumns=Lisää sarakkeita pane.items.columnChooser.moreColumns=Lisää sarakkeita
pane.items.columnChooser.secondarySort=Secondary Sort (%S) pane.items.columnChooser.secondarySort=Toissijainen lajittelu (%S)
pane.items.attach.link.uri.title=Attach Link to URI 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=Enter a URI: pane.items.attach.link.uri.file=To attach a link to a file, please use “%S”.
pane.items.trash.title=Siirrä roskakoriin pane.items.trash.title=Siirrä roskakoriin
pane.items.trash=Haluatko varmasti siirtää valitun nimikkeen roskakoriin? pane.items.trash=Haluatko varmasti siirtää valitun nimikkeen roskakoriin?
pane.items.trash.multiple=Haluatko varmasti siirtää valitut nimikkeet roskakoriin? pane.items.trash.multiple=Haluatko varmasti siirtää valitut nimikkeet roskakoriin?
@ -233,15 +233,15 @@ pane.items.interview.manyParticipants=Haastattelu, tehneet %S ym.
pane.item.selected.zero=Ei valittuja kohteita pane.item.selected.zero=Ei valittuja kohteita
pane.item.selected.multiple=%S kohdetta valittuna pane.item.selected.multiple=%S kohdetta valittuna
pane.item.unselected.zero=No items in this view pane.item.unselected.zero=Tässä näkymässä ei ole yhtään nimikettä
pane.item.unselected.singular=%S item in this view pane.item.unselected.singular=%S nimike tässä näkymässä
pane.item.unselected.plural=%S items in this view pane.item.unselected.plural=%S nimikettä tässä näkymässä
pane.item.duplicates.selectToMerge=Select items to merge pane.item.duplicates.selectToMerge=Valitse yhteenliitettävät nimikkeet
pane.item.duplicates.mergeItems=Merge %S items pane.item.duplicates.mergeItems=Liitä yhteen %S nimikettä
pane.item.duplicates.writeAccessRequired=Library write access is required to merge items. pane.item.duplicates.writeAccessRequired=Nimikkeiden yhteenliittämiseen tarvitaan kirjoitusoikeus kirjastoon.
pane.item.duplicates.onlyTopLevel=Only top-level full items can be merged. pane.item.duplicates.onlyTopLevel=Vain ylätason nimikkeitä voi liittää yhteen.
pane.item.duplicates.onlySameItemType=Merged items must all be of the same item type. pane.item.duplicates.onlySameItemType=Yhteenliitettävien nimikkeiden tulee olla samaa tyyppiä.
pane.item.changeType.title=Vaihda kohteen tyyppi pane.item.changeType.title=Vaihda kohteen tyyppi
pane.item.changeType.text=Haluatko varmasti vaihtaa kohteen tyypin?\n\nSeuraavat kentät menetetään: pane.item.changeType.text=Haluatko varmasti vaihtaa kohteen tyypin?\n\nSeuraavat kentät menetetään:
@ -252,11 +252,11 @@ pane.item.switchFieldMode.one=Käytä vain yhtä kenttää
pane.item.switchFieldMode.two=Käytä kahta kenttää pane.item.switchFieldMode.two=Käytä kahta kenttää
pane.item.creator.moveUp=Siirrä ylös pane.item.creator.moveUp=Siirrä ylös
pane.item.creator.moveDown=Siirrä alas pane.item.creator.moveDown=Siirrä alas
pane.item.notes.untitled=Otsikoimaton muistio pane.item.notes.untitled=Otsikoimaton muistiinpano
pane.item.notes.delete.confirm=Haluatko varmasti poistaa tämän muistion? pane.item.notes.delete.confirm=Haluatko varmasti poistaa tämän muistiinpanon?
pane.item.notes.count.zero=%S muistiota: pane.item.notes.count.zero=%S muistiinpanoa:
pane.item.notes.count.singular=%S muistio: pane.item.notes.count.singular=%S muistiinpano:
pane.item.notes.count.plural=%S muistiota: pane.item.notes.count.plural=%S muistiinpanoa:
pane.item.attachments.rename.title=Uusi otsikko: pane.item.attachments.rename.title=Uusi otsikko:
pane.item.attachments.rename.renameAssociatedFile=Nimeä liitetty tiedosto uudelleen pane.item.attachments.rename.renameAssociatedFile=Nimeä liitetty tiedosto uudelleen
pane.item.attachments.rename.error=Virhe nimettäessä tiedostoa uudelleen. pane.item.attachments.rename.error=Virhe nimettäessä tiedostoa uudelleen.
@ -268,7 +268,7 @@ pane.item.attachments.count.singular=%S liite:
pane.item.attachments.count.plural=%S liitettä: pane.item.attachments.count.plural=%S liitettä:
pane.item.attachments.select=Valitse tiedosto pane.item.attachments.select=Valitse tiedosto
pane.item.attachments.PDF.installTools.title=PDF-työkaluja ei ole asennettu pane.item.attachments.PDF.installTools.title=PDF-työkaluja ei ole asennettu
pane.item.attachments.PDF.installTools.text=To use this feature, you must first install the PDF tools in the Search pane of the Zotero preferences. pane.item.attachments.PDF.installTools.text=Jos haluat käyttää tätä ominaisuutta, asenna ensin PDF-työkalut Zoteron asetusten Haku-välilehdellä.
pane.item.attachments.filename=Tiedostonimi pane.item.attachments.filename=Tiedostonimi
pane.item.noteEditor.clickHere=napsauta tästä pane.item.noteEditor.clickHere=napsauta tästä
pane.item.tags.count.zero=%S merkkiä: pane.item.tags.count.zero=%S merkkiä:
@ -281,9 +281,9 @@ pane.item.related.count.singular=%S liittyvä:
pane.item.related.count.plural=%S liittyvää: pane.item.related.count.plural=%S liittyvää:
pane.item.parentItem=Ylänimike: pane.item.parentItem=Ylänimike:
noteEditor.editNote=Muokkaa muistiota noteEditor.editNote=Muokkaa muistiinpanoa
itemTypes.note=Muistio itemTypes.note=Muistiinpano
itemTypes.attachment=Liite itemTypes.attachment=Liite
itemTypes.book=Kirja itemTypes.book=Kirja
itemTypes.bookSection=Kirjan osa itemTypes.bookSection=Kirjan osa
@ -325,7 +325,7 @@ itemFields.title=Otsake
itemFields.dateAdded=Lisäyspäivä itemFields.dateAdded=Lisäyspäivä
itemFields.dateModified=Muokattu itemFields.dateModified=Muokattu
itemFields.source=Lähde itemFields.source=Lähde
itemFields.notes=Muistio itemFields.notes=Muistiinpanot
itemFields.tags=Merkit itemFields.tags=Merkit
itemFields.attachments=Liitteet itemFields.attachments=Liitteet
itemFields.related=Liittyvät itemFields.related=Liittyvät
@ -339,7 +339,7 @@ itemFields.place=Paikka
itemFields.publisher=Julkaisija itemFields.publisher=Julkaisija
itemFields.pages=Sivuja itemFields.pages=Sivuja
itemFields.ISBN=ISBN itemFields.ISBN=ISBN
itemFields.publicationTitle=Julkaisutiedot itemFields.publicationTitle=Julkaisu
itemFields.ISSN=ISSN itemFields.ISSN=ISSN
itemFields.date=Päiväys itemFields.date=Päiväys
itemFields.section=Osio itemFields.section=Osio
@ -479,11 +479,11 @@ save.error.cannotAddFilesToCollection=Et voi lisätä tiedostoja valittuun kokoe
ingester.saveToZotero=Tallenna Zoteroon ingester.saveToZotero=Tallenna Zoteroon
ingester.saveToZoteroUsing=Tallentaan Zoteroon käyttäen "%S" ingester.saveToZoteroUsing=Tallentaan Zoteroon käyttäen "%S"
ingester.scraping=Saving Item... ingester.scraping=Saving Item...
ingester.scrapingTo=Saving to ingester.scrapingTo=Tallennuskohde:
ingester.scrapeComplete=Nimike tallennettu ingester.scrapeComplete=Nimike tallennettu
ingester.scrapeError=Nimikettä ei voitu tallentaa ingester.scrapeError=Nimikettä ei voitu tallentaa
ingester.scrapeErrorDescription=Nimikkeen tallentamisessa tapahtui virhe. Katso %S, jos haluat tietää lisää. ingester.scrapeErrorDescription=Nimikkeen tallentamisessa tapahtui virhe. Katso %S, jos haluat tietää lisää.
ingester.scrapeErrorDescription.linkText=Troubleshooting Translator Issues ingester.scrapeErrorDescription.linkText=Sivutulkkeihin liittyvien ongelmien selvittäminen
ingester.scrapeErrorDescription.previousError=Tallennusprosessi epäonnistui aiemman Zoteron virheen vuoksi. ingester.scrapeErrorDescription.previousError=Tallennusprosessi epäonnistui aiemman Zoteron virheen vuoksi.
ingester.importReferRISDialog.title=Zotero RIS/Refer-tuonti ingester.importReferRISDialog.title=Zotero RIS/Refer-tuonti
@ -492,7 +492,7 @@ ingester.importReferRISDialog.checkMsg=Salli aina tälle sivustolle
ingester.importFile.title=Tuo tiedosto ingester.importFile.title=Tuo tiedosto
ingester.importFile.text=Haluatko tuoda tiedoston "%S"?\n\nNimikkeet lisätään uuteen kokoelmaan. ingester.importFile.text=Haluatko tuoda tiedoston "%S"?\n\nNimikkeet lisätään uuteen kokoelmaan.
ingester.importFile.intoNewCollection=Import into new collection ingester.importFile.intoNewCollection=Tuo uuteen kokoelmaan
ingester.lookup.performing=Haku suoritetaan... ingester.lookup.performing=Haku suoritetaan...
ingester.lookup.error=Hakua suoritettaessa tapahtui virhe. ingester.lookup.error=Hakua suoritettaessa tapahtui virhe.
@ -521,17 +521,17 @@ zotero.preferences.openurl.resolversFound.zero=%S linkkipalvelinta löytyi
zotero.preferences.openurl.resolversFound.singular=%S linkkipalvelin löytyi zotero.preferences.openurl.resolversFound.singular=%S linkkipalvelin löytyi
zotero.preferences.openurl.resolversFound.plural=%S linkkipalvelinta löytyi zotero.preferences.openurl.resolversFound.plural=%S linkkipalvelinta löytyi
zotero.preferences.sync.purgeStorage.title=Purge Attachment Files on Zotero Servers? zotero.preferences.sync.purgeStorage.title=Siivotaanko liitetiedostot Zoteron palvelimilta?
zotero.preferences.sync.purgeStorage.desc=If you plan to use WebDAV for file syncing and you previously synced attachment files in My Library to the Zotero servers, you can purge those files from the Zotero servers to give you more storage space for groups.\n\nYou can purge files at any time from your account settings on zotero.org. zotero.preferences.sync.purgeStorage.desc=Jos aiot käyttää WebDAV-palvelinta tieodostojen synkronointiin ja olet aiemmin synkronoinut Oman kirjaston liitetiedostot Zoteron palvelimelle, voit siivota ne tiedostot Zoteron palvelimelta, jotta saat enemmän tallennustilaa ryhmille.\n\nVoit siivota tiedostot milloin tahansa tiliin asetuksista zotero.orgissa.
zotero.preferences.sync.purgeStorage.confirmButton=Purge Files Now zotero.preferences.sync.purgeStorage.confirmButton=Siivoa tiedostot nyt
zotero.preferences.sync.purgeStorage.cancelButton=Do Not Purge zotero.preferences.sync.purgeStorage.cancelButton=Älä siivoa tiedostoja
zotero.preferences.sync.reset.userInfoMissing=You must enter a username and password in the %S tab before using the reset options. zotero.preferences.sync.reset.userInfoMissing=Sinun täytyy syöttää käyttäjätunnus ja salasana %S-välilehdellä ennen kuin voit käyttää nollauksen asetuksia.
zotero.preferences.sync.reset.restoreFromServer=All data in this copy of Zotero will be erased and replaced with data belonging to user '%S' on the Zotero server. zotero.preferences.sync.reset.restoreFromServer=Kaikki tiedot tästä Zotero-kopiosta poistetaan ja korvataan käyttäjälle '%S' kuuluvilla tiedoilla Zotero-palvelimella.
zotero.preferences.sync.reset.replaceLocalData=Replace Local Data zotero.preferences.sync.reset.replaceLocalData=Korvaa paikalliset tiedot
zotero.preferences.sync.reset.restartToComplete=Firefox must be restarted to complete the restore process. zotero.preferences.sync.reset.restartToComplete=Firefox pitää käynnistää uudelleen palautusprosessin päättämiseksi.
zotero.preferences.sync.reset.restoreToServer=All data belonging to user '%S' on the Zotero server will be erased and replaced with data from this copy of Zotero.\n\nDepending on the size of your library, there may be a delay before your data is available on the server. zotero.preferences.sync.reset.restoreToServer=Kaikki käyttäjälle '%S' kuuluvat tiedot Zoteron palvelimella poistetaan ja korvataan tämän Zotero-kopion tiedoilla.\n\nKirjaston koosta riippuen saattaa kestää hetki, ennen kuin tiedot ovat käytettävissä palvelimella.
zotero.preferences.sync.reset.replaceServerData=Replace Server Data zotero.preferences.sync.reset.replaceServerData=Korvaa palvelimella olevat tiedot
zotero.preferences.sync.reset.fileSyncHistory=All file sync history will be cleared.\n\nAny local attachment files that do not exist on the storage server will be uploaded on the next sync. zotero.preferences.sync.reset.fileSyncHistory=Koko synkronointihistoria poistetaan.\n\nKaikki paikalliset liitetiedostot, joita ei ole synkronointipalvelimella, lähetetään palvelimelle seuraavan synkronoinnin yhteydessä.
zotero.preferences.search.rebuildIndex=Luo indeksi uudelleen zotero.preferences.search.rebuildIndex=Luo indeksi uudelleen
zotero.preferences.search.rebuildWarning=Haluatko luoda koko indeksin uudelleen? Tämä saattaa kestää hetken.\n\nIndeksoidaksesi vain aiemmin indeksoimattomat nimikkeet käytä toimintoa %S. zotero.preferences.search.rebuildWarning=Haluatko luoda koko indeksin uudelleen? Tämä saattaa kestää hetken.\n\nIndeksoidaksesi vain aiemmin indeksoimattomat nimikkeet käytä toimintoa %S.
@ -559,7 +559,7 @@ zotero.preferences.search.pdf.tryAgainOrViewManualInstructions=Yritä myöhemmin
zotero.preferences.export.quickCopy.bibStyles=Lähdeluettelotyylit zotero.preferences.export.quickCopy.bibStyles=Lähdeluettelotyylit
zotero.preferences.export.quickCopy.exportFormats=Vientimuodot zotero.preferences.export.quickCopy.exportFormats=Vientimuodot
zotero.preferences.export.quickCopy.instructions=Pikakopioinnilla voit kopioida valitut viitteet leikepöydälle painamalla pikanäppäinyhdistelmää (%S) tai raahaamalla nimikkeet web-sivulla olevaan tekstilaatikkoon. zotero.preferences.export.quickCopy.instructions=Pikakopioinnilla voit kopioida valitut viitteet leikepöydälle painamalla pikanäppäinyhdistelmää (%S) tai raahaamalla nimikkeet web-sivulla olevaan tekstilaatikkoon.
zotero.preferences.export.quickCopy.citationInstructions=For bibliography styles, you can copy citations or footnotes by pressing %S or holding down Shift before dragging items. zotero.preferences.export.quickCopy.citationInstructions=Voit kopioda kirjallisuusviitetyylien mukaisia sitaatteja tai alaviitteitä painamalla %S tai pitämällä Shift-näppäintä pohjassa nimikkeitä raahatessa.
zotero.preferences.styles.addStyle=Lisää tyyli zotero.preferences.styles.addStyle=Lisää tyyli
zotero.preferences.advanced.resetTranslatorsAndStyles=Resetoi sivustotulkit ja tyylit zotero.preferences.advanced.resetTranslatorsAndStyles=Resetoi sivustotulkit ja tyylit
@ -569,9 +569,9 @@ zotero.preferences.advanced.resetTranslators.changesLost=Kaikki uudet tai muokat
zotero.preferences.advanced.resetStyles=Resetoi tyylit zotero.preferences.advanced.resetStyles=Resetoi tyylit
zotero.preferences.advanced.resetStyles.changesLost=Kaikki uudet tai muokatut tyylit menetetään zotero.preferences.advanced.resetStyles.changesLost=Kaikki uudet tai muokatut tyylit menetetään
zotero.preferences.advanced.debug.title=Debug Output Submitted zotero.preferences.advanced.debug.title=Virheenkorjauksen tiedot toimitettu
zotero.preferences.advanced.debug.sent=Debug output has been sent to the Zotero server.\n\nThe Debug ID is D%S. zotero.preferences.advanced.debug.sent=Virheenkorjauksen tiedot on toimitettu Zotero-palvelimelle.\n\nVirheenkorjajuksen tunniste on D%S.
zotero.preferences.advanced.debug.error=An error occurred sending debug output. zotero.preferences.advanced.debug.error=Virhe lähetettäessä virheenkorjauksen tietoja.
dragAndDrop.existingFiles=Seuraavat tiedostot olivat jo valmiiksi kohdehakemistossa, ja niitä ei kopioitu: dragAndDrop.existingFiles=Seuraavat tiedostot olivat jo valmiiksi kohdehakemistossa, ja niitä ei kopioitu:
dragAndDrop.filesNotFound=Seuraavia tiedostoja ei löytynyt eikä niitä voinut kopioida: dragAndDrop.filesNotFound=Seuraavia tiedostoja ei löytynyt eikä niitä voinut kopioida:
@ -582,8 +582,8 @@ fileInterface.import=Tuonti
fileInterface.export=Vienti fileInterface.export=Vienti
fileInterface.exportedItems=Viedyt nimikkeet fileInterface.exportedItems=Viedyt nimikkeet
fileInterface.imported=Tuodut fileInterface.imported=Tuodut
fileInterface.unsupportedFormat=The selected file is not in a supported format. fileInterface.unsupportedFormat=Valitun tiedoston tiedostomuotoa ei tueta
fileInterface.viewSupportedFormats=View Supported Formats… fileInterface.viewSupportedFormats=Näytä tuetut tiedostomuodot...
fileInterface.untitledBibliography=Nimetön lähdeluettelo fileInterface.untitledBibliography=Nimetön lähdeluettelo
fileInterface.bibliographyHTMLTitle=Lähdeluettelo fileInterface.bibliographyHTMLTitle=Lähdeluettelo
fileInterface.importError=Tapahtui virhe yrittäessä tuoda valittua tiedostoa. Varmista, että tiedosto on kunnossa, ja yritä uudelleen. fileInterface.importError=Tapahtui virhe yrittäessä tuoda valittua tiedostoa. Varmista, että tiedosto on kunnossa, ja yritä uudelleen.
@ -592,7 +592,7 @@ fileInterface.noReferencesError=Valitsemissasi nimikkeissä ei ole viitteitä. V
fileInterface.bibliographyGenerationError=Lähdeluetteloa luotaessa tapahtui virhe. Yritä uudelleen. fileInterface.bibliographyGenerationError=Lähdeluetteloa luotaessa tapahtui virhe. Yritä uudelleen.
fileInterface.exportError=Valittua tiedostoa vietäessä tapahtui virhe. fileInterface.exportError=Valittua tiedostoa vietäessä tapahtui virhe.
quickSearch.mode.titleCreatorYear=Title, Creator, Year quickSearch.mode.titleCreatorYear=Otsikko, kirjoittaja, vuosi
quickSearch.mode.fieldsAndTags=Kaikki kentät ja avainsanat quickSearch.mode.fieldsAndTags=Kaikki kentät ja avainsanat
quickSearch.mode.everything=Kaikki quickSearch.mode.everything=Kaikki
@ -643,7 +643,7 @@ fulltext.indexState.partial=Osittain
exportOptions.exportNotes=Vientihuomiot exportOptions.exportNotes=Vientihuomiot
exportOptions.exportFileData=Vientitiedostot exportOptions.exportFileData=Vientitiedostot
exportOptions.useJournalAbbreviation=Use Journal Abbreviation exportOptions.useJournalAbbreviation=Käytä aikakausjulkaisun lyhennettä
charset.UTF8withoutBOM=Unicode (UTF-8 ilman BOM) charset.UTF8withoutBOM=Unicode (UTF-8 ilman BOM)
charset.autoDetect=(automaattitunnistus) charset.autoDetect=(automaattitunnistus)
@ -659,8 +659,8 @@ citation.multipleSources=Multiple Sources...
citation.singleSource=Single Source... citation.singleSource=Single Source...
citation.showEditor=Show Editor... citation.showEditor=Show Editor...
citation.hideEditor=Hide Editor... citation.hideEditor=Hide Editor...
citation.citations=Citations citation.citations=Sitaati
citation.notes=Notes citation.notes=Muistiinpanot
report.title.default=Zotero-raportti report.title.default=Zotero-raportti
report.parentItem=Ylänimike: report.parentItem=Ylänimike:
@ -737,14 +737,14 @@ styles.installStyle=Asennetaanko tyyli "%1$S" lähteestä %2$S?
styles.updateStyle=Päivitetäänkö aiempi tyyli "%1$S" tyylillä "%2$S" lähteestä %3$S? styles.updateStyle=Päivitetäänkö aiempi tyyli "%1$S" tyylillä "%2$S" lähteestä %3$S?
styles.installed=Tyyli "%S" asennettiin onnistuneesti. styles.installed=Tyyli "%S" asennettiin onnistuneesti.
styles.installError=%S ei vaikuta olevan kelvollinen tyylitiedosto. styles.installError=%S ei vaikuta olevan kelvollinen tyylitiedosto.
styles.validationWarning="%S" is not a valid CSL 1.0.1 style file, and may not work properly with Zotero.\n\nAre you sure you want to continue? styles.validationWarning="%S" ei ole kunnollinen CSL 1.0.1-tyylitiedosto, eikä se välttämättä toimi oikein Zoterossa.\n\nHaluatko varmasti jatkaa?
styles.installSourceError=%1$S viittaa epäkelpoon tai olemattoon CSL-tiedostoon %2$S. styles.installSourceError=%1$S viittaa epäkelpoon tai olemattoon CSL-tiedostoon %2$S.
styles.deleteStyle=Haluatko varmasti poistaa tyylin "%1$S"? styles.deleteStyle=Haluatko varmasti poistaa tyylin "%1$S"?
styles.deleteStyles=Haluatko varmasti poistaa valitut tyylit? styles.deleteStyles=Haluatko varmasti poistaa valitut tyylit?
styles.abbreviations.title=Lataa lyhenteet styles.abbreviations.title=Lataa lyhenteet
styles.abbreviations.parseError=The abbreviations file "%1$S" is not valid JSON. styles.abbreviations.parseError=Lyhennetiedosto "%1$S" ei ole toimivassa JSON-muodossa.
styles.abbreviations.missingInfo=The abbreviations file "%1$S" does not specify a complete info block. styles.abbreviations.missingInfo=Lyhennetiedosto "%1$S" ei määrittele täydellistä informaatio-osiota.
sync.sync=Synkronoi sync.sync=Synkronoi
sync.cancel=Peruuta synkronointi sync.cancel=Peruuta synkronointi
@ -756,58 +756,58 @@ sync.remoteObject=Etäobjekti
sync.mergedObject=Yhdistetty objekti sync.mergedObject=Yhdistetty objekti
sync.error.usernameNotSet=Käyttäjänimeä ei määritetty sync.error.usernameNotSet=Käyttäjänimeä ei määritetty
sync.error.usernameNotSet.text=You must enter your zotero.org username and password in the Zotero preferences to sync with the Zotero server. sync.error.usernameNotSet.text=Syötä zotero.orgin käyttäjätunnus ja salasana Zoteron asetuksissa, jotta voit synkronoida tiedot Zotero-palvelimen kanssa.
sync.error.passwordNotSet=Salasanaa ei määritetty sync.error.passwordNotSet=Salasanaa ei määritetty
sync.error.invalidLogin=Virheellinen käyttäjänimi tai salasana sync.error.invalidLogin=Virheellinen käyttäjänimi tai salasana
sync.error.invalidLogin.text=The Zotero sync server did not accept your username and password.\n\nPlease check that you have entered your zotero.org login information correctly in the Zotero sync preferences. sync.error.invalidLogin.text=Zoteron synkronointipalvelin ei hyväksynyt käyttäjätunnustasi ja/tai salasanaasi.\n\nTarkista, että olet antanut käyttäjätiedot oikein Zoteron synkronointiasetuksissa.
sync.error.enterPassword=Anna salasana. sync.error.enterPassword=Anna salasana.
sync.error.loginManagerInaccessible=Zotero ei saanut oikeuksia kirjautumistietoihisi. sync.error.loginManagerInaccessible=Zotero ei saanut oikeuksia kirjautumistietoihisi.
sync.error.checkMasterPassword=If you are using a master password in %S, make sure you have entered it successfully. sync.error.checkMasterPassword=Jos käytät pääsalasanaa $S:ssa, varmista, että se on oikein.
sync.error.corruptedLoginManager=This could also be due to a corrupted %1$S login manager database. To check, close %1$S, remove signons.sqlite from your %1$S profile directory, and re-enter your Zotero login information in the Sync pane of the Zotero preferences. sync.error.corruptedLoginManager=Kyse voi olla myös virheestä %1$S:n kirjautumistietojen tietokannassa. Voit tarkistaa tämän sulkemalla ensin %1$S:n, poistamalla tiedoston signons.sqlite %1$S:n profiilikansiosta ja syöttämällä tämän jälkeen Zoteron kirjautumistiedot uudelleen Zoteron asetusten synkronointivälilehdellä.
sync.error.loginManagerCorrupted1=Zotero cannot access your login information, possibly due to a corrupted %S login manager database. sync.error.loginManagerCorrupted1=Zotero ei voi käyttää kirjautumistietojasi. %S:n kirjautumistietojen tietokanta on mahdollisesti vioittunut.
sync.error.loginManagerCorrupted2=Close %1$S, remove signons.sqlite from your %2$S profile directory, and re-enter your Zotero login information in the Sync pane of the Zotero preferences. sync.error.loginManagerCorrupted2=Sulje %1$S, poista signons.sqlite %2$S:n profiilikansiosta, ja syötä sen jälkeen Zoteron kirjautumistiedot uudelleen Zoteron asetusten Synkronointi-välilehdelä.
sync.error.syncInProgress=Synkronointi on jo käynnissä. sync.error.syncInProgress=Synkronointi on jo käynnissä.
sync.error.syncInProgress.wait=Wait for the previous sync to complete or restart Firefox. sync.error.syncInProgress.wait=Wait for the previous sync to complete or restart Firefox.
sync.error.writeAccessLost=You no longer have write access to the Zotero group '%S', and items you've added or edited cannot be synced to the server. sync.error.writeAccessLost=Sinulla ei enää ole kirjoitusoikeutta Zotero-ryhmään '%S'. Lisäämiäsi tai muokkaamiasi nimikkeitä ei voida synkronoida palvelimelle.
sync.error.groupWillBeReset=Jos jatkat, kopiosi ryhmästä resetoituu siihen tilaan, missä se palvelimella on. Paikalliset muokkaukset nimikkeisiin ja tiedostoihin menetetään. sync.error.groupWillBeReset=Jos jatkat, kopiosi ryhmästä resetoituu siihen tilaan, missä se palvelimella on. Paikalliset muokkaukset nimikkeisiin ja tiedostoihin menetetään.
sync.error.copyChangedItems=Jos haluat mahdollisuuden kopioida tekemäsi muutokset muualle tai pyytää kirjoitusoikeutta ryhmän ylläpitäjältä, peruuta synkronointi nyt. sync.error.copyChangedItems=Jos haluat mahdollisuuden kopioida tekemäsi muutokset muualle tai pyytää kirjoitusoikeutta ryhmän ylläpitäjältä, peruuta synkronointi nyt.
sync.error.manualInterventionRequired=Automaattinen synkronointi johti konfliktiin, joka vaatii manuaalista väliintuloa. sync.error.manualInterventionRequired=Automaattinen synkronointi johti konfliktiin, joka vaatii manuaalista väliintuloa.
sync.error.clickSyncIcon=Paina synkronointikuvaketta aloittaaksesi synkronoinnin manuaalisesti. sync.error.clickSyncIcon=Paina synkronointikuvaketta aloittaaksesi synkronoinnin manuaalisesti.
sync.error.invalidClock=The system clock is set to an invalid time. You will need to correct this to sync with the Zotero server. sync.error.invalidClock=Järjestelmän kellonaika on virheellinen. Sinun täytyy korjata se, että synkronointi toimisi.
sync.error.sslConnectionError=SSL connection error sync.error.sslConnectionError=SSL-yhteyden virhe
sync.error.checkConnection=Error connecting to server. Check your Internet connection. sync.error.checkConnection=Virhe yhdistettäessä palvelimeen. Tarkista Internet-yhteytesi.
sync.error.emptyResponseServer=Empty response from server. sync.error.emptyResponseServer=Palvelin antoi tyhjän vastauksen.
sync.error.invalidCharsFilename=The filename '%S' contains invalid characters.\n\nRename the file and try again. If you rename the file via the OS, you will need to relink it in Zotero. sync.error.invalidCharsFilename=Tiedostonimessä '%S' on virheellisiä kirjaimia.\n\nVaihda tiedostonimi ja yritä uudelleen. Jos vaihdat tiedostonimeä käyttöjärjestelmän kautta, sinun täytyy linkata tiedosto uudelleen Zoteroon.
sync.lastSyncWithDifferentAccount=This Zotero database was last synced with a different zotero.org account ('%1$S') from the current one ('%2$S'). sync.lastSyncWithDifferentAccount=Tämä Zotero-tietokanta synkronoitiin edellisen kerran zotero.org-tilin ('%1$S') kanssa kuin nykyinen ('%2$S').
sync.localDataWillBeCombined=If you continue, local Zotero data will be combined with data from the '%S' account stored on the server. sync.localDataWillBeCombined=Jos jatkat, paikalliset Zotero-tiedot yhdistetään palvelimella olevien tilin '%S' tietojen kanssa.
sync.localGroupsWillBeRemoved1=Local groups, including any with changed items, will also be removed. sync.localGroupsWillBeRemoved1=Paikalliset ryhmät myös ne, joissa on muuttuneita nimikkeitä poistetaan myös.
sync.avoidCombiningData=To avoid combining or losing data, revert to the '%S' account or use the Reset options in the Sync pane of the Zotero preferences. sync.avoidCombiningData=Jos haluat välttää tietojen yhdistämisen ja/tai menettämisen, palaa tiliin '%S' tai käytä Nollaa asetukset -toimintoa Zoteron synkronointiasetuksissa.
sync.localGroupsWillBeRemoved2=If you continue, local groups, including any with changed items, will be removed and replaced with groups linked to the '%1$S' account.\n\nTo avoid losing local changes to groups, be sure you have synced with the '%2$S' account before syncing with the '%1$S' account. sync.localGroupsWillBeRemoved2=Jos jatkat, paikalliset ryhmät myös ne, joissa on muuttuneita nimikkeitä poistetaan ja korvataan tiliin '%1$S' liitetyillä ryhmillä.\n\nVälttääksesi paikalliset muutokset ryhmiin, varmista, että olet synkronoinut tilin '€2$S' ennen tiliä '%1$S'.
sync.conflict.autoChange.alert=One or more locally deleted Zotero %S have been modified remotely since the last sync. sync.conflict.autoChange.alert=Yhtä tai useampaa paikallisesti poistettua Zotero-%S on muokattu toisaalla edellisen synkronoinnin jälkeen.
sync.conflict.autoChange.log=A Zotero %S has changed both locally and remotely since the last sync: sync.conflict.autoChange.log=Zotero-%S:n paikallinen sekä palvelimella oleva versio on muuttunut edellisen synkronoinnin jälkeen.
sync.conflict.remoteVersionsKept=The remote versions have been kept. sync.conflict.remoteVersionsKept=Palvelimella olevat versiot säilytettiin.
sync.conflict.remoteVersionKept=The remote version has been kept. sync.conflict.remoteVersionKept=Palvelimella oleva versio säilytettiin.
sync.conflict.localVersionsKept=The local versions have been kept. sync.conflict.localVersionsKept=Paikalliset versiot säilytettiin.
sync.conflict.localVersionKept=The local version has been kept. sync.conflict.localVersionKept=Paikallinen versio säilytettiin.
sync.conflict.recentVersionsKept=The most recent versions have been kept. sync.conflict.recentVersionsKept=Uusimmat versiot säilytettiin.
sync.conflict.recentVersionKept=The most recent version, '%S', has been kept. sync.conflict.recentVersionKept=Uusin versio, '%S', säilytettiin.
sync.conflict.viewErrorConsole=View the %S Error Console for the full list of such changes. sync.conflict.viewErrorConsole=Voit katsoa täydellisen luettelon muutoksista %S:n virhekonsolissa.
sync.conflict.localVersion=Local version: %S sync.conflict.localVersion=Paikallinen versio: %S
sync.conflict.remoteVersion=Remote version: %S sync.conflict.remoteVersion=Etäversio: %S
sync.conflict.deleted=[deleted] sync.conflict.deleted=[poistettu]
sync.conflict.collectionItemMerge.alert=One or more Zotero items have been added to and/or removed from the same collection on multiple computers since the last sync. sync.conflict.collectionItemMerge.alert=Yksi tai useampi Zotero-nimike on lisätty samaan kokoelmaan tai poistettu samasta kokoelmasta useilla eri tietokoneilla edellisen synkronoinnin jälkeen.
sync.conflict.collectionItemMerge.log=Zotero items in the collection '%S' have been added and/or removed on multiple computers since the last sync. The following items have been added to the collection: sync.conflict.collectionItemMerge.log=Zotero-nimikkeitä kokoelmassa '%S' on lisätty tai poistettu useilla eri tietokoneilla edellisen synkronoinnin jälkeen. Seuraavat nimikkeet lisättiin kokoelmaan:
sync.conflict.tagItemMerge.alert=One or more Zotero tags have been added to and/or removed from items on multiple computers since the last sync. The different sets of tags have been combined. sync.conflict.tagItemMerge.alert=Yksi tai useampi Zotero-avainsana on poistettu nimikkeistä tai lisätty nimikkeisiin useilla eri tietokoneilla edellisen synkronoinnin jälkeen. Avainsananiput on nyt yhdistetty toisiinsa.
sync.conflict.tagItemMerge.log=The Zotero tag '%S' has been added to and/or removed from items on multiple computers since the last sync. sync.conflict.tagItemMerge.log=Zotero-avainsana '%S' on lisätty nimikkeisiin tai poistettu nimikkeistä useilla eri tietokoneilla edelisen synkronoinnin jälkeen.
sync.conflict.tag.addedToRemote=It has been added to the following remote items: sync.conflict.tag.addedToRemote=Se on nyt lisätty seuraaviin palvelimella oleviin nimikkeisiin:
sync.conflict.tag.addedToLocal=It has been added to the following local items: sync.conflict.tag.addedToLocal=Se on nyt lisätty seuraaviin paikallisiin nimikkeisiin:
sync.conflict.fileChanged=The following file has been changed in multiple locations. sync.conflict.fileChanged=Seuraavaa tiedostoa on muokattu useassa eri paikassa.
sync.conflict.itemChanged=The following item has been changed in multiple locations. sync.conflict.itemChanged=Seuraavaa nimikettä on muokattu. useassa eri paikassa.
sync.conflict.chooseVersionToKeep=Choose the version you would like to keep, and then click %S. sync.conflict.chooseVersionToKeep=Valitse versio, jonka haluat säilyttää, ja paina &S
sync.conflict.chooseThisVersion=Choose this version sync.conflict.chooseThisVersion=Valitse tämä versio
sync.status.notYetSynced=Ei vielä synkronoitu sync.status.notYetSynced=Ei vielä synkronoitu
sync.status.lastSync=Viimeisin synkronointi: sync.status.lastSync=Viimeisin synkronointi:
@ -818,12 +818,12 @@ sync.status.uploadingData=Siirretään tietoja synkronointipalvelimelle
sync.status.uploadAccepted=Tiedonsiirto hyväksytty \u2014 odotetaan synkronointipalvelinta sync.status.uploadAccepted=Tiedonsiirto hyväksytty \u2014 odotetaan synkronointipalvelinta
sync.status.syncingFiles=Synkronoidaan tiedostoja sync.status.syncingFiles=Synkronoidaan tiedostoja
sync.fulltext.upgradePrompt.title=New: Full-Text Content Syncing sync.fulltext.upgradePrompt.title=Uutta: Kokotekstisisällön synkronisointi
sync.fulltext.upgradePrompt.text=Zotero can now sync the full-text content of files in your Zotero libraries with zotero.org and other linked devices, allowing you to easily search for your files wherever you are. The full-text content of your files will not be shared publicly. sync.fulltext.upgradePrompt.text=Zotero voi nyt synkronoida Zotero-kirjastossa olevien tiedostojen kokotekstisisällön zotero.orgin ja tiliin kytkettyjen laitteiden kanssa, joten voit helposti suorittaa hakuja tiedostoista missä ikinä oletkin. Tiedostojen kokotekstisisältöä ei jaeta julkisesti.
sync.fulltext.upgradePrompt.changeLater=You can change this setting later from the Sync pane of the Zotero preferences. sync.fulltext.upgradePrompt.changeLater=Voit myöhemmin muuttaa tätä asetusta Zoteron asetusten Synkronointi-välilehdellä.
sync.fulltext.upgradePrompt.enable=Use Full-Text Syncing sync.fulltext.upgradePrompt.enable=Käytä kokotekstien synkronisointia
sync.storage.mbRemaining=%SMB remaining sync.storage.mbRemaining=%S Mt jäljellä
sync.storage.kbRemaining=%S kt jäljellä sync.storage.kbRemaining=%S kt jäljellä
sync.storage.filesRemaining=%1$S/%2$S tiedostoa sync.storage.filesRemaining=%1$S/%2$S tiedostoa
sync.storage.none=Ei mitään sync.storage.none=Ei mitään
@ -836,14 +836,14 @@ sync.storage.serverConfigurationVerified=Palvelinasetukset varmistettu
sync.storage.fileSyncSetUp=Tiedostosynkronisaatio on nyt määritetty. sync.storage.fileSyncSetUp=Tiedostosynkronisaatio on nyt määritetty.
sync.storage.openAccountSettings=Avaa tilin asetukset sync.storage.openAccountSettings=Avaa tilin asetukset
sync.storage.error.default=A file sync error occurred. Please try syncing again.\n\nIf you receive this message repeatedly, restart %S and/or your computer and try again. If you continue to receive the message, submit an error report and post the Report ID to a new thread in the Zotero Forums. sync.storage.error.default=Tiedostojen synkronointivirhe. Yritä synkronointia uudelleen.\n\nJos saat tämän virheilmoituksen toistuvasti, käynnistä %S ja/tai tietokone uudelleen, ja yritä sitten uudestaan. Jos ilmoitus toistuu senkin jälkeen, lähetä virheraportti ja kirjoita Zoteron keskustelualueelle viesti, jossa mainitset virheraportin tunnuksen.
sync.storage.error.defaultRestart=A file sync error occurred. Please restart %S and/or your computer and try syncing again.\n\nIf you receive this message repeatedly, submit an error report and post the Report ID to a new thread in the Zotero Forums. sync.storage.error.defaultRestart=Tiedostojen synkronointivirhe. Käynnistä %S ja/tai tietokone uudelleen, ja yritä sitten synkronointia uudestaan.\n\nJos ilmoitus toistuu, lähetä virheraportti ja kirjoita Zoteron keskustelualueelle viesti, jossa mainitset virheraportin tunnuksen.
sync.storage.error.serverCouldNotBeReached=Palvelinta %S ei voitu tavoittaa. sync.storage.error.serverCouldNotBeReached=Palvelinta %S ei voitu tavoittaa.
sync.storage.error.permissionDeniedAtAddress=Sinulle ei ole oikeutta luoda Zotero-kansiota osoitteeseen: sync.storage.error.permissionDeniedAtAddress=Sinulle ei ole oikeutta luoda Zotero-kansiota osoitteeseen:
sync.storage.error.checkFileSyncSettings=Tarkista tiedostojen synkronoinnin asetukset tai ota yhteyttä palvelimesi ylläpitäjään. sync.storage.error.checkFileSyncSettings=Tarkista tiedostojen synkronoinnin asetukset tai ota yhteyttä palvelimesi ylläpitäjään.
sync.storage.error.verificationFailed=%S tarkistus epäonnistui. Tarkista tiedostojen synkronointiasetukset Zoteron asetusten Synkronisaatio-välilehdeltä. sync.storage.error.verificationFailed=%S tarkistus epäonnistui. Tarkista tiedostojen synkronointiasetukset Zoteron asetusten Synkronisaatio-välilehdeltä.
sync.storage.error.fileNotCreated=Tiedostoa '%S' ei voitu luoda Zoteron 'storage'-kansioon. sync.storage.error.fileNotCreated=Tiedostoa '%S' ei voitu luoda Zoteron 'storage'-kansioon.
sync.storage.error.encryptedFilenames=Error creating file '%S'.\n\nSee http://www.zotero.org/support/kb/encrypted_filenames for more information. sync.storage.error.encryptedFilenames=Virhe luodessa tiedostoa '%S'.\n\nKatso lisätietoja osoitteesta http://www.zotero.org/support/kb/encrypted_filenames.
sync.storage.error.fileEditingAccessLost=Sinulle ei enää ole muokkausoikeutta Zoteron ryhmään '%S', joten lisäämiäsi tai muokkaamiasi tiedostoja ei voida synkronoida palvelimelle. sync.storage.error.fileEditingAccessLost=Sinulle ei enää ole muokkausoikeutta Zoteron ryhmään '%S', joten lisäämiäsi tai muokkaamiasi tiedostoja ei voida synkronoida palvelimelle.
sync.storage.error.copyChangedItems=Jos haluat säilyttää mahdollisuuden kopioida muutetut nimikkeet ja tiedostot muualle, peruuta synkronointi nyt. sync.storage.error.copyChangedItems=Jos haluat säilyttää mahdollisuuden kopioida muutetut nimikkeet ja tiedostot muualle, peruuta synkronointi nyt.
sync.storage.error.fileUploadFailed=Tiedostojen siirto palvelimelle epäonnistui. sync.storage.error.fileUploadFailed=Tiedostojen siirto palvelimelle epäonnistui.
@ -851,9 +851,9 @@ sync.storage.error.directoryNotFound=Kansiota ei löytynyt
sync.storage.error.doesNotExist=Sijaintia %S ei ole olemassa. sync.storage.error.doesNotExist=Sijaintia %S ei ole olemassa.
sync.storage.error.createNow=Haluatko luoda sen nyt? sync.storage.error.createNow=Haluatko luoda sen nyt?
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.default=Virhe WebDAV-tiedostosynkronoinnissa. Yritä synkronointia uudelleen.\n\nJos saat tämän viestin toistuvasti, tarkista WebDAV-palvelimen asetukset Zoteron asetusten Synkronointi-välilehdellä.
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.defaultRestart=Virhe WebDAV-tiedostosynkronoinnissa. Käynnistä %S uudelleen ja yritä synkronointia uudestaan.\n\nJos saat tämän viestin toistuvasti, tarkista WebDAV-palvelimen asetukset Zoteron asetusten Synkronointi-välilehdellä.
sync.storage.error.webdav.enterURL=Please enter a WebDAV URL. sync.storage.error.webdav.enterURL=Anna WebDAV-palvelimen URL
sync.storage.error.webdav.invalidURL=%S ei ole kelvollinen WebDAV-osoite. sync.storage.error.webdav.invalidURL=%S ei ole kelvollinen WebDAV-osoite.
sync.storage.error.webdav.invalidLogin=WebDAV-palvelin ei hyväksynyt antamaasi käyttäjätunnusta ja salasanaa. sync.storage.error.webdav.invalidLogin=WebDAV-palvelin ei hyväksynyt antamaasi käyttäjätunnusta ja salasanaa.
sync.storage.error.webdav.permissionDenied=Sinulla ei ole käyttöoikeutta WebDAV-palvelimen sijaintiin %S. sync.storage.error.webdav.permissionDenied=Sinulla ei ole käyttöoikeutta WebDAV-palvelimen sijaintiin %S.
@ -863,18 +863,18 @@ sync.storage.error.webdav.sslConnectionError=SSL-yhteysvirhe yhdistettäessä ko
sync.storage.error.webdav.loadURLForMoreInfo=Lataa WebDAV-osoite nettiselaimessa saadaksesi lisätietoja sync.storage.error.webdav.loadURLForMoreInfo=Lataa WebDAV-osoite nettiselaimessa saadaksesi lisätietoja
sync.storage.error.webdav.seeCertOverrideDocumentation=Katso lisätietoja sertifikaatin ohittamisen ohjeista. sync.storage.error.webdav.seeCertOverrideDocumentation=Katso lisätietoja sertifikaatin ohittamisen ohjeista.
sync.storage.error.webdav.loadURL=Lataa WebDAV-osoite sync.storage.error.webdav.loadURL=Lataa WebDAV-osoite
sync.storage.error.webdav.fileMissingAfterUpload=A potential problem was found with your WebDAV server.\n\nAn uploaded file was not immediately available for download. There may be a short delay between when you upload files and when they become available, particularly if you are using a cloud storage service.\n\nIf Zotero file syncing appears to work normally, you can ignore this message. If you have trouble, please post to the Zotero Forums. sync.storage.error.webdav.fileMissingAfterUpload=Synkronoinnissa WebDAV-palvelimen kanssa saattaa olla ongelma.\n\nLähetetty tiedosto ei ollut välittömästi valminaa ladattavaksi. Tiedostojen lähettämisen ja niiden saataville tulemisen välillä saattaa olla pieni viive, etenkin jos käytät tallennukseen pilvipalveluita.\n\nJos Zoteron tiedostosynkronointi vaikuttaa toimivan normaalista, voit ohittaa tämän virheilmoituksen. Jos ongelmia ilmenee, lähetä viesti Zoteron keskustelualueelle.
sync.storage.error.webdav.nonexistentFileNotMissing=Your WebDAV server is claiming that a nonexistent file exists. Contact your WebDAV server administrator for assistance. sync.storage.error.webdav.nonexistentFileNotMissing=WebDAV-palvelin ilmoittaa olemassaolevan tiedoston olemassaolevaksi. Ota yhteyttä palvelimen ylläpitäjään.
sync.storage.error.webdav.serverConfig.title=WebDAV Server Configuration Error sync.storage.error.webdav.serverConfig.title=WebDAV-palvelimen konfigurointivirhe
sync.storage.error.webdav.serverConfig=Your WebDAV server returned an internal error. sync.storage.error.webdav.serverConfig=WebDAV-palvelin ilmoitti sisäisestä virhetilasta.
sync.storage.error.zfs.restart=A file sync error occurred. Please restart %S and/or your computer and try syncing again.\n\nIf the error persists, there may be a problem with either your computer or your network: security software, proxy server, VPN, etc. Try disabling any security/firewall software you're using or, if this is a laptop, try from a different network. sync.storage.error.zfs.restart=Tiedostojen synkronointivirhe. Käynnistä %S ja/tai tietokone uudelleen ja yritä synkronointia uudestaan.\n\nJos ongelma toistuu, tietokoneessa tai verkkoyhteydessä saattaa olla vikaa, jonka saattaa aiheuttaa esimerkiksi tietoturvaohjelma, välityspalvelin, VPN tms. Kokeile poistaa tietoturva-/palomuuriohjelma käytöstä, tai jos kyseessä on kannettava tietokone, kokeile eri verkkoa.
sync.storage.error.zfs.tooManyQueuedUploads=You have too many queued uploads. Please try again in %S minutes. sync.storage.error.zfs.tooManyQueuedUploads=Sinulla on liian monta tiedostojen lähetystä jonossa. Yritä uudelleen %S minuutin kuluttua.
sync.storage.error.zfs.personalQuotaReached1=Kiintiö palvelimelle tallennettaville tiedostoille on tullut täyteen. Osa tiedoista jäi siirtämättä. Muu Zotero-aineisto synkronoituu edelleen palvelimelle. sync.storage.error.zfs.personalQuotaReached1=Kiintiö palvelimelle tallennettaville tiedostoille on tullut täyteen. Osa tiedoista jäi siirtämättä. Muu Zotero-aineisto synkronoituu edelleen palvelimelle.
sync.storage.error.zfs.personalQuotaReached2=Tutustu tallennustilan lisäpalveluihin osoitteessa zotero.org. sync.storage.error.zfs.personalQuotaReached2=Tutustu tallennustilan lisäpalveluihin osoitteessa zotero.org.
sync.storage.error.zfs.groupQuotaReached1=Ryhmän '%S' kiintiö palvelimelle tallennettaville tiedostoille on tullut täyteen. Osa tiedoista jäi siirtämättä. Muu Zotero-aineisto synkronoituu edelleen palvelimelle. sync.storage.error.zfs.groupQuotaReached1=Ryhmän '%S' kiintiö palvelimelle tallennettaville tiedostoille on tullut täyteen. Osa tiedoista jäi siirtämättä. Muu Zotero-aineisto synkronoituu edelleen palvelimelle.
sync.storage.error.zfs.groupQuotaReached2=Ryhmän omistaja voi lisätä ryhmän tallennustilaa osoitteessa zotero.org. sync.storage.error.zfs.groupQuotaReached2=Ryhmän omistaja voi lisätä ryhmän tallennustilaa osoitteessa zotero.org.
sync.storage.error.zfs.fileWouldExceedQuota=The file '%S' would exceed your Zotero File Storage quota sync.storage.error.zfs.fileWouldExceedQuota=Tiedosto '%S' ylittäisi Zoteron tiedostontallennuskiintiösi.
sync.longTagFixer.saveTag=Tallenna merkki sync.longTagFixer.saveTag=Tallenna merkki
sync.longTagFixer.saveTags=Tallenna merkit sync.longTagFixer.saveTags=Tallenna merkit
@ -898,16 +898,16 @@ proxies.recognized.add=Lisää välityspalvelin
recognizePDF.noOCR=PDF-tiedosto ei sisällä OCRed-tekstiä. recognizePDF.noOCR=PDF-tiedosto ei sisällä OCRed-tekstiä.
recognizePDF.couldNotRead=PDF-tiedoston tekstiä ei voi lukea. recognizePDF.couldNotRead=PDF-tiedoston tekstiä ei voi lukea.
recognizePDF.noMatches=No matching references found recognizePDF.noMatches=Vastaavia nimikkeitä ei löytynyt
recognizePDF.fileNotFound=Tiedostoa ei löytynyt recognizePDF.fileNotFound=Tiedostoa ei löytynyt
recognizePDF.limit=Google Scholar query limit reached. Try again later. recognizePDF.limit=Google Scholarin asettama raja hakumäärille ylitetty. Yritä myöhemmin uudestaan.
recognizePDF.error=Tapahtui odottamaton virhe. recognizePDF.error=Tapahtui odottamaton virhe.
recognizePDF.stopped=Peruttu recognizePDF.stopped=Peruttu
recognizePDF.complete.label=Metadata on haettu recognizePDF.complete.label=Metadata on haettu
recognizePDF.cancelled.label=Metadata Retrieval Cancelled recognizePDF.cancelled.label=Metadatan hakeminen peruttu
recognizePDF.close.label=Sulje recognizePDF.close.label=Sulje
recognizePDF.captcha.title=Please enter CAPTCHA recognizePDF.captcha.title=Syötä kuvavarmennus
recognizePDF.captcha.description=Zotero uses Google Scholar to help identify PDFs. To continue using Google Scholar, please enter the text from the image below. recognizePDF.captcha.description=Zotero käyttää Google Scholaria PDF-tiedostojen tunnistamiseen. Jatkaaksesi Google Scholarin käyttöä, kirjoita laatikkoon kuvassa näkyvä teksti.
rtfScan.openTitle=Valitse käsiteltävä tiedosto rtfScan.openTitle=Valitse käsiteltävä tiedosto
rtfScan.scanning.label=Scanning RTF Document... rtfScan.scanning.label=Scanning RTF Document...
@ -917,20 +917,20 @@ rtfScan.saveTitle=Valitse muotoillun tiedoston tallennuksen kohde
rtfScan.scannedFileSuffix=(Skannattu) rtfScan.scannedFileSuffix=(Skannattu)
file.accessError.theFile=The file '%S' file.accessError.theFile=Tiedosto '%S'
file.accessError.aFile=Tiedosto file.accessError.aFile=Tiedosto
file.accessError.cannotBe=ei voi olla file.accessError.cannotBe=ei voi olla
file.accessError.created=luotu file.accessError.created=luotu
file.accessError.updated=päivitetty file.accessError.updated=päivitetty
file.accessError.deleted=poistettu file.accessError.deleted=poistettu
file.accessError.message.windows=Check that the file is not currently in use, that its permissions allow write access, and that it has a valid filename. file.accessError.message.windows=Tarkista, että tiedosto ei ole tällä hetkellä käytössä, että siihen on kirjoitusoikeudet, ja että sillä on sallittu tiedostonimi.
file.accessError.message.other=Check that the file is not currently in use and that its permissions allow write access. file.accessError.message.other=Tarkista, että tiedosto ei ole käytössä ja että siihen on kirjoitusoikeudet.
file.accessError.restart=Restarting your computer or disabling security software may also help. file.accessError.restart=Voit yrittää myös käynnistää tietokoneen uudelleen tai poistaa suojausohjelman käytöstä.
file.accessError.showParentDir=Show Parent Directory file.accessError.showParentDir=Näytä sisältävä hakemisto
lookup.failure.title=Haku epäonnistui lookup.failure.title=Haku epäonnistui
lookup.failure.description=Zotero ei löytänyt annettua tunnistetta rekistereistä. Tarkista tunniste ja yritä uudelleen. lookup.failure.description=Zotero ei löytänyt annettua tunnistetta rekistereistä. Tarkista tunniste ja yritä uudelleen.
lookup.failureToID.description=Zotero could not find any identifiers in your input. Please verify your input and try again. lookup.failureToID.description=Zotero ei löytänyt mitään tunnisteita syötteestäsi. Tarkista syöte ja yritä uudelleen.
locate.online.label=Katso verkossa locate.online.label=Katso verkossa
locate.online.tooltip=Hae tämä nimike verkosta locate.online.tooltip=Hae tämä nimike verkosta
@ -953,18 +953,18 @@ locate.manageLocateEngines=Manage Lookup Engines...
standalone.corruptInstallation=Zotero Standalone -asennuksesi vaikuttaa olevan vioittunut epäonnistuneessa automaattipäivityksessä. Zotero saattaa jatkaa toimintaansa, mutta mahdollisten virheiden välttämiseksi suosittelemme lataamaan Zotero Standalonen uusimman version osoitteesta http://zotero.org/support/standalone mahdollisimman pian. standalone.corruptInstallation=Zotero Standalone -asennuksesi vaikuttaa olevan vioittunut epäonnistuneessa automaattipäivityksessä. Zotero saattaa jatkaa toimintaansa, mutta mahdollisten virheiden välttämiseksi suosittelemme lataamaan Zotero Standalonen uusimman version osoitteesta http://zotero.org/support/standalone mahdollisimman pian.
standalone.addonInstallationFailed.title=Lisäosan asennus epäonnistui standalone.addonInstallationFailed.title=Lisäosan asennus epäonnistui
standalone.addonInstallationFailed.body=Lisäosaa "%S" ei voitu asentaa. Se saattaa olla yhteensopimaton tämän Zotero Standalone -version kanssa. standalone.addonInstallationFailed.body=Lisäosaa "%S" ei voitu asentaa. Se saattaa olla yhteensopimaton tämän Zotero Standalone -version kanssa.
standalone.rootWarning=You appear to be running Zotero Standalone 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 writeable by your user account. standalone.rootWarning=Käytät ilmeisesti Zotero Standalonea järjestelmänvalvojan oikeuksilla. Tämä ei ole turvallista, ja se voi estää Zoteroa toimimasta oikein, kun se käynnistetään tavallisen käyttäjän oikeuksilla.\n\nJos haluat asentaa automaattisen päivityksen, lisää tavalliselle käyttäjälle kirjoitusoikeudet Zoteron ohjelmakansioon.
standalone.rootWarning.exit=Exit standalone.rootWarning.exit=Poistu
standalone.rootWarning.continue=Continue standalone.rootWarning.continue=atka
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. standalone.updateMessage=Suositeltu päivitys on saatavilla, mutta sinulla ei ole oikeuksia sen asentamiseen. Asentaaksesi päivitykset automaattiset, lisää käyttäjätilillesi kirjoitusoikeus Zoteron ohjelmakansioon.
connector.error.title=Zotero Connector -ongelma. connector.error.title=Zotero Connector -ongelma.
connector.standaloneOpen=Tietokantaasi ei saada yhteyttä, koska Zotero Standalone on tällä hetkellä auki. Käytä Zotero Standalonea nimikkeidesi tarkasteluun. connector.standaloneOpen=Tietokantaasi ei saada yhteyttä, koska Zotero Standalone on tällä hetkellä auki. Käytä Zotero Standalonea nimikkeidesi tarkasteluun.
connector.loadInProgress=Zotero Standalone was launched but is not accessible. If you experienced an error opening Zotero Standalone, restart Firefox. connector.loadInProgress=Zotero Standalone on käynnistettiin, mutta se ei ole käytettävissä. Jos Zotero Standalonen käynnistämiseen liittyi virhe, käynnistä Firefox uudestaan.
firstRunGuidance.saveIcon=Zotero tunnistaa viitteen tällä sivulla. Paina osoitepalkin kuvaketta tallentaaksesi viitteen Zotero-kirjastoon. firstRunGuidance.saveIcon=Zotero tunnistaa viitteen tällä sivulla. Paina osoitepalkin kuvaketta tallentaaksesi viitteen Zotero-kirjastoon.
firstRunGuidance.authorMenu=Zoterossa voit myös määritellä teoksen toimittajat ja kääntäjät. Voit muuttaa kirjoittajan toimittajaksi tai kääntäjäksi tästä valikosta. firstRunGuidance.authorMenu=Zoterossa voit myös määritellä teoksen toimittajat ja kääntäjät. Voit muuttaa kirjoittajan toimittajaksi tai kääntäjäksi tästä valikosta.
firstRunGuidance.quickFormat=Kirjoita otsikko tai tekijä etsiäksesi viitettä.\n\nKun olet tehnyt valinnan, klikkaa kuplaa tai paina Ctrl-\u2193 lisätäksesi sivunumerot sekä etu- ja jälkiliitteet. Voit myös sisällyttää sivunumeron hakutermien mukana lisätäksesi sen suoraan.\n\nVoit muokata sitaatteja suoraan tekstinkäsittelyohjelman asiakirjassa. firstRunGuidance.quickFormat=Kirjoita otsikko tai tekijä etsiäksesi viitettä.\n\nKun olet tehnyt valinnan, klikkaa kuplaa tai paina Ctrl-\u2193 lisätäksesi sivunumerot sekä etu- ja jälkiliitteet. Voit myös sisällyttää sivunumeron hakutermien mukana lisätäksesi sen suoraan.\n\nVoit muokata sitaatteja suoraan tekstinkäsittelyohjelman asiakirjassa.
firstRunGuidance.quickFormatMac=Kirjoita otsikko tai tekijä etsiäksesi viitettä.\n\nKun olet tehnyt valinnan, klikkaa kuplaa tai paina Ctrl-\u2193 lisätäksesi sivunumerot sekä etu- ja jälkiliitteet. Voit myös sisällyttää sivunumeron hakutermien mukana lisätäksesi sen suoraan.\n\nVoit muokata sitaatteja suoraan tekstinkäsittelyohjelman asiakirjassa. firstRunGuidance.quickFormatMac=Kirjoita otsikko tai tekijä etsiäksesi viitettä.\n\nKun olet tehnyt valinnan, klikkaa kuplaa tai paina Ctrl-\u2193 lisätäksesi sivunumerot sekä etu- ja jälkiliitteet. Voit myös sisällyttää sivunumeron hakutermien mukana lisätäksesi sen suoraan.\n\nVoit muokata sitaatteja suoraan tekstinkäsittelyohjelman asiakirjassa.
firstRunGuidance.toolbarButton.new=Click here to open Zotero, or use the %S keyboard shortcut. firstRunGuidance.toolbarButton.new=Paina tästä avataksesi Zoteron, tai käyttää %S-näppäinoikotietä.
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.toolbarButton.upgrade=Zoteron kuvake on nyt Firefoxin työkalurivillä. Paina kuvaketta avataksesi Zoteron, tai käytä %S-näppäinoikotietä.

View File

@ -81,10 +81,10 @@
<!ENTITY zotero.items.menu.attach.note "Ajouter une note"> <!ENTITY zotero.items.menu.attach.note "Ajouter une note">
<!ENTITY zotero.items.menu.attach "Ajouter une pièce jointe"> <!ENTITY zotero.items.menu.attach "Ajouter une pièce jointe">
<!ENTITY zotero.items.menu.attach.snapshot "Joindre une capture de la page courante"> <!ENTITY zotero.items.menu.attach.snapshot "Joindre une capture de la page courante">
<!ENTITY zotero.items.menu.attach.link "Joindre le lien vers la page courante"> <!ENTITY zotero.items.menu.attach.link "Joindre un lien vers la page courante">
<!ENTITY zotero.items.menu.attach.link.uri "Joindre le lien vers l'URI…"> <!ENTITY zotero.items.menu.attach.link.uri "Joindre un lien vers un URI…">
<!ENTITY zotero.items.menu.attach.file "Joindre une copie enregistrée du fichier…"> <!ENTITY zotero.items.menu.attach.file "Joindre une copie enregistrée d'un fichier…">
<!ENTITY zotero.items.menu.attach.fileLink "Joindre un lien vers le fichier…"> <!ENTITY zotero.items.menu.attach.fileLink "Joindre un lien vers un fichier…">
<!ENTITY zotero.items.menu.restoreToLibrary "Restaurer vers la bibliothèque"> <!ENTITY zotero.items.menu.restoreToLibrary "Restaurer vers la bibliothèque">
<!ENTITY zotero.items.menu.duplicateItem "Dupliquer le document"> <!ENTITY zotero.items.menu.duplicateItem "Dupliquer le document">
@ -284,3 +284,9 @@
<!ENTITY zotero.downloadManager.label "Enregistrer dans Zotero"> <!ENTITY zotero.downloadManager.label "Enregistrer dans Zotero">
<!ENTITY zotero.downloadManager.saveToLibrary.description "Les pièces jointes ne peuvent pas être enregistrées dans la bibliothèque sélectionnée. Ce document sera enregistré dans votre bibliothèque à la place."> <!ENTITY zotero.downloadManager.saveToLibrary.description "Les pièces jointes ne peuvent pas être enregistrées dans la bibliothèque sélectionnée. Ce document sera enregistré dans votre bibliothèque à la place.">
<!ENTITY zotero.downloadManager.noPDFTools.description "Pour utiliser cette fonctionnalité, vous devez d'abord installer les outils PDF depuis le panneau Recherche des préférences de Zotero."> <!ENTITY zotero.downloadManager.noPDFTools.description "Pour utiliser cette fonctionnalité, vous devez d'abord installer les outils PDF depuis le panneau Recherche des préférences de Zotero.">
<!ENTITY zotero.attachLink.title "Joindre un lien vers un URI">
<!ENTITY zotero.attachLink.label.link "Lien :">
<!ENTITY zotero.attachLink.label.title "Titre :">

View File

@ -195,8 +195,8 @@ tagColorChooser.maxTags=Jusqu'à %S marqueurs dans chaque bibliothèque peuvent
pane.items.loading=Chargement de la liste des objets… pane.items.loading=Chargement de la liste des objets…
pane.items.columnChooser.moreColumns=Plus de colonnes pane.items.columnChooser.moreColumns=Plus de colonnes
pane.items.columnChooser.secondarySort=Critère de tri secondaire (%S) pane.items.columnChooser.secondarySort=Critère de tri secondaire (%S)
pane.items.attach.link.uri.title=Joindre un lien vers l'URI pane.items.attach.link.uri.unrecognized=Zotero n'a pas reconnu l'URI que vous avez saisi. Vérifiez l'adresse et ré-essayez.
pane.items.attach.link.uri=Saisissez une URI : pane.items.attach.link.uri.file=Pour joindre un lien vers un fichier, utilisez plutôt “%S”.
pane.items.trash.title=Mettre à la corbeille pane.items.trash.title=Mettre à la corbeille
pane.items.trash=Voulez-vous vraiment mettre le document sélectionné à la corbeille ? pane.items.trash=Voulez-vous vraiment mettre le document sélectionné à la corbeille ?
pane.items.trash.multiple=Voulez-vous vraiment mettre les documents sélectionnés à la corbeille ? pane.items.trash.multiple=Voulez-vous vraiment mettre les documents sélectionnés à la corbeille ?
@ -365,7 +365,7 @@ itemFields.numberOfVolumes=Nb de volumes
itemFields.committee=Commission itemFields.committee=Commission
itemFields.assignee=Cessionnaire itemFields.assignee=Cessionnaire
itemFields.patentNumber=N° de brevet itemFields.patentNumber=N° de brevet
itemFields.priorityNumbers=Ordre de priorité itemFields.priorityNumbers=Numéros de priorité
itemFields.issueDate=Date de parution itemFields.issueDate=Date de parution
itemFields.references=Références itemFields.references=Références
itemFields.legalStatus=Statut légal itemFields.legalStatus=Statut légal

View File

@ -1,6 +1,6 @@
<!ENTITY zotero.search.name "Nome:"> <!ENTITY zotero.search.name "Nome:">
<!ENTITY zotero.search.searchInLibrary "Search in library:"> <!ENTITY zotero.search.searchInLibrary "Buscar na librería:">
<!ENTITY zotero.search.joinMode.prefix "Comparar con"> <!ENTITY zotero.search.joinMode.prefix "Comparar con">
<!ENTITY zotero.search.joinMode.any "calquera"> <!ENTITY zotero.search.joinMode.any "calquera">

View File

@ -8,7 +8,7 @@
<!ENTITY zotero.general.cancel "Cancelar"> <!ENTITY zotero.general.cancel "Cancelar">
<!ENTITY zotero.errorReport.title "Informe de erros de Zotero"> <!ENTITY zotero.errorReport.title "Informe de erros de Zotero">
<!ENTITY zotero.errorReport.unrelatedMessages "This may include messages unrelated to Zotero."> <!ENTITY zotero.errorReport.unrelatedMessages "Isto pode conter mensaxes que non estean relacionadas con Zotero.">
<!ENTITY zotero.errorReport.submissionInProgress "Espere mentres que se presenta o informe de erro."> <!ENTITY zotero.errorReport.submissionInProgress "Espere mentres que se presenta o informe de erro.">
<!ENTITY zotero.errorReport.submitted "Presentouse o informe de erro ."> <!ENTITY zotero.errorReport.submitted "Presentouse o informe de erro .">
<!ENTITY zotero.errorReport.reportID "ID do informe:"> <!ENTITY zotero.errorReport.reportID "ID do informe:">
@ -45,7 +45,7 @@
<!ENTITY zotero.collections.showUnfiledItems "Mostrar os elementos sen cubrir"> <!ENTITY zotero.collections.showUnfiledItems "Mostrar os elementos sen cubrir">
<!ENTITY zotero.items.itemType "Tipo de elemento"> <!ENTITY zotero.items.itemType "Tipo de elemento">
<!ENTITY zotero.items.type_column "Item Type"> <!ENTITY zotero.items.type_column "Tipo de elemento">
<!ENTITY zotero.items.title_column "Título"> <!ENTITY zotero.items.title_column "Título">
<!ENTITY zotero.items.creator_column "Creador"> <!ENTITY zotero.items.creator_column "Creador">
<!ENTITY zotero.items.date_column "Data"> <!ENTITY zotero.items.date_column "Data">
@ -284,3 +284,9 @@
<!ENTITY zotero.downloadManager.label "Gardar en Zotero"> <!ENTITY zotero.downloadManager.label "Gardar en Zotero">
<!ENTITY zotero.downloadManager.saveToLibrary.description "Os anexos non se poden gardar na librería que se escolleu. En vez de alí, ese documento gardarase na súa biblioteca."> <!ENTITY zotero.downloadManager.saveToLibrary.description "Os anexos non se poden gardar na librería que se escolleu. En vez de alí, ese documento gardarase na súa biblioteca.">
<!ENTITY zotero.downloadManager.noPDFTools.description "Para empregar esta característica ten que instalar primeiro as ferramentas de PDF dende as preferencias de Zotero."> <!ENTITY zotero.downloadManager.noPDFTools.description "Para empregar esta característica ten que instalar primeiro as ferramentas de PDF dende as preferencias de Zotero.">
<!ENTITY zotero.attachLink.title "Attach Link to URI">
<!ENTITY zotero.attachLink.label.link "Link:">
<!ENTITY zotero.attachLink.label.title "Title:">

View File

@ -81,9 +81,9 @@ upgrade.couldNotMigrate.restart=Reinicie o ordenador se continúa a recibir esta
errorReport.reportError=Informar dun erro ... errorReport.reportError=Informar dun erro ...
errorReport.reportErrors=Informar de erros ... errorReport.reportErrors=Informar de erros ...
errorReport.reportInstructions=Pode informar deste erro seleccionando «%S» no menú de accións. errorReport.reportInstructions=Pode informar deste erro seleccionando «%S» no menú de accións.
errorReport.followingReportWillBeSubmitted=The following report will be submitted: errorReport.followingReportWillBeSubmitted=O informe que se vai a enviar é este:
errorReport.noErrorsLogged=No errors have been logged since %S started. errorReport.noErrorsLogged=Non se rexistraron erros dende que %S se iniciou.
errorReport.advanceMessage=Press %S to send the report to the Zotero developers. errorReport.advanceMessage=Preme %S para enviarlle o informe aos desenvolvedores de Zotero.
errorReport.stepsToReproduce=Pasos a reproducir: errorReport.stepsToReproduce=Pasos a reproducir:
errorReport.expectedResult=Resultado esperado: errorReport.expectedResult=Resultado esperado:
errorReport.actualResult=Resultado real: errorReport.actualResult=Resultado real:
@ -193,10 +193,10 @@ tagColorChooser.numberKeyInstructions=Podes engadir esta etiqueta para seleccion
tagColorChooser.maxTags=Só ata %S etiquetas de cada biblioteca poden ter cores asignadas. tagColorChooser.maxTags=Só ata %S etiquetas de cada biblioteca poden ter cores asignadas.
pane.items.loading=Cargando a lista de elementos ... pane.items.loading=Cargando a lista de elementos ...
pane.items.columnChooser.moreColumns=More Columns pane.items.columnChooser.moreColumns=Máis columnas
pane.items.columnChooser.secondarySort=Secondary Sort (%S) pane.items.columnChooser.secondarySort=Modo de aliñamento (%S)
pane.items.attach.link.uri.title=Anexar a ligazón á URI 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=Introducir unha URI: pane.items.attach.link.uri.file=To attach a link to a file, please use “%S”.
pane.items.trash.title=Mover ao lixo pane.items.trash.title=Mover ao lixo
pane.items.trash=Seguro que quere mover o elemento seleccionado ao lixo? pane.items.trash=Seguro que quere mover o elemento seleccionado ao lixo?
pane.items.trash.multiple=Seguro que quere mover os elementos seleccionados ao lixo? pane.items.trash.multiple=Seguro que quere mover os elementos seleccionados ao lixo?
@ -483,7 +483,7 @@ ingester.scrapingTo=Gardando en
ingester.scrapeComplete=Gardouse o elemento ingester.scrapeComplete=Gardouse o elemento
ingester.scrapeError=Non se puido gardar o elemento ingester.scrapeError=Non se puido gardar o elemento
ingester.scrapeErrorDescription=Produciuse un erro ao gardalo. Comprobe %S para obter máis información. ingester.scrapeErrorDescription=Produciuse un erro ao gardalo. Comprobe %S para obter máis información.
ingester.scrapeErrorDescription.linkText=Troubleshooting Translator Issues ingester.scrapeErrorDescription.linkText=Informe de erros sobre das traducións
ingester.scrapeErrorDescription.previousError=O proceso de gardado fallou debido a un erro previo de Zotero. ingester.scrapeErrorDescription.previousError=O proceso de gardado fallou debido a un erro previo de Zotero.
ingester.importReferRISDialog.title=Importar RIS/Refer para Zotero ingester.importReferRISDialog.title=Importar RIS/Refer para Zotero
@ -966,5 +966,5 @@ firstRunGuidance.saveIcon=Zotero recoñece unha referencia nesta páxina. Faga c
firstRunGuidance.authorMenu=Zotero permítelle ademais especificar os editores e tradutores. Escolléndoo neste menú pode asignar a un autor como editor ou tradutor. firstRunGuidance.authorMenu=Zotero permítelle ademais especificar os editores e tradutores. Escolléndoo neste menú pode asignar a un autor como editor ou tradutor.
firstRunGuidance.quickFormat=Teclee un título ou autor para buscar unha referencia.\n\nDespois de facer a selección faga clic na burbulla ou prema Ctrl-\↓ para engadir números de páxina, prefixos ou sufixos. Así mesmo, pode incluír un número de páxina cos datos de busca e engadilo directamente.\n\Ademais, pode editar citas directamente dende o procesador de documentos de texto. firstRunGuidance.quickFormat=Teclee un título ou autor para buscar unha referencia.\n\nDespois de facer a selección faga clic na burbulla ou prema Ctrl-\↓ para engadir números de páxina, prefixos ou sufixos. Así mesmo, pode incluír un número de páxina cos datos de busca e engadilo directamente.\n\Ademais, pode editar citas directamente dende o procesador de documentos de texto.
firstRunGuidance.quickFormatMac=Teclee un título de autor para facer unha busca dunha referencia.\n\nDespois de ter feito a selección prema na burbulla ou prema Cmd-\↓ para engadir os números de páxina, prefixos ou sufixos. Igualmente, pode incluír un número de páxina co seus termos de busca empregados e engadilo directamente.\n\nPode ademais editar citas directamente desde o procesador de documentos de textos. firstRunGuidance.quickFormatMac=Teclee un título de autor para facer unha busca dunha referencia.\n\nDespois de ter feito a selección prema na burbulla ou prema Cmd-\↓ para engadir os números de páxina, prefixos ou sufixos. Igualmente, pode incluír un número de páxina co seus termos de busca empregados e engadilo directamente.\n\nPode ademais editar citas directamente desde o procesador de documentos de textos.
firstRunGuidance.toolbarButton.new=Click here to open Zotero, or use the %S keyboard shortcut. firstRunGuidance.toolbarButton.new=Para abrir Zotero preme aquí ou usa o atallo de teclado %S
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.toolbarButton.upgrade=A icona de Zotero pódese atopar na barra de ferramentas do Firefox. Preme na icona de Zotero para abrilo ou usa o atallo de teclado %S.

View File

@ -284,3 +284,9 @@
<!ENTITY zotero.downloadManager.label "Save to Zotero"> <!ENTITY zotero.downloadManager.label "Save to Zotero">
<!ENTITY zotero.downloadManager.saveToLibrary.description "Attachments cannot be saved to the currently selected library. This item will be saved to your library instead."> <!ENTITY zotero.downloadManager.saveToLibrary.description "Attachments cannot be saved to the currently selected library. This item will be saved to your library instead.">
<!ENTITY zotero.downloadManager.noPDFTools.description "To use this feature, you must first install the PDF tools in the Search pane of the Zotero preferences."> <!ENTITY zotero.downloadManager.noPDFTools.description "To use this feature, you must first install the PDF tools in the Search pane of the Zotero preferences.">
<!ENTITY zotero.attachLink.title "Attach Link to URI">
<!ENTITY zotero.attachLink.label.link "Link:">
<!ENTITY zotero.attachLink.label.title "Title:">

View File

@ -195,8 +195,8 @@ tagColorChooser.maxTags=Up to %S tags in each library can have colors assigned.
pane.items.loading=טוען רשימת פריטים... pane.items.loading=טוען רשימת פריטים...
pane.items.columnChooser.moreColumns=More Columns pane.items.columnChooser.moreColumns=More Columns
pane.items.columnChooser.secondarySort=Secondary Sort (%S) pane.items.columnChooser.secondarySort=Secondary Sort (%S)
pane.items.attach.link.uri.title=Attach Link to URI 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=Enter a URI: 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.title=Move to Trash
pane.items.trash=Are you sure you want to move the selected item to the 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.trash.multiple=Are you sure you want to move the selected items to the Trash?

View File

@ -284,3 +284,9 @@
<!ENTITY zotero.downloadManager.label "Save to Zotero"> <!ENTITY zotero.downloadManager.label "Save to Zotero">
<!ENTITY zotero.downloadManager.saveToLibrary.description "Attachments cannot be saved to the currently selected library. This item will be saved to your library instead."> <!ENTITY zotero.downloadManager.saveToLibrary.description "Attachments cannot be saved to the currently selected library. This item will be saved to your library instead.">
<!ENTITY zotero.downloadManager.noPDFTools.description "To use this feature, you must first install the PDF tools in the Search pane of the Zotero preferences."> <!ENTITY zotero.downloadManager.noPDFTools.description "To use this feature, you must first install the PDF tools in the Search pane of the Zotero preferences.">
<!ENTITY zotero.attachLink.title "Attach Link to URI">
<!ENTITY zotero.attachLink.label.link "Link:">
<!ENTITY zotero.attachLink.label.title "Title:">

View File

@ -195,8 +195,8 @@ tagColorChooser.maxTags=Up to %S tags in each library can have colors assigned.
pane.items.loading=Loading items list... pane.items.loading=Loading items list...
pane.items.columnChooser.moreColumns=More Columns pane.items.columnChooser.moreColumns=More Columns
pane.items.columnChooser.secondarySort=Secondary Sort (%S) pane.items.columnChooser.secondarySort=Secondary Sort (%S)
pane.items.attach.link.uri.title=Attach Link to URI 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=Enter a URI: 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.title=Move to Trash
pane.items.trash=Are you sure you want to move the selected item to the 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.trash.multiple=Are you sure you want to move the selected items to the Trash?

View File

@ -90,7 +90,7 @@
<!ENTITY zotero.items.menu.duplicateItem "Kiválasztott elem duplikálása"> <!ENTITY zotero.items.menu.duplicateItem "Kiválasztott elem duplikálása">
<!ENTITY zotero.items.menu.mergeItems "Elemek összefésülése…"> <!ENTITY zotero.items.menu.mergeItems "Elemek összefésülése…">
<!ENTITY zotero.duplicatesMerge.versionSelect "Choose the version of the item to use as the master item:"> <!ENTITY zotero.duplicatesMerge.versionSelect "Válassza ki azt az elemverziót, amit mester elemnek kíván használni: ">
<!ENTITY zotero.duplicatesMerge.fieldSelect "Select fields to keep from other versions of the item:"> <!ENTITY zotero.duplicatesMerge.fieldSelect "Select fields to keep from other versions of the item:">
<!ENTITY zotero.toolbar.newItem.label "Új elem"> <!ENTITY zotero.toolbar.newItem.label "Új elem">
@ -141,11 +141,11 @@
<!ENTITY zotero.tagSelector.selectVisible "Látható címkék kiválasztása"> <!ENTITY zotero.tagSelector.selectVisible "Látható címkék kiválasztása">
<!ENTITY zotero.tagSelector.clearVisible "Látható címkék kiválasztásának megszüntetése"> <!ENTITY zotero.tagSelector.clearVisible "Látható címkék kiválasztásának megszüntetése">
<!ENTITY zotero.tagSelector.clearAll "Összes címke kiválasztásának megszüntetése"> <!ENTITY zotero.tagSelector.clearAll "Összes címke kiválasztásának megszüntetése">
<!ENTITY zotero.tagSelector.assignColor "Assign Color…"> <!ENTITY zotero.tagSelector.assignColor "Szín kiválasztása…">
<!ENTITY zotero.tagSelector.renameTag "Címke átnevezése..."> <!ENTITY zotero.tagSelector.renameTag "Címke átnevezése...">
<!ENTITY zotero.tagSelector.deleteTag "Címke törlése..."> <!ENTITY zotero.tagSelector.deleteTag "Címke törlése...">
<!ENTITY zotero.tagColorChooser.title "Choose a Tag Color and Position"> <!ENTITY zotero.tagColorChooser.title "Válassza ki a címke színét és a pozíciót.">
<!ENTITY zotero.tagColorChooser.color "Szín:"> <!ENTITY zotero.tagColorChooser.color "Szín:">
<!ENTITY zotero.tagColorChooser.position "Helyzet:"> <!ENTITY zotero.tagColorChooser.position "Helyzet:">
<!ENTITY zotero.tagColorChooser.setColor "Szín beállítása"> <!ENTITY zotero.tagColorChooser.setColor "Szín beállítása">
@ -161,9 +161,9 @@
<!ENTITY zotero.bibliography.title "Bibliográfia létrehozása"> <!ENTITY zotero.bibliography.title "Bibliográfia létrehozása">
<!ENTITY zotero.bibliography.style.label "Hivatkozási stílus:"> <!ENTITY zotero.bibliography.style.label "Hivatkozási stílus:">
<!ENTITY zotero.bibliography.outputMode "Output Mode:"> <!ENTITY zotero.bibliography.outputMode "Kimeneti mód:">
<!ENTITY zotero.bibliography.bibliography "Bibliography"> <!ENTITY zotero.bibliography.bibliography "Bibliográfia">
<!ENTITY zotero.bibliography.outputMethod "Output Method:"> <!ENTITY zotero.bibliography.outputMethod "Kimeneti metódus:">
<!ENTITY zotero.bibliography.saveAsRTF.label "Mentés RTF-ként"> <!ENTITY zotero.bibliography.saveAsRTF.label "Mentés RTF-ként">
<!ENTITY zotero.bibliography.saveAsHTML.label "Mentés HTML-ként"> <!ENTITY zotero.bibliography.saveAsHTML.label "Mentés HTML-ként">
<!ENTITY zotero.bibliography.copyToClipboard.label "Másolás a vágólapra"> <!ENTITY zotero.bibliography.copyToClipboard.label "Másolás a vágólapra">
@ -217,7 +217,7 @@
<!ENTITY zotero.integration.prefs.automaticJournalAbbeviations.label "Automatically abbreviate journal titles"> <!ENTITY zotero.integration.prefs.automaticJournalAbbeviations.label "Automatically abbreviate journal titles">
<!ENTITY zotero.integration.prefs.automaticJournalAbbeviations.caption "MEDLINE journal abbreviations will be automatically generated using journal titles. The “Journal Abbr” field will be ignored."> <!ENTITY zotero.integration.prefs.automaticJournalAbbeviations.caption "MEDLINE journal abbreviations will be automatically generated using journal titles. The “Journal Abbr” field will be ignored.">
<!ENTITY zotero.integration.prefs.storeReferences.label "Store references in document"> <!ENTITY zotero.integration.prefs.storeReferences.label "A dokumentum tárolt hivatkozásai">
<!ENTITY zotero.integration.prefs.storeReferences.caption "Storing references in your document slightly increases file size, but will allow you to share your document with others without using a Zotero group. Zotero 3.0 or later is required to update documents created with this option."> <!ENTITY zotero.integration.prefs.storeReferences.caption "Storing references in your document slightly increases file size, but will allow you to share your document with others without using a Zotero group. Zotero 3.0 or later is required to update documents created with this option.">
<!ENTITY zotero.integration.showEditor.label "Editor megjelenítése"> <!ENTITY zotero.integration.showEditor.label "Editor megjelenítése">
@ -246,7 +246,7 @@
<!ENTITY zotero.merge.deleted "Deleted"> <!ENTITY zotero.merge.deleted "Deleted">
<!ENTITY zotero.proxy.recognized.title "Proxy felismerve"> <!ENTITY zotero.proxy.recognized.title "Proxy felismerve">
<!ENTITY zotero.proxy.recognized.warning "Only add proxies linked from your library, school, or corporate website"> <!ENTITY zotero.proxy.recognized.warning "Csak a könyvtárból, iskolából vagy vállalati weboldalról linkelt proxy-t adható hozzá">
<!ENTITY zotero.proxy.recognized.warning.secondary "Adding other proxies allows malicious sites to masquerade as sites you trust."> <!ENTITY zotero.proxy.recognized.warning.secondary "Adding other proxies allows malicious sites to masquerade as sites you trust.">
<!ENTITY zotero.proxy.recognized.disable.label "Ne irányítsa át automatikusan a kéréseket az előzőleg felismert proxyikra."> <!ENTITY zotero.proxy.recognized.disable.label "Ne irányítsa át automatikusan a kéréseket az előzőleg felismert proxyikra.">
<!ENTITY zotero.proxy.recognized.ignore.label "Elutasít"> <!ENTITY zotero.proxy.recognized.ignore.label "Elutasít">
@ -274,7 +274,7 @@
<!ENTITY zotero.rtfScan.formatPage.label "Hivatkozás formázása"> <!ENTITY zotero.rtfScan.formatPage.label "Hivatkozás formázása">
<!ENTITY zotero.rtfScan.formatPage.description "A Zotero feldolgozza és formázza az RTF fájlt. Kérem várjon."> <!ENTITY zotero.rtfScan.formatPage.description "A Zotero feldolgozza és formázza az RTF fájlt. Kérem várjon.">
<!ENTITY zotero.rtfScan.completePage.label "Az RTF átvizsgálása befejeződött"> <!ENTITY zotero.rtfScan.completePage.label "Az RTF átvizsgálása befejeződött">
<!ENTITY zotero.rtfScan.completePage.description "Your document has now been scanned and processed. Please ensure that it is formatted correctly."> <!ENTITY zotero.rtfScan.completePage.description "A dokumentum átvizsgálása és feldolgozása megtörtént. Győződjön meg róla, hogy megfelelően van formázva.">
<!ENTITY zotero.rtfScan.inputFile.label "Bemeneti fájl"> <!ENTITY zotero.rtfScan.inputFile.label "Bemeneti fájl">
<!ENTITY zotero.rtfScan.outputFile.label "Kimeneti fájl"> <!ENTITY zotero.rtfScan.outputFile.label "Kimeneti fájl">
@ -282,5 +282,11 @@
<!ENTITY zotero.file.noneSelected.label "Nincs fájl kiválasztva"> <!ENTITY zotero.file.noneSelected.label "Nincs fájl kiválasztva">
<!ENTITY zotero.downloadManager.label "Mentés Zotero-ba"> <!ENTITY zotero.downloadManager.label "Mentés Zotero-ba">
<!ENTITY zotero.downloadManager.saveToLibrary.description "Attachments cannot be saved to the currently selected library. This item will be saved to your library instead."> <!ENTITY zotero.downloadManager.saveToLibrary.description "A csatolmányok nem menthetőek a jelenleg kiválasztott könyvtárba. Ez az elem a saját könyvtárába lesz mentve.">
<!ENTITY zotero.downloadManager.noPDFTools.description "To use this feature, you must first install the PDF tools in the Search pane of the Zotero preferences."> <!ENTITY zotero.downloadManager.noPDFTools.description "Ahhoz, hogy ezt a tulajdonságot használja, először telepítenie kell a PDF tools-t a Zotero beállítások keresőpaneljén.">
<!ENTITY zotero.attachLink.title "Attach Link to URI">
<!ENTITY zotero.attachLink.label.link "Link:">
<!ENTITY zotero.attachLink.label.title "Cím:">

View File

@ -17,7 +17,7 @@ general.errorHasOccurred=Hiba lépett fel.
general.unknownErrorOccurred=Ismeretlen hiba. general.unknownErrorOccurred=Ismeretlen hiba.
general.invalidResponseServer=Érvénytelen válasz a szervertől. general.invalidResponseServer=Érvénytelen válasz a szervertől.
general.tryAgainLater=Kérem, próbálkozzon újra néhány perc múlva. general.tryAgainLater=Kérem, próbálkozzon újra néhány perc múlva.
general.serverError=The server returned an error. Please try again. general.serverError=A szerver hibába fordult. Kérem próbálja újra.
general.restartFirefox=Indítsa újra a Firefoxot. general.restartFirefox=Indítsa újra a Firefoxot.
general.restartFirefoxAndTryAgain=Indítsa újra a Firefoxot és próbálja meg újra. general.restartFirefoxAndTryAgain=Indítsa újra a Firefoxot és próbálja meg újra.
general.checkForUpdate=Frissítések keresése general.checkForUpdate=Frissítések keresése
@ -40,7 +40,7 @@ general.character.singular=karakter
general.character.plural=karakter general.character.plural=karakter
general.create=Új general.create=Új
general.delete=Törlés general.delete=Törlés
general.moreInformation=More Information general.moreInformation=További információ
general.seeForMoreInformation=A %S bővebb információkat tartalmaz. general.seeForMoreInformation=A %S bővebb információkat tartalmaz.
general.enable=Bekapcsolás general.enable=Bekapcsolás
general.disable=Kikapcsolás general.disable=Kikapcsolás
@ -83,13 +83,13 @@ errorReport.reportErrors=Hibák jelentése...
errorReport.reportInstructions=A hiba jelentéséhez válassza a Műveletek menü "%S" menüpontját. errorReport.reportInstructions=A hiba jelentéséhez válassza a Műveletek menü "%S" menüpontját.
errorReport.followingReportWillBeSubmitted=A következő jelentés kerül elküldésre: errorReport.followingReportWillBeSubmitted=A következő jelentés kerül elküldésre:
errorReport.noErrorsLogged=A %S indítása óta nem jelentkeztek hibák. errorReport.noErrorsLogged=A %S indítása óta nem jelentkeztek hibák.
errorReport.advanceMessage=Press %S to send the report to the Zotero developers. errorReport.advanceMessage=Nyomja meg a %S gombot, hogy elküldje a jelentést a Zotero fejlesztőinek.
errorReport.stepsToReproduce=Hiba reprodukálásához szükséges lépések: errorReport.stepsToReproduce=Hiba reprodukálásához szükséges lépések:
errorReport.expectedResult=Elvárt működés: errorReport.expectedResult=Elvárt működés:
errorReport.actualResult=Tényleges működés: errorReport.actualResult=Tényleges működés:
errorReport.noNetworkConnection=Nincs hálózati kapcsolat errorReport.noNetworkConnection=Nincs hálózati kapcsolat
errorReport.invalidResponseRepository=Invalid response from repository errorReport.invalidResponseRepository=Érvénytelen válasz a tárolótól
errorReport.repoCannotBeContacted=Repository cannot be contacted errorReport.repoCannotBeContacted=Nem lehet kapcsolatba lépni a tárolóval
attachmentBasePath.selectDir=Choose Base Directory attachmentBasePath.selectDir=Choose Base Directory
@ -195,8 +195,8 @@ tagColorChooser.maxTags=Up to %S tags in each library can have colors assigned.
pane.items.loading=Elemek listájának betöltése... pane.items.loading=Elemek listájának betöltése...
pane.items.columnChooser.moreColumns=More Columns pane.items.columnChooser.moreColumns=More Columns
pane.items.columnChooser.secondarySort=Secondary Sort (%S) pane.items.columnChooser.secondarySort=Secondary Sort (%S)
pane.items.attach.link.uri.title=Link csatolása az URI-hez 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=Adja meg az URI-t: pane.items.attach.link.uri.file=To attach a link to a file, please use “%S”.
pane.items.trash.title=Áthelyezés a Kukába pane.items.trash.title=Áthelyezés a Kukába
pane.items.trash=A Kukába helyezés megerősítése? pane.items.trash=A Kukába helyezés megerősítése?
pane.items.trash.multiple=A Kukába helyezés megerősítése? pane.items.trash.multiple=A Kukába helyezés megerősítése?
@ -473,8 +473,8 @@ fileTypes.document=Dokumentum
save.attachment=Pillanatfelvétel mentése... save.attachment=Pillanatfelvétel mentése...
save.link=Hivatkozás mentése... save.link=Hivatkozás mentése...
save.link.error=Hiba történt a link mentésekor. save.link.error=Hiba történt a link mentésekor.
save.error.cannotMakeChangesToCollection=You cannot make changes to the currently selected collection. save.error.cannotMakeChangesToCollection=Nem módosíthatja a jelenleg kiválasztott gyűjteményt.
save.error.cannotAddFilesToCollection=You cannot add files to the currently selected collection. save.error.cannotAddFilesToCollection=Nem adhat hozzá fájlokat a jelenleg kiválasztott gyűjteményhez.
ingester.saveToZotero=Mentés a Zoteroba ingester.saveToZotero=Mentés a Zoteroba
ingester.saveToZoteroUsing=Mentés Zotero-ba "%S" használatával ingester.saveToZoteroUsing=Mentés Zotero-ba "%S" használatával
@ -506,12 +506,12 @@ db.dbRestoreFailed=A Zotero adatbázis hibás, és az adatok automatikus vissza
db.integrityCheck.passed=Nincsenek hibák az adatbázisban. db.integrityCheck.passed=Nincsenek hibák az adatbázisban.
db.integrityCheck.failed=Hibák a Zotero adatbázisban! db.integrityCheck.failed=Hibák a Zotero adatbázisban!
db.integrityCheck.dbRepairTool=Használhatja az adatbázsi-helyerállító eszközt a következő oldalon https://www.zotero.org/utils/dbfix/ hogy megkísérelje kijavítani a hibákat. db.integrityCheck.dbRepairTool=Használhatja az adatbázsi-helyerállító eszközt a következő oldalon https://www.zotero.org/utils/dbfix/ hogy megkísérelje kijavítani a hibákat.
db.integrityCheck.repairAttempt=Zotero can attempt to correct these errors. db.integrityCheck.repairAttempt=A Zotero megpróbálhatja kijavítani ezeket a hibákat
db.integrityCheck.appRestartNeeded=%S will need to be restarted. db.integrityCheck.appRestartNeeded=%S-t újra kell indítani.
db.integrityCheck.fixAndRestart=Hibák javítása és újraindítás %S db.integrityCheck.fixAndRestart=Hibák javítása és újraindítás %S
db.integrityCheck.errorsFixed=The errors in your Zotero database have been corrected. db.integrityCheck.errorsFixed=Az ön Zotero adatbázisának hibái javításra kerültek
db.integrityCheck.errorsNotFixed=Zotero was unable to correct all the errors in your database. db.integrityCheck.errorsNotFixed=A Zotero nem tudta kijavítani az összes hibát az ön adatbázisában.
db.integrityCheck.reportInForums=You can report this problem in the Zotero Forums. db.integrityCheck.reportInForums=Bejelentheti a problémát a Zotero Fórumain.
zotero.preferences.update.updated=Frissítve zotero.preferences.update.updated=Frissítve
zotero.preferences.update.upToDate=Nincs frissítés zotero.preferences.update.upToDate=Nincs frissítés
@ -569,8 +569,8 @@ zotero.preferences.advanced.resetTranslators.changesLost=Az új vagy módosítot
zotero.preferences.advanced.resetStyles=Stílusok visszaállítása zotero.preferences.advanced.resetStyles=Stílusok visszaállítása
zotero.preferences.advanced.resetStyles.changesLost=Az új vagy módosított stílusok elvesznek. zotero.preferences.advanced.resetStyles.changesLost=Az új vagy módosított stílusok elvesznek.
zotero.preferences.advanced.debug.title=Debug Output Submitted zotero.preferences.advanced.debug.title=A hibakeresés eredménye elküldve
zotero.preferences.advanced.debug.sent=Debug output has been sent to the Zotero server.\n\nThe Debug ID is D%S. zotero.preferences.advanced.debug.sent=A hibakeresés eredménye elküldve a Zotero szervernek\n\nA hibaazonosító D%S.
zotero.preferences.advanced.debug.error=An error occurred sending debug output. zotero.preferences.advanced.debug.error=An error occurred sending debug output.
dragAndDrop.existingFiles=Az alábbi fájlok már léteznek a célmappában, ezért nem kerültek bemásolásra. dragAndDrop.existingFiles=Az alábbi fájlok már léteznek a célmappában, ezért nem kerültek bemásolásra.
@ -582,7 +582,7 @@ fileInterface.import=Importálás
fileInterface.export=Exportálás fileInterface.export=Exportálás
fileInterface.exportedItems=Exportált elemek fileInterface.exportedItems=Exportált elemek
fileInterface.imported=Importálva fileInterface.imported=Importálva
fileInterface.unsupportedFormat=The selected file is not in a supported format. fileInterface.unsupportedFormat=A kiválasztott fájl formátuma nem támogatott.
fileInterface.viewSupportedFormats=Támogatott formátumok megtekintése… fileInterface.viewSupportedFormats=Támogatott formátumok megtekintése…
fileInterface.untitledBibliography=Cím nélküli bibliográfia fileInterface.untitledBibliography=Cím nélküli bibliográfia
fileInterface.bibliographyHTMLTitle=Bibliográfia fileInterface.bibliographyHTMLTitle=Bibliográfia
@ -725,7 +725,7 @@ integration.upgradeWarning=Your document must be permanently upgraded in order t
integration.error.newerDocumentVersion=Your document was created with a newer version of Zotero (%1$S) than the currently installed version (%1$S). Please upgrade Zotero before editing this document. integration.error.newerDocumentVersion=Your document was created with a newer version of Zotero (%1$S) than the currently installed version (%1$S). Please upgrade Zotero before editing this document.
integration.corruptField=The Zotero field code corresponding to this citation, which tells Zotero which item in your library this citation represents, has been corrupted. Would you like to reselect the item? integration.corruptField=The Zotero field code corresponding to this citation, which tells Zotero which item in your library this citation represents, has been corrupted. Would you like to reselect the item?
integration.corruptField.description=Clicking "No" will delete the field codes for citations containing this item, preserving the citation text but potentially deleting it from your bibliography. integration.corruptField.description=Clicking "No" will delete the field codes for citations containing this item, preserving the citation text but potentially deleting it from your bibliography.
integration.corruptBibliography=The Zotero field code for your bibliography is corrupted. Should Zotero clear this field code and generate a new bibliography? integration.corruptBibliography=A bibliográfiájának Zotero mezőkódja hibás. Szeretné ha a Zotero javítaná a mezőkódot és generálna egy új bibliográfiát?
integration.corruptBibliography.description=All items cited in the text will appear in the new bibliography, but modifications you made in the "Edit Bibliography" dialog will be lost. integration.corruptBibliography.description=All items cited in the text will appear in the new bibliography, but modifications you made in the "Edit Bibliography" dialog will be lost.
integration.citationChanged=Módosította ezt a hivatkozást, amióta a Zotero generálta. Megtartja a módosításokat és megakadályozza a jövőbeli frissítésüket? integration.citationChanged=Módosította ezt a hivatkozást, amióta a Zotero generálta. Megtartja a módosításokat és megakadályozza a jövőbeli frissítésüket?
integration.citationChanged.description=Kattintson az „Igen” gombra, ha nem akarja, hogy a Zotero frissítse ezt a hivatkozást további hivatkozások hozzáadásakor, stílusváltáskor, vagy az elem módosításakor. Ha a „Nem”-re kattint elvesznek a módosításai. integration.citationChanged.description=Kattintson az „Igen” gombra, ha nem akarja, hogy a Zotero frissítse ezt a hivatkozást további hivatkozások hozzáadásakor, stílusváltáskor, vagy az elem módosításakor. Ha a „Nem”-re kattint elvesznek a módosításai.

View File

@ -284,3 +284,9 @@
<!ENTITY zotero.downloadManager.label "Simpan ke Zotero"> <!ENTITY zotero.downloadManager.label "Simpan ke Zotero">
<!ENTITY zotero.downloadManager.saveToLibrary.description "Lampiran tidak dapat disimpan ke dalam perpustakaan yang saat ini terpilih. Sebaliknya, item ini akan disimpan ke dalam perpustakaan Anda."> <!ENTITY zotero.downloadManager.saveToLibrary.description "Lampiran tidak dapat disimpan ke dalam perpustakaan yang saat ini terpilih. Sebaliknya, item ini akan disimpan ke dalam perpustakaan Anda.">
<!ENTITY zotero.downloadManager.noPDFTools.description "Untuk menggunakan fitur ini, Anda harus menginstal aplikasi PDF dalam preferensi Zotero terlebih dahulu."> <!ENTITY zotero.downloadManager.noPDFTools.description "Untuk menggunakan fitur ini, Anda harus menginstal aplikasi PDF dalam preferensi Zotero terlebih dahulu.">
<!ENTITY zotero.attachLink.title "Attach Link to URI">
<!ENTITY zotero.attachLink.label.link "Link:">
<!ENTITY zotero.attachLink.label.title "Title:">

View File

@ -195,8 +195,8 @@ tagColorChooser.maxTags=Up to %S tags in each library can have colors assigned.
pane.items.loading=Memuat daftar item... pane.items.loading=Memuat daftar item...
pane.items.columnChooser.moreColumns=More Columns pane.items.columnChooser.moreColumns=More Columns
pane.items.columnChooser.secondarySort=Secondary Sort (%S) pane.items.columnChooser.secondarySort=Secondary Sort (%S)
pane.items.attach.link.uri.title=Attach Link to URI 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=Enter a URI: pane.items.attach.link.uri.file=To attach a link to a file, please use “%S”.
pane.items.trash.title=Pindahkan ke Keranjang Sampah pane.items.trash.title=Pindahkan ke Keranjang Sampah
pane.items.trash=Apakah Anda yakin ingin memindahkan item terpilih ke Keranjang Sampah? pane.items.trash=Apakah Anda yakin ingin memindahkan item terpilih ke Keranjang Sampah?
pane.items.trash.multiple=Apakah Anda yakin ingin memindahkan item-item terpilih ke Keranjang Sampah? pane.items.trash.multiple=Apakah Anda yakin ingin memindahkan item-item terpilih ke Keranjang Sampah?

View File

@ -54,9 +54,9 @@
<!ENTITY zotero.preferences.sync.syncServer "Zotero samhæfingarþjónn"> <!ENTITY zotero.preferences.sync.syncServer "Zotero samhæfingarþjónn">
<!ENTITY zotero.preferences.sync.createAccount "Nýr notandi"> <!ENTITY zotero.preferences.sync.createAccount "Nýr notandi">
<!ENTITY zotero.preferences.sync.lostPassword "Týnt lykilorð?"> <!ENTITY zotero.preferences.sync.lostPassword "Týnt lykilorð?">
<!ENTITY zotero.preferences.sync.syncAutomatically "Sjamhæfa sjálfkrafa"> <!ENTITY zotero.preferences.sync.syncAutomatically "Samhæfa sjálfkrafa">
<!ENTITY zotero.preferences.sync.syncFullTextContent "Sync full-text content"> <!ENTITY zotero.preferences.sync.syncFullTextContent "Samhæfa innihald skjala">
<!ENTITY zotero.preferences.sync.syncFullTextContent.desc "Zotero can sync the full-text content of files in your Zotero libraries with zotero.org and other linked devices, allowing you to easily search for your files wherever you are. The full-text content of your files will not be shared publicly."> <!ENTITY zotero.preferences.sync.syncFullTextContent.desc "Zotero getur samhæft innihald skjala í Zotero safninu þínu við zotero.org og önnur nettengd tæki sem gerir þér kleift að leita að þínum skjölum hvar sem þú ert. Innihaldi skjalanna er ekki deilt með öðrum.">
<!ENTITY zotero.preferences.sync.about "Um samhæfingu"> <!ENTITY zotero.preferences.sync.about "Um samhæfingu">
<!ENTITY zotero.preferences.sync.fileSyncing "Samhæfing skráa"> <!ENTITY zotero.preferences.sync.fileSyncing "Samhæfing skráa">
<!ENTITY zotero.preferences.sync.fileSyncing.url "slóð:"> <!ENTITY zotero.preferences.sync.fileSyncing.url "slóð:">

View File

@ -1,6 +1,6 @@
<!ENTITY zotero.search.name "Nafn:"> <!ENTITY zotero.search.name "Nafn:">
<!ENTITY zotero.search.searchInLibrary "Search in library:"> <!ENTITY zotero.search.searchInLibrary "Leita í safni:">
<!ENTITY zotero.search.joinMode.prefix "Leita að"> <!ENTITY zotero.search.joinMode.prefix "Leita að">
<!ENTITY zotero.search.joinMode.any "einhverju"> <!ENTITY zotero.search.joinMode.any "einhverju">
@ -14,7 +14,7 @@
<!ENTITY zotero.search.textModes.phrase "Setningaliður"> <!ENTITY zotero.search.textModes.phrase "Setningaliður">
<!ENTITY zotero.search.textModes.phraseBinary "Setningaliður (með stafrænum skrám)"> <!ENTITY zotero.search.textModes.phraseBinary "Setningaliður (með stafrænum skrám)">
<!ENTITY zotero.search.textModes.regexp "Regexp"> <!ENTITY zotero.search.textModes.regexp "Regexp">
<!ENTITY zotero.search.textModes.regexpCS "Regexp (case-sensitive)"> <!ENTITY zotero.search.textModes.regexpCS "Leitartexti (næmur fyrir há- og lágstöfum)">
<!ENTITY zotero.search.date.units.days "dagar"> <!ENTITY zotero.search.date.units.days "dagar">
<!ENTITY zotero.search.date.units.months "mánuðir"> <!ENTITY zotero.search.date.units.months "mánuðir">

Some files were not shown because too many files have changed in this diff Show More